@sbb-esta/lyne-elements 2.5.1 → 2.6.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 (226) hide show
  1. package/autocomplete/autocomplete-base-element.d.ts +19 -20
  2. package/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  3. package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts.map +1 -1
  4. package/autocomplete-grid/autocomplete-grid-button.js +7 -7
  5. package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts +2 -2
  6. package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts.map +1 -1
  7. package/autocomplete.js +143 -134
  8. package/chip/chip/chip.d.ts +32 -0
  9. package/chip/chip/chip.d.ts.map +1 -0
  10. package/chip/chip-group/chip-group.d.ts +100 -0
  11. package/chip/chip-group/chip-group.d.ts.map +1 -0
  12. package/chip/chip-group.d.ts +2 -0
  13. package/chip/chip-group.d.ts.map +1 -0
  14. package/chip/chip-group.js +225 -0
  15. package/chip/chip.d.ts +2 -0
  16. package/chip/chip.d.ts.map +1 -0
  17. package/chip/chip.js +85 -0
  18. package/chip.d.ts +3 -0
  19. package/chip.d.ts.map +1 -0
  20. package/chip.js +2 -0
  21. package/clock/clock.d.ts.map +1 -1
  22. package/clock.js +1 -1
  23. package/core/controllers/id-observer-controller.d.ts +21 -0
  24. package/core/controllers/id-observer-controller.d.ts.map +1 -0
  25. package/core/controllers/media-matchers-controller.d.ts.map +1 -1
  26. package/core/controllers.d.ts +2 -1
  27. package/core/controllers.d.ts.map +1 -1
  28. package/core/controllers.js +135 -80
  29. package/core/datetime/native-date-adapter.d.ts.map +1 -1
  30. package/core/datetime.js +8 -3
  31. package/core/dom/find-referenced-element.d.ts +1 -0
  32. package/core/dom/find-referenced-element.d.ts.map +1 -1
  33. package/core/dom/input-element.d.ts +3 -1
  34. package/core/dom/input-element.d.ts.map +1 -1
  35. package/core/i18n/i18n.d.ts +3 -0
  36. package/core/i18n/i18n.d.ts.map +1 -1
  37. package/core/i18n.js +135 -117
  38. package/core/mixins/form-associated-input-mixin.d.ts.map +1 -1
  39. package/core/mixins.js +64 -59
  40. package/core/overlay/overlay-trigger-attributes.d.ts +1 -1
  41. package/core/overlay/overlay-trigger-attributes.d.ts.map +1 -1
  42. package/core/overlay/position.d.ts +1 -1
  43. package/core/overlay/position.d.ts.map +1 -1
  44. package/core/styles/core.scss +89 -24
  45. package/core/styles/image.scss +1 -1
  46. package/core/styles/mixins/table.scss +63 -26
  47. package/core/styles/table.scss +16 -0
  48. package/core/testing/scroll.d.ts +1 -0
  49. package/core/testing/scroll.d.ts.map +1 -1
  50. package/core/testing/wait-for-image-ready.d.ts.map +1 -1
  51. package/core/testing.js +8 -5
  52. package/core.css +90 -34
  53. package/custom-elements.json +1588 -650
  54. package/datepicker/datepicker/datepicker.d.ts +4 -4
  55. package/datepicker/datepicker/datepicker.d.ts.map +1 -1
  56. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts +0 -3
  57. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  58. package/datepicker/datepicker-toggle.js +30 -34
  59. package/datepicker/datepicker.js +103 -105
  60. package/development/autocomplete/autocomplete-base-element.d.ts +19 -20
  61. package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  62. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts.map +1 -1
  63. package/development/autocomplete-grid/autocomplete-grid-button.js +3 -3
  64. package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts +2 -2
  65. package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts.map +1 -1
  66. package/development/autocomplete-grid/autocomplete-grid-optgroup.js +1 -1
  67. package/development/autocomplete.js +103 -79
  68. package/development/chip/chip/chip.d.ts +32 -0
  69. package/development/chip/chip/chip.d.ts.map +1 -0
  70. package/development/chip/chip-group/chip-group.d.ts +100 -0
  71. package/development/chip/chip-group/chip-group.d.ts.map +1 -0
  72. package/development/chip/chip-group.d.ts +2 -0
  73. package/development/chip/chip-group.d.ts.map +1 -0
  74. package/development/chip/chip-group.js +349 -0
  75. package/development/chip/chip.d.ts +2 -0
  76. package/development/chip/chip.d.ts.map +1 -0
  77. package/development/chip/chip.js +212 -0
  78. package/development/chip.d.ts +3 -0
  79. package/development/chip.d.ts.map +1 -0
  80. package/development/chip.js +3 -0
  81. package/development/clock/clock.d.ts.map +1 -1
  82. package/development/clock.js +5 -2
  83. package/development/core/controllers/id-observer-controller.d.ts +21 -0
  84. package/development/core/controllers/id-observer-controller.d.ts.map +1 -0
  85. package/development/core/controllers/media-matchers-controller.d.ts.map +1 -1
  86. package/development/core/controllers.d.ts +2 -1
  87. package/development/core/controllers.d.ts.map +1 -1
  88. package/development/core/controllers.js +116 -44
  89. package/development/core/datetime/native-date-adapter.d.ts.map +1 -1
  90. package/development/core/datetime.js +6 -2
  91. package/development/core/dom/find-referenced-element.d.ts +1 -0
  92. package/development/core/dom/find-referenced-element.d.ts.map +1 -1
  93. package/development/core/dom/input-element.d.ts +3 -1
  94. package/development/core/dom/input-element.d.ts.map +1 -1
  95. package/development/core/dom.js +1 -1
  96. package/development/core/i18n/i18n.d.ts +3 -0
  97. package/development/core/i18n/i18n.d.ts.map +1 -1
  98. package/development/core/i18n.js +23 -2
  99. package/development/core/mixins/form-associated-input-mixin.d.ts.map +1 -1
  100. package/development/core/mixins.js +12 -3
  101. package/development/core/overlay/overlay-trigger-attributes.d.ts +1 -1
  102. package/development/core/overlay/overlay-trigger-attributes.d.ts.map +1 -1
  103. package/development/core/overlay/position.d.ts +1 -1
  104. package/development/core/overlay/position.d.ts.map +1 -1
  105. package/development/core/overlay.js +1 -1
  106. package/development/core/testing/scroll.d.ts +1 -0
  107. package/development/core/testing/scroll.d.ts.map +1 -1
  108. package/development/core/testing/wait-for-image-ready.d.ts.map +1 -1
  109. package/development/core/testing.js +6 -2
  110. package/development/datepicker/datepicker/datepicker.d.ts +4 -4
  111. package/development/datepicker/datepicker/datepicker.d.ts.map +1 -1
  112. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts +0 -3
  113. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  114. package/development/datepicker/datepicker-toggle.js +4 -12
  115. package/development/datepicker/datepicker.js +46 -43
  116. package/development/dialog/dialog-title/dialog-title.d.ts +0 -1
  117. package/development/dialog/dialog-title/dialog-title.d.ts.map +1 -1
  118. package/development/dialog/dialog-title.js +2 -5
  119. package/development/expansion-panel/expansion-panel/expansion-panel.d.ts +0 -2
  120. package/development/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -1
  121. package/development/expansion-panel/expansion-panel.js +2 -7
  122. package/development/flip-card/flip-card-details/flip-card-details.d.ts.map +1 -1
  123. package/development/flip-card/flip-card-details.js +3 -3
  124. package/development/form-field/form-field/form-field.d.ts.map +1 -1
  125. package/development/form-field/form-field.js +12 -145
  126. package/development/header/header/header.d.ts +6 -7
  127. package/development/header/header/header.d.ts.map +1 -1
  128. package/development/header/header.js +45 -34
  129. package/development/menu/menu/menu.d.ts +7 -8
  130. package/development/menu/menu/menu.d.ts.map +1 -1
  131. package/development/menu/menu.js +42 -41
  132. package/development/navigation/navigation/navigation.d.ts +7 -8
  133. package/development/navigation/navigation/navigation.d.ts.map +1 -1
  134. package/development/navigation/navigation-marker/navigation-marker.d.ts.map +1 -1
  135. package/development/navigation/navigation-marker.js +3 -3
  136. package/development/navigation/navigation-section/navigation-section.d.ts +8 -9
  137. package/development/navigation/navigation-section/navigation-section.d.ts.map +1 -1
  138. package/development/navigation/navigation-section.js +50 -47
  139. package/development/navigation/navigation.js +42 -40
  140. package/development/option/optgroup/optgroup-base-element.d.ts.map +1 -1
  141. package/development/option/optgroup/optgroup.d.ts +2 -2
  142. package/development/option/optgroup/optgroup.d.ts.map +1 -1
  143. package/development/option/optgroup.js +3 -3
  144. package/development/option/option/option-base-element.d.ts.map +1 -1
  145. package/development/option/option.js +3 -3
  146. package/development/paginator/paginator.js +12 -1
  147. package/development/popover/popover/popover.d.ts +8 -7
  148. package/development/popover/popover/popover.d.ts.map +1 -1
  149. package/development/popover/popover.js +28 -35
  150. package/development/select/select.d.ts +1 -1
  151. package/development/select/select.d.ts.map +1 -1
  152. package/development/select.js +15 -15
  153. package/development/selection-expansion-panel/selection-expansion-panel.d.ts +0 -2
  154. package/development/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  155. package/development/selection-expansion-panel.js +2 -7
  156. package/development/sidebar/sidebar/sidebar.d.ts.map +1 -1
  157. package/development/sidebar/sidebar.js +3 -3
  158. package/development/stepper/step/step.d.ts +15 -1
  159. package/development/stepper/step/step.d.ts.map +1 -1
  160. package/development/stepper/step-label.js +2 -2
  161. package/development/stepper/step.js +23 -3
  162. package/development/stepper/stepper/stepper.d.ts +1 -0
  163. package/development/stepper/stepper/stepper.d.ts.map +1 -1
  164. package/development/stepper/stepper.js +5 -1
  165. package/development/table/table-wrapper.js +2 -1
  166. package/development/time-input/time-input.d.ts +6 -8
  167. package/development/time-input/time-input.d.ts.map +1 -1
  168. package/development/time-input.js +42 -44
  169. package/dialog/dialog-title/dialog-title.d.ts +0 -1
  170. package/dialog/dialog-title/dialog-title.d.ts.map +1 -1
  171. package/dialog/dialog-title.js +18 -21
  172. package/expansion-panel/expansion-panel/expansion-panel.d.ts +0 -2
  173. package/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -1
  174. package/expansion-panel/expansion-panel.js +53 -56
  175. package/flip-card/flip-card-details/flip-card-details.d.ts.map +1 -1
  176. package/flip-card/flip-card-details.js +8 -8
  177. package/form-field/form-field/form-field.d.ts.map +1 -1
  178. package/form-field/form-field.js +102 -97
  179. package/header/header/header.d.ts +6 -7
  180. package/header/header/header.d.ts.map +1 -1
  181. package/header/header.js +72 -70
  182. package/index.d.ts +4 -0
  183. package/index.js +4 -0
  184. package/menu/menu/menu.d.ts +7 -8
  185. package/menu/menu/menu.d.ts.map +1 -1
  186. package/menu/menu.js +73 -73
  187. package/navigation/navigation/navigation.d.ts +7 -8
  188. package/navigation/navigation/navigation.d.ts.map +1 -1
  189. package/navigation/navigation-marker/navigation-marker.d.ts.map +1 -1
  190. package/navigation/navigation-marker.js +4 -4
  191. package/navigation/navigation-section/navigation-section.d.ts +8 -9
  192. package/navigation/navigation-section/navigation-section.d.ts.map +1 -1
  193. package/navigation/navigation-section.js +75 -77
  194. package/navigation/navigation.js +70 -70
  195. package/option/optgroup/optgroup-base-element.d.ts.map +1 -1
  196. package/option/optgroup/optgroup.d.ts +2 -2
  197. package/option/optgroup/optgroup.d.ts.map +1 -1
  198. package/option/optgroup.js +13 -13
  199. package/option/option/option-base-element.d.ts.map +1 -1
  200. package/option/option.js +2 -2
  201. package/package.json +16 -1
  202. package/paginator/paginator.js +44 -44
  203. package/popover/popover/popover.d.ts +8 -7
  204. package/popover/popover/popover.d.ts.map +1 -1
  205. package/popover/popover.js +73 -73
  206. package/select/select.d.ts +1 -1
  207. package/select/select.d.ts.map +1 -1
  208. package/select.js +68 -67
  209. package/selection-expansion-panel/selection-expansion-panel.d.ts +0 -2
  210. package/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  211. package/selection-expansion-panel.js +10 -13
  212. package/sidebar/sidebar/sidebar.d.ts.map +1 -1
  213. package/sidebar/sidebar.js +2 -2
  214. package/standard-theme.css +166 -79
  215. package/stepper/step/step.d.ts +15 -1
  216. package/stepper/step/step.d.ts.map +1 -1
  217. package/stepper/step-label.js +1 -1
  218. package/stepper/step.js +36 -22
  219. package/stepper/stepper/stepper.d.ts +1 -0
  220. package/stepper/stepper/stepper.d.ts.map +1 -1
  221. package/stepper/stepper.js +19 -16
  222. package/table/table-wrapper.js +4 -4
  223. package/table.css +75 -44
  224. package/time-input/time-input.d.ts +6 -8
  225. package/time-input/time-input.d.ts.map +1 -1
  226. package/time-input.js +66 -73
@@ -9,12 +9,13 @@ import { __runInitializers, __esDecorate } from "tslib";
9
9
  import { property, customElement } from "lit/decorators.js";
10
10
  import { getNextElementIndex } from "./core/a11y.js";
11
11
  import { hostAttributes, forceType } from "./core/decorators.js";
12
- import { isZeroAnimationDuration, findReferencedElement, isSafari } from "./core/dom.js";
13
- import { isEventOnElement, setOverlayPosition, removeAriaComboBoxAttributes, overlayGapFixCorners, setAriaComboBoxAttributes } from "./core/overlay.js";
12
+ import { isZeroAnimationDuration, isSafari } from "./core/dom.js";
13
+ import { isEventOnElement, removeAriaComboBoxAttributes, setOverlayPosition, overlayGapFixCorners, setAriaComboBoxAttributes } from "./core/overlay.js";
14
+ import { ResizeController } from "@lit-labs/observers/resize-controller.js";
14
15
  import { css, isServer, nothing, html } from "lit";
15
16
  import { ref } from "lit/directives/ref.js";
