@sbb-esta/lyne-elements 1.9.0 → 1.10.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 (291) hide show
  1. package/accordion/accordion.d.ts +5 -5
  2. package/accordion/accordion.d.ts.map +1 -1
  3. package/accordion.js +17 -17
  4. package/action-group/action-group.d.ts +1 -1
  5. package/action-group/action-group.d.ts.map +1 -1
  6. package/action-group.js +3 -3
  7. package/alert/alert/alert.d.ts +1 -1
  8. package/alert/alert/alert.d.ts.map +1 -1
  9. package/alert/alert.js +3 -3
  10. package/autocomplete/autocomplete-base-element.d.ts +1 -1
  11. package/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  12. package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts +1 -1
  13. package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts.map +1 -1
  14. package/autocomplete-grid/autocomplete-grid-option.js +1 -1
  15. package/autocomplete-grid/autocomplete-grid.js +18 -18
  16. package/autocomplete.js +9 -9
  17. package/button/button.js +9 -9
  18. package/button/common.js +5 -5
  19. package/button/mini-button/mini-button.d.ts.map +1 -1
  20. package/button/mini-button.js +17 -15
  21. package/button/secondary-button.js +6 -6
  22. package/button/tertiary-button.js +13 -13
  23. package/button/transparent-button.js +8 -8
  24. package/calendar/calendar.d.ts +2 -2
  25. package/calendar/calendar.d.ts.map +1 -1
  26. package/calendar.js +5 -4
  27. package/clock/clock.d.ts +2 -2
  28. package/clock/clock.d.ts.map +1 -1
  29. package/core/a11y/focus-visible-within-controller.d.ts +1 -1
  30. package/core/a11y/focus-visible-within-controller.d.ts.map +1 -1
  31. package/core/a11y/input-modality-detector.d.ts +2 -2
  32. package/core/a11y/input-modality-detector.d.ts.map +1 -1
  33. package/core/a11y.js +3 -3
  34. package/core/base-elements/action-base-element.d.ts +1 -0
  35. package/core/base-elements/action-base-element.d.ts.map +1 -1
  36. package/core/base-elements/button-base-element.d.ts +1 -1
  37. package/core/base-elements/button-base-element.d.ts.map +1 -1
  38. package/core/base-elements/link-base-element.d.ts.map +1 -1
  39. package/core/base-elements.js +47 -45
  40. package/core/controllers/slot-state-controller.d.ts +1 -1
  41. package/core/controllers/slot-state-controller.d.ts.map +1 -1
  42. package/core/mixins/disabled-mixin.d.ts +8 -0
  43. package/core/mixins/disabled-mixin.d.ts.map +1 -1
  44. package/core/mixins.js +97 -89
  45. package/core/styles/mixins/panel.scss +0 -2
  46. package/core/styles/mixins/table.scss +11 -0
  47. package/core/styles/mixins/typo.scss +0 -30
  48. package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables.scss +1 -0
  49. package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables_css--mixin.scss +2 -1
  50. package/core/styles/table.scss +6 -1
  51. package/core.css +2 -14
  52. package/custom-elements.json +370 -298
  53. package/datepicker/datepicker/datepicker.d.ts.map +1 -1
  54. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts +2 -0
  55. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  56. package/datepicker/datepicker-toggle.js +56 -46
  57. package/datepicker/datepicker.js +1 -0
  58. package/development/accordion/accordion.d.ts +5 -5
  59. package/development/accordion/accordion.d.ts.map +1 -1
  60. package/development/accordion.js +25 -38
  61. package/development/action-group/action-group.d.ts +1 -1
  62. package/development/action-group/action-group.d.ts.map +1 -1
  63. package/development/action-group.js +8 -21
  64. package/development/alert/alert/alert.d.ts +1 -1
  65. package/development/alert/alert/alert.d.ts.map +1 -1
  66. package/development/alert/alert-group.js +2 -15
  67. package/development/alert/alert.js +6 -19
  68. package/development/autocomplete/autocomplete-base-element.d.ts +1 -1
  69. package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  70. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts +1 -1
  71. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts.map +1 -1
  72. package/development/autocomplete-grid/autocomplete-grid-button.js +2 -15
  73. package/development/autocomplete-grid/autocomplete-grid-cell.js +2 -15
  74. package/development/autocomplete-grid/autocomplete-grid-option.js +4 -17
  75. package/development/autocomplete-grid/autocomplete-grid-row.js +2 -15
  76. package/development/autocomplete-grid/autocomplete-grid.js +6 -6
  77. package/development/autocomplete.js +7 -20
  78. package/development/breadcrumb/breadcrumb-group.js +2 -15
  79. package/development/breadcrumb/breadcrumb.js +2 -15
  80. package/development/button/button.js +3 -3
  81. package/development/button/common.js +2 -17
  82. package/development/button/mini-button/mini-button.d.ts.map +1 -1
  83. package/development/button/mini-button-group.js +2 -15
  84. package/development/button/mini-button.js +6 -17
  85. package/development/button/secondary-button.js +3 -3
  86. package/development/button/tertiary-button.js +3 -3
  87. package/development/button/transparent-button.js +3 -3
  88. package/development/calendar/calendar.d.ts +2 -2
  89. package/development/calendar/calendar.d.ts.map +1 -1
  90. package/development/calendar.js +7 -19
  91. package/development/card/card-badge.js +2 -15
  92. package/development/card/card.js +2 -15
  93. package/development/card/common.js +2 -15
  94. package/development/checkbox/checkbox-group.js +2 -15
  95. package/development/checkbox/checkbox.js +2 -15
  96. package/development/checkbox/common.js +1 -14
  97. package/development/chip.js +2 -15
  98. package/development/clock/clock.d.ts +2 -2
  99. package/development/clock/clock.d.ts.map +1 -1
  100. package/development/clock.js +2 -15
  101. package/development/container/container.js +1 -14
  102. package/development/container/sticky-bar.js +2 -15
  103. package/development/core/a11y/focus-visible-within-controller.d.ts +1 -1
  104. package/development/core/a11y/focus-visible-within-controller.d.ts.map +1 -1
  105. package/development/core/a11y/input-modality-detector.d.ts +2 -2
  106. package/development/core/a11y/input-modality-detector.d.ts.map +1 -1
  107. package/development/core/a11y.js +6 -6
  108. package/development/core/base-elements/action-base-element.d.ts +1 -0
  109. package/development/core/base-elements/action-base-element.d.ts.map +1 -1
  110. package/development/core/base-elements/button-base-element.d.ts +1 -1
  111. package/development/core/base-elements/button-base-element.d.ts.map +1 -1
  112. package/development/core/base-elements/link-base-element.d.ts.map +1 -1
  113. package/development/core/base-elements.js +11 -2
  114. package/development/core/controllers/slot-state-controller.d.ts +1 -1
  115. package/development/core/controllers/slot-state-controller.d.ts.map +1 -1
  116. package/development/core/controllers.js +1 -1
  117. package/development/core/mixins/disabled-mixin.d.ts +8 -0
  118. package/development/core/mixins/disabled-mixin.d.ts.map +1 -1
  119. package/development/core/mixins.js +24 -15
  120. package/development/datepicker/datepicker/datepicker.d.ts.map +1 -1
  121. package/development/datepicker/datepicker-next-day.js +2 -15
  122. package/development/datepicker/datepicker-previous-day.js +2 -15
  123. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts +2 -0
  124. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  125. package/development/datepicker/datepicker-toggle.js +20 -22
  126. package/development/datepicker/datepicker.js +3 -15
  127. package/development/dialog/dialog-actions.js +2 -15
  128. package/development/dialog/dialog-content.js +2 -15
  129. package/development/dialog/dialog-title.js +2 -15
  130. package/development/dialog/dialog.js +3 -16
  131. package/development/divider.js +2 -15
  132. package/development/expansion-panel/expansion-panel-content.js +2 -15
  133. package/development/expansion-panel/expansion-panel-header.js +5 -17
  134. package/development/expansion-panel/expansion-panel.js +2 -15
  135. package/development/file-selector/file-selector.d.ts +4 -4
  136. package/development/file-selector/file-selector.d.ts.map +1 -1
  137. package/development/file-selector.js +2 -17
  138. package/development/flip-card/flip-card-details.js +2 -15
  139. package/development/flip-card/flip-card-summary.js +2 -15
  140. package/development/flip-card/flip-card.js +2 -15
  141. package/development/footer.js +2 -15
  142. package/development/form-error.js +2 -15
  143. package/development/form-field/form-field-clear.js +2 -15
  144. package/development/form-field/form-field.js +1 -14
  145. package/development/header/common.js +2 -15
  146. package/development/header/header.js +2 -15
  147. package/development/icon/icon.d.ts +6 -0
  148. package/development/icon/icon.d.ts.map +1 -1
  149. package/development/icon.js +10 -15
  150. package/development/image.js +4 -17
  151. package/development/journey-header.js +2 -15
  152. package/development/lead-container.js +2 -15
  153. package/development/link/block-link-button.js +3 -3
  154. package/development/link/common.js +4 -43
  155. package/development/link/link-button.js +3 -3
  156. package/development/link-list/common.js +2 -15
  157. package/development/link-list/link-list-anchor.js +2 -15
  158. package/development/link-list/link-list.js +2 -15
  159. package/development/loading-indicator.js +2 -15
  160. package/development/logo.js +2 -15
  161. package/development/map-container.js +2 -15
  162. package/development/menu/common.js +2 -15
  163. package/development/menu/menu/menu.d.ts.map +1 -1
  164. package/development/menu/menu-button.js +3 -3
  165. package/development/menu/menu.js +3 -18
  166. package/development/message.js +2 -15
  167. package/development/navigation/common.js +2 -17
  168. package/development/navigation/navigation-list.js +2 -15
  169. package/development/navigation/navigation-marker.js +2 -17
  170. package/development/navigation/navigation-section.js +2 -19
  171. package/development/navigation/navigation.js +2 -15
  172. package/development/notification.js +2 -15
  173. package/development/option/optgroup/optgroup-base-element.d.ts +2 -2
  174. package/development/option/optgroup/optgroup-base-element.d.ts.map +1 -1
  175. package/development/option/optgroup.js +2 -15
  176. package/development/option/option/option-base-element.d.ts +14 -4
  177. package/development/option/option/option-base-element.d.ts.map +1 -1
  178. package/development/option/option.js +15 -21
  179. package/development/overlay/overlay-base-element.d.ts +1 -1
  180. package/development/overlay/overlay-base-element.d.ts.map +1 -1
  181. package/development/overlay.js +2 -15
  182. package/development/popover/popover-trigger.js +4 -17
  183. package/development/popover/popover.js +2 -15
  184. package/development/radio-button/common.js +2 -15
  185. package/development/radio-button/radio-button-group/radio-button-group.d.ts +1 -1
  186. package/development/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -1
  187. package/development/radio-button/radio-button-group.js +9 -22
  188. package/development/radio-button/radio-button.js +2 -15
  189. package/development/screen-reader-only.js +2 -15
  190. package/development/select/select.d.ts.map +1 -1
  191. package/development/select.js +30 -43
  192. package/development/selection-expansion-panel/selection-expansion-panel.d.ts +12 -3
  193. package/development/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  194. package/development/selection-expansion-panel.js +38 -18
  195. package/development/signet.js +2 -15
  196. package/development/skiplink-list.js +2 -15
  197. package/development/slider/slider.d.ts.map +1 -1
  198. package/development/slider.js +10 -16
  199. package/development/status.js +2 -15
  200. package/development/stepper/step-label/step-label.d.ts +6 -6
  201. package/development/stepper/step-label/step-label.d.ts.map +1 -1
  202. package/development/stepper/step-label.js +31 -44
  203. package/development/stepper/step.js +2 -15
  204. package/development/stepper/stepper/stepper.d.ts +3 -3
  205. package/development/stepper/stepper/stepper.d.ts.map +1 -1
  206. package/development/stepper/stepper.js +2 -15
  207. package/development/table/table-wrapper.js +2 -15
  208. package/development/tabs/tab-group/tab-group.d.ts +4 -4
  209. package/development/tabs/tab-group/tab-group.d.ts.map +1 -1
  210. package/development/tabs/tab-group.js +22 -35
  211. package/development/tabs/tab-label.js +2 -19
  212. package/development/tabs/tab.js +1 -14
  213. package/development/tag/tag-group.js +2 -15
  214. package/development/tag/tag.js +4 -17
  215. package/development/teaser-hero.js +3 -23
  216. package/development/teaser-product/common.js +2 -15
  217. package/development/teaser-product/teaser-product.js +3 -16
  218. package/development/teaser.js +2 -15
  219. package/development/time-input.js +2 -15
  220. package/development/timetable-occupancy-icon.js +2 -15
  221. package/development/timetable-occupancy.js +2 -15
  222. package/development/title.js +3 -41
  223. package/development/toast.js +2 -17
  224. package/development/toggle/toggle/toggle.d.ts +2 -2
  225. package/development/toggle/toggle/toggle.d.ts.map +1 -1
  226. package/development/toggle/toggle-option.js +2 -15
  227. package/development/toggle/toggle.js +23 -36
  228. package/development/toggle-check.js +1 -14
  229. package/development/train/train-blocked-passage.js +2 -15
  230. package/development/train/train-formation.js +2 -15
  231. package/development/train/train-wagon.js +2 -17
  232. package/development/train/train.js +2 -15
  233. package/development/visual-checkbox.js +2 -15
  234. package/dialog/dialog.js +1 -1
  235. package/expansion-panel/expansion-panel-header.js +5 -5
  236. package/file-selector/file-selector.d.ts +4 -4
  237. package/file-selector/file-selector.d.ts.map +1 -1
  238. package/file-selector.js +1 -1
  239. package/icon/icon.d.ts +6 -0
  240. package/icon/icon.d.ts.map +1 -1
  241. package/icon.js +27 -19
  242. package/image.js +2 -2
  243. package/link/block-link-button.js +10 -10
  244. package/link/link-button.js +4 -4
  245. package/lists.css +0 -13
  246. package/menu/menu/menu.d.ts.map +1 -1
  247. package/menu/menu-button.js +13 -13
  248. package/menu/menu.js +7 -9
  249. package/navigation/common.js +1 -1
  250. package/navigation/navigation-marker.js +1 -1
  251. package/navigation/navigation-section.js +1 -1
  252. package/option/optgroup/optgroup-base-element.d.ts +2 -2
  253. package/option/optgroup/optgroup-base-element.d.ts.map +1 -1
  254. package/option/option/option-base-element.d.ts +14 -4
  255. package/option/option/option-base-element.d.ts.map +1 -1
  256. package/option/option.js +32 -25
  257. package/overlay/overlay-base-element.d.ts +1 -1
  258. package/overlay/overlay-base-element.d.ts.map +1 -1
  259. package/package.json +1 -1
  260. package/popover/popover-trigger.js +1 -1
  261. package/radio-button/radio-button-group/radio-button-group.d.ts +1 -1
  262. package/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -1
  263. package/radio-button/radio-button-group.js +5 -5
  264. package/select/select.d.ts.map +1 -1
  265. package/select.js +23 -23
  266. package/selection-expansion-panel/selection-expansion-panel.d.ts +12 -3
  267. package/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  268. package/selection-expansion-panel.js +70 -49
  269. package/slider/slider.d.ts.map +1 -1
  270. package/slider.js +2 -2
  271. package/standard-theme.css +35 -23
  272. package/stepper/step-label/step-label.d.ts +6 -6
  273. package/stepper/step-label/step-label.d.ts.map +1 -1
  274. package/stepper/step-label.js +20 -20
  275. package/stepper/stepper/stepper.d.ts +3 -3
  276. package/stepper/stepper/stepper.d.ts.map +1 -1
  277. package/tabs/tab-group/tab-group.d.ts +4 -4
  278. package/tabs/tab-group/tab-group.d.ts.map +1 -1
  279. package/tabs/tab-group.js +15 -15
  280. package/tabs/tab-label.js +12 -12
  281. package/tag/tag.js +19 -19
  282. package/teaser-hero.js +13 -13
  283. package/teaser-product/teaser-product.js +5 -5
  284. package/teaser.js +15 -15
  285. package/title.js +23 -23
  286. package/toast.js +4 -4
  287. package/toggle/toggle/toggle.d.ts +2 -2
  288. package/toggle/toggle/toggle.d.ts.map +1 -1
  289. package/toggle/toggle.js +10 -10
  290. package/train/train-wagon.js +7 -7
  291. package/typography.css +0 -13
