@sbb-esta/lyne-elements 2.11.2 → 3.0.0-next.1
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.
- package/_index.scss +1 -1
- package/accordion/accordion.component.js +22 -19
- package/action-group/action-group.component.d.ts.map +1 -1
- package/action-group/action-group.component.js +5 -3
- package/alert/alert/alert.component.d.ts +2 -7
- package/alert/alert/alert.component.d.ts.map +1 -1
- package/alert/alert/alert.component.js +57 -68
- package/alert/alert-group/alert-group.component.js +3 -2
- package/autocomplete/autocomplete-base-element.d.ts +26 -17
- package/autocomplete/autocomplete-base-element.d.ts.map +1 -1
- package/autocomplete/autocomplete-base-element.js +120 -81
- package/autocomplete/autocomplete.component.d.ts +3 -2
- package/autocomplete/autocomplete.component.d.ts.map +1 -1
- package/autocomplete/autocomplete.component.js +31 -29
- package/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.d.ts +3 -2
- package/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +46 -41
- package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.d.ts +1 -0
- package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.js +10 -10
- package/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.d.ts +4 -1
- package/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.js +11 -13
- package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.js +20 -17
- package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.d.ts +4 -6
- package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +22 -23
- package/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.d.ts +4 -1
- package/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.js +10 -12
- package/autocomplete.js +4 -5
- package/breadcrumb/breadcrumb/breadcrumb.component.js +1 -1
- package/breadcrumb/breadcrumb-group/breadcrumb-group.component.d.ts +1 -0
- package/breadcrumb/breadcrumb-group/breadcrumb-group.component.d.ts.map +1 -1
- package/breadcrumb/breadcrumb-group/breadcrumb-group.component.js +29 -28
- package/button/accent-button/accent-button.component.d.ts +1 -0
- package/button/accent-button/accent-button.component.d.ts.map +1 -1
- package/button/button/button.component.d.ts +1 -0
- package/button/button/button.component.d.ts.map +1 -1
- package/button/common/button-common.d.ts +4 -6
- package/button/common/button-common.d.ts.map +1 -1
- package/button/mini-button/mini-button.component.d.ts +1 -0
- package/button/mini-button/mini-button.component.d.ts.map +1 -1
- package/button/mini-button/mini-button.component.js +1 -1
- package/button/mini-button-group/mini-button-group.component.js +2 -1
- package/button/secondary-button/secondary-button.component.d.ts +1 -0
- package/button/secondary-button/secondary-button.component.d.ts.map +1 -1
- package/button/transparent-button/transparent-button.component.d.ts +1 -0
- package/button/transparent-button/transparent-button.component.d.ts.map +1 -1
- package/calendar/calendar.component.d.ts +16 -14
- package/calendar/calendar.component.d.ts.map +1 -1
- package/calendar/calendar.component.js +144 -127
- package/card/card/card.component.js +12 -12
- package/card/card-badge/card-badge.component.d.ts +4 -1
- package/card/card-badge/card-badge.component.d.ts.map +1 -1
- package/card/card-badge/card-badge.component.js +18 -21
- package/card/card-button/card-button.component.d.ts +1 -0
- package/card/card-button/card-button.component.d.ts.map +1 -1
- package/card/common/card-action-common.d.ts.map +1 -1
- package/card/common/card-action-common.js +21 -22
- package/checkbox/checkbox/checkbox.component.d.ts +4 -1
- package/checkbox/checkbox/checkbox.component.d.ts.map +1 -1
- package/checkbox/checkbox/checkbox.component.js +48 -35
- package/checkbox/checkbox-group/checkbox-group.component.js +52 -39
- package/checkbox/checkbox-panel/checkbox-panel.component.d.ts +4 -1
- package/checkbox/checkbox-panel/checkbox-panel.component.d.ts.map +1 -1
- package/checkbox/checkbox-panel/checkbox-panel.component.js +46 -33
- package/checkbox/common/checkbox-common.d.ts +4 -2
- package/checkbox/common/checkbox-common.d.ts.map +1 -1
- package/checkbox/common/checkbox-common.js +15 -13
- package/chip/chip/chip.component.d.ts +5 -6
- package/chip/chip/chip.component.d.ts.map +1 -1
- package/chip/chip/chip.component.js +37 -50
- package/chip/chip-group/chip-group.component.d.ts +22 -10
- package/chip/chip-group/chip-group.component.d.ts.map +1 -1
- package/chip/chip-group/chip-group.component.js +134 -108
- package/clock/clock.component.d.ts +1 -1
- package/clock/clock.component.d.ts.map +1 -1
- package/clock/clock.component.js +61 -51
- package/container/container/container.component.js +29 -28
- package/container/sticky-bar/sticky-bar.component.d.ts.map +1 -1
- package/container/sticky-bar/sticky-bar.component.js +21 -23
- package/core/a11y/focus-trap-controller.js +14 -11
- package/core/a11y/focus.d.ts +0 -32
- package/core/a11y/focus.d.ts.map +1 -1
- package/core/a11y/focus.js +3 -63
- package/core/a11y/input-modality-detector.d.ts +0 -5
- package/core/a11y/input-modality-detector.d.ts.map +1 -1
- package/core/a11y/input-modality-detector.js +17 -27
- package/core/a11y/interactivity-checker.d.ts +0 -11
- package/core/a11y/interactivity-checker.d.ts.map +1 -1
- package/core/a11y/interactivity-checker.js +10 -11
- package/core/a11y/live-announcer.d.ts +62 -0
- package/core/a11y/live-announcer.d.ts.map +1 -0
- package/core/a11y/live-announcer.js +47 -0
- package/core/a11y.d.ts +1 -0
- package/core/a11y.d.ts.map +1 -1
- package/core/a11y.js +19 -21
- package/core/base-elements/action-base-element.d.ts +3 -1
- package/core/base-elements/action-base-element.d.ts.map +1 -1
- package/core/base-elements/action-base-element.js +12 -11
- package/core/base-elements/button-base-element.d.ts +25 -18
- package/core/base-elements/button-base-element.d.ts.map +1 -1
- package/core/base-elements/button-base-element.js +103 -66
- package/core/base-elements/link-base-element.js +6 -3
- package/core/base-elements/open-close-base-element.d.ts +3 -1
- package/core/base-elements/open-close-base-element.d.ts.map +1 -1
- package/core/base-elements/open-close-base-element.js +3 -2
- package/core/base-elements.js +9 -8
- package/core/controllers/escapable-overlay-controller.js +12 -10
- package/core/controllers/id-reference-controller.js +14 -13
- package/core/controllers/inert-controller.d.ts.map +1 -1
- package/core/controllers/inert-controller.js +10 -8
- package/core/controllers/slot-state-controller.js +26 -16
- package/core/controllers.d.ts +0 -1
- package/core/controllers.d.ts.map +1 -1
- package/core/controllers.js +17 -19
- package/core/datetime/date-adapter.d.ts +2 -2
- package/core/datetime/date-adapter.d.ts.map +1 -1
- package/core/datetime/date-adapter.js +22 -22
- package/core/datetime/native-date-adapter.d.ts +2 -3
- package/core/datetime/native-date-adapter.d.ts.map +1 -1
- package/core/datetime/native-date-adapter.js +71 -75
- package/core/decorators/force-type.js +5 -4
- package/core/decorators/id-reference.d.ts +11 -0
- package/core/decorators/id-reference.d.ts.map +1 -0
- package/core/decorators/id-reference.js +79 -0
- package/core/decorators/plain-date.d.ts +23 -0
- package/core/decorators/plain-date.d.ts.map +1 -0
- package/core/decorators/plain-date.js +29 -0
- package/core/decorators.d.ts +2 -2
- package/core/decorators.d.ts.map +1 -1
- package/core/decorators.js +17 -16
- package/core/dom/breakpoint.js +8 -8
- package/core/dom.d.ts +0 -2
- package/core/dom.d.ts.map +1 -1
- package/core/dom.js +22 -26
- package/core/eventing/event-emitter.js +5 -4
- package/core/eventing/forward-event.d.ts +0 -6
- package/core/eventing/forward-event.d.ts.map +1 -1
- package/core/eventing/forward-event.js +4 -6
- package/core/eventing.js +12 -13
- package/core/i18n/i18n.d.ts +4 -1
- package/core/i18n/i18n.d.ts.map +1 -1
- package/core/i18n/i18n.js +106 -88
- package/core/i18n.js +42 -39
- package/core/interfaces/types.d.ts +0 -1
- package/core/interfaces/types.d.ts.map +1 -1
- package/core/mixins/animation-complete-mixin.d.ts +1 -1
- package/core/mixins/animation-complete-mixin.d.ts.map +1 -1
- package/core/mixins/disabled-mixin.d.ts +2 -2
- package/core/mixins/disabled-mixin.d.ts.map +1 -1
- package/core/mixins/element-internals-mixin.d.ts +15 -0
- package/core/mixins/element-internals-mixin.d.ts.map +1 -0
- package/core/mixins/element-internals-mixin.js +41 -0
- package/core/mixins/form-associated-checkbox-mixin.d.ts +7 -13
- package/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -1
- package/core/mixins/form-associated-checkbox-mixin.js +41 -32
- package/core/mixins/form-associated-input-mixin.d.ts +15 -9
- package/core/mixins/form-associated-input-mixin.d.ts.map +1 -1
- package/core/mixins/form-associated-input-mixin.js +89 -67
- package/core/mixins/form-associated-mixin.d.ts +8 -7
- package/core/mixins/form-associated-mixin.d.ts.map +1 -1
- package/core/mixins/form-associated-mixin.js +54 -44
- package/core/mixins/form-associated-radio-button-mixin.d.ts +6 -14
- package/core/mixins/form-associated-radio-button-mixin.d.ts.map +1 -1
- package/core/mixins/form-associated-radio-button-mixin.js +36 -25
- package/core/mixins/hydration-mixin.js +13 -12
- package/core/mixins/named-slot-list-mixin.js +37 -32
- package/core/mixins/panel-mixin.js +27 -26
- package/core/mixins/readonly-mixin.d.ts +10 -0
- package/core/mixins/readonly-mixin.d.ts.map +1 -0
- package/core/mixins/readonly-mixin.js +30 -0
- package/core/mixins/required-mixin.d.ts +2 -2
- package/core/mixins/required-mixin.d.ts.map +1 -1
- package/core/mixins.d.ts +2 -0
- package/core/mixins.d.ts.map +1 -1
- package/core/mixins.js +25 -21
- package/core/overlay/position.js +23 -23
- package/core/styles/core/mediaqueries.scss +1 -1
- package/core/styles/core.scss +65 -42
- package/core/styles/mixins/font-face.scss +6 -18
- package/core/styles/mixins/link.scss +3 -7
- package/core/styles/mixins/lists.scss +0 -63
- package/core/styles/mixins/overlay.scss +7 -1
- package/core/styles/mixins/table.scss +24 -8
- package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables.scss +530 -0
- package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables_css--mixin.scss +1123 -0
- package/core/styles/table.scss +0 -4
- package/core/testing/event-spy.js +4 -2
- package/core/testing/wait-for-image-ready.js +9 -8
- package/core/testing/wait-for-render.js +9 -8
- package/core/testing.d.ts +0 -1
- package/core/testing.d.ts.map +1 -1
- package/core/testing.js +8 -10
- package/core.css +41 -18
- package/custom-elements.json +19267 -12207
- package/date-input/date-input.component.d.ts +12 -14
- package/date-input/date-input.component.d.ts.map +1 -1
- package/date-input/date-input.component.js +56 -58
- package/datepicker/common/datepicker-association-controllers.d.ts.map +1 -1
- package/datepicker/common/datepicker-association-controllers.js +28 -25
- package/datepicker/common/datepicker-button.d.ts +0 -12
- package/datepicker/common/datepicker-button.d.ts.map +1 -1
- package/datepicker/common/datepicker-button.js +43 -53
- package/datepicker/datepicker/datepicker.component.d.ts +3 -20
- package/datepicker/datepicker/datepicker.component.d.ts.map +1 -1
- package/datepicker/datepicker/datepicker.component.js +97 -94
- package/datepicker/datepicker-next-day/datepicker-next-day.component.d.ts +2 -0
- package/datepicker/datepicker-next-day/datepicker-next-day.component.d.ts.map +1 -1
- package/datepicker/datepicker-next-day/datepicker-next-day.component.js +12 -12
- package/datepicker/datepicker-previous-day/datepicker-previous-day.component.d.ts +2 -0
- package/datepicker/datepicker-previous-day/datepicker-previous-day.component.d.ts.map +1 -1
- package/datepicker/datepicker-previous-day/datepicker-previous-day.component.js +13 -13
- package/datepicker/datepicker-toggle/datepicker-toggle.component.d.ts +0 -8
- package/datepicker/datepicker-toggle/datepicker-toggle.component.d.ts.map +1 -1
- package/datepicker/datepicker-toggle/datepicker-toggle.component.js +75 -82
- package/datepicker/datepicker.js +2 -4
- package/datepicker.js +10 -12
- package/development/accordion/accordion.component.js +7 -4
- package/development/action-group/action-group.component.d.ts.map +1 -1
- package/development/action-group/action-group.component.js +5 -3
- package/development/alert/alert/alert.component.d.ts +2 -7
- package/development/alert/alert/alert.component.d.ts.map +1 -1
- package/development/alert/alert/alert.component.js +10 -27
- package/development/alert/alert-group/alert-group.component.js +3 -2
- package/development/autocomplete/autocomplete-base-element.d.ts +26 -17
- package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -1
- package/development/autocomplete/autocomplete-base-element.js +96 -55
- package/development/autocomplete/autocomplete.component.d.ts +3 -2
- package/development/autocomplete/autocomplete.component.d.ts.map +1 -1
- package/development/autocomplete/autocomplete.component.js +15 -14
- package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.d.ts +3 -2
- package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +20 -16
- package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.d.ts +1 -0
- package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.js +5 -5
- package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.d.ts +4 -1
- package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.js +5 -7
- package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.js +7 -4
- package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.d.ts +4 -6
- package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +26 -22
- package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.d.ts +4 -1
- package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.js +6 -8
- package/development/autocomplete.js +2 -3
- package/development/breadcrumb/breadcrumb/breadcrumb.component.js +3 -3
- package/development/breadcrumb/breadcrumb-group/breadcrumb-group.component.d.ts +1 -0
- package/development/breadcrumb/breadcrumb-group/breadcrumb-group.component.d.ts.map +1 -1
- package/development/breadcrumb/breadcrumb-group/breadcrumb-group.component.js +13 -12
- package/development/button/accent-button/accent-button.component.d.ts +1 -0
- package/development/button/accent-button/accent-button.component.d.ts.map +1 -1
- package/development/button/accent-button/accent-button.component.js +1 -1
- package/development/button/accent-button-link/accent-button-link.component.js +1 -1
- package/development/button/accent-button-static/accent-button-static.component.js +1 -1
- package/development/button/button/button.component.d.ts +1 -0
- package/development/button/button/button.component.d.ts.map +1 -1
- package/development/button/button/button.component.js +1 -1
- package/development/button/button-link/button-link.component.js +1 -1
- package/development/button/button-static/button-static.component.js +1 -1
- package/development/button/common/button-common.d.ts +4 -6
- package/development/button/common/button-common.d.ts.map +1 -1
- package/development/button/common/button-common.js +1 -1
- package/development/button/mini-button/mini-button.component.d.ts +1 -0
- package/development/button/mini-button/mini-button.component.d.ts.map +1 -1
- package/development/button/mini-button/mini-button.component.js +1 -1
- package/development/button/mini-button-group/mini-button-group.component.js +3 -2
- package/development/button/secondary-button/secondary-button.component.d.ts +1 -0
- package/development/button/secondary-button/secondary-button.component.d.ts.map +1 -1
- package/development/button/secondary-button/secondary-button.component.js +1 -1
- package/development/button/secondary-button-link/secondary-button-link.component.js +1 -1
- package/development/button/secondary-button-static/secondary-button-static.component.js +1 -1
- package/development/button/transparent-button/transparent-button.component.d.ts +1 -0
- package/development/button/transparent-button/transparent-button.component.d.ts.map +1 -1
- package/development/button/transparent-button/transparent-button.component.js +1 -1
- package/development/button/transparent-button-link/transparent-button-link.component.js +1 -1
- package/development/button/transparent-button-static/transparent-button-static.component.js +1 -1
- package/development/calendar/calendar.component.d.ts +16 -14
- package/development/calendar/calendar.component.d.ts.map +1 -1
- package/development/calendar/calendar.component.js +65 -40
- package/development/card/card/card.component.js +1 -1
- package/development/card/card-badge/card-badge.component.d.ts +4 -1
- package/development/card/card-badge/card-badge.component.d.ts.map +1 -1
- package/development/card/card-badge/card-badge.component.js +6 -8
- package/development/card/card-button/card-button.component.d.ts +1 -0
- package/development/card/card-button/card-button.component.d.ts.map +1 -1
- package/development/card/card-button/card-button.component.js +1 -1
- package/development/card/card-link/card-link.component.js +1 -1
- package/development/card/common/card-action-common.d.ts.map +1 -1
- package/development/card/common/card-action-common.js +10 -17
- package/development/checkbox/checkbox/checkbox.component.d.ts +4 -1
- package/development/checkbox/checkbox/checkbox.component.d.ts.map +1 -1
- package/development/checkbox/checkbox/checkbox.component.js +23 -5
- package/development/checkbox/checkbox-group/checkbox-group.component.js +21 -8
- package/development/checkbox/checkbox-panel/checkbox-panel.component.d.ts +4 -1
- package/development/checkbox/checkbox-panel/checkbox-panel.component.d.ts.map +1 -1
- package/development/checkbox/checkbox-panel/checkbox-panel.component.js +24 -5
- package/development/checkbox/common/checkbox-common.d.ts +4 -2
- package/development/checkbox/common/checkbox-common.d.ts.map +1 -1
- package/development/checkbox/common/checkbox-common.js +5 -3
- package/development/chip/chip/chip.component.d.ts +5 -6
- package/development/chip/chip/chip.component.d.ts.map +1 -1
- package/development/chip/chip/chip.component.js +12 -31
- package/development/chip/chip-group/chip-group.component.d.ts +22 -10
- package/development/chip/chip-group/chip-group.component.d.ts.map +1 -1
- package/development/chip/chip-group/chip-group.component.js +76 -40
- package/development/chip-label/chip-label.component.js +1 -1
- package/development/clock/clock.component.d.ts +1 -1
- package/development/clock/clock.component.d.ts.map +1 -1
- package/development/clock/clock.component.js +35 -25
- package/development/container/container/container.component.js +3 -2
- package/development/container/sticky-bar/sticky-bar.component.d.ts.map +1 -1
- package/development/container/sticky-bar/sticky-bar.component.js +5 -6
- package/development/core/a11y/arrow-navigation.js +1 -1
- package/development/core/a11y/fake-event-detection.js +1 -1
- package/development/core/a11y/focus-trap-controller.js +9 -6
- package/development/core/a11y/focus-visible-within-controller.js +1 -1
- package/development/core/a11y/focus.d.ts +0 -32
- package/development/core/a11y/focus.d.ts.map +1 -1
- package/development/core/a11y/focus.js +2 -80
- package/development/core/a11y/input-modality-detector.d.ts +0 -5
- package/development/core/a11y/input-modality-detector.d.ts.map +1 -1
- package/development/core/a11y/input-modality-detector.js +4 -19
- package/development/core/a11y/interactivity-checker.d.ts +0 -11
- package/development/core/a11y/interactivity-checker.d.ts.map +1 -1
- package/development/core/a11y/interactivity-checker.js +2 -3
- package/development/core/a11y/live-announcer.d.ts +62 -0
- package/development/core/a11y/live-announcer.d.ts.map +1 -0
- package/development/core/a11y/live-announcer.js +87 -0
- package/development/core/a11y.d.ts +1 -0
- package/development/core/a11y.d.ts.map +1 -1
- package/development/core/a11y.js +7 -9
- package/development/core/base-elements/action-base-element.d.ts +3 -1
- package/development/core/base-elements/action-base-element.d.ts.map +1 -1
- package/development/core/base-elements/action-base-element.js +5 -3
- package/development/core/base-elements/button-base-element.d.ts +25 -18
- package/development/core/base-elements/button-base-element.d.ts.map +1 -1
- package/development/core/base-elements/button-base-element.js +109 -66
- package/development/core/base-elements/link-base-element.js +7 -4
- package/development/core/base-elements/open-close-base-element.d.ts +3 -1
- package/development/core/base-elements/open-close-base-element.d.ts.map +1 -1
- package/development/core/base-elements/open-close-base-element.js +4 -3
- package/development/core/base-elements.js +2 -1
- package/development/core/config/config.js +1 -1
- package/development/core/controllers/escapable-overlay-controller.js +5 -3
- package/development/core/controllers/id-reference-controller.js +3 -2
- package/development/core/controllers/inert-controller.d.ts.map +1 -1
- package/development/core/controllers/inert-controller.js +6 -4
- package/development/core/controllers/language-controller.js +1 -1
- package/development/core/controllers/media-matchers-controller.js +1 -1
- package/development/core/controllers/slot-state-controller.js +18 -8
- package/development/core/controllers.d.ts +0 -1
- package/development/core/controllers.d.ts.map +1 -1
- package/development/core/controllers.js +1 -3
- package/development/core/datetime/date-adapter.d.ts +2 -2
- package/development/core/datetime/date-adapter.d.ts.map +1 -1
- package/development/core/datetime/date-adapter.js +6 -6
- package/development/core/datetime/native-date-adapter.d.ts +2 -3
- package/development/core/datetime/native-date-adapter.d.ts.map +1 -1
- package/development/core/datetime/native-date-adapter.js +3 -7
- package/development/core/decorators/force-type.js +4 -3
- package/development/core/decorators/get-override.js +1 -1
- package/development/core/decorators/handle-distinct-change.js +1 -1
- package/development/core/decorators/host-attributes.js +1 -1
- package/development/core/decorators/id-reference.d.ts +11 -0
- package/development/core/decorators/id-reference.d.ts.map +1 -0
- package/development/core/decorators/id-reference.js +123 -0
- package/development/core/decorators/plain-date.d.ts +23 -0
- package/development/core/decorators/plain-date.d.ts.map +1 -0
- package/development/core/decorators/plain-date.js +37 -0
- package/development/core/decorators/slot-state.js +1 -1
- package/development/core/decorators.d.ts +2 -2
- package/development/core/decorators.d.ts.map +1 -1
- package/development/core/decorators.js +5 -4
- package/development/core/dom/animation.js +1 -1
- package/development/core/dom/breakpoint.js +2 -2
- package/development/core/dom/host-context.js +1 -1
- package/development/core/dom/platform.js +1 -1
- package/development/core/dom/scroll.js +1 -1
- package/development/core/dom/set-or-remove-attribute.js +1 -1
- package/development/core/dom.d.ts +0 -2
- package/development/core/dom.d.ts.map +1 -1
- package/development/core/dom.js +1 -5
- package/development/core/eventing/composed-path-has-attribute.js +1 -1
- package/development/core/eventing/event-emitter.js +3 -2
- package/development/core/eventing/form-element-handlers.js +1 -1
- package/development/core/eventing/forward-event.d.ts +0 -6
- package/development/core/eventing/forward-event.d.ts.map +1 -1
- package/development/core/eventing/forward-event.js +2 -4
- package/development/core/eventing/throttle.js +1 -1
- package/development/core/eventing.js +1 -2
- package/development/core/i18n/i18n.d.ts +4 -1
- package/development/core/i18n/i18n.d.ts.map +1 -1
- package/development/core/i18n/i18n.js +43 -22
- package/development/core/i18n.js +4 -1
- package/development/core/interfaces/types.d.ts +0 -1
- package/development/core/interfaces/types.d.ts.map +1 -1
- package/development/core/mixins/animation-complete-mixin.d.ts +1 -1
- package/development/core/mixins/animation-complete-mixin.d.ts.map +1 -1
- package/development/core/mixins/animation-complete-mixin.js +1 -1
- package/development/core/mixins/disabled-mixin.d.ts +2 -2
- package/development/core/mixins/disabled-mixin.d.ts.map +1 -1
- package/development/core/mixins/disabled-mixin.js +1 -1
- package/development/core/mixins/element-internals-mixin.d.ts +15 -0
- package/development/core/mixins/element-internals-mixin.d.ts.map +1 -0
- package/development/core/mixins/element-internals-mixin.js +59 -0
- package/development/core/mixins/form-associated-checkbox-mixin.d.ts +7 -13
- package/development/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -1
- package/development/core/mixins/form-associated-checkbox-mixin.js +16 -11
- package/development/core/mixins/form-associated-input-mixin.d.ts +15 -9
- package/development/core/mixins/form-associated-input-mixin.d.ts.map +1 -1
- package/development/core/mixins/form-associated-input-mixin.js +58 -33
- package/development/core/mixins/form-associated-mixin.d.ts +8 -7
- package/development/core/mixins/form-associated-mixin.d.ts.map +1 -1
- package/development/core/mixins/form-associated-mixin.js +37 -21
- package/development/core/mixins/form-associated-radio-button-mixin.d.ts +6 -14
- package/development/core/mixins/form-associated-radio-button-mixin.d.ts.map +1 -1
- package/development/core/mixins/form-associated-radio-button-mixin.js +28 -14
- package/development/core/mixins/hydration-mixin.js +4 -3
- package/development/core/mixins/named-slot-list-mixin.js +7 -4
- package/development/core/mixins/negative-mixin.js +1 -1
- package/development/core/mixins/panel-mixin.js +3 -2
- package/development/core/mixins/readonly-mixin.d.ts +10 -0
- package/development/core/mixins/readonly-mixin.d.ts.map +1 -0
- package/development/core/mixins/readonly-mixin.js +40 -0
- package/development/core/mixins/required-mixin.d.ts +2 -2
- package/development/core/mixins/required-mixin.d.ts.map +1 -1
- package/development/core/mixins/required-mixin.js +1 -1
- package/development/core/mixins/update-scheduler-mixin.js +1 -1
- package/development/core/mixins.d.ts +2 -0
- package/development/core/mixins.d.ts.map +1 -1
- package/development/core/mixins.js +5 -1
- package/development/core/overlay/overlay-option-panel.js +1 -1
- package/development/core/overlay/overlay-trigger-attributes.js +1 -1
- package/development/core/overlay/overlay.js +1 -1
- package/development/core/overlay/position.js +5 -5
- package/development/core/testing/event-spy.js +5 -3
- package/development/core/testing/mocha-extensions.js +1 -1
- package/development/core/testing/wait-for-condition.js +1 -1
- package/development/core/testing/wait-for-image-ready.js +3 -2
- package/development/core/testing/wait-for-render.js +3 -2
- package/development/core/testing.d.ts +0 -1
- package/development/core/testing.d.ts.map +1 -1
- package/development/core/testing.js +1 -3
- package/development/date-input/date-input.component.d.ts +12 -14
- package/development/date-input/date-input.component.d.ts.map +1 -1
- package/development/date-input/date-input.component.js +22 -25
- package/development/datepicker/common/datepicker-association-controllers.d.ts.map +1 -1
- package/development/datepicker/common/datepicker-association-controllers.js +11 -8
- package/development/datepicker/common/datepicker-button.d.ts +0 -12
- package/development/datepicker/common/datepicker-button.d.ts.map +1 -1
- package/development/datepicker/common/datepicker-button.js +11 -29
- package/development/datepicker/datepicker/datepicker.component.d.ts +3 -20
- package/development/datepicker/datepicker/datepicker.component.d.ts.map +1 -1
- package/development/datepicker/datepicker/datepicker.component.js +56 -52
- package/development/datepicker/datepicker-next-day/datepicker-next-day.component.d.ts +2 -0
- package/development/datepicker/datepicker-next-day/datepicker-next-day.component.d.ts.map +1 -1
- package/development/datepicker/datepicker-next-day/datepicker-next-day.component.js +7 -6
- package/development/datepicker/datepicker-previous-day/datepicker-previous-day.component.d.ts +2 -0
- package/development/datepicker/datepicker-previous-day/datepicker-previous-day.component.d.ts.map +1 -1
- package/development/datepicker/datepicker-previous-day/datepicker-previous-day.component.js +7 -6
- package/development/datepicker/datepicker-toggle/datepicker-toggle.component.d.ts +0 -8
- package/development/datepicker/datepicker-toggle/datepicker-toggle.component.d.ts.map +1 -1
- package/development/datepicker/datepicker-toggle/datepicker-toggle.component.js +20 -33
- package/development/datepicker/datepicker.js +2 -4
- package/development/datepicker.js +2 -4
- package/development/dialog/dialog/dialog.component.js +27 -16
- package/development/dialog/dialog-actions/dialog-actions.component.js +1 -1
- package/development/dialog/dialog-content/dialog-content.component.js +1 -1
- package/development/dialog/dialog-title/dialog-title.component.js +1 -1
- package/development/divider/divider.component.d.ts +2 -1
- package/development/divider/divider.component.d.ts.map +1 -1
- package/development/divider/divider.component.js +5 -8
- package/development/expansion-panel/expansion-panel/expansion-panel.component.js +13 -9
- package/development/expansion-panel/expansion-panel-content/expansion-panel-content.component.d.ts +5 -1
- package/development/expansion-panel/expansion-panel-content/expansion-panel-content.component.d.ts.map +1 -1
- package/development/expansion-panel/expansion-panel-content/expansion-panel-content.component.js +9 -8
- package/development/expansion-panel/expansion-panel-header/expansion-panel-header.component.d.ts +2 -0
- package/development/expansion-panel/expansion-panel-header/expansion-panel-header.component.d.ts.map +1 -1
- package/development/expansion-panel/expansion-panel-header/expansion-panel-header.component.js +10 -8
- package/development/file-selector/common/file-selector-common.d.ts +6 -5
- package/development/file-selector/common/file-selector-common.d.ts.map +1 -1
- package/development/file-selector/common/file-selector-common.js +6 -5
- package/development/file-selector/file-selector/file-selector.component.d.ts +1 -0
- package/development/file-selector/file-selector/file-selector.component.d.ts.map +1 -1
- package/development/file-selector/file-selector/file-selector.component.js +1 -1
- package/development/file-selector/file-selector-dropzone/file-selector-dropzone.component.d.ts +1 -0
- package/development/file-selector/file-selector-dropzone/file-selector-dropzone.component.d.ts.map +1 -1
- package/development/file-selector/file-selector-dropzone/file-selector-dropzone.component.js +1 -1
- package/development/flip-card/flip-card/flip-card.component.js +13 -7
- package/development/flip-card/flip-card-details/flip-card-details.component.d.ts +1 -0
- package/development/flip-card/flip-card-details/flip-card-details.component.d.ts.map +1 -1
- package/development/flip-card/flip-card-details/flip-card-details.component.js +8 -6
- package/development/flip-card/flip-card-summary/flip-card-summary.component.d.ts +1 -0
- package/development/flip-card/flip-card-summary/flip-card-summary.component.d.ts.map +1 -1
- package/development/flip-card/flip-card-summary/flip-card-summary.component.js +8 -6
- package/development/footer/footer.component.js +2 -2
- package/development/form-error/form-error.component.js +4 -3
- package/development/form-field/form-field/form-field.component.d.ts +9 -10
- package/development/form-field/form-field/form-field.component.d.ts.map +1 -1
- package/development/form-field/form-field/form-field.component.js +183 -183
- package/development/form-field/form-field-clear/form-field-clear.component.d.ts +1 -0
- package/development/form-field/form-field-clear/form-field-clear.component.d.ts.map +1 -1
- package/development/form-field/form-field-clear/form-field-clear.component.js +8 -8
- package/development/header/common/header-action-common.d.ts +3 -3
- package/development/header/common/header-action-common.d.ts.map +1 -1
- package/development/header/common/header-action-common.js +1 -1
- package/development/header/header/header.component.d.ts +6 -3
- package/development/header/header/header.component.d.ts.map +1 -1
- package/development/header/header/header.component.js +17 -13
- package/development/header/header-button/header-button.component.d.ts +1 -0
- package/development/header/header-button/header-button.component.d.ts.map +1 -1
- package/development/header/header-button/header-button.component.js +1 -1
- package/development/header/header-link/header-link.component.js +1 -1
- package/development/icon/icon-base.js +1 -1
- package/development/icon/icon-name-mixin.js +1 -1
- package/development/icon/icon-request.js +3 -2
- package/development/icon/icon-validate.js +1 -1
- package/development/icon/icon.component.js +1 -1
- package/development/image/image.component.d.ts +1 -1
- package/development/image/image.component.d.ts.map +1 -1
- package/development/image/image.component.js +15 -12
- package/development/journey-header/journey-header.component.js +1 -1
- package/development/lead-container/lead-container.component.js +1 -1
- package/development/link/block-link/block-link.component.js +1 -1
- package/development/link/block-link-button/block-link-button.component.d.ts +1 -0
- package/development/link/block-link-button/block-link-button.component.d.ts.map +1 -1
- package/development/link/block-link-button/block-link-button.component.js +1 -1
- package/development/link/block-link-static/block-link-static.component.js +1 -1
- package/development/link/common/block-link-common.d.ts +3 -4
- package/development/link/common/block-link-common.d.ts.map +1 -1
- package/development/link/common/block-link-common.js +4 -4
- package/development/link/common/inline-link-common.d.ts +3 -2
- package/development/link/common/inline-link-common.d.ts.map +1 -1
- package/development/link/common/inline-link-common.js +2 -2
- package/development/link/common/link-common.d.ts +4 -2
- package/development/link/common/link-common.d.ts.map +1 -1
- package/development/link/common/link-common.js +1 -1
- package/development/link/common.js +1 -1
- package/development/link/link/link.component.js +1 -1
- package/development/link/link-button/link-button.component.d.ts +1 -0
- package/development/link/link-button/link-button.component.d.ts.map +1 -1
- package/development/link/link-button/link-button.component.js +1 -1
- package/development/link/link-static/link-static.component.js +1 -1
- package/development/{link-common-CJEWffDZ.js → link-common-DPLJx5Uo.js} +2 -2
- package/development/link-list/common/link-list-base.js +1 -1
- package/development/link-list/link-list/link-list.component.js +1 -1
- package/development/link-list/link-list-anchor/link-list-anchor.component.js +2 -2
- package/development/link.js +1 -1
- package/development/loading-indicator/loading-indicator.component.d.ts +5 -1
- package/development/loading-indicator/loading-indicator.component.d.ts.map +1 -1
- package/development/loading-indicator/loading-indicator.component.js +9 -8
- package/development/loading-indicator-circle/loading-indicator-circle.component.d.ts +5 -1
- package/development/loading-indicator-circle/loading-indicator-circle.component.d.ts.map +1 -1
- package/development/loading-indicator-circle/loading-indicator-circle.component.js +9 -8
- package/development/logo/logo.component.js +1 -1
- package/development/map-container/map-container.component.js +3 -2
- package/development/menu/common/menu-action-common.d.ts +4 -8
- package/development/menu/common/menu-action-common.d.ts.map +1 -1
- package/development/menu/common/menu-action-common.js +5 -63
- package/development/menu/menu/menu.component.d.ts +3 -3
- package/development/menu/menu/menu.component.d.ts.map +1 -1
- package/development/menu/menu/menu.component.js +34 -28
- package/development/menu/menu-button/menu-button.component.d.ts +1 -0
- package/development/menu/menu-button/menu-button.component.d.ts.map +1 -1
- package/development/menu/menu-button/menu-button.component.js +1 -1
- package/development/menu/menu-link/menu-link.component.js +1 -1
- package/development/message/message.component.js +1 -1
- package/development/navigation/common/navigation-action-common.js +5 -3
- package/development/navigation/navigation/navigation.component.d.ts +4 -3
- package/development/navigation/navigation/navigation.component.d.ts.map +1 -1
- package/development/navigation/navigation/navigation.component.js +45 -32
- package/development/navigation/navigation-button/navigation-button.component.d.ts +1 -0
- package/development/navigation/navigation-button/navigation-button.component.d.ts.map +1 -1
- package/development/navigation/navigation-button/navigation-button.component.js +1 -1
- package/development/navigation/navigation-link/navigation-link.component.js +1 -1
- package/development/navigation/navigation-list/navigation-list.component.js +1 -1
- package/development/navigation/navigation-marker/navigation-marker.component.js +6 -4
- package/development/navigation/navigation-section/navigation-section.component.d.ts +3 -3
- package/development/navigation/navigation-section/navigation-section.component.d.ts.map +1 -1
- package/development/navigation/navigation-section/navigation-section.component.js +41 -33
- package/development/notification/notification.component.d.ts +4 -7
- package/development/notification/notification.component.d.ts.map +1 -1
- package/development/notification/notification.component.js +35 -50
- package/development/option/optgroup/optgroup-base-element.d.ts +2 -1
- package/development/option/optgroup/optgroup-base-element.d.ts.map +1 -1
- package/development/option/optgroup/optgroup-base-element.js +21 -40
- package/development/option/optgroup/optgroup.component.js +10 -6
- package/development/option/option/option-base-element.d.ts +6 -12
- package/development/option/option/option-base-element.d.ts.map +1 -1
- package/development/option/option/option-base-element.js +28 -23
- package/development/option/option/option.component.d.ts +5 -2
- package/development/option/option/option.component.d.ts.map +1 -1
- package/development/option/option/option.component.js +33 -27
- package/development/overlay/overlay-base-element.d.ts +1 -8
- package/development/overlay/overlay-base-element.d.ts.map +1 -1
- package/development/overlay/overlay-base-element.js +10 -28
- package/development/overlay/overlay.component.js +9 -7
- package/development/paginator/common/paginator-common.d.ts +3 -7
- package/development/paginator/common/paginator-common.d.ts.map +1 -1
- package/development/paginator/common/paginator-common.js +9 -27
- package/development/paginator/compact-paginator/compact-paginator.component.js +1 -1
- package/development/paginator/paginator/paginator.component.js +3 -2
- package/development/popover/popover/popover.component.d.ts +3 -3
- package/development/popover/popover/popover.component.d.ts.map +1 -1
- package/development/popover/popover/popover.component.js +26 -21
- package/development/popover/popover-trigger/popover-trigger.component.d.ts +1 -0
- package/development/popover/popover-trigger/popover-trigger.component.d.ts.map +1 -1
- package/development/popover/popover-trigger/popover-trigger.component.js +1 -1
- package/development/radio-button/common/radio-button-common.d.ts +4 -2
- package/development/radio-button/common/radio-button-common.d.ts.map +1 -1
- package/development/radio-button/common/radio-button-common.js +10 -6
- package/development/radio-button/radio-button/radio-button.component.d.ts +6 -2
- package/development/radio-button/radio-button/radio-button.component.d.ts.map +1 -1
- package/development/radio-button/radio-button/radio-button.component.js +25 -5
- package/development/radio-button/radio-button-group/radio-button-group.component.d.ts +8 -6
- package/development/radio-button/radio-button-group/radio-button-group.component.d.ts.map +1 -1
- package/development/radio-button/radio-button-group/radio-button-group.component.js +31 -18
- package/development/radio-button/radio-button-panel/radio-button-panel.component.d.ts +6 -2
- package/development/radio-button/radio-button-panel/radio-button-panel.component.d.ts.map +1 -1
- package/development/radio-button/radio-button-panel/radio-button-panel.component.js +28 -6
- package/development/screen-reader-only/screen-reader-only.component.js +1 -1
- package/development/select/select.component.d.ts +14 -12
- package/development/select/select.component.d.ts.map +1 -1
- package/development/select/select.component.js +156 -90
- package/development/selection-expansion-panel/selection-expansion-panel.component.js +11 -7
- package/development/sidebar/icon-sidebar/icon-sidebar.component.d.ts +4 -2
- package/development/sidebar/icon-sidebar/icon-sidebar.component.d.ts.map +1 -1
- package/development/sidebar/icon-sidebar/icon-sidebar.component.js +5 -6
- package/development/sidebar/icon-sidebar-button/icon-sidebar-button.component.d.ts +1 -0
- package/development/sidebar/icon-sidebar-button/icon-sidebar-button.component.d.ts.map +1 -1
- package/development/sidebar/icon-sidebar-button/icon-sidebar-button.component.js +1 -1
- package/development/sidebar/icon-sidebar-container/icon-sidebar-container.component.js +7 -4
- package/development/sidebar/icon-sidebar-content/icon-sidebar-content.component.js +1 -1
- package/development/sidebar/icon-sidebar-link/icon-sidebar-link.component.js +1 -1
- package/development/sidebar/sidebar/sidebar.component.js +16 -9
- package/development/sidebar/sidebar-close-button/sidebar-close-button.component.d.ts +2 -0
- package/development/sidebar/sidebar-close-button/sidebar-close-button.component.d.ts.map +1 -1
- package/development/sidebar/sidebar-close-button/sidebar-close-button.component.js +6 -3
- package/development/sidebar/sidebar-container/sidebar-container.component.js +13 -9
- package/development/sidebar/sidebar-content/sidebar-content.component.js +1 -1
- package/development/sidebar/sidebar-title/sidebar-title.component.d.ts +1 -0
- package/development/sidebar/sidebar-title/sidebar-title.component.d.ts.map +1 -1
- package/development/sidebar/sidebar-title/sidebar-title.component.js +7 -4
- package/development/signet/signet.component.js +1 -1
- package/development/skiplink-list/skiplink-list.component.js +1 -1
- package/development/slider/slider.component.d.ts +6 -15
- package/development/slider/slider.component.d.ts.map +1 -1
- package/development/slider/slider.component.js +40 -87
- package/development/status/status.component.js +1 -1
- package/development/stepper/step/step.component.d.ts +4 -1
- package/development/stepper/step/step.component.d.ts.map +1 -1
- package/development/stepper/step/step.component.js +12 -12
- package/development/stepper/step-label/step-label.component.d.ts +2 -0
- package/development/stepper/step-label/step-label.component.d.ts.map +1 -1
- package/development/stepper/step-label/step-label.component.js +8 -10
- package/development/stepper/stepper/stepper.component.d.ts +1 -1
- package/development/stepper/stepper/stepper.component.d.ts.map +1 -1
- package/development/stepper/stepper/stepper.component.js +37 -23
- package/development/table/table-wrapper/table-wrapper.component.d.ts +2 -1
- package/development/table/table-wrapper/table-wrapper.component.d.ts.map +1 -1
- package/development/table/table-wrapper/table-wrapper.component.js +10 -7
- package/development/tabs/tab/tab.component.d.ts +4 -1
- package/development/tabs/tab/tab.component.d.ts.map +1 -1
- package/development/tabs/tab/tab.component.js +4 -3
- package/development/tabs/tab-group/tab-group.component.d.ts.map +1 -1
- package/development/tabs/tab-group/tab-group.component.js +39 -26
- package/development/tabs/tab-label/tab-label.component.d.ts +2 -1
- package/development/tabs/tab-label/tab-label.component.d.ts.map +1 -1
- package/development/tabs/tab-label/tab-label.component.js +4 -4
- package/development/tag/tag/tag.component.d.ts +7 -3
- package/development/tag/tag/tag.component.d.ts.map +1 -1
- package/development/tag/tag/tag.component.js +37 -12
- package/development/tag/tag-group/tag-group.component.d.ts +7 -5
- package/development/tag/tag-group/tag-group.component.d.ts.map +1 -1
- package/development/tag/tag-group/tag-group.component.js +40 -24
- package/development/teaser/teaser.component.js +1 -1
- package/development/teaser-hero/teaser-hero.component.js +1 -1
- package/development/teaser-product/common/teaser-product-common.d.ts +4 -2
- package/development/teaser-product/common/teaser-product-common.d.ts.map +1 -1
- package/development/teaser-product/common/teaser-product-common.js +1 -1
- package/development/teaser-product/teaser-product/teaser-product.component.js +1 -1
- package/development/teaser-product/teaser-product-static/teaser-product-static.component.js +1 -1
- package/development/time-input/time-input.component.d.ts +29 -42
- package/development/time-input/time-input.component.d.ts.map +1 -1
- package/development/time-input/time-input.component.js +158 -201
- package/development/timetable-occupancy/timetable-occupancy.component.js +1 -1
- package/development/timetable-occupancy-icon/timetable-occupancy-icon.component.js +3 -2
- package/development/title/title-base.d.ts +4 -1
- package/development/title/title-base.d.ts.map +1 -1
- package/development/title/title-base.js +9 -17
- package/development/title/title.component.js +1 -1
- package/development/toast/toast.component.d.ts +3 -4
- package/development/toast/toast.component.d.ts.map +1 -1
- package/development/toast/toast.component.js +59 -76
- package/development/toggle/toggle/toggle.component.d.ts +13 -9
- package/development/toggle/toggle/toggle.component.d.ts.map +1 -1
- package/development/toggle/toggle/toggle.component.js +59 -53
- package/development/toggle/toggle-option/toggle-option.component.d.ts +5 -3
- package/development/toggle/toggle-option/toggle-option.component.d.ts.map +1 -1
- package/development/toggle/toggle-option/toggle-option.component.js +23 -18
- package/development/toggle-check/toggle-check.component.d.ts +5 -2
- package/development/toggle-check/toggle-check.component.d.ts.map +1 -1
- package/development/toggle-check/toggle-check.component.js +19 -4
- package/development/train/train/train.component.js +1 -1
- package/development/train/train-blocked-passage/train-blocked-passage.component.js +1 -1
- package/development/train/train-formation/train-formation.component.js +7 -5
- package/development/train/train-wagon/train-wagon.component.js +1 -1
- package/development/visual-checkbox/visual-checkbox.component.js +1 -1
- package/dialog/dialog/dialog.component.js +70 -59
- package/divider/divider.component.d.ts +2 -1
- package/divider/divider.component.d.ts.map +1 -1
- package/divider/divider.component.js +26 -29
- package/expansion-panel/expansion-panel/expansion-panel.component.js +9 -5
- package/expansion-panel/expansion-panel-content/expansion-panel-content.component.d.ts +5 -1
- package/expansion-panel/expansion-panel-content/expansion-panel-content.component.d.ts.map +1 -1
- package/expansion-panel/expansion-panel-content/expansion-panel-content.component.js +14 -14
- package/expansion-panel/expansion-panel-header/expansion-panel-header.component.d.ts +2 -0
- package/expansion-panel/expansion-panel-header/expansion-panel-header.component.d.ts.map +1 -1
- package/expansion-panel/expansion-panel-header/expansion-panel-header.component.js +33 -32
- package/file-selector/common/file-selector-common.d.ts +6 -5
- package/file-selector/common/file-selector-common.d.ts.map +1 -1
- package/file-selector/common/file-selector-common.js +37 -36
- package/file-selector/file-selector/file-selector.component.d.ts +1 -0
- package/file-selector/file-selector/file-selector.component.d.ts.map +1 -1
- package/file-selector/file-selector-dropzone/file-selector-dropzone.component.d.ts +1 -0
- package/file-selector/file-selector-dropzone/file-selector-dropzone.component.d.ts.map +1 -1
- package/flip-card/flip-card/flip-card.component.js +54 -48
- package/flip-card/flip-card-details/flip-card-details.component.d.ts +1 -0
- package/flip-card/flip-card-details/flip-card-details.component.d.ts.map +1 -1
- package/flip-card/flip-card-details/flip-card-details.component.js +19 -18
- package/flip-card/flip-card-summary/flip-card-summary.component.d.ts +1 -0
- package/flip-card/flip-card-summary/flip-card-summary.component.d.ts.map +1 -1
- package/flip-card/flip-card-summary/flip-card-summary.component.js +24 -23
- package/font-characters-extension.css +3 -3
- package/footer/footer.component.js +1 -1
- package/form-error/form-error.component.js +14 -13
- package/form-field/form-field/form-field.component.d.ts +9 -10
- package/form-field/form-field/form-field.component.d.ts.map +1 -1
- package/form-field/form-field/form-field.component.js +171 -175
- package/form-field/form-field-clear/form-field-clear.component.d.ts +1 -0
- package/form-field/form-field-clear/form-field-clear.component.d.ts.map +1 -1
- package/form-field/form-field-clear/form-field-clear.component.js +19 -20
- package/header/common/header-action-common.d.ts +3 -3
- package/header/common/header-action-common.d.ts.map +1 -1
- package/header/header/header.component.d.ts +6 -3
- package/header/header/header.component.d.ts.map +1 -1
- package/header/header/header.component.js +52 -47
- package/header/header-button/header-button.component.d.ts +1 -0
- package/header/header-button/header-button.component.d.ts.map +1 -1
- package/icon/icon-request.js +11 -10
- package/icon-sidebar-button-common-DG8bnrBu.js +7 -0
- package/image/image.component.d.ts +1 -1
- package/image/image.component.d.ts.map +1 -1
- package/image/image.component.js +10 -6
- package/link/block-link-button/block-link-button.component.d.ts +1 -0
- package/link/block-link-button/block-link-button.component.d.ts.map +1 -1
- package/link/common/block-link-common.d.ts +3 -4
- package/link/common/block-link-common.d.ts.map +1 -1
- package/link/common/block-link-common.js +6 -6
- package/link/common/inline-link-common.d.ts +3 -2
- package/link/common/inline-link-common.d.ts.map +1 -1
- package/link/common/inline-link-common.js +1 -1
- package/link/common/link-common.d.ts +4 -2
- package/link/common/link-common.d.ts.map +1 -1
- package/link/common/link-common.js +1 -1
- package/link/common.js +1 -1
- package/link/link-button/link-button.component.d.ts +1 -0
- package/link/link-button/link-button.component.d.ts.map +1 -1
- package/{link-common-DZrQ-32d.js → link-common-BBKGg9HN.js} +1 -1
- package/link-list/link-list-anchor/link-list-anchor.component.js +4 -4
- package/link.js +1 -1
- package/loading-indicator/loading-indicator.component.d.ts +5 -1
- package/loading-indicator/loading-indicator.component.d.ts.map +1 -1
- package/loading-indicator/loading-indicator.component.js +9 -9
- package/loading-indicator-circle/loading-indicator-circle.component.d.ts +5 -1
- package/loading-indicator-circle/loading-indicator-circle.component.d.ts.map +1 -1
- package/loading-indicator-circle/loading-indicator-circle.component.js +14 -14
- package/map-container/map-container.component.js +2 -1
- package/menu/common/menu-action-common.d.ts +4 -8
- package/menu/common/menu-action-common.d.ts.map +1 -1
- package/menu/common/menu-action-common.js +16 -41
- package/menu/menu/menu.component.d.ts +3 -3
- package/menu/menu/menu.component.d.ts.map +1 -1
- package/menu/menu/menu.component.js +76 -70
- package/menu/menu-button/menu-button.component.d.ts +1 -0
- package/menu/menu-button/menu-button.component.d.ts.map +1 -1
- package/navigation/common/navigation-action-common.js +21 -19
- package/navigation/navigation/navigation.component.d.ts +4 -3
- package/navigation/navigation/navigation.component.d.ts.map +1 -1
- package/navigation/navigation/navigation.component.js +94 -78
- package/navigation/navigation-button/navigation-button.component.d.ts +1 -0
- package/navigation/navigation-button/navigation-button.component.d.ts.map +1 -1
- package/navigation/navigation-marker/navigation-marker.component.js +28 -26
- package/navigation/navigation-section/navigation-section.component.d.ts +3 -3
- package/navigation/navigation-section/navigation-section.component.d.ts.map +1 -1
- package/navigation/navigation-section/navigation-section.component.js +84 -76
- package/notification/notification.component.d.ts +4 -7
- package/notification/notification.component.d.ts.map +1 -1
- package/notification/notification.component.js +67 -75
- package/option/optgroup/optgroup-base-element.d.ts +2 -1
- package/option/optgroup/optgroup-base-element.d.ts.map +1 -1
- package/option/optgroup/optgroup-base-element.js +40 -38
- package/option/optgroup/optgroup.component.js +20 -16
- package/option/option/option-base-element.d.ts +6 -12
- package/option/option/option-base-element.d.ts.map +1 -1
- package/option/option/option-base-element.js +58 -64
- package/option/option/option.component.d.ts +5 -2
- package/option/option/option.component.d.ts.map +1 -1
- package/option/option/option.component.js +30 -30
- package/overlay/overlay-base-element.d.ts +1 -8
- package/overlay/overlay-base-element.d.ts.map +1 -1
- package/overlay/overlay-base-element.js +39 -48
- package/overlay/overlay.component.js +40 -38
- package/package.json +1 -1
- package/paginator/common/paginator-common.d.ts +3 -7
- package/paginator/common/paginator-common.d.ts.map +1 -1
- package/paginator/common/paginator-common.js +43 -55
- package/paginator/paginator/paginator.component.js +4 -3
- package/popover/popover/popover.component.d.ts +3 -3
- package/popover/popover/popover.component.d.ts.map +1 -1
- package/popover/popover/popover.component.js +78 -68
- package/popover/popover-trigger/popover-trigger.component.d.ts +1 -0
- package/popover/popover-trigger/popover-trigger.component.d.ts.map +1 -1
- package/popover/popover-trigger/popover-trigger.component.js +1 -1
- package/radio-button/common/radio-button-common.d.ts +4 -2
- package/radio-button/common/radio-button-common.d.ts.map +1 -1
- package/radio-button/common/radio-button-common.js +15 -11
- package/radio-button/radio-button/radio-button.component.d.ts +6 -2
- package/radio-button/radio-button/radio-button.component.d.ts.map +1 -1
- package/radio-button/radio-button/radio-button.component.js +43 -28
- package/radio-button/radio-button-group/radio-button-group.component.d.ts +8 -6
- package/radio-button/radio-button-group/radio-button-group.component.d.ts.map +1 -1
- package/radio-button/radio-button-group/radio-button-group.component.js +55 -41
- package/radio-button/radio-button-panel/radio-button-panel.component.d.ts +6 -2
- package/radio-button/radio-button-panel/radio-button-panel.component.d.ts.map +1 -1
- package/radio-button/radio-button-panel/radio-button-panel.component.js +54 -38
- package/select/select.component.d.ts +14 -12
- package/select/select.component.d.ts.map +1 -1
- package/select/select.component.js +168 -129
- package/selection-expansion-panel/selection-expansion-panel.component.js +39 -35
- package/sidebar/common.js +1 -1
- package/sidebar/icon-sidebar/icon-sidebar.component.d.ts +4 -2
- package/sidebar/icon-sidebar/icon-sidebar.component.d.ts.map +1 -1
- package/sidebar/icon-sidebar/icon-sidebar.component.js +19 -20
- package/sidebar/icon-sidebar-button/icon-sidebar-button.component.d.ts +1 -0
- package/sidebar/icon-sidebar-button/icon-sidebar-button.component.d.ts.map +1 -1
- package/sidebar/icon-sidebar-container/icon-sidebar-container.component.js +13 -10
- package/sidebar/sidebar/sidebar.component.js +69 -62
- package/sidebar/sidebar-close-button/sidebar-close-button.component.d.ts +2 -0
- package/sidebar/sidebar-close-button/sidebar-close-button.component.d.ts.map +1 -1
- package/sidebar/sidebar-close-button/sidebar-close-button.component.js +11 -9
- package/sidebar/sidebar-container/sidebar-container.component.js +33 -29
- package/sidebar/sidebar-title/sidebar-title.component.d.ts +1 -0
- package/sidebar/sidebar-title/sidebar-title.component.d.ts.map +1 -1
- package/sidebar/sidebar-title/sidebar-title.component.js +18 -16
- package/sidebar.js +1 -1
- package/slider/slider.component.d.ts +6 -15
- package/slider/slider.component.d.ts.map +1 -1
- package/slider/slider.component.js +73 -99
- package/standard-theme.css +66 -18
- package/stepper/step/step.component.d.ts +4 -1
- package/stepper/step/step.component.d.ts.map +1 -1
- package/stepper/step/step.component.js +23 -24
- package/stepper/step-label/step-label.component.d.ts +2 -0
- package/stepper/step-label/step-label.component.d.ts.map +1 -1
- package/stepper/step-label/step-label.component.js +14 -18
- package/stepper/stepper/stepper.component.d.ts +1 -1
- package/stepper/stepper/stepper.component.d.ts.map +1 -1
- package/stepper/stepper/stepper.component.js +89 -73
- package/table/table-wrapper/table-wrapper.component.d.ts +2 -1
- package/table/table-wrapper/table-wrapper.component.d.ts.map +1 -1
- package/table/table-wrapper/table-wrapper.component.js +10 -11
- package/table.css +25 -0
- package/tabs/tab/tab.component.d.ts +4 -1
- package/tabs/tab/tab.component.d.ts.map +1 -1
- package/tabs/tab/tab.component.js +10 -9
- package/tabs/tab-group/tab-group.component.d.ts.map +1 -1
- package/tabs/tab-group/tab-group.component.js +93 -78
- package/tabs/tab-label/tab-label.component.d.ts +2 -1
- package/tabs/tab-label/tab-label.component.d.ts.map +1 -1
- package/tabs/tab-label/tab-label.component.js +17 -17
- package/tag/tag/tag.component.d.ts +7 -3
- package/tag/tag/tag.component.d.ts.map +1 -1
- package/tag/tag/tag.component.js +63 -44
- package/tag/tag-group/tag-group.component.d.ts +7 -5
- package/tag/tag-group/tag-group.component.d.ts.map +1 -1
- package/tag/tag-group/tag-group.component.js +72 -59
- package/teaser/teaser.component.js +1 -1
- package/teaser-product/common/teaser-product-common.d.ts +4 -2
- package/teaser-product/common/teaser-product-common.d.ts.map +1 -1
- package/teaser-product/common.js +1 -1
- package/teaser-product/teaser-product/teaser-product.component.js +1 -1
- package/teaser-product-common-CpMAlYEp.js +5 -0
- package/teaser-product.js +1 -1
- package/time-input/time-input.component.d.ts +29 -42
- package/time-input/time-input.component.d.ts.map +1 -1
- package/time-input/time-input.component.js +100 -139
- package/timetable-occupancy-icon/timetable-occupancy-icon.component.js +10 -9
- package/title/title-base.d.ts +4 -1
- package/title/title-base.d.ts.map +1 -1
- package/title/title-base.js +27 -28
- package/toast/toast.component.d.ts +3 -4
- package/toast/toast.component.d.ts.map +1 -1
- package/toast/toast.component.js +69 -72
- package/toggle/toggle/toggle.component.d.ts +13 -9
- package/toggle/toggle/toggle.component.d.ts.map +1 -1
- package/toggle/toggle/toggle.component.js +62 -59
- package/toggle/toggle-option/toggle-option.component.d.ts +5 -3
- package/toggle/toggle-option/toggle-option.component.d.ts.map +1 -1
- package/toggle/toggle-option/toggle-option.component.js +51 -46
- package/toggle-check/toggle-check.component.d.ts +5 -2
- package/toggle-check/toggle-check.component.d.ts.map +1 -1
- package/toggle-check/toggle-check.component.js +53 -43
- package/train/train-formation/train-formation.component.js +43 -41
- package/core/controllers/connected-abort-controller.d.ts +0 -14
- package/core/controllers/connected-abort-controller.d.ts.map +0 -1
- package/core/controllers/connected-abort-controller.js +0 -17
- package/core/decorators/date-converter.d.ts +0 -8
- package/core/decorators/date-converter.d.ts.map +0 -1
- package/core/decorators/date-converter.js +0 -15
- package/core/decorators/date-only-type.d.ts +0 -8
- package/core/decorators/date-only-type.d.ts.map +0 -1
- package/core/decorators/date-only-type.js +0 -9
- package/core/dom/find-referenced-element.d.ts +0 -8
- package/core/dom/find-referenced-element.d.ts.map +0 -1
- package/core/dom/find-referenced-element.js +0 -7
- package/core/dom/input-element.d.ts +0 -12
- package/core/dom/input-element.d.ts.map +0 -1
- package/core/dom/input-element.js +0 -7
- package/core/testing/scroll.d.ts +0 -7
- package/core/testing/scroll.d.ts.map +0 -1
- package/core/testing/scroll.js +0 -6
- package/development/core/controllers/connected-abort-controller.d.ts +0 -14
- package/development/core/controllers/connected-abort-controller.d.ts.map +0 -1
- package/development/core/controllers/connected-abort-controller.js +0 -23
- package/development/core/decorators/date-converter.d.ts +0 -8
- package/development/core/decorators/date-converter.d.ts.map +0 -1
- package/development/core/decorators/date-converter.js +0 -16
- package/development/core/decorators/date-only-type.d.ts +0 -8
- package/development/core/decorators/date-only-type.d.ts.map +0 -1
- package/development/core/decorators/date-only-type.js +0 -10
- package/development/core/dom/find-referenced-element.d.ts +0 -8
- package/development/core/dom/find-referenced-element.d.ts.map +0 -1
- package/development/core/dom/find-referenced-element.js +0 -15
- package/development/core/dom/input-element.d.ts +0 -12
- package/development/core/dom/input-element.d.ts.map +0 -1
- package/development/core/dom/input-element.js +0 -12
- package/development/core/testing/scroll.d.ts +0 -7
- package/development/core/testing/scroll.d.ts.map +0 -1
- package/development/core/testing/scroll.js +0 -8
- package/icon-sidebar-button-common-CM-ueEhH.js +0 -7
- package/teaser-product-common-C8oSkIxy.js +0 -5
|
@@ -5,15 +5,15 @@ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot
|
|
|
5
5
|
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
6
6
|
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
7
7
|
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
8
|
-
import {
|
|
8
|
+
import { __esDecorate, __runInitializers } from "tslib";
|
|
9
9
|
import { css, LitElement, isServer, nothing, html } from "lit";
|
|
10
10
|
import { customElement, property, state } from "lit/decorators.js";
|
|
11
11
|
import { sbbInputModalityDetector } from "../../core/a11y.js";
|
|
12
12
|
import { SbbLanguageController } from "../../core/controllers.js";
|
|
13
13
|
import { slotState, forceType } from "../../core/decorators.js";
|
|
14
|
-
import { isLean
|
|
14
|
+
import { isLean } from "../../core/dom.js";
|
|
15
15
|
import { i18nOptional } from "../../core/i18n.js";
|
|
16
|
-
import { SbbNegativeMixin, SbbHydrationMixin } from "../../core/mixins.js";
|
|
16
|
+
import { SbbNegativeMixin, SbbElementInternalsMixin, SbbHydrationMixin } from "../../core/mixins.js";
|
|
17
17
|
import "../../icon.js";
|
|
18
18
|
const style = css`@charset "UTF-8";
|
|
19
19
|
*,
|
|
@@ -128,30 +128,30 @@ const style = css`@charset "UTF-8";
|
|
|
128
128
|
--sbb-form-field-error-padding-block-start-override: var(--sbb-form-field-error-divider-width);
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
:host(:
|
|
131
|
+
:host(:where(:state(readonly), [state--readonly], :state(disabled), [state--disabled])) {
|
|
132
132
|
--sbb-form-field-background-color: var(--sbb-color-milk);
|
|
133
133
|
--sbb-form-field-border-color: var(--sbb-color-graphite);
|
|
134
134
|
--sbb-form-field-arrow-color: var(--sbb-color-granite);
|
|
135
135
|
}
|
|
136
136
|
@media (forced-colors: active) {
|
|
137
|
-
:host(:
|
|
137
|
+
:host(:where(:state(readonly), [state--readonly], :state(disabled), [state--disabled])) {
|
|
138
138
|
--sbb-form-field-border-color: ButtonBorder;
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
-
:host(:
|
|
142
|
+
:host(:where(:state(readonly), [state--readonly], :state(disabled), [state--disabled])[negative]) {
|
|
143
143
|
--sbb-form-field-background-color: var(--sbb-color-charcoal);
|
|
144
144
|
--sbb-form-field-border-color: var(--sbb-color-smoke);
|
|
145
145
|
--sbb-form-field-arrow-color: var(--sbb-color-smoke);
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
:host([
|
|
148
|
+
:host(:where(:state(disabled), [state--disabled])) {
|
|
149
149
|
--sbb-form-field-label-color: var(--sbb-color-granite);
|
|
150
150
|
--sbb-form-field-prefix-color: var(--sbb-color-granite);
|
|
151
151
|
--sbb-form-field-border-style: dashed;
|
|
152
152
|
}
|
|
153
153
|
@media (forced-colors: active) {
|
|
154
|
-
:host([
|
|
154
|
+
:host(:where(:state(disabled), [state--disabled])) {
|
|
155
155
|
--sbb-form-field-label-color: GrayText !important;
|
|
156
156
|
--sbb-form-field-prefix-color: GrayText !important;
|
|
157
157
|
--sbb-form-field-text-color: GrayText !important;
|
|
@@ -159,51 +159,36 @@ const style = css`@charset "UTF-8";
|
|
|
159
159
|
}
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
-
:host([
|
|
162
|
+
:host(:where(:state(disabled), [state--disabled])[negative]) {
|
|
163
163
|
--sbb-form-field-text-color: var(--sbb-color-smoke);
|
|
164
164
|
--sbb-form-field-label-color: var(--sbb-color-smoke);
|
|
165
165
|
--sbb-form-field-prefix-color: var(--sbb-color-smoke);
|
|
166
166
|
}
|
|
167
167
|
|
|
168
|
-
:host([
|
|
168
|
+
:host(:where(:state(readonly), [state--readonly]):not([negative])) {
|
|
169
169
|
--sbb-form-field-label-color: var(--sbb-color-granite);
|
|
170
170
|
--sbb-form-field-prefix-color: var(--sbb-color-granite);
|
|
171
171
|
}
|
|
172
172
|
|
|
173
|
-
:host(:
|
|
173
|
+
:host(:where(:state(focus), [state--focus])) {
|
|
174
174
|
--sbb-form-field-border-color: var(--sbb-color-charcoal);
|
|
175
175
|
--sbb-form-field-prefix-color: var(--sbb-color-charcoal);
|
|
176
176
|
--sbb-form-field-border-width: var(--sbb-border-width-2x);
|
|
177
177
|
}
|
|
178
|
-
@media (forced-colors: active) {
|
|
179
|
-
:host(:is([data-input-focused])) {
|
|
180
|
-
--sbb-form-field-border-color: Highlight !important;
|
|
181
|
-
--sbb-form-field-prefix-color: Highlight !important;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
178
|
|
|
185
|
-
:host(:
|
|
179
|
+
:host(:where(:state(focus), [state--focus])[negative]) {
|
|
186
180
|
--sbb-form-field-border-color: var(--sbb-color-milk);
|
|
187
181
|
--sbb-form-field-prefix-color: var(--sbb-color-milk);
|
|
188
182
|
}
|
|
189
183
|
|
|
190
|
-
:host([data-invalid]) {
|
|
191
|
-
--sbb-form-field-border-color: var(--sbb-color-red125);
|
|
192
|
-
--sbb-form-field-text-color: var(--sbb-color-red125);
|
|
193
|
-
}
|
|
194
184
|
@media (forced-colors: active) {
|
|
195
|
-
:host([
|
|
196
|
-
--sbb-form-field-border-color:
|
|
197
|
-
--sbb-form-field-
|
|
185
|
+
:host(:is(:state(focus), [state--focus])) {
|
|
186
|
+
--sbb-form-field-border-color: Highlight;
|
|
187
|
+
--sbb-form-field-prefix-color: Highlight;
|
|
198
188
|
}
|
|
199
189
|
}
|
|
200
190
|
|
|
201
|
-
:host([
|
|
202
|
-
--sbb-form-field-border-color: var(--sbb-color-red-mode-dark);
|
|
203
|
-
--sbb-form-field-text-color: var(--sbb-color-red-mode-dark);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
:host(:not([data-has-error])) {
|
|
191
|
+
:host(:not(:where(:state(has-error), [state--has-error]))) {
|
|
207
192
|
--sbb-form-field-error-padding-block-start: 0;
|
|
208
193
|
}
|
|
209
194
|
|
|
@@ -221,11 +206,11 @@ const style = css`@charset "UTF-8";
|
|
|
221
206
|
--sbb-form-field-label-to-input-overlapping: 0rem;
|
|
222
207
|
}
|
|
223
208
|
|
|
224
|
-
:host([
|
|
209
|
+
:host(:where(:state(input-type-sbb-slider), [state--input-type-sbb-slider])) {
|
|
225
210
|
--sbb-form-field-overflow: visible;
|
|
226
211
|
}
|
|
227
212
|
|
|
228
|
-
:host([
|
|
213
|
+
:host(:where(:state(input-type-textarea), [state--input-type-textarea])) {
|
|
229
214
|
--sbb-form-field-max-height: fit-content;
|
|
230
215
|
}
|
|
231
216
|
|
|
@@ -258,15 +243,16 @@ const style = css`@charset "UTF-8";
|
|
|
258
243
|
border: var(--sbb-form-field-border-width) var(--sbb-form-field-border-style) var(--sbb-form-field-border-color);
|
|
259
244
|
border-radius: var(--sbb-form-field-border-radius);
|
|
260
245
|
}
|
|
261
|
-
:host([
|
|
246
|
+
:host(:where(:state(focus), [state--focus]):where(:state(focus-origin-keyboard),
|
|
247
|
+
[state--focus-origin-keyboard])) .sbb-form-field__wrapper {
|
|
262
248
|
outline-offset: var(--sbb-focus-outline-offset);
|
|
263
249
|
outline: var(--sbb-focus-outline-color) var(--sbb-focus-outline-style, solid) var(--sbb-focus-outline-width);
|
|
264
250
|
}
|
|
265
251
|
@media (forced-colors: none) {
|
|
266
|
-
:host(:is([borderless], [
|
|
252
|
+
:host(:is([borderless], :where(:state(input-type-sbb-slider), [state--input-type-sbb-slider]))) .sbb-form-field__wrapper::before {
|
|
267
253
|
border-color: transparent;
|
|
268
254
|
}
|
|
269
|
-
:host(:
|
|
255
|
+
:host(:where(:state(focus), [state--focus], :state(disabled), [state--disabled])[borderless]) .sbb-form-field__wrapper::after {
|
|
270
256
|
content: "";
|
|
271
257
|
position: absolute;
|
|
272
258
|
border-block-end: var(--sbb-border-width-1x) var(--sbb-form-field-border-style) var(--sbb-form-field-border-color);
|
|
@@ -286,7 +272,12 @@ const style = css`@charset "UTF-8";
|
|
|
286
272
|
margin-block-start: calc((var(--sbb-form-field-min-height) - var(--sbb-size-icon-ui-small)) / 2);
|
|
287
273
|
}
|
|
288
274
|
|
|
289
|
-
:host(:
|
|
275
|
+
:host(:where(:state(empty),
|
|
276
|
+
[state--empty],
|
|
277
|
+
:state(disabled),
|
|
278
|
+
[state--disabled],
|
|
279
|
+
:state(readonly),
|
|
280
|
+
[state--readonly])) ::slotted(sbb-form-field-clear) {
|
|
290
281
|
display: none;
|
|
291
282
|
}
|
|
292
283
|
|
|
@@ -360,7 +351,10 @@ const style = css`@charset "UTF-8";
|
|
|
360
351
|
letter-spacing: var(--sbb-typo-letter-spacing-body-text);
|
|
361
352
|
font-size: var(--sbb-text-font-size);
|
|
362
353
|
}
|
|
363
|
-
:host(
|
|
354
|
+
:host(:where(:state(input-type-select),
|
|
355
|
+
[state--input-type-select],
|
|
356
|
+
:state(input-type-sbb-select),
|
|
357
|
+
[state--input-type-sbb-select])) .sbb-form-field__label {
|
|
364
358
|
padding-inline-end: var(--sbb-form-field-select-inline-padding-end);
|
|
365
359
|
}
|
|
366
360
|
:host([floating-label]) .sbb-form-field__label {
|
|
@@ -372,13 +366,14 @@ const style = css`@charset "UTF-8";
|
|
|
372
366
|
transition-timing-function: var(--sbb-animation-easing);
|
|
373
367
|
transition-property: transform, font-size;
|
|
374
368
|
}
|
|
375
|
-
:host([floating-label]:is(:not([
|
|
376
|
-
|
|
369
|
+
:host([floating-label]:is(:not(:where(:state(focus), [state--focus]):not(:where(:state(input-type-sbb-select), [state--input-type-sbb-select])),
|
|
370
|
+
:where(:state(has-popup-open), [state--has-popup-open])),
|
|
371
|
+
:where(:state(readonly), [state--readonly])):where(:state(empty), [state--empty])) .sbb-form-field__label {
|
|
377
372
|
font-size: var(--sbb-form-field-input-text-size);
|
|
378
373
|
transform: translateY(var(--sbb-form-field-floating-label-transform));
|
|
379
374
|
}
|
|
380
375
|
@media (forced-colors: active) {
|
|
381
|
-
:host([
|
|
376
|
+
:host(:where(:state(input-type-textarea), [state--input-type-textarea])) .sbb-form-field__label {
|
|
382
377
|
z-index: 1;
|
|
383
378
|
}
|
|
384
379
|
}
|
|
@@ -392,10 +387,16 @@ const style = css`@charset "UTF-8";
|
|
|
392
387
|
.sbb-form-field__input {
|
|
393
388
|
display: flex;
|
|
394
389
|
}
|
|
395
|
-
:host([size=s]:is(
|
|
396
|
-
[
|
|
397
|
-
|
|
398
|
-
[
|
|
390
|
+
:host([size=s]:is(:state(input-type-input),
|
|
391
|
+
[state--input-type-input],
|
|
392
|
+
:state(input-type-select),
|
|
393
|
+
[state--input-type-select],
|
|
394
|
+
:state(input-type-sbb-select),
|
|
395
|
+
[state--input-type-sbb-select],
|
|
396
|
+
:state(input-type-sbb-date-input),
|
|
397
|
+
[state--input-type-sbb-date-input],
|
|
398
|
+
:state(input-type-sbb-time-input),
|
|
399
|
+
[state--input-type-sbb-time-input])) .sbb-form-field__input {
|
|
399
400
|
margin-block-end: -0.125rem;
|
|
400
401
|
}
|
|
401
402
|
|
|
@@ -407,13 +408,14 @@ const style = css`@charset "UTF-8";
|
|
|
407
408
|
let nextId = 0;
|
|
408
409
|
let nextFormFieldErrorId = 0;
|
|
409
410
|
const patchedInputs = /* @__PURE__ */ new WeakMap();
|
|
411
|
+
const nativeInputElements = ["input", "textarea", "select"];
|
|
410
412
|
let SbbFormFieldElement = (() => {
|
|
411
413
|
var _errorSpace_accessor_storage, _optional_accessor_storage, _size_accessor_storage, _borderless_accessor_storage, _width_accessor_storage, _hiddenLabel_accessor_storage, _floatingLabel_accessor_storage, __errorElements_accessor_storage, __input_accessor_storage, __label_accessor_storage, _a;
|
|
412
414
|
let _classDecorators = [customElement("sbb-form-field"), slotState()];
|
|
413
415
|
let _classDescriptor;
|
|
414
416
|
let _classExtraInitializers = [];
|
|
415
417
|
let _classThis;
|
|
416
|
-
let _classSuper = SbbNegativeMixin(SbbHydrationMixin(LitElement));
|
|
418
|
+
let _classSuper = SbbNegativeMixin(SbbElementInternalsMixin(SbbHydrationMixin(LitElement)));
|
|
417
419
|
let _errorSpace_decorators;
|
|
418
420
|
let _errorSpace_initializers = [];
|
|
419
421
|
let _errorSpace_extraInitializers = [];
|
|
@@ -446,7 +448,8 @@ let SbbFormFieldElement = (() => {
|
|
|
446
448
|
let __label_extraInitializers = [];
|
|
447
449
|
_a = class extends _classSuper {
|
|
448
450
|
constructor() {
|
|
449
|
-
|
|
451
|
+
var _a2, _b;
|
|
452
|
+
super();
|
|
450
453
|
__privateAdd(this, _errorSpace_accessor_storage);
|
|
451
454
|
__privateAdd(this, _optional_accessor_storage);
|
|
452
455
|
__privateAdd(this, _size_accessor_storage);
|
|
@@ -457,22 +460,12 @@ let SbbFormFieldElement = (() => {
|
|
|
457
460
|
__privateAdd(this, __errorElements_accessor_storage);
|
|
458
461
|
__privateAdd(this, __input_accessor_storage);
|
|
459
462
|
__privateAdd(this, __label_accessor_storage);
|
|
460
|
-
this._supportedNativeInputElements = [
|
|
461
|
-
"input",
|
|
462
|
-
"select",
|
|
463
|
-
"textarea",
|
|
464
|
-
"sbb-date-input"
|
|
465
|
-
];
|
|
466
|
-
this._supportedInputElements = [
|
|
467
|
-
...this._supportedNativeInputElements,
|
|
468
|
-
"sbb-select",
|
|
469
|
-
"sbb-slider"
|
|
470
|
-
];
|
|
471
463
|
this._excludedFocusElements = ["button", "sbb-popover", "sbb-option", "sbb-chip"];
|
|
472
464
|
this._floatingLabelSupportedInputElements = [
|
|
473
465
|
"input",
|
|
474
466
|
"select",
|
|
475
467
|
"sbb-date-input",
|
|
468
|
+
"sbb-time-input",
|
|
476
469
|
"sbb-select",
|
|
477
470
|
"textarea"
|
|
478
471
|
];
|
|
@@ -493,16 +486,37 @@ let SbbFormFieldElement = (() => {
|
|
|
493
486
|
__privateSet(this, _hiddenLabel_accessor_storage, (__runInitializers(this, _width_extraInitializers), __runInitializers(this, _hiddenLabel_initializers, false)));
|
|
494
487
|
__privateSet(this, _floatingLabel_accessor_storage, (__runInitializers(this, _hiddenLabel_extraInitializers), __runInitializers(this, _floatingLabel_initializers, false)));
|
|
495
488
|
__privateSet(this, __errorElements_accessor_storage, (__runInitializers(this, _floatingLabel_extraInitializers), __runInitializers(this, __errorElements_initializers, [])));
|
|
496
|
-
this
|
|
497
|
-
__privateSet(this, __input_accessor_storage, __runInitializers(this, __input_initializers, void 0));
|
|
489
|
+
__privateSet(this, __input_accessor_storage, (__runInitializers(this, __errorElements_extraInitializers), __runInitializers(this, __input_initializers, void 0)));
|
|
498
490
|
__privateSet(this, __label_accessor_storage, (__runInitializers(this, __input_extraInitializers), __runInitializers(this, __label_initializers, void 0)));
|
|
499
491
|
this._language = (__runInitializers(this, __label_extraInitializers), new SbbLanguageController(this));
|
|
500
492
|
this._formFieldAttributeObserver = !isServer ? new MutationObserver((mutations) => {
|
|
501
|
-
if (mutations.some((m) => m.type === "attributes")) {
|
|
493
|
+
if (mutations.some((m) => m.type === "attributes") && this._input) {
|
|
502
494
|
this._readInputState();
|
|
495
|
+
this._registerInputFormListener();
|
|
496
|
+
this._checkAndUpdateInputEmpty();
|
|
503
497
|
}
|
|
504
498
|
}) : null;
|
|
505
|
-
this.
|
|
499
|
+
this._inputFormAbortController = new AbortController();
|
|
500
|
+
(_a2 = this.addEventListener) == null ? void 0 : _a2.call(this, "focusin", (event) => {
|
|
501
|
+
if (event.target === this.inputElement || event.target === this.inputElement.inputElement) {
|
|
502
|
+
this.internals.states.add("focus");
|
|
503
|
+
this.internals.states.add(`focus-origin-${sbbInputModalityDetector.mostRecentModality}`);
|
|
504
|
+
}
|
|
505
|
+
}, { passive: true });
|
|
506
|
+
(_b = this.addEventListener) == null ? void 0 : _b.call(this, "focusout", (event) => {
|
|
507
|
+
if (event.target === this.inputElement || event.target === this.inputElement.inputElement) {
|
|
508
|
+
this._checkAndUpdateInputEmpty();
|
|
509
|
+
this.internals.states.delete("focus");
|
|
510
|
+
for (const state2 of this.internals.states) {
|
|
511
|
+
if (state2.startsWith("focus-origin-")) {
|
|
512
|
+
this.internals.states.delete(state2);
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
}, { passive: true });
|
|
517
|
+
this.addEventListener("input", () => this._checkAndUpdateInputEmpty());
|
|
518
|
+
this.addEventListener("displayValueChange", () => this._checkAndUpdateInputEmpty());
|
|
519
|
+
this.addEventListener("invalid", (e) => e.preventDefault(), { capture: true });
|
|
506
520
|
}
|
|
507
521
|
/**
|
|
508
522
|
* Whether to reserve space for an error message.
|
|
@@ -589,32 +603,39 @@ let SbbFormFieldElement = (() => {
|
|
|
589
603
|
}
|
|
590
604
|
connectedCallback() {
|
|
591
605
|
super.connectedCallback();
|
|
592
|
-
this.
|
|
606
|
+
this._assignSlots();
|
|
607
|
+
this._connectInputElement();
|
|
593
608
|
this._syncNegative();
|
|
609
|
+
this._syncSize();
|
|
594
610
|
}
|
|
595
611
|
willUpdate(changedProperties) {
|
|
596
612
|
super.willUpdate(changedProperties);
|
|
597
613
|
if (changedProperties.has("negative")) {
|
|
598
614
|
this._syncNegative();
|
|
599
615
|
}
|
|
616
|
+
if (changedProperties.has("size")) {
|
|
617
|
+
this._syncSize();
|
|
618
|
+
}
|
|
600
619
|
}
|
|
601
620
|
disconnectedCallback() {
|
|
621
|
+
var _a2, _b;
|
|
602
622
|
super.disconnectedCallback();
|
|
603
|
-
this._formFieldAttributeObserver
|
|
604
|
-
this.
|
|
605
|
-
if (this._input
|
|
623
|
+
(_a2 = this._formFieldAttributeObserver) == null ? void 0 : _a2.disconnect();
|
|
624
|
+
this._inputFormAbortController.abort();
|
|
625
|
+
if (((_b = this._input) == null ? void 0 : _b.localName) === "input") {
|
|
606
626
|
this._unpatchInputValue();
|
|
607
627
|
}
|
|
608
628
|
}
|
|
609
629
|
_handleWrapperClick(event) {
|
|
630
|
+
var _a2, _b;
|
|
610
631
|
if (this._isElementFocusExcluded(event)) {
|
|
611
632
|
return;
|
|
612
633
|
}
|
|
613
|
-
if (
|
|
614
|
-
this._input.
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
this._input
|
|
634
|
+
if (event.target.localName !== "label") {
|
|
635
|
+
if (((_a2 = this._input) == null ? void 0 : _a2.localName) === "sbb-select" && event.target.localName !== "sbb-select") {
|
|
636
|
+
this._input.click();
|
|
637
|
+
}
|
|
638
|
+
(_b = this._input) == null ? void 0 : _b.focus();
|
|
618
639
|
}
|
|
619
640
|
}
|
|
620
641
|
_isElementFocusExcluded(event) {
|
|
@@ -632,106 +653,87 @@ let SbbFormFieldElement = (() => {
|
|
|
632
653
|
* It is used internally to assign the attributes of `<input>` to `_id` and `_input` and to observe the native readonly and disabled attributes.
|
|
633
654
|
*/
|
|
634
655
|
_onSlotInputChange() {
|
|
635
|
-
const newInput = this.querySelector(`:where(${this._supportedInputElements.join(",")})`);
|
|
636
656
|
this._assignSlots();
|
|
637
|
-
|
|
638
|
-
|
|
657
|
+
this._connectInputElement();
|
|
658
|
+
}
|
|
659
|
+
_assignSlots() {
|
|
660
|
+
this.querySelectorAll("label:not([slot])").forEach((e) => e.setAttribute("slot", "label"));
|
|
661
|
+
this.querySelectorAll("sbb-form-error:not([slot])").forEach((e) => e.setAttribute("slot", "error"));
|
|
662
|
+
}
|
|
663
|
+
_connectInputElement() {
|
|
664
|
+
var _a2, _b;
|
|
665
|
+
const inputCandidates = Array.from(this.querySelectorAll("*:not([slot],sbb-chip-group)"));
|
|
666
|
+
const newInput = inputCandidates.find((e) => this._isInputElement(e)) || inputCandidates[0];
|
|
667
|
+
if (newInput === this._input) {
|
|
668
|
+
return;
|
|
669
|
+
} else if (this._input) {
|
|
670
|
+
this.internals.states.delete(`input-type-${this._input.localName}`);
|
|
671
|
+
if (this._input.localName === "input") {
|
|
672
|
+
this._unpatchInputValue();
|
|
673
|
+
}
|
|
639
674
|
}
|
|
640
675
|
if (!newInput) {
|
|
641
676
|
this._input = void 0;
|
|
642
677
|
return;
|
|
643
678
|
}
|
|
644
679
|
this._input = newInput;
|
|
645
|
-
this._originalInputAriaDescribedby = this._input.getAttribute("aria-describedby");
|
|
646
680
|
this._applyAriaDescribedby();
|
|
647
681
|
this._readInputState();
|
|
648
|
-
this.
|
|
682
|
+
this._registerInputFormListener();
|
|
683
|
+
this._checkAndUpdateInputEmpty();
|
|
649
684
|
if (this._input.localName === "textarea") {
|
|
650
685
|
this._input.setAttribute("rows", this._input.getAttribute("rows") || "3");
|
|
686
|
+
} else if (this._input.localName === "input") {
|
|
687
|
+
this._patchInputValue();
|
|
688
|
+
} else if ((this._input.localName === "select" || this._input.localName === "sbb-select") && !this.hasUpdated) {
|
|
689
|
+
this.hydrationComplete.then(() => this.requestUpdate());
|
|
651
690
|
}
|
|
652
|
-
this._formFieldAttributeObserver
|
|
653
|
-
this._formFieldAttributeObserver
|
|
691
|
+
(_a2 = this._formFieldAttributeObserver) == null ? void 0 : _a2.disconnect();
|
|
692
|
+
(_b = this._formFieldAttributeObserver) == null ? void 0 : _b.observe(this._input, {
|
|
654
693
|
attributes: true,
|
|
655
|
-
attributeFilter: ["readonly", "disabled", "
|
|
694
|
+
attributeFilter: ["readonly", "disabled", "form", "class", "data-expanded"]
|
|
656
695
|
});
|
|
657
|
-
this.
|
|
696
|
+
this.internals.states.add(`input-type-${this._input.localName}`);
|
|
658
697
|
this._syncLabelInputReferences();
|
|
659
698
|
}
|
|
660
699
|
_syncLabelInputReferences() {
|
|
700
|
+
var _a2, _b, _c, _d;
|
|
661
701
|
if (!this._input || !this._label) {
|
|
662
702
|
return;
|
|
663
703
|
}
|
|
664
|
-
if (this.
|
|
665
|
-
|
|
666
|
-
this._input.id = `sbb-form-field-input-${nextId++}`;
|
|
667
|
-
}
|
|
704
|
+
if (nativeInputElements.includes(this._input.localName) || ((_a2 = customElements.get(this._input.localName)) == null ? void 0 : _a2.formAssociated)) {
|
|
705
|
+
(_b = this._input).id || (_b.id = `sbb-form-field-input-${nextId++}`);
|
|
668
706
|
this._label.htmlFor = this._input.id;
|
|
669
707
|
} else {
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
}
|
|
673
|
-
const labelledby = this._input.getAttribute("aria-labelledby")?.split(" ").filter((l) => !!l && l !== this._label.id) ?? [];
|
|
708
|
+
(_c = this._label).id || (_c.id = `sbb-form-field-label-${nextId++}`);
|
|
709
|
+
const labelledby = ((_d = this._input.getAttribute("aria-labelledby")) == null ? void 0 : _d.split(" ").filter((l) => !!l && l !== this._label.id)) ?? [];
|
|
674
710
|
this._input.setAttribute("aria-labelledby", [...labelledby, this._label.id].join(" "));
|
|
675
711
|
}
|
|
676
712
|
}
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
}
|
|
681
|
-
this._inputAbortController.abort();
|
|
682
|
-
this._inputAbortController = new AbortController();
|
|
683
|
-
this._checkAndUpdateInputEmpty();
|
|
684
|
-
this._getInputForm()?.addEventListener("reset", () => setTimeout(() => this.reset()), {
|
|
685
|
-
signal: this._inputAbortController.signal
|
|
686
|
-
});
|
|
687
|
-
this._input.addEventListener("input", () => this._checkAndUpdateInputEmpty(), {
|
|
688
|
-
signal: this._inputAbortController.signal
|
|
689
|
-
});
|
|
690
|
-
this._input.addEventListener("blur", () => this._checkAndUpdateInputEmpty(), {
|
|
691
|
-
signal: this._inputAbortController.signal
|
|
692
|
-
});
|
|
693
|
-
this._input.addEventListener("invalid", (e) => e.preventDefault(), {
|
|
694
|
-
signal: this._inputAbortController.signal
|
|
695
|
-
});
|
|
696
|
-
let inputFocusElement = this._input;
|
|
697
|
-
if (this._input.localName === "input") {
|
|
698
|
-
this._patchInputValue();
|
|
699
|
-
} else if (this._input.localName === "sbb-select") {
|
|
700
|
-
this._input.addEventListener("displayValueChange", () => this._checkAndUpdateInputEmpty(), {
|
|
701
|
-
signal: this._inputAbortController.signal
|
|
702
|
-
});
|
|
703
|
-
const selectInput = this._input;
|
|
704
|
-
inputFocusElement = selectInput.inputElement;
|
|
705
|
-
if (!inputFocusElement) {
|
|
706
|
-
const controller = {
|
|
707
|
-
hostUpdated: () => {
|
|
708
|
-
selectInput.removeController(controller);
|
|
709
|
-
this._registerInputListener();
|
|
710
|
-
}
|
|
711
|
-
};
|
|
712
|
-
selectInput.addController(controller);
|
|
713
|
-
}
|
|
714
|
-
}
|
|
715
|
-
inputFocusElement?.addEventListener("focusin", () => {
|
|
716
|
-
this.toggleAttribute("data-input-focused", true);
|
|
717
|
-
this.setAttribute("data-focus-origin", sbbInputModalityDetector.mostRecentModality ?? "");
|
|
718
|
-
}, {
|
|
719
|
-
signal: this._inputAbortController.signal
|
|
720
|
-
});
|
|
721
|
-
inputFocusElement?.addEventListener("focusout", () => ["data-focus-origin", "data-input-focused"].forEach((name) => this.removeAttribute(name)), {
|
|
722
|
-
signal: this._inputAbortController.signal
|
|
723
|
-
});
|
|
713
|
+
_isInputElement(input) {
|
|
714
|
+
var _a2;
|
|
715
|
+
return nativeInputElements.includes(input.localName) || !!((_a2 = customElements.get(input.localName)) == null ? void 0 : _a2.formAssociated);
|
|
724
716
|
}
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
717
|
+
_readInputState() {
|
|
718
|
+
this.toggleState("readonly", this._input.hasAttribute("readonly"));
|
|
719
|
+
this.toggleState("disabled", this._input.hasAttribute("disabled"));
|
|
720
|
+
this.toggleState("has-popup-open", this._input.hasAttribute("data-expanded"));
|
|
721
|
+
}
|
|
722
|
+
_registerInputFormListener() {
|
|
723
|
+
var _a2, _b;
|
|
724
|
+
this._inputFormAbortController.abort();
|
|
725
|
+
const { signal } = this._inputFormAbortController = new AbortController();
|
|
726
|
+
const form = ((_a2 = this._input) == null ? void 0 : _a2.form) ?? ((_b = this._input) == null ? void 0 : _b.closest("form"));
|
|
727
|
+
const resetHandler = () => setTimeout(() => this.reset());
|
|
728
|
+
form == null ? void 0 : form.addEventListener("reset", resetHandler, { signal });
|
|
730
729
|
}
|
|
731
730
|
// We need to patch the value property of the HTMLInputElement in order
|
|
732
731
|
// to be able to reset the floating label in the empty state.
|
|
733
732
|
_patchInputValue() {
|
|
734
733
|
const inputElement = this._input;
|
|
734
|
+
if (!inputElement || patchedInputs.has(inputElement)) {
|
|
735
|
+
return;
|
|
736
|
+
}
|
|
735
737
|
const originalDescriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(inputElement), "value");
|
|
736
738
|
if (!originalDescriptor || !originalDescriptor.set || !originalDescriptor.get) {
|
|
737
739
|
return;
|
|
@@ -759,18 +761,20 @@ let SbbFormFieldElement = (() => {
|
|
|
759
761
|
}
|
|
760
762
|
}
|
|
761
763
|
_checkAndUpdateInputEmpty() {
|
|
762
|
-
|
|
764
|
+
var _a2;
|
|
765
|
+
this.toggleState("empty", this._floatingLabelSupportedInputElements.includes((_a2 = this._input) == null ? void 0 : _a2.localName) && this._isInputEmpty());
|
|
763
766
|
}
|
|
764
767
|
_isInputEmpty() {
|
|
768
|
+
var _a2, _b, _c, _d, _e, _f, _g;
|
|
765
769
|
const chipGroupElem = this.querySelector("sbb-chip-group");
|
|
766
770
|
if (chipGroupElem) {
|
|
767
|
-
return this._isInputValueEmpty() && chipGroupElem.value.length === 0;
|
|
771
|
+
return this._isInputValueEmpty() && (Array.isArray(chipGroupElem.value) ? chipGroupElem.value.length === 0 : !chipGroupElem.querySelector("sbb-chip"));
|
|
768
772
|
} else if (this._input instanceof HTMLInputElement) {
|
|
769
773
|
return this._floatingLabelSupportedInputTypes.includes(this._input.type) && this._isInputValueEmpty();
|
|
770
774
|
} else if (this._input instanceof HTMLSelectElement) {
|
|
771
|
-
return this._input.selectedOptions
|
|
772
|
-
} else if (this._input
|
|
773
|
-
return this._input.getDisplayValue()
|
|
775
|
+
return ((_c = (_b = (_a2 = this._input.selectedOptions) == null ? void 0 : _a2.item(0)) == null ? void 0 : _b.label) == null ? void 0 : _c.trim()) === "";
|
|
776
|
+
} else if (((_d = this._input) == null ? void 0 : _d.localName) === "sbb-select") {
|
|
777
|
+
return ((_g = (_f = (_e = this._input).getDisplayValue) == null ? void 0 : _f.call(_e)) == null ? void 0 : _g.trim()) === "";
|
|
774
778
|
} else {
|
|
775
779
|
return this._isInputValueEmpty();
|
|
776
780
|
}
|
|
@@ -779,50 +783,39 @@ let SbbFormFieldElement = (() => {
|
|
|
779
783
|
const value = this._input.value;
|
|
780
784
|
return ["", void 0, null].includes(value) || Array.isArray(value) && value.length === 0;
|
|
781
785
|
}
|
|
782
|
-
_assignSlots() {
|
|
783
|
-
this.querySelectorAll("label:not([slot])").forEach((e) => e.setAttribute("slot", "label"));
|
|
784
|
-
this.querySelectorAll("sbb-form-error:not([slot])").forEach((e) => e.setAttribute("slot", "error"));
|
|
785
|
-
}
|
|
786
|
-
_readInputState() {
|
|
787
|
-
if (!this._input) {
|
|
788
|
-
return;
|
|
789
|
-
}
|
|
790
|
-
this.toggleAttribute("data-readonly", this._input.hasAttribute("readonly"));
|
|
791
|
-
this.toggleAttribute("data-disabled", this._input.hasAttribute("disabled"));
|
|
792
|
-
this.toggleAttribute("data-invalid", this._input.hasAttribute("data-sbb-invalid") || this._input.classList.contains("sbb-invalid") || this._input.classList.contains("ng-touched") && this._input.classList.contains("ng-invalid"));
|
|
793
|
-
this.toggleAttribute("data-has-popup-open", this._input.hasAttribute("data-expanded"));
|
|
794
|
-
}
|
|
795
786
|
/**
|
|
796
787
|
* It is used internally to set the aria-describedby attribute for the slotted input referencing available <sbb-form-error> instances.
|
|
797
788
|
*/
|
|
798
789
|
_onSlotErrorChange(event) {
|
|
799
|
-
|
|
790
|
+
const errors = event.target.assignedElements();
|
|
791
|
+
const removedErrorIds = this._errorElements.filter((e) => !errors.includes(e)).map((e) => e.id);
|
|
792
|
+
this._errorElements = errors;
|
|
800
793
|
for (const el of this._errorElements) {
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
}
|
|
804
|
-
if (!el.role) {
|
|
805
|
-
el.role = "status";
|
|
806
|
-
if (isFirefox) {
|
|
807
|
-
el.setAttribute("role", "status");
|
|
808
|
-
}
|
|
809
|
-
}
|
|
794
|
+
el.id || (el.id = `sbb-form-field-error-${++nextFormFieldErrorId}`);
|
|
795
|
+
el.role || (el.role = "status");
|
|
810
796
|
}
|
|
811
|
-
this._applyAriaDescribedby();
|
|
812
|
-
this.
|
|
797
|
+
this._applyAriaDescribedby(removedErrorIds);
|
|
798
|
+
this.toggleState("has-error", !!this._errorElements.length);
|
|
813
799
|
this._syncNegative();
|
|
814
800
|
}
|
|
815
|
-
_applyAriaDescribedby() {
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
}
|
|
801
|
+
_applyAriaDescribedby(obsoleteIds = []) {
|
|
802
|
+
var _a2;
|
|
803
|
+
const ariaDescribedby = ((_a2 = this._input) == null ? void 0 : _a2.getAttribute("aria-describedby")) || "";
|
|
804
|
+
const ids = ariaDescribedby.split(" ").filter((id) => !!id && !obsoleteIds.includes(id)).filter((v, i, a) => a.indexOf(v) === i);
|
|
820
805
|
if (this._errorElements.length) {
|
|
821
|
-
this._errorElements.forEach((e) =>
|
|
806
|
+
this._errorElements.forEach((e) => {
|
|
807
|
+
if (!ids.includes(e.id)) {
|
|
808
|
+
ids.push(e.id);
|
|
809
|
+
}
|
|
810
|
+
});
|
|
822
811
|
}
|
|
823
|
-
const
|
|
824
|
-
if (this._input) {
|
|
825
|
-
|
|
812
|
+
const newAriaDescribedby = ids.join(" ");
|
|
813
|
+
if (this._input && newAriaDescribedby !== ariaDescribedby) {
|
|
814
|
+
if (newAriaDescribedby) {
|
|
815
|
+
this._input.setAttribute("aria-describedby", newAriaDescribedby);
|
|
816
|
+
} else {
|
|
817
|
+
this._input.removeAttribute("aria-describedby");
|
|
818
|
+
}
|
|
826
819
|
}
|
|
827
820
|
}
|
|
828
821
|
/** Manually reset the form field. Currently, this only resets the floating label. */
|
|
@@ -831,16 +824,23 @@ let SbbFormFieldElement = (() => {
|
|
|
831
824
|
}
|
|
832
825
|
/** Manually clears the input value. It only works for inputs, selects are not supported. */
|
|
833
826
|
clear() {
|
|
834
|
-
|
|
827
|
+
var _a2;
|
|
828
|
+
if (((_a2 = this._input) == null ? void 0 : _a2.localName) !== "input") {
|
|
835
829
|
return;
|
|
836
830
|
}
|
|
837
831
|
this._input.value = "";
|
|
838
832
|
this._checkAndUpdateInputEmpty();
|
|
839
833
|
}
|
|
840
834
|
_syncNegative() {
|
|
841
|
-
|
|
835
|
+
var _a2;
|
|
836
|
+
(_a2 = this.querySelectorAll) == null ? void 0 : _a2.call(this, "sbb-form-error,sbb-mini-button,sbb-popover-trigger,sbb-form-field-clear,sbb-datepicker-next-day,sbb-datepicker-previous-day,sbb-datepicker-toggle,sbb-select,sbb-autocomplete,sbb-autocomplete-grid,sbb-chip-group").forEach((element) => element.toggleAttribute("negative", this.negative));
|
|
837
|
+
}
|
|
838
|
+
_syncSize() {
|
|
839
|
+
var _a2;
|
|
840
|
+
(_a2 = this.querySelectorAll) == null ? void 0 : _a2.call(this, "sbb-autocomplete,sbb-autocomplete-grid,sbb-select").forEach((element) => element.size = this.size === "s" ? "s" : "m");
|
|
842
841
|
}
|
|
843
842
|
render() {
|
|
843
|
+
var _a2;
|
|
844
844
|
return html`
|
|
845
845
|
<div class="sbb-form-field__space-wrapper">
|
|
846
846
|
${/* Queried by id from the autocomplete/select to be used as the anchor element */
|
|
@@ -858,7 +858,7 @@ let SbbFormFieldElement = (() => {
|
|
|
858
858
|
<div class="sbb-form-field__input">
|
|
859
859
|
<slot @slotchange=${this._onSlotInputChange}></slot>
|
|
860
860
|
</div>
|
|
861
|
-
${["select", "sbb-select"].includes(this._input
|
|
861
|
+
${this.hasUpdated && ["select", "sbb-select"].includes((_a2 = this._input) == null ? void 0 : _a2.localName) ? html`<sbb-icon
|
|
862
862
|
name="chevron-small-down-small"
|
|
863
863
|
class="sbb-form-field__select-input-icon"
|
|
864
864
|
></sbb-icon>` : nothing}
|
|
@@ -923,4 +923,4 @@ let SbbFormFieldElement = (() => {
|
|
|
923
923
|
export {
|
|
924
924
|
SbbFormFieldElement
|
|
925
925
|
};
|
|
926
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9mb3JtLWZpZWxkL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgaXNTZXJ2ZXIsXG4gIExpdEVsZW1lbnQsXG4gIG5vdGhpbmcsXG4gIHR5cGUgUHJvcGVydHlWYWx1ZXMsXG4gIHR5cGUgVGVtcGxhdGVSZXN1bHQsXG59IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgU2JiSW5wdXRNb2RhbGl0eSB9IGZyb20gJy4uLy4uL2NvcmUvYTExeS5qcyc7XG5pbXBvcnQgeyBzYmJJbnB1dE1vZGFsaXR5RGV0ZWN0b3IgfSBmcm9tICcuLi8uLi9jb3JlL2ExMXkuanMnO1xuaW1wb3J0IHsgU2JiTGFuZ3VhZ2VDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy5qcyc7XG5pbXBvcnQgeyBmb3JjZVR5cGUsIHNsb3RTdGF0ZSB9IGZyb20gJy4uLy4uL2NvcmUvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBpc0ZpcmVmb3gsIGlzTGVhbiwgc2V0T3JSZW1vdmVBdHRyaWJ1dGUgfSBmcm9tICcuLi8uLi9jb3JlL2RvbS5qcyc7XG5pbXBvcnQgeyBpMThuT3B0aW9uYWwgfSBmcm9tICcuLi8uLi9jb3JlL2kxOG4uanMnO1xuaW1wb3J0IHsgU2JiSHlkcmF0aW9uTWl4aW4sIFNiYk5lZ2F0aXZlTWl4aW4gfSBmcm9tICcuLi8uLi9jb3JlL21peGlucy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYlNlbGVjdEVsZW1lbnQgfSBmcm9tICcuLi8uLi9zZWxlY3QuanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9mb3JtLWZpZWxkLnNjc3M/bGl0JmlubGluZSc7XG5cbmltcG9ydCAnLi4vLi4vaWNvbi5qcyc7XG5cbmxldCBuZXh0SWQgPSAwO1xubGV0IG5leHRGb3JtRmllbGRFcnJvcklkID0gMDtcblxuY29uc3QgcGF0Y2hlZElucHV0cyA9IG5ldyBXZWFrTWFwPEhUTUxJbnB1dEVsZW1lbnQsIFByb3BlcnR5RGVzY3JpcHRvcj4oKTtcblxuLyoqXG4gKiBJdCB3cmFwcyBhbiBpbnB1dCBlbGVtZW50IGFkZGluZyBsYWJlbCwgZXJyb3JzLCBpY29uLCBldGMuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhpcyBzbG90IHRvIHJlbmRlciBhbiBpbnB1dC9zZWxlY3Qgb3IgYSBzdXBwb3J0ZWQgbm9uLW5hdGl2ZSBlbGVtZW50LlxuICogQHNsb3QgbGFiZWwgLSBVc2UgdGhpcyBzbG90IHRvIHJlbmRlciBhIGxhYmVsLlxuICogQHNsb3QgcHJlZml4IC0gVXNlIHRoaXMgc2xvdCB0byByZW5kZXIgYW4gaWNvbiBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBpbnB1dC5cbiAqIEBzbG90IHN1ZmZpeCAtIFVzZSB0aGlzIHNsb3QgdG8gcmVuZGVyIGFuIGljb24gb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGlucHV0LlxuICogQHNsb3QgZXJyb3IgLSBVc2UgdGhpcyBzbG90IHRvIHJlbmRlciBhbiBlcnJvci5cbiAqL1xuZXhwb3J0XG5AY3VzdG9tRWxlbWVudCgnc2JiLWZvcm0tZmllbGQnKVxuQHNsb3RTdGF0ZSgpXG5jbGFzcyBTYmJGb3JtRmllbGRFbGVtZW50IGV4dGVuZHMgU2JiTmVnYXRpdmVNaXhpbihTYmJIeWRyYXRpb25NaXhpbihMaXRFbGVtZW50KSkge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdXBwb3J0ZWROYXRpdmVJbnB1dEVsZW1lbnRzID0gW1xuICAgICdpbnB1dCcsXG4gICAgJ3NlbGVjdCcsXG4gICAgJ3RleHRhcmVhJyxcbiAgICAnc2JiLWRhdGUtaW5wdXQnLFxuICBdO1xuICAvLyBMaXN0IG9mIHN1cHBvcnRlZCBlbGVtZW50IHNlbGVjdG9ycyBpbiB1bm5hbWVkIHNsb3RcbiAgcHJpdmF0ZSByZWFkb25seSBfc3VwcG9ydGVkSW5wdXRFbGVtZW50cyA9IFtcbiAgICAuLi50aGlzLl9zdXBwb3J0ZWROYXRpdmVJbnB1dEVsZW1lbnRzLFxuICAgICdzYmItc2VsZWN0JyxcbiAgICAnc2JiLXNsaWRlcicsXG4gIF07XG4gIC8vIExpc3Qgb2YgZWxlbWVudHMgdGhhdCBzaG91bGQgbm90IGZvY3VzIGlucHV0IG9uIGNsaWNrXG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4Y2x1ZGVkRm9jdXNFbGVtZW50cyA9IFsnYnV0dG9uJywgJ3NiYi1wb3BvdmVyJywgJ3NiYi1vcHRpb24nLCAnc2JiLWNoaXAnXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9mbG9hdGluZ0xhYmVsU3VwcG9ydGVkSW5wdXRFbGVtZW50cyA9IFtcbiAgICAnaW5wdXQnLFxuICAgICdzZWxlY3QnLFxuICAgICdzYmItZGF0ZS1pbnB1dCcsXG4gICAgJ3NiYi1zZWxlY3QnLFxuICAgICd0ZXh0YXJlYScsXG4gIF07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZmxvYXRpbmdMYWJlbFN1cHBvcnRlZElucHV0VHlwZXMgPSBbXG4gICAgJ2VtYWlsJyxcbiAgICAnbnVtYmVyJyxcbiAgICAncGFzc3dvcmQnLFxuICAgICdzZWFyY2gnLFxuICAgICd0ZWwnLFxuICAgICd0ZXh0JyxcbiAgICAndXJsJyxcbiAgXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZXNlcnZlIHNwYWNlIGZvciBhbiBlcnJvciBtZXNzYWdlLlxuICAgKiBgbm9uZWAgZG9lcyBub3QgcmVzZXJ2ZSBhbnkgc3BhY2UuXG4gICAqIGByZXNlcnZlYCBkb2VzIHJlc2VydmUgb25lIHJvdyBmb3IgYW4gZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2Vycm9yLXNwYWNlJywgcmVmbGVjdDogdHJ1ZSB9KVxuICBwdWJsaWMgYWNjZXNzb3IgZXJyb3JTcGFjZTogJ25vbmUnIHwgJ3Jlc2VydmUnID0gJ25vbmUnO1xuXG4gIC8qKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgaW5wdXQgaXMgb3B0aW9uYWwuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBvcHRpb25hbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTaXplIHZhcmlhbnQsIGVpdGhlciBsLCBtIG9yIHMuXG4gICAqIEBkZWZhdWx0ICdtJyAvICdzJyAobGVhbilcbiAgICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSkgcHVibGljIGFjY2Vzc29yIHNpemU6ICdsJyB8ICdtJyB8ICdzJyA9IGlzTGVhbigpID8gJ3MnIDogJ20nO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGRpc3BsYXkgdGhlIGZvcm0gZmllbGQgd2l0aG91dCBhIGJvcmRlci4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGJvcmRlcmxlc3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogRGVmaW5lcyB0aGUgd2lkdGggb2YgdGhlIGNvbXBvbmVudDpcbiAgICogLSBgZGVmYXVsdGA6IHRoZSBjb21wb25lbnQgaGFzIGRlZmluZWQgd2lkdGggYW5kIG1pbi13aWR0aDtcbiAgICogLSBgY29sbGFwc2VgOiB0aGUgY29tcG9uZW50IGFkYXB0cyBpdHNlbGYgdG8gaXRzIGlubmVyIGlucHV0IGNvbnRlbnQuICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSkgcHVibGljIGFjY2Vzc29yIHdpZHRoOiAnZGVmYXVsdCcgfCAnY29sbGFwc2UnID0gJ2RlZmF1bHQnO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHZpc3VhbGx5IGhpZGUgdGhlIGxhYmVsLiBJZiBoaWRkZW4sIHNjcmVlbiByZWFkZXJzIHdpbGwgc3RpbGwgcmVhZCBpdC4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2hpZGRlbi1sYWJlbCcsIHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGhpZGRlbkxhYmVsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGxhYmVsIHNob3VsZCBmbG9hdC4gSWYgYWN0aXZhdGVkLCB0aGUgcGxhY2Vob2xkZXIgb2YgdGhlIGlucHV0IGlzIGhpZGRlbi4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2Zsb2F0aW5nLWxhYmVsJywgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgZmxvYXRpbmdMYWJlbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBJdCBpcyB1c2VkIGludGVybmFsbHkgdG8gZ2V0IHRoZSBgZXJyb3JgIHNsb3QuICovXG4gIEBzdGF0ZSgpIHByaXZhdGUgYWNjZXNzb3IgX2Vycm9yRWxlbWVudHM6IEVsZW1lbnRbXSA9IFtdO1xuXG4gIC8qKiBPcmlnaW5hbCBhcmlhLWRlc2NyaWJlZGJ5IHZhbHVlIG9mIHRoZSBzbG90dGVkIGlucHV0IGVsZW1lbnQuICovXG4gIHByaXZhdGUgX29yaWdpbmFsSW5wdXRBcmlhRGVzY3JpYmVkYnk/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIHNsb3R0ZWQgaW5wdXQgZWxlbWVudC4gKi9cbiAgQHN0YXRlKCkgcHJpdmF0ZSBhY2Nlc3NvciBfaW5wdXQhOiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFNlbGVjdEVsZW1lbnQgfCBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBzbG90dGVkIGxhYmVsIGVsZW1lbnRzLiAqL1xuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF9sYWJlbCE6IEhUTUxMYWJlbEVsZW1lbnQ7XG5cbiAgLyoqIFJldHVybnMgdGhlIGlucHV0IGVsZW1lbnQuICovXG4gIHB1YmxpYyBnZXQgaW5wdXRFbGVtZW50KCk6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MU2VsZWN0RWxlbWVudCB8IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW5wdXQ7XG4gIH1cblxuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgLyoqXG4gICAqIExpc3RlbnMgdG8gdGhlIGNoYW5nZXMgb24gYHJlYWRvbmx5YCBhbmQgYGRpc2FibGVkYCBhdHRyaWJ1dGVzIG9mIGA8aW5wdXQ+YC5cbiAgICovXG4gIHByaXZhdGUgX2Zvcm1GaWVsZEF0dHJpYnV0ZU9ic2VydmVyID0gIWlzU2VydmVyXG4gICAgPyBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zOiBNdXRhdGlvblJlY29yZFtdKSA9PiB7XG4gICAgICAgIGlmIChtdXRhdGlvbnMuc29tZSgobSkgPT4gbS50eXBlID09PSAnYXR0cmlidXRlcycpKSB7XG4gICAgICAgICAgdGhpcy5fcmVhZElucHV0U3RhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICA6IG51bGw7XG5cbiAgcHJpdmF0ZSBfaW5wdXRBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5fcmVnaXN0ZXJJbnB1dExpc3RlbmVyKCk7XG4gICAgdGhpcy5fc3luY05lZ2F0aXZlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ25lZ2F0aXZlJykpIHtcbiAgICAgIHRoaXMuX3N5bmNOZWdhdGl2ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX2Zvcm1GaWVsZEF0dHJpYnV0ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5faW5wdXRBYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICBpZiAodGhpcy5faW5wdXQ/LmxvY2FsTmFtZSA9PT0gJ2lucHV0Jykge1xuICAgICAgdGhpcy5fdW5wYXRjaElucHV0VmFsdWUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVXcmFwcGVyQ2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzRWxlbWVudEZvY3VzRXhjbHVkZWQoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5faW5wdXQ/LmxvY2FsTmFtZSA9PT0gJ3NiYi1zZWxlY3QnICYmXG4gICAgICAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5sb2NhbE5hbWUgIT09ICdzYmItc2VsZWN0J1xuICAgICkge1xuICAgICAgdGhpcy5faW5wdXQuY2xpY2soKTtcbiAgICAgIHRoaXMuX2lucHV0LmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmICgoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpLmxvY2FsTmFtZSAhPT0gJ2xhYmVsJykge1xuICAgICAgdGhpcy5faW5wdXQ/LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNFbGVtZW50Rm9jdXNFeGNsdWRlZChldmVudDogRXZlbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZXZlbnRcbiAgICAgIC5jb21wb3NlZFBhdGgoKVxuICAgICAgLnNvbWUoXG4gICAgICAgIChlbCkgPT5cbiAgICAgICAgICAoZWwgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTEVsZW1lbnQgJiZcbiAgICAgICAgICAgIChlbC5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JykgPT09ICcwJyB8fCBlbC5oYXNBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScpKSkgfHxcbiAgICAgICAgICB0aGlzLl9leGNsdWRlZEZvY3VzRWxlbWVudHMuaW5jbHVkZXMoKGVsIGFzIEhUTUxFbGVtZW50KS5sb2NhbE5hbWUpLFxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uU2xvdExhYmVsQ2hhbmdlKCk6IHZvaWQge1xuICAgIGNvbnN0IGxhYmVscyA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdsYWJlbCcpKTtcbiAgICBpZiAoaW1wb3J0Lm1ldGEuZW52LkRFViAmJiBsYWJlbHMubGVuZ3RoID4gMSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgRGV0ZWN0ZWQgbW9yZSB0aGFuIG9uZSBsYWJlbCBpbiBzYmItZm9ybS1maWVsZCMke3RoaXMuaWR9LiBPbmx5IG9uZSBsYWJlbCBpcyBzdXBwb3J0ZWQuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuX2xhYmVsID0gbGFiZWxzWzBdO1xuICAgIHRoaXMuX3N5bmNMYWJlbElucHV0UmVmZXJlbmNlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IGlzIHVzZWQgaW50ZXJuYWxseSB0byBhc3NpZ24gdGhlIGF0dHJpYnV0ZXMgb2YgYDxpbnB1dD5gIHRvIGBfaWRgIGFuZCBgX2lucHV0YCBhbmQgdG8gb2JzZXJ2ZSB0aGUgbmF0aXZlIHJlYWRvbmx5IGFuZCBkaXNhYmxlZCBhdHRyaWJ1dGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBfb25TbG90SW5wdXRDaGFuZ2UoKTogdm9pZCB7XG4gICAgLy8gRmluZCB0aGUgc2xvdHRlZCAnc3VwcG9ydGVkSW5wdXRFbGVtZW50JywgZXZlbiBpZiBpdCdzIG5lc3RlZFxuICAgIGNvbnN0IG5ld0lucHV0ID0gdGhpcy5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihcbiAgICAgIGA6d2hlcmUoJHt0aGlzLl9zdXBwb3J0ZWRJbnB1dEVsZW1lbnRzLmpvaW4oJywnKX0pYCxcbiAgICApO1xuXG4gICAgdGhpcy5fYXNzaWduU2xvdHMoKTtcblxuICAgIGlmICh0aGlzLl9pbnB1dCAmJiB0aGlzLl9pbnB1dC5sb2NhbE5hbWUgPT09ICdpbnB1dCcgJiYgbmV3SW5wdXQgIT09IHRoaXMuX2lucHV0KSB7XG4gICAgICB0aGlzLl91bnBhdGNoSW5wdXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIGlmICghbmV3SW5wdXQpIHtcbiAgICAgIHRoaXMuX2lucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lucHV0ID0gbmV3SW5wdXQ7XG4gICAgdGhpcy5fb3JpZ2luYWxJbnB1dEFyaWFEZXNjcmliZWRieSA9IHRoaXMuX2lucHV0LmdldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpO1xuICAgIHRoaXMuX2FwcGx5QXJpYURlc2NyaWJlZGJ5KCk7XG4gICAgdGhpcy5fcmVhZElucHV0U3RhdGUoKTtcbiAgICB0aGlzLl9yZWdpc3RlcklucHV0TGlzdGVuZXIoKTtcblxuICAgIGlmICh0aGlzLl9pbnB1dC5sb2NhbE5hbWUgPT09ICd0ZXh0YXJlYScpIHtcbiAgICAgIHRoaXMuX2lucHV0LnNldEF0dHJpYnV0ZSgncm93cycsIHRoaXMuX2lucHV0LmdldEF0dHJpYnV0ZSgncm93cycpIHx8ICczJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fZm9ybUZpZWxkQXR0cmlidXRlT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLl9mb3JtRmllbGRBdHRyaWJ1dGVPYnNlcnZlcj8ub2JzZXJ2ZSh0aGlzLl9pbnB1dCwge1xuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydyZWFkb25seScsICdkaXNhYmxlZCcsICdjbGFzcycsICdkYXRhLXNiYi1pbnZhbGlkJywgJ2RhdGEtZXhwYW5kZWQnXSxcbiAgICB9KTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnZGF0YS1pbnB1dC10eXBlJywgdGhpcy5faW5wdXQubG9jYWxOYW1lKTtcbiAgICB0aGlzLl9zeW5jTGFiZWxJbnB1dFJlZmVyZW5jZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3N5bmNMYWJlbElucHV0UmVmZXJlbmNlcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lucHV0IHx8ICF0aGlzLl9sYWJlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdXBwb3J0ZWROYXRpdmVJbnB1dEVsZW1lbnRzLmluY2x1ZGVzKHRoaXMuX2lucHV0LmxvY2FsTmFtZSkpIHtcbiAgICAgIC8vIEZvciBuYXRpdmUgaW5wdXQgZWxlbWVudHMgd2UgdXNlIHRoZSBgZm9yYCBhdHRyaWJ1dGUgb24gdGhlIGxhYmVsIHRvIHJlZmVyZW5jZSB0aGUgaW5wdXRcbiAgICAgIC8vIHZpYSBpZCByZWZlcmVuY2UuXG4gICAgICBpZiAoIXRoaXMuX2lucHV0LmlkKSB7XG4gICAgICAgIHRoaXMuX2lucHV0LmlkID0gYHNiYi1mb3JtLWZpZWxkLWlucHV0LSR7bmV4dElkKyt9YDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbGFiZWwuaHRtbEZvciA9IHRoaXMuX2lucHV0LmlkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3Igbm9uLW5hdGl2ZSBpbnB1dCBlbGVtZW50cywgdGhhdCBkbyBub3Qgc3VwcG9ydCByZWZlcmVuY2VzIHZpYSB0aGUgbGFiZWwgZm9yIGF0dHJpYnV0ZSxcbiAgICAgIC8vIHdlIHVzZSBhcmlhLWxhYmVsbGVkYnkgb24gdGhlIGlucHV0IGVsZW1lbnQgdG8gcmVmZXJlbmNlIHRoZSBsYWJlbCBlbGVtZW50IHZpYSBpZC5cbiAgICAgIGlmICghdGhpcy5fbGFiZWwuaWQpIHtcbiAgICAgICAgdGhpcy5fbGFiZWwuaWQgPSBgc2JiLWZvcm0tZmllbGQtbGFiZWwtJHtuZXh0SWQrK31gO1xuICAgICAgfVxuICAgICAgY29uc3QgbGFiZWxsZWRieSA9XG4gICAgICAgIHRoaXMuX2lucHV0XG4gICAgICAgICAgLmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5JylcbiAgICAgICAgICA/LnNwbGl0KCcgJylcbiAgICAgICAgICAuZmlsdGVyKChsKSA9PiAhIWwgJiYgbCAhPT0gdGhpcy5fbGFiZWwhLmlkKSA/PyBbXTtcbiAgICAgIHRoaXMuX2lucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5JywgWy4uLmxhYmVsbGVkYnksIHRoaXMuX2xhYmVsLmlkXS5qb2luKCcgJykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVySW5wdXRMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lucHV0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgdGhpcy5faW5wdXRBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG5cbiAgICAvLyBUaW1lb3V0IG5lZWRlZCB0byBoYXZlIHZhbHVlIHVwZGF0ZWRcbiAgICB0aGlzLl9nZXRJbnB1dEZvcm0oKT8uYWRkRXZlbnRMaXN0ZW5lcigncmVzZXQnLCAoKSA9PiBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzZXQoKSksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5faW5wdXRBYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgdGhpcy5faW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB0aGlzLl9jaGVja0FuZFVwZGF0ZUlucHV0RW1wdHkoKSwge1xuICAgICAgc2lnbmFsOiB0aGlzLl9pbnB1dEFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4gdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5faW5wdXRBYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgLy8gV2Ugd2FudCB0byBwcmV2ZW50IHRoZSBuYXRpdmUgYnJvd3NlciB2YWxpZGF0aW9uIG1lc3NhZ2UgcG9wb3ZlclxuICAgIC8vIHRvIGJlIHNob3duLiBUaGlzIGFsc28gcHJldmVudHMgYSBidWcgaW4gV2ViS2l0LCB3aGljaCB3b3VsZCBub3RcbiAgICAvLyBhbGxvdyBob3N0IGFzIHRoZSB2YWxpZGl0eSBhbmNob3I6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk4MzJcbiAgICAvLyBUaGlzIGlzIGR1cGxpY2F0ZWQgZnJvbSB0aGUgZm9ybSBhc3NvY2lhdGVkIG1peGluIGZvciB0aGUgbmF0aXZlXG4gICAgLy8gaW5wdXQgY29udHJvbHMgKGUuZy4gPGlucHV0PiBvciA8c2VsZWN0PikuXG4gICAgdGhpcy5faW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW52YWxpZCcsIChlKSA9PiBlLnByZXZlbnREZWZhdWx0KCksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5faW5wdXRBYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgbGV0IGlucHV0Rm9jdXNFbGVtZW50ID0gdGhpcy5faW5wdXQ7XG5cbiAgICBpZiAodGhpcy5faW5wdXQubG9jYWxOYW1lID09PSAnaW5wdXQnKSB7XG4gICAgICB0aGlzLl9wYXRjaElucHV0VmFsdWUoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lucHV0LmxvY2FsTmFtZSA9PT0gJ3NiYi1zZWxlY3QnKSB7XG4gICAgICB0aGlzLl9pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdkaXNwbGF5VmFsdWVDaGFuZ2UnLCAoKSA9PiB0aGlzLl9jaGVja0FuZFVwZGF0ZUlucHV0RW1wdHkoKSwge1xuICAgICAgICBzaWduYWw6IHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzZWxlY3RJbnB1dCA9IHRoaXMuX2lucHV0IGFzIFNiYlNlbGVjdEVsZW1lbnQ7XG4gICAgICBpbnB1dEZvY3VzRWxlbWVudCA9IHNlbGVjdElucHV0LmlucHV0RWxlbWVudDtcblxuICAgICAgLy8gSWYgaW5wdXRFbGVtZW50IGlzIG5vdCB5ZXQgcmVhZHksIHRyeSBhIHNlY29uZCB0aW1lIGFmdGVyIHVwZGF0aW5nLlxuICAgICAgaWYgKCFpbnB1dEZvY3VzRWxlbWVudCkge1xuICAgICAgICBjb25zdCBjb250cm9sbGVyID0ge1xuICAgICAgICAgIGhvc3RVcGRhdGVkOiAoKSA9PiB7XG4gICAgICAgICAgICBzZWxlY3RJbnB1dC5yZW1vdmVDb250cm9sbGVyKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJJbnB1dExpc3RlbmVyKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICBzZWxlY3RJbnB1dC5hZGRDb250cm9sbGVyKGNvbnRyb2xsZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlucHV0Rm9jdXNFbGVtZW50Py5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2ZvY3VzaW4nLFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1pbnB1dC1mb2N1c2VkJywgdHJ1ZSk7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFxuICAgICAgICAgICdkYXRhLWZvY3VzLW9yaWdpbicsXG4gICAgICAgICAgKHNiYklucHV0TW9kYWxpdHlEZXRlY3Rvci5tb3N0UmVjZW50TW9kYWxpdHkgYXMgU2JiSW5wdXRNb2RhbGl0eSkgPz8gJycsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzaWduYWw6IHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGlucHV0Rm9jdXNFbGVtZW50Py5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2ZvY3Vzb3V0JyxcbiAgICAgICgpID0+XG4gICAgICAgIFsnZGF0YS1mb2N1cy1vcmlnaW4nLCAnZGF0YS1pbnB1dC1mb2N1c2VkJ10uZm9yRWFjaCgobmFtZSkgPT4gdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSkpLFxuICAgICAge1xuICAgICAgICBzaWduYWw6IHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldElucHV0Rm9ybSgpOiBIVE1MRm9ybUVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5faW5wdXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50IHx8IHRoaXMuX2lucHV0IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnB1dC5mb3JtO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faW5wdXQ/LmNsb3Nlc3QoJ2Zvcm0nKTtcbiAgfVxuXG4gIC8vIFdlIG5lZWQgdG8gcGF0Y2ggdGhlIHZhbHVlIHByb3BlcnR5IG9mIHRoZSBIVE1MSW5wdXRFbGVtZW50IGluIG9yZGVyXG4gIC8vIHRvIGJlIGFibGUgdG8gcmVzZXQgdGhlIGZsb2F0aW5nIGxhYmVsIGluIHRoZSBlbXB0eSBzdGF0ZS5cbiAgcHJpdmF0ZSBfcGF0Y2hJbnB1dFZhbHVlKCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IHRoaXMuX2lucHV0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3Qgb3JpZ2luYWxEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihpbnB1dEVsZW1lbnQpLFxuICAgICAgJ3ZhbHVlJyxcbiAgICApO1xuXG4gICAgaWYgKCFvcmlnaW5hbERlc2NyaXB0b3IgfHwgIW9yaWdpbmFsRGVzY3JpcHRvci5zZXQgfHwgIW9yaWdpbmFsRGVzY3JpcHRvci5nZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwYXRjaGVkSW5wdXRzLnNldChpbnB1dEVsZW1lbnQsIG9yaWdpbmFsRGVzY3JpcHRvcik7XG5cbiAgICBjb25zdCB7IGdldDogZ2V0dGVyLCBzZXQ6IHNldHRlciB9ID0gb3JpZ2luYWxEZXNjcmlwdG9yO1xuICAgIGNvbnN0IGNoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSA9ICgpOiB2b2lkID0+IHRoaXMuX2NoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGlucHV0RWxlbWVudCwgJ3ZhbHVlJywge1xuICAgICAgLi4ub3JpZ2luYWxEZXNjcmlwdG9yLFxuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZ2V0dGVyLmNhbGwodGhpcyk7XG4gICAgICB9LFxuICAgICAgc2V0KG5ld1ZhbHVlKSB7XG4gICAgICAgIHNldHRlci5jYWxsKHRoaXMsIG5ld1ZhbHVlKTtcbiAgICAgICAgY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdW5wYXRjaElucHV0VmFsdWUoKTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gdGhpcy5faW5wdXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCBvcmlnaW5hbERlc2NyaXB0b3IgPSBwYXRjaGVkSW5wdXRzLmdldChpbnB1dEVsZW1lbnQpO1xuICAgIGlmIChvcmlnaW5hbERlc2NyaXB0b3IpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnB1dEVsZW1lbnQsICd2YWx1ZScsIG9yaWdpbmFsRGVzY3JpcHRvcik7XG4gICAgICBwYXRjaGVkSW5wdXRzLmRlbGV0ZShpbnB1dEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZShcbiAgICAgICdkYXRhLWlucHV0LWVtcHR5JyxcbiAgICAgIHRoaXMuX2Zsb2F0aW5nTGFiZWxTdXBwb3J0ZWRJbnB1dEVsZW1lbnRzLmluY2x1ZGVzKHRoaXMuX2lucHV0Py5sb2NhbE5hbWUgYXMgc3RyaW5nKSAmJlxuICAgICAgICB0aGlzLl9pc0lucHV0RW1wdHkoKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNJbnB1dEVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNoaXBHcm91cEVsZW0gPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3NiYi1jaGlwLWdyb3VwJyk7XG4gICAgaWYgKGNoaXBHcm91cEVsZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLl9pc0lucHV0VmFsdWVFbXB0eSgpICYmIGNoaXBHcm91cEVsZW0udmFsdWUubGVuZ3RoID09PSAwO1xuICAgIH0gZWxzZSBpZiAodGhpcy5faW5wdXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLl9mbG9hdGluZ0xhYmVsU3VwcG9ydGVkSW5wdXRUeXBlcy5pbmNsdWRlcyh0aGlzLl9pbnB1dC50eXBlKSAmJlxuICAgICAgICB0aGlzLl9pc0lucHV0VmFsdWVFbXB0eSgpXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5faW5wdXQgaW5zdGFuY2VvZiBIVE1MU2VsZWN0RWxlbWVudCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2lucHV0LnNlbGVjdGVkT3B0aW9ucz8uaXRlbSgwKT8ubGFiZWw/LnRyaW0oKSA9PT0gJyc7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9pbnB1dD8ubG9jYWxOYW1lID09PSAnc2JiLXNlbGVjdCcpIHtcbiAgICAgIHJldHVybiAodGhpcy5faW5wdXQgYXMgU2JiU2VsZWN0RWxlbWVudCkuZ2V0RGlzcGxheVZhbHVlKCk/LnRyaW0oKSA9PT0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9pc0lucHV0VmFsdWVFbXB0eSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzSW5wdXRWYWx1ZUVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gKHRoaXMuX2lucHV0IGFzIHsgdmFsdWU6IHN0cmluZyB9KS52YWx1ZTtcbiAgICByZXR1cm4gWycnLCB1bmRlZmluZWQsIG51bGxdLmluY2x1ZGVzKHZhbHVlKSB8fCAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Fzc2lnblNsb3RzKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbCgnbGFiZWw6bm90KFtzbG90XSknKS5mb3JFYWNoKChlKSA9PiBlLnNldEF0dHJpYnV0ZSgnc2xvdCcsICdsYWJlbCcpKTtcbiAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3NiYi1mb3JtLWVycm9yOm5vdChbc2xvdF0pJykuZm9yRWFjaCgoZSkgPT5cbiAgICAgIGUuc2V0QXR0cmlidXRlKCdzbG90JywgJ2Vycm9yJyksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlYWRJbnB1dFN0YXRlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW5wdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtcmVhZG9ubHknLCB0aGlzLl9pbnB1dC5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykpO1xuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWRpc2FibGVkJywgdGhpcy5faW5wdXQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKTtcbiAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZShcbiAgICAgICdkYXRhLWludmFsaWQnLFxuICAgICAgdGhpcy5faW5wdXQuaGFzQXR0cmlidXRlKCdkYXRhLXNiYi1pbnZhbGlkJykgfHxcbiAgICAgICAgdGhpcy5faW5wdXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdzYmItaW52YWxpZCcpIHx8XG4gICAgICAgICh0aGlzLl9pbnB1dC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLXRvdWNoZWQnKSAmJlxuICAgICAgICAgIHRoaXMuX2lucHV0LmNsYXNzTGlzdC5jb250YWlucygnbmctaW52YWxpZCcpKSxcbiAgICApO1xuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWhhcy1wb3B1cC1vcGVuJywgdGhpcy5faW5wdXQhLmhhc0F0dHJpYnV0ZSgnZGF0YS1leHBhbmRlZCcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCBpcyB1c2VkIGludGVybmFsbHkgdG8gc2V0IHRoZSBhcmlhLWRlc2NyaWJlZGJ5IGF0dHJpYnV0ZSBmb3IgdGhlIHNsb3R0ZWQgaW5wdXQgcmVmZXJlbmNpbmcgYXZhaWxhYmxlIDxzYmItZm9ybS1lcnJvcj4gaW5zdGFuY2VzLlxuICAgKi9cbiAgcHJpdmF0ZSBfb25TbG90RXJyb3JDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5fZXJyb3JFbGVtZW50cyA9IChldmVudC50YXJnZXQgYXMgSFRNTFNsb3RFbGVtZW50KS5hc3NpZ25lZEVsZW1lbnRzKCk7XG5cbiAgICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMuX2Vycm9yRWxlbWVudHMpIHtcbiAgICAgIC8vIEFsdGhvdWdoIGEgZm9ybSBlcnJvciBhc3NpZ25zIGFuIGlkIGl0c2VsZiwgd2UgbmVlZCB0byBiZSBlYXJsaWVyIGJ5IGNyZWF0aW5nIG9uZSBoZXJlXG4gICAgICBpZiAoIWVsLmlkKSB7XG4gICAgICAgIGVsLmlkID0gYHNiYi1mb3JtLWZpZWxkLWVycm9yLSR7KytuZXh0Rm9ybUZpZWxkRXJyb3JJZH1gO1xuICAgICAgfVxuICAgICAgaWYgKCFlbC5yb2xlKSB7XG4gICAgICAgIC8vIEluc3RlYWQgb2YgZGVmaW5pbmcgYSBjb250YWluZXIgd2l0aCBhbiBhcmlhLWxpdmUgcmVnaW9uIGFzIGV4cGVjdGVkLCB3ZSBoYWQgdG8gY2hhbmdlXG4gICAgICAgIC8vIHNldHRpbmcgaXQgZm9yIGV2ZXJ5IHNsb3R0ZWQgZWxlbWVudCB0byBwcm9wZXJseSB3b3JrIGluIGFsbCBicm93c2VycyBhbmQgc2NyZWVuIHJlYWRlciBjb21iaW5hdGlvbnMuXG4gICAgICAgIGVsLnJvbGUgPSAnc3RhdHVzJztcbiAgICAgICAgaWYgKGlzRmlyZWZveCkge1xuICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgncm9sZScsICdzdGF0dXMnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9hcHBseUFyaWFEZXNjcmliZWRieSgpO1xuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWhhcy1lcnJvcicsICEhdGhpcy5fZXJyb3JFbGVtZW50cy5sZW5ndGgpO1xuICAgIHRoaXMuX3N5bmNOZWdhdGl2ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlBcmlhRGVzY3JpYmVkYnkoKTogdm9pZCB7XG4gICAgY29uc3QgaWRzID0gW107XG5cbiAgICBpZiAodGhpcy5fb3JpZ2luYWxJbnB1dEFyaWFEZXNjcmliZWRieSkge1xuICAgICAgaWRzLnB1c2godGhpcy5fb3JpZ2luYWxJbnB1dEFyaWFEZXNjcmliZWRieSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2Vycm9yRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9lcnJvckVsZW1lbnRzLmZvckVhY2goKGUpID0+IGlkcy5wdXNoKGUuaWQpKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcmlhRGVzY3JpYmVkYnkgPSBpZHMuam9pbignICcpO1xuICAgIGlmICh0aGlzLl9pbnB1dCkge1xuICAgICAgc2V0T3JSZW1vdmVBdHRyaWJ1dGUodGhpcy5faW5wdXQsICdhcmlhLWRlc2NyaWJlZGJ5JywgYXJpYURlc2NyaWJlZGJ5KTtcbiAgICB9XG4gIH1cblxuICAvKiogTWFudWFsbHkgcmVzZXQgdGhlIGZvcm0gZmllbGQuIEN1cnJlbnRseSwgdGhpcyBvbmx5IHJlc2V0cyB0aGUgZmxvYXRpbmcgbGFiZWwuICovXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGVja0FuZFVwZGF0ZUlucHV0RW1wdHkoKTtcbiAgfVxuXG4gIC8qKiBNYW51YWxseSBjbGVhcnMgdGhlIGlucHV0IHZhbHVlLiBJdCBvbmx5IHdvcmtzIGZvciBpbnB1dHMsIHNlbGVjdHMgYXJlIG5vdCBzdXBwb3J0ZWQuICovXG4gIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcbiAgICBpZiAoKHRoaXMuX2lucHV0Py5sb2NhbE5hbWUgYXMgc3RyaW5nKSAhPT0gJ2lucHV0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAodGhpcy5faW5wdXQgYXMgeyB2YWx1ZTogc3RyaW5nIH0pLnZhbHVlID0gJyc7XG4gICAgdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG4gIH1cblxuICBwcml2YXRlIF9zeW5jTmVnYXRpdmUoKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy4oXG4gICAgICAnc2JiLWZvcm0tZXJyb3Isc2JiLW1pbmktYnV0dG9uLHNiYi1wb3BvdmVyLXRyaWdnZXIsc2JiLWZvcm0tZmllbGQtY2xlYXIsc2JiLWRhdGVwaWNrZXItbmV4dC1kYXksc2JiLWRhdGVwaWNrZXItcHJldmlvdXMtZGF5LHNiYi1kYXRlcGlja2VyLXRvZ2dsZSxzYmItc2VsZWN0LHNiYi1hdXRvY29tcGxldGUsc2JiLWF1dG9jb21wbGV0ZS1ncmlkLHNiYi1jaGlwLWdyb3VwJyxcbiAgICApLmZvckVhY2goKGVsZW1lbnQpID0+IGVsZW1lbnQudG9nZ2xlQXR0cmlidXRlKCduZWdhdGl2ZScsIHRoaXMubmVnYXRpdmUpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1mb3JtLWZpZWxkX19zcGFjZS13cmFwcGVyXCI+XG4gICAgICAgICR7LyogUXVlcmllZCBieSBpZCBmcm9tIHRoZSBhdXRvY29tcGxldGUvc2VsZWN0IHRvIGJlIHVzZWQgYXMgdGhlIGFuY2hvciBlbGVtZW50ICovICcnfVxuICAgICAgICA8ZGl2IEBjbGljaz0ke3RoaXMuX2hhbmRsZVdyYXBwZXJDbGlja30gY2xhc3M9XCJzYmItZm9ybS1maWVsZF9fd3JhcHBlclwiIGlkPVwib3ZlcmxheS1hbmNob3JcIj5cbiAgICAgICAgICA8c2xvdCBuYW1lPVwicHJlZml4XCIgQHNsb3RjaGFuZ2U9JHt0aGlzLl9zeW5jTmVnYXRpdmV9Pjwvc2xvdD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX2lucHV0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItZm9ybS1maWVsZF9fbGFiZWwtc3BhY2VyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItZm9ybS1maWVsZF9fbGFiZWxcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItZm9ybS1maWVsZF9fbGFiZWwtZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwibGFiZWxcIiBAc2xvdGNoYW5nZT0ke3RoaXMuX29uU2xvdExhYmVsQ2hhbmdlfT48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgJHt0aGlzLm9wdGlvbmFsXG4gICAgICAgICAgICAgICAgICA/IGh0bWxgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiAke2kxOG5PcHRpb25hbFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gPC9zcGFuPmBcbiAgICAgICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1mb3JtLWZpZWxkX19pbnB1dFwiPlxuICAgICAgICAgICAgICA8c2xvdCBAc2xvdGNoYW5nZT0ke3RoaXMuX29uU2xvdElucHV0Q2hhbmdlfT48L3Nsb3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICR7WydzZWxlY3QnLCAnc2JiLXNlbGVjdCddLmluY2x1ZGVzKHRoaXMuX2lucHV0Py5sb2NhbE5hbWUgYXMgc3RyaW5nKVxuICAgICAgICAgICAgICA/IGh0bWxgPHNiYi1pY29uXG4gICAgICAgICAgICAgICAgICBuYW1lPVwiY2hldnJvbi1zbWFsbC1kb3duLXNtYWxsXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX3NlbGVjdC1pbnB1dC1pY29uXCJcbiAgICAgICAgICAgICAgICA+PC9zYmItaWNvbj5gXG4gICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c2xvdCBuYW1lPVwic3VmZml4XCIgQHNsb3RjaGFuZ2U9JHt0aGlzLl9zeW5jTmVnYXRpdmV9Pjwvc2xvdD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1mb3JtLWZpZWxkX19lcnJvclwiPlxuICAgICAgICAgIDxzbG90IG5hbWU9XCJlcnJvclwiIEBzbG90Y2hhbmdlPSR7dGhpcy5fb25TbG90RXJyb3JDaGFuZ2V9Pjwvc2xvdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItZm9ybS1maWVsZCc6IFNiYkZvcm1GaWVsZEVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0JBLElBQUksU0FBUztBQUNiLElBQUksdUJBQXVCO0FBRTNCLE1BQU0sb0NBQW9CLFFBQUE7SUFjcEIsdUJBQW1CLE1BQUE7O0FBRnhCLE1BQUEsbUJBQUEsQ0FBQSxjQUFjLGdCQUFnQixHQUM5QixXQUFXOzs7O0FBQ3NCLE1BQUEsY0FBQSxpQkFBaUIsa0JBQWtCLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUF0RCxFQUFBLG1CQUFRLFlBQStDO0FBQUE7O0FBMEMvRTtBQUtBO0FBTTZCO0FBSzdCO0FBSzZCO0FBSzdCO0FBS0E7QUFHUztBQU1BO0FBR0E7QUFsRlEsV0FBQSxnQ0FBZ0M7QUFBQSxRQUMvQztBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQUE7QUFHZSxXQUFBLDBCQUEwQjtBQUFBLFFBQ3pDLEdBQUcsS0FBSztBQUFBLFFBQ1I7QUFBQSxRQUNBO0FBQUEsTUFBQTtBQUdlLFdBQUEseUJBQXlCLENBQUMsVUFBVSxlQUFlLGNBQWMsVUFBVTtBQUUzRSxXQUFBLHVDQUF1QztBQUFBLFFBQ3REO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQUE7QUFHZSxXQUFBLG9DQUFvQztBQUFBLFFBQ25EO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFBQTtBQVNjLHlCQUFBLDhCQUFBLGtCQUFBLE1BQUEsMEJBQWlDLE1BQU07QUFLdkMseUJBQUEsNkJBQUEsa0JBQUEsTUFBQSw2QkFBQSxHQUFBLGtCQUFBLE1BQUEsd0JBQW9CLEtBQUs7QUFNSSx5QkFBQSx5QkFBQSxrQkFBQSxNQUFBLDJCQUFBLEdBQUEsa0JBQUEsTUFBQSxvQkFBd0IsT0FBQSxJQUFXLE1BQU0sR0FBRztBQUt6RSx5QkFBQSwrQkFBQSxrQkFBQSxNQUFBLHVCQUFBLEdBQUEsa0JBQUEsTUFBQSwwQkFBc0IsS0FBSztBQUtFLHlCQUFBLDBCQUFBLGtCQUFBLE1BQUEsNkJBQUEsR0FBQSxrQkFBQSxNQUFBLHFCQUFnQyxTQUFTO0FBS3RFLHlCQUFBLGdDQUFBLGtCQUFBLE1BQUEsd0JBQUEsR0FBQSxrQkFBQSxNQUFBLDJCQUF1QixLQUFLO0FBSzVCLHlCQUFBLGtDQUFBLGtCQUFBLE1BQUEsOEJBQUEsR0FBQSxrQkFBQSxNQUFBLDZCQUF5QixLQUFLO0FBR3BCLHlCQUFBLG1DQUFBLGtCQUFBLE1BQUEsZ0NBQUEsR0FBQSxrQkFBQSxNQUFBLDhCQUE0QixDQUFBLENBQUU7QUFHaEQsV0FBQSxnQ0FBNkIsa0JBQUEsTUFBQSxpQ0FBQTtBQUdYLHlCQUFBLDBCQUFBLGtCQUFBLE1BQUEsc0JBQUEsTUFBQTtBQUdBLHlCQUFBLDJCQUFBLGtCQUFBLE1BQUEseUJBQUEsR0FBQSxrQkFBQSxNQUFBLHNCQUFBLE1BQUE7QUFPbEIsV0FBQSxpRUFBWSxJQUFJLHNCQUFzQixJQUFJO0FBSzFDLFdBQUEsOEJBQThCLENBQUMsV0FDbkMsSUFBSSxpQkFBaUIsQ0FBQyxjQUErQjtBQUNuRCxZQUFJLFVBQVUsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLFlBQVksR0FBRztBQUNsRCxlQUFLLGdCQUFBO0FBQUEsUUFBZTtBQUFBLE1BQ3RCLENBQ0QsSUFDRDtBQUVJLFdBQUEsd0JBQXdCLElBQUksZ0JBQUE7QUFBQSxJQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBL0RuRCxJQUFnQixhQUFVO0FBQUEsYUFBQSxtQkFBQTtBQUFBLElBQUE7QUFBQSxJQUExQixJQUFnQixXQUFVLE9BQUE7QUFBQSx5QkFBQSw4QkFBQTtBQUFBLElBQUE7QUFBQTtBQUFBLElBSzFCLElBQWdCLFdBQVE7QUFBQSxhQUFBLG1CQUFBO0FBQUEsSUFBQTtBQUFBLElBQXhCLElBQWdCLFNBQVEsT0FBQTtBQUFBLHlCQUFBLDRCQUFBO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNSyxJQUFnQixPQUFJO0FBQUEsYUFBQSxtQkFBQTtBQUFBLElBQUE7QUFBQSxJQUFwQixJQUFnQixLQUFJLE9BQUE7QUFBQSx5QkFBQSx3QkFBQTtBQUFBLElBQUE7QUFBQTtBQUFBLElBS2pELElBQWdCLGFBQVU7QUFBQSxhQUFBLG1CQUFBO0FBQUEsSUFBQTtBQUFBLElBQTFCLElBQWdCLFdBQVUsT0FBQTtBQUFBLHlCQUFBLDhCQUFBO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS0csSUFBZ0IsUUFBSztBQUFBLGFBQUEsbUJBQUE7QUFBQSxJQUFBO0FBQUEsSUFBckIsSUFBZ0IsTUFBSyxPQUFBO0FBQUEseUJBQUEseUJBQUE7QUFBQSxJQUFBO0FBQUE7QUFBQSxJQUtsRCxJQUFnQixjQUFXO0FBQUEsYUFBQSxtQkFBQTtBQUFBLElBQUE7QUFBQSxJQUEzQixJQUFnQixZQUFXLE9BQUE7QUFBQSx5QkFBQSwrQkFBQTtBQUFBLElBQUE7QUFBQTtBQUFBLElBSzNCLElBQWdCLGdCQUFhO0FBQUEsYUFBQSxtQkFBQTtBQUFBLElBQUE7QUFBQSxJQUE3QixJQUFnQixjQUFhLE9BQUE7QUFBQSx5QkFBQSxpQ0FBQTtBQUFBLElBQUE7QUFBQTtBQUFBLElBR3BCLElBQWlCLGlCQUFjO0FBQUEsYUFBQSxtQkFBQTtBQUFBLElBQUE7QUFBQSxJQUEvQixJQUFpQixlQUFjLE9BQUE7QUFBQSx5QkFBQSxrQ0FBQTtBQUFBLElBQUE7QUFBQTtBQUFBLElBTS9CLElBQWlCLFNBQU07QUFBQSxhQUFBLG1CQUFBO0FBQUEsSUFBQTtBQUFBLElBQXZCLElBQWlCLE9BQU0sT0FBQTtBQUFBLHlCQUFBLDBCQUFBO0FBQUEsSUFBQTtBQUFBO0FBQUEsSUFHdkIsSUFBaUIsU0FBTTtBQUFBLGFBQUEsbUJBQUE7QUFBQSxJQUFBO0FBQUEsSUFBdkIsSUFBaUIsT0FBTSxPQUFBO0FBQUEseUJBQUEsMEJBQUE7QUFBQSxJQUFBO0FBQUE7QUFBQSxJQUdoQyxJQUFXLGVBQVk7QUFDckIsYUFBTyxLQUFLO0FBQUEsSUFBQTtBQUFBLElBa0JFLG9CQUFpQjtBQUMvQixZQUFNLGtCQUFBO0FBQ04sV0FBSyx1QkFBQTtBQUNMLFdBQUssY0FBQTtBQUFBLElBQWE7QUFBQSxJQUdELFdBQVcsbUJBQXVDO0FBQ25FLFlBQU0sV0FBVyxpQkFBaUI7QUFFbEMsVUFBSSxrQkFBa0IsSUFBSSxVQUFVLEdBQUc7QUFDckMsYUFBSyxjQUFBO0FBQUEsTUFBYTtBQUFBLElBQ3BCO0FBQUEsSUFHYyx1QkFBb0I7QUFDbEMsWUFBTSxxQkFBQTtBQUNOLFdBQUssNkJBQTZCLFdBQUE7QUFDbEMsV0FBSyxzQkFBc0IsTUFBQTtBQUMzQixVQUFJLEtBQUssUUFBUSxjQUFjLFNBQVM7QUFDdEMsYUFBSyxtQkFBQTtBQUFBLE1BQWtCO0FBQUEsSUFDekI7QUFBQSxJQUdNLG9CQUFvQixPQUFZO0FBQ3RDLFVBQUksS0FBSyx3QkFBd0IsS0FBSyxHQUFHO0FBQ3ZDO0FBQUEsTUFBQTtBQUdGLFVBQ0UsS0FBSyxRQUFRLGNBQWMsZ0JBQzFCLE1BQU0sT0FBdUIsY0FBYyxjQUM1QztBQUNBLGFBQUssT0FBTyxNQUFBO0FBQ1osYUFBSyxPQUFPLE1BQUE7QUFBQSxpQkFDRixNQUFNLE9BQW1CLGNBQWMsU0FBUztBQUMxRCxhQUFLLFFBQVEsTUFBQTtBQUFBO0lBQ2Y7QUFBQSxJQUdNLHdCQUF3QixPQUFZO0FBQzFDLGFBQU8sTUFDSixlQUNBLEtBQ0MsQ0FBQyxPQUNFLGNBQWMsT0FBTyxnQkFDbkIsR0FBRyxhQUFhLFVBQVUsTUFBTSxPQUFPLEdBQUcsYUFBYSxpQkFBaUIsTUFDM0UsS0FBSyx1QkFBdUIsU0FBVSxHQUFtQixTQUFTLENBQUM7QUFBQSxJQUFBO0FBQUEsSUFJbkUscUJBQWtCO0FBQ3hCLFlBQU0sU0FBUyxNQUFNLEtBQUssS0FBSyxpQkFBaUIsT0FBTyxDQUFDO0FBQ3hELFVBQTJCLE9BQU8sU0FBUyxHQUFHO0FBQzVDLGdCQUFRLEtBQ04sa0RBQWtELEtBQUssRUFBRSxnQ0FBZ0M7QUFBQSxNQUFBO0FBRzdGLFdBQUssU0FBUyxPQUFPLENBQUM7QUFDdEIsV0FBSywwQkFBQTtBQUFBLElBQXlCO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNeEIscUJBQWtCO0FBRXhCLFlBQU0sV0FBVyxLQUFLLGNBQ3BCLFVBQVUsS0FBSyx3QkFBd0IsS0FBSyxHQUFHLENBQUMsR0FBRztBQUdyRCxXQUFLLGFBQUE7QUFFTCxVQUFJLEtBQUssVUFBVSxLQUFLLE9BQU8sY0FBYyxXQUFXLGFBQWEsS0FBSyxRQUFRO0FBQ2hGLGFBQUssbUJBQUE7QUFBQSxNQUFrQjtBQUd6QixVQUFJLENBQUMsVUFBVTtBQUNiLGFBQUssU0FBUztBQUNkO0FBQUEsTUFBQTtBQUdGLFdBQUssU0FBUztBQUNkLFdBQUssZ0NBQWdDLEtBQUssT0FBTyxhQUFhLGtCQUFrQjtBQUNoRixXQUFLLHNCQUFBO0FBQ0wsV0FBSyxnQkFBQTtBQUNMLFdBQUssdUJBQUE7QUFFTCxVQUFJLEtBQUssT0FBTyxjQUFjLFlBQVk7QUFDeEMsYUFBSyxPQUFPLGFBQWEsUUFBUSxLQUFLLE9BQU8sYUFBYSxNQUFNLEtBQUssR0FBRztBQUFBLE1BQUE7QUFHMUUsV0FBSyw2QkFBNkIsV0FBQTtBQUNsQyxXQUFLLDZCQUE2QixRQUFRLEtBQUssUUFBUTtBQUFBLFFBQ3JELFlBQVk7QUFBQSxRQUNaLGlCQUFpQixDQUFDLFlBQVksWUFBWSxTQUFTLG9CQUFvQixlQUFlO0FBQUEsTUFBQSxDQUN2RjtBQUNELFdBQUssYUFBYSxtQkFBbUIsS0FBSyxPQUFPLFNBQVM7QUFDMUQsV0FBSywwQkFBQTtBQUFBLElBQXlCO0FBQUEsSUFHeEIsNEJBQXlCO0FBQy9CLFVBQUksQ0FBQyxLQUFLLFVBQVUsQ0FBQyxLQUFLLFFBQVE7QUFDaEM7QUFBQSxNQUFBO0FBR0YsVUFBSSxLQUFLLDhCQUE4QixTQUFTLEtBQUssT0FBTyxTQUFTLEdBQUc7QUFHdEUsWUFBSSxDQUFDLEtBQUssT0FBTyxJQUFJO0FBQ25CLGVBQUssT0FBTyxLQUFLLHdCQUF3QixRQUFRO0FBQUEsUUFBQTtBQUduRCxhQUFLLE9BQU8sVUFBVSxLQUFLLE9BQU87QUFBQSxNQUFBLE9BQzdCO0FBR0wsWUFBSSxDQUFDLEtBQUssT0FBTyxJQUFJO0FBQ25CLGVBQUssT0FBTyxLQUFLLHdCQUF3QixRQUFRO0FBQUEsUUFBQTtBQUVuRCxjQUFNLGFBQ0osS0FBSyxPQUNGLGFBQWEsaUJBQWlCLEdBQzdCLE1BQU0sR0FBRyxFQUNWLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLE1BQU0sS0FBSyxPQUFRLEVBQUUsS0FBSyxDQUFBO0FBQ3BELGFBQUssT0FBTyxhQUFhLG1CQUFtQixDQUFDLEdBQUcsWUFBWSxLQUFLLE9BQU8sRUFBRSxFQUFFLEtBQUssR0FBRyxDQUFDO0FBQUEsTUFBQTtBQUFBLElBQ3ZGO0FBQUEsSUFHTSx5QkFBc0I7QUFDNUIsVUFBSSxDQUFDLEtBQUssUUFBUTtBQUNoQjtBQUFBLE1BQUE7QUFFRixXQUFLLHNCQUFzQixNQUFBO0FBQzNCLFdBQUssd0JBQXdCLElBQUksZ0JBQUE7QUFDakMsV0FBSywwQkFBQTtBQUdMLFdBQUssaUJBQWlCLGlCQUFpQixTQUFTLE1BQU0sV0FBVyxNQUFNLEtBQUssTUFBQSxDQUFPLEdBQUc7QUFBQSxRQUNwRixRQUFRLEtBQUssc0JBQXNCO0FBQUEsTUFBQSxDQUNwQztBQUVELFdBQUssT0FBTyxpQkFBaUIsU0FBUyxNQUFNLEtBQUssNkJBQTZCO0FBQUEsUUFDNUUsUUFBUSxLQUFLLHNCQUFzQjtBQUFBLE1BQUEsQ0FDcEM7QUFFRCxXQUFLLE9BQU8saUJBQWlCLFFBQVEsTUFBTSxLQUFLLDZCQUE2QjtBQUFBLFFBQzNFLFFBQVEsS0FBSyxzQkFBc0I7QUFBQSxNQUFBLENBQ3BDO0FBT0QsV0FBSyxPQUFPLGlCQUFpQixXQUFXLENBQUMsTUFBTSxFQUFFLGtCQUFrQjtBQUFBLFFBQ2pFLFFBQVEsS0FBSyxzQkFBc0I7QUFBQSxNQUFBLENBQ3BDO0FBRUQsVUFBSSxvQkFBb0IsS0FBSztBQUU3QixVQUFJLEtBQUssT0FBTyxjQUFjLFNBQVM7QUFDckMsYUFBSyxpQkFBQTtBQUFBLE1BQWdCLFdBQ1osS0FBSyxPQUFPLGNBQWMsY0FBYztBQUNqRCxhQUFLLE9BQU8saUJBQWlCLHNCQUFzQixNQUFNLEtBQUssNkJBQTZCO0FBQUEsVUFDekYsUUFBUSxLQUFLLHNCQUFzQjtBQUFBLFFBQUEsQ0FDcEM7QUFFRCxjQUFNLGNBQWMsS0FBSztBQUN6Qiw0QkFBb0IsWUFBWTtBQUdoQyxZQUFJLENBQUMsbUJBQW1CO0FBQ3RCLGdCQUFNLGFBQWE7QUFBQSxZQUNqQixhQUFhLE1BQUs7QUFDaEIsMEJBQVksaUJBQWlCLFVBQVU7QUFDdkMsbUJBQUssdUJBQUE7QUFBQSxZQUFzQjtBQUFBLFVBQzdCO0FBR0Ysc0JBQVksY0FBYyxVQUFVO0FBQUEsUUFBQTtBQUFBLE1BQ3RDO0FBR0YseUJBQW1CLGlCQUNqQixXQUNBLE1BQUs7QUFDSCxhQUFLLGdCQUFnQixzQkFBc0IsSUFBSTtBQUMvQyxhQUFLLGFBQ0gscUJBQ0MseUJBQXlCLHNCQUEyQyxFQUFFO0FBQUEsTUFBQSxHQUczRTtBQUFBLFFBQ0UsUUFBUSxLQUFLLHNCQUFzQjtBQUFBLE1BQUEsQ0FDcEM7QUFHSCx5QkFBbUIsaUJBQ2pCLFlBQ0EsTUFDRSxDQUFDLHFCQUFxQixvQkFBb0IsRUFBRSxRQUFRLENBQUMsU0FBUyxLQUFLLGdCQUFnQixJQUFJLENBQUMsR0FDMUY7QUFBQSxRQUNFLFFBQVEsS0FBSyxzQkFBc0I7QUFBQSxNQUFBLENBQ3BDO0FBQUEsSUFBQTtBQUFBLElBSUcsZ0JBQWE7QUFDbkIsVUFBSSxLQUFLLGtCQUFrQixvQkFBb0IsS0FBSyxrQkFBa0IsbUJBQW1CO0FBQ3ZGLGVBQU8sS0FBSyxPQUFPO0FBQUEsTUFBQTtBQUVyQixhQUFPLEtBQUssUUFBUSxRQUFRLE1BQU07QUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBLElBSzVCLG1CQUFnQjtBQUN0QixZQUFNLGVBQWUsS0FBSztBQUMxQixZQUFNLHFCQUFxQixPQUFPLHlCQUNoQyxPQUFPLGVBQWUsWUFBWSxHQUNsQyxPQUFPO0FBR1QsVUFBSSxDQUFDLHNCQUFzQixDQUFDLG1CQUFtQixPQUFPLENBQUMsbUJBQW1CLEtBQUs7QUFDN0U7QUFBQSxNQUFBO0FBR0Ysb0JBQWMsSUFBSSxjQUFjLGtCQUFrQjtBQUVsRCxZQUFNLEVBQUUsS0FBSyxRQUFRLEtBQUssV0FBVztBQUNyQyxZQUFNLDJCQUEyQixNQUFZLEtBQUssMEJBQUE7QUFFbEQsYUFBTyxlQUFlLGNBQWMsU0FBUztBQUFBLFFBQzNDLEdBQUc7QUFBQSxRQUNILE1BQUc7QUFDRCxpQkFBTyxPQUFPLEtBQUssSUFBSTtBQUFBLFFBQUE7QUFBQSxRQUV6QixJQUFJLFVBQVE7QUFDVixpQkFBTyxLQUFLLE1BQU0sUUFBUTtBQUMxQixtQ0FBQTtBQUFBO01BQ0YsQ0FDRDtBQUFBLElBQUE7QUFBQSxJQUdLLHFCQUFrQjtBQUN4QixZQUFNLGVBQWUsS0FBSztBQUMxQixZQUFNLHFCQUFxQixjQUFjLElBQUksWUFBWTtBQUN6RCxVQUFJLG9CQUFvQjtBQUN0QixlQUFPLGVBQWUsY0FBYyxTQUFTLGtCQUFrQjtBQUMvRCxzQkFBYyxPQUFPLFlBQVk7QUFBQSxNQUFBO0FBQUEsSUFDbkM7QUFBQSxJQUdNLDRCQUF5QjtBQUMvQixXQUFLLGdCQUNILG9CQUNBLEtBQUsscUNBQXFDLFNBQVMsS0FBSyxRQUFRLFNBQW1CLEtBQ2pGLEtBQUssY0FBQSxDQUFlO0FBQUEsSUFBQTtBQUFBLElBSWxCLGdCQUFhO0FBQ25CLFlBQU0sZ0JBQWdCLEtBQUssY0FBYyxnQkFBZ0I7QUFDekQsVUFBSSxlQUFlO0FBQ2pCLGVBQU8sS0FBSyxtQkFBQSxLQUF3QixjQUFjLE1BQU0sV0FBVztBQUFBLE1BQUEsV0FDMUQsS0FBSyxrQkFBa0Isa0JBQWtCO0FBQ2xELGVBQ0UsS0FBSyxrQ0FBa0MsU0FBUyxLQUFLLE9BQU8sSUFBSSxLQUNoRSxLQUFLLG1CQUFBO0FBQUEsTUFBa0IsV0FFaEIsS0FBSyxrQkFBa0IsbUJBQW1CO0FBQ25ELGVBQU8sS0FBSyxPQUFPLGlCQUFpQixLQUFLLENBQUMsR0FBRyxPQUFPLFdBQVc7QUFBQSxNQUFBLFdBQ3RELEtBQUssUUFBUSxjQUFjLGNBQWM7QUFDbEQsZUFBUSxLQUFLLE9BQTRCLGdCQUFBLEdBQW1CLFdBQVc7QUFBQSxNQUFBLE9BQ2xFO0FBQ0wsZUFBTyxLQUFLLG1CQUFBO0FBQUEsTUFBa0I7QUFBQSxJQUNoQztBQUFBLElBR00scUJBQWtCO0FBQ3hCLFlBQU0sUUFBUyxLQUFLLE9BQTZCO0FBQ2pELGFBQU8sQ0FBQyxJQUFJLFFBQVcsSUFBSSxFQUFFLFNBQVMsS0FBSyxLQUFNLE1BQU0sUUFBUSxLQUFLLEtBQUssTUFBTSxXQUFXO0FBQUEsSUFBQTtBQUFBLElBR3BGLGVBQVk7QUFDbEIsV0FBSyxpQkFBaUIsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxhQUFhLFFBQVEsT0FBTyxDQUFDO0FBQ3pGLFdBQUssaUJBQWlCLDRCQUE0QixFQUFFLFFBQVEsQ0FBQyxNQUMzRCxFQUFFLGFBQWEsUUFBUSxPQUFPLENBQUM7QUFBQSxJQUFBO0FBQUEsSUFJM0Isa0JBQWU7QUFDckIsVUFBSSxDQUFDLEtBQUssUUFBUTtBQUNoQjtBQUFBLE1BQUE7QUFFRixXQUFLLGdCQUFnQixpQkFBaUIsS0FBSyxPQUFPLGFBQWEsVUFBVSxDQUFDO0FBQzFFLFdBQUssZ0JBQWdCLGlCQUFpQixLQUFLLE9BQU8sYUFBYSxVQUFVLENBQUM7QUFDMUUsV0FBSyxnQkFDSCxnQkFDQSxLQUFLLE9BQU8sYUFBYSxrQkFBa0IsS0FDekMsS0FBSyxPQUFPLFVBQVUsU0FBUyxhQUFhLEtBQzNDLEtBQUssT0FBTyxVQUFVLFNBQVMsWUFBWSxLQUMxQyxLQUFLLE9BQU8sVUFBVSxTQUFTLFlBQVksQ0FBRTtBQUVuRCxXQUFLLGdCQUFnQix1QkFBdUIsS0FBSyxPQUFRLGFBQWEsZUFBZSxDQUFDO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTWhGLG1CQUFtQixPQUFZO0FBQ3JDLFdBQUssaUJBQWtCLE1BQU0sT0FBMkIsaUJBQUE7QUFFeEQsaUJBQVcsTUFBTSxLQUFLLGdCQUFnQjtBQUVwQyxZQUFJLENBQUMsR0FBRyxJQUFJO0FBQ1YsYUFBRyxLQUFLLHdCQUF3QixFQUFFLG9CQUFvQjtBQUFBLFFBQUE7QUFFeEQsWUFBSSxDQUFDLEdBQUcsTUFBTTtBQUdaLGFBQUcsT0FBTztBQUNWLGNBQUksV0FBVztBQUNiLGVBQUcsYUFBYSxRQUFRLFFBQVE7QUFBQSxVQUFBO0FBQUEsUUFDbEM7QUFBQSxNQUNGO0FBRUYsV0FBSyxzQkFBQTtBQUNMLFdBQUssZ0JBQWdCLGtCQUFrQixDQUFDLENBQUMsS0FBSyxlQUFlLE1BQU07QUFDbkUsV0FBSyxjQUFBO0FBQUEsSUFBYTtBQUFBLElBR1osd0JBQXFCO0FBQzNCLFlBQU0sTUFBTSxDQUFBO0FBRVosVUFBSSxLQUFLLCtCQUErQjtBQUN0QyxZQUFJLEtBQUssS0FBSyw2QkFBNkI7QUFBQSxNQUFBO0FBRzdDLFVBQUksS0FBSyxlQUFlLFFBQVE7QUFDOUIsYUFBSyxlQUFlLFFBQVEsQ0FBQyxNQUFNLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQztBQUFBLE1BQUE7QUFHbkQsWUFBTSxrQkFBa0IsSUFBSSxLQUFLLEdBQUc7QUFDcEMsVUFBSSxLQUFLLFFBQVE7QUFDZiw2QkFBcUIsS0FBSyxRQUFRLG9CQUFvQixlQUFlO0FBQUEsTUFBQTtBQUFBLElBQ3ZFO0FBQUE7QUFBQSxJQUlLLFFBQUs7QUFDVixXQUFLLDBCQUFBO0FBQUEsSUFBeUI7QUFBQTtBQUFBLElBSXpCLFFBQUs7QUFDVixVQUFLLEtBQUssUUFBUSxjQUF5QixTQUFTO0FBQ2xEO0FBQUEsTUFBQTtBQUVELFdBQUssT0FBNkIsUUFBUTtBQUMzQyxXQUFLLDBCQUFBO0FBQUEsSUFBeUI7QUFBQSxJQUd4QixnQkFBYTtBQUNuQixXQUFLLG1CQUNILG9OQUFvTixFQUNwTixRQUFRLENBQUMsWUFBWSxRQUFRLGdCQUFnQixZQUFZLEtBQUssUUFBUSxDQUFDO0FBQUEsSUFBQTtBQUFBLElBR3hELFNBQU07QUFDdkIsYUFBTztBQUFBO0FBQUE7QUFBQSxNQUVpRixFQUFFO0FBQUEsc0JBQ3hFLEtBQUssbUJBQW1CO0FBQUEsNENBQ0YsS0FBSyxhQUFhO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxpREFLYixLQUFLLGtCQUFrQjtBQUFBLGtCQUN0RCxLQUFLLFdBQ0gsa0NBQWtDLGFBQWEsS0FBSyxVQUFVLE9BQU8sQ0FBQyxhQUN0RSxPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUEsa0NBSU8sS0FBSyxrQkFBa0I7QUFBQTtBQUFBLGNBRTNDLENBQUMsVUFBVSxZQUFZLEVBQUUsU0FBUyxLQUFLLFFBQVEsU0FBbUIsSUFDaEU7QUFBQTtBQUFBO0FBQUEsZ0NBSUEsT0FBTztBQUFBO0FBQUEsNENBRXFCLEtBQUssYUFBYTtBQUFBO0FBQUE7QUFBQTtBQUFBLDJDQUluQixLQUFLLGtCQUFrQjtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUE7QUFBQSxLQWhkaEUsOENBS0EsNENBTTZCLHdDQUs3Qiw4Q0FLNkIseUNBSzdCLCtDQUtBLGlEQUdTLGtEQU1BLDBDQUdBOzs4QkE1Q1IsU0FBUyxFQUFFLFdBQVcsZUFBZSxTQUFTLEtBQUEsQ0FBTSxDQUFDOzRCQUlyRCxhQUNBLFNBQVMsRUFBRSxNQUFNLFFBQUEsQ0FBUyxDQUFDO0FBTzNCLHVCQUFBLENBQUEsU0FBUyxFQUFFLFNBQVMsS0FBQSxDQUFNLENBQUM7QUFHM0IsNkJBQUEsQ0FBQSxVQUFBLEdBQ0EsU0FBUyxFQUFFLFNBQVMsTUFBTSxNQUFNLFFBQUEsQ0FBUyxDQUFDO0FBTTFDLHdCQUFBLENBQUEsU0FBUyxFQUFFLFNBQVMsS0FBQSxDQUFNLENBQUM7QUFHM0IsOEJBQUEsQ0FBQSxhQUNBLFNBQVMsRUFBRSxXQUFXLGdCQUFnQixTQUFTLE1BQU0sTUFBTSxRQUFBLENBQVMsQ0FBQztBQUlyRSxnQ0FBQSxDQUFBLGFBQ0EsU0FBUyxFQUFFLFdBQVcsa0JBQWtCLFNBQVMsTUFBTSxNQUFNLFFBQUEsQ0FBUyxDQUFDO0FBSXZFLGlDQUFBLENBQUEsT0FBTztBQU1QLHlCQUFBLENBQUEsT0FBTztBQUdQLHlCQUFBLENBQUEsT0FBTztBQTNDUixpQkFBQSxJQUFBLE1BQUEsd0JBQUEsRUFBQSxNQUFBLFlBQUEsTUFBQSxjQUFBLFFBQUEsT0FBQSxTQUFBLE9BQUEsUUFBQSxFQUFBLEtBQUEsQ0FBQSxRQUFBLGdCQUFBLEtBQUEsS0FBQSxDQUFBLFFBQUEsSUFBZ0IsWUFBVSxLQUFBLENBQUEsS0FBQSxVQUFBO0FBQUEsVUFBVixhQUFVO0FBQUEsSUFBQSxLQUFBLFVBQUEsYUFBQSwwQkFBQSw2QkFBQTtBQUsxQixpQkFBQSxJQUFBLE1BQUEsc0JBQUEsRUFBQSxNQUFBLFlBQUEsTUFBQSxZQUFBLFFBQUEsT0FBQSxTQUFBLE9BQUEsUUFBQSxFQUFBLEtBQUEsQ0FBQSxRQUFBLGNBQUEsS0FBQSxLQUFBLENBQUEsUUFBQSxJQUFnQixVQUFRLEtBQUEsQ0FBQSxLQUFBLFVBQUE7QUFBQSxVQUFSLFdBQVE7QUFBQSxJQUFBLEtBQUEsVUFBQSxhQUFBLHdCQUFBLDJCQUFBO0FBTUssaUJBQUEsSUFBQSxNQUFBLGtCQUFBLEVBQUEsTUFBQSxZQUFBLE1BQUEsUUFBQSxRQUFBLE9BQUEsU0FBQSxPQUFBLFFBQUEsRUFBQSxLQUFBLENBQUEsUUFBQSxVQUFBLEtBQUEsS0FBQSxDQUFBLFFBQUEsSUFBZ0IsTUFBSSxLQUFBLENBQUEsS0FBQSxVQUFBO0FBQUEsVUFBSixPQUFJO0FBQUEsSUFBQSxLQUFBLFVBQUEsYUFBQSxvQkFBQSx1QkFBQTtBQUtqRCxpQkFBQSxJQUFBLE1BQUEsd0JBQUEsRUFBQSxNQUFBLFlBQUEsTUFBQSxjQUFBLFFBQUEsT0FBQSxTQUFBLE9BQUEsUUFBQSxFQUFBLEtBQUEsQ0FBQSxRQUFBLGdCQUFBLEtBQUEsS0FBQSxDQUFBLFFBQUEsSUFBZ0IsWUFBVSxLQUFBLENBQUEsS0FBQSxVQUFBO0FBQUEsVUFBVixhQUFVO0FBQUEsSUFBQSxLQUFBLFVBQUEsYUFBQSwwQkFBQSw2QkFBQTtBQUtHLGlCQUFBLElBQUEsTUFBQSxtQkFBQSxFQUFBLE1BQUEsWUFBQSxNQUFBLFNBQUEsUUFBQSxPQUFBLFNBQUEsT0FBQSxRQUFBLEVBQUEsS0FBQSxDQUFBLFFBQUEsV0FBQSxLQUFBLEtBQUEsQ0FBQSxRQUFBLElBQWdCLE9BQUssS0FBQSxDQUFBLEtBQUEsVUFBQTtBQUFBLFVBQUwsUUFBSztBQUFBLElBQUEsS0FBQSxVQUFBLGFBQUEscUJBQUEsd0JBQUE7QUFLbEQsaUJBQUEsSUFBQSxNQUFBLHlCQUFBLEVBQUEsTUFBQSxZQUFBLE1BQUEsZUFBQSxRQUFBLE9BQUEsU0FBQSxPQUFBLFFBQUEsRUFBQSxLQUFBLENBQUEsUUFBQSxpQkFBQSxLQUFBLEtBQUEsQ0FBQSxRQUFBLElBQWdCLGFBQVcsS0FBQSxDQUFBLEtBQUEsVUFBQTtBQUFBLFVBQVgsY0FBVztBQUFBLElBQUEsS0FBQSxVQUFBLGFBQUEsMkJBQUEsOEJBQUE7QUFLM0IsaUJBQUEsSUFBQSxNQUFBLDJCQUFBLEVBQUEsTUFBQSxZQUFBLE1BQUEsaUJBQUEsUUFBQSxPQUFBLFNBQUEsT0FBQSxRQUFBLEVBQUEsS0FBQSxDQUFBLFFBQUEsbUJBQUEsS0FBQSxLQUFBLENBQUEsUUFBQSxJQUFnQixlQUFhLEtBQUEsQ0FBQSxLQUFBLFVBQUE7QUFBQSxVQUFiLGdCQUFhO0FBQUEsSUFBQSxLQUFBLFVBQUEsYUFBQSw2QkFBQSxnQ0FBQTtBQUdwQixpQkFBQSxJQUFBLE1BQUEsNEJBQUEsRUFBQSxNQUFBLFlBQUEsTUFBQSxrQkFBQSxRQUFBLE9BQUEsU0FBQSxPQUFBLFFBQUEsRUFBQSxLQUFBLENBQUEsUUFBQSxvQkFBQSxLQUFBLEtBQUEsQ0FBQSxRQUFBLElBQWlCLGdCQUFjLEtBQUEsQ0FBQSxLQUFBLFVBQUE7QUFBQSxVQUFkLGlCQUFjO0FBQUEsSUFBQSxLQUFBLFVBQUEsYUFBQSw4QkFBQSxpQ0FBQTtBQU0vQixpQkFBQSxJQUFBLE1BQUEsb0JBQUEsRUFBQSxNQUFBLFlBQUEsTUFBQSxVQUFBLFFBQUEsT0FBQSxTQUFBLE9BQUEsUUFBQSxFQUFBLEtBQUEsQ0FBQSxRQUFBLFlBQUEsS0FBQSxLQUFBLENBQUEsUUFBQSxJQUFpQixRQUFNLEtBQUEsQ0FBQSxLQUFBLFVBQUE7QUFBQSxVQUFOLFNBQU07QUFBQSxJQUFBLEtBQUEsVUFBQSxhQUFBLHNCQUFBLHlCQUFBO0FBR3ZCLGlCQUFBLElBQUEsTUFBQSxvQkFBQSxFQUFBLE1BQUEsWUFBQSxNQUFBLFVBQUEsUUFBQSxPQUFBLFNBQUEsT0FBQSxRQUFBLEVBQUEsS0FBQSxDQUFBLFFBQUEsWUFBQSxLQUFBLEtBQUEsQ0FBQSxRQUFBLElBQWlCLFFBQU0sS0FBQSxDQUFBLEtBQUEsVUFBQTtBQUFBLFVBQU4sU0FBTTtBQUFBLElBQUEsS0FBQSxVQUFBLGFBQUEsc0JBQUEseUJBQUE7QUFyRmxDLGlCQUFBLE1BQUEsbUJBQUEsRUFBQSxPQUFBLFdBQUEsR0FBQSxrQkFBQSxFQUFBLE1BQUEsU0FBQSxNQUFBLFdBQUEsTUFBQSxVQUFBLFVBQUEsR0FBQSxNQUFBLHVCQUFBOzs7UUFDeUIsR0FBQSxTQUF5QixPQUQ1QyxrQkFBQSxZQUFBLHVCQUFBLEdBQW9COzs7In0=
|
|
926
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9mb3JtLWZpZWxkL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgaXNTZXJ2ZXIsXG4gIExpdEVsZW1lbnQsXG4gIG5vdGhpbmcsXG4gIHR5cGUgUHJvcGVydHlWYWx1ZXMsXG4gIHR5cGUgVGVtcGxhdGVSZXN1bHQsXG59IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgU2JiQXV0b2NvbXBsZXRlQmFzZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9hdXRvY29tcGxldGUuanMnO1xuaW1wb3J0IHsgc2JiSW5wdXRNb2RhbGl0eURldGVjdG9yIH0gZnJvbSAnLi4vLi4vY29yZS9hMTF5LmpzJztcbmltcG9ydCB7IFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgZm9yY2VUeXBlLCBzbG90U3RhdGUgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaXNMZWFuIH0gZnJvbSAnLi4vLi4vY29yZS9kb20uanMnO1xuaW1wb3J0IHsgaTE4bk9wdGlvbmFsIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuLmpzJztcbmltcG9ydCB7XG4gIFNiYkVsZW1lbnRJbnRlcm5hbHNNaXhpbixcbiAgU2JiSHlkcmF0aW9uTWl4aW4sXG4gIFNiYk5lZ2F0aXZlTWl4aW4sXG59IGZyb20gJy4uLy4uL2NvcmUvbWl4aW5zLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiU2VsZWN0RWxlbWVudCB9IGZyb20gJy4uLy4uL3NlbGVjdC5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2Zvcm0tZmllbGQuc2Nzcz9saXQmaW5saW5lJztcblxuaW1wb3J0ICcuLi8uLi9pY29uLmpzJztcblxubGV0IG5leHRJZCA9IDA7XG5sZXQgbmV4dEZvcm1GaWVsZEVycm9ySWQgPSAwO1xuXG5jb25zdCBwYXRjaGVkSW5wdXRzID0gbmV3IFdlYWtNYXA8SFRNTElucHV0RWxlbWVudCwgUHJvcGVydHlEZXNjcmlwdG9yPigpO1xuY29uc3QgbmF0aXZlSW5wdXRFbGVtZW50cyA9IFsnaW5wdXQnLCAndGV4dGFyZWEnLCAnc2VsZWN0J107XG5cbi8qKlxuICogSXQgd3JhcHMgYW4gaW5wdXQgZWxlbWVudCBhZGRpbmcgbGFiZWwsIGVycm9ycywgaWNvbiwgZXRjLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoaXMgc2xvdCB0byByZW5kZXIgYW4gaW5wdXQvc2VsZWN0IG9yIGEgc3VwcG9ydGVkIG5vbi1uYXRpdmUgZWxlbWVudC5cbiAqIEBzbG90IGxhYmVsIC0gVXNlIHRoaXMgc2xvdCB0byByZW5kZXIgYSBsYWJlbC5cbiAqIEBzbG90IHByZWZpeCAtIFVzZSB0aGlzIHNsb3QgdG8gcmVuZGVyIGFuIGljb24gb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgaW5wdXQuXG4gKiBAc2xvdCBzdWZmaXggLSBVc2UgdGhpcyBzbG90IHRvIHJlbmRlciBhbiBpY29uIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBpbnB1dC5cbiAqIEBzbG90IGVycm9yIC0gVXNlIHRoaXMgc2xvdCB0byByZW5kZXIgYW4gZXJyb3IuXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1mb3JtLWZpZWxkJylcbkBzbG90U3RhdGUoKVxuY2xhc3MgU2JiRm9ybUZpZWxkRWxlbWVudCBleHRlbmRzIFNiYk5lZ2F0aXZlTWl4aW4oXG4gIFNiYkVsZW1lbnRJbnRlcm5hbHNNaXhpbihTYmJIeWRyYXRpb25NaXhpbihMaXRFbGVtZW50KSksXG4pIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG5cbiAgLy8gTGlzdCBvZiBlbGVtZW50cyB0aGF0IHNob3VsZCBub3QgZm9jdXMgaW5wdXQgb24gY2xpY2tcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhjbHVkZWRGb2N1c0VsZW1lbnRzID0gWydidXR0b24nLCAnc2JiLXBvcG92ZXInLCAnc2JiLW9wdGlvbicsICdzYmItY2hpcCddO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Zsb2F0aW5nTGFiZWxTdXBwb3J0ZWRJbnB1dEVsZW1lbnRzID0gW1xuICAgICdpbnB1dCcsXG4gICAgJ3NlbGVjdCcsXG4gICAgJ3NiYi1kYXRlLWlucHV0JyxcbiAgICAnc2JiLXRpbWUtaW5wdXQnLFxuICAgICdzYmItc2VsZWN0JyxcbiAgICAndGV4dGFyZWEnLFxuICBdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Zsb2F0aW5nTGFiZWxTdXBwb3J0ZWRJbnB1dFR5cGVzID0gW1xuICAgICdlbWFpbCcsXG4gICAgJ251bWJlcicsXG4gICAgJ3Bhc3N3b3JkJyxcbiAgICAnc2VhcmNoJyxcbiAgICAndGVsJyxcbiAgICAndGV4dCcsXG4gICAgJ3VybCcsXG4gIF07XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgYW4gZXJyb3IgbWVzc2FnZS5cbiAgICogYG5vbmVgIGRvZXMgbm90IHJlc2VydmUgYW55IHNwYWNlLlxuICAgKiBgcmVzZXJ2ZWAgZG9lcyByZXNlcnZlIG9uZSByb3cgZm9yIGFuIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdlcnJvci1zcGFjZScsIHJlZmxlY3Q6IHRydWUgfSlcbiAgcHVibGljIGFjY2Vzc29yIGVycm9yU3BhY2U6ICdub25lJyB8ICdyZXNlcnZlJyA9ICdub25lJztcblxuICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGlucHV0IGlzIG9wdGlvbmFsLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3Igb3B0aW9uYWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogU2l6ZSB2YXJpYW50LCBlaXRoZXIgbCwgbSBvciBzLlxuICAgKiBAZGVmYXVsdCAnbScgLyAncycgKGxlYW4pXG4gICAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBhY2Nlc3NvciBzaXplOiAnbCcgfCAnbScgfCAncycgPSBpc0xlYW4oKSA/ICdzJyA6ICdtJztcblxuICAvKiogV2hldGhlciB0byBkaXNwbGF5IHRoZSBmb3JtIGZpZWxkIHdpdGhvdXQgYSBib3JkZXIuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBib3JkZXJsZXNzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIERlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSBjb21wb25lbnQ6XG4gICAqIC0gYGRlZmF1bHRgOiB0aGUgY29tcG9uZW50IGhhcyBkZWZpbmVkIHdpZHRoIGFuZCBtaW4td2lkdGg7XG4gICAqIC0gYGNvbGxhcHNlYDogdGhlIGNvbXBvbmVudCBhZGFwdHMgaXRzZWxmIHRvIGl0cyBpbm5lciBpbnB1dCBjb250ZW50LiAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBhY2Nlc3NvciB3aWR0aDogJ2RlZmF1bHQnIHwgJ2NvbGxhcHNlJyA9ICdkZWZhdWx0JztcblxuICAvKiogV2hldGhlciB0byB2aXN1YWxseSBoaWRlIHRoZSBsYWJlbC4gSWYgaGlkZGVuLCBzY3JlZW4gcmVhZGVycyB3aWxsIHN0aWxsIHJlYWQgaXQuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdoaWRkZW4tbGFiZWwnLCByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBoaWRkZW5MYWJlbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBsYWJlbCBzaG91bGQgZmxvYXQuIElmIGFjdGl2YXRlZCwgdGhlIHBsYWNlaG9sZGVyIG9mIHRoZSBpbnB1dCBpcyBoaWRkZW4uICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdmbG9hdGluZy1sYWJlbCcsIHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGZsb2F0aW5nTGFiZWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogSXQgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIGdldCB0aGUgYGVycm9yYCBzbG90LiAqL1xuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF9lcnJvckVsZW1lbnRzOiBFbGVtZW50W10gPSBbXTtcblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBzbG90dGVkIGlucHV0IGVsZW1lbnQuICovXG4gIEBzdGF0ZSgpIHByaXZhdGUgYWNjZXNzb3IgX2lucHV0ITogSFRNTElucHV0RWxlbWVudCB8IEhUTUxTZWxlY3RFbGVtZW50IHwgSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgc2xvdHRlZCBsYWJlbCBlbGVtZW50cy4gKi9cbiAgQHN0YXRlKCkgcHJpdmF0ZSBhY2Nlc3NvciBfbGFiZWwhOiBIVE1MTGFiZWxFbGVtZW50O1xuXG4gIC8qKiBSZXR1cm5zIHRoZSBpbnB1dCBlbGVtZW50LiAqL1xuICBwdWJsaWMgZ2V0IGlucHV0RWxlbWVudCgpOiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFNlbGVjdEVsZW1lbnQgfCBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0O1xuICB9XG5cbiAgcHJpdmF0ZSBfbGFuZ3VhZ2UgPSBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpO1xuXG4gIC8qKlxuICAgKiBMaXN0ZW5zIHRvIHRoZSBjaGFuZ2VzIG9uIGByZWFkb25seWAgYW5kIGBkaXNhYmxlZGAgYXR0cmlidXRlcyBvZiBgPGlucHV0PmAuXG4gICAqL1xuICBwcml2YXRlIF9mb3JtRmllbGRBdHRyaWJ1dGVPYnNlcnZlciA9ICFpc1NlcnZlclxuICAgID8gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9uczogTXV0YXRpb25SZWNvcmRbXSkgPT4ge1xuICAgICAgICBpZiAobXV0YXRpb25zLnNvbWUoKG0pID0+IG0udHlwZSA9PT0gJ2F0dHJpYnV0ZXMnKSAmJiB0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuX3JlYWRJbnB1dFN0YXRlKCk7XG4gICAgICAgICAgdGhpcy5fcmVnaXN0ZXJJbnB1dEZvcm1MaXN0ZW5lcigpO1xuICAgICAgICAgIHRoaXMuX2NoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIDogbnVsbDtcblxuICBwcml2YXRlIF9pbnB1dEZvcm1BYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oXG4gICAgICAnZm9jdXNpbicsXG4gICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGV2ZW50LnRhcmdldCA9PT0gdGhpcy5pbnB1dEVsZW1lbnQgfHxcbiAgICAgICAgICBldmVudC50YXJnZXQgPT09ICh0aGlzLmlucHV0RWxlbWVudCBhcyBTYmJTZWxlY3RFbGVtZW50KS5pbnB1dEVsZW1lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmFkZCgnZm9jdXMnKTtcbiAgICAgICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKGBmb2N1cy1vcmlnaW4tJHtzYmJJbnB1dE1vZGFsaXR5RGV0ZWN0b3IubW9zdFJlY2VudE1vZGFsaXR5fWApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBwYXNzaXZlOiB0cnVlIH0sXG4gICAgKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LihcbiAgICAgICdmb2N1c291dCcsXG4gICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGV2ZW50LnRhcmdldCA9PT0gdGhpcy5pbnB1dEVsZW1lbnQgfHxcbiAgICAgICAgICBldmVudC50YXJnZXQgPT09ICh0aGlzLmlucHV0RWxlbWVudCBhcyBTYmJTZWxlY3RFbGVtZW50KS5pbnB1dEVsZW1lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZSgnZm9jdXMnKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHN0YXRlIG9mIHRoaXMuaW50ZXJuYWxzLnN0YXRlcykge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnN0YXJ0c1dpdGgoJ2ZvY3VzLW9yaWdpbi0nKSkge1xuICAgICAgICAgICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuZGVsZXRlKHN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IHBhc3NpdmU6IHRydWUgfSxcbiAgICApO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB0aGlzLl9jaGVja0FuZFVwZGF0ZUlucHV0RW1wdHkoKSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdkaXNwbGF5VmFsdWVDaGFuZ2UnLCAoKSA9PiB0aGlzLl9jaGVja0FuZFVwZGF0ZUlucHV0RW1wdHkoKSk7XG4gICAgLy8gV2Ugd2FudCB0byBwcmV2ZW50IHRoZSBuYXRpdmUgYnJvd3NlciB2YWxpZGF0aW9uIG1lc3NhZ2UgcG9wb3ZlclxuICAgIC8vIHRvIGJlIHNob3duLiBUaGlzIGFsc28gcHJldmVudHMgYSBidWcgaW4gV2ViS2l0LCB3aGljaCB3b3VsZCBub3RcbiAgICAvLyBhbGxvdyBob3N0IGFzIHRoZSB2YWxpZGl0eSBhbmNob3I6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk4MzJcbiAgICAvLyBUaGlzIGlzIGR1cGxpY2F0ZWQgZnJvbSB0aGUgZm9ybSBhc3NvY2lhdGVkIG1peGluIGZvciB0aGUgbmF0aXZlXG4gICAgLy8gaW5wdXQgY29udHJvbHMgKGUuZy4gPGlucHV0PiBvciA8c2VsZWN0PikuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdpbnZhbGlkJywgKGUpID0+IGUucHJldmVudERlZmF1bHQoKSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5fYXNzaWduU2xvdHMoKTtcbiAgICB0aGlzLl9jb25uZWN0SW5wdXRFbGVtZW50KCk7XG4gICAgdGhpcy5fc3luY05lZ2F0aXZlKCk7XG4gICAgdGhpcy5fc3luY1NpemUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbmVnYXRpdmUnKSkge1xuICAgICAgdGhpcy5fc3luY05lZ2F0aXZlKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ3NpemUnKSkge1xuICAgICAgdGhpcy5fc3luY1NpemUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl9mb3JtRmllbGRBdHRyaWJ1dGVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuX2lucHV0Rm9ybUFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgIGlmICh0aGlzLl9pbnB1dD8ubG9jYWxOYW1lID09PSAnaW5wdXQnKSB7XG4gICAgICB0aGlzLl91bnBhdGNoSW5wdXRWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVdyYXBwZXJDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faXNFbGVtZW50Rm9jdXNFeGNsdWRlZChldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS5sb2NhbE5hbWUgIT09ICdsYWJlbCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5faW5wdXQ/LmxvY2FsTmFtZSA9PT0gJ3NiYi1zZWxlY3QnICYmXG4gICAgICAgIChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmxvY2FsTmFtZSAhPT0gJ3NiYi1zZWxlY3QnXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5faW5wdXQuY2xpY2soKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lucHV0Py5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzRWxlbWVudEZvY3VzRXhjbHVkZWQoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGV2ZW50XG4gICAgICAuY29tcG9zZWRQYXRoKClcbiAgICAgIC5zb21lKFxuICAgICAgICAoZWwpID0+XG4gICAgICAgICAgKGVsIGluc3RhbmNlb2Ygd2luZG93LkhUTUxFbGVtZW50ICYmXG4gICAgICAgICAgICAoZWwuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpID09PSAnMCcgfHwgZWwuaGFzQXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKSkpIHx8XG4gICAgICAgICAgdGhpcy5fZXhjbHVkZWRGb2N1c0VsZW1lbnRzLmluY2x1ZGVzKChlbCBhcyBIVE1MRWxlbWVudCkubG9jYWxOYW1lKSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9vblNsb3RMYWJlbENoYW5nZSgpOiB2b2lkIHtcbiAgICBjb25zdCBsYWJlbHMgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgnbGFiZWwnKSk7XG4gICAgaWYgKGltcG9ydC5tZXRhLmVudi5ERVYgJiYgbGFiZWxzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYERldGVjdGVkIG1vcmUgdGhhbiBvbmUgbGFiZWwgaW4gc2JiLWZvcm0tZmllbGQjJHt0aGlzLmlkfS4gT25seSBvbmUgbGFiZWwgaXMgc3VwcG9ydGVkLmAsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLl9sYWJlbCA9IGxhYmVsc1swXTtcbiAgICB0aGlzLl9zeW5jTGFiZWxJbnB1dFJlZmVyZW5jZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCBpcyB1c2VkIGludGVybmFsbHkgdG8gYXNzaWduIHRoZSBhdHRyaWJ1dGVzIG9mIGA8aW5wdXQ+YCB0byBgX2lkYCBhbmQgYF9pbnB1dGAgYW5kIHRvIG9ic2VydmUgdGhlIG5hdGl2ZSByZWFkb25seSBhbmQgZGlzYWJsZWQgYXR0cmlidXRlcy5cbiAgICovXG4gIHByaXZhdGUgX29uU2xvdElucHV0Q2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Fzc2lnblNsb3RzKCk7XG4gICAgdGhpcy5fY29ubmVjdElucHV0RWxlbWVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXNzaWduU2xvdHMoKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdsYWJlbDpub3QoW3Nsb3RdKScpLmZvckVhY2goKGUpID0+IGUuc2V0QXR0cmlidXRlKCdzbG90JywgJ2xhYmVsJykpO1xuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbCgnc2JiLWZvcm0tZXJyb3I6bm90KFtzbG90XSknKS5mb3JFYWNoKChlKSA9PlxuICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAnZXJyb3InKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29ubmVjdElucHV0RWxlbWVudCgpOiB2b2lkIHtcbiAgICAvLyBGaW5kIHRoZSBzbG90dGVkIGlucHV0IGVsZW1lbnQsIGV2ZW4gaWYgaXQncyBuZXN0ZWQgKGUuZy4gY2hpcCBncm91cClcbiAgICBjb25zdCBpbnB1dENhbmRpZGF0ZXMgPSBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignKjpub3QoW3Nsb3RdLHNiYi1jaGlwLWdyb3VwKScpLFxuICAgICk7XG4gICAgY29uc3QgbmV3SW5wdXQgPSBpbnB1dENhbmRpZGF0ZXMuZmluZCgoZSkgPT4gdGhpcy5faXNJbnB1dEVsZW1lbnQoZSkpIHx8IGlucHV0Q2FuZGlkYXRlc1swXTtcblxuICAgIGlmIChuZXdJbnB1dCA9PT0gdGhpcy5faW5wdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lucHV0KSB7XG4gICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuZGVsZXRlKGBpbnB1dC10eXBlLSR7dGhpcy5faW5wdXQubG9jYWxOYW1lfWApO1xuICAgICAgaWYgKHRoaXMuX2lucHV0LmxvY2FsTmFtZSA9PT0gJ2lucHV0Jykge1xuICAgICAgICB0aGlzLl91bnBhdGNoSW5wdXRWYWx1ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghbmV3SW5wdXQpIHtcbiAgICAgIHRoaXMuX2lucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lucHV0ID0gbmV3SW5wdXQ7XG4gICAgdGhpcy5fYXBwbHlBcmlhRGVzY3JpYmVkYnkoKTtcbiAgICB0aGlzLl9yZWFkSW5wdXRTdGF0ZSgpO1xuICAgIHRoaXMuX3JlZ2lzdGVySW5wdXRGb3JtTGlzdGVuZXIoKTtcbiAgICB0aGlzLl9jaGVja0FuZFVwZGF0ZUlucHV0RW1wdHkoKTtcblxuICAgIGlmICh0aGlzLl9pbnB1dC5sb2NhbE5hbWUgPT09ICd0ZXh0YXJlYScpIHtcbiAgICAgIHRoaXMuX2lucHV0LnNldEF0dHJpYnV0ZSgncm93cycsIHRoaXMuX2lucHV0LmdldEF0dHJpYnV0ZSgncm93cycpIHx8ICczJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9pbnB1dC5sb2NhbE5hbWUgPT09ICdpbnB1dCcpIHtcbiAgICAgIHRoaXMuX3BhdGNoSW5wdXRWYWx1ZSgpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAodGhpcy5faW5wdXQubG9jYWxOYW1lID09PSAnc2VsZWN0JyB8fCB0aGlzLl9pbnB1dC5sb2NhbE5hbWUgPT09ICdzYmItc2VsZWN0JykgJiZcbiAgICAgICF0aGlzLmhhc1VwZGF0ZWRcbiAgICApIHtcbiAgICAgIC8vIER1ZSB0byBTU1IgdGhlIGRyb3Bkb3duIGljb24gZm9yIHNlbGVjdHMgY2Fubm90IGJlIHJlbmRlcmVkIGluIHRoZSBmaXJzdCByZW5kZXIgcGFzcy5cbiAgICAgIC8vIER1ZSB0byB0aGlzIHdlIHNjaGVkdWxlIGEgcmUtcmVuZGVyIHRvIHJlbmRlciB0aGUgaWNvbi5cbiAgICAgIHRoaXMuaHlkcmF0aW9uQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLnJlcXVlc3RVcGRhdGUoKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZm9ybUZpZWxkQXR0cmlidXRlT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLl9mb3JtRmllbGRBdHRyaWJ1dGVPYnNlcnZlcj8ub2JzZXJ2ZSh0aGlzLl9pbnB1dCwge1xuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydyZWFkb25seScsICdkaXNhYmxlZCcsICdmb3JtJywgJ2NsYXNzJywgJ2RhdGEtZXhwYW5kZWQnXSxcbiAgICB9KTtcbiAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKGBpbnB1dC10eXBlLSR7dGhpcy5faW5wdXQubG9jYWxOYW1lfWApO1xuICAgIHRoaXMuX3N5bmNMYWJlbElucHV0UmVmZXJlbmNlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3luY0xhYmVsSW5wdXRSZWZlcmVuY2VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW5wdXQgfHwgIXRoaXMuX2xhYmVsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgbmF0aXZlSW5wdXRFbGVtZW50cy5pbmNsdWRlcyh0aGlzLl9pbnB1dC5sb2NhbE5hbWUpIHx8XG4gICAgICAoY3VzdG9tRWxlbWVudHMuZ2V0KHRoaXMuX2lucHV0LmxvY2FsTmFtZSkgYXMgeyBmb3JtQXNzb2NpYXRlZDogYm9vbGVhbiB9IHwgdW5kZWZpbmVkKVxuICAgICAgICA/LmZvcm1Bc3NvY2lhdGVkXG4gICAgKSB7XG4gICAgICAvLyBGb3IgbmF0aXZlIGlucHV0IGVsZW1lbnRzIHdlIHVzZSB0aGUgYGZvcmAgYXR0cmlidXRlIG9uIHRoZSBsYWJlbCB0byByZWZlcmVuY2UgdGhlIGlucHV0XG4gICAgICAvLyB2aWEgaWQgcmVmZXJlbmNlLlxuICAgICAgdGhpcy5faW5wdXQuaWQgfHw9IGBzYmItZm9ybS1maWVsZC1pbnB1dC0ke25leHRJZCsrfWA7XG4gICAgICB0aGlzLl9sYWJlbC5odG1sRm9yID0gdGhpcy5faW5wdXQuaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBub24tbmF0aXZlIGlucHV0IGVsZW1lbnRzLCB0aGF0IGRvIG5vdCBzdXBwb3J0IHJlZmVyZW5jZXMgdmlhIHRoZSBsYWJlbCBmb3IgYXR0cmlidXRlLFxuICAgICAgLy8gd2UgdXNlIGFyaWEtbGFiZWxsZWRieSBvbiB0aGUgaW5wdXQgZWxlbWVudCB0byByZWZlcmVuY2UgdGhlIGxhYmVsIGVsZW1lbnQgdmlhIGlkLlxuICAgICAgLy8gVE9ETzogTWlncmF0ZSB0byBhcmlhTGFiZWxsZWRCeUVsZW1lbnRzIHdoZW4gYXZhaWxhYmxlOlxuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvYXJpYUxhYmVsbGVkQnlFbGVtZW50c1xuICAgICAgdGhpcy5fbGFiZWwuaWQgfHw9IGBzYmItZm9ybS1maWVsZC1sYWJlbC0ke25leHRJZCsrfWA7XG4gICAgICBjb25zdCBsYWJlbGxlZGJ5ID1cbiAgICAgICAgdGhpcy5faW5wdXRcbiAgICAgICAgICAuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknKVxuICAgICAgICAgID8uc3BsaXQoJyAnKVxuICAgICAgICAgIC5maWx0ZXIoKGwpID0+ICEhbCAmJiBsICE9PSB0aGlzLl9sYWJlbCEuaWQpID8/IFtdO1xuICAgICAgdGhpcy5faW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknLCBbLi4ubGFiZWxsZWRieSwgdGhpcy5fbGFiZWwuaWRdLmpvaW4oJyAnKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNJbnB1dEVsZW1lbnQoaW5wdXQ6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgbmF0aXZlSW5wdXRFbGVtZW50cy5pbmNsdWRlcyhpbnB1dC5sb2NhbE5hbWUpIHx8XG4gICAgICAhIShjdXN0b21FbGVtZW50cy5nZXQoaW5wdXQubG9jYWxOYW1lKSBhcyB7IGZvcm1Bc3NvY2lhdGVkOiBib29sZWFuIH0gfCB1bmRlZmluZWQpXG4gICAgICAgID8uZm9ybUFzc29jaWF0ZWRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVhZElucHV0U3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGVTdGF0ZSgncmVhZG9ubHknLCB0aGlzLl9pbnB1dCEuaGFzQXR0cmlidXRlKCdyZWFkb25seScpKTtcbiAgICB0aGlzLnRvZ2dsZVN0YXRlKCdkaXNhYmxlZCcsIHRoaXMuX2lucHV0IS5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpO1xuICAgIHRoaXMudG9nZ2xlU3RhdGUoJ2hhcy1wb3B1cC1vcGVuJywgdGhpcy5faW5wdXQhLmhhc0F0dHJpYnV0ZSgnZGF0YS1leHBhbmRlZCcpKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVySW5wdXRGb3JtTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgdGhpcy5faW5wdXRGb3JtQWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgY29uc3QgeyBzaWduYWwgfSA9ICh0aGlzLl9pbnB1dEZvcm1BYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCkpO1xuXG4gICAgY29uc3QgZm9ybSA9XG4gICAgICAodGhpcy5faW5wdXQgYXMgSFRNTElucHV0RWxlbWVudCB8IEhUTUxTZWxlY3RFbGVtZW50IHwgdW5kZWZpbmVkKT8uZm9ybSA/P1xuICAgICAgdGhpcy5faW5wdXQ/LmNsb3Nlc3QoJ2Zvcm0nKTtcbiAgICAvLyBUaW1lb3V0IG5lZWRlZCB0byBoYXZlIHZhbHVlIHVwZGF0ZWRcbiAgICBjb25zdCByZXNldEhhbmRsZXIgPSAoKTogdW5rbm93biA9PiBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzZXQoKSk7XG4gICAgZm9ybT8uYWRkRXZlbnRMaXN0ZW5lcigncmVzZXQnLCByZXNldEhhbmRsZXIsIHsgc2lnbmFsIH0pO1xuICB9XG5cbiAgLy8gV2UgbmVlZCB0byBwYXRjaCB0aGUgdmFsdWUgcHJvcGVydHkgb2YgdGhlIEhUTUxJbnB1dEVsZW1lbnQgaW4gb3JkZXJcbiAgLy8gdG8gYmUgYWJsZSB0byByZXNldCB0aGUgZmxvYXRpbmcgbGFiZWwgaW4gdGhlIGVtcHR5IHN0YXRlLlxuICBwcml2YXRlIF9wYXRjaElucHV0VmFsdWUoKTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gdGhpcy5faW5wdXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAoIWlucHV0RWxlbWVudCB8fCBwYXRjaGVkSW5wdXRzLmhhcyhpbnB1dEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihpbnB1dEVsZW1lbnQpLFxuICAgICAgJ3ZhbHVlJyxcbiAgICApO1xuXG4gICAgaWYgKCFvcmlnaW5hbERlc2NyaXB0b3IgfHwgIW9yaWdpbmFsRGVzY3JpcHRvci5zZXQgfHwgIW9yaWdpbmFsRGVzY3JpcHRvci5nZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwYXRjaGVkSW5wdXRzLnNldChpbnB1dEVsZW1lbnQsIG9yaWdpbmFsRGVzY3JpcHRvcik7XG5cbiAgICBjb25zdCB7IGdldDogZ2V0dGVyLCBzZXQ6IHNldHRlciB9ID0gb3JpZ2luYWxEZXNjcmlwdG9yO1xuICAgIGNvbnN0IGNoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSA9ICgpOiB2b2lkID0+IHRoaXMuX2NoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGlucHV0RWxlbWVudCwgJ3ZhbHVlJywge1xuICAgICAgLi4ub3JpZ2luYWxEZXNjcmlwdG9yLFxuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZ2V0dGVyLmNhbGwodGhpcyk7XG4gICAgICB9LFxuICAgICAgc2V0KG5ld1ZhbHVlKSB7XG4gICAgICAgIHNldHRlci5jYWxsKHRoaXMsIG5ld1ZhbHVlKTtcbiAgICAgICAgY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdW5wYXRjaElucHV0VmFsdWUoKTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gdGhpcy5faW5wdXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCBvcmlnaW5hbERlc2NyaXB0b3IgPSBwYXRjaGVkSW5wdXRzLmdldChpbnB1dEVsZW1lbnQpO1xuICAgIGlmIChvcmlnaW5hbERlc2NyaXB0b3IpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnB1dEVsZW1lbnQsICd2YWx1ZScsIG9yaWdpbmFsRGVzY3JpcHRvcik7XG4gICAgICBwYXRjaGVkSW5wdXRzLmRlbGV0ZShpbnB1dEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZVN0YXRlKFxuICAgICAgJ2VtcHR5JyxcbiAgICAgIHRoaXMuX2Zsb2F0aW5nTGFiZWxTdXBwb3J0ZWRJbnB1dEVsZW1lbnRzLmluY2x1ZGVzKHRoaXMuX2lucHV0Py5sb2NhbE5hbWUgYXMgc3RyaW5nKSAmJlxuICAgICAgICB0aGlzLl9pc0lucHV0RW1wdHkoKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNJbnB1dEVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNoaXBHcm91cEVsZW0gPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3NiYi1jaGlwLWdyb3VwJyk7XG4gICAgaWYgKGNoaXBHcm91cEVsZW0pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuX2lzSW5wdXRWYWx1ZUVtcHR5KCkgJiZcbiAgICAgICAgKEFycmF5LmlzQXJyYXkoY2hpcEdyb3VwRWxlbS52YWx1ZSlcbiAgICAgICAgICA/IGNoaXBHcm91cEVsZW0udmFsdWUubGVuZ3RoID09PSAwXG4gICAgICAgICAgOiAhY2hpcEdyb3VwRWxlbS5xdWVyeVNlbGVjdG9yKCdzYmItY2hpcCcpKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lucHV0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5fZmxvYXRpbmdMYWJlbFN1cHBvcnRlZElucHV0VHlwZXMuaW5jbHVkZXModGhpcy5faW5wdXQudHlwZSkgJiZcbiAgICAgICAgdGhpcy5faXNJbnB1dFZhbHVlRW1wdHkoKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lucHV0IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnB1dC5zZWxlY3RlZE9wdGlvbnM/Lml0ZW0oMCk/LmxhYmVsPy50cmltKCkgPT09ICcnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5faW5wdXQ/LmxvY2FsTmFtZSA9PT0gJ3NiYi1zZWxlY3QnKSB7XG4gICAgICByZXR1cm4gKHRoaXMuX2lucHV0IGFzIFNiYlNlbGVjdEVsZW1lbnQpLmdldERpc3BsYXlWYWx1ZT8uKCk/LnRyaW0oKSA9PT0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9pc0lucHV0VmFsdWVFbXB0eSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzSW5wdXRWYWx1ZUVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gKHRoaXMuX2lucHV0IGFzIHsgdmFsdWU6IHN0cmluZyB9KS52YWx1ZTtcbiAgICByZXR1cm4gWycnLCB1bmRlZmluZWQsIG51bGxdLmluY2x1ZGVzKHZhbHVlKSB8fCAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCBpcyB1c2VkIGludGVybmFsbHkgdG8gc2V0IHRoZSBhcmlhLWRlc2NyaWJlZGJ5IGF0dHJpYnV0ZSBmb3IgdGhlIHNsb3R0ZWQgaW5wdXQgcmVmZXJlbmNpbmcgYXZhaWxhYmxlIDxzYmItZm9ybS1lcnJvcj4gaW5zdGFuY2VzLlxuICAgKi9cbiAgcHJpdmF0ZSBfb25TbG90RXJyb3JDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZXJyb3JzID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MU2xvdEVsZW1lbnQpLmFzc2lnbmVkRWxlbWVudHMoKTtcbiAgICAvLyBSZW1vdmUgcmVmZXJlbmNlcyBvZiByZW1vdmVkIGVycm9ycyBmcm9tIGFyaWEtZGVzY3JpYmVkYnkuXG4gICAgY29uc3QgcmVtb3ZlZEVycm9ySWRzID0gdGhpcy5fZXJyb3JFbGVtZW50cy5maWx0ZXIoKGUpID0+ICFlcnJvcnMuaW5jbHVkZXMoZSkpLm1hcCgoZSkgPT4gZS5pZCk7XG4gICAgdGhpcy5fZXJyb3JFbGVtZW50cyA9IGVycm9ycztcblxuICAgIGZvciAoY29uc3QgZWwgb2YgdGhpcy5fZXJyb3JFbGVtZW50cykge1xuICAgICAgLy8gQWx0aG91Z2ggYSBmb3JtIGVycm9yIGFzc2lnbnMgYW4gaWQgaXRzZWxmLCB3ZSBuZWVkIHRvIGJlIGVhcmxpZXIgYnkgY3JlYXRpbmcgb25lIGhlcmVcbiAgICAgIGVsLmlkIHx8PSBgc2JiLWZvcm0tZmllbGQtZXJyb3ItJHsrK25leHRGb3JtRmllbGRFcnJvcklkfWA7XG4gICAgICAvLyBJbnN0ZWFkIG9mIGRlZmluaW5nIGEgY29udGFpbmVyIHdpdGggYW4gYXJpYS1saXZlIHJlZ2lvbiBhcyBleHBlY3RlZCwgd2UgaGFkIHRvIGNoYW5nZVxuICAgICAgLy8gc2V0dGluZyBpdCBmb3IgZXZlcnkgc2xvdHRlZCBlbGVtZW50IHRvIHByb3Blcmx5IHdvcmsgaW4gYWxsIGJyb3dzZXJzIGFuZCBzY3JlZW4gcmVhZGVyIGNvbWJpbmF0aW9ucy5cbiAgICAgIGVsLnJvbGUgfHw9ICdzdGF0dXMnO1xuICAgIH1cbiAgICB0aGlzLl9hcHBseUFyaWFEZXNjcmliZWRieShyZW1vdmVkRXJyb3JJZHMpO1xuICAgIHRoaXMudG9nZ2xlU3RhdGUoJ2hhcy1lcnJvcicsICEhdGhpcy5fZXJyb3JFbGVtZW50cy5sZW5ndGgpO1xuICAgIHRoaXMuX3N5bmNOZWdhdGl2ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlBcmlhRGVzY3JpYmVkYnkob2Jzb2xldGVJZHM6IHN0cmluZ1tdID0gW10pOiB2b2lkIHtcbiAgICBjb25zdCBhcmlhRGVzY3JpYmVkYnkgPSB0aGlzLl9pbnB1dD8uZ2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JykgfHwgJyc7XG4gICAgY29uc3QgaWRzID0gYXJpYURlc2NyaWJlZGJ5XG4gICAgICAuc3BsaXQoJyAnKVxuICAgICAgLmZpbHRlcigoaWQpID0+ICEhaWQgJiYgIW9ic29sZXRlSWRzLmluY2x1ZGVzKGlkKSlcbiAgICAgIC5maWx0ZXIoKHYsIGksIGEpID0+IGEuaW5kZXhPZih2KSA9PT0gaSk7XG5cbiAgICBpZiAodGhpcy5fZXJyb3JFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX2Vycm9yRWxlbWVudHMuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICBpZiAoIWlkcy5pbmNsdWRlcyhlLmlkKSkge1xuICAgICAgICAgIGlkcy5wdXNoKGUuaWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdBcmlhRGVzY3JpYmVkYnkgPSBpZHMuam9pbignICcpO1xuICAgIGlmICh0aGlzLl9pbnB1dCAmJiBuZXdBcmlhRGVzY3JpYmVkYnkgIT09IGFyaWFEZXNjcmliZWRieSkge1xuICAgICAgaWYgKG5ld0FyaWFEZXNjcmliZWRieSkge1xuICAgICAgICB0aGlzLl9pbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCBuZXdBcmlhRGVzY3JpYmVkYnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faW5wdXQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIE1hbnVhbGx5IHJlc2V0IHRoZSBmb3JtIGZpZWxkLiBDdXJyZW50bHksIHRoaXMgb25seSByZXNldHMgdGhlIGZsb2F0aW5nIGxhYmVsLiAqL1xuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5fY2hlY2tBbmRVcGRhdGVJbnB1dEVtcHR5KCk7XG4gIH1cblxuICAvKiogTWFudWFsbHkgY2xlYXJzIHRoZSBpbnB1dCB2YWx1ZS4gSXQgb25seSB3b3JrcyBmb3IgaW5wdXRzLCBzZWxlY3RzIGFyZSBub3Qgc3VwcG9ydGVkLiAqL1xuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgaWYgKCh0aGlzLl9pbnB1dD8ubG9jYWxOYW1lIGFzIHN0cmluZykgIT09ICdpbnB1dCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKHRoaXMuX2lucHV0IGFzIHsgdmFsdWU6IHN0cmluZyB9KS52YWx1ZSA9ICcnO1xuICAgIHRoaXMuX2NoZWNrQW5kVXBkYXRlSW5wdXRFbXB0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3luY05lZ2F0aXZlKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbD8uKFxuICAgICAgJ3NiYi1mb3JtLWVycm9yLHNiYi1taW5pLWJ1dHRvbixzYmItcG9wb3Zlci10cmlnZ2VyLHNiYi1mb3JtLWZpZWxkLWNsZWFyLHNiYi1kYXRlcGlja2VyLW5leHQtZGF5LHNiYi1kYXRlcGlja2VyLXByZXZpb3VzLWRheSxzYmItZGF0ZXBpY2tlci10b2dnbGUsc2JiLXNlbGVjdCxzYmItYXV0b2NvbXBsZXRlLHNiYi1hdXRvY29tcGxldGUtZ3JpZCxzYmItY2hpcC1ncm91cCcsXG4gICAgKS5mb3JFYWNoKChlbGVtZW50KSA9PiBlbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSgnbmVnYXRpdmUnLCB0aGlzLm5lZ2F0aXZlKSk7XG4gIH1cblxuICBwcml2YXRlIF9zeW5jU2l6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/LjxTYmJBdXRvY29tcGxldGVCYXNlRWxlbWVudCB8IFNiYlNlbGVjdEVsZW1lbnQ+KFxuICAgICAgJ3NiYi1hdXRvY29tcGxldGUsc2JiLWF1dG9jb21wbGV0ZS1ncmlkLHNiYi1zZWxlY3QnLFxuICAgICkuZm9yRWFjaCgoZWxlbWVudCkgPT4gKGVsZW1lbnQuc2l6ZSA9IHRoaXMuc2l6ZSA9PT0gJ3MnID8gJ3MnIDogJ20nKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItZm9ybS1maWVsZF9fc3BhY2Utd3JhcHBlclwiPlxuICAgICAgICAkey8qIFF1ZXJpZWQgYnkgaWQgZnJvbSB0aGUgYXV0b2NvbXBsZXRlL3NlbGVjdCB0byBiZSB1c2VkIGFzIHRoZSBhbmNob3IgZWxlbWVudCAqLyAnJ31cbiAgICAgICAgPGRpdiBAY2xpY2s9JHt0aGlzLl9oYW5kbGVXcmFwcGVyQ2xpY2t9IGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX3dyYXBwZXJcIiBpZD1cIm92ZXJsYXktYW5jaG9yXCI+XG4gICAgICAgICAgPHNsb3QgbmFtZT1cInByZWZpeFwiIEBzbG90Y2hhbmdlPSR7dGhpcy5fc3luY05lZ2F0aXZlfT48L3Nsb3Q+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1mb3JtLWZpZWxkX19pbnB1dC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX2xhYmVsLXNwYWNlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX2xhYmVsXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX2xhYmVsLWVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cImxhYmVsXCIgQHNsb3RjaGFuZ2U9JHt0aGlzLl9vblNsb3RMYWJlbENoYW5nZX0+PC9zbG90PlxuICAgICAgICAgICAgICAgICR7dGhpcy5vcHRpb25hbFxuICAgICAgICAgICAgICAgICAgPyBodG1sYCA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4gJHtpMThuT3B0aW9uYWxbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19IDwvc3Bhbj5gXG4gICAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItZm9ybS1maWVsZF9faW5wdXRcIj5cbiAgICAgICAgICAgICAgPHNsb3QgQHNsb3RjaGFuZ2U9JHt0aGlzLl9vblNsb3RJbnB1dENoYW5nZX0+PC9zbG90PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAke3RoaXMuaGFzVXBkYXRlZCAmJiBbJ3NlbGVjdCcsICdzYmItc2VsZWN0J10uaW5jbHVkZXModGhpcy5faW5wdXQ/LmxvY2FsTmFtZSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAgID8gaHRtbGA8c2JiLWljb25cbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJjaGV2cm9uLXNtYWxsLWRvd24tc21hbGxcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYmItZm9ybS1maWVsZF9fc2VsZWN0LWlucHV0LWljb25cIlxuICAgICAgICAgICAgICAgID48L3NiYi1pY29uPmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzbG90IG5hbWU9XCJzdWZmaXhcIiBAc2xvdGNoYW5nZT0ke3RoaXMuX3N5bmNOZWdhdGl2ZX0+PC9zbG90PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWZvcm0tZmllbGRfX2Vycm9yXCI+XG4gICAgICAgICAgPHNsb3QgbmFtZT1cImVycm9yXCIgQHNsb3RjaGFuZ2U9JHt0aGlzLl9vblNsb3RFcnJvckNoYW5nZX0+PC9zbG90PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1mb3JtLWZpZWxkJzogU2JiRm9ybUZpZWxkRWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIl9hIiwic3RhdGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNEJBLElBQUksU0FBUztBQUNiLElBQUksdUJBQXVCO0FBRTNCLE1BQU0sb0NBQW9CO0FBQzFCLE1BQU0sc0JBQXNCLENBQUMsU0FBUyxZQUFZLFFBQVE7SUFjcEQsdUJBQW1CLE1BQUE7O0FBRnhCLE1BQUEsbUJBQUEsQ0FBQSxjQUFjLGdCQUFnQixHQUM5QixXQUFXOzs7O29CQUNzQixpQkFDaEMseUJBQXlCLGtCQUFrQixVQUFVLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUQvQixFQUFBLG1CQUFRLFlBRWpDO0FBQUEsSUErRkMsY0FBQTs7O0FBaEVBO0FBS0E7QUFNNkI7QUFLN0I7QUFLNkI7QUFLN0I7QUFLQTtBQUdTO0FBR0E7QUFHQTtBQW5FUSxXQUFzQix5QkFBRyxDQUFDLFVBQVUsZUFBZSxjQUFjLFVBQVU7QUFFM0UsV0FBQSx1Q0FBdUM7QUFBQSxRQUN0RDtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEs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
|