@sbb-esta/lyne-elements 1.16.0 → 2.0.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 (677) hide show
  1. package/accordion/accordion.d.ts +4 -1
  2. package/accordion/accordion.d.ts.map +1 -1
  3. package/accordion.js +31 -22
  4. package/action-group/action-group.d.ts +6 -4
  5. package/action-group/action-group.d.ts.map +1 -1
  6. package/action-group.js +20 -17
  7. package/alert/alert/alert.d.ts +7 -23
  8. package/alert/alert/alert.d.ts.map +1 -1
  9. package/alert/alert-group/alert-group.d.ts +0 -4
  10. package/alert/alert-group/alert-group.d.ts.map +1 -1
  11. package/alert/alert-group.js +46 -47
  12. package/alert/alert.js +74 -132
  13. package/animation.css +4 -8
  14. package/autocomplete/autocomplete-base-element.d.ts +7 -6
  15. package/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  16. package/autocomplete/autocomplete.d.ts +0 -1
  17. package/autocomplete/autocomplete.d.ts.map +1 -1
  18. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts +0 -1
  19. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts.map +1 -1
  20. package/autocomplete-grid/autocomplete-grid-button.js +11 -11
  21. package/autocomplete-grid/autocomplete-grid.js +0 -3
  22. package/autocomplete.js +68 -67
  23. package/button/accent-button/accent-button.d.ts +19 -0
  24. package/button/accent-button/accent-button.d.ts.map +1 -0
  25. package/button/accent-button-link/accent-button-link.d.ts +19 -0
  26. package/button/accent-button-link/accent-button-link.d.ts.map +1 -0
  27. package/button/accent-button-link.d.ts +2 -0
  28. package/button/accent-button-link.d.ts.map +1 -0
  29. package/button/accent-button-link.js +17 -0
  30. package/button/accent-button-static/accent-button-static.d.ts +19 -0
  31. package/button/accent-button-static/accent-button-static.d.ts.map +1 -0
  32. package/button/accent-button-static.d.ts +2 -0
  33. package/button/accent-button-static.d.ts.map +1 -0
  34. package/button/accent-button-static.js +17 -0
  35. package/button/accent-button.d.ts +2 -0
  36. package/button/accent-button.d.ts.map +1 -0
  37. package/button/accent-button.js +17 -0
  38. package/button/common/button-common.d.ts.map +1 -1
  39. package/button/common.d.ts.map +1 -1
  40. package/button/common.js +20 -16
  41. package/button/mini-button/mini-button.d.ts +4 -3
  42. package/button/mini-button/mini-button.d.ts.map +1 -1
  43. package/button/mini-button-group/mini-button-group.d.ts +4 -1
  44. package/button/mini-button-group/mini-button-group.d.ts.map +1 -1
  45. package/button/mini-button-group.js +12 -8
  46. package/button/mini-button.d.ts +0 -1
  47. package/button/mini-button.d.ts.map +1 -1
  48. package/button/mini-button.js +10 -20
  49. package/button.d.ts +3 -3
  50. package/button.d.ts.map +1 -1
  51. package/button.js +3 -3
  52. package/calendar.js +25 -25
  53. package/card/card/card.d.ts +4 -1
  54. package/card/card/card.d.ts.map +1 -1
  55. package/card/card.js +10 -6
  56. package/checkbox/checkbox/checkbox.d.ts +4 -6
  57. package/checkbox/checkbox/checkbox.d.ts.map +1 -1
  58. package/checkbox/checkbox-group/checkbox-group.d.ts +4 -1
  59. package/checkbox/checkbox-group/checkbox-group.d.ts.map +1 -1
  60. package/checkbox/checkbox-group.js +14 -10
  61. package/checkbox/checkbox-panel/checkbox-panel.d.ts +4 -4
  62. package/checkbox/checkbox-panel/checkbox-panel.d.ts.map +1 -1
  63. package/checkbox/checkbox-panel.js +21 -18
  64. package/checkbox/checkbox.js +28 -26
  65. package/{chip/chip.d.ts → chip-label/chip-label.d.ts} +4 -4
  66. package/chip-label/chip-label.d.ts.map +1 -0
  67. package/chip-label.d.ts +2 -0
  68. package/chip-label.d.ts.map +1 -0
  69. package/chip-label.js +54 -0
  70. package/clock.js +1 -1
  71. package/container/container.js +21 -21
  72. package/container/sticky-bar/sticky-bar.d.ts +1 -0
  73. package/container/sticky-bar/sticky-bar.d.ts.map +1 -1
  74. package/container/sticky-bar.js +20 -12
  75. package/core/base-elements/button-base-element.d.ts +27 -18
  76. package/core/base-elements/button-base-element.d.ts.map +1 -1
  77. package/core/base-elements/open-close-base-element.d.ts.map +1 -1
  78. package/core/base-elements.js +135 -138
  79. package/core/datetime/date-adapter.d.ts +2 -1
  80. package/core/datetime/date-adapter.d.ts.map +1 -1
  81. package/core/datetime/native-date-adapter.d.ts +1 -1
  82. package/core/datetime/native-date-adapter.d.ts.map +1 -1
  83. package/core/datetime.js +29 -28
  84. package/core/dom/animation.d.ts +2 -0
  85. package/core/dom/animation.d.ts.map +1 -0
  86. package/core/dom/lean-context.d.ts +5 -0
  87. package/core/dom/lean-context.d.ts.map +1 -0
  88. package/core/dom.d.ts +2 -2
  89. package/core/dom.d.ts.map +1 -1
  90. package/core/dom.js +50 -55
  91. package/core/eventing/form-element-handlers.d.ts +0 -7
  92. package/core/eventing/form-element-handlers.d.ts.map +1 -1
  93. package/core/eventing.d.ts +0 -1
  94. package/core/eventing.d.ts.map +1 -1
  95. package/core/eventing.js +28 -49
  96. package/core/i18n/i18n.d.ts +4 -2
  97. package/core/i18n/i18n.d.ts.map +1 -1
  98. package/core/i18n.js +147 -140
  99. package/core/mixins/disabled-mixin.d.ts +2 -7
  100. package/core/mixins/disabled-mixin.d.ts.map +1 -1
  101. package/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -1
  102. package/core/mixins/form-associated-mixin.d.ts +1 -1
  103. package/core/mixins/form-associated-mixin.d.ts.map +1 -1
  104. package/core/mixins/form-associated-radio-button-mixin.d.ts +35 -0
  105. package/core/mixins/form-associated-radio-button-mixin.d.ts.map +1 -0
  106. package/core/mixins.d.ts +1 -0
  107. package/core/mixins.d.ts.map +1 -1
  108. package/core/mixins.js +347 -220
  109. package/core/styles/_index.scss +1 -0
  110. package/core/styles/core.scss +148 -0
  111. package/core/styles/image.scss +66 -0
  112. package/core/styles/mixins/animation.scss +2 -4
  113. package/core/styles/mixins/buttons.scss +7 -4
  114. package/core/styles/mixins/card.scss +1 -1
  115. package/core/styles/mixins/chip.scss +35 -35
  116. package/core/styles/mixins/image.scss +34 -0
  117. package/core/styles/mixins/overlay.scss +1 -1
  118. package/core/styles/mixins/panel.scss +1 -1
  119. package/core/styles/standard-theme.scss +1 -0
  120. package/core/styles/table.scss +4 -0
  121. package/core/testing/event-spy.d.ts +2 -1
  122. package/core/testing/event-spy.d.ts.map +1 -1
  123. package/core/testing.d.ts +0 -1
  124. package/core/testing.d.ts.map +1 -1
  125. package/core/testing.js +48 -57
  126. package/core.css +112 -0
  127. package/custom-elements.json +25950 -21681
  128. package/datepicker/common/datepicker-button.d.ts +3 -5
  129. package/datepicker/common/datepicker-button.d.ts.map +1 -1
  130. package/datepicker/common.js +30 -29
  131. package/datepicker/datepicker/datepicker.d.ts +25 -72
  132. package/datepicker/datepicker/datepicker.d.ts.map +1 -1
  133. package/datepicker/datepicker-next-day/datepicker-next-day.d.ts +1 -3
  134. package/datepicker/datepicker-next-day/datepicker-next-day.d.ts.map +1 -1
  135. package/datepicker/datepicker-next-day.js +10 -12
  136. package/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts +1 -3
  137. package/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts.map +1 -1
  138. package/datepicker/datepicker-previous-day.js +11 -13
  139. package/datepicker/datepicker.js +129 -157
  140. package/development/accordion/accordion.d.ts +4 -1
  141. package/development/accordion/accordion.d.ts.map +1 -1
  142. package/development/accordion.js +16 -5
  143. package/development/action-group/action-group.d.ts +6 -4
  144. package/development/action-group/action-group.d.ts.map +1 -1
  145. package/development/action-group.js +10 -7
  146. package/development/alert/alert/alert.d.ts +7 -23
  147. package/development/alert/alert/alert.d.ts.map +1 -1
  148. package/development/alert/alert-group/alert-group.d.ts +0 -4
  149. package/development/alert/alert-group/alert-group.d.ts.map +1 -1
  150. package/development/alert/alert-group.js +10 -12
  151. package/development/alert/alert.js +38 -122
  152. package/development/autocomplete/autocomplete-base-element.d.ts +7 -6
  153. package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  154. package/development/autocomplete/autocomplete.d.ts +0 -1
  155. package/development/autocomplete/autocomplete.d.ts.map +1 -1
  156. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts +0 -1
  157. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts.map +1 -1
  158. package/development/autocomplete-grid/autocomplete-grid-button.js +6 -6
  159. package/development/autocomplete-grid/autocomplete-grid.js +1 -7
  160. package/development/autocomplete.js +23 -19
  161. package/development/button/accent-button/accent-button.d.ts +19 -0
  162. package/development/button/accent-button/accent-button.d.ts.map +1 -0
  163. package/development/button/accent-button-link/accent-button-link.d.ts +19 -0
  164. package/development/button/accent-button-link/accent-button-link.d.ts.map +1 -0
  165. package/development/button/accent-button-link.d.ts +2 -0
  166. package/development/button/accent-button-link.d.ts.map +1 -0
  167. package/development/button/accent-button-link.js +25 -0
  168. package/development/button/accent-button-static/accent-button-static.d.ts +19 -0
  169. package/development/button/accent-button-static/accent-button-static.d.ts.map +1 -0
  170. package/development/button/accent-button-static.d.ts +2 -0
  171. package/development/button/accent-button-static.d.ts.map +1 -0
  172. package/development/button/accent-button-static.js +25 -0
  173. package/development/button/accent-button.d.ts +2 -0
  174. package/development/button/accent-button.d.ts.map +1 -0
  175. package/development/button/accent-button.js +25 -0
  176. package/development/button/common/button-common.d.ts.map +1 -1
  177. package/development/button/common.d.ts.map +1 -1
  178. package/development/button/common.js +20 -16
  179. package/development/button/mini-button/mini-button.d.ts +4 -3
  180. package/development/button/mini-button/mini-button.d.ts.map +1 -1
  181. package/development/button/mini-button-group/mini-button-group.d.ts +4 -1
  182. package/development/button/mini-button-group/mini-button-group.d.ts.map +1 -1
  183. package/development/button/mini-button-group.js +7 -3
  184. package/development/button/mini-button.d.ts +0 -1
  185. package/development/button/mini-button.d.ts.map +1 -1
  186. package/development/button/mini-button.js +14 -32
  187. package/development/button.d.ts +3 -3
  188. package/development/button.d.ts.map +1 -1
  189. package/development/button.js +3 -3
  190. package/development/calendar.js +1 -1
  191. package/development/card/card/card.d.ts +4 -1
  192. package/development/card/card/card.d.ts.map +1 -1
  193. package/development/card/card.js +8 -4
  194. package/development/checkbox/checkbox/checkbox.d.ts +4 -6
  195. package/development/checkbox/checkbox/checkbox.d.ts.map +1 -1
  196. package/development/checkbox/checkbox-group/checkbox-group.d.ts +4 -1
  197. package/development/checkbox/checkbox-group/checkbox-group.d.ts.map +1 -1
  198. package/development/checkbox/checkbox-group.js +7 -3
  199. package/development/checkbox/checkbox-panel/checkbox-panel.d.ts +4 -4
  200. package/development/checkbox/checkbox-panel/checkbox-panel.d.ts.map +1 -1
  201. package/development/checkbox/checkbox-panel.js +7 -4
  202. package/development/checkbox/checkbox.js +8 -6
  203. package/development/{chip/chip.d.ts → chip-label/chip-label.d.ts} +4 -4
  204. package/development/chip-label/chip-label.d.ts.map +1 -0
  205. package/development/chip-label.d.ts +2 -0
  206. package/development/chip-label.d.ts.map +1 -0
  207. package/development/{chip.js → chip-label.js} +26 -26
  208. package/development/clock.js +1 -1
  209. package/development/container/container.js +8 -12
  210. package/development/container/sticky-bar/sticky-bar.d.ts +1 -0
  211. package/development/container/sticky-bar/sticky-bar.d.ts.map +1 -1
  212. package/development/container/sticky-bar.js +18 -10
  213. package/development/core/base-elements/button-base-element.d.ts +27 -18
  214. package/development/core/base-elements/button-base-element.d.ts.map +1 -1
  215. package/development/core/base-elements/open-close-base-element.d.ts.map +1 -1
  216. package/development/core/base-elements.js +66 -74
  217. package/development/core/datetime/date-adapter.d.ts +2 -1
  218. package/development/core/datetime/date-adapter.d.ts.map +1 -1
  219. package/development/core/datetime/native-date-adapter.d.ts +1 -1
  220. package/development/core/datetime/native-date-adapter.d.ts.map +1 -1
  221. package/development/core/datetime.js +4 -3
  222. package/development/core/dom/animation.d.ts +2 -0
  223. package/development/core/dom/animation.d.ts.map +1 -0
  224. package/development/core/dom/lean-context.d.ts +5 -0
  225. package/development/core/dom/lean-context.d.ts.map +1 -0
  226. package/development/core/dom.d.ts +2 -2
  227. package/development/core/dom.d.ts.map +1 -1
  228. package/development/core/dom.js +13 -21
  229. package/development/core/eventing/form-element-handlers.d.ts +0 -7
  230. package/development/core/eventing/form-element-handlers.d.ts.map +1 -1
  231. package/development/core/eventing.d.ts +0 -1
  232. package/development/core/eventing.d.ts.map +1 -1
  233. package/development/core/eventing.js +1 -25
  234. package/development/core/i18n/i18n.d.ts +4 -2
  235. package/development/core/i18n/i18n.d.ts.map +1 -1
  236. package/development/core/i18n.js +27 -23
  237. package/development/core/mixins/disabled-mixin.d.ts +2 -7
  238. package/development/core/mixins/disabled-mixin.d.ts.map +1 -1
  239. package/development/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -1
  240. package/development/core/mixins/form-associated-mixin.d.ts +1 -1
  241. package/development/core/mixins/form-associated-mixin.d.ts.map +1 -1
  242. package/development/core/mixins/form-associated-radio-button-mixin.d.ts +35 -0
  243. package/development/core/mixins/form-associated-radio-button-mixin.d.ts.map +1 -0
  244. package/development/core/mixins.d.ts +1 -0
  245. package/development/core/mixins.d.ts.map +1 -1
  246. package/development/core/mixins.js +221 -30
  247. package/development/core/testing/event-spy.d.ts +2 -1
  248. package/development/core/testing/event-spy.d.ts.map +1 -1
  249. package/development/core/testing.d.ts +0 -1
  250. package/development/core/testing.d.ts.map +1 -1
  251. package/development/core/testing.js +4 -15
  252. package/development/datepicker/common/datepicker-button.d.ts +3 -5
  253. package/development/datepicker/common/datepicker-button.d.ts.map +1 -1
  254. package/development/datepicker/common.js +13 -12
  255. package/development/datepicker/datepicker/datepicker.d.ts +25 -72
  256. package/development/datepicker/datepicker/datepicker.d.ts.map +1 -1
  257. package/development/datepicker/datepicker-next-day/datepicker-next-day.d.ts +1 -3
  258. package/development/datepicker/datepicker-next-day/datepicker-next-day.d.ts.map +1 -1
  259. package/development/datepicker/datepicker-next-day.js +9 -15
  260. package/development/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts +1 -3
  261. package/development/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts.map +1 -1
  262. package/development/datepicker/datepicker-previous-day.js +9 -15
  263. package/development/datepicker/datepicker.js +74 -115
  264. package/development/dialog/dialog/dialog.d.ts +3 -0
  265. package/development/dialog/dialog/dialog.d.ts.map +1 -1
  266. package/development/dialog/dialog-title.js +2 -1
  267. package/development/dialog/dialog.js +46 -39
  268. package/development/expansion-panel/expansion-panel/expansion-panel.d.ts +7 -1
  269. package/development/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -1
  270. package/development/expansion-panel/expansion-panel-header.js +3 -3
  271. package/development/expansion-panel/expansion-panel.js +32 -17
  272. package/development/file-selector/common/file-selector-common.d.ts +23 -0
  273. package/development/file-selector/common/file-selector-common.d.ts.map +1 -0
  274. package/development/file-selector/common.d.ts +2 -0
  275. package/development/file-selector/common.d.ts.map +1 -0
  276. package/development/file-selector/common.js +382 -0
  277. package/development/file-selector/file-selector/file-selector.d.ts +24 -0
  278. package/development/file-selector/file-selector/file-selector.d.ts.map +1 -0
  279. package/development/file-selector/file-selector-dropzone/file-selector-dropzone.d.ts +33 -0
  280. package/development/file-selector/file-selector-dropzone/file-selector-dropzone.d.ts.map +1 -0
  281. package/development/file-selector/file-selector-dropzone.d.ts +2 -0
  282. package/development/file-selector/file-selector-dropzone.d.ts.map +1 -0
  283. package/development/file-selector/file-selector-dropzone.js +181 -0
  284. package/development/file-selector/file-selector.d.ts +1 -87
  285. package/development/file-selector/file-selector.d.ts.map +1 -1
  286. package/development/file-selector/file-selector.js +52 -0
  287. package/development/file-selector.d.ts +2 -0
  288. package/development/file-selector.d.ts.map +1 -1
  289. package/development/file-selector.js +4 -552
  290. package/development/flip-card/flip-card-details.js +1 -1
  291. package/development/flip-card/flip-card-summary.js +3 -11
  292. package/development/flip-card/flip-card.js +6 -6
  293. package/development/form-field/form-field/form-field.d.ts +5 -10
  294. package/development/form-field/form-field/form-field.d.ts.map +1 -1
  295. package/development/form-field/form-field-clear.js +6 -6
  296. package/development/form-field/form-field.js +32 -40
  297. package/development/header/common.js +2 -2
  298. package/development/header/header/header.d.ts +5 -3
  299. package/development/header/header/header.d.ts.map +1 -1
  300. package/development/header/header.js +15 -20
  301. package/development/image/image.d.ts +0 -30
  302. package/development/image/image.d.ts.map +1 -1
  303. package/development/image.js +62 -273
  304. package/development/journey-header/journey-header.d.ts +4 -1
  305. package/development/journey-header/journey-header.d.ts.map +1 -1
  306. package/development/journey-header.js +7 -3
  307. package/development/lead-container.js +2 -10
  308. package/development/link/common/link-common.d.ts.map +1 -1
  309. package/development/link/common.js +9 -8
  310. package/development/link-list/common/link-list-base.d.ts +1 -0
  311. package/development/link-list/common/link-list-base.d.ts.map +1 -1
  312. package/development/link-list/common.js +4 -2
  313. package/development/link-list/link-list-anchor.js +4 -4
  314. package/development/loading-indicator/loading-indicator.d.ts +1 -3
  315. package/development/loading-indicator/loading-indicator.d.ts.map +1 -1
  316. package/development/loading-indicator-circle/loading-indicator-circle.d.ts +16 -0
  317. package/development/loading-indicator-circle/loading-indicator-circle.d.ts.map +1 -0
  318. package/development/loading-indicator-circle.d.ts +2 -0
  319. package/development/loading-indicator-circle.d.ts.map +1 -0
  320. package/development/loading-indicator-circle.js +146 -0
  321. package/development/loading-indicator.js +81 -182
  322. package/development/map-container/map-container.d.ts.map +1 -1
  323. package/development/map-container.js +5 -5
  324. package/development/menu/common.js +5 -5
  325. package/development/menu/menu/menu.d.ts +3 -0
  326. package/development/menu/menu/menu.d.ts.map +1 -1
  327. package/development/menu/menu.js +39 -24
  328. package/development/navigation/common/navigation-action-common.d.ts.map +1 -1
  329. package/development/navigation/common.js +9 -5
  330. package/development/navigation/navigation/navigation.d.ts +3 -0
  331. package/development/navigation/navigation/navigation.d.ts.map +1 -1
  332. package/development/navigation/navigation-list/navigation-list.d.ts.map +1 -1
  333. package/development/navigation/navigation-list.js +3 -2
  334. package/development/navigation/navigation-marker/navigation-marker.d.ts +2 -1
  335. package/development/navigation/navigation-marker/navigation-marker.d.ts.map +1 -1
  336. package/development/navigation/navigation-marker.js +6 -4
  337. package/development/navigation/navigation-section/navigation-section.d.ts +3 -0
  338. package/development/navigation/navigation-section/navigation-section.d.ts.map +1 -1
  339. package/development/navigation/navigation-section.js +38 -22
  340. package/development/navigation/navigation.js +42 -27
  341. package/development/notification/notification.d.ts +6 -2
  342. package/development/notification/notification.d.ts.map +1 -1
  343. package/development/notification.js +27 -21
  344. package/development/option/option/option-base-element.d.ts +0 -7
  345. package/development/option/option/option-base-element.d.ts.map +1 -1
  346. package/development/option/option.js +5 -26
  347. package/development/overlay/overlay-base-element.d.ts +2 -0
  348. package/development/overlay/overlay-base-element.d.ts.map +1 -1
  349. package/development/overlay/overlay.d.ts +3 -0
  350. package/development/overlay/overlay.d.ts.map +1 -1
  351. package/development/overlay.js +43 -31
  352. package/development/paginator/common/paginator-common.d.ts.map +1 -1
  353. package/development/paginator/common.js +7 -3
  354. package/development/paginator/paginator.js +1 -1
  355. package/development/popover/popover/popover.d.ts +3 -0
  356. package/development/popover/popover/popover.d.ts.map +1 -1
  357. package/development/popover/popover-trigger.js +9 -9
  358. package/development/popover/popover.js +41 -26
  359. package/development/radio-button/common/radio-button-common.d.ts +3 -10
  360. package/development/radio-button/common/radio-button-common.d.ts.map +1 -1
  361. package/development/radio-button/common.js +44 -121
  362. package/development/radio-button/radio-button/radio-button.d.ts +9 -1
  363. package/development/radio-button/radio-button/radio-button.d.ts.map +1 -1
  364. package/development/radio-button/radio-button-group/radio-button-group.d.ts +19 -26
  365. package/development/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -1
  366. package/development/radio-button/radio-button-group.js +87 -123
  367. package/development/radio-button/radio-button-panel/radio-button-panel.d.ts +20 -2
  368. package/development/radio-button/radio-button-panel/radio-button-panel.d.ts.map +1 -1
  369. package/development/radio-button/radio-button-panel.js +35 -15
  370. package/development/radio-button/radio-button.js +11 -15
  371. package/development/select/select.d.ts +3 -9
  372. package/development/select/select.d.ts.map +1 -1
  373. package/development/select.js +27 -25
  374. package/development/selection-expansion-panel/selection-expansion-panel.d.ts +4 -1
  375. package/development/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  376. package/development/selection-expansion-panel.js +28 -16
  377. package/development/skiplink-list/skiplink-list.d.ts.map +1 -1
  378. package/development/skiplink-list.js +3 -2
  379. package/development/slider/slider.d.ts +0 -1
  380. package/development/slider/slider.d.ts.map +1 -1
  381. package/development/slider.js +2 -2
  382. package/development/stepper/step-label/step-label.d.ts +0 -2
  383. package/development/stepper/step-label/step-label.d.ts.map +1 -1
  384. package/development/stepper/step-label.js +10 -11
  385. package/development/stepper/step.js +1 -1
  386. package/development/stepper/stepper/stepper.d.ts +4 -1
  387. package/development/stepper/stepper/stepper.d.ts.map +1 -1
  388. package/development/stepper/stepper.js +9 -7
  389. package/development/tabs/tab-group/tab-group.d.ts +4 -1
  390. package/development/tabs/tab-group/tab-group.d.ts.map +1 -1
  391. package/development/tabs/tab-group.js +8 -4
  392. package/development/tabs/tab-label.js +1 -1
  393. package/development/tag/tag/tag.d.ts +4 -1
  394. package/development/tag/tag/tag.d.ts.map +1 -1
  395. package/development/tag/tag-group/tag-group.d.ts +5 -2
  396. package/development/tag/tag-group/tag-group.d.ts.map +1 -1
  397. package/development/tag/tag-group.js +7 -4
  398. package/development/tag/tag.js +16 -12
  399. package/development/teaser/teaser.d.ts +2 -2
  400. package/development/teaser/teaser.d.ts.map +1 -1
  401. package/development/teaser-hero/teaser-hero.d.ts +2 -6
  402. package/development/teaser-hero/teaser-hero.d.ts.map +1 -1
  403. package/development/teaser-hero.js +9 -60
  404. package/development/teaser-product/common.js +7 -14
  405. package/development/teaser-product/teaser-product.js +1 -21
  406. package/development/teaser.js +12 -31
  407. package/development/time-input/time-input.d.ts +3 -6
  408. package/development/time-input/time-input.d.ts.map +1 -1
  409. package/development/time-input.js +33 -27
  410. package/development/toast/toast.d.ts +3 -0
  411. package/development/toast/toast.d.ts.map +1 -1
  412. package/development/toast.js +27 -13
  413. package/development/toggle/toggle/toggle.d.ts +4 -8
  414. package/development/toggle/toggle/toggle.d.ts.map +1 -1
  415. package/development/toggle/toggle.js +9 -12
  416. package/development/toggle-check/toggle-check.d.ts +4 -6
  417. package/development/toggle-check/toggle-check.d.ts.map +1 -1
  418. package/development/toggle-check.js +9 -7
  419. package/development/train/train/train.d.ts.map +1 -1
  420. package/development/train/train-blocked-passage.js +2 -2
  421. package/development/train/train-formation/train-formation.d.ts +3 -11
  422. package/development/train/train-formation/train-formation.d.ts.map +1 -1
  423. package/development/train/train-formation.js +43 -74
  424. package/development/train/train-wagon/train-wagon.d.ts +11 -8
  425. package/development/train/train-wagon/train-wagon.d.ts.map +1 -1
  426. package/development/train/train-wagon.js +149 -124
  427. package/development/train/train.js +35 -112
  428. package/development/visual-checkbox/visual-checkbox.d.ts +4 -1
  429. package/development/visual-checkbox/visual-checkbox.d.ts.map +1 -1
  430. package/development/visual-checkbox.js +7 -3
  431. package/dialog/dialog/dialog.d.ts +3 -0
  432. package/dialog/dialog/dialog.d.ts.map +1 -1
  433. package/dialog/dialog-title.js +9 -9
  434. package/dialog/dialog.js +56 -51
  435. package/expansion-panel/expansion-panel/expansion-panel.d.ts +7 -1
  436. package/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -1
  437. package/expansion-panel/expansion-panel-header.js +1 -1
  438. package/expansion-panel/expansion-panel.js +41 -28
  439. package/file-selector/common/file-selector-common.d.ts +23 -0
  440. package/file-selector/common/file-selector-common.d.ts.map +1 -0
  441. package/file-selector/common.d.ts +2 -0
  442. package/file-selector/common.d.ts.map +1 -0
  443. package/file-selector/common.js +210 -0
  444. package/file-selector/file-selector/file-selector.d.ts +24 -0
  445. package/file-selector/file-selector/file-selector.d.ts.map +1 -0
  446. package/file-selector/file-selector-dropzone/file-selector-dropzone.d.ts +33 -0
  447. package/file-selector/file-selector-dropzone/file-selector-dropzone.d.ts.map +1 -0
  448. package/file-selector/file-selector-dropzone.d.ts +2 -0
  449. package/file-selector/file-selector-dropzone.d.ts.map +1 -0
  450. package/file-selector/file-selector-dropzone.js +97 -0
  451. package/file-selector/file-selector.d.ts +1 -87
  452. package/file-selector/file-selector.d.ts.map +1 -1
  453. package/file-selector/file-selector.js +44 -0
  454. package/file-selector.d.ts +2 -0
  455. package/file-selector.d.ts.map +1 -1
  456. package/file-selector.js +3 -301
  457. package/flip-card/flip-card-details.js +5 -5
  458. package/flip-card/flip-card-summary.js +7 -7
  459. package/flip-card/flip-card.js +9 -9
  460. package/form-field/form-field/form-field.d.ts +5 -10
  461. package/form-field/form-field/form-field.d.ts.map +1 -1
  462. package/form-field/form-field-clear.js +12 -12
  463. package/form-field/form-field.js +143 -141
  464. package/header/common.js +10 -10
  465. package/header/header/header.d.ts +5 -3
  466. package/header/header/header.d.ts.map +1 -1
  467. package/header/header.js +28 -31
  468. package/image/image.d.ts +0 -30
  469. package/image/image.d.ts.map +1 -1
  470. package/image.js +187 -281
  471. package/index.d.ts +13 -9
  472. package/index.js +13 -9
  473. package/journey-header/journey-header.d.ts +4 -1
  474. package/journey-header/journey-header.d.ts.map +1 -1
  475. package/journey-header.js +29 -25
  476. package/lead-container.js +5 -5
  477. package/link/common/link-common.d.ts.map +1 -1
  478. package/link/common.js +18 -16
  479. package/link-list/common/link-list-base.d.ts +1 -0
  480. package/link-list/common/link-list-base.d.ts.map +1 -1
  481. package/link-list/common.js +11 -9
  482. package/link-list/link-list-anchor.js +8 -8
  483. package/loading-indicator/loading-indicator.d.ts +1 -3
  484. package/loading-indicator/loading-indicator.d.ts.map +1 -1
  485. package/loading-indicator-circle/loading-indicator-circle.d.ts +16 -0
  486. package/loading-indicator-circle/loading-indicator-circle.d.ts.map +1 -0
  487. package/loading-indicator-circle.d.ts +2 -0
  488. package/loading-indicator-circle.d.ts.map +1 -0
  489. package/loading-indicator-circle.js +46 -0
  490. package/loading-indicator.js +41 -51
  491. package/map-container/map-container.d.ts.map +1 -1
  492. package/map-container.js +7 -7
  493. package/menu/common.js +8 -8
  494. package/menu/menu/menu.d.ts +3 -0
  495. package/menu/menu/menu.d.ts.map +1 -1
  496. package/menu/menu.js +52 -43
  497. package/navigation/common/navigation-action-common.d.ts.map +1 -1
  498. package/navigation/common.js +10 -6
  499. package/navigation/navigation/navigation.d.ts +3 -0
  500. package/navigation/navigation/navigation.d.ts.map +1 -1
  501. package/navigation/navigation-list/navigation-list.d.ts.map +1 -1
  502. package/navigation/navigation-list.js +17 -16
  503. package/navigation/navigation-marker/navigation-marker.d.ts +2 -1
  504. package/navigation/navigation-marker/navigation-marker.d.ts.map +1 -1
  505. package/navigation/navigation-marker.js +12 -10
  506. package/navigation/navigation-section/navigation-section.d.ts +3 -0
  507. package/navigation/navigation-section/navigation-section.d.ts.map +1 -1
  508. package/navigation/navigation-section.js +46 -37
  509. package/navigation/navigation.js +30 -21
  510. package/notification/notification.d.ts +6 -2
  511. package/notification/notification.d.ts.map +1 -1
  512. package/notification.js +55 -51
  513. package/option/option/option-base-element.d.ts +0 -7
  514. package/option/option/option-base-element.d.ts.map +1 -1
  515. package/option/option.js +110 -125
  516. package/overlay/overlay-base-element.d.ts +2 -0
  517. package/overlay/overlay-base-element.d.ts.map +1 -1
  518. package/overlay/overlay.d.ts +3 -0
  519. package/overlay/overlay.d.ts.map +1 -1
  520. package/overlay.js +83 -77
  521. package/package.json +40 -25
  522. package/paginator/common/paginator-common.d.ts.map +1 -1
  523. package/paginator/common.js +21 -17
  524. package/paginator/paginator.js +1 -1
  525. package/popover/popover/popover.d.ts +3 -0
  526. package/popover/popover/popover.d.ts.map +1 -1
  527. package/popover/popover-trigger.js +6 -6
  528. package/popover/popover.js +114 -109
  529. package/radio-button/common/radio-button-common.d.ts +3 -10
  530. package/radio-button/common/radio-button-common.d.ts.map +1 -1
  531. package/radio-button/common.js +43 -90
  532. package/radio-button/radio-button/radio-button.d.ts +9 -1
  533. package/radio-button/radio-button/radio-button.d.ts.map +1 -1
  534. package/radio-button/radio-button-group/radio-button-group.d.ts +19 -26
  535. package/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -1
  536. package/radio-button/radio-button-group.js +112 -131
  537. package/radio-button/radio-button-panel/radio-button-panel.d.ts +20 -2
  538. package/radio-button/radio-button-panel/radio-button-panel.d.ts.map +1 -1
  539. package/radio-button/radio-button-panel.js +56 -44
  540. package/radio-button/radio-button.js +34 -38
  541. package/select/select.d.ts +3 -9
  542. package/select/select.d.ts.map +1 -1
  543. package/select.js +65 -66
  544. package/selection-expansion-panel/selection-expansion-panel.d.ts +4 -1
  545. package/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  546. package/selection-expansion-panel.js +41 -31
  547. package/skiplink-list/skiplink-list.d.ts.map +1 -1
  548. package/skiplink-list.js +14 -13
  549. package/slider/slider.d.ts +0 -1
  550. package/slider/slider.d.ts.map +1 -1
  551. package/slider.js +1 -1
  552. package/standard-theme.css +237 -8
  553. package/stepper/step-label/step-label.d.ts +0 -2
  554. package/stepper/step-label/step-label.d.ts.map +1 -1
  555. package/stepper/step-label.js +6 -6
  556. package/stepper/step.js +4 -4
  557. package/stepper/stepper/stepper.d.ts +4 -1
  558. package/stepper/stepper/stepper.d.ts.map +1 -1
  559. package/stepper/stepper.js +22 -19
  560. package/table.css +15 -0
  561. package/tabs/tab-group/tab-group.d.ts +4 -1
  562. package/tabs/tab-group/tab-group.d.ts.map +1 -1
  563. package/tabs/tab-group.js +24 -20
  564. package/tabs/tab-label.js +1 -1
  565. package/tag/tag/tag.d.ts +4 -1
  566. package/tag/tag/tag.d.ts.map +1 -1
  567. package/tag/tag-group/tag-group.d.ts +5 -2
  568. package/tag/tag-group/tag-group.d.ts.map +1 -1
  569. package/tag/tag-group.js +13 -10
  570. package/tag/tag.js +25 -21
  571. package/teaser/teaser.d.ts +2 -2
  572. package/teaser/teaser.d.ts.map +1 -1
  573. package/teaser-hero/teaser-hero.d.ts +2 -6
  574. package/teaser-hero/teaser-hero.d.ts.map +1 -1
  575. package/teaser-hero.js +32 -57
  576. package/teaser-product/common.js +1 -1
  577. package/teaser-product/teaser-product.js +13 -13
  578. package/teaser.js +28 -28
  579. package/time-input/time-input.d.ts +3 -6
  580. package/time-input/time-input.d.ts.map +1 -1
  581. package/time-input.js +56 -55
  582. package/toast/toast.d.ts +3 -0
  583. package/toast/toast.d.ts.map +1 -1
  584. package/toast.js +51 -42
  585. package/toggle/toggle/toggle.d.ts +4 -8
  586. package/toggle/toggle/toggle.d.ts.map +1 -1
  587. package/toggle/toggle.js +48 -48
  588. package/toggle-check/toggle-check.d.ts +4 -6
  589. package/toggle-check/toggle-check.d.ts.map +1 -1
  590. package/toggle-check.js +23 -21
  591. package/train/train/train.d.ts.map +1 -1
  592. package/train/train-blocked-passage.js +1 -1
  593. package/train/train-formation/train-formation.d.ts +3 -11
  594. package/train/train-formation/train-formation.d.ts.map +1 -1
  595. package/train/train-formation.js +47 -65
  596. package/train/train-wagon/train-wagon.d.ts +11 -8
  597. package/train/train-wagon/train-wagon.d.ts.map +1 -1
  598. package/train/train-wagon.js +123 -134
  599. package/train/train.js +74 -78
  600. package/visual-checkbox/visual-checkbox.d.ts +4 -1
  601. package/visual-checkbox/visual-checkbox.d.ts.map +1 -1
  602. package/visual-checkbox.js +21 -17
  603. package/button/mini-button/mini-button-base-element.d.ts +0 -8
  604. package/button/mini-button/mini-button-base-element.d.ts.map +0 -1
  605. package/button/tertiary-button/tertiary-button.d.ts +0 -19
  606. package/button/tertiary-button/tertiary-button.d.ts.map +0 -1
  607. package/button/tertiary-button-link/tertiary-button-link.d.ts +0 -19
  608. package/button/tertiary-button-link/tertiary-button-link.d.ts.map +0 -1
  609. package/button/tertiary-button-link.d.ts +0 -2
  610. package/button/tertiary-button-link.d.ts.map +0 -1
  611. package/button/tertiary-button-link.js +0 -17
  612. package/button/tertiary-button-static/tertiary-button-static.d.ts +0 -19
  613. package/button/tertiary-button-static/tertiary-button-static.d.ts.map +0 -1
  614. package/button/tertiary-button-static.d.ts +0 -2
  615. package/button/tertiary-button-static.d.ts.map +0 -1
  616. package/button/tertiary-button-static.js +0 -17
  617. package/button/tertiary-button.d.ts +0 -2
  618. package/button/tertiary-button.d.ts.map +0 -1
  619. package/button/tertiary-button.js +0 -17
  620. package/chip/chip.d.ts.map +0 -1
  621. package/chip.d.ts +0 -2
  622. package/chip.d.ts.map +0 -1
  623. package/chip.js +0 -54
  624. package/core/dom/get-document-writing-mode.d.ts +0 -5
  625. package/core/dom/get-document-writing-mode.d.ts.map +0 -1
  626. package/core/dom/ssr.d.ts +0 -13
  627. package/core/dom/ssr.d.ts.map +0 -1
  628. package/core/eventing/handler-repository.d.ts +0 -28
  629. package/core/eventing/handler-repository.d.ts.map +0 -1
  630. package/core/observers/intersection-observer.d.ts +0 -20
  631. package/core/observers/intersection-observer.d.ts.map +0 -1
  632. package/core/observers/mutation-observer.d.ts +0 -13
  633. package/core/observers/mutation-observer.d.ts.map +0 -1
  634. package/core/observers/resize-observer.d.ts +0 -16
  635. package/core/observers/resize-observer.d.ts.map +0 -1
  636. package/core/observers.d.ts +0 -4
  637. package/core/observers.d.ts.map +0 -1
  638. package/core/observers.js +0 -38
  639. package/core/testing/wait-for-event.d.ts +0 -2
  640. package/core/testing/wait-for-event.d.ts.map +0 -1
  641. package/development/button/mini-button/mini-button-base-element.d.ts +0 -8
  642. package/development/button/mini-button/mini-button-base-element.d.ts.map +0 -1
  643. package/development/button/tertiary-button/tertiary-button.d.ts +0 -19
  644. package/development/button/tertiary-button/tertiary-button.d.ts.map +0 -1
  645. package/development/button/tertiary-button-link/tertiary-button-link.d.ts +0 -19
  646. package/development/button/tertiary-button-link/tertiary-button-link.d.ts.map +0 -1
  647. package/development/button/tertiary-button-link.d.ts +0 -2
  648. package/development/button/tertiary-button-link.d.ts.map +0 -1
  649. package/development/button/tertiary-button-link.js +0 -25
  650. package/development/button/tertiary-button-static/tertiary-button-static.d.ts +0 -19
  651. package/development/button/tertiary-button-static/tertiary-button-static.d.ts.map +0 -1
  652. package/development/button/tertiary-button-static.d.ts +0 -2
  653. package/development/button/tertiary-button-static.d.ts.map +0 -1
  654. package/development/button/tertiary-button-static.js +0 -25
  655. package/development/button/tertiary-button.d.ts +0 -2
  656. package/development/button/tertiary-button.d.ts.map +0 -1
  657. package/development/button/tertiary-button.js +0 -25
  658. package/development/chip/chip.d.ts.map +0 -1
  659. package/development/chip.d.ts +0 -2
  660. package/development/chip.d.ts.map +0 -1
  661. package/development/core/dom/get-document-writing-mode.d.ts +0 -5
  662. package/development/core/dom/get-document-writing-mode.d.ts.map +0 -1
  663. package/development/core/dom/ssr.d.ts +0 -13
  664. package/development/core/dom/ssr.d.ts.map +0 -1
  665. package/development/core/eventing/handler-repository.d.ts +0 -28
  666. package/development/core/eventing/handler-repository.d.ts.map +0 -1
  667. package/development/core/observers/intersection-observer.d.ts +0 -20
  668. package/development/core/observers/intersection-observer.d.ts.map +0 -1
  669. package/development/core/observers/mutation-observer.d.ts +0 -13
  670. package/development/core/observers/mutation-observer.d.ts.map +0 -1
  671. package/development/core/observers/resize-observer.d.ts +0 -16
  672. package/development/core/observers/resize-observer.d.ts.map +0 -1
  673. package/development/core/observers.d.ts +0 -4
  674. package/development/core/observers.d.ts.map +0 -1
  675. package/development/core/observers.js +0 -39
  676. package/development/core/testing/wait-for-event.d.ts +0 -2
  677. package/development/core/testing/wait-for-event.d.ts.map +0 -1