16
17
  import { SbbOpenCloseBaseElement } from "./core/base-elements.js";
17
- import { SbbConnectedAbortController, SbbEscapableOverlayController } from "./core/controllers.js";
18
+ import { SbbConnectedAbortController, SbbIdReferenceController, SbbEscapableOverlayController } from "./core/controllers.js";
18
19
  import { SbbNegativeMixin, SbbHydrationMixin } from "./core/mixins.js";
19
20
  const style = css`*,
20
21
  ::before,
@@ -293,6 +294,7 @@ const style = css`*,
293
294
  }
294
295
  }`;
295
296
  const ariaRoleOnHost$1 = isSafari;
297
+ const inputAutocompleteEvent = "inputAutocomplete";
296
298
  let SbbAutocompleteBaseElement = (() => {
297
299
  var _origin_accessor_storage, _trigger_accessor_storage, _preserveIconSpace_accessor_storage, _a;
298
300
  let _classDecorators = [hostAttributes({
@@ -320,10 +322,27 @@ let SbbAutocompleteBaseElement = (() => {
320
322
  __privateSet(this, _origin_accessor_storage, __runInitializers(this, _origin_initializers, null));
321
323
  __privateSet(this, _trigger_accessor_storage, (__runInitializers(this, _origin_extraInitializers), __runInitializers(this, _trigger_initializers, null)));
322
324
  __privateSet(this, _preserveIconSpace_accessor_storage, (__runInitializers(this, _trigger_extraInitializers), __runInitializers(this, _preserveIconSpace_initializers, false)));
323
- this._originElement = __runInitializers(this, _preserveIconSpace_extraInitializers);
325
+ this._triggerElement = __runInitializers(this, _preserveIconSpace_extraInitializers);
324
326
  this.abort = new SbbConnectedAbortController(this);
327
+ this._originResizeObserver = new ResizeController(this, {
328
+ target: null,
329
+ skipInitial: true,
330
+ callback: () => {
331
+ if (this.state === "opened") {
332
+ this._setOverlayPosition();
333
+ }
334
+ }
335
+ });
336
+ this._triggerAttributeObserver = !isServer ? new MutationObserver((mutations) => {
337
+ const input = mutations[0].target;
338
+ if (input.hasAttribute("disabled") || input.hasAttribute("readonly")) {
339
+ this.close();
340
+ }
341
+ }) : null;
342
+ this._triggerIdReferenceController = new SbbIdReferenceController(this, "trigger");
343
+ this._originIdReferenceController = new SbbIdReferenceController(this, "origin");
325
344
  this._isPointerDownEventOnMenu = false;
326
- this._sbbEscapableOverlayController = new SbbEscapableOverlayController(this);
345
+ this._escapableOverlayController = new SbbEscapableOverlayController(this);
327
346
  this._pointerDownListener = (event) => {
328
347
  this._isPointerDownEventOnMenu = isEventOnElement(this._overlay, event);
329
348
  };
@@ -335,7 +354,9 @@ let SbbAutocompleteBaseElement = (() => {
335
354
  }
336
355
  /**
337
356
  * The element where the autocomplete will attach; accepts both an element's id or an HTMLElement.
338
- * If not set, it will search for the first 'sbb-form-field' ancestor.
357
+ * If not set, as fallback there are two elements which can act as origin with following priority order:
358
+ * 1. `sbb-form-field` if it is an ancestor.
359
+ * 2. trigger element if set.
339
360
  */
340
361
  get origin() {
341
362
  return __privateGet(this, _origin_accessor_storage);
@@ -363,14 +384,13 @@ let SbbAutocompleteBaseElement = (() => {
363
384
  }
364
385
  /** Returns the element where autocomplete overlay is attached to. */
365
386
  get originElement() {
366
- if (!this._originElement) {
367
- this._originElement = this._findOriginElement();
368
- }
369
- return this._originElement;
387
+ var _a2, _b, _c, _d;
388
+ return this.origin instanceof HTMLElement ? this.origin : this._originIdReferenceController.find() ?? ((_d = (_c = (_b = (_a2 = this.closest) == null ? void 0 : _a2.call(this, "sbb-form-field")) == null ? void 0 : _b.shadowRoot) == null ? void 0 : _c.querySelector) == null ? void 0 : _d.call(_c, "#overlay-anchor")) ?? this.triggerElement ?? null;
370
389
  }
390
+ // TODO: Breaking change: remove undefined as return type.
371
391
  /** Returns the trigger element. */
372
392
  get triggerElement() {
373
- return this._triggerElement;
393
+ return this._triggerElement ?? null;
374
394
  }
375
395
  /** Opens the autocomplete. */
376
396
  open() {
@@ -384,7 +404,11 @@ let SbbAutocompleteBaseElement = (() => {
384
404
  (_a2 = this.showPopover) == null ? void 0 : _a2.call(this);
385
405
  this.state = "opening";
386
406
  (_b = this._triggerElement) == null ? void 0 : _b.toggleAttribute("data-expanded", true);
387
- this._setOverlayPosition();
407
+ const originElement = this.originElement;
408
+ if (!originElement) {
409
+ throw new Error('Cannot find the origin element. Please specify a valid element or check the usage of the "origin" property from the documentation');
410
+ }
411
+ this._setOverlayPosition(originElement);
388
412
  if (this._isZeroAnimationDuration()) {
389
413
  this._handleOpening();
390
414
  }
@@ -401,6 +425,9 @@ let SbbAutocompleteBaseElement = (() => {
401
425
  this.state = "closing";
402
426
  (_a2 = this._triggerElement) == null ? void 0 : _a2.toggleAttribute("data-expanded", false);
403
427
  this._openPanelEventsController.abort();
428
+ if (this.originElement) {
429
+ this._originResizeObserver.unobserve(this.originElement);
430
+ }
404
431
  if (this._isZeroAnimationDuration()) {
405
432
  this._handleClosing();
406
433
  }
@@ -424,9 +451,6 @@ let SbbAutocompleteBaseElement = (() => {
424
451
  }
425
452
  willUpdate(changedProperties) {
426
453
  super.willUpdate(changedProperties);
427
- if (changedProperties.has("origin") && this.origin !== changedProperties.get("origin") || changedProperties.has("trigger") && this.trigger !== changedProperties.get("trigger")) {
428
- this._componentSetup();
429
- }
430
454
  if (changedProperties.has("negative")) {
431
455
  this.syncNegative();
432
456
  }
@@ -438,9 +462,21 @@ let SbbAutocompleteBaseElement = (() => {
438
462
  disconnectedCallback() {
439
463
  var _a2, _b;
440
464
  super.disconnectedCallback();
441
- (_a2 = this._triggerEventsController) == null ? void 0 : _a2.abort();
465
+ this._triggerElement = null;
466
+ (_a2 = this._triggerAbortController) == null ? void 0 : _a2.abort();
442
467
  (_b = this._openPanelEventsController) == null ? void 0 : _b.abort();
443
468
  }
469
+ requestUpdate(name, oldValue, options) {
470
+ super.requestUpdate(name, oldValue, options);
471
+ if (isServer || !this.hasUpdated) {
472
+ return;
473
+ }
474
+ if (!name || name === "trigger") {
475
+ this._configureTrigger();
476
+ } else if ((!name || name === "origin") && this.isOpen) {
477
+ this._setOverlayPosition();
478
+ }
479
+ }
444
480
  /** When an option is selected, update the input value and close the autocomplete. */
445
481
  onOptionSelected(event) {
446
482
  const target = event.target;
@@ -453,6 +489,7 @@ let SbbAutocompleteBaseElement = (() => {
453
489
  setValue.call(this.triggerElement, target.value);
454
490
  this.triggerElement.dispatchEvent(new Event("change", { bubbles: true }));
455
491
  this.triggerElement.dispatchEvent(new InputEvent("input", { bubbles: true, composed: true }));
492
+ this.triggerElement.dispatchEvent(new Event(inputAutocompleteEvent));
456
493
  this.triggerElement.focus();
457
494
  }
458
495
  this.close();
@@ -480,75 +517,58 @@ let SbbAutocompleteBaseElement = (() => {
480
517
  return ((_a2 = this.triggerElement) == null ? void 0 : _a2.hasAttribute("readonly")) ?? false;
481
518
  }
482
519
  _componentSetup() {
483
- var _a2, _b, _c, _d;
520
+ var _a2, _b;
484
521
  if (isServer) {
485
522
  return;
486
523
  }
487
- (_a2 = this._triggerEventsController) == null ? void 0 : _a2.abort();
488
- (_b = this._openPanelEventsController) == null ? void 0 : _b.abort();
489
- this._originElement = void 0;
490
- this.toggleAttribute("data-option-panel-origin-borderless", !!((_d = (_c = this.closest) == null ? void 0 : _c.call(this, "sbb-form-field")) == null ? void 0 : _d.hasAttribute("borderless")));
491
- this._bindTo(this._getTriggerElement());
524
+ this.toggleAttribute("data-option-panel-origin-borderless", !!((_b = (_a2 = this.closest) == null ? void 0 : _a2.call(this, "sbb-form-field")) == null ? void 0 : _b.hasAttribute("borderless")));
525
+ this._configureTrigger();
492
526
  }
493
- /**
494
- * Retrieve the element where the autocomplete will be attached.
495
- * @returns 'origin' or the first 'sbb-form-field' ancestor.
496
- */
497
- _findOriginElement() {
527
+ _configureTrigger() {
498
528
  var _a2, _b, _c, _d;
499
- let result;
500
- if (!this.origin) {
501
- result = (_d = (_c = (_b = (_a2 = this.closest) == null ? void 0 : _a2.call(this, "sbb-form-field")) == null ? void 0 : _b.shadowRoot) == null ? void 0 : _c.querySelector) == null ? void 0 : _d.call(_c, "#overlay-anchor");
502
- } else {
503
- result = findReferencedElement(this.origin);
504
- }
505
- if (!result) {
506
- throw new Error('Cannot find the origin element. Please specify a valid element or read the "origin" prop documentation');
507
- }
508
- return result;
509
- }
510
- /**
511
- * Retrieve the element that will trigger the autocomplete opening.
512
- * @returns 'trigger' or the first 'input' inside the origin element.
513
- */
514
- _getTriggerElement() {
515
- var _a2, _b;
516
- if (!this.trigger) {
517
- return (_b = (_a2 = this.closest) == null ? void 0 : _a2.call(this, "sbb-form-field")) == null ? void 0 : _b.querySelector("input");
518
- }
519
- const result = findReferencedElement(this.trigger);
520
- if (!result) {
521
- throw new Error('Cannot find the trigger element. Please specify a valid element or read the "trigger" prop documentation');
529
+ const triggerElement = this.trigger instanceof HTMLElement ? this.trigger : this.trigger ? this._triggerIdReferenceController.find() : (_b = (_a2 = this.closest) == null ? void 0 : _a2.call(this, "sbb-form-field")) == null ? void 0 : _b.querySelector("input");
530
+ if (triggerElement === this._triggerElement) {
531
+ return;
522
532
  }
523
- return result;
524
- }
525
- _bindTo(triggerElem) {
526
- if (!triggerElem) {
533
+ (_c = this._triggerAbortController) == null ? void 0 : _c.abort();
534
+ removeAriaComboBoxAttributes(this.triggerElement);
535
+ this._triggerElement = triggerElement;
536
+ if (!this.triggerElement) {
527
537
  return;
528
538
  }
529
- this._removeTriggerAttributes(this.triggerElement);
530
- this.setTriggerAttributes(triggerElem);
531
- this._triggerElement = triggerElem;
532
- this._setupTriggerEvents();
533
- }
534
- _setupTriggerEvents() {
535
- var _a2, _b, _c, _d;
536
- this._triggerEventsController = new AbortController();
537
- (_a2 = this.triggerElement) == null ? void 0 : _a2.addEventListener("focus", () => this.open(), {
538
- signal: this._triggerEventsController.signal
539
+ const originElement = this.originElement;
540
+ if (this.triggerElement === originElement && this.isOpen) {
541
+ this._setOverlayPosition(originElement);
542
+ }
543
+ (_d = this._triggerAttributeObserver) == null ? void 0 : _d.observe(this._triggerElement, {
544
+ attributes: true,
545
+ attributeFilter: ["disabled", "readonly"]
539
546
  });
540
- (_b = this.triggerElement) == null ? void 0 : _b.addEventListener("click", () => this.open(), {
541
- signal: this._triggerEventsController.signal
547
+ this.setTriggerAttributes(this.triggerElement);
548
+ this._triggerAbortController = new AbortController();
549
+ this.triggerElement.addEventListener("focus", () => this.open(), {
550
+ signal: this._triggerAbortController.signal
542
551
  });
543
- (_c = this.triggerElement) == null ? void 0 : _c.addEventListener("input", (event) => {
552
+ this.triggerElement.addEventListener("click", () => this.open(), {
553
+ signal: this._triggerAbortController.signal
554
+ });
555
+ this.triggerElement.addEventListener("input", (event) => {
544
556
  this.open();
545
557
  this._highlightOptions(event.target.value);
546
- }, { signal: this._triggerEventsController.signal });
547
- (_d = this.triggerElement) == null ? void 0 : _d.addEventListener("keydown", (event) => this._closedPanelKeyboardInteraction(event), { signal: this._triggerEventsController.signal });
558
+ }, { signal: this._triggerAbortController.signal });
559
+ this.triggerElement.addEventListener("keydown", (event) => this._closedPanelKeyboardInteraction(event), {
560
+ signal: this._triggerAbortController.signal,
561
+ // We need key event to run before any other subscription to guarantee a correct
562
+ // interaction with other components (necessary for the 'sbb-chip-group' use case).
563
+ capture: true
564
+ });
548
565
  }
549
566
  // Set overlay position, width and max height
550
- _setOverlayPosition() {
551
- setOverlayPosition(this._overlay, this.originElement, this._optionContainer, this.shadowRoot.querySelector(".sbb-autocomplete__container"), this);
567
+ _setOverlayPosition(originElement = this.originElement) {
568
+ if (!originElement) {
569
+ return;
570
+ }
571
+ setOverlayPosition(this._overlay, originElement, this._optionContainer, this.shadowRoot.querySelector(".sbb-autocomplete__container"), this);
552
572
  }
553
573
  /**
554
574
  * On open/close animation end.
@@ -566,8 +586,11 @@ let SbbAutocompleteBaseElement = (() => {
566
586
  var _a2;
567
587
  this.state = "opened";
568
588
  this._attachOpenPanelEvents();
589
+ if (this.originElement) {
590
+ this._originResizeObserver.observe(this.originElement);
591
+ }
569
592
  (_a2 = this.triggerElement) == null ? void 0 : _a2.setAttribute("aria-expanded", "true");
570
- this._sbbEscapableOverlayController.connect();
593
+ this._escapableOverlayController.connect();
571
594
  this.didOpen.emit();
572
595
  }
573
596
  _handleClosing() {
@@ -577,7 +600,7 @@ let SbbAutocompleteBaseElement = (() => {
577
600
  (_b = this.triggerElement) == null ? void 0 : _b.setAttribute("aria-expanded", "false");
578
601
  this.resetActiveElement();
579
602
  this._optionContainer.scrollTop = 0;
580
- this._sbbEscapableOverlayController.disconnect();
603
+ this._escapableOverlayController.disconnect();
581
604
  this.didClose.emit();
582
605
  }
583
606
  _attachOpenPanelEvents() {
@@ -601,7 +624,10 @@ let SbbAutocompleteBaseElement = (() => {
601
624
  signal: this._openPanelEventsController.signal
602
625
  });
603
626
  (_a2 = this.triggerElement) == null ? void 0 : _a2.addEventListener("keydown", (event) => this.openedPanelKeyboardInteraction(event), {
604
- signal: this._openPanelEventsController.signal
627
+ signal: this._openPanelEventsController.signal,
628
+ // We need key event to run before any other subscription to guarantee a correct
629
+ // interaction with other components (necessary for the 'sbb-chip-group' use case).
630
+ capture: true
605
631
  });
606
632
  }
607
633
  _closedPanelKeyboardInteraction(event) {
@@ -623,9 +649,6 @@ let SbbAutocompleteBaseElement = (() => {
623
649
  }
624
650
  this.options.forEach((option) => option.highlight(searchTerm));
625
651
  }
626
- _removeTriggerAttributes(element) {
627
- removeAriaComboBoxAttributes(element);
628
- }
629
652
  render() {
630
653
  return html`
