@sbb-esta/lyne-elements 1.6.0 → 1.8.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 (609) hide show
  1. package/accordion/accordion.d.ts +0 -1
  2. package/action-group/action-group.d.ts +0 -1
  3. package/alert/alert/alert.d.ts +0 -1
  4. package/alert/alert-group/alert-group.d.ts +0 -1
  5. package/alert/alert.js +1 -1
  6. package/autocomplete/autocomplete-base-element.d.ts +0 -1
  7. package/autocomplete/autocomplete.d.ts +0 -1
  8. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts +0 -1
  9. package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts +0 -1
  10. package/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.d.ts +0 -1
  11. package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts +0 -1
  12. package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.d.ts +0 -1
  13. package/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.d.ts +0 -1
  14. package/autocomplete.js +1 -1
  15. package/breadcrumb/breadcrumb/breadcrumb.d.ts +0 -1
  16. package/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts +0 -1
  17. package/breadcrumb/breadcrumb-group.js +2 -2
  18. package/breadcrumb/breadcrumb.js +11 -11
  19. package/button/button/button.d.ts +0 -1
  20. package/button/button-link/button-link.d.ts +0 -1
  21. package/button/button-static/button-static.d.ts +0 -1
  22. package/button/common/button-common.d.ts +0 -1
  23. package/button/mini-button/mini-button-base-element.d.ts +0 -1
  24. package/button/mini-button/mini-button.d.ts +0 -1
  25. package/button/mini-button-group/index.d.ts +2 -0
  26. package/button/mini-button-group/index.d.ts.map +1 -0
  27. package/button/mini-button-group/mini-button-group.d.ts +28 -0
  28. package/button/mini-button-group/mini-button-group.d.ts.map +1 -0
  29. package/button/mini-button-group.d.ts +2 -0
  30. package/button/mini-button-group.d.ts.map +1 -0
  31. package/button/mini-button-group.js +47 -0
  32. package/button/secondary-button/secondary-button.d.ts +0 -1
  33. package/button/secondary-button-link/secondary-button-link.d.ts +0 -1
  34. package/button/secondary-button-static/secondary-button-static.d.ts +0 -1
  35. package/button/tertiary-button/tertiary-button.d.ts +0 -1
  36. package/button/tertiary-button-link/tertiary-button-link.d.ts +0 -1
  37. package/button/tertiary-button-static/tertiary-button-static.d.ts +0 -1
  38. package/button/transparent-button/transparent-button.d.ts +0 -1
  39. package/button/transparent-button-link/transparent-button-link.d.ts +0 -1
  40. package/button/transparent-button-static/transparent-button-static.d.ts +0 -1
  41. package/button.d.ts +1 -0
  42. package/button.d.ts.map +1 -1
  43. package/button.js +1 -0
  44. package/calendar/calendar.d.ts +5 -3
  45. package/calendar/calendar.d.ts.map +1 -1
  46. package/calendar.js +73 -66
  47. package/card/card/card.d.ts +0 -1
  48. package/card/card-badge/card-badge.d.ts +0 -1
  49. package/card/card-button/card-button.d.ts +0 -1
  50. package/card/card-link/card-link.d.ts +0 -1
  51. package/card/card.js +1 -1
  52. package/card/common/card-action-common.d.ts +0 -1
  53. package/checkbox/checkbox/checkbox.d.ts +0 -1
  54. package/checkbox/checkbox-group/checkbox-group.d.ts +0 -1
  55. package/checkbox/checkbox-panel/checkbox-panel.d.ts +0 -1
  56. package/checkbox/common/checkbox-common.d.ts +0 -1
  57. package/chip/chip.d.ts +0 -1
  58. package/chip.js +1 -1
  59. package/clock/clock.d.ts +0 -1
  60. package/clock/clock.d.ts.map +1 -1
  61. package/container/container/container.d.ts +1 -1
  62. package/container/container/container.d.ts.map +1 -1
  63. package/container/container.js +21 -16
  64. package/container/sticky-bar/sticky-bar.d.ts +0 -1
  65. package/container/sticky-bar.js +5 -5
  66. package/core/a11y/focus-visible-within-controller.d.ts +0 -1
  67. package/core/base-elements/action-base-element.d.ts +0 -1
  68. package/core/base-elements/button-base-element.d.ts +0 -1
  69. package/core/base-elements/link-base-element.d.ts +0 -1
  70. package/core/base-elements/open-close-base-element.d.ts +10 -1
  71. package/core/base-elements/open-close-base-element.d.ts.map +1 -1
  72. package/core/base-elements.js +4 -0
  73. package/core/config/config.d.ts +0 -1
  74. package/core/controllers/connected-abort-controller.d.ts +0 -1
  75. package/core/controllers/inert-controller.d.ts +18 -0
  76. package/core/controllers/inert-controller.d.ts.map +1 -0
  77. package/core/controllers/language-controller.d.ts +0 -1
  78. package/core/controllers/slot-state-controller.d.ts +0 -1
  79. package/core/controllers.d.ts +1 -0
  80. package/core/controllers.d.ts.map +1 -1
  81. package/core/controllers.js +67 -23
  82. package/core/datetime/native-date-adapter.d.ts +0 -1
  83. package/core/decorators/host-attributes.d.ts +0 -1
  84. package/core/decorators/slot-state.d.ts +0 -1
  85. package/core/dom/ssr.d.ts +0 -1
  86. package/core/eventing/form-element-handlers.d.ts +0 -1
  87. package/core/i18n/i18n.d.ts +0 -1
  88. package/core/i18n.js +1 -1
  89. package/core/images.d.ts.map +1 -1
  90. package/core/mixins/disabled-mixin.d.ts +0 -1
  91. package/core/mixins/form-associated-checkbox-mixin.d.ts +0 -1
  92. package/core/mixins/form-associated-mixin.d.ts +0 -1
  93. package/core/mixins/hydration-mixin.d.ts +0 -1
  94. package/core/mixins/named-slot-list-mixin.d.ts +7 -2
  95. package/core/mixins/named-slot-list-mixin.d.ts.map +1 -1
  96. package/core/mixins/negative-mixin.d.ts +0 -1
  97. package/core/mixins/panel-mixin.d.ts +0 -1
  98. package/core/mixins/required-mixin.d.ts +0 -1
  99. package/core/mixins/update-scheduler-mixin.d.ts +0 -1
  100. package/core/mixins.js +100 -88
  101. package/core/overlay/overlay.d.ts +0 -14
  102. package/core/overlay/overlay.d.ts.map +1 -1
  103. package/core/overlay.js +36 -86
  104. package/core/styles/core.scss +21 -19
  105. package/core/styles/mixins/link.scss +9 -6
  106. package/core/styles/mixins/lists.scss +5 -5
  107. package/core/styles/mixins/pearl-chain-bullet.scss +14 -9
  108. package/core/styles/mixins/table.scss +19 -17
  109. package/core/testing/mocha-extensions.d.ts +0 -1
  110. package/core/testing/wait-for-image-ready.d.ts +0 -1
  111. package/core/testing/wait-for-render.d.ts +0 -1
  112. package/core.css +10 -8
  113. package/custom-elements.json +3533 -1027
  114. package/datepicker/common/datepicker-button.d.ts +0 -1
  115. package/datepicker/datepicker/datepicker.d.ts +0 -1
  116. package/datepicker/datepicker-next-day/datepicker-next-day.d.ts +0 -1
  117. package/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts +0 -1
  118. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts +4 -1
  119. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  120. package/datepicker/datepicker-toggle.js +51 -41
  121. package/development/accordion/accordion.d.ts +0 -1
  122. package/development/action-group/action-group.d.ts +0 -1
  123. package/development/alert/alert/alert.d.ts +0 -1
  124. package/development/alert/alert-group/alert-group.d.ts +0 -1
  125. package/development/alert/alert.js +1 -1
  126. package/development/autocomplete/autocomplete-base-element.d.ts +0 -1
  127. package/development/autocomplete/autocomplete.d.ts +0 -1
  128. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts +0 -1
  129. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts +0 -1
  130. package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.d.ts +0 -1
  131. package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts +0 -1
  132. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.d.ts +0 -1
  133. package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.d.ts +0 -1
  134. package/development/autocomplete.js +7 -5
  135. package/development/breadcrumb/breadcrumb/breadcrumb.d.ts +0 -1
  136. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts +0 -1
  137. package/development/breadcrumb/breadcrumb-group.js +4 -4
  138. package/development/breadcrumb/breadcrumb.js +8 -6
  139. package/development/button/button/button.d.ts +0 -1
  140. package/development/button/button-link/button-link.d.ts +0 -1
  141. package/development/button/button-static/button-static.d.ts +0 -1
  142. package/development/button/common/button-common.d.ts +0 -1
  143. package/development/button/mini-button/mini-button-base-element.d.ts +0 -1
  144. package/development/button/mini-button/mini-button.d.ts +0 -1
  145. package/development/button/mini-button-group/index.d.ts +2 -0
  146. package/development/button/mini-button-group/index.d.ts.map +1 -0
  147. package/development/button/mini-button-group/mini-button-group.d.ts +28 -0
  148. package/development/button/mini-button-group/mini-button-group.d.ts.map +1 -0
  149. package/development/button/mini-button-group.d.ts +2 -0
  150. package/development/button/mini-button-group.d.ts.map +1 -0
  151. package/development/button/mini-button-group.js +142 -0
  152. package/development/button/secondary-button/secondary-button.d.ts +0 -1
  153. package/development/button/secondary-button-link/secondary-button-link.d.ts +0 -1
  154. package/development/button/secondary-button-static/secondary-button-static.d.ts +0 -1
  155. package/development/button/tertiary-button/tertiary-button.d.ts +0 -1
  156. package/development/button/tertiary-button-link/tertiary-button-link.d.ts +0 -1
  157. package/development/button/tertiary-button-static/tertiary-button-static.d.ts +0 -1
  158. package/development/button/transparent-button/transparent-button.d.ts +0 -1
  159. package/development/button/transparent-button-link/transparent-button-link.d.ts +0 -1
  160. package/development/button/transparent-button-static/transparent-button-static.d.ts +0 -1
  161. package/development/button.d.ts +1 -0
  162. package/development/button.d.ts.map +1 -1
  163. package/development/button.js +2 -1
  164. package/development/calendar/calendar.d.ts +5 -3
  165. package/development/calendar/calendar.d.ts.map +1 -1
  166. package/development/calendar.js +38 -22
  167. package/development/card/card/card.d.ts +0 -1
  168. package/development/card/card-badge/card-badge.d.ts +0 -1
  169. package/development/card/card-button/card-button.d.ts +0 -1
  170. package/development/card/card-link/card-link.d.ts +0 -1
  171. package/development/card/card.js +3 -3
  172. package/development/card/common/card-action-common.d.ts +0 -1
  173. package/development/checkbox/checkbox/checkbox.d.ts +0 -1
  174. package/development/checkbox/checkbox-group/checkbox-group.d.ts +0 -1
  175. package/development/checkbox/checkbox-panel/checkbox-panel.d.ts +0 -1
  176. package/development/checkbox/common/checkbox-common.d.ts +0 -1
  177. package/development/chip/chip.d.ts +0 -1
  178. package/development/chip.js +4 -2
  179. package/development/clock/clock.d.ts +0 -1
  180. package/development/clock/clock.d.ts.map +1 -1
  181. package/development/clock.js +1 -1
  182. package/development/container/container/container.d.ts +1 -1
  183. package/development/container/container/container.d.ts.map +1 -1
  184. package/development/container/container.js +44 -4
  185. package/development/container/sticky-bar/sticky-bar.d.ts +0 -1
  186. package/development/container/sticky-bar.js +1 -4
  187. package/development/core/a11y/focus-visible-within-controller.d.ts +0 -1
  188. package/development/core/base-elements/action-base-element.d.ts +0 -1
  189. package/development/core/base-elements/button-base-element.d.ts +0 -1
  190. package/development/core/base-elements/link-base-element.d.ts +0 -1
  191. package/development/core/base-elements/open-close-base-element.d.ts +10 -1
  192. package/development/core/base-elements/open-close-base-element.d.ts.map +1 -1
  193. package/development/core/base-elements.js +5 -1
  194. package/development/core/config/config.d.ts +0 -1
  195. package/development/core/controllers/connected-abort-controller.d.ts +0 -1
  196. package/development/core/controllers/inert-controller.d.ts +18 -0
  197. package/development/core/controllers/inert-controller.d.ts.map +1 -0
  198. package/development/core/controllers/language-controller.d.ts +0 -1
  199. package/development/core/controllers/slot-state-controller.d.ts +0 -1
  200. package/development/core/controllers.d.ts +1 -0
  201. package/development/core/controllers.d.ts.map +1 -1
  202. package/development/core/controllers.js +90 -1
  203. package/development/core/datetime/native-date-adapter.d.ts +0 -1
  204. package/development/core/decorators/host-attributes.d.ts +0 -1
  205. package/development/core/decorators/slot-state.d.ts +0 -1
  206. package/development/core/dom/ssr.d.ts +0 -1
  207. package/development/core/eventing/form-element-handlers.d.ts +0 -1
  208. package/development/core/i18n/i18n.d.ts +0 -1
  209. package/development/core/i18n.js +2 -2
  210. package/development/core/images.d.ts.map +1 -1
  211. package/development/core/mixins/disabled-mixin.d.ts +0 -1
  212. package/development/core/mixins/form-associated-checkbox-mixin.d.ts +0 -1
  213. package/development/core/mixins/form-associated-mixin.d.ts +0 -1
  214. package/development/core/mixins/hydration-mixin.d.ts +0 -1
  215. package/development/core/mixins/named-slot-list-mixin.d.ts +7 -2
  216. package/development/core/mixins/named-slot-list-mixin.d.ts.map +1 -1
  217. package/development/core/mixins/negative-mixin.d.ts +0 -1
  218. package/development/core/mixins/panel-mixin.d.ts +0 -1
  219. package/development/core/mixins/required-mixin.d.ts +0 -1
  220. package/development/core/mixins/update-scheduler-mixin.d.ts +0 -1
  221. package/development/core/mixins.js +24 -12
  222. package/development/core/overlay/overlay.d.ts +0 -14
  223. package/development/core/overlay/overlay.d.ts.map +1 -1
  224. package/development/core/overlay.js +1 -87
  225. package/development/core/testing/mocha-extensions.d.ts +0 -1
  226. package/development/core/testing/wait-for-image-ready.d.ts +0 -1
  227. package/development/core/testing/wait-for-render.d.ts +0 -1
  228. package/development/datepicker/common/datepicker-button.d.ts +0 -1
  229. package/development/datepicker/datepicker/datepicker.d.ts +0 -1
  230. package/development/datepicker/datepicker-next-day/datepicker-next-day.d.ts +0 -1
  231. package/development/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts +0 -1
  232. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts +4 -1
  233. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  234. package/development/datepicker/datepicker-toggle.js +20 -3
  235. package/development/dialog/dialog/dialog.d.ts +0 -1
  236. package/development/dialog/dialog/dialog.d.ts.map +1 -1
  237. package/development/dialog/dialog-actions/dialog-actions.d.ts +0 -1
  238. package/development/dialog/dialog-content/dialog-content.d.ts +0 -1
  239. package/development/dialog/dialog-content.js +8 -6
  240. package/development/dialog/dialog-title/dialog-title.d.ts +0 -1
  241. package/development/dialog/dialog.js +9 -6
  242. package/development/divider/divider.d.ts +0 -1
  243. package/development/expansion-panel/expansion-panel/expansion-panel.d.ts +0 -1
  244. package/development/expansion-panel/expansion-panel-content/expansion-panel-content.d.ts +0 -1
  245. package/development/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts +0 -1
  246. package/development/expansion-panel/expansion-panel-header.js +1 -1
  247. package/development/file-selector/file-selector.d.ts +0 -1
  248. package/development/flip-card/flip-card/flip-card.d.ts +22 -7
  249. package/development/flip-card/flip-card/flip-card.d.ts.map +1 -1
  250. package/development/flip-card/flip-card-details/flip-card-details.d.ts +0 -1
  251. package/development/flip-card/flip-card-details/flip-card-details.d.ts.map +1 -1
  252. package/development/flip-card/flip-card-details.js +28 -9
  253. package/development/flip-card/flip-card-summary/flip-card-summary.d.ts +0 -1
  254. package/development/flip-card/flip-card-summary.js +8 -1
  255. package/development/flip-card/flip-card.js +132 -32
  256. package/development/footer/footer.d.ts +0 -1
  257. package/development/footer.js +1 -1
  258. package/development/form-error/form-error.d.ts +0 -1
  259. package/development/form-error.js +4 -4
  260. package/development/form-field/form-field/form-field.d.ts +1 -2
  261. package/development/form-field/form-field/form-field.d.ts.map +1 -1
  262. package/development/form-field/form-field-clear/form-field-clear.d.ts +0 -1
  263. package/development/form-field/form-field.js +74 -29
  264. package/development/header/common/header-action-common.d.ts +0 -1
  265. package/development/header/common.js +2 -2
  266. package/development/header/header/header.d.ts +0 -1
  267. package/development/header/header-button/header-button.d.ts +0 -1
  268. package/development/header/header-link/header-link.d.ts +0 -1
  269. package/development/header/header.js +2 -2
  270. package/development/icon/icon-base.d.ts +0 -1
  271. package/development/icon/icon-name-mixin.d.ts +0 -1
  272. package/development/icon/icon.d.ts +0 -1
  273. package/development/image/image.d.ts +0 -1
  274. package/development/image.js +2 -2
  275. package/development/journey-header/journey-header.d.ts +0 -1
  276. package/development/lead-container/lead-container.d.ts +0 -1
  277. package/development/lead-container.js +6 -2
  278. package/development/link/block-link/block-link.d.ts +0 -1
  279. package/development/link/block-link-button/block-link-button.d.ts +0 -1
  280. package/development/link/block-link-static/block-link-static.d.ts +0 -1
  281. package/development/link/common/block-link-common.d.ts +0 -1
  282. package/development/link/common/inline-link-common.d.ts +0 -1
  283. package/development/link/common/link-common.d.ts +0 -1
  284. package/development/link/common.js +9 -7
  285. package/development/link/link/link.d.ts +0 -1
  286. package/development/link/link-button/link-button.d.ts +0 -1
  287. package/development/link/link-static/link-static.d.ts +0 -1
  288. package/development/link-list/common/link-list-base.d.ts +27 -0
  289. package/development/link-list/common/link-list-base.d.ts.map +1 -0
  290. package/development/link-list/common.d.ts +2 -0
  291. package/development/link-list/common.d.ts.map +1 -0
  292. package/development/link-list/common.js +113 -0
  293. package/development/link-list/link-list/link-list.d.ts +22 -0
  294. package/development/link-list/link-list/link-list.d.ts.map +1 -0
  295. package/development/link-list/link-list-anchor/index.d.ts +2 -0
  296. package/development/link-list/link-list-anchor/index.d.ts.map +1 -0
  297. package/development/link-list/link-list-anchor/link-list-anchor.d.ts +17 -0
  298. package/development/link-list/link-list-anchor/link-list-anchor.d.ts.map +1 -0
  299. package/development/link-list/link-list-anchor.d.ts +2 -0
  300. package/development/link-list/link-list-anchor.d.ts.map +1 -0
  301. package/development/link-list/link-list-anchor.js +91 -0
  302. package/development/link-list/link-list.d.ts +1 -38
  303. package/development/link-list/link-list.d.ts.map +1 -1
  304. package/development/link-list/link-list.js +194 -0
  305. package/development/link-list.d.ts +2 -0
  306. package/development/link-list.d.ts.map +1 -1
  307. package/development/link-list.js +4 -260
  308. package/development/loading-indicator/loading-indicator.d.ts +0 -1
  309. package/development/logo/logo.d.ts +0 -1
  310. package/development/logo.js +2 -2
  311. package/development/map-container/map-container.d.ts +0 -1
  312. package/development/map-container.js +13 -11
  313. package/development/menu/common/menu-action-common.d.ts +0 -1
  314. package/development/menu/menu/menu.d.ts +1 -1
  315. package/development/menu/menu/menu.d.ts.map +1 -1
  316. package/development/menu/menu-button/menu-button.d.ts +0 -1
  317. package/development/menu/menu-link/menu-link.d.ts +0 -1
  318. package/development/menu/menu.js +13 -14
  319. package/development/message/message.d.ts +0 -1
  320. package/development/navigation/common/navigation-action-common.d.ts +0 -1
  321. package/development/navigation/navigation/navigation.d.ts +1 -1
  322. package/development/navigation/navigation/navigation.d.ts.map +1 -1
  323. package/development/navigation/navigation-button/navigation-button.d.ts +0 -1
  324. package/development/navigation/navigation-link/navigation-link.d.ts +0 -1
  325. package/development/navigation/navigation-list/navigation-list.d.ts +0 -1
  326. package/development/navigation/navigation-marker/navigation-marker.d.ts +0 -1
  327. package/development/navigation/navigation-section/navigation-section.d.ts +0 -1
  328. package/development/navigation/navigation-section.js +7 -5
  329. package/development/navigation/navigation.js +18 -19
  330. package/development/notification/notification.d.ts +0 -1
  331. package/development/option/optgroup/optgroup-base-element.d.ts +0 -1
  332. package/development/option/optgroup/optgroup.d.ts +0 -1
  333. package/development/option/option/option-base-element.d.ts +0 -1
  334. package/development/option/option/option.d.ts +0 -1
  335. package/development/overlay/overlay-base-element.d.ts +2 -2
  336. package/development/overlay/overlay-base-element.d.ts.map +1 -1
  337. package/development/overlay/overlay.d.ts +0 -1
  338. package/development/overlay/overlay.d.ts.map +1 -1
  339. package/development/overlay.js +13 -13
  340. package/development/popover/popover/popover.d.ts +0 -1
  341. package/development/popover/popover/popover.d.ts.map +1 -1
  342. package/development/popover/popover-trigger/popover-trigger.d.ts +0 -1
  343. package/development/popover/popover-trigger.js +3 -3
  344. package/development/popover/popover.js +6 -4
  345. package/development/radio-button/common/radio-button-common.d.ts +0 -1
  346. package/development/radio-button/common.js +6 -6
  347. package/development/radio-button/radio-button/radio-button.d.ts +0 -1
  348. package/development/radio-button/radio-button-group/radio-button-group.d.ts +0 -1
  349. package/development/radio-button/radio-button-panel/radio-button-panel.d.ts +0 -1
  350. package/development/screen-reader-only/screen-reader-only.d.ts +0 -1
  351. package/development/select/select.d.ts +0 -1
  352. package/development/select.js +7 -5
  353. package/development/selection-expansion-panel/selection-expansion-panel.d.ts +0 -1
  354. package/development/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  355. package/development/selection-expansion-panel.js +6 -2
  356. package/development/signet/signet.d.ts +0 -1
  357. package/development/signet.js +1 -1
  358. package/development/skiplink-list/skiplink-list.d.ts +0 -1
  359. package/development/slider/slider.d.ts +0 -1
  360. package/development/slider.js +4 -4
  361. package/development/status/status.d.ts +0 -1
  362. package/development/stepper/step/step.d.ts +0 -1
  363. package/development/stepper/step-label/step-label.d.ts +0 -1
  364. package/development/stepper/stepper/stepper.d.ts +0 -1
  365. package/development/table/table-wrapper/table-wrapper.d.ts +0 -1
  366. package/development/tabs/tab/tab.d.ts +0 -1
  367. package/development/tabs/tab-group/tab-group.d.ts +0 -1
  368. package/development/tabs/tab-label/tab-label.d.ts +0 -1
  369. package/development/tabs/tab-label.js +10 -10
  370. package/development/tag/tag/tag.d.ts +0 -1
  371. package/development/tag/tag-group/tag-group.d.ts +0 -1
  372. package/development/tag/tag.js +3 -3
  373. package/development/teaser/teaser.d.ts +0 -1
  374. package/development/teaser-hero/teaser-hero.d.ts +27 -0
  375. package/development/teaser-hero/teaser-hero.d.ts.map +1 -0
  376. package/development/teaser-hero.d.ts +2 -0
  377. package/development/teaser-hero.d.ts.map +1 -0
  378. package/development/teaser-hero.js +207 -0
  379. package/development/teaser-product/common/teaser-product-common.d.ts +7 -0
  380. package/development/teaser-product/common/teaser-product-common.d.ts.map +1 -0
  381. package/development/teaser-product/common.d.ts +2 -0
  382. package/development/teaser-product/common.d.ts.map +1 -0
  383. package/development/teaser-product/common.js +219 -0
  384. package/development/teaser-product/teaser-product/teaser-product.d.ts +22 -0
  385. package/development/teaser-product/teaser-product/teaser-product.d.ts.map +1 -0
  386. package/development/teaser-product/teaser-product-static/teaser-product-static.d.ts +22 -0
  387. package/development/teaser-product/teaser-product-static/teaser-product-static.d.ts.map +1 -0
  388. package/development/teaser-product/teaser-product-static.d.ts +2 -0
  389. package/development/teaser-product/teaser-product-static.d.ts.map +1 -0
  390. package/development/teaser-product/teaser-product-static.js +25 -0
  391. package/development/teaser-product/teaser-product.d.ts +2 -0
  392. package/development/teaser-product/teaser-product.d.ts.map +1 -0
  393. package/development/teaser-product/teaser-product.js +80 -0
  394. package/development/teaser-product.d.ts +4 -0
  395. package/development/teaser-product.d.ts.map +1 -0
  396. package/development/teaser-product.js +4 -0
  397. package/development/time-input/time-input.d.ts +0 -1
  398. package/development/timetable-occupancy/timetable-occupancy.d.ts +0 -1
  399. package/development/timetable-occupancy-icon/timetable-occupancy-icon.d.ts +0 -1
  400. package/development/timetable-occupancy.js +1 -1
  401. package/development/title/title-base.d.ts +0 -1
  402. package/development/title/title.d.ts +0 -1
  403. package/development/toast/toast.d.ts +0 -1
  404. package/development/toggle/toggle/toggle.d.ts +2 -2
  405. package/development/toggle/toggle/toggle.d.ts.map +1 -1
  406. package/development/toggle/toggle-option/toggle-option.d.ts +0 -1
  407. package/development/toggle/toggle-option/toggle-option.d.ts.map +1 -1
  408. package/development/toggle/toggle-option.js +3 -2
  409. package/development/toggle/toggle.js +8 -8
  410. package/development/toggle-check/toggle-check.d.ts +0 -1
  411. package/development/train/train/train.d.ts +0 -1
  412. package/development/train/train-blocked-passage/train-blocked-passage.d.ts +0 -1
  413. package/development/train/train-blocked-passage.js +1 -1
  414. package/development/train/train-formation/train-formation.d.ts +0 -1
  415. package/development/train/train-formation.js +9 -7
  416. package/development/train/train-wagon/train-wagon.d.ts +0 -1
  417. package/development/train/train-wagon.js +1 -1
  418. package/development/train/train.js +1 -1
  419. package/development/visual-checkbox/visual-checkbox.d.ts +0 -1
  420. package/development/visual-checkbox.js +1 -1
  421. package/dialog/dialog/dialog.d.ts +0 -1
  422. package/dialog/dialog/dialog.d.ts.map +1 -1
  423. package/dialog/dialog-actions/dialog-actions.d.ts +0 -1
  424. package/dialog/dialog-content/dialog-content.d.ts +0 -1
  425. package/dialog/dialog-content.js +1 -1
  426. package/dialog/dialog-title/dialog-title.d.ts +0 -1
  427. package/dialog/dialog.js +11 -12
  428. package/divider/divider.d.ts +0 -1
  429. package/expansion-panel/expansion-panel/expansion-panel.d.ts +0 -1
  430. package/expansion-panel/expansion-panel-content/expansion-panel-content.d.ts +0 -1
  431. package/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts +0 -1
  432. package/expansion-panel/expansion-panel-header.js +1 -1
  433. package/file-selector/file-selector.d.ts +0 -1
  434. package/flip-card/flip-card/flip-card.d.ts +22 -7
  435. package/flip-card/flip-card/flip-card.d.ts.map +1 -1
  436. package/flip-card/flip-card-details/flip-card-details.d.ts +0 -1
  437. package/flip-card/flip-card-details/flip-card-details.d.ts.map +1 -1
  438. package/flip-card/flip-card-details.js +19 -17
  439. package/flip-card/flip-card-summary/flip-card-summary.d.ts +0 -1
  440. package/flip-card/flip-card-summary.js +13 -13
  441. package/flip-card/flip-card.js +68 -35
  442. package/footer/footer.d.ts +0 -1
  443. package/footer.js +1 -1
  444. package/form-error/form-error.d.ts +0 -1
  445. package/form-error.js +1 -1
  446. package/form-field/form-field/form-field.d.ts +1 -2
  447. package/form-field/form-field/form-field.d.ts.map +1 -1
  448. package/form-field/form-field-clear/form-field-clear.d.ts +0 -1
  449. package/form-field/form-field.js +22 -22
  450. package/header/common/header-action-common.d.ts +0 -1
  451. package/header/common.js +1 -1
  452. package/header/header/header.d.ts +0 -1
  453. package/header/header-button/header-button.d.ts +0 -1
  454. package/header/header-link/header-link.d.ts +0 -1
  455. package/header/header.js +1 -1
  456. package/icon/icon-base.d.ts +0 -1
  457. package/icon/icon-name-mixin.d.ts +0 -1
  458. package/icon/icon.d.ts +0 -1
  459. package/image/image.d.ts +0 -1
  460. package/image.js +25 -25
  461. package/index.d.ts +11 -1
  462. package/index.js +11 -1
  463. package/journey-header/journey-header.d.ts +0 -1
  464. package/lead-container/lead-container.d.ts +0 -1
  465. package/lead-container.js +1 -1
  466. package/link/block-link/block-link.d.ts +0 -1
  467. package/link/block-link-button/block-link-button.d.ts +0 -1
  468. package/link/block-link-static/block-link-static.d.ts +0 -1
  469. package/link/common/block-link-common.d.ts +0 -1
  470. package/link/common/inline-link-common.d.ts +0 -1
  471. package/link/common/link-common.d.ts +0 -1
  472. package/link/common.js +6 -6
  473. package/link/link/link.d.ts +0 -1
  474. package/link/link-button/link-button.d.ts +0 -1
  475. package/link/link-static/link-static.d.ts +0 -1
  476. package/link-list/common/link-list-base.d.ts +27 -0
  477. package/link-list/common/link-list-base.d.ts.map +1 -0
  478. package/link-list/common.d.ts +2 -0
  479. package/link-list/common.d.ts.map +1 -0
  480. package/link-list/common.js +59 -0
  481. package/link-list/link-list/link-list.d.ts +22 -0
  482. package/link-list/link-list/link-list.d.ts.map +1 -0
  483. package/link-list/link-list-anchor/index.d.ts +2 -0
  484. package/link-list/link-list-anchor/index.d.ts.map +1 -0
  485. package/link-list/link-list-anchor/link-list-anchor.d.ts +17 -0
  486. package/link-list/link-list-anchor/link-list-anchor.d.ts.map +1 -0
  487. package/link-list/link-list-anchor.d.ts +2 -0
  488. package/link-list/link-list-anchor.d.ts.map +1 -0
  489. package/link-list/link-list-anchor.js +18 -0
  490. package/link-list/link-list.d.ts +1 -38
  491. package/link-list/link-list.d.ts.map +1 -1
  492. package/link-list/link-list.js +27 -0
  493. package/link-list.d.ts +2 -0
  494. package/link-list.d.ts.map +1 -1
  495. package/link-list.js +3 -66
  496. package/loading-indicator/loading-indicator.d.ts +0 -1
  497. package/logo/logo.d.ts +0 -1
  498. package/logo.js +1 -1
  499. package/map-container/map-container.d.ts +0 -1
  500. package/map-container.js +1 -1
  501. package/menu/common/menu-action-common.d.ts +0 -1
  502. package/menu/menu/menu.d.ts +1 -1
  503. package/menu/menu/menu.d.ts.map +1 -1
  504. package/menu/menu-button/menu-button.d.ts +0 -1
  505. package/menu/menu-link/menu-link.d.ts +0 -1
  506. package/menu/menu.js +30 -30
  507. package/message/message.d.ts +0 -1
  508. package/navigation/common/navigation-action-common.d.ts +0 -1
  509. package/navigation/navigation/navigation.d.ts +1 -1
  510. package/navigation/navigation/navigation.d.ts.map +1 -1
  511. package/navigation/navigation-button/navigation-button.d.ts +0 -1
  512. package/navigation/navigation-link/navigation-link.d.ts +0 -1
  513. package/navigation/navigation-list/navigation-list.d.ts +0 -1
  514. package/navigation/navigation-marker/navigation-marker.d.ts +0 -1
  515. package/navigation/navigation-section/navigation-section.d.ts +0 -1
  516. package/navigation/navigation-section.js +1 -1
  517. package/navigation/navigation.js +37 -37
  518. package/notification/notification.d.ts +0 -1
  519. package/option/optgroup/optgroup-base-element.d.ts +0 -1
  520. package/option/optgroup/optgroup.d.ts +0 -1
  521. package/option/option/option-base-element.d.ts +0 -1
  522. package/option/option/option.d.ts +0 -1
  523. package/overlay/overlay-base-element.d.ts +2 -2
  524. package/overlay/overlay-base-element.d.ts.map +1 -1
  525. package/overlay/overlay.d.ts +0 -1
  526. package/overlay/overlay.d.ts.map +1 -1
  527. package/overlay.js +44 -45
  528. package/package.json +46 -1
  529. package/popover/popover/popover.d.ts +0 -1
  530. package/popover/popover/popover.d.ts.map +1 -1
  531. package/popover/popover-trigger/popover-trigger.d.ts +0 -1
  532. package/popover/popover-trigger.js +1 -1
  533. package/popover/popover.js +2 -2
  534. package/radio-button/common/radio-button-common.d.ts +0 -1
  535. package/radio-button/common.js +1 -1
  536. package/radio-button/radio-button/radio-button.d.ts +0 -1
  537. package/radio-button/radio-button-group/radio-button-group.d.ts +0 -1
  538. package/radio-button/radio-button-panel/radio-button-panel.d.ts +0 -1
  539. package/screen-reader-only/screen-reader-only.d.ts +0 -1
  540. package/select/select.d.ts +0 -1
  541. package/select.js +1 -1
  542. package/selection-expansion-panel/selection-expansion-panel.d.ts +0 -1
  543. package/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  544. package/signet/signet.d.ts +0 -1
  545. package/signet.js +1 -1
  546. package/skiplink-list/skiplink-list.d.ts +0 -1
  547. package/slider/slider.d.ts +0 -1
  548. package/slider.js +1 -1
  549. package/standard-theme.css +19 -13
  550. package/status/status.d.ts +0 -1
  551. package/stepper/step/step.d.ts +0 -1
  552. package/stepper/step-label/step-label.d.ts +0 -1
  553. package/stepper/stepper/stepper.d.ts +0 -1
  554. package/table/table-wrapper/table-wrapper.d.ts +0 -1
  555. package/tabs/tab/tab.d.ts +0 -1
  556. package/tabs/tab-group/tab-group.d.ts +0 -1
  557. package/tabs/tab-label/tab-label.d.ts +0 -1
  558. package/tabs/tab-label.js +1 -1
  559. package/tag/tag/tag.d.ts +0 -1
  560. package/tag/tag-group/tag-group.d.ts +0 -1
  561. package/tag/tag.js +1 -1
  562. package/teaser/teaser.d.ts +0 -1
  563. package/teaser-hero/teaser-hero.d.ts +27 -0
  564. package/teaser-hero/teaser-hero.d.ts.map +1 -0
  565. package/teaser-hero.d.ts +2 -0
  566. package/teaser-hero.d.ts.map +1 -0
  567. package/teaser-hero.js +58 -0
  568. package/teaser-product/common/teaser-product-common.d.ts +7 -0
  569. package/teaser-product/common/teaser-product-common.d.ts.map +1 -0
  570. package/teaser-product/common.d.ts +2 -0
  571. package/teaser-product/common.d.ts.map +1 -0
  572. package/teaser-product/common.js +38 -0
  573. package/teaser-product/teaser-product/teaser-product.d.ts +22 -0
  574. package/teaser-product/teaser-product/teaser-product.d.ts.map +1 -0
  575. package/teaser-product/teaser-product-static/teaser-product-static.d.ts +22 -0
  576. package/teaser-product/teaser-product-static/teaser-product-static.d.ts.map +1 -0
  577. package/teaser-product/teaser-product-static.d.ts +2 -0
  578. package/teaser-product/teaser-product-static.d.ts.map +1 -0
  579. package/teaser-product/teaser-product-static.js +19 -0
  580. package/teaser-product/teaser-product.d.ts +2 -0
  581. package/teaser-product/teaser-product.d.ts.map +1 -0
  582. package/teaser-product/teaser-product.js +21 -0
  583. package/teaser-product.d.ts +4 -0
  584. package/teaser-product.d.ts.map +1 -0
  585. package/teaser-product.js +3 -0
  586. package/time-input/time-input.d.ts +0 -1
  587. package/timetable-occupancy/timetable-occupancy.d.ts +0 -1
  588. package/timetable-occupancy-icon/timetable-occupancy-icon.d.ts +0 -1
  589. package/timetable-occupancy.js +1 -1
  590. package/title/title-base.d.ts +0 -1
  591. package/title/title.d.ts +0 -1
  592. package/toast/toast.d.ts +0 -1
  593. package/toggle/toggle/toggle.d.ts +2 -2
  594. package/toggle/toggle/toggle.d.ts.map +1 -1
  595. package/toggle/toggle-option/toggle-option.d.ts +0 -1
  596. package/toggle/toggle-option/toggle-option.d.ts.map +1 -1
  597. package/toggle/toggle-option.js +8 -8
  598. package/toggle/toggle.js +21 -22
  599. package/toggle-check/toggle-check.d.ts +0 -1
  600. package/train/train/train.d.ts +0 -1
  601. package/train/train-blocked-passage/train-blocked-passage.d.ts +0 -1
  602. package/train/train-blocked-passage.js +1 -1
  603. package/train/train-formation/train-formation.d.ts +0 -1
  604. package/train/train-formation.js +1 -1
  605. package/train/train-wagon/train-wagon.d.ts +0 -1
  606. package/train/train-wagon.js +1 -1
  607. package/train/train.js +1 -1
  608. package/visual-checkbox/visual-checkbox.d.ts +0 -1
  609. package/visual-checkbox.js +1 -1
