@sbb-esta/lyne-elements 2.11.0 → 3.0.0-next.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 (787) hide show
  1. package/_index.scss +1 -1
  2. package/action-group/action-group.component.d.ts.map +1 -1
  3. package/alert/alert/alert.component.d.ts +2 -7
  4. package/alert/alert/alert.component.d.ts.map +1 -1
  5. package/alert/alert/alert.component.js +55 -67
  6. package/autocomplete/autocomplete-base-element.d.ts +26 -17
  7. package/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  8. package/autocomplete/autocomplete-base-element.js +98 -70
  9. package/autocomplete/autocomplete.component.d.ts +3 -2
  10. package/autocomplete/autocomplete.component.d.ts.map +1 -1
  11. package/autocomplete/autocomplete.component.js +16 -19
  12. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.d.ts +3 -2
  13. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.d.ts.map +1 -1
  14. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +22 -25
  15. package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.d.ts +1 -0
  16. package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.d.ts.map +1 -1
  17. package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.js +6 -7
  18. package/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.d.ts +4 -1
  19. package/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.d.ts.map +1 -1
  20. package/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.js +11 -13
  21. package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.d.ts +4 -6
  22. package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.d.ts.map +1 -1
  23. package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +25 -29
  24. package/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.d.ts +4 -1
  25. package/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.d.ts.map +1 -1
  26. package/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.js +10 -12
  27. package/autocomplete.js +4 -5
  28. package/breadcrumb/breadcrumb/breadcrumb.component.js +1 -1
  29. package/breadcrumb/breadcrumb-group/breadcrumb-group.component.d.ts +1 -0
  30. package/breadcrumb/breadcrumb-group/breadcrumb-group.component.d.ts.map +1 -1
  31. package/breadcrumb/breadcrumb-group/breadcrumb-group.component.js +9 -12
  32. package/button/accent-button/accent-button.component.d.ts +1 -0
  33. package/button/accent-button/accent-button.component.d.ts.map +1 -1
  34. package/button/button/button.component.d.ts +1 -0
  35. package/button/button/button.component.d.ts.map +1 -1
  36. package/button/common/button-common.d.ts +4 -6
  37. package/button/common/button-common.d.ts.map +1 -1
  38. package/button/mini-button/mini-button.component.d.ts +1 -0
  39. package/button/mini-button/mini-button.component.d.ts.map +1 -1
  40. package/button/secondary-button/secondary-button.component.d.ts +1 -0
  41. package/button/secondary-button/secondary-button.component.d.ts.map +1 -1
  42. package/button/transparent-button/transparent-button.component.d.ts +1 -0
  43. package/button/transparent-button/transparent-button.component.d.ts.map +1 -1
  44. package/calendar/calendar.component.d.ts +16 -14
  45. package/calendar/calendar.component.d.ts.map +1 -1
  46. package/calendar/calendar.component.js +132 -120
  47. package/card/card-badge/card-badge.component.d.ts +4 -1
  48. package/card/card-badge/card-badge.component.d.ts.map +1 -1
  49. package/card/card-badge/card-badge.component.js +8 -11
  50. package/card/card-button/card-button.component.d.ts +1 -0
  51. package/card/card-button/card-button.component.d.ts.map +1 -1
  52. package/card/common/card-action-common.d.ts.map +1 -1
  53. package/card/common/card-action-common.js +21 -24
  54. package/checkbox/checkbox/checkbox.component.d.ts +4 -1
  55. package/checkbox/checkbox/checkbox.component.d.ts.map +1 -1
  56. package/checkbox/checkbox/checkbox.component.js +48 -38
  57. package/checkbox/checkbox-panel/checkbox-panel.component.d.ts +4 -1
  58. package/checkbox/checkbox-panel/checkbox-panel.component.d.ts.map +1 -1
  59. package/checkbox/checkbox-panel/checkbox-panel.component.js +46 -36
  60. package/checkbox/common/checkbox-common.d.ts +4 -2
  61. package/checkbox/common/checkbox-common.d.ts.map +1 -1
  62. package/chip/chip/chip.component.d.ts +5 -6
  63. package/chip/chip/chip.component.d.ts.map +1 -1
  64. package/chip/chip/chip.component.js +37 -50
  65. package/chip/chip-group/chip-group.component.d.ts +22 -10
  66. package/chip/chip-group/chip-group.component.d.ts.map +1 -1
  67. package/chip/chip-group/chip-group.component.js +131 -116
  68. package/clock/clock.component.d.ts +1 -1
  69. package/clock/clock.component.d.ts.map +1 -1
  70. package/clock/clock.component.js +2 -2
  71. package/container/sticky-bar/sticky-bar.component.d.ts.map +1 -1
  72. package/container/sticky-bar/sticky-bar.component.js +10 -13
  73. package/core/a11y/focus.d.ts +0 -32
  74. package/core/a11y/focus.d.ts.map +1 -1
  75. package/core/a11y/focus.js +3 -65
  76. package/core/a11y/input-modality-detector.d.ts +0 -5
  77. package/core/a11y/input-modality-detector.d.ts.map +1 -1
  78. package/core/a11y/input-modality-detector.js +16 -27
  79. package/core/a11y/interactivity-checker.d.ts +0 -11
  80. package/core/a11y/interactivity-checker.d.ts.map +1 -1
  81. package/core/a11y/interactivity-checker.js +0 -1
  82. package/core/a11y/live-announcer.d.ts +62 -0
  83. package/core/a11y/live-announcer.d.ts.map +1 -0
  84. package/core/a11y/live-announcer.js +47 -0
  85. package/core/a11y.d.ts +1 -0
  86. package/core/a11y.d.ts.map +1 -1
  87. package/core/a11y.js +19 -21
  88. package/core/base-elements/action-base-element.d.ts +3 -1
  89. package/core/base-elements/action-base-element.d.ts.map +1 -1
  90. package/core/base-elements/action-base-element.js +12 -11
  91. package/core/base-elements/button-base-element.d.ts +25 -18
  92. package/core/base-elements/button-base-element.d.ts.map +1 -1
  93. package/core/base-elements/button-base-element.js +97 -65
  94. package/core/base-elements/open-close-base-element.d.ts +3 -1
  95. package/core/base-elements/open-close-base-element.d.ts.map +1 -1
  96. package/core/base-elements/open-close-base-element.js +2 -1
  97. package/core/base-elements.js +9 -8
  98. package/core/controllers/inert-controller.d.ts.map +1 -1
  99. package/core/controllers/inert-controller.js +3 -3
  100. package/core/controllers.d.ts +0 -1
  101. package/core/controllers.d.ts.map +1 -1
  102. package/core/controllers.js +17 -19
  103. package/core/datetime/date-adapter.d.ts +2 -2
  104. package/core/datetime/date-adapter.d.ts.map +1 -1
  105. package/core/datetime/date-adapter.js +1 -1
  106. package/core/datetime/native-date-adapter.d.ts +2 -3
  107. package/core/datetime/native-date-adapter.d.ts.map +1 -1
  108. package/core/datetime/native-date-adapter.js +71 -75
  109. package/core/decorators/id-reference.d.ts +11 -0
  110. package/core/decorators/id-reference.d.ts.map +1 -0
  111. package/core/decorators/id-reference.js +79 -0
  112. package/core/decorators/plain-date.d.ts +23 -0
  113. package/core/decorators/plain-date.d.ts.map +1 -0
  114. package/core/decorators/plain-date.js +29 -0
  115. package/core/decorators.d.ts +2 -2
  116. package/core/decorators.d.ts.map +1 -1
  117. package/core/decorators.js +17 -16
  118. package/core/dom.d.ts +0 -2
  119. package/core/dom.d.ts.map +1 -1
  120. package/core/dom.js +22 -26
  121. package/core/eventing/forward-event.d.ts +0 -6
  122. package/core/eventing/forward-event.d.ts.map +1 -1
  123. package/core/eventing/forward-event.js +4 -6
  124. package/core/eventing.js +12 -13
  125. package/core/i18n/i18n.d.ts +4 -1
  126. package/core/i18n/i18n.d.ts.map +1 -1
  127. package/core/i18n/i18n.js +106 -88
  128. package/core/i18n.js +42 -39
  129. package/core/interfaces/types.d.ts +0 -1
  130. package/core/interfaces/types.d.ts.map +1 -1
  131. package/core/mixins/animation-complete-mixin.d.ts +1 -1
  132. package/core/mixins/animation-complete-mixin.d.ts.map +1 -1
  133. package/core/mixins/disabled-mixin.d.ts +2 -2
  134. package/core/mixins/disabled-mixin.d.ts.map +1 -1
  135. package/core/mixins/element-internals-mixin.d.ts +15 -0
  136. package/core/mixins/element-internals-mixin.d.ts.map +1 -0
  137. package/core/mixins/element-internals-mixin.js +41 -0
  138. package/core/mixins/form-associated-checkbox-mixin.d.ts +7 -13
  139. package/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -1
  140. package/core/mixins/form-associated-checkbox-mixin.js +30 -26
  141. package/core/mixins/form-associated-input-mixin.d.ts +15 -9
  142. package/core/mixins/form-associated-input-mixin.d.ts.map +1 -1
  143. package/core/mixins/form-associated-input-mixin.js +65 -49
  144. package/core/mixins/form-associated-mixin.d.ts +8 -7
  145. package/core/mixins/form-associated-mixin.d.ts.map +1 -1
  146. package/core/mixins/form-associated-mixin.js +49 -41
  147. package/core/mixins/form-associated-radio-button-mixin.d.ts +6 -14
  148. package/core/mixins/form-associated-radio-button-mixin.d.ts.map +1 -1
  149. package/core/mixins/form-associated-radio-button-mixin.js +32 -23
  150. package/core/mixins/readonly-mixin.d.ts +10 -0
  151. package/core/mixins/readonly-mixin.d.ts.map +1 -0
  152. package/core/mixins/readonly-mixin.js +30 -0
  153. package/core/mixins/required-mixin.d.ts +2 -2
  154. package/core/mixins/required-mixin.d.ts.map +1 -1
  155. package/core/mixins.d.ts +2 -0
  156. package/core/mixins.d.ts.map +1 -1
  157. package/core/mixins.js +25 -21
  158. package/core/styles/core.scss +38 -14
  159. package/core/styles/mixins/font-face.scss +6 -18
  160. package/core/styles/mixins/link.scss +3 -7
  161. package/core/styles/mixins/lists.scss +0 -63
  162. package/core/styles/mixins/overlay.scss +7 -1
  163. package/core/styles/mixins/table.scss +0 -7
  164. package/core/styles/table.scss +0 -4
  165. package/core/testing.d.ts +0 -1
  166. package/core/testing.d.ts.map +1 -1
  167. package/core/testing.js +8 -10
  168. package/core.css +41 -17
  169. package/custom-elements.json +13180 -6120
  170. package/date-input/date-input.component.d.ts +12 -14
  171. package/date-input/date-input.component.d.ts.map +1 -1
  172. package/date-input/date-input.component.js +53 -57
  173. package/datepicker/common/datepicker-association-controllers.d.ts.map +1 -1
  174. package/datepicker/common/datepicker-association-controllers.js +7 -7
  175. package/datepicker/common/datepicker-button.d.ts +0 -12
  176. package/datepicker/common/datepicker-button.d.ts.map +1 -1
  177. package/datepicker/common/datepicker-button.js +45 -59
  178. package/datepicker/datepicker/datepicker.component.d.ts +3 -20
  179. package/datepicker/datepicker/datepicker.component.d.ts.map +1 -1
  180. package/datepicker/datepicker/datepicker.component.js +85 -95
  181. package/datepicker/datepicker-next-day/datepicker-next-day.component.d.ts +2 -0
  182. package/datepicker/datepicker-next-day/datepicker-next-day.component.d.ts.map +1 -1
  183. package/datepicker/datepicker-next-day/datepicker-next-day.component.js +12 -12
  184. package/datepicker/datepicker-previous-day/datepicker-previous-day.component.d.ts +2 -0
  185. package/datepicker/datepicker-previous-day/datepicker-previous-day.component.d.ts.map +1 -1
  186. package/datepicker/datepicker-previous-day/datepicker-previous-day.component.js +13 -13
  187. package/datepicker/datepicker-toggle/datepicker-toggle.component.d.ts +0 -8
  188. package/datepicker/datepicker-toggle/datepicker-toggle.component.d.ts.map +1 -1
  189. package/datepicker/datepicker-toggle/datepicker-toggle.component.js +51 -65
  190. package/datepicker/datepicker.js +2 -4
  191. package/datepicker.js +10 -12
  192. package/development/action-group/action-group.component.d.ts.map +1 -1
  193. package/development/action-group/action-group.component.js +1 -1
  194. package/development/alert/alert/alert.component.d.ts +2 -7
  195. package/development/alert/alert/alert.component.d.ts.map +1 -1
  196. package/development/alert/alert/alert.component.js +8 -26
  197. package/development/autocomplete/autocomplete-base-element.d.ts +26 -17
  198. package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  199. package/development/autocomplete/autocomplete-base-element.js +69 -39
  200. package/development/autocomplete/autocomplete.component.d.ts +3 -2
  201. package/development/autocomplete/autocomplete.component.d.ts.map +1 -1
  202. package/development/autocomplete/autocomplete.component.js +5 -9
  203. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.d.ts +3 -2
  204. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.d.ts.map +1 -1
  205. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +5 -9
  206. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.d.ts +1 -0
  207. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.d.ts.map +1 -1
  208. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.js +2 -3
  209. package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.d.ts +4 -1
  210. package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.d.ts.map +1 -1
  211. package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.js +5 -7
  212. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.d.ts +4 -6
  213. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.d.ts.map +1 -1
  214. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +20 -19
  215. package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.d.ts +4 -1
  216. package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.d.ts.map +1 -1
  217. package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.js +5 -7
  218. package/development/autocomplete.js +2 -3
  219. package/development/breadcrumb/breadcrumb/breadcrumb.component.js +2 -2
  220. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.component.d.ts +1 -0
  221. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.component.d.ts.map +1 -1
  222. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.component.js +5 -8
  223. package/development/button/accent-button/accent-button.component.d.ts +1 -0
  224. package/development/button/accent-button/accent-button.component.d.ts.map +1 -1
  225. package/development/button/accent-button/accent-button.component.js +1 -1
  226. package/development/button/button/button.component.d.ts +1 -0
  227. package/development/button/button/button.component.d.ts.map +1 -1
  228. package/development/button/button/button.component.js +1 -1
  229. package/development/button/common/button-common.d.ts +4 -6
  230. package/development/button/common/button-common.d.ts.map +1 -1
  231. package/development/button/common/button-common.js +1 -1
  232. package/development/button/mini-button/mini-button.component.d.ts +1 -0
  233. package/development/button/mini-button/mini-button.component.d.ts.map +1 -1
  234. package/development/button/mini-button/mini-button.component.js +1 -1
  235. package/development/button/secondary-button/secondary-button.component.d.ts +1 -0
  236. package/development/button/secondary-button/secondary-button.component.d.ts.map +1 -1
  237. package/development/button/secondary-button/secondary-button.component.js +1 -1
  238. package/development/button/transparent-button/transparent-button.component.d.ts +1 -0
  239. package/development/button/transparent-button/transparent-button.component.d.ts.map +1 -1
  240. package/development/button/transparent-button/transparent-button.component.js +1 -1
  241. package/development/calendar/calendar.component.d.ts +16 -14
  242. package/development/calendar/calendar.component.d.ts.map +1 -1
  243. package/development/calendar/calendar.component.js +52 -32
  244. package/development/card/card-badge/card-badge.component.d.ts +4 -1
  245. package/development/card/card-badge/card-badge.component.d.ts.map +1 -1
  246. package/development/card/card-badge/card-badge.component.js +6 -8
  247. package/development/card/card-button/card-button.component.d.ts +1 -0
  248. package/development/card/card-button/card-button.component.d.ts.map +1 -1
  249. package/development/card/card-button/card-button.component.js +1 -1
  250. package/development/card/common/card-action-common.d.ts.map +1 -1
  251. package/development/card/common/card-action-common.js +6 -15
  252. package/development/checkbox/checkbox/checkbox.component.d.ts +4 -1
  253. package/development/checkbox/checkbox/checkbox.component.d.ts.map +1 -1
  254. package/development/checkbox/checkbox/checkbox.component.js +19 -4
  255. package/development/checkbox/checkbox-panel/checkbox-panel.component.d.ts +4 -1
  256. package/development/checkbox/checkbox-panel/checkbox-panel.component.d.ts.map +1 -1
  257. package/development/checkbox/checkbox-panel/checkbox-panel.component.js +20 -4
  258. package/development/checkbox/common/checkbox-common.d.ts +4 -2
  259. package/development/checkbox/common/checkbox-common.d.ts.map +1 -1
  260. package/development/checkbox/common/checkbox-common.js +1 -1
  261. package/development/chip/chip/chip.component.d.ts +5 -6
  262. package/development/chip/chip/chip.component.d.ts.map +1 -1
  263. package/development/chip/chip/chip.component.js +12 -31
  264. package/development/chip/chip-group/chip-group.component.d.ts +22 -10
  265. package/development/chip/chip-group/chip-group.component.d.ts.map +1 -1
  266. package/development/chip/chip-group/chip-group.component.js +52 -27
  267. package/development/clock/clock.component.d.ts +1 -1
  268. package/development/clock/clock.component.d.ts.map +1 -1
  269. package/development/clock/clock.component.js +3 -3
  270. package/development/container/sticky-bar/sticky-bar.component.d.ts.map +1 -1
  271. package/development/container/sticky-bar/sticky-bar.component.js +3 -5
  272. package/development/core/a11y/focus.d.ts +0 -32
  273. package/development/core/a11y/focus.d.ts.map +1 -1
  274. package/development/core/a11y/focus.js +2 -82
  275. package/development/core/a11y/input-modality-detector.d.ts +0 -5
  276. package/development/core/a11y/input-modality-detector.d.ts.map +1 -1
  277. package/development/core/a11y/input-modality-detector.js +2 -18
  278. package/development/core/a11y/interactivity-checker.d.ts +0 -11
  279. package/development/core/a11y/interactivity-checker.d.ts.map +1 -1
  280. package/development/core/a11y/interactivity-checker.js +1 -2
  281. package/development/core/a11y/live-announcer.d.ts +62 -0
  282. package/development/core/a11y/live-announcer.d.ts.map +1 -0
  283. package/development/core/a11y/live-announcer.js +87 -0
  284. package/development/core/a11y.d.ts +1 -0
  285. package/development/core/a11y.d.ts.map +1 -1
  286. package/development/core/a11y.js +7 -9
  287. package/development/core/base-elements/action-base-element.d.ts +3 -1
  288. package/development/core/base-elements/action-base-element.d.ts.map +1 -1
  289. package/development/core/base-elements/action-base-element.js +3 -2
  290. package/development/core/base-elements/button-base-element.d.ts +25 -18
  291. package/development/core/base-elements/button-base-element.d.ts.map +1 -1
  292. package/development/core/base-elements/button-base-element.js +105 -67
  293. package/development/core/base-elements/open-close-base-element.d.ts +3 -1
  294. package/development/core/base-elements/open-close-base-element.d.ts.map +1 -1
  295. package/development/core/base-elements/open-close-base-element.js +3 -2
  296. package/development/core/base-elements.js +2 -1
  297. package/development/core/controllers/inert-controller.d.ts.map +1 -1
  298. package/development/core/controllers/inert-controller.js +2 -2
  299. package/development/core/controllers.d.ts +0 -1
  300. package/development/core/controllers.d.ts.map +1 -1
  301. package/development/core/controllers.js +1 -3
  302. package/development/core/datetime/date-adapter.d.ts +2 -2
  303. package/development/core/datetime/date-adapter.d.ts.map +1 -1
  304. package/development/core/datetime/date-adapter.js +2 -2
  305. package/development/core/datetime/native-date-adapter.d.ts +2 -3
  306. package/development/core/datetime/native-date-adapter.d.ts.map +1 -1
  307. package/development/core/datetime/native-date-adapter.js +2 -6
  308. package/development/core/decorators/id-reference.d.ts +11 -0
  309. package/development/core/decorators/id-reference.d.ts.map +1 -0
  310. package/development/core/decorators/id-reference.js +123 -0
  311. package/development/core/decorators/plain-date.d.ts +23 -0
  312. package/development/core/decorators/plain-date.d.ts.map +1 -0
  313. package/development/core/decorators/plain-date.js +37 -0
  314. package/development/core/decorators.d.ts +2 -2
  315. package/development/core/decorators.d.ts.map +1 -1
  316. package/development/core/decorators.js +5 -4
  317. package/development/core/dom.d.ts +0 -2
  318. package/development/core/dom.d.ts.map +1 -1
  319. package/development/core/dom.js +1 -5
  320. package/development/core/eventing/forward-event.d.ts +0 -6
  321. package/development/core/eventing/forward-event.d.ts.map +1 -1
  322. package/development/core/eventing/forward-event.js +2 -4
  323. package/development/core/eventing.js +1 -2
  324. package/development/core/i18n/i18n.d.ts +4 -1
  325. package/development/core/i18n/i18n.d.ts.map +1 -1
  326. package/development/core/i18n/i18n.js +43 -22
  327. package/development/core/i18n.js +4 -1
  328. package/development/core/interfaces/types.d.ts +0 -1
  329. package/development/core/interfaces/types.d.ts.map +1 -1
  330. package/development/core/mixins/animation-complete-mixin.d.ts +1 -1
  331. package/development/core/mixins/animation-complete-mixin.d.ts.map +1 -1
  332. package/development/core/mixins/animation-complete-mixin.js +1 -1
  333. package/development/core/mixins/disabled-mixin.d.ts +2 -2
  334. package/development/core/mixins/disabled-mixin.d.ts.map +1 -1
  335. package/development/core/mixins/disabled-mixin.js +1 -1
  336. package/development/core/mixins/element-internals-mixin.d.ts +15 -0
  337. package/development/core/mixins/element-internals-mixin.d.ts.map +1 -0
  338. package/development/core/mixins/element-internals-mixin.js +59 -0
  339. package/development/core/mixins/form-associated-checkbox-mixin.d.ts +7 -13
  340. package/development/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -1
  341. package/development/core/mixins/form-associated-checkbox-mixin.js +8 -6
  342. package/development/core/mixins/form-associated-input-mixin.d.ts +15 -9
  343. package/development/core/mixins/form-associated-input-mixin.d.ts.map +1 -1
  344. package/development/core/mixins/form-associated-input-mixin.js +39 -20
  345. package/development/core/mixins/form-associated-mixin.d.ts +8 -7
  346. package/development/core/mixins/form-associated-mixin.d.ts.map +1 -1
  347. package/development/core/mixins/form-associated-mixin.js +31 -17
  348. package/development/core/mixins/form-associated-radio-button-mixin.d.ts +6 -14
  349. package/development/core/mixins/form-associated-radio-button-mixin.d.ts.map +1 -1
  350. package/development/core/mixins/form-associated-radio-button-mixin.js +20 -8
  351. package/development/core/mixins/readonly-mixin.d.ts +10 -0
  352. package/development/core/mixins/readonly-mixin.d.ts.map +1 -0
  353. package/development/core/mixins/readonly-mixin.js +40 -0
  354. package/development/core/mixins/required-mixin.d.ts +2 -2
  355. package/development/core/mixins/required-mixin.d.ts.map +1 -1
  356. package/development/core/mixins/required-mixin.js +1 -1
  357. package/development/core/mixins.d.ts +2 -0
  358. package/development/core/mixins.d.ts.map +1 -1
  359. package/development/core/mixins.js +5 -1
  360. package/development/core/testing.d.ts +0 -1
  361. package/development/core/testing.d.ts.map +1 -1
  362. package/development/core/testing.js +1 -3
  363. package/development/date-input/date-input.component.d.ts +12 -14
  364. package/development/date-input/date-input.component.d.ts.map +1 -1
  365. package/development/date-input/date-input.component.js +17 -22
  366. package/development/datepicker/common/datepicker-association-controllers.d.ts.map +1 -1
  367. package/development/datepicker/common/datepicker-association-controllers.js +3 -3
  368. package/development/datepicker/common/datepicker-button.d.ts +0 -12
  369. package/development/datepicker/common/datepicker-button.d.ts.map +1 -1
  370. package/development/datepicker/common/datepicker-button.js +1 -23
  371. package/development/datepicker/datepicker/datepicker.component.d.ts +3 -20
  372. package/development/datepicker/datepicker/datepicker.component.d.ts.map +1 -1
  373. package/development/datepicker/datepicker/datepicker.component.js +24 -33
  374. package/development/datepicker/datepicker-next-day/datepicker-next-day.component.d.ts +2 -0
  375. package/development/datepicker/datepicker-next-day/datepicker-next-day.component.d.ts.map +1 -1
  376. package/development/datepicker/datepicker-next-day/datepicker-next-day.component.js +7 -6
  377. package/development/datepicker/datepicker-previous-day/datepicker-previous-day.component.d.ts +2 -0
  378. package/development/datepicker/datepicker-previous-day/datepicker-previous-day.component.d.ts.map +1 -1
  379. package/development/datepicker/datepicker-previous-day/datepicker-previous-day.component.js +7 -6
  380. package/development/datepicker/datepicker-toggle/datepicker-toggle.component.d.ts +0 -8
  381. package/development/datepicker/datepicker-toggle/datepicker-toggle.component.d.ts.map +1 -1
  382. package/development/datepicker/datepicker-toggle/datepicker-toggle.component.js +1 -21
  383. package/development/datepicker/datepicker.js +2 -4
  384. package/development/datepicker.js +2 -4
  385. package/development/divider/divider.component.d.ts +2 -1
  386. package/development/divider/divider.component.d.ts.map +1 -1
  387. package/development/divider/divider.component.js +5 -8
  388. package/development/expansion-panel/expansion-panel-content/expansion-panel-content.component.d.ts +5 -1
  389. package/development/expansion-panel/expansion-panel-content/expansion-panel-content.component.d.ts.map +1 -1
  390. package/development/expansion-panel/expansion-panel-content/expansion-panel-content.component.js +9 -8
  391. package/development/expansion-panel/expansion-panel-header/expansion-panel-header.component.d.ts +2 -0
  392. package/development/expansion-panel/expansion-panel-header/expansion-panel-header.component.d.ts.map +1 -1
  393. package/development/expansion-panel/expansion-panel-header/expansion-panel-header.component.js +6 -5
  394. package/development/file-selector/common/file-selector-common.d.ts +6 -5
  395. package/development/file-selector/common/file-selector-common.d.ts.map +1 -1
  396. package/development/file-selector/common/file-selector-common.js +4 -4
  397. package/development/file-selector/file-selector/file-selector.component.d.ts +1 -0
  398. package/development/file-selector/file-selector/file-selector.component.d.ts.map +1 -1
  399. package/development/file-selector/file-selector/file-selector.component.js +1 -1
  400. package/development/file-selector/file-selector-dropzone/file-selector-dropzone.component.d.ts +1 -0
  401. package/development/file-selector/file-selector-dropzone/file-selector-dropzone.component.d.ts.map +1 -1
  402. package/development/file-selector/file-selector-dropzone/file-selector-dropzone.component.js +1 -1
  403. package/development/flip-card/flip-card-details/flip-card-details.component.d.ts +1 -0
  404. package/development/flip-card/flip-card-details/flip-card-details.component.d.ts.map +1 -1
  405. package/development/flip-card/flip-card-details/flip-card-details.component.js +6 -5
  406. package/development/flip-card/flip-card-summary/flip-card-summary.component.d.ts +1 -0
  407. package/development/flip-card/flip-card-summary/flip-card-summary.component.d.ts.map +1 -1
  408. package/development/flip-card/flip-card-summary/flip-card-summary.component.js +6 -5
  409. package/development/footer/footer.component.js +1 -1
  410. package/development/form-field/form-field/form-field.component.d.ts +9 -10
  411. package/development/form-field/form-field/form-field.component.d.ts.map +1 -1
  412. package/development/form-field/form-field/form-field.component.js +167 -178
  413. package/development/form-field/form-field-clear/form-field-clear.component.d.ts +1 -0
  414. package/development/form-field/form-field-clear/form-field-clear.component.d.ts.map +1 -1
  415. package/development/form-field/form-field-clear/form-field-clear.component.js +3 -5
  416. package/development/header/common/header-action-common.d.ts +3 -3
  417. package/development/header/common/header-action-common.d.ts.map +1 -1
  418. package/development/header/common/header-action-common.js +1 -1
  419. package/development/header/header/header.component.d.ts +6 -3
  420. package/development/header/header/header.component.d.ts.map +1 -1
  421. package/development/header/header/header.component.js +10 -9
  422. package/development/header/header-button/header-button.component.d.ts +1 -0
  423. package/development/header/header-button/header-button.component.d.ts.map +1 -1
  424. package/development/header/header-button/header-button.component.js +1 -1
  425. package/development/image/image.component.d.ts +1 -1
  426. package/development/image/image.component.d.ts.map +1 -1
  427. package/development/image/image.component.js +7 -6
  428. package/development/link/block-link-button/block-link-button.component.d.ts +1 -0
  429. package/development/link/block-link-button/block-link-button.component.d.ts.map +1 -1
  430. package/development/link/block-link-button/block-link-button.component.js +1 -1
  431. package/development/link/common/block-link-common.d.ts +3 -4
  432. package/development/link/common/block-link-common.d.ts.map +1 -1
  433. package/development/link/common/block-link-common.js +4 -4
  434. package/development/link/common/inline-link-common.d.ts +3 -2
  435. package/development/link/common/inline-link-common.d.ts.map +1 -1
  436. package/development/link/common/inline-link-common.js +2 -2
  437. package/development/link/common/link-common.d.ts +4 -2
  438. package/development/link/common/link-common.d.ts.map +1 -1
  439. package/development/link/common/link-common.js +1 -1
  440. package/development/link/common.js +1 -1
  441. package/development/link/link-button/link-button.component.d.ts +1 -0
  442. package/development/link/link-button/link-button.component.d.ts.map +1 -1
  443. package/development/link/link-button/link-button.component.js +1 -1
  444. package/development/{link-common-CJEWffDZ.js → link-common-DPLJx5Uo.js} +2 -2
  445. package/development/link-list/link-list-anchor/link-list-anchor.component.js +1 -1
  446. package/development/link.js +1 -1
  447. package/development/loading-indicator/loading-indicator.component.d.ts +5 -1
  448. package/development/loading-indicator/loading-indicator.component.d.ts.map +1 -1
  449. package/development/loading-indicator/loading-indicator.component.js +9 -8
  450. package/development/loading-indicator-circle/loading-indicator-circle.component.d.ts +5 -1
  451. package/development/loading-indicator-circle/loading-indicator-circle.component.d.ts.map +1 -1
  452. package/development/loading-indicator-circle/loading-indicator-circle.component.js +9 -8
  453. package/development/menu/common/menu-action-common.d.ts +4 -8
  454. package/development/menu/common/menu-action-common.d.ts.map +1 -1
  455. package/development/menu/common/menu-action-common.js +5 -63
  456. package/development/menu/menu/menu.component.d.ts +3 -3
  457. package/development/menu/menu/menu.component.d.ts.map +1 -1
  458. package/development/menu/menu/menu.component.js +10 -12
  459. package/development/menu/menu-button/menu-button.component.d.ts +1 -0
  460. package/development/menu/menu-button/menu-button.component.d.ts.map +1 -1
  461. package/development/menu/menu-button/menu-button.component.js +1 -1
  462. package/development/navigation/navigation/navigation.component.d.ts +4 -3
  463. package/development/navigation/navigation/navigation.component.d.ts.map +1 -1
  464. package/development/navigation/navigation/navigation.component.js +11 -14
  465. package/development/navigation/navigation-button/navigation-button.component.d.ts +1 -0
  466. package/development/navigation/navigation-button/navigation-button.component.d.ts.map +1 -1
  467. package/development/navigation/navigation-button/navigation-button.component.js +1 -1
  468. package/development/navigation/navigation-section/navigation-section.component.d.ts +3 -3
  469. package/development/navigation/navigation-section/navigation-section.component.d.ts.map +1 -1
  470. package/development/navigation/navigation-section/navigation-section.component.js +10 -12
  471. package/development/notification/notification.component.d.ts +4 -7
  472. package/development/notification/notification.component.d.ts.map +1 -1
  473. package/development/notification/notification.component.js +12 -29
  474. package/development/option/optgroup/optgroup-base-element.d.ts +2 -1
  475. package/development/option/optgroup/optgroup-base-element.d.ts.map +1 -1
  476. package/development/option/optgroup/optgroup-base-element.js +16 -37
  477. package/development/option/option/option-base-element.d.ts +6 -12
  478. package/development/option/option/option-base-element.d.ts.map +1 -1
  479. package/development/option/option/option-base-element.js +25 -21
  480. package/development/option/option/option.component.d.ts +5 -2
  481. package/development/option/option/option.component.d.ts.map +1 -1
  482. package/development/option/option/option.component.js +24 -21
  483. package/development/overlay/overlay-base-element.d.ts +1 -8
  484. package/development/overlay/overlay-base-element.d.ts.map +1 -1
  485. package/development/overlay/overlay-base-element.js +10 -30
  486. package/development/paginator/common/paginator-common.d.ts +3 -7
  487. package/development/paginator/common/paginator-common.d.ts.map +1 -1
  488. package/development/paginator/common/paginator-common.js +9 -27
  489. package/development/popover/popover/popover.component.d.ts +3 -3
  490. package/development/popover/popover/popover.component.d.ts.map +1 -1
  491. package/development/popover/popover/popover.component.js +15 -12
  492. package/development/popover/popover-trigger/popover-trigger.component.d.ts +1 -0
  493. package/development/popover/popover-trigger/popover-trigger.component.d.ts.map +1 -1
  494. package/development/popover/popover-trigger/popover-trigger.component.js +1 -1
  495. package/development/radio-button/common/radio-button-common.d.ts +4 -2
  496. package/development/radio-button/common/radio-button-common.d.ts.map +1 -1
  497. package/development/radio-button/common/radio-button-common.js +1 -1
  498. package/development/radio-button/radio-button/radio-button.component.d.ts +6 -2
  499. package/development/radio-button/radio-button/radio-button.component.d.ts.map +1 -1
  500. package/development/radio-button/radio-button/radio-button.component.js +21 -4
  501. package/development/radio-button/radio-button-group/radio-button-group.component.d.ts +8 -6
  502. package/development/radio-button/radio-button-group/radio-button-group.component.d.ts.map +1 -1
  503. package/development/radio-button/radio-button-group/radio-button-group.component.js +8 -11
  504. package/development/radio-button/radio-button-panel/radio-button-panel.component.d.ts +6 -2
  505. package/development/radio-button/radio-button-panel/radio-button-panel.component.d.ts.map +1 -1
  506. package/development/radio-button/radio-button-panel/radio-button-panel.component.js +22 -4
  507. package/development/select/select.component.d.ts +14 -12
  508. package/development/select/select.component.d.ts.map +1 -1
  509. package/development/select/select.component.js +111 -67
  510. package/development/sidebar/icon-sidebar/icon-sidebar.component.d.ts +4 -2
  511. package/development/sidebar/icon-sidebar/icon-sidebar.component.d.ts.map +1 -1
  512. package/development/sidebar/icon-sidebar/icon-sidebar.component.js +5 -6
  513. package/development/sidebar/icon-sidebar-button/icon-sidebar-button.component.d.ts +1 -0
  514. package/development/sidebar/icon-sidebar-button/icon-sidebar-button.component.d.ts.map +1 -1
  515. package/development/sidebar/icon-sidebar-button/icon-sidebar-button.component.js +1 -1
  516. package/development/sidebar/sidebar/sidebar.component.js +1 -1
  517. package/development/sidebar/sidebar-close-button/sidebar-close-button.component.d.ts +2 -0
  518. package/development/sidebar/sidebar-close-button/sidebar-close-button.component.d.ts.map +1 -1
  519. package/development/sidebar/sidebar-close-button/sidebar-close-button.component.js +6 -3
  520. package/development/sidebar/sidebar-title/sidebar-title.component.d.ts +1 -0
  521. package/development/sidebar/sidebar-title/sidebar-title.component.d.ts.map +1 -1
  522. package/development/sidebar/sidebar-title/sidebar-title.component.js +6 -3
  523. package/development/slider/slider.component.d.ts +6 -15
  524. package/development/slider/slider.component.d.ts.map +1 -1
  525. package/development/slider/slider.component.js +37 -85
  526. package/development/stepper/step/step.component.d.ts +4 -1
  527. package/development/stepper/step/step.component.d.ts.map +1 -1
  528. package/development/stepper/step/step.component.js +6 -8
  529. package/development/stepper/step-label/step-label.component.d.ts +2 -0
  530. package/development/stepper/step-label/step-label.component.d.ts.map +1 -1
  531. package/development/stepper/step-label/step-label.component.js +5 -8
  532. package/development/stepper/stepper/stepper.component.d.ts +1 -1
  533. package/development/stepper/stepper/stepper.component.d.ts.map +1 -1
  534. package/development/stepper/stepper/stepper.component.js +9 -8
  535. package/development/table/table-wrapper/table-wrapper.component.d.ts +2 -1
  536. package/development/table/table-wrapper/table-wrapper.component.d.ts.map +1 -1
  537. package/development/table/table-wrapper/table-wrapper.component.js +4 -6
  538. package/development/tabs/tab/tab.component.d.ts +4 -1
  539. package/development/tabs/tab/tab.component.d.ts.map +1 -1
  540. package/development/tabs/tab/tab.component.js +4 -3
  541. package/development/tabs/tab-group/tab-group.component.d.ts.map +1 -1
  542. package/development/tabs/tab-group/tab-group.component.js +2 -4
  543. package/development/tabs/tab-label/tab-label.component.d.ts +2 -1
  544. package/development/tabs/tab-label/tab-label.component.d.ts.map +1 -1
  545. package/development/tabs/tab-label/tab-label.component.js +4 -4
  546. package/development/tag/tag/tag.component.d.ts +7 -3
  547. package/development/tag/tag/tag.component.d.ts.map +1 -1
  548. package/development/tag/tag/tag.component.js +26 -7
  549. package/development/tag/tag-group/tag-group.component.d.ts +7 -5
  550. package/development/tag/tag-group/tag-group.component.d.ts.map +1 -1
  551. package/development/tag/tag-group/tag-group.component.js +29 -21
  552. package/development/teaser-product/common/teaser-product-common.d.ts +4 -2
  553. package/development/teaser-product/common/teaser-product-common.d.ts.map +1 -1
  554. package/development/teaser-product/common/teaser-product-common.js +1 -1
  555. package/development/time-input/time-input.component.d.ts +29 -42
  556. package/development/time-input/time-input.component.d.ts.map +1 -1
  557. package/development/time-input/time-input.component.js +158 -205
  558. package/development/title/title-base.d.ts +4 -1
  559. package/development/title/title-base.d.ts.map +1 -1
  560. package/development/title/title-base.js +9 -17
  561. package/development/toast/toast.component.d.ts +3 -4
  562. package/development/toast/toast.component.d.ts.map +1 -1
  563. package/development/toast/toast.component.js +53 -73
  564. package/development/toggle/toggle/toggle.component.d.ts +13 -9
  565. package/development/toggle/toggle/toggle.component.d.ts.map +1 -1
  566. package/development/toggle/toggle/toggle.component.js +29 -29
  567. package/development/toggle/toggle-option/toggle-option.component.d.ts +5 -3
  568. package/development/toggle/toggle-option/toggle-option.component.d.ts.map +1 -1
  569. package/development/toggle/toggle-option/toggle-option.component.js +6 -8
  570. package/development/toggle-check/toggle-check.component.d.ts +5 -2
  571. package/development/toggle-check/toggle-check.component.d.ts.map +1 -1
  572. package/development/toggle-check/toggle-check.component.js +19 -4
  573. package/divider/divider.component.d.ts +2 -1
  574. package/divider/divider.component.d.ts.map +1 -1
  575. package/divider/divider.component.js +26 -29
  576. package/expansion-panel/expansion-panel-content/expansion-panel-content.component.d.ts +5 -1
  577. package/expansion-panel/expansion-panel-content/expansion-panel-content.component.d.ts.map +1 -1
  578. package/expansion-panel/expansion-panel-content/expansion-panel-content.component.js +14 -14
  579. package/expansion-panel/expansion-panel-header/expansion-panel-header.component.d.ts +2 -0
  580. package/expansion-panel/expansion-panel-header/expansion-panel-header.component.d.ts.map +1 -1
  581. package/expansion-panel/expansion-panel-header/expansion-panel-header.component.js +20 -20
  582. package/file-selector/common/file-selector-common.d.ts +6 -5
  583. package/file-selector/common/file-selector-common.d.ts.map +1 -1
  584. package/file-selector/common/file-selector-common.js +35 -35
  585. package/file-selector/file-selector/file-selector.component.d.ts +1 -0
  586. package/file-selector/file-selector/file-selector.component.d.ts.map +1 -1
  587. package/file-selector/file-selector-dropzone/file-selector-dropzone.component.d.ts +1 -0
  588. package/file-selector/file-selector-dropzone/file-selector-dropzone.component.d.ts.map +1 -1
  589. package/flip-card/flip-card-details/flip-card-details.component.d.ts +1 -0
  590. package/flip-card/flip-card-details/flip-card-details.component.d.ts.map +1 -1
  591. package/flip-card/flip-card-details/flip-card-details.component.js +16 -16
  592. package/flip-card/flip-card-summary/flip-card-summary.component.d.ts +1 -0
  593. package/flip-card/flip-card-summary/flip-card-summary.component.d.ts.map +1 -1
  594. package/flip-card/flip-card-summary/flip-card-summary.component.js +13 -13
  595. package/font-characters-extension.css +3 -3
  596. package/footer/footer.component.js +1 -1
  597. package/form-field/form-field/form-field.component.d.ts +9 -10
  598. package/form-field/form-field/form-field.component.d.ts.map +1 -1
  599. package/form-field/form-field/form-field.component.js +194 -209
  600. package/form-field/form-field-clear/form-field-clear.component.d.ts +1 -0
  601. package/form-field/form-field-clear/form-field-clear.component.d.ts.map +1 -1
  602. package/form-field/form-field-clear/form-field-clear.component.js +9 -12
  603. package/header/common/header-action-common.d.ts +3 -3
  604. package/header/common/header-action-common.d.ts.map +1 -1
  605. package/header/header/header.component.d.ts +6 -3
  606. package/header/header/header.component.d.ts.map +1 -1
  607. package/header/header/header.component.js +46 -44
  608. package/header/header-button/header-button.component.d.ts +1 -0
  609. package/header/header-button/header-button.component.d.ts.map +1 -1
  610. package/image/image.component.d.ts +1 -1
  611. package/image/image.component.d.ts.map +1 -1
  612. package/image/image.component.js +4 -2
  613. package/link/block-link-button/block-link-button.component.d.ts +1 -0
  614. package/link/block-link-button/block-link-button.component.d.ts.map +1 -1
  615. package/link/common/block-link-common.d.ts +3 -4
  616. package/link/common/block-link-common.d.ts.map +1 -1
  617. package/link/common/block-link-common.js +6 -6
  618. package/link/common/inline-link-common.d.ts +3 -2
  619. package/link/common/inline-link-common.d.ts.map +1 -1
  620. package/link/common/inline-link-common.js +1 -1
  621. package/link/common/link-common.d.ts +4 -2
  622. package/link/common/link-common.d.ts.map +1 -1
  623. package/link/common/link-common.js +1 -1
  624. package/link/common.js +1 -1
  625. package/link/link-button/link-button.component.d.ts +1 -0
  626. package/link/link-button/link-button.component.d.ts.map +1 -1
  627. package/{link-common-DZrQ-32d.js → link-common-BBKGg9HN.js} +1 -1
  628. package/link-list/link-list-anchor/link-list-anchor.component.js +4 -4
  629. package/link.js +1 -1
  630. package/loading-indicator/loading-indicator.component.d.ts +5 -1
  631. package/loading-indicator/loading-indicator.component.d.ts.map +1 -1
  632. package/loading-indicator/loading-indicator.component.js +9 -9
  633. package/loading-indicator-circle/loading-indicator-circle.component.d.ts +5 -1
  634. package/loading-indicator-circle/loading-indicator-circle.component.d.ts.map +1 -1
  635. package/loading-indicator-circle/loading-indicator-circle.component.js +14 -14
  636. package/menu/common/menu-action-common.d.ts +4 -8
  637. package/menu/common/menu-action-common.d.ts.map +1 -1
  638. package/menu/common/menu-action-common.js +16 -41
  639. package/menu/menu/menu.component.d.ts +3 -3
  640. package/menu/menu/menu.component.d.ts.map +1 -1
  641. package/menu/menu/menu.component.js +32 -34
  642. package/menu/menu-button/menu-button.component.d.ts +1 -0
  643. package/menu/menu-button/menu-button.component.d.ts.map +1 -1
  644. package/navigation/navigation/navigation.component.d.ts +4 -3
  645. package/navigation/navigation/navigation.component.d.ts.map +1 -1
  646. package/navigation/navigation/navigation.component.js +39 -42
  647. package/navigation/navigation-button/navigation-button.component.d.ts +1 -0
  648. package/navigation/navigation-button/navigation-button.component.d.ts.map +1 -1
  649. package/navigation/navigation-section/navigation-section.component.d.ts +3 -3
  650. package/navigation/navigation-section/navigation-section.component.d.ts.map +1 -1
  651. package/navigation/navigation-section/navigation-section.component.js +51 -53
  652. package/notification/notification.component.d.ts +4 -7
  653. package/notification/notification.component.d.ts.map +1 -1
  654. package/notification/notification.component.js +63 -73
  655. package/option/optgroup/optgroup-base-element.d.ts +2 -1
  656. package/option/optgroup/optgroup-base-element.d.ts.map +1 -1
  657. package/option/optgroup/optgroup-base-element.js +43 -43
  658. package/option/option/option-base-element.d.ts +6 -12
  659. package/option/option/option-base-element.d.ts.map +1 -1
  660. package/option/option/option-base-element.js +57 -64
  661. package/option/option/option.component.d.ts +5 -2
  662. package/option/option/option.component.d.ts.map +1 -1
  663. package/option/option/option.component.js +18 -21
  664. package/overlay/overlay-base-element.d.ts +1 -8
  665. package/overlay/overlay-base-element.d.ts.map +1 -1
  666. package/overlay/overlay-base-element.js +44 -55
  667. package/package.json +1 -1
  668. package/paginator/common/paginator-common.d.ts +3 -7
  669. package/paginator/common/paginator-common.d.ts.map +1 -1
  670. package/paginator/common/paginator-common.js +43 -55
  671. package/popover/popover/popover.component.d.ts +3 -3
  672. package/popover/popover/popover.component.d.ts.map +1 -1
  673. package/popover/popover/popover.component.js +35 -32
  674. package/popover/popover-trigger/popover-trigger.component.d.ts +1 -0
  675. package/popover/popover-trigger/popover-trigger.component.d.ts.map +1 -1
  676. package/radio-button/common/radio-button-common.d.ts +4 -2
  677. package/radio-button/common/radio-button-common.d.ts.map +1 -1
  678. package/radio-button/radio-button/radio-button.component.d.ts +6 -2
  679. package/radio-button/radio-button/radio-button.component.d.ts.map +1 -1
  680. package/radio-button/radio-button/radio-button.component.js +43 -31
  681. package/radio-button/radio-button-group/radio-button-group.component.d.ts +8 -6
  682. package/radio-button/radio-button-group/radio-button-group.component.d.ts.map +1 -1
  683. package/radio-button/radio-button-group/radio-button-group.component.js +24 -26
  684. package/radio-button/radio-button-panel/radio-button-panel.component.d.ts +6 -2
  685. package/radio-button/radio-button-panel/radio-button-panel.component.d.ts.map +1 -1
  686. package/radio-button/radio-button-panel/radio-button-panel.component.js +46 -34
  687. package/select/select.component.d.ts +14 -12
  688. package/select/select.component.d.ts.map +1 -1
  689. package/select/select.component.js +130 -113
  690. package/sidebar/icon-sidebar/icon-sidebar.component.d.ts +4 -2
  691. package/sidebar/icon-sidebar/icon-sidebar.component.d.ts.map +1 -1
  692. package/sidebar/icon-sidebar/icon-sidebar.component.js +19 -20
  693. package/sidebar/icon-sidebar-button/icon-sidebar-button.component.d.ts +1 -0
  694. package/sidebar/icon-sidebar-button/icon-sidebar-button.component.d.ts.map +1 -1
  695. package/sidebar/sidebar/sidebar.component.js +1 -1
  696. package/sidebar/sidebar-close-button/sidebar-close-button.component.d.ts +2 -0
  697. package/sidebar/sidebar-close-button/sidebar-close-button.component.d.ts.map +1 -1
  698. package/sidebar/sidebar-close-button/sidebar-close-button.component.js +11 -9
  699. package/sidebar/sidebar-title/sidebar-title.component.d.ts +1 -0
  700. package/sidebar/sidebar-title/sidebar-title.component.d.ts.map +1 -1
  701. package/sidebar/sidebar-title/sidebar-title.component.js +17 -15
  702. package/slider/slider.component.d.ts +6 -15
  703. package/slider/slider.component.d.ts.map +1 -1
  704. package/slider/slider.component.js +71 -98
  705. package/standard-theme.css +41 -17
  706. package/stepper/step/step.component.d.ts +4 -1
  707. package/stepper/step/step.component.d.ts.map +1 -1
  708. package/stepper/step/step.component.js +5 -8
  709. package/stepper/step-label/step-label.component.d.ts +2 -0
  710. package/stepper/step-label/step-label.component.d.ts.map +1 -1
  711. package/stepper/step-label/step-label.component.js +12 -17
  712. package/stepper/stepper/stepper.component.d.ts +1 -1
  713. package/stepper/stepper/stepper.component.d.ts.map +1 -1
  714. package/stepper/stepper/stepper.component.js +8 -6
  715. package/table/table-wrapper/table-wrapper.component.d.ts +2 -1
  716. package/table/table-wrapper/table-wrapper.component.d.ts.map +1 -1
  717. package/table/table-wrapper/table-wrapper.component.js +19 -21
  718. package/tabs/tab/tab.component.d.ts +4 -1
  719. package/tabs/tab/tab.component.d.ts.map +1 -1
  720. package/tabs/tab/tab.component.js +10 -9
  721. package/tabs/tab-group/tab-group.component.d.ts.map +1 -1
  722. package/tabs/tab-group/tab-group.component.js +8 -8
  723. package/tabs/tab-label/tab-label.component.d.ts +2 -1
  724. package/tabs/tab-label/tab-label.component.d.ts.map +1 -1
  725. package/tabs/tab-label/tab-label.component.js +18 -18
  726. package/tag/tag/tag.component.d.ts +7 -3
  727. package/tag/tag/tag.component.d.ts.map +1 -1
  728. package/tag/tag/tag.component.js +75 -62
  729. package/tag/tag-group/tag-group.component.d.ts +7 -5
  730. package/tag/tag-group/tag-group.component.d.ts.map +1 -1
  731. package/tag/tag-group/tag-group.component.js +69 -64
  732. package/teaser-product/common/teaser-product-common.d.ts +4 -2
  733. package/teaser-product/common/teaser-product-common.d.ts.map +1 -1
  734. package/time-input/time-input.component.d.ts +29 -42
  735. package/time-input/time-input.component.d.ts.map +1 -1
  736. package/time-input/time-input.component.js +100 -143
  737. package/title/title-base.d.ts +4 -1
  738. package/title/title-base.d.ts.map +1 -1
  739. package/title/title-base.js +33 -34
  740. package/toast/toast.component.d.ts +3 -4
  741. package/toast/toast.component.d.ts.map +1 -1
  742. package/toast/toast.component.js +64 -70
  743. package/toggle/toggle/toggle.component.d.ts +13 -9
  744. package/toggle/toggle/toggle.component.d.ts.map +1 -1
  745. package/toggle/toggle/toggle.component.js +48 -49
  746. package/toggle/toggle-option/toggle-option.component.d.ts +5 -3
  747. package/toggle/toggle-option/toggle-option.component.d.ts.map +1 -1
  748. package/toggle/toggle-option/toggle-option.component.js +37 -39
  749. package/toggle-check/toggle-check.component.d.ts +5 -2
  750. package/toggle-check/toggle-check.component.d.ts.map +1 -1
  751. package/toggle-check/toggle-check.component.js +53 -43
  752. package/core/controllers/connected-abort-controller.d.ts +0 -14
  753. package/core/controllers/connected-abort-controller.d.ts.map +0 -1
  754. package/core/controllers/connected-abort-controller.js +0 -19
  755. package/core/decorators/date-converter.d.ts +0 -8
  756. package/core/decorators/date-converter.d.ts.map +0 -1
  757. package/core/decorators/date-converter.js +0 -17
  758. package/core/decorators/date-only-type.d.ts +0 -8
  759. package/core/decorators/date-only-type.d.ts.map +0 -1
  760. package/core/decorators/date-only-type.js +0 -10
  761. package/core/dom/find-referenced-element.d.ts +0 -8
  762. package/core/dom/find-referenced-element.d.ts.map +0 -1
  763. package/core/dom/find-referenced-element.js +0 -7
  764. package/core/dom/input-element.d.ts +0 -12
  765. package/core/dom/input-element.d.ts.map +0 -1
  766. package/core/dom/input-element.js +0 -12
  767. package/core/testing/scroll.d.ts +0 -7
  768. package/core/testing/scroll.d.ts.map +0 -1
  769. package/core/testing/scroll.js +0 -6
  770. package/development/core/controllers/connected-abort-controller.d.ts +0 -14
  771. package/development/core/controllers/connected-abort-controller.d.ts.map +0 -1
  772. package/development/core/controllers/connected-abort-controller.js +0 -25
  773. package/development/core/decorators/date-converter.d.ts +0 -8
  774. package/development/core/decorators/date-converter.d.ts.map +0 -1
  775. package/development/core/decorators/date-converter.js +0 -18
  776. package/development/core/decorators/date-only-type.d.ts +0 -8
  777. package/development/core/decorators/date-only-type.d.ts.map +0 -1
  778. package/development/core/decorators/date-only-type.js +0 -11
  779. package/development/core/dom/find-referenced-element.d.ts +0 -8
  780. package/development/core/dom/find-referenced-element.d.ts.map +0 -1
  781. package/development/core/dom/find-referenced-element.js +0 -15
  782. package/development/core/dom/input-element.d.ts +0 -12
  783. package/development/core/dom/input-element.d.ts.map +0 -1
  784. package/development/core/dom/input-element.js +0 -13
  785. package/development/core/testing/scroll.d.ts +0 -7
  786. package/development/core/testing/scroll.d.ts.map +0 -1
  787. package/development/core/testing/scroll.js +0 -8