@@ -9,9 +9,7 @@ import { __esDecorate, __runInitializers } from "tslib";
9
9
  import { S as SbbTypoScaleDefault, a as SbbBreakpointZeroMin, b as SbbBreakpointZeroMax, c as SbbBreakpointMicroMin, d as SbbBreakpointMicroMax, e as SbbBreakpointSmallMin, f as SbbBreakpointSmallMax, g as SbbBreakpointMediumMin, h as SbbBreakpointMediumMax, i as SbbBreakpointLargeMin, j as SbbBreakpointLargeMax, k as SbbBreakpointWideMin, l as SbbBreakpointWideMax, m as SbbBreakpointUltraMin, n as SbbBreakpointUltraMax } from "./sbb-tokens-BdGhUJjM.js";
10
10
  import { css, html, nothing, LitElement } from "lit";
11
11
  import { customElement, property, eventOptions } from "lit/decorators.js";
12
- import { ref } from "lit/directives/ref.js";
13
12
  import { forceType } from "./core/decorators.js";
14
- import { hostContext } from "./core/dom.js";
15
13
  const style = css`*,
16
14
  ::before,
17
15
  ::after {
@@ -19,83 +17,15 @@ const style = css`*,
19
17
  }
20
18
 
21
19
  :host {
22
- --sbb-image-border-radius: var(--sbb-border-radius-4x);
23
- --sbb-image-aspect-ratio: auto;
20
+ --sbb-image-aspect-ratio: 16 / 9;
24
21
  --sbb-image-animation-duration: var(
25
- --sbb-disable-animation-zero-time,
22
+ --sbb-disable-animation-duration,
26
23
  var(--sbb-animation-duration-4x)
27
24
  );
28
25
  --sbb-image-object-fit: cover;
29
26
  display: block;
30
- }
31
-
32
- :host([aspect-ratio="1-1"]) {
33
- --sbb-image-aspect-ratio: 1 / 1;
34
- }
35
-
36
- :host([aspect-ratio="1-2"]) {
37
- --sbb-image-aspect-ratio: 1 / 2;
38
- }
39
-
40
- :host([aspect-ratio="2-1"]) {
41
- --sbb-image-aspect-ratio: 2 / 1;
42
- }
43
-
44
- :host([aspect-ratio="2-3"]) {
45
- --sbb-image-aspect-ratio: 2 / 3;
46
- }
47
-
48
- :host([aspect-ratio="3-2"]) {
49
- --sbb-image-aspect-ratio: 3 / 2;
50
- }
51
-
52
- :host([aspect-ratio="3-4"]) {
53
- --sbb-image-aspect-ratio: 3 / 4;
54
- }
55
-
56
- :host([aspect-ratio="4-3"]) {
57
- --sbb-image-aspect-ratio: 4 / 3;
58
- }
59
-
60
- :host([aspect-ratio="4-5"]) {
61
- --sbb-image-aspect-ratio: 4 / 5;
62
- }
63
-
64
- :host([aspect-ratio="5-4"]) {
65
- --sbb-image-aspect-ratio: 5 / 4;
66
- }
67
-
68
- :host([aspect-ratio="16-9"]) {
69
- --sbb-image-aspect-ratio: 16 / 9;
70
- }
71
-
72
- :host([aspect-ratio="9-16"]) {
73
- --sbb-image-aspect-ratio: 9 / 16;
74
- }
75
-
76
- :host([data-teaser]) {
77
- --sbb-image-aspect-ratio: 1 / 1;
78
- }
79
- @media (min-width: calc(37.5rem)) {
80
- :host([data-teaser]) {
81
- --sbb-image-aspect-ratio: 16 / 9;
82
- }
83
- }
84
-
85
- :host(:is([border-radius=none], [data-teaser])) {
86
- --sbb-image-border-radius: 0;
87
- }
88
-
89
- :host([border-radius=round]:not([data-teaser])) {
90
- --sbb-image-border-radius: var(--sbb-border-radius-infinity);
91
- }
92
-
93
- .sbb-image__figure {
94
- display: flex;
95
- flex-direction: column;
96
- gap: var(--sbb-spacing-fixed-4x);
97
- margin: 0;
98
- height: 100%;
27
+ border-radius: var(--sbb-border-radius-4x);
28
+ overflow: hidden;
99
29
  }
100
30
 