@@ -59,10 +59,6 @@ let SbbOptionBaseElement = class extends SbbDisabledMixin(
59
59
  get selected() {
60
60
  return this.hasAttribute("selected");
61
61
  }
62
- updateDisableHighlight(disabled) {
63
- this.disableLabelHighlight = disabled;
64
- this.toggleAttribute("data-disable-highlight", disabled);
65
- }
66
62
  attributeChangedCallback(name, old, value) {
67
63
  if (name !== "value" || old !== value) {
68
64
  super.attributeChangedCallback(name, old, value);
@@ -110,6 +106,17 @@ let SbbOptionBaseElement = class extends SbbDisabledMixin(
110
106
  super.disconnectedCallback();
111
107
  this._optionAttributeObserver.disconnect();
112
108
  }
109
+ updateDisableHighlight(disabled) {
110
+ this.disableLabelHighlight = disabled;
111
+ this.toggleAttribute("data-disable-highlight", disabled);
112
+ }
113
+ /**
114
+ * Whether the option is currently active.
115
+ * @internal
116
+ */
117
+ setActive(value) {
118
+ this.toggleAttribute("data-active", value);
119
+ }
113
120
  init() {
114
121
  this.setAttributeFromParent();
115
122
  this._optionAttributeObserver.observe(this, optionObserverConfig);
@@ -227,20 +234,7 @@ __decorateClass$1([
227
234
  SbbOptionBaseElement = __decorateClass$1([
228
235
  slotState()
229
236
  ], SbbOptionBaseElement);
230
- const style = css`/**
231
- * Better font rendering (on OS X)
232
- * http://maximilianhoffmann.com/posts/better-font-rendering-on-osx
233
- *
234
- * Usage:
235
- *
236
- * .var_dark_on_light {
237
- * @include font-smoothing;
238
- * }
239
- * .var_light_on_dark {
240
- * @include font-smoothing-reset;
241
- * }
242
- */
243
- /** This mixin can be used to avoid spacing problems by inserting an invisible space as pseudo element. */
237
+ const style = css`/** This mixin can be used to avoid spacing problems by inserting an invisible space as pseudo element. */
244
238
  /*
245
239
  * SBB table mixin
246
240
  * Notes:
@@ -280,7 +274,7 @@ const style = css`/**
280
274
  --sbb-focus-outline-color: var(--sbb-focus-outline-color-dark);
281
275
  }
282
276
 
283
- :host([active]) {
277
+ :host([data-active]) {
284
278
  --sbb-focus-outline-offset: calc(-1 * var(--sbb-spacing-fixed-1x));
285
279
  }
286
280
 
@@ -348,7 +342,7 @@ const style = css`/**
348
342
  -webkit-tap-highlight-color: transparent;
349
343
  -webkit-text-fill-color: var(--sbb-option-color);
350
344
  }
351
- :host([active]) .sbb-option {
345
+ :host([data-active]) .sbb-option {
352
346
  outline-offset: var(--sbb-focus-outline-offset);
353
347
  outline: var(--sbb-focus-outline-color) solid var(--sbb-focus-outline-width);
354
348
  border-radius: var(--sbb-option-border-radius);
@@ -511,4 +505,4 @@ export {
511
505
  SbbOptionBaseElement,
512
506
  SbbOptionElement
513
507
  };
514
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvb3B0aW9uL29wdGlvbi9vcHRpb24tYmFzZS1lbGVtZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL29wdGlvbi9vcHRpb24vb3B0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQsIG5vdGhpbmcsIHR5cGUgUHJvcGVydHlWYWx1ZXMsIHR5cGUgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBTYmJDb25uZWN0ZWRBYm9ydENvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9jb3JlL2NvbnRyb2xsZXJzLmpzJztcbmltcG9ydCB7IHNsb3RTdGF0ZSB9IGZyb20gJy4uLy4uL2NvcmUvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBpc0FuZHJvaWQsIGlzU2FmYXJpLCBzZXRPclJlbW92ZUF0dHJpYnV0ZSB9IGZyb20gJy4uLy4uL2NvcmUvZG9tLmpzJztcbmltcG9ydCB0eXBlIHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQgeyBTYmJEaXNhYmxlZE1peGluLCBTYmJIeWRyYXRpb25NaXhpbiB9IGZyb20gJy4uLy4uL2NvcmUvbWl4aW5zLmpzJztcbmltcG9ydCB7IEFnbm9zdGljTXV0YXRpb25PYnNlcnZlciB9IGZyb20gJy4uLy4uL2NvcmUvb2JzZXJ2ZXJzLmpzJztcbmltcG9ydCB7IFNiYkljb25OYW1lTWl4aW4gfSBmcm9tICcuLi8uLi9pY29uLmpzJztcbmltcG9ydCAnLi4vLi4vc2NyZWVuLXJlYWRlci1vbmx5LmpzJztcblxubGV0IG5leHRJZCA9IDA7XG5cbi8qKlxuICogT24gU2FmYXJpLCB0aGUgZ3JvdXBzIGxhYmVscyBhcmUgbm90IHJlYWQgYnkgVm9pY2VPdmVyLlxuICogVG8gc29sdmUgdGhlIHByb2JsZW0sIHdlIHJlbW92ZSB0aGUgcm9sZT1cImdyb3VwXCIgYW5kIGFkZCBhbiBoaWRkZW4gc3BhbiBjb250YWluaW5nIHRoZSBncm91cCBuYW1lXG4gKiBUT0RPOiBXZSBzaG91bGQgcGVyaW9kaWNhbGx5IGNoZWNrIGlmIGl0IGhhcyBiZWVuIHNvbHZlZCBhbmQsIGlmIHNvLCByZW1vdmUgdGhlIHByb3BlcnR5LlxuICovXG5jb25zdCBpbmVydEFyaWFHcm91cHMgPSBpc1NhZmFyaTtcblxuLyoqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBhdHRyaWJ1dGUgdG8gbG9vayBhdCBpZiBjb21wb25lbnQgaXMgbmVzdGVkIGluIGFuIG9wdGlvbiBncm91cCAqL1xuY29uc3Qgb3B0aW9uT2JzZXJ2ZXJDb25maWc6IE11dGF0aW9uT2JzZXJ2ZXJJbml0ID0ge1xuICBhdHRyaWJ1dGVGaWx0ZXI6IFsnZGF0YS1ncm91cC1kaXNhYmxlZCcsICdkYXRhLW5lZ2F0aXZlJ10sXG59O1xuXG5Ac2xvdFN0YXRlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTYmJPcHRpb25CYXNlRWxlbWVudCBleHRlbmRzIFNiYkRpc2FibGVkTWl4aW4oXG4gIFNiYkljb25OYW1lTWl4aW4oU2JiSHlkcmF0aW9uTWl4aW4oTGl0RWxlbWVudCkpLFxuKSB7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBvcHRpb25JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWYWx1ZSBvZiB0aGUgb3B0aW9uLlxuICAgKlxuICAgKiBAZGVzY3JpcHRpb24gRGV2ZWxvcGVyIG5vdGU6IEluIHRoaXMgY2FzZSB1cGRhdGluZyB0aGUgYXR0cmlidXRlIG11c3QgYmUgc3luY2hyb25vdXMuXG4gICAqIER1ZSB0byB0aGlzLCBpdCBpcyBpbXBsZW1lbnRlZCBhcyBhIGdldHRlci9zZXR0ZXIgYW5kIHRoZSBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSBoYW5kbGVzIHRoZSBkaWZmIGNoZWNrLlxuICAgKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgYCR7dmFsdWV9YCk7XG4gIH1cbiAgcHVibGljIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgndmFsdWUnKSA/PyAnJztcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBvcHRpb24gaXMgY3VycmVudGx5IGFjdGl2ZS4gKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KSBwdWJsaWMgYWN0aXZlPzogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0aGUgb3B0aW9uIGlzIHNlbGVjdGVkLiAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgnc2VsZWN0ZWQnLCB2YWx1ZSk7XG4gICAgdGhpcy5fdXBkYXRlQXJpYVNlbGVjdGVkKCk7XG4gIH1cbiAgcHVibGljIGdldCBzZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoJ3NlbGVjdGVkJyk7XG4gIH1cblxuICAvKiogRW1pdHMgd2hlbiB0aGUgb3B0aW9uIHNlbGVjdGlvbiBzdGF0dXMgY2hhbmdlcy4gKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHNlbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyO1xuXG4gIC8qKiBFbWl0cyB3aGVuIGFuIG9wdGlvbiB3YXMgc2VsZWN0ZWQgYnkgdXNlci4gKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IG9wdGlvblNlbGVjdGVkOiBFdmVudEVtaXR0ZXI7XG5cbiAgLyoqIFdoZXRoZXIgdG8gYXBwbHkgdGhlIG5lZ2F0aXZlIHN0eWxpbmcgKi9cbiAgQHN0YXRlKCkgcHJvdGVjdGVkIG5lZ2F0aXZlID0gZmFsc2U7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBtdXN0IGJlIHNldCBkaXNhYmxlZCBkdWUgZGlzYWJsZWQgYXR0cmlidXRlIG9uIHNiYi1vcHRncm91cC4gKi9cbiAgQHN0YXRlKCkgcHJvdGVjdGVkIGRpc2FibGVkRnJvbUdyb3VwID0gZmFsc2U7XG5cbiAgQHN0YXRlKCkgcHJvdGVjdGVkIGxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKiBEaXNhYmxlIHRoZSBoaWdobGlnaHQgb2YgdGhlIGxhYmVsLiAqL1xuICBAc3RhdGUoKSBwcm90ZWN0ZWQgZGlzYWJsZUxhYmVsSGlnaGxpZ2h0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFRoZSBwb3J0aW9uIG9mIHRoZSBoaWdobGlnaHRlZCBsYWJlbC4gKi9cbiAgQHN0YXRlKCkgcHJpdmF0ZSBfaGlnaGxpZ2h0U3RyaW5nOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBAc3RhdGUoKSBwcml2YXRlIF9pbmVydEFyaWFHcm91cHMgPSBmYWxzZTtcblxuICBwcml2YXRlIF9hYm9ydCA9IG5ldyBTYmJDb25uZWN0ZWRBYm9ydENvbnRyb2xsZXIodGhpcyk7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBzZWxlY3RCeUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHNldEF0dHJpYnV0ZUZyb21QYXJlbnQoKTogdm9pZDtcblxuICBwcm90ZWN0ZWQgdXBkYXRlRGlzYWJsZUhpZ2hsaWdodChkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZUxhYmVsSGlnaGxpZ2h0ID0gZGlzYWJsZWQ7XG4gICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtZGlzYWJsZS1oaWdobGlnaHQnLCBkaXNhYmxlZCk7XG4gIH1cblxuICAvKiogTXV0YXRpb25PYnNlcnZlciBvbiBkYXRhIGF0dHJpYnV0ZXMuICovXG4gIHByaXZhdGUgX29wdGlvbkF0dHJpYnV0ZU9ic2VydmVyID0gbmV3IEFnbm9zdGljTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zTGlzdCkgPT5cbiAgICB0aGlzLm9uT3B0aW9uQXR0cmlidXRlc0NoYW5nZShtdXRhdGlvbnNMaXN0KSxcbiAgKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGlmIChpbmVydEFyaWFHcm91cHMpIHtcbiAgICAgIGlmICh0aGlzLmh5ZHJhdGlvblJlcXVpcmVkKSB7XG4gICAgICAgIHRoaXMuaHlkcmF0aW9uQ29tcGxldGUudGhlbigoKSA9PiAodGhpcy5faW5lcnRBcmlhR3JvdXBzID0gaW5lcnRBcmlhR3JvdXBzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9pbmVydEFyaWFHcm91cHMgPSBpbmVydEFyaWFHcm91cHM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb2xkOiBzdHJpbmcgfCBudWxsLFxuICAgIHZhbHVlOiBzdHJpbmcgfCBudWxsLFxuICApOiB2b2lkIHtcbiAgICBpZiAobmFtZSAhPT0gJ3ZhbHVlJyB8fCBvbGQgIT09IHZhbHVlKSB7XG4gICAgICBzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgb2xkLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhpZ2hsaWdodCB0aGUgbGFiZWwgb2YgdGhlIG9wdGlvblxuICAgKiBAcGFyYW0gdmFsdWUgdGhlIGhpZ2hsaWdodGVkIHBvcnRpb24gb2YgdGhlIGxhYmVsXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGhpZ2hsaWdodCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5faGlnaGxpZ2h0U3RyaW5nID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgc2V0U2VsZWN0ZWRWaWFVc2VySW50ZXJhY3Rpb24oc2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCgpO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICB0aGlzLm9wdGlvblNlbGVjdGVkLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLmlkIHx8PSBgJHt0aGlzLm9wdGlvbklkfS0ke25leHRJZCsrfWA7XG4gICAgaWYgKHRoaXMuaHlkcmF0aW9uUmVxdWlyZWQpIHtcbiAgICAgIHRoaXMuaHlkcmF0aW9uQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLmluaXQoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnZGlzYWJsZWQnKSkge1xuICAgICAgc2V0T3JSZW1vdmVBdHRyaWJ1dGUodGhpcywgJ3RhYmluZGV4JywgaXNBbmRyb2lkICYmICF0aGlzLmRpc2FibGVkICYmIDApO1xuICAgICAgdGhpcy51cGRhdGVBcmlhRGlzYWJsZWQoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICAvLyBJbml0IGZpcnN0IHNlbGVjdCBzdGF0ZSBiZWNhdXNlIGZhbHNlIHdvdWxkIG5vdCBjYWxsIHNldHRlciBvZiBzZWxlY3RlZCBwcm9wZXJ0eS5cbiAgICB0aGlzLl91cGRhdGVBcmlhU2VsZWN0ZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX29wdGlvbkF0dHJpYnV0ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlRnJvbVBhcmVudCgpO1xuICAgIHRoaXMuX29wdGlvbkF0dHJpYnV0ZU9ic2VydmVyLm9ic2VydmUodGhpcywgb3B0aW9uT2JzZXJ2ZXJDb25maWcpO1xuICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMuX2Fib3J0LnNpZ25hbDtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGU6IE1vdXNlRXZlbnQpID0+IHRoaXMuc2VsZWN0QnlDbGljayhlKSwge1xuICAgICAgc2lnbmFsLFxuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVBcmlhRGlzYWJsZWQoKTogdm9pZCB7XG4gICAgc2V0T3JSZW1vdmVBdHRyaWJ1dGUoXG4gICAgICB0aGlzLFxuICAgICAgJ2FyaWEtZGlzYWJsZWQnLFxuICAgICAgdGhpcy5kaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkRnJvbUdyb3VwID8gJ3RydWUnIDogbnVsbCxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlQXJpYVNlbGVjdGVkKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgYCR7dGhpcy5zZWxlY3RlZH1gKTtcbiAgfVxuXG4gIC8qKiBPYnNlcnZlIGNoYW5nZXMgb24gZGF0YSBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIGFwcHJvcHJpYXRlIHZhbHVlcy4gKi9cbiAgcHJvdGVjdGVkIG9uT3B0aW9uQXR0cmlidXRlc0NoYW5nZShtdXRhdGlvbnNMaXN0OiBNdXRhdGlvblJlY29yZFtdKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnNMaXN0KSB7XG4gICAgICBpZiAobXV0YXRpb24uYXR0cmlidXRlTmFtZSA9PT0gJ2RhdGEtZ3JvdXAtZGlzYWJsZWQnKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWRGcm9tR3JvdXAgPSB0aGlzLmhhc0F0dHJpYnV0ZSgnZGF0YS1ncm91cC1kaXNhYmxlZCcpO1xuICAgICAgICB0aGlzLnVwZGF0ZUFyaWFEaXNhYmxlZCgpO1xuICAgICAgfSBlbHNlIGlmIChtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09PSAnZGF0YS1uZWdhdGl2ZScpIHtcbiAgICAgICAgdGhpcy5uZWdhdGl2ZSA9IHRoaXMuaGFzQXR0cmlidXRlKCdkYXRhLW5lZ2F0aXZlJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUhpZ2hsaWdodFN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHNsb3ROb2RlcyA9IEFycmF5LmZyb20odGhpcy5jaGlsZE5vZGVzID8/IFtdKS5maWx0ZXIoXG4gICAgICAobikgPT4gbi5ub2RlVHlwZSAhPT0gTm9kZS5DT01NRU5UX05PREUgJiYgKCEobiBpbnN0YW5jZW9mIEVsZW1lbnQpIHx8IG4uc2xvdCAhPT0gJ2ljb24nKSxcbiAgICApO1xuICAgIGNvbnN0IGxhYmVsTm9kZXMgPSBzbG90Tm9kZXMuZmlsdGVyKChlbCkgPT4gZWwubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSBhcyBUZXh0W107XG5cbiAgICAvLyBEaXNhYmxlIHRoZSBoaWdobGlnaHQgaWYgdGhlIHNsb3QgY29udGFpbiBtb3JlIHRoYW4ganVzdCB0ZXh0IG5vZGVzLlxuICAgIC8vIFdlIG5lZWQgdG8gaWdub3JlIHRlbXBsYXRlIGVsZW1lbnRzLCBhcyBTU1IgYWRkcyBhIGRlY2xhcmF0aXZlIHNoYWRvdyBET01cbiAgICAvLyBpbiB0aGUgZm9ybSBvZiBhIHRlbXBsYXRlIGVsZW1lbnQuXG4gICAgaWYgKFxuICAgICAgbGFiZWxOb2Rlcy5sZW5ndGggPT09IDAgfHxcbiAgICAgIHNsb3ROb2Rlcy5maWx0ZXIoKG4pID0+ICEobiBpbnN0YW5jZW9mIEVsZW1lbnQpIHx8IG4ubG9jYWxOYW1lICE9PSAndGVtcGxhdGUnKS5sZW5ndGggIT09XG4gICAgICAgIGxhYmVsTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICB0aGlzLnVwZGF0ZURpc2FibGVIaWdobGlnaHQodHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubGFiZWwgPSBsYWJlbE5vZGVzXG4gICAgICAubWFwKChsKSA9PiBsLndob2xlVGV4dClcbiAgICAgIC5maWx0ZXIoKGwpID0+IGwudHJpbSgpKVxuICAgICAgLmpvaW4oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRIaWdobGlnaHRlZExhYmVsKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBpZiAoIXRoaXMuX2hpZ2hsaWdodFN0cmluZyB8fCAhdGhpcy5faGlnaGxpZ2h0U3RyaW5nLnRyaW0oKSkge1xuICAgICAgcmV0dXJuIGh0bWxgJHt0aGlzLmxhYmVsfWA7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hJbmRleCA9IHRoaXMubGFiZWwhLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0aGlzLl9oaWdobGlnaHRTdHJpbmcudG9Mb3dlckNhc2UoKSk7XG5cbiAgICBpZiAobWF0Y2hJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBodG1sYCR7dGhpcy5sYWJlbH1gO1xuICAgIH1cblxuICAgIGNvbnN0IHByZWZpeCA9IHRoaXMubGFiZWwhLnN1YnN0cmluZygwLCBtYXRjaEluZGV4KTtcbiAgICBjb25zdCBoaWdobGlnaHRlZCA9IHRoaXMubGFiZWwhLnN1YnN0cmluZyhcbiAgICAgIG1hdGNoSW5kZXgsXG4gICAgICBtYXRjaEluZGV4ICsgdGhpcy5faGlnaGxpZ2h0U3RyaW5nLmxlbmd0aCxcbiAgICApO1xuICAgIGNvbnN0IHBvc3RmaXggPSB0aGlzLmxhYmVsIS5zdWJzdHJpbmcobWF0Y2hJbmRleCArIHRoaXMuX2hpZ2hsaWdodFN0cmluZy5sZW5ndGgpO1xuXG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c3BhbiBjbGFzcz1cInNiYi1vcHRpb25fX2xhYmVsLS1oaWdobGlnaHRcIj4ke3ByZWZpeH08L3NwYW4+PHNwYW4+JHtoaWdobGlnaHRlZH08L3NwYW5cbiAgICAgID48c3BhbiBjbGFzcz1cInNiYi1vcHRpb25fX2xhYmVsLS1oaWdobGlnaHRcIj4ke3Bvc3RmaXh9PC9zcGFuPlxuICAgIGA7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVySWNvbigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgIDxzcGFuIGNsYXNzPVwic2JiLW9wdGlvbl9faWNvblwiPiAke3RoaXMucmVuZGVySWNvblNsb3QoKX0gPC9zcGFuPmA7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyTGFiZWwoKTogVGVtcGxhdGVSZXN1bHQgfCB0eXBlb2Ygbm90aGluZyB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWwgJiYgIXRoaXMuZGlzYWJsZUxhYmVsSGlnaGxpZ2h0ID8gdGhpcy5nZXRIaWdobGlnaHRlZExhYmVsKCkgOiBub3RoaW5nO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlclRpY2soKTogVGVtcGxhdGVSZXN1bHQgfCB0eXBlb2Ygbm90aGluZyB7XG4gICAgcmV0dXJuIG5vdGhpbmc7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItb3B0aW9uX19jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1vcHRpb25cIj5cbiAgICAgICAgICAke3RoaXMucmVuZGVySWNvbigpfVxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLW9wdGlvbl9fbGFiZWxcIj5cbiAgICAgICAgICAgIDxzbG90IEBzbG90Y2hhbmdlPSR7dGhpcy5oYW5kbGVIaWdobGlnaHRTdGF0ZX0+PC9zbG90PlxuICAgICAgICAgICAgJHt0aGlzLnJlbmRlckxhYmVsKCl9XG4gICAgICAgICAgICAke3RoaXMuX2luZXJ0QXJpYUdyb3VwcyAmJiB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS1ncm91cC1sYWJlbCcpXG4gICAgICAgICAgICAgID8gaHRtbGAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHk+XG4gICAgICAgICAgICAgICAgICAoJHt0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS1ncm91cC1sYWJlbCcpfSk8L3NiYi1zY3JlZW4tcmVhZGVyLW9ubHlcbiAgICAgICAgICAgICAgICA+YFxuICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICR7dGhpcy5yZW5kZXJUaWNrKCl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCwgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgaHRtbCwgbm90aGluZyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBob3N0QXR0cmlidXRlcyB9IGZyb20gJy4uLy4uL2NvcmUvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICcuLi8uLi9jb3JlL2V2ZW50aW5nLmpzJztcblxuaW1wb3J0IHsgU2JiT3B0aW9uQmFzZUVsZW1lbnQgfSBmcm9tICcuL29wdGlvbi1iYXNlLWVsZW1lbnQuanMnO1xuaW1wb3J0IHN0eWxlIGZyb20gJy4vb3B0aW9uLnNjc3M/bGl0JmlubGluZSc7XG5pbXBvcnQgJy4uLy4uL3Zpc3VhbC1jaGVja2JveC5qcyc7XG5cbmV4cG9ydCB0eXBlIFNiYk9wdGlvblZhcmlhbnQgPSAnYXV0b2NvbXBsZXRlJyB8ICdzZWxlY3QnIHwgbnVsbDtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBvbiBvcHRpb24gaXRlbSB3aGljaCBjYW4gYmUgdXNlZCBpbiBgc2JiLXNlbGVjdGAgb3IgYHNiYi1hdXRvY29tcGxldGVgLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIGNvbnRlbnQgdG8gdGhlIG9wdGlvbiBsYWJlbC5cbiAqIEBzbG90IGljb24gLSBVc2UgdGhpcyBzbG90IHRvIHByb3ZpZGUgYW4gaWNvbi4gSWYgYGljb24tbmFtZWAgaXMgc2V0LCBhIHNiYi1pY29uIHdpbGwgYmUgdXNlZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IG9wdGlvblNlbGVjdGlvbkNoYW5nZSAtIEVtaXRzIHdoZW4gdGhlIG9wdGlvbiBzZWxlY3Rpb24gc3RhdHVzIGNoYW5nZXMuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBvcHRpb25TZWxlY3RlZCAtIEVtaXRzIHdoZW4gYW4gb3B0aW9uIHdhcyBzZWxlY3RlZCBieSB1c2VyLlxuICogQGNzc3Byb3AgWy0tc2JiLW9wdGlvbi1pY29uLWNvbnRhaW5lci1kaXNwbGF5PW5vbmVdIC0gQ2FuIGJlIHVzZWQgdG8gcmVzZXJ2ZSBzcGFjZSBldmVuXG4gKiB3aGVuIHByZXNlcnZlLWljb24tc3BhY2Ugb24gYXV0b2NvbXBsZXRlIGlzIG5vdCBzZXQgb3IgaWNvbk5hbWUgaXMgbm90IHNldC5cbiAqL1xuQGN1c3RvbUVsZW1lbnQoJ3NiYi1vcHRpb24nKVxuQGhvc3RBdHRyaWJ1dGVzKHtcbiAgcm9sZTogJ29wdGlvbicsXG59KVxuZXhwb3J0IGNsYXNzIFNiYk9wdGlvbkVsZW1lbnQgZXh0ZW5kcyBTYmJPcHRpb25CYXNlRWxlbWVudCB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGV2ZW50cyA9IHtcbiAgICBzZWxlY3Rpb25DaGFuZ2U6ICdvcHRpb25TZWxlY3Rpb25DaGFuZ2UnLFxuICAgIG9wdGlvblNlbGVjdGVkOiAnb3B0aW9uU2VsZWN0ZWQnLFxuICB9IGFzIGNvbnN0O1xuXG4gIHByb3RlY3RlZCBvcHRpb25JZCA9IGBzYmItb3B0aW9uYDtcblxuICAvKiogRW1pdHMgd2hlbiB0aGUgb3B0aW9uIHNlbGVjdGlvbiBzdGF0dXMgY2hhbmdlcy4gKi9cbiAgcHJvdGVjdGVkIHNlbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcihcbiAgICB0aGlzLFxuICAgIFNiYk9wdGlvbkVsZW1lbnQuZXZlbnRzLnNlbGVjdGlvbkNoYW5nZSxcbiAgKTtcblxuICAvKiogRW1pdHMgd2hlbiBhbiBvcHRpb24gd2FzIHNlbGVjdGVkIGJ5IHVzZXIuICovXG4gIHByb3RlY3RlZCBvcHRpb25TZWxlY3RlZDogRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcihcbiAgICB0aGlzLFxuICAgIFNiYk9wdGlvbkVsZW1lbnQuZXZlbnRzLm9wdGlvblNlbGVjdGVkLFxuICApO1xuXG4gIHByaXZhdGUgc2V0IF92YXJpYW50KHN0YXRlOiBTYmJPcHRpb25WYXJpYW50KSB7XG4gICAgaWYgKHN0YXRlKSB7XG4gICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnZGF0YS12YXJpYW50Jywgc3RhdGUpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldCBfdmFyaWFudCgpOiBTYmJPcHRpb25WYXJpYW50IHtcbiAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFyaWFudCcpIGFzIFNiYk9wdGlvblZhcmlhbnQ7XG4gIH1cblxuICBwcml2YXRlIHNldCBfaXNNdWx0aXBsZShpc011bHRpcGxlOiBib29sZWFuKSB7XG4gICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtbXVsdGlwbGUnLCBpc011bHRpcGxlKTtcbiAgfVxuICBwcml2YXRlIGdldCBfaXNNdWx0aXBsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaHlkcmF0aW9uUmVxdWlyZWQgJiYgdGhpcy5oYXNBdHRyaWJ1dGUoJ2RhdGEtbXVsdGlwbGUnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRBdHRyaWJ1dGVGcm9tUGFyZW50KCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmVudEdyb3VwID0gdGhpcy5jbG9zZXN0Py4oJ3NiYi1vcHRncm91cCcpO1xuICAgIGlmIChwYXJlbnRHcm91cCkge1xuICAgICAgdGhpcy5kaXNhYmxlZEZyb21Hcm91cCA9IHBhcmVudEdyb3VwLmRpc2FibGVkO1xuICAgICAgdGhpcy51cGRhdGVBcmlhRGlzYWJsZWQoKTtcbiAgICB9XG5cbiAgICB0aGlzLm5lZ2F0aXZlID0gISF0aGlzLmNsb3Nlc3Q/LihcbiAgICAgIC8vIDppcygpIHNlbGVjdG9yIG5vdCBwb3NzaWJsZSBkdWUgdG8gdGVzdCBlbnZpcm9ubWVudFxuICAgICAgYHNiYi1hdXRvY29tcGxldGVbbmVnYXRpdmVdLHNiYi1mb3JtLWZpZWxkW25lZ2F0aXZlXWAsXG4gICAgKTtcbiAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1uZWdhdGl2ZScsIHRoaXMubmVnYXRpdmUpO1xuXG4gICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtbXVsdGlwbGUnLCB0aGlzLl9pc011bHRpcGxlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RCeUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZEZyb21Hcm91cCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzTXVsdGlwbGUpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5zZXRTZWxlY3RlZFZpYVVzZXJJbnRlcmFjdGlvbighdGhpcy5zZWxlY3RlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWaWFVc2VySW50ZXJhY3Rpb24odHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgaW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5pbml0KCk7XG4gICAgdGhpcy5fc2V0VmFyaWFudEJ5Q29udGV4dCgpO1xuICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaGlnaGxpZ2h0IHN0YXRlIGJvdGggb24gc2xvdCBjaGFuZ2UsIGJ1dCBhbHNvIHdoZW4gY29ubmVjdGluZ1xuICAgIC8vIHRoZSBlbGVtZW50IHRvIHRoZSBET00uIFRoZSBzbG90IGNoYW5nZSBldmVudHMgbWlnaHQgYmUgc3dhbGxvd2VkIHdoZW4gdXNpbmcgZGVjbGFyYXRpdmVcbiAgICAvLyBzaGFkb3cgRE9NIHdpdGggU1NSIG9yIGlmIHRoZSBET00gaXMgY2hhbmdlZCB3aGVuIGRpc2Nvbm5lY3RlZC5cbiAgICB0aGlzLmhhbmRsZUhpZ2hsaWdodFN0YXRlKCk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRWYXJpYW50QnlDb250ZXh0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsb3Nlc3Q/Lignc2JiLWF1dG9jb21wbGV0ZScpKSB7XG4gICAgICB0aGlzLl92YXJpYW50ID0gJ2F1dG9jb21wbGV0ZSc7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNsb3Nlc3Q/Lignc2JiLXNlbGVjdCcpKSB7XG4gICAgICB0aGlzLl92YXJpYW50ID0gJ3NlbGVjdCc7XG4gICAgfVxuICAgIHRoaXMuX2lzTXVsdGlwbGUgPSAhIXRoaXMuY2xvc2VzdD8uKCdzYmItc2VsZWN0W211bHRpcGxlXScpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGhhbmRsZUhpZ2hsaWdodFN0YXRlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl92YXJpYW50ICE9PSAnYXV0b2NvbXBsZXRlJykge1xuICAgICAgdGhpcy51cGRhdGVEaXNhYmxlSGlnaGxpZ2h0KHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1cGVyLmhhbmRsZUhpZ2hsaWdodFN0YXRlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVySWNvbigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8IS0tIEljb24gLS0+XG4gICAgICAkeyF0aGlzLl9pc011bHRpcGxlXG4gICAgICAgID8gaHRtbGAgPHNwYW4gY2xhc3M9XCJzYmItb3B0aW9uX19pY29uXCI+ICR7dGhpcy5yZW5kZXJJY29uU2xvdCgpfSA8L3NwYW4+YFxuICAgICAgICA6IG5vdGhpbmd9XG5cbiAgICAgIDwhLS0gQ2hlY2tib3ggLS0+XG4gICAgICAke3RoaXMuX2lzTXVsdGlwbGVcbiAgICAgICAgPyBodG1sYFxuICAgICAgICAgICAgPHNiYi12aXN1YWwtY2hlY2tib3hcbiAgICAgICAgICAgICAgP2NoZWNrZWQ9JHt0aGlzLnNlbGVjdGVkfVxuICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWRGcm9tR3JvdXB9XG4gICAgICAgICAgICAgID9uZWdhdGl2ZT0ke3RoaXMubmVnYXRpdmV9XG4gICAgICAgICAgICA+PC9zYmItdmlzdWFsLWNoZWNrYm94PlxuICAgICAgICAgIGBcbiAgICAgICAgOiBub3RoaW5nfVxuICAgIGA7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyTGFiZWwoKTogVGVtcGxhdGVSZXN1bHQgfCB0eXBlb2Ygbm90aGluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhcmlhbnQgPT09ICdhdXRvY29tcGxldGUnICYmIHRoaXMubGFiZWwgJiYgIXRoaXMuZGlzYWJsZUxhYmVsSGlnaGxpZ2h0XG4gICAgICA/IHRoaXMuZ2V0SGlnaGxpZ2h0ZWRMYWJlbCgpXG4gICAgICA6IG5vdGhpbmc7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyVGljaygpOiBUZW1wbGF0ZVJlc3VsdCB8IHR5cGVvZiBub3RoaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmFyaWFudCA9PT0gJ3NlbGVjdCcgJiYgIXRoaXMuX2lzTXVsdGlwbGUgJiYgdGhpcy5zZWxlY3RlZFxuICAgICAgPyBodG1sYDxzYmItaWNvbiBuYW1lPVwidGljay1zbWFsbFwiPjwvc2JiLWljb24+YFxuICAgICAgOiBub3RoaW5nO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItb3B0aW9uJzogU2JiT3B0aW9uRWxlbWVudDtcbiAgfVxuXG4gIGludGVyZmFjZSBHbG9iYWxFdmVudEhhbmRsZXJzRXZlbnRNYXAge1xuICAgIG9wdGlvblNlbGVjdGlvbkNoYW5nZTogQ3VzdG9tRXZlbnQ8dm9pZD47XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJfX2RlY29yYXRlQ2xhc3MiLCJzdGF0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBWUEsSUFBSSxTQUFTO0FBT2IsTUFBTSxrQkFBa0I7QUFHeEIsTUFBTSx1QkFBNkM7QUFBQSxFQUNqRCxpQkFBaUIsQ0FBQyx1QkFBdUIsZUFBZTtBQUMxRDtBQUdPLElBQWUsdUJBQWYsY0FBNEM7QUFBQSxFQUNqRCxpQkFBaUIsa0JBQWtCLFVBQVUsQ0FBQztBQUNoRCxFQUFFO0FBQUEsRUFrRU8sY0FBYztBQUNiO0FBOUJDLFNBQVUsV0FBVztBQUdyQixTQUFV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
508
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvb3B0aW9uL29wdGlvbi9vcHRpb24tYmFzZS1lbGVtZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL29wdGlvbi9vcHRpb24vb3B0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQsIG5vdGhpbmcsIHR5cGUgUHJvcGVydHlWYWx1ZXMsIHR5cGUgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBTYmJDb25uZWN0ZWRBYm9ydENvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9jb3JlL2NvbnRyb2xsZXJzLmpzJztcbmltcG9ydCB7IHNsb3RTdGF0ZSB9IGZyb20gJy4uLy4uL2NvcmUvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBpc0FuZHJvaWQsIGlzU2FmYXJpLCBzZXRPclJlbW92ZUF0dHJpYnV0ZSB9IGZyb20gJy4uLy4uL2NvcmUvZG9tLmpzJztcbmltcG9ydCB0eXBlIHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQgeyBTYmJEaXNhYmxlZE1peGluLCBTYmJIeWRyYXRpb25NaXhpbiB9IGZyb20gJy4uLy4uL2NvcmUvbWl4aW5zLmpzJztcbmltcG9ydCB7IEFnbm9zdGljTXV0YXRpb25PYnNlcnZlciB9IGZyb20gJy4uLy4uL2NvcmUvb2JzZXJ2ZXJzLmpzJztcbmltcG9ydCB7IFNiYkljb25OYW1lTWl4aW4gfSBmcm9tICcuLi8uLi9pY29uLmpzJztcbmltcG9ydCAnLi4vLi4vc2NyZWVuLXJlYWRlci1vbmx5LmpzJztcblxubGV0IG5leHRJZCA9IDA7XG5cbi8qKlxuICogT24gU2FmYXJpLCB0aGUgZ3JvdXBzIGxhYmVscyBhcmUgbm90IHJlYWQgYnkgVm9pY2VPdmVyLlxuICogVG8gc29sdmUgdGhlIHByb2JsZW0sIHdlIHJlbW92ZSB0aGUgcm9sZT1cImdyb3VwXCIgYW5kIGFkZCBhbiBoaWRkZW4gc3BhbiBjb250YWluaW5nIHRoZSBncm91cCBuYW1lXG4gKiBUT0RPOiBXZSBzaG91bGQgcGVyaW9kaWNhbGx5IGNoZWNrIGlmIGl0IGhhcyBiZWVuIHNvbHZlZCBhbmQsIGlmIHNvLCByZW1vdmUgdGhlIHByb3BlcnR5LlxuICovXG5jb25zdCBpbmVydEFyaWFHcm91cHMgPSBpc1NhZmFyaTtcblxuLyoqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBhdHRyaWJ1dGUgdG8gbG9vayBhdCBpZiBjb21wb25lbnQgaXMgbmVzdGVkIGluIGFuIG9wdGlvbiBncm91cCAqL1xuY29uc3Qgb3B0aW9uT2JzZXJ2ZXJDb25maWc6IE11dGF0aW9uT2JzZXJ2ZXJJbml0ID0ge1xuICBhdHRyaWJ1dGVGaWx0ZXI6IFsnZGF0YS1ncm91cC1kaXNhYmxlZCcsICdkYXRhLW5lZ2F0aXZlJ10sXG59O1xuXG5Ac2xvdFN0YXRlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTYmJPcHRpb25CYXNlRWxlbWVudCBleHRlbmRzIFNiYkRpc2FibGVkTWl4aW4oXG4gIFNiYkljb25OYW1lTWl4aW4oU2JiSHlkcmF0aW9uTWl4aW4oTGl0RWxlbWVudCkpLFxuKSB7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBvcHRpb25JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWYWx1ZSBvZiB0aGUgb3B0aW9uLlxuICAgKlxuICAgKiBAZGVzY3JpcHRpb24gRGV2ZWxvcGVyIG5vdGU6IEluIHRoaXMgY2FzZSB1cGRhdGluZyB0aGUgYXR0cmlidXRlIG11c3QgYmUgc3luY2hyb25vdXMuXG4gICAqIER1ZSB0byB0aGlzLCBpdCBpcyBpbXBsZW1lbnRlZCBhcyBhIGdldHRlci9zZXR0ZXIgYW5kIHRoZSBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSBoYW5kbGVzIHRoZSBkaWZmIGNoZWNrLlxuICAgKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgYCR7dmFsdWV9YCk7XG4gIH1cbiAgcHVibGljIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgndmFsdWUnKSA/PyAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvcHRpb24gaXMgY3VycmVudGx5IGFjdGl2ZS5cbiAgICogVE9ETzogcmVtb3ZlIHdpdGggbmV4dCBtYWpvciB2ZXJzaW9uLlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSkgcHVibGljIGFjdGl2ZT86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdGhlIG9wdGlvbiBpcyBzZWxlY3RlZC4gKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoJ3NlbGVjdGVkJywgdmFsdWUpO1xuICAgIHRoaXMuX3VwZGF0ZUFyaWFTZWxlY3RlZCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKCdzZWxlY3RlZCcpO1xuICB9XG5cbiAgLyoqIEVtaXRzIHdoZW4gdGhlIG9wdGlvbiBzZWxlY3Rpb24gc3RhdHVzIGNoYW5nZXMuICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBzZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjtcblxuICAvKiogRW1pdHMgd2hlbiBhbiBvcHRpb24gd2FzIHNlbGVjdGVkIGJ5IHVzZXIuICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBvcHRpb25TZWxlY3RlZDogRXZlbnRFbWl0dGVyO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGFwcGx5IHRoZSBuZWdhdGl2ZSBzdHlsaW5nICovXG4gIEBzdGF0ZSgpIHByb3RlY3RlZCBuZWdhdGl2ZSA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgbXVzdCBiZSBzZXQgZGlzYWJsZWQgZHVlIGRpc2FibGVkIGF0dHJpYnV0ZSBvbiBzYmItb3B0Z3JvdXAuICovXG4gIEBzdGF0ZSgpIHByb3RlY3RlZCBkaXNhYmxlZEZyb21Hcm91cCA9IGZhbHNlO1xuXG4gIEBzdGF0ZSgpIHByb3RlY3RlZCBsYWJlbD86IHN0cmluZztcblxuICAvKiogRGlzYWJsZSB0aGUgaGlnaGxpZ2h0IG9mIHRoZSBsYWJlbC4gKi9cbiAgQHN0YXRlKCkgcHJvdGVjdGVkIGRpc2FibGVMYWJlbEhpZ2hsaWdodDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBUaGUgcG9ydGlvbiBvZiB0aGUgaGlnaGxpZ2h0ZWQgbGFiZWwuICovXG4gIEBzdGF0ZSgpIHByaXZhdGUgX2hpZ2hsaWdodFN0cmluZzogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgQHN0YXRlKCkgcHJpdmF0ZSBfaW5lcnRBcmlhR3JvdXBzID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfYWJvcnQgPSBuZXcgU2JiQ29ubmVjdGVkQWJvcnRDb250cm9sbGVyKHRoaXMpO1xuXG4gIC8qKiBNdXRhdGlvbk9ic2VydmVyIG9uIGRhdGEgYXR0cmlidXRlcy4gKi9cbiAgcHJpdmF0ZSBfb3B0aW9uQXR0cmlidXRlT2JzZXJ2ZXIgPSBuZXcgQWdub3N0aWNNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnNMaXN0KSA9PlxuICAgIHRoaXMub25PcHRpb25BdHRyaWJ1dGVzQ2hhbmdlKG11dGF0aW9uc0xpc3QpLFxuICApO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgaWYgKGluZXJ0QXJpYUdyb3Vwcykge1xuICAgICAgaWYgKHRoaXMuaHlkcmF0aW9uUmVxdWlyZWQpIHtcbiAgICAgICAgdGhpcy5oeWRyYXRpb25Db21wbGV0ZS50aGVuKCgpID0+ICh0aGlzLl9pbmVydEFyaWFHcm91cHMgPSBpbmVydEFyaWFHcm91cHMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2luZXJ0QXJpYUdyb3VwcyA9IGluZXJ0QXJpYUdyb3VwcztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvbGQ6IHN0cmluZyB8IG51bGwsXG4gICAgdmFsdWU6IHN0cmluZyB8IG51bGwsXG4gICk6IHZvaWQge1xuICAgIGlmIChuYW1lICE9PSAndmFsdWUnIHx8IG9sZCAhPT0gdmFsdWUpIHtcbiAgICAgIHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuYW1lLCBvbGQsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGlnaGxpZ2h0IHRoZSBsYWJlbCBvZiB0aGUgb3B0aW9uXG4gICAqIEBwYXJhbSB2YWx1ZSB0aGUgaGlnaGxpZ2h0ZWQgcG9ydGlvbiBvZiB0aGUgbGFiZWxcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgaGlnaGxpZ2h0KHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9oaWdobGlnaHRTdHJpbmcgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBzZXRTZWxlY3RlZFZpYVVzZXJJbnRlcmFjdGlvbihzZWxlY3RlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KCk7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMub3B0aW9uU2VsZWN0ZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuaWQgfHw9IGAke3RoaXMub3B0aW9uSWR9LSR7bmV4dElkKyt9YDtcbiAgICBpZiAodGhpcy5oeWRyYXRpb25SZXF1aXJlZCkge1xuICAgICAgdGhpcy5oeWRyYXRpb25Db21wbGV0ZS50aGVuKCgpID0+IHRoaXMuaW5pdCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdkaXNhYmxlZCcpKSB7XG4gICAgICBzZXRPclJlbW92ZUF0dHJpYnV0ZSh0aGlzLCAndGFiaW5kZXgnLCBpc0FuZHJvaWQgJiYgIXRoaXMuZGlzYWJsZWQgJiYgMCk7XG4gICAgICB0aGlzLnVwZGF0ZUFyaWFEaXNhYmxlZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIC8vIEluaXQgZmlyc3Qgc2VsZWN0IHN0YXRlIGJlY2F1c2UgZmFsc2Ugd291bGQgbm90IGNhbGwgc2V0dGVyIG9mIHNlbGVjdGVkIHByb3BlcnR5LlxuICAgIHRoaXMuX3VwZGF0ZUFyaWFTZWxlY3RlZCgpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5fb3B0aW9uQXR0cmlidXRlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHNlbGVjdEJ5Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc2V0QXR0cmlidXRlRnJvbVBhcmVudCgpOiB2b2lkO1xuXG4gIHByb3RlY3RlZCB1cGRhdGVEaXNhYmxlSGlnaGxpZ2h0KGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlTGFiZWxIaWdobGlnaHQgPSBkaXNhYmxlZDtcbiAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1kaXNhYmxlLWhpZ2hsaWdodCcsIGRpc2FibGVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvcHRpb24gaXMgY3VycmVudGx5IGFjdGl2ZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgc2V0QWN0aXZlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtYWN0aXZlJywgdmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGVGcm9tUGFyZW50KCk7XG4gICAgdGhpcy5fb3B0aW9uQXR0cmlidXRlT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCBvcHRpb25PYnNlcnZlckNvbmZpZyk7XG4gICAgY29uc3Qgc2lnbmFsID0gdGhpcy5fYWJvcnQuc2lnbmFsO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZTogTW91c2VFdmVudCkgPT4gdGhpcy5zZWxlY3RCeUNsaWNrKGUpLCB7XG4gICAgICBzaWduYWwsXG4gICAgICBwYXNzaXZlOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZUFyaWFEaXNhYmxlZCgpOiB2b2lkIHtcbiAgICBzZXRPclJlbW92ZUF0dHJpYnV0ZShcbiAgICAgIHRoaXMsXG4gICAgICAnYXJpYS1kaXNhYmxlZCcsXG4gICAgICB0aGlzLmRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWRGcm9tR3JvdXAgPyAndHJ1ZScgOiBudWxsLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVBcmlhU2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCBgJHt0aGlzLnNlbGVjdGVkfWApO1xuICB9XG5cbiAgLyoqIE9ic2VydmUgY2hhbmdlcyBvbiBkYXRhIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzLiAqL1xuICBwcm90ZWN0ZWQgb25PcHRpb25BdHRyaWJ1dGVzQ2hhbmdlKG11dGF0aW9uc0xpc3Q6IE11dGF0aW9uUmVjb3JkW10pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9uc0xpc3QpIHtcbiAgICAgIGlmIChtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09PSAnZGF0YS1ncm91cC1kaXNhYmxlZCcpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZEZyb21Hcm91cCA9IHRoaXMuaGFzQXR0cmlidXRlKCdkYXRhLWdyb3VwLWRpc2FibGVkJyk7XG4gICAgICAgIHRoaXMudXBkYXRlQXJpYURpc2FibGVkKCk7XG4gICAgICB9IGVsc2UgaWYgKG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUgPT09ICdkYXRhLW5lZ2F0aXZlJykge1xuICAgICAgICB0aGlzLm5lZ2F0aXZlID0gdGhpcy5oYXNBdHRyaWJ1dGUoJ2RhdGEtbmVnYXRpdmUnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlSGlnaGxpZ2h0U3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3Qgc2xvdE5vZGVzID0gQXJyYXkuZnJvbSh0aGlzLmNoaWxkTm9kZXMgPz8gW10pLmZpbHRlcihcbiAgICAgIChuKSA9PiBuLm5vZGVUeXBlICE9PSBOb2RlLkNPTU1FTlRfTk9ERSAmJiAoIShuIGluc3RhbmNlb2YgRWxlbWVudCkgfHwgbi5zbG90ICE9PSAnaWNvbicpLFxuICAgICk7XG4gICAgY29uc3QgbGFiZWxOb2RlcyA9IHNsb3ROb2Rlcy5maWx0ZXIoKGVsKSA9PiBlbC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIGFzIFRleHRbXTtcblxuICAgIC8vIERpc2FibGUgdGhlIGhpZ2hsaWdodCBpZiB0aGUgc2xvdCBjb250YWluIG1vcmUgdGhhbiBqdXN0IHRleHQgbm9kZXMuXG4gICAgLy8gV2UgbmVlZCB0byBpZ25vcmUgdGVtcGxhdGUgZWxlbWVudHMsIGFzIFNTUiBhZGRzIGEgZGVjbGFyYXRpdmUgc2hhZG93IERPTVxuICAgIC8vIGluIHRoZSBmb3JtIG9mIGEgdGVtcGxhdGUgZWxlbWVudC5cbiAgICBpZiAoXG4gICAgICBsYWJlbE5vZGVzLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgc2xvdE5vZGVzLmZpbHRlcigobikgPT4gIShuIGluc3RhbmNlb2YgRWxlbWVudCkgfHwgbi5sb2NhbE5hbWUgIT09ICd0ZW1wbGF0ZScpLmxlbmd0aCAhPT1cbiAgICAgICAgbGFiZWxOb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIHRoaXMudXBkYXRlRGlzYWJsZUhpZ2hsaWdodCh0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5sYWJlbCA9IGxhYmVsTm9kZXNcbiAgICAgIC5tYXAoKGwpID0+IGwud2hvbGVUZXh0KVxuICAgICAgLmZpbHRlcigobCkgPT4gbC50cmltKCkpXG4gICAgICAuam9pbigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEhpZ2hsaWdodGVkTGFiZWwoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGlmICghdGhpcy5faGlnaGxpZ2h0U3RyaW5nIHx8ICF0aGlzLl9oaWdobGlnaHRTdHJpbmcudHJpbSgpKSB7XG4gICAgICByZXR1cm4gaHRtbGAke3RoaXMubGFiZWx9YDtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaEluZGV4ID0gdGhpcy5sYWJlbCEudG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMuX2hpZ2hsaWdodFN0cmluZy50b0xvd2VyQ2FzZSgpKTtcblxuICAgIGlmIChtYXRjaEluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIGh0bWxgJHt0aGlzLmxhYmVsfWA7XG4gICAgfVxuXG4gICAgY29uc3QgcHJlZml4ID0gdGhpcy5sYWJlbCEuc3Vic3RyaW5nKDAsIG1hdGNoSW5kZXgpO1xuICAgIGNvbnN0IGhpZ2hsaWdodGVkID0gdGhpcy5sYWJlbCEuc3Vic3RyaW5nKFxuICAgICAgbWF0Y2hJbmRleCxcbiAgICAgIG1hdGNoSW5kZXggKyB0aGlzLl9oaWdobGlnaHRTdHJpbmcubGVuZ3RoLFxuICAgICk7XG4gICAgY29uc3QgcG9zdGZpeCA9IHRoaXMubGFiZWwhLnN1YnN0cmluZyhtYXRjaEluZGV4ICsgdGhpcy5faGlnaGxpZ2h0U3RyaW5nLmxlbmd0aCk7XG5cbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxzcGFuIGNsYXNzPVwic2JiLW9wdGlvbl9fbGFiZWwtLWhpZ2hsaWdodFwiPiR7cHJlZml4fTwvc3Bhbj48c3Bhbj4ke2hpZ2hsaWdodGVkfTwvc3BhblxuICAgICAgPjxzcGFuIGNsYXNzPVwic2JiLW9wdGlvbl9fbGFiZWwtLWhpZ2hsaWdodFwiPiR7cG9zdGZpeH08L3NwYW4+XG4gICAgYDtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJJY29uKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGAgPHNwYW4gY2xhc3M9XCJzYmItb3B0aW9uX19pY29uXCI+ICR7dGhpcy5yZW5kZXJJY29uU2xvdCgpfSA8L3NwYW4+YDtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJMYWJlbCgpOiBUZW1wbGF0ZVJlc3VsdCB8IHR5cGVvZiBub3RoaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbCAmJiAhdGhpcy5kaXNhYmxlTGFiZWxIaWdobGlnaHQgPyB0aGlzLmdldEhpZ2hsaWdodGVkTGFiZWwoKSA6IG5vdGhpbmc7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyVGljaygpOiBUZW1wbGF0ZVJlc3VsdCB8IHR5cGVvZiBub3RoaW5nIHtcbiAgICByZXR1cm4gbm90aGluZztcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1vcHRpb25fX2NvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLW9wdGlvblwiPlxuICAgICAgICAgICR7dGhpcy5yZW5kZXJJY29uKCl9XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItb3B0aW9uX19sYWJlbFwiPlxuICAgICAgICAgICAgPHNsb3QgQHNsb3RjaGFuZ2U9JHt0aGlzLmhhbmRsZUhpZ2hsaWdodFN0YXRlfT48L3Nsb3Q+XG4gICAgICAgICAgICAke3RoaXMucmVuZGVyTGFiZWwoKX1cbiAgICAgICAgICAgICR7dGhpcy5faW5lcnRBcmlhR3JvdXBzICYmIHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLWdyb3VwLWxhYmVsJylcbiAgICAgICAgICAgICAgPyBodG1sYCA8c2JiLXNjcmVlbi1yZWFkZXItb25seT5cbiAgICAgICAgICAgICAgICAgICgke3RoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLWdyb3VwLWxhYmVsJyl9KTwvc2JiLXNjcmVlbi1yZWFkZXItb25seVxuICAgICAgICAgICAgICAgID5gXG4gICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgJHt0aGlzLnJlbmRlclRpY2soKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwLCBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBodG1sLCBub3RoaW5nIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IGhvc3RBdHRyaWJ1dGVzIH0gZnJvbSAnLi4vLi4vY29yZS9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJy4uLy4uL2NvcmUvZXZlbnRpbmcuanMnO1xuXG5pbXBvcnQgeyBTYmJPcHRpb25CYXNlRWxlbWVudCB9IGZyb20gJy4vb3B0aW9uLWJhc2UtZWxlbWVudC5qcyc7XG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9vcHRpb24uc2Nzcz9saXQmaW5saW5lJztcbmltcG9ydCAnLi4vLi4vdmlzdWFsLWNoZWNrYm94LmpzJztcblxuZXhwb3J0IHR5cGUgU2JiT3B0aW9uVmFyaWFudCA9ICdhdXRvY29tcGxldGUnIHwgJ3NlbGVjdCcgfCBudWxsO1xuXG4vKipcbiAqIEl0IGRpc3BsYXlzIG9uIG9wdGlvbiBpdGVtIHdoaWNoIGNhbiBiZSB1c2VkIGluIGBzYmItc2VsZWN0YCBvciBgc2JiLWF1dG9jb21wbGV0ZWAuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBhZGQgY29udGVudCB0byB0aGUgb3B0aW9uIGxhYmVsLlxuICogQHNsb3QgaWNvbiAtIFVzZSB0aGlzIHNsb3QgdG8gcHJvdmlkZSBhbiBpY29uLiBJZiBgaWNvbi1uYW1lYCBpcyBzZXQsIGEgc2JiLWljb24gd2lsbCBiZSB1c2VkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gb3B0aW9uU2VsZWN0aW9uQ2hhbmdlIC0gRW1pdHMgd2hlbiB0aGUgb3B0aW9uIHNlbGVjdGlvbiBzdGF0dXMgY2hhbmdlcy5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IG9wdGlvblNlbGVjdGVkIC0gRW1pdHMgd2hlbiBhbiBvcHRpb24gd2FzIHNlbGVjdGVkIGJ5IHVzZXIuXG4gKiBAY3NzcHJvcCBbLS1zYmItb3B0aW9uLWljb24tY29udGFpbmVyLWRpc3BsYXk9bm9uZV0gLSBDYW4gYmUgdXNlZCB0byByZXNlcnZlIHNwYWNlIGV2ZW5cbiAqIHdoZW4gcHJlc2VydmUtaWNvbi1zcGFjZSBvbiBhdXRvY29tcGxldGUgaXMgbm90IHNldCBvciBpY29uTmFtZSBpcyBub3Qgc2V0LlxuICovXG5AY3VzdG9tRWxlbWVudCgnc2JiLW9wdGlvbicpXG5AaG9zdEF0dHJpYnV0ZXMoe1xuICByb2xlOiAnb3B0aW9uJyxcbn0pXG5leHBvcnQgY2xhc3MgU2JiT3B0aW9uRWxlbWVudCBleHRlbmRzIFNiYk9wdGlvbkJhc2VFbGVtZW50IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIHNlbGVjdGlvbkNoYW5nZTogJ29wdGlvblNlbGVjdGlvbkNoYW5nZScsXG4gICAgb3B0aW9uU2VsZWN0ZWQ6ICdvcHRpb25TZWxlY3RlZCcsXG4gIH0gYXMgY29uc3Q7XG5cbiAgcHJvdGVjdGVkIG9wdGlvbklkID0gYHNiYi1vcHRpb25gO1xuXG4gIC8qKiBFbWl0cyB3aGVuIHRoZSBvcHRpb24gc2VsZWN0aW9uIHN0YXR1cyBjaGFuZ2VzLiAqL1xuICBwcm90ZWN0ZWQgc2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiT3B0aW9uRWxlbWVudC5ldmVudHMuc2VsZWN0aW9uQ2hhbmdlLFxuICApO1xuXG4gIC8qKiBFbWl0cyB3aGVuIGFuIG9wdGlvbiB3YXMgc2VsZWN0ZWQgYnkgdXNlci4gKi9cbiAgcHJvdGVjdGVkIG9wdGlvblNlbGVjdGVkOiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiT3B0aW9uRWxlbWVudC5ldmVudHMub3B0aW9uU2VsZWN0ZWQsXG4gICk7XG5cbiAgcHJpdmF0ZSBzZXQgX3ZhcmlhbnQoc3RhdGU6IFNiYk9wdGlvblZhcmlhbnQpIHtcbiAgICBpZiAoc3RhdGUpIHtcbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdkYXRhLXZhcmlhbnQnLCBzdGF0ZSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0IF92YXJpYW50KCk6IFNiYk9wdGlvblZhcmlhbnQge1xuICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS12YXJpYW50JykgYXMgU2JiT3B0aW9uVmFyaWFudDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0IF9pc011bHRpcGxlKGlzTXVsdGlwbGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1tdWx0aXBsZScsIGlzTXVsdGlwbGUpO1xuICB9XG4gIHByaXZhdGUgZ2V0IF9pc011bHRpcGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5oeWRyYXRpb25SZXF1aXJlZCAmJiB0aGlzLmhhc0F0dHJpYnV0ZSgnZGF0YS1tdWx0aXBsZScpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldEF0dHJpYnV0ZUZyb21QYXJlbnQoKTogdm9pZCB7XG4gICAgY29uc3QgcGFyZW50R3JvdXAgPSB0aGlzLmNsb3Nlc3Q/Lignc2JiLW9wdGdyb3VwJyk7XG4gICAgaWYgKHBhcmVudEdyb3VwKSB7XG4gICAgICB0aGlzLmRpc2FibGVkRnJvbUdyb3VwID0gcGFyZW50R3JvdXAuZGlzYWJsZWQ7XG4gICAgICB0aGlzLnVwZGF0ZUFyaWFEaXNhYmxlZCgpO1xuICAgIH1cblxuICAgIHRoaXMubmVnYXRpdmUgPSAhIXRoaXMuY2xvc2VzdD8uKFxuICAgICAgLy8gOmlzKCkgc2VsZWN0b3Igbm90IHBvc3NpYmxlIGR1ZSB0byB0ZXN0IGVudmlyb25tZW50XG4gICAgICBgc2JiLWF1dG9jb21wbGV0ZVtuZWdhdGl2ZV0sc2JiLWZvcm0tZmllbGRbbmVnYXRpdmVdYCxcbiAgICApO1xuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLW5lZ2F0aXZlJywgdGhpcy5uZWdhdGl2ZSk7XG5cbiAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1tdWx0aXBsZScsIHRoaXMuX2lzTXVsdGlwbGUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdEJ5Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkRnJvbUdyb3VwKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faXNNdWx0aXBsZSkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnNldFNlbGVjdGVkVmlhVXNlckludGVyYWN0aW9uKCF0aGlzLnNlbGVjdGVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTZWxlY3RlZFZpYVVzZXJJbnRlcmFjdGlvbih0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBpbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLmluaXQoKTtcbiAgICB0aGlzLl9zZXRWYXJpYW50QnlDb250ZXh0KCk7XG4gICAgLy8gV2UgbmVlZCB0byBjaGVjayBoaWdobGlnaHQgc3RhdGUgYm90aCBvbiBzbG90IGNoYW5nZSwgYnV0IGFsc28gd2hlbiBjb25uZWN0aW5nXG4gICAgLy8gdGhlIGVsZW1lbnQgdG8gdGhlIERPTS4gVGhlIHNsb3QgY2hhbmdlIGV2ZW50cyBtaWdodCBiZSBzd2FsbG93ZWQgd2hlbiB1c2luZyBkZWNsYXJhdGl2ZVxuICAgIC8vIHNoYWRvdyBET00gd2l0aCBTU1Igb3IgaWYgdGhlIERPTSBpcyBjaGFuZ2VkIHdoZW4gZGlzY29ubmVjdGVkLlxuICAgIHRoaXMuaGFuZGxlSGlnaGxpZ2h0U3RhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldFZhcmlhbnRCeUNvbnRleHQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2xvc2VzdD8uKCdzYmItYXV0b2NvbXBsZXRlJykpIHtcbiAgICAgIHRoaXMuX3ZhcmlhbnQgPSAnYXV0b2NvbXBsZXRlJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2xvc2VzdD8uKCdzYmItc2VsZWN0JykpIHtcbiAgICAgIHRoaXMuX3ZhcmlhbnQgPSAnc2VsZWN0JztcbiAgICB9XG4gICAgdGhpcy5faXNNdWx0aXBsZSA9ICEhdGhpcy5jbG9zZXN0Py4oJ3NiYi1zZWxlY3RbbXVsdGlwbGVdJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgaGFuZGxlSGlnaGxpZ2h0U3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3ZhcmlhbnQgIT09ICdhdXRvY29tcGxldGUnKSB7XG4gICAgICB0aGlzLnVwZGF0ZURpc2FibGVIaWdobGlnaHQodHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3VwZXIuaGFuZGxlSGlnaGxpZ2h0U3RhdGUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXJJY29uKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDwhLS0gSWNvbiAtLT5cbiAgICAgICR7IXRoaXMuX2lzTXVsdGlwbGVcbiAgICAgICAgPyBodG1sYCA8c3BhbiBjbGFzcz1cInNiYi1vcHRpb25fX2ljb25cIj4gJHt0aGlzLnJlbmRlckljb25TbG90KCl9IDwvc3Bhbj5gXG4gICAgICAgIDogbm90aGluZ31cblxuICAgICAgPCEtLSBDaGVja2JveCAtLT5cbiAgICAgICR7dGhpcy5faXNNdWx0aXBsZVxuICAgICAgICA/IGh0bWxgXG4gICAgICAgICAgICA8c2JiLXZpc3VhbC1jaGVja2JveFxuICAgICAgICAgICAgICA/Y2hlY2tlZD0ke3RoaXMuc2VsZWN0ZWR9XG4gICAgICAgICAgICAgID9kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZEZyb21Hcm91cH1cbiAgICAgICAgICAgICAgP25lZ2F0aXZlPSR7dGhpcy5uZWdhdGl2ZX1cbiAgICAgICAgICAgID48L3NiYi12aXN1YWwtY2hlY2tib3g+XG4gICAgICAgICAgYFxuICAgICAgICA6IG5vdGhpbmd9XG4gICAgYDtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXJMYWJlbCgpOiBUZW1wbGF0ZVJlc3VsdCB8IHR5cGVvZiBub3RoaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmFyaWFudCA9PT0gJ2F1dG9jb21wbGV0ZScgJiYgdGhpcy5sYWJlbCAmJiAhdGhpcy5kaXNhYmxlTGFiZWxIaWdobGlnaHRcbiAgICAgID8gdGhpcy5nZXRIaWdobGlnaHRlZExhYmVsKClcbiAgICAgIDogbm90aGluZztcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXJUaWNrKCk6IFRlbXBsYXRlUmVzdWx0IHwgdHlwZW9mIG5vdGhpbmcge1xuICAgIHJldHVybiB0aGlzLl92YXJpYW50ID09PSAnc2VsZWN0JyAmJiAhdGhpcy5faXNNdWx0aXBsZSAmJiB0aGlzLnNlbGVjdGVkXG4gICAgICA/IGh0bWxgPHNiYi1pY29uIG5hbWU9XCJ0aWNrLXNtYWxsXCI+PC9zYmItaWNvbj5gXG4gICAgICA6IG5vdGhpbmc7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1vcHRpb24nOiBTYmJPcHRpb25FbGVtZW50O1xuICB9XG5cbiAgaW50ZXJmYWNlIEdsb2JhbEV2ZW50SGFuZGxlcnNFdmVudE1hcCB7XG4gICAgb3B0aW9uU2VsZWN0aW9uQ2hhbmdlOiBDdXN0b21FdmVudDx2b2lkPjtcbiAgfVxufVxuIl0sIm5hbWVzIjpb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
@@ -24,9 +24,9 @@ export declare abstract class SbbOverlayBaseElement extends SbbOverlayBaseElemen
24
24
  protected ariaLiveRef: SbbScreenReaderOnlyElement;
25
25
  protected language: SbbLanguageController;
26
26
  protected inertController: SbbInertController;
27
+ protected abstract closeAttribute: string;
27
28
  protected abstract onOverlayAnimationEnd(event: AnimationEvent): void;
28
29
  protected abstract setOverlayFocus(): void;
29
- protected abstract closeAttribute: string;
30
30
  /** Closes the component. */
31
31
  close(result?: any, target?: HTMLElement): any;
32
32
  connectedCallback(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"overlay-base-element.d.ts","sourceRoot":"","sources":["../../../../src/elements/overlay/overlay-base-element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAG1C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,EAAe,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAEzE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAG3E,eAAO,MAAM,WAAW,EAAE,qBAAqB,EAAO,CAAC;;AAEvD,8BAAsB,qBAAsB,SAAQ,0BAAyC;IAC3F,kHAAkH;IAC3D,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;IAE9F,8CAA8C;IAC9C,UAAmB,QAAQ,EAAE,YAAY,CAAC,2BAA2B,CAAC,CAGpE;IAGF,SAAS,CAAC,kBAAkB,CAAC,EAAE,WAAW,CAAC;IAC3C,SAAS,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC;IAC5C,SAAS,CAAC,iBAAiB,EAAG,eAAe,CAAC;IAC9C,SAAS,CAAC,qBAAqB,EAAG,eAAe,CAAC;IAClD,SAAS,CAAC,YAAY,kBAAyB;IAC/C,SAAS,CAAC,aAAa,mBAA0B;IACjD,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC;IAC3B,SAAS,CAAC,iBAAiB,UAAS;IACpC,SAAS,CAAC,WAAW,EAAG,0BAA0B,CAAC;IACnD,SAAS,CAAC,QAAQ,wBAAmC;IACrD,SAAS,CAAC,eAAe,qBAAgC;IAEzD,SAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IACrE,SAAS,CAAC,QAAQ,CAAC,eAAe,IAAI,IAAI;IAC1C,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAE1C,4BAA4B;IACrB,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,GAAG;IAmBrC,iBAAiB,IAAI,IAAI;cAMtB,YAAY,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAO9D,oBAAoB,IAAI,IAAI;IAS5C,SAAS,CAAC,uBAAuB,IAAI,IAAI;IAkBzC,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAWpD,SAAS,CAAC,kCAAkC,IAAI,IAAI;IAKpD,SAAS,CAAC,2BAA2B,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAoBzD,SAAS,CAAC,wBAAwB,IAAI,IAAI;IAI1C,SAAS,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;CAStD"}
1
+ {"version":3,"file":"overlay-base-element.d.ts","sourceRoot":"","sources":["../../../../src/elements/overlay/overlay-base-element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAG1C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,EAAe,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAEzE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAG3E,eAAO,MAAM,WAAW,EAAE,qBAAqB,EAAO,CAAC;;AAEvD,8BAAsB,qBAAsB,SAAQ,0BAAyC;IAC3F,kHAAkH;IAC3D,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;IAE9F,8CAA8C;IAC9C,UAAmB,QAAQ,EAAE,YAAY,CAAC,2BAA2B,CAAC,CAGpE;IAGF,SAAS,CAAC,kBAAkB,CAAC,EAAE,WAAW,CAAC;IAC3C,SAAS,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC;IAC5C,SAAS,CAAC,iBAAiB,EAAG,eAAe,CAAC;IAC9C,SAAS,CAAC,qBAAqB,EAAG,eAAe,CAAC;IAClD,SAAS,CAAC,YAAY,kBAAyB;IAC/C,SAAS,CAAC,aAAa,mBAA0B;IACjD,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC;IAC3B,SAAS,CAAC,iBAAiB,UAAS;IACpC,SAAS,CAAC,WAAW,EAAG,0BAA0B,CAAC;IACnD,SAAS,CAAC,QAAQ,wBAAmC;IACrD,SAAS,CAAC,eAAe,qBAAgC;IAEzD,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAC1C,SAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IACrE,SAAS,CAAC,QAAQ,CAAC,eAAe,IAAI,IAAI;IAE1C,4BAA4B;IACrB,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,GAAG;IAmBrC,iBAAiB,IAAI,IAAI;cAMtB,YAAY,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAO9D,oBAAoB,IAAI,IAAI;IAS5C,SAAS,CAAC,uBAAuB,IAAI,IAAI;IAkBzC,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAWpD,SAAS,CAAC,kCAAkC,IAAI,IAAI;IAKpD,SAAS,CAAC,2BAA2B,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAoBzD,SAAS,CAAC,wBAAwB,IAAI,IAAI;IAI1C,SAAS,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;CAStD"}
@@ -122,20 +122,7 @@ __decorateClass$1([
122
122
  property({ attribute: "accessibility-label" })
123
123
  ], _SbbOverlayBaseElement.prototype, "accessibilityLabel");
124
124
  let SbbOverlayBaseElement = _SbbOverlayBaseElement;
125
- const style = css`/**
126
- * Better font rendering (on OS X)
127
- * http://maximilianhoffmann.com/posts/better-font-rendering-on-osx
128
- *
129
- * Usage:
130
- *
131
- * .var_dark_on_light {
132
- * @include font-smoothing;
133
- * }
134
- * .var_light_on_dark {
135
- * @include font-smoothing-reset;
136
- * }
137
- */
138
- /** This mixin can be used to avoid spacing problems by inserting an invisible space as pseudo element. */
125
+ const style = css`/** This mixin can be used to avoid spacing problems by inserting an invisible space as pseudo element. */
139
126
  /*
140
127
  * SBB table mixin
141
128
  * Notes:
@@ -496,4 +483,4 @@ export {
496
483
  SbbOverlayElement,
497
484
  overlayRefs
498
485
  };
499
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL292ZXJsYXkvb3ZlcmxheS1iYXNlLWVsZW1lbnQudHMiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvb3ZlcmxheS9vdmVybGF5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgUHJvcGVydHlWYWx1ZXMgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IFNiYkZvY3VzSGFuZGxlciB9IGZyb20gJy4uL2NvcmUvYTExeS5qcyc7XG5pbXBvcnQgeyBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCB9IGZyb20gJy4uL2NvcmUvYmFzZS1lbGVtZW50cy5qcyc7XG5pbXBvcnQgeyBTYmJJbmVydENvbnRyb2xsZXIsIFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJy4uL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgaG9zdENvbnRleHQsIFNiYlNjcm9sbEhhbmRsZXIgfSBmcm9tICcuLi9jb3JlL2RvbS5qcyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICcuLi9jb3JlL2V2ZW50aW5nLmpzJztcbmltcG9ydCB7IGkxOG5EaWFsb2cgfSBmcm9tICcuLi9jb3JlL2kxOG4uanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJPdmVybGF5Q2xvc2VFdmVudERldGFpbHMgfSBmcm9tICcuLi9jb3JlL2ludGVyZmFjZXMuanMnO1xuaW1wb3J0IHsgU2JiTmVnYXRpdmVNaXhpbiB9IGZyb20gJy4uL2NvcmUvbWl4aW5zLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiU2NyZWVuUmVhZGVyT25seUVsZW1lbnQgfSBmcm9tICcuLi9zY3JlZW4tcmVhZGVyLW9ubHkuanMnO1xuXG4vLyBBIGdsb2JhbCBjb2xsZWN0aW9uIG9mIGV4aXN0aW5nIG92ZXJsYXlzLlxuZXhwb3J0IGNvbnN0IG92ZXJsYXlSZWZzOiBTYmJPdmVybGF5QmFzZUVsZW1lbnRbXSA9IFtdO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2JiT3ZlcmxheUJhc2VFbGVtZW50IGV4dGVuZHMgU2JiTmVnYXRpdmVNaXhpbihTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCkge1xuICAvKiogVGhpcyB3aWxsIGJlIGZvcndhcmRlZCBhcyBhcmlhLWxhYmVsIHRvIHRoZSByZWxldmFudCBuZXN0ZWQgZWxlbWVudCB0byBkZXNjcmliZSB0aGUgcHVycG9zZSBvZiB0aGUgb3ZlcmxheS4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYWNjZXNzaWJpbGl0eS1sYWJlbCcgfSkgcHVibGljIGFjY2Vzc2liaWxpdHlMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBFbWl0cyB3aGVuZXZlciB0aGUgY29tcG9uZW50IGlzIGNsb3NlZC4gKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGRpZENsb3NlOiBFdmVudEVtaXR0ZXI8U2JiT3ZlcmxheUNsb3NlRXZlbnREZXRhaWxzPiA9IG5ldyBFdmVudEVtaXR0ZXIoXG4gICAgdGhpcyxcbiAgICBTYmJPdmVybGF5QmFzZUVsZW1lbnQuZXZlbnRzLmRpZENsb3NlLFxuICApO1xuXG4gIC8vIFRoZSBsYXN0IGVsZW1lbnQgd2hpY2ggaGFkIGZvY3VzIGJlZm9yZSB0aGUgY29tcG9uZW50IHdhcyBvcGVuZWQuXG4gIHByb3RlY3RlZCBsYXN0Rm9jdXNlZEVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgcHJvdGVjdGVkIG92ZXJsYXlDbG9zZUVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgcHJvdGVjdGVkIG92ZXJsYXlDb250cm9sbGVyITogQWJvcnRDb250cm9sbGVyO1xuICBwcm90ZWN0ZWQgb3Blbk92ZXJsYXlDb250cm9sbGVyITogQWJvcnRDb250cm9sbGVyO1xuICBwcm90ZWN0ZWQgZm9jdXNIYW5kbGVyID0gbmV3IFNiYkZvY3VzSGFuZGxlcigpO1xuICBwcm90ZWN0ZWQgc2Nyb2xsSGFuZGxlciA9IG5ldyBTYmJTY3JvbGxIYW5kbGVyKCk7XG4gIHByb3RlY3RlZCByZXR1cm5WYWx1ZTogYW55O1xuICBwcm90ZWN0ZWQgYXJpYUxpdmVSZWZUb2dnbGUgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGFyaWFMaXZlUmVmITogU2JiU2NyZWVuUmVhZGVyT25seUVsZW1lbnQ7XG4gIHByb3RlY3RlZCBsYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG4gIHByb3RlY3RlZCBpbmVydENvbnRyb2xsZXIgPSBuZXcgU2JiSW5lcnRDb250cm9sbGVyKHRoaXMpO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBvbk92ZXJsYXlBbmltYXRpb25FbmQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHNldE92ZXJsYXlGb2N1cygpOiB2b2lkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY2xvc2VBdHRyaWJ1dGU6IHN0cmluZztcblxuICAvKiogQ2xvc2VzIHRoZSBjb21wb25lbnQuICovXG4gIHB1YmxpYyBjbG9zZShyZXN1bHQ/OiBhbnksIHRhcmdldD86IEhUTUxFbGVtZW50KTogYW55IHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29wZW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJldHVyblZhbHVlID0gcmVzdWx0O1xuICAgIHRoaXMub3ZlcmxheUNsb3NlRWxlbWVudCA9IHRhcmdldDtcbiAgICBjb25zdCBldmVudERhdGE6IFNiYk92ZXJsYXlDbG9zZUV2ZW50RGV0YWlscyA9IHtcbiAgICAgIHJldHVyblZhbHVlOiB0aGlzLnJldHVyblZhbHVlLFxuICAgICAgY2xvc2VUYXJnZXQ6IHRoaXMub3ZlcmxheUNsb3NlRWxlbWVudCxcbiAgICB9O1xuXG4gICAgaWYgKCF0aGlzLndpbGxDbG9zZS5lbWl0KGV2ZW50RGF0YSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zaW5nJztcbiAgICB0aGlzLnJlbW92ZUFyaWFMaXZlUmVmQ29udGVudCgpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5vdmVybGF5Q29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLm92ZXJsYXlDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICB0aGlzLmFyaWFMaXZlUmVmID1cbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcjxTYmJTY3JlZW5SZWFkZXJPbmx5RWxlbWVudD4oJ3NiYi1zY3JlZW4tcmVhZGVyLW9ubHknKSE7XG5cbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5vdmVybGF5Q29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLm9wZW5PdmVybGF5Q29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLmZvY3VzSGFuZGxlci5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5yZW1vdmVJbnN0YW5jZUZyb21HbG9iYWxDb2xsZWN0aW9uKCk7XG4gICAgdGhpcy5zY3JvbGxIYW5kbGVyLmVuYWJsZVNjcm9sbCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGF0dGFjaE9wZW5PdmVybGF5RXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMub3Blbk92ZXJsYXlDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIC8vIFJlbW92ZSBvdmVybGF5IGxhYmVsIGFzIHNvb24gYXMgaXQgaXMgbm90IG5lZWRlZCBhbnkgbW9yZSB0byBwcmV2ZW50IGFjY2Vzc2luZyBpdCB3aXRoIGJyb3dzZSBtb2RlLlxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2tleWRvd24nLFxuICAgICAgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlQXJpYUxpdmVSZWZDb250ZW50KCk7XG4gICAgICAgIHRoaXMub25LZXlkb3duRXZlbnQoZXZlbnQpO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc2lnbmFsOiB0aGlzLm9wZW5PdmVybGF5Q29udHJvbGxlci5zaWduYWwsXG4gICAgICB9LFxuICAgICk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gdGhpcy5yZW1vdmVBcmlhTGl2ZVJlZkNvbnRlbnQoKSwge1xuICAgICAgc2lnbmFsOiB0aGlzLm9wZW5PdmVybGF5Q29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25LZXlkb3duRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29wZW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgb3ZlcmxheVJlZnNbb3ZlcmxheVJlZnMubGVuZ3RoIC0gMV0uY2xvc2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVtb3ZlSW5zdGFuY2VGcm9tR2xvYmFsQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBvdmVybGF5UmVmcy5zcGxpY2Uob3ZlcmxheVJlZnMuaW5kZXhPZih0aGlzIGFzIFNiYk92ZXJsYXlCYXNlRWxlbWVudCksIDEpO1xuICB9XG5cbiAgLy8gQ2xvc2UgdGhlIGNvbXBvbmVudCBvbiBjbGljayBvZiBhbnkgZWxlbWVudCB0aGF0IGhhcyB0aGUgYGNsb3NlQXR0cmlidXRlYCBhdHRyaWJ1dGUuXG4gIHByb3RlY3RlZCBjbG9zZU9uU2JiT3ZlcmxheUNsb3NlQ2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgb3ZlcmxheUNsb3NlRWxlbWVudCA9IGV2ZW50XG4gICAgICAuY29tcG9zZWRQYXRoKClcbiAgICAgIC5maWx0ZXIoKGUpOiBlIGlzIEhUTUxFbGVtZW50ID0+IGUgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTEVsZW1lbnQpXG4gICAgICAuZmluZChcbiAgICAgICAgKHRhcmdldCkgPT4gdGFyZ2V0Lmhhc0F0dHJpYnV0ZSh0aGlzLmNsb3NlQXR0cmlidXRlKSAmJiAhdGFyZ2V0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSxcbiAgICAgICk7XG5cbiAgICBpZiAoIW92ZXJsYXlDbG9zZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFyZ2V0IGlzIGEgc3VibWlzc2lvbiBlbGVtZW50IHdpdGhpbiBhIGZvcm0gYW5kIHJldHVybiB0aGUgZm9ybSwgaWYgcHJlc2VudFxuICAgIGNvbnN0IGNsb3Nlc3RGb3JtID1cbiAgICAgIG92ZXJsYXlDbG9zZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0eXBlJykgPT09ICdzdWJtaXQnXG4gICAgICAgID8gKGhvc3RDb250ZXh0KCdmb3JtJywgb3ZlcmxheUNsb3NlRWxlbWVudCkgYXMgSFRNTEZvcm1FbGVtZW50KVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBvdmVybGF5UmVmc1tvdmVybGF5UmVmcy5sZW5ndGggLSAxXS5jbG9zZShjbG9zZXN0Rm9ybSwgb3ZlcmxheUNsb3NlRWxlbWVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVtb3ZlQXJpYUxpdmVSZWZDb250ZW50KCk6IHZvaWQge1xuICAgIHRoaXMuYXJpYUxpdmVSZWYudGV4dENvbnRlbnQgPSAnJztcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRBcmlhTGl2ZVJlZkNvbnRlbnQobGFiZWw/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmFyaWFMaXZlUmVmVG9nZ2xlID0gIXRoaXMuYXJpYUxpdmVSZWZUb2dnbGU7XG5cbiAgICAvLyBJZiB0aGUgdGV4dCBjb250ZW50IHJlbWFpbnMgdGhlIHNhbWUsIG9uIFZvaWNlT3ZlciB0aGUgYXJpYS1saXZlIHJlZ2lvbiBpcyBub3QgYW5ub3VuY2VkIGEgc2Vjb25kIHRpbWUuXG4gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFkaW5nIG9uIGV2ZXJ5IG9wZW5pbmcsIHdlIHRvZ2dsZSBhbiBpbnZpc2libGUgc3BhY2UuXG4gICAgdGhpcy5hcmlhTGl2ZVJlZi50ZXh0Q29udGVudCA9IGAke2kxOG5EaWFsb2dbdGhpcy5sYW5ndWFnZS5jdXJyZW50XX0ke1xuICAgICAgbGFiZWwgPyBgLCAke2xhYmVsfWAgOiAnJ1xuICAgIH0ke3RoaXMuYXJpYUxpdmVSZWZUb2dnbGUgPyAnwqAnIDogJyd9YDtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCwgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgbm90aGluZyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGh0bWwsIHVuc2FmZVN0YXRpYyB9IGZyb20gJ2xpdC9zdGF0aWMtaHRtbC5qcyc7XG5cbmltcG9ydCB7IGdldEZpcnN0Rm9jdXNhYmxlRWxlbWVudCwgc2V0TW9kYWxpdHlPbk5leHRGb2N1cyB9IGZyb20gJy4uL2NvcmUvYTExeS5qcyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICcuLi9jb3JlL2V2ZW50aW5nLmpzJztcbmltcG9ydCB7IGkxOG5DbG9zZURpYWxvZywgaTE4bkdvQmFjayB9IGZyb20gJy4uL2NvcmUvaTE4bi5qcyc7XG5cbmltcG9ydCB7IG92ZXJsYXlSZWZzLCBTYmJPdmVybGF5QmFzZUVsZW1lbnQgfSBmcm9tICcuL292ZXJsYXktYmFzZS1lbGVtZW50LmpzJztcbmltcG9ydCBzdHlsZSBmcm9tICcuL292ZXJsYXkuc2Nzcz9saXQmaW5saW5lJztcbmltcG9ydCAnLi4vYnV0dG9uL3NlY29uZGFyeS1idXR0b24uanMnO1xuaW1wb3J0ICcuLi9idXR0b24vdHJhbnNwYXJlbnQtYnV0dG9uLmpzJztcbmltcG9ydCAnLi4vY29udGFpbmVyLmpzJztcbmltcG9ydCAnLi4vc2NyZWVuLXJlYWRlci1vbmx5LmpzJztcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhbiBpbnRlcmFjdGl2ZSBvdmVybGF5IGVsZW1lbnQuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBwcm92aWRlIGEgY29udGVudCBmb3IgdGhlIG92ZXJsYXkuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSB3aWxsT3BlbiAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLW92ZXJsYXlgIHN0YXJ0cyB0aGUgb3BlbmluZyB0cmFuc2l0aW9uLiBDYW4gYmUgY2FuY2VsZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBkaWRPcGVuIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItb3ZlcmxheWAgaXMgb3BlbmVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gd2lsbENsb3NlIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItb3ZlcmxheWAgYmVnaW5zIHRoZSBjbG9zaW5nIHRyYW5zaXRpb24uIENhbiBiZSBjYW5jZWxlZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8U2JiT3ZlcmxheUNsb3NlRXZlbnREZXRhaWxzPn0gZGlkQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1vdmVybGF5YCBpcyBjbG9zZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSByZXF1ZXN0QmFja0FjdGlvbiAtIEVtaXRzIHdoZW5ldmVyIHRoZSBiYWNrIGJ1dHRvbiBpcyBjbGlja2VkLlxuICogQGNzc3Byb3AgWy0tc2JiLW92ZXJsYXktei1pbmRleD12YXIoLS1zYmItb3ZlcmxheS1kZWZhdWx0LXotaW5kZXgpXSAtIFRvIHNwZWNpZnkgYSBjdXN0b20gc3RhY2sgb3JkZXIsXG4gKiB0aGUgYHotaW5kZXhgIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlZmluaW5nIHRoaXMgQ1NTIHZhcmlhYmxlLiBUaGUgZGVmYXVsdCBgei1pbmRleGAgb2YgdGhlXG4gKiBjb21wb25lbnQgaXMgc2V0IHRvIGB2YXIoLS1zYmItb3ZlcmxheS1kZWZhdWx0LXotaW5kZXgpYCB3aXRoIGEgdmFsdWUgb2YgYDEwMDBgLlxuICovXG5AY3VzdG9tRWxlbWVudCgnc2JiLW92ZXJsYXknKVxuZXhwb3J0IGNsYXNzIFNiYk92ZXJsYXlFbGVtZW50IGV4dGVuZHMgU2JiT3ZlcmxheUJhc2VFbGVtZW50IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG5cbiAgLy8gRklYTUUgdXNpbmcgLi4uc3VwZXIuZXZlbnRzIHJlcXVpcmVzOiBodHRwczovL2dpdGh1Yi5jb20vc2JiLWRlc2lnbi1zeXN0ZW1zL2x5bmUtY29tcG9uZW50cy9pc3N1ZXMvMjYwMFxuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IGV2ZW50cyA9IHtcbiAgICB3aWxsT3BlbjogJ3dpbGxPcGVuJyxcbiAgICBkaWRPcGVuOiAnZGlkT3BlbicsXG4gICAgd2lsbENsb3NlOiAnd2lsbENsb3NlJyxcbiAgICBkaWRDbG9zZTogJ2RpZENsb3NlJyxcbiAgICBiYWNrQ2xpY2s6ICdyZXF1ZXN0QmFja0FjdGlvbicsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWxsb3cgdGhlIG92ZXJsYXkgY29udGVudCB0byBzdHJldGNoIHRvIGZ1bGwgd2lkdGguXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBjb250ZW50IGhhcyB0aGUgYXBwcm9wcmlhdGUgcGFnZSBzaXplLlxuICAgKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KSBwdWJsaWMgZXhwYW5kZWQgPSBmYWxzZTtcblxuICAvKiogV2hldGhlciBhIGJhY2sgYnV0dG9uIGlzIGRpc3BsYXllZCBuZXh0IHRvIHRoZSB0aXRsZS4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYmFjay1idXR0b24nLCB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyBiYWNrQnV0dG9uID0gZmFsc2U7XG5cbiAgLyoqIFRoaXMgd2lsbCBiZSBmb3J3YXJkZWQgYXMgYXJpYS1sYWJlbCB0byB0aGUgY2xvc2UgYnV0dG9uIGVsZW1lbnQuICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2FjY2Vzc2liaWxpdHktY2xvc2UtbGFiZWwnIH0pIHB1YmxpYyBhY2Nlc3NpYmlsaXR5Q2xvc2VMYWJlbDpcbiAgICB8IHN0cmluZ1xuICAgIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBUaGlzIHdpbGwgYmUgZm9yd2FyZGVkIGFzIGFyaWEtbGFiZWwgdG8gdGhlIGJhY2sgYnV0dG9uIGVsZW1lbnQuICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2FjY2Vzc2liaWxpdHktYmFjay1sYWJlbCcgfSkgcHVibGljIGFjY2Vzc2liaWxpdHlCYWNrTGFiZWw6XG4gICAgfCBzdHJpbmdcbiAgICB8IHVuZGVmaW5lZDtcblxuICBwcm90ZWN0ZWQgY2xvc2VBdHRyaWJ1dGU6IHN0cmluZyA9ICdzYmItb3ZlcmxheS1jbG9zZSc7XG5cbiAgLyoqIEVtaXRzIHdoZW5ldmVyIHRoZSBiYWNrIGJ1dHRvbiBpcyBjbGlja2VkLiAqL1xuICBwcml2YXRlIF9iYWNrQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcihcbiAgICB0aGlzLFxuICAgIFNiYk92ZXJsYXlFbGVtZW50LmV2ZW50cy5iYWNrQ2xpY2ssXG4gICk7XG4gIHByaXZhdGUgX292ZXJsYXlDb250ZW50RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAvKiogT3BlbnMgdGhlIGNvbXBvbmVudC4gKi9cbiAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdjbG9zZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubGFzdEZvY3VzZWRFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcblxuICAgIHRoaXMuX292ZXJsYXlDb250ZW50RWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihcbiAgICAgICcuc2JiLW92ZXJsYXlfX2NvbnRlbnQnLFxuICAgICkgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAoIXRoaXMud2lsbE9wZW4uZW1pdCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmluZyc7XG5cbiAgICAvLyBBZGQgdGhpcyBvdmVybGF5IHRvIHRoZSBnbG9iYWwgY29sbGVjdGlvblxuICAgIG92ZXJsYXlSZWZzLnB1c2godGhpcyBhcyBTYmJPdmVybGF5RWxlbWVudCk7XG5cbiAgICAvLyBEaXNhYmxlIHNjcm9sbGluZyBmb3IgY29udGVudCBiZWxvdyB0aGUgb3ZlcmxheVxuICAgIHRoaXMuc2Nyb2xsSGFuZGxlci5kaXNhYmxlU2Nyb2xsKCk7XG4gIH1cblxuICAvLyBXYWl0IGZvciBvdmVybGF5IHRyYW5zaXRpb24gdG8gY29tcGxldGUuXG4gIC8vIEluIHJhcmUgY2FzZXMsIGl0IGNhbiBiZSB0aGF0IHRoZSBhbmltYXRpb25FbmQgZXZlbnQgaXMgdHJpZ2dlcmVkIHR3aWNlLlxuICAvLyBUbyBhdm9pZCBlbnRlcmluZyBhIGNvcnJ1cHQgc3RhdGUsIGV4aXQgd2hlbiBzdGF0ZSBpcyBub3QgZXhwZWN0ZWQuXG4gIHByb3RlY3RlZCBvbk92ZXJsYXlBbmltYXRpb25FbmQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdvcGVuJyAmJiB0aGlzLnN0YXRlID09PSAnb3BlbmluZycpIHtcbiAgICAgIHRoaXMuc3RhdGUgPSAnb3BlbmVkJztcbiAgICAgIHRoaXMuZGlkT3Blbi5lbWl0KCk7XG4gICAgICB0aGlzLmluZXJ0Q29udHJvbGxlci5hY3RpdmF0ZSgpO1xuICAgICAgdGhpcy5hdHRhY2hPcGVuT3ZlcmxheUV2ZW50cygpO1xuICAgICAgdGhpcy5zZXRPdmVybGF5Rm9jdXMoKTtcbiAgICAgIC8vIFVzZSB0aW1lb3V0IHRvIHJlYWQgbGFiZWwgYWZ0ZXIgZm9jdXNlZCBlbGVtZW50XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0QXJpYUxpdmVSZWZDb250ZW50KHRoaXMuYWNjZXNzaWJpbGl0eUxhYmVsKSk7XG4gICAgICB0aGlzLmZvY3VzSGFuZGxlci50cmFwKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ2Nsb3NlJyAmJiB0aGlzLnN0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgIHRoaXMuX292ZXJsYXlDb250ZW50RWxlbWVudD8uc2Nyb2xsVG8oMCwgMCk7XG4gICAgICB0aGlzLnN0YXRlID0gJ2Nsb3NlZCc7XG4gICAgICB0aGlzLmluZXJ0Q29udHJvbGxlci5kZWFjdGl2YXRlKCk7XG4gICAgICBzZXRNb2RhbGl0eU9uTmV4dEZvY3VzKHRoaXMubGFzdEZvY3VzZWRFbGVtZW50KTtcbiAgICAgIC8vIE1hbnVhbGx5IGZvY3VzIGxhc3QgZm9jdXNlZCBlbGVtZW50XG4gICAgICB0aGlzLmxhc3RGb2N1c2VkRWxlbWVudD8uZm9jdXMoKTtcbiAgICAgIHRoaXMub3Blbk92ZXJsYXlDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgICAgdGhpcy5mb2N1c0hhbmRsZXIuZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy5yZW1vdmVJbnN0YW5jZUZyb21HbG9iYWxDb2xsZWN0aW9uKCk7XG4gICAgICAvLyBFbmFibGUgc2Nyb2xsaW5nIGZvciBjb250ZW50IGJlbG93IHRoZSBvdmVybGF5IGlmIG5vIG92ZXJsYXkgaXMgb3BlblxuICAgICAgaWYgKCFvdmVybGF5UmVmcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxIYW5kbGVyLmVuYWJsZVNjcm9sbCgpO1xuICAgICAgfVxuICAgICAgdGhpcy5kaWRDbG9zZS5lbWl0KHtcbiAgICAgICAgcmV0dXJuVmFsdWU6IHRoaXMucmV0dXJuVmFsdWUsXG4gICAgICAgIGNsb3NlVGFyZ2V0OiB0aGlzLm92ZXJsYXlDbG9zZUVsZW1lbnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgZm9jdXMgb24gdGhlIGZpcnN0IGZvY3VzYWJsZSBlbGVtZW50LlxuICBwcm90ZWN0ZWQgc2V0T3ZlcmxheUZvY3VzKCk6IHZvaWQge1xuICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlID0gZ2V0Rmlyc3RGb2N1c2FibGVFbGVtZW50KFxuICAgICAgQXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QhLmNoaWxkcmVuKS5maWx0ZXIoXG4gICAgICAgIChlKTogZSBpcyBIVE1MRWxlbWVudCA9PiBlIGluc3RhbmNlb2Ygd2luZG93LkhUTUxFbGVtZW50LFxuICAgICAgKSxcbiAgICApO1xuICAgIHNldE1vZGFsaXR5T25OZXh0Rm9jdXMoZmlyc3RGb2N1c2FibGUpO1xuICAgIGZpcnN0Rm9jdXNhYmxlPy5mb2N1cygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgVEFHX05BTUUgPSB0aGlzLm5lZ2F0aXZlID8gJ3NiYi10cmFuc3BhcmVudC1idXR0b24nIDogJ3NiYi1zZWNvbmRhcnktYnV0dG9uJztcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIGxpdC9iaW5kaW5nLXBvc2l0aW9ucyAqL1xuICAgIGNvbnN0IGNsb3NlQnV0dG9uID0gaHRtbGBcbiAgICAgIDwke3Vuc2FmZVN0YXRpYyhUQUdfTkFNRSl9XG4gICAgICAgIGNsYXNzPVwic2JiLW92ZXJsYXlfX2Nsb3NlXCJcbiAgICAgICAgYXJpYS1sYWJlbD0ke3RoaXMuYWNjZXNzaWJpbGl0eUNsb3NlTGFiZWwgfHwgaTE4bkNsb3NlRGlhbG9nW3RoaXMubGFuZ3VhZ2UuY3VycmVudF19XG4gICAgICAgID9uZWdhdGl2ZT0ke3RoaXMubmVnYXRpdmV9XG4gICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGljb24tbmFtZT1cImNyb3NzLXNtYWxsXCJcbiAgICAgICAgc2JiLW92ZXJsYXktY2xvc2VcbiAgICAgID48LyR7dW5zYWZlU3RhdGljKFRBR19OQU1FKX0+XG4gICAgYDtcblxuICAgIGNvbnN0IGJhY2tCdXR0b24gPSBodG1sYFxuICAgICAgPCR7dW5zYWZlU3RhdGljKFRBR19OQU1FKX1cbiAgICAgICAgY2xhc3M9XCJzYmItb3ZlcmxheV9fYmFja1wiXG4gICAgICAgIGFyaWEtbGFiZWw9JHt0aGlzLmFjY2Vzc2liaWxpdHlCYWNrTGFiZWwgfHwgaTE4bkdvQmFja1t0aGlzLmxhbmd1YWdlLmN1cnJlbnRdfVxuICAgICAgICA/bmVnYXRpdmU9JHt0aGlzLm5lZ2F0aXZlfVxuICAgICAgICBzaXplPVwibVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBpY29uLW5hbWU9XCJjaGV2cm9uLXNtYWxsLWxlZnQtc21hbGxcIlxuICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLl9iYWNrQ2xpY2suZW1pdCgpfVxuICAgICAgPjwvJHt1bnNhZmVTdGF0aWMoVEFHX05BTUUpfT5cbiAgICBgO1xuICAgIC8qIGVzbGludC1lbmFibGUgbGl0L2JpbmRpbmctcG9zaXRpb25zICovXG5cbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJzYmItb3ZlcmxheV9fY29udGFpbmVyXCJcbiAgICAgICAgQGFuaW1hdGlvbmVuZD0keyhldmVudDogQW5pbWF0aW9uRXZlbnQpID0+IHRoaXMub25PdmVybGF5QW5pbWF0aW9uRW5kKGV2ZW50KX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1vdmVybGF5XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgQGNsaWNrPSR7KGV2ZW50OiBFdmVudCkgPT4gdGhpcy5jbG9zZU9uU2JiT3ZlcmxheUNsb3NlQ2xpY2soZXZlbnQpfVxuICAgICAgICAgICAgY2xhc3M9XCJzYmItb3ZlcmxheV9fd3JhcHBlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1vdmVybGF5X19oZWFkZXJcIj5cbiAgICAgICAgICAgICAgJHt0aGlzLmJhY2tCdXR0b24gPyBiYWNrQnV0dG9uIDogbm90aGluZ30gJHtjbG9zZUJ1dHRvbn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1vdmVybGF5X19jb250ZW50XCI+XG4gICAgICAgICAgICAgIDxzYmItY29udGFpbmVyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzYmItb3ZlcmxheV9fY29udGVudC1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgID9leHBhbmRlZD0ke3RoaXMuZXhwYW5kZWR9XG4gICAgICAgICAgICAgICAgY29sb3I9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgICAgICAgIDwvc2JiLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHkgYXJpYS1saXZlPVwicG9saXRlXCI+PC9zYmItc2NyZWVuLXJlYWRlci1vbmx5PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1vdmVybGF5JzogU2JiT3ZlcmxheUVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJfU2JiT3ZlcmxheUJhc2VFbGVtZW50IiwiX19kZWNvcmF0ZUNsYXNzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWNPLE1BQU0sY0FBdUMsQ0FBQztBQUU5QyxNQUFlLHlCQUFmLE1BQWVBLGdDQUE4QixpQkFBaUIsdUJBQXVCLEVBQUU7QUFBQSxFQUF2RixjQUFBO0FBQUEsVUFBQSxHQUFBLFNBQUE7QUFLTCxTQUFtQixXQUFzRCxJQUFJO0FBQUEsTUFDM0U7QUFBQSxNQUNBQSx3QkFBc0IsT0FBTztBQUFBLElBQUE7QUFRckIsU0FBQSxlQUFlLElBQUk7QUFDbkIsU0FBQSxnQkFBZ0IsSUFBSTtBQUU5QixTQUFVLG9CQUFvQjtBQUVwQixTQUFBLFdBQVcsSUFBSSxzQkFBc0IsSUFBSTtBQUN6QyxTQUFBLGtCQUFrQixJQUFJLG1CQUFtQixJQUFJO0FBQUEsRUFBQTtBQUFBO0FBQUEsRUFPaEQsTUFBTSxRQUFjLFFBQTJCO0FBQ2hELFFBQUEsS0FBSyxVQUFVLFVBQVU7QUFDM0I7QUFBQSxJQUNGO0FBRUEsU0FBSyxjQUFjO0FBQ25CLFNBQUssc0JBQXNCO0FBQzNCLFVBQU0sWUFBeUM7QUFBQSxNQUM3QyxhQUFhLEtBQUs7QUFBQSxNQUNsQixhQUFhLEtBQUs7QUFBQSxJQUFBO0FBR3BCLFFBQUksQ0FBQyxLQUFLLFVBQVUsS0FBSyxTQUFTLEdBQUc7QUFDbkM7QUFBQSxJQUNGO0FBQ0EsU0FBSyxRQUFRO0FBQ2IsU0FBSyx5QkFBeUI7QUFBQSxFQUNoQztBQUFBLEVBRWdCLG9CQUEwQjs7QUFDeEMsVUFBTSxrQkFBa0I7QUFDeEIs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
486
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL292ZXJsYXkvb3ZlcmxheS1iYXNlLWVsZW1lbnQudHMiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvb3ZlcmxheS9vdmVybGF5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgUHJvcGVydHlWYWx1ZXMgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IFNiYkZvY3VzSGFuZGxlciB9IGZyb20gJy4uL2NvcmUvYTExeS5qcyc7XG5pbXBvcnQgeyBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCB9IGZyb20gJy4uL2NvcmUvYmFzZS1lbGVtZW50cy5qcyc7XG5pbXBvcnQgeyBTYmJJbmVydENvbnRyb2xsZXIsIFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJy4uL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgaG9zdENvbnRleHQsIFNiYlNjcm9sbEhhbmRsZXIgfSBmcm9tICcuLi9jb3JlL2RvbS5qcyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICcuLi9jb3JlL2V2ZW50aW5nLmpzJztcbmltcG9ydCB7IGkxOG5EaWFsb2cgfSBmcm9tICcuLi9jb3JlL2kxOG4uanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJPdmVybGF5Q2xvc2VFdmVudERldGFpbHMgfSBmcm9tICcuLi9jb3JlL2ludGVyZmFjZXMuanMnO1xuaW1wb3J0IHsgU2JiTmVnYXRpdmVNaXhpbiB9IGZyb20gJy4uL2NvcmUvbWl4aW5zLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiU2NyZWVuUmVhZGVyT25seUVsZW1lbnQgfSBmcm9tICcuLi9zY3JlZW4tcmVhZGVyLW9ubHkuanMnO1xuXG4vLyBBIGdsb2JhbCBjb2xsZWN0aW9uIG9mIGV4aXN0aW5nIG92ZXJsYXlzLlxuZXhwb3J0IGNvbnN0IG92ZXJsYXlSZWZzOiBTYmJPdmVybGF5QmFzZUVsZW1lbnRbXSA9IFtdO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2JiT3ZlcmxheUJhc2VFbGVtZW50IGV4dGVuZHMgU2JiTmVnYXRpdmVNaXhpbihTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCkge1xuICAvKiogVGhpcyB3aWxsIGJlIGZvcndhcmRlZCBhcyBhcmlhLWxhYmVsIHRvIHRoZSByZWxldmFudCBuZXN0ZWQgZWxlbWVudCB0byBkZXNjcmliZSB0aGUgcHVycG9zZSBvZiB0aGUgb3ZlcmxheS4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYWNjZXNzaWJpbGl0eS1sYWJlbCcgfSkgcHVibGljIGFjY2Vzc2liaWxpdHlMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBFbWl0cyB3aGVuZXZlciB0aGUgY29tcG9uZW50IGlzIGNsb3NlZC4gKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGRpZENsb3NlOiBFdmVudEVtaXR0ZXI8U2JiT3ZlcmxheUNsb3NlRXZlbnREZXRhaWxzPiA9IG5ldyBFdmVudEVtaXR0ZXIoXG4gICAgdGhpcyxcbiAgICBTYmJPdmVybGF5QmFzZUVsZW1lbnQuZXZlbnRzLmRpZENsb3NlLFxuICApO1xuXG4gIC8vIFRoZSBsYXN0IGVsZW1lbnQgd2hpY2ggaGFkIGZvY3VzIGJlZm9yZSB0aGUgY29tcG9uZW50IHdhcyBvcGVuZWQuXG4gIHByb3RlY3RlZCBsYXN0Rm9jdXNlZEVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgcHJvdGVjdGVkIG92ZXJsYXlDbG9zZUVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgcHJvdGVjdGVkIG92ZXJsYXlDb250cm9sbGVyITogQWJvcnRDb250cm9sbGVyO1xuICBwcm90ZWN0ZWQgb3Blbk92ZXJsYXlDb250cm9sbGVyITogQWJvcnRDb250cm9sbGVyO1xuICBwcm90ZWN0ZWQgZm9jdXNIYW5kbGVyID0gbmV3IFNiYkZvY3VzSGFuZGxlcigpO1xuICBwcm90ZWN0ZWQgc2Nyb2xsSGFuZGxlciA9IG5ldyBTYmJTY3JvbGxIYW5kbGVyKCk7XG4gIHByb3RlY3RlZCByZXR1cm5WYWx1ZTogYW55O1xuICBwcm90ZWN0ZWQgYXJpYUxpdmVSZWZUb2dnbGUgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGFyaWFMaXZlUmVmITogU2JiU2NyZWVuUmVhZGVyT25seUVsZW1lbnQ7XG4gIHByb3RlY3RlZCBsYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG4gIHByb3RlY3RlZCBpbmVydENvbnRyb2xsZXIgPSBuZXcgU2JiSW5lcnRDb250cm9sbGVyKHRoaXMpO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjbG9zZUF0dHJpYnV0ZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgb25PdmVybGF5QW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQ7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBzZXRPdmVybGF5Rm9jdXMoKTogdm9pZDtcblxuICAvKiogQ2xvc2VzIHRoZSBjb21wb25lbnQuICovXG4gIHB1YmxpYyBjbG9zZShyZXN1bHQ/OiBhbnksIHRhcmdldD86IEhUTUxFbGVtZW50KTogYW55IHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29wZW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJldHVyblZhbHVlID0gcmVzdWx0O1xuICAgIHRoaXMub3ZlcmxheUNsb3NlRWxlbWVudCA9IHRhcmdldDtcbiAgICBjb25zdCBldmVudERhdGE6IFNiYk92ZXJsYXlDbG9zZUV2ZW50RGV0YWlscyA9IHtcbiAgICAgIHJldHVyblZhbHVlOiB0aGlzLnJldHVyblZhbHVlLFxuICAgICAgY2xvc2VUYXJnZXQ6IHRoaXMub3ZlcmxheUNsb3NlRWxlbWVudCxcbiAgICB9O1xuXG4gICAgaWYgKCF0aGlzLndpbGxDbG9zZS5lbWl0KGV2ZW50RGF0YSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zaW5nJztcbiAgICB0aGlzLnJlbW92ZUFyaWFMaXZlUmVmQ29udGVudCgpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5vdmVybGF5Q29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLm92ZXJsYXlDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICB0aGlzLmFyaWFMaXZlUmVmID1cbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcjxTYmJTY3JlZW5SZWFkZXJPbmx5RWxlbWVudD4oJ3NiYi1zY3JlZW4tcmVhZGVyLW9ubHknKSE7XG5cbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5vdmVybGF5Q29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLm9wZW5PdmVybGF5Q29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLmZvY3VzSGFuZGxlci5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5yZW1vdmVJbnN0YW5jZUZyb21HbG9iYWxDb2xsZWN0aW9uKCk7XG4gICAgdGhpcy5zY3JvbGxIYW5kbGVyLmVuYWJsZVNjcm9sbCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGF0dGFjaE9wZW5PdmVybGF5RXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMub3Blbk92ZXJsYXlDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIC8vIFJlbW92ZSBvdmVybGF5IGxhYmVsIGFzIHNvb24gYXMgaXQgaXMgbm90IG5lZWRlZCBhbnkgbW9yZSB0byBwcmV2ZW50IGFjY2Vzc2luZyBpdCB3aXRoIGJyb3dzZSBtb2RlLlxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2tleWRvd24nLFxuICAgICAgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlQXJpYUxpdmVSZWZDb250ZW50KCk7XG4gICAgICAgIHRoaXMub25LZXlkb3duRXZlbnQoZXZlbnQpO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc2lnbmFsOiB0aGlzLm9wZW5PdmVybGF5Q29udHJvbGxlci5zaWduYWwsXG4gICAgICB9LFxuICAgICk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gdGhpcy5yZW1vdmVBcmlhTGl2ZVJlZkNvbnRlbnQoKSwge1xuICAgICAgc2lnbmFsOiB0aGlzLm9wZW5PdmVybGF5Q29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25LZXlkb3duRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29wZW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgb3ZlcmxheVJlZnNbb3ZlcmxheVJlZnMubGVuZ3RoIC0gMV0uY2xvc2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVtb3ZlSW5zdGFuY2VGcm9tR2xvYmFsQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBvdmVybGF5UmVmcy5zcGxpY2Uob3ZlcmxheVJlZnMuaW5kZXhPZih0aGlzIGFzIFNiYk92ZXJsYXlCYXNlRWxlbWVudCksIDEpO1xuICB9XG5cbiAgLy8gQ2xvc2UgdGhlIGNvbXBvbmVudCBvbiBjbGljayBvZiBhbnkgZWxlbWVudCB0aGF0IGhhcyB0aGUgYGNsb3NlQXR0cmlidXRlYCBhdHRyaWJ1dGUuXG4gIHByb3RlY3RlZCBjbG9zZU9uU2JiT3ZlcmxheUNsb3NlQ2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgb3ZlcmxheUNsb3NlRWxlbWVudCA9IGV2ZW50XG4gICAgICAuY29tcG9zZWRQYXRoKClcbiAgICAgIC5maWx0ZXIoKGUpOiBlIGlzIEhUTUxFbGVtZW50ID0+IGUgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTEVsZW1lbnQpXG4gICAgICAuZmluZChcbiAgICAgICAgKHRhcmdldCkgPT4gdGFyZ2V0Lmhhc0F0dHJpYnV0ZSh0aGlzLmNsb3NlQXR0cmlidXRlKSAmJiAhdGFyZ2V0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSxcbiAgICAgICk7XG5cbiAgICBpZiAoIW92ZXJsYXlDbG9zZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFyZ2V0IGlzIGEgc3VibWlzc2lvbiBlbGVtZW50IHdpdGhpbiBhIGZvcm0gYW5kIHJldHVybiB0aGUgZm9ybSwgaWYgcHJlc2VudFxuICAgIGNvbnN0IGNsb3Nlc3RGb3JtID1cbiAgICAgIG92ZXJsYXlDbG9zZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0eXBlJykgPT09ICdzdWJtaXQnXG4gICAgICAgID8gKGhvc3RDb250ZXh0KCdmb3JtJywgb3ZlcmxheUNsb3NlRWxlbWVudCkgYXMgSFRNTEZvcm1FbGVtZW50KVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBvdmVybGF5UmVmc1tvdmVybGF5UmVmcy5sZW5ndGggLSAxXS5jbG9zZShjbG9zZXN0Rm9ybSwgb3ZlcmxheUNsb3NlRWxlbWVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVtb3ZlQXJpYUxpdmVSZWZDb250ZW50KCk6IHZvaWQge1xuICAgIHRoaXMuYXJpYUxpdmVSZWYudGV4dENvbnRlbnQgPSAnJztcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRBcmlhTGl2ZVJlZkNvbnRlbnQobGFiZWw/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmFyaWFMaXZlUmVmVG9nZ2xlID0gIXRoaXMuYXJpYUxpdmVSZWZUb2dnbGU7XG5cbiAgICAvLyBJZiB0aGUgdGV4dCBjb250ZW50IHJlbWFpbnMgdGhlIHNhbWUsIG9uIFZvaWNlT3ZlciB0aGUgYXJpYS1saXZlIHJlZ2lvbiBpcyBub3QgYW5ub3VuY2VkIGEgc2Vjb25kIHRpbWUuXG4gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFkaW5nIG9uIGV2ZXJ5IG9wZW5pbmcsIHdlIHRvZ2dsZSBhbiBpbnZpc2libGUgc3BhY2UuXG4gICAgdGhpcy5hcmlhTGl2ZVJlZi50ZXh0Q29udGVudCA9IGAke2kxOG5EaWFsb2dbdGhpcy5sYW5ndWFnZS5jdXJyZW50XX0ke1xuICAgICAgbGFiZWwgPyBgLCAke2xhYmVsfWAgOiAnJ1xuICAgIH0ke3RoaXMuYXJpYUxpdmVSZWZUb2dnbGUgPyAnwqAnIDogJyd9YDtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCwgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgbm90aGluZyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGh0bWwsIHVuc2FmZVN0YXRpYyB9IGZyb20gJ2xpdC9zdGF0aWMtaHRtbC5qcyc7XG5cbmltcG9ydCB7IGdldEZpcnN0Rm9jdXNhYmxlRWxlbWVudCwgc2V0TW9kYWxpdHlPbk5leHRGb2N1cyB9IGZyb20gJy4uL2NvcmUvYTExeS5qcyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICcuLi9jb3JlL2V2ZW50aW5nLmpzJztcbmltcG9ydCB7IGkxOG5DbG9zZURpYWxvZywgaTE4bkdvQmFjayB9IGZyb20gJy4uL2NvcmUvaTE4bi5qcyc7XG5cbmltcG9ydCB7IG92ZXJsYXlSZWZzLCBTYmJPdmVybGF5QmFzZUVsZW1lbnQgfSBmcm9tICcuL292ZXJsYXktYmFzZS1lbGVtZW50LmpzJztcbmltcG9ydCBzdHlsZSBmcm9tICcuL292ZXJsYXkuc2Nzcz9saXQmaW5saW5lJztcbmltcG9ydCAnLi4vYnV0dG9uL3NlY29uZGFyeS1idXR0b24uanMnO1xuaW1wb3J0ICcuLi9idXR0b24vdHJhbnNwYXJlbnQtYnV0dG9uLmpzJztcbmltcG9ydCAnLi4vY29udGFpbmVyLmpzJztcbmltcG9ydCAnLi4vc2NyZWVuLXJlYWRlci1vbmx5LmpzJztcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhbiBpbnRlcmFjdGl2ZSBvdmVybGF5IGVsZW1lbnQuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBwcm92aWRlIGEgY29udGVudCBmb3IgdGhlIG92ZXJsYXkuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSB3aWxsT3BlbiAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLW92ZXJsYXlgIHN0YXJ0cyB0aGUgb3BlbmluZyB0cmFuc2l0aW9uLiBDYW4gYmUgY2FuY2VsZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBkaWRPcGVuIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItb3ZlcmxheWAgaXMgb3BlbmVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gd2lsbENsb3NlIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItb3ZlcmxheWAgYmVnaW5zIHRoZSBjbG9zaW5nIHRyYW5zaXRpb24uIENhbiBiZSBjYW5jZWxlZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8U2JiT3ZlcmxheUNsb3NlRXZlbnREZXRhaWxzPn0gZGlkQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1vdmVybGF5YCBpcyBjbG9zZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSByZXF1ZXN0QmFja0FjdGlvbiAtIEVtaXRzIHdoZW5ldmVyIHRoZSBiYWNrIGJ1dHRvbiBpcyBjbGlja2VkLlxuICogQGNzc3Byb3AgWy0tc2JiLW92ZXJsYXktei1pbmRleD12YXIoLS1zYmItb3ZlcmxheS1kZWZhdWx0LXotaW5kZXgpXSAtIFRvIHNwZWNpZnkgYSBjdXN0b20gc3RhY2sgb3JkZXIsXG4gKiB0aGUgYHotaW5kZXhgIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlZmluaW5nIHRoaXMgQ1NTIHZhcmlhYmxlLiBUaGUgZGVmYXVsdCBgei1pbmRleGAgb2YgdGhlXG4gKiBjb21wb25lbnQgaXMgc2V0IHRvIGB2YXIoLS1zYmItb3ZlcmxheS1kZWZhdWx0LXotaW5kZXgpYCB3aXRoIGEgdmFsdWUgb2YgYDEwMDBgLlxuICovXG5AY3VzdG9tRWxlbWVudCgnc2JiLW92ZXJsYXknKVxuZXhwb3J0IGNsYXNzIFNiYk92ZXJsYXlFbGVtZW50IGV4dGVuZHMgU2JiT3ZlcmxheUJhc2VFbGVtZW50IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG5cbiAgLy8gRklYTUUgdXNpbmcgLi4uc3VwZXIuZXZlbnRzIHJlcXVpcmVzOiBodHRwczovL2dpdGh1Yi5jb20vc2JiLWRlc2lnbi1zeXN0ZW1zL2x5bmUtY29tcG9uZW50cy9pc3N1ZXMvMjYwMFxuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IGV2ZW50cyA9IHtcbiAgICB3aWxsT3BlbjogJ3dpbGxPcGVuJyxcbiAgICBkaWRPcGVuOiAnZGlkT3BlbicsXG4gICAgd2lsbENsb3NlOiAnd2lsbENsb3NlJyxcbiAgICBkaWRDbG9zZTogJ2RpZENsb3NlJyxcbiAgICBiYWNrQ2xpY2s6ICdyZXF1ZXN0QmFja0FjdGlvbicsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWxsb3cgdGhlIG92ZXJsYXkgY29udGVudCB0byBzdHJldGNoIHRvIGZ1bGwgd2lkdGguXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBjb250ZW50IGhhcyB0aGUgYXBwcm9wcmlhdGUgcGFnZSBzaXplLlxuICAgKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KSBwdWJsaWMgZXhwYW5kZWQgPSBmYWxzZTtcblxuICAvKiogV2hldGhlciBhIGJhY2sgYnV0dG9uIGlzIGRpc3BsYXllZCBuZXh0IHRvIHRoZSB0aXRsZS4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYmFjay1idXR0b24nLCB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyBiYWNrQnV0dG9uID0gZmFsc2U7XG5cbiAgLyoqIFRoaXMgd2lsbCBiZSBmb3J3YXJkZWQgYXMgYXJpYS1sYWJlbCB0byB0aGUgY2xvc2UgYnV0dG9uIGVsZW1lbnQuICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2FjY2Vzc2liaWxpdHktY2xvc2UtbGFiZWwnIH0pIHB1YmxpYyBhY2Nlc3NpYmlsaXR5Q2xvc2VMYWJlbDpcbiAgICB8IHN0cmluZ1xuICAgIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBUaGlzIHdpbGwgYmUgZm9yd2FyZGVkIGFzIGFyaWEtbGFiZWwgdG8gdGhlIGJhY2sgYnV0dG9uIGVsZW1lbnQuICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2FjY2Vzc2liaWxpdHktYmFjay1sYWJlbCcgfSkgcHVibGljIGFjY2Vzc2liaWxpdHlCYWNrTGFiZWw6XG4gICAgfCBzdHJpbmdcbiAgICB8IHVuZGVmaW5lZDtcblxuICBwcm90ZWN0ZWQgY2xvc2VBdHRyaWJ1dGU6IHN0cmluZyA9ICdzYmItb3ZlcmxheS1jbG9zZSc7XG5cbiAgLyoqIEVtaXRzIHdoZW5ldmVyIHRoZSBiYWNrIGJ1dHRvbiBpcyBjbGlja2VkLiAqL1xuICBwcml2YXRlIF9iYWNrQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcihcbiAgICB0aGlzLFxuICAgIFNiYk92ZXJsYXlFbGVtZW50LmV2ZW50cy5iYWNrQ2xpY2ssXG4gICk7XG4gIHByaXZhdGUgX292ZXJsYXlDb250ZW50RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAvKiogT3BlbnMgdGhlIGNvbXBvbmVudC4gKi9cbiAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdjbG9zZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubGFzdEZvY3VzZWRFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcblxuICAgIHRoaXMuX292ZXJsYXlDb250ZW50RWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihcbiAgICAgICcuc2JiLW92ZXJsYXlfX2NvbnRlbnQnLFxuICAgICkgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAoIXRoaXMud2lsbE9wZW4uZW1pdCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmluZyc7XG5cbiAgICAvLyBBZGQgdGhpcyBvdmVybGF5IHRvIHRoZSBnbG9iYWwgY29sbGVjdGlvblxuICAgIG92ZXJsYXlSZWZzLnB1c2godGhpcyBhcyBTYmJPdmVybGF5RWxlbWVudCk7XG5cbiAgICAvLyBEaXNhYmxlIHNjcm9sbGluZyBmb3IgY29udGVudCBiZWxvdyB0aGUgb3ZlcmxheVxuICAgIHRoaXMuc2Nyb2xsSGFuZGxlci5kaXNhYmxlU2Nyb2xsKCk7XG4gIH1cblxuICAvLyBXYWl0IGZvciBvdmVybGF5IHRyYW5zaXRpb24gdG8gY29tcGxldGUuXG4gIC8vIEluIHJhcmUgY2FzZXMsIGl0IGNhbiBiZSB0aGF0IHRoZSBhbmltYXRpb25FbmQgZXZlbnQgaXMgdHJpZ2dlcmVkIHR3aWNlLlxuICAvLyBUbyBhdm9pZCBlbnRlcmluZyBhIGNvcnJ1cHQgc3RhdGUsIGV4aXQgd2hlbiBzdGF0ZSBpcyBub3QgZXhwZWN0ZWQuXG4gIHByb3RlY3RlZCBvbk92ZXJsYXlBbmltYXRpb25FbmQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdvcGVuJyAmJiB0aGlzLnN0YXRlID09PSAnb3BlbmluZycpIHtcbiAgICAgIHRoaXMuc3RhdGUgPSAnb3BlbmVkJztcbiAgICAgIHRoaXMuZGlkT3Blbi5lbWl0KCk7XG4gICAgICB0aGlzLmluZXJ0Q29udHJvbGxlci5hY3RpdmF0ZSgpO1xuICAgICAgdGhpcy5hdHRhY2hPcGVuT3ZlcmxheUV2ZW50cygpO1xuICAgICAgdGhpcy5zZXRPdmVybGF5Rm9jdXMoKTtcbiAgICAgIC8vIFVzZSB0aW1lb3V0IHRvIHJlYWQgbGFiZWwgYWZ0ZXIgZm9jdXNlZCBlbGVtZW50XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0QXJpYUxpdmVSZWZDb250ZW50KHRoaXMuYWNjZXNzaWJpbGl0eUxhYmVsKSk7XG4gICAgICB0aGlzLmZvY3VzSGFuZGxlci50cmFwKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ2Nsb3NlJyAmJiB0aGlzLnN0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgIHRoaXMuX292ZXJsYXlDb250ZW50RWxlbWVudD8uc2Nyb2xsVG8oMCwgMCk7XG4gICAgICB0aGlzLnN0YXRlID0gJ2Nsb3NlZCc7XG4gICAgICB0aGlzLmluZXJ0Q29udHJvbGxlci5kZWFjdGl2YXRlKCk7XG4gICAgICBzZXRNb2RhbGl0eU9uTmV4dEZvY3VzKHRoaXMubGFzdEZvY3VzZWRFbGVtZW50KTtcbiAgICAgIC8vIE1hbnVhbGx5IGZvY3VzIGxhc3QgZm9jdXNlZCBlbGVtZW50XG4gICAgICB0aGlzLmxhc3RGb2N1c2VkRWxlbWVudD8uZm9jdXMoKTtcbiAgICAgIHRoaXMub3Blbk92ZXJsYXlDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgICAgdGhpcy5mb2N1c0hhbmRsZXIuZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy5yZW1vdmVJbnN0YW5jZUZyb21HbG9iYWxDb2xsZWN0aW9uKCk7XG4gICAgICAvLyBFbmFibGUgc2Nyb2xsaW5nIGZvciBjb250ZW50IGJlbG93IHRoZSBvdmVybGF5IGlmIG5vIG92ZXJsYXkgaXMgb3BlblxuICAgICAgaWYgKCFvdmVybGF5UmVmcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxIYW5kbGVyLmVuYWJsZVNjcm9sbCgpO1xuICAgICAgfVxuICAgICAgdGhpcy5kaWRDbG9zZS5lbWl0KHtcbiAgICAgICAgcmV0dXJuVmFsdWU6IHRoaXMucmV0dXJuVmFsdWUsXG4gICAgICAgIGNsb3NlVGFyZ2V0OiB0aGlzLm92ZXJsYXlDbG9zZUVsZW1lbnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgZm9jdXMgb24gdGhlIGZpcnN0IGZvY3VzYWJsZSBlbGVtZW50LlxuICBwcm90ZWN0ZWQgc2V0T3ZlcmxheUZvY3VzKCk6IHZvaWQge1xuICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlID0gZ2V0Rmlyc3RGb2N1c2FibGVFbGVtZW50KFxuICAgICAgQXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QhLmNoaWxkcmVuKS5maWx0ZXIoXG4gICAgICAgIChlKTogZSBpcyBIVE1MRWxlbWVudCA9PiBlIGluc3RhbmNlb2Ygd2luZG93LkhUTUxFbGVtZW50LFxuICAgICAgKSxcbiAgICApO1xuICAgIHNldE1vZGFsaXR5T25OZXh0Rm9jdXMoZmlyc3RGb2N1c2FibGUpO1xuICAgIGZpcnN0Rm9jdXNhYmxlPy5mb2N1cygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgVEFHX05BTUUgPSB0aGlzLm5lZ2F0aXZlID8gJ3NiYi10cmFuc3BhcmVudC1idXR0b24nIDogJ3NiYi1zZWNvbmRhcnktYnV0dG9uJztcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIGxpdC9iaW5kaW5nLXBvc2l0aW9ucyAqL1xuICAgIGNvbnN0IGNsb3NlQnV0dG9uID0gaHRtbGBcbiAgICAgIDwke3Vuc2FmZVN0YXRpYyhUQUdfTkFNRSl9XG4gICAgICAgIGNsYXNzPVwic2JiLW92ZXJsYXlfX2Nsb3NlXCJcbiAgICAgICAgYXJpYS1sYWJlbD0ke3RoaXMuYWNjZXNzaWJpbGl0eUNsb3NlTGFiZWwgfHwgaTE4bkNsb3NlRGlhbG9nW3RoaXMubGFuZ3VhZ2UuY3VycmVudF19XG4gICAgICAgID9uZWdhdGl2ZT0ke3RoaXMubmVnYXRpdmV9XG4gICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGljb24tbmFtZT1cImNyb3NzLXNtYWxsXCJcbiAgICAgICAgc2JiLW92ZXJsYXktY2xvc2VcbiAgICAgID48LyR7dW5zYWZlU3RhdGljKFRBR19OQU1FKX0+XG4gICAgYDtcblxuICAgIGNvbnN0IGJhY2tCdXR0b24gPSBodG1sYFxuICAgICAgPCR7dW5zYWZlU3RhdGljKFRBR19OQU1FKX1cbiAgICAgICAgY2xhc3M9XCJzYmItb3ZlcmxheV9fYmFja1wiXG4gICAgICAgIGFyaWEtbGFiZWw9JHt0aGlzLmFjY2Vzc2liaWxpdHlCYWNrTGFiZWwgfHwgaTE4bkdvQmFja1t0aGlzLmxhbmd1YWdlLmN1cnJlbnRdfVxuICAgICAgICA/bmVnYXRpdmU9JHt0aGlzLm5lZ2F0aXZlfVxuICAgICAgICBzaXplPVwibVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBpY29uLW5hbWU9XCJjaGV2cm9uLXNtYWxsLWxlZnQtc21hbGxcIlxuICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLl9iYWNrQ2xpY2suZW1pdCgpfVxuICAgICAgPjwvJHt1bnNhZmVTdGF0aWMoVEFHX05BTUUpfT5cbiAgICBgO1xuICAgIC8qIGVzbGludC1lbmFibGUgbGl0L2JpbmRpbmctcG9zaXRpb25zICovXG5cbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJzYmItb3ZlcmxheV9fY29udGFpbmVyXCJcbiAgICAgICAgQGFuaW1hdGlvbmVuZD0keyhldmVudDogQW5pbWF0aW9uRXZlbnQpID0+IHRoaXMub25PdmVybGF5QW5pbWF0aW9uRW5kKGV2ZW50KX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1vdmVybGF5XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgQGNsaWNrPSR7KGV2ZW50OiBFdmVudCkgPT4gdGhpcy5jbG9zZU9uU2JiT3ZlcmxheUNsb3NlQ2xpY2soZXZlbnQpfVxuICAgICAgICAgICAgY2xhc3M9XCJzYmItb3ZlcmxheV9fd3JhcHBlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1vdmVybGF5X19oZWFkZXJcIj5cbiAgICAgICAgICAgICAgJHt0aGlzLmJhY2tCdXR0b24gPyBiYWNrQnV0dG9uIDogbm90aGluZ30gJHtjbG9zZUJ1dHRvbn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1vdmVybGF5X19jb250ZW50XCI+XG4gICAgICAgICAgICAgIDxzYmItY29udGFpbmVyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzYmItb3ZlcmxheV9fY29udGVudC1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgID9leHBhbmRlZD0ke3RoaXMuZXhwYW5kZWR9XG4gICAgICAgICAgICAgICAgY29sb3I9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgICAgICAgIDwvc2JiLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHkgYXJpYS1saXZlPVwicG9saXRlXCI+PC9zYmItc2NyZWVuLXJlYWRlci1vbmx5PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1vdmVybGF5JzogU2JiT3ZlcmxheUVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJfU2JiT3ZlcmxheUJhc2VFbGVtZW50IiwiX19kZWNvcmF0ZUNsYXNzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWNPLE1BQU0sY0FBdUMsQ0FBQztBQUU5QyxNQUFlLHlCQUFmLE1BQWVBLGdDQUE4QixpQkFBaUIsdUJBQXVCLEVBQUU7QUFBQSxFQUF2RixjQUFBO0FBQUEsVUFBQSxHQUFBLFNBQUE7QUFLTCxTQUFtQixXQUFzRCxJQUFJO0FBQUEsTUFDM0U7QUFBQSxNQUNBQSx3QkFBc0IsT0FBTztBQUFBLElBQUE7QUFRckIsU0FBQSxlQUFlLElBQUk7QUFDbkIsU0FBQSxnQkFBZ0IsSUFBSTtBQUU5QixTQUFVLG9CQUFvQjtBQUVwQixTQUFBLFdBQVcsSUFBSSxzQkFBc0IsSUFBSTtBQUN6QyxTQUFBLGtCQUFrQixJQUFJLG1CQUFtQixJQUFJO0FBQUEsRUFBQTtBQUFBO0FBQUEsRUFPaEQsTUFBTSxRQUFjLFFBQTJCO0FBQ2hELFFBQUEsS0FBSyxVQUFVLFVBQVU7QUFDM0I7QUFBQSxJQUNGO0FBRUEsU0FBSyxjQUFjO0FBQ25CLFNBQUssc0JBQXNCO0FBQzNCLFVBQU0sWUFBeUM7QUFBQSxNQUM3QyxhQUFhLEtBQUs7QUFBQSxNQUNsQixhQUFhLEtBQUs7QUFBQSxJQUFBO0FBR3BCLFFBQUksQ0FBQyxLQUFLLFVBQVUsS0FBSyxTQUFTLEdBQUc7QUFDbkM7QUFBQSxJQUNGO0FBQ0EsU0FBSyxRQUFRO0FBQ2IsU0FBSyx5QkFBeUI7QUFBQSxFQUNoQztBQUFBLEVBRWdCLG9CQUEwQjs7QUFDeEMsVUFBTSxrQkFBa0I7QUFDeEIs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
@@ -2,22 +2,9 @@ import { css, html } from "lit";
2
2
  import { customElement } from "lit/decorators.js";
3
3
  import { SbbButtonBaseElement } from "../core/base-elements.js";
4
4
  import { hostContext } from "../core/dom.js";
5
- import { SbbDisabledTabIndexActionMixin, SbbNegativeMixin } from "../core/mixins.js";
5
+ import { SbbFocusableDisabledActionMixin, SbbNegativeMixin } from "../core/mixins.js";
6
6
  import { SbbIconNameMixin } from "../icon.js";
7
- const style = css`/**
8
- * Better font rendering (on OS X)
9
- * http://maximilianhoffmann.com/posts/better-font-rendering-on-osx
10
- *
11
- * Usage:
12
- *
13
- * .var_dark_on_light {
14
- * @include font-smoothing;
15
- * }
16
- * .var_light_on_dark {
17
- * @include font-smoothing-reset;
18
- * }
19
- */
20
- /** This mixin can be used to avoid spacing problems by inserting an invisible space as pseudo element. */
7
+ const style = css`/** This mixin can be used to avoid spacing problems by inserting an invisible space as pseudo element. */
21
8
  /*
22
9
  * SBB table mixin
23
10
  * Notes:
@@ -207,7 +194,7 @@ var __decorateClass = (decorators, target, key, kind) => {
207
194
  if (kind && result) __defProp(target, key, result);
208
195
  return result;
209
196
  };
210
- let SbbPopoverTriggerElement = class extends SbbDisabledTabIndexActionMixin(
197
+ let SbbPopoverTriggerElement = class extends SbbFocusableDisabledActionMixin(
211
198
  SbbNegativeMixin(SbbIconNameMixin(SbbButtonBaseElement))
212
199
  ) {
213
200
  connectedCallback() {
@@ -233,4 +220,4 @@ SbbPopoverTriggerElement = __decorateClass([
233
220
  export {
234
221
  SbbPopoverTriggerElement
235
222
  };
236
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci10cmlnZ2VyLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvcG9wb3Zlci9wb3BvdmVyLXRyaWdnZXIvcG9wb3Zlci10cmlnZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgQ1NTUmVzdWx0R3JvdXAsIGh0bWwsIHR5cGUgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgU2JiQnV0dG9uQmFzZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UtZWxlbWVudHMuanMnO1xuaW1wb3J0IHsgaG9zdENvbnRleHQgfSBmcm9tICcuLi8uLi9jb3JlL2RvbS5qcyc7XG5pbXBvcnQgeyBTYmJEaXNhYmxlZFRhYkluZGV4QWN0aW9uTWl4aW4sIFNiYk5lZ2F0aXZlTWl4aW4gfSBmcm9tICcuLi8uLi9jb3JlL21peGlucy5qcyc7XG5pbXBvcnQgeyBTYmJJY29uTmFtZU1peGluIH0gZnJvbSAnLi4vLi4vaWNvbi5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL3BvcG92ZXItdHJpZ2dlci5zY3NzP2xpdCZpbmxpbmUnO1xuXG4vKipcbiAqIEl0IGNhbiBiZSB1c2VkIGFzIGEgdHJpZ2dlciBmb3IgdGhlIGBzYmItcG9wb3ZlcmAgY29tcG9uZW50LlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIGNvbnRlbnQgdG8gdGhlIGBzYmItcG9wb3Zlci10cmlnZ2VyYC5cbiAqL1xuQGN1c3RvbUVsZW1lbnQoJ3NiYi1wb3BvdmVyLXRyaWdnZXInKVxuZXhwb3J0IGNsYXNzIFNiYlBvcG92ZXJUcmlnZ2VyRWxlbWVudCBleHRlbmRzIFNiYkRpc2FibGVkVGFiSW5kZXhBY3Rpb25NaXhpbihcbiAgU2JiTmVnYXRpdmVNaXhpbihTYmJJY29uTmFtZU1peGluKFNiYkJ1dHRvbkJhc2VFbGVtZW50KSksXG4pIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgY29uc3QgZm9ybUZpZWxkID0gaG9zdENvbnRleHQoJ3NiYi1mb3JtLWZpZWxkJywgdGhpcykgPz8gaG9zdENvbnRleHQoJ1tkYXRhLWZvcm0tZmllbGRdJywgdGhpcyk7XG5cbiAgICBpZiAoZm9ybUZpZWxkKSB7XG4gICAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1pY29uLXNtYWxsJywgdHJ1ZSk7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gKGZvcm1GaWVsZCBhcyBIVE1MRWxlbWVudCkuaGFzQXR0cmlidXRlKCduZWdhdGl2ZScpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXJUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2xvdD5cbiAgICAgICAgPHNiYi1pY29uIG5hbWU9JHt0aGlzLmljb25OYW1lIHx8ICdjaXJjbGUtaW5mb3JtYXRpb24tc21hbGwnfT48L3NiYi1pY29uPlxuICAgICAgPC9zbG90PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1wb3BvdmVyLXRyaWdnZXInOiBTYmJQb3BvdmVyVHJpZ2dlckVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdCTyxJQUFNLDJCQUFOLGNBQXVDO0FBQUEsRUFDNUMsaUJBQWlCLGlCQUFpQixvQkFBb0IsQ0FBQztBQUN6RCxFQUFFO0FBQUEsRUFHZ0Isb0JBQTBCO0FBQ3hDLFVBQU0sa0JBQWtCO0FBQ3hCLFVBQU0sWUFBWSxZQUFZLGtCQUFrQixJQUFJLEtBQUssWUFBWSxxQkFBcUIsSUFBSTtBQUU5RixRQUFJLFdBQVc7QUFDUixXQUFBLGdCQUFnQixtQkFBbUIsSUFBSTtBQUN2QyxXQUFBLFdBQVksVUFBMEIsYUFBYSxVQUFVO0FBQUEsSUFDcEU7QUFBQSxFQUNGO0FBQUEsRUFFbUIsaUJBQWlDO0FBQzNDLFdBQUE7QUFBQTtBQUFBLHlCQUVjLEtBQUssWUFBWSwwQkFBMEI7QUFBQTtBQUFBO0FBQUEsRUFHbEU7QUFDRjtBQXRCYSx5QkFHWSxTQUF5QjtBQUhyQywyQkFBTixnQkFBQTtBQUFBLEVBRE4sY0FBYyxxQkFBcUI7QUFBQSxHQUN2Qix3QkFBQTsifQ==
223
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci10cmlnZ2VyLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvcG9wb3Zlci9wb3BvdmVyLXRyaWdnZXIvcG9wb3Zlci10cmlnZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgQ1NTUmVzdWx0R3JvdXAsIGh0bWwsIHR5cGUgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgU2JiQnV0dG9uQmFzZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UtZWxlbWVudHMuanMnO1xuaW1wb3J0IHsgaG9zdENvbnRleHQgfSBmcm9tICcuLi8uLi9jb3JlL2RvbS5qcyc7XG5pbXBvcnQgeyBTYmJGb2N1c2FibGVEaXNhYmxlZEFjdGlvbk1peGluLCBTYmJOZWdhdGl2ZU1peGluIH0gZnJvbSAnLi4vLi4vY29yZS9taXhpbnMuanMnO1xuaW1wb3J0IHsgU2JiSWNvbk5hbWVNaXhpbiB9IGZyb20gJy4uLy4uL2ljb24uanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9wb3BvdmVyLXRyaWdnZXIuc2Nzcz9saXQmaW5saW5lJztcblxuLyoqXG4gKiBJdCBjYW4gYmUgdXNlZCBhcyBhIHRyaWdnZXIgZm9yIHRoZSBgc2JiLXBvcG92ZXJgIGNvbXBvbmVudC5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBjb250ZW50IHRvIHRoZSBgc2JiLXBvcG92ZXItdHJpZ2dlcmAuXG4gKi9cbkBjdXN0b21FbGVtZW50KCdzYmItcG9wb3Zlci10cmlnZ2VyJylcbmV4cG9ydCBjbGFzcyBTYmJQb3BvdmVyVHJpZ2dlckVsZW1lbnQgZXh0ZW5kcyBTYmJGb2N1c2FibGVEaXNhYmxlZEFjdGlvbk1peGluKFxuICBTYmJOZWdhdGl2ZU1peGluKFNiYkljb25OYW1lTWl4aW4oU2JiQnV0dG9uQmFzZUVsZW1lbnQpKSxcbikge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICBjb25zdCBmb3JtRmllbGQgPSBob3N0Q29udGV4dCgnc2JiLWZvcm0tZmllbGQnLCB0aGlzKSA/PyBob3N0Q29udGV4dCgnW2RhdGEtZm9ybS1maWVsZF0nLCB0aGlzKTtcblxuICAgIGlmIChmb3JtRmllbGQpIHtcbiAgICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWljb24tc21hbGwnLCB0cnVlKTtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAoZm9ybUZpZWxkIGFzIEhUTUxFbGVtZW50KS5oYXNBdHRyaWJ1dGUoJ25lZ2F0aXZlJyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlclRlbXBsYXRlKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxzbG90PlxuICAgICAgICA8c2JiLWljb24gbmFtZT0ke3RoaXMuaWNvbk5hbWUgfHwgJ2NpcmNsZS1pbmZvcm1hdGlvbi1zbWFsbCd9Pjwvc2JiLWljb24+XG4gICAgICA8L3Nsb3Q+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXBvcG92ZXItdHJpZ2dlcic6IFNiYlBvcG92ZXJUcmlnZ2VyRWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQk8sSUFBTSwyQkFBTixjQUF1QztBQUFBLEVBQzVDLGlCQUFpQixpQkFBaUIsb0JBQW9CLENBQUM7QUFDekQsRUFBRTtBQUFBLEVBR2dCLG9CQUEwQjtBQUN4QyxVQUFNLGtCQUFrQjtBQUN4QixVQUFNLFlBQVksWUFBWSxrQkFBa0IsSUFBSSxLQUFLLFlBQVkscUJBQXFCLElBQUk7QUFFOUYsUUFBSSxXQUFXO0FBQ1IsV0FBQSxnQkFBZ0IsbUJBQW1CLElBQUk7QUFDdkMsV0FBQSxXQUFZLFVBQTBCLGFBQWEsVUFBVTtBQUFBLElBQ3BFO0FBQUEsRUFDRjtBQUFBLEVBRW1CLGlCQUFpQztBQUMzQyxXQUFBO0FBQUE7QUFBQSx5QkFFYyxLQUFLLFlBQVksMEJBQTBCO0FBQUE7QUFBQTtBQUFBLEVBR2xFO0FBQ0Y7QUF0QmEseUJBR1ksU0FBeUI7QUFIckMsMkJBQU4sZ0JBQUE7QUFBQSxFQUROLGNBQWMscUJBQXFCO0FBQUEsR0FDdkIsd0JBQUE7In0=
@@ -10,20 +10,7 @@ import { i18nClosePopover } from "../core/i18n.js";
10
10
  import { SbbHydrationMixin } from "../core/mixins.js";
11
11
  import { isEventOnElement, removeAriaOverlayTriggerAttributes, setAriaOverlayTriggerAttributes, getElementPosition } from "../core/overlay.js";
12
12
  import "../button/secondary-button.js";
13
- const style = css`/**
14
- * Better font rendering (on OS X)
15
- * http://maximilianhoffmann.com/posts/better-font-rendering-on-osx
16
- *
17
- * Usage:
18
- *
19
- * .var_dark_on_light {
20
- * @include font-smoothing;
21
- * }
22
- * .var_light_on_dark {
23
- * @include font-smoothing-reset;
24
- * }
25
- */
26
- /** This mixin can be used to avoid spacing problems by inserting an invisible space as pseudo element. */
13
+ const style = css`/** This mixin can be used to avoid spacing problems by inserting an invisible space as pseudo element. */
27
14
  /*
28
15
  * SBB table mixin
29
16
  * Notes:
@@ -565,4 +552,4 @@ SbbPopoverElement = __decorateClass([
565
552
  export {
566
553
  SbbPopoverElement
567
554
  };
568
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3BvcG92ZXIvcG9wb3Zlci9wb3BvdmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ1NTUmVzdWx0R3JvdXAsIFByb3BlcnR5VmFsdWVzLCBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBodG1sLCBpc1NlcnZlciwgbm90aGluZyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHJlZiB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlZi5qcyc7XG5cbmltcG9ydCB7XG4gIGdldEZpcnN0Rm9jdXNhYmxlRWxlbWVudCxcbiAgSVNfRk9DVVNBQkxFX1FVRVJZLFxuICBTYmJGb2N1c0hhbmRsZXIsXG4gIHNldE1vZGFsaXR5T25OZXh0Rm9jdXMsXG59IGZyb20gJy4uLy4uL2NvcmUvYTExeS5qcyc7XG5pbXBvcnQgeyBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCB9IGZyb20gJy4uLy4uL2NvcmUvYmFzZS1lbGVtZW50cy5qcyc7XG5pbXBvcnQgeyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9jb3JlL2NvbnRyb2xsZXJzLmpzJztcbmltcG9ydCB7IGZpbmRSZWZlcmVuY2VkRWxlbWVudCB9IGZyb20gJy4uLy4uL2NvcmUvZG9tLmpzJztcbmltcG9ydCB7IGNvbXBvc2VkUGF0aEhhc0F0dHJpYnV0ZSwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQgeyBpMThuQ2xvc2VQb3BvdmVyIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiT3BlbmVkQ2xvc2VkU3RhdGUgfSBmcm9tICcuLi8uLi9jb3JlL2ludGVyZmFjZXMuanMnO1xuaW1wb3J0IHsgU2JiSHlkcmF0aW9uTWl4aW4gfSBmcm9tICcuLi8uLi9jb3JlL21peGlucy5qcyc7XG5pbXBvcnQge1xuICBnZXRFbGVtZW50UG9zaXRpb24sXG4gIGlzRXZlbnRPbkVsZW1lbnQsXG4gIHJlbW92ZUFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXMsXG4gIHNldEFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXMsXG59IGZyb20gJy4uLy4uL2NvcmUvb3ZlcmxheS5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL3BvcG92ZXIuc2Nzcz9saXQmaW5saW5lJztcblxuaW1wb3J0ICcuLi8uLi9idXR0b24vc2Vjb25kYXJ5LWJ1dHRvbi5qcyc7XG5cbmNvbnN0IFZFUlRJQ0FMX09GRlNFVCA9IDE2O1xuY29uc3QgSE9SSVpPTlRBTF9PRkZTRVQgPSAzMjtcblxubGV0IG5leHRJZCA9IDA7XG5cbmNvbnN0IHBvcG92ZXJzUmVmID0gbmV3IFNldDxTYmJQb3BvdmVyRWxlbWVudD4oKTtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBjb250ZXh0dWFsIGluZm9ybWF0aW9uIHdpdGhpbiBhIHBvcG92ZXIuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBhZGQgY29udGVudCBpbnRvIHRoZSBwb3BvdmVyLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gd2lsbE9wZW4gLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1wb3BvdmVyYCBzdGFydHMgdGhlIG9wZW5pbmcgdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkT3BlbiAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLXBvcG92ZXJgIGlzIG9wZW5lZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8eyBjbG9zZVRhcmdldDogSFRNTEVsZW1lbnQgfT59IHdpbGxDbG9zZSAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLXBvcG92ZXJgIGJlZ2lucyB0aGUgY2xvc2luZ1xuICogdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx7IGNsb3NlVGFyZ2V0OiBIVE1MRWxlbWVudCB9Pn0gZGlkQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1wb3BvdmVyYCBpcyBjbG9zZWQuXG4gKiBAY3NzcHJvcCBbLS1zYmItcG9wb3Zlci16LWluZGV4PXZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleCldIC0gVG8gc3BlY2lmeSBhIGN1c3RvbSBzdGFjayBvcmRlcixcbiAqIHRoZSBgei1pbmRleGAgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgdGhpcyBDU1MgdmFyaWFibGUuIFRoZSBkZWZhdWx0IGB6LWluZGV4YCBvZiB0aGVcbiAqIGNvbXBvbmVudCBpcyBzZXQgdG8gYHZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleClgIHdpdGggYSB2YWx1ZSBvZiBgMTAwMGAuXG4gKi9cbkBjdXN0b21FbGVtZW50KCdzYmItcG9wb3ZlcicpXG5leHBvcnQgY2xhc3MgU2JiUG9wb3ZlckVsZW1lbnQgZXh0ZW5kcyBTYmJIeWRyYXRpb25NaXhpbihTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCkge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcblxuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdGhhdCB3aWxsIHRyaWdnZXIgdGhlIHBvcG92ZXIgb3ZlcmxheS5cbiAgICogQWNjZXB0cyBib3RoIGEgc3RyaW5nIChpZCBvZiBhbiBlbGVtZW50KSBvciBhbiBIVE1MIGVsZW1lbnQuXG4gICAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgdHJpZ2dlcj86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBjbG9zZSBidXR0b24gc2hvdWxkIGJlIGhpZGRlbi4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnaGlkZS1jbG9zZS1idXR0b24nLCB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyBoaWRlQ2xvc2VCdXR0b24/OiBib29sZWFuID1cbiAgICBmYWxzZTtcblxuICAvKiogV2hldGhlciB0aGUgcG9wb3ZlciBzaG91bGQgYmUgdHJpZ2dlcmVkIG9uIGhvdmVyLiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdob3Zlci10cmlnZ2VyJywgdHlwZTogQm9vbGVhbiB9KSBwdWJsaWMgaG92ZXJUcmlnZ2VyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIE9wZW4gdGhlIHBvcG92ZXIgYWZ0ZXIgYSBjZXJ0YWluIGRlbGF5LiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdvcGVuLWRlbGF5JywgdHlwZTogTnVtYmVyIH0pIHB1YmxpYyBvcGVuRGVsYXk/ID0gMDtcblxuICAvKiogQ2xvc2UgdGhlIHBvcG92ZXIgYWZ0ZXIgYSBjZXJ0YWluIGRlbGF5LiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdjbG9zZS1kZWxheScsIHR5cGU6IE51bWJlciB9KSBwdWJsaWMgY2xvc2VEZWxheT8gPSAwO1xuXG4gIC8qKiBUaGlzIHdpbGwgYmUgZm9yd2FyZGVkIGFzIGFyaWEtbGFiZWwgdG8gdGhlIGNsb3NlIGJ1dHRvbiBlbGVtZW50LiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdhY2Nlc3NpYmlsaXR5LWNsb3NlLWxhYmVsJyB9KSBwdWJsaWMgYWNjZXNzaWJpbGl0eUNsb3NlTGFiZWw6XG4gICAgfCBzdHJpbmdcbiAgICB8IHVuZGVmaW5lZDtcblxuICAvKiogRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItcG9wb3ZlcmAgYmVnaW5zIHRoZSBjbG9zaW5nIHRyYW5zaXRpb24uICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsQ2xvc2U6IEV2ZW50RW1pdHRlcjx7IGNsb3NlVGFyZ2V0PzogSFRNTEVsZW1lbnQgfT4gPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiUG9wb3ZlckVsZW1lbnQuZXZlbnRzLndpbGxDbG9zZSxcbiAgKTtcblxuICAvKiogRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItcG9wb3ZlcmAgaXMgY2xvc2VkLiAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZGlkQ2xvc2U6IEV2ZW50RW1pdHRlcjx7IGNsb3NlVGFyZ2V0PzogSFRNTEVsZW1lbnQgfT4gPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiUG9wb3ZlckVsZW1lbnQuZXZlbnRzLmRpZENsb3NlLFxuICApO1xuXG4gIHByaXZhdGUgX292ZXJsYXkhOiBIVE1MRGl2RWxlbWVudDtcbiAgcHJpdmF0ZSBfdHJpZ2dlckVsZW1lbnQ/OiBIVE1MRWxlbWVudCB8IG51bGw7XG4gIC8vIFRoZSBlbGVtZW50IHdoaWNoIHNob3VsZCByZWNlaXZlIGZvY3VzIGFmdGVyIGNsb3NpbmcgYmFzZWQgb24gd2hlcmUgaW4gdGhlIGJhY2tkcm9wIHRoZSB1c2VyIGNsaWNrcy5cbiAgcHJpdmF0ZSBfbmV4dEZvY3VzZWRFbGVtZW50PzogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3NraXBDbG9zZUZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3BvcG92ZXJDbG9zZUVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfaXNQb2ludGVyRG93bkV2ZW50T25Qb3BvdmVyPzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfcG9wb3ZlckNvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX29wZW5TdGF0ZUNvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX2ZvY3VzSGFuZGxlciA9IG5ldyBTYmJGb2N1c0hhbmRsZXIoKTtcbiAgcHJpdmF0ZSBfaG92ZXJUcmlnZ2VyID0gZmFsc2U7XG4gIHByaXZhdGUgX29wZW5UaW1lb3V0PzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByaXZhdGUgX2Nsb3NlVGltZW91dD86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgLyoqIE9wZW5zIHRoZSBwb3BvdmVyIG9uIHRyaWdnZXIgY2xpY2suICovXG4gIHB1YmxpYyBvcGVuKCk6IHZvaWQge1xuICAgIGlmICgodGhpcy5zdGF0ZSAhPT0gJ2Nsb3NlZCcgJiYgdGhpcy5zdGF0ZSAhPT0gJ2Nsb3NpbmcnKSB8fCAhdGhpcy5fb3ZlcmxheSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy53aWxsT3Blbi5lbWl0KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDbG9zZSB0aGUgb3RoZXIgcG9wb3ZlcnNcbiAgICBmb3IgKGNvbnN0IHBvcG92ZXIgb2YgQXJyYXkuZnJvbShwb3BvdmVyc1JlZikpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gcG9wb3Zlci5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3RhdGUnKSBhcyBTYmJPcGVuZWRDbG9zZWRTdGF0ZTtcbiAgICAgIGlmIChzdGF0ZSAmJiAoc3RhdGUgPT09ICdvcGVuZWQnIHx8IHN0YXRlID09PSAnb3BlbmluZycpKSB7XG4gICAgICAgIHBvcG92ZXIuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gJ29wZW5pbmcnO1xuICAgIHRoaXMuaW5lcnQgPSB0cnVlO1xuICAgIHRoaXMuX3NldFBvcG92ZXJQb3NpdGlvbigpO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpO1xuICAgIHRoaXMuX25leHRGb2N1c2VkRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9za2lwQ2xvc2VGb2N1cyA9IGZhbHNlO1xuICB9XG5cbiAgLyoqIENsb3NlcyB0aGUgcG9wb3Zlci4gKi9cbiAgcHVibGljIGNsb3NlKHRhcmdldD86IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuZWQnICYmIHRoaXMuc3RhdGUgIT09ICdvcGVuaW5nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3BvcG92ZXJDbG9zZUVsZW1lbnQgPSB0YXJnZXQ7XG4gICAgaWYgKCF0aGlzLndpbGxDbG9zZS5lbWl0KHsgY2xvc2VUYXJnZXQ6IHRhcmdldCB9KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAnY2xvc2luZyc7XG4gICAgdGhpcy5pbmVydCA9IHRydWU7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuICB9XG5cbiAgLy8gQ2xvc2VzIHRoZSBwb3BvdmVyIG9uIFwiRXNjXCIga2V5IHByZXNzZWQgYW5kIHRyYXBzIGZvY3VzIHdpdGhpbiB0aGUgcG9wb3Zlci5cbiAgcHJpdmF0ZSBfb25LZXlkb3duRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29wZW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlbW92ZXMgdHJpZ2dlciBjbGljayBsaXN0ZW5lciBvbiB0cmlnZ2VyIGNoYW5nZS5cbiAgcHJpdmF0ZSBfcmVtb3ZlVHJpZ2dlckNsaWNrTGlzdGVuZXIoXG4gICAgbmV3VmFsdWU/OiBzdHJpbmcgfCBIVE1MRWxlbWVudCxcbiAgICBvbGRWYWx1ZT86IHN0cmluZyB8IEhUTUxFbGVtZW50LFxuICApOiB2b2lkIHtcbiAgICBpZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7XG4gICAgICB0aGlzLl9wb3BvdmVyQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICAgIHRoaXMuX29wZW5TdGF0ZUNvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgICB0aGlzLl9jb25maWd1cmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICBpZiAoIXRoaXMuaWQpIHtcbiAgICAgIHRoaXMuaWQgPSB0aGlzLmlkIHx8IGBzYmItcG9wb3Zlci0keysrbmV4dElkfWA7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdHJpZ2dlciBlbGVtZW50IGFuZCBhdHRhY2ggZXZlbnQgbGlzdGVuZXJzXG4gICAgdGhpcy5fY29uZmlndXJlKCk7XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zZWQnO1xuICAgIHBvcG92ZXJzUmVmLmFkZCh0aGlzIGFzIFNiYlBvcG92ZXJFbGVtZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygndHJpZ2dlcicpKSB7XG4gICAgICB0aGlzLl9yZW1vdmVUcmlnZ2VyQ2xpY2tMaXN0ZW5lcih0aGlzLnRyaWdnZXIsIGNoYW5nZWRQcm9wZXJ0aWVzLmdldCgndHJpZ2dlcicpKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdob3ZlclRyaWdnZXInKSkge1xuICAgICAgdGhpcy5fY29uZmlndXJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKHRoaXMuX2hvdmVyVHJpZ2dlcikge1xuICAgICAgdGhpcy5fb3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgKCkgPT4gdGhpcy5fb25PdmVybGF5TW91c2VFbnRlcigpKTtcbiAgICAgIHRoaXMuX292ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsICgpID0+IHRoaXMuX29uT3ZlcmxheU1vdXNlTGVhdmUoKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5fcG9wb3ZlckNvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5fb3BlblN0YXRlQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLl9mb2N1c0hhbmRsZXIuZGlzY29ubmVjdCgpO1xuICAgIHBvcG92ZXJzUmVmLmRlbGV0ZSh0aGlzIGFzIFNiYlBvcG92ZXJFbGVtZW50KTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSB0cmlnZ2VyIGlzIHZhbGlkIGFuZCBhdHRhY2ggY2xpY2sgZXZlbnQgbGlzdGVuZXJzLlxuICBwcml2YXRlIF9jb25maWd1cmUoKTogdm9pZCB7XG4gICAgaWYgKGlzU2VydmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICh0aGlzLmh5ZHJhdGlvblJlcXVpcmVkKSB7XG4gICAgICB0aGlzLmh5ZHJhdGlvbkNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5fY29uZmlndXJlKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJlbW92ZUFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXModGhpcy5fdHJpZ2dlckVsZW1lbnQpO1xuXG4gICAgaWYgKCF0aGlzLnRyaWdnZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudCA9IGZpbmRSZWZlcmVuY2VkRWxlbWVudCh0aGlzLnRyaWdnZXIpO1xuXG4gICAgaWYgKCF0aGlzLl90cmlnZ2VyRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldEFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXModGhpcy5fdHJpZ2dlckVsZW1lbnQsICdkaWFsb2cnLCB0aGlzLmlkLCB0aGlzLnN0YXRlKTtcblxuICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIHRyaWdnZXIgY2FuIGJlIGhvdmVyZWQuIFNvbWUgZGV2aWNlcyBtaWdodCBpbnRlcnByZXQgdGhlIG1lZGlhIHF1ZXJ5IChob3ZlcjogaG92ZXIpIGRpZmZlcmVudGx5LFxuICAgIC8vIGFuZCBub3QgcmVzcGVjdCB0aGUgZmFsbGJhY2sgbWVjaGFuaXNtIG9uIHRoZSBjbGljay4gVGhlcmVmb3JlLCB0aGUgZm9sbG93aW5nIGlzIHByZWZlcnJlZCB0byBpZGVudGlmeVxuICAgIC8vIGFsbCBub24tdG91Y2hzY3JlZW4gZGV2aWNlcy5cbiAgICB0aGlzLl9ob3ZlclRyaWdnZXIgPSB0aGlzLmhvdmVyVHJpZ2dlciAmJiAhd2luZG93Lm1hdGNoTWVkaWEoJyhwb2ludGVyOiBjb2Fyc2UpJykubWF0Y2hlcztcblxuICAgIHRoaXMuX3BvcG92ZXJDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX3BvcG92ZXJDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGlmICh0aGlzLl9ob3ZlclRyaWdnZXIpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCB0aGlzLl9vblRyaWdnZXJNb3VzZUVudGVyLCB7XG4gICAgICAgIHNpZ25hbDogdGhpcy5fcG9wb3ZlckNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCB0aGlzLl9vblRyaWdnZXJNb3VzZUxlYXZlLCB7XG4gICAgICAgIHNpZ25hbDogdGhpcy5fcG9wb3ZlckNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdrZXlkb3duJyxcbiAgICAgICAgKGV2dDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgIGlmIChldnQuY29kZSA9PT0gJ1NwYWNlJyB8fCBldnQuY29kZSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc2lnbmFsOiB0aGlzLl9wb3BvdmVyQ29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAnY2xpY2snLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzaWduYWw6IHRoaXMuX3BvcG92ZXJDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYXR0YWNoV2luZG93RXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuX29wZW5TdGF0ZUNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKCkgPT4gdGhpcy5fc2V0UG9wb3ZlclBvc2l0aW9uKCksIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5TdGF0ZUNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB0aGlzLl9zZXRQb3BvdmVyUG9zaXRpb24oKSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblN0YXRlQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHRoaXMuX29uS2V5ZG93bkV2ZW50KGV2ZW50KSwge1xuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuU3RhdGVDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcblxuICAgIC8vIENsb3NlIHBvcG92ZXIgb24gYmFja2Ryb3AgY2xpY2tcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLl9wb2ludGVyRG93bkxpc3RlbmVyLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5TdGF0ZUNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCB0aGlzLl9jbG9zZU9uQmFja2Ryb3BDbGljaywge1xuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuU3RhdGVDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIENsb3NlIHRoZSBwb3BvdmVyIG9uIGNsaWNrIG9mIGFueSBlbGVtZW50IHRoYXQgaGFzIHRoZSAnc2JiLXBvcG92ZXItY2xvc2UnIGF0dHJpYnV0ZS5cbiAgcHJpdmF0ZSBfY2xvc2VPblNiYlBvcG92ZXJDbG9zZUNsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNsb3NlRWxlbWVudCA9IGNvbXBvc2VkUGF0aEhhc0F0dHJpYnV0ZShldmVudCwgJ3NiYi1wb3BvdmVyLWNsb3NlJywgdGhpcyk7XG5cbiAgICBpZiAoY2xvc2VFbGVtZW50ICYmICFjbG9zZUVsZW1lbnQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VUaW1lb3V0KTtcbiAgICAgIHRoaXMuY2xvc2UoY2xvc2VFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgcG9pbnRlcmRvd24gZXZlbnQgdGFyZ2V0IGlzIHRyaWdnZXJlZCBvbiB0aGUgcG9wb3Zlci5cbiAgcHJpdmF0ZSBfcG9pbnRlckRvd25MaXN0ZW5lciA9IChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25Qb3BvdmVyID0gaXNFdmVudE9uRWxlbWVudCh0aGlzLl9vdmVybGF5LCBldmVudCk7XG4gIH07XG5cbiAgLy8gQ2xvc2UgcG9wb3ZlciBvbiBiYWNrZHJvcCBjbGljay5cbiAgcHJpdmF0ZSBfY2xvc2VPbkJhY2tkcm9wQ2xpY2sgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmICghdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25Qb3BvdmVyICYmICFpc0V2ZW50T25FbGVtZW50KHRoaXMuX292ZXJsYXksIGV2ZW50KSkge1xuICAgICAgdGhpcy5fbmV4dEZvY3VzZWRFbGVtZW50ID0gZXZlbnRcbiAgICAgICAgLmNvbXBvc2VkUGF0aCgpXG4gICAgICAgIC5maWx0ZXIoKGVsKSA9PiBlbCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MRWxlbWVudClcbiAgICAgICAgLmZpbmQoKGVsKSA9PiAoZWwgYXMgSFRNTEVsZW1lbnQpLm1hdGNoZXMoSVNfRk9DVVNBQkxFX1FVRVJZKSkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VUaW1lb3V0KTtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBfb25UcmlnZ2VyTW91c2VFbnRlciA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ2Nsb3NlZCcgfHwgdGhpcy5zdGF0ZSA9PT0gJ2Nsb3NpbmcnKSB7XG4gICAgICB0aGlzLl9vcGVuVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5vcGVuKCksIHRoaXMub3BlbkRlbGF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2Nsb3NlVGltZW91dCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgX29uVHJpZ2dlck1vdXNlTGVhdmUgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdvcGVuZWQnIHx8IHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJykge1xuICAgICAgdGhpcy5fY2xvc2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmNsb3NlKCksIHRoaXMuY2xvc2VEZWxheSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9vcGVuVGltZW91dCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgX29uT3ZlcmxheU1vdXNlRW50ZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuaW5nJykge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2Nsb3NlVGltZW91dCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgX29uT3ZlcmxheU1vdXNlTGVhdmUgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuaW5nJykge1xuICAgICAgdGhpcy5fY2xvc2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmNsb3NlKCksIHRoaXMuY2xvc2VEZWxheSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFNldCBwb3BvdmVyIHBvc2l0aW9uICh4LCB5KSB0byAnMCcgb25jZSB0aGUgcG9wb3ZlciBpcyBjbG9zZWQgYW5kIHRoZSB0cmFuc2l0aW9uIGVuZGVkIHRvIHByZXZlbnQgdGhlXG4gIC8vIHZpZXdwb3J0IGZyb20gb3ZlcmZsb3dpbmcuIEFuZCBzZXQgdGhlIGZvY3VzIHRvIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCBvbmNlIHRoZSBwb3BvdmVyIGlzIG9wZW4uXG4gIC8vIEluIHJhcmUgY2FzZXMgaXQgY2FuIGJlIHRoYXQgdGhlIGFuaW1hdGlvbkVuZCBldmVudCBpcyB0cmlnZ2VyZWQgdHdpY2UuXG4gIC8vIFRvIGF2b2lkIGVudGVyaW5nIGEgY29ycnVwdCBzdGF0ZSwgZXhpdCB3aGVuIHN0YXRlIGlzIG5vdCBleHBlY3RlZC5cbiAgcHJpdmF0ZSBfb25Qb3BvdmVyQW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnb3BlbicgJiYgdGhpcy5zdGF0ZSA9PT0gJ29wZW5pbmcnKSB7XG4gICAgICB0aGlzLnN0YXRlID0gJ29wZW5lZCc7XG4gICAgICB0aGlzLmRpZE9wZW4uZW1pdCgpO1xuICAgICAgdGhpcy5pbmVydCA9IGZhbHNlO1xuICAgICAgdGhpcy5fYXR0YWNoV2luZG93RXZlbnRzKCk7XG4gICAgICB0aGlzLl9zZXRQb3BvdmVyRm9jdXMoKTtcbiAgICAgIHRoaXMuX2ZvY3VzSGFuZGxlci50cmFwKHRoaXMsIHtcbiAgICAgICAgcG9zdEZpbHRlcjogKGVsKSA9PiBlbCAhPT0gdGhpcy5fb3ZlcmxheSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ2Nsb3NlJyAmJiB0aGlzLnN0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgIHRoaXMuc3RhdGUgPSAnY2xvc2VkJztcbiAgICAgIHRoaXMuX292ZXJsYXk/LmZpcnN0RWxlbWVudENoaWxkPy5zY3JvbGxUbygwLCAwKTtcbiAgICAgIHRoaXMuX292ZXJsYXk/LnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcblxuICAgICAgaWYgKCF0aGlzLl9za2lwQ2xvc2VGb2N1cykge1xuICAgICAgICBjb25zdCBlbGVtZW50VG9Gb2N1cyA9IHRoaXMuX25leHRGb2N1c2VkRWxlbWVudCB8fCB0aGlzLl90cmlnZ2VyRWxlbWVudDtcblxuICAgICAgICBzZXRNb2RhbGl0eU9uTmV4dEZvY3VzKGVsZW1lbnRUb0ZvY3VzKTtcbiAgICAgICAgLy8gVG8gZW5hYmxlIGZvY3VzaW5nIG90aGVyIGVsZW1lbnQgdGhhbiB0aGUgdHJpZ2dlciwgd2UgbmVlZCB0byBjYWxsIGZvY3VzKCkgYSBzZWNvbmQgdGltZS5cbiAgICAgICAgZWxlbWVudFRvRm9jdXM/LmZvY3VzKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGlkQ2xvc2UuZW1pdCh7IGNsb3NlVGFyZ2V0OiB0aGlzLl9wb3BvdmVyQ2xvc2VFbGVtZW50IH0pO1xuICAgICAgdGhpcy5fb3BlblN0YXRlQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICAgIHRoaXMuX2ZvY3VzSGFuZGxlci5kaXNjb25uZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IGZvY3VzIG9uIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudC5cbiAgcHJpdmF0ZSBfc2V0UG9wb3ZlckZvY3VzKCk6IHZvaWQge1xuICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlID1cbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJ1tzYmItcG9wb3Zlci1jbG9zZV0nKSB8fFxuICAgICAgZ2V0Rmlyc3RGb2N1c2FibGVFbGVtZW50KFxuICAgICAgICBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pLmZpbHRlcigoZSk6IGUgaXMgSFRNTEVsZW1lbnQgPT4gZSBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MRWxlbWVudCksXG4gICAgICApO1xuICAgIGlmIChmaXJzdEZvY3VzYWJsZSkge1xuICAgICAgc2V0TW9kYWxpdHlPbk5leHRGb2N1cyhmaXJzdEZvY3VzYWJsZSk7XG4gICAgICBmaXJzdEZvY3VzYWJsZS5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vdmVybGF5LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgc2V0TW9kYWxpdHlPbk5leHRGb2N1cyh0aGlzLl9vdmVybGF5KTtcbiAgICAgIHRoaXMuX292ZXJsYXkuZm9jdXMoKTtcblxuICAgICAgLy8gV2hlbiBhIGJsdXIgb2NjdXJzLCB3ZSBrbm93IHRoYXQgdGhlIHBvcG92ZXIgaGFzIHRvIGJlIGNsb3NlZCxcbiAgICAgIC8vIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGludGVyYWN0aXZlIGVsZW1lbnRzIGluc2lkZSB0aGUgcG9wb3Zlci5cbiAgICAgIC8vIFdoZW4gYSB3aW5kb3cvdGFiIGNoYW5nZSBvY2N1cnMsIGEgYmx1ciBldmVudCBpcyBhbHNvIGZpcmVkLiBIb3dldmVyLCB3aGVuIHRoZSBjdXJyZW50IHdpbmRvdy90YWJcbiAgICAgIC8vIGJlY29tZXMgYWN0aXZlIGFnYWluLCBpdCBmb2N1c2VzIG9uY2UgYWdhaW4gdGhlIHBvcG92ZXIuXG4gICAgICAvLyBUaGVyZWZvcmUsIHdlIGNhbm5vdCBsaXN0ZW4gdG8gdGhlIGJsdXIgZXZlbnQgb25seSBvbmNlLlxuICAgICAgLy8gVG8gcHJldmVudCBhY2NpZGVudGFsbHkgY2xvc2luZyB0aGUgcG9wb3Zlciwgd2UgbmVlZCB0byBjaGVjayBmb3IgdGhlIHdpbmRvdy90YWIgc3RhdGUuXG4gICAgICAvLyBXZSBjYW4gYWNoaWV2ZSB0aGlzIGJ5IHVzaW5nIHZpc2liaWxpdHlTdGF0ZSwgd2hpY2ggb25seSB3b3JrcyB3aXRoIHNldFRpbWVvdXQoKS5cbiAgICAgIHRoaXMuX292ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2JsdXInLFxuICAgICAgICAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlICE9PSAnaGlkZGVuJykge1xuICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5Py5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSAnb3BlbmVkJyB8fCB0aGlzLnN0YXRlID09PSAnb3BlbmluZycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9za2lwQ2xvc2VGb2N1cyA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuU3RhdGVDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0UG9wb3ZlclBvc2l0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fb3ZlcmxheSB8fCAhdGhpcy5fdHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwb3BvdmVyUG9zaXRpb24gPSBnZXRFbGVtZW50UG9zaXRpb24oXG4gICAgICB0aGlzLl9vdmVybGF5LFxuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQsXG4gICAgICB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3IoJy5zYmItcG9wb3Zlcl9fY29udGFpbmVyJykhLFxuICAgICAge1xuICAgICAgICB2ZXJ0aWNhbE9mZnNldDogVkVSVElDQUxfT0ZGU0VULFxuICAgICAgICBob3Jpem9udGFsT2Zmc2V0OiBIT1JJWk9OVEFMX09GRlNFVCxcbiAgICAgICAgY2VudGVyZWQ6IHRydWUsXG4gICAgICAgIHJlc3BvbnNpdmVIZWlnaHQ6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcG9zaXRpb24nLCBwb3BvdmVyUG9zaXRpb24uYWxpZ25tZW50LnZlcnRpY2FsKTtcblxuICAgIGNvbnN0IGFycm93WFBvc2l0aW9uID1cbiAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLVxuICAgICAgcG9wb3ZlclBvc2l0aW9uLmxlZnQgK1xuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuY2xpZW50V2lkdGggLyAyIC1cbiAgICAgIDg7IC8vIGhhbGYgdGhlIHNpemUgb2YgdGhlIHBvcG92ZXIgYXJyb3dcblxuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2JiLXBvcG92ZXItcG9zaXRpb24teCcsIGAke3BvcG92ZXJQb3NpdGlvbi5sZWZ0fXB4YCk7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zYmItcG9wb3Zlci1wb3NpdGlvbi15JywgYCR7cG9wb3ZlclBvc2l0aW9uLnRvcH1weGApO1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2JiLXBvcG92ZXItYXJyb3ctcG9zaXRpb24teCcsIGAke2Fycm93WFBvc2l0aW9ufXB4YCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCBjbG9zZUJ1dHRvbiA9IGh0bWxgXG4gICAgICA8c3BhbiBjbGFzcz1cInNiYi1wb3BvdmVyX19jbG9zZVwiPlxuICAgICAgICA8c2JiLXNlY29uZGFyeS1idXR0b25cbiAgICAgICAgICBhcmlhLWxhYmVsPSR7dGhpcy5hY2Nlc3NpYmlsaXR5Q2xvc2VMYWJlbCB8fCBpMThuQ2xvc2VQb3BvdmVyW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfVxuICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBpY29uLW5hbWU9XCJjcm9zcy1zbWFsbFwiXG4gICAgICAgICAgc2JiLXBvcG92ZXItY2xvc2VcbiAgICAgICAgPjwvc2JiLXNlY29uZGFyeS1idXR0b24+XG4gICAgICA8L3NwYW4+XG4gICAgYDtcblxuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1wb3BvdmVyX19jb250YWluZXJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIEBhbmltYXRpb25lbmQ9JHsoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSA9PiB0aGlzLl9vblBvcG92ZXJBbmltYXRpb25FbmQoZXZlbnQpfVxuICAgICAgICAgIGNsYXNzPVwic2JiLXBvcG92ZXJcIlxuICAgICAgICAgIHJvbGU9XCJ0b29sdGlwXCJcbiAgICAgICAgICAke3JlZigoZWw/OiBFbGVtZW50KSA9PiAodGhpcy5fb3ZlcmxheSA9IGVsIGFzIEhUTUxEaXZFbGVtZW50KSl9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBAY2xpY2s9JHsoZXZlbnQ6IEV2ZW50KSA9PiB0aGlzLl9jbG9zZU9uU2JiUG9wb3ZlckNsb3NlQ2xpY2soZXZlbnQpfVxuICAgICAgICAgICAgY2xhc3M9XCJzYmItcG9wb3Zlcl9fY29udGVudFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgJHshdGhpcy5oaWRlQ2xvc2VCdXR0b24gJiYgIXRoaXMuX2hvdmVyVHJpZ2dlciA/IGNsb3NlQnV0dG9uIDogbm90aGluZ31cbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICA8c2xvdD5ObyBjb250ZW50PC9zbG90PlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1wb3BvdmVyJzogU2JiUG9wb3ZlckVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
555
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3BvcG92ZXIvcG9wb3Zlci9wb3BvdmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ1NTUmVzdWx0R3JvdXAsIFByb3BlcnR5VmFsdWVzLCBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBodG1sLCBpc1NlcnZlciwgbm90aGluZyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHJlZiB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlZi5qcyc7XG5cbmltcG9ydCB7XG4gIGdldEZpcnN0Rm9jdXNhYmxlRWxlbWVudCxcbiAgSVNfRk9DVVNBQkxFX1FVRVJZLFxuICBTYmJGb2N1c0hhbmRsZXIsXG4gIHNldE1vZGFsaXR5T25OZXh0Rm9jdXMsXG59IGZyb20gJy4uLy4uL2NvcmUvYTExeS5qcyc7XG5pbXBvcnQgeyBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCB9IGZyb20gJy4uLy4uL2NvcmUvYmFzZS1lbGVtZW50cy5qcyc7XG5pbXBvcnQgeyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9jb3JlL2NvbnRyb2xsZXJzLmpzJztcbmltcG9ydCB7IGZpbmRSZWZlcmVuY2VkRWxlbWVudCB9IGZyb20gJy4uLy4uL2NvcmUvZG9tLmpzJztcbmltcG9ydCB7IGNvbXBvc2VkUGF0aEhhc0F0dHJpYnV0ZSwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQgeyBpMThuQ2xvc2VQb3BvdmVyIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiT3BlbmVkQ2xvc2VkU3RhdGUgfSBmcm9tICcuLi8uLi9jb3JlL2ludGVyZmFjZXMuanMnO1xuaW1wb3J0IHsgU2JiSHlkcmF0aW9uTWl4aW4gfSBmcm9tICcuLi8uLi9jb3JlL21peGlucy5qcyc7XG5pbXBvcnQge1xuICBnZXRFbGVtZW50UG9zaXRpb24sXG4gIGlzRXZlbnRPbkVsZW1lbnQsXG4gIHJlbW92ZUFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXMsXG4gIHNldEFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXMsXG59IGZyb20gJy4uLy4uL2NvcmUvb3ZlcmxheS5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL3BvcG92ZXIuc2Nzcz9saXQmaW5saW5lJztcblxuaW1wb3J0ICcuLi8uLi9idXR0b24vc2Vjb25kYXJ5LWJ1dHRvbi5qcyc7XG5cbmNvbnN0IFZFUlRJQ0FMX09GRlNFVCA9IDE2O1xuY29uc3QgSE9SSVpPTlRBTF9PRkZTRVQgPSAzMjtcblxubGV0IG5leHRJZCA9IDA7XG5cbmNvbnN0IHBvcG92ZXJzUmVmID0gbmV3IFNldDxTYmJQb3BvdmVyRWxlbWVudD4oKTtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBjb250ZXh0dWFsIGluZm9ybWF0aW9uIHdpdGhpbiBhIHBvcG92ZXIuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBhZGQgY29udGVudCBpbnRvIHRoZSBwb3BvdmVyLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gd2lsbE9wZW4gLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1wb3BvdmVyYCBzdGFydHMgdGhlIG9wZW5pbmcgdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkT3BlbiAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLXBvcG92ZXJgIGlzIG9wZW5lZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8eyBjbG9zZVRhcmdldDogSFRNTEVsZW1lbnQgfT59IHdpbGxDbG9zZSAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLXBvcG92ZXJgIGJlZ2lucyB0aGUgY2xvc2luZ1xuICogdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx7IGNsb3NlVGFyZ2V0OiBIVE1MRWxlbWVudCB9Pn0gZGlkQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1wb3BvdmVyYCBpcyBjbG9zZWQuXG4gKiBAY3NzcHJvcCBbLS1zYmItcG9wb3Zlci16LWluZGV4PXZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleCldIC0gVG8gc3BlY2lmeSBhIGN1c3RvbSBzdGFjayBvcmRlcixcbiAqIHRoZSBgei1pbmRleGAgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgdGhpcyBDU1MgdmFyaWFibGUuIFRoZSBkZWZhdWx0IGB6LWluZGV4YCBvZiB0aGVcbiAqIGNvbXBvbmVudCBpcyBzZXQgdG8gYHZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleClgIHdpdGggYSB2YWx1ZSBvZiBgMTAwMGAuXG4gKi9cbkBjdXN0b21FbGVtZW50KCdzYmItcG9wb3ZlcicpXG5leHBvcnQgY2xhc3MgU2JiUG9wb3ZlckVsZW1lbnQgZXh0ZW5kcyBTYmJIeWRyYXRpb25NaXhpbihTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCkge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcblxuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdGhhdCB3aWxsIHRyaWdnZXIgdGhlIHBvcG92ZXIgb3ZlcmxheS5cbiAgICogQWNjZXB0cyBib3RoIGEgc3RyaW5nIChpZCBvZiBhbiBlbGVtZW50KSBvciBhbiBIVE1MIGVsZW1lbnQuXG4gICAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgdHJpZ2dlcj86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBjbG9zZSBidXR0b24gc2hvdWxkIGJlIGhpZGRlbi4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnaGlkZS1jbG9zZS1idXR0b24nLCB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyBoaWRlQ2xvc2VCdXR0b24/OiBib29sZWFuID1cbiAgICBmYWxzZTtcblxuICAvKiogV2hldGhlciB0aGUgcG9wb3ZlciBzaG91bGQgYmUgdHJpZ2dlcmVkIG9uIGhvdmVyLiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdob3Zlci10cmlnZ2VyJywgdHlwZTogQm9vbGVhbiB9KSBwdWJsaWMgaG92ZXJUcmlnZ2VyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIE9wZW4gdGhlIHBvcG92ZXIgYWZ0ZXIgYSBjZXJ0YWluIGRlbGF5LiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdvcGVuLWRlbGF5JywgdHlwZTogTnVtYmVyIH0pIHB1YmxpYyBvcGVuRGVsYXk/ID0gMDtcblxuICAvKiogQ2xvc2UgdGhlIHBvcG92ZXIgYWZ0ZXIgYSBjZXJ0YWluIGRlbGF5LiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdjbG9zZS1kZWxheScsIHR5cGU6IE51bWJlciB9KSBwdWJsaWMgY2xvc2VEZWxheT8gPSAwO1xuXG4gIC8qKiBUaGlzIHdpbGwgYmUgZm9yd2FyZGVkIGFzIGFyaWEtbGFiZWwgdG8gdGhlIGNsb3NlIGJ1dHRvbiBlbGVtZW50LiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdhY2Nlc3NpYmlsaXR5LWNsb3NlLWxhYmVsJyB9KSBwdWJsaWMgYWNjZXNzaWJpbGl0eUNsb3NlTGFiZWw6XG4gICAgfCBzdHJpbmdcbiAgICB8IHVuZGVmaW5lZDtcblxuICAvKiogRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItcG9wb3ZlcmAgYmVnaW5zIHRoZSBjbG9zaW5nIHRyYW5zaXRpb24uICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsQ2xvc2U6IEV2ZW50RW1pdHRlcjx7IGNsb3NlVGFyZ2V0PzogSFRNTEVsZW1lbnQgfT4gPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiUG9wb3ZlckVsZW1lbnQuZXZlbnRzLndpbGxDbG9zZSxcbiAgKTtcblxuICAvKiogRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItcG9wb3ZlcmAgaXMgY2xvc2VkLiAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZGlkQ2xvc2U6IEV2ZW50RW1pdHRlcjx7IGNsb3NlVGFyZ2V0PzogSFRNTEVsZW1lbnQgfT4gPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiUG9wb3ZlckVsZW1lbnQuZXZlbnRzLmRpZENsb3NlLFxuICApO1xuXG4gIHByaXZhdGUgX292ZXJsYXkhOiBIVE1MRGl2RWxlbWVudDtcbiAgcHJpdmF0ZSBfdHJpZ2dlckVsZW1lbnQ/OiBIVE1MRWxlbWVudCB8IG51bGw7XG4gIC8vIFRoZSBlbGVtZW50IHdoaWNoIHNob3VsZCByZWNlaXZlIGZvY3VzIGFmdGVyIGNsb3NpbmcgYmFzZWQgb24gd2hlcmUgaW4gdGhlIGJhY2tkcm9wIHRoZSB1c2VyIGNsaWNrcy5cbiAgcHJpdmF0ZSBfbmV4dEZvY3VzZWRFbGVtZW50PzogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3NraXBDbG9zZUZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3BvcG92ZXJDbG9zZUVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfaXNQb2ludGVyRG93bkV2ZW50T25Qb3BvdmVyPzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfcG9wb3ZlckNvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX29wZW5TdGF0ZUNvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX2ZvY3VzSGFuZGxlciA9IG5ldyBTYmJGb2N1c0hhbmRsZXIoKTtcbiAgcHJpdmF0ZSBfaG92ZXJUcmlnZ2VyID0gZmFsc2U7XG4gIHByaXZhdGUgX29wZW5UaW1lb3V0PzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByaXZhdGUgX2Nsb3NlVGltZW91dD86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgLyoqIE9wZW5zIHRoZSBwb3BvdmVyIG9uIHRyaWdnZXIgY2xpY2suICovXG4gIHB1YmxpYyBvcGVuKCk6IHZvaWQge1xuICAgIGlmICgodGhpcy5zdGF0ZSAhPT0gJ2Nsb3NlZCcgJiYgdGhpcy5zdGF0ZSAhPT0gJ2Nsb3NpbmcnKSB8fCAhdGhpcy5fb3ZlcmxheSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy53aWxsT3Blbi5lbWl0KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDbG9zZSB0aGUgb3RoZXIgcG9wb3ZlcnNcbiAgICBmb3IgKGNvbnN0IHBvcG92ZXIgb2YgQXJyYXkuZnJvbShwb3BvdmVyc1JlZikpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gcG9wb3Zlci5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3RhdGUnKSBhcyBTYmJPcGVuZWRDbG9zZWRTdGF0ZTtcbiAgICAgIGlmIChzdGF0ZSAmJiAoc3RhdGUgPT09ICdvcGVuZWQnIHx8IHN0YXRlID09PSAnb3BlbmluZycpKSB7XG4gICAgICAgIHBvcG92ZXIuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gJ29wZW5pbmcnO1xuICAgIHRoaXMuaW5lcnQgPSB0cnVlO1xuICAgIHRoaXMuX3NldFBvcG92ZXJQb3NpdGlvbigpO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpO1xuICAgIHRoaXMuX25leHRGb2N1c2VkRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9za2lwQ2xvc2VGb2N1cyA9IGZhbHNlO1xuICB9XG5cbiAgLyoqIENsb3NlcyB0aGUgcG9wb3Zlci4gKi9cbiAgcHVibGljIGNsb3NlKHRhcmdldD86IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuZWQnICYmIHRoaXMuc3RhdGUgIT09ICdvcGVuaW5nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3BvcG92ZXJDbG9zZUVsZW1lbnQgPSB0YXJnZXQ7XG4gICAgaWYgKCF0aGlzLndpbGxDbG9zZS5lbWl0KHsgY2xvc2VUYXJnZXQ6IHRhcmdldCB9KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAnY2xvc2luZyc7XG4gICAgdGhpcy5pbmVydCA9IHRydWU7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuICB9XG5cbiAgLy8gQ2xvc2VzIHRoZSBwb3BvdmVyIG9uIFwiRXNjXCIga2V5IHByZXNzZWQgYW5kIHRyYXBzIGZvY3VzIHdpdGhpbiB0aGUgcG9wb3Zlci5cbiAgcHJpdmF0ZSBfb25LZXlkb3duRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29wZW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlbW92ZXMgdHJpZ2dlciBjbGljayBsaXN0ZW5lciBvbiB0cmlnZ2VyIGNoYW5nZS5cbiAgcHJpdmF0ZSBfcmVtb3ZlVHJpZ2dlckNsaWNrTGlzdGVuZXIoXG4gICAgbmV3VmFsdWU/OiBzdHJpbmcgfCBIVE1MRWxlbWVudCxcbiAgICBvbGRWYWx1ZT86IHN0cmluZyB8IEhUTUxFbGVtZW50LFxuICApOiB2b2lkIHtcbiAgICBpZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7XG4gICAgICB0aGlzLl9wb3BvdmVyQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICAgIHRoaXMuX29wZW5TdGF0ZUNvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgICB0aGlzLl9jb25maWd1cmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICBpZiAoIXRoaXMuaWQpIHtcbiAgICAgIHRoaXMuaWQgPSB0aGlzLmlkIHx8IGBzYmItcG9wb3Zlci0keysrbmV4dElkfWA7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdHJpZ2dlciBlbGVtZW50IGFuZCBhdHRhY2ggZXZlbnQgbGlzdGVuZXJzXG4gICAgdGhpcy5fY29uZmlndXJlKCk7XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zZWQnO1xuICAgIHBvcG92ZXJzUmVmLmFkZCh0aGlzIGFzIFNiYlBvcG92ZXJFbGVtZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygndHJpZ2dlcicpKSB7XG4gICAgICB0aGlzLl9yZW1vdmVUcmlnZ2VyQ2xpY2tMaXN0ZW5lcih0aGlzLnRyaWdnZXIsIGNoYW5nZWRQcm9wZXJ0aWVzLmdldCgndHJpZ2dlcicpKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdob3ZlclRyaWdnZXInKSkge1xuICAgICAgdGhpcy5fY29uZmlndXJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKHRoaXMuX2hvdmVyVHJpZ2dlcikge1xuICAgICAgdGhpcy5fb3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgKCkgPT4gdGhpcy5fb25PdmVybGF5TW91c2VFbnRlcigpKTtcbiAgICAgIHRoaXMuX292ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsICgpID0+IHRoaXMuX29uT3ZlcmxheU1vdXNlTGVhdmUoKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5fcG9wb3ZlckNvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5fb3BlblN0YXRlQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLl9mb2N1c0hhbmRsZXIuZGlzY29ubmVjdCgpO1xuICAgIHBvcG92ZXJzUmVmLmRlbGV0ZSh0aGlzIGFzIFNiYlBvcG92ZXJFbGVtZW50KTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSB0cmlnZ2VyIGlzIHZhbGlkIGFuZCBhdHRhY2ggY2xpY2sgZXZlbnQgbGlzdGVuZXJzLlxuICBwcml2YXRlIF9jb25maWd1cmUoKTogdm9pZCB7XG4gICAgaWYgKGlzU2VydmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICh0aGlzLmh5ZHJhdGlvblJlcXVpcmVkKSB7XG4gICAgICB0aGlzLmh5ZHJhdGlvbkNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5fY29uZmlndXJlKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJlbW92ZUFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXModGhpcy5fdHJpZ2dlckVsZW1lbnQpO1xuXG4gICAgaWYgKCF0aGlzLnRyaWdnZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudCA9IGZpbmRSZWZlcmVuY2VkRWxlbWVudCh0aGlzLnRyaWdnZXIpO1xuXG4gICAgaWYgKCF0aGlzLl90cmlnZ2VyRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldEFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXModGhpcy5fdHJpZ2dlckVsZW1lbnQsICdkaWFsb2cnLCB0aGlzLmlkLCB0aGlzLnN0YXRlKTtcblxuICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIHRyaWdnZXIgY2FuIGJlIGhvdmVyZWQuIFNvbWUgZGV2aWNlcyBtaWdodCBpbnRlcnByZXQgdGhlIG1lZGlhIHF1ZXJ5IChob3ZlcjogaG92ZXIpIGRpZmZlcmVudGx5LFxuICAgIC8vIGFuZCBub3QgcmVzcGVjdCB0aGUgZmFsbGJhY2sgbWVjaGFuaXNtIG9uIHRoZSBjbGljay4gVGhlcmVmb3JlLCB0aGUgZm9sbG93aW5nIGlzIHByZWZlcnJlZCB0byBpZGVudGlmeVxuICAgIC8vIGFsbCBub24tdG91Y2hzY3JlZW4gZGV2aWNlcy5cbiAgICB0aGlzLl9ob3ZlclRyaWdnZXIgPSB0aGlzLmhvdmVyVHJpZ2dlciAmJiAhd2luZG93Lm1hdGNoTWVkaWEoJyhwb2ludGVyOiBjb2Fyc2UpJykubWF0Y2hlcztcblxuICAgIHRoaXMuX3BvcG92ZXJDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX3BvcG92ZXJDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGlmICh0aGlzLl9ob3ZlclRyaWdnZXIpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCB0aGlzLl9vblRyaWdnZXJNb3VzZUVudGVyLCB7XG4gICAgICAgIHNpZ25hbDogdGhpcy5fcG9wb3ZlckNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCB0aGlzLl9vblRyaWdnZXJNb3VzZUxlYXZlLCB7XG4gICAgICAgIHNpZ25hbDogdGhpcy5fcG9wb3ZlckNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdrZXlkb3duJyxcbiAgICAgICAgKGV2dDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgIGlmIChldnQuY29kZSA9PT0gJ1NwYWNlJyB8fCBldnQuY29kZSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc2lnbmFsOiB0aGlzLl9wb3BvdmVyQ29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAnY2xpY2snLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzaWduYWw6IHRoaXMuX3BvcG92ZXJDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYXR0YWNoV2luZG93RXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuX29wZW5TdGF0ZUNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKCkgPT4gdGhpcy5fc2V0UG9wb3ZlclBvc2l0aW9uKCksIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5TdGF0ZUNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB0aGlzLl9zZXRQb3BvdmVyUG9zaXRpb24oKSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblN0YXRlQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHRoaXMuX29uS2V5ZG93bkV2ZW50KGV2ZW50KSwge1xuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuU3RhdGVDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcblxuICAgIC8vIENsb3NlIHBvcG92ZXIgb24gYmFja2Ryb3AgY2xpY2tcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLl9wb2ludGVyRG93bkxpc3RlbmVyLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5TdGF0ZUNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCB0aGlzLl9jbG9zZU9uQmFja2Ryb3BDbGljaywge1xuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuU3RhdGVDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIENsb3NlIHRoZSBwb3BvdmVyIG9uIGNsaWNrIG9mIGFueSBlbGVtZW50IHRoYXQgaGFzIHRoZSAnc2JiLXBvcG92ZXItY2xvc2UnIGF0dHJpYnV0ZS5cbiAgcHJpdmF0ZSBfY2xvc2VPblNiYlBvcG92ZXJDbG9zZUNsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNsb3NlRWxlbWVudCA9IGNvbXBvc2VkUGF0aEhhc0F0dHJpYnV0ZShldmVudCwgJ3NiYi1wb3BvdmVyLWNsb3NlJywgdGhpcyk7XG5cbiAgICBpZiAoY2xvc2VFbGVtZW50ICYmICFjbG9zZUVsZW1lbnQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VUaW1lb3V0KTtcbiAgICAgIHRoaXMuY2xvc2UoY2xvc2VFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgcG9pbnRlcmRvd24gZXZlbnQgdGFyZ2V0IGlzIHRyaWdnZXJlZCBvbiB0aGUgcG9wb3Zlci5cbiAgcHJpdmF0ZSBfcG9pbnRlckRvd25MaXN0ZW5lciA9IChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25Qb3BvdmVyID0gaXNFdmVudE9uRWxlbWVudCh0aGlzLl9vdmVybGF5LCBldmVudCk7XG4gIH07XG5cbiAgLy8gQ2xvc2UgcG9wb3ZlciBvbiBiYWNrZHJvcCBjbGljay5cbiAgcHJpdmF0ZSBfY2xvc2VPbkJhY2tkcm9wQ2xpY2sgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmICghdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25Qb3BvdmVyICYmICFpc0V2ZW50T25FbGVtZW50KHRoaXMuX292ZXJsYXksIGV2ZW50KSkge1xuICAgICAgdGhpcy5fbmV4dEZvY3VzZWRFbGVtZW50ID0gZXZlbnRcbiAgICAgICAgLmNvbXBvc2VkUGF0aCgpXG4gICAgICAgIC5maWx0ZXIoKGVsKSA9PiBlbCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MRWxlbWVudClcbiAgICAgICAgLmZpbmQoKGVsKSA9PiAoZWwgYXMgSFRNTEVsZW1lbnQpLm1hdGNoZXMoSVNfRk9DVVNBQkxFX1FVRVJZKSkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VUaW1lb3V0KTtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBfb25UcmlnZ2VyTW91c2VFbnRlciA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ2Nsb3NlZCcgfHwgdGhpcy5zdGF0ZSA9PT0gJ2Nsb3NpbmcnKSB7XG4gICAgICB0aGlzLl9vcGVuVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5vcGVuKCksIHRoaXMub3BlbkRlbGF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2Nsb3NlVGltZW91dCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgX29uVHJpZ2dlck1vdXNlTGVhdmUgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdvcGVuZWQnIHx8IHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJykge1xuICAgICAgdGhpcy5fY2xvc2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmNsb3NlKCksIHRoaXMuY2xvc2VEZWxheSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9vcGVuVGltZW91dCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgX29uT3ZlcmxheU1vdXNlRW50ZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuaW5nJykge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2Nsb3NlVGltZW91dCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgX29uT3ZlcmxheU1vdXNlTGVhdmUgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuaW5nJykge1xuICAgICAgdGhpcy5fY2xvc2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmNsb3NlKCksIHRoaXMuY2xvc2VEZWxheSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFNldCBwb3BvdmVyIHBvc2l0aW9uICh4LCB5KSB0byAnMCcgb25jZSB0aGUgcG9wb3ZlciBpcyBjbG9zZWQgYW5kIHRoZSB0cmFuc2l0aW9uIGVuZGVkIHRvIHByZXZlbnQgdGhlXG4gIC8vIHZpZXdwb3J0IGZyb20gb3ZlcmZsb3dpbmcuIEFuZCBzZXQgdGhlIGZvY3VzIHRvIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCBvbmNlIHRoZSBwb3BvdmVyIGlzIG9wZW4uXG4gIC8vIEluIHJhcmUgY2FzZXMgaXQgY2FuIGJlIHRoYXQgdGhlIGFuaW1hdGlvbkVuZCBldmVudCBpcyB0cmlnZ2VyZWQgdHdpY2UuXG4gIC8vIFRvIGF2b2lkIGVudGVyaW5nIGEgY29ycnVwdCBzdGF0ZSwgZXhpdCB3aGVuIHN0YXRlIGlzIG5vdCBleHBlY3RlZC5cbiAgcHJpdmF0ZSBfb25Qb3BvdmVyQW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnb3BlbicgJiYgdGhpcy5zdGF0ZSA9PT0gJ29wZW5pbmcnKSB7XG4gICAgICB0aGlzLnN0YXRlID0gJ29wZW5lZCc7XG4gICAgICB0aGlzLmRpZE9wZW4uZW1pdCgpO1xuICAgICAgdGhpcy5pbmVydCA9IGZhbHNlO1xuICAgICAgdGhpcy5fYXR0YWNoV2luZG93RXZlbnRzKCk7XG4gICAgICB0aGlzLl9zZXRQb3BvdmVyRm9jdXMoKTtcbiAgICAgIHRoaXMuX2ZvY3VzSGFuZGxlci50cmFwKHRoaXMsIHtcbiAgICAgICAgcG9zdEZpbHRlcjogKGVsKSA9PiBlbCAhPT0gdGhpcy5fb3ZlcmxheSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ2Nsb3NlJyAmJiB0aGlzLnN0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgIHRoaXMuc3RhdGUgPSAnY2xvc2VkJztcbiAgICAgIHRoaXMuX292ZXJsYXk/LmZpcnN0RWxlbWVudENoaWxkPy5zY3JvbGxUbygwLCAwKTtcbiAgICAgIHRoaXMuX292ZXJsYXk/LnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcblxuICAgICAgaWYgKCF0aGlzLl9za2lwQ2xvc2VGb2N1cykge1xuICAgICAgICBjb25zdCBlbGVtZW50VG9Gb2N1cyA9IHRoaXMuX25leHRGb2N1c2VkRWxlbWVudCB8fCB0aGlzLl90cmlnZ2VyRWxlbWVudDtcblxuICAgICAgICBzZXRNb2RhbGl0eU9uTmV4dEZvY3VzKGVsZW1lbnRUb0ZvY3VzKTtcbiAgICAgICAgLy8gVG8gZW5hYmxlIGZvY3VzaW5nIG90aGVyIGVsZW1lbnQgdGhhbiB0aGUgdHJpZ2dlciwgd2UgbmVlZCB0byBjYWxsIGZvY3VzKCkgYSBzZWNvbmQgdGltZS5cbiAgICAgICAgZWxlbWVudFRvRm9jdXM/LmZvY3VzKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGlkQ2xvc2UuZW1pdCh7IGNsb3NlVGFyZ2V0OiB0aGlzLl9wb3BvdmVyQ2xvc2VFbGVtZW50IH0pO1xuICAgICAgdGhpcy5fb3BlblN0YXRlQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICAgIHRoaXMuX2ZvY3VzSGFuZGxlci5kaXNjb25uZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IGZvY3VzIG9uIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudC5cbiAgcHJpdmF0ZSBfc2V0UG9wb3ZlckZvY3VzKCk6IHZvaWQge1xuICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlID1cbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJ1tzYmItcG9wb3Zlci1jbG9zZV0nKSB8fFxuICAgICAgZ2V0Rmlyc3RGb2N1c2FibGVFbGVtZW50KFxuICAgICAgICBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pLmZpbHRlcigoZSk6IGUgaXMgSFRNTEVsZW1lbnQgPT4gZSBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MRWxlbWVudCksXG4gICAgICApO1xuICAgIGlmIChmaXJzdEZvY3VzYWJsZSkge1xuICAgICAgc2V0TW9kYWxpdHlPbk5leHRGb2N1cyhmaXJzdEZvY3VzYWJsZSk7XG4gICAgICBmaXJzdEZvY3VzYWJsZS5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vdmVybGF5LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgc2V0TW9kYWxpdHlPbk5leHRGb2N1cyh0aGlzLl9vdmVybGF5KTtcbiAgICAgIHRoaXMuX292ZXJsYXkuZm9jdXMoKTtcblxuICAgICAgLy8gV2hlbiBhIGJsdXIgb2NjdXJzLCB3ZSBrbm93IHRoYXQgdGhlIHBvcG92ZXIgaGFzIHRvIGJlIGNsb3NlZCxcbiAgICAgIC8vIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGludGVyYWN0aXZlIGVsZW1lbnRzIGluc2lkZSB0aGUgcG9wb3Zlci5cbiAgICAgIC8vIFdoZW4gYSB3aW5kb3cvdGFiIGNoYW5nZSBvY2N1cnMsIGEgYmx1ciBldmVudCBpcyBhbHNvIGZpcmVkLiBIb3dldmVyLCB3aGVuIHRoZSBjdXJyZW50IHdpbmRvdy90YWJcbiAgICAgIC8vIGJlY29tZXMgYWN0aXZlIGFnYWluLCBpdCBmb2N1c2VzIG9uY2UgYWdhaW4gdGhlIHBvcG92ZXIuXG4gICAgICAvLyBUaGVyZWZvcmUsIHdlIGNhbm5vdCBsaXN0ZW4gdG8gdGhlIGJsdXIgZXZlbnQgb25seSBvbmNlLlxuICAgICAgLy8gVG8gcHJldmVudCBhY2NpZGVudGFsbHkgY2xvc2luZyB0aGUgcG9wb3Zlciwgd2UgbmVlZCB0byBjaGVjayBmb3IgdGhlIHdpbmRvdy90YWIgc3RhdGUuXG4gICAgICAvLyBXZSBjYW4gYWNoaWV2ZSB0aGlzIGJ5IHVzaW5nIHZpc2liaWxpdHlTdGF0ZSwgd2hpY2ggb25seSB3b3JrcyB3aXRoIHNldFRpbWVvdXQoKS5cbiAgICAgIHRoaXMuX292ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2JsdXInLFxuICAgICAgICAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlICE9PSAnaGlkZGVuJykge1xuICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5Py5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSAnb3BlbmVkJyB8fCB0aGlzLnN0YXRlID09PSAnb3BlbmluZycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9za2lwQ2xvc2VGb2N1cyA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuU3RhdGVDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0UG9wb3ZlclBvc2l0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fb3ZlcmxheSB8fCAhdGhpcy5fdHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwb3BvdmVyUG9zaXRpb24gPSBnZXRFbGVtZW50UG9zaXRpb24oXG4gICAgICB0aGlzLl9vdmVybGF5LFxuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQsXG4gICAgICB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3IoJy5zYmItcG9wb3Zlcl9fY29udGFpbmVyJykhLFxuICAgICAge1xuICAgICAgICB2ZXJ0aWNhbE9mZnNldDogVkVSVElDQUxfT0ZGU0VULFxuICAgICAgICBob3Jpem9udGFsT2Zmc2V0OiBIT1JJWk9OVEFMX09GRlNFVCxcbiAgICAgICAgY2VudGVyZWQ6IHRydWUsXG4gICAgICAgIHJlc3BvbnNpdmVIZWlnaHQ6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcG9zaXRpb24nLCBwb3BvdmVyUG9zaXRpb24uYWxpZ25tZW50LnZlcnRpY2FsKTtcblxuICAgIGNvbnN0IGFycm93WFBvc2l0aW9uID1cbiAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLVxuICAgICAgcG9wb3ZlclBvc2l0aW9uLmxlZnQgK1xuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuY2xpZW50V2lkdGggLyAyIC1cbiAgICAgIDg7IC8vIGhhbGYgdGhlIHNpemUgb2YgdGhlIHBvcG92ZXIgYXJyb3dcblxuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2JiLXBvcG92ZXItcG9zaXRpb24teCcsIGAke3BvcG92ZXJQb3NpdGlvbi5sZWZ0fXB4YCk7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zYmItcG9wb3Zlci1wb3NpdGlvbi15JywgYCR7cG9wb3ZlclBvc2l0aW9uLnRvcH1weGApO1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2JiLXBvcG92ZXItYXJyb3ctcG9zaXRpb24teCcsIGAke2Fycm93WFBvc2l0aW9ufXB4YCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCBjbG9zZUJ1dHRvbiA9IGh0bWxgXG4gICAgICA8c3BhbiBjbGFzcz1cInNiYi1wb3BvdmVyX19jbG9zZVwiPlxuICAgICAgICA8c2JiLXNlY29uZGFyeS1idXR0b25cbiAgICAgICAgICBhcmlhLWxhYmVsPSR7dGhpcy5hY2Nlc3NpYmlsaXR5Q2xvc2VMYWJlbCB8fCBpMThuQ2xvc2VQb3BvdmVyW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfVxuICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBpY29uLW5hbWU9XCJjcm9zcy1zbWFsbFwiXG4gICAgICAgICAgc2JiLXBvcG92ZXItY2xvc2VcbiAgICAgICAgPjwvc2JiLXNlY29uZGFyeS1idXR0b24+XG4gICAgICA8L3NwYW4+XG4gICAgYDtcblxuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1wb3BvdmVyX19jb250YWluZXJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIEBhbmltYXRpb25lbmQ9JHsoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSA9PiB0aGlzLl9vblBvcG92ZXJBbmltYXRpb25FbmQoZXZlbnQpfVxuICAgICAgICAgIGNsYXNzPVwic2JiLXBvcG92ZXJcIlxuICAgICAgICAgIHJvbGU9XCJ0b29sdGlwXCJcbiAgICAgICAgICAke3JlZigoZWw/OiBFbGVtZW50KSA9PiAodGhpcy5fb3ZlcmxheSA9IGVsIGFzIEhUTUxEaXZFbGVtZW50KSl9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBAY2xpY2s9JHsoZXZlbnQ6IEV2ZW50KSA9PiB0aGlzLl9jbG9zZU9uU2JiUG9wb3ZlckNsb3NlQ2xpY2soZXZlbnQpfVxuICAgICAgICAgICAgY2xhc3M9XCJzYmItcG9wb3Zlcl9fY29udGVudFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgJHshdGhpcy5oaWRlQ2xvc2VCdXR0b24gJiYgIXRoaXMuX2hvdmVyVHJpZ2dlciA/IGNsb3NlQnV0dG9uIDogbm90aGluZ31cbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICA8c2xvdD5ObyBjb250ZW50PC9zbG90PlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1wb3BvdmVyJzogU2JiUG9wb3ZlckVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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