@@ -5,15 +5,15 @@ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot
5
5
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
6
6
  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
7
7
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
8
- import { __runInitializers, __esDecorate } from "tslib";
8
+ import { __esDecorate, __runInitializers } from "tslib";
9
9
  import { css, LitElement, isServer, nothing, html } from "lit";
10
10
  import { customElement, property, state } from "lit/decorators.js";
11
11
  import { sbbInputModalityDetector } from "../../core/a11y.js";
12
12
  import { SbbLanguageController } from "../../core/controllers.js";
13
13
  import { slotState, forceType } from "../../core/decorators.js";
14
- import { isLean, isFirefox, setOrRemoveAttribute } from "../../core/dom.js";
14
+ import { isLean } from "../../core/dom.js";
15
15
  import { i18nOptional } from "../../core/i18n.js";
16
- import { SbbNegativeMixin, SbbHydrationMixin } from "../../core/mixins.js";
16
+ import { SbbNegativeMixin, SbbElementInternalsMixin, SbbHydrationMixin } from "../../core/mixins.js";
17
17
  import "../../icon.js";
18
18
  const style = css`@charset "UTF-8";
19
19
  *,
@@ -128,30 +128,30 @@ const style = css`@charset "UTF-8";
128
128
  --sbb-form-field-error-padding-block-start-override: var(--sbb-form-field-error-divider-width);