101
31
  .sbb-image__img {
@@ -128,25 +58,10 @@ picture {
128
58
  .sbb-image__wrapper {
129
59
  display: flex;
130
60
  position: relative;
131
- overflow: hidden;
132
61
  width: 100%;
133
62
  height: 100%;
134
63
  aspect-ratio: var(--sbb-image-aspect-ratio);
135
- border-radius: var(--sbb-image-border-radius);
136
- }
137
-
138
- .sbb-image__caption {
139
- --sbb-text-font-size: var(--sbb-font-size-text-xs);
140
- font-family: var(--sbb-typo-font-family);
141
- font-weight: normal;
142
- line-height: var(--sbb-typo-line-height-body-text);
143
- letter-spacing: var(--sbb-typo-letter-spacing-body-text);
144
- font-size: var(--sbb-text-font-size);
145
64
  }`;
146
- var __freeze = Object.freeze;
147
- var __defProp = Object.defineProperty;
148
- var __template = (cooked, raw) => __freeze(__defProp(cooked, "raw", { value: __freeze(cooked.slice()) }));
149
- var _a;
150
65
  const imageHelperGetBreakpoints = (jsonString) => {
151
66
  if (!jsonString || jsonString.length === 0) {
152
67
  return [];
@@ -211,7 +126,7 @@ const breakpointMap = {
211
126
  "sbb-breakpoint-ultra-max": pxToRem(SbbBreakpointUltraMax)
212
127
  };
213
128
  let SbbImageElement = (() => {
214
- var _alt_accessor_storage, _skipLqip_accessor_storage, _caption_accessor_storage, _copyright_accessor_storage, _copyrightHolder_accessor_storage, _customFocalPoint_accessor_storage, _decoding_accessor_storage, _focalPointDebug_accessor_storage, _focalPointX_accessor_storage, _focalPointY_accessor_storage, _imageSrc_accessor_storage, _importance_accessor_storage, _loading_accessor_storage, _performanceMark_accessor_storage, _pictureSizesConfig_accessor_storage, _borderRadius_accessor_storage, _aspectRatio_accessor_storage, _a2;
129
+ var _alt_accessor_storage, _skipLqip_accessor_storage, _customFocalPoint_accessor_storage, _decoding_accessor_storage, _focalPointDebug_accessor_storage, _focalPointX_accessor_storage, _focalPointY_accessor_storage, _imageSrc_accessor_storage, _importance_accessor_storage, _loading_accessor_storage, _performanceMark_accessor_storage, _pictureSizesConfig_accessor_storage, _a;
215
130
  let _classDecorators = [customElement("sbb-image")];
216
131
  let _classDescriptor;
217
132
  let _classExtraInitializers = [];
@@ -224,15 +139,6 @@ let SbbImageElement = (() => {
224
139
  let _skipLqip_decorators;
225
140
  let _skipLqip_initializers = [];
226
141
  let _skipLqip_extraInitializers = [];
227
- let _caption_decorators;
228
- let _caption_initializers = [];
229
- let _caption_extraInitializers = [];
230
- let _copyright_decorators;
231
- let _copyright_initializers = [];
232
- let _copyright_extraInitializers = [];
233
- let _copyrightHolder_decorators;
234
- let _copyrightHolder_initializers = [];
235
- let _copyrightHolder_extraInitializers = [];
236
142
  let _customFocalPoint_decorators;
237
143
  let _customFocalPoint_initializers = [];
238
144
  let _customFocalPoint_extraInitializers = [];
@@ -263,21 +169,12 @@ let SbbImageElement = (() => {
263
169
  let _pictureSizesConfig_decorators;
264
170
  let _pictureSizesConfig_initializers = [];
265
171
  let _pictureSizesConfig_extraInitializers = [];
266
- let _borderRadius_decorators;
267
- let _borderRadius_initializers = [];
268
- let _borderRadius_extraInitializers = [];
269
- let _aspectRatio_decorators;
270
- let _aspectRatio_initializers = [];
271
- let _aspectRatio_extraInitializers = [];
272
172
  let __imageLoaded_decorators;
273
- _a2 = class extends _classSuper {
173
+ _a = class extends _classSuper {
274
174
  constructor() {
275
175
  super(...arguments);
276
176
  __privateAdd(this, _alt_accessor_storage);
277
177
  __privateAdd(this, _skipLqip_accessor_storage);
278
- __privateAdd(this, _caption_accessor_storage);
279
- __privateAdd(this, _copyright_accessor_storage);
280
- __privateAdd(this, _copyrightHolder_accessor_storage);
281
178
  __privateAdd(this, _customFocalPoint_accessor_storage);
282
179
  __privateAdd(this, _decoding_accessor_storage);
283
180
  __privateAdd(this, _focalPointDebug_accessor_storage);
@@ -288,8 +185,6 @@ let SbbImageElement = (() => {
288
185
  __privateAdd(this, _loading_accessor_storage);
289
186
  __privateAdd(this, _performanceMark_accessor_storage);
290
187
  __privateAdd(this, _pictureSizesConfig_accessor_storage);
291
- __privateAdd(this, _borderRadius_accessor_storage);
292
- __privateAdd(this, _aspectRatio_accessor_storage);
293
188
  this._captionElement = __runInitializers(this, _instanceExtraInitializers);
294
189
  this._config = {
295
190
  nonRetinaQuality: "45",
@@ -297,10 +192,7 @@ let SbbImageElement = (() => {
297
192
  };
298
193
  __privateSet(this, _alt_accessor_storage, __runInitializers(this, _alt_initializers, ""));
299
194
  __privateSet(this, _skipLqip_accessor_storage, (__runInitializers(this, _alt_extraInitializers), __runInitializers(this, _skipLqip_initializers, false)));
300
- __privateSet(this, _caption_accessor_storage, (__runInitializers(this, _skipLqip_extraInitializers), __runInitializers(this, _caption_initializers, "")));
301
- __privateSet(this, _copyright_accessor_storage, (__runInitializers(this, _caption_extraInitializers), __runInitializers(this, _copyright_initializers, "")));
302
- __privateSet(this, _copyrightHolder_accessor_storage, (__runInitializers(this, _copyright_extraInitializers), __runInitializers(this, _copyrightHolder_initializers, "Organization")));
303
- __privateSet(this, _customFocalPoint_accessor_storage, (__runInitializers(this, _copyrightHolder_extraInitializers), __runInitializers(this, _customFocalPoint_initializers, false)));
195
+ __privateSet(this, _customFocalPoint_accessor_storage, (__runInitializers(this, _skipLqip_extraInitializers), __runInitializers(this, _customFocalPoint_initializers, false)));
304
196
  __privateSet(this, _decoding_accessor_storage, (__runInitializers(this, _customFocalPoint_extraInitializers), __runInitializers(this, _decoding_initializers, "auto")));
305
197
  __privateSet(this, _focalPointDebug_accessor_storage, (__runInitializers(this, _decoding_extraInitializers), __runInitializers(this, _focalPointDebug_initializers, false)));
306
198
  __privateSet(this, _focalPointX_accessor_storage, (__runInitializers(this, _focalPointDebug_extraInitializers), __runInitializers(this, _focalPointX_initializers, 1)));
@@ -310,9 +202,7 @@ let SbbImageElement = (() => {
310
202
  __privateSet(this, _loading_accessor_storage, (__runInitializers(this, _importance_extraInitializers), __runInitializers(this, _loading_initializers, "eager")));
311
203
  __privateSet(this, _performanceMark_accessor_storage, (__runInitializers(this, _loading_extraInitializers), __runInitializers(this, _performanceMark_initializers, "")));
312
204
  __privateSet(this, _pictureSizesConfig_accessor_storage, (__runInitializers(this, _performanceMark_extraInitializers), __runInitializers(this, _pictureSizesConfig_initializers, "")));
313
- __privateSet(this, _borderRadius_accessor_storage, (__runInitializers(this, _pictureSizesConfig_extraInitializers), __runInitializers(this, _borderRadius_initializers, "default")));
314
- __privateSet(this, _aspectRatio_accessor_storage, (__runInitializers(this, _borderRadius_extraInitializers), __runInitializers(this, _aspectRatio_initializers, "16-9")));
315
- __runInitializers(this, _aspectRatio_extraInitializers);
205
+ __runInitializers(this, _pictureSizesConfig_extraInitializers);
316
206
  }
317
207
  /**
318
208
  * An alt text is not always necessary (e.g. in teaser cards when
@@ -340,38 +230,6 @@ let SbbImageElement = (() => {
340
230
  set skipLqip(value) {
341
231
  __privateSet(this, _skipLqip_accessor_storage, value);
342
232
  }
343
- /**
344
- * A caption can provide additional context to the image (e.g.
345
- * descriptions and the like).
346
- * Links will automatically receive tabindex=-1 if hideFromScreenreader
347
- * is set to true. That way they will no longer become focusable.
348
- */
349
- get caption() {
350
- return __privateGet(this, _caption_accessor_storage);
351
- }
352
- set caption(value) {
353
- __privateSet(this, _caption_accessor_storage, value);
354
- }
355
- /**
356
- * If a copyright text is provided, we will add it to the caption
357
- * and create a structured data json-ld block with the copyright
358
- * information.
359
- */
360
- get copyright() {
361
- return __privateGet(this, _copyright_accessor_storage);
362
- }
363
- set copyright(value) {
364
- __privateSet(this, _copyright_accessor_storage, value);
365
- }
366
- /**
367
- * Copyright holder can either be an Organization or a Person
368
- */
369
- get copyrightHolder() {
370
- return __privateGet(this, _copyrightHolder_accessor_storage);
371
- }
372
- set copyrightHolder(value) {
373
- __privateSet(this, _copyrightHolder_accessor_storage, value);
374
- }
375
233
  /**
376
234
  * Set this to true, if you want to pass a custom focal point
377
235
  * for the image. See full documentation here:
@@ -564,34 +422,10 @@ let SbbImageElement = (() => {
564
422
  set pictureSizesConfig(value) {
565
423
  __privateSet(this, _pictureSizesConfig_accessor_storage, value);
566
424
  }
567
- /**
568
- * Border radius of the image. Choose between a default radius, no radius and a completely round image.
569
- */
570
- get borderRadius() {
571
- return __privateGet(this, _borderRadius_accessor_storage);
572
- }
573
- set borderRadius(value) {
574
- __privateSet(this, _borderRadius_accessor_storage, value);
575
- }
576
- /**
577
- * Set an aspect ratio
578
- * default is '16-9' (16/9)
579
- * other values: 'free', '1-1', '1-2', '2-1', '2-3', '3-2', '3-4', '4-3', '4-5', '5-4', '9-16'
580
- */
581
- get aspectRatio() {
582
- return __privateGet(this, _aspectRatio_accessor_storage);
583
- }
584
- set aspectRatio(value) {
585
- __privateSet(this, _aspectRatio_accessor_storage, value);
586
- }
587
425
  /** Whether the image is finished loading or failed to load. */
588
426
  get complete() {
589
- var _a3, _b, _c;
590
- return ((_c = (_b = (_a3 = this.shadowRoot) == null ? void 0 : _a3.querySelector) == null ? void 0 : _b.call(_a3, ".sbb-image__img")) == null ? void 0 : _c.complete) ?? false;
591
- }
592
- connectedCallback() {
593
- super.connectedCallback();
594
- this.toggleAttribute("data-teaser", !!hostContext("sbb-teaser-hero", this) || !!this.closest("sbb-teaser-paid"));
427
+ var _a2, _b, _c;
428
+ return ((_c = (_b = (_a2 = this.shadowRoot) == null ? void 0 : _a2.querySelector) == null ? void 0 : _b.call(_a2, ".sbb-image__img")) == null ? void 0 : _c.complete) ?? false;
595
429
  }
596
430
  updated(changedProperties) {
597
431
  super.updated(changedProperties);
@@ -622,8 +456,8 @@ let SbbImageElement = (() => {
622
456
  return value ? `${value}rem` : "";
623
457
  }
624
458
  _addFocusAbilityToLinksInCaption() {
625
- var _a3;
626
- (_a3 = this._linksInCaption) == null ? void 0 : _a3.forEach((link) => {
459
+ var _a2;
460
+ (_a2 = this._linksInCaption) == null ? void 0 : _a2.forEach((link) => {
627
461
  link.removeAttribute("tabindex");
628
462
  });
629
463
  }
@@ -733,86 +567,58 @@ let SbbImageElement = (() => {
733
567
  this.dispatchEvent(new Event("load"));
734
568
  }
735
569
  render() {
736
- let { caption } = this;
737
- let schemaData = "";
738
570
  const imageUrlLQIP = this._prepareImageUrl(this.imageSrc, true);
739
571
  const imageUrlWithParams = this._prepareImageUrl(this.imageSrc, false);
740
572
  if (this.loading === "lazy") {
741
573
  this.decoding = "async";
742
574
  this.importance = "low";
743
575
  }
744
- if (this.copyright) {
745
- caption = `${this.caption} ©${this.copyright}`;
746
- schemaData = `{
747
- "@context": "https://schema.org",
748
- "@type": "Photograph",
749
- "image": "${this.imageSrc}",
750
- "copyrightHolder": {
751
- "@type": "${this.copyrightHolder}",
752
- "name": "${this.copyright}"
753
- }
754
- }`;
755
- }
756
576
  const pictureSizeConfigs = this._preparePictureSizeConfigs();
757
577
  return html`
758
- <figure class="sbb-image__figure">
759
- <div class="sbb-image__wrapper">
760
- ${!this.skipLqip ? html`<img
761
- alt=""
762
- class="sbb-image__blurred"
763
- src=${imageUrlLQIP}
764
- width="1000"
765
- height="562"
766
- loading=${this.loading ?? nothing}
767
- decoding=${this.decoding ?? nothing}
768
- />` : nothing}
769
-
770
- <picture>
771
- <!-- render picture element sources -->
772
- ${pictureSizeConfigs.map((config) => {
773
- const imageHeight = config.image.height;
774
- const imageWidth = config.image.width;
775
- const mediaQuery = this._createMediaQueryString(config.mediaQueries);
776
- return [
777
- html` <source
778
- media=${`${mediaQuery}`}
779
- sizes=${`${imageWidth}px`}
780
- srcset=${`${imageUrlWithParams}&w=${imageWidth}&h=${imageHeight}&q=${this._config.nonRetinaQuality} ${imageWidth}w, ${imageUrlWithParams}&w=${imageWidth * 2}&h=${imageHeight * 2}&q=${this._config.retinaQuality} ${imageWidth * 2}w`}
781
- ></source>`
782
- ];
783
- })}
784
- <img
785
- alt=${this.alt || ""}
786
- @load=${this._imageLoaded}
787
- @error=${() => this.dispatchEvent(new Event("error"))}
788
- class="sbb-image__img"
789
- src=${this.imageSrc}
578
+ <div class="sbb-image__wrapper">
579
+ ${!this.skipLqip ? html`<img
580
+ alt=""
581
+ class="sbb-image__blurred"
582
+ src=${imageUrlLQIP}
790
583
  width="1000"
791
584
  height="562"
792
585
  loading=${this.loading ?? nothing}
793
586
  decoding=${this.decoding ?? nothing}
794
- .fetchPriority=${this.importance ?? nothing}
795
- />
796
- </picture>
797
- </div>
798
- ${caption ? html`<figcaption
799
- class="sbb-image__caption"
800
- .innerHTML=${caption}
801
- ${ref((el) => {
802
- this._captionElement = el;
587
+ />` : nothing}
588
+
589
+ <picture>
590
+ <!-- render picture element sources -->
591
+ ${pictureSizeConfigs.map((config) => {
592
+ const imageHeight = config.image.height;
593
+ const imageWidth = config.image.width;
594
+ const mediaQuery = this._createMediaQueryString(config.mediaQueries);
595
+ return html`
596
+ <source
597
+ media=${`${mediaQuery}`}
598
+ sizes=${`${imageWidth}px`}
599
+ srcset=${`${imageUrlWithParams}&w=${imageWidth}&h=${imageHeight}&q=${this._config.nonRetinaQuality} ${imageWidth}w, ${imageUrlWithParams}&w=${imageWidth * 2}&h=${imageHeight * 2}&q=${this._config.retinaQuality} ${imageWidth * 2}w`}
600
+ ></source>`;
803
601
  })}
804
- ></figcaption>` : nothing}
805
- ${schemaData ? html(_a || (_a = __template(['<script type="application/ld+json" .innerHTML=', "><\/script>"])), schemaData) : nothing}
806
- </figure>
602
+ <img
603
+ alt=${this.alt || ""}
604
+ @load=${this._imageLoaded}
605
+ @error=${() => this.dispatchEvent(new Event("error"))}
606
+ class="sbb-image__img"
607
+ src=${this.imageSrc}
608
+ width="1000"
609
+ height="562"
610
+ loading=${this.loading ?? nothing}
611
+ decoding=${this.decoding ?? nothing}
612
+ .fetchPriority=${this.importance ?? nothing}
613
+ />
614
+ </picture>
615
+ </div>
807
616
  `;
808
617
  }
809
- }, _alt_accessor_storage = new WeakMap(), _skipLqip_accessor_storage = new WeakMap(), _caption_accessor_storage = new WeakMap(), _copyright_accessor_storage = new WeakMap(), _copyrightHolder_accessor_storage = new WeakMap(), _customFocalPoint_accessor_storage = new WeakMap(), _decoding_accessor_storage = new WeakMap(), _focalPointDebug_accessor_storage = new WeakMap(), _focalPointX_accessor_storage = new WeakMap(), _focalPointY_accessor_storage = new WeakMap(), _imageSrc_accessor_storage = new WeakMap(), _importance_accessor_storage = new WeakMap(), _loading_accessor_storage = new WeakMap(), _performanceMark_accessor_storage = new WeakMap(), _pictureSizesConfig_accessor_storage = new WeakMap(), _borderRadius_accessor_storage = new WeakMap(), _aspectRatio_accessor_storage = new WeakMap(), _classThis = _a2, (() => {
618
+ }, _alt_accessor_storage = new WeakMap(), _skipLqip_accessor_storage = new WeakMap(), _customFocalPoint_accessor_storage = new WeakMap(), _decoding_accessor_storage = new WeakMap(), _focalPointDebug_accessor_storage = new WeakMap(), _focalPointX_accessor_storage = new WeakMap(), _focalPointY_accessor_storage = new WeakMap(), _imageSrc_accessor_storage = new WeakMap(), _importance_accessor_storage = new WeakMap(), _loading_accessor_storage = new WeakMap(), _performanceMark_accessor_storage = new WeakMap(), _pictureSizesConfig_accessor_storage = new WeakMap(), _classThis = _a, (() => {
810
619
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
811
620
  _alt_decorators = [forceType(), property()];
812
621
  _skipLqip_decorators = [forceType(), property({ attribute: "skip-lqip", type: Boolean, reflect: true })];
813
- _caption_decorators = [forceType(), property()];
814
- _copyright_decorators = [forceType(), property()];
815
- _copyrightHolder_decorators = [property({ attribute: "copyright-holder" })];
816
622
  _customFocalPoint_decorators = [forceType(), property({ attribute: "custom-focal-point", type: Boolean })];
817
623
  _decoding_decorators = [property()];
818
624
  _focalPointDebug_decorators = [forceType(), property({ attribute: "focal-point-debug", type: Boolean })];
@@ -823,71 +629,54 @@ let SbbImageElement = (() => {
823
629
  _loading_decorators = [property()];
824
630
  _performanceMark_decorators = [forceType(), property({ attribute: "performance-mark" })];
825
631
  _pictureSizesConfig_decorators = [forceType(), property({ attribute: "picture-sizes-config" })];
826
- _borderRadius_decorators = [property({ attribute: "border-radius", reflect: true })];
827
- _aspectRatio_decorators = [property({ attribute: "aspect-ratio", reflect: true })];
828
632
  __imageLoaded_decorators = [eventOptions(eventListenerOptions)];
829
- __esDecorate(_a2, null, _alt_decorators, { kind: "accessor", name: "alt", static: false, private: false, access: { has: (obj) => "alt" in obj, get: (obj) => obj.alt, set: (obj, value) => {
633
+ __esDecorate(_a, null, _alt_decorators, { kind: "accessor", name: "alt", static: false, private: false, access: { has: (obj) => "alt" in obj, get: (obj) => obj.alt, set: (obj, value) => {
830
634
  obj.alt = value;
831
635
  } }, metadata: _metadata }, _alt_initializers, _alt_extraInitializers);
832
- __esDecorate(_a2, null, _skipLqip_decorators, { kind: "accessor", name: "skipLqip", static: false, private: false, access: { has: (obj) => "skipLqip" in obj, get: (obj) => obj.skipLqip, set: (obj, value) => {
636
+ __esDecorate(_a, null, _skipLqip_decorators, { kind: "accessor", name: "skipLqip", static: false, private: false, access: { has: (obj) => "skipLqip" in obj, get: (obj) => obj.skipLqip, set: (obj, value) => {
833
637
  obj.skipLqip = value;
834
638
  } }, metadata: _metadata }, _skipLqip_initializers, _skipLqip_extraInitializers);
835
- __esDecorate(_a2, null, _caption_decorators, { kind: "accessor", name: "caption", static: false, private: false, access: { has: (obj) => "caption" in obj, get: (obj) => obj.caption, set: (obj, value) => {
836
- obj.caption = value;
837
- } }, metadata: _metadata }, _caption_initializers, _caption_extraInitializers);
838
- __esDecorate(_a2, null, _copyright_decorators, { kind: "accessor", name: "copyright", static: false, private: false, access: { has: (obj) => "copyright" in obj, get: (obj) => obj.copyright, set: (obj, value) => {
839
- obj.copyright = value;
840
- } }, metadata: _metadata }, _copyright_initializers, _copyright_extraInitializers);
841
- __esDecorate(_a2, null, _copyrightHolder_decorators, { kind: "accessor", name: "copyrightHolder", static: false, private: false, access: { has: (obj) => "copyrightHolder" in obj, get: (obj) => obj.copyrightHolder, set: (obj, value) => {
842
- obj.copyrightHolder = value;
843
- } }, metadata: _metadata }, _copyrightHolder_initializers, _copyrightHolder_extraInitializers);
844
- __esDecorate(_a2, null, _customFocalPoint_decorators, { kind: "accessor", name: "customFocalPoint", static: false, private: false, access: { has: (obj) => "customFocalPoint" in obj, get: (obj) => obj.customFocalPoint, set: (obj, value) => {
639
+ __esDecorate(_a, null, _customFocalPoint_decorators, { kind: "accessor", name: "customFocalPoint", static: false, private: false, access: { has: (obj) => "customFocalPoint" in obj, get: (obj) => obj.customFocalPoint, set: (obj, value) => {
845
640
  obj.customFocalPoint = value;
846
641
  } }, metadata: _metadata }, _customFocalPoint_initializers, _customFocalPoint_extraInitializers);
847
- __esDecorate(_a2, null, _decoding_decorators, { kind: "accessor", name: "decoding", static: false, private: false, access: { has: (obj) => "decoding" in obj, get: (obj) => obj.decoding, set: (obj, value) => {
642
+ __esDecorate(_a, null, _decoding_decorators, { kind: "accessor", name: "decoding", static: false, private: false, access: { has: (obj) => "decoding" in obj, get: (obj) => obj.decoding, set: (obj, value) => {
848
643
  obj.decoding = value;
849
644
  } }, metadata: _metadata }, _decoding_initializers, _decoding_extraInitializers);
850
- __esDecorate(_a2, null, _focalPointDebug_decorators, { kind: "accessor", name: "focalPointDebug", static: false, private: false, access: { has: (obj) => "focalPointDebug" in obj, get: (obj) => obj.focalPointDebug, set: (obj, value) => {
645
+ __esDecorate(_a, null, _focalPointDebug_decorators, { kind: "accessor", name: "focalPointDebug", static: false, private: false, access: { has: (obj) => "focalPointDebug" in obj, get: (obj) => obj.focalPointDebug, set: (obj, value) => {
851
646
  obj.focalPointDebug = value;
852
647
  } }, metadata: _metadata }, _focalPointDebug_initializers, _focalPointDebug_extraInitializers);
853
- __esDecorate(_a2, null, _focalPointX_decorators, { kind: "accessor", name: "focalPointX", static: false, private: false, access: { has: (obj) => "focalPointX" in obj, get: (obj) => obj.focalPointX, set: (obj, value) => {
648
+ __esDecorate(_a, null, _focalPointX_decorators, { kind: "accessor", name: "focalPointX", static: false, private: false, access: { has: (obj) => "focalPointX" in obj, get: (obj) => obj.focalPointX, set: (obj, value) => {
854
649
  obj.focalPointX = value;
855
650
  } }, metadata: _metadata }, _focalPointX_initializers, _focalPointX_extraInitializers);
856
- __esDecorate(_a2, null, _focalPointY_decorators, { kind: "accessor", name: "focalPointY", static: false, private: false, access: { has: (obj) => "focalPointY" in obj, get: (obj) => obj.focalPointY, set: (obj, value) => {
651
+ __esDecorate(_a, null, _focalPointY_decorators, { kind: "accessor", name: "focalPointY", static: false, private: false, access: { has: (obj) => "focalPointY" in obj, get: (obj) => obj.focalPointY, set: (obj, value) => {
857
652
  obj.focalPointY = value;
858
653
  } }, metadata: _metadata }, _focalPointY_initializers, _focalPointY_extraInitializers);
859
- __esDecorate(_a2, null, _imageSrc_decorators, { kind: "accessor", name: "imageSrc", static: false, private: false, access: { has: (obj) => "imageSrc" in obj, get: (obj) => obj.imageSrc, set: (obj, value) => {
654
+ __esDecorate(_a, null, _imageSrc_decorators, { kind: "accessor", name: "imageSrc", static: false, private: false, access: { has: (obj) => "imageSrc" in obj, get: (obj) => obj.imageSrc, set: (obj, value) => {
860
655
  obj.imageSrc = value;
861
656
  } }, metadata: _metadata }, _imageSrc_initializers, _imageSrc_extraInitializers);
862
- __esDecorate(_a2, null, _importance_decorators, { kind: "accessor", name: "importance", static: false, private: false, access: { has: (obj) => "importance" in obj, get: (obj) => obj.importance, set: (obj, value) => {
657
+ __esDecorate(_a, null, _importance_decorators, { kind: "accessor", name: "importance", static: false, private: false, access: { has: (obj) => "importance" in obj, get: (obj) => obj.importance, set: (obj, value) => {
863
658
  obj.importance = value;
864
659
  } }, metadata: _metadata }, _importance_initializers, _importance_extraInitializers);
865
- __esDecorate(_a2, null, _loading_decorators, { kind: "accessor", name: "loading", static: false, private: false, access: { has: (obj) => "loading" in obj, get: (obj) => obj.loading, set: (obj, value) => {
660
+ __esDecorate(_a, null, _loading_decorators, { kind: "accessor", name: "loading", static: false, private: false, access: { has: (obj) => "loading" in obj, get: (obj) => obj.loading, set: (obj, value) => {
866
661
  obj.loading = value;
867
662
  } }, metadata: _metadata }, _loading_initializers, _loading_extraInitializers);
868
- __esDecorate(_a2, null, _performanceMark_decorators, { kind: "accessor", name: "performanceMark", static: false, private: false, access: { has: (obj) => "performanceMark" in obj, get: (obj) => obj.performanceMark, set: (obj, value) => {
663
+ __esDecorate(_a, null, _performanceMark_decorators, { kind: "accessor", name: "performanceMark", static: false, private: false, access: { has: (obj) => "performanceMark" in obj, get: (obj) => obj.performanceMark, set: (obj, value) => {
869
664
  obj.performanceMark = value;
870
665
  } }, metadata: _metadata }, _performanceMark_initializers, _performanceMark_extraInitializers);
871
- __esDecorate(_a2, null, _pictureSizesConfig_decorators, { kind: "accessor", name: "pictureSizesConfig", static: false, private: false, access: { has: (obj) => "pictureSizesConfig" in obj, get: (obj) => obj.pictureSizesConfig, set: (obj, value) => {
666
+ __esDecorate(_a, null, _pictureSizesConfig_decorators, { kind: "accessor", name: "pictureSizesConfig", static: false, private: false, access: { has: (obj) => "pictureSizesConfig" in obj, get: (obj) => obj.pictureSizesConfig, set: (obj, value) => {
872
667
  obj.pictureSizesConfig = value;
873
668
  } }, metadata: _metadata }, _pictureSizesConfig_initializers, _pictureSizesConfig_extraInitializers);
874
- __esDecorate(_a2, null, _borderRadius_decorators, { kind: "accessor", name: "borderRadius", static: false, private: false, access: { has: (obj) => "borderRadius" in obj, get: (obj) => obj.borderRadius, set: (obj, value) => {
875
- obj.borderRadius = value;
876
- } }, metadata: _metadata }, _borderRadius_initializers, _borderRadius_extraInitializers);
877
- __esDecorate(_a2, null, _aspectRatio_decorators, { kind: "accessor", name: "aspectRatio", static: false, private: false, access: { has: (obj) => "aspectRatio" in obj, get: (obj) => obj.aspectRatio, set: (obj, value) => {
878
- obj.aspectRatio = value;
879
- } }, metadata: _metadata }, _aspectRatio_initializers, _aspectRatio_extraInitializers);
880
- __esDecorate(_a2, null, __imageLoaded_decorators, { kind: "method", name: "_imageLoaded", static: false, private: false, access: { has: (obj) => "_imageLoaded" in obj, get: (obj) => obj._imageLoaded }, metadata: _metadata }, null, _instanceExtraInitializers);
669
+ __esDecorate(_a, null, __imageLoaded_decorators, { kind: "method", name: "_imageLoaded", static: false, private: false, access: { has: (obj) => "_imageLoaded" in obj, get: (obj) => obj._imageLoaded }, metadata: _metadata }, null, _instanceExtraInitializers);
881
670
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
882
671
  _classThis = _classDescriptor.value;
883
672
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
884
- })(), _a2.styles = style, _a2.events = {
673
+ })(), _a.styles = style, _a.events = {
885
674
  error: "error",
886
675
  load: "load"
887
- }, __runInitializers(_classThis, _classExtraInitializers), _a2;
676
+ }, __runInitializers(_classThis, _classExtraInitializers), _a;
888
677
  return _classThis;
889
678
  })();
890
679
  export {
891
680
  SbbImageElement
892
681
  };
893
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9pbWFnZS9pbWFnZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBTYmJCcmVha3BvaW50WmVyb01pbixcbiAgU2JiQnJlYWtwb2ludFplcm9NYXgsXG4gIFNiYkJyZWFrcG9pbnRNaWNyb01pbixcbiAgU2JiQnJlYWtwb2ludE1pY3JvTWF4LFxuICBTYmJCcmVha3BvaW50U21hbGxNaW4sXG4gIFNiYkJyZWFrcG9pbnRTbWFsbE1heCxcbiAgU2JiQnJlYWtwb2ludE1lZGl1bU1pbixcbiAgU2JiQnJlYWtwb2ludE1lZGl1bU1heCxcbiAgU2JiQnJlYWtwb2ludExhcmdlTWluLFxuICBTYmJCcmVha3BvaW50TGFyZ2VNYXgsXG4gIFNiYkJyZWFrcG9pbnRXaWRlTWluLFxuICBTYmJCcmVha3BvaW50V2lkZU1heCxcbiAgU2JiQnJlYWtwb2ludFVsdHJhTWluLFxuICBTYmJCcmVha3BvaW50VWx0cmFNYXgsXG4gIFNiYlR5cG9TY2FsZURlZmF1bHQsXG59IGZyb20gJ0BzYmItZXN0YS9seW5lLWRlc2lnbi10b2tlbnMnO1xuaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgTGl0RWxlbWVudCxcbiAgbm90aGluZyxcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIGV2ZW50T3B0aW9ucywgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyByZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuXG5pbXBvcnQgeyBmb3JjZVR5cGUgfSBmcm9tICcuLi9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaG9zdENvbnRleHQgfSBmcm9tICcuLi9jb3JlL2RvbS5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2ltYWdlLnNjc3M/bGl0JmlubGluZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWcge1xuICBicmVha3BvaW50czogSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWdCcmVha3BvaW50W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWdCcmVha3BvaW50IHtcbiAgaW1hZ2U6IHtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICB9O1xuICBtZWRpYVF1ZXJpZXM6IEludGVyZmFjZUltYWdlQXR0cmlidXRlc1NpemVzQ29uZmlnTWVkaWFRdWVyeVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludGVyZmFjZUltYWdlQXR0cmlidXRlc1NpemVzQ29uZmlnTWVkaWFRdWVyeSB7XG4gIGNvbmRpdGlvbkZlYXR1cmU6IHN0cmluZztcbiAgY29uZGl0aW9uRmVhdHVyZVZhbHVlOiB7XG4gICAgbHluZURlc2lnblRva2VuOiBib29sZWFuO1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gIH07XG4gIGNvbmRpdGlvbk9wZXJhdG9yOiBmYWxzZTtcbn1cblxuLyoqXG4gKiB3ZSBjaGVjayB0aGUgc3RydWN0dXJlIG9mIHRoZSBkYXRhIG1hbnVhbGx5LCBzbyBpdCdzIHNhZmUgdG8gdXNlIGBhbnlgIGFzIHJldHVybiB0eXBlXG4gKi9cbmNvbnN0IGltYWdlSGVscGVyR2V0QnJlYWtwb2ludHMgPSAoXG4gIGpzb25TdHJpbmc6IHN0cmluZyxcbik6IEludGVyZmFjZUltYWdlQXR0cmlidXRlc1NpemVzQ29uZmlnQnJlYWtwb2ludFtdID0+IHtcbiAgaWYgKCFqc29uU3RyaW5nIHx8IGpzb25TdHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gbWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBgYnJlYWtwb2ludHNgIGtleSBpbiBvYmplY3RcbiAgY29uc3QgbG9nV2FybmluZyA9IGltcG9ydC5tZXRhLmVudi5ERVZcbiAgICA/ICgpID0+XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnc2JiLWltYWdlIGVycm9yOiBhdHRyaWJ1dGUgYnJlYWtwb2ludHMgaGFzIHdyb25nIGRhdGEgZm9ybWF0LiBSZWZlcmVuY2UgdGhlIGRvY3VtZW50YXRpb24gdG8gc2VlIGhvdyB5b3Ugc2hvdWxkIGZvcm1hdCB0aGUgZGF0YSBmb3IgdGhpcyBhdHRyaWJ1dGUuJyxcbiAgICAgICAgKVxuICAgIDogbnVsbDtcbiAgbGV0IGpzb25PYmplY3Q6IEludGVyZmFjZUltYWdlQXR0cmlidXRlc1NpemVzQ29uZmlnO1xuXG4gIHRyeSB7XG4gICAganNvbk9iamVjdCA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XG4gIH0gY2F0Y2gge1xuICAgIGxvZ1dhcm5pbmc/LigpO1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlmICghanNvbk9iamVjdC5icmVha3BvaW50cyB8fCBqc29uT2JqZWN0LmJyZWFrcG9pbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZ1dhcm5pbmc/LigpO1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8vIG1ha2Ugc3VyZSB3ZSBnZXQgYW4gYXJyYXkgb2YgYnJlYWtwb2ludHNcbiAgaWYgKCFBcnJheS5pc0FycmF5KGpzb25PYmplY3QuYnJlYWtwb2ludHMpKSB7XG4gICAgbG9nV2FybmluZz8uKCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIDEuIG1ha2Ugc3VyZSB0aGF0IGVhY2ggZW50cnkgd2l0aGluIHRoZSBicmVha3BvaW50cyBvYmplY3QgY29udGFpbnMgb25seSBhbGxvd2VkIGtleXNcbiAgICogMi4gbWFrZSBzdXJlIHRoYXQgYWxsIG5lY2Vzc2FyeSBrZXlzIGFyZSBwcmVzZW50XG4gICAqL1xuICBsZXQgd3JvbmdLZXlEZXRlY3RlZCA9IGZhbHNlO1xuICBsZXQgbWlzc2luZ0tleURldGVjdGVkID0gZmFsc2U7XG5cbiAgY29uc3QgYWxsb3dlZEtleXMgPSBbJ2ltYWdlJywgJ21lZGlhUXVlcmllcyddO1xuXG4gIGpzb25PYmplY3QuYnJlYWtwb2ludHMuZm9yRWFjaCgoYnJlYWtwb2ludCkgPT4ge1xuICAgIGNvbnN0IGJyZWFrcG9pbnRLZXlzID0gT2JqZWN0LmtleXMoYnJlYWtwb2ludCk7XG5cbiAgICBicmVha3BvaW50S2V5cy5mb3JFYWNoKChicmVha3BvaW50S2V5KSA9PiB7XG4gICAgICBpZiAoIWFsbG93ZWRLZXlzLmluY2x1ZGVzKGJyZWFrcG9pbnRLZXkpKSB7XG4gICAgICAgIHdyb25nS2V5RGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWxsb3dlZEtleXMuZm9yRWFjaCgoYWxsb3dlZEtleSkgPT4ge1xuICAgICAgaWYgKCFicmVha3BvaW50S2V5cy5pbmNsdWRlcyhhbGxvd2VkS2V5KSkge1xuICAgICAgICBtaXNzaW5nS2V5RGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBpZiAod3JvbmdLZXlEZXRlY3RlZCB8fCBtaXNzaW5nS2V5RGV0ZWN0ZWQpIHtcbiAgICBsb2dXYXJuaW5nPy4oKTtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4ganNvbk9iamVjdC5icmVha3BvaW50cztcbn07XG5cbmNvbnN0IGV2ZW50TGlzdGVuZXJPcHRpb25zID0ge1xuICBvbmNlOiB0cnVlLFxuICBwYXNzaXZlOiB0cnVlLFxufTtcblxuY29uc3QgcHhUb1JlbSA9IChweDogbnVtYmVyKTogbnVtYmVyID0+IHB4IC8gU2JiVHlwb1NjYWxlRGVmYXVsdDtcblxuY29uc3QgYnJlYWtwb2ludE1hcDogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHtcbiAgJ3NiYi1icmVha3BvaW50LXplcm8tbWluJzogcHhUb1JlbShTYmJCcmVha3BvaW50WmVyb01pbiksXG4gICdzYmItYnJlYWtwb2ludC16ZXJvLW1heCc6IHB4VG9SZW0oU2JiQnJlYWtwb2ludFplcm9NYXgpLFxuICAnc2JiLWJyZWFrcG9pbnQtbWljcm8tbWluJzogcHhUb1JlbShTYmJCcmVha3BvaW50TWljcm9NaW4pLFxuICAnc2JiLWJyZWFrcG9pbnQtbWljcm8tbWF4JzogcHhUb1JlbShTYmJCcmVha3BvaW50TWljcm9NYXgpLFxuICAnc2JiLWJyZWFrcG9pbnQtc21hbGwtbWluJzogcHhUb1JlbShTYmJCcmVha3BvaW50U21hbGxNaW4pLFxuICAnc2JiLWJyZWFrcG9pbnQtc21hbGwtbWF4JzogcHhUb1JlbShTYmJCcmVha3BvaW50U21hbGxNYXgpLFxuICAnc2JiLWJyZWFrcG9pbnQtbWVkaXVtLW1pbic6IHB4VG9SZW0oU2JiQnJlYWtwb2ludE1lZGl1bU1pbiksXG4gICdzYmItYnJlYWtwb2ludC1tZWRpdW0tbWF4JzogcHhUb1JlbShTYmJCcmVha3BvaW50TWVkaXVtTWF4KSxcbiAgJ3NiYi1icmVha3BvaW50LWxhcmdlLW1pbic6IHB4VG9SZW0oU2JiQnJlYWtwb2ludExhcmdlTWluKSxcbiAgJ3NiYi1icmVha3BvaW50LWxhcmdlLW1heCc6IHB4VG9SZW0oU2JiQnJlYWtwb2ludExhcmdlTWF4KSxcbiAgJ3NiYi1icmVha3BvaW50LXdpZGUtbWluJzogcHhUb1JlbShTYmJCcmVha3BvaW50V2lkZU1pbiksXG4gICdzYmItYnJlYWtwb2ludC13aWRlLW1heCc6IHB4VG9SZW0oU2JiQnJlYWtwb2ludFdpZGVNYXgpLFxuICAnc2JiLWJyZWFrcG9pbnQtdWx0cmEtbWluJzogcHhUb1JlbShTYmJCcmVha3BvaW50VWx0cmFNaW4pLFxuICAnc2JiLWJyZWFrcG9pbnQtdWx0cmEtbWF4JzogcHhUb1JlbShTYmJCcmVha3BvaW50VWx0cmFNYXgpLFxufTtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhbiBpbWFnZS5cbiAqXG4gKiBAZXZlbnQge0V2ZW50fSBsb2FkIC0gRW1pdHMgd2hlbiB0aGUgaW1hZ2UgaGFzIGJlZW4gbG9hZGVkLlxuICogQGV2ZW50IHtFdmVudH0gZXJyb3IgLSBFbWl0cyB3aGVuIHRoZSBpbWFnZSBsb2FkaW5nIGVuZGVkIGluIGFuIGVycm9yLlxuICogQGNzc3Byb3AgWy0tc2JiLWltYWdlLWFzcGVjdC1yYXRpbz1hdXRvXSAtIENhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIGBhc3BlY3RSYXRpb2AgcHJvcGVydHkuXG4gKiBUaGlzIHdheSB3ZSBjYW4gaGF2ZSwgZm9yIGV4YW1wbGUsIGFuIGltYWdlIGNvbXBvbmVudCB3aXRoIGFuIGFzcGVjdFxuICogcmF0aW8gb2YgNC8zIGluIHNtYWxsZXIgdmlld3BvcnRzIGFuZCAxNi85IGluIGxhcmdlciB2aWV3cG9ydHMuXG4gKiBAY3NzcHJvcCBbLS1zYmItaW1hZ2UtYm9yZGVyLXJhZGl1cz12YXIoLS1zYmItYm9yZGVyLXJhZGl1cy00eCldIC0gQ2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlXG4gKiBgYm9yZGVyUmFkaXVzYCBwcm9wZXJ0eSBpbiBjYXNlIG9mIGRpZmZlcmVudCB2YWx1ZXMgZm9yIGRpZmZlcmVudCB2aWV3cG9ydHMuXG4gKiBAY3NzcHJvcCBbLS1zYmItaW1hZ2Utb2JqZWN0LXBvc2l0aW9uXSAtIENhbiBiZSB1c2VkIHRvIHNldCB0aGUgb2JqZWN0LXBvc2l0aW9uIGNzcyBwcm9wZXJ0eSBvZiB0aGUgaW1hZ2UgaXRzZWxmIGlmIHRoZSBpbWFnZSBpdHNlbGYgaXMgY3JvcHBlZC5cbiAqIEBjc3Nwcm9wIFstLXNiYi1pbWFnZS1vYmplY3QtZml0PWNvdmVyXSAtIENhbiBiZSB1c2VkIHRvIHNldCB0aGUgb2JqZWN0LWZpdCBjc3MgcHJvcGVydHkgb2YgdGhlIGltYWdlIGl0c2VsZiBpZiB0aGUgaW1hZ2UgaXRzZWxmIGlzIGNyb3BwZWQuXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1pbWFnZScpXG5jbGFzcyBTYmJJbWFnZUVsZW1lbnQgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIGVycm9yOiAnZXJyb3InLFxuICAgIGxvYWQ6ICdsb2FkJyxcbiAgfSBhcyBjb25zdDtcblxuICBwcml2YXRlIF9jYXB0aW9uRWxlbWVudD86IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9saW5rc0luQ2FwdGlvbj86IE5vZGVMaXN0T2Y8SFRNTExpbmtFbGVtZW50PjtcbiAgcHJpdmF0ZSBfY29uZmlnID0ge1xuICAgIG5vblJldGluYVF1YWxpdHk6ICc0NScsXG4gICAgcmV0aW5hUXVhbGl0eTogJzIwJyxcbiAgfTtcblxuICAvKipcbiAgICogQW4gYWx0IHRleHQgaXMgbm90IGFsd2F5cyBuZWNlc3NhcnkgKGUuZy4gaW4gdGVhc2VyIGNhcmRzIHdoZW5cbiAgICogYWRkaXRpb25hbCBsaW5rIHRleHQgaXMgcHJvdmlkZWQpLiBJbiB0aGlzIGNhc2Ugd2UgY2FuIGxlYXZlXG4gICAqIHRoZSB2YWx1ZSBvZiB0aGUgYWx0IGF0dHJpYnV0ZSBibGFuaywgYnV0IHRoZSBhdHRyaWJ1dGUgaXRzZWxmXG4gICAqIHN0aWxsIG5lZWRzIHRvIGJlIHByZXNlbnQuIFRoYXQgd2F5IHdlIGNhbiBzaWduYWwgYXNzaXN0aXZlXG4gICAqIHRlY2hub2xvZ3ksIHRoYXQgdGhleSBjYW4gc2tpcCB0aGUgaW1hZ2UuXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KClcbiAgcHVibGljIGFjY2Vzc29yIGFsdDogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byBmYWxzZSwgd2Ugc2hvdyBhIGJsdXJyZWQgdmVyc2lvbiBvZiB0aGUgaW1hZ2UgYXNcbiAgICogcGxhY2Vob2xkZXIgYmVmb3JlIHRoZSBhY3R1YWwgaW1hZ2Ugc2hvd3MgdXAuIFRoaXMgd2lsbCBoZWxwXG4gICAqIHRvIGltcHJvdmUgdGhlIHBlcmNlaXZlZCBsb2FkaW5nIHBlcmZvcm1hbmNlLiBSZWFkIG1vcmUgYWJvdXRcbiAgICogdGhlIGlkZWEgb2YgbHFpcCBoZXJlOlxuICAgKiBodHRwczovL21lZGl1bS5jb20vQGltZ2l4L2xxaXAteW91ci1pbWFnZXMtZm9yLWZhc3QtbG9hZGluZy0yNTIzZDllZTRhNjJcbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdza2lwLWxxaXAnLCB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBza2lwTHFpcDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBIGNhcHRpb24gY2FuIHByb3ZpZGUgYWRkaXRpb25hbCBjb250ZXh0IHRvIHRoZSBpbWFnZSAoZS5nLlxuICAgKiBkZXNjcmlwdGlvbnMgYW5kIHRoZSBsaWtlKS5cbiAgICogTGlua3Mgd2lsbCBhdXRvbWF0aWNhbGx5IHJlY2VpdmUgdGFiaW5kZXg9LTEgaWYgaGlkZUZyb21TY3JlZW5yZWFkZXJcbiAgICogaXMgc2V0IHRvIHRydWUuIFRoYXQgd2F5IHRoZXkgd2lsbCBubyBsb25nZXIgYmVjb21lIGZvY3VzYWJsZS5cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgYWNjZXNzb3IgY2FwdGlvbjogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIElmIGEgY29weXJpZ2h0IHRleHQgaXMgcHJvdmlkZWQsIHdlIHdpbGwgYWRkIGl0IHRvIHRoZSBjYXB0aW9uXG4gICAqIGFuZCBjcmVhdGUgYSBzdHJ1Y3R1cmVkIGRhdGEganNvbi1sZCBibG9jayB3aXRoIHRoZSBjb3B5cmlnaHRcbiAgICogaW5mb3JtYXRpb24uXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KClcbiAgcHVibGljIGFjY2Vzc29yIGNvcHlyaWdodDogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIENvcHlyaWdodCBob2xkZXIgY2FuIGVpdGhlciBiZSBhbiBPcmdhbml6YXRpb24gb3IgYSBQZXJzb25cbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2NvcHlyaWdodC1ob2xkZXInIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBjb3B5cmlnaHRIb2xkZXI6ICdPcmdhbml6YXRpb24nIHwgJ1BlcnNvbicgPSAnT3JnYW5pemF0aW9uJztcblxuICAvKipcbiAgICogU2V0IHRoaXMgdG8gdHJ1ZSwgaWYgeW91IHdhbnQgdG8gcGFzcyBhIGN1c3RvbSBmb2NhbCBwb2ludFxuICAgKiBmb3IgdGhlIGltYWdlLiBTZWUgZnVsbCBkb2N1bWVudGF0aW9uIGhlcmU6XG4gICAqIGh0dHBzOi8vZG9jcy5pbWdpeC5jb20vYXBpcy9yZW5kZXJpbmcvZm9jYWxwb2ludC1jcm9wXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnY3VzdG9tLWZvY2FsLXBvaW50JywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgY3VzdG9tRm9jYWxQb2ludDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJZiB0aGUgbGF6eSBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZSwgdGhlIG1vZHVsZSB3aWxsIGF1dG9tYXRpY2FsbHlcbiAgICogY2hhbmdlIHRoZSBkZWNvZGluZyB0byBhc3luYywgb3RoZXJ3aXNlIHRoZSBkZWNvZGluZyBpcyBzZXQgdG8gYXV0b1xuICAgKiB3aGljaCBsZWF2ZXMgdGhlIGhhbmRsaW5nIHVwIHRvIHRoZSBicm93c2VyLiBSZWFkIG1vcmUgYWJvdXQgdGhlXG4gICAqIGRlY29kaW5nIGF0dHJpYnV0ZSBoZXJlOlxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEltYWdlRWxlbWVudC9kZWNvZGluZ1xuICAgKi9cbiAgQHByb3BlcnR5KCkgcHVibGljIGFjY2Vzc29yIGRlY29kaW5nOiAnc3luYycgfCAnYXN5bmMnIHwgJ2F1dG8nID0gJ2F1dG8nO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhpcyB0byB0cnVlLCB0byByZWNlaXZlIHZpc3VhbCBndWlkYW5jZSB3aGVyZSB0aGUgY3VzdG9tIGZvY2FsXG4gICAqIHBvaW50IGlzIGN1cnJlbnRseSBzZXQuXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnZm9jYWwtcG9pbnQtZGVidWcnLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBmb2NhbFBvaW50RGVidWc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogUGFzcyBpbiBhIGZsb2F0aW5nIG51bWJlciBiZXR3ZWVuIDAgKGxlZnQpIGFuZCAxIChyaWdodCkuXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnZm9jYWwtcG9pbnQteCcsIHR5cGU6IE51bWJlciB9KVxuICBwdWJsaWMgYWNjZXNzb3IgZm9jYWxQb2ludFg6IG51bWJlciA9IDE7XG5cbiAgLyoqXG4gICAqIFBhc3MgaW4gYSBmbG9hdGluZyBudW1iZXIgYmV0d2VlbiAwICh0b3ApIGFuZCAxIChib3R0b20pLlxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2ZvY2FsLXBvaW50LXknLCB0eXBlOiBOdW1iZXIgfSlcbiAgcHVibGljIGFjY2Vzc29yIGZvY2FsUG9pbnRZOiBudW1iZXIgPSAxO1xuXG4gIC8qKlxuICAgKiBSaWdodCBub3cgdGhlIG1vZHVsZSBpcyBoZWF2aWx5IGNvdXBsZWQgd2l0aCB0aGUgaW1hZ2UgZGVsaXZlcnlcbiAgICogc2VydmljZSBpbWdpeCBhbmQgZGVwZW5kcyBvbiB0aGUgb3JpZ2luYWwgZmlsZXMgYmVpbmcgc3RvcmVkXG4gICAqIGluc2lkZSBBRU0uIFlvdSBjYW4gcGFzcyBpbiBhbnkgaHR0cHM6Ly9jZG4uaW1nLnNiYi5jaCBpbWdcbiAgICogc3JjIGFkZHJlc3MgeW91IGZpbmQgb24gc2JiLmNoIHRvIHBsYXkgYXJvdW5kIHdpdGggaXQuIEp1c3RcbiAgICogc3RyaXAgdGhlIHVybCBwYXJhbWV0ZXJzIGFuZCBwYXN0ZSBpbiB0aGUgcGxhaW4gZmlsZSBhZGRyZXNzLlxuICAgKiBJZiB5b3Ugd2FudCB0byBrbm93IGhvdyB0byBiZXN0IHdvcmsgd2l0aCB0aGlzIG1vZHVsZSB3aXRoXG4gICAqIGltYWdlcyBjb21pbmcgZnJvbSBhIGRpZmZlcmVudCBzb3VyY2UsIHBsZWFzZSBjb250YWN0IHRoZVxuICAgKiBMWU5FIENvcmUgVGVhbS5cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdpbWFnZS1zcmMnIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBpbWFnZVNyYzogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbXBvcnRhbmNlIGF0dHJpYnV0ZSBpcyBmYWlybHkgbmV3IGF0dHJpYnV0ZSB3aGljaCBzaG91bGRcbiAgICogaGVscCB0aGUgYnJvd3NlciBkZWNpZGUgd2hpY2ggcmVzb3VyY2VzIGl0IHNob3VsZCBwcmlvcml0aXNlXG4gICAqIGR1cmluZyBwYWdlIGxvYWQuIFdlIHdpbGwgc2V0IHRoZSBhdHRyaWJ1dGUgdmFsdWUgYmFzZWQgb24gdGhlXG4gICAqIHZhbHVlLCB3ZSByZWNlaXZlIGluIHRoZSBsb2FkaW5nIGF0dHJpYnV0ZS4gJ2VhZ2VyJywgd2hpY2ggd2UgdXNlXG4gICAqIGZvciB0aGUgbGFyZ2VzdCBpbWFnZSB3aXRoaW4gdGhlIGluaXRpYWwgdmlld3BvcnQsIHdpbGwgc2V0IHRoZVxuICAgKiBhdHRyaWJ1dGUgdmFsdWUgdG8gJ2hpZ2gnLiAnbGF6eScsIHdoaWNoIHdlIHVzZSBmb3IgaW1hZ2VzIGJlbG93XG4gICAqIHRoZSBmb2xkLCB3aWxsIHNldCB0aGUgYXR0cmlidXRlIHZhbHVlIHRvICdsb3cnLlxuICAgKi9cbiAgQHByb3BlcnR5KCkgcHVibGljIGFjY2Vzc29yIGltcG9ydGFuY2U6ICdhdXRvJyB8ICdoaWdoJyB8ICdsb3cnID0gJ2hpZ2gnO1xuXG4gIC8qKlxuICAgKiBXaXRoIHRoZSBzdXBwb3J0IG9mIG5hdGl2ZSBpbWFnZSBsYXp5IGxvYWRpbmcsIHdlIGNhbiBub3dcbiAgICogZGVjaWRlIHdoZXRoZXIgd2Ugd2FudCB0byBsb2FkIHRoZSBpbWFnZSBpbW1lZGlhdGVseSBvciBvbmx5XG4gICAqIG9uY2UgaXQgaXMgY2xvc2UgdG8gdGhlIHZpc2libGUgdmlld3BvcnQuIFRoZSB2YWx1ZSBlYWdlciBpc1xuICAgKiBiZXN0IHVzZWQgZm9yIGltYWdlcyB3aXRoaW4gdGhlIGluaXRpYWwgdmlld3BvcnQuIFdlIHdhbnQgdG9cbiAgICogbG9hZCB0aGVzZSBpbWFnZXMgYXMgZmFzdCBhcyBwb3NzaWJsZSB0byBpbXByb3ZlIHRoZSBDb3JlIFdlYlxuICAgKiBWaXRhbHMgdmFsdWVzLiBsYXp5IG9uIHRoZSBvdGhlciBoYW5kIHdvcmtzIGJlc3QgZm9yIGltYWdlc1xuICAgKiB3aGljaCBhcmUgZnVydGhlciBkb3duIHRoZSBwYWdlIG9yIGludmlzaWJsZSBkdXJpbmcgdGhlIGxvYWRpbmdcbiAgICogb2YgdGhlIGluaXRpYWwgdmlld3BvcnQuXG4gICAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgYWNjZXNzb3IgbG9hZGluZzogJ2VhZ2VyJyB8ICdsYXp5JyA9ICdlYWdlcic7XG5cbiAgLyoqXG4gICAqIFdpdGggcGVyZm9ybWFuY2UubWFyayB5b3UgY2FuIGxvZyBhIHRpbWVzdGFtcCBhc3NvY2lhdGVkIHdpdGhcbiAgICogdGhlIG5hbWUgeW91IGRlZmluZSBpbiBwZXJmb3JtYW5jZU1hcmsgd2hlbiBhIGNlcnRhaW4gZXZlbnQgaXNcbiAgICogaGFwcGVuaW5nLiBJbiBvdXIgY2FzZSB3ZSB3aWxsIGxvZyB0aGUgcGVyZm9ybWFuY2UubWFyayBpbnRvXG4gICAqIHRoZSBQZXJmb3JtYW5jZUVudHJ5IEFQSSBvbmNlIHRoZSBpbWFnZSBpcyBmdWxseSBsb2FkZWQuXG4gICAqIFBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdG9vbHMgbGlrZSBTcGVlZEN1cnZlIG9yIExpZ2h0aG91c2UgYXJlXG4gICAqIHRoZW4gYWJsZSB0byBncmFiIHRoZXNlIGVudHJpZXMgZnJvbSB0aGUgUGVyZm9ybWFuY2VFbnRyeSBBUElcbiAgICogYW5kIGdpdmUgdXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhbmQgaW5zaWdodHMgYWJvdXQgb3VyIHBhZ2VcbiAgICogbG9hZGluZyBiZWhhdmlvdXIuIFdlIGFyZSB0aGVuIGFsc28gYWJsZSB0byBtb25pdG9yIHRoZXNlXG4gICAqIHZhbHVlcyBvdmVyIGEgbG9uZyBwZXJpb2QgdG8gc2VlIGlmIG91ciBwZXJmb3JtYW5jZVxuICAgKiBpbmNyZWFzZXMgb3IgZGVjcmVhc2VzIG92ZXIgdGltZS4gQmVzdCB0byB1c2UgbG93ZXJjYXNlIHN0cmluZ3NcbiAgICogaGVyZSwgc2VwYXJhdGUgd29yZHMgd2l0aCB1bmRlcnNjb3JlcyBvciBkYXNoZXMuXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAncGVyZm9ybWFuY2UtbWFyaycgfSlcbiAgcHVibGljIGFjY2Vzc29yIHBlcmZvcm1hbmNlTWFyazogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIFdpdGggdGhlIHBpY3R1cmVTaXplc0NvbmZpZyBvYmplY3QsIHlvdSBjYW4gcGFzcyBpbiBpbmZvcm1hdGlvblxuICAgKiBpbnRvIGltYWdlIGFib3V0IHdoYXQga2luZCBvZiBzb3VyY2UgZWxlbWVudHMgc2hvdWxkIGdldFxuICAgKiByZW5kZXJlZC4gbWVkaWFRdWVyaWVzIGFjY2VwdHMgbXVsdGlwbGUgTWVkaWEgUXVlcnkgZW50cmllc1xuICAgKiB3aGljaCBjYW4gZ2V0IGNvbWJpbmVkIGJ5IGRlZmluaW5nIGEgY29uZGl0aW9uT3BlcmF0b3IuXG4gICAqIFR5cGUgaXM6IHN0cmluZ2lmaWVkIEludGVyZmFjZUltYWdlQXR0cmlidXRlc1NpemVzQ29uZmlnLU9iamVjdFxuICAgKiBBbiBleGFtcGxlIGNvdWxkIGxvb2sgbGlrZSB0aGlzOlxuICAgKiB7XG4gICAqICAgIFwiYnJlYWtwb2ludHNcIjogW1xuICAgKiAgICAgIHtcbiAgICogICAgICAgIFwiaW1hZ2VcIjoge1xuICAgKiAgICAgICAgICBcImhlaWdodFwiOiBcIjY3NVwiLFxuICAgKiAgICAgICAgICBcIndpZHRoXCI6IFwiMTIwMFwiXG4gICAqICAgICAgICB9LFxuICAgKiAgICAgICAgXCJtZWRpYVF1ZXJpZXNcIjogW1xuICAgKiAgICAgICAgICB7XG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlXCI6IFwibWluLXdpZHRoXCIsXG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlVmFsdWVcIjoge1xuICAgKiAgICAgICAgICAgICAgXCJseW5lRGVzaWduVG9rZW5cIjogdHJ1ZSxcbiAgICogICAgICAgICAgICAgIFwidmFsdWVcIjogXCJzYmItYnJlYWtwb2ludC1sYXJnZS1taW5cIlxuICAgKiAgICAgICAgICAgIH0sXG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25PcGVyYXRvclwiOiBmYWxzZVxuICAgKiAgICAgICAgICB9XG4gICAqICAgICAgICBdXG4gICAqICAgICAgfSxcbiAgICogICAgICB7XG4gICAqICAgICAgICBcImltYWdlXCI6IHtcbiAgICogICAgICAgICAgXCJoZWlnaHRcIjogXCI1NDlcIixcbiAgICogICAgICAgICAgXCJ3aWR0aFwiOiBcIjk3NlwiXG4gICAqICAgICAgICB9LFxuICAgKiAgICAgICAgXCJtZWRpYVF1ZXJpZXNcIjogW1xuICAgKiAgICAgICAgICB7XG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlXCI6IFwibWluLXdpZHRoXCIsXG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlVmFsdWVcIjoge1xuICAgKiAgICAgICAgICAgICAgXCJseW5lRGVzaWduVG9rZW5cIjogdHJ1ZSxcbiAgICogICAgICAgICAgICAgIFwidmFsdWVcIjogXCJzYmItYnJlYWtwb2ludC1zbWFsbC1taW5cIlxuICAgKiAgICAgICAgICAgIH0sXG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25PcGVyYXRvclwiOiBmYWxzZVxuICAgKiAgICAgICAgICB9XG4gICAqICAgICAgICBdXG4gICAqICAgICAgfSxcbiAgICogICAgICB7XG4gICAqICAgICAgICBcImltYWdlXCI6IHtcbiAgICogICAgICAgICAgXCJoZWlnaHRcIjogXCIxODBcIixcbiAgICogICAgICAgICAgXCJ3aWR0aFwiOiBcIjMyMFwiXG4gICAqICAgICAgICB9LFxuICAgKiAgICAgICAgXCJtZWRpYVF1ZXJpZXNcIjogW1xuICAgKiAgICAgICAgICB7XG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlXCI6IFwibWF4LXdpZHRoXCIsXG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlVmFsdWVcIjoge1xuICAgKiAgICAgICAgICAgICAgXCJseW5lRGVzaWduVG9rZW5cIjogdHJ1ZSxcbiAgICogICAgICAgICAgICAgIFwidmFsdWVcIjogXCJzYmItYnJlYWtwb2ludC1taWNyby1tYXhcIlxuICAgKiAgICAgICAgICAgIH0sXG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25PcGVyYXRvclwiOiBcImFuZFwiXG4gICAqICAgICAgICAgIH0sXG4gICAqICAgICAgICAgIHtcbiAgICogICAgICAgICAgICBcImNvbmRpdGlvbkZlYXR1cmVcIjogXCJvcmllbnRhdGlvblwiLFxuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVZhbHVlXCI6IHtcbiAgICogICAgICAgICAgICAgIFwibHluZURlc2lnblRva2VuXCI6IGZhbHNlLFxuICAgKiAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcImxhbmRzY2FwZVwiXG4gICAqICAgICAgICAgICAgfSxcbiAgICogICAgICAgICAgICBcImNvbmRpdGlvbk9wZXJhdG9yXCI6IGZhbHNlXG4gICAqICAgICAgICAgIH1cbiAgICogICAgICAgIF1cbiAgICogICAgICB9XG4gICAqICAgIF1cbiAgICogIH1cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdwaWN0dXJlLXNpemVzLWNvbmZpZycgfSlcbiAgcHVibGljIGFjY2Vzc29yIHBpY3R1cmVTaXplc0NvbmZpZzogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIEJvcmRlciByYWRpdXMgb2YgdGhlIGltYWdlLiBDaG9vc2UgYmV0d2VlbiBhIGRlZmF1bHQgcmFkaXVzLCBubyByYWRpdXMgYW5kIGEgY29tcGxldGVseSByb3VuZCBpbWFnZS5cbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2JvcmRlci1yYWRpdXMnLCByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBhY2Nlc3NvciBib3JkZXJSYWRpdXM6XG4gICAgfCAnZGVmYXVsdCdcbiAgICB8ICdub25lJ1xuICAgIHwgJ3JvdW5kJyA9ICdkZWZhdWx0JztcblxuICAvKipcbiAgICogU2V0IGFuIGFzcGVjdCByYXRpb1xuICAgKiBkZWZhdWx0IGlzICcxNi05JyAoMTYvOSlcbiAgICogb3RoZXIgdmFsdWVzOiAnZnJlZScsICcxLTEnLCAnMS0yJywgJzItMScsICcyLTMnLCAnMy0yJywgJzMtNCcsICc0LTMnLCAnNC01JywgJzUtNCcsICc5LTE2J1xuICAgKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYXNwZWN0LXJhdGlvJywgcmVmbGVjdDogdHJ1ZSB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYXNwZWN0UmF0aW86XG4gICAgfCAnZnJlZSdcbiAgICB8ICcxLTEnXG4gICAgfCAnMS0yJ1xuICAgIHwgJzItMSdcbiAgICB8ICcyLTMnXG4gICAgfCAnMy0yJ1xuICAgIHwgJzMtNCdcbiAgICB8ICc0LTMnXG4gICAgfCAnNC01J1xuICAgIHwgJzUtNCdcbiAgICB8ICc5LTE2J1xuICAgIHwgJzE2LTknID0gJzE2LTknO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBpbWFnZSBpcyBmaW5pc2hlZCBsb2FkaW5nIG9yIGZhaWxlZCB0byBsb2FkLiAqL1xuICBwdWJsaWMgZ2V0IGNvbXBsZXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3I/LjxIVE1MSW1hZ2VFbGVtZW50PignLnNiYi1pbWFnZV9faW1nJyk/LmNvbXBsZXRlID8/IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyBuZXN0ZWQgaW4gYW4gYDxzYmItdGVhc2VyLWhlcm8+YCBlbGVtZW50IG9uIGluIGFuIGA8c2JiLXRlYXNlci1wYWlkPmAgZWxlbWVudC5cbiAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZShcbiAgICAgICdkYXRhLXRlYXNlcicsXG4gICAgICAhIWhvc3RDb250ZXh0KCdzYmItdGVhc2VyLWhlcm8nLCB0aGlzKSB8fCAhIXRoaXMuY2xvc2VzdCgnc2JiLXRlYXNlci1wYWlkJyksXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKCF0aGlzLl9jYXB0aW9uRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xpbmtzSW5DYXB0aW9uID0gdGhpcy5fY2FwdGlvbkVsZW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MTGlua0VsZW1lbnQ+KCdhJyk7XG5cbiAgICBpZiAoIXRoaXMuX2xpbmtzSW5DYXB0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fYWRkRm9jdXNBYmlsaXR5VG9MaW5rc0luQ2FwdGlvbigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgLy8gV2UgbmVlZCB0byB3YWl0IHVudGlsIHRoZSB1cGRhdGUgaXMgY29tcGxldGUgdG8gY2hlY2sgd2hldGhlciB0aGUgaW1hZ2UgaGFzIGFscmVhZHkgYmVlbiBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlO1xuICAgIGlmICh0aGlzLmNvbXBsZXRlKSB7XG4gICAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1sb2FkZWQnLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9sb2dQZXJmb3JtYW5jZU1hcmtzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBlcmZvcm1hbmNlTWFyaykge1xuICAgICAgcGVyZm9ybWFuY2UuY2xlYXJNYXJrcyh0aGlzLnBlcmZvcm1hbmNlTWFyayk7XG4gICAgICBwZXJmb3JtYW5jZS5tYXJrKHRoaXMucGVyZm9ybWFuY2VNYXJrKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9tYXRjaE1lZGlhUXVlcnlEZXNpZ25Ub2tlbihicmVha3BvaW50U2l6ZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsdWUgPSBicmVha3BvaW50TWFwW2JyZWFrcG9pbnRTaXplTmFtZV07XG4gICAgcmV0dXJuIHZhbHVlID8gYCR7dmFsdWV9cmVtYCA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWRkRm9jdXNBYmlsaXR5VG9MaW5rc0luQ2FwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9saW5rc0luQ2FwdGlvbj8uZm9yRWFjaCgobGluaykgPT4ge1xuICAgICAgbGluay5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9wcmVwYXJlSW1hZ2VVcmwoYmFzZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkLCBscXVpcCA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICBpZiAoIWJhc2VVcmwgfHwgYmFzZVVybCA9PT0gJycpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBDcmVhdGluZyBhbiBVUkwgd2l0aG91dCBhIHNjaGVtYSB3aWxsIGZhaWwsIGJ1dCBpcyBhIHZhbGlkIGlucHV0IGZvciBiYXNlVXJsLlxuICAgIC8vIGUuZy4gaW1hZ2Utc3JjIGNhbiBiZSBodHRwczovL2V4YW1wbGUuY29tL215LWltYWdlLnBuZyBvciAvbXktaW1hZ2UucG5nXG4gICAgY29uc3QgaXNGdWxseVF1YWxpZmllZFVybCA9ICEhYmFzZVVybC5tYXRjaCgvXlxcdys6XFwvXFwvLyk7XG4gICAgY29uc3QgaW1hZ2VVcmxPYmogPSBpc0Z1bGx5UXVhbGlmaWVkVXJsID8gbmV3IFVSTChiYXNlVXJsKSA6IG5ldyBVUkwoYGh0dHA6Ly9ub29wLyR7YmFzZVVybH1gKTtcblxuICAgIGlmIChscXVpcCkge1xuICAgICAgLy8gYmx1ciBhbmQgc2l6ZTogP2JsdXI9MTAwJnc9MTAwJmg9NTZcbiAgICAgIGltYWdlVXJsT2JqLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2JsdXInLCAnMTAwJyk7XG4gICAgICBpbWFnZVVybE9iai5zZWFyY2hQYXJhbXMuYXBwZW5kKCd3JywgJzEwMCcpO1xuICAgICAgaW1hZ2VVcmxPYmouc2VhcmNoUGFyYW1zLmFwcGVuZCgnaCcsICc1NicpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDRE4gSW5mb3JtYXRpb246IGh0dHBzOi8vZG9jcy5pbWdpeC5jb20vYXBpcy9yZW5kZXJpbmdcbiAgICAgIC8vIHBhcmFtLmF1dG86ID9hdXRvPWZvcm1hdCxjb21wcmVzcyxjcz10aW55c3JnYlxuICAgICAgaW1hZ2VVcmxPYmouc2VhcmNoUGFyYW1zLmFwcGVuZCgnYXV0bycsICdmb3JtYXQsY29tcHJlc3MsY3M9dGlueXNyZ2InKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jdXN0b21Gb2NhbFBvaW50KSB7XG4gICAgICAvLyBjcm9wOiBgJmZpdD1jcm9wJmNyb3A9Zm9jYWxwb2ludCZmcC14PSR7dGhpcy5mb2NhbFBvaW50WH0mZnAteT0ke3RoaXMuZm9jYWxQb2ludFl9JmZwLXo9MWAsXG4gICAgICBpbWFnZVVybE9iai5zZWFyY2hQYXJhbXMuYXBwZW5kKCdmaXQnLCAnY3JvcCcpO1xuICAgICAgaW1hZ2VVcmxPYmouc2VhcmNoUGFyYW1zLmFwcGVuZCgnY3JvcCcsICdmb2NhbHBvaW50Jyk7XG4gICAgICBpbWFnZVVybE9iai5zZWFyY2hQYXJhbXMuYXBwZW5kKCdmcC14JywgdGhpcy5mb2NhbFBvaW50WC50b1N0cmluZygxMCkpO1xuICAgICAgaW1hZ2VVcmxPYmouc2VhcmNoUGFyYW1zLmFwcGVuZCgnZnAteScsIHRoaXMuZm9jYWxQb2ludFkudG9TdHJpbmcoMTApKTtcbiAgICAgIGltYWdlVXJsT2JqLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2ZwLXonLCAnMScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZvY2FsUG9pbnREZWJ1Zykge1xuICAgICAgLy8gZm9jYWxQb2ludERlYnVnOiAnJmZwLWRlYnVnPXRydWUnXG4gICAgICBpbWFnZVVybE9iai5zZWFyY2hQYXJhbXMuYXBwZW5kKCdmcC1kZWJ1ZycsICd0cnVlJyk7XG4gICAgfVxuXG4gICAgLy8gSW4gY2FzZSBvZiBcIm5vb3BcIiBob3N0LCB3ZSBkb24ndCByZXR1cm4gdGhlIGhvc3QgYW5kIG11c3QgcmVtb3ZlIHRoZVxuICAgIC8vIHN0YXJ0aW5nIGAvYCBvZiB0aGUgcGF0aG5hbWUuXG4gICAgcmV0dXJuIGlzRnVsbHlRdWFsaWZpZWRVcmxcbiAgICAgID8gaW1hZ2VVcmxPYmouaHJlZlxuICAgICAgOiBpbWFnZVVybE9iai5wYXRobmFtZS5zdWJzdHJpbmcoMSkgKyBpbWFnZVVybE9iai5zZWFyY2g7XG4gIH1cblxuICBwcml2YXRlIF9wcmVwYXJlUGljdHVyZVNpemVDb25maWdzKCk6IEludGVyZmFjZUltYWdlQXR0cmlidXRlc1NpemVzQ29uZmlnQnJlYWtwb2ludFtdIHtcbiAgICBsZXQgcGljdHVyZVNpemVzQ29uZmlnO1xuXG4gICAgaWYgKHRoaXMucGljdHVyZVNpemVzQ29uZmlnKSB7XG4gICAgICBwaWN0dXJlU2l6ZXNDb25maWcgPSB0aGlzLnBpY3R1cmVTaXplc0NvbmZpZztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmYXVsdCBjb25maWdcbiAgICAgIHBpY3R1cmVTaXplc0NvbmZpZyA9IGB7XG4gICAgICAgIFwiYnJlYWtwb2ludHNcIjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiaW1hZ2VcIjoge1xuICAgICAgICAgICAgICBcImhlaWdodFwiOiA2NzUsXG4gICAgICAgICAgICAgIFwid2lkdGhcIjogMTIwMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwibWVkaWFRdWVyaWVzXCI6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVwiOiBcIm1pbi13aWR0aFwiLFxuICAgICAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVZhbHVlXCI6IHtcbiAgICAgICAgICAgICAgICAgIFwibHluZURlc2lnblRva2VuXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICBcInZhbHVlXCI6IFwic2JiLWJyZWFrcG9pbnQtbGFyZ2UtbWluXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiY29uZGl0aW9uT3BlcmF0b3JcIjogZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJpbWFnZVwiOiB7XG4gICAgICAgICAgICAgIFwiaGVpZ2h0XCI6IDU0OSxcbiAgICAgICAgICAgICAgXCJ3aWR0aFwiOiA5NzZcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIm1lZGlhUXVlcmllc1wiOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBcImNvbmRpdGlvbkZlYXR1cmVcIjogXCJtaW4td2lkdGhcIixcbiAgICAgICAgICAgICAgICBcImNvbmRpdGlvbkZlYXR1cmVWYWx1ZVwiOiB7XG4gICAgICAgICAgICAgICAgICBcImx5bmVEZXNpZ25Ub2tlblwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcInNiYi1icmVha3BvaW50LW1pY3JvLW1pblwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcImNvbmRpdGlvbk9wZXJhdG9yXCI6IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiaW1hZ2VcIjoge1xuICAgICAgICAgICAgICBcImhlaWdodFwiOiAxODAsXG4gICAgICAgICAgICAgIFwid2lkdGhcIjogMzIwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJtZWRpYVF1ZXJpZXNcIjogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlXCI6IFwibWF4LXdpZHRoXCIsXG4gICAgICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlVmFsdWVcIjoge1xuICAgICAgICAgICAgICAgICAgXCJseW5lRGVzaWduVG9rZW5cIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIFwidmFsdWVcIjogXCJzYmItYnJlYWtwb2ludC16ZXJvLW1heFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcImNvbmRpdGlvbk9wZXJhdG9yXCI6IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1gO1xuICAgIH1cblxuICAgIHJldHVybiBpbWFnZUhlbHBlckdldEJyZWFrcG9pbnRzKHBpY3R1cmVTaXplc0NvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVNZWRpYVF1ZXJ5U3RyaW5nKFxuICAgIG1lZGlhUXVlcmllczogSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWdNZWRpYVF1ZXJ5W10sXG4gICk6IHN0cmluZyB7XG4gICAgbGV0IG1lZGlhUXVlcnkgPSAnJztcblxuICAgIG1lZGlhUXVlcmllcy5mb3JFYWNoKChtcSkgPT4ge1xuICAgICAgY29uc3QgbXFDb25kaXRpb24gPSBtcS5jb25kaXRpb25GZWF0dXJlO1xuICAgICAgbGV0IG1xVmFsdWU7XG5cbiAgICAgIGlmIChtcS5jb25kaXRpb25GZWF0dXJlVmFsdWUubHluZURlc2lnblRva2VuKSB7XG4gICAgICAgIG1xVmFsdWUgPSB0aGlzLl9tYXRjaE1lZGlhUXVlcnlEZXNpZ25Ub2tlbihtcS5jb25kaXRpb25GZWF0dXJlVmFsdWUudmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXFWYWx1ZSA9IG1xLmNvbmRpdGlvbkZlYXR1cmVWYWx1ZS52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbXFDb21iaW5lciA9IG1xLmNvbmRpdGlvbk9wZXJhdG9yID8gYCAke21xLmNvbmRpdGlvbk9wZXJhdG9yfSBgIDogJyc7XG5cbiAgICAgIG1lZGlhUXVlcnkgKz0gYCgke21xQ29uZGl0aW9ufTogJHttcVZhbHVlfSkke21xQ29tYmluZXJ9YDtcbiAgICB9KTtcblxuICAgIHJldHVybiBtZWRpYVF1ZXJ5O1xuICB9XG5cbiAgQGV2ZW50T3B0aW9ucyhldmVudExpc3RlbmVyT3B0aW9ucylcbiAgcHJpdmF0ZSBfaW1hZ2VMb2FkZWQoKTogdm9pZCB7XG4gICAgdGhpcy5fbG9nUGVyZm9ybWFuY2VNYXJrcygpO1xuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWxvYWRlZCcsIHRydWUpO1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2xvYWQnKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBsZXQgeyBjYXB0aW9uIH0gPSB0aGlzO1xuICAgIGxldCBzY2hlbWFEYXRhID0gJyc7XG5cbiAgICBjb25zdCBpbWFnZVVybExRSVAgPSB0aGlzLl9wcmVwYXJlSW1hZ2VVcmwodGhpcy5pbWFnZVNyYywgdHJ1ZSk7XG4gICAgY29uc3QgaW1hZ2VVcmxXaXRoUGFyYW1zID0gdGhpcy5fcHJlcGFyZUltYWdlVXJsKHRoaXMuaW1hZ2VTcmMsIGZhbHNlKTtcblxuICAgIGlmICh0aGlzLmxvYWRpbmcgPT09ICdsYXp5Jykge1xuICAgICAgdGhpcy5kZWNvZGluZyA9ICdhc3luYyc7XG4gICAgICB0aGlzLmltcG9ydGFuY2UgPSAnbG93JztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb3B5cmlnaHQpIHtcbiAgICAgIGNhcHRpb24gPSBgJHt0aGlzLmNhcHRpb259IMKpJHt0aGlzLmNvcHlyaWdodH1gO1xuICAgICAgc2NoZW1hRGF0YSA9IGB7XG4gICAgICAgIFwiQGNvbnRleHRcIjogXCJodHRwczovL3NjaGVtYS5vcmdcIixcbiAgICAgICAgXCJAdHlwZVwiOiBcIlBob3RvZ3JhcGhcIixcbiAgICAgICAgXCJpbWFnZVwiOiBcIiR7dGhpcy5pbWFnZVNyY31cIixcbiAgICAgICAgXCJjb3B5cmlnaHRIb2xkZXJcIjoge1xuICAgICAgICAgIFwiQHR5cGVcIjogXCIke3RoaXMuY29weXJpZ2h0SG9sZGVyfVwiLFxuICAgICAgICAgIFwibmFtZVwiOiBcIiR7dGhpcy5jb3B5cmlnaHR9XCJcbiAgICAgICAgfVxuICAgICAgfWA7XG4gICAgfVxuXG4gICAgY29uc3QgcGljdHVyZVNpemVDb25maWdzID0gdGhpcy5fcHJlcGFyZVBpY3R1cmVTaXplQ29uZmlncygpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFsdCBhdHRyaWJ1dGUgc2hvdWxkIGFsd2F5cyBiZSBwcmVzZW50IGZvciB0aGUgaW1nIGVsZW1lbnQuXG4gICAgICogSWYgaXQgaGFzIGFuIGVtcHR5IHN0cmluZyBhcyBpdHMgdmFsdWUsIGl0IGlzIHNpbXBseSBpZ25vcmVkXG4gICAgICogYnkgYXNzaXN0aXZlIHRlY2hub2xvZ2llcy4gSWYgd2UgbGVhdmUgaXQgb3V0IGNvbXBsZXRlbHksXG4gICAgICogdGhleSBtaWdodCB0cnkgdG8gaW50ZXJwcmV0IHRoZSBpbWcgZWxlbWVudC5cbiAgICAgKi9cbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxmaWd1cmUgY2xhc3M9XCJzYmItaW1hZ2VfX2ZpZ3VyZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWltYWdlX193cmFwcGVyXCI+XG4gICAgICAgICAgJHshdGhpcy5za2lwTHFpcFxuICAgICAgICAgICAgPyBodG1sYDxpbWdcbiAgICAgICAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2JiLWltYWdlX19ibHVycmVkXCJcbiAgICAgICAgICAgICAgICBzcmM9JHtpbWFnZVVybExRSVB9XG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAwXCJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCI1NjJcIlxuICAgICAgICAgICAgICAgIGxvYWRpbmc9JHt0aGlzLmxvYWRpbmcgPz8gbm90aGluZ31cbiAgICAgICAgICAgICAgICBkZWNvZGluZz0ke3RoaXMuZGVjb2RpbmcgPz8gbm90aGluZ31cbiAgICAgICAgICAgICAgLz5gXG4gICAgICAgICAgICA6IG5vdGhpbmd9XG5cbiAgICAgICAgICA8cGljdHVyZT5cbiAgICAgICAgICAgIDwhLS0gcmVuZGVyIHBpY3R1cmUgZWxlbWVudCBzb3VyY2VzIC0tPlxuICAgICAgICAgICAgJHtwaWN0dXJlU2l6ZUNvbmZpZ3MubWFwKChjb25maWcpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaW1hZ2VIZWlnaHQgPSBjb25maWcuaW1hZ2UuaGVpZ2h0O1xuICAgICAgICAgICAgICBjb25zdCBpbWFnZVdpZHRoID0gY29uZmlnLmltYWdlLndpZHRoO1xuICAgICAgICAgICAgICBjb25zdCBtZWRpYVF1ZXJ5ID0gdGhpcy5fY3JlYXRlTWVkaWFRdWVyeVN0cmluZyhjb25maWcubWVkaWFRdWVyaWVzKTtcbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBodG1sYCA8c291cmNlXG4gICAgICAgICAgICAgICAgICBtZWRpYT0ke2Ake21lZGlhUXVlcnl9YH1cbiAgICAgICAgICAgICAgICAgIHNpemVzPSR7YCR7aW1hZ2VXaWR0aH1weGB9XG4gICAgICAgICAgICAgICAgICBzcmNzZXQ9JHtcbiAgICAgICAgICAgICAgICAgICAgYCR7aW1hZ2VVcmxXaXRoUGFyYW1zfSZ3PSR7aW1hZ2VXaWR0aH0maD0ke2ltYWdlSGVpZ2h0fSZxPSR7dGhpcy5fY29uZmlnLm5vblJldGluYVF1YWxpdHl9ICR7aW1hZ2VXaWR0aH13LCBgICtcbiAgICAgICAgICAgICAgICAgICAgYCR7aW1hZ2VVcmxXaXRoUGFyYW1zfSZ3PSR7aW1hZ2VXaWR0aCAqIDJ9Jmg9JHtpbWFnZUhlaWdodCAqIDJ9JnE9JHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb25maWcucmV0aW5hUXVhbGl0eVxuICAgICAgICAgICAgICAgICAgICB9ICR7aW1hZ2VXaWR0aCAqIDJ9d2BcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA+PC9zb3VyY2U+YCxcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICBhbHQ9JHt0aGlzLmFsdCB8fCAnJ31cbiAgICAgICAgICAgICAgQGxvYWQ9JHt0aGlzLl9pbWFnZUxvYWRlZH1cbiAgICAgICAgICAgICAgQGVycm9yPSR7KCkgPT4gdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnZXJyb3InKSl9XG4gICAgICAgICAgICAgIGNsYXNzPVwic2JiLWltYWdlX19pbWdcIlxuICAgICAgICAgICAgICBzcmM9JHt0aGlzLmltYWdlU3JjIX1cbiAgICAgICAgICAgICAgd2lkdGg9XCIxMDAwXCJcbiAgICAgICAgICAgICAgaGVpZ2h0PVwiNTYyXCJcbiAgICAgICAgICAgICAgbG9hZGluZz0ke3RoaXMubG9hZGluZyA/PyBub3RoaW5nfVxuICAgICAgICAgICAgICBkZWNvZGluZz0ke3RoaXMuZGVjb2RpbmcgPz8gbm90aGluZ31cbiAgICAgICAgICAgICAgLmZldGNoUHJpb3JpdHk9JHt0aGlzLmltcG9ydGFuY2UgPz8gbm90aGluZ31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9waWN0dXJlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgJHtjYXB0aW9uXG4gICAgICAgICAgPyBodG1sYDxmaWdjYXB0aW9uXG4gICAgICAgICAgICAgIGNsYXNzPVwic2JiLWltYWdlX19jYXB0aW9uXCJcbiAgICAgICAgICAgICAgLmlubmVySFRNTD0ke2NhcHRpb259XG4gICAgICAgICAgICAgICR7cmVmKChlbCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhcHRpb25FbGVtZW50ID0gZWwgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPjwvZmlnY2FwdGlvbj5gXG4gICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAke3NjaGVtYURhdGFcbiAgICAgICAgICA/IGh0bWxgPHNjcmlwdCB0eXBlPVwiYXBwbGljYXRpb24vbGQranNvblwiIC5pbm5lckhUTUw9JHtzY2hlbWFEYXRhfT48L3NjcmlwdD5gXG4gICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgPC9maWd1cmU+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLWltYWdlJzogU2JiSW1hZ2VFbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOlsiX2EiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeURBLE1BQU0sNEJBQTRCLENBQ2hDLGVBQ21EO0FBQ25ELE1BQUksQ0FBQyxjQUFjLFdBQVcsV0FBVyxHQUFHO0FBQzFDLFdBQU87O0FBSUgsUUFBQSxhQUNGLE1BQ0UsUUFBUSxLQUNOLHFKQUFxSjtBQUd6SixNQUFBO0FBRUEsTUFBQTtBQUNXLGlCQUFBLEtBQUssTUFBTSxVQUFVO0FBQUEsRUFBQSxRQUM1Qjs7QUFFTixXQUFPOztBQUdULE1BQUksQ0FBQyxXQUFXLGVBQWUsV0FBVyxZQUFZLFdBQVcsR0FBRzs7QUFFbEUsV0FBTzs7QUFJVCxNQUFJLENBQUMsTUFBTSxRQUFRLFdBQVcsV0FBVyxHQUFHOztBQUUxQyxXQUFPOztBQU9ULE1BQUksbUJBQW1CO0FBQ3ZCLE1BQUkscUJBQXFCO0FBRW5CLFFBQUEsY0FBYyxDQUFDLFNBQVMsY0FBYztBQUVqQyxhQUFBLFlBQVksUUFBUSxDQUFDLGVBQWM7QUFDdEMsVUFBQSxpQkFBaUIsT0FBTyxLQUFLLFVBQVU7QUFFOUIsbUJBQUEsUUFBUSxDQUFDLGtCQUFpQjtBQUN2QyxVQUFJLENBQUMsWUFBWSxTQUFTLGFBQWEsR0FBRztBQUNyQiwyQkFBQTtBQUFBLE1BQUE7QUFBQSxJQUNyQixDQUNEO0FBRVcsZ0JBQUEsUUFBUSxDQUFDLGVBQWM7QUFDakMsVUFBSSxDQUFDLGVBQWUsU0FBUyxVQUFVLEdBQUc7QUFDbkIsNkJBQUE7QUFBQSxNQUFBO0FBQUEsSUFDdkIsQ0FDRDtBQUFBLEVBQUEsQ0FDRjtBQUVELE1BQUksb0JBQW9CLG9CQUFvQjs7QUFFMUMsV0FBTzs7QUFHVCxTQUFPLFdBQVc7QUFDcEI7QUFFQSxNQUFNLHVCQUF1QjtBQUFBLEVBQzNCLE1BQU07QUFBQSxFQUNOLFNBQVM7O0FBR1gsTUFBTSxVQUFVLENBQUMsT0FBdUIsS0FBSztBQUU3QyxNQUFNLGdCQUF3QztBQUFBLEVBQzVDLDJCQUEyQixRQUFRLG9CQUFvQjtBQUFBLEVBQ3ZELDJCQUEyQixRQUFRLG9CQUFvQjtBQUFBLEVBQ3ZELDRCQUE0QixRQUFRLHFCQUFxQjtBQUFBLEVBQ3pELDRCQUE0QixRQUFRLHFCQUFxQjtBQUFBLEVBQ3pELDRCQUE0QixRQUFRLHFCQUFxQjtBQUFBLEVBQ3pELDRCQUE0QixRQUFRLHFCQUFxQjtBQUFBLEVBQ3pELDZCQUE2QixRQUFRLHNCQUFzQjtBQUFBLEVBQzNELDZCQUE2QixRQUFRLHNCQUFzQjtBQUFBLEVBQzNELDRCQUE0QixRQUFRLHFCQUFxQjtBQUFBLEVBQ3pELDRCQUE0QixRQUFRLHFCQUFxQjtBQUFBLEVBQ3pELDJCQUEyQixRQUFRLG9CQUFvQjtBQUFBLEVBQ3ZELDJCQUEyQixRQUFRLG9CQUFvQjtBQUFBLEVBQ3ZELDRCQUE0QixRQUFRLHFCQUFxQjtBQUFBLEVBQ3pELDRCQUE0QixRQUFRLHFCQUFxQjs7SUFrQnJELG1CQUFlLE1BQUE7OzBCQURwQixjQUFjLFdBQVcsQ0FBQzs7OztvQkFDRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQVIsRUFBQUEsTUFBQSxjQUFRLFlBQVU7QUFBQTs7QUF1QnRDO0FBV0E7QUFVQTtBQVNBO0FBTUE7QUFTQTtBQVNZO0FBUVo7QUFPQTtBQU9BO0FBY0E7QUFXWTtBQVlBO0FBaUJaO0FBd0VBO0FBS3lEO0FBV3pEO0FBMU91QixXQUFBLGtCQVBuQjtBQVNJLFdBQUEsVUFBVTtBQUFBLFFBQ2hCLGtCQUFrQjtBQUFBLFFBQ2xCLGVBQWU7QUFBQTtBQVlELHlCQUFBLHVCQUFBLGtCQUFBLE1BQUEsbUJBQWMsRUFBRTtBQVdoQix5QkFBQSw2QkFBQSxrQkFBQSxNQUFBLHNCQUFBLEdBQUEsa0JBQUEsTUFBQSx3QkFBb0IsS0FBSztBQVV6Qix5QkFBQSw0QkFBQSxrQkFBQSxNQUFBLDJCQUFBLEdBQUEsa0JBQUEsTUFBQSx1QkFBa0IsRUFBRTtBQVNwQix5QkFBQSw4QkFBQSxrQkFBQSxNQUFBLDBCQUFBLEdBQUEsa0JBQUEsTUFBQSx5QkFBb0IsRUFBRTtBQU10Qix5QkFBQSxvQ0FBQSxrQkFBQSxNQUFBLDRCQUFBLEdBQUEsa0JBQUEsTUFBQSwrQkFBNkMsY0FBYztBQVMzRCx5QkFBQSxxQ0FBQSxrQkFBQSxNQUFBLGtDQUFBLEdBQUEsa0JBQUEsTUFBQSxnQ0FBNEIsS0FBSztBQVNyQix5QkFBQSw2QkFBQSxrQkFBQSxNQUFBLG1DQUFBLEdBQUEsa0JBQUEsTUFBQSx3QkFBc0MsTUFBTTtBQVF4RCx5QkFBQSxvQ0FBQSxrQkFBQSxNQUFBLDJCQUFBLEdBQUEsa0JBQUEsTUFBQSwrQkFBMkIsS0FBSztBQU9oQyx5QkFBQSxnQ0FBQSxrQkFBQSxNQUFBLGtDQUFBLEdBQUEsa0JBQUEsTUFBQSwyQkFBc0IsQ0FBQztBQU92Qix5QkFBQSxnQ0FBQSxrQkFBQSxNQUFBLDhCQUFBLEdBQUEsa0JBQUEsTUFBQSwyQkFBc0IsQ0FBQztBQWN2Qix5QkFBQSw2QkFBQSxrQkFBQSxNQUFBLDhCQUFBLEdBQUEsa0JBQUEsTUFBQSx3QkFBbUIsRUFBRTtBQVdULHlCQUFBLCtCQUFBLGtCQUFBLE1BQUEsMkJBQUEsR0FBQSxrQkFBQSxNQUFBLDBCQUFzQyxNQUFNO0FBWTVDLHlCQUFBLDRCQUFBLGtCQUFBLE1BQUEsNkJBQUEsR0FBQSxrQkFBQSxNQUFBLHVCQUE0QixPQUFPO0FBaUIvQyx5QkFBQSxvQ0FBQSxrQkFBQSxNQUFBLDBCQUFBLEdBQUEsa0JBQUEsTUFBQSwrQkFBMEIsRUFBRTtBQXdFNUIseUJBQUEsdUNBQUEsa0JBQUEsTUFBQSxrQ0FBQSxHQUFBLGtCQUFBLE1BQUEsa0NBQTZCLEVBQUU7QUFLMEIseUJBQUEsaUNBQUEsa0JBQUEsTUFBQSxxQ0FBQSxHQUFBLGtCQUFBLE1BQUEsNEJBRzNELFNBQVM7QUFRUCx5QkFBQSxnQ0FBQSxrQkFBQSxNQUFBLCtCQUFBLEdBQUEsa0JBQUEsTUFBQSwyQkFZSCxNQUFNOzs7Ozs7Ozs7O0lBdE9uQixJQUFnQixNQUFpQjtBQUFBLGFBQUEsbUJBQUE7QUFBQSxJQUFBO0FBQUEsSUFBakMsSUFBZ0IsSUFBaUIsT0FBQTtBQUFBLHlCQUFBLHVCQUFBO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFXakMsSUFBZ0IsV0FBMEI7QUFBQSxhQUFBLG1CQUFBO0FBQUEsSUFBQTtBQUFBLElBQTFDLElBQWdCLFNBQTBCLE9BQUE7QUFBQSx5QkFBQSw0QkFBQTtBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVUxQyxJQUFnQixVQUFxQjtBQUFBLGFBQUEsbUJBQUE7QUFBQSxJQUFBO0FBQUEsSUFBckMsSUFBZ0IsUUFBcUIsT0FBQTtBQUFBLHlCQUFBLDJCQUFBO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVNyQyxJQUFnQixZQUF1QjtBQUFBLGFBQUEsbUJBQUE7QUFBQSxJQUFBO0FBQUEsSUFBdkMsSUFBZ0IsVUFBdUIsT0FBQTtBQUFBLHlCQUFBLDZCQUFBO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTXZDLElBQWdCLGtCQUE0RDtBQUFBLGFBQUEsbUJBQUE7QUFBQSxJQUFBO0FBQUEsSUFBNUUsSUFBZ0IsZ0JBQTRELE9BQUE7QUFBQSx5QkFBQSxtQ0FBQTtBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFTNUUsSUFBZ0IsbUJBQWtDO0FBQUEsYUFBQSxtQkFBQTtBQUFBLElBQUE7QUFBQSxJQUFsRCxJQUFnQixpQkFBa0MsT0FBQTtBQUFBLHlCQUFBLG9DQUFBO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFTdEMsSUFBZ0IsV0FBNkM7QUFBQSxhQUFBLG1CQUFBO0FBQUEsSUFBQTtBQUFBLElBQTdELElBQWdCLFNBQTZDLE9BQUE7QUFBQSx5QkFBQSw0QkFBQTtBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUXpFLElBQWdCLGtCQUFpQztBQUFBLGFBQUEsbUJBQUE7QUFBQSxJQUFBO0FBQUEsSUFBakQsSUFBZ0IsZ0JBQWlDLE9BQUE7QUFBQSx5QkFBQSxtQ0FBQTtBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU9qRCxJQUFnQixjQUF3QjtBQUFBLGFBQUEsbUJBQUE7QUFBQSxJQUFBO0FBQUEsSUFBeEMsSUFBZ0IsWUFBd0IsT0FBQTtBQUFBLHlCQUFBLCtCQUFBO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBT3hDLElBQWdCLGNBQXdCO0FBQUEsYUFBQSxtQkFBQTtBQUFBLElBQUE7QUFBQSxJQUF4QyxJQUFnQixZQUF3QixPQUFBO0FBQUEseUJBQUEsK0JBQUE7QUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQWN4QyxJQUFnQixXQUFzQjtBQUFBLGFBQUEsbUJBQUE7QUFBQSxJQUFBO0FBQUEsSUFBdEMsSUFBZ0IsU0FBc0IsT0FBQTtBQUFBLHlCQUFBLDRCQUFBO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBVzFCLElBQWdCLGFBQTZDO0FBQUEsYUFBQSxtQkFBQTtBQUFBLElBQUE7QUFBQSxJQUE3RCxJQUFnQixXQUE2QyxPQUFBO0FBQUEseUJBQUEsOEJBQUE7QUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVk3RCxJQUFnQixVQUFvQztBQUFBLGFBQUEsbUJBQUE7QUFBQSxJQUFBO0FBQUEsSUFBcEQsSUFBZ0IsUUFBb0MsT0FBQTtBQUFBLHlCQUFBLDJCQUFBO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFpQmhFLElBQWdCLGtCQUE2QjtBQUFBLGFBQUEsbUJBQUE7QUFBQSxJQUFBO0FBQUEsSUFBN0MsSUFBZ0IsZ0JBQTZCLE9BQUE7QUFBQSx5QkFBQSxtQ0FBQTtBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUF3RTdDLElBQWdCLHFCQUFnQztBQUFBLGFBQUEsbUJBQUE7QUFBQSxJQUFBO0FBQUEsSUFBaEQsSUFBZ0IsbUJBQWdDLE9BQUE7QUFBQSx5QkFBQSxzQ0FBQTtBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtTLElBQWdCLGVBR2pEO0FBQUEsYUFBQSxtQkFBQTtBQUFBLElBQUE7QUFBQSxJQUhpQyxJQUFnQixhQUdqRCxPQUFBO0FBQUEseUJBQUEsZ0NBQUE7QUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUXhCLElBQWdCLGNBWUk7QUFBQSxhQUFBLG1CQUFBO0FBQUEsSUFBQTtBQUFBLElBWnBCLElBQWdCLFlBWUksT0FBQTtBQUFBLHlCQUFBLCtCQUFBO0FBQUEsSUFBQTtBQUFBO0FBQUEsSUFHcEIsSUFBVyxXQUFROztBQUNqQixlQUFPLFlBQUFBLE1BQUEsS0FBSyxlQUFMLGdCQUFBQSxJQUFpQixrQkFBakIsd0JBQUFBLEtBQW1ELHVCQUFuRCxtQkFBdUUsYUFBWTtBQUFBLElBQUE7QUFBQSxJQUc1RSxvQkFBaUI7QUFDL0IsWUFBTSxrQkFBaUI7QUFFdkIsV0FBSyxnQkFDSCxlQUNBLENBQUMsQ0FBQyxZQUFZLG1CQUFtQixJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssUUFBUSxpQkFBaUIsQ0FBQztBQUFBLElBQUE7QUFBQSxJQUk1RCxRQUFRLG1CQUF1QztBQUNoRSxZQUFNLFFBQVEsaUJBQWlCO0FBRTNCLFVBQUEsQ0FBQyxLQUFLLGlCQUFpQjtBQUN6QjtBQUFBLE1BQUE7QUFHRixXQUFLLGtCQUFrQixLQUFLLGdCQUFnQixpQkFBa0MsR0FBRztBQUU3RSxVQUFBLENBQUMsS0FBSyxpQkFBaUI7QUFDekI7QUFBQSxNQUFBO0FBR0YsV0FBSyxpQ0FBZ0M7QUFBQSxJQUFBO0FBQUEsSUFHcEIsTUFBTSxhQUFhLG1CQUF1QztBQUMzRSxZQUFNLGFBQWEsaUJBQWlCO0FBR3BDLFlBQU0sS0FBSztBQUNYLFVBQUksS0FBSyxVQUFVO0FBQ1osYUFBQSxnQkFBZ0IsZUFBZSxJQUFJO0FBQUEsTUFBQTtBQUFBLElBQzFDO0FBQUEsSUFHTSx1QkFBb0I7QUFDMUIsVUFBSSxLQUFLLGlCQUFpQjtBQUNaLG9CQUFBLFdBQVcsS0FBSyxlQUFlO0FBQy9CLG9CQUFBLEtBQUssS0FBSyxlQUFlO0FBQUEsTUFBQTtBQUFBLElBQ3ZDO0FBQUEsSUFHTSw0QkFBNEIsb0JBQTBCO0FBQ3RELFlBQUEsUUFBUSxjQUFjLGtCQUFrQjtBQUN2QyxhQUFBLFFBQVEsR0FBRyxLQUFLLFFBQVE7QUFBQSxJQUFBO0FBQUEsSUFHekIsbUNBQWdDOztBQUNqQyxPQUFBQSxNQUFBLEtBQUEsb0JBQUEsZ0JBQUFBLElBQWlCLFFBQVEsQ0FBQyxTQUFRO0FBQ3JDLGFBQUssZ0JBQWdCLFVBQVU7QUFBQSxNQUFBO0FBQUEsSUFDaEM7QUFBQSxJQUdLLGlCQUFpQixTQUE2QixRQUFRLE9BQUs7QUFDN0QsVUFBQSxDQUFDLFdBQVcsWUFBWSxJQUFJO0FBQ3ZCLGVBQUE7QUFBQSxNQUFBO0FBS1QsWUFBTSxzQkFBc0IsQ0FBQyxDQUFDLFFBQVEsTUFBTSxXQUFXO0FBQ2pELFlBQUEsY0FBYyxzQkFBc0IsSUFBSSxJQUFJLE9BQU8sSUFBSSxJQUFJLElBQUksZUFBZSxPQUFPLEVBQUU7QUFFN0YsVUFBSSxPQUFPO0FBRUcsb0JBQUEsYUFBYSxPQUFPLFFBQVEsS0FBSztBQUNqQyxvQkFBQSxhQUFhLE9BQU8sS0FBSyxLQUFLO0FBQzlCLG9CQUFBLGFBQWEsT0FBTyxLQUFLLElBQUk7QUFBQSxNQUFBLE9BQ3BDO0FBR08sb0JBQUEsYUFBYSxPQUFPLFFBQVEsNkJBQTZCO0FBQUEsTUFBQTtBQUd2RSxVQUFJLEtBQUssa0JBQWtCO0FBRWIsb0JBQUEsYUFBYSxPQUFPLE9BQU8sTUFBTTtBQUNqQyxvQkFBQSxhQUFhLE9BQU8sUUFBUSxZQUFZO0FBQ3BELG9CQUFZLGFBQWEsT0FBTyxRQUFRLEtBQUssWUFBWSxTQUFTLEVBQUUsQ0FBQztBQUNyRSxvQkFBWSxhQUFhLE9BQU8sUUFBUSxLQUFLLFlBQVksU0FBUyxFQUFFLENBQUM7QUFDekQsb0JBQUEsYUFBYSxPQUFPLFFBQVEsR0FBRztBQUFBLE1BQUE7QUFHN0MsVUFBSSxLQUFLLGlCQUFpQjtBQUVaLG9CQUFBLGFBQWEsT0FBTyxZQUFZLE1BQU07QUFBQSxNQUFBO0FBSzdDLGFBQUEsc0JBQ0gsWUFBWSxPQUNaLFlBQVksU0FBUyxVQUFVLENBQUMsSUFBSSxZQUFZO0FBQUEsSUFBQTtBQUFBLElBRzlDLDZCQUEwQjtBQUM1QixVQUFBO0FBRUosVUFBSSxLQUFLLG9CQUFvQjtBQUMzQiw2QkFBcUIsS0FBSztBQUFBLE1BQUEsT0FDckI7QUFFZ0IsNkJBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUFBO0FBc0R2QixhQUFPLDBCQUEwQixrQkFBa0I7QUFBQSxJQUFBO0FBQUEsSUFHN0Msd0JBQ04sY0FBNkQ7QUFFN0QsVUFBSSxhQUFhO0FBRUosbUJBQUEsUUFBUSxDQUFDLE9BQU07QUFDMUIsY0FBTSxjQUFjLEdBQUc7QUFDbkIsWUFBQTtBQUVBLFlBQUEsR0FBRyxzQkFBc0IsaUJBQWlCO0FBQzVDLG9CQUFVLEtBQUssNEJBQTRCLEdBQUcsc0JBQXNCLEtBQUs7QUFBQSxRQUFBLE9BQ3BFO0FBQ0wsb0JBQVUsR0FBRyxzQkFBc0I7QUFBQSxRQUFBO0FBR3JDLGNBQU0sYUFBYSxHQUFHLG9CQUFvQixJQUFJLEdBQUcsaUJBQWlCLE1BQU07QUFFeEUsc0JBQWMsSUFBSSxXQUFXLEtBQUssT0FBTyxJQUFJLFVBQVU7QUFBQSxNQUFBLENBQ3hEO0FBRU0sYUFBQTtBQUFBLElBQUE7QUFBQSxJQUlELGVBQVk7QUFDbEIsV0FBSyxxQkFBb0I7QUFDcEIsV0FBQSxnQkFBZ0IsZUFBZSxJQUFJO0FBQ3hDLFdBQUssY0FBYyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQUEsSUFBQTtBQUFBLElBR25CLFNBQU07QUFDbkIsVUFBQSxFQUFFLFlBQVk7QUFDbEIsVUFBSSxhQUFhO0FBRWpCLFlBQU0sZUFBZSxLQUFLLGlCQUFpQixLQUFLLFVBQVUsSUFBSTtBQUM5RCxZQUFNLHFCQUFxQixLQUFLLGlCQUFpQixLQUFLLFVBQVUsS0FBSztBQUVqRSxVQUFBLEtBQUssWUFBWSxRQUFRO0FBQzNCLGFBQUssV0FBVztBQUNoQixhQUFLLGFBQWE7QUFBQSxNQUFBO0FBR3BCLFVBQUksS0FBSyxXQUFXO0FBQ2xCLGtCQUFVLEdBQUcsS0FBSyxPQUFPLEtBQUssS0FBSyxTQUFTO0FBQy9CLHFCQUFBO0FBQUE7QUFBQTtBQUFBLG9CQUdDLEtBQUssUUFBUTtBQUFBO0FBQUEsc0JBRVgsS0FBSyxlQUFlO0FBQUEscUJBQ3JCLEtBQUssU0FBUztBQUFBO0FBQUE7QUFBQSxNQUFBO0FBS3pCLFlBQUEscUJBQXFCLEtBQUs7QUFRekIsYUFBQTtBQUFBO0FBQUE7QUFBQSxZQUdDLENBQUMsS0FBSyxXQUNKO0FBQUE7QUFBQTtBQUFBLHNCQUdRLFlBQVk7QUFBQTtBQUFBO0FBQUEsMEJBR1IsS0FBSyxXQUFXLE9BQU87QUFBQSwyQkFDdEIsS0FBSyxZQUFZLE9BQU87QUFBQSxvQkFFckMsT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBLGNBSVAsbUJBQW1CLElBQUksQ0FBQyxXQUFVO0FBQzVCLGNBQUEsY0FBYyxPQUFPLE1BQU07QUFDM0IsY0FBQSxhQUFhLE9BQU8sTUFBTTtBQUNoQyxjQUFNLGFBQWEsS0FBSyx3QkFBd0IsT0FBTyxZQUFZO0FBQzVELGVBQUE7QUFBQSxVQUNMO0FBQUEsMEJBQ1UsR0FBRyxVQUFVLEVBQUU7QUFBQSwwQkFDZixHQUFHLFVBQVUsSUFBSTtBQUFBLDJCQUV2QixHQUFHLGtCQUFrQixNQUFNLFVBQVUsTUFBTSxXQUFXLE1BQU0sS0FBSyxRQUFRLGdCQUFnQixJQUFJLFVBQVUsTUFDcEcsa0JBQWtCLE1BQU0sYUFBYSxDQUFDLE1BQU0sY0FBYyxDQUFDLE1BQzVELEtBQUssUUFBUSxhQUNmLElBQUksYUFBYSxDQUFDLEdBQ3BCO0FBQUE7QUFBQTtPQUdMLENBQUM7QUFBQTtBQUFBLG9CQUVNLEtBQUssT0FBTyxFQUFFO0FBQUEsc0JBQ1osS0FBSyxZQUFZO0FBQUEsdUJBQ2hCLE1BQU0sS0FBSyxjQUFjLElBQUksTUFBTSxPQUFPLENBQUMsQ0FBQztBQUFBO0FBQUEsb0JBRS9DLEtBQUssUUFBUztBQUFBO0FBQUE7QUFBQSx3QkFHVixLQUFLLFdBQVcsT0FBTztBQUFBLHlCQUN0QixLQUFLLFlBQVksT0FBTztBQUFBLCtCQUNsQixLQUFLLGNBQWMsT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBLFVBSS9DLFVBQ0U7QUFBQTtBQUFBLDJCQUVlLE9BQU87QUFBQSxnQkFDbEIsSUFBSSxDQUFDLE9BQVk7QUFDakIsYUFBSyxrQkFBa0I7QUFBQSxNQUFBLENBQ3hCLENBQUM7QUFBQSw4QkFFSixPQUFPO0FBQUEsVUFDVCxhQUNFLEtBQUEsT0FBQSxLQUFJLFdBQTJELENBQUEsa0RBQUEsYUFBQSxDQUFBLElBQVYsY0FDckQsT0FBTztBQUFBO0FBQUE7QUFBQSxJQUFBO0FBQUEsS0F0Z0JqQix1Q0FXQSw0Q0FVQSwyQ0FTQSw2Q0FNQSxtREFTQSxvREFTWSw0Q0FRWixtREFPQSwrQ0FPQSwrQ0FjQSw0Q0FXWSw4Q0FZQSwyQ0FpQlosbURBd0VBLHNEQUt5RCxnREFXekQ7O3VCQTVOQyxhQUNBLFVBQVU7QUFVViwyQkFBQSxDQUFBLGFBQ0EsU0FBUyxFQUFFLFdBQVcsYUFBYSxNQUFNLFNBQVMsU0FBUyxLQUFNLENBQUEsQ0FBQzsyQkFTbEUsYUFDQSxVQUFVOzZCQVFWLGFBQ0EsVUFBVTtBQU1WLGtDQUFBLENBQUEsU0FBUyxFQUFFLFdBQVcsbUJBQW9CLENBQUEsQ0FBQztBQVEzQyxtQ0FBQSxDQUFBLFVBQVcsR0FDWCxTQUFTLEVBQUUsV0FBVyxzQkFBc0IsTUFBTSxTQUFTLENBQUM7QUFVNUQsMkJBQUEsQ0FBQSxVQUFVO0FBTVYsa0NBQUEsQ0FBQSxVQUFXLEdBQ1gsU0FBUyxFQUFFLFdBQVcscUJBQXFCLE1BQU0sU0FBUyxDQUFDO0FBTTNELDhCQUFBLENBQUEsVUFBVyxHQUNYLFNBQVMsRUFBRSxXQUFXLGlCQUFpQixNQUFNLFFBQVEsQ0FBQztBQU10RCw4QkFBQSxDQUFBLFVBQVcsR0FDWCxTQUFTLEVBQUUsV0FBVyxpQkFBaUIsTUFBTSxRQUFRLENBQUM7NEJBYXRELGFBQ0EsU0FBUyxFQUFFLFdBQVcsWUFBQSxDQUFhLENBQUM7QUFZcEMsNkJBQUEsQ0FBQSxVQUFVO0FBWVYsMEJBQUEsQ0FBQSxVQUFVO21DQWVWLGFBQ0EsU0FBUyxFQUFFLFdBQVcsbUJBQUEsQ0FBb0IsQ0FBQztzQ0F1RTNDLGFBQ0EsU0FBUyxFQUFFLFdBQVcsdUJBQUEsQ0FBd0IsQ0FBQztnQ0FNL0MsU0FBUyxFQUFFLFdBQVcsaUJBQWlCLFNBQVMsS0FBQSxDQUFNLENBQUM7K0JBVXZELFNBQVMsRUFBRSxXQUFXLGdCQUFnQixTQUFTLEtBQUEsQ0FBTSxDQUFDO2dDQTBNdEQsYUFBYSxvQkFBb0IsQ0FBQztBQW5hbkIsaUJBQUFBLEtBQUEsTUFBQSxpQkFBQSxFQUFBLE1BQUEsWUFBQSxNQUFBLE9BQUEsUUFBQSxPQUFBLFNBQUEsT0FBQSxRQUFBLEVBQUEsS0FBQSxDQUFBLFFBQUEsU0FBQSxLQUFBLEtBQUEsQ0FBQSxRQUFBLElBQUEsS0FBQSxLQUFBLENBQUEsS0FBQSxVQUFBO0FBQUEsVUFBQSxNQUFpQjtBQUFBLFNBQUEsVUFBQSxhQUFBLG1CQUFBLHNCQUFBO0FBV2pCLGlCQUFBQSxLQUFBLE1BQUEsc0JBQUEsRUFBQSxNQUFBLFlBQUEsTUFBQSxZQUFBLFFBQUEsT0FBQSxTQUFBLE9BQUEsUUFBQSxFQUFBLEtBQUEsQ0FBQSxRQUFBLGNBQUEsS0FBQSxLQUFBLENBQUEsUUFBQSxJQUFBLFVBQUEsS0FBQSxDQUFBLEtBQUEsVUFBQTtBQUFBLFVBQUEsV0FBMEI7QUFBQSxTQUFBLFVBQUEsYUFBQSx3QkFBQSwyQkFBQTtBQVUxQixpQkFBQUEsS0FBQSxNQUFBLHFCQUFBLEVBQUEsTUFBQSxZQUFBLE1BQUEsV0FBQSxRQUFBLE9BQUEsU0FBQSxPQUFBLFFBQUEsRUFBQSxLQUFBLENBQUEsUUFBQSxhQUFBLEtBQUEsS0FBQSxDQUFBLFFBQUEsSUFBQSxTQUFBLEtBQUEsQ0FBQSxLQUFBLFVBQUE7QUFBQSxVQUFBLFVBQXFCO0FBQUEsU0FBQSxVQUFBLGFBQUEsdUJBQUEsMEJBQUE7QUFTckIsaUJBQUFBLEtBQUEsTUFBQSx1QkFBQSxFQUFBLE1BQUEsWUFBQSxNQUFBLGFBQUEsUUFBQSxPQUFBLFNBQUEsT0FBQSxRQUFBLEVBQUEsS0FBQSxDQUFBLFFBQUEsZUFBQSxLQUFBLEtBQUEsQ0FBQSxRQUFBLElBQUEsV0FBQSxLQUFBLENBQUEsS0FBQSxVQUFBO0FBQUEsVUFBQSxZQUF1QjtBQUFBLFNBQUEsVUFBQSxhQUFBLHlCQUFBLDRCQUFBO0FBTXZCLGlCQUFBQSxLQUFBLE1BQUEsNkJBQUEsRUFBQSxNQUFBLFlBQUEsTUFBQSxtQkFBQSxRQUFBLE9BQUEsU0FBQSxPQUFBLFFBQUEsRUFBQSxLQUFBLENBQUEsUUFBQSxxQkFBQSxLQUFBLEtBQUEsQ0FBQSxRQUFBLElBQUEsaUJBQUEsS0FBQSxDQUFBLEtBQUEsVUFBQTtBQUFBLFVBQUEsa0JBQTREO0FBQUEsU0FBQSxVQUFBLGFBQUEsK0JBQUEsa0NBQUE7QUFTNUQsaUJBQUFBLEtBQUEsTUFBQSw4QkFBQSxFQUFBLE1BQUEsWUFBQSxNQUFBLG9CQUFBLFFBQUEsT0FBQSxTQUFBLE9BQUEsUUFBQSxFQUFBLEtBQUEsQ0FBQSxRQUFBLHNCQUFBLEtBQUEsS0FBQSxDQUFBLFFBQUEsSUFBQSxrQkFBQSxLQUFBLENBQUEsS0FBQSxVQUFBO0FBQUEsVUFBQSxtQkFBa0M7QUFBQSxTQUFBLFVBQUEsYUFBQSxnQ0FBQSxtQ0FBQTtBQVN0QixpQkFBQUEsS0FBQSxNQUFBLHNCQUFBLEVBQUEsTUFBQSxZQUFBLE1BQUEsWUFBQSxRQUFBLE9BQUEsU0FBQSxPQUFBLFFBQUEsRUFBQSxLQUFBLENBQUEsUUFBQSxjQUFBLEtBQUEsS0FBQSxDQUFBLFFBQUEsSUFBQSxVQUFBLEtBQUEsQ0FBQSxLQUFBLFVBQUE7QUFBQSxVQUFBLFdBQTZDO0FBQUEsU0FBQSxVQUFBLGFBQUEsd0JBQUEsMkJBQUE7QUFRekQsaUJBQUFBLEtBQUEsTUFBQSw2QkFBQSxFQUFBLE1BQUEsWUFBQSxNQUFBLG1CQUFBLFFBQUEsT0FBQSxTQUFBLE9BQUEsUUFBQSxFQUFBLEtBQUEsQ0FBQSxRQUFBLHFCQUFBLEtBQUEsS0FBQSxDQUFBLFFBQUEsSUFBQSxpQkFBQSxLQUFBLENBQUEsS0FBQSxVQUFBO0FBQUEsVUFBQSxrQkFBaUM7QUFBQSxTQUFBLFVBQUEsYUFBQSwrQkFBQSxrQ0FBQTtBQU9qQyxpQkFBQUEsS0FBQSxNQUFBLHlCQUFBLEVBQUEsTUFBQSxZQUFBLE1BQUEsZUFBQSxRQUFBLE9BQUEsU0FBQSxPQUFBLFFBQUEsRUFBQSxLQUFBLENBQUEsUUFBQSxpQkFBQSxLQUFBLEtBQUEsQ0FBQSxRQUFBLElBQUEsYUFBQSxLQUFBLENBQUEsS0FBQSxVQUFBO0FBQUEsVUFBQSxjQUF3QjtBQUFBLFNBQUEsVUFBQSxhQUFBLDJCQUFBLDhCQUFBO0FBT3hCLGlCQUFBQSxLQUFBLE1BQUEseUJBQUEsRUFBQSxNQUFBLFlBQUEsTUFBQSxlQUFBLFFBQUEsT0FBQSxTQUFBLE9BQUEsUUFBQSxFQUFBLEtBQUEsQ0FBQSxRQUFBLGlCQUFBLEtBQUEsS0FBQSxDQUFBLFFBQUEsSUFBQSxhQUFBLEtBQUEsQ0FBQSxLQUFBLFVBQUE7QUFBQSxVQUFBLGNBQXdCO0FBQUEsU0FBQSxVQUFBLGFBQUEsMkJBQUEsOEJBQUE7QUFjeEIsaUJBQUFBLEtBQUEsTUFBQSxzQkFBQSxFQUFBLE1BQUEsWUFBQSxNQUFBLFlBQUEsUUFBQSxPQUFBLFNBQUEsT0FBQSxRQUFBLEVBQUEsS0FBQSxDQUFBLFFBQUEsY0FBQSxLQUFBLEtBQUEsQ0FBQSxRQUFBLElBQUEsVUFBQSxLQUFBLENBQUEsS0FBQSxVQUFBO0FBQUEsVUFBQSxXQUFzQjtBQUFBLFNBQUEsVUFBQSxhQUFBLHdCQUFBLDJCQUFBO0FBV1YsaUJBQUFBLEtBQUEsTUFBQSx3QkFBQSxFQUFBLE1BQUEsWUFBQSxNQUFBLGNBQUEsUUFBQSxPQUFBLFNBQUEsT0FBQSxRQUFBLEVBQUEsS0FBQSxDQUFBLFFBQUEsZ0JBQUEsS0FBQSxLQUFBLENBQUEsUUFBQSxJQUFBLFlBQUEsS0FBQSxDQUFBLEtBQUEsVUFBQTtBQUFBLFVBQUEsYUFBNkM7QUFBQSxTQUFBLFVBQUEsYUFBQSwwQkFBQSw2QkFBQTtBQVk3QyxpQkFBQUEsS0FBQSxNQUFBLHFCQUFBLEVBQUEsTUFBQSxZQUFBLE1BQUEsV0FBQSxRQUFBLE9BQUEsU0FBQSxPQUFBLFFBQUEsRUFBQSxLQUFBLENBQUEsUUFBQSxhQUFBLEtBQUEsS0FBQSxDQUFBLFFBQUEsSUFBQSxTQUFBLEtBQUEsQ0FBQSxLQUFBLFVBQUE7QUFBQSxVQUFBLFVBQW9DO0FBQUEsU0FBQSxVQUFBLGFBQUEsdUJBQUEsMEJBQUE7QUFpQmhELGlCQUFBQSxLQUFBLE1BQUEsNkJBQUEsRUFBQSxNQUFBLFlBQUEsTUFBQSxtQkFBQSxRQUFBLE9BQUEsU0FBQSxPQUFBLFFBQUEsRUFBQSxLQUFBLENBQUEsUUFBQSxxQkFBQSxLQUFBLEtBQUEsQ0FBQSxRQUFBLElBQUEsaUJBQUEsS0FBQSxDQUFBLEtBQUEsVUFBQTtBQUFBLFVBQUEsa0JBQTZCO0FBQUEsU0FBQSxVQUFBLGFBQUEsK0JBQUEsa0NBQUE7QUF3RTdCLGlCQUFBQSxLQUFBLE1BQUEsZ0NBQUEsRUFBQSxNQUFBLFlBQUEsTUFBQSxzQkFBQSxRQUFBLE9BQUEsU0FBQSxPQUFBLFFBQUEsRUFBQSxLQUFBLENBQUEsUUFBQSx3QkFBQSxLQUFBLEtBQUEsQ0FBQSxRQUFBLElBQUEsb0JBQUEsS0FBQSxDQUFBLEtBQUEsVUFBQTtBQUFBLFVBQUEscUJBQWdDO0FBQUEsU0FBQSxVQUFBLGFBQUEsa0NBQUEscUNBQUE7QUFLeUIsaUJBQUFBLEtBQUEsTUFBQSwwQkFBQSxFQUFBLE1BQUEsWUFBQSxNQUFBLGdCQUFBLFFBQUEsT0FBQSxTQUFBLE9BQUEsUUFBQSxFQUFBLEtBQUEsQ0FBQSxRQUFBLGtCQUFBLEtBQUEsS0FBQSxDQUFBLFFBQUEsSUFBQSxjQUFBLEtBQUEsQ0FBQSxLQUFBLFVBQUE7QUFBQSxVQUFBLGVBR2pEO0FBQUEsU0FBQSxVQUFBLGFBQUEsNEJBQUEsK0JBQUE7QUFRUixpQkFBQUEsS0FBQSxNQUFBLHlCQUFBLEVBQUEsTUFBQSxZQUFBLE1BQUEsZUFBQSxRQUFBLE9BQUEsU0FBQSxPQUFBLFFBQUEsRUFBQSxLQUFBLENBQUEsUUFBQSxpQkFBQSxLQUFBLEtBQUEsQ0FBQSxRQUFBLElBQUEsYUFBQSxLQUFBLENBQUEsS0FBQSxVQUFBO0FBQUEsVUFBQSxjQVlJO0FBQUEsU0FBQSxVQUFBLGFBQUEsMkJBQUEsOEJBQUE7QUE4THBCLGlCQUFBQSxLQUFBLE1BQUEsMEJBQUEsRUFBQSxNQUFBLFVBQUEsTUFBQSxnQkFBQSxRQUFBLE9BQUEsU0FBQSxPQUFBLFFBQUEsRUFBQSxLQUFBLENBQUEsUUFBQSxrQkFBQSxLQUFBLEtBQUEsQ0FBQSxRQUFBLElBQVEsYUFJUCxHQUFBLFVBQUEsVUFBQSxHQUFBLE1BQUEsMEJBQUE7QUEvYkgsaUJBaWlCQyxNQUFBLG1CQUFBLEVBQUEsT0FBQSxXQUFBLEdBQUEsa0JBQUEsRUFBQSxNQUFBLFNBQUEsTUFBQSxXQUFBLE1BQUEsVUFBQSxVQUFBLEdBQUEsTUFBQSx1QkFBQTs7O1FBaGlCd0JBLElBQU0sU0FBbUIsT0FDekJBLElBQUEsU0FBUztBQUFBLElBQzlCLE9BQU87QUFBQSxJQUNQLE1BQU07QUFBQSxFQUNFLEdBTE4sa0JBQWUsWUFBQSx1QkFBQSxHQUFDQTs7OyJ9
682
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9pbWFnZS9pbWFnZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBTYmJCcmVha3BvaW50WmVyb01pbixcbiAgU2JiQnJlYWtwb2ludFplcm9NYXgsXG4gIFNiYkJyZWFrcG9pbnRNaWNyb01pbixcbiAgU2JiQnJlYWtwb2ludE1pY3JvTWF4LFxuICBTYmJCcmVha3BvaW50U21hbGxNaW4sXG4gIFNiYkJyZWFrcG9pbnRTbWFsbE1heCxcbiAgU2JiQnJlYWtwb2ludE1lZGl1bU1pbixcbiAgU2JiQnJlYWtwb2ludE1lZGl1bU1heCxcbiAgU2JiQnJlYWtwb2ludExhcmdlTWluLFxuICBTYmJCcmVha3BvaW50TGFyZ2VNYXgsXG4gIFNiYkJyZWFrcG9pbnRXaWRlTWluLFxuICBTYmJCcmVha3BvaW50V2lkZU1heCxcbiAgU2JiQnJlYWtwb2ludFVsdHJhTWluLFxuICBTYmJCcmVha3BvaW50VWx0cmFNYXgsXG4gIFNiYlR5cG9TY2FsZURlZmF1bHQsXG59IGZyb20gJ0BzYmItZXN0YS9seW5lLWRlc2lnbi10b2tlbnMnO1xuaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgTGl0RWxlbWVudCxcbiAgbm90aGluZyxcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIGV2ZW50T3B0aW9ucywgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IGZvcmNlVHlwZSB9IGZyb20gJy4uL2NvcmUvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2ltYWdlLnNjc3M/bGl0JmlubGluZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWcge1xuICBicmVha3BvaW50czogSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWdCcmVha3BvaW50W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWdCcmVha3BvaW50IHtcbiAgaW1hZ2U6IHtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICB9O1xuICBtZWRpYVF1ZXJpZXM6IEludGVyZmFjZUltYWdlQXR0cmlidXRlc1NpemVzQ29uZmlnTWVkaWFRdWVyeVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludGVyZmFjZUltYWdlQXR0cmlidXRlc1NpemVzQ29uZmlnTWVkaWFRdWVyeSB7XG4gIGNvbmRpdGlvbkZlYXR1cmU6IHN0cmluZztcbiAgY29uZGl0aW9uRmVhdHVyZVZhbHVlOiB7XG4gICAgbHluZURlc2lnblRva2VuOiBib29sZWFuO1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gIH07XG4gIGNvbmRpdGlvbk9wZXJhdG9yOiBmYWxzZTtcbn1cblxuLyoqXG4gKiB3ZSBjaGVjayB0aGUgc3RydWN0dXJlIG9mIHRoZSBkYXRhIG1hbnVhbGx5LCBzbyBpdCdzIHNhZmUgdG8gdXNlIGBhbnlgIGFzIHJldHVybiB0eXBlXG4gKi9cbmNvbnN0IGltYWdlSGVscGVyR2V0QnJlYWtwb2ludHMgPSAoXG4gIGpzb25TdHJpbmc6IHN0cmluZyxcbik6IEludGVyZmFjZUltYWdlQXR0cmlidXRlc1NpemVzQ29uZmlnQnJlYWtwb2ludFtdID0+IHtcbiAgaWYgKCFqc29uU3RyaW5nIHx8IGpzb25TdHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gbWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBgYnJlYWtwb2ludHNgIGtleSBpbiBvYmplY3RcbiAgY29uc3QgbG9nV2FybmluZyA9IGltcG9ydC5tZXRhLmVudi5ERVZcbiAgICA/ICgpID0+XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnc2JiLWltYWdlIGVycm9yOiBhdHRyaWJ1dGUgYnJlYWtwb2ludHMgaGFzIHdyb25nIGRhdGEgZm9ybWF0LiBSZWZlcmVuY2UgdGhlIGRvY3VtZW50YXRpb24gdG8gc2VlIGhvdyB5b3Ugc2hvdWxkIGZvcm1hdCB0aGUgZGF0YSBmb3IgdGhpcyBhdHRyaWJ1dGUuJyxcbiAgICAgICAgKVxuICAgIDogbnVsbDtcbiAgbGV0IGpzb25PYmplY3Q6IEludGVyZmFjZUltYWdlQXR0cmlidXRlc1NpemVzQ29uZmlnO1xuXG4gIHRyeSB7XG4gICAganNvbk9iamVjdCA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XG4gIH0gY2F0Y2gge1xuICAgIGxvZ1dhcm5pbmc/LigpO1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlmICghanNvbk9iamVjdC5icmVha3BvaW50cyB8fCBqc29uT2JqZWN0LmJyZWFrcG9pbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZ1dhcm5pbmc/LigpO1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8vIG1ha2Ugc3VyZSB3ZSBnZXQgYW4gYXJyYXkgb2YgYnJlYWtwb2ludHNcbiAgaWYgKCFBcnJheS5pc0FycmF5KGpzb25PYmplY3QuYnJlYWtwb2ludHMpKSB7XG4gICAgbG9nV2FybmluZz8uKCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIDEuIG1ha2Ugc3VyZSB0aGF0IGVhY2ggZW50cnkgd2l0aGluIHRoZSBicmVha3BvaW50cyBvYmplY3QgY29udGFpbnMgb25seSBhbGxvd2VkIGtleXNcbiAgICogMi4gbWFrZSBzdXJlIHRoYXQgYWxsIG5lY2Vzc2FyeSBrZXlzIGFyZSBwcmVzZW50XG4gICAqL1xuICBsZXQgd3JvbmdLZXlEZXRlY3RlZCA9IGZhbHNlO1xuICBsZXQgbWlzc2luZ0tleURldGVjdGVkID0gZmFsc2U7XG5cbiAgY29uc3QgYWxsb3dlZEtleXMgPSBbJ2ltYWdlJywgJ21lZGlhUXVlcmllcyddO1xuXG4gIGpzb25PYmplY3QuYnJlYWtwb2ludHMuZm9yRWFjaCgoYnJlYWtwb2ludCkgPT4ge1xuICAgIGNvbnN0IGJyZWFrcG9pbnRLZXlzID0gT2JqZWN0LmtleXMoYnJlYWtwb2ludCk7XG5cbiAgICBicmVha3BvaW50S2V5cy5mb3JFYWNoKChicmVha3BvaW50S2V5KSA9PiB7XG4gICAgICBpZiAoIWFsbG93ZWRLZXlzLmluY2x1ZGVzKGJyZWFrcG9pbnRLZXkpKSB7XG4gICAgICAgIHdyb25nS2V5RGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWxsb3dlZEtleXMuZm9yRWFjaCgoYWxsb3dlZEtleSkgPT4ge1xuICAgICAgaWYgKCFicmVha3BvaW50S2V5cy5pbmNsdWRlcyhhbGxvd2VkS2V5KSkge1xuICAgICAgICBtaXNzaW5nS2V5RGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBpZiAod3JvbmdLZXlEZXRlY3RlZCB8fCBtaXNzaW5nS2V5RGV0ZWN0ZWQpIHtcbiAgICBsb2dXYXJuaW5nPy4oKTtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4ganNvbk9iamVjdC5icmVha3BvaW50cztcbn07XG5cbmNvbnN0IGV2ZW50TGlzdGVuZXJPcHRpb25zID0ge1xuICBvbmNlOiB0cnVlLFxuICBwYXNzaXZlOiB0cnVlLFxufTtcblxuY29uc3QgcHhUb1JlbSA9IChweDogbnVtYmVyKTogbnVtYmVyID0+IHB4IC8gU2JiVHlwb1NjYWxlRGVmYXVsdDtcblxuY29uc3QgYnJlYWtwb2ludE1hcDogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHtcbiAgJ3NiYi1icmVha3BvaW50LXplcm8tbWluJzogcHhUb1JlbShTYmJCcmVha3BvaW50WmVyb01pbiksXG4gICdzYmItYnJlYWtwb2ludC16ZXJvLW1heCc6IHB4VG9SZW0oU2JiQnJlYWtwb2ludFplcm9NYXgpLFxuICAnc2JiLWJyZWFrcG9pbnQtbWljcm8tbWluJzogcHhUb1JlbShTYmJCcmVha3BvaW50TWljcm9NaW4pLFxuICAnc2JiLWJyZWFrcG9pbnQtbWljcm8tbWF4JzogcHhUb1JlbShTYmJCcmVha3BvaW50TWljcm9NYXgpLFxuICAnc2JiLWJyZWFrcG9pbnQtc21hbGwtbWluJzogcHhUb1JlbShTYmJCcmVha3BvaW50U21hbGxNaW4pLFxuICAnc2JiLWJyZWFrcG9pbnQtc21hbGwtbWF4JzogcHhUb1JlbShTYmJCcmVha3BvaW50U21hbGxNYXgpLFxuICAnc2JiLWJyZWFrcG9pbnQtbWVkaXVtLW1pbic6IHB4VG9SZW0oU2JiQnJlYWtwb2ludE1lZGl1bU1pbiksXG4gICdzYmItYnJlYWtwb2ludC1tZWRpdW0tbWF4JzogcHhUb1JlbShTYmJCcmVha3BvaW50TWVkaXVtTWF4KSxcbiAgJ3NiYi1icmVha3BvaW50LWxhcmdlLW1pbic6IHB4VG9SZW0oU2JiQnJlYWtwb2ludExhcmdlTWluKSxcbiAgJ3NiYi1icmVha3BvaW50LWxhcmdlLW1heCc6IHB4VG9SZW0oU2JiQnJlYWtwb2ludExhcmdlTWF4KSxcbiAgJ3NiYi1icmVha3BvaW50LXdpZGUtbWluJzogcHhUb1JlbShTYmJCcmVha3BvaW50V2lkZU1pbiksXG4gICdzYmItYnJlYWtwb2ludC13aWRlLW1heCc6IHB4VG9SZW0oU2JiQnJlYWtwb2ludFdpZGVNYXgpLFxuICAnc2JiLWJyZWFrcG9pbnQtdWx0cmEtbWluJzogcHhUb1JlbShTYmJCcmVha3BvaW50VWx0cmFNaW4pLFxuICAnc2JiLWJyZWFrcG9pbnQtdWx0cmEtbWF4JzogcHhUb1JlbShTYmJCcmVha3BvaW50VWx0cmFNYXgpLFxufTtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhbiBpbWFnZS5cbiAqXG4gKiBAZXZlbnQge0V2ZW50fSBsb2FkIC0gRW1pdHMgd2hlbiB0aGUgaW1hZ2UgaGFzIGJlZW4gbG9hZGVkLlxuICogQGV2ZW50IHtFdmVudH0gZXJyb3IgLSBFbWl0cyB3aGVuIHRoZSBpbWFnZSBsb2FkaW5nIGVuZGVkIGluIGFuIGVycm9yLlxuICogQGNzc3Byb3AgWy0tc2JiLWltYWdlLWFzcGVjdC1yYXRpbz1hdXRvXSAtIENhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIGBhc3BlY3RSYXRpb2AgcHJvcGVydHkuXG4gKiBUaGlzIHdheSB3ZSBjYW4gaGF2ZSwgZm9yIGV4YW1wbGUsIGFuIGltYWdlIGNvbXBvbmVudCB3aXRoIGFuIGFzcGVjdFxuICogcmF0aW8gb2YgNC8zIGluIHNtYWxsZXIgdmlld3BvcnRzIGFuZCAxNi85IGluIGxhcmdlciB2aWV3cG9ydHMuXG4gKiBAY3NzcHJvcCBbLS1zYmItaW1hZ2Utb2JqZWN0LXBvc2l0aW9uXSAtIENhbiBiZSB1c2VkIHRvIHNldCB0aGUgb2JqZWN0LXBvc2l0aW9uIGNzcyBwcm9wZXJ0eSBvZiB0aGUgaW1hZ2UgaXRzZWxmIGlmIHRoZSBpbWFnZSBpdHNlbGYgaXMgY3JvcHBlZC5cbiAqIEBjc3Nwcm9wIFstLXNiYi1pbWFnZS1vYmplY3QtZml0PWNvdmVyXSAtIENhbiBiZSB1c2VkIHRvIHNldCB0aGUgb2JqZWN0LWZpdCBjc3MgcHJvcGVydHkgb2YgdGhlIGltYWdlIGl0c2VsZiBpZiB0aGUgaW1hZ2UgaXRzZWxmIGlzIGNyb3BwZWQuXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1pbWFnZScpXG5jbGFzcyBTYmJJbWFnZUVsZW1lbnQgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIGVycm9yOiAnZXJyb3InLFxuICAgIGxvYWQ6ICdsb2FkJyxcbiAgfSBhcyBjb25zdDtcblxuICBwcml2YXRlIF9jYXB0aW9uRWxlbWVudD86IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9saW5rc0luQ2FwdGlvbj86IE5vZGVMaXN0T2Y8SFRNTExpbmtFbGVtZW50PjtcbiAgcHJpdmF0ZSBfY29uZmlnID0ge1xuICAgIG5vblJldGluYVF1YWxpdHk6ICc0NScsXG4gICAgcmV0aW5hUXVhbGl0eTogJzIwJyxcbiAgfTtcblxuICAvKipcbiAgICogQW4gYWx0IHRleHQgaXMgbm90IGFsd2F5cyBuZWNlc3NhcnkgKGUuZy4gaW4gdGVhc2VyIGNhcmRzIHdoZW5cbiAgICogYWRkaXRpb25hbCBsaW5rIHRleHQgaXMgcHJvdmlkZWQpLiBJbiB0aGlzIGNhc2Ugd2UgY2FuIGxlYXZlXG4gICAqIHRoZSB2YWx1ZSBvZiB0aGUgYWx0IGF0dHJpYnV0ZSBibGFuaywgYnV0IHRoZSBhdHRyaWJ1dGUgaXRzZWxmXG4gICAqIHN0aWxsIG5lZWRzIHRvIGJlIHByZXNlbnQuIFRoYXQgd2F5IHdlIGNhbiBzaWduYWwgYXNzaXN0aXZlXG4gICAqIHRlY2hub2xvZ3ksIHRoYXQgdGhleSBjYW4gc2tpcCB0aGUgaW1hZ2UuXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KClcbiAgcHVibGljIGFjY2Vzc29yIGFsdDogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byBmYWxzZSwgd2Ugc2hvdyBhIGJsdXJyZWQgdmVyc2lvbiBvZiB0aGUgaW1hZ2UgYXNcbiAgICogcGxhY2Vob2xkZXIgYmVmb3JlIHRoZSBhY3R1YWwgaW1hZ2Ugc2hvd3MgdXAuIFRoaXMgd2lsbCBoZWxwXG4gICAqIHRvIGltcHJvdmUgdGhlIHBlcmNlaXZlZCBsb2FkaW5nIHBlcmZvcm1hbmNlLiBSZWFkIG1vcmUgYWJvdXRcbiAgICogdGhlIGlkZWEgb2YgbHFpcCBoZXJlOlxuICAgKiBodHRwczovL21lZGl1bS5jb20vQGltZ2l4L2xxaXAteW91ci1pbWFnZXMtZm9yLWZhc3QtbG9hZGluZy0yNTIzZDllZTRhNjJcbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdza2lwLWxxaXAnLCB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBza2lwTHFpcDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhpcyB0byB0cnVlLCBpZiB5b3Ugd2FudCB0byBwYXNzIGEgY3VzdG9tIGZvY2FsIHBvaW50XG4gICAqIGZvciB0aGUgaW1hZ2UuIFNlZSBmdWxsIGRvY3VtZW50YXRpb24gaGVyZTpcbiAgICogaHR0cHM6Ly9kb2NzLmltZ2l4LmNvbS9hcGlzL3JlbmRlcmluZy9mb2NhbHBvaW50LWNyb3BcbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdjdXN0b20tZm9jYWwtcG9pbnQnLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBjdXN0b21Gb2NhbFBvaW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIElmIHRoZSBsYXp5IHByb3BlcnR5IGlzIHNldCB0byB0cnVlLCB0aGUgbW9kdWxlIHdpbGwgYXV0b21hdGljYWxseVxuICAgKiBjaGFuZ2UgdGhlIGRlY29kaW5nIHRvIGFzeW5jLCBvdGhlcndpc2UgdGhlIGRlY29kaW5nIGlzIHNldCB0byBhdXRvXG4gICAqIHdoaWNoIGxlYXZlcyB0aGUgaGFuZGxpbmcgdXAgdG8gdGhlIGJyb3dzZXIuIFJlYWQgbW9yZSBhYm91dCB0aGVcbiAgICogZGVjb2RpbmcgYXR0cmlidXRlIGhlcmU6XG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MSW1hZ2VFbGVtZW50L2RlY29kaW5nXG4gICAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgYWNjZXNzb3IgZGVjb2Rpbmc6ICdzeW5jJyB8ICdhc3luYycgfCAnYXV0bycgPSAnYXV0byc7XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHRvIHRydWUsIHRvIHJlY2VpdmUgdmlzdWFsIGd1aWRhbmNlIHdoZXJlIHRoZSBjdXN0b20gZm9jYWxcbiAgICogcG9pbnQgaXMgY3VycmVudGx5IHNldC5cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdmb2NhbC1wb2ludC1kZWJ1ZycsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGZvY2FsUG9pbnREZWJ1ZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBQYXNzIGluIGEgZmxvYXRpbmcgbnVtYmVyIGJldHdlZW4gMCAobGVmdCkgYW5kIDEgKHJpZ2h0KS5cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdmb2NhbC1wb2ludC14JywgdHlwZTogTnVtYmVyIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBmb2NhbFBvaW50WDogbnVtYmVyID0gMTtcblxuICAvKipcbiAgICogUGFzcyBpbiBhIGZsb2F0aW5nIG51bWJlciBiZXR3ZWVuIDAgKHRvcCkgYW5kIDEgKGJvdHRvbSkuXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnZm9jYWwtcG9pbnQteScsIHR5cGU6IE51bWJlciB9KVxuICBwdWJsaWMgYWNjZXNzb3IgZm9jYWxQb2ludFk6IG51bWJlciA9IDE7XG5cbiAgLyoqXG4gICAqIFJpZ2h0IG5vdyB0aGUgbW9kdWxlIGlzIGhlYXZpbHkgY291cGxlZCB3aXRoIHRoZSBpbWFnZSBkZWxpdmVyeVxuICAgKiBzZXJ2aWNlIGltZ2l4IGFuZCBkZXBlbmRzIG9uIHRoZSBvcmlnaW5hbCBmaWxlcyBiZWluZyBzdG9yZWRcbiAgICogaW5zaWRlIEFFTS4gWW91IGNhbiBwYXNzIGluIGFueSBodHRwczovL2Nkbi5pbWcuc2JiLmNoIGltZ1xuICAgKiBzcmMgYWRkcmVzcyB5b3UgZmluZCBvbiBzYmIuY2ggdG8gcGxheSBhcm91bmQgd2l0aCBpdC4gSnVzdFxuICAgKiBzdHJpcCB0aGUgdXJsIHBhcmFtZXRlcnMgYW5kIHBhc3RlIGluIHRoZSBwbGFpbiBmaWxlIGFkZHJlc3MuXG4gICAqIElmIHlvdSB3YW50IHRvIGtub3cgaG93IHRvIGJlc3Qgd29yayB3aXRoIHRoaXMgbW9kdWxlIHdpdGhcbiAgICogaW1hZ2VzIGNvbWluZyBmcm9tIGEgZGlmZmVyZW50IHNvdXJjZSwgcGxlYXNlIGNvbnRhY3QgdGhlXG4gICAqIExZTkUgQ29yZSBUZWFtLlxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2ltYWdlLXNyYycgfSlcbiAgcHVibGljIGFjY2Vzc29yIGltYWdlU3JjOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogVGhlIGltcG9ydGFuY2UgYXR0cmlidXRlIGlzIGZhaXJseSBuZXcgYXR0cmlidXRlIHdoaWNoIHNob3VsZFxuICAgKiBoZWxwIHRoZSBicm93c2VyIGRlY2lkZSB3aGljaCByZXNvdXJjZXMgaXQgc2hvdWxkIHByaW9yaXRpc2VcbiAgICogZHVyaW5nIHBhZ2UgbG9hZC4gV2Ugd2lsbCBzZXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBiYXNlZCBvbiB0aGVcbiAgICogdmFsdWUsIHdlIHJlY2VpdmUgaW4gdGhlIGxvYWRpbmcgYXR0cmlidXRlLiAnZWFnZXInLCB3aGljaCB3ZSB1c2VcbiAgICogZm9yIHRoZSBsYXJnZXN0IGltYWdlIHdpdGhpbiB0aGUgaW5pdGlhbCB2aWV3cG9ydCwgd2lsbCBzZXQgdGhlXG4gICAqIGF0dHJpYnV0ZSB2YWx1ZSB0byAnaGlnaCcuICdsYXp5Jywgd2hpY2ggd2UgdXNlIGZvciBpbWFnZXMgYmVsb3dcbiAgICogdGhlIGZvbGQsIHdpbGwgc2V0IHRoZSBhdHRyaWJ1dGUgdmFsdWUgdG8gJ2xvdycuXG4gICAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgYWNjZXNzb3IgaW1wb3J0YW5jZTogJ2F1dG8nIHwgJ2hpZ2gnIHwgJ2xvdycgPSAnaGlnaCc7XG5cbiAgLyoqXG4gICAqIFdpdGggdGhlIHN1cHBvcnQgb2YgbmF0aXZlIGltYWdlIGxhenkgbG9hZGluZywgd2UgY2FuIG5vd1xuICAgKiBkZWNpZGUgd2hldGhlciB3ZSB3YW50IHRvIGxvYWQgdGhlIGltYWdlIGltbWVkaWF0ZWx5IG9yIG9ubHlcbiAgICogb25jZSBpdCBpcyBjbG9zZSB0byB0aGUgdmlzaWJsZSB2aWV3cG9ydC4gVGhlIHZhbHVlIGVhZ2VyIGlzXG4gICAqIGJlc3QgdXNlZCBmb3IgaW1hZ2VzIHdpdGhpbiB0aGUgaW5pdGlhbCB2aWV3cG9ydC4gV2Ugd2FudCB0b1xuICAgKiBsb2FkIHRoZXNlIGltYWdlcyBhcyBmYXN0IGFzIHBvc3NpYmxlIHRvIGltcHJvdmUgdGhlIENvcmUgV2ViXG4gICAqIFZpdGFscyB2YWx1ZXMuIGxhenkgb24gdGhlIG90aGVyIGhhbmQgd29ya3MgYmVzdCBmb3IgaW1hZ2VzXG4gICAqIHdoaWNoIGFyZSBmdXJ0aGVyIGRvd24gdGhlIHBhZ2Ugb3IgaW52aXNpYmxlIGR1cmluZyB0aGUgbG9hZGluZ1xuICAgKiBvZiB0aGUgaW5pdGlhbCB2aWV3cG9ydC5cbiAgICovXG4gIEBwcm9wZXJ0eSgpIHB1YmxpYyBhY2Nlc3NvciBsb2FkaW5nOiAnZWFnZXInIHwgJ2xhenknID0gJ2VhZ2VyJztcblxuICAvKipcbiAgICogV2l0aCBwZXJmb3JtYW5jZS5tYXJrIHlvdSBjYW4gbG9nIGEgdGltZXN0YW1wIGFzc29jaWF0ZWQgd2l0aFxuICAgKiB0aGUgbmFtZSB5b3UgZGVmaW5lIGluIHBlcmZvcm1hbmNlTWFyayB3aGVuIGEgY2VydGFpbiBldmVudCBpc1xuICAgKiBoYXBwZW5pbmcuIEluIG91ciBjYXNlIHdlIHdpbGwgbG9nIHRoZSBwZXJmb3JtYW5jZS5tYXJrIGludG9cbiAgICogdGhlIFBlcmZvcm1hbmNlRW50cnkgQVBJIG9uY2UgdGhlIGltYWdlIGlzIGZ1bGx5IGxvYWRlZC5cbiAgICogUGVyZm9ybWFuY2UgbW9uaXRvcmluZyB0b29scyBsaWtlIFNwZWVkQ3VydmUgb3IgTGlnaHRob3VzZSBhcmVcbiAgICogdGhlbiBhYmxlIHRvIGdyYWIgdGhlc2UgZW50cmllcyBmcm9tIHRoZSBQZXJmb3JtYW5jZUVudHJ5IEFQSVxuICAgKiBhbmQgZ2l2ZSB1cyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFuZCBpbnNpZ2h0cyBhYm91dCBvdXIgcGFnZVxuICAgKiBsb2FkaW5nIGJlaGF2aW91ci4gV2UgYXJlIHRoZW4gYWxzbyBhYmxlIHRvIG1vbml0b3IgdGhlc2VcbiAgICogdmFsdWVzIG92ZXIgYSBsb25nIHBlcmlvZCB0byBzZWUgaWYgb3VyIHBlcmZvcm1hbmNlXG4gICAqIGluY3JlYXNlcyBvciBkZWNyZWFzZXMgb3ZlciB0aW1lLiBCZXN0IHRvIHVzZSBsb3dlcmNhc2Ugc3RyaW5nc1xuICAgKiBoZXJlLCBzZXBhcmF0ZSB3b3JkcyB3aXRoIHVuZGVyc2NvcmVzIG9yIGRhc2hlcy5cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdwZXJmb3JtYW5jZS1tYXJrJyB9KVxuICBwdWJsaWMgYWNjZXNzb3IgcGVyZm9ybWFuY2VNYXJrOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogV2l0aCB0aGUgcGljdHVyZVNpemVzQ29uZmlnIG9iamVjdCwgeW91IGNhbiBwYXNzIGluIGluZm9ybWF0aW9uXG4gICAqIGludG8gaW1hZ2UgYWJvdXQgd2hhdCBraW5kIG9mIHNvdXJjZSBlbGVtZW50cyBzaG91bGQgZ2V0XG4gICAqIHJlbmRlcmVkLiBtZWRpYVF1ZXJpZXMgYWNjZXB0cyBtdWx0aXBsZSBNZWRpYSBRdWVyeSBlbnRyaWVzXG4gICAqIHdoaWNoIGNhbiBnZXQgY29tYmluZWQgYnkgZGVmaW5pbmcgYSBjb25kaXRpb25PcGVyYXRvci5cbiAgICogVHlwZSBpczogc3RyaW5naWZpZWQgSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWctT2JqZWN0XG4gICAqIEFuIGV4YW1wbGUgY291bGQgbG9vayBsaWtlIHRoaXM6XG4gICAqIHtcbiAgICogICAgXCJicmVha3BvaW50c1wiOiBbXG4gICAqICAgICAge1xuICAgKiAgICAgICAgXCJpbWFnZVwiOiB7XG4gICAqICAgICAgICAgIFwiaGVpZ2h0XCI6IFwiNjc1XCIsXG4gICAqICAgICAgICAgIFwid2lkdGhcIjogXCIxMjAwXCJcbiAgICogICAgICAgIH0sXG4gICAqICAgICAgICBcIm1lZGlhUXVlcmllc1wiOiBbXG4gICAqICAgICAgICAgIHtcbiAgICogICAgICAgICAgICBcImNvbmRpdGlvbkZlYXR1cmVcIjogXCJtaW4td2lkdGhcIixcbiAgICogICAgICAgICAgICBcImNvbmRpdGlvbkZlYXR1cmVWYWx1ZVwiOiB7XG4gICAqICAgICAgICAgICAgICBcImx5bmVEZXNpZ25Ub2tlblwiOiB0cnVlLFxuICAgKiAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcInNiYi1icmVha3BvaW50LWxhcmdlLW1pblwiXG4gICAqICAgICAgICAgICAgfSxcbiAgICogICAgICAgICAgICBcImNvbmRpdGlvbk9wZXJhdG9yXCI6IGZhbHNlXG4gICAqICAgICAgICAgIH1cbiAgICogICAgICAgIF1cbiAgICogICAgICB9LFxuICAgKiAgICAgIHtcbiAgICogICAgICAgIFwiaW1hZ2VcIjoge1xuICAgKiAgICAgICAgICBcImhlaWdodFwiOiBcIjU0OVwiLFxuICAgKiAgICAgICAgICBcIndpZHRoXCI6IFwiOTc2XCJcbiAgICogICAgICAgIH0sXG4gICAqICAgICAgICBcIm1lZGlhUXVlcmllc1wiOiBbXG4gICAqICAgICAgICAgIHtcbiAgICogICAgICAgICAgICBcImNvbmRpdGlvbkZlYXR1cmVcIjogXCJtaW4td2lkdGhcIixcbiAgICogICAgICAgICAgICBcImNvbmRpdGlvbkZlYXR1cmVWYWx1ZVwiOiB7XG4gICAqICAgICAgICAgICAgICBcImx5bmVEZXNpZ25Ub2tlblwiOiB0cnVlLFxuICAgKiAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcInNiYi1icmVha3BvaW50LXNtYWxsLW1pblwiXG4gICAqICAgICAgICAgICAgfSxcbiAgICogICAgICAgICAgICBcImNvbmRpdGlvbk9wZXJhdG9yXCI6IGZhbHNlXG4gICAqICAgICAgICAgIH1cbiAgICogICAgICAgIF1cbiAgICogICAgICB9LFxuICAgKiAgICAgIHtcbiAgICogICAgICAgIFwiaW1hZ2VcIjoge1xuICAgKiAgICAgICAgICBcImhlaWdodFwiOiBcIjE4MFwiLFxuICAgKiAgICAgICAgICBcIndpZHRoXCI6IFwiMzIwXCJcbiAgICogICAgICAgIH0sXG4gICAqICAgICAgICBcIm1lZGlhUXVlcmllc1wiOiBbXG4gICAqICAgICAgICAgIHtcbiAgICogICAgICAgICAgICBcImNvbmRpdGlvbkZlYXR1cmVcIjogXCJtYXgtd2lkdGhcIixcbiAgICogICAgICAgICAgICBcImNvbmRpdGlvbkZlYXR1cmVWYWx1ZVwiOiB7XG4gICAqICAgICAgICAgICAgICBcImx5bmVEZXNpZ25Ub2tlblwiOiB0cnVlLFxuICAgKiAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcInNiYi1icmVha3BvaW50LW1pY3JvLW1heFwiXG4gICAqICAgICAgICAgICAgfSxcbiAgICogICAgICAgICAgICBcImNvbmRpdGlvbk9wZXJhdG9yXCI6IFwiYW5kXCJcbiAgICogICAgICAgICAgfSxcbiAgICogICAgICAgICAge1xuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVwiOiBcIm9yaWVudGF0aW9uXCIsXG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlVmFsdWVcIjoge1xuICAgKiAgICAgICAgICAgICAgXCJseW5lRGVzaWduVG9rZW5cIjogZmFsc2UsXG4gICAqICAgICAgICAgICAgICBcInZhbHVlXCI6IFwibGFuZHNjYXBlXCJcbiAgICogICAgICAgICAgICB9LFxuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uT3BlcmF0b3JcIjogZmFsc2VcbiAgICogICAgICAgICAgfVxuICAgKiAgICAgICAgXVxuICAgKiAgICAgIH1cbiAgICogICAgXVxuICAgKiAgfVxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3BpY3R1cmUtc2l6ZXMtY29uZmlnJyB9KVxuICBwdWJsaWMgYWNjZXNzb3IgcGljdHVyZVNpemVzQ29uZmlnOiBzdHJpbmcgPSAnJztcblxuICAvKiogV2hldGhlciB0aGUgaW1hZ2UgaXMgZmluaXNoZWQgbG9hZGluZyBvciBmYWlsZWQgdG8gbG9hZC4gKi9cbiAgcHVibGljIGdldCBjb21wbGV0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yPy48SFRNTEltYWdlRWxlbWVudD4oJy5zYmItaW1hZ2VfX2ltZycpPy5jb21wbGV0ZSA/PyBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKCF0aGlzLl9jYXB0aW9uRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xpbmtzSW5DYXB0aW9uID0gdGhpcy5fY2FwdGlvbkVsZW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MTGlua0VsZW1lbnQ+KCdhJyk7XG5cbiAgICBpZiAoIXRoaXMuX2xpbmtzSW5DYXB0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fYWRkRm9jdXNBYmlsaXR5VG9MaW5rc0luQ2FwdGlvbigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgLy8gV2UgbmVlZCB0byB3YWl0IHVudGlsIHRoZSB1cGRhdGUgaXMgY29tcGxldGUgdG8gY2hlY2sgd2hldGhlciB0aGUgaW1hZ2UgaGFzIGFscmVhZHkgYmVlbiBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlO1xuICAgIGlmICh0aGlzLmNvbXBsZXRlKSB7XG4gICAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1sb2FkZWQnLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9sb2dQZXJmb3JtYW5jZU1hcmtzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBlcmZvcm1hbmNlTWFyaykge1xuICAgICAgcGVyZm9ybWFuY2UuY2xlYXJNYXJrcyh0aGlzLnBlcmZvcm1hbmNlTWFyayk7XG4gICAgICBwZXJmb3JtYW5jZS5tYXJrKHRoaXMucGVyZm9ybWFuY2VNYXJrKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9tYXRjaE1lZGlhUXVlcnlEZXNpZ25Ub2tlbihicmVha3BvaW50U2l6ZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsdWUgPSBicmVha3BvaW50TWFwW2JyZWFrcG9pbnRTaXplTmFtZV07XG4gICAgcmV0dXJuIHZhbHVlID8gYCR7dmFsdWV9cmVtYCA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWRkRm9jdXNBYmlsaXR5VG9MaW5rc0luQ2FwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9saW5rc0luQ2FwdGlvbj8uZm9yRWFjaCgobGluaykgPT4ge1xuICAgICAgbGluay5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9wcmVwYXJlSW1hZ2VVcmwoYmFzZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkLCBscXVpcCA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICBpZiAoIWJhc2VVcmwgfHwgYmFzZVVybCA9PT0gJycpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBDcmVhdGluZyBhbiBVUkwgd2l0aG91dCBhIHNjaGVtYSB3aWxsIGZhaWwsIGJ1dCBpcyBhIHZhbGlkIGlucHV0IGZvciBiYXNlVXJsLlxuICAgIC8vIGUuZy4gaW1hZ2Utc3JjIGNhbiBiZSBodHRwczovL2V4YW1wbGUuY29tL215LWltYWdlLnBuZyBvciAvbXktaW1hZ2UucG5nXG4gICAgY29uc3QgaXNGdWxseVF1YWxpZmllZFVybCA9ICEhYmFzZVVybC5tYXRjaCgvXlxcdys6XFwvXFwvLyk7XG4gICAgY29uc3QgaW1hZ2VVcmxPYmogPSBpc0Z1bGx5UXVhbGlmaWVkVXJsID8gbmV3IFVSTChiYXNlVXJsKSA6IG5ldyBVUkwoYGh0dHA6Ly9ub29wLyR7YmFzZVVybH1gKTtcblxuICAgIGlmIChscXVpcCkge1xuICAgICAgLy8gYmx1ciBhbmQgc2l6ZTogP2JsdXI9MTAwJnc9MTAwJmg9NTZcbiAgICAgIGltYWdlVXJsT2JqLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2JsdXInLCAnMTAwJyk7XG4gICAgICBpbWFnZVVybE9iai5zZWFyY2hQYXJhbXMuYXBwZW5kKCd3JywgJzEwMCcpO1xuICAgICAgaW1hZ2VVcmxPYmouc2VhcmNoUGFyYW1zLmFwcGVuZCgnaCcsICc1NicpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDRE4gSW5mb3JtYXRpb246IGh0dHBzOi8vZG9jcy5pbWdpeC5jb20vYXBpcy9yZW5kZXJpbmdcbiAgICAgIC8vIHBhcmFtLmF1dG86ID9hdXRvPWZvcm1hdCxjb21wcmVzcyxjcz10aW55c3JnYlxuICAgICAgaW1hZ2VVcmxPYmouc2VhcmNoUGFyYW1zLmFwcGVuZCgnYXV0bycsICdmb3JtYXQsY29tcHJlc3MsY3M9dGlueXNyZ2InKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jdXN0b21Gb2NhbFBvaW50KSB7XG4gICAgICAvLyBjcm9wOiBgJmZpdD1jcm9wJmNyb3A9Zm9jYWxwb2ludCZmcC14PSR7dGhpcy5mb2NhbFBvaW50WH0mZnAteT0ke3RoaXMuZm9jYWxQb2ludFl9JmZwLXo9MWAsXG4gICAgICBpbWFnZVVybE9iai5zZWFyY2hQYXJhbXMuYXBwZW5kKCdmaXQnLCAnY3JvcCcpO1xuICAgICAgaW1hZ2VVcmxPYmouc2VhcmNoUGFyYW1zLmFwcGVuZCgnY3JvcCcsICdmb2NhbHBvaW50Jyk7XG4gICAgICBpbWFnZVVybE9iai5zZWFyY2hQYXJhbXMuYXBwZW5kKCdmcC14JywgdGhpcy5mb2NhbFBvaW50WC50b1N0cmluZygxMCkpO1xuICAgICAgaW1hZ2VVcmxPYmouc2VhcmNoUGFyYW1zLmFwcGVuZCgnZnAteScsIHRoaXMuZm9jYWxQb2ludFkudG9TdHJpbmcoMTApKTtcbiAgICAgIGltYWdlVXJsT2JqLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2ZwLXonLCAnMScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZvY2FsUG9pbnREZWJ1Zykge1xuICAgICAgLy8gZm9jYWxQb2ludERlYnVnOiAnJmZwLWRlYnVnPXRydWUnXG4gICAgICBpbWFnZVVybE9iai5zZWFyY2hQYXJhbXMuYXBwZW5kKCdmcC1kZWJ1ZycsICd0cnVlJyk7XG4gICAgfVxuXG4gICAgLy8gSW4gY2FzZSBvZiBcIm5vb3BcIiBob3N0LCB3ZSBkb24ndCByZXR1cm4gdGhlIGhvc3QgYW5kIG11c3QgcmVtb3ZlIHRoZVxuICAgIC8vIHN0YXJ0aW5nIGAvYCBvZiB0aGUgcGF0aG5hbWUuXG4gICAgcmV0dXJuIGlzRnVsbHlRdWFsaWZpZWRVcmxcbiAgICAgID8gaW1hZ2VVcmxPYmouaHJlZlxuICAgICAgOiBpbWFnZVVybE9iai5wYXRobmFtZS5zdWJzdHJpbmcoMSkgKyBpbWFnZVVybE9iai5zZWFyY2g7XG4gIH1cblxuICBwcml2YXRlIF9wcmVwYXJlUGljdHVyZVNpemVDb25maWdzKCk6IEludGVyZmFjZUltYWdlQXR0cmlidXRlc1NpemVzQ29uZmlnQnJlYWtwb2ludFtdIHtcbiAgICBsZXQgcGljdHVyZVNpemVzQ29uZmlnO1xuXG4gICAgaWYgKHRoaXMucGljdHVyZVNpemVzQ29uZmlnKSB7XG4gICAgICBwaWN0dXJlU2l6ZXNDb25maWcgPSB0aGlzLnBpY3R1cmVTaXplc0NvbmZpZztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmYXVsdCBjb25maWdcbiAgICAgIHBpY3R1cmVTaXplc0NvbmZpZyA9IGB7XG4gICAgICAgIFwiYnJlYWtwb2ludHNcIjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiaW1hZ2VcIjoge1xuICAgICAgICAgICAgICBcImhlaWdodFwiOiA2NzUsXG4gICAgICAgICAgICAgIFwid2lkdGhcIjogMTIwMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwibWVkaWFRdWVyaWVzXCI6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVwiOiBcIm1pbi13aWR0aFwiLFxuICAgICAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVZhbHVlXCI6IHtcbiAgICAgICAgICAgICAgICAgIFwibHluZURlc2lnblRva2VuXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICBcInZhbHVlXCI6IFwic2JiLWJyZWFrcG9pbnQtbGFyZ2UtbWluXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiY29uZGl0aW9uT3BlcmF0b3JcIjogZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJpbWFnZVwiOiB7XG4gICAgICAgICAgICAgIFwiaGVpZ2h0XCI6IDU0OSxcbiAgICAgICAgICAgICAgXCJ3aWR0aFwiOiA5NzZcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIm1lZGlhUXVlcmllc1wiOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBcImNvbmRpdGlvbkZlYXR1cmVcIjogXCJtaW4td2lkdGhcIixcbiAgICAgICAgICAgICAgICBcImNvbmRpdGlvbkZlYXR1cmVWYWx1ZVwiOiB7XG4gICAgICAgICAgICAgICAgICBcImx5bmVEZXNpZ25Ub2tlblwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcInNiYi1icmVha3BvaW50LW1pY3JvLW1pblwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcImNvbmRpdGlvbk9wZXJhdG9yXCI6IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiaW1hZ2VcIjoge1xuICAgICAgICAgICAgICBcImhlaWdodFwiOiAxODAsXG4gICAgICAgICAgICAgIFwid2lkdGhcIjogMzIwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJtZWRpYVF1ZXJpZXNcIjogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlXCI6IFwibWF4LXdpZHRoXCIsXG4gICAgICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlVmFsdWVcIjoge1xuICAgICAgICAgICAgICAgICAgXCJseW5lRGVzaWduVG9rZW5cIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIFwidmFsdWVcIjogXCJzYmItYnJlYWtwb2ludC16ZXJvLW1heFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcImNvbmRpdGlvbk9wZXJhdG9yXCI6IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1gO1xuICAgIH1cblxuICAgIHJldHVybiBpbWFnZUhlbHBlckdldEJyZWFrcG9pbnRzKHBpY3R1cmVTaXplc0NvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVNZWRpYVF1ZXJ5U3RyaW5nKFxuICAgIG1lZGlhUXVlcmllczogSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWdNZWRpYVF1ZXJ5W10sXG4gICk6IHN0cmluZyB7XG4gICAgbGV0IG1lZGlhUXVlcnkgPSAnJztcblxuICAgIG1lZGlhUXVlcmllcy5mb3JFYWNoKChtcSkgPT4ge1xuICAgICAgY29uc3QgbXFDb25kaXRpb24gPSBtcS5jb25kaXRpb25GZWF0dXJlO1xuICAgICAgbGV0IG1xVmFsdWU7XG5cbiAgICAgIGlmIChtcS5jb25kaXRpb25GZWF0dXJlVmFsdWUubHluZURlc2lnblRva2VuKSB7XG4gICAgICAgIG1xVmFsdWUgPSB0aGlzLl9tYXRjaE1lZGlhUXVlcnlEZXNpZ25Ub2tlbihtcS5jb25kaXRpb25GZWF0dXJlVmFsdWUudmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXFWYWx1ZSA9IG1xLmNvbmRpdGlvbkZlYXR1cmVWYWx1ZS52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbXFDb21iaW5lciA9IG1xLmNvbmRpdGlvbk9wZXJhdG9yID8gYCAke21xLmNvbmRpdGlvbk9wZXJhdG9yfSBgIDogJyc7XG5cbiAgICAgIG1lZGlhUXVlcnkgKz0gYCgke21xQ29uZGl0aW9ufTogJHttcVZhbHVlfSkke21xQ29tYmluZXJ9YDtcbiAgICB9KTtcblxuICAgIHJldHVybiBtZWRpYVF1ZXJ5O1xuICB9XG5cbiAgQGV2ZW50T3B0aW9ucyhldmVudExpc3RlbmVyT3B0aW9ucylcbiAgcHJpdmF0ZSBfaW1hZ2VMb2FkZWQoKTogdm9pZCB7XG4gICAgdGhpcy5fbG9nUGVyZm9ybWFuY2VNYXJrcygpO1xuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWxvYWRlZCcsIHRydWUpO1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2xvYWQnKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCBpbWFnZVVybExRSVAgPSB0aGlzLl9wcmVwYXJlSW1hZ2VVcmwodGhpcy5pbWFnZVNyYywgdHJ1ZSk7XG4gICAgY29uc3QgaW1hZ2VVcmxXaXRoUGFyYW1zID0gdGhpcy5fcHJlcGFyZUltYWdlVXJsKHRoaXMuaW1hZ2VTcmMsIGZhbHNlKTtcblxuICAgIGlmICh0aGlzLmxvYWRpbmcgPT09ICdsYXp5Jykge1xuICAgICAgdGhpcy5kZWNvZGluZyA9ICdhc3luYyc7XG4gICAgICB0aGlzLmltcG9ydGFuY2UgPSAnbG93JztcbiAgICB9XG5cbiAgICBjb25zdCBwaWN0dXJlU2l6ZUNvbmZpZ3MgPSB0aGlzLl9wcmVwYXJlUGljdHVyZVNpemVDb25maWdzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWx0IGF0dHJpYnV0ZSBzaG91bGQgYWx3YXlzIGJlIHByZXNlbnQgZm9yIHRoZSBpbWcgZWxlbWVudC5cbiAgICAgKiBJZiBpdCBoYXMgYW4gZW1wdHkgc3RyaW5nIGFzIGl0cyB2YWx1ZSwgaXQgaXMgc2ltcGx5IGlnbm9yZWRcbiAgICAgKiBieSBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLiBJZiB3ZSBsZWF2ZSBpdCBvdXQgY29tcGxldGVseSxcbiAgICAgKiB0aGV5IG1pZ2h0IHRyeSB0byBpbnRlcnByZXQgdGhlIGltZyBlbGVtZW50LlxuICAgICAqL1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1pbWFnZV9fd3JhcHBlclwiPlxuICAgICAgICAkeyF0aGlzLnNraXBMcWlwXG4gICAgICAgICAgPyBodG1sYDxpbWdcbiAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzYmItaW1hZ2VfX2JsdXJyZWRcIlxuICAgICAgICAgICAgICBzcmM9JHtpbWFnZVVybExRSVB9XG4gICAgICAgICAgICAgIHdpZHRoPVwiMTAwMFwiXG4gICAgICAgICAgICAgIGhlaWdodD1cIjU2MlwiXG4gICAgICAgICAgICAgIGxvYWRpbmc9JHt0aGlzLmxvYWRpbmcgPz8gbm90aGluZ31cbiAgICAgICAgICAgICAgZGVjb2Rpbmc9JHt0aGlzLmRlY29kaW5nID8/IG5vdGhpbmd9XG4gICAgICAgICAgICAvPmBcbiAgICAgICAgICA6IG5vdGhpbmd9XG5cbiAgICAgICAgPHBpY3R1cmU+XG4gICAgICAgICAgPCEtLSByZW5kZXIgcGljdHVyZSBlbGVtZW50IHNvdXJjZXMgLS0+XG4gICAgICAgICAgJHtwaWN0dXJlU2l6ZUNvbmZpZ3MubWFwKChjb25maWcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gY29uZmlnLmltYWdlLmhlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlV2lkdGggPSBjb25maWcuaW1hZ2Uud2lkdGg7XG4gICAgICAgICAgICBjb25zdCBtZWRpYVF1ZXJ5ID0gdGhpcy5fY3JlYXRlTWVkaWFRdWVyeVN0cmluZyhjb25maWcubWVkaWFRdWVyaWVzKTtcbiAgICAgICAgICAgIHJldHVybiBodG1sYFxuICAgICAgICAgICAgICA8c291cmNlXG4gICAgICAgICAgICAgICAgbWVkaWE9JHtgJHttZWRpYVF1ZXJ5fWB9XG4gICAgICAgICAgICAgICAgc2l6ZXM9JHtgJHtpbWFnZVdpZHRofXB4YH1cbiAgICAgICAgICAgICAgICBzcmNzZXQ9JHtcbiAgICAgICAgICAgICAgICAgIGAke2ltYWdlVXJsV2l0aFBhcmFtc30mdz0ke2ltYWdlV2lkdGh9Jmg9JHtpbWFnZUhlaWdodH0mcT0ke3RoaXMuX2NvbmZpZy5ub25SZXRpbmFRdWFsaXR5fSAke2ltYWdlV2lkdGh9dywgYCArXG4gICAgICAgICAgICAgICAgICBgJHtpbWFnZVVybFdpdGhQYXJhbXN9Jnc9JHtpbWFnZVdpZHRoICogMn0maD0ke2ltYWdlSGVpZ2h0ICogMn0mcT0ke1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb25maWcucmV0aW5hUXVhbGl0eVxuICAgICAgICAgICAgICAgICAgfSAke2ltYWdlV2lkdGggKiAyfXdgXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA+PC9zb3VyY2U+YDtcbiAgICAgICAgICB9KX1cbiAgICAgICAgICA8aW1nXG4gICAgICAgICAgICBhbHQ9JHt0aGlzLmFsdCB8fCAnJ31cbiAgICAgICAgICAgIEBsb2FkPSR7dGhpcy5faW1hZ2VMb2FkZWR9XG4gICAgICAgICAgICBAZXJyb3I9JHsoKSA9PiB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdlcnJvcicpKX1cbiAgICAgICAgICAgIGNsYXNzPVwic2JiLWltYWdlX19pbWdcIlxuICAgICAgICAgICAgc3JjPSR7dGhpcy5pbWFnZVNyYyF9XG4gICAgICAgICAgICB3aWR0aD1cIjEwMDBcIlxuICAgICAgICAgICAgaGVpZ2h0PVwiNTYyXCJcbiAgICAgICAgICAgIGxvYWRpbmc9JHt0aGlzLmxvYWRpbmcgPz8gbm90aGluZ31cbiAgICAgICAgICAgIGRlY29kaW5nPSR7dGhpcy5kZWNvZGluZyA/PyBub3RoaW5nfVxuICAgICAgICAgICAgLmZldGNoUHJpb3JpdHk9JHt0aGlzLmltcG9ydGFuY2UgPz8gbm90aGluZ31cbiAgICAgICAgICAvPlxuICAgICAgICA8L3BpY3R1cmU+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItaW1hZ2UnOiBTYmJJbWFnZUVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJfYSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVEQSxNQUFNLDRCQUE0QixDQUNoQyxlQUNtRDtBQUNuRCxNQUFJLENBQUMsY0FBYyxXQUFXLFdBQVcsR0FBRztBQUMxQyxXQUFPOztBQUlILFFBQUEsYUFDRixNQUNFLFFBQVEsS0FDTixxSkFBcUo7QUFHekosTUFBQTtBQUVBLE1BQUE7QUFDVyxpQkFBQSxLQUFLLE1BQU0sVUFBVTtBQUFBLEVBQUEsUUFDNUI7O0FBRU4sV0FBTzs7QUFHVCxNQUFJLENBQUMsV0FBVyxlQUFlLFdBQVcsWUFBWSxXQUFXLEdBQUc7O0FBRWxFLFdBQU87O0FB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