@rosen-group/ngx-onboarding
Version:
Onboarding module for Angular applications
1 lines • 82.6 kB
Source Map (JSON)
{"version":3,"file":"rosen-group-ngx-onboarding.mjs","sources":["../../../projects/ngx-onboarding/src/lib/services/browser-dom-selector.service.ts","../../../projects/ngx-onboarding/src/lib/models/onboarding-item-container.model.ts","../../../projects/ngx-onboarding/src/lib/models/onboarding-html-element-helper.ts","../../../projects/ngx-onboarding/src/lib/services/enabled-status-base.service.ts","../../../projects/ngx-onboarding/src/lib/models/onboarding-buttons-position.enum.ts","../../../projects/ngx-onboarding/src/lib/services/seen-selectors-base.service.ts","../../../projects/ngx-onboarding/src/lib/services/onboarding.service.ts","../../../projects/ngx-onboarding/src/lib/services/translator-base.service.ts","../../../projects/ngx-onboarding/src/lib/pipes/primitive-translate.pipe.ts","../../../projects/ngx-onboarding/src/lib/onboarding-button.component.ts","../../../projects/ngx-onboarding/src/lib/onboarding-button.component.html","../../../projects/ngx-onboarding/src/lib/models/onboarding-item.model.ts","../../../projects/ngx-onboarding/src/lib/models/visible-onboarding-item.model.ts","../../../projects/ngx-onboarding/src/lib/services/window-ref.service.ts","../../../projects/ngx-onboarding/src/lib/onboarding-item.component.ts","../../../projects/ngx-onboarding/src/lib/onboarding-item.component.html","../../../projects/ngx-onboarding/src/lib/onboarding.component.ts","../../../projects/ngx-onboarding/src/lib/onboarding.component.html","../../../projects/ngx-onboarding/src/lib/services/local-storage-seen-selectors.service.ts","../../../projects/ngx-onboarding/src/lib/services/local-storage-enabled-status.service.ts","../../../projects/ngx-onboarding/src/lib/services/build-in-translator.service.ts","../../../projects/ngx-onboarding/src/lib/onboarding.module.ts","../../../projects/ngx-onboarding/src/public_api.ts","../../../projects/ngx-onboarding/src/rosen-group-ngx-onboarding.ts"],"sourcesContent":["import {Inject, Injectable} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\n/**\n * Wrapper for native implementations of querySelector from window.document\n */\n@Injectable()\nexport class BrowserDOMSelectorService {\n\n constructor(@Inject(DOCUMENT) private doc: any) {\n }\n\n /** see https://developer.mozilla.org/de/docs/Web/API/Document/querySelectorAll */\n public querySelectorAll(cssQuery: string): any[] {\n return this.doc.querySelectorAll(cssQuery);\n }\n\n /** see https://developer.mozilla.org/de/docs/Web/API/Document/querySelector */\n public querySelector(cssQuery: string): any {\n return this.doc.querySelector(cssQuery);\n }\n\n\n}\n","import { VisibleOnboardingItem } from './visible-onboarding-item.model';\n\n/**\n * Container to pass visible onboarding elements from onboarding service\n * to onboarding component (which can be grouped by their \"group\" field).\n *\n * Current group of elements can be accessed via currentItems(). Next group can be accessed via nextItems().\n *\n * Container does not have immediate access to grouping keys since elements are stored in jagged array.\n */\nexport class OnboardingItemContainer {\n\n private items: Array<VisibleOnboardingItem> = [];\n private totalCount = 0;\n private currentGroupIndex = 0;\n\n public get isEmpty(): boolean {\n return !this.items || this.totalCount === 0;\n }\n\n /**\n * Check if there is another group of visible onboarding items\n */\n public get hasNext(): boolean {\n return this.items && this.currentGroupIndex < (this.items.length - 1);\n }\n\n /**\n * Return current group of visible onboarding items\n */\n public get currentItem(): VisibleOnboardingItem {\n if (this.items && this.currentGroupIndex < this.items.length) {\n return this.items[this.currentGroupIndex];\n }\n return null;\n }\n\n /**\n * Return list of All visible onboarding items (regardless of grouping)\n */\n public get allItems(): Array<VisibleOnboardingItem> {\n return this.items.slice();\n }\n\n /**\n * Return count of all items (regardless of grouping)\n */\n public get totalLength() {\n return this.totalCount;\n }\n\n /**\n * Return next group of visible onboarding items\n */\n public nextItem(): VisibleOnboardingItem {\n if (this.hasNext) {\n this.currentGroupIndex++;\n return this.currentItem;\n }\n return null;\n }\n\n /**\n * Add new group of items\n */\n public add(items: Array<VisibleOnboardingItem>) {\n if (items) {\n this.items.push(...items);\n this.totalCount += items.length;\n }\n }\n\n /**\n * Clear items from container\n */\n public clear(): void {\n this.items = [];\n this.totalCount = 0;\n this.currentGroupIndex = 0;\n }\n}\n","/**\n * contains static helper methods for [[HTMLELement]]\n */\n\nexport class OnboardingHtmlElementHelper {\n\n public static isVisible(htmlElement: HTMLElement): boolean {\n if (!htmlElement || typeof getComputedStyle !== 'function') {\n return false;\n }\n\n const style = getComputedStyle(htmlElement);\n\n if (!htmlElement.offsetParent && style.position !== 'fixed') {\n return false;\n }\n\n return !(style.opacity === '0' || style.display === 'none' || style.visibility === 'hidden' || style.visibility === 'collapse');\n }\n\n /**\n * true if element is visible in view (not scrolled out) or false if not\n */\n public static isNotScrolledOut(htmlElement: HTMLElement): boolean {\n if (!htmlElement || !htmlElement.offsetParent) {\n return false;\n }\n const parent = <HTMLElement>htmlElement.offsetParent;\n const parentTop = parent.scrollTop;\n const parentBottom = parentTop + parent.offsetHeight;\n const elementTop = htmlElement.offsetTop;\n const elementBottom = elementTop + htmlElement.offsetHeight;\n\n return parentTop < elementTop && parentBottom > elementBottom;\n }\n\n /**\n * true if element and all parents are visible in view (not scrolled out) or false if not\n */\n public static isVisibleInViewWithParents(htmlElement: HTMLElement): boolean {\n do {\n if (htmlElement && htmlElement.tagName && htmlElement.tagName.toLowerCase() === 'body') {\n return true;\n }\n if (!OnboardingHtmlElementHelper.isVisible(htmlElement)) {\n return false;\n }\n if (htmlElement.scrollTop > 0) {\n if (!OnboardingHtmlElementHelper.isNotScrolledOut(htmlElement)) {\n return false;\n }\n }\n } while (htmlElement = <HTMLElement>htmlElement.offsetParent);\n return true;\n }\n\n /**\n * returns the position of element in document\n */\n public static getPosition(htmlElement: HTMLElement) {\n const rect: ClientRect | DOMRect = htmlElement.getBoundingClientRect();\n if (typeof DOMRect !== 'undefined' && rect instanceof DOMRect) {\n return {\n fixed: OnboardingHtmlElementHelper.isFixed(htmlElement),\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height\n };\n }\n return {\n fixed: OnboardingHtmlElementHelper.isFixed(htmlElement),\n x: rect.left,\n y: rect.top,\n width: rect.width,\n height: rect.height\n };\n }\n\n private static isFixed(htmlElement: HTMLElement) {\n if (!htmlElement || typeof getComputedStyle !== 'function') {\n return false;\n }\n const style = getComputedStyle(htmlElement);\n if (style.position === 'fixed') {\n return true;\n }\n return OnboardingHtmlElementHelper.isFixed(<HTMLElement>htmlElement.offsetParent);\n }\n\n}\n","import {Observable} from 'rxjs';\n\n/**\n * Base class for storing the onboarding item enabled status. Can be overridden with own implementations\n * if you don't want to store the settings in the local storage\n */\nexport abstract class EnabledStatusBaseService {\n\n /**\n * saves the status to a persistent storage\n */\n abstract save(enabled: boolean): void;\n\n /**\n * loads the status from the persistent storage\n * @returns status (true = enabled, false = disabled)\n */\n abstract load(): Observable<boolean>;\n}\n","export enum OnboardingButtonsPosition {\n BottomRight,\n Bottom,\n BottomLeft,\n Left,\n TopLeft,\n Top,\n TopRight,\n Right\n}\n","import {Observable} from 'rxjs';\n\n/**\n * Base class for storing the onboarding item seen status. Can be overridden with own implementations\n * if you don't want to store the settings in the local storage\n */\nexport abstract class SeenSelectorsBaseService {\n\n /**\n * loads seen items from a persistent storage\n * @returns string array of all seen selectors\n */\n abstract load(): Observable<Array<string>>;\n\n /**\n * save items to a persistent storage\n */\n abstract save(seenSelectors: Array<string>): void;\n\n}\n","import {interval, Subscription, timer} from 'rxjs';\nimport {ErrorHandler, EventEmitter, Injectable, NgZone} from '@angular/core';\nimport {BrowserDOMSelectorService} from './browser-dom-selector.service';\nimport {OnboardingItemContainer} from '../models/onboarding-item-container.model';\nimport {OnboardingConfiguration} from '../models/onboarding-configuration.model';\nimport {VisibleOnboardingItem} from '../models/visible-onboarding-item.model';\nimport {OnboardingHtmlElementHelper} from '../models/onboarding-html-element-helper';\nimport {OnboardingItem} from '../models/onboarding-item.model';\nimport {EnabledStatusBaseService} from './enabled-status-base.service';\nimport {OnboardingButtonsPosition} from '../models/onboarding-buttons-position.enum';\nimport {SeenSelectorsBaseService} from './seen-selectors-base.service';\n\nconst addSeenSelectorDebounceTime = 1000;\nconst enabledChangedDebounceTime = 1000;\nconst refreshTime = 2000;\n\n\n/**\n * The OnboardingService manages the configuration and the status of the onboarding component.\n *\n * The OnboardingComponent listens to the visibleItemsChanged event and retrieves new onboarding items from the visibleItems object.\n */\n@Injectable({\n providedIn: 'root' /* makes sure that service stays a single instance among seperate modules */\n})\nexport class OnboardingService {\n\n /**\n * Container with currently visible onboarding items (grouped).\n * OnboardingComponent must iterate through these groups.\n *\n * called by OnboardingComponent\n */\n public readonly visibleItems = new OnboardingItemContainer();\n /**\n * called by OnboardingComponent\n */\n public visibleItemsChanged = new EventEmitter();\n private addSeenSelectorDebounceSubscription: Subscription;\n private enabledChangedDebounceSubscription: Subscription;\n private refreshSubscription: Subscription;\n private items: Array<OnboardingItem>;\n private seenSelectors: Array<string>;\n private enabled: boolean;\n private configuration: OnboardingConfiguration;\n\n private readonly defaultConfiguration: OnboardingConfiguration = {\n iconConfiguration: {\n matIconName: 'contact_support',\n matBadgeColor: 'accent',\n matBadgePosition: 'below after',\n matBadgeSize: 'medium'\n },\n textConfiguration: {\n regularFontFamily: 'Roboto, \"Segoe UI\", Helvetica, Arial, sans-serif;',\n scriptFontFamily: '\"Gochi Hand\", Georgia, \"Segoe Script\", \"Comic Sans MS\", serif'\n },\n buttonsConfiguration: {\n position: OnboardingButtonsPosition.BottomRight,\n horizontalDistanceToBorderInPx: 50,\n verticalDistanceToBorderInPx: 40\n }\n };\n\n constructor(private browserDomSelectorService: BrowserDOMSelectorService,\n private loadAndSaveSeenSelectorsService: SeenSelectorsBaseService,\n private loadAndSaveEnabledStatusService: EnabledStatusBaseService,\n private errorHandler: ErrorHandler,\n private zone: NgZone) {\n this.configuration = this.defaultConfiguration;\n /* this is the default setting. can be changed by configure()*/\n this.init();\n }\n\n /**\n * returns the count of the registered items\n */\n public get registeredItemsCount(): number {\n return this.items.length;\n }\n\n /**\n * Configures the onboarding icons and fonts.\n *\n * If you want to change the default settings, then call this in your module where you import this\n * service as provider and set global defaults like icon properties\n */\n public configure(configuration: OnboardingConfiguration) {\n if (typeof configuration === 'undefined') {\n throw new Error('Configuration must not be undefined or null');\n }\n // new merge default configuration with user configuration\n const mergedConfig: OnboardingConfiguration = {\n iconConfiguration: Object.assign({}, this.defaultConfiguration.iconConfiguration),\n textConfiguration: Object.assign({}, this.defaultConfiguration.textConfiguration),\n buttonsConfiguration: Object.assign({}, this.defaultConfiguration.buttonsConfiguration)\n };\n\n if (configuration.iconConfiguration) {\n Object.assign(\n mergedConfig.iconConfiguration,\n configuration.iconConfiguration\n );\n // icon shape configurations are mutually exclusive so a special checks are needed for that\n if (!configuration.iconConfiguration.matIconName &&\n (configuration.iconConfiguration.fontSet || configuration.iconConfiguration.svgIcon)) {\n mergedConfig.iconConfiguration.matIconName = undefined; // if the user wants fontSet than we have to disable matIconName\n }\n }\n\n if (configuration.textConfiguration) {\n Object.assign(\n mergedConfig.textConfiguration,\n configuration.textConfiguration\n );\n }\n\n if (configuration.buttonsConfiguration) {\n Object.assign(\n mergedConfig.buttonsConfiguration,\n configuration.buttonsConfiguration\n );\n }\n\n this.configuration = mergedConfig;\n }\n\n /** used internal only to retrieve to configuration from configure()*/\n public getConfiguration() {\n return this.configuration;\n }\n\n /**\n * registers [[OnboardingItem]]s in items, returns the method to unregister items (e.g. in ngOnDestroy)\n */\n public register(items: Array<OnboardingItem>): Function {\n this.items.push(...items);\n return () => {\n // this.items = filter(this.items, thisItem => !some(items, item => thisItem.selector === item.selector));\n this.items = this.items.filter(thisItem => !items.some( item => thisItem.selector === item.selector));\n };\n }\n\n /**\n * Check which onboarding items are visible. Emit visibleItemsChanged event.\n * called by OnboardingComponent\n */\n public check() {\n try {\n if (this.isEnabled() && this.visibleItems && this.visibleItems.totalLength > 0) {\n return;\n }\n const matches: Array<VisibleOnboardingItem> = [];\n const notSeenItems = this.getNotSeenItems();\n if (notSeenItems) {\n notSeenItems.forEach( item => {\n const elements = Array.from(this.browserDomSelectorService.querySelectorAll(item.selector));\n if (elements && elements.length > 0) {\n let element: HTMLElement = elements.find(\n (e: HTMLElement) => OnboardingHtmlElementHelper.isVisibleInViewWithParents(e)\n );\n if (element) {\n if (item.toParent && element.offsetParent) {\n element = <HTMLElement>element.offsetParent;\n }\n if (element) {\n matches.push({\n item: item,\n element: element\n });\n }\n }\n }\n });\n }\n\n this.visibleItems.clear();\n this.visibleItems.add(matches);\n this.visibleItemsChanged.emit();\n } catch (error) {\n this.errorHandler.handleError(error);\n }\n }\n\n /**\n * Mark all visible items as SEEN, remove them from visible list and emit change event.\n * called by OnboardingComponent\n */\n public hide() {\n\n this.visibleItems.allItems.forEach( i => {\n this.addToSeenSelectors(i.item.selector);\n });\n\n this.visibleItems.clear();\n this.visibleItemsChanged.emit();\n }\n\n /**\n * called by OnboardingComponent\n *\n * Disables the onboarding\n */\n public disable() {\n this.hide();\n this.enabled = false;\n this.visibleItemsChanged.emit();\n this.enabledChanged();\n }\n\n /**\n * called by OnboardingComponent\n *\n * Enables the onboarding\n */\n public enable() {\n this.enabled = true;\n this.visibleItems.clear();\n this.check();\n this.enabledChanged();\n }\n\n /**\n * called by OnboardingComponent\n */\n public isEnabled(): boolean {\n return this.enabled;\n }\n\n /**\n * called by OnboardingComponent\n */\n public clearSeenSelectors(): void {\n this.seenSelectors = [];\n this.seenSelectorsChanged();\n }\n\n private init() {\n this.items = [];\n this.seenSelectors = [];\n this.visibleItems.clear();\n this.loadSeenSelectors();\n this.loadEnabledStatus();\n this.startRefreshTimer();\n }\n\n private addToSeenSelectors(selector: string) {\n this.seenSelectors.push(selector);\n this.seenSelectorsChanged();\n }\n\n private seenSelectorsChanged(): void {\n if (this.addSeenSelectorDebounceSubscription) {\n this.addSeenSelectorDebounceSubscription.unsubscribe();\n }\n const source = timer(addSeenSelectorDebounceTime);\n this.addSeenSelectorDebounceSubscription = source.subscribe(() => {\n this.saveSeenSelectors();\n });\n }\n\n private enabledChanged() {\n if (this.enabledChangedDebounceSubscription) {\n this.enabledChangedDebounceSubscription.unsubscribe();\n }\n const source = timer(enabledChangedDebounceTime);\n this.enabledChangedDebounceSubscription = source.subscribe(() => {\n this.saveEnabledStatus();\n });\n }\n\n private getNotSeenItems(): Array<OnboardingItem> {\n return this.items.filter(i => !this.seenSelectors.some( seen => seen === i.selector));\n }\n\n private startRefreshTimer() {\n if (this.refreshSubscription) {\n this.refreshSubscription.unsubscribe();\n }\n const source = interval(refreshTime);\n this.zone.runOutsideAngular(() => {\n this.refreshSubscription = source.subscribe(() => {\n this.zone.run(() => {\n this.check();\n });\n });\n });\n }\n\n private loadSeenSelectors() {\n this.loadAndSaveSeenSelectorsService.load().subscribe(seenSelectors => {\n this.seenSelectors = seenSelectors;\n });\n }\n\n private saveSeenSelectors() {\n this.loadAndSaveSeenSelectorsService.save(this.seenSelectors);\n }\n\n private loadEnabledStatus() {\n this.loadAndSaveEnabledStatusService.load().subscribe(enabled => {\n this.enabled = enabled;\n });\n }\n\n private saveEnabledStatus() {\n this.loadAndSaveEnabledStatusService.save(this.enabled);\n }\n\n}\n","import {EventEmitter} from '@angular/core';\n\n/**\n * Base interface for translatorservice (used for core ngx-onboarding labels)\n */\nexport abstract class TranslatorBaseService {\n\n /**\n * implement an EventEmitter with the language key as one its arguments\n * the argument has the minimium properties lang: string (where lang is the new language code)\n */\n abstract onLangChange: EventEmitter<{ lang: string }>;\n\n /**\n * The language (code) currently used\n */\n abstract get currentLang(): string;\n\n /**\n * Returns a translation instantly from the internal state of loaded translation.\n * the keys (with translation examples in english) are\n 'ONBOARDING': 'Onboarding',\n 'ONBOARDING_FAILED_TO_LOAD_USER_SETTINGS': 'Failed to load onboarding settings.',\n 'ONBOARDING_FAILED_TO_SAVE_USER_SETTINGS': 'Failed to save onboarding settings.',\n 'ONBOARDING_GOT_IT_MSG': 'Got it',\n 'ONBOARDING_DO_NOT_SHOW_AGAIN_MSG': 'Turn off',\n 'ONBOARDING_NEXT_MSG': 'Next',\n 'ONBOARDING_ENABLE': 'Turn on',\n 'ONBOARDING_DISABLE': 'Turn off',\n 'ONBOARDING_CLEAR': 'Reset'\n */\n abstract instant(key: string): string;\n\n}\n","import {TranslatorBaseService} from '../services/translator-base.service';\nimport {Pipe, PipeTransform} from '@angular/core';\n\n/**\n * Pipe for internal usage to translate the text on the onboarding component like disable, enable\n */\n@Pipe({\n name: 'translate',\n pure: true,\n standalone: false\n})\nexport class PrimitiveTranslatePipe implements PipeTransform {\n\n constructor(private translateService: TranslatorBaseService) {\n }\n\n public transform(query: string, ...args: any[]): any {\n return this.translateService.instant(query);\n }\n}\n","import {OnboardingIconConfiguration} from './models/onboarding-icon-configuration.interface';\nimport {OnboardingService} from './services/onboarding.service';\nimport {Component, ViewEncapsulation} from '@angular/core';\n\n\n/**\n * onboarding button including context menu (see header.component in rolib/navigation)\n */\n@Component({\n selector: 'rosen-onboarding-button',\n templateUrl: './onboarding-button.component.html',\n styleUrls: ['./onboarding-button.component.less'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class OnboardingButtonComponent {\n\n /** used by template to apply the customizations on icons */\n public iconConfig: OnboardingIconConfiguration;\n\n constructor(private onboardingService: OnboardingService) {\n const config = onboardingService.getConfiguration();\n if (config) {\n this.iconConfig = config.iconConfiguration;\n }\n }\n\n /**\n * if true, the count is visible\n * is true, if the onboarding service is disabled and at least one onboarding item is visible\n */\n public get showOnboardingItemCount(): boolean {\n return !this.onboardingService.isEnabled() &&\n this.onboardingService.visibleItems &&\n this.onboardingService.visibleItems.totalLength > 0;\n }\n\n /**\n * gets the visible item count\n */\n public get onboardingItemCount(): number {\n return this.onboardingService.visibleItems.totalLength;\n }\n\n /**\n * used by template\n * enables the onboarding service\n */\n public enableOnboarding(): void {\n this.onboardingService.enable();\n }\n\n /**\n * disables the onboarding service\n */\n public disableOnboarding(): void {\n this.onboardingService.disable();\n }\n\n /**\n * resets the onboarding service\n * removes all selectors from seen selectors\n */\n public clearOnboarding(): void {\n this.onboardingService.clearSeenSelectors();\n }\n\n /**\n * is true, if the onboarding service is enabled\n */\n public isOnboardingEnabled(): boolean {\n return this.onboardingService.isEnabled();\n }\n}\n","<div class=\"onboarding-button-container\">\n <mat-menu #onboardingMenu=\"matMenu\">\n <button mat-menu-item (click)=\"enableOnboarding()\" *ngIf=\"!isOnboardingEnabled()\"\n class=\"onboarding-menu-button\">\n <mat-icon>add_alert</mat-icon>\n {{'ONBOARDING_ENABLE'|translate}}\n </button>\n <button mat-menu-item (click)=\"disableOnboarding()\" *ngIf=\"isOnboardingEnabled()\"\n class=\"onboarding-menu-button\">\n <mat-icon>notifications_off</mat-icon>\n {{'ONBOARDING_DISABLE'|translate}}\n </button>\n <button mat-menu-item (click)=\"clearOnboarding()\" class=\"onboarding-menu-button\">\n <mat-icon>undo</mat-icon>\n {{'ONBOARDING_CLEAR'|translate}}\n </button>\n </mat-menu>\n <button *ngIf=\"iconConfig\" mat-icon-button [matMenuTriggerFor]=\"onboardingMenu\" class=\"onboarding-button\" [title]=\"'ONBOARDING'|translate\">\n <mat-icon *ngIf=\"iconConfig.matIconName && !iconConfig.svgIcon && !iconConfig.fontSet\"\n [matBadgeColor]=\"iconConfig.matBadgeColor\" [matBadgeHidden]=\"isOnboardingEnabled()\" [matBadge]=\"onboardingItemCount\"\n [matBadgePosition]=\"iconConfig.matBadgePosition\" [matBadgeSize]=\"iconConfig.matBadgeSize\"\n [matBadgeOverlap]=\"true\">{{iconConfig.matIconName}}\n </mat-icon>\n <mat-icon *ngIf=\"iconConfig.svgIcon || iconConfig.fontSet\"\n [svgIcon]=\"iconConfig.svgIcon\"\n [fontSet]=\"iconConfig.fontSet\" [fontIcon]=\"iconConfig.fontIcon\"\n [matBadgeColor]=\"iconConfig.matBadgeColor\" [matBadgeHidden]=\"isOnboardingEnabled()\" [matBadge]=\"onboardingItemCount\"\n [matBadgePosition]=\"iconConfig.matBadgePosition\" [matBadgeSize]=\"iconConfig.matBadgeSize\"\n [matBadgeOverlap]=\"true\">\n </mat-icon>\n </button>\n</div>\n","import { OnboardingItemDescription } from './onboarding-item-description.model';\n\nexport class OnboardingItem {\n public selector: string;\n public headline: string;\n public details: string;\n public textAlign?: 'center' | 'left' | 'right';\n public position: string;\n public descriptions: Array<OnboardingItemDescription>;\n public disableSpotlight = false;\n public disableBackground = false;\n public transparentSpotlight = false;\n public toParent = false;\n}\n","import { OnboardingItem } from './onboarding-item.model';\n\nexport class VisibleOnboardingItem {\n\n constructor(public item?: OnboardingItem, public element?: HTMLElement) {\n }\n\n}\n","import { Injectable } from '@angular/core';\n\n/**\n * return the global native browser window object\n */\nfunction _window(): any {\n return window;\n}\n\n/**\n * Abstraction of the window reference\n */\n@Injectable(\n {providedIn: 'root' /* makes sure that service stays a single instance among seperate modules */}\n)\nexport class WindowRef {\n\n public get nativeWindow(): any {\n return _window();\n }\n}\n","import {VisibleOnboardingItem} from './models/visible-onboarding-item.model';\nimport {TranslatorBaseService} from './services/translator-base.service';\nimport {WindowRef} from './services/window-ref.service';\nimport {OnboardingHtmlElementHelper} from './models/onboarding-html-element-helper';\nimport {Component, ElementRef, Input, ViewChild, ViewEncapsulation} from '@angular/core';\n\nconst topPadding = 25;\nconst rightPadding = 25;\nconst leftPadding = 25;\n\n/**\n * used by onboarding component\n * shows the headline and detail text of the OnboardingItem\n * calculates the positions of the item\n */\n@Component({\n selector: 'rosen-onboarding-item',\n templateUrl: './onboarding-item.component.html',\n styleUrls: ['./onboarding-item.component.less'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class OnboardingItemComponent {\n\n /**\n * the onboarding item with headline and text and the target html element\n */\n @Input()\n public item: VisibleOnboardingItem;\n\n /**\n * the onboarding item container\n * used to calculate the position\n */\n @ViewChild('container', { static: true })\n private container: ElementRef;\n\n constructor(private translatorService: TranslatorBaseService, private windowRef: WindowRef) {\n }\n\n /**\n * calculates the position of the OnboardingItemComponent\n */\n public getStyle() {\n const pos = OnboardingHtmlElementHelper.getPosition(this.item.element);\n let transform = 'none';\n\n switch (this.item.item.position) {\n case 'top':\n pos.x += this.item.element.offsetWidth / 2;\n if (pos.x < this.getContainerWidth() / 2) {\n pos.x = this.getContainerWidth() / 2;\n } else if (pos.x > this.getWindowScreenWidth() - this.getContainerWidth()) {\n pos.x = this.getWindowScreenWidth() - this.getContainerWidth();\n }\n pos.y -= topPadding;\n transform = 'translate(-50%,-100%)';\n break;\n case 'right':\n pos.x += Math.min(this.item.element.offsetWidth + rightPadding, this.getWindowScreenWidth() - this.getContainerWidth() / 2);\n pos.y += this.item.element.offsetHeight / 2;\n if (pos.y < 0) {\n pos.y = 0;\n } else if (pos.y > this.getWindowScreenHeight() - this.getContainerHeight() / 2) {\n pos.y = this.getWindowScreenHeight() - this.getContainerHeight() / 2;\n }\n transform = 'translateY(-50%)';\n break;\n case 'left':\n pos.x -= leftPadding;\n pos.y += this.item.element.offsetHeight / 2;\n if (pos.y < 0) {\n pos.y = 0;\n } else if (pos.y > this.getWindowScreenHeight() - this.getContainerHeight() / 2) {\n pos.y = this.getWindowScreenHeight() - this.getContainerHeight() / 2;\n }\n transform = 'translate(-100%,-50%)';\n break;\n case 'topleft':\n pos.x -= leftPadding;\n pos.y -= topPadding;\n if (pos.y < 0) {\n pos.y = 0;\n } else if (pos.y > this.getWindowScreenHeight() - this.getContainerHeight() / 2) {\n pos.y = this.getWindowScreenHeight() - this.getContainerHeight() / 2;\n }\n transform = 'translate(-100%,-100%)';\n break;\n\n case 'bottom':\n default:\n pos.x += this.item.element.offsetWidth / 2;\n if (pos.x < this.getContainerWidth() / 2) {\n pos.x = this.getContainerWidth() / 2;\n } else if (pos.x > this.getWindowScreenWidth() - this.getContainerWidth()) {\n pos.x = this.getWindowScreenWidth() - this.getContainerWidth();\n }\n pos.y += this.item.element.offsetHeight;\n transform = 'translate(-50%,25%)';\n break;\n }\n return {\n left: pos.x + 'px',\n transform: transform,\n top: pos.y + 'px'\n };\n }\n\n public getHeadline(): string {\n const description = this.item.item.descriptions?.find( d => d.language === this.translatorService.currentLang);\n return description ? description.headline : this.item.item.headline;\n }\n\n public getDetails(): string {\n const description = this.item.item.descriptions?.find( d => d.language === this.translatorService.currentLang);\n return description ? description.details : this.item.item.details;\n }\n\n public getTextAlignClass(): string {\n if ((this.item.item.textAlign == null) || this.item.item.textAlign === 'center') {\n return ''; // ==> center\n }\n return `align-${this.item.item.textAlign}`;\n }\n\n private getContainerWidth(): number {\n return this.container.nativeElement.offsetWidth;\n }\n\n private getContainerHeight(): number {\n return this.container.nativeElement.offsetHeight;\n }\n\n private getWindowScreenWidth(): number {\n return this.windowRef.nativeWindow ? this.windowRef.nativeWindow.screen.width : 1024;\n }\n\n private getWindowScreenHeight(): number {\n return this.windowRef.nativeWindow ? this.windowRef.nativeWindow.screen.height : 768;\n }\n}\n","<div #container class=\"onboarding-item\" [ngStyle]=\"getStyle()\">\n <div class=\"onboarding-item-header text-color animated script-font fade-in-left\" ngClass=\"getTextAlignClass()\">\n {{getHeadline()}}\n </div>\n <div class=\"onboarding-item-details text-color animated regular-font fade-in-right\" ngClass=\"getTextAlignClass()\">\n {{getDetails()}}\n </div>\n</div>\n","import {DomSanitizer, SafeStyle} from '@angular/platform-browser';\nimport {OnboardingButtonsPosition} from './models/onboarding-buttons-position.enum';\nimport {OnboardingButtonsConfiguration} from './models/onboarding-buttons-configuration.interface';\nimport {VisibleOnboardingItem} from './models/visible-onboarding-item.model';\nimport {OnboardingTextConfiguration} from './models/onboarding-text-configuration.interface';\nimport {OnboardingItemContainer} from './models/onboarding-item-container.model';\nimport {OnboardingService} from './services/onboarding.service';\nimport {OnboardingHtmlElementHelper} from './models/onboarding-html-element-helper';\nimport {OnboardingItem} from './models/onboarding-item.model';\nimport {AfterViewInit, Component, OnDestroy, OnInit, ViewEncapsulation} from '@angular/core';\nimport {Subscription} from 'rxjs';\n\n/**\n * Main component of the onboarding module.\n * Handles the visualization of the onboarding items\n */\n@Component({\n selector: 'rosen-onboarding',\n templateUrl: './onboarding.component.html',\n styleUrls: ['./onboarding.component.less'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class OnboardingComponent implements OnInit, AfterViewInit, OnDestroy {\n\n /**\n * current visible onboarding item\n */\n public visibleItem: VisibleOnboardingItem;\n\n /**\n * if true, the \"show next\" button is visible\n * it false, the \"got it\" button is visible\n * is true, if there are more items to show\n */\n public hasNext: boolean;\n\n /**\n * Do not assign directly use onboardingSevice.configure\n * Name of the material icon to use (defaults to contact_support) (excludes fontSet,fontIcon and svgIcon)\n **/\n public matIconName: string;\n /**\n * Do not assign directly use onboardingSevice.configure\n * icon class for span (bootstrap style) (excludes matIconeName and svgIcon)\n */\n public fontSet: string;\n /**\n * Do not assign directly use onboardingSevice.configure\n * icon class for span (bootstrap style) (excludes matIconeName and svgIcon)\n */\n public fontIcon: string;\n /**\n * Do not assign directly use onboardingSevice.configure\n * name of registered svg icon (excludes matIconeName,fontSet and fontIcon)\n */\n public svgIcon: string;\n public dynamicCss: SafeStyle;\n private textConfig: OnboardingTextConfiguration;\n private buttonConfig: OnboardingButtonsConfiguration;\n private visibleItemsChangedSubscription: Subscription;\n\n constructor(public onboardingService: OnboardingService, private domSanitizer: DomSanitizer) {\n this.visibleItem = null;\n const config = onboardingService.getConfiguration();\n this.textConfig = config.textConfiguration;\n this.buttonConfig = config.buttonsConfiguration;\n if (config.iconConfiguration) { // we expect the config to be present always but just in case\n this.matIconName = config.iconConfiguration.matIconName;\n this.fontSet = config.iconConfiguration.fontSet;\n this.fontIcon = config.iconConfiguration.fontIcon;\n this.svgIcon = config.iconConfiguration.svgIcon;\n }\n\n }\n\n public ngOnInit() {\n // Dynamic generated css is needed because these options have be configurable\n let dynCss = ``;\n // for this component\n dynCss += `<style type=\"text/css\">`;\n dynCss += `.onboarding-component-container .script-font { font-family: ${this.textConfig.scriptFontFamily}}`;\n dynCss += `.onboarding-component-container .regular-font { font-family: ${this.textConfig.regularFontFamily}}`;\n dynCss += `</style>`;\n this.dynamicCss = this.domSanitizer.bypassSecurityTrustHtml(dynCss);\n }\n\n public ngAfterViewInit() {\n\n this.visibleItemsChangedSubscription = this.onboardingService.visibleItemsChanged.subscribe(() => {\n this.visibleItem = this.onboardingService.visibleItems.currentItem;\n this.hasNext = this.onboardingService.visibleItems.hasNext;\n if (this.visibleItem) {\n this.showItem(this.visibleItem);\n }\n });\n }\n\n public ngOnDestroy(): void {\n if (this.visibleItemsChangedSubscription) {\n this.visibleItemsChangedSubscription.unsubscribe();\n }\n this.onboardingService.hide(); // hide ALL items\n }\n\n /**\n * gets the fixed position of the html element\n * used by template to set the position of the spotlight\n */\n public getPositionStyle(ele: HTMLElement) {\n const pos = OnboardingHtmlElementHelper.getPosition(ele);\n const style: any = {\n position: 'fixed',\n left: pos.x + 'px',\n top: pos.y + 'px',\n width: pos.width + 'px',\n height: pos.height + 'px'\n };\n if (pos.fixed) {\n style.background = 'transparent';\n }\n return style;\n }\n\n public isSpotlightTransparent(item: OnboardingItem) {\n return item.transparentSpotlight;\n }\n\n /**\n * used by turn off button in template\n */\n public disable(): void {\n if (this.visibleItem) {\n this.hideItem(this.visibleItem); // hide old item\n }\n this.onboardingService.disable();\n }\n\n /**\n * hide current group (show next one if one is available\n */\n public hide(): void {\n if (this.onboardingService.visibleItems && this.hasNext) {\n // hide current and show next item\n this.hideItem(this.visibleItem); // hide OLD items\n this.visibleItem = this.onboardingService.visibleItems.nextItem();\n this.hasNext = this.onboardingService.visibleItems.hasNext; // show NEW ones\n this.showItem(this.visibleItem);\n } else {\n this.hideItem(this.visibleItem);\n this.onboardingService.hide(); // mark all items as seen...\n this.visibleItem = null;\n this.hasNext = false;\n }\n }\n\n public buttonsPositionStyle(): any {\n switch (this.buttonConfig.position) {\n case OnboardingButtonsPosition.Bottom:\n return {\n bottom: this.buttonConfig.verticalDistanceToBorderInPx + 'px',\n left: '50%',\n transform: 'translateX(-50%)',\n };\n case OnboardingButtonsPosition.BottomLeft:\n return {\n bottom: this.buttonConfig.verticalDistanceToBorderInPx + 'px',\n left: this.buttonConfig.horizontalDistanceToBorderInPx + 'px',\n };\n case OnboardingButtonsPosition.Left:\n return {\n top: '50%',\n transform: 'translateY(-50%)',\n left: this.buttonConfig.horizontalDistanceToBorderInPx + 'px'\n };\n case OnboardingButtonsPosition.TopLeft:\n return {\n top: this.buttonConfig.verticalDistanceToBorderInPx + 'px',\n left: this.buttonConfig.horizontalDistanceToBorderInPx + 'px'\n };\n case OnboardingButtonsPosition.Top:\n return {\n top: this.buttonConfig.verticalDistanceToBorderInPx + 'px',\n left: '50%',\n transform: 'translateX(-50%)',\n };\n case OnboardingButtonsPosition.TopRight:\n return {\n top: this.buttonConfig.verticalDistanceToBorderInPx + 'px',\n right: this.buttonConfig.horizontalDistanceToBorderInPx + 'px'\n };\n case OnboardingButtonsPosition.Right:\n return {\n top: '50%',\n transform: 'translateY(-50%)',\n right: this.buttonConfig.horizontalDistanceToBorderInPx + 'px'\n };\n case OnboardingButtonsPosition.BottomRight:\n default:\n return {\n bottom: this.buttonConfig.verticalDistanceToBorderInPx + 'px',\n right: this.buttonConfig.horizontalDistanceToBorderInPx + 'px'\n };\n }\n }\n\n /**\n * Show onboarding item\n */\n private showItem(i: VisibleOnboardingItem) {\n if (this.onboardingService.isEnabled()) {\n i.element.classList.add('onboarding-highlighted');\n if (!i.element.style.position || i.element.style.position === 'static') {\n i.element.classList.add('onboarding-highlighted-on-static');\n }\n }\n }\n\n /**\n * Hide SINGLE element without change notification\n */\n private hideItem(i: VisibleOnboardingItem) {\n i.element.classList.remove('onboarding-highlighted');\n i.element.classList.remove('onboarding-highlighted-on-static');\n }\n\n\n}\n","<span [innerHtml]=\"dynamicCss\"></span>\n\n<div class=\"onboarding-component-container\" *ngIf=\"onboardingService.isEnabled() && visibleItem\">\n <div class=\"onboarding-header script-font\" *ngIf=\"onboardingService.isEnabled() && visibleItem\">\n <mat-icon *ngIf=\"matIconName && !svgIcon && !fontSet\">{{matIconName}}</mat-icon>\n <mat-icon *ngIf=\"svgIcon || fontSet\" [svgIcon]=\"svgIcon\" [fontSet]=\"fontSet\" [fontIcon]=\"fontIcon\"></mat-icon>\n {{'ONBOARDING' |translate|uppercase}}\n </div>\n <div class=\"onboarding-shadow\"\n [ngStyle]=\"getPositionStyle(visibleItem.element)\"></div>\n <div class=\"onboarding-spotlight\"\n [class.onboarding-spotlight-transparent]=\"isSpotlightTransparent(visibleItem.item)\"\n [ngStyle]=\"getPositionStyle(visibleItem.element)\"></div>\n <div class=\"onboarding-items\">\n <div *ngFor=\"let currentItem of onboardingService.visibleItems.allItems\">\n <rosen-onboarding-item [item]=\"currentItem\" *ngIf=\"currentItem === visibleItem\"></rosen-onboarding-item>\n </div>\n </div>\n <div class=\"onboarding-overlay\" (click)=\"hide()\"></div>\n <div class=\"onboarding-buttons\" [ngStyle]=\"buttonsPositionStyle()\">\n <button mat-flat-button color=\"warn\" (click)=\"disable()\">\n <span>{{'ONBOARDING_DO_NOT_SHOW_AGAIN_MSG' |translate}}</span>\n </button>\n <button mat-flat-button color=\"primary\" (click)=\"hide()\">\n <span *ngIf=\"!hasNext\">{{'ONBOARDING_GOT_IT_MSG' |translate}}</span>\n <span *ngIf=\"hasNext\">{{'ONBOARDING_NEXT_MSG' | translate}}</span>\n </button>\n </div>\n</div>\n","import { SeenSelectorsBaseService } from './seen-selectors-base.service';\nimport {ErrorHandler, Injectable} from '@angular/core';\nimport {Observable, of} from 'rxjs';\n\n/**\n * Unique key to identify the seen onboarding items in the local storage\n */\nconst seenSelectorsLocalStorageKey = '894ae732-b4bd-45c9-b543-6f9c5c5a86b6';\n\n/**\n * Stores the seen onboarding items to the local storage\n *\n * If you want to implement an own service to store the data e.g. in a database you can extend\n * your own service from theSeenSelectorsBaseService and use the provide feature in your app.module with\n * {provide: SeenSelectorsBaseService, useClass: YourOwnSeenSelectorsService}\n */\n@Injectable()\nexport class LocalStorageSeenSelectorsService extends SeenSelectorsBaseService {\n\n constructor(private errorHandler: ErrorHandler) {\n super();\n }\n\n /**\n * loads seen items from localStorage\n * @returns string array of all seen selectors\n */\n public load(): Observable<Array<string>> {\n const seenSelectorsString = localStorage.getItem(seenSelectorsLocalStorageKey);\n if (seenSelectorsString?.length > 0) {\n try {\n return of(JSON.parse(seenSelectorsString));\n } catch (error) {\n this.errorHandler.handleError(error);\n }\n }\n return of([]);\n }\n\n /**\n * save items to localStorage\n * @returns success of the operation (true = good, false = failed)\n */\n public save(seenSelectors: Array<string>): void {\n try {\n localStorage.setItem(seenSelectorsLocalStorageKey, JSON.stringify(seenSelectors));\n } catch (error) {\n this.errorHandler.handleError(error);\n }\n }\n}\n","import { EnabledStatusBaseService } from './enabled-status-base.service';\nimport {ErrorHandler, Injectable} from '@angular/core';\nimport {Observable, of} from 'rxjs';\n\n/**\n * Unique key to identify the onboarding enabled status in the local storage\n */\nconst enabledLocalStorageKey = '42cfe10a-c2d3-42ba-9c55-6198545a0c49';\n\n/**\n * Stores the enabled status of the onboarding to the local storage\n *\n * If you want to implement an own service to store the data e.g. in a database you can extend your own service\n * from the EnabledStatusBaseService and use the provide feature in your app.module with\n * {provide: EnabledStatusBaseService, useClass: YourOwnEnabledStatusService}\n */\n@Injectable(\n {providedIn: 'root' /* makes sure that service stays a single instance among seperate modules */}\n)\nexport class LocalStorageEnabledStatusService extends EnabledStatusBaseService {\n\n constructor(private errorHandler: ErrorHandler) {\n super();\n }\n\n /**\n * loads the status from the persistent storage\n * @returns status (true = enabled, false = disabled)\n */\n public load(): Observable<boolean> {\n try {\n return of('true' === localStorage.getItem(enabledLocalStorageKey));\n } catch (error) {\n this.errorHandler.handleError(error);\n }\n return of(true);\n }\n\n /**\n * saves the status to localStorage\n * @returns success of the operation (true = good, false = failed)\n */\n public save(enabled: boolean): void {\n try {\n localStorage.setItem(enabledLocalStorageKey, enabled ? 'true' : 'false');\n } catch (error) {\n this.errorHandler.handleError(error);\n }\n }\n}\n","import { TranslatorBaseService } from './translator-base.service';\nimport {EventEmitter, Injectable} from '@angular/core';\n\n/**\n * Service for the translations of internal text\n */\n@Injectable(\n {providedIn: 'root' /* makes sure that service stays a single instance among seperate modules */}\n)\nexport class BuildInTranslatorService extends TranslatorBaseService {\n\n /**\n * An EventEmitter to listen to lang change events.\n * A LangChangeEvent is an object with the minimium properties lang: string (where lang is the new language code)\n */\n public onLangChange: EventEmitter<{ lang: string }> = new EventEmitter<{ lang: string }>();\n private translations = {\n 'ONBOARDING': 'Onboarding',\n 'ONBOARDING_FAILED_TO_LOAD_USER_SETTINGS': 'Failed to load onboarding settings.',\n 'ONBOARDING_FAILED_TO_SAVE_USER_SETTINGS': 'Failed to save onboarding settings.',\n 'ONBOARDING_GOT_IT_MSG': 'Got it',\n 'ONBOARDING_DO_NOT_SHOW_AGAIN_MSG': 'Turn off',\n 'ONBOARDING_NEXT_MSG': 'Next',\n 'ONBOARDING_ENABLE': 'Turn on',\n 'ONBOARDING_DISABLE': 'Turn off',\n 'ONBOARDING_CLEAR': 'Reset'\n };\n\n /**\n * The language (code) currently used\n */\n public get currentLang(): string {\n return 'en';\n }\n\n /**\n * Returns a translation instantly from the internal state of loaded translation.\n */\n public instant(key: string): string {\n const text = this.translations[key];\n if (typeof text === 'string') {\n return text;\n }\n return key;\n }\n\n\n}\n","import { OnboardingComponent } from './onboarding.component';\nimport { OnboardingItemComponent } from './onboarding-item.component';\nimport { OnboardingButtonComponent } from './onboarding-button.component';\nimport {PrimitiveTranslatePipe} from './pipes/primitive-translate.pipe';\nimport {BrowserDOMSelectorService} from './services/browser-dom-selector.service';\nimport {WindowRef} from './services/window-ref.service';\nimport {SeenSelectorsBaseService} from './services/seen-selectors-base.service';\nimport {EnabledStatusBaseService} from './services/enabled-status-base.service';\nimport {TranslatorBaseService} from './services/translator-base.service';\nimport {LocalStorageSeenSelectorsService} from './services/local-storage-seen-selectors.service';\nimport {LocalStorageEnabledStatusService} from './services/local-storage-enabled-status.service';\nimport {BuildInTranslatorService} from './services/build-in-translator.service';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatBadgeModule} from '@angular/material/badge';\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatMenuModule} from '@angular/material/menu';\n\n/**\n * Module for ngx-onboarding.\n * Import this into your \"main\" module e.g. AppModule\n */\n@NgModule({ declarations: [\n OnboardingComponent,\n OnboardingItemComponent,\n OnboardingButtonComponent,\n PrimitiveTranslatePipe\n ],\n exports: [\n OnboardingComponent,\n OnboardingButtonComponent\n ], imports: [CommonModule,\n MatButtonModule,\n MatBadgeModule,\n MatIconModule,\n MatMenuModule], providers: [\n BrowserDOMSelectorService,\n WindowRef,\n {\n provide: SeenSelectorsBaseService, useClass: LocalStorageSeenSelectorsService\n },\n {\n provide: EnabledStatusBaseService, useClass: LocalStorageEnabledStatusService\n },\n {\n provide: TranslatorBaseService, useClass: BuildInTranslatorService\n },\n provideHttpClient(withInterceptorsFromDi())\n ] })\nexport class OnboardingModule {\n}\n","/*\n * Public API Surface of ngx-onboarding\n */\n\nexport * from './lib/services/onboarding.service';\nexport * from './lib/onboarding-button.component';\nexport * from './lib/models/onboarding-item.model';\nexport * from './lib/models/onboarding-buttons-position.enum';\nexport * from './lib/onboarding.component';\nexport * from './lib/onboarding.module';\nexport * from './lib/services/seen-selectors-base.service';\nexport * from './lib/services/enabled-status-base.service';\nexport * from './lib/services/translator-base.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.BrowserDOMSelectorService","i2.SeenSelectorsBaseService","i3.EnabledStatusBaseService","i1.TranslatorBaseService","i1.OnboardingService","i2","i3","i7.PrimitiveTranslatePipe","i2.WindowRef","i4","i6.OnboardingItemComponent"],"mappings":";;;;;;;;;;;;;;;;AAGA;;AAEG;MAEU,yBAAyB,CAAA;AAElC,IAAA,WAAA,CAAsC,GAAQ,EAAA;QAAR,IAAG,CAAA,GAAA,GAAH,GAAG;;;AAIlC,IAAA,gBAAgB,CAAC,QAAgB,EAAA;QACpC,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC;;;AAIvC,IAAA,aAAa,CAAC,QAAgB,EAAA;QACjC,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC;;AAZlC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,kBAEd,QAAQ,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAFnB,yBAAyB,EAAA,CAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC;;0BAGgB,MAAM;2BAAC,QAAQ;;;ACPhC;;;;;;;AAOG;MACU,uBAAuB,CAAA;AAApC,IAAA,WAAA,GAAA;QAEY,IAAK,CAAA,KAAA,GAAiC,EAAE;QACxC,IAAU,CAAA,UAAA,GAAG,CAAC;QACd,IAAiB,CAAA,iBAAA,GAAG,CAAC;;AAE7B,IAAA,IAAW,OAAO,GAAA;QACd,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC;;AAG/C;;AAEG;AACH,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;;AAGzE;;AAEG;AACH,IAAA,IAAW,WAAW,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC;;AAE7C,QAAA,OAAO,IAAI;;AAGf;;AAEG;AACH,IAAA,IAAW,QAAQ,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;;AAG7B;;AAEG;AACH,IAAA,IAAW,WAAW,GAAA;QAClB,OAAO,IAAI,CAAC,UAAU;;AAG1B;;AAEG;IACI,QAAQ,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,iBAAiB,EAAE;YACxB,OAAO,IAAI,CAAC,WAAW;;AAE3B,QAAA,OAAO,IAAI;;AAGf;;AAEG;AACI,IAAA,GAAG,CAAC,KAAmC,EAAA;QAC1C,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,MAAM;;;AAIvC;;AAEG;IACI,KAAK,GAAA;AACR,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,QAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC;;AAEjC;;AChFD;;AAEG;MAEU,2BAA2B,CAAA;IAE7B,OAAO,SAAS,CAAC,WAAwB,EAAA;QAC5C,IAAI,CAAC,WAAW,IAAI,OAAO,gBAAgB,KAAK,UAAU,EAAE;AACxD,YAAA,OAAO,KAAK;;AAGhB,QAAA,MAAM,KAAK,GAAG,gBAAgB,CAAC,WAAW,CAAC;QAE3C,IAAI,CAAC,WAAW,CAAC,YAAY,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,EAAE;AACzD,YAAA,OAAO,KAAK;;QAGhB,OAAO,EAAE,KAAK,CAAC,OAAO,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU,CAAC;;AAGnI;;AAEG;IACI,OAAO,gBAAgB,CAAC,WAAwB,EAAA;QACnD,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;AAC3C,YAAA,OAAO,KAAK;;AAEhB,QAAA,MAAM,MAAM,GAAgB,WAAW,CAAC,YAAY;AACpD,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS;AAClC,QAAA,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC,YAAY;AACpD,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,SAAS;AACxC,QAAA,MAAM,aAAa,GAAG,UAAU,GAAG,WAAW,CAAC,YAAY;AAE3D,QAAA,OAAO,SAAS,GAAG,UAAU,IAAI,YAAY,GAAG,aAAa;;AAGjE;;AAEG;IACI,OAAO,0BAA0B,CAAC,WAAwB,EAAA;AAC7D,QAAA,GAAG;AACC,YAAA,IAAI,WAAW,IAAI,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE;AACpF,gBAAA,OAAO,IAAI;;YAEf,IAAI,CAAC,2BAA2B,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE;AACrD,gBAAA,OAAO,KAAK;;AAEhB,YAAA,IAAI,WAAW,CAAC,SAAS,GAAG,CAAC,EAAE;gBAC3B,IAAI,CAAC,2BAA2B,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE;AAC5D,oBAAA,OAAO,KAAK;;;AAGxB,SAAC,QAAQ,WAAW,GAAgB,WAAW,CAAC,YAAY;AAC5D,QAAA,OAAO,IAAI;;AAGf;;AAEG;IACI,OAAO,WAAW,CAAC,WAAwB,EAAA;AAC9C,QAAA,MAAM,IAAI,GAAyB,WAAW,CAAC,qBAAqB,EAAE;QACtE,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,IAAI,YAAY,OAAO,EAAE;YAC3D,OAAO;AACH,gBAAA,KAAK,EAAE,2BAA2B,CAAC,OAAO,CAAC,WAAW,CAAC;gBACvD,CAAC,EAAE,IAAI,CAAC,CAAC;gBACT,CAAC,EAAE,IAAI,CAAC,CAAC;gBACT,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,IAAI,CAAC;aAChB;;QAEL,OAAO;AACH,YAAA,KAAK,EAAE,2BAA2B,CAAC,OAAO,CAAC,WAAW,CAAC;YACvD,CAAC,EAAE,IAAI,CAAC,IAAI;YACZ,CAAC,EAAE,IAAI,CAAC,GAAG;YACX,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC;SAChB;;IAGG,OAAO,OAAO,CAAC,WAAwB,EAAA;QAC3C,IAAI,CAAC,WAAW,IAAI,OAAO,gBAAgB,KAAK,UAAU,EAAE;AACxD,YAAA,OAAO,KAAK;;AAEhB,QAAA,MAAM,KAAK,GAAG,gBAAgB,CAAC,WAAW,CAAC;AAC3C,QAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,EAAE;AAC5B,YAAA,OAAO,IAAI;;QAEf,OAAO,2BAA2B,CAAC,OAAO,CAAc,WAAW,CAAC,YAAY,CAAC;;AAGxF;;ACxFD;;;AAGG;MACmB,wBAAwB,CAAA;AAY7C;;IClBW;AAAZ,CAAA,UAAY,yBAAyB,EAAA;AACjC,IAAA,yBAAA,CAAA,yBAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAW;AACX,IAAA,yBAAA,CAAA,yBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,yBAAA,CAAA,yBAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAU;AACV,IAAA,yBAAA,CAAA,yBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,yBAAA,CAAA,yBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACP,IAAA,yBAAA,CAAA,yBAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAG;AACH,IAAA,yBAAA,CAAA,yBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ;AACR,IAAA,yBAAA,CAAA,yBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACT,CAAC,EATW,yBAAyB,KAAzB,yBAAyB,GASpC,EAAA,CAAA,CAAA;;ACPD;;;AAGG;MACmB,wBAAwB,CAAA;AAa7C;;ACPD,MAAM,2BAA2B,GAAG,IAAI;AACxC,MAAM,0BAA0B,GAAG,IAAI;AACvC,MAAM,WAAW,GAAG,IAAI;AAGxB;;;;AAIG;MAIU,iBAAiB,CAAA;IAuC1B,WAAoB,CAAA,yBAAoD,EACpD,+BAAyD,EACzD,+BAAyD,EACzD,YAA0B,EAC1B,IAAY,EAAA;QAJZ,IAAyB,CAAA,yBAAA,GAAzB,yBAAyB;QACzB,IAA+B,CAAA,+BAAA,GAA/B,+BAA+B;QAC/B,IAA+B,CAAA,+BAAA,GAA/B,+BAA+B;QAC/B,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAI,CAAA,IAAA,GAAJ,IAAI;AAzCxB;;;;;AAKG;AACa,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,uBAAuB,EAAE;AAC5D;;AAEG;AACI,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAE;AAS9B,QAAA,IAAA,CAAA,oBAAoB,GAA4B;AAC7D,YAAA,iBAAiB,EAAE;AACf,gBAAA,WAAW,EAAE,iBAAiB;AAC9B,gBAAA,aAAa,EAAE,QAAQ;AACvB,gBAAA,gBAAgB,EAAE,aAAa;AAC/B,gBAAA,YAAY,EAAE;AACjB,aAAA;AACD,YAAA,iBAAiB,EAAE;AACf,gBAAA,iBAAiB,EAAE,mDAAmD;AACtE,gBAAA,gBAAgB,EAAE;AACrB,aAAA;AACD,YAAA,oBAAoB,EAAE;gBAClB,QAAQ,EAAE,yBAAyB,CAAC,WAAW;AAC/C,gBAAA,8BAA8B,EAAE,EAAE;AAClC,gBAAA,4BAA4B,EAAE;AACjC;SACJ;AAOG,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,oBAAoB;;QAE9C,IAAI,CAAC,IAAI,EAAE;;AAGf;;AAEG;AACH,IAAA,IAAW,oBAAoB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;;AAG5B;;;;;AAKG;AACI,IAAA,SAAS,CAAC,aAAsC,EAAA;AACnD,QAAA,IAAI,OAAO,aAAa,KAAK,WAAW,EAAE;AACtC,YAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC;;;AAGlE,QAAA,MAAM,YAAY,GAA4B;AAC1C,YAAA,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;AACjF,YAAA,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;AACjF,YAAA,oBAAoB,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,oBAAoB,CAAC,oBAAoB;SACzF;AAED,QAAA,IAAI,aAAa,CAAC,iBAAiB,EAAE;YACjC,MAAM,CAAC,MAAM,CACT,YAAY,CAAC,iBAAiB,EAC9B,aAAa,CAAC,iBAAiB,CAClC;;AAED,YAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,WAAW;AAC5C,iBAAC,aAAa,CAAC,iBAAiB,CAAC,OAAO,IAAI,aAAa,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE;gBACtF,YAAY,CAAC,iBAAiB,CAAC,WAAW,GAAG,SAAS,CAAC;;;AAI/D,QAAA,IAAI,aAAa,CAAC,iBAAiB,EAAE;YACjC,MAAM,CAAC,MAAM,CACT,YAAY,CAAC,iBAAiB,EAC9B,aAAa,CAAC,iBAAiB,CAClC;;AAGL,QAAA,IAAI,aAAa,CAAC,oBAAoB,EAAE;YACpC,MAAM,CAAC,MAAM,CACT,YAAY,CAAC,oBAAoB,EACjC,aAAa,CAAC,oBAAoB,CACrC;;AAGL,QAAA,IAAI,CAAC,aAAa,GAAG,YAAY;;;IAI9B,gBAAgB,GAAA;QACnB,OAAO,IAAI,CAAC,aAAa;;AAG7B;;AAEG;AACI,IAAA,QAAQ,CAAC,KAA4B,EAAA;QACxC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AACzB,QAAA,OAAO,MAAK;;AAER,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAE,IAAI,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzG,SAAC;;AAGL;;;AAGG;IACI,KAAK,GAAA;AACR,QAAA,IAAI;AACA,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,CAAC,EAAE;gBAC5E;;YAEJ,MAAM,OAAO,GAAiC,EAAE;AAChD,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;YAC3C,IAAI,YAAY,EAAE;AACd,gBAAA,YAAY,CAAC,OAAO,CAAE,IAAI,IAAG;AACzB,oBAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC3F,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACjC,wBAAA,IAAI,OAAO,GAAgB,QAAQ,CAAC,IAAI,CACpC,CAAC,CAAc,KAAK,2BAA2B,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAChF;wBACD,IAAI,OAAO,EAAE;4BACT,IAAI,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,YAAY,EAAE;AACvC,gCAAA,OAAO,GAAgB,OAAO,CAAC,YAAY;;4BAE/C,IAAI,OAAO,EAAE;gCACT,OAAO,CAAC,IAAI,CAAC;AACT,oCAAA,IAAI,EAAE,IAAI;AACV,oCAAA,OAAO,EAAE;AACZ,iCAAA,CAAC;;;;AAIlB,iBAAC,CAAC;;AAGN,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AACzB,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;AAC9B,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;;QACjC,OAAO,KAAK,EAAE;AACZ,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC;;;AAI5C;;;AAGG;IACI,IAAI,GAAA;QAEP,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAE,CAAC,IAAG;YACpC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC5C,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AACzB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;;AAGnC;;;;AAIG;IACI,OAAO,GAAA;QACV,IAAI,CAAC,IAAI,EAAE;AACX,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;QAC/B,IAAI,CAAC,cAAc,EAAE;;AAGzB;;;;AAIG;IACI,MAAM,GAAA;AACT,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;QACzB,IAAI,CAAC,KAAK,EAAE;QACZ,IAAI,CAAC,cAAc,EAAE;;AAGzB;;AAEG;IACI,SAAS,GAAA;QACZ,OAAO,IAAI,CAAC,OAAO;;AAGvB;;AAEG;IACI,kBAAkB,GAAA;AACrB,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;QACvB,IAAI,CAAC,oBAAoB,EAAE;;IAGvB,IAAI,GAAA;AACR,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;QACzB,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,iBAAiB,EAAE;;AAGpB,IAAA,kBAAkB,CAAC,QAAgB,EAAA;AACvC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,oBAAoB,EAAE;;IAGvB,oBAAoB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,mCAAmC,EAAE;AAC1C,YAAA,IAAI,CAAC,mCAAmC,CAAC,WAAW,EAAE;;AAE1D,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,2BAA2B,CAAC;QACjD,IAAI,CAAC,mCAAmC,GAAG,MAAM,CAAC,SAAS,CAAC,MAAK;YAC7D,IAAI,CAAC,iBAAiB,EAAE;AAC5B,SAAC,CAAC;;IAGE,cAAc,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,kCAAkC,EAAE;AACzC,YAAA,IAAI,CAAC,kCAAkC,CAAC,WAAW,EAAE;;AAEzD,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,0BAA0B,CAAC;QAChD,IAAI,CAAC,kCAAkC,GAAG,MAAM,CAAC,SAAS,CAAC,MAAK;YAC5D,IAAI,CAAC,iBAAiB,EAAE;AAC5B,SAAC,CAAC;;IAGE,eAAe,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAE,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;;IAGjF,iBAAiB,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC1B,YAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE;;AAE1C,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YAC7B,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,SAAS,CAAC,MAAK;AAC7C,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;oBACf,IAAI,CAAC,KAAK,EAAE;AAChB,iBAAC,CAAC;AACN,aAAC,CAAC;AACN,SAAC,CAAC;;IAGE,iBAAiB,GAAA;QACrB,IAAI,CAAC,+BAA+B,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,aAAa,IAAG;AAClE,YAAA,IAAI,CAAC,aAAa,GAAG,aAAa;AACtC,SAAC,CAAC;;IAGE,iBAAiB,GAAA;QACrB,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;;IAGzD,iBAAiB,GAAA;QACrB,IAAI,CAAC,+BAA+B,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,OAAO,IAAG;AAC5D,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AAC1B,SAAC,CAAC;;IAGE,iBAAiB,GAAA;QACrB,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;8GAzRlD,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAjB,iBAAiB,EAAA,UAAA,EAFd,MAAM,+EAA6E,CAAA,CAAA;;2FAEtF,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,UAAU,EAAE,MAAM;AACrB,iBAAA;;;ACtBD;;AAEG;MACmB,qBAAqB,CAAA;AA4B1C;;AC9BD;;AAEG;MAMU,sBAAsB,CAAA;AAE/B,IAAA,WAAA,CAAoB,gBAAuC,EAAA;QAAvC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;;AAG7B,IAAA,SAAS,CAAC,KAAa,EAAE,GAAG,IAAW,EAAA;QAC1C,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC;;8GANtC,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAtB,sBAAsB,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACLD;;AAEG;MAQU,yBAAyB,CAAA;AAKlC,IAAA,WAAA,CAAoB,iBAAoC,EAAA;QAApC,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;AACjC,QAAA,MAAM,MAAM,GAAG,iBAAiB,CAAC,gBAAgB,EAAE;QACnD,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,iBAAiB;;;AAIlD;;;AAGG;AACH,IAAA,IAAW,uBAAuB,GAAA;AAC9B,QAAA,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE;YACtC,IAAI,CAAC,iBAAiB,CAAC,YAAY;YACnC,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,WAAW,GAAG,CAAC;;AAG3D;;AAEG;AACH,IAAA,IAAW,mBAAmB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,WAAW;;AAG1D;;;AAGG;IACI,gBAAgB,GAAA;AACnB,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;;AAGnC;;AAEG;IACI,iBAAiB,GAAA;AACpB,QAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE;;AAGpC;;;AAGG;IACI,eAAe,GAAA;AAClB,QAAA,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,EAAE;;AAG/C;;AAEG;IACI,mBAAmB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE;;8GAxDpC,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,oFCftC,+7DAgCA,EAAA,MAAA,EAAA,CAAA,qEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FDjBa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAGpB,aAAA,EAAA,iBAAiB,CAAC,IAAI,cACzB,KAAK,EAAA,QAAA,EAAA,+7DAAA,EAAA,MAAA,EAAA,CAAA,qEAAA,CAAA,EAAA;;;MEXR,cAAc,CAAA;AAA3B,IAAA,WAAA,GAAA;QAOW,IAAgB,CAAA,gBAAA,GAAG,KAAK;QACxB,IAAiB,CAAA,iBAAA,GAAG,KAAK;QACzB,IAAoB,CAAA,oBAAA,GAAG,KAAK;QAC5B,IAAQ,CAAA,QAAA,GAAG,KAAK;;AAC1B;;MCXY,qBAAqB,CAAA;IAE9B,WAAmB,CAAA,IAAqB,EAAS,OAAqB,EAAA;QAAnD,IAAI,CAAA,IAAA,GAAJ,IAAI;QAA0B,IAAO,CAAA,OAAA,GAAP,OAAO;;AAG3D;;ACLD;;AAEG;AACH,SAAS,OAAO,GAAA;AACZ,IAAA,OAAO,MAAM;AACjB;AAEA;;AAEG;MAIU,SAAS,CAAA;AAElB,IAAA,IAAW,YAAY,GAAA;QACnB,OAAO,OAAO,EAAE;;8GAHX,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAT,SAAS,EAAA,UAAA,EAFL,MAAM,+EAA6E,CAAA,CAAA;;2FAEvF,SAAS,EAAA,UAAA,EAAA,CAAA;kBAHrB,UAAU;AACP,YAAA,IAAA,EAAA,CAAA,EAAC,UAAU,EAAE,MAAM,+EAA8E;;;ACPrG,MAAM,UAAU,GAAG,EAAE;AACrB,MAAM,YAAY,GAAG,EAAE;AACvB,MAAM,WAAW,GAAG,EAAE;AAEtB;;;;AAIG;MAQU,uBAAuB,CAAA;IAehC,WAAoB,CAAA,iBAAwC,EAAU,SAAoB,EAAA;QAAtE,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QAAiC,IAAS,CAAA,SAAA,GAAT,SAAS;;AAG/E;;AAEG;IACI,QAAQ,GAAA;AACX,QAAA,MAAM,GAAG,GAAG,2BAA2B,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QACtE,IAAI,SAAS,GAAG,MAAM;QAEtB,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ;AAC3B,YAAA,KAAK,KAAK;AACN,gBAAA,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC;gBAC1C,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,EAAE;oBACtC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;;AACjC,qBAAA,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,oBAAoB,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,EAAE;AACvE,oBAAA,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,oBAAoB,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE;;AAElE,gBAAA,GAAG,CAAC,CAAC,IAAI,UAAU;gBACnB,SAAS,GAAG,uBAAuB;gBACnC;AACJ,YAAA,KAAK,OAAO;AACR,gBAAA,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,YAAY,EAAE,IAAI,CAAC,oBAAoB,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;AAC3H,gBAAA,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC;AAC3C,gBAAA,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE;AACX,oBAAA,GAAG,CAAC,CAAC,GAAG,CAAC;;AACN,qBAAA,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,qBAAqB,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,EAAE;AAC7E,oBAAA,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,qBAAqB,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC;;gBAExE,SAAS,GAAG,kBAAkB;gBAC9B;AACJ,YAAA,KAAK,MAAM;AACP,gBAAA,GAAG,CAAC,CAAC,IAAI,WAAW;AACpB,gBAAA,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC;AAC3C,gBAAA,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE;AACX,oBAAA,GAAG,CAAC,CAAC,GAAG,CAAC;;AACN,qBAAA,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,qBAAqB,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,EAAE;AAC7E,oBAAA,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,qBAAqB,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC;;gBAExE,SAAS,GAAG,uBAAuB;gBACnC;AACJ,YAAA,KAAK,SAAS;AACV,gBAAA,GAAG,CAAC,CAAC,IAAI,WAAW;AACpB,gBAAA,GAAG,CAAC,CAAC,IAAI,UAAU;AACnB,gBAAA,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE;AACX,oBAAA,GAAG,CAAC,CAAC,GAAG,CAAC;;AACN,qBAAA,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,qBAAqB,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,EAAE;AAC7E,oBAAA,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,qBAAqB,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC;;gBAExE,SAAS,GAAG,wBAAwB;gBACpC;AAEJ,YAAA,KAAK,QAAQ;AACb,YAAA;AACI,gBAAA,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC;gBAC1C,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,EAAE;oBACtC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;;AACjC,qBAAA,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,oBAAoB,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,EAAE;AACvE,oBAAA,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,oBAAoB,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE;;gBAElE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY;gBACvC,SAAS,GAAG,qBAAqB;gBACjC;;QAER,OAAO;AACH,YAAA,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI;AAClB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG;SAChB;;IAGE,WAAW,GAAA;QACd,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC;AAC9G,QAAA,OAAO,WAAW,GAAG,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ;;IAGhE,UAAU,GAAA;QACb,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC;AAC9G,QAAA,OAAO,WAAW,GAAG,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO;;IAG9D,iBAAiB,GAAA;QACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE;YAC7E,OAAO,EAAE,CAAC;;QAEd,OAAO,CAAA,MAAA,EAAS,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAA,CAAE;;IAGtC,iBAAiB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW;;IAG3C,kBAAkB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,YAAY;;IAG5C,oBAAoB,GAAA;QACxB,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI;;IAGhF,qBAAqB,GAAA;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG;;8GApH/E,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAJ,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAK,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,kOCtBpC,iZAQA,EAAA,MAAA,EAAA,CAAA,0+BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FDca,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAPnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAGlB,aAAA,EAAA,iBAAiB,CAAC,IAAI,cACzB,KAAK,EAAA,QAAA,EAAA,iZAAA,EAAA,MAAA,EAAA,CAAA,0+BAAA,CAAA,EAAA;4GAQV,IAAI,EAAA,CAAA;sBADV;gBAQO,SAAS,EAAA,CAAA;sBADhB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;AEtB5C;;;AAGG;MAQU,mBAAmB,CAAA;IAuC5B,WAAmB,CAAA,iBAAoC,EAAU,YAA0B,EAAA;QAAxE,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QAA6B,IAAY,CAAA,YAAA,GAAZ,YAAY;AACzE,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,MAAM,MAAM,GAAG,iBAAiB,CAAC,gBAAgB,EAAE;AACnD,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,iBAAiB;AAC1C,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,oBAAoB;AAC/C,QAAA,IAAI,MAAM,CAAC,iBAAiB,EAAE;YAC1B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,iBAAiB,CAAC,WAAW;YACvD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,iBAAiB,CAAC,OAAO;YAC/C,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,QAAQ;YACjD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,iBAAiB,CAAC,OAAO;;;IAKhD,QAAQ,GAAA;;QAEX,IAAI,MAAM,GAAG,CAAA,CAAE;;QAEf,MAAM,IAAI,yBAAyB;QACnC,MAAM,IAAI,+DAA+D,IAAI,CAAC,UAAU,CAAC,gBAAgB,GAAG;QAC5G,MAAM,IAAI,gEAAgE,IAAI,CAAC,UAAU,CAAC,iBAAiB,GAAG;QAC9G,MAAM,IAAI,UAAU;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,MAAM,CAAC;;IAGhE,eAAe,GAAA;AAElB,QAAA,IAAI,CAAC,+BAA+B,GAAG,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,SAAS,CAAC,MAAK;YAC7F,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,WAAW;YAClE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,OAAO;AAC1D,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;;AAEvC,SAAC,CAAC;;IAGC,WAAW,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,+BAA+B,EAAE;AACtC,YAAA,IAAI,CAAC,+BAA+B,CAAC,WAAW,EAAE;;AAEtD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;;AAGlC;;;AAGG;AACI,IAAA,gBAAgB,CAAC,GAAgB,EAAA;QACpC,MAAM,GAAG,GAAG,2BAA2B,CAAC,WAAW,CAAC,GAAG,CAAC;AACxD,QAAA,MAAM,KAAK,GAAQ;AACf,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI;AAClB,YAAA,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI;AACjB,YAAA,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,IAAI;AACvB,YAAA,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG;SACxB;AACD,QAAA,IAAI,GAAG,CAAC,KAAK,EAAE;AACX,YAAA,KAAK,CAAC,UAAU,GAAG,aAAa;;AAEpC,QAAA,OAAO,KAAK;;AAGT,IAAA,sBAAsB,CAAC,IAAoB,EAAA;QAC9C,OAAO,IAAI,CAAC,oBAAoB;;AAGpC;;AAEG;IACI,OAAO,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;AAEpC,QAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE;;AAGpC;;AAEG;IACI,IAAI,GAAA;QACP,IAAI,IAAI,CAAC,iBAAiB,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE;;YAErD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAChC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,QAAQ,EAAE;AACjE,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,OAAO,CAAC;AAC3D,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;;aAC5B;AACH,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;;;IAIrB,oBAAoB,GAAA;AACvB,QAAA,QAAQ,IAAI,CAAC,YAAY,CAAC,QAAQ;YAC9B,KAAK,yBAAyB,CAAC,MAAM;gBACjC,OAAO;AACH,oBAAA,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,4BAA4B,GAAG,IAAI;AAC7D,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,SAAS,EAAE,kBAAkB;iBAChC;YACL,KAAK,yBAAyB,CAAC,UAAU;gBACrC,OAAO;AACH,oBAAA,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,4BAA4B,GAAG,IAAI;AAC7D,oBAAA,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,8BAA8B,GAAG,IAAI;iBAChE;YACL,KAAK,yBAAyB,CAAC,IAAI;gBAC/B,OAAO;AACH,oBAAA,GAAG,EAAE,KAAK;AACV,oBAAA,SAAS,EAAE,kBAAkB;AAC7B,oBAAA,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,8BAA8B,GAAG;iBAC5D;YACL,KAAK,yBAAyB,CAAC,OAAO;gBAClC,OAAO;AACH,oBAAA,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,4BAA4B,GAAG,IAAI;AAC1D,oBAAA,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,8BAA8B,GAAG;iBAC5D;YACL,KAAK,yBAAyB,CAAC,GAAG;gBAC9B,OAAO;AACH,oBAAA,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,4BAA4B,GAAG,IAAI;AAC1D,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,SAAS,EAAE,kBAAkB;iBAChC;YACL,KAAK,yBAAyB,CAAC,QAAQ;gBACnC,OAAO;AACH,oBAAA,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,4BAA4B,GAAG,IAAI;AAC1D,oBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,8BAA8B,GAAG;iBAC7D;YACL,KAAK,yBAAyB,CAAC,KAAK;gBAChC,OAAO;AACH,oBAAA,GAAG,EAAE,KAAK;AACV,oBAAA,SAAS,EAAE,kBAAkB;AAC7B,oBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,8BAA8B,GAAG;iBAC7D;YACL,KAAK,yBAAyB,CAAC,WAAW;AAC1C,YAAA;gBACI,OAAO;AACH,oBAAA,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,4BAA4B,GAAG,IAAI;AAC7D,oBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,8BAA8B,GAAG;iBAC7D;;;AAIb;;AAEG;AACK,IAAA,QAAQ,CAAC,CAAwB,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,EAAE;YACpC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,wBAAwB,CAAC;AACjD,YAAA,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE;gBACpE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,kCAAkC,CAAC;;;;AAKvE;;AAEG;AACK,IAAA,QAAQ,CAAC,CAAwB,EAAA;QACrC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC;QACpD,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,kCAAkC,CAAC;;8GAxMzD,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAJ,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,6ECvBhC,wqDA6BA,EAAA,MAAA,EAAA,CAAA,4xCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAH,sBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FDNa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAGb,aAAA,EAAA,iBAAiB,CAAC,IAAI,cACzB,KAAK,EAAA,QAAA,EAAA,wqDAAA,EAAA,MAAA,EAAA,CAAA,4xCAAA,CAAA,EAAA;;;AEjBrB;;AAEG;AACH,MAAM,4BAA4B,GAAG,sCAAsC;AAE3E;;;;;;AAMG;AAEG,MAAO,gCAAiC,SAAQ,wBAAwB,CAAA;AAE1E,IAAA,WAAA,CAAoB,YAA0B,EAAA;AAC1C,QAAA,KAAK,EAAE;QADS,IAAY,CAAA,YAAA,GAAZ,YAAY;;AAIhC;;;AAGG;IACI,IAAI,GAAA;QACP,MAAM,mBAAmB,GAAG,YAAY,CAAC,OAAO,CAAC,4BAA4B,CAAC;AAC9E,QAAA,IAAI,mBAAmB,EAAE,MAAM,GAAG,CAAC,EAAE;AACjC,YAAA,IAAI;gBACA,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;;YAC5C,OAAO,KAAK,EAAE;AACZ,gBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC;;;AAG5C,QAAA,OAAO,EAAE,CAAC,EAAE,CAAC;;AAGjB;;;AAGG;AACI,IAAA,IAAI,CAAC,aAA4B,EAAA;AACpC,QAAA,IAAI;AACA,YAAA,YAAY,CAAC,OAAO,CAAC,4BAA4B,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;;QACnF,OAAO,KAAK,EAAE;AACZ,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC;;;8GA9BnC,gCAAgC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAhC,gCAAgC,EAAA,CAAA,CAAA;;2FAAhC,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAD5C;;;ACZD;;AAEG;AACH,MAAM,sBAAsB,GAAG,sCAAsC;AAErE;;;;;;AAMG;AAIG,MAAO,gCAAiC,SAAQ,wBAAwB,CAAA;AAE1E,IAAA,WAAA,CAAoB,YAA0B,EAAA;AAC1C,QAAA,KAAK,EAAE;QADS,IAAY,CAAA,YAAA,GAAZ,YAAY;;AAIhC;;;AAGG;IACI,IAAI,GAAA;AACP,QAAA,IAAI;YACA,OAAO,EAAE,CAAC,MAAM,KAAK,YAAY,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;;QACpE,OAAO,KAAK,EAAE;AACZ,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC;;AAExC,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC;;AAGnB;;;AAGG;AACI,IAAA,IAAI,CAAC,OAAgB,EAAA;AACxB,QAAA,IAAI;AACA,YAAA,YAAY,CAAC,OAAO,CAAC,sBAAsB,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;;QAC1E,OAAO,KAAK,EAAE;AACZ,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC;;;8GA3BnC,gCAAgC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAhC,gCAAgC,EAAA,UAAA,EAF5B,MAAM,+EAA6E,CAAA,CAAA;;2FAEvF,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAH5C,UAAU;AACP,YAAA,IAAA,EAAA,CAAA,EAAC,UAAU,EAAE,MAAM,+EAA8E;;;ACdrG;;AAEG;AAIG,MAAO,wBAAyB,SAAQ,qBAAqB,CAAA;AAHnE,IAAA,WAAA,GAAA;;AAKI;;;AAGG;AACI,QAAA,IAAA,CAAA,YAAY,GAAmC,IAAI,YAAY,EAAoB;AAClF,QAAA,IAAA,CAAA,YAAY,GAAG;AACnB,YAAA,YAAY,EAAE,YAAY;AAC1B,YAAA,yCAAyC,EAAE,qCAAqC;AAChF,YAAA,yCAAyC,EAAE,qCAAqC;AAChF,YAAA,uBAAuB,EAAE,QAAQ;AACjC,YAAA,kCAAkC,EAAE,UAAU;AAC9C,YAAA,qBAAqB,EAAE,MAAM;AAC7B,YAAA,mBAAmB,EAAE,SAAS;AAC9B,YAAA,oBAAoB,EAAE,UAAU;AAChC,YAAA,kBAAkB,EAAE;SACvB;AAqBJ;AAnBG;;AAEG;AACH,IAAA,IAAW,WAAW,GAAA;AAClB,QAAA,OAAO,IAAI;;AAGf;;AAEG;AACI,IAAA,OAAO,CAAC,GAAW,EAAA;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;AACnC,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC1B,YAAA,OAAO,IAAI;;AAEf,QAAA,OAAO,GAAG;;8GAlCL,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAxB,wBAAwB,EAAA,UAAA,EAFpB,MAAM,+EAA6E,CAAA,CAAA;;2FAEvF,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AACP,YAAA,IAAA,EAAA,CAAA,EAAC,UAAU,EAAE,MAAM,+EAA8E;;;ACarG;;;AAGG;MA4BU,gBAAgB,CAAA;8GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,iBA1BrB,mBAAmB;YACnB,uBAAuB;YACvB,yBAAyB;AACzB,YAAA,sBAAsB,aAKb,YAAY;YACrB,eAAe;YACf,cAAc;YACd,aAAa;AACb,YAAA,aAAa,aANb,mBAAmB;YACnB,yBAAyB,CAAA,EAAA,CAAA,CAAA;AAmBpB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,EAdM,SAAA,EAAA;YAC3B,yBAAyB;YACzB,SAAS;AACT,YAAA;AACI,gBAAA,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE;AAChD,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE;AAChD,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE;AAC7C,aAAA;YACD,iBAAiB,CAAC,sBAAsB,EAAE;AAC7C,SAAA,EAAA,OAAA,EAAA,CAjBY,YAAY;YACrB,eAAe;YACf,cAAc;YACd,aAAa;YACb,aAAa,CAAA,EAAA,CAAA,CAAA;;2FAcR,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBA3B5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,YAAY,EAAE;wBAClB,mBAAmB;wBACnB,uBAAuB;wBACvB,yBAAyB;wBACzB;AACH,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,mBAAmB;wBACnB;qBACH,EAAE,OAAO,EAAE,CAAC,YAAY;wBACrB,eAAe;wBACf,cAAc;wBACd,aAAa;wBACb,aAAa,CAAC,EAAE,SAAS,EAAE;wBAC3B,yBAAyB;wBACzB,SAAS;AACT,wBAAA;AACI,4BAAA,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE;AAChD,yBAAA;AACD,wBAAA;AACI,4BAAA,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE;AAChD,yBAAA;AACD,wBAAA;AACI,4BAAA,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE;AAC7C,yBAAA;wBACD,iBAAiB,CAAC,sBAAsB,EAAE;qBAC7C,EAAE;;;AClDP;;AAEG;;ACFH;;AAEG;;;;"}