@@ -1,6 +1,5 @@
1
1
  import { LitElement } from 'lit';
2
2
  import { Constructor } from './constructor.js';
3
-
4
3
  export declare abstract class SbbFormAssociatedMixinType {
5
4
  get form(): HTMLFormElement | null;
6
5
  get name(): string;
@@ -1,6 +1,5 @@
1
1
  import { LitElement } from 'lit';
2
2
  import { AbstractConstructor } from './constructor.js';
3
-
4
3
  export declare abstract class SbbHydrationMixinType {
5
4
  /**
6
5
  * Returns a Promise that resolves when the element has completed hydration.
@@ -1,7 +1,10 @@
1
1
  import { LitElement, TemplateResult } from 'lit';
2
2
  import { AbstractConstructor } from './constructor.js';
3
3
  import { SbbHydrationMixinType } from './hydration-mixin.js';
4
-
4
+ export type SbbNamedSlotProperties = {
5
+ name: string;
6
+ ariaHidden: boolean;
7
+ };
5
8
  /**
6
9
  * Helper type for willUpdate or similar checks.
7
10
  * Allows the usage of the string literal 'listChildren'.
@@ -23,8 +26,10 @@ export declare abstract class SbbNamedSlotListMixinType<C extends HTMLElement> e
23
26
  class?: string;
24
27
  ariaLabel?: string;
25
28
  ariaLabelledby?: string;
29
+ }, listItemAttributes?: {
30
+ localNameVisualOnly?: string[];
26
31
  }): TemplateResult;
27
- protected listSlotNames(): string[];
32
+ protected listSlotEntries(): SbbNamedSlotProperties[];
28
33
  protected renderHiddenSlot(): TemplateResult;
29
34
  }
30
35
  export declare const SbbNamedSlotListMixin: <C extends HTMLElement, T extends AbstractConstructor<LitElement>>(superClass: T) => AbstractConstructor<SbbNamedSlotListMixinType<C>> & T;
@@ -1 +1 @@
1
- {"version":3,"file":"named-slot-list-mixin.d.ts","sourceRoot":"","sources":["../../../../../src/elements/core/mixins/named-slot-list-mixin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,UAAU,EAAW,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAK1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAqB,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,6BAA6B,CAAC;AAKrC;;;;;;;;;;GAUG;AACH,MAAM,MAAM,gBAAgB,CAC1B,CAAC,SAAS,yBAAyB,CAAC,CAAC,CAAC,EACtC,CAAC,SAAS,WAAW,GAAG,WAAW,IACjC,CAAC,GAAG;IAAE,YAAY,EAAE,CAAC,EAAE,CAAA;CAAE,CAAC;AAE9B,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,yBAAyB,CACrD,CAAC,SAAS,WAAW,CACrB,SAAQ,qBAAqB;IAC7B,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,EAAE,CAAC;IACjD,SAAS,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC;IACrC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QAChC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,GAAG,cAAc;IAClB,SAAS,CAAC,aAAa,IAAI,MAAM,EAAE;IACnC,SAAS,CAAC,gBAAgB,IAAI,cAAc;CAC7C;AAGD,eAAO,MAAM,qBAAqB,GAChC,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,mBAAmB,CAAC,UAAU,CAAC,cAE7B,CAAC,KACZ,mBAAmB,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,GAAG,CAsHtD,CAAC"}
1
+ {"version":3,"file":"named-slot-list-mixin.d.ts","sourceRoot":"","sources":["../../../../../src/elements/core/mixins/named-slot-list-mixin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,UAAU,EAAW,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAK1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAqB,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,6BAA6B,CAAC;AAKrC,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,MAAM,gBAAgB,CAC1B,CAAC,SAAS,yBAAyB,CAAC,CAAC,CAAC,EACtC,CAAC,SAAS,WAAW,GAAG,WAAW,IACjC,CAAC,GAAG;IAAE,YAAY,EAAE,CAAC,EAAE,CAAA;CAAE,CAAC;AAE9B,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,yBAAyB,CACrD,CAAC,SAAS,WAAW,CACrB,SAAQ,qBAAqB;IAC7B,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,EAAE,CAAC;IACjD,SAAS,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC;IACrC,SAAS,CAAC,UAAU,CAClB,UAAU,CAAC,EAAE;QACX,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,EACD,kBAAkB,CAAC,EAAE;QACnB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;KAChC,GACA,cAAc;IACjB,SAAS,CAAC,eAAe,IAAI,sBAAsB,EAAE;IACrD,SAAS,CAAC,gBAAgB,IAAI,cAAc;CAC7C;AAGD,eAAO,MAAM,qBAAqB,GAChC,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,mBAAmB,CAAC,UAAU,CAAC,cAE7B,CAAC,KACZ,mBAAmB,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,GAAG,CAsItD,CAAC"}
@@ -1,6 +1,5 @@
1
1
  import { LitElement } from 'lit';
2
2
  import { AbstractConstructor } from './constructor.js';
3
-
4
3
  export declare class SbbNegativeMixinType {
5
4
  negative: boolean;
6
5
  }
@@ -1,6 +1,5 @@
1
1
  import { LitElement } from 'lit';
2
2
  import { AbstractConstructor } from './constructor.js';
3
-
4
3
  export declare class SbbPanelMixinType {
5
4
  color: 'white' | 'milk';
6
5
  borderless: boolean;
@@ -1,7 +1,6 @@
1
1
  import { LitElement } from 'lit';
2
2
  import { AbstractConstructor } from './constructor.js';
3
3
  import { SbbFormAssociatedMixinType } from './form-associated-mixin.js';
4
-
5
4
  export declare class SbbRequiredMixinType {
6
5
  set required(value: boolean);
7
6
  get required(): boolean;
@@ -1,6 +1,5 @@
1
1
  import { LitElement } from 'lit';
2
2
  import { AbstractConstructor } from './constructor.js';
3
-
4
3
  export declare class SbbUpdateSchedulerMixinType {
5
4
  protected startUpdate(): void;
6
5
  protected completeUpdate(): void;
@@ -437,16 +437,16 @@ const SbbNamedSlotListMixin = (superClass) => {
437
437
  (_a = this.shadowRoot) == null ? void 0 : _a.removeEventListener("slotchange", this._handleSlotchange);
438
438
  }
439
439
  /**
440
- * Renders list and list slots for slotted children or an amount of list slots
440
+ * Renders list and list slots for slotted children or a number of list slots
441
441
  * corresponding to the `data-ssr-child-count` attribute value.
442
442
  *
443
443
  * This is a possible optimization for SSR, as in an SSR Lit environment
444
444
  * other elements are not available, but might be available in the meta
445
- * framework wrapper (like e.g. React). This allows to provide the amount of
445
+ * framework wrapper (like e.g. React). This allows to provide the number of
446
446
  * children to be passed via the `data-ssr-child-count` attribute value.
447
447
  */
448
- renderList(attributes = {}) {
449
- const listSlotNames = this.listSlotNames();
448
+ renderList(attributes = {}, listItemAttributes = {}) {
449
+ const listSlotNames = this.listSlotEntries(listItemAttributes);
450
450
  if (listSlotNames.length >= 2) {
451
451
  return html`
452
452
  <ul
@@ -454,14 +454,20 @@ const SbbNamedSlotListMixin = (superClass) => {
454
454
  aria-label=${attributes.ariaLabel || nothing}
455
455
  aria-labelledby=${attributes.ariaLabelledby || nothing}
456
456
  >
457
- ${listSlotNames.map((name) => html`<li><slot name=${name}></slot></li>`)}
457
+ ${listSlotNames.map(
458
+ (slot) => html`
459
+ <li aria-hidden=${slot.ariaHidden || nothing}>
460
+ <slot name=${slot.name}></slot>
461
+ </li>
462
+ `
463
+ )}
458
464
  </ul>
459
465
  ${this.renderHiddenSlot()}
460
466
  `;
461
467
  } else if (listSlotNames.length === 1) {
462
468
  return html`<sbb-screen-reader-only>${attributes.ariaLabel}</sbb-screen-reader-only>
463
469
  <span class=${attributes.class || (this.localName ?? getLocalName(this))}>
464
- <span><slot name=${listSlotNames[0]}></slot></span>
470
+ <span><slot name=${listSlotNames[0].name}></slot></span>
465
471
  </span>
466
472
  ${this.renderHiddenSlot()} `;
467
473
  } else {
@@ -469,17 +475,23 @@ const SbbNamedSlotListMixin = (superClass) => {
469
475
  }
470
476
  }
471
477
  /**
472
- * Returns an array of list slot names with the length corresponding to the amount of matched
473
- * children or the `data-ssr-child-count` attribute value.
478
+ * Returns an array of SbbNamedSlotProperties, which holds the list slot names and the hidden property;
479
+ * its length corresponds to the number of matched children or the `data-ssr-child-count` attribute value.
474
480
  *
475
481
  * This is a possible optimization for SSR, as in an SSR Lit environment
476
482
  * other elements are not available, but might be available in the meta
477
- * framework wrapper (like e.g. React). This allows to provide the amount of
483
+ * framework wrapper (like e.g. React). This allows to provide the number of
478
484
  * children to be passed via the `data-ssr-child-count` attribute value.
479
485
  */
480
- listSlotNames() {
486
+ listSlotEntries(listItemAttributes) {
481
487
  const listChildren = this.listChildren.length ? this.listChildren : Array.from({ length: +(this.getAttribute(SSR_CHILD_COUNT_ATTRIBUTE) ?? 0) });
482
- return listChildren.map((_, i) => `${SLOTNAME_PREFIX}-${i}`);
488
+ return listChildren.map((e, i) => {
489
+ var _a;
490
+ return {
491
+ name: `${SLOTNAME_PREFIX}-${i}`,
492
+ ariaHidden: ((_a = listItemAttributes == null ? void 0 : listItemAttributes.localNameVisualOnly) == null ? void 0 : _a.includes(e.localName)) ?? false
493
+ };
494
+ });
483
495
  }
484
496
  /**
485
497
  * Returns a hidden slot, which is intended as the children change detection.
@@ -711,4 +723,4 @@ export {
711
723
  SbbUpdateSchedulerMixin,
712
724
  panelCommon as panelCommonStyle
713
725
  };
714
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4aW5zLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvY29yZS9taXhpbnMvZGlzYWJsZWQtbWl4aW4udHMiLCIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvY29yZS9taXhpbnMvZm9ybS1hc3NvY2lhdGVkLW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL3JlcXVpcmVkLW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL2Zvcm0tYXNzb2NpYXRlZC1jaGVja2JveC1taXhpbi50cyIsIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL21peGlucy9oeWRyYXRpb24tbWl4aW4udHMiLCIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvY29yZS9taXhpbnMvbmFtZWQtc2xvdC1saXN0LW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL25lZ2F0aXZlLW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL3BhbmVsLW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL3VwZGF0ZS1zY2hlZHVsZXItbWl4aW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBMaXRFbGVtZW50LCBQcm9wZXJ0eVZhbHVlcyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi9jb25zdHJ1Y3Rvci5qcyc7XG5cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIFNiYkRpc2FibGVkTWl4aW5UeXBlIHtcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbik7XG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGlzRGlzYWJsZWRFeHRlcm5hbGx5KCk6IGJvb2xlYW47XG59XG5cbi8qKlxuICogRW5oYW5jZSB5b3VyIGNvbXBvbmVudCB3aXRoIGEgZGlzYWJsZWQgcHJvcGVydHkuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJEaXNhYmxlZE1peGluID0gPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiRGlzYWJsZWRNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYkRpc2FibGVkRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3MgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYkRpc2FibGVkTWl4aW5UeXBlPiB7XG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC4gKi9cbiAgICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gICAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgLy8gVG8gcHJvdmlkZSB0aGUgc2FtZSBiZWhhdmlvciBhcyB0aGUgbmF0aXZlIGRpc2FibGVkIHN0YXRlLFxuICAgICAgLy8gYW55IHZhbHVlIGlzIGNvbnZlcnRlZCB0byBhIGJvb2xlYW4uXG4gICAgICB0aGlzLl9kaXNhYmxlZCA9IEJvb2xlYW4odmFsdWUpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkIHx8IHRoaXMuaXNEaXNhYmxlZEV4dGVybmFsbHkoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdpbGwgYmUgdXNlZCBhcyAnb3InIGNoZWNrIHRvIHRoZSBjdXJyZW50IGRpc2FibGVkIHN0YXRlLlxuICAgICAqIENhbiBlLmcuIGJlIHVzZWQgdG8gcmVhZCBkaXNhYmxlZCBzdGF0ZSBvZiBhIGdyb3VwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpc0Rpc2FibGVkRXh0ZXJuYWxseSgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gU2JiRGlzYWJsZWRFbGVtZW50IGFzIHVua25vd24gYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJEaXNhYmxlZE1peGluVHlwZT4gJiBUO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IFNiYkRpc2FibGVkVGFiSW5kZXhBY3Rpb25NaXhpbiA9IDxUIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxMaXRFbGVtZW50Pj4oXG4gIHN1cGVyQ2xhc3M6IFQsXG4pOiBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkRpc2FibGVkTWl4aW5UeXBlPiAmIFQgPT4ge1xuICBhYnN0cmFjdCBjbGFzcyBTYmJEaXNhYmxlZFRhYkluZGV4QWN0aW9uXG4gICAgZXh0ZW5kcyBTYmJEaXNhYmxlZE1peGluKHN1cGVyQ2xhc3MpXG4gICAgaW1wbGVtZW50cyBTYmJEaXNhYmxlZE1peGluVHlwZVxuICB7XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgICAgaWYgKCFjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBGSVhNRSBpZiB0YWJpbmRleCBpcyBub3QgbmVlZGVkIGluIGNvbWJpbmF0aW9uIHdpdGggYXJpYS1kaXNhYmxlZCxcbiAgICAgIC8vICB1c2UgdGhlIFNiYkRpc2FibGVkTWl4aW4gYW5kIGltcGxlbWVudCBhIGRpZmZlcmVudCB3aWxsVXBkYXRlIG1ldGhvZC5cbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJywgJ3RydWUnKTtcbiAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcpO1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gU2JiRGlzYWJsZWRUYWJJbmRleEFjdGlvbiBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkRpc2FibGVkTWl4aW5UeXBlPiAmIFQ7XG59O1xuIiwiaW1wb3J0IHR5cGUgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IuanMnO1xuXG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZSB7XG4gIHB1YmxpYyBnZXQgZm9ybSgpOiBIVE1MRm9ybUVsZW1lbnQgfCBudWxsO1xuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nO1xuICBwdWJsaWMgc2V0IG5hbWUodmFsdWU6IHN0cmluZyk7XG4gIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogc3RyaW5nIHwgbnVsbDtcbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCk7XG5cbiAgcHVibGljIGdldCB2YWxpZGl0eSgpOiBWYWxpZGl0eVN0YXRlO1xuICBwdWJsaWMgZ2V0IHZhbGlkYXRpb25NZXNzYWdlKCk6IHN0cmluZztcbiAgcHVibGljIGdldCB3aWxsVmFsaWRhdGUoKTogYm9vbGVhbjtcblxuICBwcm90ZWN0ZWQgZm9ybURpc2FibGVkOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW50ZXJuYWxzOiBFbGVtZW50SW50ZXJuYWxzO1xuXG4gIHB1YmxpYyBjaGVja1ZhbGlkaXR5KCk6IGJvb2xlYW47XG4gIHB1YmxpYyByZXBvcnRWYWxpZGl0eSgpOiBib29sZWFuO1xuXG4gIHB1YmxpYyBmb3JtQXNzb2NpYXRlZENhbGxiYWNrPyhmb3JtOiBIVE1MRm9ybUVsZW1lbnQgfCBudWxsKTogdm9pZDtcbiAgcHVibGljIGZvcm1EaXNhYmxlZENhbGxiYWNrKGRpc2FibGVkOiBib29sZWFuKTogdm9pZDtcbiAgcHVibGljIGFic3RyYWN0IGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQ7XG4gIHB1YmxpYyBhYnN0cmFjdCBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLFxuICAgIHJlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24sXG4gICk6IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZUZvcm1WYWx1ZSgpOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBGb3JtQXNzb2NpYXRlZE1peGluIGVuYWJsZXMgbmF0aXZlIGZvcm0gc3VwcG9ydCBmb3IgY3VzdG9tIGNvbnRyb2xzLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgU2JiRm9ybUFzc29jaWF0ZWRNaXhpbiA9IDxUIGV4dGVuZHMgQ29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBzdXBlckNsYXNzOiBULFxuKTogQ29uc3RydWN0b3I8U2JiRm9ybUFzc29jaWF0ZWRNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYkZvcm1Bc3NvY2lhdGVkRWxlbWVudFxuICAgIGV4dGVuZHMgc3VwZXJDbGFzc1xuICAgIGltcGxlbWVudHMgUGFydGlhbDxTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZT5cbiAge1xuICAgIHB1YmxpYyBzdGF0aWMgZm9ybUFzc29jaWF0ZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZm9ybSBvd25lciBvZiBpbnRlcm5hbHMgdGFyZ2V0IGVsZW1lbnQuXG4gICAgICovXG4gICAgcHVibGljIGdldCBmb3JtKCk6IEhUTUxGb3JtRWxlbWVudCB8IG51bGwge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxzLmZvcm07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgZm9ybSBlbGVtZW50LiBXaWxsIGJlIHJlYWQgZnJvbSBuYW1lIGF0dHJpYnV0ZS5cbiAgICAgKlxuICAgICAqIEBkZXNjcmlwdGlvbiBEZXZlbG9wZXIgbm90ZTogSW4gdGhpcyBjYXNlIHVwZGF0aW5nIHRoZSBhdHRyaWJ1dGUgbXVzdCBiZSBzeW5jaHJvbm91cy5cbiAgICAgKiBEdWUgdG8gdGhpcyBpdCBpcyBpbXBsZW1lbnRlZCBhcyBhIGdldHRlci9zZXR0ZXIgYW5kIHRoZSBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSBoYW5kbGVzIHRoZSBkaWZmIGNoZWNrLlxuICAgICAqL1xuICAgIEBwcm9wZXJ0eSgpXG4gICAgcHVibGljIHNldCBuYW1lKG5hbWU6IHN0cmluZykge1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBgJHtuYW1lfWApO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgnbmFtZScpID8/ICcnO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLmxvY2FsTmFtZTtcbiAgICB9XG5cbiAgICAvKiogVmFsdWUgb2YgdGhlIGZvcm0gZWxlbWVudC4gKi9cbiAgICBAcHJvcGVydHkoKVxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1WYWx1ZSgpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgICBwcml2YXRlIF92YWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBWYWxpZGl0eVN0YXRlIG9iamVjdCBmb3IgaW50ZXJuYWxzIHRhcmdldCBlbGVtZW50LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWxpZGl0eSgpOiBWYWxpZGl0eVN0YXRlIHtcbiAgICAgIHJldHVybiB0aGlzLmludGVybmFscy52YWxpZGl0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlIHRoYXQgd291bGQgYmUgc2hvd24gdG8gdGhlIHVzZXJcbiAgICAgKiBpZiBpbnRlcm5hbHMgdGFyZ2V0IGVsZW1lbnQgd2FzIHRvIGJlIGNoZWNrZWQgZm9yIHZhbGlkaXR5LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxzLnZhbGlkYXRpb25NZXNzYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiBpbnRlcm5hbHMgdGFyZ2V0IGVsZW1lbnQgd2lsbCBiZSB2YWxpZGF0ZWRcbiAgICAgKiB3aGVuIHRoZSBmb3JtIGlzIHN1Ym1pdHRlZDsgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCB3aWxsVmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbHMud2lsbFZhbGlkYXRlO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW50ZXJuYWxzOiBFbGVtZW50SW50ZXJuYWxzID0gdGhpcy5hdHRhY2hJbnRlcm5hbHMoKTtcblxuICAgIC8qKiBXaGVuZXZlciBhIHN1cnJvdW5kaW5nIGZvcm0gb3IgZmllbGRzZXQgaXMgY2hhbmdpbmcgaXRzIGRpc2FibGVkIHN0YXRlLiAqL1xuICAgIEBzdGF0ZSgpIHByb3RlY3RlZCBmb3JtRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBvdmVycmlkZSBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soXG4gICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICBvbGQ6IHN0cmluZyB8IG51bGwsXG4gICAgICB2YWx1ZTogc3RyaW5nIHwgbnVsbCxcbiAgICApOiB2b2lkIHtcbiAgICAgIGlmIChuYW1lICE9PSAnbmFtZScgfHwgb2xkICE9PSB2YWx1ZSkge1xuICAgICAgICBzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgb2xkLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIGludGVybmFscyB0YXJnZXQgZWxlbWVudCBoYXMgbm8gdmFsaWRpdHkgcHJvYmxlbXM7IGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKiBGaXJlcyBhbiBpbnZhbGlkIGV2ZW50IGF0IHRoZSBlbGVtZW50IGluIHRoZSBsYXR0ZXIgY2FzZS5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjaGVja1ZhbGlkaXR5KCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxzLmNoZWNrVmFsaWRpdHkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgaW50ZXJuYWxzIHRhcmdldCBlbGVtZW50IGhhcyBubyB2YWxpZGl0eSBwcm9ibGVtczsgb3RoZXJ3aXNlLFxuICAgICAqIHJldHVybnMgZmFsc2UsIGZpcmVzIGFuIGludmFsaWQgZXZlbnQgYXQgdGhlIGVsZW1lbnQsXG4gICAgICogYW5kIChpZiB0aGUgZXZlbnQgaXNuJ3QgY2FuY2VsZWQpIHJlcG9ydHMgdGhlIHByb2JsZW0gdG8gdGhlIHVzZXIuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVwb3J0VmFsaWRpdHkoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbHMucmVwb3J0VmFsaWRpdHkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgYXNzb2NpYXRlZCBmb3JtIGVsZW1lbnQgY2hhbmdlcy5cbiAgICAgKiBFbGVtZW50SW50ZXJuYWxzLmZvcm0gcmV0dXJucyB0aGUgYXNzb2NpYXRlZCBmcm9tIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZm9ybUFzc29jaWF0ZWRDYWxsYmFjaz8oZm9ybTogSFRNTEZvcm1FbGVtZW50IHwgbnVsbCk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBJcyBjYWxsZWQgd2hlbmV2ZXIgYSBzdXJyb3VuZGluZyBmb3JtIC8gZmllbGRzZXQgY2hhbmdlcyBkaXNhYmxlZCBzdGF0ZS5cbiAgICAgKiBAcGFyYW0gZGlzYWJsZWRcbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBmb3JtRGlzYWJsZWRDYWxsYmFjayhkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgLy8gVGhpcyBjYWxsYmFjayBpcyB0cmlnZ2VyZWQgaWYgdGhlIGRpc2FibGVkIHByb3BlcnR5IGNoYW5nZXMgb3IgdGhlIGRpc2FibGVkIGF0dHJpYnV0ZSBvZiBhIGZpZWxkc2V0IG9yIGZvcm0gY2hhbmdlcy5cbiAgICAgIC8vIFdlIG5lZWQgdG8gcG9zdHBvbmUgdGhlIGFzc2lnbm1lbnQsIG90aGVyd2lzZSBpdCBpbnRlcmZlcmVzIHdpdGggZGlzYWJsZWQgc3RhdHVzIHNldHRpbmdcbiAgICAgIC8vIGFuZCBsZWFkcyB0byBhIHdyb25nIHN0YXRlIChlLmcuIGVtYmVkZGVkIHNiYi12aXN1YWwtY2hlY2tib3gpLlxuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybURpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIGZvcm0gaXMgYmVpbmcgcmVzZXQuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgYWJzdHJhY3QgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZDtcblxuICAgIC8qKlxuICAgICAqICBDYWxsZWQgd2hlbiB0aGUgYnJvd3NlciBpcyB0cnlpbmcgdG8gcmVzdG9yZSBlbGVtZW504oCZcyBzdGF0ZSB0byBzdGF0ZSBpbiB3aGljaCBjYXNlXG4gICAgICogIHJlYXNvbiBpcyDigJxyZXN0b3Jl4oCdLCBvciB3aGVuIHRoZSBicm93c2VyIGlzIHRyeWluZyB0byBmdWxmaWxsIGF1dG9maWxsIG9uIGJlaGFsZiBvZlxuICAgICAqICB1c2VyIGluIHdoaWNoIGNhc2UgcmVhc29uIGlzIOKAnGF1dG9jb21wbGV0ZeKAnS5cbiAgICAgKiAgSW4gdGhlIGNhc2Ugb2Yg4oCccmVzdG9yZeKAnSwgc3RhdGUgaXMgYSBzdHJpbmcsIEZpbGUsIG9yIEZvcm1EYXRhIG9iamVjdFxuICAgICAqICBwcmV2aW91c2x5IHNldCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHNldEZvcm1WYWx1ZS5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgICBzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsXG4gICAgICByZWFzb246IEZvcm1SZXN0b3JlUmVhc29uLFxuICAgICk6IHZvaWQ7XG5cbiAgICAvKiogU2hvdWxkIGJlIGNhbGxlZCB3aGVuIGZvcm0gdmFsdWUgaXMgY2hhbmdlZC4gKi9cbiAgICBwcm90ZWN0ZWQgdXBkYXRlRm9ybVZhbHVlKCk6IHZvaWQge1xuICAgICAgdGhpcy5pbnRlcm5hbHMuc2V0Rm9ybVZhbHVlKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gU2JiRm9ybUFzc29jaWF0ZWRFbGVtZW50IGFzIHVua25vd24gYXMgQ29uc3RydWN0b3I8U2JiRm9ybUFzc29jaWF0ZWRNaXhpblR5cGU+ICYgVDtcbn07XG5cbi8qKlxuICogQSB2YWx1ZSB0byBiZSByZXN0b3JlZCBmb3IgYSBjb21wb25lbnQncyBmb3JtIHZhbHVlLiBJZiBhIGNvbXBvbmVudCdzIGZvcm1cbiAqIHN0YXRlIGlzIGEgYEZvcm1EYXRhYCBvYmplY3QsIGl0cyBlbnRyeSBsaXN0IG9mIG5hbWUgYW5kIHZhbHVlcyB3aWxsIGJlXG4gKiBwcm92aWRlZC5cbiAqL1xuZXhwb3J0IHR5cGUgRm9ybVJlc3RvcmVTdGF0ZSA9IEZpbGUgfCBzdHJpbmcgfCBbc3RyaW5nLCBGb3JtRGF0YUVudHJ5VmFsdWVdW107XG5cbi8qKlxuICogVGhlIHJlYXNvbiBhIGZvcm0gY29tcG9uZW50IGlzIGJlaW5nIHJlc3RvcmVkIGZvciwgZWl0aGVyIGAncmVzdG9yZSdgIGZvclxuICogYnJvd3NlciByZXN0b3JhdGlvbiBvciBgJ2F1dG9jb21wbGV0ZSdgIGZvciByZXN0b3JpbmcgdXNlciB2YWx1ZXMuXG4gKi9cbmV4cG9ydCB0eXBlIEZvcm1SZXN0b3JlUmVhc29uID0gJ3Jlc3RvcmUnIHwgJ2F1dG9jb21wbGV0ZSc7XG4iLCJpbXBvcnQgdHlwZSB7IExpdEVsZW1lbnQsIFByb3BlcnR5VmFsdWVzIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cnVjdG9yLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiRm9ybUFzc29jaWF0ZWRNaXhpblR5cGUgfSBmcm9tICcuL2Zvcm0tYXNzb2NpYXRlZC1taXhpbi5qcyc7XG5cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIFNiYlJlcXVpcmVkTWl4aW5UeXBlIHtcbiAgcHVibGljIHNldCByZXF1aXJlZCh2YWx1ZTogYm9vbGVhbik7XG4gIHB1YmxpYyBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGlzUmVxdWlyZWRFeHRlcm5hbGx5KCk6IGJvb2xlYW47XG59XG5cbi8qKlxuICogRW5oYW5jZSB5b3VyIGNvbXBvbmVudCB3aXRoIGEgcmVxdWlyZWQgcHJvcGVydHkuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJSZXF1aXJlZE1peGluID0gPFxuICBUIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxMaXRFbGVtZW50ICYgU2JiRm9ybUFzc29jaWF0ZWRNaXhpblR5cGU+LFxuPihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiUmVxdWlyZWRNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYlJlcXVpcmVkRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3MgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYlJlcXVpcmVkTWl4aW5UeXBlPiB7XG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyByZXF1aXJlZC4gKi9cbiAgICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gICAgcHVibGljIHNldCByZXF1aXJlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgLy8gVG8gcHJvdmlkZSB0aGUgc2FtZSBiZWhhdmlvciBhcyB0aGUgbmF0aXZlIHJlcXVpcmVkIHN0YXRlLFxuICAgICAgLy8gYW55IHZhbHVlIGlzIGNvbnZlcnRlZCB0byBhIGJvb2xlYW4uXG4gICAgICB0aGlzLl9yZXF1aXJlZCA9IEJvb2xlYW4odmFsdWUpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkIHx8IHRoaXMuaXNSZXF1aXJlZEV4dGVybmFsbHkoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgLy8gRmlyZWZveCBuZWVkcyBleHBsaWNpdGx5IHNldCBhcmlhLXJlcXVpcmVkIHZhbHVlLlxuICAgICAgICB0aGlzLmludGVybmFscy5hcmlhUmVxdWlyZWQgPSBgJHt0aGlzLnJlcXVpcmVkfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2lsbCBiZSB1c2VkIGFzICdvcicgY2hlY2sgdG8gdGhlIGN1cnJlbnQgcmVxdWlyZWQgc3RhdGUuXG4gICAgICogQ2FuIGUuZy4gYmUgdXNlZCB0byByZWFkIHJlcXVpcmVkIHN0YXRlIG9mIGEgZ3JvdXAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGlzUmVxdWlyZWRFeHRlcm5hbGx5KCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBTYmJSZXF1aXJlZEVsZW1lbnQgYXMgdW5rbm93biBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYlJlcXVpcmVkTWl4aW5UeXBlPiAmIFQ7XG59O1xuIiwiaW1wb3J0IHsgZGVmYXVsdENvbnZlcnRlciwgdHlwZSBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBob3N0QXR0cmlidXRlcyB9IGZyb20gJy4uL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcHJldmVudFNjcm9sbE9uU3BhY2ViYXJQcmVzcyB9IGZyb20gJy4uL2V2ZW50aW5nLmpzJztcblxuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IuanMnO1xuaW1wb3J0IHsgU2JiRGlzYWJsZWRNaXhpbiwgdHlwZSBTYmJEaXNhYmxlZE1peGluVHlwZSB9IGZyb20gJy4vZGlzYWJsZWQtbWl4aW4uanMnO1xuaW1wb3J0IHtcbiAgdHlwZSBGb3JtUmVzdG9yZVJlYXNvbixcbiAgdHlwZSBGb3JtUmVzdG9yZVN0YXRlLFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluLFxuICB0eXBlIFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW5UeXBlLFxufSBmcm9tICcuL2Zvcm0tYXNzb2NpYXRlZC1taXhpbi5qcyc7XG5pbXBvcnQgeyBTYmJSZXF1aXJlZE1peGluLCB0eXBlIFNiYlJlcXVpcmVkTWl4aW5UeXBlIH0gZnJvbSAnLi9yZXF1aXJlZC1taXhpbi5qcyc7XG5cbnR5cGUgQ2hlY2tlZFNldHRlclZhbHVlID0geyB2YWx1ZTogYm9vbGVhbjsgYXR0cmlidXRlOiBib29sZWFuIH07XG5cbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIFNiYkZvcm1Bc3NvY2lhdGVkQ2hlY2tib3hNaXhpblR5cGVcbiAgZXh0ZW5kcyBTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZVxuICBpbXBsZW1lbnRzIFBhcnRpYWw8U2JiRGlzYWJsZWRNaXhpblR5cGU+LCBQYXJ0aWFsPFNiYlJlcXVpcmVkTWl4aW5UeXBlPlxue1xuICBwdWJsaWMgZ2V0IGNoZWNrZWQoKTogYm9vbGVhbjtcbiAgcHVibGljIHNldCBjaGVja2VkKHZhbHVlOiBib29sZWFuKTtcblxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKTtcbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuO1xuXG4gIHB1YmxpYyBzZXQgcmVxdWlyZWQodmFsdWU6IGJvb2xlYW4pO1xuICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW47XG5cbiAgcHVibGljIGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQ7XG4gIHB1YmxpYyBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLCByZWFzb246IEZvcm1SZXN0b3JlUmVhc29uKTogdm9pZDtcblxuICBwcm90ZWN0ZWQgaXNEaXNhYmxlZEV4dGVybmFsbHkoKTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGlzUmVxdWlyZWRFeHRlcm5hbGx5KCk6IGJvb2xlYW47XG4gIHByb3RlY3RlZCB3aXRoVXNlckludGVyYWN0aW9uPygpOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBGb3JtQXNzb2NpYXRlZENoZWNrYm94TWl4aW4gZW5hYmxlcyBuYXRpdmUgZm9ybSBzdXBwb3J0IGZvciBjaGVja2JveCBjb250cm9scy5cbiAqXG4gKiBJbmhlcml0ZWQgY2xhc3NlcyBNVVNUIGltcGxlbWVudCB0aGUgYXJpYUNoZWNrZWQgc3RhdGUgKEVsZW1lbnRJbnRlcm5hbHMpIHRoZW1zZWx2ZXMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJGb3JtQXNzb2NpYXRlZENoZWNrYm94TWl4aW4gPSA8VCBleHRlbmRzIENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IENvbnN0cnVjdG9yPFNiYkZvcm1Bc3NvY2lhdGVkQ2hlY2tib3hNaXhpblR5cGU+ICYgVCA9PiB7XG4gIEBob3N0QXR0cmlidXRlcyh7XG4gICAgdGFiaW5kZXg6ICcwJyxcbiAgfSlcbiAgYWJzdHJhY3QgY2xhc3MgU2JiRm9ybUFzc29jaWF0ZWRDaGVja2JveEVsZW1lbnRcbiAgICBleHRlbmRzIFNiYkRpc2FibGVkTWl4aW4oU2JiUmVxdWlyZWRNaXhpbihTYmJGb3JtQXNzb2NpYXRlZE1peGluKHN1cGVyQ2xhc3MpKSlcbiAgICBpbXBsZW1lbnRzIFBhcnRpYWw8U2JiRm9ybUFzc29jaWF0ZWRDaGVja2JveE1peGluVHlwZT5cbiAge1xuICAgIHByaXZhdGUgX2F0dHJpYnV0ZU11dGF0aW9uQmxvY2tlZCA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNoZWNrYm94IGlzIGNoZWNrZWQuICovXG4gICAgQHByb3BlcnR5KHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBjb252ZXJ0ZXI6IHtcbiAgICAgICAgLi4uZGVmYXVsdENvbnZlcnRlcixcbiAgICAgICAgLy8gV2UgbmVlZCB0byBwYXNzIGluZm9ybWF0aW9uIHRvIHRoZSBzZXR0ZXIgc28gdGhhdCB3ZSBrbm93IGl0IHdhcyBjYWxsZWQgYnkgYXR0cmlidXRlIGNoYW5nZS5cbiAgICAgICAgZnJvbUF0dHJpYnV0ZTogKHZhbHVlOiBzdHJpbmcgfCBudWxsLCB0eXBlPzogdW5rbm93bik6IENoZWNrZWRTZXR0ZXJWYWx1ZSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVmYXVsdENvbnZlcnRlci5mcm9tQXR0cmlidXRlPy4odmFsdWUsIHR5cGUpO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiByZXN1bHQsIGF0dHJpYnV0ZTogdHJ1ZSB9IGFzIENoZWNrZWRTZXR0ZXJWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSlcbiAgICBwdWJsaWMgc2V0IGNoZWNrZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZVNldHRlciA9XG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyAodmFsdWUgYXMgdW5rbm93biBhcyBDaGVja2VkU2V0dGVyVmFsdWUpLmF0dHJpYnV0ZSA6IGZhbHNlO1xuICAgICAgaWYgKGF0dHJpYnV0ZVNldHRlcikge1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSBhcyB1bmtub3duIGFzIENoZWNrZWRTZXR0ZXJWYWx1ZSkudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEFzIHNvb24gYXMgbXV0YXRpb24gd2FzIGRvbmUgbm90IGJ5IHNldHRpbmcgYXR0cmlidXRlLFxuICAgICAgLy8gd2UgbmVlZCB0byBibG9jayBzeW5jaW5nIGF0dHJpYnV0ZS5cbiAgICAgIGlmICh0aGlzLmhhc1VwZGF0ZWQgJiYgIWF0dHJpYnV0ZVNldHRlcikge1xuICAgICAgICB0aGlzLl9hdHRyaWJ1dGVNdXRhdGlvbkJsb2NrZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5fY2hlY2tlZCA9IEJvb2xlYW4odmFsdWUpO1xuICAgICAgdGhpcy51cGRhdGVGb3JtVmFsdWUoKTtcbiAgICB9XG4gICAgcHVibGljIGdldCBjaGVja2VkKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrZWQ7XG4gICAgfVxuICAgIHByaXZhdGUgX2NoZWNrZWQgPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgICAvKiogQGludGVybmFsICovXG4gICAgICB0aGlzLmludGVybmFscy5yb2xlID0gJ2NoZWNrYm94JztcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5faGFuZGxlVXNlckludGVyYWN0aW9uKTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHByZXZlbnRTY3JvbGxPblNwYWNlYmFyUHJlc3MpO1xuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX2hhbmRsZUtleWJvYXJkSW50ZXJhY3Rpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9oYW5kbGVVc2VySW50ZXJhY3Rpb24pO1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgcHJldmVudFNjcm9sbE9uU3BhY2ViYXJQcmVzcyk7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5faGFuZGxlS2V5Ym9hcmRJbnRlcmFjdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhcbiAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgIG9sZDogc3RyaW5nIHwgbnVsbCxcbiAgICAgIHZhbHVlOiBzdHJpbmcgfCBudWxsLFxuICAgICk6IHZvaWQge1xuICAgICAgLy8gQXR0cmlidXRlIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYWZ0ZXIgcHJvZ3JhbW1hdGljIG9yIG1hbnVhbCBzdGF0ZSBjaGFuZ2UuXG4gICAgICBpZiAobmFtZSAhPT0gJ2NoZWNrZWQnIHx8ICF0aGlzLl9hdHRyaWJ1dGVNdXRhdGlvbkJsb2NrZWQpIHtcbiAgICAgICAgc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG5hbWUsIG9sZCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElzIGNhbGxlZCB3aGVuZXZlciB0aGUgZm9ybSBpcyBiZWluZyByZXNldC5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBmb3JtUmVzZXRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IHRoaXMuaGFzQXR0cmlidXRlKCdjaGVja2VkJyk7XG4gICAgICB0aGlzLl9hdHRyaWJ1dGVNdXRhdGlvbkJsb2NrZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQ2FsbGVkIHdoZW4gdGhlIGJyb3dzZXIgaXMgdHJ5aW5nIHRvIHJlc3RvcmUgZWxlbWVudOKAmXMgc3RhdGUgdG8gc3RhdGUgaW4gd2hpY2ggY2FzZVxuICAgICAqICByZWFzb24gaXMg4oCccmVzdG9yZeKAnSwgb3Igd2hlbiB0aGUgYnJvd3NlciBpcyB0cnlpbmcgdG8gZnVsZmlsbCBhdXRvZmlsbCBvbiBiZWhhbGYgb2ZcbiAgICAgKiAgdXNlciBpbiB3aGljaCBjYXNlIHJlYXNvbiBpcyDigJxhdXRvY29tcGxldGXigJ0uXG4gICAgICogIEluIHRoZSBjYXNlIG9mIOKAnHJlc3RvcmXigJ0sIHN0YXRlIGlzIGEgc3RyaW5nLCBGaWxlLCBvciBGb3JtRGF0YSBvYmplY3RcbiAgICAgKiAgcHJldmlvdXNseSBzZXQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBzZXRGb3JtVmFsdWUuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKFxuICAgICAgc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLFxuICAgICAgX3JlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24sXG4gICAgKTogdm9pZCB7XG4gICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgdGhpcy5jaGVja2VkID0gc3RhdGUgPT09ICd0cnVlJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRpdGlvbmFsIGxvZ2ljIHdoaWNoIGlzIGJlaW5nIGV4ZWN1dGVkIHdoZW4gdXNlclxuICAgICAqIGludGVyYWN0aW9uIGhhcHBlbnMgYW5kIHN0YXRlIGlzIG5vdCBkaXNhYmxlZC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgd2l0aFVzZXJJbnRlcmFjdGlvbj8oKTogdm9pZDtcblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB1cGRhdGVGb3JtVmFsdWUoKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5jaGVja2VkKSB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxzLnNldEZvcm1WYWx1ZSh0aGlzLnZhbHVlLCBgJHt0aGlzLmNoZWNrZWR9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmludGVybmFscy5zZXRGb3JtVmFsdWUobnVsbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0cmlnZ2VyZWQgb24ga2V5Ym9hcmQgdXNlciBpbnRlcmFjdGlvbiB3aXRoIGNoZWNrYm94LiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZUtleWJvYXJkSW50ZXJhY3Rpb24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICcgJykge1xuICAgICAgICB0aGlzLl9oYW5kbGVVc2VySW50ZXJhY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqIE1ldGhvZCB0cmlnZ2VyZWQgb24gdXNlciBpbnRlcmFjdGlvbiB3aXRoIGNoZWNrYm94LiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZVVzZXJJbnRlcmFjdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMud2l0aFVzZXJJbnRlcmFjdGlvbj8uKCk7XG4gICAgICB0aGlzLmNoZWNrZWQgPSAhdGhpcy5jaGVja2VkO1xuICAgICAgdGhpcy5fYXR0cmlidXRlTXV0YXRpb25CbG9ja2VkID0gdHJ1ZTtcblxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KCdpbnB1dCcsIHsgY29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2RpZENoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBTYmJGb3JtQXNzb2NpYXRlZENoZWNrYm94RWxlbWVudCBhcyB1bmtub3duIGFzIENvbnN0cnVjdG9yPFNiYkZvcm1Bc3NvY2lhdGVkQ2hlY2tib3hNaXhpblR5cGU+ICZcbiAgICBUO1xufTtcbiIsImltcG9ydCB0eXBlIHsgTGl0RWxlbWVudCwgUHJvcGVydHlWYWx1ZXMgfSBmcm9tICdsaXQnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cnVjdG9yLmpzJztcblxuLy8gRGVmaW5lIHRoZSBpbnRlcmZhY2UgZm9yIHRoZSBtaXhpblxuZXhwb3J0IGRlY2xhcmUgYWJzdHJhY3QgY2xhc3MgU2JiSHlkcmF0aW9uTWl4aW5UeXBlIHtcbiAgLyoqXG4gICAqIFJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZWxlbWVudCBoYXMgY29tcGxldGVkIGh5ZHJhdGlvbi5cbiAgICogVGhlIFByb21pc2UgdmFsdWUgaXMgYSBib29sZWFuIHRoYXQgaXMgYHRydWVgIGlmIHRoZSBlbGVtZW50IHJlcXVpcmVkIGh5ZHJhdGlvblxuICAgKiBhbmQgYGZhbHNlYCBpZiBub3QuXG4gICAqXG4gICAqIEByZXR1cm4gQSBwcm9taXNlIG9mIGEgYm9vbGVhbiB0aGF0IHJlc29sdmVzIHRvIHRydWUgb25jZSB0aGUgaHlkcmF0aW9uIGNvbXBsZXRlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaHlkcmF0aW9uQ29tcGxldGUoKTogUHJvbWlzZTxib29sZWFuPjtcblxuICAvKiogUmV0dXJucyB3aGV0aGVyIGh5ZHJhdGlvbiBpcyByZXF1aXJlZCBhbmQgbm90IGNvbXBsZXRlZC4gKi9cbiAgcHJvdGVjdGVkIGdldCBoeWRyYXRpb25SZXF1aXJlZCgpOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoaXMgbWl4aW4gZXh0ZW5kcyBhIGJhc2UgY2xhc3Mgd2l0aCBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIGlmIGh5ZHJhdGlvbiBpcyBjb21wbGV0ZWQuXG4gKiBJdCBhbHNvIGRlbGF5cyBzbG90Y2hhbmdlIGV2ZW50cyB1bnRpbCBoeWRyYXRpb24gaXMgY29tcGxldGUuXG4gKlxuICogQHBhcmFtIGJhc2UgVGhlIGNsYXNzIHRvIGV4dGVuZC5cbiAqIEByZXR1cm5zIEEgY2xhc3MgZXh0ZW5kZWQgd2l0aCB0aGUgaHlkcmF0aW9uIGNoZWNrIGZ1bmN0aW9uYWxpdHkuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJIeWRyYXRpb25NaXhpbiA9IDxUIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxMaXRFbGVtZW50Pj4oXG4gIGJhc2U6IFQsXG4pOiBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkh5ZHJhdGlvbk1peGluVHlwZT4gJiBUID0+IHtcbiAgYWJzdHJhY3QgY2xhc3MgU2JiSHlkcmF0aW9uTWl4aW5DbGFzcyBleHRlbmRzIGJhc2UgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYkh5ZHJhdGlvbk1peGluVHlwZT4ge1xuICAgIHByaXZhdGUgX2h5ZHJhdGlvblJlcXVpcmVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2h5ZHJhdGlvbkNvbXBsZXRlID0gbmV3IFByb21pc2U8Ym9vbGVhbj4oXG4gICAgICAocmVzb2x2ZSkgPT4gKHRoaXMuX3Jlc29sdmVIeWRyYXRpb24gPSByZXNvbHZlKSxcbiAgICApO1xuICAgIHByaXZhdGUgX3Jlc29sdmVIeWRyYXRpb24hOiAoaHlkcmF0aW9uUmVxdWlyZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGVsZW1lbnQgaGFzIGNvbXBsZXRlZCBoeWRyYXRpb24uXG4gICAgICogVGhlIFByb21pc2UgdmFsdWUgaXMgYSBib29sZWFuIHRoYXQgaXMgYHRydWVgIGlmIHRoZSBlbGVtZW50IHJlcXVpcmVkIGh5ZHJhdGlvblxuICAgICAqIGFuZCBgZmFsc2VgIGlmIG5vdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gQSBwcm9taXNlIG9mIGEgYm9vbGVhbiB0aGF0IHJlc29sdmVzIHRvIHRydWUgb25jZSB0aGUgaHlkcmF0aW9uIGNvbXBsZXRlZC5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGh5ZHJhdGlvbkNvbXBsZXRlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgcmV0dXJuIHRoaXMuX2h5ZHJhdGlvbkNvbXBsZXRlO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIHdoZXRoZXIgaHlkcmF0aW9uIGlzIHJlcXVpcmVkIGFuZCBub3QgY29tcGxldGVkLiAqL1xuICAgIHByb3RlY3RlZCBnZXQgaHlkcmF0aW9uUmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5faHlkcmF0aW9uUmVxdWlyZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgIC8vIENoZWNrIHdoZXRoZXIgaHlkcmF0aW9uIGlzIG5lZWRlZCBieSBjaGVja2luZyB3aGV0aGVyIHRoZSBzaGFkb3cgcm9vdFxuICAgICAgLy8gaXMgYXZhaWxhYmxlIGR1cmluZyBjb25zdHJ1Y3Rpb24vdXBncmFkZSBwaGFzZS5cbiAgICAgIHRoaXMuX2h5ZHJhdGlvblJlcXVpcmVkID0gISF0aGlzLnNoYWRvd1Jvb3Q7XG4gICAgICBpZiAoIXRoaXMuX2h5ZHJhdGlvblJlcXVpcmVkKSB7XG4gICAgICAgIHRoaXMuX3Jlc29sdmVIeWRyYXRpb24oZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRHVyaW5nIGh5ZHJhdGlvbiBwaGFzZSwgd2Ugd2FudCB0byBzdXBwcmVzcyBzbG90Y2hhbmdlIGV2ZW50cyBhcyB0aGV5XG4gICAgICAgIC8vIGNhbiBjYXVzZSByZW5kZXIgZGlmZmVyZW5jZXMsIHdoaWNoIHdvdWxkIGJyZWFrIGh5ZHJhdGlvbi4gQWZ0ZXJcbiAgICAgICAgLy8gaHlkcmF0aW9uIGlzIGNvbXBsZXRlLCB3ZSBkaXNwYXRjaCBhIG1hbnVhbCBzbG90Y2hhbmdlIGV2ZW50LCBpZiB0aGVyZVxuICAgICAgICAvLyBhcmUgZWxlbWVudHMgYXNzaWduZWQgdG8gYSBzbG90LlxuICAgICAgICBjb25zdCBzdXBwcmVzc1Nsb3RjaGFuZ2VFdmVudCA9IChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5faHlkcmF0aW9uUmVxdWlyZWQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZXZlbnRPcHRpb25zOiBFdmVudExpc3RlbmVyT3B0aW9ucyA9IHsgY2FwdHVyZTogdHJ1ZSB9O1xuICAgICAgICBjb25zdCBzbG90cyA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvckFsbCgnc2xvdCcpO1xuICAgICAgICBpZiAoc2xvdHM/Lmxlbmd0aCkge1xuICAgICAgICAgIHNsb3RzLmZvckVhY2goKHNsb3QpID0+XG4gICAgICAgICAgICBzbG90LmFkZEV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCBzdXBwcmVzc1Nsb3RjaGFuZ2VFdmVudCwgZXZlbnRPcHRpb25zKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuaHlkcmF0aW9uQ29tcGxldGUudGhlbigoKSA9PlxuICAgICAgICAgICAgc2xvdHMuZm9yRWFjaCgoc2xvdCkgPT4ge1xuICAgICAgICAgICAgICBzbG90LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCBzdXBwcmVzc1Nsb3RjaGFuZ2VFdmVudCwgZXZlbnRPcHRpb25zKTtcbiAgICAgICAgICAgICAgaWYgKHNsb3QuYXNzaWduZWROb2RlcygpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHNsb3QuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Nsb3RjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICAgIC8vIFdoZW4gaHlkcmF0aW9uIGlzIG5lZWRlZCwgd2Ugd2FpdCB0aGUgaHlkcmF0aW9uIHByb2Nlc3MgdG8gZmluaXNoLCB3aGljaCBpcyBwYXRjaGVkXG4gICAgICAvLyBpbnRvIHRoZSB1cGRhdGUgbWV0aG9kIG9mIHRoZSBMaXRFbGVtZW50IGJhc2UgY2xhc3MuXG4gICAgICBzdXBlci51cGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgICBpZiAodGhpcy5faHlkcmF0aW9uUmVxdWlyZWQpIHtcbiAgICAgICAgdGhpcy5faHlkcmF0aW9uUmVxdWlyZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZUh5ZHJhdGlvbih0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIFNiYkh5ZHJhdGlvbk1peGluQ2xhc3MgYXMgdW5rbm93biBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkh5ZHJhdGlvbk1peGluVHlwZT4gJiBUO1xufTtcbiIsImltcG9ydCB7IGh0bWwsIHR5cGUgTGl0RWxlbWVudCwgbm90aGluZywgdHlwZSBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgZ2V0TG9jYWxOYW1lIH0gZnJvbSAnLi4vZG9tLmpzJztcblxuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi9jb25zdHJ1Y3Rvci5qcyc7XG5pbXBvcnQgeyBTYmJIeWRyYXRpb25NaXhpbiwgdHlwZSBTYmJIeWRyYXRpb25NaXhpblR5cGUgfSBmcm9tICcuL2h5ZHJhdGlvbi1taXhpbi5qcyc7XG5cbmltcG9ydCAnLi4vLi4vc2NyZWVuLXJlYWRlci1vbmx5LmpzJztcblxuY29uc3QgU1NSX0NISUxEX0NPVU5UX0FUVFJJQlVURSA9ICdkYXRhLXNzci1jaGlsZC1jb3VudCc7XG5jb25zdCBTTE9UTkFNRV9QUkVGSVggPSAnbGknO1xuXG4vKipcbiAqIEhlbHBlciB0eXBlIGZvciB3aWxsVXBkYXRlIG9yIHNpbWlsYXIgY2hlY2tzLlxuICogQWxsb3dzIHRoZSB1c2FnZSBvZiB0aGUgc3RyaW5nIGxpdGVyYWwgJ2xpc3RDaGlsZHJlbicuXG4gKlxuICogQGV4YW1wbGVcbiAqIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczxXaXRoTGlzdENoaWxkcmVuPHRoaXM+Pik6IHZvaWQge1xuICogICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdsaXN0Q2hpbGRyZW4nKSkge1xuICogICAgIC4uLlxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCB0eXBlIFdpdGhMaXN0Q2hpbGRyZW48XG4gIFQgZXh0ZW5kcyBTYmJOYW1lZFNsb3RMaXN0TWl4aW5UeXBlPEM+LFxuICBDIGV4dGVuZHMgSFRNTEVsZW1lbnQgPSBIVE1MRWxlbWVudCxcbj4gPSBUICYgeyBsaXN0Q2hpbGRyZW46IENbXSB9O1xuXG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBTYmJOYW1lZFNsb3RMaXN0TWl4aW5UeXBlPFxuICBDIGV4dGVuZHMgSFRNTEVsZW1lbnQsXG4+IGV4dGVuZHMgU2JiSHlkcmF0aW9uTWl4aW5UeXBlIHtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlYWRvbmx5IGxpc3RDaGlsZExvY2FsTmFtZXM6IHN0cmluZ1tdO1xuICBAc3RhdGUoKSBwcm90ZWN0ZWQgbGlzdENoaWxkcmVuOiBDW107XG4gIHByb3RlY3RlZCByZW5kZXJMaXN0KGF0dHJpYnV0ZXM/OiB7XG4gICAgY2xhc3M/OiBzdHJpbmc7XG4gICAgYXJpYUxhYmVsPzogc3RyaW5nO1xuICAgIGFyaWFMYWJlbGxlZGJ5Pzogc3RyaW5nO1xuICB9KTogVGVtcGxhdGVSZXN1bHQ7XG4gIHByb3RlY3RlZCBsaXN0U2xvdE5hbWVzKCk6IHN0cmluZ1tdO1xuICBwcm90ZWN0ZWQgcmVuZGVySGlkZGVuU2xvdCgpOiBUZW1wbGF0ZVJlc3VsdDtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IFNiYk5hbWVkU2xvdExpc3RNaXhpbiA9IDxcbiAgQyBleHRlbmRzIEhUTUxFbGVtZW50LFxuICBUIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxMaXRFbGVtZW50Pixcbj4oXG4gIHN1cGVyQ2xhc3M6IFQsXG4pOiBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYk5hbWVkU2xvdExpc3RNaXhpblR5cGU8Qz4+ICYgVCA9PiB7XG4gIC8qKlxuICAgKiBUaGlzIGJhc2UgY2xhc3MgcHJvdmlkZXMgbmFtZWQgc2xvdCBsaXN0IG9ic2VydmVyIGZ1bmN0aW9uYWxpdHkuXG4gICAqIFRoaXMgYWxsb3dzIHVzaW5nIHRoZSBwYXR0ZXJuIG9mIHJlbmRlcmluZyBhIG5hbWVkIHNsb3QgZm9yIGVhY2ggY2hpbGQsIHdoaWNoIGFsbG93c1xuICAgKiB3cmFwcGluZyBjaGlsZHJlbiBpbiBhIHVsL2xpIGxpc3QuXG4gICAqL1xuICBhYnN0cmFjdCBjbGFzcyBOYW1lZFNsb3RMaXN0RWxlbWVudDxDIGV4dGVuZHMgSFRNTEVsZW1lbnQgPSBIVE1MRWxlbWVudD5cbiAgICBleHRlbmRzIFNiYkh5ZHJhdGlvbk1peGluKHN1cGVyQ2xhc3MpXG4gICAgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYk5hbWVkU2xvdExpc3RNaXhpblR5cGU8Qz4+XG4gIHtcbiAgICAvKiogQSBsaXN0IG9mIHVwcGVyLWNhc2VkIHRhZyBuYW1lcyB0byBtYXRjaCBhZ2FpbnN0LiAoZS5nLiBTQkItTElOSykgKi9cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVhZG9ubHkgbGlzdENoaWxkTG9jYWxOYW1lczogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgY2hpbGRyZW4gd2l0aCB0aGUgZGVmaW5lZCB0YWcgbmFtZXMuXG4gICAgICogVGhpcyBhcnJheSBpcyBvbmx5IHVwZGF0ZWQsIGlmIHRoZXJlIGlzIGFuIGFjdHVhbCBjaGFuZ2VcbiAgICAgKiB0byB0aGUgY2hpbGQgZWxlbWVudHMuXG4gICAgICovXG4gICAgQHN0YXRlKCkgcHJvdGVjdGVkIGxpc3RDaGlsZHJlbjogQ1tdID0gW107XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCdzbG90Y2hhbmdlJywgdGhpcy5faGFuZGxlU2xvdGNoYW5nZSwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgICB0aGlzLnNoYWRvd1Jvb3Q/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCB0aGlzLl9oYW5kbGVTbG90Y2hhbmdlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYW5kbGVTbG90Y2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgbGlzdENoaWxkcmVuID0gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuID8/IFtdKS5maWx0ZXIoKGUpOiBlIGlzIEMgPT5cbiAgICAgICAgdGhpcy5saXN0Q2hpbGRMb2NhbE5hbWVzLmluY2x1ZGVzKGUubG9jYWxOYW1lKSxcbiAgICAgICk7XG4gICAgICAvLyBJZiB0aGUgc2xvdHRlZCBjaGlsZCBpbnN0YW5jZXMgaGF2ZSBub3QgY2hhbmdlZCwgd2UgY2FuIHNraXAgc3luY2luZyBhbmQgdXBkYXRpbmdcbiAgICAgIC8vIHRoZSBsaW5rIHJlZmVyZW5jZSBsaXN0LlxuICAgICAgaWYgKFxuICAgICAgICBsaXN0Q2hpbGRyZW4ubGVuZ3RoID09PSB0aGlzLmxpc3RDaGlsZHJlbi5sZW5ndGggJiZcbiAgICAgICAgdGhpcy5saXN0Q2hpbGRyZW4uZXZlcnkoKGUsIGkpID0+IGxpc3RDaGlsZHJlbltpXSA9PT0gZSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMubGlzdENoaWxkcmVuXG4gICAgICAgIC5maWx0ZXIoKGMpID0+ICFsaXN0Q2hpbGRyZW4uaW5jbHVkZXMoYykpXG4gICAgICAgIC5mb3JFYWNoKChjKSA9PiBjLnJlbW92ZUF0dHJpYnV0ZSgnc2xvdCcpKTtcbiAgICAgIHRoaXMubGlzdENoaWxkcmVuID0gbGlzdENoaWxkcmVuO1xuICAgICAgdGhpcy5saXN0Q2hpbGRyZW4uZm9yRWFjaCgoYywgaW5kZXgpID0+XG4gICAgICAgIGMuc2V0QXR0cmlidXRlKCdzbG90JywgYCR7U0xPVE5BTUVfUFJFRklYfS0ke2luZGV4fWApLFxuICAgICAgKTtcblxuICAgICAgLy8gUmVtb3ZlIHRoZSBzc3IgYXR0cmlidXRlLCBvbmNlIHdlIGhhdmUgYWN0dWFsbHkgaW5pdGlhbGl6ZWQgdGhlIGNoaWxkcmVuIGVsZW1lbnRzLlxuICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoU1NSX0NISUxEX0NPVU5UX0FUVFJJQlVURSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbmRlcnMgbGlzdCBhbmQgbGlzdCBzbG90cyBmb3Igc2xvdHRlZCBjaGlsZHJlbiBvciBhbiBhbW91bnQgb2YgbGlzdCBzbG90c1xuICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGBkYXRhLXNzci1jaGlsZC1jb3VudGAgYXR0cmlidXRlIHZhbHVlLlxuICAgICAqXG4gICAgICogVGhpcyBpcyBhIHBvc3NpYmxlIG9wdGltaXphdGlvbiBmb3IgU1NSLCBhcyBpbiBhbiBTU1IgTGl0IGVudmlyb25tZW50XG4gICAgICogb3RoZXIgZWxlbWVudHMgYXJlIG5vdCBhdmFpbGFibGUsIGJ1dCBtaWdodCBiZSBhdmFpbGFibGUgaW4gdGhlIG1ldGFcbiAgICAgKiBmcmFtZXdvcmsgd3JhcHBlciAobGlrZSBlLmcuIFJlYWN0KS4gVGhpcyBhbGxvd3MgdG8gcHJvdmlkZSB0aGUgYW1vdW50IG9mXG4gICAgICogY2hpbGRyZW4gdG8gYmUgcGFzc2VkIHZpYSB0aGUgYGRhdGEtc3NyLWNoaWxkLWNvdW50YCBhdHRyaWJ1dGUgdmFsdWUuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlbmRlckxpc3QoXG4gICAgICBhdHRyaWJ1dGVzOiB7IGNsYXNzPzogc3RyaW5nOyBhcmlhTGFiZWw/OiBzdHJpbmc7IGFyaWFMYWJlbGxlZGJ5Pzogc3RyaW5nIH0gPSB7fSxcbiAgICApOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgICBjb25zdCBsaXN0U2xvdE5hbWVzID0gdGhpcy5saXN0U2xvdE5hbWVzKCk7XG5cbiAgICAgIGlmIChsaXN0U2xvdE5hbWVzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgIHJldHVybiBodG1sYFxuICAgICAgICAgIDx1bFxuICAgICAgICAgICAgY2xhc3M9JHthdHRyaWJ1dGVzLmNsYXNzIHx8ICh0aGlzLmxvY2FsTmFtZSA/PyBnZXRMb2NhbE5hbWUodGhpcykpfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD0ke2F0dHJpYnV0ZXMuYXJpYUxhYmVsIHx8IG5vdGhpbmd9XG4gICAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9JHthdHRyaWJ1dGVzLmFyaWFMYWJlbGxlZGJ5IHx8IG5vdGhpbmd9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgJHtsaXN0U2xvdE5hbWVzLm1hcCgobmFtZSkgPT4gaHRtbGA8bGk+PHNsb3QgbmFtZT0ke25hbWV9Pjwvc2xvdD48L2xpPmApfVxuICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgJHt0aGlzLnJlbmRlckhpZGRlblNsb3QoKX1cbiAgICAgICAgYDtcbiAgICAgIH0gZWxzZSBpZiAobGlzdFNsb3ROYW1lcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGh0bWxgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHk+JHthdHRyaWJ1dGVzLmFyaWFMYWJlbH08L3NiYi1zY3JlZW4tcmVhZGVyLW9ubHk+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9JHthdHRyaWJ1dGVzLmNsYXNzIHx8ICh0aGlzLmxvY2FsTmFtZSA/PyBnZXRMb2NhbE5hbWUodGhpcykpfT5cbiAgICAgICAgICAgIDxzcGFuPjxzbG90IG5hbWU9JHtsaXN0U2xvdE5hbWVzWzBdfT48L3Nsb3Q+PC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAke3RoaXMucmVuZGVySGlkZGVuU2xvdCgpfSBgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVySGlkZGVuU2xvdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgbGlzdCBzbG90IG5hbWVzIHdpdGggdGhlIGxlbmd0aCBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbW91bnQgb2YgbWF0Y2hlZFxuICAgICAqIGNoaWxkcmVuIG9yIHRoZSBgZGF0YS1zc3ItY2hpbGQtY291bnRgIGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgYSBwb3NzaWJsZSBvcHRpbWl6YXRpb24gZm9yIFNTUiwgYXMgaW4gYW4gU1NSIExpdCBlbnZpcm9ubWVudFxuICAgICAqIG90aGVyIGVsZW1lbnRzIGFyZSBub3QgYXZhaWxhYmxlLCBidXQgbWlnaHQgYmUgYXZhaWxhYmxlIGluIHRoZSBtZXRhXG4gICAgICogZnJhbWV3b3JrIHdyYXBwZXIgKGxpa2UgZS5nLiBSZWFjdCkuIFRoaXMgYWxsb3dzIHRvIHByb3ZpZGUgdGhlIGFtb3VudCBvZlxuICAgICAqIGNoaWxkcmVuIHRvIGJlIHBhc3NlZCB2aWEgdGhlIGBkYXRhLXNzci1jaGlsZC1jb3VudGAgYXR0cmlidXRlIHZhbHVlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBsaXN0U2xvdE5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICAgIGNvbnN0IGxpc3RDaGlsZHJlbiA9IHRoaXMubGlzdENoaWxkcmVuLmxlbmd0aFxuICAgICAgICA/IHRoaXMubGlzdENoaWxkcmVuXG4gICAgICAgIDogQXJyYXkuZnJvbSh7IGxlbmd0aDogKyh0aGlzLmdldEF0dHJpYnV0ZShTU1JfQ0hJTERfQ09VTlRfQVRUUklCVVRFKSA/PyAwKSB9KTtcbiAgICAgIHJldHVybiBsaXN0Q2hpbGRyZW4ubWFwKChfLCBpKSA9PiBgJHtTTE9UTkFNRV9QUkVGSVh9LSR7aX1gKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgaGlkZGVuIHNsb3QsIHdoaWNoIGlzIGludGVuZGVkIGFzIHRoZSBjaGlsZHJlbiBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgICAqIFdoZW4gYW4gZWxlbWVudCB3aXRob3V0IGEgc2xvdCBhdHRyaWJ1dGUgaXMgc2xvdHRlZCB0byB0aGUgZWxlbWVudCwgaXQgdHJpZ2dlcnNcbiAgICAgKiB0aGUgc2xvdGNoYW5nZSBldmVudCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYXNzaWduIGl0IHRvIHRoZSBhcHByb3ByaWF0ZSBuYW1lZCBzbG90LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZW5kZXJIaWRkZW5TbG90KCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICAgIHJldHVybiBodG1sYDxzcGFuIGhpZGRlbj48c2xvdD48L3Nsb3Q+PC9zcGFuPmA7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE5hbWVkU2xvdExpc3RFbGVtZW50IGFzIHVua25vd24gYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJOYW1lZFNsb3RMaXN0TWl4aW5UeXBlPEM+PiAmIFQ7XG59O1xuIiwiaW1wb3J0IHR5cGUgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cnVjdG9yLmpzJztcblxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgU2JiTmVnYXRpdmVNaXhpblR5cGUge1xuICBwdWJsaWMgbmVnYXRpdmU6IGJvb2xlYW47XG59XG5cbi8qKlxuICogRW5oYW5jZSB5b3VyIGNvbXBvbmVudCB3aXRoIGEgbmVnYXRpdmUgcHJvcGVydHkuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJOZWdhdGl2ZU1peGluID0gPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiTmVnYXRpdmVNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYk5lZ2F0aXZlRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3MgaW1wbGVtZW50cyBTYmJOZWdhdGl2ZU1peGluVHlwZSB7XG4gICAgLyoqIE5lZ2F0aXZlIGNvbG9yaW5nIHZhcmlhbnQgZmxhZy4gKi9cbiAgICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyBuZWdhdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIFNiYk5lZ2F0aXZlRWxlbWVudCBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYk5lZ2F0aXZlTWl4aW5UeXBlPiAmIFQ7XG59O1xuIiwiaW1wb3J0IHR5cGUgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICcuLi9ldmVudGluZy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IuanMnO1xuXG5leHBvcnQgZGVjbGFyZSBjbGFzcyBTYmJQYW5lbE1peGluVHlwZSB7XG4gIHB1YmxpYyBjb2xvcjogJ3doaXRlJyB8ICdtaWxrJztcbiAgcHVibGljIGJvcmRlcmxlc3M6IGJvb2xlYW47XG4gIHB1YmxpYyBleHBhbnNpb25TdGF0ZT86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgU2JiUGFuZWxTaXplID0gJ3MnIHwgJ20nO1xuXG4vKipcbiAqIE1peGluIGZvciBjb21tb24gcGFuZWwgYmVoYXZpb3JzXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJQYW5lbE1peGluID0gPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiUGFuZWxNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYlBhbmVsRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3MgaW1wbGVtZW50cyBTYmJQYW5lbE1peGluVHlwZSB7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBldmVudHMgPSB7XG4gICAgICBwYW5lbENvbm5lY3RlZDogJ3BhbmVsQ29ubmVjdGVkJyxcbiAgICB9IGFzIGNvbnN0O1xuXG4gICAgLyoqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBwYW5lbC4gKi9cbiAgICBAcHJvcGVydHkoKSBwdWJsaWMgY29sb3I6ICd3aGl0ZScgfCAnbWlsaycgPSAnd2hpdGUnO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIHVuc2VsZWN0ZWQgcGFuZWwgaGFzIGEgYm9yZGVyLiAqL1xuICAgIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSkgcHVibGljIGJvcmRlcmxlc3MgPSBmYWxzZTtcblxuICAgIC8qKiBAaW50ZXJuYWwgdXNlZCBmb3IgYWNjZXNzaWJpbGl0eSBsYWJlbCB3aGVuIGluIGV4cGFuc2lvbiBwYW5lbCAqL1xuICAgIEBwcm9wZXJ0eSgpIHB1YmxpYyBleHBhbnNpb25TdGF0ZT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIEludGVybmFsIGV2ZW50IHRoYXQgZW1pdHMgd2hlbiB0aGUgY2hlY2tib3ggaXMgbG9hZGVkLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3BhbmVsQ29ubmVjdGVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgICAgdGhpcyxcbiAgICAgIFNiYlBhbmVsRWxlbWVudC5ldmVudHMucGFuZWxDb25uZWN0ZWQsXG4gICAgICB7IGJ1YmJsZXM6IHRydWUgfSxcbiAgICApO1xuXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgICAgdGhpcy5fcGFuZWxDb25uZWN0ZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBTYmJQYW5lbEVsZW1lbnQgYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJQYW5lbE1peGluVHlwZT4gJiBUO1xufTtcbiIsImltcG9ydCB0eXBlIHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5cbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IuanMnO1xuXG4vLyBEZWZpbmUgdGhlIGludGVyZmFjZSBmb3IgdGhlIG1peGluXG5leHBvcnQgZGVjbGFyZSBjbGFzcyBTYmJVcGRhdGVTY2hlZHVsZXJNaXhpblR5cGUge1xuICBwcm90ZWN0ZWQgc3RhcnRVcGRhdGUoKTogdm9pZDtcbiAgcHJvdGVjdGVkIGNvbXBsZXRlVXBkYXRlKCk6IHZvaWQ7XG59XG5cbi8qKlxuICogVGhpcyBtaXhpbiBhbGxvd3Mgc2NoZWR1bGluZyBtYW51YWwgdXBkYXRlcywgd2hpY2ggYWZmZWN0IHVwZGF0ZUNvbXBsZXRlLlxuICogQHBhcmFtIGJhc2UgVGhlIGNsYXNzIHRvIGV4dGVuZC5cbiAqIEByZXR1cm5zIEEgY2xhc3MgZXh0ZW5kZWQgd2l0aCB0aGUgc2xvdCBjaGlsZCBvYnNlcnZlciBmdW5jdGlvbmFsaXR5LlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgU2JiVXBkYXRlU2NoZWR1bGVyTWl4aW4gPSA8VCBleHRlbmRzIEFic3RyYWN0Q29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBiYXNlOiBULFxuKTogQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJVcGRhdGVTY2hlZHVsZXJNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYlVwZGF0ZVNjaGVkdWxlckVsZW1lbnRcbiAgICBleHRlbmRzIGJhc2VcbiAgICBpbXBsZW1lbnRzIFBhcnRpYWw8U2JiVXBkYXRlU2NoZWR1bGVyTWl4aW5UeXBlPlxuICB7XG4gICAgcHJpdmF0ZSBfdXBkYXRlUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIHByaXZhdGUgX3VwZGF0ZVJlc29sdmUgPSAoKTogdm9pZCA9PiB7fTtcblxuICAgIHByb3RlY3RlZCBzdGFydFVwZGF0ZSgpOiB2b2lkIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4gKHRoaXMuX3VwZGF0ZVJlc29sdmUgPSByKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvbXBsZXRlVXBkYXRlKCk6IHZvaWQge1xuICAgICAgdGhpcy5fdXBkYXRlUmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBnZXRVcGRhdGVDb21wbGV0ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN1cGVyLmdldFVwZGF0ZUNvbXBsZXRlKCk7XG4gICAgICBhd2FpdCB0aGlzLl91cGRhdGVQcm9taXNlO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFNiYlVwZGF0ZVNjaGVkdWxlckVsZW1lbnQgYXMgdW5rbm93biBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYlVwZGF0ZVNjaGVkdWxlck1peGluVHlwZT4gJlxuICAgIFQ7XG59O1xuIl0sIm5hbWVzIjpbIl9fZGVjb3JhdGVDbGFzcyIsInN0YXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBZWEsTUFBQSxtQkFBbUIsQ0FDOUIsZUFDa0Q7QUFB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
726
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4aW5zLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvY29yZS9taXhpbnMvZGlzYWJsZWQtbWl4aW4udHMiLCIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvY29yZS9taXhpbnMvZm9ybS1hc3NvY2lhdGVkLW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL3JlcXVpcmVkLW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL2Zvcm0tYXNzb2NpYXRlZC1jaGVja2JveC1taXhpbi50cyIsIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL21peGlucy9oeWRyYXRpb24tbWl4aW4udHMiLCIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvY29yZS9taXhpbnMvbmFtZWQtc2xvdC1saXN0LW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL25lZ2F0aXZlLW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL3BhbmVsLW1peGluLnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvbWl4aW5zL3VwZGF0ZS1zY2hlZHVsZXItbWl4aW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBMaXRFbGVtZW50LCBQcm9wZXJ0eVZhbHVlcyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi9jb25zdHJ1Y3Rvci5qcyc7XG5cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIFNiYkRpc2FibGVkTWl4aW5UeXBlIHtcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbik7XG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGlzRGlzYWJsZWRFeHRlcm5hbGx5KCk6IGJvb2xlYW47XG59XG5cbi8qKlxuICogRW5oYW5jZSB5b3VyIGNvbXBvbmVudCB3aXRoIGEgZGlzYWJsZWQgcHJvcGVydHkuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJEaXNhYmxlZE1peGluID0gPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiRGlzYWJsZWRNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYkRpc2FibGVkRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3MgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYkRpc2FibGVkTWl4aW5UeXBlPiB7XG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC4gKi9cbiAgICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gICAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgLy8gVG8gcHJvdmlkZSB0aGUgc2FtZSBiZWhhdmlvciBhcyB0aGUgbmF0aXZlIGRpc2FibGVkIHN0YXRlLFxuICAgICAgLy8gYW55IHZhbHVlIGlzIGNvbnZlcnRlZCB0byBhIGJvb2xlYW4uXG4gICAgICB0aGlzLl9kaXNhYmxlZCA9IEJvb2xlYW4odmFsdWUpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkIHx8IHRoaXMuaXNEaXNhYmxlZEV4dGVybmFsbHkoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdpbGwgYmUgdXNlZCBhcyAnb3InIGNoZWNrIHRvIHRoZSBjdXJyZW50IGRpc2FibGVkIHN0YXRlLlxuICAgICAqIENhbiBlLmcuIGJlIHVzZWQgdG8gcmVhZCBkaXNhYmxlZCBzdGF0ZSBvZiBhIGdyb3VwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpc0Rpc2FibGVkRXh0ZXJuYWxseSgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gU2JiRGlzYWJsZWRFbGVtZW50IGFzIHVua25vd24gYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJEaXNhYmxlZE1peGluVHlwZT4gJiBUO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IFNiYkRpc2FibGVkVGFiSW5kZXhBY3Rpb25NaXhpbiA9IDxUIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxMaXRFbGVtZW50Pj4oXG4gIHN1cGVyQ2xhc3M6IFQsXG4pOiBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkRpc2FibGVkTWl4aW5UeXBlPiAmIFQgPT4ge1xuICBhYnN0cmFjdCBjbGFzcyBTYmJEaXNhYmxlZFRhYkluZGV4QWN0aW9uXG4gICAgZXh0ZW5kcyBTYmJEaXNhYmxlZE1peGluKHN1cGVyQ2xhc3MpXG4gICAgaW1wbGVtZW50cyBTYmJEaXNhYmxlZE1peGluVHlwZVxuICB7XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgICAgaWYgKCFjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBGSVhNRSBpZiB0YWJpbmRleCBpcyBub3QgbmVlZGVkIGluIGNvbWJpbmF0aW9uIHdpdGggYXJpYS1kaXNhYmxlZCxcbiAgICAgIC8vICB1c2UgdGhlIFNiYkRpc2FibGVkTWl4aW4gYW5kIGltcGxlbWVudCBhIGRpZmZlcmVudCB3aWxsVXBkYXRlIG1ldGhvZC5cbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJywgJ3RydWUnKTtcbiAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcpO1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gU2JiRGlzYWJsZWRUYWJJbmRleEFjdGlvbiBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkRpc2FibGVkTWl4aW5UeXBlPiAmIFQ7XG59O1xuIiwiaW1wb3J0IHR5cGUgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IuanMnO1xuXG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZSB7XG4gIHB1YmxpYyBnZXQgZm9ybSgpOiBIVE1MRm9ybUVsZW1lbnQgfCBudWxsO1xuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nO1xuICBwdWJsaWMgc2V0IG5hbWUodmFsdWU6IHN0cmluZyk7XG4gIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogc3RyaW5nIHwgbnVsbDtcbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCk7XG5cbiAgcHVibGljIGdldCB2YWxpZGl0eSgpOiBWYWxpZGl0eVN0YXRlO1xuICBwdWJsaWMgZ2V0IHZhbGlkYXRpb25NZXNzYWdlKCk6IHN0cmluZztcbiAgcHVibGljIGdldCB3aWxsVmFsaWRhdGUoKTogYm9vbGVhbjtcblxuICBwcm90ZWN0ZWQgZm9ybURpc2FibGVkOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW50ZXJuYWxzOiBFbGVtZW50SW50ZXJuYWxzO1xuXG4gIHB1YmxpYyBjaGVja1ZhbGlkaXR5KCk6IGJvb2xlYW47XG4gIHB1YmxpYyByZXBvcnRWYWxpZGl0eSgpOiBib29sZWFuO1xuXG4gIHB1YmxpYyBmb3JtQXNzb2NpYXRlZENhbGxiYWNrPyhmb3JtOiBIVE1MRm9ybUVsZW1lbnQgfCBudWxsKTogdm9pZDtcbiAgcHVibGljIGZvcm1EaXNhYmxlZENhbGxiYWNrKGRpc2FibGVkOiBib29sZWFuKTogdm9pZDtcbiAgcHVibGljIGFic3RyYWN0IGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQ7XG4gIHB1YmxpYyBhYnN0cmFjdCBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLFxuICAgIHJlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24sXG4gICk6IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZUZvcm1WYWx1ZSgpOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBGb3JtQXNzb2NpYXRlZE1peGluIGVuYWJsZXMgbmF0aXZlIGZvcm0gc3VwcG9ydCBmb3IgY3VzdG9tIGNvbnRyb2xzLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgU2JiRm9ybUFzc29jaWF0ZWRNaXhpbiA9IDxUIGV4dGVuZHMgQ29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBzdXBlckNsYXNzOiBULFxuKTogQ29uc3RydWN0b3I8U2JiRm9ybUFzc29jaWF0ZWRNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYkZvcm1Bc3NvY2lhdGVkRWxlbWVudFxuICAgIGV4dGVuZHMgc3VwZXJDbGFzc1xuICAgIGltcGxlbWVudHMgUGFydGlhbDxTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZT5cbiAge1xuICAgIHB1YmxpYyBzdGF0aWMgZm9ybUFzc29jaWF0ZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZm9ybSBvd25lciBvZiBpbnRlcm5hbHMgdGFyZ2V0IGVsZW1lbnQuXG4gICAgICovXG4gICAgcHVibGljIGdldCBmb3JtKCk6IEhUTUxGb3JtRWxlbWVudCB8IG51bGwge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxzLmZvcm07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgZm9ybSBlbGVtZW50LiBXaWxsIGJlIHJlYWQgZnJvbSBuYW1lIGF0dHJpYnV0ZS5cbiAgICAgKlxuICAgICAqIEBkZXNjcmlwdGlvbiBEZXZlbG9wZXIgbm90ZTogSW4gdGhpcyBjYXNlIHVwZGF0aW5nIHRoZSBhdHRyaWJ1dGUgbXVzdCBiZSBzeW5jaHJvbm91cy5cbiAgICAgKiBEdWUgdG8gdGhpcyBpdCBpcyBpbXBsZW1lbnRlZCBhcyBhIGdldHRlci9zZXR0ZXIgYW5kIHRoZSBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSBoYW5kbGVzIHRoZSBkaWZmIGNoZWNrLlxuICAgICAqL1xuICAgIEBwcm9wZXJ0eSgpXG4gICAgcHVibGljIHNldCBuYW1lKG5hbWU6IHN0cmluZykge1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBgJHtuYW1lfWApO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgnbmFtZScpID8/ICcnO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLmxvY2FsTmFtZTtcbiAgICB9XG5cbiAgICAvKiogVmFsdWUgb2YgdGhlIGZvcm0gZWxlbWVudC4gKi9cbiAgICBAcHJvcGVydHkoKVxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1WYWx1ZSgpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgICBwcml2YXRlIF92YWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBWYWxpZGl0eVN0YXRlIG9iamVjdCBmb3IgaW50ZXJuYWxzIHRhcmdldCBlbGVtZW50LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWxpZGl0eSgpOiBWYWxpZGl0eVN0YXRlIHtcbiAgICAgIHJldHVybiB0aGlzLmludGVybmFscy52YWxpZGl0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlIHRoYXQgd291bGQgYmUgc2hvd24gdG8gdGhlIHVzZXJcbiAgICAgKiBpZiBpbnRlcm5hbHMgdGFyZ2V0IGVsZW1lbnQgd2FzIHRvIGJlIGNoZWNrZWQgZm9yIHZhbGlkaXR5LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxzLnZhbGlkYXRpb25NZXNzYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiBpbnRlcm5hbHMgdGFyZ2V0IGVsZW1lbnQgd2lsbCBiZSB2YWxpZGF0ZWRcbiAgICAgKiB3aGVuIHRoZSBmb3JtIGlzIHN1Ym1pdHRlZDsgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCB3aWxsVmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbHMud2lsbFZhbGlkYXRlO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW50ZXJuYWxzOiBFbGVtZW50SW50ZXJuYWxzID0gdGhpcy5hdHRhY2hJbnRlcm5hbHMoKTtcblxuICAgIC8qKiBXaGVuZXZlciBhIHN1cnJvdW5kaW5nIGZvcm0gb3IgZmllbGRzZXQgaXMgY2hhbmdpbmcgaXRzIGRpc2FibGVkIHN0YXRlLiAqL1xuICAgIEBzdGF0ZSgpIHByb3RlY3RlZCBmb3JtRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBvdmVycmlkZSBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soXG4gICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICBvbGQ6IHN0cmluZyB8IG51bGwsXG4gICAgICB2YWx1ZTogc3RyaW5nIHwgbnVsbCxcbiAgICApOiB2b2lkIHtcbiAgICAgIGlmIChuYW1lICE9PSAnbmFtZScgfHwgb2xkICE9PSB2YWx1ZSkge1xuICAgICAgICBzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgb2xkLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIGludGVybmFscyB0YXJnZXQgZWxlbWVudCBoYXMgbm8gdmFsaWRpdHkgcHJvYmxlbXM7IGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKiBGaXJlcyBhbiBpbnZhbGlkIGV2ZW50IGF0IHRoZSBlbGVtZW50IGluIHRoZSBsYXR0ZXIgY2FzZS5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjaGVja1ZhbGlkaXR5KCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxzLmNoZWNrVmFsaWRpdHkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgaW50ZXJuYWxzIHRhcmdldCBlbGVtZW50IGhhcyBubyB2YWxpZGl0eSBwcm9ibGVtczsgb3RoZXJ3aXNlLFxuICAgICAqIHJldHVybnMgZmFsc2UsIGZpcmVzIGFuIGludmFsaWQgZXZlbnQgYXQgdGhlIGVsZW1lbnQsXG4gICAgICogYW5kIChpZiB0aGUgZXZlbnQgaXNuJ3QgY2FuY2VsZWQpIHJlcG9ydHMgdGhlIHByb2JsZW0gdG8gdGhlIHVzZXIuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVwb3J0VmFsaWRpdHkoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbHMucmVwb3J0VmFsaWRpdHkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgYXNzb2NpYXRlZCBmb3JtIGVsZW1lbnQgY2hhbmdlcy5cbiAgICAgKiBFbGVtZW50SW50ZXJuYWxzLmZvcm0gcmV0dXJucyB0aGUgYXNzb2NpYXRlZCBmcm9tIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZm9ybUFzc29jaWF0ZWRDYWxsYmFjaz8oZm9ybTogSFRNTEZvcm1FbGVtZW50IHwgbnVsbCk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBJcyBjYWxsZWQgd2hlbmV2ZXIgYSBzdXJyb3VuZGluZyBmb3JtIC8gZmllbGRzZXQgY2hhbmdlcyBkaXNhYmxlZCBzdGF0ZS5cbiAgICAgKiBAcGFyYW0gZGlzYWJsZWRcbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBmb3JtRGlzYWJsZWRDYWxsYmFjayhkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgLy8gVGhpcyBjYWxsYmFjayBpcyB0cmlnZ2VyZWQgaWYgdGhlIGRpc2FibGVkIHByb3BlcnR5IGNoYW5nZXMgb3IgdGhlIGRpc2FibGVkIGF0dHJpYnV0ZSBvZiBhIGZpZWxkc2V0IG9yIGZvcm0gY2hhbmdlcy5cbiAgICAgIC8vIFdlIG5lZWQgdG8gcG9zdHBvbmUgdGhlIGFzc2lnbm1lbnQsIG90aGVyd2lzZSBpdCBpbnRlcmZlcmVzIHdpdGggZGlzYWJsZWQgc3RhdHVzIHNldHRpbmdcbiAgICAgIC8vIGFuZCBsZWFkcyB0byBhIHdyb25nIHN0YXRlIChlLmcuIGVtYmVkZGVkIHNiYi12aXN1YWwtY2hlY2tib3gpLlxuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybURpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIGZvcm0gaXMgYmVpbmcgcmVzZXQuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgYWJzdHJhY3QgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZDtcblxuICAgIC8qKlxuICAgICAqICBDYWxsZWQgd2hlbiB0aGUgYnJvd3NlciBpcyB0cnlpbmcgdG8gcmVzdG9yZSBlbGVtZW504oCZcyBzdGF0ZSB0byBzdGF0ZSBpbiB3aGljaCBjYXNlXG4gICAgICogIHJlYXNvbiBpcyDigJxyZXN0b3Jl4oCdLCBvciB3aGVuIHRoZSBicm93c2VyIGlzIHRyeWluZyB0byBmdWxmaWxsIGF1dG9maWxsIG9uIGJlaGFsZiBvZlxuICAgICAqICB1c2VyIGluIHdoaWNoIGNhc2UgcmVhc29uIGlzIOKAnGF1dG9jb21wbGV0ZeKAnS5cbiAgICAgKiAgSW4gdGhlIGNhc2Ugb2Yg4oCccmVzdG9yZeKAnSwgc3RhdGUgaXMgYSBzdHJpbmcsIEZpbGUsIG9yIEZvcm1EYXRhIG9iamVjdFxuICAgICAqICBwcmV2aW91c2x5IHNldCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHNldEZvcm1WYWx1ZS5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgICBzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsXG4gICAgICByZWFzb246IEZvcm1SZXN0b3JlUmVhc29uLFxuICAgICk6IHZvaWQ7XG5cbiAgICAvKiogU2hvdWxkIGJlIGNhbGxlZCB3aGVuIGZvcm0gdmFsdWUgaXMgY2hhbmdlZC4gKi9cbiAgICBwcm90ZWN0ZWQgdXBkYXRlRm9ybVZhbHVlKCk6IHZvaWQge1xuICAgICAgdGhpcy5pbnRlcm5hbHMuc2V0Rm9ybVZhbHVlKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gU2JiRm9ybUFzc29jaWF0ZWRFbGVtZW50IGFzIHVua25vd24gYXMgQ29uc3RydWN0b3I8U2JiRm9ybUFzc29jaWF0ZWRNaXhpblR5cGU+ICYgVDtcbn07XG5cbi8qKlxuICogQSB2YWx1ZSB0byBiZSByZXN0b3JlZCBmb3IgYSBjb21wb25lbnQncyBmb3JtIHZhbHVlLiBJZiBhIGNvbXBvbmVudCdzIGZvcm1cbiAqIHN0YXRlIGlzIGEgYEZvcm1EYXRhYCBvYmplY3QsIGl0cyBlbnRyeSBsaXN0IG9mIG5hbWUgYW5kIHZhbHVlcyB3aWxsIGJlXG4gKiBwcm92aWRlZC5cbiAqL1xuZXhwb3J0IHR5cGUgRm9ybVJlc3RvcmVTdGF0ZSA9IEZpbGUgfCBzdHJpbmcgfCBbc3RyaW5nLCBGb3JtRGF0YUVudHJ5VmFsdWVdW107XG5cbi8qKlxuICogVGhlIHJlYXNvbiBhIGZvcm0gY29tcG9uZW50IGlzIGJlaW5nIHJlc3RvcmVkIGZvciwgZWl0aGVyIGAncmVzdG9yZSdgIGZvclxuICogYnJvd3NlciByZXN0b3JhdGlvbiBvciBgJ2F1dG9jb21wbGV0ZSdgIGZvciByZXN0b3JpbmcgdXNlciB2YWx1ZXMuXG4gKi9cbmV4cG9ydCB0eXBlIEZvcm1SZXN0b3JlUmVhc29uID0gJ3Jlc3RvcmUnIHwgJ2F1dG9jb21wbGV0ZSc7XG4iLCJpbXBvcnQgdHlwZSB7IExpdEVsZW1lbnQsIFByb3BlcnR5VmFsdWVzIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cnVjdG9yLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiRm9ybUFzc29jaWF0ZWRNaXhpblR5cGUgfSBmcm9tICcuL2Zvcm0tYXNzb2NpYXRlZC1taXhpbi5qcyc7XG5cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIFNiYlJlcXVpcmVkTWl4aW5UeXBlIHtcbiAgcHVibGljIHNldCByZXF1aXJlZCh2YWx1ZTogYm9vbGVhbik7XG4gIHB1YmxpYyBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGlzUmVxdWlyZWRFeHRlcm5hbGx5KCk6IGJvb2xlYW47XG59XG5cbi8qKlxuICogRW5oYW5jZSB5b3VyIGNvbXBvbmVudCB3aXRoIGEgcmVxdWlyZWQgcHJvcGVydHkuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJSZXF1aXJlZE1peGluID0gPFxuICBUIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxMaXRFbGVtZW50ICYgU2JiRm9ybUFzc29jaWF0ZWRNaXhpblR5cGU+LFxuPihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiUmVxdWlyZWRNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYlJlcXVpcmVkRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3MgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYlJlcXVpcmVkTWl4aW5UeXBlPiB7XG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyByZXF1aXJlZC4gKi9cbiAgICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gICAgcHVibGljIHNldCByZXF1aXJlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgLy8gVG8gcHJvdmlkZSB0aGUgc2FtZSBiZWhhdmlvciBhcyB0aGUgbmF0aXZlIHJlcXVpcmVkIHN0YXRlLFxuICAgICAgLy8gYW55IHZhbHVlIGlzIGNvbnZlcnRlZCB0byBhIGJvb2xlYW4uXG4gICAgICB0aGlzLl9yZXF1aXJlZCA9IEJvb2xlYW4odmFsdWUpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkIHx8IHRoaXMuaXNSZXF1aXJlZEV4dGVybmFsbHkoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgLy8gRmlyZWZveCBuZWVkcyBleHBsaWNpdGx5IHNldCBhcmlhLXJlcXVpcmVkIHZhbHVlLlxuICAgICAgICB0aGlzLmludGVybmFscy5hcmlhUmVxdWlyZWQgPSBgJHt0aGlzLnJlcXVpcmVkfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2lsbCBiZSB1c2VkIGFzICdvcicgY2hlY2sgdG8gdGhlIGN1cnJlbnQgcmVxdWlyZWQgc3RhdGUuXG4gICAgICogQ2FuIGUuZy4gYmUgdXNlZCB0byByZWFkIHJlcXVpcmVkIHN0YXRlIG9mIGEgZ3JvdXAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGlzUmVxdWlyZWRFeHRlcm5hbGx5KCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBTYmJSZXF1aXJlZEVsZW1lbnQgYXMgdW5rbm93biBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYlJlcXVpcmVkTWl4aW5UeXBlPiAmIFQ7XG59O1xuIiwiaW1wb3J0IHsgZGVmYXVsdENvbnZlcnRlciwgdHlwZSBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBob3N0QXR0cmlidXRlcyB9IGZyb20gJy4uL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcHJldmVudFNjcm9sbE9uU3BhY2ViYXJQcmVzcyB9IGZyb20gJy4uL2V2ZW50aW5nLmpzJztcblxuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IuanMnO1xuaW1wb3J0IHsgU2JiRGlzYWJsZWRNaXhpbiwgdHlwZSBTYmJEaXNhYmxlZE1peGluVHlwZSB9IGZyb20gJy4vZGlzYWJsZWQtbWl4aW4uanMnO1xuaW1wb3J0IHtcbiAgdHlwZSBGb3JtUmVzdG9yZVJlYXNvbixcbiAgdHlwZSBGb3JtUmVzdG9yZVN0YXRlLFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluLFxuICB0eXBlIFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW5UeXBlLFxufSBmcm9tICcuL2Zvcm0tYXNzb2NpYXRlZC1taXhpbi5qcyc7XG5pbXBvcnQgeyBTYmJSZXF1aXJlZE1peGluLCB0eXBlIFNiYlJlcXVpcmVkTWl4aW5UeXBlIH0gZnJvbSAnLi9yZXF1aXJlZC1taXhpbi5qcyc7XG5cbnR5cGUgQ2hlY2tlZFNldHRlclZhbHVlID0geyB2YWx1ZTogYm9vbGVhbjsgYXR0cmlidXRlOiBib29sZWFuIH07XG5cbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIFNiYkZvcm1Bc3NvY2lhdGVkQ2hlY2tib3hNaXhpblR5cGVcbiAgZXh0ZW5kcyBTYmJGb3JtQXNzb2NpYXRlZE1peGluVHlwZVxuICBpbXBsZW1lbnRzIFBhcnRpYWw8U2JiRGlzYWJsZWRNaXhpblR5cGU+LCBQYXJ0aWFsPFNiYlJlcXVpcmVkTWl4aW5UeXBlPlxue1xuICBwdWJsaWMgZ2V0IGNoZWNrZWQoKTogYm9vbGVhbjtcbiAgcHVibGljIHNldCBjaGVja2VkKHZhbHVlOiBib29sZWFuKTtcblxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKTtcbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuO1xuXG4gIHB1YmxpYyBzZXQgcmVxdWlyZWQodmFsdWU6IGJvb2xlYW4pO1xuICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW47XG5cbiAgcHVibGljIGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQ7XG4gIHB1YmxpYyBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLCByZWFzb246IEZvcm1SZXN0b3JlUmVhc29uKTogdm9pZDtcblxuICBwcm90ZWN0ZWQgaXNEaXNhYmxlZEV4dGVybmFsbHkoKTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGlzUmVxdWlyZWRFeHRlcm5hbGx5KCk6IGJvb2xlYW47XG4gIHByb3RlY3RlZCB3aXRoVXNlckludGVyYWN0aW9uPygpOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBGb3JtQXNzb2NpYXRlZENoZWNrYm94TWl4aW4gZW5hYmxlcyBuYXRpdmUgZm9ybSBzdXBwb3J0IGZvciBjaGVja2JveCBjb250cm9scy5cbiAqXG4gKiBJbmhlcml0ZWQgY2xhc3NlcyBNVVNUIGltcGxlbWVudCB0aGUgYXJpYUNoZWNrZWQgc3RhdGUgKEVsZW1lbnRJbnRlcm5hbHMpIHRoZW1zZWx2ZXMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJGb3JtQXNzb2NpYXRlZENoZWNrYm94TWl4aW4gPSA8VCBleHRlbmRzIENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IENvbnN0cnVjdG9yPFNiYkZvcm1Bc3NvY2lhdGVkQ2hlY2tib3hNaXhpblR5cGU+ICYgVCA9PiB7XG4gIEBob3N0QXR0cmlidXRlcyh7XG4gICAgdGFiaW5kZXg6ICcwJyxcbiAgfSlcbiAgYWJzdHJhY3QgY2xhc3MgU2JiRm9ybUFzc29jaWF0ZWRDaGVja2JveEVsZW1lbnRcbiAgICBleHRlbmRzIFNiYkRpc2FibGVkTWl4aW4oU2JiUmVxdWlyZWRNaXhpbihTYmJGb3JtQXNzb2NpYXRlZE1peGluKHN1cGVyQ2xhc3MpKSlcbiAgICBpbXBsZW1lbnRzIFBhcnRpYWw8U2JiRm9ybUFzc29jaWF0ZWRDaGVja2JveE1peGluVHlwZT5cbiAge1xuICAgIHByaXZhdGUgX2F0dHJpYnV0ZU11dGF0aW9uQmxvY2tlZCA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNoZWNrYm94IGlzIGNoZWNrZWQuICovXG4gICAgQHByb3BlcnR5KHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBjb252ZXJ0ZXI6IHtcbiAgICAgICAgLi4uZGVmYXVsdENvbnZlcnRlcixcbiAgICAgICAgLy8gV2UgbmVlZCB0byBwYXNzIGluZm9ybWF0aW9uIHRvIHRoZSBzZXR0ZXIgc28gdGhhdCB3ZSBrbm93IGl0IHdhcyBjYWxsZWQgYnkgYXR0cmlidXRlIGNoYW5nZS5cbiAgICAgICAgZnJvbUF0dHJpYnV0ZTogKHZhbHVlOiBzdHJpbmcgfCBudWxsLCB0eXBlPzogdW5rbm93bik6IENoZWNrZWRTZXR0ZXJWYWx1ZSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVmYXVsdENvbnZlcnRlci5mcm9tQXR0cmlidXRlPy4odmFsdWUsIHR5cGUpO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiByZXN1bHQsIGF0dHJpYnV0ZTogdHJ1ZSB9IGFzIENoZWNrZWRTZXR0ZXJWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSlcbiAgICBwdWJsaWMgc2V0IGNoZWNrZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZVNldHRlciA9XG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyAodmFsdWUgYXMgdW5rbm93biBhcyBDaGVja2VkU2V0dGVyVmFsdWUpLmF0dHJpYnV0ZSA6IGZhbHNlO1xuICAgICAgaWYgKGF0dHJpYnV0ZVNldHRlcikge1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSBhcyB1bmtub3duIGFzIENoZWNrZWRTZXR0ZXJWYWx1ZSkudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEFzIHNvb24gYXMgbXV0YXRpb24gd2FzIGRvbmUgbm90IGJ5IHNldHRpbmcgYXR0cmlidXRlLFxuICAgICAgLy8gd2UgbmVlZCB0byBibG9jayBzeW5jaW5nIGF0dHJpYnV0ZS5cbiAgICAgIGlmICh0aGlzLmhhc1VwZGF0ZWQgJiYgIWF0dHJpYnV0ZVNldHRlcikge1xuICAgICAgICB0aGlzLl9hdHRyaWJ1dGVNdXRhdGlvbkJsb2NrZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5fY2hlY2tlZCA9IEJvb2xlYW4odmFsdWUpO1xuICAgICAgdGhpcy51cGRhdGVGb3JtVmFsdWUoKTtcbiAgICB9XG4gICAgcHVibGljIGdldCBjaGVja2VkKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrZWQ7XG4gICAgfVxuICAgIHByaXZhdGUgX2NoZWNrZWQgPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgICAvKiogQGludGVybmFsICovXG4gICAgICB0aGlzLmludGVybmFscy5yb2xlID0gJ2NoZWNrYm94JztcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5faGFuZGxlVXNlckludGVyYWN0aW9uKTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHByZXZlbnRTY3JvbGxPblNwYWNlYmFyUHJlc3MpO1xuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX2hhbmRsZUtleWJvYXJkSW50ZXJhY3Rpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9oYW5kbGVVc2VySW50ZXJhY3Rpb24pO1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgcHJldmVudFNjcm9sbE9uU3BhY2ViYXJQcmVzcyk7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5faGFuZGxlS2V5Ym9hcmRJbnRlcmFjdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhcbiAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgIG9sZDogc3RyaW5nIHwgbnVsbCxcbiAgICAgIHZhbHVlOiBzdHJpbmcgfCBudWxsLFxuICAgICk6IHZvaWQge1xuICAgICAgLy8gQXR0cmlidXRlIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYWZ0ZXIgcHJvZ3JhbW1hdGljIG9yIG1hbnVhbCBzdGF0ZSBjaGFuZ2UuXG4gICAgICBpZiAobmFtZSAhPT0gJ2NoZWNrZWQnIHx8ICF0aGlzLl9hdHRyaWJ1dGVNdXRhdGlvbkJsb2NrZWQpIHtcbiAgICAgICAgc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG5hbWUsIG9sZCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElzIGNhbGxlZCB3aGVuZXZlciB0aGUgZm9ybSBpcyBiZWluZyByZXNldC5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBmb3JtUmVzZXRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IHRoaXMuaGFzQXR0cmlidXRlKCdjaGVja2VkJyk7XG4gICAgICB0aGlzLl9hdHRyaWJ1dGVNdXRhdGlvbkJsb2NrZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQ2FsbGVkIHdoZW4gdGhlIGJyb3dzZXIgaXMgdHJ5aW5nIHRvIHJlc3RvcmUgZWxlbWVudOKAmXMgc3RhdGUgdG8gc3RhdGUgaW4gd2hpY2ggY2FzZVxuICAgICAqICByZWFzb24gaXMg4oCccmVzdG9yZeKAnSwgb3Igd2hlbiB0aGUgYnJvd3NlciBpcyB0cnlpbmcgdG8gZnVsZmlsbCBhdXRvZmlsbCBvbiBiZWhhbGYgb2ZcbiAgICAgKiAgdXNlciBpbiB3aGljaCBjYXNlIHJlYXNvbiBpcyDigJxhdXRvY29tcGxldGXigJ0uXG4gICAgICogIEluIHRoZSBjYXNlIG9mIOKAnHJlc3RvcmXigJ0sIHN0YXRlIGlzIGEgc3RyaW5nLCBGaWxlLCBvciBGb3JtRGF0YSBvYmplY3RcbiAgICAgKiAgcHJldmlvdXNseSBzZXQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBzZXRGb3JtVmFsdWUuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKFxuICAgICAgc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLFxuICAgICAgX3JlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24sXG4gICAgKTogdm9pZCB7XG4gICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgdGhpcy5jaGVja2VkID0gc3RhdGUgPT09ICd0cnVlJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRpdGlvbmFsIGxvZ2ljIHdoaWNoIGlzIGJlaW5nIGV4ZWN1dGVkIHdoZW4gdXNlclxuICAgICAqIGludGVyYWN0aW9uIGhhcHBlbnMgYW5kIHN0YXRlIGlzIG5vdCBkaXNhYmxlZC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgd2l0aFVzZXJJbnRlcmFjdGlvbj8oKTogdm9pZDtcblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB1cGRhdGVGb3JtVmFsdWUoKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5jaGVja2VkKSB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxzLnNldEZvcm1WYWx1ZSh0aGlzLnZhbHVlLCBgJHt0aGlzLmNoZWNrZWR9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmludGVybmFscy5zZXRGb3JtVmFsdWUobnVsbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0cmlnZ2VyZWQgb24ga2V5Ym9hcmQgdXNlciBpbnRlcmFjdGlvbiB3aXRoIGNoZWNrYm94LiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZUtleWJvYXJkSW50ZXJhY3Rpb24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICcgJykge1xuICAgICAgICB0aGlzLl9oYW5kbGVVc2VySW50ZXJhY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqIE1ldGhvZCB0cmlnZ2VyZWQgb24gdXNlciBpbnRlcmFjdGlvbiB3aXRoIGNoZWNrYm94LiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZVVzZXJJbnRlcmFjdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMud2l0aFVzZXJJbnRlcmFjdGlvbj8uKCk7XG4gICAgICB0aGlzLmNoZWNrZWQgPSAhdGhpcy5jaGVja2VkO1xuICAgICAgdGhpcy5fYXR0cmlidXRlTXV0YXRpb25CbG9ja2VkID0gdHJ1ZTtcblxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KCdpbnB1dCcsIHsgY29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2RpZENoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBTYmJGb3JtQXNzb2NpYXRlZENoZWNrYm94RWxlbWVudCBhcyB1bmtub3duIGFzIENvbnN0cnVjdG9yPFNiYkZvcm1Bc3NvY2lhdGVkQ2hlY2tib3hNaXhpblR5cGU+ICZcbiAgICBUO1xufTtcbiIsImltcG9ydCB0eXBlIHsgTGl0RWxlbWVudCwgUHJvcGVydHlWYWx1ZXMgfSBmcm9tICdsaXQnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cnVjdG9yLmpzJztcblxuLy8gRGVmaW5lIHRoZSBpbnRlcmZhY2UgZm9yIHRoZSBtaXhpblxuZXhwb3J0IGRlY2xhcmUgYWJzdHJhY3QgY2xhc3MgU2JiSHlkcmF0aW9uTWl4aW5UeXBlIHtcbiAgLyoqXG4gICAqIFJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZWxlbWVudCBoYXMgY29tcGxldGVkIGh5ZHJhdGlvbi5cbiAgICogVGhlIFByb21pc2UgdmFsdWUgaXMgYSBib29sZWFuIHRoYXQgaXMgYHRydWVgIGlmIHRoZSBlbGVtZW50IHJlcXVpcmVkIGh5ZHJhdGlvblxuICAgKiBhbmQgYGZhbHNlYCBpZiBub3QuXG4gICAqXG4gICAqIEByZXR1cm4gQSBwcm9taXNlIG9mIGEgYm9vbGVhbiB0aGF0IHJlc29sdmVzIHRvIHRydWUgb25jZSB0aGUgaHlkcmF0aW9uIGNvbXBsZXRlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaHlkcmF0aW9uQ29tcGxldGUoKTogUHJvbWlzZTxib29sZWFuPjtcblxuICAvKiogUmV0dXJucyB3aGV0aGVyIGh5ZHJhdGlvbiBpcyByZXF1aXJlZCBhbmQgbm90IGNvbXBsZXRlZC4gKi9cbiAgcHJvdGVjdGVkIGdldCBoeWRyYXRpb25SZXF1aXJlZCgpOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoaXMgbWl4aW4gZXh0ZW5kcyBhIGJhc2UgY2xhc3Mgd2l0aCBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIGlmIGh5ZHJhdGlvbiBpcyBjb21wbGV0ZWQuXG4gKiBJdCBhbHNvIGRlbGF5cyBzbG90Y2hhbmdlIGV2ZW50cyB1bnRpbCBoeWRyYXRpb24gaXMgY29tcGxldGUuXG4gKlxuICogQHBhcmFtIGJhc2UgVGhlIGNsYXNzIHRvIGV4dGVuZC5cbiAqIEByZXR1cm5zIEEgY2xhc3MgZXh0ZW5kZWQgd2l0aCB0aGUgaHlkcmF0aW9uIGNoZWNrIGZ1bmN0aW9uYWxpdHkuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJIeWRyYXRpb25NaXhpbiA9IDxUIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxMaXRFbGVtZW50Pj4oXG4gIGJhc2U6IFQsXG4pOiBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkh5ZHJhdGlvbk1peGluVHlwZT4gJiBUID0+IHtcbiAgYWJzdHJhY3QgY2xhc3MgU2JiSHlkcmF0aW9uTWl4aW5DbGFzcyBleHRlbmRzIGJhc2UgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYkh5ZHJhdGlvbk1peGluVHlwZT4ge1xuICAgIHByaXZhdGUgX2h5ZHJhdGlvblJlcXVpcmVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2h5ZHJhdGlvbkNvbXBsZXRlID0gbmV3IFByb21pc2U8Ym9vbGVhbj4oXG4gICAgICAocmVzb2x2ZSkgPT4gKHRoaXMuX3Jlc29sdmVIeWRyYXRpb24gPSByZXNvbHZlKSxcbiAgICApO1xuICAgIHByaXZhdGUgX3Jlc29sdmVIeWRyYXRpb24hOiAoaHlkcmF0aW9uUmVxdWlyZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGVsZW1lbnQgaGFzIGNvbXBsZXRlZCBoeWRyYXRpb24uXG4gICAgICogVGhlIFByb21pc2UgdmFsdWUgaXMgYSBib29sZWFuIHRoYXQgaXMgYHRydWVgIGlmIHRoZSBlbGVtZW50IHJlcXVpcmVkIGh5ZHJhdGlvblxuICAgICAqIGFuZCBgZmFsc2VgIGlmIG5vdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gQSBwcm9taXNlIG9mIGEgYm9vbGVhbiB0aGF0IHJlc29sdmVzIHRvIHRydWUgb25jZSB0aGUgaHlkcmF0aW9uIGNvbXBsZXRlZC5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGh5ZHJhdGlvbkNvbXBsZXRlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgcmV0dXJuIHRoaXMuX2h5ZHJhdGlvbkNvbXBsZXRlO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIHdoZXRoZXIgaHlkcmF0aW9uIGlzIHJlcXVpcmVkIGFuZCBub3QgY29tcGxldGVkLiAqL1xuICAgIHByb3RlY3RlZCBnZXQgaHlkcmF0aW9uUmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5faHlkcmF0aW9uUmVxdWlyZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgIC8vIENoZWNrIHdoZXRoZXIgaHlkcmF0aW9uIGlzIG5lZWRlZCBieSBjaGVja2luZyB3aGV0aGVyIHRoZSBzaGFkb3cgcm9vdFxuICAgICAgLy8gaXMgYXZhaWxhYmxlIGR1cmluZyBjb25zdHJ1Y3Rpb24vdXBncmFkZSBwaGFzZS5cbiAgICAgIHRoaXMuX2h5ZHJhdGlvblJlcXVpcmVkID0gISF0aGlzLnNoYWRvd1Jvb3Q7XG4gICAgICBpZiAoIXRoaXMuX2h5ZHJhdGlvblJlcXVpcmVkKSB7XG4gICAgICAgIHRoaXMuX3Jlc29sdmVIeWRyYXRpb24oZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRHVyaW5nIGh5ZHJhdGlvbiBwaGFzZSwgd2Ugd2FudCB0byBzdXBwcmVzcyBzbG90Y2hhbmdlIGV2ZW50cyBhcyB0aGV5XG4gICAgICAgIC8vIGNhbiBjYXVzZSByZW5kZXIgZGlmZmVyZW5jZXMsIHdoaWNoIHdvdWxkIGJyZWFrIGh5ZHJhdGlvbi4gQWZ0ZXJcbiAgICAgICAgLy8gaHlkcmF0aW9uIGlzIGNvbXBsZXRlLCB3ZSBkaXNwYXRjaCBhIG1hbnVhbCBzbG90Y2hhbmdlIGV2ZW50LCBpZiB0aGVyZVxuICAgICAgICAvLyBhcmUgZWxlbWVudHMgYXNzaWduZWQgdG8gYSBzbG90LlxuICAgICAgICBjb25zdCBzdXBwcmVzc1Nsb3RjaGFuZ2VFdmVudCA9IChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5faHlkcmF0aW9uUmVxdWlyZWQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZXZlbnRPcHRpb25zOiBFdmVudExpc3RlbmVyT3B0aW9ucyA9IHsgY2FwdHVyZTogdHJ1ZSB9O1xuICAgICAgICBjb25zdCBzbG90cyA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvckFsbCgnc2xvdCcpO1xuICAgICAgICBpZiAoc2xvdHM/Lmxlbmd0aCkge1xuICAgICAgICAgIHNsb3RzLmZvckVhY2goKHNsb3QpID0+XG4gICAgICAgICAgICBzbG90LmFkZEV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCBzdXBwcmVzc1Nsb3RjaGFuZ2VFdmVudCwgZXZlbnRPcHRpb25zKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuaHlkcmF0aW9uQ29tcGxldGUudGhlbigoKSA9PlxuICAgICAgICAgICAgc2xvdHMuZm9yRWFjaCgoc2xvdCkgPT4ge1xuICAgICAgICAgICAgICBzbG90LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCBzdXBwcmVzc1Nsb3RjaGFuZ2VFdmVudCwgZXZlbnRPcHRpb25zKTtcbiAgICAgICAgICAgICAgaWYgKHNsb3QuYXNzaWduZWROb2RlcygpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHNsb3QuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Nsb3RjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICAgIC8vIFdoZW4gaHlkcmF0aW9uIGlzIG5lZWRlZCwgd2Ugd2FpdCB0aGUgaHlkcmF0aW9uIHByb2Nlc3MgdG8gZmluaXNoLCB3aGljaCBpcyBwYXRjaGVkXG4gICAgICAvLyBpbnRvIHRoZSB1cGRhdGUgbWV0aG9kIG9mIHRoZSBMaXRFbGVtZW50IGJhc2UgY2xhc3MuXG4gICAgICBzdXBlci51cGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgICBpZiAodGhpcy5faHlkcmF0aW9uUmVxdWlyZWQpIHtcbiAgICAgICAgdGhpcy5faHlkcmF0aW9uUmVxdWlyZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZUh5ZHJhdGlvbih0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIFNiYkh5ZHJhdGlvbk1peGluQ2xhc3MgYXMgdW5rbm93biBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkh5ZHJhdGlvbk1peGluVHlwZT4gJiBUO1xufTtcbiIsImltcG9ydCB7IGh0bWwsIHR5cGUgTGl0RWxlbWVudCwgbm90aGluZywgdHlwZSBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgZ2V0TG9jYWxOYW1lIH0gZnJvbSAnLi4vZG9tLmpzJztcblxuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi9jb25zdHJ1Y3Rvci5qcyc7XG5pbXBvcnQgeyBTYmJIeWRyYXRpb25NaXhpbiwgdHlwZSBTYmJIeWRyYXRpb25NaXhpblR5cGUgfSBmcm9tICcuL2h5ZHJhdGlvbi1taXhpbi5qcyc7XG5cbmltcG9ydCAnLi4vLi4vc2NyZWVuLXJlYWRlci1vbmx5LmpzJztcblxuY29uc3QgU1NSX0NISUxEX0NPVU5UX0FUVFJJQlVURSA9ICdkYXRhLXNzci1jaGlsZC1jb3VudCc7XG5jb25zdCBTTE9UTkFNRV9QUkVGSVggPSAnbGknO1xuXG5leHBvcnQgdHlwZSBTYmJOYW1lZFNsb3RQcm9wZXJ0aWVzID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGFyaWFIaWRkZW46IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEhlbHBlciB0eXBlIGZvciB3aWxsVXBkYXRlIG9yIHNpbWlsYXIgY2hlY2tzLlxuICogQWxsb3dzIHRoZSB1c2FnZSBvZiB0aGUgc3RyaW5nIGxpdGVyYWwgJ2xpc3RDaGlsZHJlbicuXG4gKlxuICogQGV4YW1wbGVcbiAqIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczxXaXRoTGlzdENoaWxkcmVuPHRoaXM+Pik6IHZvaWQge1xuICogICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdsaXN0Q2hpbGRyZW4nKSkge1xuICogICAgIC4uLlxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCB0eXBlIFdpdGhMaXN0Q2hpbGRyZW48XG4gIFQgZXh0ZW5kcyBTYmJOYW1lZFNsb3RMaXN0TWl4aW5UeXBlPEM+LFxuICBDIGV4dGVuZHMgSFRNTEVsZW1lbnQgPSBIVE1MRWxlbWVudCxcbj4gPSBUICYgeyBsaXN0Q2hpbGRyZW46IENbXSB9O1xuXG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBTYmJOYW1lZFNsb3RMaXN0TWl4aW5UeXBlPFxuICBDIGV4dGVuZHMgSFRNTEVsZW1lbnQsXG4+IGV4dGVuZHMgU2JiSHlkcmF0aW9uTWl4aW5UeXBlIHtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlYWRvbmx5IGxpc3RDaGlsZExvY2FsTmFtZXM6IHN0cmluZ1tdO1xuICBAc3RhdGUoKSBwcm90ZWN0ZWQgbGlzdENoaWxkcmVuOiBDW107XG4gIHByb3RlY3RlZCByZW5kZXJMaXN0KFxuICAgIGF0dHJpYnV0ZXM/OiB7XG4gICAgICBjbGFzcz86IHN0cmluZztcbiAgICAgIGFyaWFMYWJlbD86IHN0cmluZztcbiAgICAgIGFyaWFMYWJlbGxlZGJ5Pzogc3RyaW5nO1xuICAgIH0sXG4gICAgbGlzdEl0ZW1BdHRyaWJ1dGVzPzoge1xuICAgICAgbG9jYWxOYW1lVmlzdWFsT25seT86IHN0cmluZ1tdO1xuICAgIH0sXG4gICk6IFRlbXBsYXRlUmVzdWx0O1xuICBwcm90ZWN0ZWQgbGlzdFNsb3RFbnRyaWVzKCk6IFNiYk5hbWVkU2xvdFByb3BlcnRpZXNbXTtcbiAgcHJvdGVjdGVkIHJlbmRlckhpZGRlblNsb3QoKTogVGVtcGxhdGVSZXN1bHQ7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJOYW1lZFNsb3RMaXN0TWl4aW4gPSA8XG4gIEMgZXh0ZW5kcyBIVE1MRWxlbWVudCxcbiAgVCBleHRlbmRzIEFic3RyYWN0Q29uc3RydWN0b3I8TGl0RWxlbWVudD4sXG4+KFxuICBzdXBlckNsYXNzOiBULFxuKTogQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJOYW1lZFNsb3RMaXN0TWl4aW5UeXBlPEM+PiAmIFQgPT4ge1xuICAvKipcbiAgICogVGhpcyBiYXNlIGNsYXNzIHByb3ZpZGVzIG5hbWVkIHNsb3QgbGlzdCBvYnNlcnZlciBmdW5jdGlvbmFsaXR5LlxuICAgKiBUaGlzIGFsbG93cyB1c2luZyB0aGUgcGF0dGVybiBvZiByZW5kZXJpbmcgYSBuYW1lZCBzbG90IGZvciBlYWNoIGNoaWxkLCB3aGljaCBhbGxvd3NcbiAgICogd3JhcHBpbmcgY2hpbGRyZW4gaW4gYW4gdWwvbGkgbGlzdC5cbiAgICovXG4gIGFic3RyYWN0IGNsYXNzIE5hbWVkU2xvdExpc3RFbGVtZW50PEMgZXh0ZW5kcyBIVE1MRWxlbWVudCA9IEhUTUxFbGVtZW50PlxuICAgIGV4dGVuZHMgU2JiSHlkcmF0aW9uTWl4aW4oc3VwZXJDbGFzcylcbiAgICBpbXBsZW1lbnRzIFBhcnRpYWw8U2JiTmFtZWRTbG90TGlzdE1peGluVHlwZTxDPj5cbiAge1xuICAgIC8qKiBBIGxpc3Qgb2YgbG93ZXItY2FzZWQgdGFnIG5hbWVzIHRvIG1hdGNoIGFnYWluc3QuIChlLmcuIGBzYmItbGlua2ApICovXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHJlYWRvbmx5IGxpc3RDaGlsZExvY2FsTmFtZXM6IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIGNoaWxkcmVuIHdpdGggdGhlIGRlZmluZWQgdGFnIG5hbWVzLlxuICAgICAqIFRoaXMgYXJyYXkgaXMgb25seSB1cGRhdGVkIGlmIHRoZXJlIGlzIGFuIGFjdHVhbCBjaGFuZ2VcbiAgICAgKiB0byB0aGUgY2hpbGQgZWxlbWVudHMuXG4gICAgICovXG4gICAgQHN0YXRlKCkgcHJvdGVjdGVkIGxpc3RDaGlsZHJlbjogQ1tdID0gW107XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCdzbG90Y2hhbmdlJywgdGhpcy5faGFuZGxlU2xvdGNoYW5nZSwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgICB0aGlzLnNoYWRvd1Jvb3Q/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCB0aGlzLl9oYW5kbGVTbG90Y2hhbmdlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYW5kbGVTbG90Y2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgbGlzdENoaWxkcmVuID0gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuID8/IFtdKS5maWx0ZXIoKGUpOiBlIGlzIEMgPT5cbiAgICAgICAgdGhpcy5saXN0Q2hpbGRMb2NhbE5hbWVzLmluY2x1ZGVzKGUubG9jYWxOYW1lKSxcbiAgICAgICk7XG4gICAgICAvLyBJZiB0aGUgc2xvdHRlZCBjaGlsZCBpbnN0YW5jZXMgaGF2ZSBub3QgY2hhbmdlZCwgd2UgY2FuIHNraXAgc3luY2luZyBhbmQgdXBkYXRpbmdcbiAgICAgIC8vIHRoZSBsaW5rIHJlZmVyZW5jZSBsaXN0LlxuICAgICAgaWYgKFxuICAgICAgICBsaXN0Q2hpbGRyZW4ubGVuZ3RoID09PSB0aGlzLmxpc3RDaGlsZHJlbi5sZW5ndGggJiZcbiAgICAgICAgdGhpcy5saXN0Q2hpbGRyZW4uZXZlcnkoKGUsIGkpID0+IGxpc3RDaGlsZHJlbltpXSA9PT0gZSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMubGlzdENoaWxkcmVuXG4gICAgICAgIC5maWx0ZXIoKGMpID0+ICFsaXN0Q2hpbGRyZW4uaW5jbHVkZXMoYykpXG4gICAgICAgIC5mb3JFYWNoKChjKSA9PiBjLnJlbW92ZUF0dHJpYnV0ZSgnc2xvdCcpKTtcbiAgICAgIHRoaXMubGlzdENoaWxkcmVuID0gbGlzdENoaWxkcmVuO1xuICAgICAgdGhpcy5saXN0Q2hpbGRyZW4uZm9yRWFjaCgoYywgaW5kZXgpID0+XG4gICAgICAgIGMuc2V0QXR0cmlidXRlKCdzbG90JywgYCR7U0xPVE5BTUVfUFJFRklYfS0ke2luZGV4fWApLFxuICAgICAgKTtcblxuICAgICAgLy8gUmVtb3ZlIHRoZSBzc3IgYXR0cmlidXRlLCBvbmNlIHdlIGhhdmUgYWN0dWFsbHkgaW5pdGlhbGl6ZWQgdGhlIGNoaWxkcmVuIGVsZW1lbnRzLlxuICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoU1NSX0NISUxEX0NPVU5UX0FUVFJJQlVURSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbmRlcnMgbGlzdCBhbmQgbGlzdCBzbG90cyBmb3Igc2xvdHRlZCBjaGlsZHJlbiBvciBhIG51bWJlciBvZiBsaXN0IHNsb3RzXG4gICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgYGRhdGEtc3NyLWNoaWxkLWNvdW50YCBhdHRyaWJ1dGUgdmFsdWUuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIGEgcG9zc2libGUgb3B0aW1pemF0aW9uIGZvciBTU1IsIGFzIGluIGFuIFNTUiBMaXQgZW52aXJvbm1lbnRcbiAgICAgKiBvdGhlciBlbGVtZW50cyBhcmUgbm90IGF2YWlsYWJsZSwgYnV0IG1pZ2h0IGJlIGF2YWlsYWJsZSBpbiB0aGUgbWV0YVxuICAgICAqIGZyYW1ld29yayB3cmFwcGVyIChsaWtlIGUuZy4gUmVhY3QpLiBUaGlzIGFsbG93cyB0byBwcm92aWRlIHRoZSBudW1iZXIgb2ZcbiAgICAgKiBjaGlsZHJlbiB0byBiZSBwYXNzZWQgdmlhIHRoZSBgZGF0YS1zc3ItY2hpbGQtY291bnRgIGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVuZGVyTGlzdChcbiAgICAgIGF0dHJpYnV0ZXM6IHsgY2xhc3M/OiBzdHJpbmc7IGFyaWFMYWJlbD86IHN0cmluZzsgYXJpYUxhYmVsbGVkYnk/OiBzdHJpbmcgfSA9IHt9LFxuICAgICAgbGlzdEl0ZW1BdHRyaWJ1dGVzOiB7IGxvY2FsTmFtZVZpc3VhbE9ubHk/OiBzdHJpbmdbXSB9ID0ge30sXG4gICAgKTogVGVtcGxhdGVSZXN1bHQge1xuICAgICAgY29uc3QgbGlzdFNsb3ROYW1lczogU2JiTmFtZWRTbG90UHJvcGVydGllc1tdID0gdGhpcy5saXN0U2xvdEVudHJpZXMobGlzdEl0ZW1BdHRyaWJ1dGVzKTtcblxuICAgICAgaWYgKGxpc3RTbG90TmFtZXMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICAgICAgPHVsXG4gICAgICAgICAgICBjbGFzcz0ke2F0dHJpYnV0ZXMuY2xhc3MgfHwgKHRoaXMubG9jYWxOYW1lID8/IGdldExvY2FsTmFtZSh0aGlzKSl9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPSR7YXR0cmlidXRlcy5hcmlhTGFiZWwgfHwgbm90aGluZ31cbiAgICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT0ke2F0dHJpYnV0ZXMuYXJpYUxhYmVsbGVkYnkgfHwgbm90aGluZ31cbiAgICAgICAgICA+XG4gICAgICAgICAgICAke2xpc3RTbG90TmFtZXMubWFwKFxuICAgICAgICAgICAgICAoc2xvdCkgPT4gaHRtbGBcbiAgICAgICAgICAgICAgICA8bGkgYXJpYS1oaWRkZW49JHtzbG90LmFyaWFIaWRkZW4gfHwgbm90aGluZ30+XG4gICAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPSR7c2xvdC5uYW1lfT48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgYCxcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgICAke3RoaXMucmVuZGVySGlkZGVuU2xvdCgpfVxuICAgICAgICBgO1xuICAgICAgfSBlbHNlIGlmIChsaXN0U2xvdE5hbWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gaHRtbGA8c2JiLXNjcmVlbi1yZWFkZXItb25seT4ke2F0dHJpYnV0ZXMuYXJpYUxhYmVsfTwvc2JiLXNjcmVlbi1yZWFkZXItb25seT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz0ke2F0dHJpYnV0ZXMuY2xhc3MgfHwgKHRoaXMubG9jYWxOYW1lID8/IGdldExvY2FsTmFtZSh0aGlzKSl9PlxuICAgICAgICAgICAgPHNwYW4+PHNsb3QgbmFtZT0ke2xpc3RTbG90TmFtZXNbMF0ubmFtZX0+PC9zbG90Pjwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgJHt0aGlzLnJlbmRlckhpZGRlblNsb3QoKX0gYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckhpZGRlblNsb3QoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIFNiYk5hbWVkU2xvdFByb3BlcnRpZXMsIHdoaWNoIGhvbGRzIHRoZSBsaXN0IHNsb3QgbmFtZXMgYW5kIHRoZSBoaWRkZW4gcHJvcGVydHk7XG4gICAgICogaXRzIGxlbmd0aCBjb3JyZXNwb25kcyB0byB0aGUgbnVtYmVyIG9mIG1hdGNoZWQgY2hpbGRyZW4gb3IgdGhlIGBkYXRhLXNzci1jaGlsZC1jb3VudGAgYXR0cmlidXRlIHZhbHVlLlxuICAgICAqXG4gICAgICogVGhpcyBpcyBhIHBvc3NpYmxlIG9wdGltaXphdGlvbiBmb3IgU1NSLCBhcyBpbiBhbiBTU1IgTGl0IGVudmlyb25tZW50XG4gICAgICogb3RoZXIgZWxlbWVudHMgYXJlIG5vdCBhdmFpbGFibGUsIGJ1dCBtaWdodCBiZSBhdmFpbGFibGUgaW4gdGhlIG1ldGFcbiAgICAgKiBmcmFtZXdvcmsgd3JhcHBlciAobGlrZSBlLmcuIFJlYWN0KS4gVGhpcyBhbGxvd3MgdG8gcHJvdmlkZSB0aGUgbnVtYmVyIG9mXG4gICAgICogY2hpbGRyZW4gdG8gYmUgcGFzc2VkIHZpYSB0aGUgYGRhdGEtc3NyLWNoaWxkLWNvdW50YCBhdHRyaWJ1dGUgdmFsdWUuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGxpc3RTbG90RW50cmllcyhsaXN0SXRlbUF0dHJpYnV0ZXM6IHtcbiAgICAgIGxvY2FsTmFtZVZpc3VhbE9ubHk/OiBzdHJpbmdbXTtcbiAgICB9KTogU2JiTmFtZWRTbG90UHJvcGVydGllc1tdIHtcbiAgICAgIGNvbnN0IGxpc3RDaGlsZHJlbiA9IHRoaXMubGlzdENoaWxkcmVuLmxlbmd0aFxuICAgICAgICA/IHRoaXMubGlzdENoaWxkcmVuXG4gICAgICAgIDogQXJyYXkuZnJvbSh7IGxlbmd0aDogKyh0aGlzLmdldEF0dHJpYnV0ZShTU1JfQ0hJTERfQ09VTlRfQVRUUklCVVRFKSA/PyAwKSB9KTtcbiAgICAgIHJldHVybiBsaXN0Q2hpbGRyZW4ubWFwKChlLCBpKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogYCR7U0xPVE5BTUVfUFJFRklYfS0ke2l9YCxcbiAgICAgICAgICBhcmlhSGlkZGVuOlxuICAgICAgICAgICAgbGlzdEl0ZW1BdHRyaWJ1dGVzPy5sb2NhbE5hbWVWaXN1YWxPbmx5Py5pbmNsdWRlcygoZSBhcyBIVE1MRWxlbWVudCkubG9jYWxOYW1lKSA/P1xuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgaGlkZGVuIHNsb3QsIHdoaWNoIGlzIGludGVuZGVkIGFzIHRoZSBjaGlsZHJlbiBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgICAqIFdoZW4gYW4gZWxlbWVudCB3aXRob3V0IGEgc2xvdCBhdHRyaWJ1dGUgaXMgc2xvdHRlZCB0byB0aGUgZWxlbWVudCwgaXQgdHJpZ2dlcnNcbiAgICAgKiB0aGUgc2xvdGNoYW5nZSBldmVudCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYXNzaWduIGl0IHRvIHRoZSBhcHByb3ByaWF0ZSBuYW1lZCBzbG90LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZW5kZXJIaWRkZW5TbG90KCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICAgIHJldHVybiBodG1sYDxzcGFuIGhpZGRlbj48c2xvdD48L3Nsb3Q+PC9zcGFuPmA7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE5hbWVkU2xvdExpc3RFbGVtZW50IGFzIHVua25vd24gYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJOYW1lZFNsb3RMaXN0TWl4aW5UeXBlPEM+PiAmIFQ7XG59O1xuIiwiaW1wb3J0IHR5cGUgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cnVjdG9yLmpzJztcblxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgU2JiTmVnYXRpdmVNaXhpblR5cGUge1xuICBwdWJsaWMgbmVnYXRpdmU6IGJvb2xlYW47XG59XG5cbi8qKlxuICogRW5oYW5jZSB5b3VyIGNvbXBvbmVudCB3aXRoIGEgbmVnYXRpdmUgcHJvcGVydHkuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJOZWdhdGl2ZU1peGluID0gPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiTmVnYXRpdmVNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYk5lZ2F0aXZlRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3MgaW1wbGVtZW50cyBTYmJOZWdhdGl2ZU1peGluVHlwZSB7XG4gICAgLyoqIE5lZ2F0aXZlIGNvbG9yaW5nIHZhcmlhbnQgZmxhZy4gKi9cbiAgICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyBuZWdhdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIFNiYk5lZ2F0aXZlRWxlbWVudCBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYk5lZ2F0aXZlTWl4aW5UeXBlPiAmIFQ7XG59O1xuIiwiaW1wb3J0IHR5cGUgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICcuLi9ldmVudGluZy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IuanMnO1xuXG5leHBvcnQgZGVjbGFyZSBjbGFzcyBTYmJQYW5lbE1peGluVHlwZSB7XG4gIHB1YmxpYyBjb2xvcjogJ3doaXRlJyB8ICdtaWxrJztcbiAgcHVibGljIGJvcmRlcmxlc3M6IGJvb2xlYW47XG4gIHB1YmxpYyBleHBhbnNpb25TdGF0ZT86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgU2JiUGFuZWxTaXplID0gJ3MnIHwgJ20nO1xuXG4vKipcbiAqIE1peGluIGZvciBjb21tb24gcGFuZWwgYmVoYXZpb3JzXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJQYW5lbE1peGluID0gPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiUGFuZWxNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYlBhbmVsRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3MgaW1wbGVtZW50cyBTYmJQYW5lbE1peGluVHlwZSB7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBldmVudHMgPSB7XG4gICAgICBwYW5lbENvbm5lY3RlZDogJ3BhbmVsQ29ubmVjdGVkJyxcbiAgICB9IGFzIGNvbnN0O1xuXG4gICAgLyoqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBwYW5lbC4gKi9cbiAgICBAcHJvcGVydHkoKSBwdWJsaWMgY29sb3I6ICd3aGl0ZScgfCAnbWlsaycgPSAnd2hpdGUnO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIHVuc2VsZWN0ZWQgcGFuZWwgaGFzIGEgYm9yZGVyLiAqL1xuICAgIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSkgcHVibGljIGJvcmRlcmxlc3MgPSBmYWxzZTtcblxuICAgIC8qKiBAaW50ZXJuYWwgdXNlZCBmb3IgYWNjZXNzaWJpbGl0eSBsYWJlbCB3aGVuIGluIGV4cGFuc2lvbiBwYW5lbCAqL1xuICAgIEBwcm9wZXJ0eSgpIHB1YmxpYyBleHBhbnNpb25TdGF0ZT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIEludGVybmFsIGV2ZW50IHRoYXQgZW1pdHMgd2hlbiB0aGUgY2hlY2tib3ggaXMgbG9hZGVkLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3BhbmVsQ29ubmVjdGVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgICAgdGhpcyxcbiAgICAgIFNiYlBhbmVsRWxlbWVudC5ldmVudHMucGFuZWxDb25uZWN0ZWQsXG4gICAgICB7IGJ1YmJsZXM6IHRydWUgfSxcbiAgICApO1xuXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgICAgdGhpcy5fcGFuZWxDb25uZWN0ZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBTYmJQYW5lbEVsZW1lbnQgYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJQYW5lbE1peGluVHlwZT4gJiBUO1xufTtcbiIsImltcG9ydCB0eXBlIHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5cbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RydWN0b3IuanMnO1xuXG4vLyBEZWZpbmUgdGhlIGludGVyZmFjZSBmb3IgdGhlIG1peGluXG5leHBvcnQgZGVjbGFyZSBjbGFzcyBTYmJVcGRhdGVTY2hlZHVsZXJNaXhpblR5cGUge1xuICBwcm90ZWN0ZWQgc3RhcnRVcGRhdGUoKTogdm9pZDtcbiAgcHJvdGVjdGVkIGNvbXBsZXRlVXBkYXRlKCk6IHZvaWQ7XG59XG5cbi8qKlxuICogVGhpcyBtaXhpbiBhbGxvd3Mgc2NoZWR1bGluZyBtYW51YWwgdXBkYXRlcywgd2hpY2ggYWZmZWN0IHVwZGF0ZUNvbXBsZXRlLlxuICogQHBhcmFtIGJhc2UgVGhlIGNsYXNzIHRvIGV4dGVuZC5cbiAqIEByZXR1cm5zIEEgY2xhc3MgZXh0ZW5kZWQgd2l0aCB0aGUgc2xvdCBjaGlsZCBvYnNlcnZlciBmdW5jdGlvbmFsaXR5LlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgU2JiVXBkYXRlU2NoZWR1bGVyTWl4aW4gPSA8VCBleHRlbmRzIEFic3RyYWN0Q29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBiYXNlOiBULFxuKTogQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJVcGRhdGVTY2hlZHVsZXJNaXhpblR5cGU+ICYgVCA9PiB7XG4gIGFic3RyYWN0IGNsYXNzIFNiYlVwZGF0ZVNjaGVkdWxlckVsZW1lbnRcbiAgICBleHRlbmRzIGJhc2VcbiAgICBpbXBsZW1lbnRzIFBhcnRpYWw8U2JiVXBkYXRlU2NoZWR1bGVyTWl4aW5UeXBlPlxuICB7XG4gICAgcHJpdmF0ZSBfdXBkYXRlUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIHByaXZhdGUgX3VwZGF0ZVJlc29sdmUgPSAoKTogdm9pZCA9PiB7fTtcblxuICAgIHByb3RlY3RlZCBzdGFydFVwZGF0ZSgpOiB2b2lkIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4gKHRoaXMuX3VwZGF0ZVJlc29sdmUgPSByKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvbXBsZXRlVXBkYXRlKCk6IHZvaWQge1xuICAgICAgdGhpcy5fdXBkYXRlUmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBnZXRVcGRhdGVDb21wbGV0ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN1cGVyLmdldFVwZGF0ZUNvbXBsZXRlKCk7XG4gICAgICBhd2FpdCB0aGlzLl91cGRhdGVQcm9taXNlO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFNiYlVwZGF0ZVNjaGVkdWxlckVsZW1lbnQgYXMgdW5rbm93biBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYlVwZGF0ZVNjaGVkdWxlck1peGluVHlwZT4gJlxuICAgIFQ7XG59O1xuIl0sIm5hbWVzIjpbIl9fZGVjb3JhdGVDbGFzcyIsInN0YXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBZWEsTUFBQSxtQkFBbUIsQ0FDOUIsZUFDa0Q7QUFBQSxFQUNsRCxNQUFlLDJCQUEyQixXQUFvRDtBQUFBLElBQTlGLGNBQUE7QUFBQSxZQUFBLEdBQUEsU0FBQTtBQVdFLFdBQVEsWUFBcUI7QUFBQSxJQUFBO0FB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ZixtQkFBdUMsV0FBd0M7QUFBQSxJQUEvRSxjQUFBO0FBQUEsWUFBQSxHQUFBLFNBQUE7QUFNYyxXQUFPLFFBQTBCO0FBR0QsV0FBTyxhQUFhO0FBU2hFLFdBQVEsa0JBQXNDLElBQUk7QUFBQSxRQUNoRDtBQUFBLFFBQ0EsR0FBZ0IsT0FBTztBQUFBLFFBQ3ZCLEVBQUUsU0FBUyxLQUFLO0FBQUEsTUFBQTtBQUFBLElBQ2xCO0FBQUEsSUFFZ0Isb0JBQTBCO0FBQ3hDLFlBQU0sa0JBQWtCO0FBRXhCLFdBQUssZ0JBQWdCO0lBQ3ZCO0FBQUEsRUFBQSxHQTNCQSxHQUF1QixTQUFTO0FBQUEsSUFDOUIsZ0JBQWdCO0FBQUEsRUFBQSxHQUZwQjtBQU1xQixrQkFBQTtBQUFBLElBQWxCLFNBQVM7QUFBQSxFQUFBLEdBTkcsaUJBTU0sV0FBQSxPQUFBO0FBR2dDLGtCQUFBO0FBQUEsSUFBbEQsU0FBUyxFQUFFLFNBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFBLEdBVDdCLGlCQVNzQyxXQUFBLFlBQUE7QUFHaEMsa0JBQUE7QUFBQSxJQUFsQixTQUFTO0FBQUEsRUFBQSxHQVpHLGlCQVlNLFdBQUEsZ0JBQUE7QUFackIsTUFBZSxrQkFBZjtBQStCTyxTQUFBO0FBQ1Q7QUN0Q2EsTUFBQSwwQkFBMEIsQ0FDckMsU0FDeUQ7QUFBQSxFQUN6RCxNQUFlLGtDQUNMLEtBRVY7QUFBQSxJQUhBLGNBQUE7QUFBQSxZQUFBLEdBQUEsU0FBQTtBQUlVLFdBQUEsaUJBQWlCLFFBQVE7QUFDakMsV0FBUSxpQkFBaUIsTUFBWTtBQUFBLE1BQUE7QUFBQSxJQUFDO0FBQUEsSUFFNUIsY0FBb0I7QUFDNUIsV0FBSyxpQkFBaUIsSUFBSSxRQUFjLENBQUMsTUFBTyxLQUFLLGlCQUFpQixDQUFFO0FBQUEsSUFDMUU7QUFBQSxJQUVVLGlCQUF1QjtBQUMvQixXQUFLLGVBQWU7QUFBQSxJQUN0QjtBQUFBLElBRUEsTUFBeUIsb0JBQXNDO0FBQ3ZELFlBQUEsU0FBUyxNQUFNLE1BQU07QUFDM0IsWUFBTSxLQUFLO0FBQ0osYUFBQTtBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBQ08sU0FBQTtBQUVUOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7In0=
@@ -1,21 +1,7 @@
1
1
  import { TemplateResult } from 'lit';
2
-
3
2
  /**
4
3
  * Used to create the "wrapping" effect around the anchor for overlays (es. autocomplete)
5
4
  * Works in conjunction with the 'overlayGapFixCorners()' function in 'overlay.ts'
6
5
  */
7
6
  export declare function overlayGapFixCorners(): TemplateResult;
8
- /**
9
- * Applies inert to every other element on the page except the overlay.
10
- */
11
- export declare function applyInertMechanism(overlay: HTMLElement): void;
12
- export declare function removeInertMechanism(): void;
13
- declare global {
14
- interface GlobalEventHandlersEventMap {
15
- willOpen: CustomEvent<void>;
16
- willClose: CustomEvent<void>;
17
- didOpen: CustomEvent<void>;
18
- didClose: CustomEvent<void>;
19
- }
20
- }
21
7
  //# sourceMappingURL=overlay.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../../../../src/elements/core/overlay/overlay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAK1C;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CASrD;AA4DD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAyB9D;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAqB3C;AACD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,2BAA2B;QACnC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAC5B,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;KAC7B;CACF"}
1
+ {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../../../../src/elements/core/overlay/overlay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAG1C;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CASrD"}