@kirbydesign/designsystem 11.2.1 → 11.2.2
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/fesm2022/kirbydesign-designsystem-accordion.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-accordion.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-action-group.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-action-group.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-avatar.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-avatar.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-badge.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-badge.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-button.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-calendar.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-calendar.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-card.mjs +16 -16
- package/fesm2022/kirbydesign-designsystem-card.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-chart.mjs +22 -22
- package/fesm2022/kirbydesign-designsystem-chart.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-checkbox.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-checkbox.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-data-table.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-data-table.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-divider.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-divider.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-dropdown.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-dropdown.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-empty-state.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-empty-state.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-flag.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-flag.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-form-field.mjs +29 -31
- package/fesm2022/kirbydesign-designsystem-form-field.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-header.mjs +19 -19
- package/fesm2022/kirbydesign-designsystem-header.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-helpers.mjs +9 -9
- package/fesm2022/kirbydesign-designsystem-helpers.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-icon.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-icon.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-item-group.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-item-group.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-item-sliding.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-item-sliding.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-item.mjs +11 -11
- package/fesm2022/kirbydesign-designsystem-item.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-kirby-app.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-kirby-app.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-list.mjs +40 -40
- package/fesm2022/kirbydesign-designsystem-list.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs +6 -6
- package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-menu.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-menu.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-modal.mjs +42 -42
- package/fesm2022/kirbydesign-designsystem-modal.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-page.mjs +40 -40
- package/fesm2022/kirbydesign-designsystem-page.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-popover.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-popover.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-progress-circle.mjs +6 -6
- package/fesm2022/kirbydesign-designsystem-progress-circle.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-radio.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-radio.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-range.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-range.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-reorder-list.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-reorder-list.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-router-outlet.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-router-outlet.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-section-header.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-section-header.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared-floating.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-shared-floating.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared-portal.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-shared-portal.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared.mjs +18 -18
- package/fesm2022/kirbydesign-designsystem-shared.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-slide-button.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-slide-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-slide.mjs +13 -13
- package/fesm2022/kirbydesign-designsystem-slide.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-spinner.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-spinner.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-tabs.mjs +13 -13
- package/fesm2022/kirbydesign-designsystem-tabs.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-base.mjs +286 -286
- package/fesm2022/kirbydesign-designsystem-testing-base.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-jest.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-testing-jest.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-testing.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-toast.mjs +6 -6
- package/fesm2022/kirbydesign-designsystem-toast.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-toggle-button.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-toggle-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-toggle.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-toggle.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-types.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-types.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem.mjs +13 -13
- package/fesm2022/kirbydesign-designsystem.mjs.map +1 -1
- package/form-field/index.d.ts.map +1 -1
- package/package.json +19 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kirbydesign-designsystem-dropdown.mjs","sources":["../tmp-esm2022/dropdown/dropdown.types.js","../tmp-esm2022/dropdown/keyboard-handler.service.js","../tmp-esm2022/dropdown/dropdown.component.js","../tmp-esm2022/dropdown/dropdown.module.js","../tmp-esm2022/dropdown/kirbydesign-designsystem-dropdown.js"],"sourcesContent":["export var OpenState;\n(function (OpenState) {\n OpenState[OpenState[\"closed\"] = 0] = \"closed\";\n OpenState[OpenState[\"opening\"] = 1] = \"opening\";\n OpenState[OpenState[\"open\"] = 2] = \"open\";\n})(OpenState || (OpenState = {}));\nexport var VerticalDirection;\n(function (VerticalDirection) {\n VerticalDirection[VerticalDirection[\"up\"] = 0] = \"up\";\n VerticalDirection[VerticalDirection[\"down\"] = 1] = \"down\";\n})(VerticalDirection || (VerticalDirection = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24udHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9kcm9wZG93bi9zcmMvZHJvcGRvd24udHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksU0FJWDtBQUpELFdBQVksU0FBUztJQUNuQiw2Q0FBTSxDQUFBO0lBQ04sK0NBQU8sQ0FBQTtJQUNQLHlDQUFJLENBQUE7QUFDTixDQUFDLEVBSlcsU0FBUyxLQUFULFNBQVMsUUFJcEI7QUFFRCxNQUFNLENBQU4sSUFBWSxpQkFHWDtBQUhELFdBQVksaUJBQWlCO0lBQzNCLHFEQUFFLENBQUE7SUFDRix5REFBSSxDQUFBO0FBQ04sQ0FBQyxFQUhXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFHNUIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBPcGVuU3RhdGUge1xuICBjbG9zZWQsXG4gIG9wZW5pbmcsXG4gIG9wZW4sXG59XG5cbmV4cG9ydCBlbnVtIFZlcnRpY2FsRGlyZWN0aW9uIHtcbiAgdXAsXG4gIGRvd24sXG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class KeyboardHandlerService {\n handle(event, selectedIndex, maxIndex, cyclicIndex = false) {\n let newIndex = -1;\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowLeft':\n if (selectedIndex === 0 && cyclicIndex) {\n newIndex = maxIndex;\n }\n else {\n // Select previous item:\n newIndex = selectedIndex - 1;\n }\n break;\n case 'ArrowDown':\n case 'ArrowRight':\n if (selectedIndex === undefined || (selectedIndex === maxIndex && cyclicIndex)) {\n // None selected, select first item:\n newIndex = 0;\n }\n else if (selectedIndex < maxIndex) {\n // Select next item:\n newIndex = selectedIndex + 1;\n }\n break;\n case 'Home':\n // Select first item:\n newIndex = 0;\n break;\n case 'End':\n // Select last item:\n newIndex = maxIndex;\n break;\n default:\n break;\n }\n return newIndex;\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: KeyboardHandlerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: KeyboardHandlerService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: KeyboardHandlerService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQtaGFuZGxlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZHJvcGRvd24vc3JjL2tleWJvYXJkLWhhbmRsZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLE1BQU0sQ0FBQyxLQUFvQixFQUFFLGFBQXFCLEVBQUUsUUFBZ0IsRUFBRSxXQUFXLEdBQUcsS0FBSztRQUN2RixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsQixRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNsQixLQUFLLFNBQVMsQ0FBQztZQUNmLEtBQUssV0FBVztnQkFDZCxJQUFJLGFBQWEsS0FBSyxDQUFDLElBQUksV0FBVyxFQUFFLENBQUM7b0JBQ3ZDLFFBQVEsR0FBRyxRQUFRLENBQUM7Z0JBQ3RCLENBQUM7cUJBQU0sQ0FBQztvQkFDTix3QkFBd0I7b0JBQ3hCLFFBQVEsR0FBRyxhQUFhLEdBQUcsQ0FBQyxDQUFDO2dCQUMvQixDQUFDO2dCQUNELE1BQU07WUFDUixLQUFLLFdBQVcsQ0FBQztZQUNqQixLQUFLLFlBQVk7Z0JBQ2YsSUFBSSxhQUFhLEtBQUssU0FBUyxJQUFJLENBQUMsYUFBYSxLQUFLLFFBQVEsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDO29CQUMvRSxvQ0FBb0M7b0JBQ3BDLFFBQVEsR0FBRyxDQUFDLENBQUM7Z0JBQ2YsQ0FBQztxQkFBTSxJQUFJLGFBQWEsR0FBRyxRQUFRLEVBQUUsQ0FBQztvQkFDcEMsb0JBQW9CO29CQUNwQixRQUFRLEdBQUcsYUFBYSxHQUFHLENBQUMsQ0FBQztnQkFDL0IsQ0FBQztnQkFDRCxNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULHFCQUFxQjtnQkFDckIsUUFBUSxHQUFHLENBQUMsQ0FBQztnQkFDYixNQUFNO1lBQ1IsS0FBSyxLQUFLO2dCQUNSLG9CQUFvQjtnQkFDcEIsUUFBUSxHQUFHLFFBQVEsQ0FBQztnQkFDcEIsTUFBTTtZQUNSO2dCQUNFLE1BQU07UUFDVixDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztpSUFuQ1Usc0JBQXNCO3FJQUF0QixzQkFBc0IsY0FGckIsTUFBTTs7MkZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEtleWJvYXJkSGFuZGxlclNlcnZpY2Uge1xuICBoYW5kbGUoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHNlbGVjdGVkSW5kZXg6IG51bWJlciwgbWF4SW5kZXg6IG51bWJlciwgY3ljbGljSW5kZXggPSBmYWxzZSkge1xuICAgIGxldCBuZXdJbmRleCA9IC0xO1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIGlmIChzZWxlY3RlZEluZGV4ID09PSAwICYmIGN5Y2xpY0luZGV4KSB7XG4gICAgICAgICAgbmV3SW5kZXggPSBtYXhJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTZWxlY3QgcHJldmlvdXMgaXRlbTpcbiAgICAgICAgICBuZXdJbmRleCA9IHNlbGVjdGVkSW5kZXggLSAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA9PT0gdW5kZWZpbmVkIHx8IChzZWxlY3RlZEluZGV4ID09PSBtYXhJbmRleCAmJiBjeWNsaWNJbmRleCkpIHtcbiAgICAgICAgICAvLyBOb25lIHNlbGVjdGVkLCBzZWxlY3QgZmlyc3QgaXRlbTpcbiAgICAgICAgICBuZXdJbmRleCA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRJbmRleCA8IG1heEluZGV4KSB7XG4gICAgICAgICAgLy8gU2VsZWN0IG5leHQgaXRlbTpcbiAgICAgICAgICBuZXdJbmRleCA9IHNlbGVjdGVkSW5kZXggKyAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICAgIC8vIFNlbGVjdCBmaXJzdCBpdGVtOlxuICAgICAgICBuZXdJbmRleCA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRW5kJzpcbiAgICAgICAgLy8gU2VsZWN0IGxhc3QgaXRlbTpcbiAgICAgICAgbmV3SW5kZXggPSBtYXhJbmRleDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG5ld0luZGV4O1xuICB9XG59XG4iXX0=","import { Component, ContentChild, ContentChildren, ElementRef, EventEmitter, forwardRef, HostBinding, HostListener, Input, Output, RendererStyleFlags2, TemplateRef, ViewChild, ViewChildren, } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CardComponent } from '@kirbydesign/designsystem/card';\nimport { DesignTokenHelper, StringSearchHelper, UniqueIdGenerator, } from '@kirbydesign/designsystem/helpers';\nimport { ItemComponent } from '@kirbydesign/designsystem/item';\nimport { ListItemTemplateDirective } from '@kirbydesign/designsystem/list';\nimport { HorizontalDirection, PopoverComponent } from '@kirbydesign/designsystem/popover';\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\nimport { forwardAttributes } from '@kirbydesign/designsystem/shared';\nimport { OpenState, VerticalDirection } from './dropdown.types';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./keyboard-handler.service\";\nimport * as i2 from \"@kirbydesign/designsystem/shared\";\nimport * as i3 from \"@kirbydesign/designsystem/card\";\nimport * as i4 from \"@kirbydesign/designsystem/icon\";\nimport * as i5 from \"@kirbydesign/designsystem/item\";\nimport * as i6 from \"@kirbydesign/designsystem/popover\";\nimport * as i7 from \"@kirbydesign/designsystem/button\";\nimport * as i8 from \"@angular/common\";\nexport class DropdownComponent {\n static { this.OPEN_DELAY_IN_MS = 100; }\n get items() {\n return this._items;\n }\n set items(value) {\n this._items = value;\n this._value = this.items[this.selectedIndex] || null;\n }\n get selectedIndex() {\n return this._selectedIndex;\n }\n set selectedIndex(value) {\n if (value !== undefined && this._selectedIndex != value) {\n this._selectedIndex = value;\n this.focusedIndex = this._selectedIndex;\n this._value = this.items[this.selectedIndex] || null;\n }\n }\n get focusedIndex() {\n return this._focusedIndex;\n }\n set focusedIndex(value) {\n if (this._focusedIndex !== value) {\n this._focusedIndex = value;\n this.scrollItemIntoView(this._focusedIndex);\n }\n }\n set popout(direction) {\n this.horizontalDirection = direction || HorizontalDirection.right;\n }\n get popout() {\n return this.horizontalDirection;\n }\n get _isDisabled() {\n return this.disabled ? 'disabled' : null;\n }\n get _tabindex() {\n return this.disabled ? -1 : this.tabindex;\n }\n // Prevent Ionic blur on scroll\n get _noBlurOnScroll() {\n return true;\n }\n get value() {\n return this._value;\n }\n get selectedText() {\n return this.getTextFromItem(this.value);\n }\n get _isBlockLevel() {\n return this.expand === 'block';\n }\n get _isOpening() {\n return this.state === OpenState.opening;\n }\n get isOpen() {\n return this.state === OpenState.open;\n }\n get _popoutLeft() {\n return this.horizontalDirection === HorizontalDirection.left;\n }\n get _popoutUp() {\n return this.verticalDirection === VerticalDirection.up;\n }\n forwardAriaLabelToDropdownButton() {\n forwardAttributes(this.elementRef.nativeElement, this._attributesToForward, this.renderer, this.buttonElement.nativeElement);\n }\n set kirbyItemsSlotted(kirbyItems) {\n const hasSlottedItems = this.disposeItemClickListeners?.length > 0;\n if (hasSlottedItems) {\n this.unlistenAllSlottedItems();\n }\n // Setup a click listener for each new slotted items\n kirbyItems.forEach((kirbyItem, index) => {\n this.renderer.setAttribute(kirbyItem.nativeElement, 'role', 'option');\n const disposeClickListener = this.renderer.listen(kirbyItem.nativeElement, 'click', () => {\n this.onItemSelect(index);\n });\n this.disposeItemClickListeners.push(disposeClickListener);\n });\n this._kirbyItemsSlotted = kirbyItems;\n }\n get kirbyItemsSlotted() {\n return this._kirbyItemsSlotted;\n }\n constructor(renderer, elementRef, changeDetectorRef, keyboardHandlerService, resizeObserverService) {\n this.renderer = renderer;\n this.elementRef = elementRef;\n this.changeDetectorRef = changeDetectorRef;\n this.keyboardHandlerService = keyboardHandlerService;\n this.resizeObserverService = resizeObserverService;\n this.state = OpenState.closed;\n this.horizontalDirection = HorizontalDirection.right;\n this.verticalDirection = VerticalDirection.down;\n this._attributesToForward = ['aria-label', 'aria-labelledby'];\n this._listboxId = UniqueIdGenerator.scopedTo('kirby-dropdown').next();\n this._comboboxId = UniqueIdGenerator.scopedTo('kirby-button').next();\n this._items = [];\n this._selectedIndex = -1;\n // _focusedIndex keeps track of which element has focus and will be selected\n // if it is activated (by pressing ENTER or SPACE key)\n this._focusedIndex = 0;\n this.itemTextProperty = 'text';\n this.placeholder = 'Please select:';\n this.attentionLevel = '3';\n this.disabled = false;\n this.size = 'md';\n this.tabindex = 0;\n this.usePopover = false;\n /**\n * Emitted when an item is selected (tap on mobile, click/keypress on web)\n */\n this.change = new EventEmitter();\n this._value = null;\n /* The 'clicked' class is applied through Hostbinding to prevent the dropdown from getting a focus ring on click.\n There is a bug that causes the dropdown to get a focus ring on click, if it is the first element that is interacted with\n after the page is loaded. If the user interacts with any other element before, then the dropdown won't get a focus ring.\n See issue: https://github.com/kirbydesign/designsystem/issues/2477.\n \n This solution can potentially be refactored, when popover is not experimental anymore. Then it could be possible\n to close the dropdown when the popover backdrop is clicked, instead of relying on the blur event, which is utilized\n by this line below: this.elementRef.nativeElement.focus(). Right now this forces the blur event to be triggered, when\n clicking outside of the dropdown.\n */\n this.clicked = false;\n this.disposeItemClickListeners = [];\n this.searchBuffer = '';\n this.SEARCH_BUFFER_DELAY = 500; // ms\n this._onChange = () => { };\n this._onTouched = () => { };\n }\n onToggle(event) {\n event.stopPropagation();\n this.clicked = true;\n this.toggle();\n }\n toggle() {\n if (this.disabled) {\n return;\n }\n this.isOpen ? this.close() : this.open();\n }\n /* Utility that makes it easier to set styles on card element\n when using popover*/\n setPopoverCardStyle(style, value) {\n if (!this.usePopover)\n return;\n this.renderer.setStyle(this.cardElement.nativeElement, style, value, RendererStyleFlags2.DashCase);\n }\n ngAfterViewInit() {\n if (this.usePopover && this.expand === 'block') {\n const { width: initialWidth } = this.elementRef.nativeElement.getBoundingClientRect();\n this.setPopoverCardStyle('max-width', 'initial');\n this.setPopoverCardStyle('min-width', 'initial');\n // Ensure initial width is set even if the resize observer callback also fires initially:\n this.setPopoverCardStyle('--kirby-card-width', `${initialWidth}px`);\n this.resizeObserverService.observe(this.elementRef, (entry) => {\n const newWidth = entry.contentRect.width;\n if (newWidth > 0) {\n this.setPopoverCardStyle('--kirby-card-width', `${newWidth}px`);\n }\n });\n }\n this.forwardAriaLabelToDropdownButton();\n this.initializeAlignment();\n }\n initializeAlignment() {\n if (this.usePopover)\n return;\n if (!this.intersectionObserverRef) {\n // Get the design token size of the button. In the button stylesheet a medium button height is utils.size(xl)\n // and a small button height is utils.size(\"l\")\n const designTokenSizeHeight = this.size === 'md' ? 'xl' : 'l';\n // Setting the rootMargin equal to the height of the button\n // allows the Intersection Observer Callback to be called\n // even if the dropdown button is intersecting with the viewport\n const options = {\n rootMargin: DesignTokenHelper.size(designTokenSizeHeight),\n };\n const callback = (entries) => {\n // Only apply alignment when opening:\n if (this.state !== OpenState.opening) {\n return;\n }\n // Cancel any pending timer to show dropdown:\n clearTimeout(this.showDropdownTimeoutId);\n const entry = entries[0];\n const isVisible = entry.boundingClientRect.width > 0;\n if (isVisible && entry.intersectionRatio < 1) {\n this.setHorizontalDirection(entry);\n this.setVerticalDirection(entry);\n }\n this.showDropdown();\n this.changeDetectorRef.detectChanges();\n };\n this.intersectionObserverRef = new IntersectionObserver(callback, options);\n this.intersectionObserverRef.observe(this.cardElement.nativeElement);\n }\n }\n setHorizontalDirection(entry) {\n // If popout direction is set to right, and the entry is cut off to the right by ${entry.boundingClientRect.right - entry.intersectionRect.right}px\n // it is set to popout left instead, and vice versa for popout direction left\n if (this.horizontalDirection === HorizontalDirection.right) {\n if (entry.boundingClientRect.right > entry.rootBounds.right) {\n this.horizontalDirection = HorizontalDirection.left;\n }\n }\n else {\n if (entry.boundingClientRect.left < entry.rootBounds.left) {\n this.horizontalDirection = HorizontalDirection.right;\n }\n }\n }\n setVerticalDirection(entry) {\n if (entry.boundingClientRect.top < 0) {\n // entry is cut off at the top by ${entry.boundingClientRect.top}px\n // open downwards:\n this.verticalDirection = VerticalDirection.down;\n }\n if (entry.boundingClientRect.bottom > entry.rootBounds.bottom) {\n // entry is cut off at the bottom by ${entry.boundingClientRect.bottom - entry.intersectionRect.bottom}px\n const containerOffsetTop = this.elementRef.nativeElement.getBoundingClientRect().top;\n const SPACING = 5; //TODO: Get from SCSS\n // Check if the card can fit on top of button:\n if (containerOffsetTop > entry.target.clientHeight + SPACING) {\n // open upwards:\n this.verticalDirection = VerticalDirection.up;\n }\n }\n }\n open() {\n if (this.disabled) {\n return;\n }\n if (!this.isOpen) {\n this.state = OpenState.opening;\n // ensures that the dropdown is opened in case the IntersectionObserverCallback isn't invoked\n this.showDropdownTimeoutId = setTimeout(() => this.showDropdown(), DropdownComponent.OPEN_DELAY_IN_MS);\n // Move focus to selected item (if any) or first item\n this.focusedIndex = this.selectedIndex > -1 ? this.selectedIndex : 0;\n }\n }\n showDropdown() {\n if (this.state === OpenState.opening) {\n this.state = OpenState.open;\n this.popover?.show();\n this.scrollItemIntoView(this.focusedIndex);\n this.changeDetectorRef.markForCheck();\n }\n }\n close() {\n if (this.disabled) {\n return;\n }\n if (this.isOpen) {\n this.state = OpenState.closed;\n // Reset vertical direction to default\n this.verticalDirection = VerticalDirection.down;\n this.popover?.hide();\n }\n }\n onItemSelect(index) {\n this.selectItem(index);\n this.close();\n }\n /**\n * Sets the select's value. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param value New value to be written to the model.\n */\n writeValue(value) {\n this._selectItemByValue(value);\n }\n /**\n * Saves a callback function to be invoked when the select's value\n * changes from user input. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the value changes.\n */\n registerOnChange(fn) {\n this._onChange = fn;\n }\n /**\n * Saves a callback function to be invoked when the select is blurred\n * by the user. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the component has been touched.\n */\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n /**\n * Disables the select. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param isDisabled Sets whether the component is disabled.\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n selectItem(index) {\n if (index != this.selectedIndex) {\n this.selectedIndex = index;\n this.focusedIndex = index;\n this.change.emit(this.value);\n this._onChange(this.value);\n }\n }\n _selectItemByValue(value) {\n this.selectedIndex = this.items.indexOf(value);\n }\n getTextFromItem(item) {\n if (!item) {\n return null;\n }\n return typeof item === 'string' ? item : item[this.itemTextProperty];\n }\n scrollItemIntoView(index) {\n const kirbyItems = this.kirbyItemsSlotted && this.kirbyItemsSlotted.length\n ? this.kirbyItemsSlotted\n : this.kirbyItemsDefault;\n if (kirbyItems && kirbyItems.length) {\n const selectedKirbyItem = kirbyItems.toArray()[index];\n if (selectedKirbyItem && selectedKirbyItem.nativeElement) {\n const itemElement = selectedKirbyItem.nativeElement;\n itemElement.scrollIntoView({ block: 'nearest' });\n }\n }\n }\n _onTab() {\n if (this.isOpen) {\n this.selectItem(this.focusedIndex);\n this.close();\n }\n if (this.clicked) {\n // Remove the 'clicked' class (Hostbinding) if the user has previously opened the dropdown by clicking,\n // since the class prevents the focus ring from showing,\n // which is expected to happen, when using the tab key\n this.clicked = false;\n }\n }\n preventDefaultAndStopImmediatePropagation(event) {\n event.stopImmediatePropagation();\n event.preventDefault();\n }\n addToSearchBuffer(char) {\n clearTimeout(this.searchBufferTimeout);\n this.searchBuffer += char;\n this.searchBufferTimeout = setTimeout(() => {\n this.resetSearchBuffer();\n }, this.SEARCH_BUFFER_DELAY);\n }\n resetSearchBuffer() {\n this.searchBuffer = '';\n }\n _onKeydown(event) {\n const key = event.key;\n if (this.items.length === 0) {\n console.warn('[Kirby] No items found within dropdown');\n return;\n }\n if (this.disabled)\n return;\n if (StringSearchHelper.isPrintableCharacter(key)) {\n this.handlePrintableCharacterKey(event, this.isOpen);\n }\n // ALT + ArrowDown: Open dropdown\n if (key === 'ArrowDown' && event.altKey) {\n this.preventDefaultAndStopImmediatePropagation(event);\n if (!this.isOpen) {\n this.open();\n this.focusedIndex = this.selectedIndex > -1 ? this.selectedIndex : 0;\n }\n return;\n }\n // ALT + ArrowUp: Select focused item and close dropdown\n if (key === 'ArrowUp' && event.altKey) {\n this.preventDefaultAndStopImmediatePropagation(event);\n if (this.focusedIndex > -1) {\n this.selectItem(this.focusedIndex);\n this.close();\n }\n }\n // PageUp: Jump up 10 options or to first\n if (key === 'PageUp') {\n this.preventDefaultAndStopImmediatePropagation(event);\n if (!this.isOpen) {\n this.open();\n }\n this.focusedIndex = Math.max(0, this.focusedIndex - 10);\n return;\n }\n // PageDown: Jump down 10 options or to last\n if (key === 'PageDown') {\n this.preventDefaultAndStopImmediatePropagation(event);\n if (!this.isOpen) {\n this.open();\n }\n this.focusedIndex = Math.min(this.items.length - 1, this.focusedIndex + 10);\n return;\n }\n }\n handlePrintableCharacterKey(event, isOpen) {\n const key = event.key;\n if (isOpen) {\n this.preventDefaultAndStopImmediatePropagation(event);\n }\n else {\n this.open();\n }\n // If the same character is typed twice, the search buffer should only contain that character once\n if (this.searchBuffer.length === 1 &&\n this.searchBuffer[0].toLowerCase() === key.toLowerCase()) {\n this.searchBuffer = key;\n }\n else {\n this.addToSearchBuffer(key);\n }\n const isMultiCharSearch = this.searchBuffer.length > 1;\n let startIndex = 0;\n if (!isMultiCharSearch && this.isOpen) {\n startIndex = this.focusedIndex + 1;\n }\n let foundItemIndex = this.getIndexOfItemByFirstCharacter(this.searchBuffer, startIndex);\n if (foundItemIndex === -1 && isMultiCharSearch) {\n foundItemIndex = this.getIndexOfItemByFirstCharacter(key, startIndex);\n }\n if (foundItemIndex === -1 && !isMultiCharSearch && this.isOpen) {\n foundItemIndex = this.getIndexOfItemByFirstCharacter(this.searchBuffer, 0);\n }\n if (foundItemIndex > -1) {\n this.focusedIndex = foundItemIndex;\n }\n }\n getIndexOfItemByFirstCharacter(char, startIndex = 0) {\n let itemTexts;\n // Prefer slotted/projected items if present\n if (this.kirbyItemsSlotted && this.kirbyItemsSlotted.length) {\n itemTexts = this.kirbyItemsSlotted\n .toArray()\n .map((ref) => ref.nativeElement.textContent?.trim() ?? '');\n }\n else {\n itemTexts = this.items.map((item) => this.getTextFromItem(item) ?? '');\n }\n return StringSearchHelper.getIndexByFirstMatchingStartString(char, itemTexts, startIndex);\n }\n _onMouseDown(event) {\n if (this.disabled) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }\n _onTouchStart(event) {\n if (this.isOpen) {\n event.stopPropagation();\n }\n }\n _onFocus() {\n if (this.disabled) {\n this.elementRef.nativeElement.blur();\n }\n }\n _onPopoverWillHide() {\n this.state = OpenState.closed;\n this.elementRef.nativeElement.focus();\n }\n _onEnterOrEscape() {\n this.close();\n this._onTouched();\n }\n _onPopoverClick() {\n this.close();\n }\n _onBlur() {\n if (this.usePopover)\n return;\n this.close();\n this._onTouched();\n }\n _onEnterOrSpace(event) {\n event.preventDefault();\n event.stopPropagation();\n if (this.isOpen) {\n this.selectItem(this.focusedIndex);\n }\n this.toggle();\n }\n _onArrowKeys(event) {\n if (this.disabled)\n return false;\n // Mirror default HTML5 select behaviour - prevent left/right arrows when open:\n if (this.isOpen && (event.key === 'ArrowLeft' || event.key === 'ArrowRight')) {\n return false;\n }\n if (!this.isOpen) {\n // Avoid page scroll\n event.preventDefault();\n this.open();\n // If no selected item then focus first or last item\n if (!event.altKey && this.selectedIndex < 0) {\n switch (event.key) {\n case 'ArrowUp':\n this.focusedIndex = 0;\n break;\n case 'ArrowDown':\n this.focusedIndex = this.items.length - 1;\n break;\n default:\n break;\n }\n }\n return false;\n }\n const newFocusedIndex = this.keyboardHandlerService.handle(event, this.focusedIndex, this.items.length - 1);\n if (newFocusedIndex > -1) {\n this.focusedIndex = newFocusedIndex;\n }\n return false;\n }\n _onHomeEndKeys(event) {\n if (this.disabled)\n return;\n if (!this.isOpen) {\n event.preventDefault();\n this.open();\n }\n const newFocusedIndex = this.keyboardHandlerService.handle(event, this.focusedIndex, this.items.length - 1);\n if (newFocusedIndex > -1) {\n this.focusedIndex = newFocusedIndex;\n }\n return false;\n }\n unlistenAllSlottedItems() {\n let disposeClickListener;\n while ((disposeClickListener = this.disposeItemClickListeners.pop()) !== undefined) {\n disposeClickListener();\n }\n }\n ngOnDestroy() {\n this.unlistenAllSlottedItems();\n this.resizeObserverService.unobserve(this.elementRef);\n if (this.intersectionObserverRef) {\n this.intersectionObserverRef.disconnect();\n }\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: DropdownComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.KeyboardHandlerService }, { token: i2.ResizeObserverService }], target: i0.ɵɵFactoryTarget.Component }); }\n /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.1\", type: DropdownComponent, isStandalone: false, selector: \"kirby-dropdown\", inputs: { items: \"items\", selectedIndex: \"selectedIndex\", focusedIndex: \"focusedIndex\", itemTextProperty: \"itemTextProperty\", placeholder: \"placeholder\", popout: \"popout\", attentionLevel: \"attentionLevel\", expand: \"expand\", disabled: \"disabled\", hasError: \"hasError\", size: \"size\", tabindex: \"tabindex\", usePopover: \"usePopover\" }, outputs: { change: \"change\" }, host: { listeners: { \"keydown.tab\": \"_onTab()\", \"keydown\": \"_onKeydown($event)\", \"mousedown\": \"_onMouseDown($event)\", \"touchstart\": \"_onTouchStart($event)\", \"focus\": \"_onFocus()\", \"keydown.enter\": \"_onEnterOrSpace($event)\", \"keydown.escape\": \"_onEnterOrEscape()\", \"blur\": \"_onBlur($event)\", \"keydown.space\": \"_onEnterOrSpace($event)\", \"keydown.arrowup\": \"_onArrowKeys($event)\", \"keydown.arrowdown\": \"_onArrowKeys($event)\", \"keydown.arrowleft\": \"_onArrowKeys($event)\", \"keydown.arrowright\": \"_onArrowKeys($event)\", \"keydown.home\": \"_onHomeEndKeys($event)\", \"keydown.end\": \"_onHomeEndKeys($event)\" }, properties: { \"attr.disabled\": \"this._isDisabled\", \"class.error\": \"this.hasError\", \"class.with-popover\": \"this.usePopover\", \"attr.no-blur\": \"this._noBlurOnScroll\", \"class.expand\": \"this._isBlockLevel\", \"class.is-opening\": \"this._isOpening\", \"class.is-open\": \"this.isOpen\", \"class.popout-left\": \"this._popoutLeft\", \"class.popout-up\": \"this._popoutUp\", \"class.clicked\": \"this.clicked\" } }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((() => DropdownComponent)),\n multi: true,\n },\n ], queries: [{ propertyName: \"itemTemplate\", first: true, predicate: ListItemTemplateDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: \"slottedItems\", predicate: ListItemTemplateDirective, read: ElementRef }, { propertyName: \"kirbyItemsSlotted\", predicate: ItemComponent, read: ElementRef }], viewQueries: [{ propertyName: \"cardElement\", first: true, predicate: CardComponent, descendants: true, read: ElementRef }, { propertyName: \"popover\", first: true, predicate: PopoverComponent, descendants: true }, { propertyName: \"buttonElement\", first: true, predicate: ButtonComponent, descendants: true, read: ElementRef, static: true }, { propertyName: \"kirbyItemsDefault\", predicate: ItemComponent, descendants: true, read: ElementRef }], ngImport: i0, template: \"<button\\n kirby-button\\n type=\\\"button\\\"\\n [attr.id]=\\\"_comboboxId\\\"\\n role=\\\"combobox\\\"\\n aria-haspopup=\\\"listbox\\\"\\n [attr.aria-controls]=\\\"_listboxId\\\"\\n [attr.aria-expanded]=\\\"isOpen\\\"\\n [attr.aria-activedescendant]=\\\"_listboxId + '-item-' + focusedIndex\\\"\\n [size]=\\\"size\\\"\\n [attentionLevel]=\\\"attentionLevel\\\"\\n (click)=\\\"onToggle($event)\\\"\\n [disabled]=\\\"disabled\\\"\\n>\\n <span class=\\\"text\\\">{{ selectedText || placeholder }}</span>\\n <kirby-icon [name]=\\\"isOpen ? 'arrow-up' : 'arrow-down'\\\"></kirby-icon>\\n</button>\\n\\n<ng-container *ngTemplateOutlet=\\\"usePopover ? popoverTemplate : itemWrapperTemplate\\\"></ng-container>\\n\\n<ng-template #popoverTemplate>\\n <kirby-popover\\n [target]=\\\"buttonElement\\\"\\n [popout]=\\\"popout\\\"\\n (click)=\\\"_onPopoverClick()\\\"\\n (willHide)=\\\"_onPopoverWillHide()\\\"\\n >\\n <ng-container *ngTemplateOutlet=\\\"itemWrapperTemplate\\\"></ng-container>\\n </kirby-popover>\\n</ng-template>\\n\\n<ng-template #itemWrapperTemplate>\\n <kirby-card role=\\\"listbox\\\" [attr.id]=\\\"_listboxId\\\" [attr.aria-labelledby]=\\\"_comboboxId\\\">\\n @for (item of items; track item; let i = $index) {\\n <ng-container\\n *ngTemplateOutlet=\\\"\\n itemTemplate || defaultItemTemplate;\\n context: {\\n $implicit: item,\\n selected: i === selectedIndex,\\n focused: i === focusedIndex,\\n index: i,\\n }\\n \\\"\\n ></ng-container>\\n }\\n </kirby-card>\\n</ng-template>\\n\\n<ng-template\\n #defaultItemTemplate\\n let-item\\n let-selected=\\\"selected\\\"\\n let-index=\\\"index\\\"\\n let-focused=\\\"focused\\\"\\n>\\n <kirby-item\\n [selectable]=\\\"true\\\"\\n [selected]=\\\"selected\\\"\\n (click)=\\\"onItemSelect(index)\\\"\\n [class.focused]=\\\"focused\\\"\\n role=\\\"option\\\"\\n [attr.id]=\\\"_listboxId + '-item-' + index\\\"\\n [attr.aria-selected]=\\\"selected\\\"\\n >\\n <!-- Tabindex fixes issue with popover dropdown not working in safari -->\\n <p class=\\\"kirby-item-title\\\">{{ getTextFromItem(item) }}</p>\\n @if (selected) {\\n <kirby-icon name=\\\"checkmark-selected\\\" slot=\\\"end\\\"></kirby-icon>\\n }\\n </kirby-item>\\n</ng-template>\\n\", styles: [\"@media (hover: hover) and (pointer: fine){:host{outline:none;border-radius:999px}:host:focus{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}:host:focus:not(:focus-visible){box-shadow:0 0 0 0 transparent}:host:focus-visible{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}}:host{display:inline-block;position:relative;max-width:calc(100vw - 32px)}:host.clicked{box-shadow:none}:host.expand{display:block}:host.expand kirby-card{width:100%;min-width:initial;max-width:initial}:host.error>button,:host.ng-touched.ng-invalid>button{border-color:var(--kirby-danger)}:host>button{position:relative;margin:0;outline:none;width:100%;min-width:0}:host>button.attention-level2{border:1px solid transparent}:host>button .text{overflow:hidden;text-overflow:ellipsis}:host kirby-card{display:none;opacity:0;position:absolute;z-index:800}:host.is-opening kirby-card{display:block}:host.is-open kirby-card{display:block;opacity:1}:host.is-open>button{box-shadow:0 0 5px #1c1c1c0a,0 10px 15px -10px #1c1c1c26}:host.popout-left kirby-card{right:0}:host.popout-up kirby-card{top:0;margin-top:-4px;transform:translateY(-100%)}:host.popout-up.is-open>button{z-index:801}kirby-popover{--max-height: 352px}kirby-card{max-height:352px;margin-block:4px;overflow-y:auto;box-shadow:0 0 5px #1c1c1c0a,0 10px 15px -10px #1c1c1c26;max-width:calc(100vw - 32px);min-width:288px}@media (min-width: 321px){kirby-card{min-width:343px}}@media (hover: hover){:host-context(kirby-calendar)>button:hover{--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black);cursor:pointer}}:host-context(kirby-calendar)>button:active,:host-context(kirby-calendar)>button.interaction-state-active{--state-layer-opacity: .16;--state-layer-background-color: var(--kirby-black)}:host-context(kirby-calendar)>button{border-color:transparent;font-weight:700;font-size:initial}:host-context(kirby-calendar).is-open>button{box-shadow:none}\\n\"], dependencies: [{ kind: \"component\", type: i3.CardComponent, selector: \"kirby-card\", inputs: [\"title\", \"subtitle\", \"backgroundImageUrl\", \"hasPadding\", \"sizes\", \"variant\"] }, { kind: \"component\", type: i4.IconComponent, selector: \"kirby-icon\", inputs: [\"size\", \"name\"] }, { kind: \"component\", type: i5.ItemComponent, selector: \"kirby-item\", inputs: [\"disabled\", \"selected\", \"disclosure\", \"selectable\", \"reorderable\", \"size\", \"href\", \"rotateIcon\"] }, { kind: \"component\", type: i6.PopoverComponent, selector: \"kirby-popover\", inputs: [\"popout\", \"target\"], outputs: [\"willHide\"] }, { kind: \"component\", type: i7.ButtonComponent, selector: \"button[kirby-button],Button[kirby-button],a[kirby-button]\", inputs: [\"attentionLevel\", \"noDecoration\", \"themeColor\", \"expand\", \"isFloating\", \"size\", \"showIconOnly\"] }, { kind: \"directive\", type: i8.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: DropdownComponent, decorators: [{\n type: Component,\n args: [{ selector: 'kirby-dropdown', providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((() => DropdownComponent)),\n multi: true,\n },\n ], standalone: false, template: \"<button\\n kirby-button\\n type=\\\"button\\\"\\n [attr.id]=\\\"_comboboxId\\\"\\n role=\\\"combobox\\\"\\n aria-haspopup=\\\"listbox\\\"\\n [attr.aria-controls]=\\\"_listboxId\\\"\\n [attr.aria-expanded]=\\\"isOpen\\\"\\n [attr.aria-activedescendant]=\\\"_listboxId + '-item-' + focusedIndex\\\"\\n [size]=\\\"size\\\"\\n [attentionLevel]=\\\"attentionLevel\\\"\\n (click)=\\\"onToggle($event)\\\"\\n [disabled]=\\\"disabled\\\"\\n>\\n <span class=\\\"text\\\">{{ selectedText || placeholder }}</span>\\n <kirby-icon [name]=\\\"isOpen ? 'arrow-up' : 'arrow-down'\\\"></kirby-icon>\\n</button>\\n\\n<ng-container *ngTemplateOutlet=\\\"usePopover ? popoverTemplate : itemWrapperTemplate\\\"></ng-container>\\n\\n<ng-template #popoverTemplate>\\n <kirby-popover\\n [target]=\\\"buttonElement\\\"\\n [popout]=\\\"popout\\\"\\n (click)=\\\"_onPopoverClick()\\\"\\n (willHide)=\\\"_onPopoverWillHide()\\\"\\n >\\n <ng-container *ngTemplateOutlet=\\\"itemWrapperTemplate\\\"></ng-container>\\n </kirby-popover>\\n</ng-template>\\n\\n<ng-template #itemWrapperTemplate>\\n <kirby-card role=\\\"listbox\\\" [attr.id]=\\\"_listboxId\\\" [attr.aria-labelledby]=\\\"_comboboxId\\\">\\n @for (item of items; track item; let i = $index) {\\n <ng-container\\n *ngTemplateOutlet=\\\"\\n itemTemplate || defaultItemTemplate;\\n context: {\\n $implicit: item,\\n selected: i === selectedIndex,\\n focused: i === focusedIndex,\\n index: i,\\n }\\n \\\"\\n ></ng-container>\\n }\\n </kirby-card>\\n</ng-template>\\n\\n<ng-template\\n #defaultItemTemplate\\n let-item\\n let-selected=\\\"selected\\\"\\n let-index=\\\"index\\\"\\n let-focused=\\\"focused\\\"\\n>\\n <kirby-item\\n [selectable]=\\\"true\\\"\\n [selected]=\\\"selected\\\"\\n (click)=\\\"onItemSelect(index)\\\"\\n [class.focused]=\\\"focused\\\"\\n role=\\\"option\\\"\\n [attr.id]=\\\"_listboxId + '-item-' + index\\\"\\n [attr.aria-selected]=\\\"selected\\\"\\n >\\n <!-- Tabindex fixes issue with popover dropdown not working in safari -->\\n <p class=\\\"kirby-item-title\\\">{{ getTextFromItem(item) }}</p>\\n @if (selected) {\\n <kirby-icon name=\\\"checkmark-selected\\\" slot=\\\"end\\\"></kirby-icon>\\n }\\n </kirby-item>\\n</ng-template>\\n\", styles: [\"@media (hover: hover) and (pointer: fine){:host{outline:none;border-radius:999px}:host:focus{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}:host:focus:not(:focus-visible){box-shadow:0 0 0 0 transparent}:host:focus-visible{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}}:host{display:inline-block;position:relative;max-width:calc(100vw - 32px)}:host.clicked{box-shadow:none}:host.expand{display:block}:host.expand kirby-card{width:100%;min-width:initial;max-width:initial}:host.error>button,:host.ng-touched.ng-invalid>button{border-color:var(--kirby-danger)}:host>button{position:relative;margin:0;outline:none;width:100%;min-width:0}:host>button.attention-level2{border:1px solid transparent}:host>button .text{overflow:hidden;text-overflow:ellipsis}:host kirby-card{display:none;opacity:0;position:absolute;z-index:800}:host.is-opening kirby-card{display:block}:host.is-open kirby-card{display:block;opacity:1}:host.is-open>button{box-shadow:0 0 5px #1c1c1c0a,0 10px 15px -10px #1c1c1c26}:host.popout-left kirby-card{right:0}:host.popout-up kirby-card{top:0;margin-top:-4px;transform:translateY(-100%)}:host.popout-up.is-open>button{z-index:801}kirby-popover{--max-height: 352px}kirby-card{max-height:352px;margin-block:4px;overflow-y:auto;box-shadow:0 0 5px #1c1c1c0a,0 10px 15px -10px #1c1c1c26;max-width:calc(100vw - 32px);min-width:288px}@media (min-width: 321px){kirby-card{min-width:343px}}@media (hover: hover){:host-context(kirby-calendar)>button:hover{--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black);cursor:pointer}}:host-context(kirby-calendar)>button:active,:host-context(kirby-calendar)>button.interaction-state-active{--state-layer-opacity: .16;--state-layer-background-color: var(--kirby-black)}:host-context(kirby-calendar)>button{border-color:transparent;font-weight:700;font-size:initial}:host-context(kirby-calendar).is-open>button{box-shadow:none}\\n\"] }]\n }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.KeyboardHandlerService }, { type: i2.ResizeObserverService }], propDecorators: { items: [{\n type: Input\n }], selectedIndex: [{\n type: Input\n }], focusedIndex: [{\n type: Input\n }], itemTextProperty: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], popout: [{\n type: Input\n }], attentionLevel: [{\n type: Input\n }], expand: [{\n type: Input\n }], disabled: [{\n type: Input\n }], _isDisabled: [{\n type: HostBinding,\n args: ['attr.disabled']\n }], hasError: [{\n type: HostBinding,\n args: ['class.error']\n }, {\n type: Input\n }], size: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], usePopover: [{\n type: HostBinding,\n args: ['class.with-popover']\n }, {\n type: Input\n }], _noBlurOnScroll: [{\n type: HostBinding,\n args: ['attr.no-blur']\n }], change: [{\n type: Output\n }], _isBlockLevel: [{\n type: HostBinding,\n args: ['class.expand']\n }], _isOpening: [{\n type: HostBinding,\n args: ['class.is-opening']\n }], isOpen: [{\n type: HostBinding,\n args: ['class.is-open']\n }], _popoutLeft: [{\n type: HostBinding,\n args: ['class.popout-left']\n }], _popoutUp: [{\n type: HostBinding,\n args: ['class.popout-up']\n }], clicked: [{\n type: HostBinding,\n args: ['class.clicked']\n }], itemTemplate: [{\n type: ContentChild,\n args: [ListItemTemplateDirective, { static: true, read: TemplateRef }]\n }], slottedItems: [{\n type: ContentChildren,\n args: [ListItemTemplateDirective, { read: ElementRef }]\n }], cardElement: [{\n type: ViewChild,\n args: [CardComponent, { read: ElementRef }]\n }], popover: [{\n type: ViewChild,\n args: [PopoverComponent]\n }], buttonElement: [{\n type: ViewChild,\n args: [ButtonComponent, { static: true, read: ElementRef }]\n }], kirbyItemsDefault: [{\n type: ViewChildren,\n args: [ItemComponent, { read: ElementRef }]\n }], kirbyItemsSlotted: [{\n type: ContentChildren,\n args: [ItemComponent, { read: ElementRef }]\n }], _onTab: [{\n type: HostListener,\n args: ['keydown.tab']\n }], _onKeydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], _onMouseDown: [{\n type: HostListener,\n args: ['mousedown', ['$event']]\n }], _onTouchStart: [{\n type: HostListener,\n args: ['touchstart', ['$event']]\n }], _onFocus: [{\n type: HostListener,\n args: ['focus']\n }], _onEnterOrEscape: [{\n type: HostListener,\n args: ['keydown.enter']\n }, {\n type: HostListener,\n args: ['keydown.escape']\n }], _onBlur: [{\n type: HostListener,\n args: ['blur', ['$event']]\n }], _onEnterOrSpace: [{\n type: HostListener,\n args: ['keydown.enter', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.space', ['$event']]\n }], _onArrowKeys: [{\n type: HostListener,\n args: ['keydown.arrowup', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.arrowdown', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.arrowleft', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.arrowright', ['$event']]\n }], _onHomeEndKeys: [{\n type: HostListener,\n args: ['keydown.home', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.end', ['$event']]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZHJvcGRvd24vc3JjL2Ryb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUdOLG1CQUFtQixFQUNuQixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLGlCQUFpQixHQUNsQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFbkUsT0FBTyxFQUFFLGlCQUFpQixFQUF5QixNQUFNLGtDQUFrQyxDQUFDO0FBRTVGLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7Ozs7OztBQWdCaEUsTUFBTSxPQUFPLGlCQUFpQjthQUNaLHFCQUFnQixHQUFHLEdBQUcsQUFBTixDQUFPO0lBWXZDLElBQUksS0FBSztRQUNQLE9B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QzVDLFlBQVk7dUJBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUM1QyxZQUFZO3VCQUFDLG9CQUFvQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQTJDOUMsY0FBYztzQkFGYixZQUFZO3VCQUFDLGNBQWMsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ3ZDLFlBQVk7dUJBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgUmVuZGVyZXJTdHlsZUZsYWdzMixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENhcmRDb21wb25lbnQgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2NhcmQnO1xuaW1wb3J0IHtcbiAgRGVzaWduVG9rZW5IZWxwZXIsXG4gIFN0cmluZ1NlYXJjaEhlbHBlcixcbiAgVW5pcXVlSWRHZW5lcmF0b3IsXG59IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vaGVscGVycyc7XG5pbXBvcnQgeyBJdGVtQ29tcG9uZW50IH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9pdGVtJztcbmltcG9ydCB7IExpc3RJdGVtVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2xpc3QnO1xuaW1wb3J0IHsgSG9yaXpvbnRhbERpcmVjdGlvbiwgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vcG9wb3Zlcic7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2J1dHRvbic7XG5pbXBvcnQgeyBFdmVudExpc3RlbmVyRGlzcG9zZUZuIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS90eXBlcyc7XG5pbXBvcnQgeyBmb3J3YXJkQXR0cmlidXRlcywgUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9zaGFyZWQnO1xuXG5pbXBvcnQgeyBPcGVuU3RhdGUsIFZlcnRpY2FsRGlyZWN0aW9uIH0gZnJvbSAnLi9kcm9wZG93bi50eXBlcyc7XG5pbXBvcnQgeyBLZXlib2FyZEhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnLi9rZXlib2FyZC1oYW5kbGVyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdraXJieS1kcm9wZG93bicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Ryb3Bkb3duLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRHJvcGRvd25Db21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIERyb3Bkb3duQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHN0YXRpYyByZWFkb25seSBPUEVOX0RFTEFZX0lOX01TID0gMTAwO1xuICBwcml2YXRlIHN0YXRlID0gT3BlblN0YXRlLmNsb3NlZDtcbiAgcHJpdmF0ZSBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsRGlyZWN0aW9uIHwgYCR7SG9yaXpvbnRhbERpcmVjdGlvbn1gID1cbiAgICBIb3Jpem9udGFsRGlyZWN0aW9uLnJpZ2h0O1xuICBwcml2YXRlIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbERpcmVjdGlvbiB8IGAke1ZlcnRpY2FsRGlyZWN0aW9ufWAgPSBWZXJ0aWNhbERpcmVjdGlvbi5kb3duO1xuICBwcml2YXRlIF9hdHRyaWJ1dGVzVG9Gb3J3YXJkID0gWydhcmlhLWxhYmVsJywgJ2FyaWEtbGFiZWxsZWRieSddO1xuXG4gIF9saXN0Ym94SWQgPSBVbmlxdWVJZEdlbmVyYXRvci5zY29wZWRUbygna2lyYnktZHJvcGRvd24nKS5uZXh0KCk7XG4gIF9jb21ib2JveElkID0gVW5pcXVlSWRHZW5lcmF0b3Iuc2NvcGVkVG8oJ2tpcmJ5LWJ1dHRvbicpLm5leHQoKTtcblxuICBwcml2YXRlIF9pdGVtczogc3RyaW5nW10gfCBhbnlbXSA9IFtdO1xuXG4gIGdldCBpdGVtcygpOiBzdHJpbmdbXSB8IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgaXRlbXModmFsdWU6IHN0cmluZ1tdIHwgYW55W10pIHtcbiAgICB0aGlzLl9pdGVtcyA9IHZhbHVlO1xuICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5pdGVtc1t0aGlzLnNlbGVjdGVkSW5kZXhdIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RlZEluZGV4OiBudW1iZXIgPSAtMTtcbiAgZ2V0IHNlbGVjdGVkSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBzZWxlY3RlZEluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9zZWxlY3RlZEluZGV4ICE9IHZhbHVlKSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZEluZGV4ID0gdmFsdWU7XG4gICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IHRoaXMuX3NlbGVjdGVkSW5kZXg7XG4gICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuaXRlbXNbdGhpcy5zZWxlY3RlZEluZGV4XSB8fCBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIF9mb2N1c2VkSW5kZXgga2VlcHMgdHJhY2sgb2Ygd2hpY2ggZWxlbWVudCBoYXMgZm9jdXMgYW5kIHdpbGwgYmUgc2VsZWN0ZWRcbiAgLy8gaWYgaXQgaXMgYWN0aXZhdGVkIChieSBwcmVzc2luZyBFTlRFUiBvciBTUEFDRSBrZXkpXG4gIHByaXZhdGUgX2ZvY3VzZWRJbmRleDogbnVtYmVyID0gMDtcbiAgZ2V0IGZvY3VzZWRJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9mb2N1c2VkSW5kZXg7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZm9jdXNlZEluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fZm9jdXNlZEluZGV4ICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fZm9jdXNlZEluZGV4ID0gdmFsdWU7XG4gICAgICB0aGlzLnNjcm9sbEl0ZW1JbnRvVmlldyh0aGlzLl9mb2N1c2VkSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGl0ZW1UZXh0UHJvcGVydHkgPSAndGV4dCc7XG5cbiAgQElucHV0KClcbiAgcGxhY2Vob2xkZXIgPSAnUGxlYXNlIHNlbGVjdDonO1xuXG4gIEBJbnB1dCgpIHNldCBwb3BvdXQoZGlyZWN0aW9uOiBIb3Jpem9udGFsRGlyZWN0aW9uIHwgYCR7SG9yaXpvbnRhbERpcmVjdGlvbn1gKSB7XG4gICAgdGhpcy5ob3Jpem9udGFsRGlyZWN0aW9uID0gZGlyZWN0aW9uIHx8IEhvcml6b250YWxEaXJlY3Rpb24ucmlnaHQ7XG4gIH1cblxuICBnZXQgcG9wb3V0KCkge1xuICAgIHJldHVybiB0aGlzLmhvcml6b250YWxEaXJlY3Rpb247XG4gIH1cblxuICBASW5wdXQoKVxuICBhdHRlbnRpb25MZXZlbDogJzEnIHwgJzInIHwgJzMnID0gJzMnO1xuXG4gIEBJbnB1dCgpXG4gIGV4cGFuZD86ICdibG9jayc7XG5cbiAgQElucHV0KClcbiAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGlzYWJsZWQnKVxuICBnZXQgX2lzRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogbnVsbDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZXJyb3InKVxuICBASW5wdXQoKVxuICBoYXNFcnJvcjogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBzaXplOiAnc20nIHwgJ21kJyA9ICdtZCc7XG5cbiAgQElucHV0KClcbiAgdGFiaW5kZXggPSAwO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3Mud2l0aC1wb3BvdmVyJylcbiAgQElucHV0KClcbiAgdXNlUG9wb3ZlciA9IGZhbHNlO1xuXG4gIGdldCBfdGFiaW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyAtMSA6IHRoaXMudGFiaW5kZXg7XG4gIH1cblxuICAvLyBQcmV2ZW50IElvbmljIGJsdXIgb24gc2Nyb2xsXG4gIEBIb3N0QmluZGluZygnYXR0ci5uby1ibHVyJylcbiAgZ2V0IF9ub0JsdXJPblNjcm9sbCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gYW4gaXRlbSBpcyBzZWxlY3RlZCAodGFwIG9uIG1vYmlsZSwgY2xpY2sva2V5cHJlc3Mgb24gd2ViKVxuICAgKi9cbiAgQE91dHB1dCgpIGNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZyB8IGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IGFueT4oKTtcblxuICBwcml2YXRlIF92YWx1ZTogc3RyaW5nIHwgYW55ID0gbnVsbDtcbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB8IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFRleHRGcm9tSXRlbSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZXhwYW5kJylcbiAgZ2V0IF9pc0Jsb2NrTGV2ZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kID09PSAnYmxvY2snO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pcy1vcGVuaW5nJylcbiAgZ2V0IF9pc09wZW5pbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUgPT09IE9wZW5TdGF0ZS5vcGVuaW5nO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pcy1vcGVuJylcbiAgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gT3BlblN0YXRlLm9wZW47XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnBvcG91dC1sZWZ0JylcbiAgZ2V0IF9wb3BvdXRMZWZ0KCkge1xuICAgIHJldHVybiB0aGlzLmhvcml6b250YWxEaXJlY3Rpb24gPT09IEhvcml6b250YWxEaXJlY3Rpb24ubGVmdDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucG9wb3V0LXVwJylcbiAgZ2V0IF9wb3BvdXRVcCgpIHtcbiAgICByZXR1cm4gdGhpcy52ZXJ0aWNhbERpcmVjdGlvbiA9PT0gVmVydGljYWxEaXJlY3Rpb24udXA7XG4gIH1cblxuICAvKiBUaGUgJ2NsaWNrZWQnIGNsYXNzIGlzIGFwcGxpZWQgdGhyb3VnaCBIb3N0YmluZGluZyB0byBwcmV2ZW50IHRoZSBkcm9wZG93biBmcm9tIGdldHRpbmcgYSBmb2N1cyByaW5nIG9uIGNsaWNrLlxuICAgIFRoZXJlIGlzIGEgYnVnIHRoYXQgY2F1c2VzIHRoZSBkcm9wZG93biB0byBnZXQgYSBmb2N1cyByaW5nIG9uIGNsaWNrLCBpZiBpdCBpcyB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IGlzIGludGVyYWN0ZWQgd2l0aFxuICAgIGFmdGVyIHRoZSBwYWdlIGlzIGxvYWRlZC4gSWYgdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggYW55IG90aGVyIGVsZW1lbnQgYmVmb3JlLCB0aGVuIHRoZSBkcm9wZG93biB3b24ndCBnZXQgYSBmb2N1cyByaW5nLlxuICAgIFNlZSBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL2tpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9pc3N1ZXMvMjQ3Ny5cblxuICAgIFRoaXMgc29sdXRpb24gY2FuIHBvdGVudGlhbGx5IGJlIHJlZmFjdG9yZWQsIHdoZW4gcG9wb3ZlciBpcyBub3QgZXhwZXJpbWVudGFsIGFueW1vcmUuIFRoZW4gaXQgY291bGQgYmUgcG9zc2libGUgXG4gICAgdG8gY2xvc2UgdGhlIGRyb3Bkb3duIHdoZW4gdGhlIHBvcG92ZXIgYmFja2Ryb3AgaXMgY2xpY2tlZCwgaW5zdGVhZCBvZiByZWx5aW5nIG9uIHRoZSBibHVyIGV2ZW50LCB3aGljaCBpcyB1dGlsaXplZFxuICAgIGJ5IHRoaXMgbGluZSBiZWxvdzogdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKS4gUmlnaHQgbm93IHRoaXMgZm9yY2VzIHRoZSBibHVyIGV2ZW50IHRvIGJlIHRyaWdnZXJlZCwgd2hlblxuICAgIGNsaWNraW5nIG91dHNpZGUgb2YgdGhlIGRyb3Bkb3duLlxuICAgICovXG4gIEBIb3N0QmluZGluZygnY2xhc3MuY2xpY2tlZCcpXG4gIGNsaWNrZWQgPSBmYWxzZTtcblxuICBAQ29udGVudENoaWxkKExpc3RJdGVtVGVtcGxhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBpdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGRyZW4oTGlzdEl0ZW1UZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHNsb3R0ZWRJdGVtczogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PjtcbiAgQFZpZXdDaGlsZChDYXJkQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgY2FyZEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKFBvcG92ZXJDb21wb25lbnQpXG4gIHBvcG92ZXI/OiBQb3BvdmVyQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKEJ1dHRvbkNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgYnV0dG9uRWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgcHJpdmF0ZSBmb3J3YXJkQXJpYUxhYmVsVG9Ecm9wZG93bkJ1dHRvbigpIHtcbiAgICBmb3J3YXJkQXR0cmlidXRlcyhcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgdGhpcy5fYXR0cmlidXRlc1RvRm9yd2FyZCxcbiAgICAgIHRoaXMucmVuZGVyZXIsXG4gICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQubmF0aXZlRWxlbWVudFxuICAgICk7XG4gIH1cbiAgQFZpZXdDaGlsZHJlbihJdGVtQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAga2lyYnlJdGVtc0RlZmF1bHQ6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XG5cbiAgX2tpcmJ5SXRlbXNTbG90dGVkOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuICBAQ29udGVudENoaWxkcmVuKEl0ZW1Db21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBzZXQga2lyYnlJdGVtc1Nsb3R0ZWQoa2lyYnlJdGVtczogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+Pikge1xuICAgIGNvbnN0IGhhc1Nsb3R0ZWRJdGVtcyA9IHRoaXMuZGlzcG9zZUl0ZW1DbGlja0xpc3RlbmVycz8ubGVuZ3RoID4gMDtcbiAgICBpZiAoaGFzU2xvdHRlZEl0ZW1zKSB7XG4gICAgICB0aGlzLnVubGlzdGVuQWxsU2xvdHRlZEl0ZW1zKCk7XG4gICAgfVxuXG4gICAgLy8gU2V0dXAgYSBjbGljayBsaXN0ZW5lciBmb3IgZWFjaCBuZXcgc2xvdHRlZCBpdGVtc1xuICAgIGtpcmJ5SXRlbXMuZm9yRWFjaCgoa2lyYnlJdGVtLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoa2lyYnlJdGVtLm5hdGl2ZUVsZW1lbnQsICdyb2xlJywgJ29wdGlvbicpO1xuICAgICAgY29uc3QgZGlzcG9zZUNsaWNrTGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJEaXNwb3NlRm4gPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICAga2lyYnlJdGVtLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdjbGljaycsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLm9uSXRlbVNlbGVjdChpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIHRoaXMuZGlzcG9zZUl0ZW1DbGlja0xpc3RlbmVycy5wdXNoKGRpc3Bvc2VDbGlja0xpc3RlbmVyKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2tpcmJ5SXRlbXNTbG90dGVkID0ga2lyYnlJdGVtcztcbiAgfVxuXG4gIGdldCBraXJieUl0ZW1zU2xvdHRlZCgpOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+IHtcbiAgICByZXR1cm4gdGhpcy5fa2lyYnlJdGVtc1Nsb3R0ZWQ7XG4gIH1cblxuICBwcml2YXRlIGRpc3Bvc2VJdGVtQ2xpY2tMaXN0ZW5lcnM6IEV2ZW50TGlzdGVuZXJEaXNwb3NlRm5bXSA9IFtdO1xuICBwcml2YXRlIGludGVyc2VjdGlvbk9ic2VydmVyUmVmOiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSBzaG93RHJvcGRvd25UaW1lb3V0SWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICBwcml2YXRlIHNlYXJjaEJ1ZmZlcjogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgc2VhcmNoQnVmZmVyVGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByaXZhdGUgU0VBUkNIX0JVRkZFUl9ERUxBWSA9IDUwMDsgLy8gbXNcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGtleWJvYXJkSGFuZGxlclNlcnZpY2U6IEtleWJvYXJkSGFuZGxlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZXNpemVPYnNlcnZlclNlcnZpY2U6IFJlc2l6ZU9ic2VydmVyU2VydmljZVxuICApIHt9XG5cbiAgb25Ub2dnbGUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIHRoaXMuY2xpY2tlZCA9IHRydWU7XG5cbiAgICB0aGlzLnRvZ2dsZSgpO1xuICB9XG5cbiAgdG9nZ2xlKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNPcGVuID8gdGhpcy5jbG9zZSgpIDogdGhpcy5vcGVuKCk7XG4gIH1cblxuICAvKiBVdGlsaXR5IHRoYXQgbWFrZXMgaXQgZWFzaWVyIHRvIHNldCBzdHlsZXMgb24gY2FyZCBlbGVtZW50XG4gIHdoZW4gdXNpbmcgcG9wb3ZlciovXG4gIHByaXZhdGUgc2V0UG9wb3ZlckNhcmRTdHlsZShzdHlsZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLnVzZVBvcG92ZXIpIHJldHVybjtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICB0aGlzLmNhcmRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICBzdHlsZSxcbiAgICAgIHZhbHVlLFxuICAgICAgUmVuZGVyZXJTdHlsZUZsYWdzMi5EYXNoQ2FzZVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMudXNlUG9wb3ZlciAmJiB0aGlzLmV4cGFuZCA9PT0gJ2Jsb2NrJykge1xuICAgICAgY29uc3QgeyB3aWR0aDogaW5pdGlhbFdpZHRoIH0gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHRoaXMuc2V0UG9wb3ZlckNhcmRTdHlsZSgnbWF4LXdpZHRoJywgJ2luaXRpYWwnKTtcbiAgICAgIHRoaXMuc2V0UG9wb3ZlckNhcmRTdHlsZSgnbWluLXdpZHRoJywgJ2luaXRpYWwnKTtcbiAgICAgIC8vIEVuc3VyZSBpbml0aWFsIHdpZHRoIGlzIHNldCBldmVuIGlmIHRoZSByZXNpemUgb2JzZXJ2ZXIgY2FsbGJhY2sgYWxzbyBmaXJlcyBpbml0aWFsbHk6XG4gICAgICB0aGlzLnNldFBvcG92ZXJDYXJkU3R5bGUoJy0ta2lyYnktY2FyZC13aWR0aCcsIGAke2luaXRpYWxXaWR0aH1weGApO1xuXG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyU2VydmljZS5vYnNlcnZlKHRoaXMuZWxlbWVudFJlZiwgKGVudHJ5KSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1dpZHRoID0gZW50cnkuY29udGVudFJlY3Qud2lkdGg7XG4gICAgICAgIGlmIChuZXdXaWR0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnNldFBvcG92ZXJDYXJkU3R5bGUoJy0ta2lyYnktY2FyZC13aWR0aCcsIGAke25ld1dpZHRofXB4YCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmZvcndhcmRBcmlhTGFiZWxUb0Ryb3Bkb3duQnV0dG9uKCk7XG4gICAgdGhpcy5pbml0aWFsaXplQWxpZ25tZW50KCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVBbGlnbm1lbnQoKSB7XG4gICAgaWYgKHRoaXMudXNlUG9wb3ZlcikgcmV0dXJuO1xuICAgIGlmICghdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlclJlZikge1xuICAgICAgLy8gR2V0IHRoZSBkZXNpZ24gdG9rZW4gc2l6ZSBvZiB0aGUgYnV0dG9uLiBJbiB0aGUgYnV0dG9uIHN0eWxlc2hlZXQgYSBtZWRpdW0gYnV0dG9uIGhlaWdodCBpcyB1dGlscy5zaXplKHhsKVxuICAgICAgLy8gYW5kIGEgc21hbGwgYnV0dG9uIGhlaWdodCBpcyB1dGlscy5zaXplKFwibFwiKVxuICAgICAgY29uc3QgZGVzaWduVG9rZW5TaXplSGVpZ2h0ID0gdGhpcy5zaXplID09PSAnbWQnID8gJ3hsJyA6ICdsJztcblxuICAgICAgLy8gU2V0dGluZyB0aGUgcm9vdE1hcmdpbiBlcXVhbCB0byB0aGUgaGVpZ2h0IG9mIHRoZSBidXR0b25cbiAgICAgIC8vIGFsbG93cyB0aGUgSW50ZXJzZWN0aW9uIE9ic2VydmVyIENhbGxiYWNrIHRvIGJlIGNhbGxlZFxuICAgICAgLy8gZXZlbiBpZiB0aGUgZHJvcGRvd24gYnV0dG9uIGlzIGludGVyc2VjdGluZyB3aXRoIHRoZSB2aWV3cG9ydFxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgcm9vdE1hcmdpbjogRGVzaWduVG9rZW5IZWxwZXIuc2l6ZShkZXNpZ25Ub2tlblNpemVIZWlnaHQpLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNhbGxiYWNrOiBJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrID0gKGVudHJpZXMpID0+IHtcbiAgICAgICAgLy8gT25seSBhcHBseSBhbGlnbm1lbnQgd2hlbiBvcGVuaW5nOlxuICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gT3BlblN0YXRlLm9wZW5pbmcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDYW5jZWwgYW55IHBlbmRpbmcgdGltZXIgdG8gc2hvdyBkcm9wZG93bjpcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2hvd0Ryb3Bkb3duVGltZW91dElkKTtcbiAgICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzWzBdO1xuICAgICAgICBjb25zdCBpc1Zpc2libGUgPSBlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3Qud2lkdGggPiAwO1xuICAgICAgICBpZiAoaXNWaXNpYmxlICYmIGVudHJ5LmludGVyc2VjdGlvblJhdGlvIDwgMSkge1xuICAgICAgICAgIHRoaXMuc2V0SG9yaXpvbnRhbERpcmVjdGlvbihlbnRyeSk7XG4gICAgICAgICAgdGhpcy5zZXRWZXJ0aWNhbERpcmVjdGlvbihlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93RHJvcGRvd24oKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9O1xuICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlclJlZiA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihjYWxsYmFjaywgb3B0aW9ucyk7XG4gICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyUmVmLm9ic2VydmUodGhpcy5jYXJkRWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEhvcml6b250YWxEaXJlY3Rpb24oZW50cnk6IEludGVyc2VjdGlvbk9ic2VydmVyRW50cnkpIHtcbiAgICAvLyBJZiBwb3BvdXQgZGlyZWN0aW9uIGlzIHNldCB0byByaWdodCwgYW5kIHRoZSBlbnRyeSBpcyBjdXQgb2ZmIHRvIHRoZSByaWdodCBieSAke2VudHJ5LmJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCAtIGVudHJ5LmludGVyc2VjdGlvblJlY3QucmlnaHR9cHhcbiAgICAvLyBpdCBpcyBzZXQgdG8gcG9wb3V0IGxlZnQgaW5zdGVhZCwgYW5kIHZpY2UgdmVyc2EgZm9yIHBvcG91dCBkaXJlY3Rpb24gbGVmdFxuICAgIGlmICh0aGlzLmhvcml6b250YWxEaXJlY3Rpb24gPT09IEhvcml6b250YWxEaXJlY3Rpb24ucmlnaHQpIHtcbiAgICAgIGlmIChlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QucmlnaHQgPiBlbnRyeS5yb290Qm91bmRzLnJpZ2h0KSB7XG4gICAgICAgIHRoaXMuaG9yaXpvbnRhbERpcmVjdGlvbiA9IEhvcml6b250YWxEaXJlY3Rpb24ubGVmdDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGVudHJ5LmJvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0IDwgZW50cnkucm9vdEJvdW5kcy5sZWZ0KSB7XG4gICAgICAgIHRoaXMuaG9yaXpvbnRhbERpcmVjdGlvbiA9IEhvcml6b250YWxEaXJlY3Rpb24ucmlnaHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRWZXJ0aWNhbERpcmVjdGlvbihlbnRyeTogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSkge1xuICAgIGlmIChlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QudG9wIDwgMCkge1xuICAgICAgLy8gZW50cnkgaXMgY3V0IG9mZiBhdCB0aGUgdG9wIGJ5ICR7ZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LnRvcH1weFxuICAgICAgLy8gb3BlbiBkb3dud2FyZHM6XG4gICAgICB0aGlzLnZlcnRpY2FsRGlyZWN0aW9uID0gVmVydGljYWxEaXJlY3Rpb24uZG93bjtcbiAgICB9XG4gICAgaWYgKGVudHJ5LmJvdW5kaW5nQ2xpZW50UmVjdC5ib3R0b20gPiBlbnRyeS5yb290Qm91bmRzLmJvdHRvbSkge1xuICAgICAgLy8gZW50cnkgaXMgY3V0IG9mZiBhdCB0aGUgYm90dG9tIGJ5ICR7ZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LmJvdHRvbSAtIGVudHJ5LmludGVyc2VjdGlvblJlY3QuYm90dG9tfXB4XG4gICAgICBjb25zdCBjb250YWluZXJPZmZzZXRUb3AgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG4gICAgICBjb25zdCBTUEFDSU5HID0gNTsgLy9UT0RPOiBHZXQgZnJvbSBTQ1NTXG4gICAgICAvLyBDaGVjayBpZiB0aGUgY2FyZCBjYW4gZml0IG9uIHRvcCBvZiBidXR0b246XG4gICAgICBpZiAoY29udGFpbmVyT2Zmc2V0VG9wID4gZW50cnkudGFyZ2V0LmNsaWVudEhlaWdodCArIFNQQUNJTkcpIHtcbiAgICAgICAgLy8gb3BlbiB1cHdhcmRzOlxuICAgICAgICB0aGlzLnZlcnRpY2FsRGlyZWN0aW9uID0gVmVydGljYWxEaXJlY3Rpb24udXA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb3BlbigpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLnN0YXRlID0gT3BlblN0YXRlLm9wZW5pbmc7XG4gICAgICAvLyBlbnN1cmVzIHRoYXQgdGhlIGRyb3Bkb3duIGlzIG9wZW5lZCBpbiBjYXNlIHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrIGlzbid0IGludm9rZWRcbiAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duVGltZW91dElkID0gc2V0VGltZW91dChcbiAgICAgICAgKCkgPT4gdGhpcy5zaG93RHJvcGRvd24oKSxcbiAgICAgICAgRHJvcGRvd25Db21wb25lbnQuT1BFTl9ERUxBWV9JTl9NU1xuICAgICAgKTtcblxuICAgICAgLy8gTW92ZSBmb2N1cyB0byBzZWxlY3RlZCBpdGVtIChpZiBhbnkpIG9yIGZpcnN0IGl0ZW1cbiAgICAgIHRoaXMuZm9jdXNlZEluZGV4ID0gdGhpcy5zZWxlY3RlZEluZGV4ID4gLTEgPyB0aGlzLnNlbGVjdGVkSW5kZXggOiAwO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvd0Ryb3Bkb3duKCkge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSBPcGVuU3RhdGUub3BlbmluZykge1xuICAgICAgdGhpcy5zdGF0ZSA9IE9wZW5TdGF0ZS5vcGVuO1xuICAgICAgdGhpcy5wb3BvdmVyPy5zaG93KCk7XG4gICAgICB0aGlzLnNjcm9sbEl0ZW1JbnRvVmlldyh0aGlzLmZvY3VzZWRJbmRleCk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5zdGF0ZSA9IE9wZW5TdGF0ZS5jbG9zZWQ7XG4gICAgICAvLyBSZXNldCB2ZXJ0aWNhbCBkaXJlY3Rpb24gdG8gZGVmYXVsdFxuICAgICAgdGhpcy52ZXJ0aWNhbERpcmVjdGlvbiA9IFZlcnRpY2FsRGlyZWN0aW9uLmRvd247XG4gICAgICB0aGlzLnBvcG92ZXI/LmhpZGUoKTtcbiAgICB9XG4gIH1cblxuICBvbkl0ZW1TZWxlY3QoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0SXRlbShpbmRleCk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XG4gIHByaXZhdGUgX29uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzZWxlY3QncyB2YWx1ZS4gUGFydCBvZiB0aGUgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gICAqIHJlcXVpcmVkIHRvIGludGVncmF0ZSB3aXRoIEFuZ3VsYXIncyBjb3JlIGZvcm1zIEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIE5ldyB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIHRoZSBtb2RlbC5cbiAgICovXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX3NlbGVjdEl0ZW1CeVZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGludm9rZWQgd2hlbiB0aGUgc2VsZWN0J3MgdmFsdWVcbiAgICogY2hhbmdlcyBmcm9tIHVzZXIgaW5wdXQuIFBhcnQgb2YgdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICAgKiByZXF1aXJlZCB0byBpbnRlZ3JhdGUgd2l0aCBBbmd1bGFyJ3MgY29yZSBmb3JtcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSBmbiBDYWxsYmFjayB0byBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgdmFsdWUgY2hhbmdlcy5cbiAgICovXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBpbnZva2VkIHdoZW4gdGhlIHNlbGVjdCBpcyBibHVycmVkXG4gICAqIGJ5IHRoZSB1c2VyLiBQYXJ0IG9mIHRoZSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UgcmVxdWlyZWRcbiAgICogdG8gaW50ZWdyYXRlIHdpdGggQW5ndWxhcidzIGNvcmUgZm9ybXMgQVBJLlxuICAgKlxuICAgKiBAcGFyYW0gZm4gQ2FsbGJhY2sgdG8gYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgYmVlbiB0b3VjaGVkLlxuICAgKi9cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIHRoZSBzZWxlY3QuIFBhcnQgb2YgdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZSByZXF1aXJlZFxuICAgKiB0byBpbnRlZ3JhdGUgd2l0aCBBbmd1bGFyJ3MgY29yZSBmb3JtcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSBpc0Rpc2FibGVkIFNldHMgd2hldGhlciB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RJdGVtKGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoaW5kZXggIT0gdGhpcy5zZWxlY3RlZEluZGV4KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRleDtcbiAgICAgIHRoaXMuZm9jdXNlZEluZGV4ID0gaW5kZXg7XG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0SXRlbUJ5VmFsdWUodmFsdWU6IHN0cmluZyB8IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHRoaXMuaXRlbXMuaW5kZXhPZih2YWx1ZSk7XG4gIH1cblxuICBnZXRUZXh0RnJvbUl0ZW0oaXRlbTogc3RyaW5nIHwgYW55KSB7XG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyA/IGl0ZW0gOiBpdGVtW3RoaXMuaXRlbVRleHRQcm9wZXJ0eV07XG4gIH1cblxuICBzY3JvbGxJdGVtSW50b1ZpZXcoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGtpcmJ5SXRlbXMgPVxuICAgICAgdGhpcy5raXJieUl0ZW1zU2xvdHRlZCAmJiB0aGlzLmtpcmJ5SXRlbXNTbG90dGVkLmxlbmd0aFxuICAgICAgICA/IHRoaXMua2lyYnlJdGVtc1Nsb3R0ZWRcbiAgICAgICAgOiB0aGlzLmtpcmJ5SXRlbXNEZWZhdWx0O1xuICAgIGlmIChraXJieUl0ZW1zICYmIGtpcmJ5SXRlbXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEtpcmJ5SXRlbSA9IGtpcmJ5SXRlbXMudG9BcnJheSgpW2luZGV4XTtcbiAgICAgIGlmIChzZWxlY3RlZEtpcmJ5SXRlbSAmJiBzZWxlY3RlZEtpcmJ5SXRlbS5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGl0ZW1FbGVtZW50ID0gc2VsZWN0ZWRLaXJieUl0ZW0ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaXRlbUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24udGFiJylcbiAgX29uVGFiKCkge1xuICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5zZWxlY3RJdGVtKHRoaXMuZm9jdXNlZEluZGV4KTtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGlja2VkKSB7XG4gICAgICAvLyBSZW1vdmUgdGhlICdjbGlja2VkJyBjbGFzcyAoSG9zdGJpbmRpbmcpIGlmIHRoZSB1c2VyIGhhcyBwcmV2aW91c2x5IG9wZW5lZCB0aGUgZHJvcGRvd24gYnkgY2xpY2tpbmcsXG4gICAgICAvLyBzaW5jZSB0aGUgY2xhc3MgcHJldmVudHMgdGhlIGZvY3VzIHJpbmcgZnJvbSBzaG93aW5nLFxuICAgICAgLy8gd2hpY2ggaXMgZXhwZWN0ZWQgdG8gaGFwcGVuLCB3aGVuIHVzaW5nIHRoZSB0YWIga2V5XG4gICAgICB0aGlzLmNsaWNrZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByZXZlbnREZWZhdWx0QW5kU3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkVG9TZWFyY2hCdWZmZXIoY2hhcjogc3RyaW5nKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoQnVmZmVyVGltZW91dCk7XG4gICAgdGhpcy5zZWFyY2hCdWZmZXIgKz0gY2hhcjtcbiAgICB0aGlzLnNlYXJjaEJ1ZmZlclRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVzZXRTZWFyY2hCdWZmZXIoKTtcbiAgICB9LCB0aGlzLlNFQVJDSF9CVUZGRVJfREVMQVkpO1xuICB9XG4gIHByaXZhdGUgcmVzZXRTZWFyY2hCdWZmZXIoKSB7XG4gICAgdGhpcy5zZWFyY2hCdWZmZXIgPSAnJztcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBfb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuXG4gICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tLaXJieV0gTm8gaXRlbXMgZm91bmQgd2l0aGluIGRyb3Bkb3duJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcblxuICAgIGlmIChTdHJpbmdTZWFyY2hIZWxwZXIuaXNQcmludGFibGVDaGFyYWN0ZXIoa2V5KSkge1xuICAgICAgdGhpcy5oYW5kbGVQcmludGFibGVDaGFyYWN0ZXJLZXkoZXZlbnQsIHRoaXMuaXNPcGVuKTtcbiAgICB9XG5cbiAgICAvLyBBTFQgKyBBcnJvd0Rvd246IE9wZW4gZHJvcGRvd25cbiAgICBpZiAoa2V5ID09PSAnQXJyb3dEb3duJyAmJiBldmVudC5hbHRLZXkpIHtcbiAgICAgIHRoaXMucHJldmVudERlZmF1bHRBbmRTdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oZXZlbnQpO1xuICAgICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkSW5kZXggPSB0aGlzLnNlbGVjdGVkSW5kZXggPiAtMSA/IHRoaXMuc2VsZWN0ZWRJbmRleCA6IDA7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQUxUICsgQXJyb3dVcDogU2VsZWN0IGZvY3VzZWQgaXRlbSBhbmQgY2xvc2UgZHJvcGRvd25cbiAgICBpZiAoa2V5ID09PSAnQXJyb3dVcCcgJiYgZXZlbnQuYWx0S2V5KSB7XG4gICAgICB0aGlzLnByZXZlbnREZWZhdWx0QW5kU3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKGV2ZW50KTtcbiAgICAgIGlmICh0aGlzLmZvY3VzZWRJbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0SXRlbSh0aGlzLmZvY3VzZWRJbmRleCk7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUGFnZVVwOiBKdW1wIHVwIDEwIG9wdGlvbnMgb3IgdG8gZmlyc3RcbiAgICBpZiAoa2V5ID09PSAnUGFnZVVwJykge1xuICAgICAgdGhpcy5wcmV2ZW50RGVmYXVsdEFuZFN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbihldmVudCk7XG4gICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgfVxuICAgICAgdGhpcy5mb2N1c2VkSW5kZXggPSBNYXRoLm1heCgwLCB0aGlzLmZvY3VzZWRJbmRleCAtIDEwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBQYWdlRG93bjogSnVtcCBkb3duIDEwIG9wdGlvbnMgb3IgdG8gbGFzdFxuICAgIGlmIChrZXkgPT09ICdQYWdlRG93bicpIHtcbiAgICAgIHRoaXMucHJldmVudERlZmF1bHRBbmRTdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oZXZlbnQpO1xuICAgICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZm9jdXNlZEluZGV4ID0gTWF0aC5taW4odGhpcy5pdGVtcy5sZW5ndGggLSAxLCB0aGlzLmZvY3VzZWRJbmRleCArIDEwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVByaW50YWJsZUNoYXJhY3RlcktleShldmVudDogS2V5Ym9hcmRFdmVudCwgaXNPcGVuOiBib29sZWFuKSB7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuXG4gICAgaWYgKGlzT3Blbikge1xuICAgICAgdGhpcy5wcmV2ZW50RGVmYXVsdEFuZFN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbihldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3BlbigpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBzYW1lIGNoYXJhY3RlciBpcyB0eXBlZCB0d2ljZSwgdGhlIHNlYXJjaCBidWZmZXIgc2hvdWxkIG9ubHkgY29udGFpbiB0aGF0IGNoYXJhY3RlciBvbmNlXG4gICAgaWYgKFxuICAgICAgdGhpcy5zZWFyY2hCdWZmZXIubGVuZ3RoID09PSAxICYmXG4gICAgICB0aGlzLnNlYXJjaEJ1ZmZlclswXS50b0xvd2VyQ2FzZSgpID09PSBrZXkudG9Mb3dlckNhc2UoKVxuICAgICkge1xuICAgICAgdGhpcy5zZWFyY2hCdWZmZXIgPSBrZXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkVG9TZWFyY2hCdWZmZXIoa2V5KTtcbiAgICB9XG5cbiAgICBjb25zdCBpc011bHRpQ2hhclNlYXJjaCA9IHRoaXMuc2VhcmNoQnVmZmVyLmxlbmd0aCA+IDE7XG4gICAgbGV0IHN0YXJ0SW5kZXggPSAwO1xuXG4gICAgaWYgKCFpc011bHRpQ2hhclNlYXJjaCAmJiB0aGlzLmlzT3Blbikge1xuICAgICAgc3RhcnRJbmRleCA9IHRoaXMuZm9jdXNlZEluZGV4ICsgMTtcbiAgICB9XG5cbiAgICBsZXQgZm91bmRJdGVtSW5kZXggPSB0aGlzLmdldEluZGV4T2ZJdGVtQnlGaXJzdENoYXJhY3Rlcih0aGlzLnNlYXJjaEJ1ZmZlciwgc3RhcnRJbmRleCk7XG5cbiAgICBpZiAoZm91bmRJdGVtSW5kZXggPT09IC0xICYmIGlzTXVsdGlDaGFyU2VhcmNoKSB7XG4gICAgICBmb3VuZEl0ZW1JbmRleCA9IHRoaXMuZ2V0SW5kZXhPZkl0ZW1CeUZpcnN0Q2hhcmFjdGVyKGtleSwgc3RhcnRJbmRleCk7XG4gICAgfVxuXG4gICAgaWYgKGZvdW5kSXRlbUluZGV4ID09PSAtMSAmJiAhaXNNdWx0aUNoYXJTZWFyY2ggJiYgdGhpcy5pc09wZW4pIHtcbiAgICAgIGZvdW5kSXRlbUluZGV4ID0gdGhpcy5nZXRJbmRleE9mSXRlbUJ5Rmlyc3RDaGFyYWN0ZXIodGhpcy5zZWFyY2hCdWZmZXIsIDApO1xuICAgIH1cblxuICAgIGlmIChmb3VuZEl0ZW1JbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IGZvdW5kSXRlbUluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5kZXhPZkl0ZW1CeUZpcnN0Q2hhcmFjdGVyKGNoYXI6IHN0cmluZywgc3RhcnRJbmRleDogbnVtYmVyID0gMCkge1xuICAgIGxldCBpdGVtVGV4dHM6IHN0cmluZ1tdO1xuICAgIC8vIFByZWZlciBzbG90dGVkL3Byb2plY3RlZCBpdGVtcyBpZiBwcmVzZW50XG4gICAgaWYgKHRoaXMua2lyYnlJdGVtc1Nsb3R0ZWQgJiYgdGhpcy5raXJieUl0ZW1zU2xvdHRlZC5sZW5ndGgpIHtcbiAgICAgIGl0ZW1UZXh0cyA9IHRoaXMua2lyYnlJdGVtc1Nsb3R0ZWRcbiAgICAgICAgLnRvQXJyYXkoKVxuICAgICAgICAubWFwKChyZWYpID0+IHJlZi5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50Py50cmltKCkgPz8gJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtVGV4dHMgPSB0aGlzLml0ZW1zLm1hcCgoaXRlbSkgPT4gdGhpcy5nZXRUZXh0RnJvbUl0ZW0oaXRlbSkgPz8gJycpO1xuICAgIH1cblxuICAgIHJldHVybiBTdHJpbmdTZWFyY2hIZWxwZXIuZ2V0SW5kZXhCeUZpcnN0TWF0Y2hpbmdTdGFydFN0cmluZyhjaGFyLCBpdGVtVGV4dHMsIHN0YXJ0SW5kZXgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgX29uTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgWyckZXZlbnQnXSlcbiAgX29uVG91Y2hTdGFydChldmVudDogVG91Y2hFdmVudCkge1xuICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxuICBfb25Gb2N1cygpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgIH1cbiAgfVxuXG4gIF9vblBvcG92ZXJXaWxsSGlkZSgpIHtcbiAgICB0aGlzLnN0YXRlID0gT3BlblN0YXRlLmNsb3NlZDtcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lbnRlcicpXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZXNjYXBlJylcbiAgX29uRW50ZXJPckVzY2FwZSgpIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gICAgdGhpcy5fb25Ub3VjaGVkKCk7XG4gIH1cblxuICBfb25Qb3BvdmVyQ2xpY2soKSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicsIFsnJGV2ZW50J10pXG4gIF9vbkJsdXIoKSB7XG4gICAgaWYgKHRoaXMudXNlUG9wb3ZlcikgcmV0dXJuO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLnNwYWNlJywgWyckZXZlbnQnXSlcbiAgX29uRW50ZXJPclNwYWNlKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5zZWxlY3RJdGVtKHRoaXMuZm9jdXNlZEluZGV4KTtcbiAgICB9XG4gICAgdGhpcy50b2dnbGUoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3d1cCcsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3dkb3duJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2xlZnQnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93cmlnaHQnLCBbJyRldmVudCddKVxuICBfb25BcnJvd0tleXMoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gTWlycm9yIGRlZmF1bHQgSFRNTDUgc2VsZWN0IGJlaGF2aW91ciAtIHByZXZlbnQgbGVmdC9yaWdodCBhcnJvd3Mgd2hlbiBvcGVuOlxuICAgIGlmICh0aGlzLmlzT3BlbiAmJiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JyB8fCBldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0JykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAvLyBBdm9pZCBwYWdlIHNjcm9sbFxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMub3BlbigpO1xuXG4gICAgICAvLyBJZiBubyBzZWxlY3RlZCBpdGVtIHRoZW4gZm9jdXMgZmlyc3Qgb3IgbGFzdCBpdGVtXG4gICAgICBpZiAoIWV2ZW50LmFsdEtleSAmJiB0aGlzLnNlbGVjdGVkSW5kZXggPCAwKSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IDA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICAgICAgdGhpcy5mb2N1c2VkSW5kZXggPSB0aGlzLml0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdGb2N1c2VkSW5kZXggPSB0aGlzLmtleWJvYXJkSGFuZGxlclNlcnZpY2UuaGFuZGxlKFxuICAgICAgZXZlbnQsXG4gICAgICB0aGlzLmZvY3VzZWRJbmRleCxcbiAgICAgIHRoaXMuaXRlbXMubGVuZ3RoIC0gMVxuICAgICk7XG4gICAgaWYgKG5ld0ZvY3VzZWRJbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IG5ld0ZvY3VzZWRJbmRleDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5ob21lJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lbmQnLCBbJyRldmVudCddKVxuICBfb25Ib21lRW5kS2V5cyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMub3BlbigpO1xuICAgIH1cbiAgICBjb25zdCBuZXdGb2N1c2VkSW5kZXggPSB0aGlzLmtleWJvYXJkSGFuZGxlclNlcnZpY2UuaGFuZGxlKFxuICAgICAgZXZlbnQsXG4gICAgICB0aGlzLmZvY3VzZWRJbmRleCxcbiAgICAgIHRoaXMuaXRlbXMubGVuZ3RoIC0gMVxuICAgICk7XG4gICAgaWYgKG5ld0ZvY3VzZWRJbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IG5ld0ZvY3VzZWRJbmRleDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSB1bmxpc3RlbkFsbFNsb3R0ZWRJdGVtcygpIHtcbiAgICBsZXQgZGlzcG9zZUNsaWNrTGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJEaXNwb3NlRm47XG4gICAgd2hpbGUgKChkaXNwb3NlQ2xpY2tMaXN0ZW5lciA9IHRoaXMuZGlzcG9zZUl0ZW1DbGlja0xpc3RlbmVycy5wb3AoKSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZGlzcG9zZUNsaWNrTGlzdGVuZXIoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVubGlzdGVuQWxsU2xvdHRlZEl0ZW1zKCk7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlclNlcnZpY2UudW5vYnNlcnZlKHRoaXMuZWxlbWVudFJlZik7XG4gICAgaWYgKHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXJSZWYpIHtcbiAgICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXJSZWYuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgfVxufVxuIiwiPGJ1dHRvblxuICBraXJieS1idXR0b25cbiAgdHlwZT1cImJ1dHRvblwiXG4gIFthdHRyLmlkXT1cIl9jb21ib2JveElkXCJcbiAgcm9sZT1cImNvbWJvYm94XCJcbiAgYXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIlxuICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIl9saXN0Ym94SWRcIlxuICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzT3BlblwiXG4gIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCJfbGlzdGJveElkICsgJy1pdGVtLScgKyBmb2N1c2VkSW5kZXhcIlxuICBbc2l6ZV09XCJzaXplXCJcbiAgW2F0dGVudGlvbkxldmVsXT1cImF0dGVudGlvbkxldmVsXCJcbiAgKGNsaWNrKT1cIm9uVG9nZ2xlKCRldmVudClcIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuPlxuICA8c3BhbiBjbGFzcz1cInRleHRcIj57eyBzZWxlY3RlZFRleHQgfHwgcGxhY2Vob2xkZXIgfX08L3NwYW4+XG4gIDxraXJieS1pY29uIFtuYW1lXT1cImlzT3BlbiA/ICdhcnJvdy11cCcgOiAnYXJyb3ctZG93bidcIj48L2tpcmJ5LWljb24+XG48L2J1dHRvbj5cblxuPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInVzZVBvcG92ZXIgPyBwb3BvdmVyVGVtcGxhdGUgOiBpdGVtV3JhcHBlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjcG9wb3ZlclRlbXBsYXRlPlxuICA8a2lyYnktcG9wb3ZlclxuICAgIFt0YXJnZXRdPVwiYnV0dG9uRWxlbWVudFwiXG4gICAgW3BvcG91dF09XCJwb3BvdXRcIlxuICAgIChjbGljayk9XCJfb25Qb3BvdmVyQ2xpY2soKVwiXG4gICAgKHdpbGxIaWRlKT1cIl9vblBvcG92ZXJXaWxsSGlkZSgpXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtV3JhcHBlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gIDwva2lyYnktcG9wb3Zlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaXRlbVdyYXBwZXJUZW1wbGF0ZT5cbiAgPGtpcmJ5LWNhcmQgcm9sZT1cImxpc3Rib3hcIiBbYXR0ci5pZF09XCJfbGlzdGJveElkXCIgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIl9jb21ib2JveElkXCI+XG4gICAgQGZvciAoaXRlbSBvZiBpdGVtczsgdHJhY2sgaXRlbTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICBpdGVtVGVtcGxhdGUgfHwgZGVmYXVsdEl0ZW1UZW1wbGF0ZTtcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IGl0ZW0sXG4gICAgICAgICAgICBzZWxlY3RlZDogaSA9PT0gc2VsZWN0ZWRJbmRleCxcbiAgICAgICAgICAgIGZvY3VzZWQ6IGkgPT09IGZvY3VzZWRJbmRleCxcbiAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgIH1cbiAgICAgICAgXCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gIDwva2lyYnktY2FyZD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjZGVmYXVsdEl0ZW1UZW1wbGF0ZVxuICBsZXQtaXRlbVxuICBsZXQtc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiXG4gIGxldC1pbmRleD1cImluZGV4XCJcbiAgbGV0LWZvY3VzZWQ9XCJmb2N1c2VkXCJcbj5cbiAgPGtpcmJ5LWl0ZW1cbiAgICBbc2VsZWN0YWJsZV09XCJ0cnVlXCJcbiAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRcIlxuICAgIChjbGljayk9XCJvbkl0ZW1TZWxlY3QoaW5kZXgpXCJcbiAgICBbY2xhc3MuZm9jdXNlZF09XCJmb2N1c2VkXCJcbiAgICByb2xlPVwib3B0aW9uXCJcbiAgICBbYXR0ci5pZF09XCJfbGlzdGJveElkICsgJy1pdGVtLScgKyBpbmRleFwiXG4gICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJzZWxlY3RlZFwiXG4gID5cbiAgICA8IS0tIFRhYmluZGV4IGZpeGVzIGlzc3VlIHdpdGggcG9wb3ZlciBkcm9wZG93biBub3Qgd29ya2luZyBpbiBzYWZhcmkgLS0+XG4gICAgPHAgY2xhc3M9XCJraXJieS1pdGVtLXRpdGxlXCI+e3sgZ2V0VGV4dEZyb21JdGVtKGl0ZW0pIH19PC9wPlxuICAgIEBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgIDxraXJieS1pY29uIG5hbWU9XCJjaGVja21hcmstc2VsZWN0ZWRcIiBzbG90PVwiZW5kXCI+PC9raXJieS1pY29uPlxuICAgIH1cbiAgPC9raXJieS1pdGVtPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\nimport { CardModule } from '@kirbydesign/designsystem/card';\nimport { FormFieldModule } from '@kirbydesign/designsystem/form-field';\nimport { IconModule } from '@kirbydesign/designsystem/icon';\nimport { ItemModule } from '@kirbydesign/designsystem/item';\nimport { PopoverComponent } from '@kirbydesign/designsystem/popover';\nimport { ListItemTemplateDirective, ListModule } from '@kirbydesign/designsystem/list';\nimport { DropdownComponent } from './dropdown.component';\nimport { KeyboardHandlerService } from './keyboard-handler.service';\nimport * as i0 from \"@angular/core\";\nconst declarations = [DropdownComponent];\nexport class DropdownModule {\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: DropdownModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.1\", ngImport: i0, type: DropdownModule, declarations: [DropdownComponent], imports: [CardModule,\n IconModule,\n ItemModule,\n FormFieldModule,\n PopoverComponent,\n ButtonComponent,\n CommonModule,\n ListModule], exports: [DropdownComponent, ListItemTemplateDirective] }); }\n /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: DropdownModule, providers: [KeyboardHandlerService], imports: [CardModule,\n IconModule,\n ItemModule,\n FormFieldModule,\n PopoverComponent,\n ButtonComponent,\n CommonModule,\n ListModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: DropdownModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n CardModule,\n IconModule,\n ItemModule,\n FormFieldModule,\n PopoverComponent,\n ButtonComponent,\n CommonModule,\n ListModule,\n ],\n declarations: [...declarations],\n exports: [...declarations, ListItemTemplateDirective],\n providers: [KeyboardHandlerService],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZHJvcGRvd24vc3JjL2Ryb3Bkb3duLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFFcEUsTUFBTSxZQUFZLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBaUJ6QyxNQUFNLE9BQU8sY0FBYztpSUFBZCxjQUFjO2tJQUFkLGNBQWMsaUJBakJMLGlCQUFpQixhQUluQyxVQUFVO1lBQ1YsVUFBVTtZQUNWLFVBQVU7WUFDVixlQUFlO1lBQ2YsZ0JBQWdCO1lBQ2hCLGVBQWU7WUFDZixZQUFZO1lBQ1osVUFBVSxhQVhRLGlCQUFpQixFQWNWLHlCQUF5QjtrSUFHekMsY0FBYyxhQUZkLENBQUMsc0JBQXNCLENBQUMsWUFYakMsVUFBVTtZQUNWLFVBQVU7WUFDVixVQUFVO1lBQ1YsZUFBZTtZQUNmLGdCQUFnQjtZQUNoQixlQUFlO1lBQ2YsWUFBWTtZQUNaLFVBQVU7OzJGQU1ELGNBQWM7a0JBZjFCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixVQUFVO3dCQUNWLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLFlBQVk7d0JBQ1osVUFBVTtxQkFDWDtvQkFDRCxZQUFZLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQztvQkFDL0IsT0FBTyxFQUFFLENBQUMsR0FBRyxZQUFZLEVBQUUseUJBQXlCLENBQUM7b0JBQ3JELFNBQVMsRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2J1dHRvbic7XG5pbXBvcnQgeyBDYXJkTW9kdWxlIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9jYXJkJztcbmltcG9ydCB7IEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBJY29uTW9kdWxlIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9pY29uJztcbmltcG9ydCB7IEl0ZW1Nb2R1bGUgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2l0ZW0nO1xuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vcG9wb3Zlcic7XG5cbmltcG9ydCB7IExpc3RJdGVtVGVtcGxhdGVEaXJlY3RpdmUsIExpc3RNb2R1bGUgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2xpc3QnO1xuaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuL2Ryb3Bkb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBLZXlib2FyZEhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnLi9rZXlib2FyZC1oYW5kbGVyLnNlcnZpY2UnO1xuXG5jb25zdCBkZWNsYXJhdGlvbnMgPSBbRHJvcGRvd25Db21wb25lbnRdO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQ2FyZE1vZHVsZSxcbiAgICBJY29uTW9kdWxlLFxuICAgIEl0ZW1Nb2R1bGUsXG4gICAgRm9ybUZpZWxkTW9kdWxlLFxuICAgIFBvcG92ZXJDb21wb25lbnQsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBMaXN0TW9kdWxlLFxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFsuLi5kZWNsYXJhdGlvbnNdLFxuICBleHBvcnRzOiBbLi4uZGVjbGFyYXRpb25zLCBMaXN0SXRlbVRlbXBsYXRlRGlyZWN0aXZlXSxcbiAgcHJvdmlkZXJzOiBbS2V5Ym9hcmRIYW5kbGVyU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIERyb3Bkb3duTW9kdWxlIHt9XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './public_api';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2lyYnlkZXNpZ24tZGVzaWduc3lzdGVtLWRyb3Bkb3duLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZHJvcGRvd24vc3JjL2tpcmJ5ZGVzaWduLWRlc2lnbnN5c3RlbS1kcm9wZG93bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuIl19"],"names":["i1.KeyboardHandlerService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kirbydesign-designsystem-dropdown.mjs","sources":["../tmp-esm2022/dropdown/dropdown.types.js","../tmp-esm2022/dropdown/keyboard-handler.service.js","../tmp-esm2022/dropdown/dropdown.component.js","../tmp-esm2022/dropdown/dropdown.module.js","../tmp-esm2022/dropdown/kirbydesign-designsystem-dropdown.js"],"sourcesContent":["export var OpenState;\n(function (OpenState) {\n OpenState[OpenState[\"closed\"] = 0] = \"closed\";\n OpenState[OpenState[\"opening\"] = 1] = \"opening\";\n OpenState[OpenState[\"open\"] = 2] = \"open\";\n})(OpenState || (OpenState = {}));\nexport var VerticalDirection;\n(function (VerticalDirection) {\n VerticalDirection[VerticalDirection[\"up\"] = 0] = \"up\";\n VerticalDirection[VerticalDirection[\"down\"] = 1] = \"down\";\n})(VerticalDirection || (VerticalDirection = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24udHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9kcm9wZG93bi9zcmMvZHJvcGRvd24udHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksU0FJWDtBQUpELFdBQVksU0FBUztJQUNuQiw2Q0FBTSxDQUFBO0lBQ04sK0NBQU8sQ0FBQTtJQUNQLHlDQUFJLENBQUE7QUFDTixDQUFDLEVBSlcsU0FBUyxLQUFULFNBQVMsUUFJcEI7QUFFRCxNQUFNLENBQU4sSUFBWSxpQkFHWDtBQUhELFdBQVksaUJBQWlCO0lBQzNCLHFEQUFFLENBQUE7SUFDRix5REFBSSxDQUFBO0FBQ04sQ0FBQyxFQUhXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFHNUIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBPcGVuU3RhdGUge1xuICBjbG9zZWQsXG4gIG9wZW5pbmcsXG4gIG9wZW4sXG59XG5cbmV4cG9ydCBlbnVtIFZlcnRpY2FsRGlyZWN0aW9uIHtcbiAgdXAsXG4gIGRvd24sXG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class KeyboardHandlerService {\n handle(event, selectedIndex, maxIndex, cyclicIndex = false) {\n let newIndex = -1;\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowLeft':\n if (selectedIndex === 0 && cyclicIndex) {\n newIndex = maxIndex;\n }\n else {\n // Select previous item:\n newIndex = selectedIndex - 1;\n }\n break;\n case 'ArrowDown':\n case 'ArrowRight':\n if (selectedIndex === undefined || (selectedIndex === maxIndex && cyclicIndex)) {\n // None selected, select first item:\n newIndex = 0;\n }\n else if (selectedIndex < maxIndex) {\n // Select next item:\n newIndex = selectedIndex + 1;\n }\n break;\n case 'Home':\n // Select first item:\n newIndex = 0;\n break;\n case 'End':\n // Select last item:\n newIndex = maxIndex;\n break;\n default:\n break;\n }\n return newIndex;\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: KeyboardHandlerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: KeyboardHandlerService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: KeyboardHandlerService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQtaGFuZGxlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZHJvcGRvd24vc3JjL2tleWJvYXJkLWhhbmRsZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLE1BQU0sQ0FBQyxLQUFvQixFQUFFLGFBQXFCLEVBQUUsUUFBZ0IsRUFBRSxXQUFXLEdBQUcsS0FBSztRQUN2RixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsQixRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNsQixLQUFLLFNBQVMsQ0FBQztZQUNmLEtBQUssV0FBVztnQkFDZCxJQUFJLGFBQWEsS0FBSyxDQUFDLElBQUksV0FBVyxFQUFFLENBQUM7b0JBQ3ZDLFFBQVEsR0FBRyxRQUFRLENBQUM7Z0JBQ3RCLENBQUM7cUJBQU0sQ0FBQztvQkFDTix3QkFBd0I7b0JBQ3hCLFFBQVEsR0FBRyxhQUFhLEdBQUcsQ0FBQyxDQUFDO2dCQUMvQixDQUFDO2dCQUNELE1BQU07WUFDUixLQUFLLFdBQVcsQ0FBQztZQUNqQixLQUFLLFlBQVk7Z0JBQ2YsSUFBSSxhQUFhLEtBQUssU0FBUyxJQUFJLENBQUMsYUFBYSxLQUFLLFFBQVEsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDO29CQUMvRSxvQ0FBb0M7b0JBQ3BDLFFBQVEsR0FBRyxDQUFDLENBQUM7Z0JBQ2YsQ0FBQztxQkFBTSxJQUFJLGFBQWEsR0FBRyxRQUFRLEVBQUUsQ0FBQztvQkFDcEMsb0JBQW9CO29CQUNwQixRQUFRLEdBQUcsYUFBYSxHQUFHLENBQUMsQ0FBQztnQkFDL0IsQ0FBQztnQkFDRCxNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULHFCQUFxQjtnQkFDckIsUUFBUSxHQUFHLENBQUMsQ0FBQztnQkFDYixNQUFNO1lBQ1IsS0FBSyxLQUFLO2dCQUNSLG9CQUFvQjtnQkFDcEIsUUFBUSxHQUFHLFFBQVEsQ0FBQztnQkFDcEIsTUFBTTtZQUNSO2dCQUNFLE1BQU07UUFDVixDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztpSUFuQ1Usc0JBQXNCO3FJQUF0QixzQkFBc0IsY0FGckIsTUFBTTs7MkZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEtleWJvYXJkSGFuZGxlclNlcnZpY2Uge1xuICBoYW5kbGUoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHNlbGVjdGVkSW5kZXg6IG51bWJlciwgbWF4SW5kZXg6IG51bWJlciwgY3ljbGljSW5kZXggPSBmYWxzZSkge1xuICAgIGxldCBuZXdJbmRleCA9IC0xO1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIGlmIChzZWxlY3RlZEluZGV4ID09PSAwICYmIGN5Y2xpY0luZGV4KSB7XG4gICAgICAgICAgbmV3SW5kZXggPSBtYXhJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTZWxlY3QgcHJldmlvdXMgaXRlbTpcbiAgICAgICAgICBuZXdJbmRleCA9IHNlbGVjdGVkSW5kZXggLSAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA9PT0gdW5kZWZpbmVkIHx8IChzZWxlY3RlZEluZGV4ID09PSBtYXhJbmRleCAmJiBjeWNsaWNJbmRleCkpIHtcbiAgICAgICAgICAvLyBOb25lIHNlbGVjdGVkLCBzZWxlY3QgZmlyc3QgaXRlbTpcbiAgICAgICAgICBuZXdJbmRleCA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRJbmRleCA8IG1heEluZGV4KSB7XG4gICAgICAgICAgLy8gU2VsZWN0IG5leHQgaXRlbTpcbiAgICAgICAgICBuZXdJbmRleCA9IHNlbGVjdGVkSW5kZXggKyAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICAgIC8vIFNlbGVjdCBmaXJzdCBpdGVtOlxuICAgICAgICBuZXdJbmRleCA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRW5kJzpcbiAgICAgICAgLy8gU2VsZWN0IGxhc3QgaXRlbTpcbiAgICAgICAgbmV3SW5kZXggPSBtYXhJbmRleDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG5ld0luZGV4O1xuICB9XG59XG4iXX0=","import { Component, ContentChild, ContentChildren, ElementRef, EventEmitter, forwardRef, HostBinding, HostListener, Input, Output, RendererStyleFlags2, TemplateRef, ViewChild, ViewChildren, } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CardComponent } from '@kirbydesign/designsystem/card';\nimport { DesignTokenHelper, StringSearchHelper, UniqueIdGenerator, } from '@kirbydesign/designsystem/helpers';\nimport { ItemComponent } from '@kirbydesign/designsystem/item';\nimport { ListItemTemplateDirective } from '@kirbydesign/designsystem/list';\nimport { HorizontalDirection, PopoverComponent } from '@kirbydesign/designsystem/popover';\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\nimport { forwardAttributes } from '@kirbydesign/designsystem/shared';\nimport { OpenState, VerticalDirection } from './dropdown.types';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./keyboard-handler.service\";\nimport * as i2 from \"@kirbydesign/designsystem/shared\";\nimport * as i3 from \"@kirbydesign/designsystem/card\";\nimport * as i4 from \"@kirbydesign/designsystem/icon\";\nimport * as i5 from \"@kirbydesign/designsystem/item\";\nimport * as i6 from \"@kirbydesign/designsystem/popover\";\nimport * as i7 from \"@kirbydesign/designsystem/button\";\nimport * as i8 from \"@angular/common\";\nexport class DropdownComponent {\n static { this.OPEN_DELAY_IN_MS = 100; }\n get items() {\n return this._items;\n }\n set items(value) {\n this._items = value;\n this._value = this.items[this.selectedIndex] || null;\n }\n get selectedIndex() {\n return this._selectedIndex;\n }\n set selectedIndex(value) {\n if (value !== undefined && this._selectedIndex != value) {\n this._selectedIndex = value;\n this.focusedIndex = this._selectedIndex;\n this._value = this.items[this.selectedIndex] || null;\n }\n }\n get focusedIndex() {\n return this._focusedIndex;\n }\n set focusedIndex(value) {\n if (this._focusedIndex !== value) {\n this._focusedIndex = value;\n this.scrollItemIntoView(this._focusedIndex);\n }\n }\n set popout(direction) {\n this.horizontalDirection = direction || HorizontalDirection.right;\n }\n get popout() {\n return this.horizontalDirection;\n }\n get _isDisabled() {\n return this.disabled ? 'disabled' : null;\n }\n get _tabindex() {\n return this.disabled ? -1 : this.tabindex;\n }\n // Prevent Ionic blur on scroll\n get _noBlurOnScroll() {\n return true;\n }\n get value() {\n return this._value;\n }\n get selectedText() {\n return this.getTextFromItem(this.value);\n }\n get _isBlockLevel() {\n return this.expand === 'block';\n }\n get _isOpening() {\n return this.state === OpenState.opening;\n }\n get isOpen() {\n return this.state === OpenState.open;\n }\n get _popoutLeft() {\n return this.horizontalDirection === HorizontalDirection.left;\n }\n get _popoutUp() {\n return this.verticalDirection === VerticalDirection.up;\n }\n forwardAriaLabelToDropdownButton() {\n forwardAttributes(this.elementRef.nativeElement, this._attributesToForward, this.renderer, this.buttonElement.nativeElement);\n }\n set kirbyItemsSlotted(kirbyItems) {\n const hasSlottedItems = this.disposeItemClickListeners?.length > 0;\n if (hasSlottedItems) {\n this.unlistenAllSlottedItems();\n }\n // Setup a click listener for each new slotted items\n kirbyItems.forEach((kirbyItem, index) => {\n this.renderer.setAttribute(kirbyItem.nativeElement, 'role', 'option');\n const disposeClickListener = this.renderer.listen(kirbyItem.nativeElement, 'click', () => {\n this.onItemSelect(index);\n });\n this.disposeItemClickListeners.push(disposeClickListener);\n });\n this._kirbyItemsSlotted = kirbyItems;\n }\n get kirbyItemsSlotted() {\n return this._kirbyItemsSlotted;\n }\n constructor(renderer, elementRef, changeDetectorRef, keyboardHandlerService, resizeObserverService) {\n this.renderer = renderer;\n this.elementRef = elementRef;\n this.changeDetectorRef = changeDetectorRef;\n this.keyboardHandlerService = keyboardHandlerService;\n this.resizeObserverService = resizeObserverService;\n this.state = OpenState.closed;\n this.horizontalDirection = HorizontalDirection.right;\n this.verticalDirection = VerticalDirection.down;\n this._attributesToForward = ['aria-label', 'aria-labelledby'];\n this._listboxId = UniqueIdGenerator.scopedTo('kirby-dropdown').next();\n this._comboboxId = UniqueIdGenerator.scopedTo('kirby-button').next();\n this._items = [];\n this._selectedIndex = -1;\n // _focusedIndex keeps track of which element has focus and will be selected\n // if it is activated (by pressing ENTER or SPACE key)\n this._focusedIndex = 0;\n this.itemTextProperty = 'text';\n this.placeholder = 'Please select:';\n this.attentionLevel = '3';\n this.disabled = false;\n this.size = 'md';\n this.tabindex = 0;\n this.usePopover = false;\n /**\n * Emitted when an item is selected (tap on mobile, click/keypress on web)\n */\n this.change = new EventEmitter();\n this._value = null;\n /* The 'clicked' class is applied through Hostbinding to prevent the dropdown from getting a focus ring on click.\n There is a bug that causes the dropdown to get a focus ring on click, if it is the first element that is interacted with\n after the page is loaded. If the user interacts with any other element before, then the dropdown won't get a focus ring.\n See issue: https://github.com/kirbydesign/designsystem/issues/2477.\n \n This solution can potentially be refactored, when popover is not experimental anymore. Then it could be possible\n to close the dropdown when the popover backdrop is clicked, instead of relying on the blur event, which is utilized\n by this line below: this.elementRef.nativeElement.focus(). Right now this forces the blur event to be triggered, when\n clicking outside of the dropdown.\n */\n this.clicked = false;\n this.disposeItemClickListeners = [];\n this.searchBuffer = '';\n this.SEARCH_BUFFER_DELAY = 500; // ms\n this._onChange = () => { };\n this._onTouched = () => { };\n }\n onToggle(event) {\n event.stopPropagation();\n this.clicked = true;\n this.toggle();\n }\n toggle() {\n if (this.disabled) {\n return;\n }\n this.isOpen ? this.close() : this.open();\n }\n /* Utility that makes it easier to set styles on card element\n when using popover*/\n setPopoverCardStyle(style, value) {\n if (!this.usePopover)\n return;\n this.renderer.setStyle(this.cardElement.nativeElement, style, value, RendererStyleFlags2.DashCase);\n }\n ngAfterViewInit() {\n if (this.usePopover && this.expand === 'block') {\n const { width: initialWidth } = this.elementRef.nativeElement.getBoundingClientRect();\n this.setPopoverCardStyle('max-width', 'initial');\n this.setPopoverCardStyle('min-width', 'initial');\n // Ensure initial width is set even if the resize observer callback also fires initially:\n this.setPopoverCardStyle('--kirby-card-width', `${initialWidth}px`);\n this.resizeObserverService.observe(this.elementRef, (entry) => {\n const newWidth = entry.contentRect.width;\n if (newWidth > 0) {\n this.setPopoverCardStyle('--kirby-card-width', `${newWidth}px`);\n }\n });\n }\n this.forwardAriaLabelToDropdownButton();\n this.initializeAlignment();\n }\n initializeAlignment() {\n if (this.usePopover)\n return;\n if (!this.intersectionObserverRef) {\n // Get the design token size of the button. In the button stylesheet a medium button height is utils.size(xl)\n // and a small button height is utils.size(\"l\")\n const designTokenSizeHeight = this.size === 'md' ? 'xl' : 'l';\n // Setting the rootMargin equal to the height of the button\n // allows the Intersection Observer Callback to be called\n // even if the dropdown button is intersecting with the viewport\n const options = {\n rootMargin: DesignTokenHelper.size(designTokenSizeHeight),\n };\n const callback = (entries) => {\n // Only apply alignment when opening:\n if (this.state !== OpenState.opening) {\n return;\n }\n // Cancel any pending timer to show dropdown:\n clearTimeout(this.showDropdownTimeoutId);\n const entry = entries[0];\n const isVisible = entry.boundingClientRect.width > 0;\n if (isVisible && entry.intersectionRatio < 1) {\n this.setHorizontalDirection(entry);\n this.setVerticalDirection(entry);\n }\n this.showDropdown();\n this.changeDetectorRef.detectChanges();\n };\n this.intersectionObserverRef = new IntersectionObserver(callback, options);\n this.intersectionObserverRef.observe(this.cardElement.nativeElement);\n }\n }\n setHorizontalDirection(entry) {\n // If popout direction is set to right, and the entry is cut off to the right by ${entry.boundingClientRect.right - entry.intersectionRect.right}px\n // it is set to popout left instead, and vice versa for popout direction left\n if (this.horizontalDirection === HorizontalDirection.right) {\n if (entry.boundingClientRect.right > entry.rootBounds.right) {\n this.horizontalDirection = HorizontalDirection.left;\n }\n }\n else {\n if (entry.boundingClientRect.left < entry.rootBounds.left) {\n this.horizontalDirection = HorizontalDirection.right;\n }\n }\n }\n setVerticalDirection(entry) {\n if (entry.boundingClientRect.top < 0) {\n // entry is cut off at the top by ${entry.boundingClientRect.top}px\n // open downwards:\n this.verticalDirection = VerticalDirection.down;\n }\n if (entry.boundingClientRect.bottom > entry.rootBounds.bottom) {\n // entry is cut off at the bottom by ${entry.boundingClientRect.bottom - entry.intersectionRect.bottom}px\n const containerOffsetTop = this.elementRef.nativeElement.getBoundingClientRect().top;\n const SPACING = 5; //TODO: Get from SCSS\n // Check if the card can fit on top of button:\n if (containerOffsetTop > entry.target.clientHeight + SPACING) {\n // open upwards:\n this.verticalDirection = VerticalDirection.up;\n }\n }\n }\n open() {\n if (this.disabled) {\n return;\n }\n if (!this.isOpen) {\n this.state = OpenState.opening;\n // ensures that the dropdown is opened in case the IntersectionObserverCallback isn't invoked\n this.showDropdownTimeoutId = setTimeout(() => this.showDropdown(), DropdownComponent.OPEN_DELAY_IN_MS);\n // Move focus to selected item (if any) or first item\n this.focusedIndex = this.selectedIndex > -1 ? this.selectedIndex : 0;\n }\n }\n showDropdown() {\n if (this.state === OpenState.opening) {\n this.state = OpenState.open;\n this.popover?.show();\n this.scrollItemIntoView(this.focusedIndex);\n this.changeDetectorRef.markForCheck();\n }\n }\n close() {\n if (this.disabled) {\n return;\n }\n if (this.isOpen) {\n this.state = OpenState.closed;\n // Reset vertical direction to default\n this.verticalDirection = VerticalDirection.down;\n this.popover?.hide();\n }\n }\n onItemSelect(index) {\n this.selectItem(index);\n this.close();\n }\n /**\n * Sets the select's value. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param value New value to be written to the model.\n */\n writeValue(value) {\n this._selectItemByValue(value);\n }\n /**\n * Saves a callback function to be invoked when the select's value\n * changes from user input. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the value changes.\n */\n registerOnChange(fn) {\n this._onChange = fn;\n }\n /**\n * Saves a callback function to be invoked when the select is blurred\n * by the user. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the component has been touched.\n */\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n /**\n * Disables the select. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param isDisabled Sets whether the component is disabled.\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n selectItem(index) {\n if (index != this.selectedIndex) {\n this.selectedIndex = index;\n this.focusedIndex = index;\n this.change.emit(this.value);\n this._onChange(this.value);\n }\n }\n _selectItemByValue(value) {\n this.selectedIndex = this.items.indexOf(value);\n }\n getTextFromItem(item) {\n if (!item) {\n return null;\n }\n return typeof item === 'string' ? item : item[this.itemTextProperty];\n }\n scrollItemIntoView(index) {\n const kirbyItems = this.kirbyItemsSlotted && this.kirbyItemsSlotted.length\n ? this.kirbyItemsSlotted\n : this.kirbyItemsDefault;\n if (kirbyItems && kirbyItems.length) {\n const selectedKirbyItem = kirbyItems.toArray()[index];\n if (selectedKirbyItem && selectedKirbyItem.nativeElement) {\n const itemElement = selectedKirbyItem.nativeElement;\n itemElement.scrollIntoView({ block: 'nearest' });\n }\n }\n }\n _onTab() {\n if (this.isOpen) {\n this.selectItem(this.focusedIndex);\n this.close();\n }\n if (this.clicked) {\n // Remove the 'clicked' class (Hostbinding) if the user has previously opened the dropdown by clicking,\n // since the class prevents the focus ring from showing,\n // which is expected to happen, when using the tab key\n this.clicked = false;\n }\n }\n preventDefaultAndStopImmediatePropagation(event) {\n event.stopImmediatePropagation();\n event.preventDefault();\n }\n addToSearchBuffer(char) {\n clearTimeout(this.searchBufferTimeout);\n this.searchBuffer += char;\n this.searchBufferTimeout = setTimeout(() => {\n this.resetSearchBuffer();\n }, this.SEARCH_BUFFER_DELAY);\n }\n resetSearchBuffer() {\n this.searchBuffer = '';\n }\n _onKeydown(event) {\n const key = event.key;\n if (this.items.length === 0) {\n console.warn('[Kirby] No items found within dropdown');\n return;\n }\n if (this.disabled)\n return;\n if (StringSearchHelper.isPrintableCharacter(key)) {\n this.handlePrintableCharacterKey(event, this.isOpen);\n }\n // ALT + ArrowDown: Open dropdown\n if (key === 'ArrowDown' && event.altKey) {\n this.preventDefaultAndStopImmediatePropagation(event);\n if (!this.isOpen) {\n this.open();\n this.focusedIndex = this.selectedIndex > -1 ? this.selectedIndex : 0;\n }\n return;\n }\n // ALT + ArrowUp: Select focused item and close dropdown\n if (key === 'ArrowUp' && event.altKey) {\n this.preventDefaultAndStopImmediatePropagation(event);\n if (this.focusedIndex > -1) {\n this.selectItem(this.focusedIndex);\n this.close();\n }\n }\n // PageUp: Jump up 10 options or to first\n if (key === 'PageUp') {\n this.preventDefaultAndStopImmediatePropagation(event);\n if (!this.isOpen) {\n this.open();\n }\n this.focusedIndex = Math.max(0, this.focusedIndex - 10);\n return;\n }\n // PageDown: Jump down 10 options or to last\n if (key === 'PageDown') {\n this.preventDefaultAndStopImmediatePropagation(event);\n if (!this.isOpen) {\n this.open();\n }\n this.focusedIndex = Math.min(this.items.length - 1, this.focusedIndex + 10);\n return;\n }\n }\n handlePrintableCharacterKey(event, isOpen) {\n const key = event.key;\n if (isOpen) {\n this.preventDefaultAndStopImmediatePropagation(event);\n }\n else {\n this.open();\n }\n // If the same character is typed twice, the search buffer should only contain that character once\n if (this.searchBuffer.length === 1 &&\n this.searchBuffer[0].toLowerCase() === key.toLowerCase()) {\n this.searchBuffer = key;\n }\n else {\n this.addToSearchBuffer(key);\n }\n const isMultiCharSearch = this.searchBuffer.length > 1;\n let startIndex = 0;\n if (!isMultiCharSearch && this.isOpen) {\n startIndex = this.focusedIndex + 1;\n }\n let foundItemIndex = this.getIndexOfItemByFirstCharacter(this.searchBuffer, startIndex);\n if (foundItemIndex === -1 && isMultiCharSearch) {\n foundItemIndex = this.getIndexOfItemByFirstCharacter(key, startIndex);\n }\n if (foundItemIndex === -1 && !isMultiCharSearch && this.isOpen) {\n foundItemIndex = this.getIndexOfItemByFirstCharacter(this.searchBuffer, 0);\n }\n if (foundItemIndex > -1) {\n this.focusedIndex = foundItemIndex;\n }\n }\n getIndexOfItemByFirstCharacter(char, startIndex = 0) {\n let itemTexts;\n // Prefer slotted/projected items if present\n if (this.kirbyItemsSlotted && this.kirbyItemsSlotted.length) {\n itemTexts = this.kirbyItemsSlotted\n .toArray()\n .map((ref) => ref.nativeElement.textContent?.trim() ?? '');\n }\n else {\n itemTexts = this.items.map((item) => this.getTextFromItem(item) ?? '');\n }\n return StringSearchHelper.getIndexByFirstMatchingStartString(char, itemTexts, startIndex);\n }\n _onMouseDown(event) {\n if (this.disabled) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }\n _onTouchStart(event) {\n if (this.isOpen) {\n event.stopPropagation();\n }\n }\n _onFocus() {\n if (this.disabled) {\n this.elementRef.nativeElement.blur();\n }\n }\n _onPopoverWillHide() {\n this.state = OpenState.closed;\n this.elementRef.nativeElement.focus();\n }\n _onEnterOrEscape() {\n this.close();\n this._onTouched();\n }\n _onPopoverClick() {\n this.close();\n }\n _onBlur() {\n if (this.usePopover)\n return;\n this.close();\n this._onTouched();\n }\n _onEnterOrSpace(event) {\n event.preventDefault();\n event.stopPropagation();\n if (this.isOpen) {\n this.selectItem(this.focusedIndex);\n }\n this.toggle();\n }\n _onArrowKeys(event) {\n if (this.disabled)\n return false;\n // Mirror default HTML5 select behaviour - prevent left/right arrows when open:\n if (this.isOpen && (event.key === 'ArrowLeft' || event.key === 'ArrowRight')) {\n return false;\n }\n if (!this.isOpen) {\n // Avoid page scroll\n event.preventDefault();\n this.open();\n // If no selected item then focus first or last item\n if (!event.altKey && this.selectedIndex < 0) {\n switch (event.key) {\n case 'ArrowUp':\n this.focusedIndex = 0;\n break;\n case 'ArrowDown':\n this.focusedIndex = this.items.length - 1;\n break;\n default:\n break;\n }\n }\n return false;\n }\n const newFocusedIndex = this.keyboardHandlerService.handle(event, this.focusedIndex, this.items.length - 1);\n if (newFocusedIndex > -1) {\n this.focusedIndex = newFocusedIndex;\n }\n return false;\n }\n _onHomeEndKeys(event) {\n if (this.disabled)\n return;\n if (!this.isOpen) {\n event.preventDefault();\n this.open();\n }\n const newFocusedIndex = this.keyboardHandlerService.handle(event, this.focusedIndex, this.items.length - 1);\n if (newFocusedIndex > -1) {\n this.focusedIndex = newFocusedIndex;\n }\n return false;\n }\n unlistenAllSlottedItems() {\n let disposeClickListener;\n while ((disposeClickListener = this.disposeItemClickListeners.pop()) !== undefined) {\n disposeClickListener();\n }\n }\n ngOnDestroy() {\n this.unlistenAllSlottedItems();\n this.resizeObserverService.unobserve(this.elementRef);\n if (this.intersectionObserverRef) {\n this.intersectionObserverRef.disconnect();\n }\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: DropdownComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.KeyboardHandlerService }, { token: i2.ResizeObserverService }], target: i0.ɵɵFactoryTarget.Component }); }\n /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.2\", type: DropdownComponent, isStandalone: false, selector: \"kirby-dropdown\", inputs: { items: \"items\", selectedIndex: \"selectedIndex\", focusedIndex: \"focusedIndex\", itemTextProperty: \"itemTextProperty\", placeholder: \"placeholder\", popout: \"popout\", attentionLevel: \"attentionLevel\", expand: \"expand\", disabled: \"disabled\", hasError: \"hasError\", size: \"size\", tabindex: \"tabindex\", usePopover: \"usePopover\" }, outputs: { change: \"change\" }, host: { listeners: { \"keydown.tab\": \"_onTab()\", \"keydown\": \"_onKeydown($event)\", \"mousedown\": \"_onMouseDown($event)\", \"touchstart\": \"_onTouchStart($event)\", \"focus\": \"_onFocus()\", \"keydown.enter\": \"_onEnterOrSpace($event)\", \"keydown.escape\": \"_onEnterOrEscape()\", \"blur\": \"_onBlur($event)\", \"keydown.space\": \"_onEnterOrSpace($event)\", \"keydown.arrowup\": \"_onArrowKeys($event)\", \"keydown.arrowdown\": \"_onArrowKeys($event)\", \"keydown.arrowleft\": \"_onArrowKeys($event)\", \"keydown.arrowright\": \"_onArrowKeys($event)\", \"keydown.home\": \"_onHomeEndKeys($event)\", \"keydown.end\": \"_onHomeEndKeys($event)\" }, properties: { \"attr.disabled\": \"this._isDisabled\", \"class.error\": \"this.hasError\", \"class.with-popover\": \"this.usePopover\", \"attr.no-blur\": \"this._noBlurOnScroll\", \"class.expand\": \"this._isBlockLevel\", \"class.is-opening\": \"this._isOpening\", \"class.is-open\": \"this.isOpen\", \"class.popout-left\": \"this._popoutLeft\", \"class.popout-up\": \"this._popoutUp\", \"class.clicked\": \"this.clicked\" } }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((() => DropdownComponent)),\n multi: true,\n },\n ], queries: [{ propertyName: \"itemTemplate\", first: true, predicate: ListItemTemplateDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: \"slottedItems\", predicate: ListItemTemplateDirective, read: ElementRef }, { propertyName: \"kirbyItemsSlotted\", predicate: ItemComponent, read: ElementRef }], viewQueries: [{ propertyName: \"cardElement\", first: true, predicate: CardComponent, descendants: true, read: ElementRef }, { propertyName: \"popover\", first: true, predicate: PopoverComponent, descendants: true }, { propertyName: \"buttonElement\", first: true, predicate: ButtonComponent, descendants: true, read: ElementRef, static: true }, { propertyName: \"kirbyItemsDefault\", predicate: ItemComponent, descendants: true, read: ElementRef }], ngImport: i0, template: \"<button\\n kirby-button\\n type=\\\"button\\\"\\n [attr.id]=\\\"_comboboxId\\\"\\n role=\\\"combobox\\\"\\n aria-haspopup=\\\"listbox\\\"\\n [attr.aria-controls]=\\\"_listboxId\\\"\\n [attr.aria-expanded]=\\\"isOpen\\\"\\n [attr.aria-activedescendant]=\\\"_listboxId + '-item-' + focusedIndex\\\"\\n [size]=\\\"size\\\"\\n [attentionLevel]=\\\"attentionLevel\\\"\\n (click)=\\\"onToggle($event)\\\"\\n [disabled]=\\\"disabled\\\"\\n>\\n <span class=\\\"text\\\">{{ selectedText || placeholder }}</span>\\n <kirby-icon [name]=\\\"isOpen ? 'arrow-up' : 'arrow-down'\\\"></kirby-icon>\\n</button>\\n\\n<ng-container *ngTemplateOutlet=\\\"usePopover ? popoverTemplate : itemWrapperTemplate\\\"></ng-container>\\n\\n<ng-template #popoverTemplate>\\n <kirby-popover\\n [target]=\\\"buttonElement\\\"\\n [popout]=\\\"popout\\\"\\n (click)=\\\"_onPopoverClick()\\\"\\n (willHide)=\\\"_onPopoverWillHide()\\\"\\n >\\n <ng-container *ngTemplateOutlet=\\\"itemWrapperTemplate\\\"></ng-container>\\n </kirby-popover>\\n</ng-template>\\n\\n<ng-template #itemWrapperTemplate>\\n <kirby-card role=\\\"listbox\\\" [attr.id]=\\\"_listboxId\\\" [attr.aria-labelledby]=\\\"_comboboxId\\\">\\n @for (item of items; track item; let i = $index) {\\n <ng-container\\n *ngTemplateOutlet=\\\"\\n itemTemplate || defaultItemTemplate;\\n context: {\\n $implicit: item,\\n selected: i === selectedIndex,\\n focused: i === focusedIndex,\\n index: i,\\n }\\n \\\"\\n ></ng-container>\\n }\\n </kirby-card>\\n</ng-template>\\n\\n<ng-template\\n #defaultItemTemplate\\n let-item\\n let-selected=\\\"selected\\\"\\n let-index=\\\"index\\\"\\n let-focused=\\\"focused\\\"\\n>\\n <kirby-item\\n [selectable]=\\\"true\\\"\\n [selected]=\\\"selected\\\"\\n (click)=\\\"onItemSelect(index)\\\"\\n [class.focused]=\\\"focused\\\"\\n role=\\\"option\\\"\\n [attr.id]=\\\"_listboxId + '-item-' + index\\\"\\n [attr.aria-selected]=\\\"selected\\\"\\n >\\n <!-- Tabindex fixes issue with popover dropdown not working in safari -->\\n <p class=\\\"kirby-item-title\\\">{{ getTextFromItem(item) }}</p>\\n @if (selected) {\\n <kirby-icon name=\\\"checkmark-selected\\\" slot=\\\"end\\\"></kirby-icon>\\n }\\n </kirby-item>\\n</ng-template>\\n\", styles: [\"@media (hover: hover) and (pointer: fine){:host{outline:none;border-radius:999px}:host:focus{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}:host:focus:not(:focus-visible){box-shadow:0 0 0 0 transparent}:host:focus-visible{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}}:host{display:inline-block;position:relative;max-width:calc(100vw - 32px)}:host.clicked{box-shadow:none}:host.expand{display:block}:host.expand kirby-card{width:100%;min-width:initial;max-width:initial}:host.error>button,:host.ng-touched.ng-invalid>button{border-color:var(--kirby-danger)}:host>button{position:relative;margin:0;outline:none;width:100%;min-width:0}:host>button.attention-level2{border:1px solid transparent}:host>button .text{overflow:hidden;text-overflow:ellipsis}:host kirby-card{display:none;opacity:0;position:absolute;z-index:800}:host.is-opening kirby-card{display:block}:host.is-open kirby-card{display:block;opacity:1}:host.is-open>button{box-shadow:0 0 5px #1c1c1c0a,0 10px 15px -10px #1c1c1c26}:host.popout-left kirby-card{right:0}:host.popout-up kirby-card{top:0;margin-top:-4px;transform:translateY(-100%)}:host.popout-up.is-open>button{z-index:801}kirby-popover{--max-height: 352px}kirby-card{max-height:352px;margin-block:4px;overflow-y:auto;box-shadow:0 0 5px #1c1c1c0a,0 10px 15px -10px #1c1c1c26;max-width:calc(100vw - 32px);min-width:288px}@media (min-width: 321px){kirby-card{min-width:343px}}@media (hover: hover){:host-context(kirby-calendar)>button:hover{--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black);cursor:pointer}}:host-context(kirby-calendar)>button:active,:host-context(kirby-calendar)>button.interaction-state-active{--state-layer-opacity: .16;--state-layer-background-color: var(--kirby-black)}:host-context(kirby-calendar)>button{border-color:transparent;font-weight:700;font-size:initial}:host-context(kirby-calendar).is-open>button{box-shadow:none}\\n\"], dependencies: [{ kind: \"component\", type: i3.CardComponent, selector: \"kirby-card\", inputs: [\"title\", \"subtitle\", \"backgroundImageUrl\", \"hasPadding\", \"sizes\", \"variant\"] }, { kind: \"component\", type: i4.IconComponent, selector: \"kirby-icon\", inputs: [\"size\", \"name\"] }, { kind: \"component\", type: i5.ItemComponent, selector: \"kirby-item\", inputs: [\"disabled\", \"selected\", \"disclosure\", \"selectable\", \"reorderable\", \"size\", \"href\", \"rotateIcon\"] }, { kind: \"component\", type: i6.PopoverComponent, selector: \"kirby-popover\", inputs: [\"popout\", \"target\"], outputs: [\"willHide\"] }, { kind: \"component\", type: i7.ButtonComponent, selector: \"button[kirby-button],Button[kirby-button],a[kirby-button]\", inputs: [\"attentionLevel\", \"noDecoration\", \"themeColor\", \"expand\", \"isFloating\", \"size\", \"showIconOnly\"] }, { kind: \"directive\", type: i8.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: DropdownComponent, decorators: [{\n type: Component,\n args: [{ selector: 'kirby-dropdown', providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((() => DropdownComponent)),\n multi: true,\n },\n ], standalone: false, template: \"<button\\n kirby-button\\n type=\\\"button\\\"\\n [attr.id]=\\\"_comboboxId\\\"\\n role=\\\"combobox\\\"\\n aria-haspopup=\\\"listbox\\\"\\n [attr.aria-controls]=\\\"_listboxId\\\"\\n [attr.aria-expanded]=\\\"isOpen\\\"\\n [attr.aria-activedescendant]=\\\"_listboxId + '-item-' + focusedIndex\\\"\\n [size]=\\\"size\\\"\\n [attentionLevel]=\\\"attentionLevel\\\"\\n (click)=\\\"onToggle($event)\\\"\\n [disabled]=\\\"disabled\\\"\\n>\\n <span class=\\\"text\\\">{{ selectedText || placeholder }}</span>\\n <kirby-icon [name]=\\\"isOpen ? 'arrow-up' : 'arrow-down'\\\"></kirby-icon>\\n</button>\\n\\n<ng-container *ngTemplateOutlet=\\\"usePopover ? popoverTemplate : itemWrapperTemplate\\\"></ng-container>\\n\\n<ng-template #popoverTemplate>\\n <kirby-popover\\n [target]=\\\"buttonElement\\\"\\n [popout]=\\\"popout\\\"\\n (click)=\\\"_onPopoverClick()\\\"\\n (willHide)=\\\"_onPopoverWillHide()\\\"\\n >\\n <ng-container *ngTemplateOutlet=\\\"itemWrapperTemplate\\\"></ng-container>\\n </kirby-popover>\\n</ng-template>\\n\\n<ng-template #itemWrapperTemplate>\\n <kirby-card role=\\\"listbox\\\" [attr.id]=\\\"_listboxId\\\" [attr.aria-labelledby]=\\\"_comboboxId\\\">\\n @for (item of items; track item; let i = $index) {\\n <ng-container\\n *ngTemplateOutlet=\\\"\\n itemTemplate || defaultItemTemplate;\\n context: {\\n $implicit: item,\\n selected: i === selectedIndex,\\n focused: i === focusedIndex,\\n index: i,\\n }\\n \\\"\\n ></ng-container>\\n }\\n </kirby-card>\\n</ng-template>\\n\\n<ng-template\\n #defaultItemTemplate\\n let-item\\n let-selected=\\\"selected\\\"\\n let-index=\\\"index\\\"\\n let-focused=\\\"focused\\\"\\n>\\n <kirby-item\\n [selectable]=\\\"true\\\"\\n [selected]=\\\"selected\\\"\\n (click)=\\\"onItemSelect(index)\\\"\\n [class.focused]=\\\"focused\\\"\\n role=\\\"option\\\"\\n [attr.id]=\\\"_listboxId + '-item-' + index\\\"\\n [attr.aria-selected]=\\\"selected\\\"\\n >\\n <!-- Tabindex fixes issue with popover dropdown not working in safari -->\\n <p class=\\\"kirby-item-title\\\">{{ getTextFromItem(item) }}</p>\\n @if (selected) {\\n <kirby-icon name=\\\"checkmark-selected\\\" slot=\\\"end\\\"></kirby-icon>\\n }\\n </kirby-item>\\n</ng-template>\\n\", styles: [\"@media (hover: hover) and (pointer: fine){:host{outline:none;border-radius:999px}:host:focus{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}:host:focus:not(:focus-visible){box-shadow:0 0 0 0 transparent}:host:focus-visible{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}}:host{display:inline-block;position:relative;max-width:calc(100vw - 32px)}:host.clicked{box-shadow:none}:host.expand{display:block}:host.expand kirby-card{width:100%;min-width:initial;max-width:initial}:host.error>button,:host.ng-touched.ng-invalid>button{border-color:var(--kirby-danger)}:host>button{position:relative;margin:0;outline:none;width:100%;min-width:0}:host>button.attention-level2{border:1px solid transparent}:host>button .text{overflow:hidden;text-overflow:ellipsis}:host kirby-card{display:none;opacity:0;position:absolute;z-index:800}:host.is-opening kirby-card{display:block}:host.is-open kirby-card{display:block;opacity:1}:host.is-open>button{box-shadow:0 0 5px #1c1c1c0a,0 10px 15px -10px #1c1c1c26}:host.popout-left kirby-card{right:0}:host.popout-up kirby-card{top:0;margin-top:-4px;transform:translateY(-100%)}:host.popout-up.is-open>button{z-index:801}kirby-popover{--max-height: 352px}kirby-card{max-height:352px;margin-block:4px;overflow-y:auto;box-shadow:0 0 5px #1c1c1c0a,0 10px 15px -10px #1c1c1c26;max-width:calc(100vw - 32px);min-width:288px}@media (min-width: 321px){kirby-card{min-width:343px}}@media (hover: hover){:host-context(kirby-calendar)>button:hover{--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black);cursor:pointer}}:host-context(kirby-calendar)>button:active,:host-context(kirby-calendar)>button.interaction-state-active{--state-layer-opacity: .16;--state-layer-background-color: var(--kirby-black)}:host-context(kirby-calendar)>button{border-color:transparent;font-weight:700;font-size:initial}:host-context(kirby-calendar).is-open>button{box-shadow:none}\\n\"] }]\n }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.KeyboardHandlerService }, { type: i2.ResizeObserverService }], propDecorators: { items: [{\n type: Input\n }], selectedIndex: [{\n type: Input\n }], focusedIndex: [{\n type: Input\n }], itemTextProperty: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], popout: [{\n type: Input\n }], attentionLevel: [{\n type: Input\n }], expand: [{\n type: Input\n }], disabled: [{\n type: Input\n }], _isDisabled: [{\n type: HostBinding,\n args: ['attr.disabled']\n }], hasError: [{\n type: HostBinding,\n args: ['class.error']\n }, {\n type: Input\n }], size: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], usePopover: [{\n type: HostBinding,\n args: ['class.with-popover']\n }, {\n type: Input\n }], _noBlurOnScroll: [{\n type: HostBinding,\n args: ['attr.no-blur']\n }], change: [{\n type: Output\n }], _isBlockLevel: [{\n type: HostBinding,\n args: ['class.expand']\n }], _isOpening: [{\n type: HostBinding,\n args: ['class.is-opening']\n }], isOpen: [{\n type: HostBinding,\n args: ['class.is-open']\n }], _popoutLeft: [{\n type: HostBinding,\n args: ['class.popout-left']\n }], _popoutUp: [{\n type: HostBinding,\n args: ['class.popout-up']\n }], clicked: [{\n type: HostBinding,\n args: ['class.clicked']\n }], itemTemplate: [{\n type: ContentChild,\n args: [ListItemTemplateDirective, { static: true, read: TemplateRef }]\n }], slottedItems: [{\n type: ContentChildren,\n args: [ListItemTemplateDirective, { read: ElementRef }]\n }], cardElement: [{\n type: ViewChild,\n args: [CardComponent, { read: ElementRef }]\n }], popover: [{\n type: ViewChild,\n args: [PopoverComponent]\n }], buttonElement: [{\n type: ViewChild,\n args: [ButtonComponent, { static: true, read: ElementRef }]\n }], kirbyItemsDefault: [{\n type: ViewChildren,\n args: [ItemComponent, { read: ElementRef }]\n }], kirbyItemsSlotted: [{\n type: ContentChildren,\n args: [ItemComponent, { read: ElementRef }]\n }], _onTab: [{\n type: HostListener,\n args: ['keydown.tab']\n }], _onKeydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], _onMouseDown: [{\n type: HostListener,\n args: ['mousedown', ['$event']]\n }], _onTouchStart: [{\n type: HostListener,\n args: ['touchstart', ['$event']]\n }], _onFocus: [{\n type: HostListener,\n args: ['focus']\n }], _onEnterOrEscape: [{\n type: HostListener,\n args: ['keydown.enter']\n }, {\n type: HostListener,\n args: ['keydown.escape']\n }], _onBlur: [{\n type: HostListener,\n args: ['blur', ['$event']]\n }], _onEnterOrSpace: [{\n type: HostListener,\n args: ['keydown.enter', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.space', ['$event']]\n }], _onArrowKeys: [{\n type: HostListener,\n args: ['keydown.arrowup', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.arrowdown', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.arrowleft', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.arrowright', ['$event']]\n }], _onHomeEndKeys: [{\n type: HostListener,\n args: ['keydown.home', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.end', ['$event']]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZHJvcGRvd24vc3JjL2Ryb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUdOLG1CQUFtQixFQUNuQixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLGlCQUFpQixHQUNsQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFbkUsT0FBTyxFQUFFLGlCQUFpQixFQUF5QixNQUFNLGtDQUFrQyxDQUFDO0FBRTVGLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7Ozs7OztBQWdCaEUsTUFBTSxPQUFPLGlCQUFpQjthQUNaLHFCQUFnQixHQUFHLEdBQUcsQUFBTixDQUFPO0lBWXZDLElBQUksS0FBSztRQUNQLE9B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QzVDLFlBQVk7dUJBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUM1QyxZQUFZO3VCQUFDLG9CQUFvQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQTJDOUMsY0FBYztzQkFGYixZQUFZO3VCQUFDLGNBQWMsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ3ZDLFlBQVk7dUJBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgUmVuZGVyZXJTdHlsZUZsYWdzMixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENhcmRDb21wb25lbnQgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2NhcmQnO1xuaW1wb3J0IHtcbiAgRGVzaWduVG9rZW5IZWxwZXIsXG4gIFN0cmluZ1NlYXJjaEhlbHBlcixcbiAgVW5pcXVlSWRHZW5lcmF0b3IsXG59IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vaGVscGVycyc7XG5pbXBvcnQgeyBJdGVtQ29tcG9uZW50IH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9pdGVtJztcbmltcG9ydCB7IExpc3RJdGVtVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2xpc3QnO1xuaW1wb3J0IHsgSG9yaXpvbnRhbERpcmVjdGlvbiwgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vcG9wb3Zlcic7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2J1dHRvbic7XG5pbXBvcnQgeyBFdmVudExpc3RlbmVyRGlzcG9zZUZuIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS90eXBlcyc7XG5pbXBvcnQgeyBmb3J3YXJkQXR0cmlidXRlcywgUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9zaGFyZWQnO1xuXG5pbXBvcnQgeyBPcGVuU3RhdGUsIFZlcnRpY2FsRGlyZWN0aW9uIH0gZnJvbSAnLi9kcm9wZG93bi50eXBlcyc7XG5pbXBvcnQgeyBLZXlib2FyZEhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnLi9rZXlib2FyZC1oYW5kbGVyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdraXJieS1kcm9wZG93bicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Ryb3Bkb3duLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRHJvcGRvd25Db21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIERyb3Bkb3duQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHN0YXRpYyByZWFkb25seSBPUEVOX0RFTEFZX0lOX01TID0gMTAwO1xuICBwcml2YXRlIHN0YXRlID0gT3BlblN0YXRlLmNsb3NlZDtcbiAgcHJpdmF0ZSBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsRGlyZWN0aW9uIHwgYCR7SG9yaXpvbnRhbERpcmVjdGlvbn1gID1cbiAgICBIb3Jpem9udGFsRGlyZWN0aW9uLnJpZ2h0O1xuICBwcml2YXRlIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbERpcmVjdGlvbiB8IGAke1ZlcnRpY2FsRGlyZWN0aW9ufWAgPSBWZXJ0aWNhbERpcmVjdGlvbi5kb3duO1xuICBwcml2YXRlIF9hdHRyaWJ1dGVzVG9Gb3J3YXJkID0gWydhcmlhLWxhYmVsJywgJ2FyaWEtbGFiZWxsZWRieSddO1xuXG4gIF9saXN0Ym94SWQgPSBVbmlxdWVJZEdlbmVyYXRvci5zY29wZWRUbygna2lyYnktZHJvcGRvd24nKS5uZXh0KCk7XG4gIF9jb21ib2JveElkID0gVW5pcXVlSWRHZW5lcmF0b3Iuc2NvcGVkVG8oJ2tpcmJ5LWJ1dHRvbicpLm5leHQoKTtcblxuICBwcml2YXRlIF9pdGVtczogc3RyaW5nW10gfCBhbnlbXSA9IFtdO1xuXG4gIGdldCBpdGVtcygpOiBzdHJpbmdbXSB8IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgaXRlbXModmFsdWU6IHN0cmluZ1tdIHwgYW55W10pIHtcbiAgICB0aGlzLl9pdGVtcyA9IHZhbHVlO1xuICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5pdGVtc1t0aGlzLnNlbGVjdGVkSW5kZXhdIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RlZEluZGV4OiBudW1iZXIgPSAtMTtcbiAgZ2V0IHNlbGVjdGVkSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBzZWxlY3RlZEluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9zZWxlY3RlZEluZGV4ICE9IHZhbHVlKSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZEluZGV4ID0gdmFsdWU7XG4gICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IHRoaXMuX3NlbGVjdGVkSW5kZXg7XG4gICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuaXRlbXNbdGhpcy5zZWxlY3RlZEluZGV4XSB8fCBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIF9mb2N1c2VkSW5kZXgga2VlcHMgdHJhY2sgb2Ygd2hpY2ggZWxlbWVudCBoYXMgZm9jdXMgYW5kIHdpbGwgYmUgc2VsZWN0ZWRcbiAgLy8gaWYgaXQgaXMgYWN0aXZhdGVkIChieSBwcmVzc2luZyBFTlRFUiBvciBTUEFDRSBrZXkpXG4gIHByaXZhdGUgX2ZvY3VzZWRJbmRleDogbnVtYmVyID0gMDtcbiAgZ2V0IGZvY3VzZWRJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9mb2N1c2VkSW5kZXg7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZm9jdXNlZEluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fZm9jdXNlZEluZGV4ICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fZm9jdXNlZEluZGV4ID0gdmFsdWU7XG4gICAgICB0aGlzLnNjcm9sbEl0ZW1JbnRvVmlldyh0aGlzLl9mb2N1c2VkSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGl0ZW1UZXh0UHJvcGVydHkgPSAndGV4dCc7XG5cbiAgQElucHV0KClcbiAgcGxhY2Vob2xkZXIgPSAnUGxlYXNlIHNlbGVjdDonO1xuXG4gIEBJbnB1dCgpIHNldCBwb3BvdXQoZGlyZWN0aW9uOiBIb3Jpem9udGFsRGlyZWN0aW9uIHwgYCR7SG9yaXpvbnRhbERpcmVjdGlvbn1gKSB7XG4gICAgdGhpcy5ob3Jpem9udGFsRGlyZWN0aW9uID0gZGlyZWN0aW9uIHx8IEhvcml6b250YWxEaXJlY3Rpb24ucmlnaHQ7XG4gIH1cblxuICBnZXQgcG9wb3V0KCkge1xuICAgIHJldHVybiB0aGlzLmhvcml6b250YWxEaXJlY3Rpb247XG4gIH1cblxuICBASW5wdXQoKVxuICBhdHRlbnRpb25MZXZlbDogJzEnIHwgJzInIHwgJzMnID0gJzMnO1xuXG4gIEBJbnB1dCgpXG4gIGV4cGFuZD86ICdibG9jayc7XG5cbiAgQElucHV0KClcbiAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGlzYWJsZWQnKVxuICBnZXQgX2lzRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogbnVsbDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZXJyb3InKVxuICBASW5wdXQoKVxuICBoYXNFcnJvcjogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBzaXplOiAnc20nIHwgJ21kJyA9ICdtZCc7XG5cbiAgQElucHV0KClcbiAgdGFiaW5kZXggPSAwO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3Mud2l0aC1wb3BvdmVyJylcbiAgQElucHV0KClcbiAgdXNlUG9wb3ZlciA9IGZhbHNlO1xuXG4gIGdldCBfdGFiaW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyAtMSA6IHRoaXMudGFiaW5kZXg7XG4gIH1cblxuICAvLyBQcmV2ZW50IElvbmljIGJsdXIgb24gc2Nyb2xsXG4gIEBIb3N0QmluZGluZygnYXR0ci5uby1ibHVyJylcbiAgZ2V0IF9ub0JsdXJPblNjcm9sbCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gYW4gaXRlbSBpcyBzZWxlY3RlZCAodGFwIG9uIG1vYmlsZSwgY2xpY2sva2V5cHJlc3Mgb24gd2ViKVxuICAgKi9cbiAgQE91dHB1dCgpIGNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZyB8IGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IGFueT4oKTtcblxuICBwcml2YXRlIF92YWx1ZTogc3RyaW5nIHwgYW55ID0gbnVsbDtcbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB8IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFRleHRGcm9tSXRlbSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZXhwYW5kJylcbiAgZ2V0IF9pc0Jsb2NrTGV2ZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kID09PSAnYmxvY2snO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pcy1vcGVuaW5nJylcbiAgZ2V0IF9pc09wZW5pbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUgPT09IE9wZW5TdGF0ZS5vcGVuaW5nO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pcy1vcGVuJylcbiAgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gT3BlblN0YXRlLm9wZW47XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnBvcG91dC1sZWZ0JylcbiAgZ2V0IF9wb3BvdXRMZWZ0KCkge1xuICAgIHJldHVybiB0aGlzLmhvcml6b250YWxEaXJlY3Rpb24gPT09IEhvcml6b250YWxEaXJlY3Rpb24ubGVmdDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucG9wb3V0LXVwJylcbiAgZ2V0IF9wb3BvdXRVcCgpIHtcbiAgICByZXR1cm4gdGhpcy52ZXJ0aWNhbERpcmVjdGlvbiA9PT0gVmVydGljYWxEaXJlY3Rpb24udXA7XG4gIH1cblxuICAvKiBUaGUgJ2NsaWNrZWQnIGNsYXNzIGlzIGFwcGxpZWQgdGhyb3VnaCBIb3N0YmluZGluZyB0byBwcmV2ZW50IHRoZSBkcm9wZG93biBmcm9tIGdldHRpbmcgYSBmb2N1cyByaW5nIG9uIGNsaWNrLlxuICAgIFRoZXJlIGlzIGEgYnVnIHRoYXQgY2F1c2VzIHRoZSBkcm9wZG93biB0byBnZXQgYSBmb2N1cyByaW5nIG9uIGNsaWNrLCBpZiBpdCBpcyB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IGlzIGludGVyYWN0ZWQgd2l0aFxuICAgIGFmdGVyIHRoZSBwYWdlIGlzIGxvYWRlZC4gSWYgdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggYW55IG90aGVyIGVsZW1lbnQgYmVmb3JlLCB0aGVuIHRoZSBkcm9wZG93biB3b24ndCBnZXQgYSBmb2N1cyByaW5nLlxuICAgIFNlZSBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL2tpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9pc3N1ZXMvMjQ3Ny5cblxuICAgIFRoaXMgc29sdXRpb24gY2FuIHBvdGVudGlhbGx5IGJlIHJlZmFjdG9yZWQsIHdoZW4gcG9wb3ZlciBpcyBub3QgZXhwZXJpbWVudGFsIGFueW1vcmUuIFRoZW4gaXQgY291bGQgYmUgcG9zc2libGUgXG4gICAgdG8gY2xvc2UgdGhlIGRyb3Bkb3duIHdoZW4gdGhlIHBvcG92ZXIgYmFja2Ryb3AgaXMgY2xpY2tlZCwgaW5zdGVhZCBvZiByZWx5aW5nIG9uIHRoZSBibHVyIGV2ZW50LCB3aGljaCBpcyB1dGlsaXplZFxuICAgIGJ5IHRoaXMgbGluZSBiZWxvdzogdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKS4gUmlnaHQgbm93IHRoaXMgZm9yY2VzIHRoZSBibHVyIGV2ZW50IHRvIGJlIHRyaWdnZXJlZCwgd2hlblxuICAgIGNsaWNraW5nIG91dHNpZGUgb2YgdGhlIGRyb3Bkb3duLlxuICAgICovXG4gIEBIb3N0QmluZGluZygnY2xhc3MuY2xpY2tlZCcpXG4gIGNsaWNrZWQgPSBmYWxzZTtcblxuICBAQ29udGVudENoaWxkKExpc3RJdGVtVGVtcGxhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBpdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGRyZW4oTGlzdEl0ZW1UZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHNsb3R0ZWRJdGVtczogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PjtcbiAgQFZpZXdDaGlsZChDYXJkQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgY2FyZEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKFBvcG92ZXJDb21wb25lbnQpXG4gIHBvcG92ZXI/OiBQb3BvdmVyQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKEJ1dHRvbkNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgYnV0dG9uRWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgcHJpdmF0ZSBmb3J3YXJkQXJpYUxhYmVsVG9Ecm9wZG93bkJ1dHRvbigpIHtcbiAgICBmb3J3YXJkQXR0cmlidXRlcyhcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgdGhpcy5fYXR0cmlidXRlc1RvRm9yd2FyZCxcbiAgICAgIHRoaXMucmVuZGVyZXIsXG4gICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQubmF0aXZlRWxlbWVudFxuICAgICk7XG4gIH1cbiAgQFZpZXdDaGlsZHJlbihJdGVtQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAga2lyYnlJdGVtc0RlZmF1bHQ6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XG5cbiAgX2tpcmJ5SXRlbXNTbG90dGVkOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuICBAQ29udGVudENoaWxkcmVuKEl0ZW1Db21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBzZXQga2lyYnlJdGVtc1Nsb3R0ZWQoa2lyYnlJdGVtczogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+Pikge1xuICAgIGNvbnN0IGhhc1Nsb3R0ZWRJdGVtcyA9IHRoaXMuZGlzcG9zZUl0ZW1DbGlja0xpc3RlbmVycz8ubGVuZ3RoID4gMDtcbiAgICBpZiAoaGFzU2xvdHRlZEl0ZW1zKSB7XG4gICAgICB0aGlzLnVubGlzdGVuQWxsU2xvdHRlZEl0ZW1zKCk7XG4gICAgfVxuXG4gICAgLy8gU2V0dXAgYSBjbGljayBsaXN0ZW5lciBmb3IgZWFjaCBuZXcgc2xvdHRlZCBpdGVtc1xuICAgIGtpcmJ5SXRlbXMuZm9yRWFjaCgoa2lyYnlJdGVtLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoa2lyYnlJdGVtLm5hdGl2ZUVsZW1lbnQsICdyb2xlJywgJ29wdGlvbicpO1xuICAgICAgY29uc3QgZGlzcG9zZUNsaWNrTGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJEaXNwb3NlRm4gPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICAga2lyYnlJdGVtLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdjbGljaycsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLm9uSXRlbVNlbGVjdChpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIHRoaXMuZGlzcG9zZUl0ZW1DbGlja0xpc3RlbmVycy5wdXNoKGRpc3Bvc2VDbGlja0xpc3RlbmVyKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2tpcmJ5SXRlbXNTbG90dGVkID0ga2lyYnlJdGVtcztcbiAgfVxuXG4gIGdldCBraXJieUl0ZW1zU2xvdHRlZCgpOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+IHtcbiAgICByZXR1cm4gdGhpcy5fa2lyYnlJdGVtc1Nsb3R0ZWQ7XG4gIH1cblxuICBwcml2YXRlIGRpc3Bvc2VJdGVtQ2xpY2tMaXN0ZW5lcnM6IEV2ZW50TGlzdGVuZXJEaXNwb3NlRm5bXSA9IFtdO1xuICBwcml2YXRlIGludGVyc2VjdGlvbk9ic2VydmVyUmVmOiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSBzaG93RHJvcGRvd25UaW1lb3V0SWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICBwcml2YXRlIHNlYXJjaEJ1ZmZlcjogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgc2VhcmNoQnVmZmVyVGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByaXZhdGUgU0VBUkNIX0JVRkZFUl9ERUxBWSA9IDUwMDsgLy8gbXNcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGtleWJvYXJkSGFuZGxlclNlcnZpY2U6IEtleWJvYXJkSGFuZGxlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZXNpemVPYnNlcnZlclNlcnZpY2U6IFJlc2l6ZU9ic2VydmVyU2VydmljZVxuICApIHt9XG5cbiAgb25Ub2dnbGUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIHRoaXMuY2xpY2tlZCA9IHRydWU7XG5cbiAgICB0aGlzLnRvZ2dsZSgpO1xuICB9XG5cbiAgdG9nZ2xlKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNPcGVuID8gdGhpcy5jbG9zZSgpIDogdGhpcy5vcGVuKCk7XG4gIH1cblxuICAvKiBVdGlsaXR5IHRoYXQgbWFrZXMgaXQgZWFzaWVyIHRvIHNldCBzdHlsZXMgb24gY2FyZCBlbGVtZW50XG4gIHdoZW4gdXNpbmcgcG9wb3ZlciovXG4gIHByaXZhdGUgc2V0UG9wb3ZlckNhcmRTdHlsZShzdHlsZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLnVzZVBvcG92ZXIpIHJldHVybjtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICB0aGlzLmNhcmRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICBzdHlsZSxcbiAgICAgIHZhbHVlLFxuICAgICAgUmVuZGVyZXJTdHlsZUZsYWdzMi5EYXNoQ2FzZVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMudXNlUG9wb3ZlciAmJiB0aGlzLmV4cGFuZCA9PT0gJ2Jsb2NrJykge1xuICAgICAgY29uc3QgeyB3aWR0aDogaW5pdGlhbFdpZHRoIH0gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHRoaXMuc2V0UG9wb3ZlckNhcmRTdHlsZSgnbWF4LXdpZHRoJywgJ2luaXRpYWwnKTtcbiAgICAgIHRoaXMuc2V0UG9wb3ZlckNhcmRTdHlsZSgnbWluLXdpZHRoJywgJ2luaXRpYWwnKTtcbiAgICAgIC8vIEVuc3VyZSBpbml0aWFsIHdpZHRoIGlzIHNldCBldmVuIGlmIHRoZSByZXNpemUgb2JzZXJ2ZXIgY2FsbGJhY2sgYWxzbyBmaXJlcyBpbml0aWFsbHk6XG4gICAgICB0aGlzLnNldFBvcG92ZXJDYXJkU3R5bGUoJy0ta2lyYnktY2FyZC13aWR0aCcsIGAke2luaXRpYWxXaWR0aH1weGApO1xuXG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyU2VydmljZS5vYnNlcnZlKHRoaXMuZWxlbWVudFJlZiwgKGVudHJ5KSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1dpZHRoID0gZW50cnkuY29udGVudFJlY3Qud2lkdGg7XG4gICAgICAgIGlmIChuZXdXaWR0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnNldFBvcG92ZXJDYXJkU3R5bGUoJy0ta2lyYnktY2FyZC13aWR0aCcsIGAke25ld1dpZHRofXB4YCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmZvcndhcmRBcmlhTGFiZWxUb0Ryb3Bkb3duQnV0dG9uKCk7XG4gICAgdGhpcy5pbml0aWFsaXplQWxpZ25tZW50KCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVBbGlnbm1lbnQoKSB7XG4gICAgaWYgKHRoaXMudXNlUG9wb3ZlcikgcmV0dXJuO1xuICAgIGlmICghdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlclJlZikge1xuICAgICAgLy8gR2V0IHRoZSBkZXNpZ24gdG9rZW4gc2l6ZSBvZiB0aGUgYnV0dG9uLiBJbiB0aGUgYnV0dG9uIHN0eWxlc2hlZXQgYSBtZWRpdW0gYnV0dG9uIGhlaWdodCBpcyB1dGlscy5zaXplKHhsKVxuICAgICAgLy8gYW5kIGEgc21hbGwgYnV0dG9uIGhlaWdodCBpcyB1dGlscy5zaXplKFwibFwiKVxuICAgICAgY29uc3QgZGVzaWduVG9rZW5TaXplSGVpZ2h0ID0gdGhpcy5zaXplID09PSAnbWQnID8gJ3hsJyA6ICdsJztcblxuICAgICAgLy8gU2V0dGluZyB0aGUgcm9vdE1hcmdpbiBlcXVhbCB0byB0aGUgaGVpZ2h0IG9mIHRoZSBidXR0b25cbiAgICAgIC8vIGFsbG93cyB0aGUgSW50ZXJzZWN0aW9uIE9ic2VydmVyIENhbGxiYWNrIHRvIGJlIGNhbGxlZFxuICAgICAgLy8gZXZlbiBpZiB0aGUgZHJvcGRvd24gYnV0dG9uIGlzIGludGVyc2VjdGluZyB3aXRoIHRoZSB2aWV3cG9ydFxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgcm9vdE1hcmdpbjogRGVzaWduVG9rZW5IZWxwZXIuc2l6ZShkZXNpZ25Ub2tlblNpemVIZWlnaHQpLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNhbGxiYWNrOiBJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrID0gKGVudHJpZXMpID0+IHtcbiAgICAgICAgLy8gT25seSBhcHBseSBhbGlnbm1lbnQgd2hlbiBvcGVuaW5nOlxuICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gT3BlblN0YXRlLm9wZW5pbmcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDYW5jZWwgYW55IHBlbmRpbmcgdGltZXIgdG8gc2hvdyBkcm9wZG93bjpcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2hvd0Ryb3Bkb3duVGltZW91dElkKTtcbiAgICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzWzBdO1xuICAgICAgICBjb25zdCBpc1Zpc2libGUgPSBlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3Qud2lkdGggPiAwO1xuICAgICAgICBpZiAoaXNWaXNpYmxlICYmIGVudHJ5LmludGVyc2VjdGlvblJhdGlvIDwgMSkge1xuICAgICAgICAgIHRoaXMuc2V0SG9yaXpvbnRhbERpcmVjdGlvbihlbnRyeSk7XG4gICAgICAgICAgdGhpcy5zZXRWZXJ0aWNhbERpcmVjdGlvbihlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93RHJvcGRvd24oKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9O1xuICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlclJlZiA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihjYWxsYmFjaywgb3B0aW9ucyk7XG4gICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyUmVmLm9ic2VydmUodGhpcy5jYXJkRWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEhvcml6b250YWxEaXJlY3Rpb24oZW50cnk6IEludGVyc2VjdGlvbk9ic2VydmVyRW50cnkpIHtcbiAgICAvLyBJZiBwb3BvdXQgZGlyZWN0aW9uIGlzIHNldCB0byByaWdodCwgYW5kIHRoZSBlbnRyeSBpcyBjdXQgb2ZmIHRvIHRoZSByaWdodCBieSAke2VudHJ5LmJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCAtIGVudHJ5LmludGVyc2VjdGlvblJlY3QucmlnaHR9cHhcbiAgICAvLyBpdCBpcyBzZXQgdG8gcG9wb3V0IGxlZnQgaW5zdGVhZCwgYW5kIHZpY2UgdmVyc2EgZm9yIHBvcG91dCBkaXJlY3Rpb24gbGVmdFxuICAgIGlmICh0aGlzLmhvcml6b250YWxEaXJlY3Rpb24gPT09IEhvcml6b250YWxEaXJlY3Rpb24ucmlnaHQpIHtcbiAgICAgIGlmIChlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QucmlnaHQgPiBlbnRyeS5yb290Qm91bmRzLnJpZ2h0KSB7XG4gICAgICAgIHRoaXMuaG9yaXpvbnRhbERpcmVjdGlvbiA9IEhvcml6b250YWxEaXJlY3Rpb24ubGVmdDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGVudHJ5LmJvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0IDwgZW50cnkucm9vdEJvdW5kcy5sZWZ0KSB7XG4gICAgICAgIHRoaXMuaG9yaXpvbnRhbERpcmVjdGlvbiA9IEhvcml6b250YWxEaXJlY3Rpb24ucmlnaHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRWZXJ0aWNhbERpcmVjdGlvbihlbnRyeTogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSkge1xuICAgIGlmIChlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QudG9wIDwgMCkge1xuICAgICAgLy8gZW50cnkgaXMgY3V0IG9mZiBhdCB0aGUgdG9wIGJ5ICR7ZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LnRvcH1weFxuICAgICAgLy8gb3BlbiBkb3dud2FyZHM6XG4gICAgICB0aGlzLnZlcnRpY2FsRGlyZWN0aW9uID0gVmVydGljYWxEaXJlY3Rpb24uZG93bjtcbiAgICB9XG4gICAgaWYgKGVudHJ5LmJvdW5kaW5nQ2xpZW50UmVjdC5ib3R0b20gPiBlbnRyeS5yb290Qm91bmRzLmJvdHRvbSkge1xuICAgICAgLy8gZW50cnkgaXMgY3V0IG9mZiBhdCB0aGUgYm90dG9tIGJ5ICR7ZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LmJvdHRvbSAtIGVudHJ5LmludGVyc2VjdGlvblJlY3QuYm90dG9tfXB4XG4gICAgICBjb25zdCBjb250YWluZXJPZmZzZXRUb3AgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG4gICAgICBjb25zdCBTUEFDSU5HID0gNTsgLy9UT0RPOiBHZXQgZnJvbSBTQ1NTXG4gICAgICAvLyBDaGVjayBpZiB0aGUgY2FyZCBjYW4gZml0IG9uIHRvcCBvZiBidXR0b246XG4gICAgICBpZiAoY29udGFpbmVyT2Zmc2V0VG9wID4gZW50cnkudGFyZ2V0LmNsaWVudEhlaWdodCArIFNQQUNJTkcpIHtcbiAgICAgICAgLy8gb3BlbiB1cHdhcmRzOlxuICAgICAgICB0aGlzLnZlcnRpY2FsRGlyZWN0aW9uID0gVmVydGljYWxEaXJlY3Rpb24udXA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb3BlbigpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLnN0YXRlID0gT3BlblN0YXRlLm9wZW5pbmc7XG4gICAgICAvLyBlbnN1cmVzIHRoYXQgdGhlIGRyb3Bkb3duIGlzIG9wZW5lZCBpbiBjYXNlIHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrIGlzbid0IGludm9rZWRcbiAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duVGltZW91dElkID0gc2V0VGltZW91dChcbiAgICAgICAgKCkgPT4gdGhpcy5zaG93RHJvcGRvd24oKSxcbiAgICAgICAgRHJvcGRvd25Db21wb25lbnQuT1BFTl9ERUxBWV9JTl9NU1xuICAgICAgKTtcblxuICAgICAgLy8gTW92ZSBmb2N1cyB0byBzZWxlY3RlZCBpdGVtIChpZiBhbnkpIG9yIGZpcnN0IGl0ZW1cbiAgICAgIHRoaXMuZm9jdXNlZEluZGV4ID0gdGhpcy5zZWxlY3RlZEluZGV4ID4gLTEgPyB0aGlzLnNlbGVjdGVkSW5kZXggOiAwO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvd0Ryb3Bkb3duKCkge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSBPcGVuU3RhdGUub3BlbmluZykge1xuICAgICAgdGhpcy5zdGF0ZSA9IE9wZW5TdGF0ZS5vcGVuO1xuICAgICAgdGhpcy5wb3BvdmVyPy5zaG93KCk7XG4gICAgICB0aGlzLnNjcm9sbEl0ZW1JbnRvVmlldyh0aGlzLmZvY3VzZWRJbmRleCk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5zdGF0ZSA9IE9wZW5TdGF0ZS5jbG9zZWQ7XG4gICAgICAvLyBSZXNldCB2ZXJ0aWNhbCBkaXJlY3Rpb24gdG8gZGVmYXVsdFxuICAgICAgdGhpcy52ZXJ0aWNhbERpcmVjdGlvbiA9IFZlcnRpY2FsRGlyZWN0aW9uLmRvd247XG4gICAgICB0aGlzLnBvcG92ZXI/LmhpZGUoKTtcbiAgICB9XG4gIH1cblxuICBvbkl0ZW1TZWxlY3QoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0SXRlbShpbmRleCk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XG4gIHByaXZhdGUgX29uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzZWxlY3QncyB2YWx1ZS4gUGFydCBvZiB0aGUgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gICAqIHJlcXVpcmVkIHRvIGludGVncmF0ZSB3aXRoIEFuZ3VsYXIncyBjb3JlIGZvcm1zIEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIE5ldyB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIHRoZSBtb2RlbC5cbiAgICovXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX3NlbGVjdEl0ZW1CeVZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGludm9rZWQgd2hlbiB0aGUgc2VsZWN0J3MgdmFsdWVcbiAgICogY2hhbmdlcyBmcm9tIHVzZXIgaW5wdXQuIFBhcnQgb2YgdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICAgKiByZXF1aXJlZCB0byBpbnRlZ3JhdGUgd2l0aCBBbmd1bGFyJ3MgY29yZSBmb3JtcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSBmbiBDYWxsYmFjayB0byBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgdmFsdWUgY2hhbmdlcy5cbiAgICovXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBpbnZva2VkIHdoZW4gdGhlIHNlbGVjdCBpcyBibHVycmVkXG4gICAqIGJ5IHRoZSB1c2VyLiBQYXJ0IG9mIHRoZSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UgcmVxdWlyZWRcbiAgICogdG8gaW50ZWdyYXRlIHdpdGggQW5ndWxhcidzIGNvcmUgZm9ybXMgQVBJLlxuICAgKlxuICAgKiBAcGFyYW0gZm4gQ2FsbGJhY2sgdG8gYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgYmVlbiB0b3VjaGVkLlxuICAgKi9cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIHRoZSBzZWxlY3QuIFBhcnQgb2YgdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZSByZXF1aXJlZFxuICAgKiB0byBpbnRlZ3JhdGUgd2l0aCBBbmd1bGFyJ3MgY29yZSBmb3JtcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSBpc0Rpc2FibGVkIFNldHMgd2hldGhlciB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RJdGVtKGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoaW5kZXggIT0gdGhpcy5zZWxlY3RlZEluZGV4KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRleDtcbiAgICAgIHRoaXMuZm9jdXNlZEluZGV4ID0gaW5kZXg7XG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0SXRlbUJ5VmFsdWUodmFsdWU6IHN0cmluZyB8IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHRoaXMuaXRlbXMuaW5kZXhPZih2YWx1ZSk7XG4gIH1cblxuICBnZXRUZXh0RnJvbUl0ZW0oaXRlbTogc3RyaW5nIHwgYW55KSB7XG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyA/IGl0ZW0gOiBpdGVtW3RoaXMuaXRlbVRleHRQcm9wZXJ0eV07XG4gIH1cblxuICBzY3JvbGxJdGVtSW50b1ZpZXcoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGtpcmJ5SXRlbXMgPVxuICAgICAgdGhpcy5raXJieUl0ZW1zU2xvdHRlZCAmJiB0aGlzLmtpcmJ5SXRlbXNTbG90dGVkLmxlbmd0aFxuICAgICAgICA/IHRoaXMua2lyYnlJdGVtc1Nsb3R0ZWRcbiAgICAgICAgOiB0aGlzLmtpcmJ5SXRlbXNEZWZhdWx0O1xuICAgIGlmIChraXJieUl0ZW1zICYmIGtpcmJ5SXRlbXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEtpcmJ5SXRlbSA9IGtpcmJ5SXRlbXMudG9BcnJheSgpW2luZGV4XTtcbiAgICAgIGlmIChzZWxlY3RlZEtpcmJ5SXRlbSAmJiBzZWxlY3RlZEtpcmJ5SXRlbS5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGl0ZW1FbGVtZW50ID0gc2VsZWN0ZWRLaXJieUl0ZW0ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaXRlbUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24udGFiJylcbiAgX29uVGFiKCkge1xuICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5zZWxlY3RJdGVtKHRoaXMuZm9jdXNlZEluZGV4KTtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGlja2VkKSB7XG4gICAgICAvLyBSZW1vdmUgdGhlICdjbGlja2VkJyBjbGFzcyAoSG9zdGJpbmRpbmcpIGlmIHRoZSB1c2VyIGhhcyBwcmV2aW91c2x5IG9wZW5lZCB0aGUgZHJvcGRvd24gYnkgY2xpY2tpbmcsXG4gICAgICAvLyBzaW5jZSB0aGUgY2xhc3MgcHJldmVudHMgdGhlIGZvY3VzIHJpbmcgZnJvbSBzaG93aW5nLFxuICAgICAgLy8gd2hpY2ggaXMgZXhwZWN0ZWQgdG8gaGFwcGVuLCB3aGVuIHVzaW5nIHRoZSB0YWIga2V5XG4gICAgICB0aGlzLmNsaWNrZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByZXZlbnREZWZhdWx0QW5kU3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkVG9TZWFyY2hCdWZmZXIoY2hhcjogc3RyaW5nKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoQnVmZmVyVGltZW91dCk7XG4gICAgdGhpcy5zZWFyY2hCdWZmZXIgKz0gY2hhcjtcbiAgICB0aGlzLnNlYXJjaEJ1ZmZlclRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVzZXRTZWFyY2hCdWZmZXIoKTtcbiAgICB9LCB0aGlzLlNFQVJDSF9CVUZGRVJfREVMQVkpO1xuICB9XG4gIHByaXZhdGUgcmVzZXRTZWFyY2hCdWZmZXIoKSB7XG4gICAgdGhpcy5zZWFyY2hCdWZmZXIgPSAnJztcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBfb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuXG4gICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tLaXJieV0gTm8gaXRlbXMgZm91bmQgd2l0aGluIGRyb3Bkb3duJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcblxuICAgIGlmIChTdHJpbmdTZWFyY2hIZWxwZXIuaXNQcmludGFibGVDaGFyYWN0ZXIoa2V5KSkge1xuICAgICAgdGhpcy5oYW5kbGVQcmludGFibGVDaGFyYWN0ZXJLZXkoZXZlbnQsIHRoaXMuaXNPcGVuKTtcbiAgICB9XG5cbiAgICAvLyBBTFQgKyBBcnJvd0Rvd246IE9wZW4gZHJvcGRvd25cbiAgICBpZiAoa2V5ID09PSAnQXJyb3dEb3duJyAmJiBldmVudC5hbHRLZXkpIHtcbiAgICAgIHRoaXMucHJldmVudERlZmF1bHRBbmRTdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oZXZlbnQpO1xuICAgICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkSW5kZXggPSB0aGlzLnNlbGVjdGVkSW5kZXggPiAtMSA/IHRoaXMuc2VsZWN0ZWRJbmRleCA6IDA7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQUxUICsgQXJyb3dVcDogU2VsZWN0IGZvY3VzZWQgaXRlbSBhbmQgY2xvc2UgZHJvcGRvd25cbiAgICBpZiAoa2V5ID09PSAnQXJyb3dVcCcgJiYgZXZlbnQuYWx0S2V5KSB7XG4gICAgICB0aGlzLnByZXZlbnREZWZhdWx0QW5kU3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKGV2ZW50KTtcbiAgICAgIGlmICh0aGlzLmZvY3VzZWRJbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0SXRlbSh0aGlzLmZvY3VzZWRJbmRleCk7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUGFnZVVwOiBKdW1wIHVwIDEwIG9wdGlvbnMgb3IgdG8gZmlyc3RcbiAgICBpZiAoa2V5ID09PSAnUGFnZVVwJykge1xuICAgICAgdGhpcy5wcmV2ZW50RGVmYXVsdEFuZFN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbihldmVudCk7XG4gICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgfVxuICAgICAgdGhpcy5mb2N1c2VkSW5kZXggPSBNYXRoLm1heCgwLCB0aGlzLmZvY3VzZWRJbmRleCAtIDEwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBQYWdlRG93bjogSnVtcCBkb3duIDEwIG9wdGlvbnMgb3IgdG8gbGFzdFxuICAgIGlmIChrZXkgPT09ICdQYWdlRG93bicpIHtcbiAgICAgIHRoaXMucHJldmVudERlZmF1bHRBbmRTdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oZXZlbnQpO1xuICAgICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZm9jdXNlZEluZGV4ID0gTWF0aC5taW4odGhpcy5pdGVtcy5sZW5ndGggLSAxLCB0aGlzLmZvY3VzZWRJbmRleCArIDEwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVByaW50YWJsZUNoYXJhY3RlcktleShldmVudDogS2V5Ym9hcmRFdmVudCwgaXNPcGVuOiBib29sZWFuKSB7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuXG4gICAgaWYgKGlzT3Blbikge1xuICAgICAgdGhpcy5wcmV2ZW50RGVmYXVsdEFuZFN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbihldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3BlbigpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBzYW1lIGNoYXJhY3RlciBpcyB0eXBlZCB0d2ljZSwgdGhlIHNlYXJjaCBidWZmZXIgc2hvdWxkIG9ubHkgY29udGFpbiB0aGF0IGNoYXJhY3RlciBvbmNlXG4gICAgaWYgKFxuICAgICAgdGhpcy5zZWFyY2hCdWZmZXIubGVuZ3RoID09PSAxICYmXG4gICAgICB0aGlzLnNlYXJjaEJ1ZmZlclswXS50b0xvd2VyQ2FzZSgpID09PSBrZXkudG9Mb3dlckNhc2UoKVxuICAgICkge1xuICAgICAgdGhpcy5zZWFyY2hCdWZmZXIgPSBrZXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkVG9TZWFyY2hCdWZmZXIoa2V5KTtcbiAgICB9XG5cbiAgICBjb25zdCBpc011bHRpQ2hhclNlYXJjaCA9IHRoaXMuc2VhcmNoQnVmZmVyLmxlbmd0aCA+IDE7XG4gICAgbGV0IHN0YXJ0SW5kZXggPSAwO1xuXG4gICAgaWYgKCFpc011bHRpQ2hhclNlYXJjaCAmJiB0aGlzLmlzT3Blbikge1xuICAgICAgc3RhcnRJbmRleCA9IHRoaXMuZm9jdXNlZEluZGV4ICsgMTtcbiAgICB9XG5cbiAgICBsZXQgZm91bmRJdGVtSW5kZXggPSB0aGlzLmdldEluZGV4T2ZJdGVtQnlGaXJzdENoYXJhY3Rlcih0aGlzLnNlYXJjaEJ1ZmZlciwgc3RhcnRJbmRleCk7XG5cbiAgICBpZiAoZm91bmRJdGVtSW5kZXggPT09IC0xICYmIGlzTXVsdGlDaGFyU2VhcmNoKSB7XG4gICAgICBmb3VuZEl0ZW1JbmRleCA9IHRoaXMuZ2V0SW5kZXhPZkl0ZW1CeUZpcnN0Q2hhcmFjdGVyKGtleSwgc3RhcnRJbmRleCk7XG4gICAgfVxuXG4gICAgaWYgKGZvdW5kSXRlbUluZGV4ID09PSAtMSAmJiAhaXNNdWx0aUNoYXJTZWFyY2ggJiYgdGhpcy5pc09wZW4pIHtcbiAgICAgIGZvdW5kSXRlbUluZGV4ID0gdGhpcy5nZXRJbmRleE9mSXRlbUJ5Rmlyc3RDaGFyYWN0ZXIodGhpcy5zZWFyY2hCdWZmZXIsIDApO1xuICAgIH1cblxuICAgIGlmIChmb3VuZEl0ZW1JbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IGZvdW5kSXRlbUluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5kZXhPZkl0ZW1CeUZpcnN0Q2hhcmFjdGVyKGNoYXI6IHN0cmluZywgc3RhcnRJbmRleDogbnVtYmVyID0gMCkge1xuICAgIGxldCBpdGVtVGV4dHM6IHN0cmluZ1tdO1xuICAgIC8vIFByZWZlciBzbG90dGVkL3Byb2plY3RlZCBpdGVtcyBpZiBwcmVzZW50XG4gICAgaWYgKHRoaXMua2lyYnlJdGVtc1Nsb3R0ZWQgJiYgdGhpcy5raXJieUl0ZW1zU2xvdHRlZC5sZW5ndGgpIHtcbiAgICAgIGl0ZW1UZXh0cyA9IHRoaXMua2lyYnlJdGVtc1Nsb3R0ZWRcbiAgICAgICAgLnRvQXJyYXkoKVxuICAgICAgICAubWFwKChyZWYpID0+IHJlZi5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50Py50cmltKCkgPz8gJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtVGV4dHMgPSB0aGlzLml0ZW1zLm1hcCgoaXRlbSkgPT4gdGhpcy5nZXRUZXh0RnJvbUl0ZW0oaXRlbSkgPz8gJycpO1xuICAgIH1cblxuICAgIHJldHVybiBTdHJpbmdTZWFyY2hIZWxwZXIuZ2V0SW5kZXhCeUZpcnN0TWF0Y2hpbmdTdGFydFN0cmluZyhjaGFyLCBpdGVtVGV4dHMsIHN0YXJ0SW5kZXgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgX29uTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgWyckZXZlbnQnXSlcbiAgX29uVG91Y2hTdGFydChldmVudDogVG91Y2hFdmVudCkge1xuICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxuICBfb25Gb2N1cygpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgIH1cbiAgfVxuXG4gIF9vblBvcG92ZXJXaWxsSGlkZSgpIHtcbiAgICB0aGlzLnN0YXRlID0gT3BlblN0YXRlLmNsb3NlZDtcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lbnRlcicpXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZXNjYXBlJylcbiAgX29uRW50ZXJPckVzY2FwZSgpIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gICAgdGhpcy5fb25Ub3VjaGVkKCk7XG4gIH1cblxuICBfb25Qb3BvdmVyQ2xpY2soKSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicsIFsnJGV2ZW50J10pXG4gIF9vbkJsdXIoKSB7XG4gICAgaWYgKHRoaXMudXNlUG9wb3ZlcikgcmV0dXJuO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLnNwYWNlJywgWyckZXZlbnQnXSlcbiAgX29uRW50ZXJPclNwYWNlKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5zZWxlY3RJdGVtKHRoaXMuZm9jdXNlZEluZGV4KTtcbiAgICB9XG4gICAgdGhpcy50b2dnbGUoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3d1cCcsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3dkb3duJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2xlZnQnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93cmlnaHQnLCBbJyRldmVudCddKVxuICBfb25BcnJvd0tleXMoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gTWlycm9yIGRlZmF1bHQgSFRNTDUgc2VsZWN0IGJlaGF2aW91ciAtIHByZXZlbnQgbGVmdC9yaWdodCBhcnJvd3Mgd2hlbiBvcGVuOlxuICAgIGlmICh0aGlzLmlzT3BlbiAmJiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JyB8fCBldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0JykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAvLyBBdm9pZCBwYWdlIHNjcm9sbFxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMub3BlbigpO1xuXG4gICAgICAvLyBJZiBubyBzZWxlY3RlZCBpdGVtIHRoZW4gZm9jdXMgZmlyc3Qgb3IgbGFzdCBpdGVtXG4gICAgICBpZiAoIWV2ZW50LmFsdEtleSAmJiB0aGlzLnNlbGVjdGVkSW5kZXggPCAwKSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IDA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICAgICAgdGhpcy5mb2N1c2VkSW5kZXggPSB0aGlzLml0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdGb2N1c2VkSW5kZXggPSB0aGlzLmtleWJvYXJkSGFuZGxlclNlcnZpY2UuaGFuZGxlKFxuICAgICAgZXZlbnQsXG4gICAgICB0aGlzLmZvY3VzZWRJbmRleCxcbiAgICAgIHRoaXMuaXRlbXMubGVuZ3RoIC0gMVxuICAgICk7XG4gICAgaWYgKG5ld0ZvY3VzZWRJbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IG5ld0ZvY3VzZWRJbmRleDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5ob21lJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lbmQnLCBbJyRldmVudCddKVxuICBfb25Ib21lRW5kS2V5cyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMub3BlbigpO1xuICAgIH1cbiAgICBjb25zdCBuZXdGb2N1c2VkSW5kZXggPSB0aGlzLmtleWJvYXJkSGFuZGxlclNlcnZpY2UuaGFuZGxlKFxuICAgICAgZXZlbnQsXG4gICAgICB0aGlzLmZvY3VzZWRJbmRleCxcbiAgICAgIHRoaXMuaXRlbXMubGVuZ3RoIC0gMVxuICAgICk7XG4gICAgaWYgKG5ld0ZvY3VzZWRJbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IG5ld0ZvY3VzZWRJbmRleDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSB1bmxpc3RlbkFsbFNsb3R0ZWRJdGVtcygpIHtcbiAgICBsZXQgZGlzcG9zZUNsaWNrTGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJEaXNwb3NlRm47XG4gICAgd2hpbGUgKChkaXNwb3NlQ2xpY2tMaXN0ZW5lciA9IHRoaXMuZGlzcG9zZUl0ZW1DbGlja0xpc3RlbmVycy5wb3AoKSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZGlzcG9zZUNsaWNrTGlzdGVuZXIoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVubGlzdGVuQWxsU2xvdHRlZEl0ZW1zKCk7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlclNlcnZpY2UudW5vYnNlcnZlKHRoaXMuZWxlbWVudFJlZik7XG4gICAgaWYgKHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXJSZWYpIHtcbiAgICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXJSZWYuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgfVxufVxuIiwiPGJ1dHRvblxuICBraXJieS1idXR0b25cbiAgdHlwZT1cImJ1dHRvblwiXG4gIFthdHRyLmlkXT1cIl9jb21ib2JveElkXCJcbiAgcm9sZT1cImNvbWJvYm94XCJcbiAgYXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIlxuICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIl9saXN0Ym94SWRcIlxuICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzT3BlblwiXG4gIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCJfbGlzdGJveElkICsgJy1pdGVtLScgKyBmb2N1c2VkSW5kZXhcIlxuICBbc2l6ZV09XCJzaXplXCJcbiAgW2F0dGVudGlvbkxldmVsXT1cImF0dGVudGlvbkxldmVsXCJcbiAgKGNsaWNrKT1cIm9uVG9nZ2xlKCRldmVudClcIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuPlxuICA8c3BhbiBjbGFzcz1cInRleHRcIj57eyBzZWxlY3RlZFRleHQgfHwgcGxhY2Vob2xkZXIgfX08L3NwYW4+XG4gIDxraXJieS1pY29uIFtuYW1lXT1cImlzT3BlbiA/ICdhcnJvdy11cCcgOiAnYXJyb3ctZG93bidcIj48L2tpcmJ5LWljb24+XG48L2J1dHRvbj5cblxuPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInVzZVBvcG92ZXIgPyBwb3BvdmVyVGVtcGxhdGUgOiBpdGVtV3JhcHBlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjcG9wb3ZlclRlbXBsYXRlPlxuICA8a2lyYnktcG9wb3ZlclxuICAgIFt0YXJnZXRdPVwiYnV0dG9uRWxlbWVudFwiXG4gICAgW3BvcG91dF09XCJwb3BvdXRcIlxuICAgIChjbGljayk9XCJfb25Qb3BvdmVyQ2xpY2soKVwiXG4gICAgKHdpbGxIaWRlKT1cIl9vblBvcG92ZXJXaWxsSGlkZSgpXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtV3JhcHBlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gIDwva2lyYnktcG9wb3Zlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaXRlbVdyYXBwZXJUZW1wbGF0ZT5cbiAgPGtpcmJ5LWNhcmQgcm9sZT1cImxpc3Rib3hcIiBbYXR0ci5pZF09XCJfbGlzdGJveElkXCIgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIl9jb21ib2JveElkXCI+XG4gICAgQGZvciAoaXRlbSBvZiBpdGVtczsgdHJhY2sgaXRlbTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICBpdGVtVGVtcGxhdGUgfHwgZGVmYXVsdEl0ZW1UZW1wbGF0ZTtcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IGl0ZW0sXG4gICAgICAgICAgICBzZWxlY3RlZDogaSA9PT0gc2VsZWN0ZWRJbmRleCxcbiAgICAgICAgICAgIGZvY3VzZWQ6IGkgPT09IGZvY3VzZWRJbmRleCxcbiAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgIH1cbiAgICAgICAgXCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gIDwva2lyYnktY2FyZD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjZGVmYXVsdEl0ZW1UZW1wbGF0ZVxuICBsZXQtaXRlbVxuICBsZXQtc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiXG4gIGxldC1pbmRleD1cImluZGV4XCJcbiAgbGV0LWZvY3VzZWQ9XCJmb2N1c2VkXCJcbj5cbiAgPGtpcmJ5LWl0ZW1cbiAgICBbc2VsZWN0YWJsZV09XCJ0cnVlXCJcbiAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRcIlxuICAgIChjbGljayk9XCJvbkl0ZW1TZWxlY3QoaW5kZXgpXCJcbiAgICBbY2xhc3MuZm9jdXNlZF09XCJmb2N1c2VkXCJcbiAgICByb2xlPVwib3B0aW9uXCJcbiAgICBbYXR0ci5pZF09XCJfbGlzdGJveElkICsgJy1pdGVtLScgKyBpbmRleFwiXG4gICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJzZWxlY3RlZFwiXG4gID5cbiAgICA8IS0tIFRhYmluZGV4IGZpeGVzIGlzc3VlIHdpdGggcG9wb3ZlciBkcm9wZG93biBub3Qgd29ya2luZyBpbiBzYWZhcmkgLS0+XG4gICAgPHAgY2xhc3M9XCJraXJieS1pdGVtLXRpdGxlXCI+e3sgZ2V0VGV4dEZyb21JdGVtKGl0ZW0pIH19PC9wPlxuICAgIEBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgIDxraXJieS1pY29uIG5hbWU9XCJjaGVja21hcmstc2VsZWN0ZWRcIiBzbG90PVwiZW5kXCI+PC9raXJieS1pY29uPlxuICAgIH1cbiAgPC9raXJieS1pdGVtPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\nimport { CardModule } from '@kirbydesign/designsystem/card';\nimport { FormFieldModule } from '@kirbydesign/designsystem/form-field';\nimport { IconModule } from '@kirbydesign/designsystem/icon';\nimport { ItemModule } from '@kirbydesign/designsystem/item';\nimport { PopoverComponent } from '@kirbydesign/designsystem/popover';\nimport { ListItemTemplateDirective, ListModule } from '@kirbydesign/designsystem/list';\nimport { DropdownComponent } from './dropdown.component';\nimport { KeyboardHandlerService } from './keyboard-handler.service';\nimport * as i0 from \"@angular/core\";\nconst declarations = [DropdownComponent];\nexport class DropdownModule {\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: DropdownModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.2\", ngImport: i0, type: DropdownModule, declarations: [DropdownComponent], imports: [CardModule,\n IconModule,\n ItemModule,\n FormFieldModule,\n PopoverComponent,\n ButtonComponent,\n CommonModule,\n ListModule], exports: [DropdownComponent, ListItemTemplateDirective] }); }\n /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: DropdownModule, providers: [KeyboardHandlerService], imports: [CardModule,\n IconModule,\n ItemModule,\n FormFieldModule,\n PopoverComponent,\n ButtonComponent,\n CommonModule,\n ListModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: DropdownModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n CardModule,\n IconModule,\n ItemModule,\n FormFieldModule,\n PopoverComponent,\n ButtonComponent,\n CommonModule,\n ListModule,\n ],\n declarations: [...declarations],\n exports: [...declarations, ListItemTemplateDirective],\n providers: [KeyboardHandlerService],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZHJvcGRvd24vc3JjL2Ryb3Bkb3duLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFFcEUsTUFBTSxZQUFZLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBaUJ6QyxNQUFNLE9BQU8sY0FBYztpSUFBZCxjQUFjO2tJQUFkLGNBQWMsaUJBakJMLGlCQUFpQixhQUluQyxVQUFVO1lBQ1YsVUFBVTtZQUNWLFVBQVU7WUFDVixlQUFlO1lBQ2YsZ0JBQWdCO1lBQ2hCLGVBQWU7WUFDZixZQUFZO1lBQ1osVUFBVSxhQVhRLGlCQUFpQixFQWNWLHlCQUF5QjtrSUFHekMsY0FBYyxhQUZkLENBQUMsc0JBQXNCLENBQUMsWUFYakMsVUFBVTtZQUNWLFVBQVU7WUFDVixVQUFVO1lBQ1YsZUFBZTtZQUNmLGdCQUFnQjtZQUNoQixlQUFlO1lBQ2YsWUFBWTtZQUNaLFVBQVU7OzJGQU1ELGNBQWM7a0JBZjFCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixVQUFVO3dCQUNWLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLFlBQVk7d0JBQ1osVUFBVTtxQkFDWDtvQkFDRCxZQUFZLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQztvQkFDL0IsT0FBTyxFQUFFLENBQUMsR0FBRyxZQUFZLEVBQUUseUJBQXlCLENBQUM7b0JBQ3JELFNBQVMsRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2J1dHRvbic7XG5pbXBvcnQgeyBDYXJkTW9kdWxlIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9jYXJkJztcbmltcG9ydCB7IEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBJY29uTW9kdWxlIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9pY29uJztcbmltcG9ydCB7IEl0ZW1Nb2R1bGUgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2l0ZW0nO1xuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vcG9wb3Zlcic7XG5cbmltcG9ydCB7IExpc3RJdGVtVGVtcGxhdGVEaXJlY3RpdmUsIExpc3RNb2R1bGUgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2xpc3QnO1xuaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuL2Ryb3Bkb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBLZXlib2FyZEhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnLi9rZXlib2FyZC1oYW5kbGVyLnNlcnZpY2UnO1xuXG5jb25zdCBkZWNsYXJhdGlvbnMgPSBbRHJvcGRvd25Db21wb25lbnRdO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQ2FyZE1vZHVsZSxcbiAgICBJY29uTW9kdWxlLFxuICAgIEl0ZW1Nb2R1bGUsXG4gICAgRm9ybUZpZWxkTW9kdWxlLFxuICAgIFBvcG92ZXJDb21wb25lbnQsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBMaXN0TW9kdWxlLFxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFsuLi5kZWNsYXJhdGlvbnNdLFxuICBleHBvcnRzOiBbLi4uZGVjbGFyYXRpb25zLCBMaXN0SXRlbVRlbXBsYXRlRGlyZWN0aXZlXSxcbiAgcHJvdmlkZXJzOiBbS2V5Ym9hcmRIYW5kbGVyU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIERyb3Bkb3duTW9kdWxlIHt9XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './public_api';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2lyYnlkZXNpZ24tZGVzaWduc3lzdGVtLWRyb3Bkb3duLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZHJvcGRvd24vc3JjL2tpcmJ5ZGVzaWduLWRlc2lnbnN5c3RlbS1kcm9wZG93bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuIl19"],"names":["i1.KeyboardHandlerService"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAU,IAAC;AACX,CAAC,UAAU,SAAS,EAAE;AACtB,IAAI,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ;AACjD,IAAI,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS;AACnD,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM;AAC7C,CAAC,EAAE,SAAS,KAAK,SAAS,GAAG,EAAE,CAAC,CAAC;AACvB,IAAC;AACX,CAAC,UAAU,iBAAiB,EAAE;AAC9B,IAAI,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;AACzD,IAAI,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM;AAC7D,CAAC,EAAE,iBAAiB,KAAK,iBAAiB,GAAG,EAAE,CAAC,CAAC;;ACR1C,MAAM,sBAAsB,CAAC;AACpC,IAAI,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,GAAG,KAAK,EAAE;AAChE,QAAQ,IAAI,QAAQ,GAAG,CAAC,CAAC;AACzB,QAAQ,QAAQ,KAAK,CAAC,GAAG;AACzB,YAAY,KAAK,SAAS;AAC1B,YAAY,KAAK,WAAW;AAC5B,gBAAgB,IAAI,aAAa,KAAK,CAAC,IAAI,WAAW,EAAE;AACxD,oBAAoB,QAAQ,GAAG,QAAQ;AACvC,gBAAgB;AAChB,qBAAqB;AACrB;AACA,oBAAoB,QAAQ,GAAG,aAAa,GAAG,CAAC;AAChD,gBAAgB;AAChB,gBAAgB;AAChB,YAAY,KAAK,WAAW;AAC5B,YAAY,KAAK,YAAY;AAC7B,gBAAgB,IAAI,aAAa,KAAK,SAAS,KAAK,aAAa,KAAK,QAAQ,IAAI,WAAW,CAAC,EAAE;AAChG;AACA,oBAAoB,QAAQ,GAAG,CAAC;AAChC,gBAAgB;AAChB,qBAAqB,IAAI,aAAa,GAAG,QAAQ,EAAE;AACnD;AACA,oBAAoB,QAAQ,GAAG,aAAa,GAAG,CAAC;AAChD,gBAAgB;AAChB,gBAAgB;AAChB,YAAY,KAAK,MAAM;AACvB;AACA,gBAAgB,QAAQ,GAAG,CAAC;AAC5B,gBAAgB;AAChB,YAAY,KAAK,KAAK;AACtB;AACA,gBAAgB,QAAQ,GAAG,QAAQ;AACnC,gBAAgB;AAChB,YAAY;AACZ,gBAAgB;AAChB;AACA,QAAQ,OAAO,QAAQ;AACvB,IAAI;AACJ,uBAAuB,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AAC5M,uBAAuB,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AACnL;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,CAAC;AAChI,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE,MAAM;AACtC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;AC7BN,MAAM,iBAAiB,CAAC;AAC/B,IAAI,SAAS,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC;AACzC,IAAI,IAAI,KAAK,GAAG;AAChB,QAAQ,OAAO,IAAI,CAAC,MAAM;AAC1B,IAAI;AACJ,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;AACrB,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK;AAC3B,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI;AAC5D,IAAI;AACJ,IAAI,IAAI,aAAa,GAAG;AACxB,QAAQ,OAAO,IAAI,CAAC,cAAc;AAClC,IAAI;AACJ,IAAI,IAAI,aAAa,CAAC,KAAK,EAAE;AAC7B,QAAQ,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,cAAc,IAAI,KAAK,EAAE;AACjE,YAAY,IAAI,CAAC,cAAc,GAAG,KAAK;AACvC,YAAY,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc;AACnD,YAAY,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI;AAChE,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,YAAY,GAAG;AACvB,QAAQ,OAAO,IAAI,CAAC,aAAa;AACjC,IAAI;AACJ,IAAI,IAAI,YAAY,CAAC,KAAK,EAAE;AAC5B,QAAQ,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE;AAC1C,YAAY,IAAI,CAAC,aAAa,GAAG,KAAK;AACtC,YAAY,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC;AACvD,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE;AAC1B,QAAQ,IAAI,CAAC,mBAAmB,GAAG,SAAS,IAAI,mBAAmB,CAAC,KAAK;AACzE,IAAI;AACJ,IAAI,IAAI,MAAM,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,mBAAmB;AACvC,IAAI;AACJ,IAAI,IAAI,WAAW,GAAG;AACtB,QAAQ,OAAO,IAAI,CAAC,QAAQ,GAAG,UAAU,GAAG,IAAI;AAChD,IAAI;AACJ,IAAI,IAAI,SAAS,GAAG;AACpB,QAAQ,OAAO,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ;AACjD,IAAI;AACJ;AACA,IAAI,IAAI,eAAe,GAAG;AAC1B,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,IAAI,KAAK,GAAG;AAChB,QAAQ,OAAO,IAAI,CAAC,MAAM;AAC1B,IAAI;AACJ,IAAI,IAAI,YAAY,GAAG;AACvB,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/C,IAAI;AACJ,IAAI,IAAI,aAAa,GAAG;AACxB,QAAQ,OAAO,IAAI,CAAC,MAAM,KAAK,OAAO;AACtC,IAAI;AACJ,IAAI,IAAI,UAAU,GAAG;AACrB,QAAQ,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,OAAO;AAC/C,IAAI;AACJ,IAAI,IAAI,MAAM,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,IAAI;AAC5C,IAAI;AACJ,IAAI,IAAI,WAAW,GAAG;AACtB,QAAQ,OAAO,IAAI,CAAC,mBAAmB,KAAK,mBAAmB,CAAC,IAAI;AACpE,IAAI;AACJ,IAAI,IAAI,SAAS,GAAG;AACpB,QAAQ,OAAO,IAAI,CAAC,iBAAiB,KAAK,iBAAiB,CAAC,EAAE;AAC9D,IAAI;AACJ,IAAI,gCAAgC,GAAG;AACvC,QAAQ,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;AACpI,IAAI;AACJ,IAAI,IAAI,iBAAiB,CAAC,UAAU,EAAE;AACtC,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,yBAAyB,EAAE,MAAM,GAAG,CAAC;AAC1E,QAAQ,IAAI,eAAe,EAAE;AAC7B,YAAY,IAAI,CAAC,uBAAuB,EAAE;AAC1C,QAAQ;AACR;AACA,QAAQ,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK,KAAK;AACjD,YAAY,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC;AACjF,YAAY,MAAM,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM;AACtG,gBAAgB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACxC,YAAY,CAAC,CAAC;AACd,YAAY,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,oBAAoB,CAAC;AACrE,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,CAAC,kBAAkB,GAAG,UAAU;AAC5C,IAAI;AACJ,IAAI,IAAI,iBAAiB,GAAG;AAC5B,QAAQ,OAAO,IAAI,CAAC,kBAAkB;AACtC,IAAI;AACJ,IAAI,WAAW,CAAC,QAAQ,EAAE,UAAU,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE;AACxG,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ;AAChC,QAAQ,IAAI,CAAC,UAAU,GAAG,UAAU;AACpC,QAAQ,IAAI,CAAC,iBAAiB,GAAG,iBAAiB;AAClD,QAAQ,IAAI,CAAC,sBAAsB,GAAG,sBAAsB;AAC5D,QAAQ,IAAI,CAAC,qBAAqB,GAAG,qBAAqB;AAC1D,QAAQ,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM;AACrC,QAAQ,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC,KAAK;AAC5D,QAAQ,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,IAAI;AACvD,QAAQ,IAAI,CAAC,oBAAoB,GAAG,CAAC,YAAY,EAAE,iBAAiB,CAAC;AACrE,QAAQ,IAAI,CAAC,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE;AAC7E,QAAQ,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE;AAC5E,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE;AACxB,QAAQ,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;AAChC;AACA;AACA,QAAQ,IAAI,CAAC,aAAa,GAAG,CAAC;AAC9B,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM;AACtC,QAAQ,IAAI,CAAC,WAAW,GAAG,gBAAgB;AAC3C,QAAQ,IAAI,CAAC,cAAc,GAAG,GAAG;AACjC,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK;AAC7B,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI;AACxB,QAAQ,IAAI,CAAC,QAAQ,GAAG,CAAC;AACzB,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK;AAC/B;AACA;AACA;AACA,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,EAAE;AACxC,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,OAAO,GAAG,KAAK;AAC5B,QAAQ,IAAI,CAAC,yBAAyB,GAAG,EAAE;AAC3C,QAAQ,IAAI,CAAC,YAAY,GAAG,EAAE;AAC9B,QAAQ,IAAI,CAAC,mBAAmB,GAAG,GAAG,CAAC;AACvC,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC;AAClC,QAAQ,IAAI,CAAC,UAAU,GAAG,MAAM,EAAE,CAAC;AACnC,IAAI;AACJ,IAAI,QAAQ,CAAC,KAAK,EAAE;AACpB,QAAQ,KAAK,CAAC,eAAe,EAAE;AAC/B,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI;AAC3B,QAAQ,IAAI,CAAC,MAAM,EAAE;AACrB,IAAI;AACJ,IAAI,MAAM,GAAG;AACb,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC3B,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;AAChD,IAAI;AACJ;AACA;AACA,IAAI,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE;AACtC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU;AAC5B,YAAY;AACZ,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,CAAC,QAAQ,CAAC;AAC1G,IAAI;AACJ,IAAI,eAAe,GAAG;AACtB,QAAQ,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE;AACxD,YAAY,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,qBAAqB,EAAE;AACjG,YAAY,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,SAAS,CAAC;AAC5D,YAAY,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,SAAS,CAAC;AAC5D;AACA,YAAY,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;AAC/E,YAAY,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,KAAK;AAC3E,gBAAgB,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK;AACxD,gBAAgB,IAAI,QAAQ,GAAG,CAAC,EAAE;AAClC,oBAAoB,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnF,gBAAgB;AAChB,YAAY,CAAC,CAAC;AACd,QAAQ;AACR,QAAQ,IAAI,CAAC,gCAAgC,EAAE;AAC/C,QAAQ,IAAI,CAAC,mBAAmB,EAAE;AAClC,IAAI;AACJ,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,IAAI,IAAI,CAAC,UAAU;AAC3B,YAAY;AACZ,QAAQ,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE;AAC3C;AACA;AACA,YAAY,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,GAAG;AACzE;AACA;AACA;AACA,YAAY,MAAM,OAAO,GAAG;AAC5B,gBAAgB,UAAU,EAAE,iBAAiB,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACzE,aAAa;AACb,YAAY,MAAM,QAAQ,GAAG,CAAC,OAAO,KAAK;AAC1C;AACA,gBAAgB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,OAAO,EAAE;AACtD,oBAAoB;AACpB,gBAAgB;AAChB;AACA,gBAAgB,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACxD,gBAAgB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC;AACxC,gBAAgB,MAAM,SAAS,GAAG,KAAK,CAAC,kBAAkB,CAAC,KAAK,GAAG,CAAC;AACpE,gBAAgB,IAAI,SAAS,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,EAAE;AAC9D,oBAAoB,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;AACtD,oBAAoB,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AACpD,gBAAgB;AAChB,gBAAgB,IAAI,CAAC,YAAY,EAAE;AACnC,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;AACtD,YAAY,CAAC;AACb,YAAY,IAAI,CAAC,uBAAuB,GAAG,IAAI,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC;AACtF,YAAY,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;AAChF,QAAQ;AACR,IAAI;AACJ,IAAI,sBAAsB,CAAC,KAAK,EAAE;AAClC;AACA;AACA,QAAQ,IAAI,IAAI,CAAC,mBAAmB,KAAK,mBAAmB,CAAC,KAAK,EAAE;AACpE,YAAY,IAAI,KAAK,CAAC,kBAAkB,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE;AACzE,gBAAgB,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC,IAAI;AACnE,YAAY;AACZ,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,KAAK,CAAC,kBAAkB,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE;AACvE,gBAAgB,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC,KAAK;AACpE,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ,IAAI,oBAAoB,CAAC,KAAK,EAAE;AAChC,QAAQ,IAAI,KAAK,CAAC,kBAAkB,CAAC,GAAG,GAAG,CAAC,EAAE;AAC9C;AACA;AACA,YAAY,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,IAAI;AAC3D,QAAQ;AACR,QAAQ,IAAI,KAAK,CAAC,kBAAkB,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE;AACvE;AACA,YAAY,MAAM,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,GAAG;AAChG,YAAY,MAAM,OAAO,GAAG,CAAC,CAAC;AAC9B;AACA,YAAY,IAAI,kBAAkB,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,GAAG,OAAO,EAAE;AAC1E;AACA,gBAAgB,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,EAAE;AAC7D,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,GAAG;AACX,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC3B,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC1B,YAAY,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,OAAO;AAC1C;AACA,YAAY,IAAI,CAAC,qBAAqB,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,EAAE,iBAAiB,CAAC,gBAAgB,CAAC;AAClH;AACA,YAAY,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC;AAChF,QAAQ;AACR,IAAI;AACJ,IAAI,YAAY,GAAG;AACnB,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,OAAO,EAAE;AAC9C,YAAY,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI;AACvC,YAAY,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;AAChC,YAAY,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC;AACtD,YAAY,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;AACjD,QAAQ;AACR,IAAI;AACJ,IAAI,KAAK,GAAG;AACZ,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC3B,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE;AACzB,YAAY,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM;AACzC;AACA,YAAY,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,IAAI;AAC3D,YAAY,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;AAChC,QAAQ;AACR,IAAI;AACJ,IAAI,YAAY,CAAC,KAAK,EAAE;AACxB,QAAQ,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AAC9B,QAAQ,IAAI,CAAC,KAAK,EAAE;AACpB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,UAAU,CAAC,KAAK,EAAE;AACtB,QAAQ,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AACtC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,EAAE,EAAE;AACzB,QAAQ,IAAI,CAAC,SAAS,GAAG,EAAE;AAC3B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,EAAE,EAAE;AAC1B,QAAQ,IAAI,CAAC,UAAU,GAAG,EAAE;AAC5B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,UAAU,EAAE;AACjC,QAAQ,IAAI,CAAC,QAAQ,GAAG,UAAU;AAClC,IAAI;AACJ,IAAI,UAAU,CAAC,KAAK,EAAE;AACtB,QAAQ,IAAI,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE;AACzC,YAAY,IAAI,CAAC,aAAa,GAAG,KAAK;AACtC,YAAY,IAAI,CAAC,YAAY,GAAG,KAAK;AACrC,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACxC,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AACtC,QAAQ;AACR,IAAI;AACJ,IAAI,kBAAkB,CAAC,KAAK,EAAE;AAC9B,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AACtD,IAAI;AACJ,IAAI,eAAe,CAAC,IAAI,EAAE;AAC1B,QAAQ,IAAI,CAAC,IAAI,EAAE;AACnB,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,QAAQ,OAAO,OAAO,IAAI,KAAK,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAC5E,IAAI;AACJ,IAAI,kBAAkB,CAAC,KAAK,EAAE;AAC9B,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC;AAC5E,cAAc,IAAI,CAAC;AACnB,cAAc,IAAI,CAAC,iBAAiB;AACpC,QAAQ,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,EAAE;AAC7C,YAAY,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;AACjE,YAAY,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,aAAa,EAAE;AACtE,gBAAgB,MAAM,WAAW,GAAG,iBAAiB,CAAC,aAAa;AACnE,gBAAgB,WAAW,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAChE,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ,IAAI,MAAM,GAAG;AACb,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE;AACzB,YAAY,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;AAC9C,YAAY,IAAI,CAAC,KAAK,EAAE;AACxB,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;AAC1B;AACA;AACA;AACA,YAAY,IAAI,CAAC,OAAO,GAAG,KAAK;AAChC,QAAQ;AACR,IAAI;AACJ,IAAI,yCAAyC,CAAC,KAAK,EAAE;AACrD,QAAQ,KAAK,CAAC,wBAAwB,EAAE;AACxC,QAAQ,KAAK,CAAC,cAAc,EAAE;AAC9B,IAAI;AACJ,IAAI,iBAAiB,CAAC,IAAI,EAAE;AAC5B,QAAQ,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC;AAC9C,QAAQ,IAAI,CAAC,YAAY,IAAI,IAAI;AACjC,QAAQ,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC,MAAM;AACpD,YAAY,IAAI,CAAC,iBAAiB,EAAE;AACpC,QAAQ,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC;AACpC,IAAI;AACJ,IAAI,iBAAiB,GAAG;AACxB,QAAQ,IAAI,CAAC,YAAY,GAAG,EAAE;AAC9B,IAAI;AACJ,IAAI,UAAU,CAAC,KAAK,EAAE;AACtB,QAAQ,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG;AAC7B,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAY,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC;AAClE,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,QAAQ;AACzB,YAAY;AACZ,QAAQ,IAAI,kBAAkB,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;AAC1D,YAAY,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AAChE,QAAQ;AACR;AACA,QAAQ,IAAI,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,EAAE;AACjD,YAAY,IAAI,CAAC,yCAAyC,CAAC,KAAK,CAAC;AACjE,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC9B,gBAAgB,IAAI,CAAC,IAAI,EAAE;AAC3B,gBAAgB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC;AACpF,YAAY;AACZ,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,IAAI,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,EAAE;AAC/C,YAAY,IAAI,CAAC,yCAAyC,CAAC,KAAK,CAAC;AACjE,YAAY,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,EAAE;AACxC,gBAAgB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;AAClD,gBAAgB,IAAI,CAAC,KAAK,EAAE;AAC5B,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,IAAI,GAAG,KAAK,QAAQ,EAAE;AAC9B,YAAY,IAAI,CAAC,yCAAyC,CAAC,KAAK,CAAC;AACjE,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC9B,gBAAgB,IAAI,CAAC,IAAI,EAAE;AAC3B,YAAY;AACZ,YAAY,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AACnE,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,IAAI,GAAG,KAAK,UAAU,EAAE;AAChC,YAAY,IAAI,CAAC,yCAAyC,CAAC,KAAK,CAAC;AACjE,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC9B,gBAAgB,IAAI,CAAC,IAAI,EAAE;AAC3B,YAAY;AACZ,YAAY,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AACvF,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ,IAAI,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE;AAC/C,QAAQ,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG;AAC7B,QAAQ,IAAI,MAAM,EAAE;AACpB,YAAY,IAAI,CAAC,yCAAyC,CAAC,KAAK,CAAC;AACjE,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,IAAI,EAAE;AACvB,QAAQ;AACR;AACA,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;AAC1C,YAAY,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE,EAAE;AACtE,YAAY,IAAI,CAAC,YAAY,GAAG,GAAG;AACnC,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;AACvC,QAAQ;AACR,QAAQ,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;AAC9D,QAAQ,IAAI,UAAU,GAAG,CAAC;AAC1B,QAAQ,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,MAAM,EAAE;AAC/C,YAAY,UAAU,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC;AAC9C,QAAQ;AACR,QAAQ,IAAI,cAAc,GAAG,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC;AAC/F,QAAQ,IAAI,cAAc,KAAK,CAAC,CAAC,IAAI,iBAAiB,EAAE;AACxD,YAAY,cAAc,GAAG,IAAI,CAAC,8BAA8B,CAAC,GAAG,EAAE,UAAU,CAAC;AACjF,QAAQ;AACR,QAAQ,IAAI,cAAc,KAAK,CAAC,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,MAAM,EAAE;AACxE,YAAY,cAAc,GAAG,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;AACtF,QAAQ;AACR,QAAQ,IAAI,cAAc,GAAG,CAAC,CAAC,EAAE;AACjC,YAAY,IAAI,CAAC,YAAY,GAAG,cAAc;AAC9C,QAAQ;AACR,IAAI;AACJ,IAAI,8BAA8B,CAAC,IAAI,EAAE,UAAU,GAAG,CAAC,EAAE;AACzD,QAAQ,IAAI,SAAS;AACrB;AACA,QAAQ,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;AACrE,YAAY,SAAS,GAAG,IAAI,CAAC;AAC7B,iBAAiB,OAAO;AACxB,iBAAiB,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC1E,QAAQ;AACR,aAAa;AACb,YAAY,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AAClF,QAAQ;AACR,QAAQ,OAAO,kBAAkB,CAAC,kCAAkC,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC;AACjG,IAAI;AACJ,IAAI,YAAY,CAAC,KAAK,EAAE;AACxB,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC3B,YAAY,KAAK,CAAC,cAAc,EAAE;AAClC,YAAY,KAAK,CAAC,wBAAwB,EAAE;AAC5C,QAAQ;AACR,IAAI;AACJ,IAAI,aAAa,CAAC,KAAK,EAAE;AACzB,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE;AACzB,YAAY,KAAK,CAAC,eAAe,EAAE;AACnC,QAAQ;AACR,IAAI;AACJ,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC3B,YAAY,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,EAAE;AAChD,QAAQ;AACR,IAAI;AACJ,IAAI,kBAAkB,GAAG;AACzB,QAAQ,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM;AACrC,QAAQ,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;AAC7C,IAAI;AACJ,IAAI,gBAAgB,GAAG;AACvB,QAAQ,IAAI,CAAC,KAAK,EAAE;AACpB,QAAQ,IAAI,CAAC,UAAU,EAAE;AACzB,IAAI;AACJ,IAAI,eAAe,GAAG;AACtB,QAAQ,IAAI,CAAC,KAAK,EAAE;AACpB,IAAI;AACJ,IAAI,OAAO,GAAG;AACd,QAAQ,IAAI,IAAI,CAAC,UAAU;AAC3B,YAAY;AACZ,QAAQ,IAAI,CAAC,KAAK,EAAE;AACpB,QAAQ,IAAI,CAAC,UAAU,EAAE;AACzB,IAAI;AACJ,IAAI,eAAe,CAAC,KAAK,EAAE;AAC3B,QAAQ,KAAK,CAAC,cAAc,EAAE;AAC9B,QAAQ,KAAK,CAAC,eAAe,EAAE;AAC/B,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE;AACzB,YAAY,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;AAC9C,QAAQ;AACR,QAAQ,IAAI,CAAC,MAAM,EAAE;AACrB,IAAI;AACJ,IAAI,YAAY,CAAC,KAAK,EAAE;AACxB,QAAQ,IAAI,IAAI,CAAC,QAAQ;AACzB,YAAY,OAAO,KAAK;AACxB;AACA,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,CAAC,EAAE;AACtF,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC1B;AACA,YAAY,KAAK,CAAC,cAAc,EAAE;AAClC,YAAY,IAAI,CAAC,IAAI,EAAE;AACvB;AACA,YAAY,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;AACzD,gBAAgB,QAAQ,KAAK,CAAC,GAAG;AACjC,oBAAoB,KAAK,SAAS;AAClC,wBAAwB,IAAI,CAAC,YAAY,GAAG,CAAC;AAC7C,wBAAwB;AACxB,oBAAoB,KAAK,WAAW;AACpC,wBAAwB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AACjE,wBAAwB;AACxB,oBAAoB;AACpB,wBAAwB;AACxB;AACA,YAAY;AACZ,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACnH,QAAQ,IAAI,eAAe,GAAG,CAAC,CAAC,EAAE;AAClC,YAAY,IAAI,CAAC,YAAY,GAAG,eAAe;AAC/C,QAAQ;AACR,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,IAAI,cAAc,CAAC,KAAK,EAAE;AAC1B,QAAQ,IAAI,IAAI,CAAC,QAAQ;AACzB,YAAY;AACZ,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC1B,YAAY,KAAK,CAAC,cAAc,EAAE;AAClC,YAAY,IAAI,CAAC,IAAI,EAAE;AACvB,QAAQ;AACR,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACnH,QAAQ,IAAI,eAAe,GAAG,CAAC,CAAC,EAAE;AAClC,YAAY,IAAI,CAAC,YAAY,GAAG,eAAe;AAC/C,QAAQ;AACR,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,IAAI,uBAAuB,GAAG;AAC9B,QAAQ,IAAI,oBAAoB;AAChC,QAAQ,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,yBAAyB,CAAC,GAAG,EAAE,MAAM,SAAS,EAAE;AAC5F,YAAY,oBAAoB,EAAE;AAClC,QAAQ;AACR,IAAI;AACJ,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,uBAAuB,EAAE;AACtC,QAAQ,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;AAC7D,QAAQ,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAC1C,YAAY,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE;AACrD,QAAQ;AACR,IAAI;AACJ,uBAAuB,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,KAAK,EAAEA,sBAAyB,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,qBAAqB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AACnW,uBAAuB,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,oBAAoB,EAAE,WAAW,EAAE,sBAAsB,EAAE,YAAY,EAAE,uBAAuB,EAAE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,EAAE,iBAAiB,EAAE,eAAe,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,cAAc,EAAE,wBAAwB,EAAE,aAAa,EAAE,wBAAwB,EAAE,EAAE,UAAU,EAAE,EAAE,eAAe,EAAE,kBAAkB,EAAE,aAAa,EAAE,eAAe,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,cAAc,EAAE,sBAAsB,EAAE,cAAc,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,aAAa,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE;AAC1gD,YAAY;AACZ,gBAAgB,OAAO,EAAE,iBAAiB;AAC1C,gBAAgB,WAAW,EAAE,UAAU,EAAE,MAAM,iBAAiB,EAAE;AAClE,gBAAgB,KAAK,EAAE,IAAI;AAC3B,aAAa;AACb,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,yBAAyB,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,yBAAyB,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,mnEAAmnE,EAAE,MAAM,EAAE,CAAC,09DAA09D,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,2DAA2D,EAAE,MAAM,EAAE,CAAC,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,yBAAyB,EAAE,kBAAkB,EAAE,0BAA0B,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACx0L;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC;AAC3H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE;AAC5D,wBAAwB;AACxB,4BAA4B,OAAO,EAAE,iBAAiB;AACtD,4BAA4B,WAAW,EAAE,UAAU,EAAE,MAAM,iBAAiB,EAAE;AAC9E,4BAA4B,KAAK,EAAE,IAAI;AACvC,yBAAyB;AACzB,qBAAqB,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,mnEAAmnE,EAAE,MAAM,EAAE,CAAC,09DAA09D,CAAC,EAAE;AAC/oI,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAEA,sBAAyB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,qBAAqB,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC;AACxN,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;AAChC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;AACnC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;AAC9B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;AACzB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;AACjC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;AACzB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;AAC9B,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,eAAe;AACtC,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,aAAa;AACpC,aAAa,EAAE;AACf,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC;AACvB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,oBAAoB;AAC3C,aAAa,EAAE;AACf,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;AAClC,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,cAAc;AACrC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;AACzB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;AAChC,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,cAAc;AACrC,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,kBAAkB;AACzC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;AACzB,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,eAAe;AACtC,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;AAC9B,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,mBAAmB;AAC1C,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;AAC5B,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,iBAAiB;AACxC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1B,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,eAAe;AACtC,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;AACrF,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE,eAAe;AACrC,gBAAgB,IAAI,EAAE,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;AACtE,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;AAC9B,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;AAC1D,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1B,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,gBAAgB;AACvC,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;AAChC,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE;AAC1E,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACpC,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;AAC1D,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACpC,gBAAgB,IAAI,EAAE,eAAe;AACrC,gBAAgB,IAAI,EAAE,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;AAC1D,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;AACzB,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,aAAa;AACpC,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;AAC5C,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;AAC9C,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;AAChC,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC;AAC/C,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,OAAO;AAC9B,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;AACnC,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,eAAe;AACtC,aAAa,EAAE;AACf,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,gBAAgB;AACvC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1B,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC;AACzC,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;AAClC,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;AAClD,aAAa,EAAE;AACf,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;AAClD,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;AACpD,aAAa,EAAE;AACf,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,mBAAmB,EAAE,CAAC,QAAQ,CAAC;AACtD,aAAa,EAAE;AACf,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,mBAAmB,EAAE,CAAC,QAAQ,CAAC;AACtD,aAAa,EAAE;AACf,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,oBAAoB,EAAE,CAAC,QAAQ,CAAC;AACvD,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;AACjC,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,cAAc,EAAE,CAAC,QAAQ,CAAC;AACjD,aAAa,EAAE;AACf,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC;AAChD,aAAa,CAAC,EAAE,EAAE,CAAC;;AC9rBnB,MAAM,YAAY,GAAG,CAAC,iBAAiB,CAAC;AACjC,MAAM,cAAc,CAAC;AAC5B,uBAAuB,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;AAClM,uBAAuB,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU;AACzM,YAAY,UAAU;AACtB,YAAY,UAAU;AACtB,YAAY,eAAe;AAC3B,YAAY,gBAAgB;AAC5B,YAAY,eAAe;AAC3B,YAAY,YAAY;AACxB,YAAY,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,iBAAiB,EAAE,yBAAyB,CAAC,EAAE,CAAC,CAAC;AACpF,uBAAuB,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,sBAAsB,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU;AAC3M,YAAY,UAAU;AACtB,YAAY,UAAU;AACtB,YAAY,eAAe;AAC3B,YAAY,gBAAgB;AAC5B,YAAY,eAAe;AAC3B,YAAY,YAAY;AACxB,YAAY,UAAU,CAAC,EAAE,CAAC,CAAC;AAC3B;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;AACxH,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,OAAO,EAAE;AAC7B,wBAAwB,UAAU;AAClC,wBAAwB,UAAU;AAClC,wBAAwB,UAAU;AAClC,wBAAwB,eAAe;AACvC,wBAAwB,gBAAgB;AACxC,wBAAwB,eAAe;AACvC,wBAAwB,YAAY;AACpC,wBAAwB,UAAU;AAClC,qBAAqB;AACrB,oBAAoB,YAAY,EAAE,CAAC,GAAG,YAAY,CAAC;AACnD,oBAAoB,OAAO,EAAE,CAAC,GAAG,YAAY,EAAE,yBAAyB,CAAC;AACzE,oBAAoB,SAAS,EAAE,CAAC,sBAAsB,CAAC;AACvD,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACjDb;AACA;AACA;;;;"}
|