631
654
  <div class="sbb-autocomplete__gap-fix"></div>
@@ -761,6 +784,7 @@ let SbbAutocompleteElement = (() => {
761
784
  })();
762
785
  export {
763
786
  SbbAutocompleteBaseElement,
764
- SbbAutocompleteElement
787
+ SbbAutocompleteElement,
788
+ inputAutocompleteEvent
765
789
  };
766
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS1iYXNlLWVsZW1lbnQudHMiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB0eXBlIENTU1Jlc3VsdEdyb3VwLFxuICBodG1sLFxuICBpc1NlcnZlcixcbiAgbm90aGluZyxcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcmVmIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVmLmpzJztcblxuaW1wb3J0IHsgU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQgfSBmcm9tICcuLi9jb3JlL2Jhc2UtZWxlbWVudHMuanMnO1xuaW1wb3J0IHsgU2JiQ29ubmVjdGVkQWJvcnRDb250cm9sbGVyLCBTYmJFc2NhcGFibGVPdmVybGF5Q29udHJvbGxlciB9IGZyb20gJy4uL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgZm9yY2VUeXBlLCBob3N0QXR0cmlidXRlcyB9IGZyb20gJy4uL2NvcmUvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBmaW5kUmVmZXJlbmNlZEVsZW1lbnQsIGlzU2FmYXJpLCBpc1plcm9BbmltYXRpb25EdXJhdGlvbiB9IGZyb20gJy4uL2NvcmUvZG9tLmpzJztcbmltcG9ydCB7IFNiYkh5ZHJhdGlvbk1peGluLCBTYmJOZWdhdGl2ZU1peGluIH0gZnJvbSAnLi4vY29yZS9taXhpbnMuanMnO1xuaW1wb3J0IHtcbiAgaXNFdmVudE9uRWxlbWVudCxcbiAgb3ZlcmxheUdhcEZpeENvcm5lcnMsXG4gIHJlbW92ZUFyaWFDb21ib0JveEF0dHJpYnV0ZXMsXG4gIHNldE92ZXJsYXlQb3NpdGlvbixcbn0gZnJvbSAnLi4vY29yZS9vdmVybGF5LmpzJztcbmltcG9ydCB0eXBlIHsgU2JiT3B0aW9uQmFzZUVsZW1lbnQgfSBmcm9tICcuLi9vcHRpb24uanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9hdXRvY29tcGxldGUtYmFzZS1lbGVtZW50LnNjc3M/bGl0JmlubGluZSc7XG5cbi8qKlxuICogT24gU2FmYXJpLCB0aGUgYXJpYSByb2xlICdsaXN0Ym94JyBtdXN0IGJlIG9uIHRoZSBob3N0IGVsZW1lbnQsIG9yIGVsc2UgVm9pY2VPdmVyIHdvbid0IHdvcmsgYXQgYWxsLlxuICogT24gdGhlIG90aGVyIGhhbmQsIEpBV1MgYW5kIE5WREEgbmVlZCB0aGUgcm9sZSB0byBiZSBcImNsb3NlclwiIHRvIHRoZSBvcHRpb25zLCBvciBlbHNlIG9wdGdyb3VwcyB3b24ndCB3b3JrLlxuICovXG5jb25zdCBhcmlhUm9sZU9uSG9zdCA9IGlzU2FmYXJpO1xuXG5leHBvcnRcbkBob3N0QXR0cmlidXRlcyh7XG4gIHBvcG92ZXI6ICdtYW51YWwnLFxufSlcbmFic3RyYWN0IGNsYXNzIFNiYkF1dG9jb21wbGV0ZUJhc2VFbGVtZW50IGV4dGVuZHMgU2JiTmVnYXRpdmVNaXhpbihcbiAgU2JiSHlkcmF0aW9uTWl4aW4oU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQpLFxuKSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB3aGVyZSB0aGUgYXV0b2NvbXBsZXRlIHdpbGwgYXR0YWNoOyBhY2NlcHRzIGJvdGggYW4gZWxlbWVudCdzIGlkIG9yIGFuIEhUTUxFbGVtZW50LlxuICAgKiBJZiBub3Qgc2V0LCBpdCB3aWxsIHNlYXJjaCBmb3IgdGhlIGZpcnN0ICdzYmItZm9ybS1maWVsZCcgYW5jZXN0b3IuXG4gICAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgYWNjZXNzb3Igb3JpZ2luOiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgZWxlbWVudCB0aGF0IHdpbGwgdHJpZ2dlciB0aGUgYXV0b2NvbXBsZXRlIG9wZW5pbmc7IGFjY2VwdHMgYm90aCBhbiBlbGVtZW50J3MgaWQgb3IgYW4gSFRNTEVsZW1lbnQuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBhdXRvY29tcGxldGUgd2lsbCBvcGVuIG9uIGZvY3VzLCBjbGljaywgaW5wdXQgb3IgYEFycm93RG93bmAga2V5cHJlc3Mgb2YgdGhlICd0cmlnZ2VyJyBlbGVtZW50LlxuICAgKiBJZiBub3Qgc2V0LCB3aWxsIHNlYXJjaCBmb3IgdGhlIGZpcnN0ICdpbnB1dCcgY2hpbGQgb2YgYSAnc2JiLWZvcm0tZmllbGQnIGFuY2VzdG9yLlxuICAgKi9cbiAgQHByb3BlcnR5KCkgcHVibGljIGFjY2Vzc29yIHRyaWdnZXI6IHN0cmluZyB8IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAvKiogV2hldGhlciB0aGUgaWNvbiBzcGFjZSBpcyBwcmVzZXJ2ZWQgd2hlbiBubyBpY29uIGlzIHNldC4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3ByZXNlcnZlLWljb24tc3BhY2UnLCByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBwcmVzZXJ2ZUljb25TcGFjZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBSZXR1cm5zIHRoZSBlbGVtZW50IHdoZXJlIGF1dG9jb21wbGV0ZSBvdmVybGF5IGlzIGF0dGFjaGVkIHRvLiAqL1xuICBwdWJsaWMgZ2V0IG9yaWdpbkVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIGlmICghdGhpcy5fb3JpZ2luRWxlbWVudCkge1xuICAgICAgdGhpcy5fb3JpZ2luRWxlbWVudCA9IHRoaXMuX2ZpbmRPcmlnaW5FbGVtZW50KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9vcmlnaW5FbGVtZW50O1xuICB9XG4gIHByaXZhdGUgX29yaWdpbkVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcblxuICAvKiogUmV0dXJucyB0aGUgdHJpZ2dlciBlbGVtZW50LiAqL1xuICBwdWJsaWMgZ2V0IHRyaWdnZXJFbGVtZW50KCk6IEhUTUxJbnB1dEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl90cmlnZ2VyRWxlbWVudDtcbiAgfVxuICBwcml2YXRlIF90cmlnZ2VyRWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IHVuZGVmaW5lZDtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgb3ZlcmxheUlkOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwYW5lbFJvbGU6IHN0cmluZztcbiAgLyoqIEBkZXByZWNhdGVkIE5vIGxvbmdlciB1c2VkIGludGVybmFsbHkuICovXG4gIHByb3RlY3RlZCBhYm9ydCA9IG5ldyBTYmJDb25uZWN0ZWRBYm9ydENvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX292ZXJsYXkhOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfb3B0aW9uQ29udGFpbmVyITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3RyaWdnZXJFdmVudHNDb250cm9sbGVyITogQWJvcnRDb250cm9sbGVyO1xuICBwcml2YXRlIF9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyITogQWJvcnRDb250cm9sbGVyO1xuICBwcml2YXRlIF9pc1BvaW50ZXJEb3duRXZlbnRPbk1lbnU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc2JiRXNjYXBhYmxlT3ZlcmxheUNvbnRyb2xsZXIgPSBuZXcgU2JiRXNjYXBhYmxlT3ZlcmxheUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBvcHRpb25zKCk6IFNiYk9wdGlvbkJhc2VFbGVtZW50W107XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBzeW5jTmVnYXRpdmUoKTogdm9pZDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHNldFRyaWdnZXJBdHRyaWJ1dGVzKGVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgb3BlbmVkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHNlbGVjdEJ5S2V5Ym9hcmQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQ7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCByZXNldEFjdGl2ZUVsZW1lbnQoKTogdm9pZDtcblxuICAvKiogT3BlbnMgdGhlIGF1dG9jb21wbGV0ZS4gKi9cbiAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5zdGF0ZSAhPT0gJ2Nsb3NlZCcgfHxcbiAgICAgICF0aGlzLl9vdmVybGF5IHx8XG4gICAgICB0aGlzLm9wdGlvbnMubGVuZ3RoID09PSAwIHx8XG4gICAgICB0aGlzLl9yZWFkb25seSgpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy53aWxsT3Blbi5lbWl0KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dQb3BvdmVyPy4oKTtcbiAgICB0aGlzLnN0YXRlID0gJ29wZW5pbmcnO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50Py50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtZXhwYW5kZWQnLCB0cnVlKTtcbiAgICB0aGlzLl9zZXRPdmVybGF5UG9zaXRpb24oKTtcblxuICAgIC8vIElmIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaXMgemVybywgdGhlIGFuaW1hdGlvbmVuZCBldmVudCBpcyBub3QgYWx3YXlzIGZpcmVkIHJlbGlhYmx5LlxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBkaXJlY3RseSBzZXQgdGhlIGBvcGVuZWRgIHN0YXRlLlxuICAgIGlmICh0aGlzLl9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpKSB7XG4gICAgICB0aGlzLl9oYW5kbGVPcGVuaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENsb3NlcyB0aGUgYXV0b2NvbXBsZXRlLiAqL1xuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy53aWxsQ2xvc2UuZW1pdCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zaW5nJztcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8udG9nZ2xlQXR0cmlidXRlKCdkYXRhLWV4cGFuZGVkJywgZmFsc2UpO1xuICAgIHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuYWJvcnQoKTtcblxuICAgIC8vIElmIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaXMgemVybywgdGhlIGFuaW1hdGlvbmVuZCBldmVudCBpcyBub3QgYWx3YXlzIGZpcmVkIHJlbGlhYmx5LlxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBkaXJlY3RseSBzZXQgdGhlIGBjbG9zZWRgIHN0YXRlLlxuICAgIGlmICh0aGlzLl9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpKSB7XG4gICAgICB0aGlzLl9oYW5kbGVDbG9zaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKHRoaXMsICctLXNiYi1vcHRpb25zLXBhbmVsLWFuaW1hdGlvbi1kdXJhdGlvbicpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgaWYgKGFyaWFSb2xlT25Ib3N0KSB7XG4gICAgICB0aGlzLmlkIHx8PSB0aGlzLm92ZXJsYXlJZDtcbiAgICB9XG4gICAgY29uc3QgZm9ybUZpZWxkID0gdGhpcy5jbG9zZXN0KCdzYmItZm9ybS1maWVsZCcpID8/IHRoaXMuY2xvc2VzdCgnW2RhdGEtZm9ybS1maWVsZF0nKTtcblxuICAgIGlmIChmb3JtRmllbGQpIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSBmb3JtRmllbGQuaGFzQXR0cmlidXRlKCduZWdhdGl2ZScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc1VwZGF0ZWQpIHtcbiAgICAgIHRoaXMuX2NvbXBvbmVudFNldHVwKCk7XG4gICAgfVxuICAgIHRoaXMuc3luY05lZ2F0aXZlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChcbiAgICAgIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ29yaWdpbicpICYmIHRoaXMub3JpZ2luICE9PSBjaGFuZ2VkUHJvcGVydGllcy5nZXQoJ29yaWdpbicpKSB8fFxuICAgICAgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygndHJpZ2dlcicpICYmIHRoaXMudHJpZ2dlciAhPT0gY2hhbmdlZFByb3BlcnRpZXMuZ2V0KCd0cmlnZ2VyJykpXG4gICAgKSB7XG4gICAgICB0aGlzLl9jb21wb25lbnRTZXR1cCgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCduZWdhdGl2ZScpKSB7XG4gICAgICB0aGlzLnN5bmNOZWdhdGl2ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIHRoaXMuX2NvbXBvbmVudFNldHVwKCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl90cmlnZ2VyRXZlbnRzQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyPy5hYm9ydCgpO1xuICB9XG5cbiAgLyoqIFdoZW4gYW4gb3B0aW9uIGlzIHNlbGVjdGVkLCB1cGRhdGUgdGhlIGlucHV0IHZhbHVlIGFuZCBjbG9zZSB0aGUgYXV0b2NvbXBsZXRlLiAqL1xuICBwcm90ZWN0ZWQgb25PcHRpb25TZWxlY3RlZChldmVudDogQ3VzdG9tRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgU2JiT3B0aW9uQmFzZUVsZW1lbnQ7XG4gICAgaWYgKCF0YXJnZXQuc2VsZWN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEZXNlbGVjdCB0aGUgcHJldmlvdXMgb3B0aW9uc1xuICAgIHRoaXMub3B0aW9uc1xuICAgICAgLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24uaWQgIT09IHRhcmdldC5pZCAmJiBvcHRpb24uc2VsZWN0ZWQpXG4gICAgICAuZm9yRWFjaCgob3B0aW9uKSA9PiAob3B0aW9uLnNlbGVjdGVkID0gZmFsc2UpKTtcblxuICAgIGlmICh0aGlzLnRyaWdnZXJFbGVtZW50KSB7XG4gICAgICAvLyBTZXQgdGhlIG9wdGlvbiB2YWx1ZVxuICAgICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCBSZWFjdCBvbkNoYW5nZSBldmVudCwgd2UgaGF2ZSB0byBnZXQgdGhlIHNldHRlciBhbmQgY2FsbCBpdC5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE2MDAjaXNzdWVjb21tZW50LTM0NTgxMzEzMFxuICAgICAgY29uc3Qgc2V0VmFsdWUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCAndmFsdWUnKSEuc2V0ITtcbiAgICAgIHNldFZhbHVlLmNhbGwodGhpcy50cmlnZ2VyRWxlbWVudCwgdGFyZ2V0LnZhbHVlKTtcblxuICAgICAgLy8gTWFudWFsbHkgdHJpZ2dlciB0aGUgY2hhbmdlIGV2ZW50c1xuICAgICAgdGhpcy50cmlnZ2VyRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudCgnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pKTtcbiAgICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVTbG90Y2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuX2hpZ2hsaWdodE9wdGlvbnModGhpcy50cmlnZ2VyRWxlbWVudD8udmFsdWUpO1xuICAgIHRoaXMuX29wZW5Pbk5ld09wdGlvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgJ2lucHV0JyBpcyBmb2N1c2VkIGFuZCB0aGVyZSdzIGEgY2hhbmdlIGluIHRoZSBudW1iZXIgb2Ygb3B0aW9ucywgb3BlbiB0aGUgYXV0b2NvbXBsZXRlXG4gICAqL1xuICBwcml2YXRlIF9vcGVuT25OZXdPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmIChkb2N1bWVudD8uYWN0aXZlRWxlbWVudCA9PT0gdGhpcy50cmlnZ2VyRWxlbWVudCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgYXV0b2NvbXBsZXRlIHNob3VsZCBpbmhlcml0ICdyZWFkb25seScgc3RhdGUgZnJvbSB0aGUgdHJpZ2dlci4gKi9cbiAgcHJpdmF0ZSBfcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHJpZ2dlckVsZW1lbnQ/Lmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKSA/PyBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbXBvbmVudFNldHVwKCk6IHZvaWQge1xuICAgIGlmIChpc1NlcnZlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl90cmlnZ2VyRXZlbnRzQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyPy5hYm9ydCgpO1xuXG4gICAgdGhpcy5fb3JpZ2luRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZShcbiAgICAgICdkYXRhLW9wdGlvbi1wYW5lbC1vcmlnaW4tYm9yZGVybGVzcycsXG4gICAgICAhIXRoaXMuY2xvc2VzdD8uKCdzYmItZm9ybS1maWVsZCcpPy5oYXNBdHRyaWJ1dGUoJ2JvcmRlcmxlc3MnKSxcbiAgICApO1xuXG4gICAgdGhpcy5fYmluZFRvKHRoaXMuX2dldFRyaWdnZXJFbGVtZW50KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBlbGVtZW50IHdoZXJlIHRoZSBhdXRvY29tcGxldGUgd2lsbCBiZSBhdHRhY2hlZC5cbiAgICogQHJldHVybnMgJ29yaWdpbicgb3IgdGhlIGZpcnN0ICdzYmItZm9ybS1maWVsZCcgYW5jZXN0b3IuXG4gICAqL1xuICBwcml2YXRlIF9maW5kT3JpZ2luRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgbGV0IHJlc3VsdDogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQgfCBudWxsO1xuXG4gICAgaWYgKCF0aGlzLm9yaWdpbikge1xuICAgICAgcmVzdWx0ID0gdGhpcy5jbG9zZXN0Py4oJ3NiYi1mb3JtLWZpZWxkJyk/LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3I/LignI292ZXJsYXktYW5jaG9yJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IGZpbmRSZWZlcmVuY2VkRWxlbWVudCh0aGlzLm9yaWdpbik7XG4gICAgfVxuXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0Nhbm5vdCBmaW5kIHRoZSBvcmlnaW4gZWxlbWVudC4gUGxlYXNlIHNwZWNpZnkgYSB2YWxpZCBlbGVtZW50IG9yIHJlYWQgdGhlIFwib3JpZ2luXCIgcHJvcCBkb2N1bWVudGF0aW9uJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgZWxlbWVudCB0aGF0IHdpbGwgdHJpZ2dlciB0aGUgYXV0b2NvbXBsZXRlIG9wZW5pbmcuXG4gICAqIEByZXR1cm5zICd0cmlnZ2VyJyBvciB0aGUgZmlyc3QgJ2lucHV0JyBpbnNpZGUgdGhlIG9yaWdpbiBlbGVtZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0VHJpZ2dlckVsZW1lbnQoKTogSFRNTElucHV0RWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnRyaWdnZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsb3Nlc3Q/Lignc2JiLWZvcm0tZmllbGQnKT8ucXVlcnlTZWxlY3RvcignaW5wdXQnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRSZWZlcmVuY2VkRWxlbWVudDxIVE1MSW5wdXRFbGVtZW50Pih0aGlzLnRyaWdnZXIpO1xuXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0Nhbm5vdCBmaW5kIHRoZSB0cmlnZ2VyIGVsZW1lbnQuIFBsZWFzZSBzcGVjaWZ5IGEgdmFsaWQgZWxlbWVudCBvciByZWFkIHRoZSBcInRyaWdnZXJcIiBwcm9wIGRvY3VtZW50YXRpb24nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBfYmluZFRvKHRyaWdnZXJFbGVtOiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKCF0cmlnZ2VyRWxlbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJlc2V0IGF0dHJpYnV0ZXMgdG8gdGhlIG9sZCB0cmlnZ2VyIGFuZCBhZGQgdGhlbSB0byB0aGUgbmV3IG9uZVxuICAgIHRoaXMuX3JlbW92ZVRyaWdnZXJBdHRyaWJ1dGVzKHRoaXMudHJpZ2dlckVsZW1lbnQpO1xuICAgIHRoaXMuc2V0VHJpZ2dlckF0dHJpYnV0ZXModHJpZ2dlckVsZW0pO1xuXG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQgPSB0cmlnZ2VyRWxlbTtcblxuICAgIHRoaXMuX3NldHVwVHJpZ2dlckV2ZW50cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0dXBUcmlnZ2VyRXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuX3RyaWdnZXJFdmVudHNDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgLy8gT3BlbiB0aGUgb3ZlcmxheSBvbiBmb2N1cywgY2xpY2ssIGlucHV0IGFuZCBgQXJyb3dEb3duYCBldmVudFxuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQ/LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgKCkgPT4gdGhpcy5vcGVuKCksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fdHJpZ2dlckV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQ/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gdGhpcy5vcGVuKCksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fdHJpZ2dlckV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQ/LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAnaW5wdXQnLFxuICAgICAgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICB0aGlzLl9oaWdobGlnaHRPcHRpb25zKChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiB0aGlzLl90cmlnZ2VyRXZlbnRzQ29udHJvbGxlci5zaWduYWwgfSxcbiAgICApO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQ/LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAna2V5ZG93bicsXG4gICAgICAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHRoaXMuX2Nsb3NlZFBhbmVsS2V5Ym9hcmRJbnRlcmFjdGlvbihldmVudCksXG4gICAgICB7IHNpZ25hbDogdGhpcy5fdHJpZ2dlckV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFNldCBvdmVybGF5IHBvc2l0aW9uLCB3aWR0aCBhbmQgbWF4IGhlaWdodFxuICBwcml2YXRlIF9zZXRPdmVybGF5UG9zaXRpb24oKTogdm9pZCB7XG4gICAgc2V0T3ZlcmxheVBvc2l0aW9uKFxuICAgICAgdGhpcy5fb3ZlcmxheSxcbiAgICAgIHRoaXMub3JpZ2luRWxlbWVudCxcbiAgICAgIHRoaXMuX29wdGlvbkNvbnRhaW5lcixcbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcignLnNiYi1hdXRvY29tcGxldGVfX2NvbnRhaW5lcicpISxcbiAgICAgIHRoaXMsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbiBvcGVuL2Nsb3NlIGFuaW1hdGlvbiBlbmQuXG4gICAqIEluIHJhcmUgY2FzZXMgaXQgY2FuIGJlIHRoYXQgdGhlIGFuaW1hdGlvbkVuZCBldmVudCBpcyB0cmlnZ2VyZWQgdHdpY2UuXG4gICAqIFRvIGF2b2lkIGVudGVyaW5nIGEgY29ycnVwdCBzdGF0ZSwgZXhpdCB3aGVuIHN0YXRlIGlzIG5vdCBleHBlY3RlZC5cbiAgICovXG4gIHByaXZhdGUgX29uQW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnb3BlbicgJiYgdGhpcy5zdGF0ZSA9PT0gJ29wZW5pbmcnKSB7XG4gICAgICB0aGlzLl9oYW5kbGVPcGVuaW5nKCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnY2xvc2UnICYmIHRoaXMuc3RhdGUgPT09ICdjbG9zaW5nJykge1xuICAgICAgdGhpcy5faGFuZGxlQ2xvc2luZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZU9wZW5pbmcoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9ICdvcGVuZWQnO1xuICAgIHRoaXMuX2F0dGFjaE9wZW5QYW5lbEV2ZW50cygpO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICd0cnVlJyk7XG4gICAgdGhpcy5fc2JiRXNjYXBhYmxlT3ZlcmxheUNvbnRyb2xsZXIuY29ubmVjdCgpO1xuICAgIHRoaXMuZGlkT3Blbi5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVDbG9zaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSAnY2xvc2VkJztcbiAgICB0aGlzLmhpZGVQb3BvdmVyPy4oKTtcbiAgICB0aGlzLnRyaWdnZXJFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcbiAgICB0aGlzLnJlc2V0QWN0aXZlRWxlbWVudCgpO1xuICAgIHRoaXMuX29wdGlvbkNvbnRhaW5lci5zY3JvbGxUb3AgPSAwO1xuICAgIHRoaXMuX3NiYkVzY2FwYWJsZU92ZXJsYXlDb250cm9sbGVyLmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLmRpZENsb3NlLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2F0dGFjaE9wZW5QYW5lbEV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgLy8gUmVjYWxjdWxhdGUgdGhlIG92ZXJsYXkgcG9zaXRpb24gb24gc2Nyb2xsIGFuZCB3aW5kb3cgcmVzaXplXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKCkgPT4gdGhpcy5fc2V0T3ZlcmxheVBvc2l0aW9uKCksIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgLy8gV2l0aG91dCBjYXB0dXJlLCBvdGhlciBzY3JvbGwgY29udGV4dHMgd291bGQgbm90IGJ1YmJsZSB0byB0aGlzIGV2ZW50IGxpc3RlbmVyLlxuICAgICAgLy8gQ2FwdHVyZSBhbGxvd3MgdXMgdG8gcmVhY3QgdG8gYWxsIHNjcm9sbCBjb250ZXh0cyBpbiB0aGlzIERPTS5cbiAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcblxuICAgIC8vIENsb3NlIGF1dG9jb21wbGV0ZSBvbiBiYWNrZHJvcCBjbGlja1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIChldikgPT4gdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lcihldiksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIChldikgPT4gdGhpcy5fY2xvc2VPbkJhY2tkcm9wQ2xpY2soZXYpLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgLy8gS2V5Ym9hcmQgaW50ZXJhY3Rpb25zXG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudD8uYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdrZXlkb3duJyxcbiAgICAgIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5vcGVuZWRQYW5lbEtleWJvYXJkSW50ZXJhY3Rpb24oZXZlbnQpLFxuICAgICAge1xuICAgICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHBvaW50ZXJkb3duIGV2ZW50IHRhcmdldCBpcyB0cmlnZ2VyZWQgb24gdGhlIG1lbnUuXG4gIHByaXZhdGUgX3BvaW50ZXJEb3duTGlzdGVuZXIgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuX2lzUG9pbnRlckRvd25FdmVudE9uTWVudSA9IGlzRXZlbnRPbkVsZW1lbnQodGhpcy5fb3ZlcmxheSwgZXZlbnQpO1xuICB9O1xuXG4gIC8vIElmIHRoZSBjbGljayBpcyBvdXRzaWRlIHRoZSBhdXRvY29tcGxldGUsIGNsb3NlcyB0aGUgcGFuZWwuXG4gIHByaXZhdGUgX2Nsb3NlT25CYWNrZHJvcENsaWNrID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkID0+IHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ICYmXG4gICAgICAhaXNFdmVudE9uRWxlbWVudCh0aGlzLl9vdmVybGF5LCBldmVudCkgJiZcbiAgICAgICFpc0V2ZW50T25FbGVtZW50KHRoaXMub3JpZ2luRWxlbWVudCwgZXZlbnQpXG4gICAgKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgX2Nsb3NlZFBhbmVsS2V5Ym9hcmRJbnRlcmFjdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnY2xvc2VkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKiogSGlnaGxpZ2h0IHRoZSBzZWFyY2hlZCB0ZXh0IG9uIHRoZSBvcHRpb25zLiAqL1xuICBwcml2YXRlIF9oaWdobGlnaHRPcHRpb25zKHNlYXJjaFRlcm0/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoc2VhcmNoVGVybSA9PT0gbnVsbCB8fCBzZWFyY2hUZXJtID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4gb3B0aW9uLmhpZ2hsaWdodChzZWFyY2hUZXJtKSk7XG4gIH1cblxuICBwcml2YXRlIF9yZW1vdmVUcmlnZ2VyQXR0cmlidXRlcyhlbGVtZW50PzogSFRNTElucHV0RWxlbWVudCk6IHZvaWQge1xuICAgIHJlbW92ZUFyaWFDb21ib0JveEF0dHJpYnV0ZXMoZWxlbWVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItYXV0b2NvbXBsZXRlX19nYXAtZml4XCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLWF1dG9jb21wbGV0ZV9fY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItYXV0b2NvbXBsZXRlX19nYXAtZml4XCI+JHtvdmVybGF5R2FwRml4Q29ybmVycygpfTwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgQGFuaW1hdGlvbmVuZD0ke3RoaXMuX29uQW5pbWF0aW9uRW5kfVxuICAgICAgICAgIGNsYXNzPVwic2JiLWF1dG9jb21wbGV0ZV9fcGFuZWxcIlxuICAgICAgICAgID9kYXRhLW9wZW49JHt0aGlzLnN0YXRlID09PSAnb3BlbmVkJyB8fCB0aGlzLnN0YXRlID09PSAnb3BlbmluZyd9XG4gICAgICAgICAgJHtyZWYoKG92ZXJsYXlSZWY/OiBFbGVtZW50KSA9PiAodGhpcy5fb3ZlcmxheSA9IG92ZXJsYXlSZWYgYXMgSFRNTEVsZW1lbnQpKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItYXV0b2NvbXBsZXRlX193cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwic2JiLWF1dG9jb21wbGV0ZV9fb3B0aW9uc1wiXG4gICAgICAgICAgICAgIHJvbGU9JHshYXJpYVJvbGVPbkhvc3QgPyB0aGlzLnBhbmVsUm9sZSA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgIGlkPSR7IWFyaWFSb2xlT25Ib3N0ID8gdGhpcy5vdmVybGF5SWQgOiBub3RoaW5nfVxuICAgICAgICAgICAgICAke3JlZigoY29udGFpbmVyUmVmKSA9PiAodGhpcy5fb3B0aW9uQ29udGFpbmVyID0gY29udGFpbmVyUmVmIGFzIEhUTUxFbGVtZW50KSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzbG90IEBzbG90Y2hhbmdlPSR7dGhpcy5faGFuZGxlU2xvdGNoYW5nZX0+PC9zbG90PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgZ2V0TmV4dEVsZW1lbnRJbmRleCB9IGZyb20gJy4uL2NvcmUvYTExeS5qcyc7XG5pbXBvcnQgeyBob3N0QXR0cmlidXRlcyB9IGZyb20gJy4uL2NvcmUvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBpc1NhZmFyaSB9IGZyb20gJy4uL2NvcmUvZG9tLmpzJztcbmltcG9ydCB7IHNldEFyaWFDb21ib0JveEF0dHJpYnV0ZXMgfSBmcm9tICcuLi9jb3JlL292ZXJsYXkuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJPcHRHcm91cEVsZW1lbnQsIFNiYk9wdGlvbkVsZW1lbnQgfSBmcm9tICcuLi9vcHRpb24uanMnO1xuXG5pbXBvcnQgeyBTYmJBdXRvY29tcGxldGVCYXNlRWxlbWVudCB9IGZyb20gJy4vYXV0b2NvbXBsZXRlLWJhc2UtZWxlbWVudC5qcyc7XG5cbmxldCBuZXh0SWQgPSAwO1xuXG4vKipcbiAqIE9uIFNhZmFyaSwgdGhlIGFyaWEgcm9sZSAnbGlzdGJveCcgbXVzdCBiZSBvbiB0aGUgaG9zdCBlbGVtZW50LCBvciBlbHNlIFZvaWNlT3ZlciB3b24ndCB3b3JrIGF0IGFsbC5cbiAqIE9uIHRoZSBvdGhlciBoYW5kLCBKQVdTIGFuZCBOVkRBIG5lZWQgdGhlIHJvbGUgdG8gYmUgXCJjbG9zZXJcIiB0byB0aGUgb3B0aW9ucywgb3IgZWxzZSBvcHRncm91cHMgd29uJ3Qgd29yay5cbiAqL1xuY29uc3QgYXJpYVJvbGVPbkhvc3QgPSBpc1NhZmFyaTtcblxuLyoqXG4gKiBDb21iaW5lZCB3aXRoIGEgbmF0aXZlIGlucHV0LCBpdCBkaXNwbGF5cyBhIHBhbmVsIHdpdGggYSBsaXN0IG9mIGF2YWlsYWJsZSBvcHRpb25zLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIGBzYmItb3B0aW9uYCBvciBgc2JiLW9wdGdyb3VwYCBlbGVtZW50cyB0byB0aGUgYHNiYi1hdXRvY29tcGxldGVgLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gd2lsbE9wZW4gLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1hdXRvY29tcGxldGVgIHN0YXJ0cyB0aGUgb3BlbmluZyB0cmFuc2l0aW9uLiBDYW4gYmUgY2FuY2VsZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBkaWRPcGVuIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItYXV0b2NvbXBsZXRlYCBpcyBvcGVuZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSB3aWxsQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1hdXRvY29tcGxldGVgIGJlZ2lucyB0aGUgY2xvc2luZyB0cmFuc2l0aW9uLiBDYW4gYmUgY2FuY2VsZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBkaWRDbG9zZSAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLWF1dG9jb21wbGV0ZWAgaXMgY2xvc2VkLlxuICogQGNzc3Byb3AgWy0tc2JiLWF1dG9jb21wbGV0ZS16LWluZGV4PXZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleCldIC0gVG8gc3BlY2lmeSBhIGN1c3RvbSBzdGFjayBvcmRlcixcbiAqIHRoZSBgei1pbmRleGAgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgdGhpcyBDU1MgdmFyaWFibGUuIFRoZSBkZWZhdWx0IGB6LWluZGV4YCBvZiB0aGVcbiAqIGNvbXBvbmVudCBpcyBzZXQgdG8gYHZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleClgIHdpdGggYSB2YWx1ZSBvZiBgMTAwMGAuXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1hdXRvY29tcGxldGUnKVxuQGhvc3RBdHRyaWJ1dGVzKHtcbiAgcm9sZTogYXJpYVJvbGVPbkhvc3QgPyAnbGlzdGJveCcgOiBudWxsLFxufSlcbmNsYXNzIFNiYkF1dG9jb21wbGV0ZUVsZW1lbnQgZXh0ZW5kcyBTYmJBdXRvY29tcGxldGVCYXNlRWxlbWVudCB7XG4gIHByb3RlY3RlZCBvdmVybGF5SWQgPSBgc2JiLWF1dG9jb21wbGV0ZS0keysrbmV4dElkfWA7XG4gIHByb3RlY3RlZCBwYW5lbFJvbGUgPSAnbGlzdGJveCc7XG4gIHByaXZhdGUgX2FjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuXG4gIHByb3RlY3RlZCBnZXQgb3B0aW9ucygpOiBTYmJPcHRpb25FbGVtZW50W10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbD8uKCdzYmItb3B0aW9uJykgPz8gW10pO1xuICB9XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ29wdGlvblNlbGVjdGlvbkNoYW5nZScsIChlOiBDdXN0b21FdmVudDx2b2lkPikgPT5cbiAgICAgIHRoaXMub25PcHRpb25TZWxlY3RlZChlKSxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN5bmNOZWdhdGl2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/Lignc2JiLWRpdmlkZXInKS5mb3JFYWNoKChkaXZpZGVyKSA9PiAoZGl2aWRlci5uZWdhdGl2ZSA9IHRoaXMubmVnYXRpdmUpKTtcblxuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbD8uPFNiYk9wdGlvbkVsZW1lbnQgfCBTYmJPcHRHcm91cEVsZW1lbnQ+KFxuICAgICAgJ3NiYi1vcHRpb24sIHNiYi1vcHRncm91cCcsXG4gICAgKS5mb3JFYWNoKChlbGVtZW50KSA9PiBlbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1uZWdhdGl2ZScsIHRoaXMubmVnYXRpdmUpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvcGVuZWRQYW5lbEtleWJvYXJkSW50ZXJhY3Rpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29wZW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICB0aGlzLnNlbGVjdEJ5S2V5Ym9hcmQoZXZlbnQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICB0aGlzLnNldE5leHRBY3RpdmVPcHRpb24oZXZlbnQpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0QnlLZXlib2FyZChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgYWN0aXZlT3B0aW9uID0gdGhpcy5vcHRpb25zW3RoaXMuX2FjdGl2ZUl0ZW1JbmRleF07XG5cbiAgICBpZiAoYWN0aXZlT3B0aW9uKSB7XG4gICAgICBhY3RpdmVPcHRpb24uc2V0U2VsZWN0ZWRWaWFVc2VySW50ZXJhY3Rpb24odHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNldE5leHRBY3RpdmVPcHRpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKFxuICAgICAgKG9wdCkgPT4gIW9wdC5kaXNhYmxlZCAmJiAhb3B0Lmhhc0F0dHJpYnV0ZSgnZGF0YS1ncm91cC1kaXNhYmxlZCcpLFxuICAgICk7XG5cbiAgICAvLyBHZXQgYW5kIGFjdGl2YXRlIHRoZSBuZXh0IGFjdGl2ZSBvcHRpb25cbiAgICBjb25zdCBuZXh0ID0gZ2V0TmV4dEVsZW1lbnRJbmRleChldmVudCwgdGhpcy5fYWN0aXZlSXRlbUluZGV4LCBmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoKTtcbiAgICBjb25zdCBuZXh0QWN0aXZlT3B0aW9uID0gZmlsdGVyZWRPcHRpb25zW25leHRdO1xuICAgIG5leHRBY3RpdmVPcHRpb24uc2V0QWN0aXZlKHRydWUpO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgbmV4dEFjdGl2ZU9wdGlvbi5pZCk7XG4gICAgbmV4dEFjdGl2ZU9wdGlvbi5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnbmVhcmVzdCcgfSk7XG5cbiAgICAvLyBSZXNldCB0aGUgcHJldmlvdXMgYWN0aXZlIG9wdGlvblxuICAgIGNvbnN0IGxhc3RBY3RpdmVPcHRpb24gPSBmaWx0ZXJlZE9wdGlvbnNbdGhpcy5fYWN0aXZlSXRlbUluZGV4XTtcbiAgICBpZiAobGFzdEFjdGl2ZU9wdGlvbikge1xuICAgICAgbGFzdEFjdGl2ZU9wdGlvbi5zZXRBY3RpdmUoZmFsc2UpO1xuICAgIH1cblxuICAgIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCA9IG5leHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRBY3RpdmVFbGVtZW50KCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPSB0aGlzLm9wdGlvbnNbdGhpcy5fYWN0aXZlSXRlbUluZGV4XTtcblxuICAgIGlmIChhY3RpdmVFbGVtZW50KSB7XG4gICAgICBhY3RpdmVFbGVtZW50LnNldEFjdGl2ZShmYWxzZSk7XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQ/LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0VHJpZ2dlckF0dHJpYnV0ZXMoZWxlbWVudDogSFRNTElucHV0RWxlbWVudCk6IHZvaWQge1xuICAgIHNldEFyaWFDb21ib0JveEF0dHJpYnV0ZXMoZWxlbWVudCwgYXJpYVJvbGVPbkhvc3QgPyB0aGlzLmlkIDogdGhpcy5vdmVybGF5SWQsIGZhbHNlKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLWF1dG9jb21wbGV0ZSc6IFNiYkF1dG9jb21wbGV0ZUVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJhcmlhUm9sZU9uSG9zdCIsIl9hIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4QkEsTUFBTUEsbUJBQWlCO0lBTVIsOEJBQTBCLE1BQUE7O0FBSHhDLE1BQUEsbUJBQUEsQ0FBQSxlQUFlO0FBQUEsSUFDZCxTQUFTO0FBQUEsRUFBQSxDQUNWLENBQUM7Ozs7QUFDZ0QsTUFBQSxjQUFBLGlCQUNoRCxrQkFBa0IsdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7QUFERixFQUFBLG1CQUFRLFlBRWpEO0FBQUE7O0FBT2E7QUFPQTtBQUtaO0FBWjRCLHlCQUFBLDBCQUFBLGtCQUFBLE1BQUEsc0JBQXNDLElBQUk7QUFPMUMseUJBQUEsNEJBQUEsa0JBQUEsTUFBQSx5QkFB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
790
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS1iYXNlLWVsZW1lbnQudHMiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXNpemVDb250cm9sbGVyIH0gZnJvbSAnQGxpdC1sYWJzL29ic2VydmVycy9yZXNpemUtY29udHJvbGxlci5qcyc7XG5pbXBvcnQge1xuICB0eXBlIENTU1Jlc3VsdEdyb3VwLFxuICBodG1sLFxuICBpc1NlcnZlcixcbiAgbm90aGluZyxcbiAgdHlwZSBQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICB0eXBlIFByb3BlcnR5VmFsdWVzLFxuICB0eXBlIFRlbXBsYXRlUmVzdWx0LFxufSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyByZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuXG5pbXBvcnQgeyBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCB9IGZyb20gJy4uL2NvcmUvYmFzZS1lbGVtZW50cy5qcyc7XG5pbXBvcnQge1xuICBTYmJDb25uZWN0ZWRBYm9ydENvbnRyb2xsZXIsXG4gIFNiYkVzY2FwYWJsZU92ZXJsYXlDb250cm9sbGVyLFxuICBTYmJJZFJlZmVyZW5jZUNvbnRyb2xsZXIsXG59IGZyb20gJy4uL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgZm9yY2VUeXBlLCBob3N0QXR0cmlidXRlcyB9IGZyb20gJy4uL2NvcmUvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBpc1NhZmFyaSwgaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24gfSBmcm9tICcuLi9jb3JlL2RvbS5qcyc7XG5pbXBvcnQgeyBTYmJIeWRyYXRpb25NaXhpbiwgU2JiTmVnYXRpdmVNaXhpbiB9IGZyb20gJy4uL2NvcmUvbWl4aW5zLmpzJztcbmltcG9ydCB7XG4gIGlzRXZlbnRPbkVsZW1lbnQsXG4gIG92ZXJsYXlHYXBGaXhDb3JuZXJzLFxuICByZW1vdmVBcmlhQ29tYm9Cb3hBdHRyaWJ1dGVzLFxuICBzZXRPdmVybGF5UG9zaXRpb24sXG59IGZyb20gJy4uL2NvcmUvb3ZlcmxheS5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYk9wdGlvbkJhc2VFbGVtZW50IH0gZnJvbSAnLi4vb3B0aW9uLmpzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vYXV0b2NvbXBsZXRlLWJhc2UtZWxlbWVudC5zY3NzP2xpdCZpbmxpbmUnO1xuXG4vKipcbiAqIE9uIFNhZmFyaSwgdGhlIGFyaWEgcm9sZSAnbGlzdGJveCcgbXVzdCBiZSBvbiB0aGUgaG9zdCBlbGVtZW50LCBvciBlbHNlIFZvaWNlT3ZlciB3b24ndCB3b3JrIGF0IGFsbC5cbiAqIE9uIHRoZSBvdGhlciBoYW5kLCBKQVdTIGFuZCBOVkRBIG5lZWQgdGhlIHJvbGUgdG8gYmUgXCJjbG9zZXJcIiB0byB0aGUgb3B0aW9ucywgb3IgZWxzZSBvcHRncm91cHMgd29uJ3Qgd29yay5cbiAqL1xuY29uc3QgYXJpYVJvbGVPbkhvc3QgPSBpc1NhZmFyaTtcblxuLyoqXG4gKiBDdXN0b20gZXZlbnQgZW1pdHRlZCBvbiB0aGUgaW5wdXQgd2hlbiBhbiBvcHRpb24gaXMgc2VsZWN0ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGlucHV0QXV0b2NvbXBsZXRlRXZlbnQgPSAnaW5wdXRBdXRvY29tcGxldGUnO1xuXG5leHBvcnRcbkBob3N0QXR0cmlidXRlcyh7XG4gIHBvcG92ZXI6ICdtYW51YWwnLFxufSlcbmFic3RyYWN0IGNsYXNzIFNiYkF1dG9jb21wbGV0ZUJhc2VFbGVtZW50IGV4dGVuZHMgU2JiTmVnYXRpdmVNaXhpbihcbiAgU2JiSHlkcmF0aW9uTWl4aW4oU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQpLFxuKSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB3aGVyZSB0aGUgYXV0b2NvbXBsZXRlIHdpbGwgYXR0YWNoOyBhY2NlcHRzIGJvdGggYW4gZWxlbWVudCdzIGlkIG9yIGFuIEhUTUxFbGVtZW50LlxuICAgKiBJZiBub3Qgc2V0LCBhcyBmYWxsYmFjayB0aGVyZSBhcmUgdHdvIGVsZW1lbnRzIHdoaWNoIGNhbiBhY3QgYXMgb3JpZ2luIHdpdGggZm9sbG93aW5nIHByaW9yaXR5IG9yZGVyOlxuICAgKiAxLiBgc2JiLWZvcm0tZmllbGRgIGlmIGl0IGlzIGFuIGFuY2VzdG9yLlxuICAgKiAyLiB0cmlnZ2VyIGVsZW1lbnQgaWYgc2V0LlxuICAgKi9cbiAgQHByb3BlcnR5KCkgcHVibGljIGFjY2Vzc29yIG9yaWdpbjogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogVGhlIGlucHV0IGVsZW1lbnQgdGhhdCB3aWxsIHRyaWdnZXIgdGhlIGF1dG9jb21wbGV0ZSBvcGVuaW5nOyBhY2NlcHRzIGJvdGggYW4gZWxlbWVudCdzIGlkIG9yIGFuIEhUTUxFbGVtZW50LlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgYXV0b2NvbXBsZXRlIHdpbGwgb3BlbiBvbiBmb2N1cywgY2xpY2ssIGlucHV0IG9yIGBBcnJvd0Rvd25gIGtleXByZXNzIG9mIHRoZSAndHJpZ2dlcicgZWxlbWVudC5cbiAgICogSWYgbm90IHNldCwgd2lsbCBzZWFyY2ggZm9yIHRoZSBmaXJzdCAnaW5wdXQnIGNoaWxkIG9mIGEgJ3NiYi1mb3JtLWZpZWxkJyBhbmNlc3Rvci5cbiAgICovXG4gIEBwcm9wZXJ0eSgpIHB1YmxpYyBhY2Nlc3NvciB0cmlnZ2VyOiBzdHJpbmcgfCBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGljb24gc3BhY2UgaXMgcHJlc2VydmVkIHdoZW4gbm8gaWNvbiBpcyBzZXQuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdwcmVzZXJ2ZS1pY29uLXNwYWNlJywgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgcHJlc2VydmVJY29uU3BhY2U6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogUmV0dXJucyB0aGUgZWxlbWVudCB3aGVyZSBhdXRvY29tcGxldGUgb3ZlcmxheSBpcyBhdHRhY2hlZCB0by4gKi9cbiAgcHVibGljIGdldCBvcmlnaW5FbGVtZW50KCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMub3JpZ2luIGluc3RhbmNlb2YgSFRNTEVsZW1lbnRcbiAgICAgID8gdGhpcy5vcmlnaW5cbiAgICAgIDogKHRoaXMuX29yaWdpbklkUmVmZXJlbmNlQ29udHJvbGxlci5maW5kKCkgPz9cbiAgICAgICAgICB0aGlzLmNsb3Nlc3Q/Lignc2JiLWZvcm0tZmllbGQnKT8uc2hhZG93Um9vdD8ucXVlcnlTZWxlY3Rvcj8uKCcjb3ZlcmxheS1hbmNob3InKSA/P1xuICAgICAgICAgIHRoaXMudHJpZ2dlckVsZW1lbnQgPz9cbiAgICAgICAgICBudWxsKTtcbiAgfVxuXG4gIC8vIFRPRE86IEJyZWFraW5nIGNoYW5nZTogcmVtb3ZlIHVuZGVmaW5lZCBhcyByZXR1cm4gdHlwZS5cbiAgLyoqIFJldHVybnMgdGhlIHRyaWdnZXIgZWxlbWVudC4gKi9cbiAgcHVibGljIGdldCB0cmlnZ2VyRWxlbWVudCgpOiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3RyaWdnZXJFbGVtZW50ID8/IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBfdHJpZ2dlckVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBvdmVybGF5SWQ6IHN0cmluZztcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHBhbmVsUm9sZTogc3RyaW5nO1xuICAvKiogQGRlcHJlY2F0ZWQgTm8gbG9uZ2VyIHVzZWQgaW50ZXJuYWxseS4gKi9cbiAgcHJvdGVjdGVkIGFib3J0ID0gbmV3IFNiYkNvbm5lY3RlZEFib3J0Q29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfb3JpZ2luUmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplQ29udHJvbGxlcih0aGlzLCB7XG4gICAgdGFyZ2V0OiBudWxsLFxuICAgIHNraXBJbml0aWFsOiB0cnVlLFxuICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ29wZW5lZCcpIHtcbiAgICAgICAgdGhpcy5fc2V0T3ZlcmxheVBvc2l0aW9uKCk7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG4gIC8qKiBMaXN0ZW5zIHRvIHRoZSBjaGFuZ2VzIG9uIHRoZSBgZGlzYWJsZWRgIG9yIGByZWFkb25seWAgYXR0cmlidXRlIG9mIHRoZSB0cmlnZ2VyLiAqL1xuICBwcml2YXRlIF90cmlnZ2VyQXR0cmlidXRlT2JzZXJ2ZXIgPSAhaXNTZXJ2ZXJcbiAgICA/IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnM6IE11dGF0aW9uUmVjb3JkW10pOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBtdXRhdGlvbnNbMF0udGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGlmIChpbnB1dC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgfHwgaW5wdXQuaGFzQXR0cmlidXRlKCdyZWFkb25seScpKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIDogbnVsbDtcbiAgcHJpdmF0ZSBfb3ZlcmxheSE6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9vcHRpb25Db250YWluZXIhOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfdHJpZ2dlckFib3J0Q29udHJvbGxlciE6IEFib3J0Q29udHJvbGxlcjtcbiAgcHJpdmF0ZSBfdHJpZ2dlcklkUmVmZXJlbmNlQ29udHJvbGxlciA9IG5ldyBTYmJJZFJlZmVyZW5jZUNvbnRyb2xsZXIodGhpcywgJ3RyaWdnZXInKTtcbiAgcHJpdmF0ZSBfb3JpZ2luSWRSZWZlcmVuY2VDb250cm9sbGVyID0gbmV3IFNiYklkUmVmZXJlbmNlQ29udHJvbGxlcih0aGlzLCAnb3JpZ2luJyk7XG4gIHByaXZhdGUgX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX2lzUG9pbnRlckRvd25FdmVudE9uTWVudTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9lc2NhcGFibGVPdmVybGF5Q29udHJvbGxlciA9IG5ldyBTYmJFc2NhcGFibGVPdmVybGF5Q29udHJvbGxlcih0aGlzKTtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IG9wdGlvbnMoKTogU2JiT3B0aW9uQmFzZUVsZW1lbnRbXTtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHN5bmNOZWdhdGl2ZSgpOiB2b2lkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc2V0VHJpZ2dlckF0dHJpYnV0ZXMoZWxlbWVudDogSFRNTElucHV0RWxlbWVudCk6IHZvaWQ7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBvcGVuZWRQYW5lbEtleWJvYXJkSW50ZXJhY3Rpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc2VsZWN0QnlLZXlib2FyZChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQ7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBzZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlc2V0QWN0aXZlRWxlbWVudCgpOiB2b2lkO1xuXG4gIC8qKiBPcGVucyB0aGUgYXV0b2NvbXBsZXRlLiAqL1xuICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXRlICE9PSAnY2xvc2VkJyB8fFxuICAgICAgIXRoaXMuX292ZXJsYXkgfHxcbiAgICAgIHRoaXMub3B0aW9ucy5sZW5ndGggPT09IDAgfHxcbiAgICAgIHRoaXMuX3JlYWRvbmx5KClcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLndpbGxPcGVuLmVtaXQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd1BvcG92ZXI/LigpO1xuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmluZyc7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1leHBhbmRlZCcsIHRydWUpO1xuICAgIGNvbnN0IG9yaWdpbkVsZW1lbnQgPSB0aGlzLm9yaWdpbkVsZW1lbnQ7XG4gICAgaWYgKCFvcmlnaW5FbGVtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDYW5ub3QgZmluZCB0aGUgb3JpZ2luIGVsZW1lbnQuIFBsZWFzZSBzcGVjaWZ5IGEgdmFsaWQgZWxlbWVudCBvciBjaGVjayB0aGUgdXNhZ2Ugb2YgdGhlIFwib3JpZ2luXCIgcHJvcGVydHkgZnJvbSB0aGUgZG9jdW1lbnRhdGlvbicsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLl9zZXRPdmVybGF5UG9zaXRpb24ob3JpZ2luRWxlbWVudCk7XG5cbiAgICAvLyBJZiB0aGUgYW5pbWF0aW9uIGR1cmF0aW9uIGlzIHplcm8sIHRoZSBhbmltYXRpb25lbmQgZXZlbnQgaXMgbm90IGFsd2F5cyBmaXJlZCByZWxpYWJseS5cbiAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZGlyZWN0bHkgc2V0IHRoZSBgb3BlbmVkYCBzdGF0ZS5cbiAgICBpZiAodGhpcy5faXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKSkge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDbG9zZXMgdGhlIGF1dG9jb21wbGV0ZS4gKi9cbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb3BlbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMud2lsbENsb3NlLmVtaXQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAnY2xvc2luZyc7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1leHBhbmRlZCcsIGZhbHNlKTtcbiAgICB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLmFib3J0KCk7XG4gICAgaWYgKHRoaXMub3JpZ2luRWxlbWVudCkge1xuICAgICAgdGhpcy5fb3JpZ2luUmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKHRoaXMub3JpZ2luRWxlbWVudCk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpcyB6ZXJvLCB0aGUgYW5pbWF0aW9uZW5kIGV2ZW50IGlzIG5vdCBhbHdheXMgZmlyZWQgcmVsaWFibHkuXG4gICAgLy8gSW4gdGhpcyBjYXNlIHdlIGRpcmVjdGx5IHNldCB0aGUgYGNsb3NlZGAgc3RhdGUuXG4gICAgaWYgKHRoaXMuX2lzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKCkpIHtcbiAgICAgIHRoaXMuX2hhbmRsZUNsb3NpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24odGhpcywgJy0tc2JiLW9wdGlvbnMtcGFuZWwtYW5pbWF0aW9uLWR1cmF0aW9uJyk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICBpZiAoYXJpYVJvbGVPbkhvc3QpIHtcbiAgICAgIHRoaXMuaWQgfHw9IHRoaXMub3ZlcmxheUlkO1xuICAgIH1cbiAgICBjb25zdCBmb3JtRmllbGQgPSB0aGlzLmNsb3Nlc3QoJ3NiYi1mb3JtLWZpZWxkJykgPz8gdGhpcy5jbG9zZXN0KCdbZGF0YS1mb3JtLWZpZWxkXScpO1xuXG4gICAgaWYgKGZvcm1GaWVsZCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IGZvcm1GaWVsZC5oYXNBdHRyaWJ1dGUoJ25lZ2F0aXZlJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzVXBkYXRlZCkge1xuICAgICAgdGhpcy5fY29tcG9uZW50U2V0dXAoKTtcbiAgICB9XG4gICAgdGhpcy5zeW5jTmVnYXRpdmUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbmVnYXRpdmUnKSkge1xuICAgICAgdGhpcy5zeW5jTmVnYXRpdmUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICB0aGlzLl9jb21wb25lbnRTZXR1cCgpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQgPSBudWxsO1xuICAgIHRoaXMuX3RyaWdnZXJBYm9ydENvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSByZXF1ZXN0VXBkYXRlKFxuICAgIG5hbWU/OiBQcm9wZXJ0eUtleSxcbiAgICBvbGRWYWx1ZT86IHVua25vd24sXG4gICAgb3B0aW9ucz86IFByb3BlcnR5RGVjbGFyYXRpb24sXG4gICk6IHZvaWQge1xuICAgIHN1cGVyLnJlcXVlc3RVcGRhdGUobmFtZSwgb2xkVmFsdWUsIG9wdGlvbnMpO1xuXG4gICAgaWYgKGlzU2VydmVyIHx8ICF0aGlzLmhhc1VwZGF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFuYW1lIHx8IG5hbWUgPT09ICd0cmlnZ2VyJykge1xuICAgICAgdGhpcy5fY29uZmlndXJlVHJpZ2dlcigpO1xuICAgIH0gZWxzZSBpZiAoKCFuYW1lIHx8IG5hbWUgPT09ICdvcmlnaW4nKSAmJiB0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5fc2V0T3ZlcmxheVBvc2l0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFdoZW4gYW4gb3B0aW9uIGlzIHNlbGVjdGVkLCB1cGRhdGUgdGhlIGlucHV0IHZhbHVlIGFuZCBjbG9zZSB0aGUgYXV0b2NvbXBsZXRlLiAqL1xuICBwcm90ZWN0ZWQgb25PcHRpb25TZWxlY3RlZChldmVudDogQ3VzdG9tRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgU2JiT3B0aW9uQmFzZUVsZW1lbnQ7XG4gICAgaWYgKCF0YXJnZXQuc2VsZWN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEZXNlbGVjdCB0aGUgcHJldmlvdXMgb3B0aW9uc1xuICAgIHRoaXMub3B0aW9uc1xuICAgICAgLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24uaWQgIT09IHRhcmdldC5pZCAmJiBvcHRpb24uc2VsZWN0ZWQpXG4gICAgICAuZm9yRWFjaCgob3B0aW9uKSA9PiAob3B0aW9uLnNlbGVjdGVkID0gZmFsc2UpKTtcblxuICAgIGlmICh0aGlzLnRyaWdnZXJFbGVtZW50KSB7XG4gICAgICAvLyBTZXQgdGhlIG9wdGlvbiB2YWx1ZVxuICAgICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCBSZWFjdCBvbkNoYW5nZSBldmVudCwgd2UgaGF2ZSB0byBnZXQgdGhlIHNldHRlciBhbmQgY2FsbCBpdC5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE2MDAjaXNzdWVjb21tZW50LTM0NTgxMzEzMFxuICAgICAgY29uc3Qgc2V0VmFsdWUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCAndmFsdWUnKSEuc2V0ITtcbiAgICAgIHNldFZhbHVlLmNhbGwodGhpcy50cmlnZ2VyRWxlbWVudCwgdGFyZ2V0LnZhbHVlKTtcblxuICAgICAgLy8gTWFudWFsbHkgdHJpZ2dlciB0aGUgY2hhbmdlIGV2ZW50c1xuICAgICAgdGhpcy50cmlnZ2VyRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudCgnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pKTtcblxuICAgICAgLy8gQ3VzdG9tIGlucHV0IGV2ZW50IGVtaXR0ZWQgd2hlbiBpbnB1dCB2YWx1ZSBjaGFuZ2VzIGFmdGVyIGFuIG9wdGlvbiBpcyBzZWxlY3RlZFxuICAgICAgdGhpcy50cmlnZ2VyRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChpbnB1dEF1dG9jb21wbGV0ZUV2ZW50KSk7XG4gICAgICB0aGlzLnRyaWdnZXJFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlU2xvdGNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9oaWdobGlnaHRPcHRpb25zKHRoaXMudHJpZ2dlckVsZW1lbnQ/LnZhbHVlKTtcbiAgICB0aGlzLl9vcGVuT25OZXdPcHRpb25zKCk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlICdpbnB1dCcgaXMgZm9jdXNlZCBhbmQgdGhlcmUncyBhIGNoYW5nZSBpbiB0aGUgbnVtYmVyIG9mIG9wdGlvbnMsIG9wZW4gdGhlIGF1dG9jb21wbGV0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfb3Blbk9uTmV3T3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAoZG9jdW1lbnQ/LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMudHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogVGhlIGF1dG9jb21wbGV0ZSBzaG91bGQgaW5oZXJpdCAncmVhZG9ubHknIHN0YXRlIGZyb20gdGhlIHRyaWdnZXIuICovXG4gIHByaXZhdGUgX3JlYWRvbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRyaWdnZXJFbGVtZW50Py5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykgPz8gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIF9jb21wb25lbnRTZXR1cCgpOiB2b2lkIHtcbiAgICBpZiAoaXNTZXJ2ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZShcbiAgICAgICdkYXRhLW9wdGlvbi1wYW5lbC1vcmlnaW4tYm9yZGVybGVzcycsXG4gICAgICAhIXRoaXMuY2xvc2VzdD8uKCdzYmItZm9ybS1maWVsZCcpPy5oYXNBdHRyaWJ1dGUoJ2JvcmRlcmxlc3MnKSxcbiAgICApO1xuXG4gICAgdGhpcy5fY29uZmlndXJlVHJpZ2dlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29uZmlndXJlVHJpZ2dlcigpOiB2b2lkIHtcbiAgICBjb25zdCB0cmlnZ2VyRWxlbWVudCA9IChcbiAgICAgIHRoaXMudHJpZ2dlciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50XG4gICAgICAgID8gdGhpcy50cmlnZ2VyXG4gICAgICAgIDogdGhpcy50cmlnZ2VyXG4gICAgICAgICAgPyB0aGlzLl90cmlnZ2VySWRSZWZlcmVuY2VDb250cm9sbGVyLmZpbmQoKVxuICAgICAgICAgIDogdGhpcy5jbG9zZXN0Py4oJ3NiYi1mb3JtLWZpZWxkJyk/LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JylcbiAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsO1xuXG4gICAgaWYgKHRyaWdnZXJFbGVtZW50ID09PSB0aGlzLl90cmlnZ2VyRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RyaWdnZXJBYm9ydENvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgcmVtb3ZlQXJpYUNvbWJvQm94QXR0cmlidXRlcyh0aGlzLnRyaWdnZXJFbGVtZW50KTtcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudCA9IHRyaWdnZXJFbGVtZW50O1xuXG4gICAgaWYgKCF0aGlzLnRyaWdnZXJFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQXMgdGhlIHRyaWdnZXIgY2FuIGJlIHRoZSBmYWxsYmFjayBvZiB0aGUgb3JpZ2luLCB3ZSBldmVudHVhbGx5IGhhdmUgdG8gdXBkYXRlIHRoZSBwb3NpdGlvbi5cbiAgICBjb25zdCBvcmlnaW5FbGVtZW50ID0gdGhpcy5vcmlnaW5FbGVtZW50O1xuICAgIGlmICh0aGlzLnRyaWdnZXJFbGVtZW50ID09PSBvcmlnaW5FbGVtZW50ICYmIHRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLl9zZXRPdmVybGF5UG9zaXRpb24ob3JpZ2luRWxlbWVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdHJpZ2dlckF0dHJpYnV0ZU9ic2VydmVyPy5vYnNlcnZlKHRoaXMuX3RyaWdnZXJFbGVtZW50ISwge1xuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydkaXNhYmxlZCcsICdyZWFkb25seSddLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zZXRUcmlnZ2VyQXR0cmlidXRlcyh0aGlzLnRyaWdnZXJFbGVtZW50KTtcbiAgICB0aGlzLl90cmlnZ2VyQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgLy8gT3BlbiB0aGUgb3ZlcmxheSBvbiBmb2N1cywgY2xpY2ssIGlucHV0IGFuZCBgQXJyb3dEb3duYCBldmVudFxuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCAoKSA9PiB0aGlzLm9wZW4oKSwge1xuICAgICAgc2lnbmFsOiB0aGlzLl90cmlnZ2VyQWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICB0aGlzLnRyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gdGhpcy5vcGVuKCksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fdHJpZ2dlckFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2lucHV0JyxcbiAgICAgIChldmVudCkgPT4ge1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgdGhpcy5faGlnaGxpZ2h0T3B0aW9ucygoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogdGhpcy5fdHJpZ2dlckFib3J0Q29udHJvbGxlci5zaWduYWwgfSxcbiAgICApO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdrZXlkb3duJyxcbiAgICAgIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5fY2xvc2VkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50KSxcbiAgICAgIHtcbiAgICAgICAgc2lnbmFsOiB0aGlzLl90cmlnZ2VyQWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgLy8gV2UgbmVlZCBrZXkgZXZlbnQgdG8gcnVuIGJlZm9yZSBhbnkgb3RoZXIgc3Vic2NyaXB0aW9uIHRvIGd1YXJhbnRlZSBhIGNvcnJlY3RcbiAgICAgICAgLy8gaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBjb21wb25lbnRzIChuZWNlc3NhcnkgZm9yIHRoZSAnc2JiLWNoaXAtZ3JvdXAnIHVzZSBjYXNlKS5cbiAgICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFNldCBvdmVybGF5IHBvc2l0aW9uLCB3aWR0aCBhbmQgbWF4IGhlaWdodFxuICBwcml2YXRlIF9zZXRPdmVybGF5UG9zaXRpb24ob3JpZ2luRWxlbWVudCA9IHRoaXMub3JpZ2luRWxlbWVudCk6IHZvaWQge1xuICAgIC8vIEFuIHVuZGVmaW5lZCBvcmlnaW5FbGVtZW50IHNob3VsZCBvbmx5IG9jY3VyIGluIHRoZSB1bmxpa2VseSBldmVudFxuICAgIC8vIHRoYXQgdGhlIGF1dG9jb21wbGV0ZSBsb3NlcyBpdHMgb3JpZ2luRWxlbWVudCBhbmQgdHJpZ2dlckVsZW1lbnQgZHVyaW5nIGFuIG9wZW4gc3RhdGUuXG4gICAgaWYgKCFvcmlnaW5FbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldE92ZXJsYXlQb3NpdGlvbihcbiAgICAgIHRoaXMuX292ZXJsYXksXG4gICAgICBvcmlnaW5FbGVtZW50LFxuICAgICAgdGhpcy5fb3B0aW9uQ29udGFpbmVyLFxuICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKCcuc2JiLWF1dG9jb21wbGV0ZV9fY29udGFpbmVyJykhLFxuICAgICAgdGhpcyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIG9wZW4vY2xvc2UgYW5pbWF0aW9uIGVuZC5cbiAgICogSW4gcmFyZSBjYXNlcyBpdCBjYW4gYmUgdGhhdCB0aGUgYW5pbWF0aW9uRW5kIGV2ZW50IGlzIHRyaWdnZXJlZCB0d2ljZS5cbiAgICogVG8gYXZvaWQgZW50ZXJpbmcgYSBjb3JydXB0IHN0YXRlLCBleGl0IHdoZW4gc3RhdGUgaXMgbm90IGV4cGVjdGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBfb25BbmltYXRpb25FbmQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdvcGVuJyAmJiB0aGlzLnN0YXRlID09PSAnb3BlbmluZycpIHtcbiAgICAgIHRoaXMuX2hhbmRsZU9wZW5pbmcoKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdjbG9zZScgJiYgdGhpcy5zdGF0ZSA9PT0gJ2Nsb3NpbmcnKSB7XG4gICAgICB0aGlzLl9oYW5kbGVDbG9zaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlT3BlbmluZygpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ29wZW5lZCc7XG4gICAgdGhpcy5fYXR0YWNoT3BlblBhbmVsRXZlbnRzKCk7XG4gICAgaWYgKHRoaXMub3JpZ2luRWxlbWVudCkge1xuICAgICAgdGhpcy5fb3JpZ2luUmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLm9yaWdpbkVsZW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLnRyaWdnZXJFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpO1xuICAgIHRoaXMuX2VzY2FwYWJsZU92ZXJsYXlDb250cm9sbGVyLmNvbm5lY3QoKTtcbiAgICB0aGlzLmRpZE9wZW4uZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlQ2xvc2luZygpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ2Nsb3NlZCc7XG4gICAgdGhpcy5oaWRlUG9wb3Zlcj8uKCk7XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudD8uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG4gICAgdGhpcy5yZXNldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICB0aGlzLl9vcHRpb25Db250YWluZXIuc2Nyb2xsVG9wID0gMDtcbiAgICB0aGlzLl9lc2NhcGFibGVPdmVybGF5Q29udHJvbGxlci5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5kaWRDbG9zZS5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIF9hdHRhY2hPcGVuUGFuZWxFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIC8vIFJlY2FsY3VsYXRlIHRoZSBvdmVybGF5IHBvc2l0aW9uIG9uIHNjcm9sbCBhbmQgd2luZG93IHJlc2l6ZVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsICgpID0+IHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIC8vIFdpdGhvdXQgY2FwdHVyZSwgb3RoZXIgc2Nyb2xsIGNvbnRleHRzIHdvdWxkIG5vdCBidWJibGUgdG8gdGhpcyBldmVudCBsaXN0ZW5lci5cbiAgICAgIC8vIENhcHR1cmUgYWxsb3dzIHVzIHRvIHJlYWN0IHRvIGFsbCBzY3JvbGwgY29udGV4dHMgaW4gdGhpcyBET00uXG4gICAgICBjYXB0dXJlOiB0cnVlLFxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB0aGlzLl9zZXRPdmVybGF5UG9zaXRpb24oKSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG5cbiAgICAvLyBDbG9zZSBhdXRvY29tcGxldGUgb24gYmFja2Ryb3AgY2xpY2tcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCAoZXYpID0+IHRoaXMuX3BvaW50ZXJEb3duTGlzdGVuZXIoZXYpLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCAoZXYpID0+IHRoaXMuX2Nsb3NlT25CYWNrZHJvcENsaWNrKGV2KSwge1xuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcblxuICAgIC8vIEtleWJvYXJkIGludGVyYWN0aW9uc1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQ/LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAna2V5ZG93bicsXG4gICAgICAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHRoaXMub3BlbmVkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50KSxcbiAgICAgIHtcbiAgICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgLy8gV2UgbmVlZCBrZXkgZXZlbnQgdG8gcnVuIGJlZm9yZSBhbnkgb3RoZXIgc3Vic2NyaXB0aW9uIHRvIGd1YXJhbnRlZSBhIGNvcnJlY3RcbiAgICAgICAgLy8gaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBjb21wb25lbnRzIChuZWNlc3NhcnkgZm9yIHRoZSAnc2JiLWNoaXAtZ3JvdXAnIHVzZSBjYXNlKS5cbiAgICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBwb2ludGVyZG93biBldmVudCB0YXJnZXQgaXMgdHJpZ2dlcmVkIG9uIHRoZSBtZW51LlxuICBwcml2YXRlIF9wb2ludGVyRG93bkxpc3RlbmVyID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkID0+IHtcbiAgICB0aGlzLl9pc1BvaW50ZXJEb3duRXZlbnRPbk1lbnUgPSBpc0V2ZW50T25FbGVtZW50KHRoaXMuX292ZXJsYXksIGV2ZW50KTtcbiAgfTtcblxuICAvLyBJZiB0aGUgY2xpY2sgaXMgb3V0c2lkZSB0aGUgYXV0b2NvbXBsZXRlLCBjbG9zZXMgdGhlIHBhbmVsLlxuICBwcml2YXRlIF9jbG9zZU9uQmFja2Ryb3BDbGljayA9IChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuX2lzUG9pbnRlckRvd25FdmVudE9uTWVudSAmJlxuICAgICAgIWlzRXZlbnRPbkVsZW1lbnQodGhpcy5fb3ZlcmxheSwgZXZlbnQpICYmXG4gICAgICAhaXNFdmVudE9uRWxlbWVudCh0aGlzLm9yaWdpbkVsZW1lbnQsIGV2ZW50KVxuICAgICkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF9jbG9zZWRQYW5lbEtleWJvYXJkSW50ZXJhY3Rpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqIEhpZ2hsaWdodCB0aGUgc2VhcmNoZWQgdGV4dCBvbiB0aGUgb3B0aW9ucy4gKi9cbiAgcHJpdmF0ZSBfaGlnaGxpZ2h0T3B0aW9ucyhzZWFyY2hUZXJtPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHNlYXJjaFRlcm0gPT09IG51bGwgfHwgc2VhcmNoVGVybSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IG9wdGlvbi5oaWdobGlnaHQoc2VhcmNoVGVybSkpO1xuICB9XG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1hdXRvY29tcGxldGVfX2dhcC1maXhcIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItYXV0b2NvbXBsZXRlX19jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1hdXRvY29tcGxldGVfX2dhcC1maXhcIj4ke292ZXJsYXlHYXBGaXhDb3JuZXJzKCl9PC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBAYW5pbWF0aW9uZW5kPSR7dGhpcy5fb25BbmltYXRpb25FbmR9XG4gICAgICAgICAgY2xhc3M9XCJzYmItYXV0b2NvbXBsZXRlX19wYW5lbFwiXG4gICAgICAgICAgP2RhdGEtb3Blbj0ke3RoaXMuc3RhdGUgPT09ICdvcGVuZWQnIHx8IHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJ31cbiAgICAgICAgICAke3JlZigob3ZlcmxheVJlZj86IEVsZW1lbnQpID0+ICh0aGlzLl9vdmVybGF5ID0gb3ZlcmxheVJlZiBhcyBIVE1MRWxlbWVudCkpfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1hdXRvY29tcGxldGVfX3dyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJzYmItYXV0b2NvbXBsZXRlX19vcHRpb25zXCJcbiAgICAgICAgICAgICAgcm9sZT0keyFhcmlhUm9sZU9uSG9zdCA/IHRoaXMucGFuZWxSb2xlIDogbm90aGluZ31cbiAgICAgICAgICAgICAgaWQ9JHshYXJpYVJvbGVPbkhvc3QgPyB0aGlzLm92ZXJsYXlJZCA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgICR7cmVmKChjb250YWluZXJSZWYpID0+ICh0aGlzLl9vcHRpb25Db250YWluZXIgPSBjb250YWluZXJSZWYgYXMgSFRNTEVsZW1lbnQpKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNsb3QgQHNsb3RjaGFuZ2U9JHt0aGlzLl9oYW5kbGVTbG90Y2hhbmdlfT48L3Nsb3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG4iLCJpbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBnZXROZXh0RWxlbWVudEluZGV4IH0gZnJvbSAnLi4vY29yZS9hMTF5LmpzJztcbmltcG9ydCB7IGhvc3RBdHRyaWJ1dGVzIH0gZnJvbSAnLi4vY29yZS9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGlzU2FmYXJpIH0gZnJvbSAnLi4vY29yZS9kb20uanMnO1xuaW1wb3J0IHsgc2V0QXJpYUNvbWJvQm94QXR0cmlidXRlcyB9IGZyb20gJy4uL2NvcmUvb3ZlcmxheS5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYk9wdEdyb3VwRWxlbWVudCwgU2JiT3B0aW9uRWxlbWVudCB9IGZyb20gJy4uL29wdGlvbi5qcyc7XG5cbmltcG9ydCB7IFNiYkF1dG9jb21wbGV0ZUJhc2VFbGVtZW50IH0gZnJvbSAnLi9hdXRvY29tcGxldGUtYmFzZS1lbGVtZW50LmpzJztcblxubGV0IG5leHRJZCA9IDA7XG5cbi8qKlxuICogT24gU2FmYXJpLCB0aGUgYXJpYSByb2xlICdsaXN0Ym94JyBtdXN0IGJlIG9uIHRoZSBob3N0IGVsZW1lbnQsIG9yIGVsc2UgVm9pY2VPdmVyIHdvbid0IHdvcmsgYXQgYWxsLlxuICogT24gdGhlIG90aGVyIGhhbmQsIEpBV1MgYW5kIE5WREEgbmVlZCB0aGUgcm9sZSB0byBiZSBcImNsb3NlclwiIHRvIHRoZSBvcHRpb25zLCBvciBlbHNlIG9wdGdyb3VwcyB3b24ndCB3b3JrLlxuICovXG5jb25zdCBhcmlhUm9sZU9uSG9zdCA9IGlzU2FmYXJpO1xuXG4vKipcbiAqIENvbWJpbmVkIHdpdGggYSBuYXRpdmUgaW5wdXQsIGl0IGRpc3BsYXlzIGEgcGFuZWwgd2l0aCBhIGxpc3Qgb2YgYXZhaWxhYmxlIG9wdGlvbnMuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBhZGQgYHNiYi1vcHRpb25gIG9yIGBzYmItb3B0Z3JvdXBgIGVsZW1lbnRzIHRvIHRoZSBgc2JiLWF1dG9jb21wbGV0ZWAuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSB3aWxsT3BlbiAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLWF1dG9jb21wbGV0ZWAgc3RhcnRzIHRoZSBvcGVuaW5nIHRyYW5zaXRpb24uIENhbiBiZSBjYW5jZWxlZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGRpZE9wZW4gLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1hdXRvY29tcGxldGVgIGlzIG9wZW5lZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IHdpbGxDbG9zZSAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLWF1dG9jb21wbGV0ZWAgYmVnaW5zIHRoZSBjbG9zaW5nIHRyYW5zaXRpb24uIENhbiBiZSBjYW5jZWxlZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGRpZENsb3NlIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItYXV0b2NvbXBsZXRlYCBpcyBjbG9zZWQuXG4gKiBAY3NzcHJvcCBbLS1zYmItYXV0b2NvbXBsZXRlLXotaW5kZXg9dmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KV0gLSBUbyBzcGVjaWZ5IGEgY3VzdG9tIHN0YWNrIG9yZGVyLFxuICogdGhlIGB6LWluZGV4YCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyB0aGlzIENTUyB2YXJpYWJsZS4gVGhlIGRlZmF1bHQgYHotaW5kZXhgIG9mIHRoZVxuICogY29tcG9uZW50IGlzIHNldCB0byBgdmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KWAgd2l0aCBhIHZhbHVlIG9mIGAxMDAwYC5cbiAqL1xuZXhwb3J0XG5AY3VzdG9tRWxlbWVudCgnc2JiLWF1dG9jb21wbGV0ZScpXG5AaG9zdEF0dHJpYnV0ZXMoe1xuICByb2xlOiBhcmlhUm9sZU9uSG9zdCA/ICdsaXN0Ym94JyA6IG51bGwsXG59KVxuY2xhc3MgU2JiQXV0b2NvbXBsZXRlRWxlbWVudCBleHRlbmRzIFNiYkF1dG9jb21wbGV0ZUJhc2VFbGVtZW50IHtcbiAgcHJvdGVjdGVkIG92ZXJsYXlJZCA9IGBzYmItYXV0b2NvbXBsZXRlLSR7KytuZXh0SWR9YDtcbiAgcHJvdGVjdGVkIHBhbmVsUm9sZSA9ICdsaXN0Ym94JztcbiAgcHJpdmF0ZSBfYWN0aXZlSXRlbUluZGV4ID0gLTE7XG5cbiAgcHJvdGVjdGVkIGdldCBvcHRpb25zKCk6IFNiYk9wdGlvbkVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsPy4oJ3NiYi1vcHRpb24nKSA/PyBbXSk7XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/Lignb3B0aW9uU2VsZWN0aW9uQ2hhbmdlJywgKGU6IEN1c3RvbUV2ZW50PHZvaWQ+KSA9PlxuICAgICAgdGhpcy5vbk9wdGlvblNlbGVjdGVkKGUpLFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3luY05lZ2F0aXZlKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbD8uKCdzYmItZGl2aWRlcicpLmZvckVhY2goKGRpdmlkZXIpID0+IChkaXZpZGVyLm5lZ2F0aXZlID0gdGhpcy5uZWdhdGl2ZSkpO1xuXG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy48U2JiT3B0aW9uRWxlbWVudCB8IFNiYk9wdEdyb3VwRWxlbWVudD4oXG4gICAgICAnc2JiLW9wdGlvbiwgc2JiLW9wdGdyb3VwJyxcbiAgICApLmZvckVhY2goKGVsZW1lbnQpID0+IGVsZW1lbnQudG9nZ2xlQXR0cmlidXRlKCdkYXRhLW5lZ2F0aXZlJywgdGhpcy5uZWdhdGl2ZSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9wZW5lZFBhbmVsS2V5Ym9hcmRJbnRlcmFjdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb3BlbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgIHRoaXMuc2VsZWN0QnlLZXlib2FyZChldmVudCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIHRoaXMuc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RCeUtleWJvYXJkKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBhY3RpdmVPcHRpb24gPSB0aGlzLm9wdGlvbnNbdGhpcy5fYWN0aXZlSXRlbUluZGV4XTtcblxuICAgIGlmIChhY3RpdmVPcHRpb24pIHtcbiAgICAgIGFjdGl2ZU9wdGlvbi5zZXRTZWxlY3RlZFZpYVVzZXJJbnRlcmFjdGlvbih0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucy5maWx0ZXIoXG4gICAgICAob3B0KSA9PiAhb3B0LmRpc2FibGVkICYmICFvcHQuaGFzQXR0cmlidXRlKCdkYXRhLWdyb3VwLWRpc2FibGVkJyksXG4gICAgKTtcblxuICAgIC8vIEdldCBhbmQgYWN0aXZhdGUgdGhlIG5leHQgYWN0aXZlIG9wdGlvblxuICAgIGNvbnN0IG5leHQgPSBnZXROZXh0RWxlbWVudEluZGV4KGV2ZW50LCB0aGlzLl9hY3RpdmVJdGVtSW5kZXgsIGZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpO1xuICAgIGNvbnN0IG5leHRBY3RpdmVPcHRpb24gPSBmaWx0ZXJlZE9wdGlvbnNbbmV4dF07XG4gICAgbmV4dEFjdGl2ZU9wdGlvbi5zZXRBY3RpdmUodHJ1ZSk7XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudD8uc2V0QXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLCBuZXh0QWN0aXZlT3B0aW9uLmlkKTtcbiAgICBuZXh0QWN0aXZlT3B0aW9uLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICduZWFyZXN0JyB9KTtcblxuICAgIC8vIFJlc2V0IHRoZSBwcmV2aW91cyBhY3RpdmUgb3B0aW9uXG4gICAgY29uc3QgbGFzdEFjdGl2ZU9wdGlvbiA9IGZpbHRlcmVkT3B0aW9uc1t0aGlzLl9hY3RpdmVJdGVtSW5kZXhdO1xuICAgIGlmIChsYXN0QWN0aXZlT3B0aW9uKSB7XG4gICAgICBsYXN0QWN0aXZlT3B0aW9uLnNldEFjdGl2ZShmYWxzZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fYWN0aXZlSXRlbUluZGV4ID0gbmV4dDtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldEFjdGl2ZUVsZW1lbnQoKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHRoaXMub3B0aW9uc1t0aGlzLl9hY3RpdmVJdGVtSW5kZXhdO1xuXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGFjdGl2ZUVsZW1lbnQuc2V0QWN0aXZlKGZhbHNlKTtcbiAgICB9XG4gICAgdGhpcy5fYWN0aXZlSXRlbUluZGV4ID0gLTE7XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRUcmlnZ2VyQXR0cmlidXRlcyhlbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZCB7XG4gICAgc2V0QXJpYUNvbWJvQm94QXR0cmlidXRlcyhlbGVtZW50LCBhcmlhUm9sZU9uSG9zdCA/IHRoaXMuaWQgOiB0aGlzLm92ZXJsYXlJZCwgZmFsc2UpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItYXV0b2NvbXBsZXRlJzogU2JiQXV0b2NvbXBsZXRlRWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbImFyaWFSb2xlT25Ib3N0IiwiX2EiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQ0EsTUFBTUEsbUJBQWlCO0FBS2hCLE1BQU0s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
@@ -0,0 +1,32 @@
1
+ import { CSSResultGroup, LitElement, PropertyValues, TemplateResult } from 'lit';
2
+ declare const SbbChipElement_base: import('../../core/mixins.js').AbstractConstructor<import('../../core/mixins.js').SbbNegativeMixinType> & import('../../core/mixins.js').AbstractConstructor<import('../../core/mixins.js').SbbDisabledMixinType> & typeof LitElement;
3
+ /**
4
+ * It displays a chip. Usually used in combination with `sbb-chip-group`.
5
+ *
6
+ * @slot - Use the unnamed slot to add the display value. If not provided, the 'value' will be used.
7
+ */
8
+ export declare class SbbChipElement extends SbbChipElement_base {
9
+ static styles: CSSResultGroup;
10
+ static readonly events: {
11
+ readonly requestDelete: "requestDelete";
12
+ };
13
+ /** The value of chip. Will be used as label if nothing is slotted. */
14
+ accessor value: string;
15
+ /** Whether the component is readonly */
16
+ accessor readonly: boolean;
17
+ /** @internal */
18
+ private _requestDelete;
19
+ private _language;
20
+ constructor();
21
+ protected willUpdate(changedProperties: PropertyValues<this>): void;
22
+ protected firstUpdated(_changedProperties: PropertyValues): void;
23
+ private _deleteButton;
24
+ protected render(): TemplateResult;
25
+ }
26
+ declare global {
27
+ interface HTMLElementTagNameMap {
28
+ 'sbb-chip': SbbChipElement;
29
+ }
30
+ }
31
+ export {};
32
+ //# sourceMappingURL=chip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chip.d.ts","sourceRoot":"","sources":["../../../../../src/elements/chip/chip/chip.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAEnB,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,KAAK,CAAC;AASb,OAAO,6BAA6B,CAAC;AACrC,OAAO,6BAA6B,CAAC;;AAIrC;;;;GAIG;AACH,qBAEM,cAAe,SAAQ,mBAA8C;IACzE,OAAuB,MAAM,EAAE,cAAc,CAAS;IACtD,gBAAuB,MAAM;;MAElB;IAEX,sEAAsE;IACtE,SAAyC,KAAK,EAAE,MAAM,CAAM;IAE5D,wCAAwC;IACxC,SAEgB,QAAQ,EAAE,OAAO,CAAS;IAE1C,gBAAgB;IAChB,OAAO,CAAC,cAAc,CAAoE;IAE1F,OAAO,CAAC,SAAS,CAAmC;;cASjC,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;cAYzD,YAAY,CAAC,kBAAkB,EAAE,cAAc,GAAG,IAAI;IAQzE,OAAO,CAAC,aAAa;cAIF,MAAM,IAAI,cAAc;CAmB5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,UAAU,EAAE,cAAc,CAAC;KAC5B;CACF"}