129
129
  }
130
130
 
131
- :host(:is([data-readonly], [data-disabled])) {
131
+ :host(:where(:state(readonly), [state--readonly], :state(disabled), [state--disabled])) {
132
132
  --sbb-form-field-background-color: var(--sbb-color-milk);
133
133
  --sbb-form-field-border-color: var(--sbb-color-graphite);
134
134
  --sbb-form-field-arrow-color: var(--sbb-color-granite);
135
135
  }
136
136
  @media (forced-colors: active) {
137
- :host(:is([data-readonly], [data-disabled])) {
137
+ :host(:where(:state(readonly), [state--readonly], :state(disabled), [state--disabled])) {
138
138
  --sbb-form-field-border-color: ButtonBorder;
139
139
  }
140
140
  }
141
141
 
142
- :host(:is([data-readonly], [data-disabled])[negative]) {
142
+ :host(:where(:state(readonly), [state--readonly], :state(disabled), [state--disabled])[negative]) {
143
143
  --sbb-form-field-background-color: var(--sbb-color-charcoal);
144
144
  --sbb-form-field-border-color: var(--sbb-color-smoke);
145
145
  --sbb-form-field-arrow-color: var(--sbb-color-smoke);
146
146
  }
147
147
 
148
- :host([data-disabled]) {
148
+ :host(:where(:state(disabled), [state--disabled])) {
149
149
  --sbb-form-field-label-color: var(--sbb-color-granite);
150
150
  --sbb-form-field-prefix-color: var(--sbb-color-granite);
151
151
  --sbb-form-field-border-style: dashed;
152
152
  }
153
153
  @media (forced-colors: active) {
154
- :host([data-disabled]) {
154
+ :host(:where(:state(disabled), [state--disabled])) {
155
155
  --sbb-form-field-label-color: GrayText !important;
156
156
  --sbb-form-field-prefix-color: GrayText !important;
157
157
  --sbb-form-field-text-color: GrayText !important;
@@ -159,51 +159,36 @@ const style = css`@charset "UTF-8";
159
159
  }
160
160
  }
161
161
 
162
- :host([data-disabled][negative]) {
162
+ :host(:where(:state(disabled), [state--disabled])[negative]) {
163
163
  --sbb-form-field-text-color: var(--sbb-color-smoke);
164
164
  --sbb-form-field-label-color: var(--sbb-color-smoke);
165
165
  --sbb-form-field-prefix-color: var(--sbb-color-smoke);
166
166
  }
167
167
 
168
- :host([data-readonly]:not([negative])) {
168
+ :host(:where(:state(readonly), [state--readonly]):not([negative])) {
169
169
  --sbb-form-field-label-color: var(--sbb-color-granite);
170
170
  --sbb-form-field-prefix-color: var(--sbb-color-granite);
171
171
  }
172
172
 
173
- :host(:is([data-input-focused])) {
173
+ :host(:where(:state(focus), [state--focus])) {
174
174
  --sbb-form-field-border-color: var(--sbb-color-charcoal);
175
175
  --sbb-form-field-prefix-color: var(--sbb-color-charcoal);
176
176
  --sbb-form-field-border-width: var(--sbb-border-width-2x);
177
177
  }
178
- @media (forced-colors: active) {
179
- :host(:is([data-input-focused])) {
180
- --sbb-form-field-border-color: Highlight !important;
181
- --sbb-form-field-prefix-color: Highlight !important;
182
- }
183
- }
184
178
 
185
- :host(:is([data-input-focused])[negative]) {
179
+ :host(:where(:state(focus), [state--focus])[negative]) {
186
180
  --sbb-form-field-border-color: var(--sbb-color-milk);
187
181
  --sbb-form-field-prefix-color: var(--sbb-color-milk);
188
182
  }
189
183
 
190
- :host([data-invalid]) {
191
- --sbb-form-field-border-color: var(--sbb-color-red125);
192
- --sbb-form-field-text-color: var(--sbb-color-red125);
193
- }
194
184
  @media (forced-colors: active) {
195
- :host([data-invalid]) {
196
- --sbb-form-field-border-color: LinkText !important;
197
- --sbb-form-field-text-color: LinkText !important;
185
+ :host(:is(:state(focus), [state--focus])) {
186
+ --sbb-form-field-border-color: Highlight;
187
+ --sbb-form-field-prefix-color: Highlight;
198
188
  }
199
189
  }
200
190
 
201
- :host([data-invalid][negative]) {
202
- --sbb-form-field-border-color: var(--sbb-color-red-mode-dark);
203
- --sbb-form-field-text-color: var(--sbb-color-red-mode-dark);
204
- }
205
-
206
- :host(:not([data-has-error])) {
191
+ :host(:not(:where(:state(has-error), [state--has-error]))) {
207
192
  --sbb-form-field-error-padding-block-start: 0;
208
193
  }
209
194
 
@@ -221,11 +206,11 @@ const style = css`@charset "UTF-8";
221
206
  --sbb-form-field-label-to-input-overlapping: 0rem;
222
207
  }
223
208
 
224
- :host([data-input-type=sbb-slider]) {
209
+ :host(:where(:state(input-type-sbb-slider), [state--input-type-sbb-slider])) {
225
210
  --sbb-form-field-overflow: visible;
226
211
  }
227
212
 
228
- :host([data-input-type=textarea]) {
213
+ :host(:where(:state(input-type-textarea), [state--input-type-textarea])) {
229
214
  --sbb-form-field-max-height: fit-content;
230
215
  }
231
216
 
@@ -258,15 +243,16 @@ const style = css`@charset "UTF-8";
258
243
  border: var(--sbb-form-field-border-width) var(--sbb-form-field-border-style) var(--sbb-form-field-border-color);
259
244
  border-radius: var(--sbb-form-field-border-radius);
260
245
  }
261
- :host([data-input-focused][data-focus-origin=keyboard]) .sbb-form-field__wrapper {
246
+ :host(:where(:state(focus), [state--focus]):where(:state(focus-origin-keyboard),
247
+ [state--focus-origin-keyboard])) .sbb-form-field__wrapper {
262
248
  outline-offset: var(--sbb-focus-outline-offset);
263
249
  outline: var(--sbb-focus-outline-color) var(--sbb-focus-outline-style, solid) var(--sbb-focus-outline-width);
264
250
  }
265
251
  @media (forced-colors: none) {
266
- :host(:is([borderless], [data-input-type=sbb-slider])) .sbb-form-field__wrapper::before {
252
+ :host(:is([borderless], :where(:state(input-type-sbb-slider), [state--input-type-sbb-slider]))) .sbb-form-field__wrapper::before {
267
253
  border-color: transparent;
268
254
  }
269
- :host(:is([data-input-focused], [data-disabled])[borderless]) .sbb-form-field__wrapper::after {
255
+ :host(:where(:state(focus), [state--focus], :state(disabled), [state--disabled])[borderless]) .sbb-form-field__wrapper::after {
270
256
  content: "";
271
257
  position: absolute;
272
258
  border-block-end: var(--sbb-border-width-1x) var(--sbb-form-field-border-style) var(--sbb-form-field-border-color);
@@ -286,7 +272,12 @@ const style = css`@charset "UTF-8";
286
272
  margin-block-start: calc((var(--sbb-form-field-min-height) - var(--sbb-size-icon-ui-small)) / 2);
287
273
  }
288
274
 
289
- :host(:is([data-input-empty], [data-disabled], [data-readonly])) ::slotted(sbb-form-field-clear) {
275
+ :host(:where(:state(empty),
276
+ [state--empty],
277
+ :state(disabled),
278
+ [state--disabled],
279
+ :state(readonly),
280
+ [state--readonly])) ::slotted(sbb-form-field-clear) {
290
281
  display: none;
291
282
  }
292
283
 
@@ -360,7 +351,10 @@ const style = css`@charset "UTF-8";
360
351
  letter-spacing: var(--sbb-typo-letter-spacing-body-text);
361
352
  font-size: var(--sbb-text-font-size);
362
353
  }
363
- :host([data-input-type=select]) .sbb-form-field__label, :host([data-input-type=sbb-select]) .sbb-form-field__label {
354
+ :host(:where(:state(input-type-select),
355
+ [state--input-type-select],
356
+ :state(input-type-sbb-select),
357
+ [state--input-type-sbb-select])) .sbb-form-field__label {
364
358
  padding-inline-end: var(--sbb-form-field-select-inline-padding-end);
365
359
  }
366
360
  :host([floating-label]) .sbb-form-field__label {
@@ -372,13 +366,14 @@ const style = css`@charset "UTF-8";
372
366
  transition-timing-function: var(--sbb-animation-easing);
373
367
  transition-property: transform, font-size;
374
368
  }
375
- :host([floating-label]:is(:not([data-input-focused]:not([data-input-type=sbb-select]), [data-has-popup-open]),
376
- [data-readonly])[data-input-empty]) .sbb-form-field__label {
369
+ :host([floating-label]:is(:not(:where(:state(focus), [state--focus]):not(:where(:state(input-type-sbb-select), [state--input-type-sbb-select])),
370
+ :where(:state(has-popup-open), [state--has-popup-open])),
371
+ :where(:state(readonly), [state--readonly])):where(:state(empty), [state--empty])) .sbb-form-field__label {
377
372
  font-size: var(--sbb-form-field-input-text-size);
378
373
  transform: translateY(var(--sbb-form-field-floating-label-transform));
379
374
  }
380
375
  @media (forced-colors: active) {
381
- :host([data-input-type=textarea]) .sbb-form-field__label {
376
+ :host(:where(:state(input-type-textarea), [state--input-type-textarea])) .sbb-form-field__label {
382
377
  z-index: 1;
383
378
  }
384
379
  }
@@ -392,10 +387,16 @@ const style = css`@charset "UTF-8";
392
387
  .sbb-form-field__input {
393
388
  display: flex;
394
389
  }
395
- :host([size=s]:is([data-input-type=input],
396
- [data-input-type=select],
397
- [data-input-type=sbb-select],
398
- [data-input-type=sbb-date-input])) .sbb-form-field__input {
390
+ :host([size=s]:is(:state(input-type-input),
391
+ [state--input-type-input],
392
+ :state(input-type-select),
393
+ [state--input-type-select],
394
+ :state(input-type-sbb-select),
395
+ [state--input-type-sbb-select],
396
+ :state(input-type-sbb-date-input),
397
+ [state--input-type-sbb-date-input],
398
+ :state(input-type-sbb-time-input),
399
+ [state--input-type-sbb-time-input])) .sbb-form-field__input {
399
400
  margin-block-end: -0.125rem;
400
401
  }
401
402
 
@@ -407,13 +408,14 @@ const style = css`@charset "UTF-8";
407
408
  let nextId = 0;
408
409
  let nextFormFieldErrorId = 0;
409
410
  const patchedInputs = /* @__PURE__ */ new WeakMap();
411
+ const nativeInputElements = ["input", "textarea", "select"];
410
412
  let SbbFormFieldElement = (() => {
411
413
  var _errorSpace_accessor_storage, _optional_accessor_storage, _size_accessor_storage, _borderless_accessor_storage, _width_accessor_storage, _hiddenLabel_accessor_storage, _floatingLabel_accessor_storage, __errorElements_accessor_storage, __input_accessor_storage, __label_accessor_storage, _a;
412
414
  let _classDecorators = [customElement("sbb-form-field"), slotState()];
413
415
  let _classDescriptor;
414
416
  let _classExtraInitializers = [];
415
417
  let _classThis;
416
- let _classSuper = SbbNegativeMixin(SbbHydrationMixin(LitElement));
418
+ let _classSuper = SbbNegativeMixin(SbbElementInternalsMixin(SbbHydrationMixin(LitElement)));
417
419
  let _errorSpace_decorators;
418
420
  let _errorSpace_initializers = [];
419
421
  let _errorSpace_extraInitializers = [];
@@ -446,7 +448,8 @@ let SbbFormFieldElement = (() => {
446
448
  let __label_extraInitializers = [];
447
449
  _a = class extends _classSuper {
448
450
  constructor() {
449
- super(...arguments);
451
+ var _a2, _b;
452
+ super();
450
453
  __privateAdd(this, _errorSpace_accessor_storage);
451
454
  __privateAdd(this, _optional_accessor_storage);
452
455
  __privateAdd(this, _size_accessor_storage);
@@ -457,22 +460,12 @@ let SbbFormFieldElement = (() => {
457
460
  __privateAdd(this, __errorElements_accessor_storage);
458
461
  __privateAdd(this, __input_accessor_storage);
459
462
  __privateAdd(this, __label_accessor_storage);
460
- this._supportedNativeInputElements = [
461
- "input",
462
- "select",
463
- "textarea",
464
- "sbb-date-input"
465
- ];
466
- this._supportedInputElements = [
467
- ...this._supportedNativeInputElements,
468
- "sbb-select",
469
- "sbb-slider"
470
- ];
471
463
  this._excludedFocusElements = ["button", "sbb-popover", "sbb-option", "sbb-chip"];
472
464
  this._floatingLabelSupportedInputElements = [
473
465
  "input",
474
466
  "select",
475
467
  "sbb-date-input",
468
+ "sbb-time-input",
476
469
  "sbb-select",
477
470
  "textarea"
478
471
  ];
@@ -493,16 +486,37 @@ let SbbFormFieldElement = (() => {
493
486
  __privateSet(this, _hiddenLabel_accessor_storage, (__runInitializers(this, _width_extraInitializers), __runInitializers(this, _hiddenLabel_initializers, false)));
494
487
  __privateSet(this, _floatingLabel_accessor_storage, (__runInitializers(this, _hiddenLabel_extraInitializers), __runInitializers(this, _floatingLabel_initializers, false)));
495
488
  __privateSet(this, __errorElements_accessor_storage, (__runInitializers(this, _floatingLabel_extraInitializers), __runInitializers(this, __errorElements_initializers, [])));
496
- this._originalInputAriaDescribedby = __runInitializers(this, __errorElements_extraInitializers);
497
- __privateSet(this, __input_accessor_storage, __runInitializers(this, __input_initializers, void 0));
489
+ __privateSet(this, __input_accessor_storage, (__runInitializers(this, __errorElements_extraInitializers), __runInitializers(this, __input_initializers, void 0)));
498
490
  __privateSet(this, __label_accessor_storage, (__runInitializers(this, __input_extraInitializers), __runInitializers(this, __label_initializers, void 0)));
499
491
  this._language = (__runInitializers(this, __label_extraInitializers), new SbbLanguageController(this));
500
492
  this._formFieldAttributeObserver = !isServer ? new MutationObserver((mutations) => {
501
- if (mutations.some((m) => m.type === "attributes")) {
493
+ if (mutations.some((m) => m.type === "attributes") && this._input) {
502
494
  this._readInputState();
495
+ this._registerInputFormListener();
496
+ this._checkAndUpdateInputEmpty();
503
497
  }
504
498
  }) : null;
505
- this._inputAbortController = new AbortController();
499
+ this._inputFormAbortController = new AbortController();
500
+ (_a2 = this.addEventListener) == null ? void 0 : _a2.call(this, "focusin", (event) => {
501
+ if (event.target === this.inputElement || event.target === this.inputElement.inputElement) {
502
+ this.internals.states.add("focus");
503
+ this.internals.states.add(`focus-origin-${sbbInputModalityDetector.mostRecentModality}`);
504
+ }
505
+ }, { passive: true });
506
+ (_b = this.addEventListener) == null ? void 0 : _b.call(this, "focusout", (event) => {
507
+ if (event.target === this.inputElement || event.target === this.inputElement.inputElement) {
508
+ this._checkAndUpdateInputEmpty();
509
+ this.internals.states.delete("focus");
510
+ for (const state2 of this.internals.states) {
511
+ if (state2.startsWith("focus-origin-")) {
512
+ this.internals.states.delete(state2);
513
+ }
514
+ }
515
+ }
516
+ }, { passive: true });
517
+ this.addEventListener("input", () => this._checkAndUpdateInputEmpty());
518
+ this.addEventListener("displayValueChange", () => this._checkAndUpdateInputEmpty());
519
+ this.addEventListener("invalid", (e) => e.preventDefault(), { capture: true });
506
520
  }
507
521
  /**
508
522
  * Whether to reserve space for an error message.
@@ -589,20 +603,25 @@ let SbbFormFieldElement = (() => {
589
603
  }
590
604
  connectedCallback() {
591
605
  super.connectedCallback();
592
- this._registerInputListener();
606
+ this._assignSlots();
607
+ this._connectInputElement();
593
608
  this._syncNegative();
609
+ this._syncSize();
594
610
  }
595
611
  willUpdate(changedProperties) {
596
612
  super.willUpdate(changedProperties);
597
613
  if (changedProperties.has("negative")) {
598
614
  this._syncNegative();
599
615
  }
616
+ if (changedProperties.has("size")) {
617
+ this._syncSize();
618
+ }
600
619
  }
601
620
  disconnectedCallback() {
602
621
  var _a2, _b;
603
622
  super.disconnectedCallback();
604
623
  (_a2 = this._formFieldAttributeObserver) == null ? void 0 : _a2.disconnect();
605
- this._inputAbortController.abort();
624
+ this._inputFormAbortController.abort();
606
625
  if (((_b = this._input) == null ? void 0 : _b.localName) === "input") {
607
626
  this._unpatchInputValue();
608
627
  }
@@ -612,10 +631,10 @@ let SbbFormFieldElement = (() => {
612
631
  if (this._isElementFocusExcluded(event)) {
613
632
  return;
614
633
  }
615
- if (((_a2 = this._input) == null ? void 0 : _a2.localName) === "sbb-select" && event.target.localName !== "sbb-select") {
616
- this._input.click();
617
- this._input.focus();
618
- } else if (event.target.localName !== "label") {
634
+ if (event.target.localName !== "label") {
635
+ if (((_a2 = this._input) == null ? void 0 : _a2.localName) === "sbb-select" && event.target.localName !== "sbb-select") {
636
+ this._input.click();
637
+ }
619
638
  (_b = this._input) == null ? void 0 : _b.focus();
620
639
  }
621
640
  }
@@ -634,110 +653,87 @@ let SbbFormFieldElement = (() => {
634
653
  * It is used internally to assign the attributes of `<input>` to `_id` and `_input` and to observe the native readonly and disabled attributes.
635
654
  */
636
655
  _onSlotInputChange() {
637
- var _a2, _b;
638
- const newInput = this.querySelector(`:where(${this._supportedInputElements.join(",")})`);
639
656
  this._assignSlots();
640
- if (this._input && this._input.localName === "input" && newInput !== this._input) {
641
- this._unpatchInputValue();
657
+ this._connectInputElement();
658
+ }
659
+ _assignSlots() {
660
+ this.querySelectorAll("label:not([slot])").forEach((e) => e.setAttribute("slot", "label"));
661
+ this.querySelectorAll("sbb-form-error:not([slot])").forEach((e) => e.setAttribute("slot", "error"));
662
+ }
663
+ _connectInputElement() {
664
+ var _a2, _b;
665
+ const inputCandidates = Array.from(this.querySelectorAll("*:not([slot],sbb-chip-group)"));
666
+ const newInput = inputCandidates.find((e) => this._isInputElement(e)) || inputCandidates[0];
667
+ if (newInput === this._input) {
668
+ return;
669
+ } else if (this._input) {
670
+ this.internals.states.delete(`input-type-${this._input.localName}`);
671
+ if (this._input.localName === "input") {
672
+ this._unpatchInputValue();
673
+ }
642
674
  }
643
675
  if (!newInput) {
644
676
  this._input = void 0;
645
677
  return;
646
678
  }
647
679
  this._input = newInput;
648
- this._originalInputAriaDescribedby = this._input.getAttribute("aria-describedby");
649
680
  this._applyAriaDescribedby();
650
681
  this._readInputState();
651
- this._registerInputListener();
682
+ this._registerInputFormListener();
683
+ this._checkAndUpdateInputEmpty();
652
684
  if (this._input.localName === "textarea") {
653
685
  this._input.setAttribute("rows", this._input.getAttribute("rows") || "3");
686
+ } else if (this._input.localName === "input") {
687
+ this._patchInputValue();
688
+ } else if ((this._input.localName === "select" || this._input.localName === "sbb-select") && !this.hasUpdated) {
689
+ this.hydrationComplete.then(() => this.requestUpdate());
654
690
  }
655
691
  (_a2 = this._formFieldAttributeObserver) == null ? void 0 : _a2.disconnect();
656
692
  (_b = this._formFieldAttributeObserver) == null ? void 0 : _b.observe(this._input, {
657
693
  attributes: true,
658
- attributeFilter: ["readonly", "disabled", "class", "data-sbb-invalid", "data-expanded"]
694
+ attributeFilter: ["readonly", "disabled", "form", "class", "data-expanded"]
659
695
  });
660
- this.setAttribute("data-input-type", this._input.localName);
696
+ this.internals.states.add(`input-type-${this._input.localName}`);
661
697
  this._syncLabelInputReferences();
662
698
  }
663
699
  _syncLabelInputReferences() {
664
- var _a2;
700
+ var _a2, _b, _c, _d;
665
701
  if (!this._input || !this._label) {
666
702
  return;
667
703
  }
668
- if (this._supportedNativeInputElements.includes(this._input.localName)) {
669
- if (!this._input.id) {
670
- this._input.id = `sbb-form-field-input-${nextId++}`;
671
- }
704
+ if (nativeInputElements.includes(this._input.localName) || ((_a2 = customElements.get(this._input.localName)) == null ? void 0 : _a2.formAssociated)) {
705
+ (_b = this._input).id || (_b.id = `sbb-form-field-input-${nextId++}`);
672
706
  this._label.htmlFor = this._input.id;
673
707
  } else {
674
- if (!this._label.id) {
675
- this._label.id = `sbb-form-field-label-${nextId++}`;
676
- }
677
- const labelledby = ((_a2 = this._input.getAttribute("aria-labelledby")) == null ? void 0 : _a2.split(" ").filter((l) => !!l && l !== this._label.id)) ?? [];
708
+ (_c = this._label).id || (_c.id = `sbb-form-field-label-${nextId++}`);
709
+ const labelledby = ((_d = this._input.getAttribute("aria-labelledby")) == null ? void 0 : _d.split(" ").filter((l) => !!l && l !== this._label.id)) ?? [];
678
710
  this._input.setAttribute("aria-labelledby", [...labelledby, this._label.id].join(" "));
679
711
  }
680
712
  }
681
- _registerInputListener() {
713
+ _isInputElement(input) {
682
714
  var _a2;
683
- if (!this._input) {
684
- return;
685
- }
686
- this._inputAbortController.abort();
687
- this._inputAbortController = new AbortController();
688
- this._checkAndUpdateInputEmpty();
689
- (_a2 = this._getInputForm()) == null ? void 0 : _a2.addEventListener("reset", () => setTimeout(() => this.reset()), {
690
- signal: this._inputAbortController.signal
691
- });
692
- this._input.addEventListener("input", () => this._checkAndUpdateInputEmpty(), {
693
- signal: this._inputAbortController.signal
694
- });
695
- this._input.addEventListener("blur", () => this._checkAndUpdateInputEmpty(), {
696
- signal: this._inputAbortController.signal
697
- });
698
- this._input.addEventListener("invalid", (e) => e.preventDefault(), {
699
- signal: this._inputAbortController.signal
700
- });
701
- let inputFocusElement = this._input;
702
- if (this._input.localName === "input") {
703
- this._patchInputValue();
704
- } else if (this._input.localName === "sbb-select") {
705
- this._input.addEventListener("displayValueChange", () => this._checkAndUpdateInputEmpty(), {
706
- signal: this._inputAbortController.signal
707
- });
708
- const selectInput = this._input;
709
- inputFocusElement = selectInput.inputElement;
710
- if (!inputFocusElement) {
711
- const controller = {
712
- hostUpdated: () => {
713
- selectInput.removeController(controller);
714
- this._registerInputListener();
715
- }
716
- };
717
- selectInput.addController(controller);
718
- }
719
- }
720
- inputFocusElement == null ? void 0 : inputFocusElement.addEventListener("focusin", () => {
721
- this.toggleAttribute("data-input-focused", true);
722
- this.setAttribute("data-focus-origin", sbbInputModalityDetector.mostRecentModality ?? "");
723
- }, {
724
- signal: this._inputAbortController.signal
725
- });
726
- inputFocusElement == null ? void 0 : inputFocusElement.addEventListener("focusout", () => ["data-focus-origin", "data-input-focused"].forEach((name) => this.removeAttribute(name)), {
727
- signal: this._inputAbortController.signal
728
- });
715
+ return nativeInputElements.includes(input.localName) || !!((_a2 = customElements.get(input.localName)) == null ? void 0 : _a2.formAssociated);
729
716
  }
730
- _getInputForm() {
731
- var _a2;
732
- if (this._input instanceof HTMLInputElement || this._input instanceof HTMLSelectElement) {
733
- return this._input.form;
734
- }
735
- return (_a2 = this._input) == null ? void 0 : _a2.closest("form");
717
+ _readInputState() {
718
+ this.toggleState("readonly", this._input.hasAttribute("readonly"));
719
+ this.toggleState("disabled", this._input.hasAttribute("disabled"));
720
+ this.toggleState("has-popup-open", this._input.hasAttribute("data-expanded"));
721
+ }
722
+ _registerInputFormListener() {
723
+ var _a2, _b;
724
+ this._inputFormAbortController.abort();
725
+ const { signal } = this._inputFormAbortController = new AbortController();
726
+ const form = ((_a2 = this._input) == null ? void 0 : _a2.form) ?? ((_b = this._input) == null ? void 0 : _b.closest("form"));
727
+ const resetHandler = () => setTimeout(() => this.reset());
728
+ form == null ? void 0 : form.addEventListener("reset", resetHandler, { signal });
736
729
  }
737
730
  // We need to patch the value property of the HTMLInputElement in order
738
731
  // to be able to reset the floating label in the empty state.
739
732
  _patchInputValue() {
740
733
  const inputElement = this._input;
734
+ if (!inputElement || patchedInputs.has(inputElement)) {
735
+ return;
736
+ }
741
737
  const originalDescriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(inputElement), "value");
742
738
  if (!originalDescriptor || !originalDescriptor.set || !originalDescriptor.get) {
743
739
  return;
@@ -766,19 +762,19 @@ let SbbFormFieldElement = (() => {
766
762
  }
767
763
  _checkAndUpdateInputEmpty() {
768
764
  var _a2;
769
- this.toggleAttribute("data-input-empty", this._floatingLabelSupportedInputElements.includes((_a2 = this._input) == null ? void 0 : _a2.localName) && this._isInputEmpty());
765
+ this.toggleState("empty", this._floatingLabelSupportedInputElements.includes((_a2 = this._input) == null ? void 0 : _a2.localName) && this._isInputEmpty());
770
766
  }
771
767
  _isInputEmpty() {
772
- var _a2, _b, _c, _d, _e;
768
+ var _a2, _b, _c, _d, _e, _f, _g;
773
769
  const chipGroupElem = this.querySelector("sbb-chip-group");
774
770
  if (chipGroupElem) {
775
- return this._isInputValueEmpty() && chipGroupElem.value.length === 0;
771
+ return this._isInputValueEmpty() && (Array.isArray(chipGroupElem.value) ? chipGroupElem.value.length === 0 : !chipGroupElem.querySelector("sbb-chip"));
776
772
  } else if (this._input instanceof HTMLInputElement) {
777
773
  return this._floatingLabelSupportedInputTypes.includes(this._input.type) && this._isInputValueEmpty();
778
774
  } else if (this._input instanceof HTMLSelectElement) {
779
775
  return ((_c = (_b = (_a2 = this._input.selectedOptions) == null ? void 0 : _a2.item(0)) == null ? void 0 : _b.label) == null ? void 0 : _c.trim()) === "";
780
776
  } else if (((_d = this._input) == null ? void 0 : _d.localName) === "sbb-select") {
781
- return ((_e = this._input.getDisplayValue()) == null ? void 0 : _e.trim()) === "";
777
+ return ((_g = (_f = (_e = this._input).getDisplayValue) == null ? void 0 : _f.call(_e)) == null ? void 0 : _g.trim()) === "";
782
778
  } else {
783
779
  return this._isInputValueEmpty();
784
780
  }
@@ -787,50 +783,39 @@ let SbbFormFieldElement = (() => {
787
783
  const value = this._input.value;
788
784
  return ["", void 0, null].includes(value) || Array.isArray(value) && value.length === 0;
789
785
  }
790
- _assignSlots() {
791
- this.querySelectorAll("label:not([slot])").forEach((e) => e.setAttribute("slot", "label"));
792
- this.querySelectorAll("sbb-form-error:not([slot])").forEach((e) => e.setAttribute("slot", "error"));
793
- }
794
- _readInputState() {
795
- if (!this._input) {
796
- return;
797
- }
798
- this.toggleAttribute("data-readonly", this._input.hasAttribute("readonly"));
799
- this.toggleAttribute("data-disabled", this._input.hasAttribute("disabled"));
800
- this.toggleAttribute("data-invalid", this._input.hasAttribute("data-sbb-invalid") || this._input.classList.contains("sbb-invalid") || this._input.classList.contains("ng-touched") && this._input.classList.contains("ng-invalid"));
801
- this.toggleAttribute("data-has-popup-open", this._input.hasAttribute("data-expanded"));
802
- }
803
786
  /**
804
787
  * It is used internally to set the aria-describedby attribute for the slotted input referencing available <sbb-form-error> instances.
805
788
  */
806
789
  _onSlotErrorChange(event) {
807
- this._errorElements = event.target.assignedElements();
790
+ const errors = event.target.assignedElements();
791
+ const removedErrorIds = this._errorElements.filter((e) => !errors.includes(e)).map((e) => e.id);
792
+ this._errorElements = errors;
808
793
  for (const el of this._errorElements) {
809
- if (!el.id) {
810
- el.id = `sbb-form-field-error-${++nextFormFieldErrorId}`;
811
- }
812
- if (!el.role) {
813
- el.role = "status";
814
- if (isFirefox) {
815
- el.setAttribute("role", "status");
816
- }
817
- }
794
+ el.id || (el.id = `sbb-form-field-error-${++nextFormFieldErrorId}`);
795
+ el.role || (el.role = "status");
818
796
  }
819
- this._applyAriaDescribedby();
820
- this.toggleAttribute("data-has-error", !!this._errorElements.length);
797
+ this._applyAriaDescribedby(removedErrorIds);
798
+ this.toggleState("has-error", !!this._errorElements.length);
821
799
  this._syncNegative();
822
800
  }
823
- _applyAriaDescribedby() {
824
- const ids = [];
825
- if (this._originalInputAriaDescribedby) {
826
- ids.push(this._originalInputAriaDescribedby);
827
- }
801
+ _applyAriaDescribedby(obsoleteIds = []) {
802
+ var _a2;
803
+ const ariaDescribedby = ((_a2 = this._input) == null ? void 0 : _a2.getAttribute("aria-describedby")) || "";
804
+ const ids = ariaDescribedby.split(" ").filter((id) => !!id && !obsoleteIds.includes(id)).filter((v, i, a) => a.indexOf(v) === i);
828
805
  if (this._errorElements.length) {
829
- this._errorElements.forEach((e) => ids.push(e.id));
806
+ this._errorElements.forEach((e) => {
807
+ if (!ids.includes(e.id)) {
808
+ ids.push(e.id);
809
+ }
810
+ });
830
811
  }
831
- const ariaDescribedby = ids.join(" ");
832
- if (this._input) {
833
- setOrRemoveAttribute(this._input, "aria-describedby", ariaDescribedby);
812
+ const newAriaDescribedby = ids.join(" ");
813
+ if (this._input && newAriaDescribedby !== ariaDescribedby) {
814
+ if (newAriaDescribedby) {
815
+ this._input.setAttribute("aria-describedby", newAriaDescribedby);
816
+ } else {
817
+ this._input.removeAttribute("aria-describedby");
818
+ }
834
819
  }
835
820
  }
836
821
  /** Manually reset the form field. Currently, this only resets the floating label. */
@@ -850,6 +835,10 @@ let SbbFormFieldElement = (() => {
850
835
  var _a2;
851
836
  (_a2 = this.querySelectorAll) == null ? void 0 : _a2.call(this, "sbb-form-error,sbb-mini-button,sbb-popover-trigger,sbb-form-field-clear,sbb-datepicker-next-day,sbb-datepicker-previous-day,sbb-datepicker-toggle,sbb-select,sbb-autocomplete,sbb-autocomplete-grid,sbb-chip-group").forEach((element) => element.toggleAttribute("negative", this.negative));
852
837
  }
838
+ _syncSize() {
839
+ var _a2;
840
+ (_a2 = this.querySelectorAll) == null ? void 0 : _a2.call(this, "sbb-autocomplete,sbb-autocomplete-grid,sbb-select").forEach((element) => element.size = this.size === "s" ? "s" : "m");
841
+ }
853
842
  render() {
854
843
  var _a2;
855
844
  return html`
@@ -869,7 +858,7 @@ let SbbFormFieldElement = (() => {
869
858
  <div class="sbb-form-field__input">
870
859
  <slot @slotchange=${this._onSlotInputChange}></slot>
871
860
  </div>
872
- ${["select", "sbb-select"].includes((_a2 = this._input) == null ? void 0 : _a2.localName) ? html`<sbb-icon
861
+ ${this.hasUpdated && ["select", "sbb-select"].includes((_a2 = this._input) == null ? void 0 : _a2.localName) ? html`<sbb-icon
873
862
  name="chevron-small-down-small"
874
863
  class="sbb-form-field__select-input-icon"
875
864
  ></sbb-icon>` : nothing}
@@ -934,4 +923,4 @@ let SbbFormFieldElement = (() => {
934
923
  export {
935
924
  SbbFormFieldElement
936
925
  };
937
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9mb3JtLWZpZWxkL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgaXNTZXJ2ZXIsXG4gIExpdEVsZW1lbnQsXG4gIG5vdGhpbmcsXG4gIHR5cGUgUHJvcGVydHlWYWx1ZXMsXG4gIHR5cGUgVGVtcGxhdGVSZXN1bHQsXG59IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgU2JiSW5wdXRNb2RhbGl0eSB9IGZyb20gJy4uLy4uL2NvcmUvYTExeS5qcyc7XG5pbXBvcnQgeyBzYmJJbnB1dE1vZGFsaXR5RGV0ZWN0b3IgfSBmcm9tICcuLi8uLi9jb3JlL2ExMXkuanMnO1xuaW1wb3J0IHsgU2JiTGFuZ3VhZ2VDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy5qcyc7XG5pbXBvcnQgeyBmb3JjZVR5cGUsIHNsb3RTdGF0ZSB9IGZyb20gJy4uLy4uL2NvcmUvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBpc0ZpcmVmb3gsIGlzTGVhbiwgc2V0T3JSZW1vdmVBdHRyaWJ1dGUgfSBmcm9tICcuLi8uLi9jb3JlL2RvbS5qcyc7XG5pbXBvcnQgeyBpMThuT3B0aW9uYWwgfSBmcm9tICcuLi8uLi9jb3JlL2kxOG4uanMnO1xuaW1wb3J0IHsgU2JiSHlkcmF0aW9uTWl4aW4sIFNiYk5lZ2F0aXZlTWl4aW4gfSBmcm9tICcuLi8uLi9jb3JlL21peGlucy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYlNlbGVjdEVsZW1lbnQgfSBmcm9tICcuLi8uLi9zZWxlY3QuanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9mb3JtLWZpZWxkLnNjc3M/bGl0JmlubGluZSc7XG5cbmltcG9ydCAnLi4vLi4vaWNvbi5qcyc7XG5cbmxldCBuZXh0SWQgPSAwO1xubGV0IG5leHRGb3JtRmllbGRFcnJvcklkID0gMDtcblxuY29uc3QgcGF0Y2hlZElucHV0cyA9IG5ldyBXZWFrTWFwPEhUTUxJbnB1dEVsZW1lbnQsIFByb3BlcnR5RGVzY3JpcHRvcj4oKTtcblxuLyoqXG4gKiBJdCB3cmFwcyBhbiBpbnB1dCBlbGVtZW50IGFkZGluZyBsYWJlbCwgZXJyb3JzLCBpY29uLCBldGMuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhpcyBzbG90IHRvIHJlbmRlciBhbiBpbnB1dC9zZWxlY3Qgb3IgYSBzdXBwb3J0ZWQgbm9uLW5hdGl2ZSBlbGVtZW50LlxuICogQHNsb3QgbGFiZWwgLSBVc2UgdGhpcyBzbG90IHRvIHJlbmRlciBhIGxhYmVsLlxuICogQHNsb3QgcHJlZml4IC0gVXNlIHRoaXMgc2xvdCB0byByZW5kZXIgYW4gaWNvbiBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBpbnB1dC5cbiAqIEBzbG90IHN1ZmZpeCAtIFVzZSB0aGlzIHNsb3QgdG8gcmVuZGVyIGFuIGljb24gb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGlucHV0LlxuICogQHNsb3QgZXJyb3IgLSBVc2UgdGhpcyBzbG90IHRvIHJlbmRlciBhbiBlcnJvci5cbiAqL1xuZXhwb3J0XG5AY3VzdG9tRWxlbWVudCgnc2JiLWZvcm0tZmllbGQnKVxuQHNsb3RTdGF0ZSgpXG5jbGFzcyBTYmJGb3JtRmllbGRFbGVtZW50IGV4dGVuZHMgU2JiTmVnYXRpdmVNaXhpbihTYmJIeWRyYXRpb25NaXhpbihMaXRFbGVtZW50KSkge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdXBwb3J0ZWROYXRpdmVJbnB1dEVsZW1lbnRzID0gW1xuICAgICdpbnB1dCcsXG4gICAgJ3NlbGVjdCcsXG4gICAgJ3RleHRhcmVhJyxcbiAgICAnc2JiLWRhdGUtaW5wdXQnLFxuICBdO1xuICAvLyBMaXN0IG9mIHN1cHBvcnRlZCBlbGVtZW50IHNlbGVjdG9ycyBpbiB1bm5hbWVkIHNsb3RcbiAgcHJpdmF0ZSByZWFkb25seSBfc3VwcG9ydGVkSW5wdXRFbGVtZW50cyA9IFtcbiAgICAuLi50aGlzLl9zdXBwb3J0ZWROYXRpdmVJbnB1dEVsZW1lbnRzLFxuICAgICdzYmItc2VsZWN0JyxcbiAgICAnc2JiLXNsaWRlcicsXG4gIF07XG4gIC8vIExpc3Qgb2YgZWxlbWVudHMgdGhhdCBzaG91bGQgbm90IGZvY3VzIGlucHV0IG9uIGNsaWNrXG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4Y2x1ZGVkRm9jdXNFbGVtZW50cyA9IFsnYnV0dG9uJywgJ3NiYi1wb3BvdmVyJywgJ3NiYi1vcHRpb24nLCAnc2JiLWNoaXAnXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9mbG9hdGluZ0xhYmVsU3VwcG9ydGVkSW5wdXRFbGVtZW50cyA9IFtcbiAgICAnaW5wdXQnLFxuICAgICdzZWxlY3QnLFxuICAgICdzYmItZGF0ZS1pbnB1dCcsXG4gICAgJ3NiYi1zZWxlY3QnLFxuICAgICd0ZXh0YXJlYScsXG4gIF07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZmxvYXRpbmdMYWJlbFN1cHBvcnRlZElucHV0VHlwZXMgPSBbXG4gICAgJ2VtYWlsJyxcbiAgICAnbnVtYmVyJyxcbiAgICAncGFzc3dvcmQnLFxuICAgICdzZWFyY2gnLFxuICAgICd0ZWwnLFxuICAgICd0ZXh0JyxcbiAgICAndXJsJyxcbiAgXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZXNlcnZlIHNwYWNlIGZvciBhbiBlcnJvciBtZXNzYWdlLlxuICAgKiBgbm9uZWAgZG9lcyBub3QgcmVzZXJ2ZSBhbnkgc3BhY2UuXG4gICAqIGByZXNlcnZlYCBkb2VzIHJlc2VydmUgb25lIHJvdyBmb3IgYW4gZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2Vycm9yLXNwYWNlJywgcmVmbGVjdDogdHJ1ZSB9KVxuICBwdWJsaWMgYWNjZXNzb3IgZXJyb3JTcGFjZTogJ25vbmUnIHwgJ3Jlc2VydmUnID0gJ25vbmUnO1xuXG4gIC8qKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgaW5wdXQgaXMgb3B0aW9uYWwuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBvcHRpb25hbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTaXplIHZhcmlhbnQsIGVpdGhlciBsLCBtIG9yIHMuXG4gICAqIEBkZWZhdWx0ICdtJyAvICdzJyAobGVhbilcbiAgICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSkgcHVibGljIGFjY2Vzc29yIHNpemU6ICdsJyB8ICdtJyB8ICdzJyA9IGlzTGVhbigpID8gJ3MnIDogJ20nO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGRpc3BsYXkgdGhlIGZvcm0gZmllbGQgd2l0aG91dCBhIGJvcmRlci4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGJvcmRlcmxlc3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogRGVmaW5lcyB0aGUgd2lkdGggb2YgdGhlIGNvbXBvbmVudDpcbiAgICogLSBgZGVmYXVsdGA6IHRoZSBjb21wb25lbnQgaGFzIGRlZmluZWQgd2lkdGggYW5kIG1pbi13aWR0aDtcbiAgICogLSBgY29sbGFwc2VgOiB0aGUgY29tcG9uZW50IGFkYXB0cyBpdHNlbGYgdG8gaXRzIGlubmVyIGlucHV0IGNvbnRlbnQuICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSkgcHVibGljIGFjY2Vzc29yIHdpZHRoOiAnZGVmYXVsdCcgfCAnY29sbGFwc2UnID0gJ2RlZmF1bHQnO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHZpc3VhbGx5IGhpZGUgdGhlIGxhYmVsLiBJZiBoaWRkZW4sIHNjcmVlbiByZWFkZXJzIHdpbGwgc3RpbGwgcmVhZCBpdC4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2hpZGRlbi1sYWJlbCcsIHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGhpZGRlbkxhYmVsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGxhYmVsIHNob3VsZCBmbG9hdC4gSWYgYWN0aXZhdGVkLCB0aGUgcGxhY2Vob2xkZXIgb2YgdGhlIGlucHV0IGlzIGhpZGRlbi4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2Zsb2F0aW5nLWxhYmVsJywgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgZmxvYXRpbmdMYWJlbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBJdCBpcyB1c2VkIGludGVybmFsbHkgdG8gZ2V0IHRoZSBgZXJyb3JgIHNsb3QuICovXG4gIEBzdGF0ZSgpIHByaXZhdGUgYWNjZXNzb3IgX2Vycm9yRWxlbWVudHM6IEVsZW1lbnRbXSA9IFtdO1xuXG4gIC8qKiBPcmlnaW5hbCBhcmlhLWRlc2NyaWJlZGJ5IHZhbHVlIG9mIHRoZSBzbG90dGVkIGlucHV0IGVsZW1lbnQuICovXG4gIHByaXZhdGUgX29yaWdpbmFsSW5wdXRBcmlhRGVzY3JpYmVkYnk/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIHNsb3R0ZWQgaW5wdXQgZWxlbWVudC4gKi9cbiAgQHN0YXRlKCkgcHJpdmF0ZSBhY2Nlc3NvciBfaW5wdXQhOiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFNlbGVjdEVsZW1lbnQgfCBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBzbG90dGVkIGxhYmVsIGVsZW1lbnRzLiAqL1xuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF9sYWJlbCE6IEhUTUxMYWJlbEVsZW1lbnQ7XG5cbiAgLyoqIFJldHVybnMgdGhlIGlucHV0IGVsZW1lbnQuICovXG4gIHB1YmxpYyBnZXQgaW5wdXRFbGVtZW50KCk6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MU2VsZWN0RWxlbWVudCB8IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW5wdXQ7XG4gIH1cblxuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgLyoqXG4gICAqIExpc3RlbnMgdG8gdGhlIGNoYW5nZXMgb24gYHJlYWRvbmx5YCBhbmQgYGRpc2FibGVkYCBhdHRyaWJ1dGVzIG9mIGA8aW5wdXQ+YC5cbiAgICovXG4gIHByaXZhdGUgX2Zvcm1GaWVsZEF0dHJpYnV0ZU9ic2VydmVyID0gIWlzU2VydmVyXG4gICAgPyBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zOiBNdXRhdGlvblJlY29yZFtdKSA9PiB7XG4gICAgICAgIGlmIChtdXRhdGlvbnMuc29tZSgobSkgPT4gbS50eXBlID09PSAnYXR0cmlidXRlcycpKSB7XG4gICAgICAgICAgdGhpcy5fcmVhZElucHV0U3RhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICA6IG51bGw7XG5cbiAgcHJpdmF0ZSBfaW5wdXRBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5fcmVnaXN0ZXJJbnB1dExpc3RlbmVyKCk7XG4gICAgdGhpcy5fc3luY05lZ2F0aXZlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ25lZ2F0aXZlJykpIHtcbiAgICAgIHRoaXMuX3N5bmNOZWdhdGl2ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX2Zvcm1GaWVsZEF0dHJpYnV0ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5faW5wdXRBYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICBpZiAodGhpcy5faW5wdXQ/LmxvY2FsTmFtZSA9PT0gJ2lucHV0Jykge1xuICAgICAgdGhpcy5fdW5wYXRjaElucHV0VmFsdWUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVXcmFwcGVyQ2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzRWxlbWVudEZvY3VzRXhjbHVkZWQoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5faW5wdXQ/LmxvY2FsTmFtZSA9PT0gJ3NiYi1zZWxlY3QnICYmXG4gICAgICAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5sb2NhbE5hbWUgIT09ICdzYmItc2VsZWN0J1xuICAgICkge1xuICAgICAgdGhpcy5faW5wdXQuY2xpY2soKTtcbiAgICAgIHRoaXMuX2lucHV0LmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmICgoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpLmxvY2FsTmFtZSAhPT0gJ2xhYmVsJykge1xuICAgICAgdGhpcy5faW5wdXQ/LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNFbGVtZW50Rm9jdXNFeGNsdWRlZChldmVudDogRXZlbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZXZlbnRcbiAgICAgIC5jb21wb3NlZFBhdGgoKVxuICAgICAgLnNvbWUoXG4gICAgICAgIChlbCkgPT5cbiAgICAgICAgICAoZWwgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTEVsZW1lbnQgJiZcbiAgICAgICAgICAgIChlbC5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JykgPT09ICcwJyB8fCBlbC5oYXNBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScpKSkgfHxcbiAgICAgICAgICB0aGlzLl9leGNsdWRlZEZvY3VzRWxlbWVudHMuaW5jbHVkZXMoKGVsIGFzIEhUTUxFbGVtZW50KS5sb2NhbE5hbWUpLFxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uU2xvdExhYmVsQ2hhbmdlKCk6IHZvaWQge1xuICAgIGNvbnN0IGxhYmVscyA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdsYWJlbCcpKTtcbiAgICBpZiAoaW1wb3J0Lm1ldGEuZW52LkRFViAmJiBsYWJlbHMubGVuZ3RoID4gMSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgRGV0ZWN0ZWQgbW9yZSB0aGFuIG9uZSBsYWJlbCBpbiBzYmItZm9ybS1maWVsZCMke3RoaXMuaWR9LiBPbmx5IG9uZSBsYWJlbCBpcyBzdXBwb3J0ZWQuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuX2xhYmVsID0gbGFiZWxzWzBdO1xuICAgIHRoaXMuX3N5bmNMYWJlbElucHV0UmVmZXJlbmNlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IGlzIHVzZWQgaW50ZXJuYWxseSB0byBhc3NpZ24gdGhlIGF0dHJpYnV0ZXMgb2YgYDxpbnB1dD5gIHRvIGBfaWRgIGFuZCBgX2lucHV0YCBhbmQgdG8gb2JzZXJ2ZSB0aGUgbmF0aXZlIHJlYWRvbmx5IGFuZCBkaXNhYmxlZCBhdHRyaWJ1dGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBfb25TbG90SW5wdXRDaGFuZ2UoKTogdm9pZCB7XG4gICAgLy8gRmluZCB0aGUgc2xvdHRlZCAnc3VwcG9ydGVkSW5wdXRFbGVtZW50JywgZXZlbiBpZiBpdCdzIG5lc3RlZFxuICAgIGNvbnN0IG5ld0lucHV0ID0gdGhpcy5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihcbiAgICAgIGA6d2hlcmUoJHt0aGlzLl9zdXBwb3J0ZWRJbnB1dEVsZW1lbnRzLmpvaW4oJywnKX0pYCxcbiAgICApO1xuXG4gICAgdGhpcy5fYXNzaWduU2xvdHMoKTtcblxuICAgIGlmICh0aGlzLl9pbnB1dCAmJiB0aGlzLl9pbnB1dC5sb2NhbE5hbWUgPT09ICdpbnB1dCcgJiYgbmV3SW5wdXQgIT09IHRoaXMuX2lucHV0KSB7XG4gICAgICB0aGlzLl91bnBhdGNoSW5wdXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIGlmICghbmV3SW5wdXQpIHtcbiAgICAgIHRoaXMuX2lucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lucHV0ID0gbmV3SW5wdXQ7XG4gICAgdGhpcy5fb3JpZ2luYWxJbnB1dEFyaWFEZXNjcmliZWRieSA9IHRoaXMuX2lucHV0LmdldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpO1xuICAgIHRoaXMuX2FwcGx5QXJpYURlc2NyaWJlZGJ5KCk7XG4gICAgdGhpcy5fcmVhZElucHV0U3RhdGUoKTtcbiAgICB0aGlzLl9yZWdpc3RlcklucHV0TGlzdGVuZXIoKTtcblxuICAgIGlmICh0aGlzLl9pbnB1dC5sb2NhbE5hbWUgPT09ICd0ZXh0YXJlYScpIHtcbiAgICAgIHRoaXMuX2lucHV0LnNldEF0dHJpYnV0ZSgncm93cycsIHRoaXMuX2lucHV0LmdldEF0dHJpYnV0ZSgncm93cycpIHx8ICczJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fZm9ybUZpZWxkQXR0cmlidXRlT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLl9mb3JtRmllbGRBdHRyaWJ1dGVPYnNlcnZlcj8ub2JzZXJ2ZSh0aGlzLl9pbnB1dCwge1xuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydyZWFkb25seScsICdkaXNhYmxlZCcsICdjbGFzcycsICdkYXRhLXNiYi1pbnZhbGlkJywgJ2RhdGEtZXhwYW5kZWQnXSxcbiAgICB9KTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnZGF0YS1pbnB1dC10eXBlJywgdGhpcy5faW5wdXQubG9jYWxOYW1lKTtcbiAgICB0aGlzLl9zeW5jTGFiZWxJbnB1dFJlZmVyZW5jZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3N5bmNMYWJlbElucHV0UmVmZXJlbmNlcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lucHV0IHx8ICF0aGlzLl9sYWJlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdXBwb3J0ZWROYXRpdmVJbnB1dEVsZW1lbnRzLmluY2x1ZGVzKHRoaXMuX2lucHV0LmxvY2FsTmFtZSkpIHtcbiAgICAgIC8vIEZvciBuYXRpdmUgaW5wdXQgZWxlbWVudHMgd2UgdXNlIHRoZSBgZm9yYCBhdHRyaWJ1dGUgb24gdGhlIGxhYmVsIHRvIHJlZmVyZW5jZSB0aGUgaW5wdXRcbiAgICAgIC8vIHZpYSBpZCByZWZlcmVuY2UuXG4gICAgICBpZiAoIXRoaXMuX2lucHV0LmlkKSB7XG4gICAgICAgIHRoaXMuX2lucHV0LmlkID0gYHNiYi1mb3JtLWZpZWxkLWlucHV0LSR7bmV4dElkKyt9YDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbGFiZWwuaHRtbEZvciA9IHRoaXMuX2lucHV0LmlkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3Igbm9uLW5hdGl2ZSBpbnB1dCBlbGVtZW50cywgdGhhdCBkbyBub3Qgc3VwcG9ydCByZWZlcmVuY2VzIHZpYSB0aGUgbGFiZWwgZm9yIGF0dHJpYnV0ZSxcbiAgICAgIC8vIHdlIHVzZSBhcmlhLWxhYmVsbGVkYnkgb24gdGhlIGlucHV0IGVsZW1lbnQgdG8gcmVmZXJlbmNlIHRoZSBsYWJlbCBlbGVtZW50IHZpYSBpZC5cbiAgICAgIGlmICghdGhpcy5fbGFiZWwuaWQpIHtcbiAgICAgICAgdGhpcy5fbGFiZWwuaWQgPSBgc2JiLWZvcm0tZmllbGQtbGFiZWwtJHtuZXh0SWQrK31gO1xuICAgICAgfVxuICAgICAgY29uc3QgbGFiZWxsZWRieSA9XG4gICAgICAgIHRoaXMuX2lucHV0XG4gICAgICAgICAgLmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5JylcbiAgICAgICAgICA/LnNwbGl0KCcgJylcbiAgICAgICAgICAuZmlsdGVyKChsKSA9PiAhIWwgJiYgbCAhPT0gdGhpcy5fbGFiZWwhLmlkKSA/PyBbXTtcbiAgICAgIHRoaXMuX2lucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5JywgWy4uLmxhYmVsbGVkYnksIHRoaXMuX2xhYmVsLmlkXS5qb2luKCcgJykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVySW5wdXRMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lucHV0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgdGhpcy5faW5wdXRBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG5cbiAgICAvLyBUaW1lb3V0IG5lZWRlZCB0byBoYXZlIHZhbHVlIHVwZGF0ZWRcbiAgICB0aGlzLl9nZXRJbnB1dEZvcm0oKT8uYWRkRXZlbnRMaXN0ZW5lcigncmVzZXQnLCAoKSA9PiBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzZXQoKSksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5faW5wdXRBYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgdGhpcy5faW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB0aGlzLl9jaGVja0FuZFVwZGF0ZUlucHV0RW1wdHkoKSwge1xuICAgICAgc2lnbmFsOiB0aGlzLl9pbnB1dEFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4gdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5faW5wdXRBYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgLy8gV2Ugd2FudCB0byBwcmV2ZW50IHRoZSBuYXRpdmUgYnJvd3NlciB2YWxpZGF0aW9uIG1lc3NhZ2UgcG9wb3ZlclxuICAgIC8vIHRvIGJlIHNob3duLiBUaGlzIGFsc28gcHJldmVudHMgYSBidWcgaW4gV2ViS2l0LCB3aGljaCB3b3VsZCBub3RcbiAgICAvLyBhbGxvdyBob3N0IGFzIHRoZSB2YWxpZGl0eSBhbmNob3I6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk4MzJcbiAgICAvLyBUaGlzIGlzIGR1cGxpY2F0ZWQgZnJvbSB0aGUgZm9ybSBhc3NvY2lhdGVkIG1peGluIGZvciB0aGUgbmF0aXZlXG4gICAgLy8gaW5wdXQgY29udHJvbHMgKGUuZy4gPGlucHV0PiBvciA8c2VsZWN0PikuXG4gICAgdGhpcy5faW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW52YWxpZCcsIChlKSA9PiBlLnByZXZlbnREZWZhdWx0KCksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5faW5wdXRBYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgbGV0IGlucHV0Rm9jdXNFbGVtZW50ID0gdGhpcy5faW5wdXQ7XG5cbiAgICBpZiAodGhpcy5faW5wdXQubG9jYWxOYW1lID09PSAnaW5wdXQnKSB7XG4gICAgICB0aGlzLl9wYXRjaElucHV0VmFsdWUoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lucHV0LmxvY2FsTmFtZSA9PT0gJ3NiYi1zZWxlY3QnKSB7XG4gICAgICB0aGlzLl9pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdkaXNwbGF5VmFsdWVDaGFuZ2UnLCAoKSA9PiB0aGlzLl9jaGVja0FuZFVwZGF0ZUlucHV0RW1wdHkoKSwge1xuICAgICAgICBzaWduYWw6IHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzZWxlY3RJbnB1dCA9IHRoaXMuX2lucHV0IGFzIFNiYlNlbGVjdEVsZW1lbnQ7XG4gICAgICBpbnB1dEZvY3VzRWxlbWVudCA9IHNlbGVjdElucHV0LmlucHV0RWxlbWVudDtcblxuICAgICAgLy8gSWYgaW5wdXRFbGVtZW50IGlzIG5vdCB5ZXQgcmVhZHksIHRyeSBhIHNlY29uZCB0aW1lIGFmdGVyIHVwZGF0aW5nLlxuICAgICAgaWYgKCFpbnB1dEZvY3VzRWxlbWVudCkge1xuICAgICAgICBjb25zdCBjb250cm9sbGVyID0ge1xuICAgICAgICAgIGhvc3RVcGRhdGVkOiAoKSA9PiB7XG4gICAgICAgICAgICBzZWxlY3RJbnB1dC5yZW1vdmVDb250cm9sbGVyKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJJbnB1dExpc3RlbmVyKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICBzZWxlY3RJbnB1dC5hZGRDb250cm9sbGVyKGNvbnRyb2xsZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlucHV0Rm9jdXNFbGVtZW50Py5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2ZvY3VzaW4nLFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1pbnB1dC1mb2N1c2VkJywgdHJ1ZSk7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFxuICAgICAgICAgICdkYXRhLWZvY3VzLW9yaWdpbicsXG4gICAgICAgICAgKHNiYklucHV0TW9kYWxpdHlEZXRlY3Rvci5tb3N0UmVjZW50TW9kYWxpdHkgYXMgU2JiSW5wdXRNb2RhbGl0eSkgPz8gJycsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzaWduYWw6IHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGlucHV0Rm9jdXNFbGVtZW50Py5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2ZvY3Vzb3V0JyxcbiAgICAgICgpID0+XG4gICAgICAgIFsnZGF0YS1mb2N1cy1vcmlnaW4nLCAnZGF0YS1pbnB1dC1mb2N1c2VkJ10uZm9yRWFjaCgobmFtZSkgPT4gdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSkpLFxuICAgICAge1xuICAgICAgICBzaWduYWw6IHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldElucHV0Rm9ybSgpOiBIVE1MRm9ybUVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5faW5wdXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50IHx8IHRoaXMuX2lucHV0IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnB1dC5mb3JtO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faW5wdXQ/LmNsb3Nlc3QoJ2Zvcm0nKTtcbiAgfVxuXG4gIC8vIFdlIG5lZWQgdG8gcGF0Y2ggdGhlIHZhbHVlIHByb3BlcnR5IG9mIHRoZSBIVE1MSW5wdXRFbGVtZW50IGluIG9yZGVyXG4gIC8vIHRvIGJlIGFibGUgdG8gcmVzZXQgdGhlIGZsb2F0aW5nIGxhYmVsIGluIHRoZSBlbXB0eSBzdGF0ZS5cbiAgcHJpdmF0ZSBfcGF0Y2hJbnB1dFZhbHVlKCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IHRoaXMuX2lucHV0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3Qgb3JpZ2luYWxEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihpbnB1dEVsZW1lbnQpLFxuICAgICAgJ3ZhbHVlJyxcbiAgICApO1xuXG4gICAgaWYgKCFvcmlnaW5hbERlc2NyaXB0b3IgfHwgIW9yaWdpbmFsRGVzY3JpcHRvci5zZXQgfHwgIW9yaWdpbmFsRGVzY3JpcHRvci5nZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwYXRjaGVkSW5wdXRzLnNldChpbnB1dEVsZW1lbnQsIG9yaWdpbmFsRGVzY3JpcHRvcik7XG5cbiAgICBjb25zdCB7IGdldDogZ2V0dGVyLCBzZXQ6IHNldHRlciB9ID0gb3JpZ2luYWxEZXNjcmlwdG9yO1xuICAgIGNvbnN0IGNoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSA9ICgpOiB2b2lkID0+IHRoaXMuX2NoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGlucHV0RWxlbWVudCwgJ3ZhbHVlJywge1xuICAgICAgLi4ub3JpZ2luYWxEZXNjcmlwdG9yLFxuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZ2V0dGVyLmNhbGwodGhpcyk7XG4gICAgICB9LFxuICAgICAgc2V0KG5ld1ZhbHVlKSB7XG4gICAgICAgIHNldHRlci5jYWxsKHRoaXMsIG5ld1ZhbHVlKTtcbiAgICAgICAgY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdW5wYXRjaElucHV0VmFsdWUoKTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gdGhpcy5faW5wdXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCBvcmlnaW5hbERlc2NyaXB0b3IgPSBwYXRjaGVkSW5wdXRzLmdldChpbnB1dEVsZW1lbnQpO1xuICAgIGlmIChvcmlnaW5hbERlc2NyaXB0b3IpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnB1dEVsZW1lbnQsICd2YWx1ZScsIG9yaWdpbmFsRGVzY3JpcHRvcik7XG4gICAgICBwYXRjaGVkSW5wdXRzLmRlbGV0ZShpbnB1dEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZShcbiAgICAgICdkYXRhLWlucHV0LWVtcHR5JyxcbiAgICAgIHRoaXMuX2Zsb2F0aW5nTGFiZWxTdXBwb3J0ZWRJbnB1dEVsZW1lbnRzLmluY2x1ZGVzKHRoaXMuX2lucHV0Py5sb2NhbE5hbWUgYXMgc3RyaW5nKSAmJlxuICAgICAgICB0aGlzLl9pc0lucHV0RW1wdHkoKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNJbnB1dEVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNoaXBHcm91cEVsZW0gPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3NiYi1jaGlwLWdyb3VwJyk7XG4gICAgaWYgKGNoaXBHcm91cEVsZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLl9pc0lucHV0VmFsdWVFbXB0eSgpICYmIGNoaXBHcm91cEVsZW0udmFsdWUubGVuZ3RoID09PSAwO1xuICAgIH0gZWxzZSBpZiAodGhpcy5faW5wdXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLl9mbG9hdGluZ0xhYmVsU3VwcG9ydGVkSW5wdXRUeXBlcy5pbmNsdWRlcyh0aGlzLl9pbnB1dC50eXBlKSAmJlxuICAgICAgICB0aGlzLl9pc0lucHV0VmFsdWVFbXB0eSgpXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5faW5wdXQgaW5zdGFuY2VvZiBIVE1MU2VsZWN0RWxlbWVudCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2lucHV0LnNlbGVjdGVkT3B0aW9ucz8uaXRlbSgwKT8ubGFiZWw/LnRyaW0oKSA9PT0gJyc7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9pbnB1dD8ubG9jYWxOYW1lID09PSAnc2JiLXNlbGVjdCcpIHtcbiAgICAgIHJldHVybiAodGhpcy5faW5wdXQgYXMgU2JiU2VsZWN0RWxlbWVudCkuZ2V0RGlzcGxheVZhbHVlKCk/LnRyaW0oKSA9PT0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9pc0lucHV0VmFsdWVFbXB0eSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzSW5wdXRWYWx1ZUVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gKHRoaXMuX2lucHV0IGFzIHsgdmFsdWU6IHN0cmluZyB9KS52YWx1ZTtcbiAgICByZXR1cm4gWycnLCB1bmRlZmluZWQsIG51bGxdLmluY2x1ZGVzKHZhbHVlKSB8fCAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Fzc2lnblNsb3RzKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbCgnbGFiZWw6bm90KFtzbG90XSknKS5mb3JFYWNoKChlKSA9PiBlLnNldEF0dHJpYnV0ZSgnc2xvdCcsICdsYWJlbCcpKTtcbiAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3NiYi1mb3JtLWVycm9yOm5vdChbc2xvdF0pJykuZm9yRWFjaCgoZSkgPT5cbiAgICAgIGUuc2V0QXR0cmlidXRlKCdzbG90JywgJ2Vycm9yJyksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlYWRJbnB1dFN0YXRlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW5wdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtcmVhZG9ubHknLCB0aGlzLl9pbnB1dC5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykpO1xuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWRpc2FibGVkJywgdGhpcy5faW5wdXQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKTtcbiAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZShcbiAgICAgICdkYXRhLWludmFsaWQnLFxuICAgICAgdGhpcy5faW5wdXQuaGFzQXR0cmlidXRlKCdkYXRhLXNiYi1pbnZhbGlkJykgfHxcbiAgICAgICAgdGhpcy5faW5wdXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdzYmItaW52YWxpZCcpIHx8XG4gICAgICAgICh0aGlzLl9pbnB1dC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLXRvdWNoZWQnKSAmJlxuICAgICAgICAgIHRoaXMuX2lucHV0LmNsYXNzTGlzdC5jb250YWlucygnbmctaW52YWxpZCcpKSxcbiAgICApO1xuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWhhcy1wb3B1cC1vcGVuJywgdGhpcy5faW5wdXQhLmhhc0F0dHJpYnV0ZSgnZGF0YS1leHBhbmRlZCcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCBpcyB1c2VkIGludGVybmFsbHkgdG8gc2V0IHRoZSBhcmlhLWRlc2NyaWJlZGJ5IGF0dHJpYnV0ZSBmb3IgdGhlIHNsb3R0ZWQgaW5wdXQgcmVmZXJlbmNpbmcgYXZhaWxhYmxlIDxzYmItZm9ybS1lcnJvcj4gaW5zdGFuY2VzLlxuICAgKi9cbiAgcHJpdmF0ZSBfb25TbG90RXJyb3JDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5fZXJyb3JFbGVtZW50cyA9IChldmVudC50YXJnZXQgYXMgSFRNTFNsb3RFbGVtZW50KS5hc3NpZ25lZEVsZW1lbnRzKCk7XG5cbiAgICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMuX2Vycm9yRWxlbWVudHMpIHtcbiAgICAgIC8vIEFsdGhvdWdoIGEgZm9ybSBlcnJvciBhc3NpZ25zIGFuIGlkIGl0c2VsZiwgd2UgbmVlZCB0byBiZSBlYXJsaWVyIGJ5IGNyZWF0aW5nIG9uZSBoZXJlXG4gICAgICBpZiAoIWVsLmlkKSB7XG4gICAgICAgIGVsLmlkID0gYHNiYi1mb3JtLWZpZWxkLWVycm9yLSR7KytuZXh0Rm9ybUZpZWxkRXJyb3JJZH1gO1xuICAgICAgfVxuICAgICAgaWYgKCFlbC5yb2xlKSB7XG4gICAgICAgIC8vIEluc3RlYWQgb2YgZGVmaW5pbmcgYSBjb250YWluZXIgd2l0aCBhbiBhcmlhLWxpdmUgcmVnaW9uIGFzIGV4cGVjdGVkLCB3ZSBoYWQgdG8gY2hhbmdlXG4gICAgICAgIC8vIHNldHRpbmcgaXQgZm9yIGV2ZXJ5IHNsb3R0ZWQgZWxlbWVudCB0byBwcm9wZXJseSB3b3JrIGluIGFsbCBicm93c2VycyBhbmQgc2NyZWVuIHJlYWRlciBjb21iaW5hdGlvbnMuXG4gICAgICAgIGVsLnJvbGUgPSAnc3RhdHVzJztcbiAgICAgICAgaWYgKGlzRmlyZWZveCkge1xuICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgncm9sZScsICdzdGF0dXMnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9hcHBseUFyaWFEZXNjcmliZWRieSgpO1xuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWhhcy1lcnJvcicsICEhdGhpcy5fZXJyb3JFbGVtZW50cy5sZW5ndGgpO1xuICAgIHRoaXMuX3N5bmNOZWdhdGl2ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlBcmlhRGVzY3JpYmVkYnkoKTogdm9pZCB7XG4gICAgY29uc3QgaWRzID0gW107XG5cbiAgICBpZiAodGhpcy5fb3JpZ2luYWxJbnB1dEFyaWFEZXNjcmliZWRieSkge1xuICAgICAgaWRzLnB1c2godGhpcy5fb3JpZ2luYWxJbnB1dEFyaWFEZXNjcmliZWRieSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2Vycm9yRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9lcnJvckVsZW1lbnRzLmZvckVhY2goKGUpID0+IGlkcy5wdXNoKGUuaWQpKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcmlhRGVzY3JpYmVkYnkgPSBpZHMuam9pbignICcpO1xuICAgIGlmICh0aGlzLl9pbnB1dCkge1xuICAgICAgc2V0T3JSZW1vdmVBdHRyaWJ1dGUodGhpcy5faW5wdXQsICdhcmlhLWRlc2NyaWJlZGJ5JywgYXJpYURlc2NyaWJlZGJ5KTtcbiAgICB9XG4gIH1cblxuICAvKiogTWFudWFsbHkgcmVzZXQgdGhlIGZvcm0gZmllbGQuIEN1cnJlbnRseSwgdGhpcyBvbmx5IHJlc2V0cyB0aGUgZmxvYXRpbmcgbGFiZWwuICovXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGVja0FuZFVwZGF0ZUlucHV0RW1wdHkoKTtcbiAgfVxuXG4gIC8qKiBNYW51YWxseSBjbGVhcnMgdGhlIGlucHV0IHZhbHVlLiBJdCBvbmx5IHdvcmtzIGZvciBpbnB1dHMsIHNlbGVjdHMgYXJlIG5vdCBzdXBwb3J0ZWQuICovXG4gIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcbiAgICBpZiAoKHRoaXMuX2lucHV0Py5sb2NhbE5hbWUgYXMgc3RyaW5nKSAhPT0gJ2lucHV0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAodGhpcy5faW5wdXQgYXMgeyB2YWx1ZTogc3RyaW5nIH0pLnZhbHVlID0gJyc7XG4gICAgdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG4gIH1cblxuICBwcml2YXRlIF9zeW5jTmVnYXRpdmUoKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy4oXG4gICAgICAnc2JiLWZvcm0tZXJyb3Isc2JiLW1pbmktYnV0dG9uLHNiYi1wb3BvdmVyLXRyaWdnZXIsc2JiLWZvcm0tZmllbGQtY2xlYXIsc2JiLWRhdGVwaWNrZXItbmV4dC1kYXksc2JiLWRhdGVwaWNrZXItcHJldmlvdXMtZGF5LHNiYi1kYXRlcGlja2VyLXRvZ2dsZSxzYmItc2VsZWN0LHNiYi1hdXRvY29tcGxldGUsc2JiLWF1dG9jb21wbGV0ZS1ncmlkLHNiYi1jaGlwLWdyb3VwJyxcbiAgICApLmZvckVhY2goKGVsZW1lbnQpID0+IGVsZW1lbnQudG9nZ2xlQXR0cmlidXRlKCduZWdhdGl2ZScsIHRoaXMubmVnYXRpdmUpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1mb3JtLWZpZWxkX19zcGFjZS13cmFwcGVyXCI+XG4gICAgICAgICR7LyogUXVlcmllZCBieSBpZCBmcm9tIHRoZSBhdXRvY29tcGxldGUvc2VsZWN0IHRvIGJlIHVzZWQgYXMgdGhlIGFuY2hvciBlbGVtZW50ICovICcnfVxuICAgICAgICA8ZGl2IEBjbGljaz0ke3RoaXMuX2hhbmRsZVdyYXBwZXJDbGlja30gY2xhc3M9XCJzYmItZm9ybS1maWVsZF9fd3JhcHBlclwiIGlkPVwib3ZlcmxheS1hbmNob3JcIj5cbiAgICAgICAgICA8c2xvdCBuYW1lPVwicHJlZml4XCIgQHNsb3RjaGFuZ2U9JHt0aGlzLl9zeW5jTmVnYXRpdmV9Pjwvc2xvdD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX2lucHV0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItZm9ybS1maWVsZF9fbGFiZWwtc3BhY2VyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItZm9ybS1maWVsZF9fbGFiZWxcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItZm9ybS1maWVsZF9fbGFiZWwtZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwibGFiZWxcIiBAc2xvdGNoYW5nZT0ke3RoaXMuX29uU2xvdExhYmVsQ2hhbmdlfT48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgJHt0aGlzLm9wdGlvbmFsXG4gICAgICAgICAgICAgICAgICA/IGh0bWxgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiAke2kxOG5PcHRpb25hbFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gPC9zcGFuPmBcbiAgICAgICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1mb3JtLWZpZWxkX19pbnB1dFwiPlxuICAgICAgICAgICAgICA8c2xvdCBAc2xvdGNoYW5nZT0ke3RoaXMuX29uU2xvdElucHV0Q2hhbmdlfT48L3Nsb3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICR7WydzZWxlY3QnLCAnc2JiLXNlbGVjdCddLmluY2x1ZGVzKHRoaXMuX2lucHV0Py5sb2NhbE5hbWUgYXMgc3RyaW5nKVxuICAgICAgICAgICAgICA/IGh0bWxgPHNiYi1pY29uXG4gICAgICAgICAgICAgICAgICBuYW1lPVwiY2hldnJvbi1zbWFsbC1kb3duLXNtYWxsXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX3NlbGVjdC1pbnB1dC1pY29uXCJcbiAgICAgICAgICAgICAgICA+PC9zYmItaWNvbj5gXG4gICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c2xvdCBuYW1lPVwic3VmZml4XCIgQHNsb3RjaGFuZ2U9JHt0aGlzLl9zeW5jTmVnYXRpdmV9Pjwvc2xvdD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1mb3JtLWZpZWxkX19lcnJvclwiPlxuICAgICAgICAgIDxzbG90IG5hbWU9XCJlcnJvclwiIEBzbG90Y2hhbmdlPSR7dGhpcy5fb25TbG90RXJyb3JDaGFuZ2V9Pjwvc2xvdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItZm9ybS1maWVsZCc6IFNiYkZvcm1GaWVsZEVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJfYSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCQSxJQUFJLFNBQVM7QUFDYixJQUFJLHVCQUF1QjtBQUUzQixNQUFNLG9DQUFvQjtJQWNwQix1QkFBbUIsTUFBQTs7QUFGeEIsTUFBQSxtQkFBQSxDQUFBLGNBQWMsZ0JBQWdCLEdBQzlCLFdBQVc7Ozs7QUFDc0IsTUFBQSxjQUFBLGlCQUFpQixrQkFBa0IsVUFBVSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQXRELEVBQUEsbUJBQVEsWUFBK0M7QUFBQTs7QUEwQy9FO0FBS0E7QUFNNkI7QUFLN0I7QUFLNkI7QUFLN0I7QUFLQTtBQUdTO0FBTUE7QUFHQTtBQWxGUSxXQUFBLGdDQUFnQztBQUFBLFFBQy9DO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUE7QUFHZSxXQUFBLDBCQUEwQjtBQUFB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
926
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9mb3JtLWZpZWxkL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgaXNTZXJ2ZXIsXG4gIExpdEVsZW1lbnQsXG4gIG5vdGhpbmcsXG4gIHR5cGUgUHJvcGVydHlWYWx1ZXMsXG4gIHR5cGUgVGVtcGxhdGVSZXN1bHQsXG59IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgU2JiQXV0b2NvbXBsZXRlQmFzZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9hdXRvY29tcGxldGUuanMnO1xuaW1wb3J0IHsgc2JiSW5wdXRNb2RhbGl0eURldGVjdG9yIH0gZnJvbSAnLi4vLi4vY29yZS9hMTF5LmpzJztcbmltcG9ydCB7IFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgZm9yY2VUeXBlLCBzbG90U3RhdGUgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaXNMZWFuIH0gZnJvbSAnLi4vLi4vY29yZS9kb20uanMnO1xuaW1wb3J0IHsgaTE4bk9wdGlvbmFsIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuLmpzJztcbmltcG9ydCB7XG4gIFNiYkVsZW1lbnRJbnRlcm5hbHNNaXhpbixcbiAgU2JiSHlkcmF0aW9uTWl4aW4sXG4gIFNiYk5lZ2F0aXZlTWl4aW4sXG59IGZyb20gJy4uLy4uL2NvcmUvbWl4aW5zLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiU2VsZWN0RWxlbWVudCB9IGZyb20gJy4uLy4uL3NlbGVjdC5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2Zvcm0tZmllbGQuc2Nzcz9saXQmaW5saW5lJztcblxuaW1wb3J0ICcuLi8uLi9pY29uLmpzJztcblxubGV0IG5leHRJZCA9IDA7XG5sZXQgbmV4dEZvcm1GaWVsZEVycm9ySWQgPSAwO1xuXG5jb25zdCBwYXRjaGVkSW5wdXRzID0gbmV3IFdlYWtNYXA8SFRNTElucHV0RWxlbWVudCwgUHJvcGVydHlEZXNjcmlwdG9yPigpO1xuY29uc3QgbmF0aXZlSW5wdXRFbGVtZW50cyA9IFsnaW5wdXQnLCAndGV4dGFyZWEnLCAnc2VsZWN0J107XG5cbi8qKlxuICogSXQgd3JhcHMgYW4gaW5wdXQgZWxlbWVudCBhZGRpbmcgbGFiZWwsIGVycm9ycywgaWNvbiwgZXRjLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoaXMgc2xvdCB0byByZW5kZXIgYW4gaW5wdXQvc2VsZWN0IG9yIGEgc3VwcG9ydGVkIG5vbi1uYXRpdmUgZWxlbWVudC5cbiAqIEBzbG90IGxhYmVsIC0gVXNlIHRoaXMgc2xvdCB0byByZW5kZXIgYSBsYWJlbC5cbiAqIEBzbG90IHByZWZpeCAtIFVzZSB0aGlzIHNsb3QgdG8gcmVuZGVyIGFuIGljb24gb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgaW5wdXQuXG4gKiBAc2xvdCBzdWZmaXggLSBVc2UgdGhpcyBzbG90IHRvIHJlbmRlciBhbiBpY29uIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBpbnB1dC5cbiAqIEBzbG90IGVycm9yIC0gVXNlIHRoaXMgc2xvdCB0byByZW5kZXIgYW4gZXJyb3IuXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1mb3JtLWZpZWxkJylcbkBzbG90U3RhdGUoKVxuY2xhc3MgU2JiRm9ybUZpZWxkRWxlbWVudCBleHRlbmRzIFNiYk5lZ2F0aXZlTWl4aW4oXG4gIFNiYkVsZW1lbnRJbnRlcm5hbHNNaXhpbihTYmJIeWRyYXRpb25NaXhpbihMaXRFbGVtZW50KSksXG4pIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG5cbiAgLy8gTGlzdCBvZiBlbGVtZW50cyB0aGF0IHNob3VsZCBub3QgZm9jdXMgaW5wdXQgb24gY2xpY2tcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhjbHVkZWRGb2N1c0VsZW1lbnRzID0gWydidXR0b24nLCAnc2JiLXBvcG92ZXInLCAnc2JiLW9wdGlvbicsICdzYmItY2hpcCddO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Zsb2F0aW5nTGFiZWxTdXBwb3J0ZWRJbnB1dEVsZW1lbnRzID0gW1xuICAgICdpbnB1dCcsXG4gICAgJ3NlbGVjdCcsXG4gICAgJ3NiYi1kYXRlLWlucHV0JyxcbiAgICAnc2JiLXRpbWUtaW5wdXQnLFxuICAgICdzYmItc2VsZWN0JyxcbiAgICAndGV4dGFyZWEnLFxuICBdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Zsb2F0aW5nTGFiZWxTdXBwb3J0ZWRJbnB1dFR5cGVzID0gW1xuICAgICdlbWFpbCcsXG4gICAgJ251bWJlcicsXG4gICAgJ3Bhc3N3b3JkJyxcbiAgICAnc2VhcmNoJyxcbiAgICAndGVsJyxcbiAgICAndGV4dCcsXG4gICAgJ3VybCcsXG4gIF07XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgYW4gZXJyb3IgbWVzc2FnZS5cbiAgICogYG5vbmVgIGRvZXMgbm90IHJlc2VydmUgYW55IHNwYWNlLlxuICAgKiBgcmVzZXJ2ZWAgZG9lcyByZXNlcnZlIG9uZSByb3cgZm9yIGFuIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdlcnJvci1zcGFjZScsIHJlZmxlY3Q6IHRydWUgfSlcbiAgcHVibGljIGFjY2Vzc29yIGVycm9yU3BhY2U6ICdub25lJyB8ICdyZXNlcnZlJyA9ICdub25lJztcblxuICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGlucHV0IGlzIG9wdGlvbmFsLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3Igb3B0aW9uYWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogU2l6ZSB2YXJpYW50LCBlaXRoZXIgbCwgbSBvciBzLlxuICAgKiBAZGVmYXVsdCAnbScgLyAncycgKGxlYW4pXG4gICAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBhY2Nlc3NvciBzaXplOiAnbCcgfCAnbScgfCAncycgPSBpc0xlYW4oKSA/ICdzJyA6ICdtJztcblxuICAvKiogV2hldGhlciB0byBkaXNwbGF5IHRoZSBmb3JtIGZpZWxkIHdpdGhvdXQgYSBib3JkZXIuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBib3JkZXJsZXNzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIERlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSBjb21wb25lbnQ6XG4gICAqIC0gYGRlZmF1bHRgOiB0aGUgY29tcG9uZW50IGhhcyBkZWZpbmVkIHdpZHRoIGFuZCBtaW4td2lkdGg7XG4gICAqIC0gYGNvbGxhcHNlYDogdGhlIGNvbXBvbmVudCBhZGFwdHMgaXRzZWxmIHRvIGl0cyBpbm5lciBpbnB1dCBjb250ZW50LiAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBhY2Nlc3NvciB3aWR0aDogJ2RlZmF1bHQnIHwgJ2NvbGxhcHNlJyA9ICdkZWZhdWx0JztcblxuICAvKiogV2hldGhlciB0byB2aXN1YWxseSBoaWRlIHRoZSBsYWJlbC4gSWYgaGlkZGVuLCBzY3JlZW4gcmVhZGVycyB3aWxsIHN0aWxsIHJlYWQgaXQuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdoaWRkZW4tbGFiZWwnLCByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBoaWRkZW5MYWJlbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBsYWJlbCBzaG91bGQgZmxvYXQuIElmIGFjdGl2YXRlZCwgdGhlIHBsYWNlaG9sZGVyIG9mIHRoZSBpbnB1dCBpcyBoaWRkZW4uICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdmbG9hdGluZy1sYWJlbCcsIHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGZsb2F0aW5nTGFiZWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogSXQgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIGdldCB0aGUgYGVycm9yYCBzbG90LiAqL1xuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF9lcnJvckVsZW1lbnRzOiBFbGVtZW50W10gPSBbXTtcblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBzbG90dGVkIGlucHV0IGVsZW1lbnQuICovXG4gIEBzdGF0ZSgpIHByaXZhdGUgYWNjZXNzb3IgX2lucHV0ITogSFRNTElucHV0RWxlbWVudCB8IEhUTUxTZWxlY3RFbGVtZW50IHwgSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgc2xvdHRlZCBsYWJlbCBlbGVtZW50cy4gKi9cbiAgQHN0YXRlKCkgcHJpdmF0ZSBhY2Nlc3NvciBfbGFiZWwhOiBIVE1MTGFiZWxFbGVtZW50O1xuXG4gIC8qKiBSZXR1cm5zIHRoZSBpbnB1dCBlbGVtZW50LiAqL1xuICBwdWJsaWMgZ2V0IGlucHV0RWxlbWVudCgpOiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFNlbGVjdEVsZW1lbnQgfCBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0O1xuICB9XG5cbiAgcHJpdmF0ZSBfbGFuZ3VhZ2UgPSBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpO1xuXG4gIC8qKlxuICAgKiBMaXN0ZW5zIHRvIHRoZSBjaGFuZ2VzIG9uIGByZWFkb25seWAgYW5kIGBkaXNhYmxlZGAgYXR0cmlidXRlcyBvZiBgPGlucHV0PmAuXG4gICAqL1xuICBwcml2YXRlIF9mb3JtRmllbGRBdHRyaWJ1dGVPYnNlcnZlciA9ICFpc1NlcnZlclxuICAgID8gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9uczogTXV0YXRpb25SZWNvcmRbXSkgPT4ge1xuICAgICAgICBpZiAobXV0YXRpb25zLnNvbWUoKG0pID0+IG0udHlwZSA9PT0gJ2F0dHJpYnV0ZXMnKSAmJiB0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuX3JlYWRJbnB1dFN0YXRlKCk7XG4gICAgICAgICAgdGhpcy5fcmVnaXN0ZXJJbnB1dEZvcm1MaXN0ZW5lcigpO1xuICAgICAgICAgIHRoaXMuX2NoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIDogbnVsbDtcblxuICBwcml2YXRlIF9pbnB1dEZvcm1BYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oXG4gICAgICAnZm9jdXNpbicsXG4gICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGV2ZW50LnRhcmdldCA9PT0gdGhpcy5pbnB1dEVsZW1lbnQgfHxcbiAgICAgICAgICBldmVudC50YXJnZXQgPT09ICh0aGlzLmlucHV0RWxlbWVudCBhcyBTYmJTZWxlY3RFbGVtZW50KS5pbnB1dEVsZW1lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmFkZCgnZm9jdXMnKTtcbiAgICAgICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKGBmb2N1cy1vcmlnaW4tJHtzYmJJbnB1dE1vZGFsaXR5RGV0ZWN0b3IubW9zdFJlY2VudE1vZGFsaXR5fWApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBwYXNzaXZlOiB0cnVlIH0sXG4gICAgKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LihcbiAgICAgICdmb2N1c291dCcsXG4gICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGV2ZW50LnRhcmdldCA9PT0gdGhpcy5pbnB1dEVsZW1lbnQgfHxcbiAgICAgICAgICBldmVudC50YXJnZXQgPT09ICh0aGlzLmlucHV0RWxlbWVudCBhcyBTYmJTZWxlY3RFbGVtZW50KS5pbnB1dEVsZW1lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZSgnZm9jdXMnKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHN0YXRlIG9mIHRoaXMuaW50ZXJuYWxzLnN0YXRlcykge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnN0YXJ0c1dpdGgoJ2ZvY3VzLW9yaWdpbi0nKSkge1xuICAgICAgICAgICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuZGVsZXRlKHN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IHBhc3NpdmU6IHRydWUgfSxcbiAgICApO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB0aGlzLl9jaGVja0FuZFVwZGF0ZUlucHV0RW1wdHkoKSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdkaXNwbGF5VmFsdWVDaGFuZ2UnLCAoKSA9PiB0aGlzLl9jaGVja0FuZFVwZGF0ZUlucHV0RW1wdHkoKSk7XG4gICAgLy8gV2Ugd2FudCB0byBwcmV2ZW50IHRoZSBuYXRpdmUgYnJvd3NlciB2YWxpZGF0aW9uIG1lc3NhZ2UgcG9wb3ZlclxuICAgIC8vIHRvIGJlIHNob3duLiBUaGlzIGFsc28gcHJldmVudHMgYSBidWcgaW4gV2ViS2l0LCB3aGljaCB3b3VsZCBub3RcbiAgICAvLyBhbGxvdyBob3N0IGFzIHRoZSB2YWxpZGl0eSBhbmNob3I6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk4MzJcbiAgICAvLyBUaGlzIGlzIGR1cGxpY2F0ZWQgZnJvbSB0aGUgZm9ybSBhc3NvY2lhdGVkIG1peGluIGZvciB0aGUgbmF0aXZlXG4gICAgLy8gaW5wdXQgY29udHJvbHMgKGUuZy4gPGlucHV0PiBvciA8c2VsZWN0PikuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdpbnZhbGlkJywgKGUpID0+IGUucHJldmVudERlZmF1bHQoKSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5fYXNzaWduU2xvdHMoKTtcbiAgICB0aGlzLl9jb25uZWN0SW5wdXRFbGVtZW50KCk7XG4gICAgdGhpcy5fc3luY05lZ2F0aXZlKCk7XG4gICAgdGhpcy5fc3luY1NpemUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbmVnYXRpdmUnKSkge1xuICAgICAgdGhpcy5fc3luY05lZ2F0aXZlKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ3NpemUnKSkge1xuICAgICAgdGhpcy5fc3luY1NpemUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl9mb3JtRmllbGRBdHRyaWJ1dGVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuX2lucHV0Rm9ybUFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgIGlmICh0aGlzLl9pbnB1dD8ubG9jYWxOYW1lID09PSAnaW5wdXQnKSB7XG4gICAgICB0aGlzLl91bnBhdGNoSW5wdXRWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVdyYXBwZXJDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faXNFbGVtZW50Rm9jdXNFeGNsdWRlZChldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS5sb2NhbE5hbWUgIT09ICdsYWJlbCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5faW5wdXQ/LmxvY2FsTmFtZSA9PT0gJ3NiYi1zZWxlY3QnICYmXG4gICAgICAgIChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmxvY2FsTmFtZSAhPT0gJ3NiYi1zZWxlY3QnXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5faW5wdXQuY2xpY2soKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lucHV0Py5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzRWxlbWVudEZvY3VzRXhjbHVkZWQoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGV2ZW50XG4gICAgICAuY29tcG9zZWRQYXRoKClcbiAgICAgIC5zb21lKFxuICAgICAgICAoZWwpID0+XG4gICAgICAgICAgKGVsIGluc3RhbmNlb2Ygd2luZG93LkhUTUxFbGVtZW50ICYmXG4gICAgICAgICAgICAoZWwuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpID09PSAnMCcgfHwgZWwuaGFzQXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKSkpIHx8XG4gICAgICAgICAgdGhpcy5fZXhjbHVkZWRGb2N1c0VsZW1lbnRzLmluY2x1ZGVzKChlbCBhcyBIVE1MRWxlbWVudCkubG9jYWxOYW1lKSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9vblNsb3RMYWJlbENoYW5nZSgpOiB2b2lkIHtcbiAgICBjb25zdCBsYWJlbHMgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgnbGFiZWwnKSk7XG4gICAgaWYgKGltcG9ydC5tZXRhLmVudi5ERVYgJiYgbGFiZWxzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYERldGVjdGVkIG1vcmUgdGhhbiBvbmUgbGFiZWwgaW4gc2JiLWZvcm0tZmllbGQjJHt0aGlzLmlkfS4gT25seSBvbmUgbGFiZWwgaXMgc3VwcG9ydGVkLmAsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLl9sYWJlbCA9IGxhYmVsc1swXTtcbiAgICB0aGlzLl9zeW5jTGFiZWxJbnB1dFJlZmVyZW5jZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCBpcyB1c2VkIGludGVybmFsbHkgdG8gYXNzaWduIHRoZSBhdHRyaWJ1dGVzIG9mIGA8aW5wdXQ+YCB0byBgX2lkYCBhbmQgYF9pbnB1dGAgYW5kIHRvIG9ic2VydmUgdGhlIG5hdGl2ZSByZWFkb25seSBhbmQgZGlzYWJsZWQgYXR0cmlidXRlcy5cbiAgICovXG4gIHByaXZhdGUgX29uU2xvdElucHV0Q2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Fzc2lnblNsb3RzKCk7XG4gICAgdGhpcy5fY29ubmVjdElucHV0RWxlbWVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXNzaWduU2xvdHMoKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdsYWJlbDpub3QoW3Nsb3RdKScpLmZvckVhY2goKGUpID0+IGUuc2V0QXR0cmlidXRlKCdzbG90JywgJ2xhYmVsJykpO1xuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbCgnc2JiLWZvcm0tZXJyb3I6bm90KFtzbG90XSknKS5mb3JFYWNoKChlKSA9PlxuICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAnZXJyb3InKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29ubmVjdElucHV0RWxlbWVudCgpOiB2b2lkIHtcbiAgICAvLyBGaW5kIHRoZSBzbG90dGVkIGlucHV0IGVsZW1lbnQsIGV2ZW4gaWYgaXQncyBuZXN0ZWQgKGUuZy4gY2hpcCBncm91cClcbiAgICBjb25zdCBpbnB1dENhbmRpZGF0ZXMgPSBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignKjpub3QoW3Nsb3RdLHNiYi1jaGlwLWdyb3VwKScpLFxuICAgICk7XG4gICAgY29uc3QgbmV3SW5wdXQgPSBpbnB1dENhbmRpZGF0ZXMuZmluZCgoZSkgPT4gdGhpcy5faXNJbnB1dEVsZW1lbnQoZSkpIHx8IGlucHV0Q2FuZGlkYXRlc1swXTtcblxuICAgIGlmIChuZXdJbnB1dCA9PT0gdGhpcy5faW5wdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lucHV0KSB7XG4gICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuZGVsZXRlKGBpbnB1dC10eXBlLSR7dGhpcy5faW5wdXQubG9jYWxOYW1lfWApO1xuICAgICAgaWYgKHRoaXMuX2lucHV0LmxvY2FsTmFtZSA9PT0gJ2lucHV0Jykge1xuICAgICAgICB0aGlzLl91bnBhdGNoSW5wdXRWYWx1ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghbmV3SW5wdXQpIHtcbiAgICAgIHRoaXMuX2lucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lucHV0ID0gbmV3SW5wdXQ7XG4gICAgdGhpcy5fYXBwbHlBcmlhRGVzY3JpYmVkYnkoKTtcbiAgICB0aGlzLl9yZWFkSW5wdXRTdGF0ZSgpO1xuICAgIHRoaXMuX3JlZ2lzdGVySW5wdXRGb3JtTGlzdGVuZXIoKTtcbiAgICB0aGlzLl9jaGVja0FuZFVwZGF0ZUlucHV0RW1wdHkoKTtcblxuICAgIGlmICh0aGlzLl9pbnB1dC5sb2NhbE5hbWUgPT09ICd0ZXh0YXJlYScpIHtcbiAgICAgIHRoaXMuX2lucHV0LnNldEF0dHJpYnV0ZSgncm93cycsIHRoaXMuX2lucHV0LmdldEF0dHJpYnV0ZSgncm93cycpIHx8ICczJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9pbnB1dC5sb2NhbE5hbWUgPT09ICdpbnB1dCcpIHtcbiAgICAgIHRoaXMuX3BhdGNoSW5wdXRWYWx1ZSgpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAodGhpcy5faW5wdXQubG9jYWxOYW1lID09PSAnc2VsZWN0JyB8fCB0aGlzLl9pbnB1dC5sb2NhbE5hbWUgPT09ICdzYmItc2VsZWN0JykgJiZcbiAgICAgICF0aGlzLmhhc1VwZGF0ZWRcbiAgICApIHtcbiAgICAgIC8vIER1ZSB0byBTU1IgdGhlIGRyb3Bkb3duIGljb24gZm9yIHNlbGVjdHMgY2Fubm90IGJlIHJlbmRlcmVkIGluIHRoZSBmaXJzdCByZW5kZXIgcGFzcy5cbiAgICAgIC8vIER1ZSB0byB0aGlzIHdlIHNjaGVkdWxlIGEgcmUtcmVuZGVyIHRvIHJlbmRlciB0aGUgaWNvbi5cbiAgICAgIHRoaXMuaHlkcmF0aW9uQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLnJlcXVlc3RVcGRhdGUoKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZm9ybUZpZWxkQXR0cmlidXRlT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLl9mb3JtRmllbGRBdHRyaWJ1dGVPYnNlcnZlcj8ub2JzZXJ2ZSh0aGlzLl9pbnB1dCwge1xuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydyZWFkb25seScsICdkaXNhYmxlZCcsICdmb3JtJywgJ2NsYXNzJywgJ2RhdGEtZXhwYW5kZWQnXSxcbiAgICB9KTtcbiAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKGBpbnB1dC10eXBlLSR7dGhpcy5faW5wdXQubG9jYWxOYW1lfWApO1xuICAgIHRoaXMuX3N5bmNMYWJlbElucHV0UmVmZXJlbmNlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3luY0xhYmVsSW5wdXRSZWZlcmVuY2VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW5wdXQgfHwgIXRoaXMuX2xhYmVsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgbmF0aXZlSW5wdXRFbGVtZW50cy5pbmNsdWRlcyh0aGlzLl9pbnB1dC5sb2NhbE5hbWUpIHx8XG4gICAgICAoY3VzdG9tRWxlbWVudHMuZ2V0KHRoaXMuX2lucHV0LmxvY2FsTmFtZSkgYXMgeyBmb3JtQXNzb2NpYXRlZDogYm9vbGVhbiB9IHwgdW5kZWZpbmVkKVxuICAgICAgICA/LmZvcm1Bc3NvY2lhdGVkXG4gICAgKSB7XG4gICAgICAvLyBGb3IgbmF0aXZlIGlucHV0IGVsZW1lbnRzIHdlIHVzZSB0aGUgYGZvcmAgYXR0cmlidXRlIG9uIHRoZSBsYWJlbCB0byByZWZlcmVuY2UgdGhlIGlucHV0XG4gICAgICAvLyB2aWEgaWQgcmVmZXJlbmNlLlxuICAgICAgdGhpcy5faW5wdXQuaWQgfHw9IGBzYmItZm9ybS1maWVsZC1pbnB1dC0ke25leHRJZCsrfWA7XG4gICAgICB0aGlzLl9sYWJlbC5odG1sRm9yID0gdGhpcy5faW5wdXQuaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBub24tbmF0aXZlIGlucHV0IGVsZW1lbnRzLCB0aGF0IGRvIG5vdCBzdXBwb3J0IHJlZmVyZW5jZXMgdmlhIHRoZSBsYWJlbCBmb3IgYXR0cmlidXRlLFxuICAgICAgLy8gd2UgdXNlIGFyaWEtbGFiZWxsZWRieSBvbiB0aGUgaW5wdXQgZWxlbWVudCB0byByZWZlcmVuY2UgdGhlIGxhYmVsIGVsZW1lbnQgdmlhIGlkLlxuICAgICAgLy8gVE9ETzogTWlncmF0ZSB0byBhcmlhTGFiZWxsZWRCeUVsZW1lbnRzIHdoZW4gYXZhaWxhYmxlOlxuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvYXJpYUxhYmVsbGVkQnlFbGVtZW50c1xuICAgICAgdGhpcy5fbGFiZWwuaWQgfHw9IGBzYmItZm9ybS1maWVsZC1sYWJlbC0ke25leHRJZCsrfWA7XG4gICAgICBjb25zdCBsYWJlbGxlZGJ5ID1cbiAgICAgICAgdGhpcy5faW5wdXRcbiAgICAgICAgICAuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknKVxuICAgICAgICAgID8uc3BsaXQoJyAnKVxuICAgICAgICAgIC5maWx0ZXIoKGwpID0+ICEhbCAmJiBsICE9PSB0aGlzLl9sYWJlbCEuaWQpID8/IFtdO1xuICAgICAgdGhpcy5faW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknLCBbLi4ubGFiZWxsZWRieSwgdGhpcy5fbGFiZWwuaWRdLmpvaW4oJyAnKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNJbnB1dEVsZW1lbnQoaW5wdXQ6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgbmF0aXZlSW5wdXRFbGVtZW50cy5pbmNsdWRlcyhpbnB1dC5sb2NhbE5hbWUpIHx8XG4gICAgICAhIShjdXN0b21FbGVtZW50cy5nZXQoaW5wdXQubG9jYWxOYW1lKSBhcyB7IGZvcm1Bc3NvY2lhdGVkOiBib29sZWFuIH0gfCB1bmRlZmluZWQpXG4gICAgICAgID8uZm9ybUFzc29jaWF0ZWRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVhZElucHV0U3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGVTdGF0ZSgncmVhZG9ubHknLCB0aGlzLl9pbnB1dCEuaGFzQXR0cmlidXRlKCdyZWFkb25seScpKTtcbiAgICB0aGlzLnRvZ2dsZVN0YXRlKCdkaXNhYmxlZCcsIHRoaXMuX2lucHV0IS5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpO1xuICAgIHRoaXMudG9nZ2xlU3RhdGUoJ2hhcy1wb3B1cC1vcGVuJywgdGhpcy5faW5wdXQhLmhhc0F0dHJpYnV0ZSgnZGF0YS1leHBhbmRlZCcpKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVySW5wdXRGb3JtTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgdGhpcy5faW5wdXRGb3JtQWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgY29uc3QgeyBzaWduYWwgfSA9ICh0aGlzLl9pbnB1dEZvcm1BYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCkpO1xuXG4gICAgY29uc3QgZm9ybSA9XG4gICAgICAodGhpcy5faW5wdXQgYXMgSFRNTElucHV0RWxlbWVudCB8IEhUTUxTZWxlY3RFbGVtZW50IHwgdW5kZWZpbmVkKT8uZm9ybSA/P1xuICAgICAgdGhpcy5faW5wdXQ/LmNsb3Nlc3QoJ2Zvcm0nKTtcbiAgICAvLyBUaW1lb3V0IG5lZWRlZCB0byBoYXZlIHZhbHVlIHVwZGF0ZWRcbiAgICBjb25zdCByZXNldEhhbmRsZXIgPSAoKTogdW5rbm93biA9PiBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzZXQoKSk7XG4gICAgZm9ybT8uYWRkRXZlbnRMaXN0ZW5lcigncmVzZXQnLCByZXNldEhhbmRsZXIsIHsgc2lnbmFsIH0pO1xuICB9XG5cbiAgLy8gV2UgbmVlZCB0byBwYXRjaCB0aGUgdmFsdWUgcHJvcGVydHkgb2YgdGhlIEhUTUxJbnB1dEVsZW1lbnQgaW4gb3JkZXJcbiAgLy8gdG8gYmUgYWJsZSB0byByZXNldCB0aGUgZmxvYXRpbmcgbGFiZWwgaW4gdGhlIGVtcHR5IHN0YXRlLlxuICBwcml2YXRlIF9wYXRjaElucHV0VmFsdWUoKTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gdGhpcy5faW5wdXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAoIWlucHV0RWxlbWVudCB8fCBwYXRjaGVkSW5wdXRzLmhhcyhpbnB1dEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihpbnB1dEVsZW1lbnQpLFxuICAgICAgJ3ZhbHVlJyxcbiAgICApO1xuXG4gICAgaWYgKCFvcmlnaW5hbERlc2NyaXB0b3IgfHwgIW9yaWdpbmFsRGVzY3JpcHRvci5zZXQgfHwgIW9yaWdpbmFsRGVzY3JpcHRvci5nZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwYXRjaGVkSW5wdXRzLnNldChpbnB1dEVsZW1lbnQsIG9yaWdpbmFsRGVzY3JpcHRvcik7XG5cbiAgICBjb25zdCB7IGdldDogZ2V0dGVyLCBzZXQ6IHNldHRlciB9ID0gb3JpZ2luYWxEZXNjcmlwdG9yO1xuICAgIGNvbnN0IGNoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSA9ICgpOiB2b2lkID0+IHRoaXMuX2NoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGlucHV0RWxlbWVudCwgJ3ZhbHVlJywge1xuICAgICAgLi4ub3JpZ2luYWxEZXNjcmlwdG9yLFxuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZ2V0dGVyLmNhbGwodGhpcyk7XG4gICAgICB9LFxuICAgICAgc2V0KG5ld1ZhbHVlKSB7XG4gICAgICAgIHNldHRlci5jYWxsKHRoaXMsIG5ld1ZhbHVlKTtcbiAgICAgICAgY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdW5wYXRjaElucHV0VmFsdWUoKTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gdGhpcy5faW5wdXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCBvcmlnaW5hbERlc2NyaXB0b3IgPSBwYXRjaGVkSW5wdXRzLmdldChpbnB1dEVsZW1lbnQpO1xuICAgIGlmIChvcmlnaW5hbERlc2NyaXB0b3IpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnB1dEVsZW1lbnQsICd2YWx1ZScsIG9yaWdpbmFsRGVzY3JpcHRvcik7XG4gICAgICBwYXRjaGVkSW5wdXRzLmRlbGV0ZShpbnB1dEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZVN0YXRlKFxuICAgICAgJ2VtcHR5JyxcbiAgICAgIHRoaXMuX2Zsb2F0aW5nTGFiZWxTdXBwb3J0ZWRJbnB1dEVsZW1lbnRzLmluY2x1ZGVzKHRoaXMuX2lucHV0Py5sb2NhbE5hbWUgYXMgc3RyaW5nKSAmJlxuICAgICAgICB0aGlzLl9pc0lucHV0RW1wdHkoKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNJbnB1dEVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNoaXBHcm91cEVsZW0gPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3NiYi1jaGlwLWdyb3VwJyk7XG4gICAgaWYgKGNoaXBHcm91cEVsZW0pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuX2lzSW5wdXRWYWx1ZUVtcHR5KCkgJiZcbiAgICAgICAgKEFycmF5LmlzQXJyYXkoY2hpcEdyb3VwRWxlbS52YWx1ZSlcbiAgICAgICAgICA/IGNoaXBHcm91cEVsZW0udmFsdWUubGVuZ3RoID09PSAwXG4gICAgICAgICAgOiAhY2hpcEdyb3VwRWxlbS5xdWVyeVNlbGVjdG9yKCdzYmItY2hpcCcpKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lucHV0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5fZmxvYXRpbmdMYWJlbFN1cHBvcnRlZElucHV0VHlwZXMuaW5jbHVkZXModGhpcy5faW5wdXQudHlwZSkgJiZcbiAgICAgICAgdGhpcy5faXNJbnB1dFZhbHVlRW1wdHkoKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lucHV0IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnB1dC5zZWxlY3RlZE9wdGlvbnM/Lml0ZW0oMCk/LmxhYmVsPy50cmltKCkgPT09ICcnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5faW5wdXQ/LmxvY2FsTmFtZSA9PT0gJ3NiYi1zZWxlY3QnKSB7XG4gICAgICByZXR1cm4gKHRoaXMuX2lucHV0IGFzIFNiYlNlbGVjdEVsZW1lbnQpLmdldERpc3BsYXlWYWx1ZT8uKCk/LnRyaW0oKSA9PT0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9pc0lucHV0VmFsdWVFbXB0eSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzSW5wdXRWYWx1ZUVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gKHRoaXMuX2lucHV0IGFzIHsgdmFsdWU6IHN0cmluZyB9KS52YWx1ZTtcbiAgICByZXR1cm4gWycnLCB1bmRlZmluZWQsIG51bGxdLmluY2x1ZGVzKHZhbHVlKSB8fCAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCBpcyB1c2VkIGludGVybmFsbHkgdG8gc2V0IHRoZSBhcmlhLWRlc2NyaWJlZGJ5IGF0dHJpYnV0ZSBmb3IgdGhlIHNsb3R0ZWQgaW5wdXQgcmVmZXJlbmNpbmcgYXZhaWxhYmxlIDxzYmItZm9ybS1lcnJvcj4gaW5zdGFuY2VzLlxuICAgKi9cbiAgcHJpdmF0ZSBfb25TbG90RXJyb3JDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZXJyb3JzID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MU2xvdEVsZW1lbnQpLmFzc2lnbmVkRWxlbWVudHMoKTtcbiAgICAvLyBSZW1vdmUgcmVmZXJlbmNlcyBvZiByZW1vdmVkIGVycm9ycyBmcm9tIGFyaWEtZGVzY3JpYmVkYnkuXG4gICAgY29uc3QgcmVtb3ZlZEVycm9ySWRzID0gdGhpcy5fZXJyb3JFbGVtZW50cy5maWx0ZXIoKGUpID0+ICFlcnJvcnMuaW5jbHVkZXMoZSkpLm1hcCgoZSkgPT4gZS5pZCk7XG4gICAgdGhpcy5fZXJyb3JFbGVtZW50cyA9IGVycm9ycztcblxuICAgIGZvciAoY29uc3QgZWwgb2YgdGhpcy5fZXJyb3JFbGVtZW50cykge1xuICAgICAgLy8gQWx0aG91Z2ggYSBmb3JtIGVycm9yIGFzc2lnbnMgYW4gaWQgaXRzZWxmLCB3ZSBuZWVkIHRvIGJlIGVhcmxpZXIgYnkgY3JlYXRpbmcgb25lIGhlcmVcbiAgICAgIGVsLmlkIHx8PSBgc2JiLWZvcm0tZmllbGQtZXJyb3ItJHsrK25leHRGb3JtRmllbGRFcnJvcklkfWA7XG4gICAgICAvLyBJbnN0ZWFkIG9mIGRlZmluaW5nIGEgY29udGFpbmVyIHdpdGggYW4gYXJpYS1saXZlIHJlZ2lvbiBhcyBleHBlY3RlZCwgd2UgaGFkIHRvIGNoYW5nZVxuICAgICAgLy8gc2V0dGluZyBpdCBmb3IgZXZlcnkgc2xvdHRlZCBlbGVtZW50IHRvIHByb3Blcmx5IHdvcmsgaW4gYWxsIGJyb3dzZXJzIGFuZCBzY3JlZW4gcmVhZGVyIGNvbWJpbmF0aW9ucy5cbiAgICAgIGVsLnJvbGUgfHw9ICdzdGF0dXMnO1xuICAgIH1cbiAgICB0aGlzLl9hcHBseUFyaWFEZXNjcmliZWRieShyZW1vdmVkRXJyb3JJZHMpO1xuICAgIHRoaXMudG9nZ2xlU3RhdGUoJ2hhcy1lcnJvcicsICEhdGhpcy5fZXJyb3JFbGVtZW50cy5sZW5ndGgpO1xuICAgIHRoaXMuX3N5bmNOZWdhdGl2ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlBcmlhRGVzY3JpYmVkYnkob2Jzb2xldGVJZHM6IHN0cmluZ1tdID0gW10pOiB2b2lkIHtcbiAgICBjb25zdCBhcmlhRGVzY3JpYmVkYnkgPSB0aGlzLl9pbnB1dD8uZ2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JykgfHwgJyc7XG4gICAgY29uc3QgaWRzID0gYXJpYURlc2NyaWJlZGJ5XG4gICAgICAuc3BsaXQoJyAnKVxuICAgICAgLmZpbHRlcigoaWQpID0+ICEhaWQgJiYgIW9ic29sZXRlSWRzLmluY2x1ZGVzKGlkKSlcbiAgICAgIC5maWx0ZXIoKHYsIGksIGEpID0+IGEuaW5kZXhPZih2KSA9PT0gaSk7XG5cbiAgICBpZiAodGhpcy5fZXJyb3JFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX2Vycm9yRWxlbWVudHMuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICBpZiAoIWlkcy5pbmNsdWRlcyhlLmlkKSkge1xuICAgICAgICAgIGlkcy5wdXNoKGUuaWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdBcmlhRGVzY3JpYmVkYnkgPSBpZHMuam9pbignICcpO1xuICAgIGlmICh0aGlzLl9pbnB1dCAmJiBuZXdBcmlhRGVzY3JpYmVkYnkgIT09IGFyaWFEZXNjcmliZWRieSkge1xuICAgICAgaWYgKG5ld0FyaWFEZXNjcmliZWRieSkge1xuICAgICAgICB0aGlzLl9pbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCBuZXdBcmlhRGVzY3JpYmVkYnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faW5wdXQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIE1hbnVhbGx5IHJlc2V0IHRoZSBmb3JtIGZpZWxkLiBDdXJyZW50bHksIHRoaXMgb25seSByZXNldHMgdGhlIGZsb2F0aW5nIGxhYmVsLiAqL1xuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG4gIH1cblxuICAvKiogTWFudWFsbHkgY2xlYXJzIHRoZSBpbnB1dCB2YWx1ZS4gSXQgb25seSB3b3JrcyBmb3IgaW5wdXRzLCBzZWxlY3RzIGFyZSBub3Qgc3VwcG9ydGVkLiAqL1xuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgaWYgKCh0aGlzLl9pbnB1dD8ubG9jYWxOYW1lIGFzIHN0cmluZykgIT09ICdpbnB1dCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKHRoaXMuX2lucHV0IGFzIHsgdmFsdWU6IHN0cmluZyB9KS52YWx1ZSA9ICcnO1xuICAgIHRoaXMuX2NoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3luY05lZ2F0aXZlKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbD8uKFxuICAgICAgJ3NiYi1mb3JtLWVycm9yLHNiYi1taW5pLWJ1dHRvbixzYmItcG9wb3Zlci10cmlnZ2VyLHNiYi1mb3JtLWZpZWxkLWNsZWFyLHNiYi1kYXRlcGlja2VyLW5leHQtZGF5LHNiYi1kYXRlcGlja2VyLXByZXZpb3VzLWRheSxzYmItZGF0ZXBpY2tlci10b2dnbGUsc2JiLXNlbGVjdCxzYmItYXV0b2NvbXBsZXRlLHNiYi1hdXRvY29tcGxldGUtZ3JpZCxzYmItY2hpcC1ncm91cCcsXG4gICAgKS5mb3JFYWNoKChlbGVtZW50KSA9PiBlbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSgnbmVnYXRpdmUnLCB0aGlzLm5lZ2F0aXZlKSk7XG4gIH1cblxuICBwcml2YXRlIF9zeW5jU2l6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/LjxTYmJBdXRvY29tcGxldGVCYXNlRWxlbWVudCB8IFNiYlNlbGVjdEVsZW1lbnQ+KFxuICAgICAgJ3NiYi1hdXRvY29tcGxldGUsc2JiLWF1dG9jb21wbGV0ZS1ncmlkLHNiYi1zZWxlY3QnLFxuICAgICkuZm9yRWFjaCgoZWxlbWVudCkgPT4gKGVsZW1lbnQuc2l6ZSA9IHRoaXMuc2l6ZSA9PT0gJ3MnID8gJ3MnIDogJ20nKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItZm9ybS1maWVsZF9fc3BhY2Utd3JhcHBlclwiPlxuICAgICAgICAkey8qIFF1ZXJpZWQgYnkgaWQgZnJvbSB0aGUgYXV0b2NvbXBsZXRlL3NlbGVjdCB0byBiZSB1c2VkIGFzIHRoZSBhbmNob3IgZWxlbWVudCAqLyAnJ31cbiAgICAgICAgPGRpdiBAY2xpY2s9JHt0aGlzLl9oYW5kbGVXcmFwcGVyQ2xpY2t9IGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX3dyYXBwZXJcIiBpZD1cIm92ZXJsYXktYW5jaG9yXCI+XG4gICAgICAgICAgPHNsb3QgbmFtZT1cInByZWZpeFwiIEBzbG90Y2hhbmdlPSR7dGhpcy5fc3luY05lZ2F0aXZlfT48L3Nsb3Q+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1mb3JtLWZpZWxkX19pbnB1dC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX2xhYmVsLXNwYWNlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX2xhYmVsXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX2xhYmVsLWVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cImxhYmVsXCIgQHNsb3RjaGFuZ2U9JHt0aGlzLl9vblNsb3RMYWJlbENoYW5nZX0+PC9zbG90PlxuICAgICAgICAgICAgICAgICR7dGhpcy5vcHRpb25hbFxuICAgICAgICAgICAgICAgICAgPyBodG1sYCA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4gJHtpMThuT3B0aW9uYWxbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19IDwvc3Bhbj5gXG4gICAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItZm9ybS1maWVsZF9faW5wdXRcIj5cbiAgICAgICAgICAgICAgPHNsb3QgQHNsb3RjaGFuZ2U9JHt0aGlzLl9vblNsb3RJbnB1dENoYW5nZX0+PC9zbG90PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAke3RoaXMuaGFzVXBkYXRlZCAmJiBbJ3NlbGVjdCcsICdzYmItc2VsZWN0J10uaW5jbHVkZXModGhpcy5faW5wdXQ/LmxvY2FsTmFtZSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAgID8gaHRtbGA8c2JiLWljb25cbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJjaGV2cm9uLXNtYWxsLWRvd24tc21hbGxcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYmItZm9ybS1maWVsZF9fc2VsZWN0LWlucHV0LWljb25cIlxuICAgICAgICAgICAgICAgID48L3NiYi1pY29uPmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzbG90IG5hbWU9XCJzdWZmaXhcIiBAc2xvdGNoYW5nZT0ke3RoaXMuX3N5bmNOZWdhdGl2ZX0+PC9zbG90PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX2Vycm9yXCI+XG4gICAgICAgICAgPHNsb3QgbmFtZT1cImVycm9yXCIgQHNsb3RjaGFuZ2U9JHt0aGlzLl9vblNsb3RFcnJvckNoYW5nZX0+PC9zbG90PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1mb3JtLWZpZWxkJzogU2JiRm9ybUZpZWxkRWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIl9hIiwic3RhdGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNEJBLElBQUksU0FBUztBQUNiLElBQUksdUJBQXVCO0FBRTNCLE1BQU0sb0NBQW9CO0FBQzFCLE1BQU0sc0JBQXNCLENBQUMsU0FBUyxZQUFZLFFBQVE7SUFjcEQsdUJBQW1CLE1BQUE7O0FBRnhCLE1BQUEsbUJBQUEsQ0FBQSxjQUFjLGdCQUFnQixHQUM5QixXQUFXOzs7O29CQUNzQixpQkFDaEMseUJBQXlCLGtCQUFrQixVQUFVLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUQvQixFQUFBLG1CQUFRLFlBRWpDO0FBQUEsSUErRkMsY0FBQTs7O0FBaEVBO0FBS0E7QUFNNkI7QUFLN0I7QUFLNkI7QUFLN0I7QUFLQTtBQUdTO0FBR0E7QUFHQTtBQW5FUSxXQUFzQix5QkFBRyxDQUFDLFVBQVUsZUFBZSxjQUFjLFVBQVU7QUFFM0UsV0FBQSx1Q0FBdUM7QUFBQSxRQUN0RDtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEs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