@sbb-esta/lyne-elements 4.10.0 → 4.12.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 (576) hide show
  1. package/autocomplete/autocomplete-base-element.js +1 -1
  2. package/autocomplete/autocomplete.component.js +3 -2
  3. package/{autocomplete-base-element-DarHnnYC.js → autocomplete-base-element-De2O5Wx-.js} +14 -9
  4. package/autocomplete.js +1 -1
  5. package/autocomplete.pure.js +1 -1
  6. package/{block-link-common-DzGY49Xc.js → block-link-common-1kRa_czx.js} +1 -1
  7. package/breadcrumb/breadcrumb-group/breadcrumb-group.component.js +1 -1
  8. package/breadcrumb/breadcrumb-group.js +1 -1
  9. package/{breadcrumb-group.component-Cc6CHbVy.js → breadcrumb-group.component-CKNsaUqs.js} +1 -1
  10. package/breadcrumb.js +1 -1
  11. package/breadcrumb.pure.js +1 -1
  12. package/button/common/button-common.js +1 -1
  13. package/button/common.js +1 -1
  14. package/button-common-BMEhm-dn.js +87 -0
  15. package/button.js +1 -1
  16. package/button.pure.js +1 -1
  17. package/calendar/calendar/calendar.component.js +1 -1
  18. package/calendar/calendar.js +1 -1
  19. package/{calendar.component-DhmaJt2k.js → calendar.component-C1jk_uE0.js} +5 -5
  20. package/calendar.js +1 -1
  21. package/calendar.pure.js +1 -1
  22. package/card/card-badge/card-badge.component.js +1 -1
  23. package/card/card-badge.js +1 -1
  24. package/{card-badge.component-BSOEYrN4.js → card-badge.component-D0r2iixU.js} +1 -1
  25. package/card.js +1 -1
  26. package/card.pure.js +1 -1
  27. package/checkbox/checkbox.component.js +1 -1
  28. package/checkbox/checkbox.js +1 -1
  29. package/checkbox/common/checkbox-common.js +1 -1
  30. package/checkbox/common.js +1 -1
  31. package/{checkbox-common-DdieysTG.js → checkbox-common-BpW4_bbi.js} +1 -1
  32. package/{checkbox.component-ROzxEnPh.js → checkbox.component-DS48CA_v.js} +1 -1
  33. package/checkbox.js +2 -2
  34. package/checkbox.pure.js +2 -2
  35. package/chip/chip-group/chip-group.component.js +1 -1
  36. package/chip/chip-group.js +1 -1
  37. package/{chip-group.component-DJzUToem.js → chip-group.component-BqBYzfXA.js} +1 -1
  38. package/chip.js +1 -1
  39. package/chip.pure.js +1 -1
  40. package/{compact-paginator.component-Cyi-t_YD.js → compact-paginator.component-BIAPutro.js} +1 -1
  41. package/core/base-elements/element.js +1 -1
  42. package/core/controllers/overlay-position-controller.js +4 -1
  43. package/core/mixins/named-slot-list-mixin.js +4 -1
  44. package/core/styles/core.scss +62 -77
  45. package/core/styles/mixins/helpers.scss +3 -3
  46. package/core/styles/mixins/overlay.scss +2 -2
  47. package/core/styles/mixins/table.scss +18 -19
  48. package/core/styles/mixins/typo.scss +2 -2
  49. package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables-as-css.scss +8 -0
  50. package/core/styles/theme.scss +3 -1
  51. package/core.css +177 -73
  52. package/custom-elements.json +1387 -1092
  53. package/development/autocomplete/autocomplete-base-element.d.ts +8 -1
  54. package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  55. package/development/autocomplete/autocomplete-base-element.js +1 -1
  56. package/development/autocomplete/autocomplete.component.js +4 -3
  57. package/development/autocomplete-base-element-BpCpYcX9.js +692 -0
  58. package/development/autocomplete.js +1 -1
  59. package/development/autocomplete.pure.js +1 -1
  60. package/development/{block-link-common-GckvjULA.js → block-link-common-COY1RI1I.js} +2 -2
  61. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.component.js +1 -1
  62. package/development/breadcrumb/breadcrumb-group.js +1 -1
  63. package/development/breadcrumb-group.component-DZslNBlB.js +195 -0
  64. package/development/breadcrumb.js +1 -1
  65. package/development/breadcrumb.pure.js +1 -1
  66. package/development/button/common/button-common.js +1 -1
  67. package/development/button/common.js +1 -1
  68. package/development/{button-common-CAu09Yim.js → button-common-7dmrUx4A.js} +3 -3
  69. package/development/button.js +1 -1
  70. package/development/button.pure.js +1 -1
  71. package/development/calendar/calendar/calendar.component.js +1 -1
  72. package/development/calendar/calendar.js +1 -1
  73. package/development/calendar-cell-base-element-BXohfDSl.js +1 -1
  74. package/development/calendar.component-Dg3D2A7k.js +1453 -0
  75. package/development/calendar.js +1 -1
  76. package/development/calendar.pure.js +1 -1
  77. package/development/card/card-badge/card-badge.component.js +1 -1
  78. package/development/card/card-badge.js +1 -1
  79. package/development/card-action-common-1FDHbfeR.js +1 -1
  80. package/development/card-badge.component-CUZIoVbL.js +84 -0
  81. package/development/card.js +1 -1
  82. package/development/card.pure.js +1 -1
  83. package/development/carousel-list.component-L-nYpHcN.js +1 -1
  84. package/development/carousel.component-Dl48ROSf.js +1 -1
  85. package/development/checkbox/checkbox.component.js +1 -1
  86. package/development/checkbox/checkbox.js +1 -1
  87. package/development/checkbox/common/checkbox-common.js +1 -1
  88. package/development/checkbox/common.js +1 -1
  89. package/development/checkbox-common-Dd5uup8K.js +86 -0
  90. package/development/checkbox-group/checkbox-group.component.js +1 -1
  91. package/development/{checkbox.component-D3_FFSys.js → checkbox.component-CFZrwUTA.js} +2 -2
  92. package/development/checkbox.js +2 -2
  93. package/development/checkbox.pure.js +2 -2
  94. package/development/chip/chip-group/chip-group.component.js +1 -1
  95. package/development/chip/chip-group.js +1 -1
  96. package/development/chip-group.component-BVfHWX2-.js +409 -0
  97. package/development/chip.js +1 -1
  98. package/development/chip.pure.js +1 -1
  99. package/development/clock.component-CVPv4mCp.js +1 -1
  100. package/development/compact-paginator.component-5_Q2Reul.js +51 -0
  101. package/development/core/a11y/input-modality-detector.js +1 -1
  102. package/development/core/base-elements/element.d.ts.map +1 -1
  103. package/development/core/base-elements/element.js +2 -5
  104. package/development/core/controllers/media-matchers-controller.js +1 -1
  105. package/development/core/controllers/overlay-position-controller.js +3 -2
  106. package/development/core/datetime/date-adapter.js +1 -1
  107. package/development/core/datetime/native-date-adapter.js +1 -1
  108. package/development/core/datetime/temporal-date-adapter.js +1 -1
  109. package/development/core/eventing/throttle.d.ts +1 -0
  110. package/development/core/eventing/throttle.d.ts.map +1 -1
  111. package/development/core/eventing/throttle.js +2 -1
  112. package/development/core/mixins/disabled-mixin.js +1 -1
  113. package/development/core/mixins/form-associated-checkbox-mixin.js +1 -1
  114. package/development/core/mixins/form-associated-input-mixin.js +1 -1
  115. package/development/core/mixins/form-associated-mixin.js +1 -1
  116. package/development/core/mixins/form-associated-radio-button-mixin.js +1 -1
  117. package/development/core/mixins/named-slot-list-mixin.d.ts.map +1 -1
  118. package/development/core/mixins/named-slot-list-mixin.js +5 -2
  119. package/development/core/mixins/negative-mixin.js +1 -1
  120. package/development/core/mixins/readonly-mixin.js +1 -1
  121. package/development/core/mixins/required-mixin.js +1 -1
  122. package/development/core/testing/event-spy.js +1 -1
  123. package/development/datepicker/common/datepicker-button.d.ts +6 -0
  124. package/development/datepicker/common/datepicker-button.d.ts.map +1 -1
  125. package/development/datepicker/common/datepicker-button.js +1 -1
  126. package/development/datepicker/common.js +1 -1
  127. package/development/datepicker/datepicker/datepicker.component.d.ts +3 -0
  128. package/development/datepicker/datepicker/datepicker.component.d.ts.map +1 -1
  129. package/development/datepicker/datepicker/datepicker.component.js +1 -1
  130. package/development/datepicker/datepicker.js +1 -1
  131. package/development/datepicker-button-CUPeoQgH.js +169 -0
  132. package/development/datepicker.component-D2DxFng_.js +216 -0
  133. package/development/datepicker.js +2 -2
  134. package/development/datepicker.pure.js +2 -2
  135. package/development/dialog/dialog/dialog.component.js +1 -1
  136. package/development/dialog/dialog.js +1 -1
  137. package/development/{dialog.component-TBiL0Sdq.js → dialog.component-DKuR4u-y.js} +2 -2
  138. package/development/dialog.js +1 -1
  139. package/development/dialog.pure.js +1 -1
  140. package/development/error.component-OBpWoVRL.js +55 -0
  141. package/development/expansion-panel/expansion-panel/expansion-panel.component.js +1 -1
  142. package/development/expansion-panel/expansion-panel-header/expansion-panel-header.component.js +1 -1
  143. package/development/expansion-panel/expansion-panel-header.js +1 -1
  144. package/development/expansion-panel/expansion-panel.js +1 -1
  145. package/development/expansion-panel-header.component-BEAabEE0.js +85 -0
  146. package/development/{expansion-panel.component-PDUmZe7w.js → expansion-panel.component-CV_IuWZA.js} +2 -2
  147. package/development/expansion-panel.js +2 -2
  148. package/development/expansion-panel.pure.js +2 -2
  149. package/development/file-selector/common/file-selector-common.d.ts.map +1 -1
  150. package/development/file-selector/common/file-selector-common.js +1 -1
  151. package/development/file-selector/common.js +1 -1
  152. package/development/file-selector/file-selector-dropzone/file-selector-dropzone.component.d.ts.map +1 -1
  153. package/development/file-selector/file-selector-dropzone/file-selector-dropzone.component.js +1 -1
  154. package/development/file-selector/file-selector-dropzone.js +1 -1
  155. package/development/file-selector-common-C7xIEiV4.js +416 -0
  156. package/development/file-selector-dropzone.component-BAWMZW4F.js +111 -0
  157. package/development/file-selector.js +2 -2
  158. package/development/file-selector.pure.js +2 -2
  159. package/development/footer/footer.component.js +1 -1
  160. package/development/footer.component-BmDkxYW9.js +172 -0
  161. package/development/footer.js +1 -1
  162. package/development/footer.pure.js +1 -1
  163. package/development/form-field/error/error.component.js +1 -1
  164. package/development/form-field/error.js +1 -1
  165. package/development/form-field/form-field/form-field.component.d.ts +6 -0
  166. package/development/form-field/form-field/form-field.component.d.ts.map +1 -1
  167. package/development/form-field/form-field/form-field.component.js +1 -1
  168. package/development/form-field/form-field-clear/form-field-clear.component.d.ts +3 -0
  169. package/development/form-field/form-field-clear/form-field-clear.component.d.ts.map +1 -1
  170. package/development/form-field/form-field-clear/form-field-clear.component.js +4 -1
  171. package/development/form-field/form-field.js +1 -1
  172. package/development/form-field/hint/hint.component.js +1 -1
  173. package/development/form-field.component-BU3Sv2mD.js +707 -0
  174. package/development/form-field.js +3 -3
  175. package/development/form-field.pure.js +3 -3
  176. package/development/header/header/header.component.js +1 -1
  177. package/development/header/header.js +1 -1
  178. package/development/header-action-common-MTYV0dqA.js +1 -1
  179. package/development/header.component-CWJ36jF0.js +340 -0
  180. package/development/header.js +1 -1
  181. package/development/header.pure.js +1 -1
  182. package/development/hint.component-DUtL0RS3.js +38 -0
  183. package/development/icon/icon-name-mixin.js +1 -1
  184. package/development/image.component-BD0jc-u-.js +1 -1
  185. package/development/link/common/block-link-common.js +1 -1
  186. package/development/link/common.js +1 -1
  187. package/development/link-common-DJ2FfG_Q.js +1 -1
  188. package/development/link-list-base-CKMNz30d.js +1 -1
  189. package/development/link.js +1 -1
  190. package/development/link.pure.js +1 -1
  191. package/development/message/message.component.js +1 -1
  192. package/development/message.component-Dlf5V5ba.js +44 -0
  193. package/development/message.js +1 -1
  194. package/development/message.pure.js +1 -1
  195. package/development/mini-calendar.component-BufzKw74.js +1 -1
  196. package/development/navigation/common/navigation-action-common.js +1 -1
  197. package/development/navigation/common.js +1 -1
  198. package/development/navigation/navigation-marker/navigation-marker.component.js +1 -1
  199. package/development/navigation/navigation-marker.js +1 -1
  200. package/development/navigation/navigation-section/navigation-section.component.js +1 -1
  201. package/development/navigation/navigation-section.js +1 -1
  202. package/development/{navigation-action-common-DpBp7-eZ.js → navigation-action-common-Hjr4dI9J.js} +2 -2
  203. package/development/{navigation-marker.component-BpZdT4xz.js → navigation-marker.component-GOv42emC.js} +2 -2
  204. package/development/{navigation-section.component-CtZtuacK.js → navigation-section.component-CnVrRETN.js} +2 -2
  205. package/development/navigation.component-CTNQ1dix.js +1 -1
  206. package/development/navigation.js +3 -3
  207. package/development/navigation.pure.js +3 -3
  208. package/development/notification/notification.component.js +1 -1
  209. package/development/notification.component-Cvq_uViC.js +274 -0
  210. package/development/notification.js +1 -1
  211. package/development/notification.pure.js +1 -1
  212. package/development/option/option/option-base-element.d.ts.map +1 -1
  213. package/development/option/option/option-base-element.js +3 -1
  214. package/development/option/option/option.component.js +1 -1
  215. package/development/option/option.js +1 -1
  216. package/development/option.component-CRVr0PfV.js +130 -0
  217. package/development/option.js +1 -1
  218. package/development/option.pure.js +1 -1
  219. package/development/paginator/common/paginator-common.js +1 -1
  220. package/development/paginator/compact-paginator/compact-paginator.component.js +1 -1
  221. package/development/paginator/compact-paginator.js +1 -1
  222. package/development/paginator/paginator/paginator.component.js +1 -1
  223. package/development/paginator/paginator.js +1 -1
  224. package/development/paginator.component-Bn5tK0FK.js +259 -0
  225. package/development/paginator.js +2 -2
  226. package/development/paginator.pure.js +2 -2
  227. package/development/panel-mixin-Dj_rsgL9.js +1 -1
  228. package/development/popover/popover.component.d.ts +1 -0
  229. package/development/popover/popover.component.d.ts.map +1 -1
  230. package/development/popover/popover.component.js +1 -1
  231. package/development/popover.component-rZb6B9uW.js +546 -0
  232. package/development/popover.js +1 -1
  233. package/development/popover.pure.js +1 -1
  234. package/development/radio-button/common/radio-button-common.js +1 -1
  235. package/development/radio-button/common.js +1 -1
  236. package/development/radio-button/radio-button.component.js +1 -1
  237. package/development/radio-button/radio-button.js +1 -1
  238. package/development/radio-button-common--d3WX-ZM.js +126 -0
  239. package/development/radio-button-panel/radio-button-panel.component.js +1 -1
  240. package/development/{radio-button.component-BrQF2FfA.js → radio-button.component-BauLEeCV.js} +2 -2
  241. package/development/radio-button.js +2 -2
  242. package/development/radio-button.pure.js +2 -2
  243. package/development/select/select.component.d.ts.map +1 -1
  244. package/development/select/select.component.js +1 -1
  245. package/development/select.component-D9SFG7Lk.js +814 -0
  246. package/development/select.js +1 -1
  247. package/development/select.pure.js +1 -1
  248. package/development/sidebar/sidebar/sidebar.component.d.ts +1 -0
  249. package/development/sidebar/sidebar/sidebar.component.d.ts.map +1 -1
  250. package/development/sidebar/sidebar/sidebar.component.js +1 -1
  251. package/development/sidebar/sidebar.js +1 -1
  252. package/development/sidebar-container.component-BDSoDAym.js +1 -1
  253. package/development/{sidebar.component-DvRTyNry.js → sidebar.component-BLqO52nH.js} +8 -1
  254. package/development/sidebar.js +1 -1
  255. package/development/sidebar.pure.js +1 -1
  256. package/development/slider/slider.component.js +1 -1
  257. package/development/{slider.component-BjfLnUvP.js → slider.component-C3qZB6ar.js} +2 -2
  258. package/development/slider.js +1 -1
  259. package/development/slider.pure.js +1 -1
  260. package/development/status/status.component.js +1 -1
  261. package/development/status.component-CPi1cPN0.js +111 -0
  262. package/development/status.js +1 -1
  263. package/development/status.pure.js +1 -1
  264. package/development/step-label.component-BJ9eainz.js +131 -0
  265. package/development/stepper/step-label/step-label.component.js +1 -1
  266. package/development/stepper/step-label.js +1 -1
  267. package/development/stepper.component-CxOBayI1.js +1 -1
  268. package/development/stepper.js +1 -1
  269. package/development/stepper.pure.js +1 -1
  270. package/development/sticky-bar.component-Dzrdsnxu.js +1 -1
  271. package/development/styles-D8-q-irv.js +1 -1
  272. package/development/styles-Jlhoev1S.js +14 -0
  273. package/development/tab-group.component-DldBA45K.js +275 -0
  274. package/development/{tab-label.component-14j2eh4Z.js → tab-label.component-B9e9kgVf.js} +2 -2
  275. package/development/tabs/common/styles.js +1 -1
  276. package/development/tabs/common.js +1 -1
  277. package/development/tabs/tab-group/tab-group.component.d.ts +1 -0
  278. package/development/tabs/tab-group/tab-group.component.d.ts.map +1 -1
  279. package/development/tabs/tab-group/tab-group.component.js +1 -1
  280. package/development/tabs/tab-group.js +1 -1
  281. package/development/tabs/tab-label/tab-label.component.js +1 -1
  282. package/development/tabs/tab-label.js +1 -1
  283. package/development/tabs.js +3 -3
  284. package/development/tabs.pure.js +3 -3
  285. package/development/tag/tag/tag.component.js +1 -1
  286. package/development/tag/tag.js +1 -1
  287. package/development/tag.component-Bl1nlIXQ.js +245 -0
  288. package/development/tag.js +1 -1
  289. package/development/tag.pure.js +1 -1
  290. package/development/teaser-hero/teaser-hero.component.js +1 -1
  291. package/development/{teaser-hero.component-DNlc8Tbl.js → teaser-hero.component-BIOpoGME.js} +2 -2
  292. package/development/teaser-hero.js +1 -1
  293. package/development/teaser-hero.pure.js +1 -1
  294. package/development/teaser-product-common-DYX370pm.js +1 -1
  295. package/development/time-input.component-BtdSR8kB.js +1 -1
  296. package/development/timetable-form/timetable-form/timetable-form.component.js +1 -1
  297. package/development/timetable-form/timetable-form-details/timetable-form-details.component.js +1 -1
  298. package/development/timetable-form/timetable-form-details.js +1 -1
  299. package/development/timetable-form/timetable-form-field/timetable-form-field.component.js +1 -1
  300. package/development/timetable-form/timetable-form-field.js +1 -1
  301. package/development/timetable-form/timetable-form-swap-button/timetable-form-swap-button.component.d.ts +3 -0
  302. package/development/timetable-form/timetable-form-swap-button/timetable-form-swap-button.component.d.ts.map +1 -1
  303. package/development/timetable-form/timetable-form-swap-button/timetable-form-swap-button.component.js +1 -1
  304. package/development/timetable-form/timetable-form-swap-button.js +1 -1
  305. package/development/timetable-form/timetable-form.js +1 -1
  306. package/development/timetable-form-details.component-DJl5Qt9y.js +26 -0
  307. package/development/timetable-form-field.component-DQ_TzcF4.js +44 -0
  308. package/development/{timetable-form-swap-button.component-BUKUjrpl.js → timetable-form-swap-button.component-Bh9aPmdn.js} +4 -1
  309. package/development/timetable-form.component-N8h4JBlH.js +27 -0
  310. package/development/timetable-form.js +4 -4
  311. package/development/timetable-form.pure.js +4 -4
  312. package/development/timetable-occupancy/timetable-occupancy.component.js +1 -1
  313. package/development/timetable-occupancy.component-BBcznUh0.js +124 -0
  314. package/development/timetable-occupancy.js +1 -1
  315. package/development/timetable-occupancy.pure.js +1 -1
  316. package/development/title/title-base.js +1 -1
  317. package/development/title/title.component.js +1 -1
  318. package/development/{title-base-CBE_2Hkb.js → title-base-BdYKwj3-.js} +2 -2
  319. package/development/{title.component-Dk23JVct.js → title.component-DSXVkddh.js} +2 -2
  320. package/development/title.js +2 -2
  321. package/development/title.pure.js +2 -2
  322. package/development/toast/toast.component.js +1 -1
  323. package/development/toast.component-IhHx0Qt3.js +275 -0
  324. package/development/toast.js +1 -1
  325. package/development/toast.pure.js +1 -1
  326. package/development/toggle/toggle/toggle.component.d.ts.map +1 -1
  327. package/development/toggle/toggle/toggle.component.js +1 -1
  328. package/development/toggle/toggle-option/toggle-option.component.d.ts +1 -0
  329. package/development/toggle/toggle-option/toggle-option.component.d.ts.map +1 -1
  330. package/development/toggle/toggle-option/toggle-option.component.js +1 -1
  331. package/development/toggle/toggle-option.js +1 -1
  332. package/development/toggle/toggle.js +1 -1
  333. package/development/toggle-check/toggle-check.component.js +1 -1
  334. package/development/toggle-check.component-_fDAuLob.js +159 -0
  335. package/development/toggle-check.js +1 -1
  336. package/development/toggle-check.pure.js +1 -1
  337. package/development/toggle-option.component-DTS3a603.js +167 -0
  338. package/development/toggle.component-BJpD1b9H.js +249 -0
  339. package/development/toggle.js +2 -2
  340. package/development/toggle.pure.js +2 -2
  341. package/development/tooltip/tooltip.component.js +1 -1
  342. package/development/tooltip.component-YaUQA-Id.js +378 -0
  343. package/development/tooltip.js +1 -1
  344. package/development/tooltip.pure.js +1 -1
  345. package/development/train/train-wagon/train-wagon.component.js +1 -1
  346. package/development/train/train-wagon.js +1 -1
  347. package/development/{train-wagon.component-BzA8-S_6.js → train-wagon.component-CNxkffOO.js} +2 -2
  348. package/development/train.js +1 -1
  349. package/development/train.pure.js +1 -1
  350. package/dialog/dialog/dialog.component.js +1 -1
  351. package/dialog/dialog.js +1 -1
  352. package/{dialog.component-B3oQbMki.js → dialog.component-Dv5ch5mh.js} +1 -1
  353. package/dialog.js +1 -1
  354. package/dialog.pure.js +1 -1
  355. package/{error.component-B_D8WUP5.js → error.component-DH9Obd7a.js} +1 -1
  356. package/expansion-panel/expansion-panel/expansion-panel.component.js +1 -1
  357. package/expansion-panel/expansion-panel-header/expansion-panel-header.component.js +1 -1
  358. package/expansion-panel/expansion-panel-header.js +1 -1
  359. package/expansion-panel/expansion-panel.js +1 -1
  360. package/{expansion-panel-header.component-B_dQ3ZWT.js → expansion-panel-header.component-FPoEEoZR.js} +1 -1
  361. package/{expansion-panel.component-BJCjwcoj.js → expansion-panel.component-DBnZ6IgB.js} +1 -1
  362. package/expansion-panel.js +2 -2
  363. package/expansion-panel.pure.js +2 -2
  364. package/file-selector/common/file-selector-common.js +1 -1
  365. package/file-selector/common.js +1 -1
  366. package/file-selector/file-selector-dropzone/file-selector-dropzone.component.js +1 -1
  367. package/file-selector/file-selector-dropzone.js +1 -1
  368. package/{file-selector-common-DN4vHMpP.js → file-selector-common-BL9mM4SZ.js} +38 -40
  369. package/{file-selector-dropzone.component-CBKsZsC2.js → file-selector-dropzone.component-Ctar2kEw.js} +3 -4
  370. package/file-selector.js +2 -2
  371. package/file-selector.pure.js +2 -2
  372. package/footer/footer.component.js +1 -1
  373. package/{footer.component-BM91Utiz.js → footer.component-b2docCY_.js} +1 -1
  374. package/footer.js +1 -1
  375. package/footer.pure.js +1 -1
  376. package/form-field/error/error.component.js +1 -1
  377. package/form-field/error.js +1 -1
  378. package/form-field/form-field/form-field.component.js +1 -1
  379. package/form-field/form-field.js +1 -1
  380. package/form-field/hint/hint.component.js +1 -1
  381. package/{form-field.component-D50q1wC0.js → form-field.component-BwZDRKbQ.js} +17 -16
  382. package/form-field.js +3 -3
  383. package/form-field.pure.js +3 -3
  384. package/header/header/header.component.js +1 -1
  385. package/header/header.js +1 -1
  386. package/{header.component-hZqs06Yh.js → header.component-UQUFcMOD.js} +1 -1
  387. package/header.js +1 -1
  388. package/header.pure.js +1 -1
  389. package/{hint.component-BVUUrSSu.js → hint.component-CE2D2TLU.js} +1 -1
  390. package/link/common/block-link-common.js +1 -1
  391. package/link/common.js +1 -1
  392. package/link.js +1 -1
  393. package/link.pure.js +1 -1
  394. package/message/message.component.js +1 -1
  395. package/message.component-DhN-aFms.js +27 -0
  396. package/message.js +1 -1
  397. package/message.pure.js +1 -1
  398. package/navigation/common/navigation-action-common.js +1 -1
  399. package/navigation/common.js +1 -1
  400. package/navigation/navigation-marker/navigation-marker.component.js +1 -1
  401. package/navigation/navigation-marker.js +1 -1
  402. package/navigation/navigation-section/navigation-section.component.js +1 -1
  403. package/navigation/navigation-section.js +1 -1
  404. package/{navigation-action-common-2ix0xrBs.js → navigation-action-common-AzRltwrb.js} +1 -1
  405. package/{navigation-marker.component-DKxK16IU.js → navigation-marker.component-BzbbKlfT.js} +1 -1
  406. package/{navigation-section.component-CvjXVn5r.js → navigation-section.component-DQxCi3O_.js} +1 -1
  407. package/navigation.js +3 -3
  408. package/navigation.pure.js +3 -3
  409. package/notification/notification.component.js +1 -1
  410. package/{notification.component-DjXJFh1G.js → notification.component-D80Wl5xM.js} +1 -1
  411. package/notification.js +1 -1
  412. package/notification.pure.js +1 -1
  413. package/off-brand-theme.css +209 -110
  414. package/option/option/option-base-element.js +1 -1
  415. package/option/option/option.component.js +1 -1
  416. package/option/option.js +1 -1
  417. package/{option.component-M-V_tdSC.js → option.component-2Xf1hz7y.js} +1 -1
  418. package/option.js +1 -1
  419. package/option.pure.js +1 -1
  420. package/package.json +1 -1
  421. package/paginator/compact-paginator/compact-paginator.component.js +1 -1
  422. package/paginator/compact-paginator.js +1 -1
  423. package/paginator/paginator/paginator.component.js +1 -1
  424. package/paginator/paginator.js +1 -1
  425. package/{paginator.component-CZt7Epaf.js → paginator.component-BEr0qU0m.js} +1 -1
  426. package/paginator.js +2 -2
  427. package/paginator.pure.js +2 -2
  428. package/popover/popover.component.js +1 -1
  429. package/{popover.component-DWNuW4wM.js → popover.component-DAgwBcBW.js} +32 -28
  430. package/popover.js +1 -1
  431. package/popover.pure.js +1 -1
  432. package/radio-button/common/radio-button-common.js +1 -1
  433. package/radio-button/common.js +1 -1
  434. package/radio-button/radio-button.component.js +1 -1
  435. package/radio-button/radio-button.js +1 -1
  436. package/{radio-button-common-DP4Izwwf.js → radio-button-common-C1mIf9KY.js} +1 -1
  437. package/{radio-button.component-BiGeOI5L.js → radio-button.component-Bae-yK_U.js} +1 -1
  438. package/radio-button.js +2 -2
  439. package/radio-button.pure.js +2 -2
  440. package/safety-theme.css +209 -110
  441. package/select/select.component.js +1 -1
  442. package/{select.component-DWLdApt_.js → select.component-BT6RbERH.js} +3 -3
  443. package/select.js +1 -1
  444. package/select.pure.js +1 -1
  445. package/sidebar/sidebar/sidebar.component.js +1 -1
  446. package/sidebar/sidebar.js +1 -1
  447. package/{sidebar.component-DxOx02l6.js → sidebar.component-Dsx1FAg0.js} +5 -3
  448. package/sidebar.js +1 -1
  449. package/sidebar.pure.js +1 -1
  450. package/slider/slider.component.js +1 -1
  451. package/{slider.component-CoqCppCq.js → slider.component-BlRVR6iU.js} +1 -1
  452. package/slider.js +1 -1
  453. package/slider.pure.js +1 -1
  454. package/standard-theme.css +209 -110
  455. package/status/status.component.js +1 -1
  456. package/{status.component-BFyXTFXH.js → status.component-lw_WDs7W.js} +1 -1
  457. package/status.js +1 -1
  458. package/status.pure.js +1 -1
  459. package/step-label.component-Dqis4FAN.js +80 -0
  460. package/stepper/step-label/step-label.component.js +1 -1
  461. package/stepper/step-label.js +1 -1
  462. package/stepper.js +1 -1
  463. package/stepper.pure.js +1 -1
  464. package/styles-BNu0Fjw5.js +5 -0
  465. package/{tab-group.component-Doy39cEh.js → tab-group.component-CHQlrhUy.js} +36 -33
  466. package/{tab-label.component-CD56RH1Z.js → tab-label.component-CpdUyfiq.js} +1 -1
  467. package/table.css +32 -37
  468. package/tabs/common/styles.js +1 -1
  469. package/tabs/common.js +1 -1
  470. package/tabs/tab-group/tab-group.component.js +1 -1
  471. package/tabs/tab-group.js +1 -1
  472. package/tabs/tab-label/tab-label.component.js +1 -1
  473. package/tabs/tab-label.js +1 -1
  474. package/tabs.js +3 -3
  475. package/tabs.pure.js +3 -3
  476. package/tag/tag/tag.component.js +1 -1
  477. package/tag/tag.js +1 -1
  478. package/{tag.component-CzYJZuFT.js → tag.component-CsNszQvB.js} +1 -1
  479. package/tag.js +1 -1
  480. package/tag.pure.js +1 -1
  481. package/teaser-hero/teaser-hero.component.js +1 -1
  482. package/{teaser-hero.component-CHy82SKQ.js → teaser-hero.component-D8yj-N5n.js} +1 -1
  483. package/teaser-hero.js +1 -1
  484. package/teaser-hero.pure.js +1 -1
  485. package/timetable-form/timetable-form/timetable-form.component.js +1 -1
  486. package/timetable-form/timetable-form-details/timetable-form-details.component.js +1 -1
  487. package/timetable-form/timetable-form-details.js +1 -1
  488. package/timetable-form/timetable-form-field/timetable-form-field.component.js +1 -1
  489. package/timetable-form/timetable-form-field.js +1 -1
  490. package/timetable-form/timetable-form.js +1 -1
  491. package/timetable-form-details.component-mWKaBW_9.js +16 -0
  492. package/timetable-form-field.component-Cv_lv8vf.js +32 -0
  493. package/{timetable-form.component-CU1FXAZH.js → timetable-form.component-YcvKAlfz.js} +1 -1
  494. package/timetable-form.js +3 -3
  495. package/timetable-form.pure.js +3 -3
  496. package/timetable-occupancy/timetable-occupancy.component.js +1 -1
  497. package/{timetable-occupancy.component-Db9SfiyD.js → timetable-occupancy.component-BCXPxz68.js} +1 -1
  498. package/timetable-occupancy.js +1 -1
  499. package/timetable-occupancy.pure.js +1 -1
  500. package/title/title-base.js +1 -1
  501. package/title/title.component.js +1 -1
  502. package/{title-base-D72Xo2SW.js → title-base-DV0qhfG9.js} +1 -1
  503. package/{title.component-CoMa84Sz.js → title.component-DAGyXwDm.js} +1 -1
  504. package/title.js +2 -2
  505. package/title.pure.js +2 -2
  506. package/toast/toast.component.js +1 -1
  507. package/{toast.component-BDE1vYLS.js → toast.component-CORnf2Tl.js} +3 -3
  508. package/toast.js +1 -1
  509. package/toast.pure.js +1 -1
  510. package/toggle/toggle/toggle.component.js +1 -1
  511. package/toggle/toggle-option/toggle-option.component.js +1 -1
  512. package/toggle/toggle-option.js +1 -1
  513. package/toggle/toggle.js +1 -1
  514. package/toggle-check/toggle-check.component.js +1 -1
  515. package/toggle-check.component-DvoslSRr.js +119 -0
  516. package/toggle-check.js +1 -1
  517. package/toggle-check.pure.js +1 -1
  518. package/{toggle-option.component-Bw-GXUQK.js → toggle-option.component-pX3tNwjE.js} +5 -7
  519. package/{toggle.component-BPpsMMPG.js → toggle.component-B20xAw1V.js} +6 -10
  520. package/toggle.js +2 -2
  521. package/toggle.pure.js +2 -2
  522. package/tooltip/tooltip.component.js +1 -1
  523. package/{tooltip.component-BY9mV5Sw.js → tooltip.component-ocVpJogs.js} +1 -1
  524. package/tooltip.js +1 -1
  525. package/tooltip.pure.js +1 -1
  526. package/train/train-wagon/train-wagon.component.js +1 -1
  527. package/train/train-wagon.js +1 -1
  528. package/{train-wagon.component-BwCcF4GD.js → train-wagon.component-BT4Xnzxr.js} +1 -1
  529. package/train.js +1 -1
  530. package/train.pure.js +1 -1
  531. package/button-common-yFVzAoGy.js +0 -87
  532. package/core/styles/table.scss +0 -156
  533. package/development/autocomplete-base-element-YwfObJzm.js +0 -678
  534. package/development/breadcrumb-group.component-B3Shlng3.js +0 -195
  535. package/development/calendar.component-6p9vsp-V.js +0 -1452
  536. package/development/card-badge.component-D4Mes-Gw.js +0 -84
  537. package/development/checkbox-common-DiTlHvFJ.js +0 -86
  538. package/development/chip-group.component-CvpUdzu1.js +0 -409
  539. package/development/compact-paginator.component-TfDVt_ST.js +0 -51
  540. package/development/datepicker-button-CANzGO5m.js +0 -163
  541. package/development/datepicker.component-C8XQVo45.js +0 -213
  542. package/development/error.component-xD_c9IBA.js +0 -55
  543. package/development/expansion-panel-header.component-Bw4uROTe.js +0 -85
  544. package/development/file-selector-common-C82QR3zb.js +0 -418
  545. package/development/file-selector-dropzone.component-B-cBO4bf.js +0 -112
  546. package/development/footer.component-BblB5218.js +0 -172
  547. package/development/form-field.component-BEXX0OcL.js +0 -702
  548. package/development/header.component-Cg0ZcA1s.js +0 -340
  549. package/development/hint.component-BsIzdUOV.js +0 -38
  550. package/development/message.component-CeJhYXSC.js +0 -44
  551. package/development/notification.component-Co9QChXc.js +0 -274
  552. package/development/option.component-CdL7fdzZ.js +0 -130
  553. package/development/paginator.component-DAdS2mMm.js +0 -259
  554. package/development/popover.component-BCMdJBUR.js +0 -537
  555. package/development/radio-button-common-C3-xuY78.js +0 -126
  556. package/development/select.component-CGNEhqzl.js +0 -812
  557. package/development/status.component-CHC2pBa-.js +0 -111
  558. package/development/step-label.component-CJFPHIZa.js +0 -131
  559. package/development/styles-DCQBzC2C.js +0 -14
  560. package/development/tab-group.component-DRipdAyc.js +0 -272
  561. package/development/tag.component-CnNPL6aI.js +0 -245
  562. package/development/timetable-form-details.component-C8awcdP5.js +0 -26
  563. package/development/timetable-form-field.component-BI24VjkC.js +0 -44
  564. package/development/timetable-form.component-CUG86CSN.js +0 -27
  565. package/development/timetable-occupancy.component-D_PXXvI9.js +0 -124
  566. package/development/toast.component-BnbpuU9L.js +0 -274
  567. package/development/toggle-check.component-BG4w_sE8.js +0 -159
  568. package/development/toggle-option.component-D-F7Fh7i.js +0 -168
  569. package/development/toggle.component-BFYLRN8o.js +0 -254
  570. package/development/tooltip.component-DzSd9VjW.js +0 -378
  571. package/message.component-BQjnZ5Z3.js +0 -27
  572. package/step-label.component-DnQBwnL8.js +0 -80
  573. package/styles-BUpK1iP2.js +0 -5
  574. package/timetable-form-details.component-CBZ7QSAx.js +0 -16
  575. package/timetable-form-field.component-BKxQQqt7.js +0 -32
  576. package/toggle-check.component-B6Ww5pLD.js +0 -119
@@ -0,0 +1,409 @@
1
+ import { __esDecorate, __runInitializers } from "tslib";
2
+ import { html, isServer, unsafeCSS } from "lit";
3
+ import { property } from "lit/decorators.js";
4
+ import { SbbElement } from "./core/base-elements.js";
5
+ import { forceType } from "./core/decorators.js";
6
+ import { SbbDisabledMixin, SbbFormAssociatedMixin, SbbNegativeMixin, SbbRequiredMixin } from "./core/mixins.js";
7
+ import { boxSizingStyles } from "./core/styles.js";
8
+ import { SbbLanguageController, SbbPropertyWatcherController } from "./core/controllers.js";
9
+ import { i18nChipGroupInputDescription, i18nSelectionRequired } from "./core/i18n.js";
10
+ import { getNextElementIndex, isArrowKeyPressed } from "./core/a11y.js";
11
+ import { isLean } from "./core/dom/lean-context.js";
12
+ import { SbbChipElement } from "./chip/chip/chip.component.js";
13
+ //#region src/elements/chip/chip-group/chip-group.scss?inline
14
+ var chip_group_default = ":host {\n width: 100%;\n display: flex;\n flex-wrap: wrap;\n gap: var(--sbb-chip-group-gap);\n align-items: center;\n margin-block: var(--sbb-chip-group-margin-block);\n line-height: var(--sbb-typo-line-height-text);\n}\n\n:host(:is(:is(:state(size-s),[state--size-s]), :is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: 0;\n}\n\n:host(:is(:state(size-s),[state--size-s]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: 0.375rem 0.3125rem;\n}\n@media (min-width: calc(64rem)) {\n :host(:is(:state(size-s),[state--size-s]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: 0.3125rem 0.1875rem;\n }\n}\n\n:host(:is(:state(without-label),[state--without-label]):is(:state(size-s),[state--size-s]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: 0 0.4375rem;\n}\n@media (min-width: calc(64rem)) {\n :host(:is(:state(without-label),[state--without-label]):is(:state(size-s),[state--size-s]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: 0 0.3125rem;\n }\n}\n\n:host(:is(:is(:state(size-l),[state--size-l]), :is(:state(size-m),[state--size-m]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default) 0;\n}\n@media (min-width: calc(64rem)) {\n :host(:is(:is(:state(size-l),[state--size-l]), :is(:state(size-m),[state--size-m]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default-large) 0;\n }\n}\n\n:host(:is(:state(without-label),[state--without-label]):is(:state(size-m),[state--size-m]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: 0.1875rem 0.6875rem;\n}\n@media (min-width: calc(64rem)) {\n :host(:is(:state(without-label),[state--without-label]):is(:state(size-m),[state--size-m]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: 0.1875rem 0.875rem;\n }\n}\n\n:host(:is(:state(without-label),[state--without-label]):not(:is(:state(empty),[state--empty]), :is(:state(size-s),[state--size-s]), :is(:state(size-m),[state--size-m]), :is(:state(size-l),[state--size-l]))) {\n --sbb-chip-group-margin-block: var(--sbb-chip-group-margin-block-no-label-not-empty);\n}\n\n:host(:not(:is(:state(without-label),[state--without-label])):is(:state(size-m),[state--size-m]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default)\n var(--_sbb-chip-group-margin-block-start-default-large);\n}\n@media (min-width: calc(64rem)) {\n :host(:not(:is(:state(without-label),[state--without-label])):is(:state(size-m),[state--size-m]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default-large)\n var(--_sbb-chip-group-margin-block-start-default-large);\n }\n}\n\n:host(:not(:is(:state(without-label),[state--without-label]), :is(:state(empty),[state--empty]), :is(:state(size-s),[state--size-s]), :is(:state(size-m),[state--size-m]), :is(:state(size-l),[state--size-l]))) {\n --sbb-chip-group-margin-block: var(--sbb-chip-group-margin-block-with-label-not-empty);\n}\n\n:host(:is(:state(without-label),[state--without-label]):is(:state(size-l),[state--size-l]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default)\n 1rem;\n}\n@media (min-width: calc(64rem)) {\n :host(:is(:state(without-label),[state--without-label]):is(:state(size-l),[state--size-l]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default-large)\n 1.25rem;\n }\n}\n\n:host(:not(:is(:state(without-label),[state--without-label])):is(:state(size-l),[state--size-l]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default)\n 0.46875rem;\n}\n@media (min-width: calc(64rem)) {\n :host(:not(:is(:state(without-label),[state--without-label])):is(:state(size-l),[state--size-l]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default-large)\n 0.46875rem;\n }\n}\n\n::slotted(input) {\n flex: 1 1 var(--sbb-chip-group-input-min-width);\n max-height: 1.5rem;\n}\n\n::slotted(sbb-chip) {\n max-width: 100%;\n}";
15
+ //#endregion
16
+ //#region src/elements/chip/chip-group/chip-group.component.ts
17
+ var SbbChipInputTokenEndEvent = class extends CustomEvent {
18
+ /**
19
+ * @deprecated Use event properties directly.
20
+ */
21
+ get detail() {
22
+ return this;
23
+ }
24
+ constructor(options) {
25
+ super("chipinputtokenend", {
26
+ cancelable: true,
27
+ bubbles: true,
28
+ composed: true
29
+ });
30
+ this.origin = options.origin;
31
+ this.value = options.value;
32
+ this.label = options.label;
33
+ }
34
+ /** Set a new value for the chip that will be created */
35
+ setValue(value) {
36
+ this.value = value;
37
+ }
38
+ /** Set a label for the chip that will be created */
39
+ setLabel(label) {
40
+ this.label = label;
41
+ }
42
+ };
43
+ /**
44
+ * The `sbb-chip-group` component is used as a container for one or multiple `sbb-chip`.
45
+ *
46
+ * @slot - Use the unnamed slot to add `sbb-chip` elements.
47
+ * @event {SbbChipInputTokenEndEvent<T>} chipinputtokenend - Notifies that a chip is about to be created. Can be prevented.
48
+ * @overrideType value - (T = string[]) | null
49
+ */
50
+ var SbbChipGroupElement = (() => {
51
+ let _classSuper = SbbRequiredMixin(SbbDisabledMixin(SbbNegativeMixin(SbbFormAssociatedMixin(SbbElement))));
52
+ let _instanceExtraInitializers = [];
53
+ let _set_value_decorators;
54
+ let _displayWith_decorators;
55
+ let _displayWith_initializers = [];
56
+ let _displayWith_extraInitializers = [];
57
+ let _separatorKeys_decorators;
58
+ let _separatorKeys_initializers = [];
59
+ let _separatorKeys_extraInitializers = [];
60
+ let _addOnBlur_decorators;
61
+ let _addOnBlur_initializers = [];
62
+ let _addOnBlur_extraInitializers = [];
63
+ return class SbbChipGroupElement extends _classSuper {
64
+ static {
65
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
66
+ _set_value_decorators = [property({ type: Array })];
67
+ _displayWith_decorators = [property({ attribute: false })];
68
+ _separatorKeys_decorators = [property({
69
+ attribute: "separator-keys",
70
+ type: Array
71
+ })];
72
+ _addOnBlur_decorators = [forceType(), property({
73
+ attribute: "add-on-blur",
74
+ type: Boolean
75
+ })];
76
+ __esDecorate(this, null, _set_value_decorators, {
77
+ kind: "setter",
78
+ name: "value",
79
+ static: false,
80
+ private: false,
81
+ access: {
82
+ has: (obj) => "value" in obj,
83
+ set: (obj, value) => {
84
+ obj.value = value;
85
+ }
86
+ },
87
+ metadata: _metadata
88
+ }, null, _instanceExtraInitializers);
89
+ __esDecorate(this, null, _displayWith_decorators, {
90
+ kind: "accessor",
91
+ name: "displayWith",
92
+ static: false,
93
+ private: false,
94
+ access: {
95
+ has: (obj) => "displayWith" in obj,
96
+ get: (obj) => obj.displayWith,
97
+ set: (obj, value) => {
98
+ obj.displayWith = value;
99
+ }
100
+ },
101
+ metadata: _metadata
102
+ }, _displayWith_initializers, _displayWith_extraInitializers);
103
+ __esDecorate(this, null, _separatorKeys_decorators, {
104
+ kind: "accessor",
105
+ name: "separatorKeys",
106
+ static: false,
107
+ private: false,
108
+ access: {
109
+ has: (obj) => "separatorKeys" in obj,
110
+ get: (obj) => obj.separatorKeys,
111
+ set: (obj, value) => {
112
+ obj.separatorKeys = value;
113
+ }
114
+ },
115
+ metadata: _metadata
116
+ }, _separatorKeys_initializers, _separatorKeys_extraInitializers);
117
+ __esDecorate(this, null, _addOnBlur_decorators, {
118
+ kind: "accessor",
119
+ name: "addOnBlur",
120
+ static: false,
121
+ private: false,
122
+ access: {
123
+ has: (obj) => "addOnBlur" in obj,
124
+ get: (obj) => obj.addOnBlur,
125
+ set: (obj, value) => {
126
+ obj.addOnBlur = value;
127
+ }
128
+ },
129
+ metadata: _metadata
130
+ }, _addOnBlur_initializers, _addOnBlur_extraInitializers);
131
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, {
132
+ enumerable: true,
133
+ configurable: true,
134
+ writable: true,
135
+ value: _metadata
136
+ });
137
+ }
138
+ static {
139
+ this.elementName = "sbb-chip-group";
140
+ }
141
+ static {
142
+ this.role = "listbox";
143
+ }
144
+ static {
145
+ this.styles = [boxSizingStyles, unsafeCSS(chip_group_default)];
146
+ }
147
+ static {
148
+ this.events = {
149
+ input: "input",
150
+ change: "change",
151
+ chipinputtokenend: "chipinputtokenend"
152
+ };
153
+ }
154
+ /** Value of the form element. */
155
+ set value(value) {
156
+ value = value ?? [];
157
+ const oldValue = this.value;
158
+ const toRemove = [...oldValue];
159
+ for (const c of value) if (toRemove.includes(c)) toRemove.splice(toRemove.indexOf(c), 1);
160
+ toRemove.forEach((value) => this._chipElements().find((c) => c.value === value)?.remove());
161
+ const toAdd = [...value];
162
+ for (const c of oldValue) if (toAdd.includes(c)) toAdd.splice(toAdd.indexOf(c), 1);
163
+ toAdd.forEach((c) => this._createChipElement(c));
164
+ }
165
+ get value() {
166
+ return this._chipElements().map((c) => c.value);
167
+ }
168
+ #displayWith_accessor_storage;
169
+ /** Function that maps a chip's value to its display value. */
170
+ get displayWith() {
171
+ return this.#displayWith_accessor_storage;
172
+ }
173
+ set displayWith(value) {
174
+ this.#displayWith_accessor_storage = value;
175
+ }
176
+ #separatorKeys_accessor_storage;
177
+ /** The array of keys that will trigger a `chipinputtokenend` event. Default `['Enter']` */
178
+ get separatorKeys() {
179
+ return this.#separatorKeys_accessor_storage;
180
+ }
181
+ set separatorKeys(value) {
182
+ this.#separatorKeys_accessor_storage = value;
183
+ }
184
+ #addOnBlur_accessor_storage;
185
+ /** Whether to automatically add a chip when the input loses focus if there's a value. */
186
+ get addOnBlur() {
187
+ return this.#addOnBlur_accessor_storage;
188
+ }
189
+ set addOnBlur(value) {
190
+ this.#addOnBlur_accessor_storage = value;
191
+ }
192
+ constructor() {
193
+ super();
194
+ this.#displayWith_accessor_storage = (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _displayWith_initializers, null));
195
+ this.#separatorKeys_accessor_storage = (__runInitializers(this, _displayWith_extraInitializers), __runInitializers(this, _separatorKeys_initializers, ["Enter"]));
196
+ this.#addOnBlur_accessor_storage = (__runInitializers(this, _separatorKeys_extraInitializers), __runInitializers(this, _addOnBlur_initializers, false));
197
+ /**
198
+ * Listens to the changes on `readonly` and `disabled` attributes of `<input>`.
199
+ */
200
+ this._inputAttributeObserver = (__runInitializers(this, _addOnBlur_extraInitializers), !isServer ? new MutationObserver(() => this._reactToInputChanges()) : null);
201
+ this._language = new SbbLanguageController(this);
202
+ this.addEventListener?.(SbbChipElement.events.requestdelete, (ev) => this._deleteChip(ev.target));
203
+ this.addEventListener?.("keydown", (ev) => this._onChipKeyDown(ev));
204
+ this.addController(new SbbPropertyWatcherController(this, () => this.closest("sbb-form-field"), {
205
+ size: (formField) => this._updateSize(formField.size),
206
+ label: (formField) => this._updateLabelState(formField),
207
+ hiddenLabel: (formField) => this._updateLabelState(formField)
208
+ }));
209
+ }
210
+ _updateLabelState(formField) {
211
+ this.toggleState("without-label", !formField.label || formField.hiddenLabel);
212
+ }
213
+ connectedCallback() {
214
+ super.connectedCallback();
215
+ this._setupComponent();
216
+ }
217
+ willUpdate(changedProperties) {
218
+ super.willUpdate(changedProperties);
219
+ if (changedProperties.has("disabled") || changedProperties.has("formDisabled") || changedProperties.has("negative")) this._proxyStateToChips();
220
+ }
221
+ /** @internal */
222
+ formResetCallback() {
223
+ this.value = null;
224
+ }
225
+ /** @internal */
226
+ formStateRestoreCallback(state, _reason) {
227
+ if (!state) {
228
+ this.value = null;
229
+ return;
230
+ }
231
+ this._readFormData(state).then((array) => this.value = array);
232
+ }
233
+ async _readFormData(formData) {
234
+ return Promise.all(formData.getAll(this.name).map(async (entry) => entry instanceof Blob ? JSON.parse(await entry.text()) : entry));
235
+ }
236
+ shouldValidate(name) {
237
+ return super.shouldValidate(name) || name === "required" || name === "value";
238
+ }
239
+ validate() {
240
+ super.validate();
241
+ if (this.required && this.value.length === 0) this.setValidityFlag("valueMissing", i18nSelectionRequired[this._language.current]);
242
+ else this.removeValidityFlag("valueMissing");
243
+ }
244
+ /** Return the list of chip elements **/
245
+ _chipElements() {
246
+ return Array.from(this.querySelectorAll?.("sbb-chip") ?? []);
247
+ }
248
+ /** Return the list of enabled chip elements **/
249
+ _enabledChipElements() {
250
+ return Array.from(this.querySelectorAll?.("sbb-chip:not([disabled])") ?? []);
251
+ }
252
+ _setupComponent() {
253
+ const input = this.querySelector("input");
254
+ if (input && input !== this._inputElement) {
255
+ this._inputAbortController?.abort();
256
+ this._inputAttributeObserver?.disconnect();
257
+ this._inputElement = input;
258
+ this._inputAbortController = new AbortController();
259
+ this._inputElement.addEventListener("keydown", (ev) => this._onInputKeyDown(ev), { signal: this._inputAbortController.signal });
260
+ this._inputElement.addEventListener("blur", () => this._onInputBlur(), {
261
+ signal: this._inputAbortController.signal,
262
+ capture: true
263
+ });
264
+ this._inputElement.addEventListener("inputAutocomplete", (event) => {
265
+ this._createChipFromInput("autocomplete", event.detail?.option.value);
266
+ }, { signal: this._inputAbortController.signal });
267
+ this._inputAttributeObserver?.observe(this._inputElement, {
268
+ attributes: true,
269
+ attributeFilter: ["readonly", "disabled"]
270
+ });
271
+ }
272
+ if (!this._previousSize || !this.closest("sbb-form-field")) this._updateSize(isLean() ? "s" : "m");
273
+ this.toggleState("empty", this.value.length === 0);
274
+ this._reactToInputChanges();
275
+ this._updateInputDescription();
276
+ this.updateFormValue();
277
+ }
278
+ /**
279
+ * Listen for keyboard events on the chip elements
280
+ **/
281
+ _onChipKeyDown(event) {
282
+ const eventTarget = event.target;
283
+ if (eventTarget.localName !== "sbb-chip") return;
284
+ if (isArrowKeyPressed(event)) {
285
+ const focusSteps = this._enabledChipElements();
286
+ focusSteps[getNextElementIndex(event, focusSteps.indexOf(eventTarget), focusSteps.length)].focus();
287
+ return;
288
+ }
289
+ switch (event.key) {
290
+ case "Backspace":
291
+ case "Delete":
292
+ if (!eventTarget.readOnly && !eventTarget.disabled) {
293
+ event.preventDefault();
294
+ this._deleteChip(eventTarget);
295
+ }
296
+ break;
297
+ }
298
+ }
299
+ /**
300
+ * Listen for keyboard events on the input
301
+ **/
302
+ _onInputKeyDown(event) {
303
+ switch (event.key) {
304
+ case "Backspace":
305
+ case "ArrowLeft":
306
+ if (!this._inputElement.value) this._focusChip();
307
+ break;
308
+ case "Enter":
309
+ event.preventDefault();
310
+ break;
311
+ }
312
+ if (this.separatorKeys.includes(event.key)) {
313
+ event.preventDefault();
314
+ this._createChipFromInput("input");
315
+ }
316
+ }
317
+ /**
318
+ * Handle blur event on the input
319
+ **/
320
+ _onInputBlur() {
321
+ if (this.addOnBlur) this._createChipFromInput("input");
322
+ }
323
+ /**
324
+ * If the input is not empty, create a chip with its value
325
+ */
326
+ _createChipFromInput(origin = "input", value) {
327
+ const inputValue = value ?? this._inputElement.value.trim();
328
+ if (!inputValue) return;
329
+ const event = new SbbChipInputTokenEndEvent({
330
+ origin,
331
+ value: inputValue,
332
+ label: (value ? this.displayWith?.(value) : null) ?? void 0
333
+ });
334
+ if (!this.dispatchEvent(event)) return;
335
+ this._createChipElement(event.value, event.label);
336
+ this._inputElement.value = "";
337
+ this._emitInputEvents();
338
+ }
339
+ _deleteChip(chip) {
340
+ const chips = this._enabledChipElements();
341
+ chip.remove();
342
+ this._emitInputEvents();
343
+ this._focusChip(chips.indexOf(chip));
344
+ }
345
+ /**
346
+ * Focus an enabled chip. If none are present, focus the input
347
+ * @param index The index of the enabled chip. If null, focus the last one.
348
+ */
349
+ _focusChip(index) {
350
+ const enabledChips = this._enabledChipElements();
351
+ if (index !== void 0 && enabledChips[index]) {
352
+ enabledChips[index].focus();
353
+ return;
354
+ }
355
+ if (enabledChips.length > 0) {
356
+ enabledChips[enabledChips.length - 1].focus();
357
+ return;
358
+ }
359
+ this._inputElement?.focus();
360
+ }
361
+ _emitInputEvents() {
362
+ /** The input event fires when the value has been changed as a direct result of a user action. */
363
+ this.dispatchEvent(new InputEvent("input", {
364
+ bubbles: true,
365
+ composed: true
366
+ }));
367
+ /**
368
+ * The change event is fired when the user modifies the element's value.
369
+ * Unlike the input event, the change event is not necessarily fired
370
+ * for each alteration to an element's value.
371
+ */
372
+ this.dispatchEvent(new Event("change", { bubbles: true }));
373
+ }
374
+ _createChipElement(value, label) {
375
+ if (isServer) return;
376
+ const newChip = document.createElement("sbb-chip");
377
+ newChip.value = value;
378
+ newChip.innerText = label ?? (value ? this.displayWith?.(value) : null) ?? "";
379
+ this.insertBefore(newChip, this._inputElement ?? this.querySelector("input"));
380
+ }
381
+ _reactToInputChanges() {
382
+ this.disabled = this._inputElement?.disabled ?? false;
383
+ this._proxyStateToChips();
384
+ }
385
+ _proxyStateToChips() {
386
+ this._chipElements().forEach((c) => {
387
+ c.disabled = this.disabled || this.formDisabled;
388
+ c.readOnly = this._inputElement?.hasAttribute("readonly") ?? false;
389
+ c.negative = this.negative;
390
+ });
391
+ }
392
+ _updateSize(size) {
393
+ if (this._previousSize) this.internals.states.delete(`size-${this._previousSize}`);
394
+ this._previousSize = size;
395
+ if (this._previousSize) this.internals.states.add(`size-${this._previousSize}`);
396
+ }
397
+ _updateInputDescription() {
398
+ if (!this._inputElement) return;
399
+ this._inputElement.setAttribute("aria-description", `${i18nChipGroupInputDescription[this._language.current]} ${this.value.length}`);
400
+ }
401
+ render() {
402
+ return html`<slot @slotchange=${this._setupComponent}></slot>`;
403
+ }
404
+ };
405
+ })();
406
+ //#endregion
407
+ export { SbbChipInputTokenEndEvent as n, SbbChipGroupElement as t };
408
+
409
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC1ncm91cC5jb21wb25lbnQtQlZmSFdYMi0uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NoaXAvY2hpcC1ncm91cC9jaGlwLWdyb3VwLnNjc3M/aW5saW5lIiwiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NoaXAvY2hpcC1ncm91cC9jaGlwLWdyb3VwLmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJAdXNlICcuLi8uLi9jb3JlL3N0eWxlcycgYXMgc2JiO1xuXG46aG9zdCB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGdhcDogdmFyKC0tc2JiLWNoaXAtZ3JvdXAtZ2FwKTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWFyZ2luLWJsb2NrOiB2YXIoLS1zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2spO1xuXG4gIC8vIFNldCB0aGUgbGluZS1oZWlnaHQgZm9yIGFkamFjZW50IGVsZW1lbnRzIGluIG9yZGVyIHRvIHByZXZlbnQgZnJvbSBpbmZsdWVuY2Ugb2YgYSBjb25zdW1lci1zZXQgbGluZS1oZWlnaHQuXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1zYmItdHlwby1saW5lLWhlaWdodC10ZXh0KTtcbn1cblxuOmhvc3QoOmlzKDpzdGF0ZShzaXplLXMpLCA6c3RhdGUoZW1wdHkpKSkge1xuICAtLXNiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jazogMDtcbn1cblxuOmhvc3QoOnN0YXRlKHNpemUtcyk6bm90KDpzdGF0ZShlbXB0eSkpKSB7XG4gIC0tc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrOiAje3NiYi5weC10by1yZW0tYnVpbGQoNil9ICN7c2JiLnB4LXRvLXJlbS1idWlsZCg1KX07XG5cbiAgQGluY2x1ZGUgc2JiLm1xKCRmcm9tOiBsYXJnZSkge1xuICAgIC0tc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrOiAje3NiYi5weC10by1yZW0tYnVpbGQoNSl9ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgzKX07XG4gIH1cbn1cblxuOmhvc3QoOnN0YXRlKHdpdGhvdXQtbGFiZWwpOnN0YXRlKHNpemUtcyk6bm90KDpzdGF0ZShlbXB0eSkpKSB7XG4gIC0tc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrOiAwICN7c2JiLnB4LXRvLXJlbS1idWlsZCg3KX07XG5cbiAgQGluY2x1ZGUgc2JiLm1xKCRmcm9tOiBsYXJnZSkge1xuICAgIC0tc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrOiAwICN7c2JiLnB4LXRvLXJlbS1idWlsZCg1KX07XG4gIH1cbn1cblxuOmhvc3QoOmlzKDpzdGF0ZShzaXplLWwpLCA6c3RhdGUoc2l6ZS1tKSkpIHtcbiAgLS1zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2s6IHZhcigtLV9zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2stc3RhcnQtZGVmYXVsdCkgMDtcblxuICBAaW5jbHVkZSBzYmIubXEoJGZyb206IGxhcmdlKSB7XG4gICAgLS1zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2s6IHZhcigtLV9zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2stc3RhcnQtZGVmYXVsdC1sYXJnZSkgMDtcbiAgfVxufVxuXG46aG9zdCg6c3RhdGUod2l0aG91dC1sYWJlbCk6c3RhdGUoc2l6ZS1tKTpub3QoOnN0YXRlKGVtcHR5KSkpIHtcbiAgLS1zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2s6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgzKX0gI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDExKX07XG5cbiAgQGluY2x1ZGUgc2JiLm1xKCRmcm9tOiBsYXJnZSkge1xuICAgIC0tc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrOiAje3NiYi5weC10by1yZW0tYnVpbGQoMyl9ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgxNCl9O1xuICB9XG59XG5cbjpob3N0KDpzdGF0ZSh3aXRob3V0LWxhYmVsKTpub3QoOnN0YXRlKGVtcHR5KSwgOnN0YXRlKHNpemUtcyksIDpzdGF0ZShzaXplLW0pLCA6c3RhdGUoc2l6ZS1sKSkpIHtcbiAgLS1zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2s6IHZhcigtLXNiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jay1uby1sYWJlbC1ub3QtZW1wdHkpO1xufVxuXG46aG9zdCg6bm90KDpzdGF0ZSh3aXRob3V0LWxhYmVsKSk6c3RhdGUoc2l6ZS1tKTpub3QoOnN0YXRlKGVtcHR5KSkpIHtcbiAgLS1zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2s6IHZhcigtLV9zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2stc3RhcnQtZGVmYXVsdClcbiAgICB2YXIoLS1fc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrLXN0YXJ0LWRlZmF1bHQtbGFyZ2UpO1xuXG4gIEBpbmNsdWRlIHNiYi5tcSgkZnJvbTogbGFyZ2UpIHtcbiAgICAtLXNiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jazogdmFyKC0tX3NiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jay1zdGFydC1kZWZhdWx0LWxhcmdlKVxuICAgICAgdmFyKC0tX3NiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jay1zdGFydC1kZWZhdWx0LWxhcmdlKTtcbiAgfVxufVxuXG46aG9zdCg6bm90KDpzdGF0ZSh3aXRob3V0LWxhYmVsKSwgOnN0YXRlKGVtcHR5KSwgOnN0YXRlKHNpemUtcyksIDpzdGF0ZShzaXplLW0pLCA6c3RhdGUoc2l6ZS1sKSkpIHtcbiAgLS1zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2s6IHZhcigtLXNiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jay13aXRoLWxhYmVsLW5vdC1lbXB0eSk7XG59XG5cbjpob3N0KDpzdGF0ZSh3aXRob3V0LWxhYmVsKTpzdGF0ZShzaXplLWwpOm5vdCg6c3RhdGUoZW1wdHkpKSkge1xuICAtLXNiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jazogdmFyKC0tX3NiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jay1zdGFydC1kZWZhdWx0KVxuICAgICN7c2JiLnB4LXRvLXJlbS1idWlsZCgxNil9O1xuXG4gIEBpbmNsdWRlIHNiYi5tcSgkZnJvbTogbGFyZ2UpIHtcbiAgICAtLXNiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jazogdmFyKC0tX3NiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jay1zdGFydC1kZWZhdWx0LWxhcmdlKVxuICAgICAgI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDIwKX07XG4gIH1cbn1cblxuOmhvc3QoOm5vdCg6c3RhdGUod2l0aG91dC1sYWJlbCkpOnN0YXRlKHNpemUtbCk6bm90KDpzdGF0ZShlbXB0eSkpKSB7XG4gIC0tc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrOiB2YXIoLS1fc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrLXN0YXJ0LWRlZmF1bHQpXG4gICAgI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDcuNSl9O1xuXG4gIEBpbmNsdWRlIHNiYi5tcSgkZnJvbTogbGFyZ2UpIHtcbiAgICAtLXNiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jazogdmFyKC0tX3NiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jay1zdGFydC1kZWZhdWx0LWxhcmdlKVxuICAgICAgI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDcuNSl9O1xuICB9XG59XG5cbjo6c2xvdHRlZChpbnB1dCkge1xuICBmbGV4OiAxIDEgdmFyKC0tc2JiLWNoaXAtZ3JvdXAtaW5wdXQtbWluLXdpZHRoKTtcbiAgbWF4LWhlaWdodDogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDI0KX07XG59XG5cbjo6c2xvdHRlZChzYmItY2hpcCkge1xuICBtYXgtd2lkdGg6IDEwMCU7XG59XG4iLCJpbXBvcnQge1xuICB0eXBlIENTU1Jlc3VsdEdyb3VwLFxuICBodG1sLFxuICBpc1NlcnZlcixcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbiAgdW5zYWZlQ1NTLFxufSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IGdldE5leHRFbGVtZW50SW5kZXgsIGlzQXJyb3dLZXlQcmVzc2VkIH0gZnJvbSAnLi4vLi4vY29yZS9hMTF5LnRzJztcbmltcG9ydCB7IFNiYkVsZW1lbnQgfSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UtZWxlbWVudHMudHMnO1xuaW1wb3J0IHsgU2JiTGFuZ3VhZ2VDb250cm9sbGVyLCBTYmJQcm9wZXJ0eVdhdGNoZXJDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy50cyc7XG5pbXBvcnQgeyBmb3JjZVR5cGUgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMudHMnO1xuaW1wb3J0IHsgaXNMZWFuIH0gZnJvbSAnLi4vLi4vY29yZS9kb20vbGVhbi1jb250ZXh0LnRzJztcbmltcG9ydCB7IGkxOG5DaGlwR3JvdXBJbnB1dERlc2NyaXB0aW9uLCBpMThuU2VsZWN0aW9uUmVxdWlyZWQgfSBmcm9tICcuLi8uLi9jb3JlL2kxOG4udHMnO1xuaW1wb3J0IHtcbiAgdHlwZSBGb3JtUmVzdG9yZVJlYXNvbixcbiAgdHlwZSBGb3JtUmVzdG9yZVN0YXRlLFxuICBTYmJEaXNhYmxlZE1peGluLFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluLFxuICBTYmJOZWdhdGl2ZU1peGluLFxuICBTYmJSZXF1aXJlZE1peGluLFxufSBmcm9tICcuLi8uLi9jb3JlL21peGlucy50cyc7XG5pbXBvcnQgeyBib3hTaXppbmdTdHlsZXMgfSBmcm9tICcuLi8uLi9jb3JlL3N0eWxlcy50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYkZvcm1GaWVsZEVsZW1lbnQgfSBmcm9tICcuLi8uLi9mb3JtLWZpZWxkL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQudHMnO1xuaW1wb3J0IHR5cGUgeyBTYmJPcHRpb25CYXNlRWxlbWVudCB9IGZyb20gJy4uLy4uL29wdGlvbi9vcHRpb24vb3B0aW9uLWJhc2UtZWxlbWVudC50cyc7XG5pbXBvcnQgeyBTYmJDaGlwRWxlbWVudCB9IGZyb20gJy4uL2NoaXAvY2hpcC5jb21wb25lbnQudHMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9jaGlwLWdyb3VwLnNjc3M/aW5saW5lJztcblxubGV0IGRpc3BsYXlXaXRoV2FybmluZ0xvZ2dlZCA9IGZhbHNlO1xuXG4vLyBUT0RPKGJyZWFraW5nLWNoYW5nZSk6IFJlcGxhY2UgYmFzZSBjbGFzcyB3aXRoIEV2ZW50XG5leHBvcnQgY2xhc3MgU2JiQ2hpcElucHV0VG9rZW5FbmRFdmVudDxUID0gc3RyaW5nPiBleHRlbmRzIEN1c3RvbUV2ZW50PFxuICBTYmJDaGlwSW5wdXRUb2tlbkVuZEV2ZW50RGV0YWlsczxUPlxuPiB7XG4gIC8qKiBUaGUgZWxlbWVudCB0aGF0IHRyaWdnZXJlZCB0aGUgY2hpcCBjcmVhdGlvbiAqL1xuICBwdWJsaWMgb3JpZ2luOiAnaW5wdXQnIHwgJ2F1dG9jb21wbGV0ZSc7XG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIG5ldyBjaGlwLiBFaXRoZXIgdGhlIGlucHV0IG9yIHRoZSBvcHRpb24gdmFsdWUgZGVwZW5kaW5nIG9uIHRoZSBvcmlnaW4uXG4gICAqIEVpdGhlciB0aGUgdmFsdWUgZnJvbSB0aGUgaW5wdXQgd2hpY2ggaXMgYWx3YXlzIGBzdHJpbmdgIG9yIHRoZSB2YWx1ZSBmcm9tIHRoZSBzZWxlY3RlZCBvcHRpb25cbiAgICogZnJvbSBhbiBhdXRvY29tcGxldGUsIHdoaWNoIGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYW55IG90aGVyIHR5cGUuXG4gICAqL1xuICBwdWJsaWMgdmFsdWU6IFQgfCBzdHJpbmc7XG4gIHB1YmxpYyBsYWJlbD86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGV2ZW50IHByb3BlcnRpZXMgZGlyZWN0bHkuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGRldGFpbCgpOiBTYmJDaGlwSW5wdXRUb2tlbkVuZEV2ZW50RGV0YWlsczxUPiB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogUGljazxTYmJDaGlwSW5wdXRUb2tlbkVuZEV2ZW50LCAnb3JpZ2luJyB8ICd2YWx1ZScgfCAnbGFiZWwnPikge1xuICAgIHN1cGVyKCdjaGlwaW5wdXR0b2tlbmVuZCcsIHtcbiAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgfSk7XG4gICAgdGhpcy5vcmlnaW4gPSBvcHRpb25zLm9yaWdpbjtcbiAgICB0aGlzLnZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICB0aGlzLmxhYmVsID0gb3B0aW9ucy5sYWJlbDtcbiAgfVxuXG4gIC8qKiBTZXQgYSBuZXcgdmFsdWUgZm9yIHRoZSBjaGlwIHRoYXQgd2lsbCBiZSBjcmVhdGVkICovXG4gIHB1YmxpYyBzZXRWYWx1ZSh2YWx1ZTogVCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuICAvKiogU2V0IGEgbGFiZWwgZm9yIHRoZSBjaGlwIHRoYXQgd2lsbCBiZSBjcmVhdGVkICovXG4gIHB1YmxpYyBzZXRMYWJlbChsYWJlbDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xuICB9XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBTYmJDaGlwSW5wdXRUb2tlbkVuZEV2ZW50YCBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNiYkNoaXBJbnB1dFRva2VuRW5kRXZlbnREZXRhaWxzPFQgPSBzdHJpbmc+IHtcbiAgLyoqIFRoZSBlbGVtZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBjaGlwIGNyZWF0aW9uICovXG4gIG9yaWdpbjogJ2lucHV0JyB8ICdhdXRvY29tcGxldGUnO1xuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBuZXcgY2hpcC4gRWl0aGVyIHRoZSBpbnB1dCBvciB0aGUgb3B0aW9uIHZhbHVlIGRlcGVuZGluZyBvbiB0aGUgb3JpZ2luLlxuICAgKiBFaXRoZXIgdGhlIHZhbHVlIGZyb20gdGhlIGlucHV0IHdoaWNoIGlzIGFsd2F5cyBgc3RyaW5nYCBvciB0aGUgdmFsdWUgZnJvbSB0aGUgc2VsZWN0ZWQgb3B0aW9uXG4gICAqIGZyb20gYW4gYXV0b2NvbXBsZXRlLCB3aGljaCBjYW4gYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGFueSBvdGhlciB0eXBlLlxuICAgKi9cbiAgdmFsdWU6IFQgfCBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogU2V0IGEgbmV3IHZhbHVlIGZvciB0aGUgY2hpcCB0aGF0IHdpbGwgYmUgY3JlYXRlZCAqL1xuICBzZXRWYWx1ZSh2YWx1ZTogVCk6IHZvaWQ7XG4gIC8qKiBTZXQgYSBsYWJlbCBmb3IgdGhlIGNoaXAgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgKi9cbiAgc2V0TGFiZWwodmFsdWU6IHN0cmluZyk6IHZvaWQ7XG59XG5cbi8qKlxuICogVGhlIGBzYmItY2hpcC1ncm91cGAgY29tcG9uZW50IGlzIHVzZWQgYXMgYSBjb250YWluZXIgZm9yIG9uZSBvciBtdWx0aXBsZSBgc2JiLWNoaXBgLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIGBzYmItY2hpcGAgZWxlbWVudHMuXG4gKiBAZXZlbnQge1NiYkNoaXBJbnB1dFRva2VuRW5kRXZlbnQ8VD59IGNoaXBpbnB1dHRva2VuZW5kIC0gTm90aWZpZXMgdGhhdCBhIGNoaXAgaXMgYWJvdXQgdG8gYmUgY3JlYXRlZC4gQ2FuIGJlIHByZXZlbnRlZC5cbiAqIEBvdmVycmlkZVR5cGUgdmFsdWUgLSAoVCA9IHN0cmluZ1tdKSB8IG51bGxcbiAqL1xuZXhwb3J0IGNsYXNzIFNiYkNoaXBHcm91cEVsZW1lbnQ8VCA9IHN0cmluZz4gZXh0ZW5kcyBTYmJSZXF1aXJlZE1peGluKFxuICBTYmJEaXNhYmxlZE1peGluKFNiYk5lZ2F0aXZlTWl4aW4oU2JiRm9ybUFzc29jaWF0ZWRNaXhpbihTYmJFbGVtZW50KSkpLFxuKSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgZWxlbWVudE5hbWU6IHN0cmluZyA9ICdzYmItY2hpcC1ncm91cCc7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgcm9sZSA9ICdsaXN0Ym94JztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gW2JveFNpemluZ1N0eWxlcywgdW5zYWZlQ1NTKHN0eWxlKV07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIGlucHV0OiAnaW5wdXQnLFxuICAgIGNoYW5nZTogJ2NoYW5nZScsXG4gICAgY2hpcGlucHV0dG9rZW5lbmQ6ICdjaGlwaW5wdXR0b2tlbmVuZCcsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqIFZhbHVlIG9mIHRoZSBmb3JtIGVsZW1lbnQuICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEFycmF5IH0pXG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IChUIHwgbnVsbClbXSB8IG51bGwpIHtcbiAgICB2YWx1ZSA9IHZhbHVlID8/IFtdO1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcblxuICAgIC8vIFN1YnRyYWN0IGZyb20gJ29sZFZhbHVlJyB0aGUgbmV3ICd2YWx1ZSdcbiAgICAvLyBUaGUgcmVzdWx0IGFyZSB0aGUgY2hpcHMgdG8gcmVtb3ZlIChoYW5kbGUgZHVwbGljYXRlcylcbiAgICBjb25zdCB0b1JlbW92ZSA9IFsuLi5vbGRWYWx1ZV07XG4gICAgZm9yIChjb25zdCBjIG9mIHZhbHVlKSB7XG4gICAgICBpZiAodG9SZW1vdmUuaW5jbHVkZXMoYykpIHtcbiAgICAgICAgdG9SZW1vdmUuc3BsaWNlKHRvUmVtb3ZlLmluZGV4T2YoYyksIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICB0b1JlbW92ZS5mb3JFYWNoKCh2YWx1ZSkgPT5cbiAgICAgIHRoaXMuX2NoaXBFbGVtZW50cygpXG4gICAgICAgIC5maW5kKChjKSA9PiBjLnZhbHVlID09PSB2YWx1ZSlcbiAgICAgICAgPy5yZW1vdmUoKSxcbiAgICApO1xuXG4gICAgLy8gU3VidHJhY3QgZnJvbSB0aGUgbmV3ICd2YWx1ZScgd2hhdCB3YXMgYWxyZWFkeSBwcmVzZW50XG4gICAgLy8gVGhlIHJlc3VsdCBhcmUgdGhlIG5ldyBjaGlwcyB0byBhZGQgKGhhbmRsZSBkdXBsaWNhdGVzKVxuICAgIGNvbnN0IHRvQWRkID0gWy4uLnZhbHVlXTtcbiAgICBmb3IgKGNvbnN0IGMgb2Ygb2xkVmFsdWUpIHtcbiAgICAgIGlmICh0b0FkZC5pbmNsdWRlcyhjKSkge1xuICAgICAgICB0b0FkZC5zcGxpY2UodG9BZGQuaW5kZXhPZihjKSwgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRvQWRkLmZvckVhY2goKGMpID0+IHRoaXMuX2NyZWF0ZUNoaXBFbGVtZW50KGMpKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IChUIHwgbnVsbClbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NoaXBFbGVtZW50cygpLm1hcCgoYykgPT4gYy52YWx1ZSk7XG4gIH1cblxuICAvKiogRnVuY3Rpb24gdGhhdCBtYXBzIGEgY2hpcCdzIHZhbHVlIHRvIGl0cyBkaXNwbGF5IHZhbHVlLiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBkaXNwbGF5V2l0aDogKCh2YWx1ZTogVCkgPT4gc3RyaW5nKSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBUaGUgYXJyYXkgb2Yga2V5cyB0aGF0IHdpbGwgdHJpZ2dlciBhIGBjaGlwaW5wdXR0b2tlbmVuZGAgZXZlbnQuIERlZmF1bHQgYFsnRW50ZXInXWAgKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnc2VwYXJhdG9yLWtleXMnLCB0eXBlOiBBcnJheSB9KVxuICBwdWJsaWMgYWNjZXNzb3Igc2VwYXJhdG9yS2V5czogc3RyaW5nW10gPSBbJ0VudGVyJ107XG5cbiAgLyoqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBhZGQgYSBjaGlwIHdoZW4gdGhlIGlucHV0IGxvc2VzIGZvY3VzIGlmIHRoZXJlJ3MgYSB2YWx1ZS4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2FkZC1vbi1ibHVyJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYWRkT25CbHVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIExpc3RlbnMgdG8gdGhlIGNoYW5nZXMgb24gYHJlYWRvbmx5YCBhbmQgYGRpc2FibGVkYCBhdHRyaWJ1dGVzIG9mIGA8aW5wdXQ+YC5cbiAgICovXG4gIHByaXZhdGUgX2lucHV0QXR0cmlidXRlT2JzZXJ2ZXIgPSAhaXNTZXJ2ZXJcbiAgICA/IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHRoaXMuX3JlYWN0VG9JbnB1dENoYW5nZXMoKSlcbiAgICA6IG51bGw7XG5cbiAgcHJpdmF0ZSBfaW5wdXRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9pbnB1dEFib3J0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX3ByZXZpb3VzU2l6ZT86IFNiYkZvcm1GaWVsZEVsZW1lbnRbJ3NpemUnXTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKFNiYkNoaXBFbGVtZW50LmV2ZW50cy5yZXF1ZXN0ZGVsZXRlLCAoZXYpID0+XG4gICAgICB0aGlzLl9kZWxldGVDaGlwKGV2LnRhcmdldCBhcyBTYmJDaGlwRWxlbWVudDxUPiksXG4gICAgKTtcblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdrZXlkb3duJywgKGV2KSA9PiB0aGlzLl9vbkNoaXBLZXlEb3duKGV2KSk7XG5cbiAgICB0aGlzLmFkZENvbnRyb2xsZXIoXG4gICAgICBuZXcgU2JiUHJvcGVydHlXYXRjaGVyQ29udHJvbGxlcih0aGlzLCAoKSA9PiB0aGlzLmNsb3Nlc3QoJ3NiYi1mb3JtLWZpZWxkJyksIHtcbiAgICAgICAgc2l6ZTogKGZvcm1GaWVsZCkgPT4gdGhpcy5fdXBkYXRlU2l6ZShmb3JtRmllbGQuc2l6ZSksXG4gICAgICAgIGxhYmVsOiAoZm9ybUZpZWxkKSA9PiB0aGlzLl91cGRhdGVMYWJlbFN0YXRlKGZvcm1GaWVsZCksXG4gICAgICAgIGhpZGRlbkxhYmVsOiAoZm9ybUZpZWxkKSA9PiB0aGlzLl91cGRhdGVMYWJlbFN0YXRlKGZvcm1GaWVsZCksXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlTGFiZWxTdGF0ZShmb3JtRmllbGQ6IFNiYkZvcm1GaWVsZEVsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZVN0YXRlKCd3aXRob3V0LWxhYmVsJywgIWZvcm1GaWVsZC5sYWJlbCB8fCBmb3JtRmllbGQuaGlkZGVuTGFiZWwpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5fc2V0dXBDb21wb25lbnQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlcyk6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKFxuICAgICAgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdkaXNhYmxlZCcpIHx8XG4gICAgICBjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2Zvcm1EaXNhYmxlZCcpIHx8XG4gICAgICBjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ25lZ2F0aXZlJylcbiAgICApIHtcbiAgICAgIHRoaXMuX3Byb3h5U3RhdGVUb0NoaXBzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLFxuICAgIF9yZWFzb246IEZvcm1SZXN0b3JlUmVhc29uLFxuICApOiB2b2lkIHtcbiAgICBpZiAoIXN0YXRlKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9yZWFkRm9ybURhdGEoc3RhdGUgYXMgRm9ybURhdGEpLnRoZW4oKGFycmF5KSA9PiAodGhpcy52YWx1ZSA9IGFycmF5KSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9yZWFkRm9ybURhdGEoZm9ybURhdGE6IEZvcm1EYXRhKTogUHJvbWlzZTxUW10+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICBmb3JtRGF0YVxuICAgICAgICAuZ2V0QWxsKHRoaXMubmFtZSlcbiAgICAgICAgLm1hcChhc3luYyAoZW50cnkpID0+XG4gICAgICAgICAgZW50cnkgaW5zdGFuY2VvZiBCbG9iID8gSlNPTi5wYXJzZShhd2FpdCBlbnRyeS50ZXh0KCkpIDogKGVudHJ5IGFzIFQpLFxuICAgICAgICApLFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2hvdWxkVmFsaWRhdGUobmFtZTogUHJvcGVydHlLZXkgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuc2hvdWxkVmFsaWRhdGUobmFtZSkgfHwgbmFtZSA9PT0gJ3JlcXVpcmVkJyB8fCBuYW1lID09PSAndmFsdWUnO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHZhbGlkYXRlKCk6IHZvaWQge1xuICAgIHN1cGVyLnZhbGlkYXRlKCk7XG4gICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgdGhpcy52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc2V0VmFsaWRpdHlGbGFnKCd2YWx1ZU1pc3NpbmcnLCBpMThuU2VsZWN0aW9uUmVxdWlyZWRbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbW92ZVZhbGlkaXR5RmxhZygndmFsdWVNaXNzaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJldHVybiB0aGUgbGlzdCBvZiBjaGlwIGVsZW1lbnRzICoqL1xuICBwcml2YXRlIF9jaGlwRWxlbWVudHMoKTogU2JiQ2hpcEVsZW1lbnQ8VD5bXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsPy48U2JiQ2hpcEVsZW1lbnQ8VD4+KCdzYmItY2hpcCcpID8/IFtdKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm4gdGhlIGxpc3Qgb2YgZW5hYmxlZCBjaGlwIGVsZW1lbnRzICoqL1xuICBwcml2YXRlIF9lbmFibGVkQ2hpcEVsZW1lbnRzKCk6IFNiYkNoaXBFbGVtZW50PFQ+W10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbD8uKCdzYmItY2hpcDpub3QoW2Rpc2FibGVkXSknKSA/PyBbXSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXR1cENvbXBvbmVudCgpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcblxuICAgIC8vIENvbm5lY3QgdG8gdGhlIGlucHV0XG4gICAgaWYgKGlucHV0ICYmIGlucHV0ICE9PSB0aGlzLl9pbnB1dEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgICAgdGhpcy5faW5wdXRBdHRyaWJ1dGVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy5faW5wdXRFbGVtZW50ID0gaW5wdXQ7XG5cbiAgICAgIHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgdGhpcy5faW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXYpID0+IHRoaXMuX29uSW5wdXRLZXlEb3duKGV2KSwge1xuICAgICAgICBzaWduYWw6IHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5faW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB0aGlzLl9vbklucHV0Qmx1cigpLCB7XG4gICAgICAgIHNpZ25hbDogdGhpcy5faW5wdXRBYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICBjYXB0dXJlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLl9pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2lucHV0QXV0b2NvbXBsZXRlJyxcbiAgICAgICAgKGV2ZW50OiBDdXN0b21FdmVudDx7IG9wdGlvbjogU2JiT3B0aW9uQmFzZUVsZW1lbnQ8VD4gfT4pID0+IHtcbiAgICAgICAgICB0aGlzLl9jcmVhdGVDaGlwRnJvbUlucHV0KCdhdXRvY29tcGxldGUnLCBldmVudC5kZXRhaWw/Lm9wdGlvbi52YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzaWduYWw6IHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuX2lucHV0QXR0cmlidXRlT2JzZXJ2ZXI/Lm9ic2VydmUodGhpcy5faW5wdXRFbGVtZW50LCB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydyZWFkb25seScsICdkaXNhYmxlZCddLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSW5oZXJpdCBzaXplIGZyb20gdGhlIGZvcm0tZmllbGQgYW5kIG9ic2VydmUgZm9yIGNoYW5nZXNcbiAgICBpZiAoIXRoaXMuX3ByZXZpb3VzU2l6ZSB8fCAhdGhpcy5jbG9zZXN0KCdzYmItZm9ybS1maWVsZCcpKSB7XG4gICAgICB0aGlzLl91cGRhdGVTaXplKGlzTGVhbigpID8gJ3MnIDogJ20nKTtcbiAgICB9XG5cbiAgICB0aGlzLnRvZ2dsZVN0YXRlKCdlbXB0eScsIHRoaXMudmFsdWUubGVuZ3RoID09PSAwKTtcbiAgICB0aGlzLl9yZWFjdFRvSW5wdXRDaGFuZ2VzKCk7XG4gICAgdGhpcy5fdXBkYXRlSW5wdXREZXNjcmlwdGlvbigpO1xuICAgIHRoaXMudXBkYXRlRm9ybVZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIGZvciBrZXlib2FyZCBldmVudHMgb24gdGhlIGNoaXAgZWxlbWVudHNcbiAgICoqL1xuICBwcml2YXRlIF9vbkNoaXBLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZXZlbnRUYXJnZXQgPSBldmVudC50YXJnZXQgYXMgU2JiQ2hpcEVsZW1lbnQ8VD47XG4gICAgaWYgKGV2ZW50VGFyZ2V0LmxvY2FsTmFtZSAhPT0gJ3NiYi1jaGlwJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFycm93IGtleXMgYWxsb3cgbmF2aWdhdGlvbiBiZXR3ZWVuIGNoaXBzIGZvY3VzIHN0ZXBzXG4gICAgaWYgKGlzQXJyb3dLZXlQcmVzc2VkKGV2ZW50KSkge1xuICAgICAgY29uc3QgZm9jdXNTdGVwcyA9IHRoaXMuX2VuYWJsZWRDaGlwRWxlbWVudHMoKTtcbiAgICAgIGNvbnN0IG5leHQgPSBnZXROZXh0RWxlbWVudEluZGV4KGV2ZW50LCBmb2N1c1N0ZXBzLmluZGV4T2YoZXZlbnRUYXJnZXQpLCBmb2N1c1N0ZXBzLmxlbmd0aCk7XG4gICAgICBmb2N1c1N0ZXBzW25leHRdLmZvY3VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6XG4gICAgICBjYXNlICdEZWxldGUnOlxuICAgICAgICBpZiAoIWV2ZW50VGFyZ2V0LnJlYWRPbmx5ICYmICFldmVudFRhcmdldC5kaXNhYmxlZCkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5fZGVsZXRlQ2hpcChldmVudFRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiBmb3Iga2V5Ym9hcmQgZXZlbnRzIG9uIHRoZSBpbnB1dFxuICAgKiovXG4gIHByaXZhdGUgX29uSW5wdXRLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6XG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0RWxlbWVudCEudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLl9mb2N1c0NoaXAoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gUHJldmVudHMgdGhlIGZvcm0gc3VibWl0XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1c2VyIHR5cGVkIG9uZSBvZiB0aGUgc2VwYXJhdG9yIGtleXMsIHRyaWdnZXIgYSAnY2hpcGlucHV0dG9rZW5lbmQnIGV2ZW50XG4gICAgaWYgKHRoaXMuc2VwYXJhdG9yS2V5cy5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBwcmV2ZW50IHR5cGluZyB0aGUgc2VwYXJhdG9yIGtleSBpbnRvIHRoZSBpbnB1dFxuICAgICAgdGhpcy5fY3JlYXRlQ2hpcEZyb21JbnB1dCgnaW5wdXQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGJsdXIgZXZlbnQgb24gdGhlIGlucHV0XG4gICAqKi9cbiAgcHJpdmF0ZSBfb25JbnB1dEJsdXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWRkT25CbHVyKSB7XG4gICAgICB0aGlzLl9jcmVhdGVDaGlwRnJvbUlucHV0KCdpbnB1dCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgaW5wdXQgaXMgbm90IGVtcHR5LCBjcmVhdGUgYSBjaGlwIHdpdGggaXRzIHZhbHVlXG4gICAqL1xuICBwcml2YXRlIF9jcmVhdGVDaGlwRnJvbUlucHV0KG9yaWdpbjogJ2lucHV0JyB8ICdhdXRvY29tcGxldGUnID0gJ2lucHV0JywgdmFsdWU/OiBUKTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IHZhbHVlID8/IHRoaXMuX2lucHV0RWxlbWVudCEudmFsdWUudHJpbSgpO1xuICAgIGlmICghaW5wdXRWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50ID0gbmV3IFNiYkNoaXBJbnB1dFRva2VuRW5kRXZlbnQ8VD4oe1xuICAgICAgb3JpZ2luLFxuICAgICAgdmFsdWU6IGlucHV0VmFsdWUgYXMgc3RyaW5nLFxuICAgICAgbGFiZWw6ICh2YWx1ZSA/IHRoaXMuZGlzcGxheVdpdGg/Lih2YWx1ZSkgOiBudWxsKSA/PyB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgaWYgKCF0aGlzLmRpc3BhdGNoRXZlbnQoZXZlbnQpKSB7XG4gICAgICByZXR1cm47IC8vIGV2ZW50IHByZXZlbnRlZDsgZG8gbm90aGluZyAodGhlIGNvbnN1bWVyIGhhcyB0byBjcmVhdGUgdGhlIGNoaXApXG4gICAgfVxuXG4gICAgdGhpcy5fY3JlYXRlQ2hpcEVsZW1lbnQoZXZlbnQudmFsdWUgYXMgVCwgZXZlbnQubGFiZWwpO1xuICAgIHRoaXMuX2lucHV0RWxlbWVudCEudmFsdWUgPSAnJzsgLy8gRW1wdHkgdGhlIGlucHV0XG4gICAgdGhpcy5fZW1pdElucHV0RXZlbnRzKCk7XG4gIH1cblxuICBwcml2YXRlIF9kZWxldGVDaGlwKGNoaXA6IFNiYkNoaXBFbGVtZW50PFQ+KTogdm9pZCB7XG4gICAgY29uc3QgY2hpcHMgPSB0aGlzLl9lbmFibGVkQ2hpcEVsZW1lbnRzKCk7XG4gICAgY2hpcC5yZW1vdmUoKTtcbiAgICB0aGlzLl9lbWl0SW5wdXRFdmVudHMoKTtcbiAgICB0aGlzLl9mb2N1c0NoaXAoY2hpcHMuaW5kZXhPZihjaGlwKSk7IC8vIEZvY3VzIHRoZSBuZXh0IGNoaXBcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1cyBhbiBlbmFibGVkIGNoaXAuIElmIG5vbmUgYXJlIHByZXNlbnQsIGZvY3VzIHRoZSBpbnB1dFxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBlbmFibGVkIGNoaXAuIElmIG51bGwsIGZvY3VzIHRoZSBsYXN0IG9uZS5cbiAgICovXG4gIHByaXZhdGUgX2ZvY3VzQ2hpcChpbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGVuYWJsZWRDaGlwcyA9IHRoaXMuX2VuYWJsZWRDaGlwRWxlbWVudHMoKTtcblxuICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkICYmIGVuYWJsZWRDaGlwc1tpbmRleF0pIHtcbiAgICAgIGVuYWJsZWRDaGlwc1tpbmRleF0uZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZW5hYmxlZENoaXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIGVuYWJsZWRDaGlwc1tlbmFibGVkQ2hpcHMubGVuZ3RoIC0gMV0uZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbnB1dEVsZW1lbnQ/LmZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIF9lbWl0SW5wdXRFdmVudHMoKTogdm9pZCB7XG4gICAgLyoqIFRoZSBpbnB1dCBldmVudCBmaXJlcyB3aGVuIHRoZSB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGFzIGEgZGlyZWN0IHJlc3VsdCBvZiBhIHVzZXIgYWN0aW9uLiAqL1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudCgnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjaGFuZ2UgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBtb2RpZmllcyB0aGUgZWxlbWVudCdzIHZhbHVlLlxuICAgICAqIFVubGlrZSB0aGUgaW5wdXQgZXZlbnQsIHRoZSBjaGFuZ2UgZXZlbnQgaXMgbm90IG5lY2Vzc2FyaWx5IGZpcmVkXG4gICAgICogZm9yIGVhY2ggYWx0ZXJhdGlvbiB0byBhbiBlbGVtZW50J3MgdmFsdWUuXG4gICAgICovXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZUNoaXBFbGVtZW50KHZhbHVlOiBUIHwgbnVsbCwgbGFiZWw/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoaXNTZXJ2ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV3Q2hpcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NiYi1jaGlwJykgYXMgU2JiQ2hpcEVsZW1lbnQ8VD47XG4gICAgbmV3Q2hpcC52YWx1ZSA9IHZhbHVlO1xuICAgIG5ld0NoaXAuaW5uZXJUZXh0ID0gbGFiZWwgPz8gKHZhbHVlID8gdGhpcy5kaXNwbGF5V2l0aD8uKHZhbHVlKSA6IG51bGwpID8/ICcnO1xuICAgIGlmIChcbiAgICAgIGltcG9ydC5tZXRhLmVudi5ERVYgJiZcbiAgICAgICFkaXNwbGF5V2l0aFdhcm5pbmdMb2dnZWQgJiZcbiAgICAgICFsYWJlbCAmJlxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgIXRoaXMuZGlzcGxheVdpdGhcbiAgICApIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYGRpc3BsYXlXaXRoIGhhcyBub3QgYmVlbiBzZXQgeWV0IGZvciBzYmItY2hpcC1ncm91cCBhbmQgdmFsdWUgaXMgYW4gb2JqZWN0LlxuICAgICAgICAgSWYgeW91IGFyZSB1c2luZyBvYmplY3QgdmFsdWVzLCB5b3UgbmVlZCB0byBwcm92aWRlIGRpc3BsYXlXaWR0aCBiZWZvcmVcbiAgICAgICAgIHNldHRpbmcgb3Igc2VsZWN0aW5nIGFueSB2YWx1ZS5gLFxuICAgICAgKTtcbiAgICAgIGRpc3BsYXlXaXRoV2FybmluZ0xvZ2dlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuaW5zZXJ0QmVmb3JlKG5ld0NoaXAsIHRoaXMuX2lucHV0RWxlbWVudCA/PyB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVhY3RUb0lucHV0Q2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5faW5wdXRFbGVtZW50Py5kaXNhYmxlZCA/PyBmYWxzZTtcbiAgICB0aGlzLl9wcm94eVN0YXRlVG9DaGlwcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJveHlTdGF0ZVRvQ2hpcHMoKTogdm9pZCB7XG4gICAgdGhpcy5fY2hpcEVsZW1lbnRzKCkuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgYy5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5mb3JtRGlzYWJsZWQ7XG4gICAgICBjLnJlYWRPbmx5ID0gdGhpcy5faW5wdXRFbGVtZW50Py5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykgPz8gZmFsc2U7XG4gICAgICBjLm5lZ2F0aXZlID0gdGhpcy5uZWdhdGl2ZTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVNpemUoc2l6ZTogU2JiRm9ybUZpZWxkRWxlbWVudFsnc2l6ZSddKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3ByZXZpb3VzU2l6ZSkge1xuICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZShgc2l6ZS0ke3RoaXMuX3ByZXZpb3VzU2l6ZX1gKTtcbiAgICB9XG4gICAgdGhpcy5fcHJldmlvdXNTaXplID0gc2l6ZTtcbiAgICBpZiAodGhpcy5fcHJldmlvdXNTaXplKSB7XG4gICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKGBzaXplLSR7dGhpcy5fcHJldmlvdXNTaXplfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUlucHV0RGVzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pbnB1dEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faW5wdXRFbGVtZW50LnNldEF0dHJpYnV0ZShcbiAgICAgICdhcmlhLWRlc2NyaXB0aW9uJyxcbiAgICAgIGAke2kxOG5DaGlwR3JvdXBJbnB1dERlc2NyaXB0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke3RoaXMudmFsdWUubGVuZ3RofWAsXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYDxzbG90IEBzbG90Y2hhbmdlPSR7dGhpcy5fc2V0dXBDb21wb25lbnR9Pjwvc2xvdD5gO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItY2hpcC1ncm91cCc6IFNiYkNoaXBHcm91cEVsZW1lbnQ7XG4gIH1cblxuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRFdmVudE1hcCB7XG4gICAgY2hp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
@@ -1,4 +1,4 @@
1
- import { n as SbbChipInputTokenEndEvent, t as SbbChipGroupElement } from "./chip-group.component-CvpUdzu1.js";
1
+ import { n as SbbChipInputTokenEndEvent, t as SbbChipGroupElement } from "./chip-group.component-BVfHWX2-.js";
2
2
  import { t as SbbChipElement } from "./chip.component-C6v1-PLX.js";
3
3
  import "./chip.pure.js";
4
4
  //#region src/elements/chip.ts
@@ -1,3 +1,3 @@
1
- import { n as SbbChipInputTokenEndEvent, t as SbbChipGroupElement } from "./chip-group.component-CvpUdzu1.js";
1
+ import { n as SbbChipInputTokenEndEvent, t as SbbChipGroupElement } from "./chip-group.component-BVfHWX2-.js";
2
2
  import { t as SbbChipElement } from "./chip.component-C6v1-PLX.js";
3
3
  export { SbbChipElement, SbbChipGroupElement, SbbChipInputTokenEndEvent };
@@ -287,4 +287,4 @@ var SbbClockElement = (() => {
287
287
  //#endregion
288
288
  export { SbbClockElement as t };
289
289
 
290
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvY2suY29tcG9uZW50LUNWUHY0bUNwLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jbG9jay9hc3NldHMvc2JiX2Nsb2NrX2ZhY2Uuc3ZnP3JhdyIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jbG9jay9hc3NldHMvc2JiX2Nsb2NrX2hvdXJzLnN2Zz9yYXciLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvY2xvY2svYXNzZXRzL3NiYl9jbG9ja19taW51dGVzLnN2Zz9yYXciLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvY2xvY2svYXNzZXRzL3NiYl9jbG9ja19zZWNvbmRzLnN2Zz9yYXciLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvY2xvY2svY2xvY2suc2Nzcz9pbmxpbmUiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvY2xvY2svY2xvY2suY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmb2N1c2FibGU9XFxcImZhbHNlXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAxMDUgMTA1XFxcIj48ZyBjbGFzcz1cXFwiZmFjZVxcXCI+PGNpcmNsZSBmaWxsPVxcXCJ2YXIoLS1zYmItY2xvY2stYmFja2dyb3VuZC1jb2xvcilcXFwiIGN4PVxcXCI1Mi41XFxcIiBjeT1cXFwiNTIuNVxcXCIgcj1cXFwiNTIuNVxcXCIvPjxwYXRoIGQ9XFxcIk01MC43NSA0aDMuNXYxMmgtMy41ek01MC43NSA4OWgzLjV2MTJoLTMuNXpNNzUuMjMzIDkuNjIzbDMuMDMgMS43NS02IDEwLjM5Mi0zLjAzLTEuNzV6TTMyLjczNCA4My4yMzNsMy4wMyAxLjc1LTYgMTAuMzkyLTMuMDMtMS43NXpNOTMuNjI4IDI2LjczMmwxLjc1IDMuMDMxLTEwLjM5MiA2LTEuNzUtMy4wM3pNMjAuMDE3IDY5LjIzNGwxLjc1IDMuMDMxLTEwLjM5MiA2LTEuNzUtMy4wM3pNMTAxIDUwLjc1djMuNUg4OXYtMy41ek0xNiA1MC43NXYzLjVINHYtMy41ek05NS4zNzkgNzUuMjMybC0xLjc1IDMuMDMxLTEwLjM5Mi02IDEuNzUtMy4wM3pNMjEuNzY2IDMyLjczNGwtMS43NSAzLjAzMS0xMC4zOTItNiAxLjc1LTMuMDN6TTc4LjI2NyA5My42M2wtMy4wMyAxLjc1LTYtMTAuMzkzIDMuMDMtMS43NXpNMzUuNzY2IDIwLjAxNWwtMy4wMyAxLjc1LTYtMTAuMzkyIDMuMDMtMS43NXpcXFwiLz48Zz48cGF0aCBkPVxcXCJNNTYuODczIDQuMTlsMS4zOTIuMTQ3LS4zNjYgMy40OC0xLjM5Mi0uMTQ1ek00Ny4xMDEgOTcuMTc3bDEuMzkzLjE0Ni0uMzY2IDMuNDgxLTEuMzkyLS4xNDZ6TTYxLjg5NiA0LjkxNGwxLjM3LjI5LS43MjggMy40MjQtMS4zNy0uMjl6TTQyLjQ1OCA5Ni4zNjZsMS4zNy4yOS0uNzI4IDMuNDI0LTEuMzctLjI5MXpNNjYuODI1IDYuMTU3bDEuMzMyLjQzMi0xLjA4MiAzLjMzLTEuMzMxLS40MzR6TTM3LjkzMSA5NS4wODVsMS4zMzIuNDMyLTEuMDgyIDMuMzMtMS4zMzEtLjQzM3pNNzEuNTg0IDcuOTA2bDEuMjguNTY5LTEuNDI0IDMuMTk3LTEuMjgtLjU3ek0zMy41NiA5My4zMmwxLjI3OC41NjktMS40MjMgMy4xOTctMS4yOC0uNTd6TTgwLjQ0IDEyLjg1MmwxLjEzMy44MjMtMi4wNTggMi44MzEtMS4xMzItLjgyM3pNMjUuNDgxIDg4LjQ5NGwxLjEzMy44MjItMi4wNTcgMi44MzItMS4xMzMtLjgyM3pNODQuNDMgMTUuOTg2bDEuMDQuOTM3LTIuMzQyIDIuNi0xLjA0LS45MzZ6TTIxLjg3IDg1LjQ2OWwxLjA0LjkzNi0yLjM0MSAyLjYwMS0xLjA0LS45Mzd6TTg4LjA3MiAxOS41MjJsLjkzNyAxLjA0LTIuNiAyLjM0My0uOTM3LTEuMDR6TTE4LjU5MyA4Mi4wODhsLjkzNyAxLjA0LTIuNjAxIDIuMzQyLS45MzctMS4wNHpNOTEuMzI4IDIzLjQyNWwuODIzIDEuMTMzLTIuODMyIDIuMDU3LS44MjMtMS4xMzJ6TTE1LjY4NCA3OC4zODVsLjgyMyAxLjEzMi0yLjgzMiAyLjA1OC0uODIyLTEuMTMzek05Ni41MiAzMi4xMjhsLjU3IDEuMjc5LTMuMTk4IDEuNDIzLS41Ny0xLjI3OHpNMTEuMTA5IDcwLjE2MWwuNTY5IDEuMjc5LTMuMTk3IDEuNDIzLS41Ny0xLjI3OXpNOTguNDA3IDM2Ljg1bC40MzMgMS4zMzItMy4zMyAxLjA4MS0uNDMyLTEuMzMxek05LjQ4MyA2NS43NGwuNDMyIDEuMzMtMy4zMjkgMS4wODItLjQzMi0xLjMzMXpNOTkuNzk1IDQxLjcyNmwuMjkxIDEuMzctMy40MjMuNzI3LS4yOS0xLjM3ek04LjM0IDYxLjE3bC4yOTIgMS4zNy0zLjQyNC43MjgtLjI5LTEuMzd6TTEwMC42NiA0Ni43M2wuMTQ2IDEuMzkzLTMuNDguMzY2LS4xNDctMS4zOTJ6TTcuNjc0IDU2LjUwNmwuMTQ2IDEuMzkyLTMuNDguMzY2LS4xNDctMS4zOTJ6TTEwMC44MTEgNTYuODczbC0uMTQ2IDEuMzkyLTMuNDgtLjM2NS4xNDUtMS4zOTN6TTcuODIxIDQ3LjEwMWwtLjE0NiAxLjM5Mi0zLjQ4LS4zNjUuMTQ1LTEuMzkzek0xMDAuMDkgNjEuODk1bC0uMjkxIDEuMzY5LTMuNDI0LS43MjguMjkxLTEuMzY5ek04LjYzMSA0Mi40NmwtLjI5MSAxLjM3LTMuNDIzLS43MjguMjktMS4zN3pNOTguODQgNjYuODI3bC0uNDMyIDEuMzMxLTMuMzI5LTEuMDgxLjQzMy0xLjMzMnpNOS45MTggMzcuOTNsLS40MzMgMS4zMzEtMy4zMjktMS4wODIuNDMzLTEuMzMxek05Ny4wOTggNzEuNTg1bC0uNTY5IDEuMjgtMy4xOTctMS40MjQuNTctMS4yOHpNMTEuNjc3IDMzLjU1OGwtLjU3IDEuMjgtMy4xOTctMS40MjQuNTctMS4yNzl6TTkyLjE0OSA4MC40MzlsLS44MjMgMS4xMzMtMi44MzItMi4wNTguODIzLTEuMTMyek0xNi41MDYgMjUuNDgybC0uODIzIDEuMTMzLTIuODMxLTIuMDU3LjgyMy0xLjEzM3pNODkuMDE3IDg0LjQzMWwtLjkzNyAxLjA0LTIuNi0yLjM0MS45MzYtMS4wNHpNMTkuNTI4IDIxLjg2OWwtLjkzNiAxLjA0LTIuNjAxLTIuMzQyLjkzNi0xLjA0ek04NS40OCA4OC4wNzZsLTEuMDQxLjkzNi0yLjM0Mi0yLjYgMS4wNC0uOTM3ek0yMi45MSAxOC41OWwtMS4wNC45MzctMi4zNDEtMi42MDEgMS4wNC0uOTM3ek04MS41NzQgOTEuMzI4bC0xLjEzMy44MjMtMi4wNTctMi44MzEgMS4xMzItLjgyM3pNMjYuNjE3IDE1LjY4NGwtMS4xMzMuODIzLTIuMDU3LTIuODMyIDEuMTMyLS44MjN6TTcyLjg3MyA5Ni41MjRsLTEuMjc5LjU3LTEuNDIzLTMuMTk4IDEuMjc4LS41N3pNMzQuODM4IDExLjEwNWwtMS4yNzkuNTctMS40MjMtMy4xOTggMS4yNzktLjU3ek02OC4xNTEgOTguNDA1bC0xLjMzMS40MzItMS4wODItMy4zMjkgMS4zMzItLjQzMnpNMzkuMjU5IDkuNDg1bC0xLjMzMi40MzMtMS4wODEtMy4zMyAxLjMzMS0uNDMyek02My4yNzIgOTkuNzk5bC0xLjM2OS4yOS0uNzI4LTMuNDIyIDEuMzctLjI5MXpNNDMuODMgOC4zMzdsLTEuMzY5LjI5MS0uNzI3LTMuNDIzIDEuMzctLjI5MXpNNTguMjcgMTAwLjY2MmwtMS4zOTMuMTQ2LS4zNjYtMy40OCAxLjM5My0uMTQ3ek00OC40OTQgNy42NzJsLTEuMzkyLjE0Ny0uMzY2LTMuNDgxIDEuMzkyLS4xNDd6XFxcIi8+PC9nPjwvZz48L3N2Zz5cXG5cIiIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmb2N1c2FibGU9XFxcImZhbHNlXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAxMDUgMTA1XFxcIj48cGF0aCBpZD1cXFwibW9kX2Nsb2NrX3N2Z19ob3Vyc1xcXCIgZD1cXFwiTTU1LjcgNjQuNWgtNi40bC42LTQ0aDUuMnpcXFwiLz48L3N2Zz5cXG5cIiIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmb2N1c2FibGU9XFxcImZhbHNlXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAxMDUgMTA1XFxcIj48cGF0aCBkPVxcXCJNNTUuMSw2NC41aC01LjJsMC44LTU4aDMuNkw1NS4xLDY0LjV6XFxcIi8+PC9zdmc+XFxuXCIiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgZm9jdXNhYmxlPVxcXCJmYWxzZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTA1IDEwNVxcXCI+PHBhdGggZD1cXFwiTTU3LjgsMjEuM2MwLTIuOS0yLjQtNS4yLTUuMi01LjJzLTUuMywyLjMtNS4zLDUuMmMwLDIuNywyLDQuOCw0LjUsNS4yVjY5aDEuNVYyNi41QzU1LjgsMjYuMiw1Ny44LDI0LDU3LjgsMjEuM3pcXFwiLz48L3N2Zz5cXG5cIiIsIkB1c2UgJy4uL2NvcmUvc3R5bGVzJyBhcyBzYmI7XG5cbjpob3N0IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYXNwZWN0LXJhdGlvOiAxIC8gMTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgY29udGFpbjogY29udGVudDtcbn1cblxuLnNiYi1jbG9ja19fZmFjZSxcbi5zYmItY2xvY2tfX2hhbmQtaG91cnMsXG4uc2JiLWNsb2NrX19oYW5kLW1pbnV0ZXMsXG4uc2JiLWNsb2NrX19oYW5kLXNlY29uZHMge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGluc2V0OiAwO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyO1xuICB0cmFuc2Zvcm06IHJvdGF0ZVooMGRlZyk7XG4gIHRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Q7XG4gIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbn1cblxuLnNiYi1jbG9ja19faGFuZC1ob3Vycyxcbi5zYmItY2xvY2tfX2hhbmQtbWludXRlcyxcbi5zYmItY2xvY2tfX2ZhY2Uge1xuICBmaWxsOiB2YXIoLS1zYmItY2xvY2stZmFjZS1jb2xvcik7XG59XG5cbi5zYmItY2xvY2tfX2hhbmQtbWludXRlcyB7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS1zYmItZGlzYWJsZS1hbmltYXRpb24tZHVyYXRpb24sIDAuMnMpXG4gICAgY3ViaWMtYmV6aWVyKDAuNCwgMi4wOCwgMC41NSwgMC40NCk7XG5cbiAgQHN1cHBvcnRzIG5vdCAoYXNwZWN0LXJhdGlvOiAxIC8gMSkge1xuICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSA0OS42MjUlO1xuICB9XG59XG5cbi5zYmItY2xvY2tfX2hhbmQtaG91cnMge1xuICBhbmltYXRpb24tbmFtZTogcm90YXRlO1xuICBhbmltYXRpb24tZHVyYXRpb246IDQzMjAwcztcbiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XG4gIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjtcbiAgYW5pbWF0aW9uLXBsYXktc3RhdGU6IHZhcigtLXNiYi1jbG9jay1hbmltYXRpb24tcGxheS1zdGF0ZSwgJ3BhdXNlZCcpO1xufVxuXG4uc2JiLWNsb2NrX19oYW5kLWhvdXJzLS1pbml0aWFsLWhvdXIge1xuICBhbmltYXRpb24tbmFtZTogaGFuZC1ob3Vycy1hbmltYXRpb24taW5pdGlhbC1ob3VyO1xuICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXNiYi1jbG9jay1ob3Vycy1hbmltYXRpb24tZHVyYXRpb24sIDBzKTtcbiAgYW5pbWF0aW9uLXBsYXktc3RhdGU6IHZhcigtLXNiYi1jbG9jay1hbmltYXRpb24tcGxheS1zdGF0ZSwgJ3BhdXNlZCcpO1xuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxO1xufVxuXG4uc2JiLWNsb2NrX19oYW5kLW1pbnV0ZXMtLW5vLXRyYW5zaXRpb24ge1xuICB0cmFuc2l0aW9uOiBub25lO1xufVxuXG4uc2JiLWNsb2NrX19oYW5kLXNlY29uZHMge1xuICBhbmltYXRpb24tbmFtZTogaGFuZC1zZWNvbmRzLWFuaW1hdGlvbjtcbiAgYW5pbWF0aW9uLWR1cmF0aW9uOiA2MHM7XG4gIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjtcbiAgYW5pbWF0aW9uLXBsYXktc3RhdGU6IHZhcigtLXNiYi1jbG9jay1hbmltYXRpb24tcGxheS1zdGF0ZSwgJ3BhdXNlZCcpO1xuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcbiAgZmlsbDogdmFyKC0tc2JiLWNsb2NrLXNlY29uZHMtaGFuZC1jb2xvcik7XG59XG5cbi5zYmItY2xvY2tfX2hhbmQtc2Vjb25kcy0taW5pdGlhbC1taW51dGUge1xuICBhbmltYXRpb24tbmFtZTogaGFuZC1zZWNvbmRzLWFuaW1hdGlvbi1pbml0aWFsLW1pbnV0ZTtcbiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1zYmItY2xvY2stc2Vjb25kcy1hbmltYXRpb24tZHVyYXRpb24sIDBzKTtcbiAgYW5pbWF0aW9uLXBsYXktc3RhdGU6IHZhcigtLXNiYi1jbG9jay1hbmltYXRpb24tcGxheS1zdGF0ZSwgJ3BhdXNlZCcpO1xuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxO1xufVxuXG46aXMoLnNiYi1jbG9ja19faGFuZC1ob3VycywgLnNiYi1jbG9ja19faGFuZC1taW51dGVzLCAuc2JiLWNsb2NrX19oYW5kLXNlY29uZHMpIHtcbiAgOmhvc3QoOm5vdCg6c3RhdGUoaW5pdGlhbGl6ZWQpKSkgJiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHJvdGF0ZSB7XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlWigzNjBkZWcpO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgaGFuZC1ob3Vycy1hbmltYXRpb24taW5pdGlhbC1ob3VyIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlWih2YXIoLS1zYmItY2xvY2staG91cnMtYW5pbWF0aW9uLXN0YXJ0LWFuZ2xlLCAwZGVnKSk7XG4gIH1cblxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZVooMzYwZGVnKTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGhhbmQtc2Vjb25kcy1hbmltYXRpb24ge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGVaKDBkZWcpO1xuICB9XG5cbiAgOTcuNSUsXG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlWigzNjBkZWcpO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgaGFuZC1zZWNvbmRzLWFuaW1hdGlvbi1pbml0aWFsLW1pbnV0ZSB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZVoodmFyKC0tc2JiLWNsb2NrLXNlY29uZHMtYW5pbWF0aW9uLXN0YXJ0LWFuZ2xlLCAwZGVnKSk7XG4gIH1cblxuICA5Ny41JSxcbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGVaKDM2MGRlZyk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGh0bWwsXG4gIGlzU2VydmVyLFxuICB1bnNhZmVDU1MsXG4gIHR5cGUgQ1NTUmVzdWx0R3JvdXAsXG4gIHR5cGUgUHJvcGVydHlWYWx1ZXMsXG4gIHR5cGUgVGVtcGxhdGVSZXN1bHQsXG59IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHJlZiB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlZi5qcyc7XG5cbmltcG9ydCB7IFNiYkVsZW1lbnQgfSBmcm9tICcuLi9jb3JlL2Jhc2UtZWxlbWVudHMudHMnO1xuaW1wb3J0IHR5cGUgeyBTYmJUaW1lIH0gZnJvbSAnLi4vY29yZS9pbnRlcmZhY2VzLnRzJztcbmltcG9ydCB7IGJveFNpemluZ1N0eWxlcyB9IGZyb20gJy4uL2NvcmUvc3R5bGVzLnRzJztcblxuaW1wb3J0IGNsb2NrRmFjZVNWRyBmcm9tICcuL2Fzc2V0cy9zYmJfY2xvY2tfZmFjZS5zdmc/cmF3JztcbmltcG9ydCBjbG9ja0hhbmRsZUhvdXJzU1ZHIGZyb20gJy4vYXNzZXRzL3NiYl9jbG9ja19ob3Vycy5zdmc/cmF3JztcbmltcG9ydCBjbG9ja0hhbmRsZU1pbnV0ZXNTVkcgZnJvbSAnLi9hc3NldHMvc2JiX2Nsb2NrX21pbnV0ZXMuc3ZnP3Jhdyc7XG5pbXBvcnQgY2xvY2tIYW5kbGVTZWNvbmRzU1ZHIGZyb20gJy4vYXNzZXRzL3NiYl9jbG9ja19zZWNvbmRzLnN2Zz9yYXcnO1xuaW1wb3J0IHN0eWxlIGZyb20gJy4vY2xvY2suc2Nzcz9pbmxpbmUnO1xuXG4vKiogTnVtYmVyIG9mIGhvdXJzIG9uIHRoZSBjbG9jayBmYWNlLiAqL1xuY29uc3QgVE9UQUxfSE9VUlNfT05fQ0xPQ0tfRkFDRSA9IDEyO1xuXG4vKiogTnVtYmVyIG9mIG1pbnV0ZXMgb24gdGhlIGNsb2NrIGZhY2UuICovXG5jb25zdCBUT1RBTF9NSU5VVEVTX09OX0NMT0NLX0ZBQ0UgPSA2MDtcblxuLyoqIE51bWJlciBvZiBzZWNvbmRzIG9uIHRoZSBjbG9jayBmYWNlLiAqL1xuY29uc3QgVE9UQUxfU0VDT05EU19PTl9DTE9DS19GQUNFID0gNjA7XG5cbi8qKiBUaW1lb3V0IGZvciB0aGUgY2xvY2sgc3RhcnQuICovXG5jb25zdCBJTklUSUFMX1RJTUVPVVRfRFVSQVRJT04gPSA1MDtcblxuLyoqIEFuZ2xlIGluIGEgc2luZ2xlIHJvdGF0aW9uLiAqL1xuY29uc3QgRlVMTF9BTkdMRSA9IDM2MDtcblxuLyoqIEFuZ2xlIGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlIGhvdXJzOiAzNjAvMTIsIG1lYW5zIGEgZnVsbCByb3RhdGlvbiAvIG51bWJlciBvZiBob3VycyBpbiBhIHJvdGF0aW9uLiAqL1xuY29uc3QgSE9VUlNfQU5HTEUgPSAzMDtcblxuLyoqIEFuZ2xlIGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlIG1pbnV0ZXM6IDM2MC82MCwgbWVhbnMgYSBmdWxsIHJvdGF0aW9uIC8gbnVtYmVyIG9mIG1pbnV0ZXMgaW4gb25lIGhvdXIuICovXG5jb25zdCBNSU5VVEVTX0FOR0xFID0gNjtcblxuLyoqIEFuZ2xlIGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlIHNlY29uZHMgZm9yIFNCQiBjbG9jayBjdXN0b20gYmVoYXZpb3IuICovXG5jb25zdCBTQkJfU0VDT05EU19BTkdMRSA9IDM2MCAvIDU4LjU7XG5cbi8qKiBOdW1iZXIgb2Ygc2Vjb25kcyBpbiBhIG1pbnV0ZS4gKi9cbmNvbnN0IFNFQ09ORFNfSU5fQV9NSU5VVEUgPSA2MDtcblxuLyoqIE51bWJlciBvZiBzZWNvbmRzIGluIGFuIGhvdXIuICovXG5jb25zdCBTRUNPTkRTX0lOX0FOX0hPVVIgPSAzNjAwO1xuXG4vKiogQXMgYSBmYWxsYmFjayBtZWFzdXJlLCByZXNldCB0aGUgY2xvY2sgZXZlcnkgaGFsZiBhbiBob3VyICovXG5jb25zdCBSRVNFVF9JTlRFUlZBTCA9IFNFQ09ORFNfSU5fQU5fSE9VUiAvIDI7XG5cbmNvbnN0IEFERF9FVkVOVF9MSVNURU5FUl9PUFRJT05TOiBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyA9IHtcbiAgb25jZTogdHJ1ZSxcbiAgcGFzc2l2ZTogdHJ1ZSxcbn07XG5cbi8qKlxuICogSXQgZGlzcGxheXMgYW4gYW5hbG9nIGNsb2NrIHdpdGggdGhlIGNsYXNzaWMgU0JCIGZhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBTYmJDbG9ja0VsZW1lbnQgZXh0ZW5kcyBTYmJFbGVtZW50IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBlbGVtZW50TmFtZTogc3RyaW5nID0gJ3NiYi1jbG9jayc7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IFtib3hTaXppbmdTdHlsZXMsIHVuc2FmZUNTUyhzdHlsZSldO1xuXG4gIC8qKlxuICAgKiBEZWZpbmUgYSBzcGVjaWZpYyB0aW1lIHdoaWNoIHRoZSBjbG9jayBzaG91bGQgc2hvdyBzdGF0aWNhbGx5LlxuICAgKiBAcGFyYW0gdmFsdWUgSEg6TU06c3NcbiAgICovXG4gIEBwcm9wZXJ0eSgpIHB1YmxpYyBhY2Nlc3NvciBub3c6IFNiYlRpbWUgfCBudWxsID0gbnVsbDtcblxuICAvKiogV2hldGhlciB0aGUgY2xvY2sgaXMgdGlja2luZyBvciBub3QgKi9cbiAgcHJpdmF0ZSBfc3RhdGU6ICdydW5uaW5nJyB8ICdwYXVzZWQnID0gJ3BhdXNlZCc7XG5cbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgaG91ciBoYW5kLiAqL1xuICBwcml2YXRlIF9jbG9ja0hhbmRIb3VycyE6IEhUTUxFbGVtZW50O1xuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIG1pbnV0ZSBoYW5kLiAqL1xuICBwcml2YXRlIF9jbG9ja0hhbmRNaW51dGVzITogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgc2Vjb25kIGhhbmQuICovXG4gIHByaXZhdGUgX2Nsb2NrSGFuZFNlY29uZHMhOiBIVE1MRWxlbWVudDtcblxuICAvKiogSG91cnMgdmFsdWUgZm9yIHRoZSBjdXJyZW50IGRhdGUuICovXG4gIHByaXZhdGUgX2hvdXJzITogbnVtYmVyO1xuXG4gIC8qKiBNaW51dGVzIHZhbHVlIGZvciB0aGUgY3VycmVudCBkYXRlLiAqL1xuICBwcml2YXRlIF9taW51dGVzITogbnVtYmVyO1xuXG4gIC8qKiBTZWNvbmRzIHZhbHVlIGZvciB0aGUgY3VycmVudCBkYXRlLiAqL1xuICBwcml2YXRlIF9zZWNvbmRzITogbnVtYmVyO1xuXG4gIC8qKiBNb3ZlIHRoZSBtaW51dGVzIGhhbmQgZXZlcnkgbWludXRlLiAqL1xuICBwcml2YXRlIF9oYW5kTW92ZW1lbnQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD47XG5cbiAgcHJpdmF0ZSBfcmVzZXRJbnRlcnZhbElkPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+O1xuXG4gIC8qKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgaG91cnMgaGFuZC4gKi9cbiAgcHJpdmF0ZSBfbW92ZUhvdXJzSGFuZEZuID0gKCk6IHZvaWQgPT4gdGhpcy5fbW92ZUhvdXJzSGFuZCgpO1xuXG4gIC8qKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgbWludXRlcyBoYW5kLiAqL1xuICBwcml2YXRlIF9tb3ZlTWludXRlc0hhbmRGbiA9ICgpOiB2b2lkID0+IHRoaXMuX21vdmVNaW51dGVzSGFuZCgpO1xuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgdGhpcy5fcmVzZXRJbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy5fcmVzZXRDbG9jaygpLCBSRVNFVF9JTlRFUlZBTCAqIDEwMDApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoIWlzU2VydmVyICYmIGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbm93JykpIHtcbiAgICAgIHRoaXMuX3N0YXJ0T3JDb25maWd1cmVDbG9jaygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmICghaXNTZXJ2ZXIpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCB0aGlzLl9oYW5kbGVQYWdlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuICAgICAgdGhpcy5fc3RhcnRPckNvbmZpZ3VyZUNsb2NrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5fcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICBjbGVhckludGVydmFsKHRoaXMuX3Jlc2V0SW50ZXJ2YWxJZCk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVQYWdlVmlzaWJpbGl0eUNoYW5nZSA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAodGhpcy5ub3cpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAnaGlkZGVuJykge1xuICAgICAgYXdhaXQgdGhpcy5fc3RvcENsb2NrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuX3N0YXJ0Q2xvY2soKTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBhc3luYyBfc3RhcnRPckNvbmZpZ3VyZUNsb2NrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLm5vdykge1xuICAgICAgYXdhaXQgdGhpcy5fc3RvcENsb2NrKCk7XG4gICAgICB0aGlzLl9yZXNldFNlY29uZHNIYW5kQW5pbWF0aW9uKCk7XG4gICAgICB0aGlzLl9zZXRIYW5kc1N0YXJ0aW5nUG9zaXRpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5fc3RhcnRDbG9jaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTdGFydHMgdGhlIGNsb2NrIGJ5IGRlZmluaW5nIHRoZSBoYW5kcyBzdGFydGluZyBwb3NpdGlvbiB0aGVuIHN0YXJ0aW5nIHRoZSBhbmltYXRpb25zLiAqL1xuICBwcml2YXRlIGFzeW5jIF9zdGFydENsb2NrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2Nsb2NrSGFuZEhvdXJzPy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2FuaW1hdGlvbmVuZCcsXG4gICAgICB0aGlzLl9tb3ZlSG91cnNIYW5kRm4sXG4gICAgICBBRERfRVZFTlRfTElTVEVORVJfT1BUSU9OUyxcbiAgICApO1xuICAgIHRoaXMuX2Nsb2NrSGFuZFNlY29uZHM/LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAnYW5pbWF0aW9uZW5kJyxcbiAgICAgIHRoaXMuX21vdmVNaW51dGVzSGFuZEZuLFxuICAgICAgQUREX0VWRU5UX0xJU1RFTkVSX09QVElPTlMsXG4gICAgKTtcblxuICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PlxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3NldEhhbmRzU3RhcnRpbmdQb3NpdGlvbigpO1xuXG4gICAgICAgIHRoaXMuc3R5bGU/LnNldFByb3BlcnR5KCctLXNiYi1jbG9jay1hbmltYXRpb24tcGxheS1zdGF0ZScsICdydW5uaW5nJyk7XG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ3J1bm5pbmcnO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9LCBJTklUSUFMX1RJTUVPVVRfRFVSQVRJT04pLFxuICAgICk7XG4gIH1cblxuICAvKiogU3RvcHMgdGhlIGNsb2NrIGJ5IHJlbW92aW5nIGFsbCB0aGUgYW5pbWF0aW9ucy4gKi9cbiAgcHJpdmF0ZSBhc3luYyBfc3RvcENsb2NrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faGFuZE1vdmVtZW50KTtcblxuICAgIHRoaXMuX3JlbW92ZVNlY29uZHNBbmltYXRpb25TdHlsZXMoKTtcbiAgICB0aGlzLl9yZW1vdmVIb3Vyc0FuaW1hdGlvblN0eWxlcygpO1xuXG4gICAgdGhpcy5fY2xvY2tIYW5kSG91cnM/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FuaW1hdGlvbmVuZCcsIHRoaXMuX21vdmVIb3Vyc0hhbmRGbik7XG4gICAgdGhpcy5fY2xvY2tIYW5kU2Vjb25kcz8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYW5pbWF0aW9uZW5kJywgdGhpcy5fbW92ZU1pbnV0ZXNIYW5kRm4pO1xuXG4gICAgdGhpcy5fY2xvY2tIYW5kTWludXRlcz8uY2xhc3NMaXN0LmFkZCgnc2JiLWNsb2NrX19oYW5kLW1pbnV0ZXMtLW5vLXRyYW5zaXRpb24nKTtcblxuICAgIHRoaXMuc3R5bGU/LnNldFByb3BlcnR5KCctLXNiYi1jbG9jay1hbmltYXRpb24tcGxheS1zdGF0ZScsICdwYXVzZWQnKTtcbiAgICB0aGlzLl9zdGF0ZSA9ICdwYXVzZWQnO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzIGEgZmFsbGJhY2sgbWVhc3VyZSB0byBwcmV2ZW50IGRlLXN5bmMsIHJlc2V0IHRoZSBjbG9jayB0byB0aGUgc3lzdGVtIHRpbWUuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIF9yZXNldENsb2NrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGF0ZSAhPT0gJ3J1bm5pbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuX3N0b3BDbG9jaygpO1xuICAgIGF3YWl0IHRoaXMuX3N0YXJ0Q2xvY2soKTtcbiAgfVxuXG4gIC8qKiBTZXQgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGZvciB0aGUgdGhyZWUgaGFuZHMgb24gdGhlIGNsb2NrIGZhY2UuICovXG4gIHByaXZhdGUgX3NldEhhbmRzU3RhcnRpbmdQb3NpdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hc3NpZ25DdXJyZW50VGltZSgpO1xuICAgIGNvbnN0IHJlbWFpbmluZ1NlY29uZHMgPSBUT1RBTF9TRUNPTkRTX09OX0NMT0NLX0ZBQ0UgLSB0aGlzLl9zZWNvbmRzO1xuICAgIGNvbnN0IHJlbWFpbmluZ01pbnV0ZXMgPSBUT1RBTF9NSU5VVEVTX09OX0NMT0NLX0ZBQ0UgLSB0aGlzLl9taW51dGVzO1xuICAgIGNvbnN0IHJlbWFpbmluZ0hvdXJzID0gVE9UQUxfSE9VUlNfT05fQ0xPQ0tfRkFDRSAtIHRoaXMuX2hvdXJzO1xuXG4gICAgbGV0IGhvdXJzQW5pbWF0aW9uRHVyYXRpb24gPSAwO1xuICAgIGxldCBoYXNSZW1haW5pbmdNaW51dGVzT3JTZWNvbmRzID0gMDtcblxuICAgIGlmIChyZW1haW5pbmdTZWNvbmRzID4gMCkge1xuICAgICAgaG91cnNBbmltYXRpb25EdXJhdGlvbiArPSByZW1haW5pbmdTZWNvbmRzO1xuICAgICAgaGFzUmVtYWluaW5nTWludXRlc09yU2Vjb25kcyA9IDE7XG4gICAgfVxuXG4gICAgaWYgKHJlbWFpbmluZ01pbnV0ZXMgPiAwKSB7XG4gICAgICBob3Vyc0FuaW1hdGlvbkR1cmF0aW9uICs9XG4gICAgICAgIChyZW1haW5pbmdNaW51dGVzIC0gaGFzUmVtYWluaW5nTWludXRlc09yU2Vjb25kcykgKiBTRUNPTkRTX0lOX0FfTUlOVVRFO1xuICAgICAgaGFzUmVtYWluaW5nTWludXRlc09yU2Vjb25kcyA9IDE7XG4gICAgfVxuXG4gICAgaWYgKHJlbWFpbmluZ0hvdXJzID4gMCkge1xuICAgICAgaG91cnNBbmltYXRpb25EdXJhdGlvbiArPVxuICAgICAgICAocmVtYWluaW5nSG91cnMgLSBoYXNSZW1haW5pbmdNaW51dGVzT3JTZWNvbmRzKSAqIFNFQ09ORFNfSU5fQU5fSE9VUjtcbiAgICB9XG5cbiAgICB0aGlzLnN0eWxlPy5zZXRQcm9wZXJ0eShcbiAgICAgICctLXNiYi1jbG9jay1ob3Vycy1hbmltYXRpb24tc3RhcnQtYW5nbGUnLFxuICAgICAgYCR7TWF0aC5jZWlsKHRoaXMuX2hvdXJzICogSE9VUlNfQU5HTEUgKyB0aGlzLl9taW51dGVzIC8gMil9ZGVnYCxcbiAgICApO1xuICAgIHRoaXMuc3R5bGU/LnNldFByb3BlcnR5KCctLXNiYi1jbG9jay1ob3Vycy1hbmltYXRpb24tZHVyYXRpb24nLCBgJHtob3Vyc0FuaW1hdGlvbkR1cmF0aW9ufXNgKTtcbiAgICB0aGlzLnN0eWxlPy5zZXRQcm9wZXJ0eShcbiAgICAgICctLXNiYi1jbG9jay1zZWNvbmRzLWFuaW1hdGlvbi1zdGFydC1hbmdsZScsXG4gICAgICBgJHtNYXRoLmNlaWwodGhpcy5fc2Vjb25kcyAqIFNCQl9TRUNPTkRTX0FOR0xFKX1kZWdgLFxuICAgICk7XG4gICAgdGhpcy5zdHlsZT8uc2V0UHJvcGVydHkoJy0tc2JiLWNsb2NrLXNlY29uZHMtYW5pbWF0aW9uLWR1cmF0aW9uJywgYCR7cmVtYWluaW5nU2Vjb25kc31zYCk7XG5cbiAgICB0aGlzLl9zZXRNaW51dGVzSGFuZCgpO1xuXG4gICAgdGhpcy5fY2xvY2tIYW5kU2Vjb25kcz8uY2xhc3NMaXN0LmFkZCgnc2JiLWNsb2NrX19oYW5kLXNlY29uZHMtLWluaXRpYWwtbWludXRlJyk7XG4gICAgdGhpcy5fY2xvY2tIYW5kSG91cnM/LmNsYXNzTGlzdC5hZGQoJ3NiYi1jbG9ja19faGFuZC1ob3Vycy0taW5pdGlhbC1ob3VyJyk7XG5cbiAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKCdpbml0aWFsaXplZCcpO1xuICB9XG5cbiAgLyoqIEdpdmVuIHRoZSBjdXJyZW50IGRhdGUsIGNhbGN1bGF0ZXMgdGhlIGhoL21tL3NzIHZhbHVlcyBhbmQgdGhlIGhoL21tL3NzIGxlZnQgdG8gdGhlIG5leHQgbWlkbmlnaHQuICovXG4gIHByaXZhdGUgX2Fzc2lnbkN1cnJlbnRUaW1lKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzLm5vdyA/IG51bGwgOiBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IFtob3VycywgbWludXRlcywgc2Vjb25kc10gPSBkYXRlXG4gICAgICA/IFtkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKV1cbiAgICAgIDogdGhpcy5ub3chLnNwbGl0KCc6JykubWFwKChwKSA9PiArcCk7XG5cbiAgICB0aGlzLl9ob3VycyA9IGhvdXJzICUgMTI7XG4gICAgdGhpcy5fbWludXRlcyA9IG1pbnV0ZXM7XG4gICAgdGhpcy5fc2Vjb25kcyA9IHNlY29uZHM7XG4gIH1cblxuICAvKiogU2V0IHRoZSBzdGFydGluZyBwb3NpdGlvbiBmb3IgdGhlIG1pbnV0ZXMgaGFuZC4gKi9cbiAgcHJpdmF0ZSBfc2V0TWludXRlc0hhbmQoKTogdm9pZCB7XG4gICAgdGhpcy5fY2xvY2tIYW5kTWludXRlcz8uc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAndHJhbnNmb3JtJyxcbiAgICAgIGByb3RhdGVaKCR7TWF0aC5jZWlsKHRoaXMuX21pbnV0ZXMgKiBNSU5VVEVTX0FOR0xFKX1kZWcpYCxcbiAgICApO1xuICB9XG5cbiAgLyoqIE1vdmUgdGhlIGhvdXJzIGhhbmQgdG8gdGhlIG5leHQgdmFsdWUuICovXG4gIHByaXZhdGUgX21vdmVIb3Vyc0hhbmQoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVtb3ZlSG91cnNBbmltYXRpb25TdHlsZXMoKTtcblxuICAgIGxldCBob3Vyc0FuZ2xlID0gTWF0aC5jZWlsKHRoaXMuX2hvdXJzICogSE9VUlNfQU5HTEUgKyB0aGlzLl9taW51dGVzIC8gMik7XG5cbiAgICBpZiAoaG91cnNBbmdsZSA+PSBGVUxMX0FOR0xFKSB7XG4gICAgICBob3Vyc0FuZ2xlIC09IEZVTExfQU5HTEU7XG4gICAgfVxuXG4gICAgdGhpcy5fY2xvY2tIYW5kSG91cnM/LnN0eWxlLnNldFByb3BlcnR5KCd0cmFuc2Zvcm0nLCBgcm90YXRlWigke2hvdXJzQW5nbGV9ZGVnKWApO1xuICB9XG5cbiAgLyoqIE1vdmUgdGhlIG1pbnV0ZXMgaGFuZCB0byB0aGUgbmV4dCB2YWx1ZS4gKi9cbiAgcHJpdmF0ZSBfbW92ZU1pbnV0ZXNIYW5kKCk6IHZvaWQge1xuICAgIHRoaXMuX2Nsb2NrSGFuZFNlY29uZHM/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FuaW1hdGlvbmVuZCcsIHRoaXMuX21vdmVNaW51dGVzSGFuZEZuKTtcblxuICAgIHRoaXMuX3JlbW92ZVNlY29uZHNBbmltYXRpb25TdHlsZXMoKTtcblxuICAgIHRoaXMuX2FkZE1pbnV0ZXNBbmRTZXRIYW5kcygpO1xuXG4gICAgdGhpcy5faGFuZE1vdmVtZW50ID0gc2V0SW50ZXJ2YWwoXG4gICAgICAoKSA9PiB0aGlzLl9hZGRNaW51dGVzQW5kU2V0SGFuZHMoKSxcbiAgICAgIFRPVEFMX1NFQ09ORFNfT05fQ0xPQ0tfRkFDRSAqIDEwMDAsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FkZE1pbnV0ZXNBbmRTZXRIYW5kcygpOiB2b2lkIHtcbiAgICB0aGlzLl9taW51dGVzKys7XG4gICAgdGhpcy5fc2V0TWludXRlc0hhbmQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmluZyBhbmltYXRpb24gYnkgb3ZlcnJpZGluZyB3aXRoIGVtcHR5IHN0cmluZyxcbiAgICogdGhlbiB0cmlnZ2VyaW5nIGEgcmVmbG93IGFuZCByZSBhZGQgb3JpZ2luYWwgYW5pbWF0aW9uIGJ5IHJlbW92aW5nIG92ZXJyaWRlLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfcmVzZXRTZWNvbmRzSGFuZEFuaW1hdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2Nsb2NrSGFuZFNlY29uZHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fY2xvY2tIYW5kU2Vjb25kcy5zdHlsZS5hbmltYXRpb24gPSAnJztcbiAgICAvLyBIYWNrIHRvIHRyaWdnZXIgcmVmbG93XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgICB0aGlzLl9jbG9ja0hhbmRTZWNvbmRzLm9mZnNldEhlaWdodDtcbiAgICB0aGlzLl9jbG9ja0hhbmRTZWNvbmRzLnN0eWxlLnJlbW92ZVByb3BlcnR5KCdhbmltYXRpb24nKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbW92ZUV2ZW50TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGRvY3VtZW50Py5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgdGhpcy5faGFuZGxlUGFnZVZpc2liaWxpdHlDaGFuZ2UpO1xuICAgIHRoaXMuX2Nsb2NrSGFuZEhvdXJzPy5yZW1vdmVFdmVudExpc3RlbmVyKCdhbmltYXRpb25lbmQnLCB0aGlzLl9tb3ZlSG91cnNIYW5kRm4pO1xuICAgIHRoaXMuX2Nsb2NrSGFuZFNlY29uZHM/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FuaW1hdGlvbmVuZCcsIHRoaXMuX21vdmVNaW51dGVzSGFuZEZuKTtcbiAgICBjbGVhckludGVydmFsKHRoaXMuX2hhbmRNb3ZlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIF9yZW1vdmVIb3Vyc0FuaW1hdGlvblN0eWxlcygpOiB2b2lkIHtcbiAgICB0aGlzLl9jbG9ja0hhbmRIb3Vycz8uY2xhc3NMaXN0LnJlbW92ZSgnc2JiLWNsb2NrX19oYW5kLWhvdXJzLS1pbml0aWFsLWhvdXInKTtcbiAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KCctLXNiYi1jbG9jay1ob3Vycy1hbmltYXRpb24tc3RhcnQtYW5nbGUnKTtcbiAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KCctLXNiYi1jbG9jay1ob3Vycy1hbmltYXRpb24tZHVyYXRpb24nKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbW92ZVNlY29uZHNBbmltYXRpb25TdHlsZXMoKTogdm9pZCB7XG4gICAgdGhpcy5fY2xvY2tIYW5kU2Vjb25kcz8uY2xhc3NMaXN0LnJlbW92ZSgnc2JiLWNsb2NrX19oYW5kLXNlY29uZHMtLWluaXRpYWwtbWludXRlJyk7XG4gICAgdGhpcy5fY2xvY2tIYW5kTWludXRlcz8uY2xhc3NMaXN0LnJlbW92ZSgnc2JiLWNsb2NrX19oYW5kLW1pbnV0ZXMtLW5vLXRyYW5zaXRpb24nKTtcbiAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KCctLXNiYi1jbG9jay1zZWNvbmRzLWFuaW1hdGlvbi1zdGFydC1hbmdsZScpO1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoJy0tc2JiLWNsb2NrLXNlY29uZHMtYW5pbWF0aW9uLWR1cmF0aW9uJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWNsb2NrX19mYWNlXCIgLmlubmVySFRNTD0ke2Nsb2NrRmFjZVNWR30+PC9zcGFuPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJzYmItY2xvY2tfX2hhbmQtaG91cnNcIlxuICAgICAgICAuaW5uZXJIVE1MPSR7Y2xvY2tIYW5kbGVIb3Vyc1NWR31cbiAgICAgICAgJHtyZWYoKGU/OiBFbGVtZW50KTogdm9pZCA9PiB7XG4gICAgICAgICAgdGhpcy5fY2xvY2tIYW5kSG91cnMgPSBlIGFzIEhUTUxTcGFuRWxlbWVudDtcbiAgICAgICAgfSl9XG4gICAgICA+PC9zcGFuPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJzYmItY2xvY2tfX2hhbmQtbWludXRlcyBzYmItY2xvY2tfX2hhbmQtbWludXRlcy0tbm8tdHJhbnNpdGlvblwiXG4gICAgICAgIC5pbm5lckhUTUw9JHtjbG9ja0hhbmRsZU1pbnV0ZXNTVkd9XG4gICAgICAgICR7cmVmKChlbD86IEVsZW1lbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLl9jbG9ja0hhbmRNaW51dGVzID0gZWwgYXMgSFRNTFNwYW5FbGVtZW50O1xuICAgICAgICB9KX1cbiAgICAgID48L3NwYW4+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cInNiYi1jbG9ja19faGFuZC1zZWNvbmRzXCJcbiAgICAgICAgLmlubmVySFRNTD0ke2Nsb2NrSGFuZGxlU2Vjb25kc1NWR31cbiAgICAgICAgJHtyZWYoKGVsPzogRWxlbWVudCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHRoaXMuX2Nsb2NrSGFuZFNlY29uZHMgPSBlbCBhcyBIVE1MU3BhbkVsZW1lbnQ7XG4gICAgICAgIH0pfVxuICAgICAgPjwvc3Bhbj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItY2xvY2snOiBTYmJDbG9ja0VsZW1lbnQ7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUEseUJBQWU7OztBQ0FmLElBQUEsMEJBQWU7OztBQ0FmLElBQUEsNEJBQWU7OztBQ0FmLElBQUEsNEJBQWU7Ozs7Ozs7QUVzQmYsSUFBTSw0QkFBNEI7O0FBR2xDLElBQU0sOEJBQThCOztBQUdwQyxJQUFNLDhCQUE4Qjs7QUFHcEMsSUFBTSwyQkFBMkI7O0FBR2pDLElBQU0sYUFBYTs7QUFHbkIsSUFBTSxjQUFjOztBQUdwQixJQUFNLGdCQUFnQjs7QUFHdEIsSUFBTSxvQkFBb0IsTUFBTTs7QUFHaEMsSUFBTSxzQkFBc0I7O0FBRzVCLElBQU0scUJBQXFCOztBQUczQixJQUFNLGlCQUFpQixxQkFBcUI7QUFFNUMsSUFBTSw2QkFBc0Q7Q0FDMUQsTUFBTTtDQUNOLFNBQVM7Q0FDVjs7OztJQUtZLHlCQUFlO21CQUFTOzs7O2NBQXhCLHdCQUF3QixZQUFVOzs7QUFRakIsU0FBQSx1QkFBQSxrQkFBQSxNQUFBLG1CQUFzQixLQUFJOztBQUc5QyxRQUFBLFVBQU0sa0JBQUEsTUFBQSx1QkFBQSxFQUF5Qjs7QUEwQi9CLFFBQUEseUJBQStCLEtBQUssZ0JBQWdCOztBQUdwRCxRQUFBLDJCQUFpQyxLQUFLLGtCQUFrQjtBQStCeEQsUUFBQSw4QkFBOEIsWUFBMEI7QUFDOUQsUUFBSSxLQUFLLElBQ1A7QUFHRixRQUFJLFNBQVMsb0JBQW9CLFNBQy9CLE9BQU0sS0FBSyxZQUFZO1FBRXZCLE9BQU0sS0FBSyxhQUFhOzs7OztzQkF2RTNCLFVBQVUsQ0FBQTtBQUFDLGdCQUFBLE1BQUEsTUFBQSxpQkFBQTtJQUFBLE1BQUE7SUFBQSxNQUFBO0lBQUEsUUFBQTtJQUFBLFNBQUE7SUFBQSxRQUFBO0tBQUEsTUFBQSxRQUFBLFNBQUE7S0FBQSxNQUFBLFFBQUEsSUFBZ0I7S0FB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
290
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvY2suY29tcG9uZW50LUNWUHY0bUNwLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jbG9jay9jbG9jay5zY3NzP2lubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jbG9jay9jbG9jay5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnLi4vY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuOmhvc3Qge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhc3BlY3QtcmF0aW86IDEgLyAxO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBjb250YWluOiBjb250ZW50O1xufVxuXG4uc2JiLWNsb2NrX19mYWNlLFxuLnNiYi1jbG9ja19faGFuZC1ob3Vycyxcbi5zYmItY2xvY2tfX2hhbmQtbWludXRlcyxcbi5zYmItY2xvY2tfX2hhbmQtc2Vjb25kcyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgaW5zZXQ6IDA7XG4gIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7XG4gIHRyYW5zZm9ybTogcm90YXRlWigwZGVnKTtcbiAgdHJhbnNmb3JtLXN0eWxlOiBwcmVzZXJ2ZS0zZDtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuXG4uc2JiLWNsb2NrX19oYW5kLWhvdXJzLFxuLnNiYi1jbG9ja19faGFuZC1taW51dGVzLFxuLnNiYi1jbG9ja19fZmFjZSB7XG4gIGZpbGw6IHZhcigtLXNiYi1jbG9jay1mYWNlLWNvbG9yKTtcbn1cblxuLnNiYi1jbG9ja19faGFuZC1taW51dGVzIHtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLXNiYi1kaXNhYmxlLWFuaW1hdGlvbi1kdXJhdGlvbiwgMC4ycylcbiAgICBjdWJpYy1iZXppZXIoMC40LCAyLjA4LCAwLjU1LCAwLjQ0KTtcblxuICBAc3VwcG9ydHMgbm90IChhc3BlY3QtcmF0aW86IDEgLyAxKSB7XG4gICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDQ5LjYyNSU7XG4gIH1cbn1cblxuLnNiYi1jbG9ja19faGFuZC1ob3VycyB7XG4gIGFuaW1hdGlvbi1uYW1lOiByb3RhdGU7XG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogNDMyMDBzO1xuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcbiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuICBhbmltYXRpb24tcGxheS1zdGF0ZTogdmFyKC0tc2JiLWNsb2NrLWFuaW1hdGlvbi1wbGF5LXN0YXRlLCAncGF1c2VkJyk7XG59XG5cbi5zYmItY2xvY2tfX2hhbmQtaG91cnMtLWluaXRpYWwtaG91ciB7XG4gIGFuaW1hdGlvbi1uYW1lOiBoYW5kLWhvdXJzLWFuaW1hdGlvbi1pbml0aWFsLWhvdXI7XG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tc2JiLWNsb2NrLWhvdXJzLWFuaW1hdGlvbi1kdXJhdGlvbiwgMHMpO1xuICBhbmltYXRpb24tcGxheS1zdGF0ZTogdmFyKC0tc2JiLWNsb2NrLWFuaW1hdGlvbi1wbGF5LXN0YXRlLCAncGF1c2VkJyk7XG4gIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7XG59XG5cbi5zYmItY2xvY2tfX2hhbmQtbWludXRlcy0tbm8tdHJhbnNpdGlvbiB7XG4gIHRyYW5zaXRpb246IG5vbmU7XG59XG5cbi5zYmItY2xvY2tfX2hhbmQtc2Vjb25kcyB7XG4gIGFuaW1hdGlvbi1uYW1lOiBoYW5kLXNlY29uZHMtYW5pbWF0aW9uO1xuICBhbmltYXRpb24tZHVyYXRpb246IDYwcztcbiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuICBhbmltYXRpb24tcGxheS1zdGF0ZTogdmFyKC0tc2JiLWNsb2NrLWFuaW1hdGlvbi1wbGF5LXN0YXRlLCAncGF1c2VkJyk7XG4gIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xuICBmaWxsOiB2YXIoLS1zYmItY2xvY2stc2Vjb25kcy1oYW5kLWNvbG9yKTtcbn1cblxuLnNiYi1jbG9ja19faGFuZC1zZWNvbmRzLS1pbml0aWFsLW1pbnV0ZSB7XG4gIGFuaW1hdGlvbi1uYW1lOiBoYW5kLXNlY29uZHMtYW5pbWF0aW9uLWluaXRpYWwtbWludXRlO1xuICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXNiYi1jbG9jay1zZWNvbmRzLWFuaW1hdGlvbi1kdXJhdGlvbiwgMHMpO1xuICBhbmltYXRpb24tcGxheS1zdGF0ZTogdmFyKC0tc2JiLWNsb2NrLWFuaW1hdGlvbi1wbGF5LXN0YXRlLCAncGF1c2VkJyk7XG4gIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7XG59XG5cbjppcyguc2JiLWNsb2NrX19oYW5kLWhvdXJzLCAuc2JiLWNsb2NrX19oYW5kLW1pbnV0ZXMsIC5zYmItY2xvY2tfX2hhbmQtc2Vjb25kcykge1xuICA6aG9zdCg6bm90KDpzdGF0ZShpbml0aWFsaXplZCkpKSAmIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgcm90YXRlIHtcbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGVaKDM2MGRlZyk7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBoYW5kLWhvdXJzLWFuaW1hdGlvbi1pbml0aWFsLWhvdXIge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGVaKHZhcigtLXNiYi1jbG9jay1ob3Vycy1hbmltYXRpb24tc3RhcnQtYW5nbGUsIDBkZWcpKTtcbiAgfVxuXG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlWigzNjBkZWcpO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgaGFuZC1zZWNvbmRzLWFuaW1hdGlvbiB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZVooMGRlZyk7XG4gIH1cblxuICA5Ny41JSxcbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGVaKDM2MGRlZyk7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBoYW5kLXNlY29uZHMtYW5pbWF0aW9uLWluaXRpYWwtbWludXRlIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlWih2YXIoLS1zYmItY2xvY2stc2Vjb25kcy1hbmltYXRpb24tc3RhcnQtYW5nbGUsIDBkZWcpKTtcbiAgfVxuXG4gIDk3LjUlLFxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZVooMzYwZGVnKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaHRtbCxcbiAgaXNTZXJ2ZXIsXG4gIHVuc2FmZUNTUyxcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcmVmIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVmLmpzJztcblxuaW1wb3J0IHsgU2JiRWxlbWVudCB9IGZyb20gJy4uL2NvcmUvYmFzZS1lbGVtZW50cy50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYlRpbWUgfSBmcm9tICcuLi9jb3JlL2ludGVyZmFjZXMudHMnO1xuaW1wb3J0IHsgYm94U2l6aW5nU3R5bGVzIH0gZnJvbSAnLi4vY29yZS9zdHlsZXMudHMnO1xuXG5pbXBvcnQgY2xvY2tGYWNlU1ZHIGZyb20gJy4vYXNzZXRzL3NiYl9jbG9ja19mYWNlLnN2Zz9yYXcnO1xuaW1wb3J0IGNsb2NrSGFuZGxlSG91cnNTVkcgZnJvbSAnLi9hc3NldHMvc2JiX2Nsb2NrX2hvdXJzLnN2Zz9yYXcnO1xuaW1wb3J0IGNsb2NrSGFuZGxlTWludXRlc1NWRyBmcm9tICcuL2Fzc2V0cy9zYmJfY2xvY2tfbWludXRlcy5zdmc/cmF3JztcbmltcG9ydCBjbG9ja0hhbmRsZVNlY29uZHNTVkcgZnJvbSAnLi9hc3NldHMvc2JiX2Nsb2NrX3NlY29uZHMuc3ZnP3Jhdyc7XG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9jbG9jay5zY3NzP2lubGluZSc7XG5cbi8qKiBOdW1iZXIgb2YgaG91cnMgb24gdGhlIGNsb2NrIGZhY2UuICovXG5jb25zdCBUT1RBTF9IT1VSU19PTl9DTE9DS19GQUNFID0gMTI7XG5cbi8qKiBOdW1iZXIgb2YgbWludXRlcyBvbiB0aGUgY2xvY2sgZmFjZS4gKi9cbmNvbnN0IFRPVEFMX01JTlVURVNfT05fQ0xPQ0tfRkFDRSA9IDYwO1xuXG4vKiogTnVtYmVyIG9mIHNlY29uZHMgb24gdGhlIGNsb2NrIGZhY2UuICovXG5jb25zdCBUT1RBTF9TRUNPTkRTX09OX0NMT0NLX0ZBQ0UgPSA2MDtcblxuLyoqIFRpbWVvdXQgZm9yIHRoZSBjbG9jayBzdGFydC4gKi9cbmNvbnN0IElOSVRJQUxfVElNRU9VVF9EVVJBVElPTiA9IDUwO1xuXG4vKiogQW5nbGUgaW4gYSBzaW5nbGUgcm90YXRpb24uICovXG5jb25zdCBGVUxMX0FOR0xFID0gMzYwO1xuXG4vKiogQW5nbGUgYmV0d2VlbiB0d28gY29uc2VjdXRpdmUgaG91cnM6IDM2MC8xMiwgbWVhbnMgYSBmdWxsIHJvdGF0aW9uIC8gbnVtYmVyIG9mIGhvdXJzIGluIGEgcm90YXRpb24uICovXG5jb25zdCBIT1VSU19BTkdMRSA9IDMwO1xuXG4vKiogQW5nbGUgYmV0d2VlbiB0d28gY29uc2VjdXRpdmUgbWludXRlczogMzYwLzYwLCBtZWFucyBhIGZ1bGwgcm90YXRpb24gLyBudW1iZXIgb2YgbWludXRlcyBpbiBvbmUgaG91ci4gKi9cbmNvbnN0IE1JTlVURVNfQU5HTEUgPSA2O1xuXG4vKiogQW5nbGUgYmV0d2VlbiB0d28gY29uc2VjdXRpdmUgc2Vjb25kcyBmb3IgU0JCIGNsb2NrIGN1c3RvbSBiZWhhdmlvci4gKi9cbmNvbnN0IFNCQl9TRUNPTkRTX0FOR0xFID0gMzYwIC8gNTguNTtcblxuLyoqIE51bWJlciBvZiBzZWNvbmRzIGluIGEgbWludXRlLiAqL1xuY29uc3QgU0VDT05EU19JTl9BX01JTlVURSA9IDYwO1xuXG4vKiogTnVtYmVyIG9mIHNlY29uZHMgaW4gYW4gaG91ci4gKi9cbmNvbnN0IFNFQ09ORFNfSU5fQU5fSE9VUiA9IDM2MDA7XG5cbi8qKiBBcyBhIGZhbGxiYWNrIG1lYXN1cmUsIHJlc2V0IHRoZSBjbG9jayBldmVyeSBoYWxmIGFuIGhvdXIgKi9cbmNvbnN0IFJFU0VUX0lOVEVSVkFMID0gU0VDT05EU19JTl9BTl9IT1VSIC8gMjtcblxuY29uc3QgQUREX0VWRU5UX0xJU1RFTkVSX09QVElPTlM6IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zID0ge1xuICBvbmNlOiB0cnVlLFxuICBwYXNzaXZlOiB0cnVlLFxufTtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhbiBhbmFsb2cgY2xvY2sgd2l0aCB0aGUgY2xhc3NpYyBTQkIgZmFjZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNiYkNsb2NrRWxlbWVudCBleHRlbmRzIFNiYkVsZW1lbnQge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IGVsZW1lbnROYW1lOiBzdHJpbmcgPSAnc2JiLWNsb2NrJztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gW2JveFNpemluZ1N0eWxlcywgdW5zYWZlQ1NTKHN0eWxlKV07XG5cbiAgLyoqXG4gICAqIERlZmluZSBhIHNwZWNpZmljIHRpbWUgd2hpY2ggdGhlIGNsb2NrIHNob3VsZCBzaG93IHN0YXRpY2FsbHkuXG4gICAqIEBwYXJhbSB2YWx1ZSBISDpNTTpzc1xuICAgKi9cbiAgQHByb3BlcnR5KCkgcHVibGljIGFjY2Vzc29yIG5vdzogU2JiVGltZSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBjbG9jayBpcyB0aWNraW5nIG9yIG5vdCAqL1xuICBwcml2YXRlIF9zdGF0ZTogJ3J1bm5pbmcnIHwgJ3BhdXNlZCcgPSAncGF1c2VkJztcblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBob3VyIGhhbmQuICovXG4gIHByaXZhdGUgX2Nsb2NrSGFuZEhvdXJzITogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgbWludXRlIGhhbmQuICovXG4gIHByaXZhdGUgX2Nsb2NrSGFuZE1pbnV0ZXMhOiBIVE1MRWxlbWVudDtcblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBzZWNvbmQgaGFuZC4gKi9cbiAgcHJpdmF0ZSBfY2xvY2tIYW5kU2Vjb25kcyE6IEhUTUxFbGVtZW50O1xuXG4gIC8qKiBIb3VycyB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgZGF0ZS4gKi9cbiAgcHJpdmF0ZSBfaG91cnMhOiBudW1iZXI7XG5cbiAgLyoqIE1pbnV0ZXMgdmFsdWUgZm9yIHRoZSBjdXJyZW50IGRhdGUuICovXG4gIHByaXZhdGUgX21pbnV0ZXMhOiBudW1iZXI7XG5cbiAgLyoqIFNlY29uZHMgdmFsdWUgZm9yIHRoZSBjdXJyZW50IGRhdGUuICovXG4gIHByaXZhdGUgX3NlY29uZHMhOiBudW1iZXI7XG5cbiAgLyoqIE1vdmUgdGhlIG1pbnV0ZXMgaGFuZCBldmVyeSBtaW51dGUuICovXG4gIHByaXZhdGUgX2hhbmRNb3ZlbWVudD86IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPjtcblxuICBwcml2YXRlIF9yZXNldEludGVydmFsSWQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD47XG5cbiAgLyoqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBob3VycyBoYW5kLiAqL1xuICBwcml2YXRlIF9tb3ZlSG91cnNIYW5kRm4gPSAoKTogdm9pZCA9PiB0aGlzLl9tb3ZlSG91cnNIYW5kKCk7XG5cbiAgLyoqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBtaW51dGVzIGhhbmQuICovXG4gIHByaXZhdGUgX21vdmVNaW51dGVzSGFuZEZuID0gKCk6IHZvaWQgPT4gdGhpcy5fbW92ZU1pbnV0ZXNIYW5kKCk7XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICB0aGlzLl9yZXNldEludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLl9yZXNldENsb2NrKCksIFJFU0VUX0lOVEVSVkFMICogMTAwMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmICghaXNTZXJ2ZXIgJiYgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdub3cnKSkge1xuICAgICAgdGhpcy5fc3RhcnRPckNvbmZpZ3VyZUNsb2NrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKCFpc1NlcnZlcikge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIHRoaXMuX2hhbmRsZVBhZ2VWaXNpYmlsaXR5Q2hhbmdlLCBmYWxzZSk7XG4gICAgICB0aGlzLl9zdGFydE9yQ29uZmlndXJlQ2xvY2soKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl9yZW1vdmVFdmVudExpc3RlbmVycygpO1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fcmVzZXRJbnRlcnZhbElkKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVBhZ2VWaXNpYmlsaXR5Q2hhbmdlID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmICh0aGlzLm5vdykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICdoaWRkZW4nKSB7XG4gICAgICBhd2FpdCB0aGlzLl9zdG9wQ2xvY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5fc3RhcnRDbG9jaygpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGFzeW5jIF9zdGFydE9yQ29uZmlndXJlQ2xvY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMubm93KSB7XG4gICAgICBhd2FpdCB0aGlzLl9zdG9wQ2xvY2soKTtcbiAgICAgIHRoaXMuX3Jlc2V0U2Vjb25kc0hhbmRBbmltYXRpb24oKTtcbiAgICAgIHRoaXMuX3NldEhhbmRzU3RhcnRpbmdQb3NpdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLl9zdGFydENsb2NrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFN0YXJ0cyB0aGUgY2xvY2sgYnkgZGVmaW5pbmcgdGhlIGhhbmRzIHN0YXJ0aW5nIHBvc2l0aW9uIHRoZW4gc3RhcnRpbmcgdGhlIGFuaW1hdGlvbnMuICovXG4gIHByaXZhdGUgYXN5bmMgX3N0YXJ0Q2xvY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fY2xvY2tIYW5kSG91cnM/LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAnYW5pbWF0aW9uZW5kJyxcbiAgICAgIHRoaXMuX21vdmVIb3Vyc0hhbmRGbixcbiAgICAgIEFERF9FVkVOVF9MSVNURU5FUl9PUFRJT05TLFxuICAgICk7XG4gICAgdGhpcy5fY2xvY2tIYW5kU2Vjb25kcz8uYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdhbmltYXRpb25lbmQnLFxuICAgICAgdGhpcy5fbW92ZU1pbnV0ZXNIYW5kRm4sXG4gICAgICBBRERfRVZFTlRfTElTVEVORVJfT1BUSU9OUyxcbiAgICApO1xuXG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fc2V0SGFuZHNTdGFydGluZ1Bvc2l0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5zdHlsZT8uc2V0UHJvcGVydHkoJy0tc2JiLWNsb2NrLWFuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3J1bm5pbmcnKTtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSAncnVubmluZyc7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0sIElOSVRJQUxfVElNRU9VVF9EVVJBVElPTiksXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBTdG9wcyB0aGUgY2xvY2sgYnkgcmVtb3ZpbmcgYWxsIHRoZSBhbmltYXRpb25zLiAqL1xuICBwcml2YXRlIGFzeW5jIF9zdG9wQ2xvY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9oYW5kTW92ZW1lbnQpO1xuXG4gICAgdGhpcy5fcmVtb3ZlU2Vjb25kc0FuaW1hdGlvblN0eWxlcygpO1xuICAgIHRoaXMuX3JlbW92ZUhvdXJzQW5pbWF0aW9uU3R5bGVzKCk7XG5cbiAgICB0aGlzLl9jbG9ja0hhbmRIb3Vycz8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYW5pbWF0aW9uZW5kJywgdGhpcy5fbW92ZUhvdXJzSGFuZEZuKTtcbiAgICB0aGlzLl9jbG9ja0hhbmRTZWNvbmRzPy5yZW1vdmVFdmVudExpc3RlbmVyKCdhbmltYXRpb25lbmQnLCB0aGlzLl9tb3ZlTWludXRlc0hhbmRGbik7XG5cbiAgICB0aGlzLl9jbG9ja0hhbmRNaW51dGVzPy5jbGFzc0xpc3QuYWRkKCdzYmItY2xvY2tfX2hhbmQtbWludXRlcy0tbm8tdHJhbnNpdGlvbicpO1xuXG4gICAgdGhpcy5zdHlsZT8uc2V0UHJvcGVydHkoJy0tc2JiLWNsb2NrLWFuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3BhdXNlZCcpO1xuICAgIHRoaXMuX3N0YXRlID0gJ3BhdXNlZCc7XG4gIH1cblxuICAvKipcbiAgICogQXMgYSBmYWxsYmFjayBtZWFzdXJlIHRvIHByZXZlbnQgZGUtc3luYywgcmVzZXQgdGhlIGNsb2NrIHRvIHRoZSBzeXN0ZW0gdGltZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgX3Jlc2V0Q2xvY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlICE9PSAncnVubmluZycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5fc3RvcENsb2NrKCk7XG4gICAgYXdhaXQgdGhpcy5fc3RhcnRDbG9jaygpO1xuICB9XG5cbiAgLyoqIFNldCB0aGUgc3RhcnRpbmcgcG9zaXRpb24gZm9yIHRoZSB0aHJlZSBoYW5kcyBvbiB0aGUgY2xvY2sgZmFjZS4gKi9cbiAgcHJpdmF0ZSBfc2V0SGFuZHNTdGFydGluZ1Bvc2l0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2Fzc2lnbkN1cnJlbnRUaW1lKCk7XG4gICAgY29uc3QgcmVtYWluaW5nU2Vjb25kcyA9IFRPVEFMX1NFQ09ORFNfT05fQ0xPQ0tfRkFDRSAtIHRoaXMuX3NlY29uZHM7XG4gICAgY29uc3QgcmVtYWluaW5nTWludXRlcyA9IFRPVEFMX01JTlVURVNfT05fQ0xPQ0tfRkFDRSAtIHRoaXMuX21pbnV0ZXM7XG4gICAgY29uc3QgcmVtYWluaW5nSG91cnMgPSBUT1RBTF9IT1VSU19PTl9DTE9DS19GQUNFIC0gdGhpcy5faG91cnM7XG5cbiAgICBsZXQgaG91cnNBbmltYXRpb25EdXJhdGlvbiA9IDA7XG4gICAgbGV0IGhhc1JlbWFpbmluZ01pbnV0ZXNPclNlY29uZHMgPSAwO1xuXG4gICAgaWYgKHJlbWFpbmluZ1NlY29uZHMgPiAwKSB7XG4gICAgICBob3Vyc0FuaW1hdGlvbkR1cmF0aW9uICs9IHJlbWFpbmluZ1NlY29uZHM7XG4gICAgICBoYXNSZW1haW5pbmdNaW51dGVzT3JTZWNvbmRzID0gMTtcbiAgICB9XG5cbiAgICBpZiAocmVtYWluaW5nTWludXRlcyA+IDApIHtcbiAgICAgIGhvdXJzQW5pbWF0aW9uRHVyYXRpb24gKz1cbiAgICAgICAgKHJlbWFpbmluZ01pbnV0ZXMgLSBoYXNSZW1haW5pbmdNaW51dGVzT3JTZWNvbmRzKSAqIFNFQ09ORFNfSU5fQV9NSU5VVEU7XG4gICAgICBoYXNSZW1haW5pbmdNaW51dGVzT3JTZWNvbmRzID0gMTtcbiAgICB9XG5cbiAgICBpZiAocmVtYWluaW5nSG91cnMgPiAwKSB7XG4gICAgICBob3Vyc0FuaW1hdGlvbkR1cmF0aW9uICs9XG4gICAgICAgIChyZW1haW5pbmdIb3VycyAtIGhhc1JlbWFpbmluZ01pbnV0ZXNPclNlY29uZHMpICogU0VDT05EU19JTl9BTl9IT1VSO1xuICAgIH1cblxuICAgIHRoaXMuc3R5bGU/LnNldFByb3BlcnR5KFxuICAgICAgJy0tc2JiLWNsb2NrLWhvdXJzLWFuaW1hdGlvbi1zdGFydC1hbmdsZScsXG4gICAgICBgJHtNYXRoLmNlaWwodGhpcy5faG91cnMgKiBIT1VSU19BTkdMRSArIHRoaXMuX21pbnV0ZXMgLyAyKX1kZWdgLFxuICAgICk7XG4gICAgdGhpcy5zdHlsZT8uc2V0UHJvcGVydHkoJy0tc2JiLWNsb2NrLWhvdXJzLWFuaW1hdGlvbi1kdXJhdGlvbicsIGAke2hvdXJzQW5pbWF0aW9uRHVyYXRpb259c2ApO1xuICAgIHRoaXMuc3R5bGU/LnNldFByb3BlcnR5KFxuICAgICAgJy0tc2JiLWNsb2NrLXNlY29uZHMtYW5pbWF0aW9uLXN0YXJ0LWFuZ2xlJyxcbiAgICAgIGAke01hdGguY2VpbCh0aGlzLl9zZWNvbmRzICogU0JCX1NFQ09ORFNfQU5HTEUpfWRlZ2AsXG4gICAgKTtcbiAgICB0aGlzLnN0eWxlPy5zZXRQcm9wZXJ0eSgnLS1zYmItY2xvY2stc2Vjb25kcy1hbmltYXRpb24tZHVyYXRpb24nLCBgJHtyZW1haW5pbmdTZWNvbmRzfXNgKTtcblxuICAgIHRoaXMuX3NldE1pbnV0ZXNIYW5kKCk7XG5cbiAgICB0aGlzLl9jbG9ja0hhbmRTZWNvbmRzPy5jbGFzc0xpc3QuYWRkKCdzYmItY2xvY2tfX2hhbmQtc2Vjb25kcy0taW5pdGlhbC1taW51dGUnKTtcbiAgICB0aGlzLl9jbG9ja0hhbmRIb3Vycz8uY2xhc3NMaXN0LmFkZCgnc2JiLWNsb2NrX19oYW5kLWhvdXJzLS1pbml0aWFsLWhvdXInKTtcblxuICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5hZGQoJ2luaXRpYWxpemVkJyk7XG4gIH1cblxuICAvKiogR2l2ZW4gdGhlIGN1cnJlbnQgZGF0ZSwgY2FsY3VsYXRlcyB0aGUgaGgvbW0vc3MgdmFsdWVzIGFuZCB0aGUgaGgvbW0vc3MgbGVmdCB0byB0aGUgbmV4dCBtaWRuaWdodC4gKi9cbiAgcHJpdmF0ZSBfYXNzaWduQ3VycmVudFRpbWUoKTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMubm93ID8gbnVsbCA6IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgW2hvdXJzLCBtaW51dGVzLCBzZWNvbmRzXSA9IGRhdGVcbiAgICAgID8gW2RhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpXVxuICAgICAgOiB0aGlzLm5vdyEuc3BsaXQoJzonKS5tYXAoKHApID0+ICtwKTtcblxuICAgIHRoaXMuX2hvdXJzID0gaG91cnMgJSAxMjtcbiAgICB0aGlzLl9taW51dGVzID0gbWludXRlcztcbiAgICB0aGlzLl9zZWNvbmRzID0gc2Vjb25kcztcbiAgfVxuXG4gIC8qKiBTZXQgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGZvciB0aGUgbWludXRlcyBoYW5kLiAqL1xuICBwcml2YXRlIF9zZXRNaW51dGVzSGFuZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9jbG9ja0hhbmRNaW51dGVzPy5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICd0cmFuc2Zvcm0nLFxuICAgICAgYHJvdGF0ZVooJHtNYXRoLmNlaWwodGhpcy5fbWludXRlcyAqIE1JTlVURVNfQU5HTEUpfWRlZylgLFxuICAgICk7XG4gIH1cblxuICAvKiogTW92ZSB0aGUgaG91cnMgaGFuZCB0byB0aGUgbmV4dCB2YWx1ZS4gKi9cbiAgcHJpdmF0ZSBfbW92ZUhvdXJzSGFuZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZW1vdmVIb3Vyc0FuaW1hdGlvblN0eWxlcygpO1xuXG4gICAgbGV0IGhvdXJzQW5nbGUgPSBNYXRoLmNlaWwodGhpcy5faG91cnMgKiBIT1VSU19BTkdMRSArIHRoaXMuX21pbnV0ZXMgLyAyKTtcblxuICAgIGlmIChob3Vyc0FuZ2xlID49IEZVTExfQU5HTEUpIHtcbiAgICAgIGhvdXJzQW5nbGUgLT0gRlVMTF9BTkdMRTtcbiAgICB9XG5cbiAgICB0aGlzLl9jbG9ja0hhbmRIb3Vycz8uc3R5bGUuc2V0UHJvcGVydHkoJ3RyYW5zZm9ybScsIGByb3RhdGVaKCR7aG91cnNBbmdsZX1kZWcpYCk7XG4gIH1cblxuICAvKiogTW92ZSB0aGUgbWludXRlcyBoYW5kIHRvIHRoZSBuZXh0IHZhbHVlLiAqL1xuICBwcml2YXRlIF9tb3ZlTWludXRlc0hhbmQoKTogdm9pZCB7XG4gICAgdGhpcy5fY2xvY2tIYW5kU2Vjb25kcz8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYW5pbWF0aW9uZW5kJywgdGhpcy5fbW92ZU1pbnV0ZXNIYW5kRm4pO1xuXG4gICAgdGhpcy5fcmVtb3ZlU2Vjb25kc0FuaW1hdGlvblN0eWxlcygpO1xuXG4gICAgdGhpcy5fYWRkTWludXRlc0FuZFNldEhhbmRzKCk7XG5cbiAgICB0aGlzLl9oYW5kTW92ZW1lbnQgPSBzZXRJbnRlcnZhbChcbiAgICAgICgpID0+IHRoaXMuX2FkZE1pbnV0ZXNBbmRTZXRIYW5kcygpLFxuICAgICAgVE9UQUxfU0VDT05EU19PTl9DTE9DS19GQUNFICogMTAwMCxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWRkTWludXRlc0FuZFNldEhhbmRzKCk6IHZvaWQge1xuICAgIHRoaXMuX21pbnV0ZXMrKztcbiAgICB0aGlzLl9zZXRNaW51dGVzSGFuZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92aW5nIGFuaW1hdGlvbiBieSBvdmVycmlkaW5nIHdpdGggZW1wdHkgc3RyaW5nLFxuICAgKiB0aGVuIHRyaWdnZXJpbmcgYSByZWZsb3cgYW5kIHJlIGFkZCBvcmlnaW5hbCBhbmltYXRpb24gYnkgcmVtb3Zpbmcgb3ZlcnJpZGUuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9yZXNldFNlY29uZHNIYW5kQW5pbWF0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fY2xvY2tIYW5kU2Vjb25kcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9jbG9ja0hhbmRTZWNvbmRzLnN0eWxlLmFuaW1hdGlvbiA9ICcnO1xuICAgIC8vIEhhY2sgdG8gdHJpZ2dlciByZWZsb3dcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC1leHByZXNzaW9uc1xuICAgIHRoaXMuX2Nsb2NrSGFuZFNlY29uZHMub2Zmc2V0SGVpZ2h0O1xuICAgIHRoaXMuX2Nsb2NrSGFuZFNlY29uZHMuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2FuaW1hdGlvbicpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgZG9jdW1lbnQ/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCB0aGlzLl9oYW5kbGVQYWdlVmlzaWJpbGl0eUNoYW5nZSk7XG4gICAgdGhpcy5fY2xvY2tIYW5kSG91cnM/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FuaW1hdGlvbmVuZCcsIHRoaXMuX21vdmVIb3Vyc0hhbmRGbik7XG4gICAgdGhpcy5fY2xvY2tIYW5kU2Vjb25kcz8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYW5pbWF0aW9uZW5kJywgdGhpcy5fbW92ZU1pbnV0ZXNIYW5kRm4pO1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faGFuZE1vdmVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbW92ZUhvdXJzQW5pbWF0aW9uU3R5bGVzKCk6IHZvaWQge1xuICAgIHRoaXMuX2Nsb2NrSGFuZEhvdXJzPy5jbGFzc0xpc3QucmVtb3ZlKCdzYmItY2xvY2tfX2hhbmQtaG91cnMtLWluaXRpYWwtaG91cicpO1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoJy0tc2JiLWNsb2NrLWhvdXJzLWFuaW1hdGlvbi1zdGFydC1hbmdsZScpO1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoJy0tc2JiLWNsb2NrLWhvdXJzLWFuaW1hdGlvbi1kdXJhdGlvbicpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVtb3ZlU2Vjb25kc0FuaW1hdGlvblN0eWxlcygpOiB2b2lkIHtcbiAgICB0aGlzLl9jbG9ja0hhbmRTZWNvbmRzPy5jbGFzc0xpc3QucmVtb3ZlKCdzYmItY2xvY2tfX2hhbmQtc2Vjb25kcy0taW5pdGlhbC1taW51dGUnKTtcbiAgICB0aGlzLl9jbG9ja0hhbmRNaW51dGVzPy5jbGFzc0xpc3QucmVtb3ZlKCdzYmItY2xvY2tfX2hhbmQtbWludXRlcy0tbm8tdHJhbnNpdGlvbicpO1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoJy0tc2JiLWNsb2NrLXNlY29uZHMtYW5pbWF0aW9uLXN0YXJ0LWFuZ2xlJyk7XG4gICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnLS1zYmItY2xvY2stc2Vjb25kcy1hbmltYXRpb24tZHVyYXRpb24nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNwYW4gY2xhc3M9XCJzYmItY2xvY2tfX2ZhY2VcIiAuaW5uZXJIVE1MPSR7Y2xvY2tGYWNlU1ZHfT48L3NwYW4+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cInNiYi1jbG9ja19faGFuZC1ob3Vyc1wiXG4gICAgICAgIC5pbm5lckhUTUw9JHtjbG9ja0hhbmRsZUhvdXJzU1ZHfVxuICAgICAgICAke3JlZigoZT86IEVsZW1lbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLl9jbG9ja0hhbmRIb3VycyA9IGUgYXMgSFRNTFNwYW5FbGVtZW50O1xuICAgICAgICB9KX1cbiAgICAgID48L3NwYW4+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cInNiYi1jbG9ja19faGFuZC1taW51dGVzIHNiYi1jbG9ja19faGFuZC1taW51dGVzLS1uby10cmFuc2l0aW9uXCJcbiAgICAgICAgLmlubmVySFRNTD0ke2Nsb2NrSGFuZGxlTWludXRlc1NWR31cbiAgICAgICAgJHtyZWYoKGVsPzogRWxlbWVudCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHRoaXMuX2Nsb2NrSGFuZE1pbnV0ZXMgPSBlbCBhcyBIVE1MU3BhbkVsZW1lbnQ7XG4gICAgICAgIH0pfVxuICAgICAgPjwvc3Bhbj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwic2JiLWNsb2NrX19oYW5kLXNlY29uZHNcIlxuICAgICAgICAuaW5uZXJIVE1MPSR7Y2xvY2tIYW5kbGVTZWNvbmRzU1ZHfVxuICAgICAgICAke3JlZigoZWw/OiBFbGVtZW50KTogdm9pZCA9PiB7XG4gICAgICAgICAgdGhpcy5fY2xvY2tIYW5kU2Vjb25kcyA9IGVsIGFzIEhUTUxTcGFuRWxlbWVudDtcbiAgICAgICAgfSl9XG4gICAgICA+PC9zcGFuPlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1jbG9jayc6IFNiYkNsb2NrRWxlbWVudDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3NCQSxJQUFNLDRCQUE0Qjs7QUFHbEMsSUFBTSw4QkFBOEI7O0FBR3BDLElBQU0sOEJBQThCOztBQUdwQyxJQUFNLDJCQUEyQjs7QUFHakMsSUFBTSxhQUFhOztBQUduQixJQUFNLGNBQWM7O0FBR3BC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