@flusys/ng-shared 3.0.0 → 4.0.0-rc
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/README.md +435 -359
- package/fesm2022/flusys-ng-shared.mjs +1648 -614
- package/fesm2022/flusys-ng-shared.mjs.map +1 -1
- package/package.json +2 -2
- package/types/flusys-ng-shared.d.ts +286 -308
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flusys-ng-shared.mjs","sources":["../../../projects/ng-shared/constants/permissions.ts","../../../projects/ng-shared/interfaces/file-select.interface.ts","../../../projects/ng-shared/enums/contact-type.enum.ts","../../../projects/ng-shared/enums/icon-type.enum.ts","../../../projects/ng-shared/services/platform.service.ts","../../../projects/ng-shared/services/cookie.service.ts","../../../projects/ng-shared/services/file-url.service.ts","../../../projects/ng-shared/utils/permission-evaluator.util.ts","../../../projects/ng-shared/services/permission-validator.service.ts","../../../projects/ng-shared/directives/edit-mode-element-changer.directive.ts","../../../projects/ng-shared/directives/has-permission.directive.ts","../../../projects/ng-shared/directives/is-empty-image.directive.ts","../../../projects/ng-shared/directives/prevent-default.directive.ts","../../../projects/ng-shared/modules/angular.module.ts","../../../projects/ng-shared/modules/prime.module.ts","../../../projects/ng-shared/classes/api-resource.class.ts","../../../projects/ng-shared/classes/base-form-control.class.ts","../../../projects/ng-shared/components/icon/icon.component.ts","../../../projects/ng-shared/utils/scroll-pagination.util.ts","../../../projects/ng-shared/components/lazy-multi-select/lazy-multi-select.component.ts","../../../projects/ng-shared/components/lazy-multi-select/lazy-multi-select.component.html","../../../projects/ng-shared/components/lazy-select/lazy-select.component.ts","../../../projects/ng-shared/components/lazy-select/lazy-select.component.html","../../../projects/ng-shared/tokens/provider.tokens.ts","../../../projects/ng-shared/components/user-select/base-user-select.class.ts","../../../projects/ng-shared/components/user-select/user-select.component.ts","../../../projects/ng-shared/components/user-multi-select/user-multi-select.component.ts","../../../projects/ng-shared/components/file-uploader/file-uploader.component.ts","../../../projects/ng-shared/components/file-selector-dialog/file-selector-dialog.component.ts","../../../projects/ng-shared/guards/permission.guard.ts","../../../projects/ng-shared/utils/base-form-page.ts","../../../projects/ng-shared/utils/base-list-page.ts","../../../projects/ng-shared/public-api.ts","../../../projects/ng-shared/flusys-ng-shared.ts"],"sourcesContent":["/**\n * Centralized Permission Codes\n *\n * Single source of truth for all permission codes used across the application.\n * Use these constants instead of hardcoded strings to prevent typos and enable easy refactoring.\n *\n * Naming Convention: <entity>.<action>\n * - entity: The resource being accessed (e.g., user, role, company)\n * - action: The operation being performed (create, read, update, delete, assign)\n */\n\n// ==================== AUTH MODULE ====================\n\nexport const USER_PERMISSIONS = {\n CREATE: 'user.create',\n READ: 'user.read',\n UPDATE: 'user.update',\n DELETE: 'user.delete',\n} as const;\n\nexport const COMPANY_PERMISSIONS = {\n CREATE: 'company.create',\n READ: 'company.read',\n UPDATE: 'company.update',\n DELETE: 'company.delete',\n} as const;\n\nexport const BRANCH_PERMISSIONS = {\n CREATE: 'branch.create',\n READ: 'branch.read',\n UPDATE: 'branch.update',\n DELETE: 'branch.delete',\n} as const;\n\n// ==================== IAM MODULE ====================\n\nexport const ACTION_PERMISSIONS = {\n CREATE: 'action.create',\n READ: 'action.read',\n UPDATE: 'action.update',\n DELETE: 'action.delete',\n} as const;\n\nexport const ROLE_PERMISSIONS = {\n CREATE: 'role.create',\n READ: 'role.read',\n UPDATE: 'role.update',\n DELETE: 'role.delete',\n} as const;\n\nexport const ROLE_ACTION_PERMISSIONS = {\n READ: 'role-action.read',\n ASSIGN: 'role-action.assign',\n} as const;\n\nexport const USER_ROLE_PERMISSIONS = {\n READ: 'user-role.read',\n ASSIGN: 'user-role.assign',\n} as const;\n\nexport const USER_ACTION_PERMISSIONS = {\n READ: 'user-action.read',\n ASSIGN: 'user-action.assign',\n} as const;\n\nexport const COMPANY_ACTION_PERMISSIONS = {\n READ: 'company-action.read',\n ASSIGN: 'company-action.assign',\n} as const;\n\n// ==================== STORAGE MODULE ====================\n\nexport const FILE_PERMISSIONS = {\n CREATE: 'file.create',\n READ: 'file.read',\n UPDATE: 'file.update',\n DELETE: 'file.delete',\n} as const;\n\nexport const FOLDER_PERMISSIONS = {\n CREATE: 'folder.create',\n READ: 'folder.read',\n UPDATE: 'folder.update',\n DELETE: 'folder.delete',\n} as const;\n\nexport const STORAGE_CONFIG_PERMISSIONS = {\n CREATE: 'storage-config.create',\n READ: 'storage-config.read',\n UPDATE: 'storage-config.update',\n DELETE: 'storage-config.delete',\n} as const;\n\n// ==================== EMAIL MODULE ====================\n\nexport const EMAIL_CONFIG_PERMISSIONS = {\n CREATE: 'email-config.create',\n READ: 'email-config.read',\n UPDATE: 'email-config.update',\n DELETE: 'email-config.delete',\n} as const;\n\nexport const EMAIL_TEMPLATE_PERMISSIONS = {\n CREATE: 'email-template.create',\n READ: 'email-template.read',\n UPDATE: 'email-template.update',\n DELETE: 'email-template.delete',\n} as const;\n\n// ==================== FORM BUILDER MODULE ====================\n\nexport const FORM_PERMISSIONS = {\n CREATE: 'form.create',\n READ: 'form.read',\n UPDATE: 'form.update',\n DELETE: 'form.delete',\n} as const;\n\n// ==================== AGGREGATED EXPORTS ====================\n\n/**\n * All permission codes grouped by module\n */\nexport const PERMISSIONS = {\n // Auth\n USER: USER_PERMISSIONS,\n COMPANY: COMPANY_PERMISSIONS,\n BRANCH: BRANCH_PERMISSIONS,\n // IAM\n ACTION: ACTION_PERMISSIONS,\n ROLE: ROLE_PERMISSIONS,\n ROLE_ACTION: ROLE_ACTION_PERMISSIONS,\n USER_ROLE: USER_ROLE_PERMISSIONS,\n USER_ACTION: USER_ACTION_PERMISSIONS,\n COMPANY_ACTION: COMPANY_ACTION_PERMISSIONS,\n // Storage\n FILE: FILE_PERMISSIONS,\n FOLDER: FOLDER_PERMISSIONS,\n STORAGE_CONFIG: STORAGE_CONFIG_PERMISSIONS,\n // Email\n EMAIL_CONFIG: EMAIL_CONFIG_PERMISSIONS,\n EMAIL_TEMPLATE: EMAIL_TEMPLATE_PERMISSIONS,\n // Form Builder\n FORM: FORM_PERMISSIONS,\n} as const;\n\n// Type exports for TypeScript support\nexport type PermissionCode =\n (typeof PERMISSIONS)[keyof typeof PERMISSIONS][keyof (typeof PERMISSIONS)[keyof typeof PERMISSIONS]];\n","import { Observable } from 'rxjs';\nimport { IListResponse, ISingleResponse } from './response-payload.interface';\n\n/**\n * Basic file info for selectors and displays\n */\nexport interface IFileBasicInfo {\n id: string;\n name: string;\n contentType: string;\n size: string;\n url: string | null;\n}\n\n/**\n * Upload options for file uploader\n */\nexport interface IFileUploadOptions {\n storageConfigId?: string;\n folderPath?: string;\n maxWidth?: number;\n maxHeight?: number;\n quality?: number;\n compress?: boolean;\n}\n\n/**\n * Uploaded file response\n */\nexport interface IUploadedFile {\n id?: string; // File manager ID (UUID) - available when registered via uploadAndRegister\n name: string;\n key: string;\n size: number;\n contentType: string;\n}\n\n/**\n * Filter params for file selector\n */\nexport interface IFileSelectFilter {\n page: number;\n pageSize: number;\n search: string;\n contentTypes?: string[];\n folderId?: string;\n}\n\n/**\n * Function type for loading files\n */\nexport type LoadFilesFn = (filter: IFileSelectFilter) => Observable<IListResponse<IFileBasicInfo>>;\n\n/**\n * Function type for uploading a file\n */\nexport type UploadFileFn = (\n file: File,\n options?: IFileUploadOptions\n) => Observable<ISingleResponse<IUploadedFile>>;\n\n/**\n * Function type for getting file URLs (presigned URL refresh)\n */\nexport type GetFileUrlsFn = (fileIds: string[]) => Observable<ISingleResponse<IFileBasicInfo[]>>;\n\n/**\n * Common file type filters\n */\nexport const FILE_TYPE_FILTERS = {\n IMAGES: ['image/jpeg', 'image/png', 'image/gif', 'image/webp', 'image/svg+xml'],\n DOCUMENTS: [\n 'application/pdf',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n ],\n VIDEOS: ['video/mp4', 'video/webm', 'video/ogg', 'video/quicktime'],\n AUDIO: ['audio/mpeg', 'audio/wav', 'audio/ogg', 'audio/webm'],\n ALL: [] as string[],\n} as const;\n\n/**\n * Get accept string for file input from content types\n */\nexport function getAcceptString(contentTypes: string[]): string {\n if (!contentTypes.length) return '*/*';\n return contentTypes.join(',');\n}\n\n/**\n * Check if file matches allowed content types\n */\nexport function isFileTypeAllowed(file: File, allowedTypes: string[]): boolean {\n if (!allowedTypes.length) return true;\n return allowedTypes.some((type) => {\n if (type.endsWith('/*')) {\n return file.type.startsWith(type.replace('/*', '/'));\n }\n return file.type === type;\n });\n}\n\n/**\n * Get file icon class based on content type\n */\nexport function getFileIconClass(contentType: string): string {\n if (contentType.startsWith('image/')) return 'pi pi-image';\n if (contentType.startsWith('video/')) return 'pi pi-video';\n if (contentType.startsWith('audio/')) return 'pi pi-volume-up';\n if (contentType.includes('pdf')) return 'pi pi-file-pdf';\n if (contentType.includes('word') || contentType.includes('document')) return 'pi pi-file-word';\n if (contentType.includes('excel') || contentType.includes('spreadsheet')) return 'pi pi-file-excel';\n return 'pi pi-file';\n}\n\n/**\n * Format file size for display\n */\nexport function formatFileSize(sizeInKb: string | number): string {\n const kb = typeof sizeInKb === 'string' ? parseFloat(sizeInKb) : sizeInKb;\n if (kb < 1024) return `${kb.toFixed(1)} KB`;\n const mb = kb / 1024;\n if (mb < 1024) return `${mb.toFixed(1)} MB`;\n const gb = mb / 1024;\n return `${gb.toFixed(2)} GB`;\n}\n","export enum ContactTypeEnum {\n PHONE = 1,\n EMAIL = 2,\n}\n","export enum IconTypeEnum {\n PRIMENG_ICON = 1,\n IMAGE_FILE_LINK = 2,\n DIRECT_TAG_SVG = 3,\n}\n","import { Injectable, PLATFORM_ID, inject } from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\n\n@Injectable({ providedIn: 'root' })\nexport class PlatformService {\n private readonly platformId = inject(PLATFORM_ID);\n\n get isServer(): boolean {\n return isPlatformServer(this.platformId);\n }\n}\n","import { Injectable, inject, DOCUMENT, REQUEST } from '@angular/core';\n\nimport { PlatformService } from \"./platform.service\";\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CookieService {\n private doc = inject<Document>(DOCUMENT, { optional: true })!;\n private platformService = inject(PlatformService);\n private readonly request = inject(REQUEST, { optional: true });\n\n get(): string {\n return !this.platformService.isServer ? this.doc.cookie : this.request?.headers.get('cookie') ?? \"\";\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, Signal, inject, signal, computed } from '@angular/core';\nimport { APP_CONFIG, getServiceUrl } from '@flusys/ng-core';\nimport { Observable, of } from 'rxjs';\nimport { tap, catchError, map } from 'rxjs/operators';\nimport { ISingleResponse } from '../interfaces/response-payload.interface';\n\nexport interface FilesResponseDto {\n id: string;\n name: string;\n contentType: string;\n url: string;\n}\n\n/**\n * Service to fetch file URLs from the backend.\n * Handles presigned URLs for cloud storage, auto-refresh, and caching.\n */\n@Injectable({ providedIn: 'root' })\nexport class FileUrlService {\n private readonly http = inject(HttpClient);\n private readonly appConfig = inject(APP_CONFIG);\n\n private readonly _cache = signal<Map<string, FilesResponseDto>>(new Map());\n readonly cache = this._cache.asReadonly();\n\n /** Get file URL by ID from cache (synchronous) */\n getFileUrl(fileId: string | null | undefined): string | null {\n if (!fileId) return null;\n return this._cache().get(fileId)?.url ?? null;\n }\n\n /** Get file URL as computed signal */\n fileUrlSignal(fileId: string | null | undefined): Signal<string | null> {\n return computed(() => this.getFileUrl(fileId));\n }\n\n /** Fetch file URLs from backend and update cache */\n fetchFileUrls(\n fileIds: string[],\n forceRefresh = false,\n ): Observable<FilesResponseDto[]> {\n if (!fileIds.length) return of([]);\n\n const cache = this._cache();\n const missingIds = forceRefresh\n ? fileIds\n : fileIds.filter((id) => !cache.has(id));\n\n if (!missingIds.length) {\n return of(this.getFromCache(fileIds));\n }\n\n const requestDto = missingIds.map((id) => ({ id }));\n\n return this.http\n .post<ISingleResponse<FilesResponseDto[]>>(\n `${getServiceUrl(this.appConfig, 'storage')}/file-manager/get-files`,\n requestDto,\n )\n .pipe(\n map((response) => response.data ?? []),\n tap((files) => this.addToCache(files)),\n map(() => this.getFromCache(fileIds)),\n catchError(() => of([])),\n );\n }\n\n /** Fetch single file URL (delegates to fetchFileUrls) */\n fetchSingleFileUrl(\n fileId: string,\n forceRefresh = false,\n ): Observable<FilesResponseDto | null> {\n return this.fetchFileUrls([fileId], forceRefresh).pipe(\n map((files) => files[0] ?? null),\n );\n }\n\n /** Clear entire cache */\n clearCache(): void {\n this._cache.set(new Map());\n }\n\n /** Remove specific file from cache */\n removeFromCache(fileId: string): void {\n this._cache.update((cache) => {\n const next = new Map(cache);\n next.delete(fileId);\n return next;\n });\n }\n\n private addToCache(files: FilesResponseDto[]): void {\n this._cache.update((cache) => {\n const next = new Map(cache);\n for (const file of files) {\n next.set(file.id, file);\n }\n return next;\n });\n }\n\n private getFromCache(fileIds: string[]): FilesResponseDto[] {\n const cache = this._cache();\n return fileIds\n .map((id) => cache.get(id))\n .filter((f): f is FilesResponseDto => f !== undefined);\n }\n}\n","import { ILogicNode } from '../interfaces/common-data.interface';\n\n/**\n * Check if user has a specific permission using wildcard matching.\n * Supports:\n * - Exact match: 'user.create' matches 'user.create'\n * - Full wildcard: '*' matches everything\n * - Module wildcard: 'user.*' matches 'user.create', 'user.read', etc.\n */\nexport function hasPermission(\n requiredPermission: string,\n userPermissions: string[],\n): boolean {\n // Exact match\n if (userPermissions.includes(requiredPermission)) return true;\n\n // Wildcard matching\n for (const permission of userPermissions) {\n // Full wildcard - grants all permissions\n if (permission === '*') return true;\n\n // Module wildcard (e.g., 'user.*' matches 'user.create')\n if (\n permission.endsWith('.*') &&\n requiredPermission.startsWith(permission.slice(0, -1))\n ) {\n return true;\n }\n }\n\n return false;\n}\n\n/** Evaluate permission logic (string or ILogicNode) against user permissions */\nexport function evaluatePermission(\n logic: string | ILogicNode | null | undefined,\n permissions: string[],\n): boolean {\n if (!logic) return false;\n if (typeof logic === 'string') return hasPermission(logic, permissions);\n return evaluateLogicNode(logic, permissions);\n}\n\n/** Recursively evaluate an ILogicNode tree */\nexport function evaluateLogicNode(\n node: ILogicNode,\n permissions: string[],\n): boolean {\n switch (node.type) {\n case 'action':\n return node.actionId ? hasPermission(node.actionId, permissions) : false;\n\n case 'group':\n if (!node.children || node.children.length === 0) return false;\n\n return node.operator === 'AND'\n ? node.children.every((child) => evaluateLogicNode(child, permissions))\n : node.children.some((child) => evaluateLogicNode(child, permissions));\n\n default:\n return false;\n }\n}\n\n/** Check if user has ANY of the specified permissions (OR logic) */\nexport function hasAnyPermission(\n permissionCodes: string[],\n permissions: string[],\n): boolean {\n if (!permissionCodes?.length) return false;\n return permissionCodes.some((code) => hasPermission(code, permissions));\n}\n\n/** Check if user has ALL of the specified permissions (AND logic) */\nexport function hasAllPermissions(\n permissionCodes: string[],\n permissions: string[],\n): boolean {\n if (!permissionCodes?.length) return false;\n return permissionCodes.every((code) => hasPermission(code, permissions));\n}\n","import { Injectable, signal } from '@angular/core';\nimport { hasPermission } from '../utils/permission-evaluator.util';\n\n/**\n * Permission state management service.\n * Provides signal-based storage and permission checking with wildcard support.\n */\n@Injectable({ providedIn: 'root' })\nexport class PermissionValidatorService {\n private readonly _permissions = signal<string[]>([]);\n readonly permissions = this._permissions.asReadonly();\n\n private readonly _isLoaded = signal(false);\n readonly isLoaded = this._isLoaded.asReadonly();\n\n /** Set permissions (replaces existing) */\n setPermissions(permissions: string[]): void {\n this._permissions.set(permissions);\n this._isLoaded.set(true);\n }\n\n /** Clear all permissions */\n clearPermissions(): void {\n this._permissions.set([]);\n this._isLoaded.set(false);\n }\n\n /** Check if user has permission (supports wildcards: '*', 'module.*') */\n hasPermission(code: string): boolean {\n return hasPermission(code, this._permissions());\n }\n\n /** @deprecated Use `isLoaded()` signal instead */\n isPermissionsLoaded(): boolean {\n return this._isLoaded();\n }\n}\n","import { Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\n@Directive({\n selector: '[appEditModeElementChanger]',\n})\nexport class EditModeElementChangerDirective {\n private readonly el = inject(ElementRef);\n private readonly ngControl = inject(NgControl, { optional: true });\n\n readonly isEditMode = input.required<boolean>();\n\n constructor() {\n effect(() => {\n const editMode = this.isEditMode();\n this.updateElement(editMode);\n this.updateControl(editMode);\n });\n }\n\n private updateControl(editMode: boolean): void {\n if (!editMode) this.ngControl?.control?.disable();\n else this.ngControl?.control?.enable();\n }\n\n private updateElement(editMode: boolean): void {\n const inputElement: HTMLElement = this.el.nativeElement;\n\n if (inputElement instanceof HTMLInputElement) {\n if (!editMode) {\n inputElement.setAttribute('readonly', 'true');\n inputElement.classList.add('edit-mode-element-css');\n } else {\n inputElement.removeAttribute('readonly');\n inputElement.classList.remove('edit-mode-element-css');\n }\n }\n\n if (inputElement.tagName === 'P-SELECT') {\n const dropdown = inputElement.querySelector<HTMLElement>('.p-select-dropdown');\n const label = inputElement.querySelector<HTMLElement>('.p-select-label');\n if (!editMode) {\n inputElement.classList.add('edit-mode-element-css', 'overflow-hidden');\n if (dropdown) dropdown.style.display = 'none';\n label?.classList.add('edit-mode-element-css');\n } else {\n inputElement.classList.remove('edit-mode-element-css', 'overflow-hidden');\n if (dropdown) dropdown.style.display = 'flex';\n label?.classList.remove('edit-mode-element-css');\n }\n }\n\n if (inputElement.tagName === 'P-CALENDAR') {\n const firstChild = inputElement.firstElementChild;\n if (!editMode) {\n firstChild?.children[0]?.classList.add('edit-mode-element-css', 'cursor-auto');\n firstChild?.children[1]?.classList.add('hidden');\n } else {\n firstChild?.children[0]?.classList.remove('edit-mode-element-css', 'cursor-auto');\n firstChild?.children[1]?.classList.remove('hidden');\n }\n }\n }\n}\n","import {\n Directive,\n TemplateRef,\n ViewContainerRef,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { ILogicNode } from '../interfaces/common-data.interface';\nimport { PermissionValidatorService } from '../services/permission-validator.service';\nimport { evaluatePermission } from '../utils/permission-evaluator.util';\n\n/**\n * HasPermission Directive\n *\n * Structural directive for permission-based rendering.\n * Shows/hides elements based on permission logic evaluation.\n *\n * Supports:\n * - Simple permission check (string)\n * - Complex permission logic (ILogicNode with AND/OR operators)\n *\n * Usage:\n * ```html\n * <!-- Simple permission check -->\n * <button *hasPermission=\"'user.create'\">Create User</button>\n *\n * <!-- Complex permission logic -->\n * <button *hasPermission=\"userManageLogic\">Manage Users</button>\n *\n * <!-- Where userManageLogic is: -->\n * <!-- (user.view OR user.create) AND department.manage -->\n * ```\n *\n * The directive automatically reacts to permission changes through signals.\n *\n * @example\n * // In component\n * readonly userManageLogic: ILogicNode = {\n * id: 'root',\n * type: 'group',\n * operator: 'AND',\n * children: [\n * {\n * id: '1',\n * type: 'group',\n * operator: 'OR',\n * children: [\n * { id: '2', type: 'action', actionId: 'user.view' },\n * { id: '3', type: 'action', actionId: 'user.create' }\n * ]\n * },\n * { id: '4', type: 'action', actionId: 'department.manage' }\n * ]\n * };\n *\n * // In template\n * <div *hasPermission=\"userManageLogic\">\n * User management content\n * </div>\n */\n@Directive({\n selector: '[hasPermission]',\n})\nexport class HasPermissionDirective {\n // ==================== DEPENDENCIES ====================\n\n private readonly templateRef = inject(TemplateRef<unknown>);\n private readonly viewContainer = inject(ViewContainerRef);\n private readonly permissionValidator = inject(PermissionValidatorService);\n\n // ==================== SIGNALS ====================\n\n /**\n * Permission logic input signal\n * Accepts either:\n * - string: Single permission code to check\n * - ILogicNode: Complex permission logic tree\n */\n readonly hasPermission = input<string | ILogicNode | null>(null);\n\n /**\n * View created state\n */\n private viewCreated = false;\n\n // ==================== CONSTRUCTOR ====================\n\n constructor() {\n // Effect to reactively update view when permissions or logic changes\n effect(() => {\n // Track permission changes\n this.permissionValidator.permissions();\n\n // Track logic changes\n const logic = this.hasPermission();\n\n // Evaluate and update view\n this.updateView(logic);\n });\n }\n\n // ==================== VIEW MANAGEMENT ====================\n\n /**\n * Update view based on permission evaluation\n */\n private updateView(logic: string | ILogicNode | null): void {\n // Fail closed: No logic = no access\n if (!logic) {\n this.clearView();\n return;\n }\n\n // Fail closed: No permissions loaded = no access (unauthenticated state)\n if (!this.permissionValidator.isPermissionsLoaded()) {\n this.clearView();\n return;\n }\n\n // Use shared evaluatePermission utility\n const hasPermission = evaluatePermission(\n logic,\n this.permissionValidator.permissions(),\n );\n\n if (hasPermission && !this.viewCreated) {\n // Create view if not exists\n this.viewContainer.createEmbeddedView(this.templateRef);\n this.viewCreated = true;\n } else if (!hasPermission && this.viewCreated) {\n this.clearView();\n }\n }\n\n /**\n * Clear the view container\n */\n private clearView(): void {\n if (this.viewCreated) {\n this.viewContainer.clear();\n this.viewCreated = false;\n }\n }\n}\n","import { Directive, computed, input, signal } from '@angular/core';\n\n@Directive({\n selector: 'img',\n host: {\n '[src]': 'imageSrc()',\n '(error)': 'onError()',\n },\n})\nexport class IsEmptyImageDirective {\n readonly src = input<string>('');\n private readonly hasError = signal(false);\n private readonly defaultImg = 'lib/assets/images/default/default-image.jpg';\n\n readonly imageSrc = computed(() => {\n if (this.hasError()) {\n return this.defaultImg;\n }\n const srcValue = this.src();\n return srcValue ? srcValue : this.defaultImg;\n });\n\n onError(): void {\n this.hasError.set(true);\n }\n}\n","import { Directive, input, output } from '@angular/core';\n\n@Directive({\n selector: '[appPreventDefault]',\n host: {\n '(click)': 'onClick($event)',\n '(keydown)': 'onKeydown($event)',\n '(keyup)': 'onKeyup($event)',\n },\n})\nexport class PreventDefaultDirective {\n readonly eventType = input<'click' | 'keydown' | 'keyup'>('click');\n readonly preventKey = input<string | undefined>(undefined);\n readonly action = output<Event>();\n\n onClick(event: MouseEvent): void {\n if (this.eventType() === 'click') {\n this.processEvent(event);\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (this.eventType() === 'keydown') {\n if (!this.preventKey() || event.key === this.preventKey()) {\n this.processEvent(event);\n }\n }\n }\n\n onKeyup(event: KeyboardEvent): void {\n if (this.eventType() === 'keyup') {\n if (!this.preventKey() || event.key === this.preventKey()) {\n this.processEvent(event);\n }\n }\n }\n\n private processEvent(event: Event): void {\n event.preventDefault();\n this.action.emit(event);\n }\n}","import { CommonModule, DatePipe, NgComponentOutlet, NgOptimizedImage } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router';\nimport { IsEmptyImageDirective, PreventDefaultDirective } from '../directives/public-api';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n RouterOutlet,\n RouterLink,\n RouterLinkActive,\n IsEmptyImageDirective,\n NgOptimizedImage,\n NgComponentOutlet,\n PreventDefaultDirective,\n ],\n providers: [DatePipe],\n exports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n RouterOutlet,\n RouterLink,\n RouterLinkActive,\n IsEmptyImageDirective,\n NgOptimizedImage,\n NgComponentOutlet,\n PreventDefaultDirective,\n ],\n})\nexport class AngularModule {}\n","import { NgModule } from '@angular/core';\nimport { AutoCompleteModule } from 'primeng/autocomplete';\nimport { AvatarModule } from 'primeng/avatar';\nimport { ButtonModule } from 'primeng/button';\nimport { CardModule } from 'primeng/card';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { DialogModule } from 'primeng/dialog';\nimport { DividerModule } from 'primeng/divider';\nimport { FileUploadModule } from 'primeng/fileupload';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { ImageModule } from 'primeng/image';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { ListboxModule } from 'primeng/listbox';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { PanelModule } from 'primeng/panel';\nimport { PasswordModule } from 'primeng/password';\nimport { PopoverModule } from 'primeng/popover';\nimport { ProgressBarModule } from 'primeng/progressbar';\nimport { RadioButtonModule } from 'primeng/radiobutton';\nimport { RippleModule } from 'primeng/ripple';\nimport { SelectModule } from 'primeng/select';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { SplitButtonModule } from 'primeng/splitbutton';\nimport { StepsModule } from 'primeng/steps';\nimport { TableModule } from 'primeng/table';\nimport { TabsModule } from 'primeng/tabs';\nimport { TagModule } from 'primeng/tag';\nimport { TextareaModule } from 'primeng/textarea';\nimport { ToastModule } from 'primeng/toast';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { TreeTableModule } from 'primeng/treetable';\n@NgModule({\n exports: [\n AutoCompleteModule,\n AvatarModule,\n ButtonModule,\n CardModule,\n CheckboxModule,\n ConfirmDialogModule,\n DatePickerModule,\n DialogModule,\n DividerModule,\n FileUploadModule,\n IconFieldModule,\n ImageModule,\n InputIconModule,\n InputNumberModule,\n InputTextModule,\n ListboxModule,\n MultiSelectModule,\n PaginatorModule,\n PanelModule,\n PasswordModule,\n PopoverModule,\n ProgressBarModule,\n RadioButtonModule,\n RippleModule,\n SelectButtonModule,\n SelectModule,\n SkeletonModule,\n SplitButtonModule,\n StepsModule,\n TableModule,\n TabsModule,\n TagModule,\n TextareaModule,\n ToastModule,\n ToggleSwitchModule,\n TooltipModule,\n TreeTableModule,\n ],\n})\nexport class PrimeModule {}\n","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { computed, inject, Injector, resource, ResourceRef, runInInjectionContext, signal } from '@angular/core';\nimport { APP_CONFIG, getServiceUrl, IAppConfig } from '@flusys/ng-core';\nimport { firstValueFrom, Observable } from 'rxjs';\n\n/** Service names that can be used for feature-specific base URLs */\nexport type ServiceName = 'auth' | 'administration' | 'iam' | 'storage' | 'formBuilder' | 'email';\nimport {\n IBulkResponse,\n IDeleteData,\n IFilterData,\n IListResponse,\n IMessageResponse,\n IPagination,\n ISingleResponse,\n} from '../interfaces/public-api';\n\n// =============================================================================\n// CRUD Service Interface - Matches NestJS Shared API Controller\n// =============================================================================\n\n/**\n * Service interface for CRUD operations.\n * Matches NestJS shared API controller endpoints:\n *\n * | Angular Method | HTTP | NestJS Endpoint | Response Type |\n * |------------------|--------|------------------------|------------------------|\n * | insert() | POST | /{resource}/insert | ISingleResponse<T> |\n * | insertMany() | POST | /{resource}/insert-many| IBulkResponse<T> |\n * | findById() | POST | /{resource}/get/:id | ISingleResponse<T> |\n * | getAll() | POST | /{resource}/get-all | IListResponse<T> |\n * | update() | POST | /{resource}/update | ISingleResponse<T> |\n * | updateMany() | POST | /{resource}/update-many| IBulkResponse<T> |\n * | delete() | POST | /{resource}/delete | IMessageResponse |\n */\nexport interface IApiService<DtoT, InterfaceT> {\n insert(dto: DtoT): Observable<ISingleResponse<InterfaceT>>;\n insertMany(dtos: DtoT[]): Observable<IBulkResponse<InterfaceT>>;\n findById(\n id: string,\n select?: string[],\n ): Observable<ISingleResponse<InterfaceT>>;\n getAll(\n search: string,\n filter: IFilterData,\n ): Observable<IListResponse<InterfaceT>>;\n update(dto: DtoT): Observable<ISingleResponse<InterfaceT>>;\n updateMany(dtos: DtoT[]): Observable<IBulkResponse<InterfaceT>>;\n delete(deleteDto: IDeleteData): Observable<IMessageResponse>;\n}\n\n// =============================================================================\n// API Resource Service - Signal-based CRUD with Angular Resource API\n// =============================================================================\n\n/**\n * Abstract base class for API services using Angular 21 resource() API.\n * Provides signal-based reactive data fetching with automatic loading states.\n * Response types match FLUSYS_NEST backend DTOs.\n *\n * ## Endpoint Mapping\n *\n * All endpoints use POST method (RPC-style API):\n * - `POST /{resource}/insert` - Create single item\n * - `POST /{resource}/insert-many` - Create multiple items\n * - `POST /{resource}/get/:id` - Get single item by ID\n * - `POST /{resource}/get-all?q=` - List with pagination/filter\n * - `POST /{resource}/update` - Update single item\n * - `POST /{resource}/update-many` - Update multiple items\n * - `POST /{resource}/delete` - Delete/restore/permanent delete\n *\n * @example\n * ```typescript\n * // Define service with global apiBaseUrl\n * @Injectable({ providedIn: 'root' })\n * export class UserService extends ApiResourceService<UserDto, User> {\n * constructor() {\n * super('auth/users', inject(HttpClient));\n * }\n * }\n *\n * // Define service with feature-specific baseUrl\n * @Injectable({ providedIn: 'root' })\n * export class FormService extends ApiResourceService<FormDto, Form> {\n * constructor() {\n * super('form', inject(HttpClient), 'formBuilder');\n * // URL: services.formBuilder.baseUrl + '/form'\n * }\n * }\n *\n * // In component - use signals\n * userService = inject(UserService);\n * users = this.userService.data; // Signal<User[]>\n * isLoading = this.userService.isLoading; // Signal<boolean>\n * total = this.userService.total; // Signal<number>\n *\n * // Trigger fetch\n * this.userService.fetchList('search', { pagination: { currentPage: 0, pageSize: 10 } });\n *\n * // CRUD operations\n * await this.userService.insertAsync({ name: 'John', email: 'john@example.com' });\n * await this.userService.updateAsync({ id: '123', name: 'John Updated' });\n * await this.userService.deleteAsync({ id: '123', type: 'delete' });\n * ```\n */\nexport abstract class ApiResourceService<\n DtoT,\n InterfaceT,\n> implements IApiService<DtoT, InterfaceT> {\n protected readonly baseUrl: string;\n protected readonly injector = inject(Injector);\n protected readonly http: HttpClient;\n protected readonly moduleApiName: string;\n\n // ==========================================================================\n // State Signals for List Queries\n // ==========================================================================\n\n /** Current search term */\n readonly searchTerm = signal('');\n\n /** Current filter and pagination state */\n readonly filterData = signal<IFilterData>({\n pagination: { currentPage: 0, pageSize: 10 },\n filter: {},\n select: [],\n sort: {},\n });\n\n /**\n * Resource for list data - lazy initialized to prevent auto-fetch on service injection.\n * Call initListResource() or any list method (fetchList, reload, etc.) to initialize.\n */\n private _listResource: ResourceRef<IListResponse<InterfaceT> | undefined> | null = null;\n\n /** Whether the list resource has been initialized */\n private _resourceInitialized = false;\n\n /**\n * Signal to track resource initialization for computed signals.\n * This allows computed signals to re-evaluate when the resource is created.\n * Without this, computed signals would not detect when _listResource changes from null.\n */\n private readonly _resourceInitSignal = signal(false);\n\n /** Get or create the list resource (lazy initialization) */\n get listResource(): ResourceRef<IListResponse<InterfaceT> | undefined> {\n if (!this._listResource) {\n this.initListResource();\n }\n return this._listResource!;\n }\n\n /**\n * Initialize the list resource. Called automatically when accessing listResource\n * or any list-related computed signals/methods.\n * Uses runInInjectionContext to support lazy initialization outside constructor.\n */\n initListResource(): void {\n if (this._resourceInitialized) return;\n this._resourceInitialized = true;\n runInInjectionContext(this.injector, () => {\n this._listResource = resource({\n params: () => ({\n search: this.searchTerm(),\n filter: this.filterData(),\n }),\n loader: async ({ params }) => {\n const { search, filter } = params;\n return this.fetchAllAsync(search, filter);\n },\n });\n });\n // Signal that resource is now initialized - triggers computed re-evaluation\n this._resourceInitSignal.set(true);\n }\n\n // ==========================================================================\n // Computed State Accessors\n // ==========================================================================\n\n /**\n * Whether data is currently loading.\n * Tracks _resourceInitSignal to re-evaluate when resource is created.\n */\n readonly isLoading = computed(() => {\n this._resourceInitSignal(); // Track initialization\n return this._listResource?.isLoading() ?? false;\n });\n\n /**\n * List data array.\n * Tracks _resourceInitSignal to re-evaluate when resource is created.\n */\n readonly data = computed(() => {\n this._resourceInitSignal(); // Track initialization\n return this._listResource?.value()?.data ?? [];\n });\n\n /**\n * Total count of items.\n * Tracks _resourceInitSignal to re-evaluate when resource is created.\n */\n readonly total = computed(() => {\n this._resourceInitSignal(); // Track initialization\n return this._listResource?.value()?.meta?.total ?? 0;\n });\n\n /**\n * Pagination metadata.\n * Tracks _resourceInitSignal to re-evaluate when resource is created.\n */\n readonly pageInfo = computed(() => {\n this._resourceInitSignal(); // Track initialization\n return this._listResource?.value()?.meta;\n });\n\n /**\n * Whether there are more pages.\n * Tracks _resourceInitSignal to re-evaluate when resource is created.\n */\n readonly hasMore = computed(() => {\n this._resourceInitSignal(); // Track initialization\n const meta = this._listResource?.value()?.meta;\n if (!meta) return false;\n return meta.hasMore ?? (meta.page + 1) * meta.pageSize < meta.total;\n });\n\n /**\n * @param moduleApiName - The API resource path (e.g., 'form' for /form-builder/form)\n * @param http - HttpClient instance\n * @param serviceName - Optional service name for feature-specific base URL (e.g., 'formBuilder')\n */\n constructor(moduleApiName: string, http: HttpClient, serviceName?: ServiceName) {\n this.moduleApiName = moduleApiName;\n const config = inject<IAppConfig>(APP_CONFIG);\n // Use service-specific URL if provided, otherwise fallback to global apiBaseUrl\n const serviceBaseUrl = serviceName ? getServiceUrl(config, serviceName) : config.apiBaseUrl;\n this.baseUrl = `${serviceBaseUrl}/${moduleApiName}`;\n this.http = http;\n // Resource is now lazy-initialized, not created in constructor\n }\n\n protected getHttpOptions(endpoint: string, params?: HttpParams) {\n return {\n headers: new HttpHeaders({\n 'x-loader-tag': `${this.moduleApiName}/${endpoint}`,\n }),\n ...(params ? { params } : {}),\n };\n }\n\n // ==========================================================================\n // List Management Methods\n // ==========================================================================\n\n /**\n * Fetch list data (triggers resource initialization and reload)\n */\n fetchList(search: string = '', filter?: Partial<IFilterData>): void {\n this.initListResource();\n this.searchTerm.set(search);\n if (filter) {\n this.filterData.update((prev) => ({ ...prev, ...filter }));\n }\n }\n\n /**\n * Update pagination\n */\n setPagination(pagination: IPagination): void {\n this.initListResource();\n this.filterData.update((prev) => ({ ...prev, pagination }));\n }\n\n /**\n * Go to next page\n */\n nextPage(): void {\n this.initListResource();\n this.filterData.update((prev) => ({\n ...prev,\n pagination: {\n ...prev.pagination!,\n currentPage: (prev.pagination?.currentPage ?? 0) + 1,\n },\n }));\n }\n\n /**\n * Reset to first page\n */\n resetPagination(): void {\n this.initListResource();\n this.filterData.update((prev) => ({\n ...prev,\n pagination: { currentPage: 0, pageSize: prev.pagination?.pageSize ?? 10 },\n }));\n }\n\n /**\n * Reload current data\n */\n reload(): void {\n if (this._listResource) {\n this._listResource.reload();\n }\n }\n\n // ==========================================================================\n // Observable-based API Methods (IApiService interface)\n // ==========================================================================\n\n /**\n * Insert single item (Observable)\n * POST /{resource}/insert\n */\n insert(dto: DtoT): Observable<ISingleResponse<InterfaceT>> {\n return this.http.post<ISingleResponse<InterfaceT>>(\n `${this.baseUrl}/insert`,\n dto,\n this.getHttpOptions('insert'),\n );\n }\n\n /**\n * Insert multiple items (Observable)\n * POST /{resource}/insert-many\n */\n insertMany(dtos: DtoT[]): Observable<IBulkResponse<InterfaceT>> {\n return this.http.post<IBulkResponse<InterfaceT>>(\n `${this.baseUrl}/insert-many`,\n dtos,\n this.getHttpOptions('insert-many'),\n );\n }\n\n /**\n * Find single item by ID (Observable)\n * POST /{resource}/get/:id\n */\n findById(\n id: string,\n select?: string[],\n ): Observable<ISingleResponse<InterfaceT>> {\n return this.http.post<ISingleResponse<InterfaceT>>(\n `${this.baseUrl}/get/${id}`,\n { select },\n this.getHttpOptions(`get/${id}`),\n );\n }\n\n /**\n * Get all items with pagination (Observable)\n * POST /{resource}/get-all?q=search\n */\n getAll(\n search: string,\n filter: IFilterData,\n ): Observable<IListResponse<InterfaceT>> {\n let params = new HttpParams();\n if (search) {\n params = params.append('q', search);\n }\n return this.http.post<IListResponse<InterfaceT>>(\n `${this.baseUrl}/get-all`,\n filter,\n this.getHttpOptions('get-all', params),\n );\n }\n\n /**\n * Update single item (Observable)\n * POST /{resource}/update\n */\n update(dto: DtoT): Observable<ISingleResponse<InterfaceT>> {\n return this.http.post<ISingleResponse<InterfaceT>>(\n `${this.baseUrl}/update`,\n dto,\n this.getHttpOptions('update'),\n );\n }\n\n /**\n * Update multiple items (Observable)\n * POST /{resource}/update-many\n */\n updateMany(dtos: DtoT[]): Observable<IBulkResponse<InterfaceT>> {\n return this.http.post<IBulkResponse<InterfaceT>>(\n `${this.baseUrl}/update-many`,\n dtos,\n this.getHttpOptions('update-many'),\n );\n }\n\n /**\n * Delete items (Observable)\n * POST /{resource}/delete\n * @param deleteDto - { id: string | string[], type: 'delete' | 'restore' | 'permanent' }\n */\n delete(deleteDto: IDeleteData): Observable<IMessageResponse> {\n return this.http.post<IMessageResponse>(\n `${this.baseUrl}/delete`,\n deleteDto,\n this.getHttpOptions('delete'),\n );\n }\n\n // ==========================================================================\n // Promise-based API Methods (Async)\n // ==========================================================================\n\n /**\n * Fetch paginated list (async)\n */\n protected async fetchAllAsync(\n search: string,\n filter: IFilterData,\n ): Promise<IListResponse<InterfaceT>> {\n return firstValueFrom(this.getAll(search, filter));\n }\n\n /**\n * Find single item by ID (async)\n */\n async findByIdAsync(\n id: string,\n select?: string[],\n ): Promise<ISingleResponse<InterfaceT>> {\n return firstValueFrom(this.findById(id, select));\n }\n\n /**\n * Insert single item (async)\n */\n async insertAsync(dto: DtoT): Promise<ISingleResponse<InterfaceT>> {\n return firstValueFrom(this.insert(dto));\n }\n\n /**\n * Insert multiple items (async)\n */\n async insertManyAsync(dtos: DtoT[]): Promise<IBulkResponse<InterfaceT>> {\n return firstValueFrom(this.insertMany(dtos));\n }\n\n /**\n * Update single item (async)\n */\n async updateAsync(dto: DtoT): Promise<ISingleResponse<InterfaceT>> {\n return firstValueFrom(this.update(dto));\n }\n\n /**\n * Update multiple items (async)\n */\n async updateManyAsync(dtos: DtoT[]): Promise<IBulkResponse<InterfaceT>> {\n return firstValueFrom(this.updateMany(dtos));\n }\n\n /**\n * Delete items (async)\n */\n async deleteAsync(deleteDto: IDeleteData): Promise<IMessageResponse> {\n return firstValueFrom(this.delete(deleteDto));\n }\n}\n\nexport { ApiResourceService as ApiService };\n","import {\n Directive,\n effect,\n forwardRef,\n inject,\n Injector,\n model,\n runInInjectionContext,\n untracked\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { FormValueControl } from '@angular/forms/signals';\n\n/**\n * Base class for form controls that support ALL Angular form patterns:\n *\n * 1. **Template-driven forms:** `[(value)]=\"mySignal\"` or `[(ngModel)]=\"myValue\"`\n * 2. **Reactive forms:** `[formControl]=\"ctrl\"` or `formControlName=\"field\"`\n * 3. **Signal forms (Angular 21+):** `[formField]=\"formTree.field\"`\n *\n * Implements both `ControlValueAccessor` (reactive forms) and `FormValueControl` (signal forms).\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [provideValueAccessor(MySelectComponent)]\n * })\n * export class MySelectComponent extends BaseFormControl<string | null> {\n * override readonly value = model<string | null>(null);\n *\n * constructor() {\n * super();\n * this.initializeFormControl();\n * }\n * }\n *\n * // Usage:\n * // Template-driven: <my-select [(value)]=\"selectedId\" />\n * // Reactive forms: <my-select [formControl]=\"myControl\" />\n * // Signal forms: <my-select [formField]=\"formTree.myField\" />\n * ```\n */\n@Directive()\nexport abstract class BaseFormControl<T> implements ControlValueAccessor, FormValueControl<T> {\n protected readonly injector = inject(Injector);\n\n /**\n * The value model - must be overridden in subclass with model<T>().\n * This property satisfies both:\n * - FormValueControl interface (signal forms)\n * - Internal state for ControlValueAccessor (reactive forms)\n */\n abstract readonly value: ReturnType<typeof model<T>>;\n\n /**\n * Disabled state model - bound to form control disabled state.\n * Using model() to satisfy FormValueControl interface requirements.\n */\n readonly disabled = model<boolean>(false);\n\n /**\n * Touched state model - for validation styling.\n * Using model() to satisfy FormValueControl interface requirements.\n */\n readonly touched = model<boolean>(false);\n\n private onChange: (value: T) => void = () => {};\n private onTouched: () => void = () => {};\n private isWritingValue = false;\n\n /**\n * Initialize the form control synchronization for ControlValueAccessor.\n * Must be called in the subclass constructor after super().\n *\n * Note: For signal forms ([formField]), this is not needed as\n * the FormField directive binds directly to the value model.\n */\n protected initializeFormControl(): void {\n runInInjectionContext(this.injector, () => {\n effect(() => {\n const currentValue = this.value();\n if (!this.isWritingValue) {\n untracked(() => this.onChange(currentValue));\n }\n });\n });\n }\n\n // ============================================\n // ControlValueAccessor Implementation\n // (For reactive forms: formControl, formControlName)\n // ============================================\n\n /** ControlValueAccessor: Write value from form control to signal */\n writeValue(value: T): void {\n this.isWritingValue = true;\n this.value.set(value);\n this.isWritingValue = false;\n }\n\n /** ControlValueAccessor: Register change callback */\n registerOnChange(fn: (value: T) => void): void {\n this.onChange = fn;\n }\n\n /** ControlValueAccessor: Register touched callback */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** ControlValueAccessor: Set disabled state from form control */\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n // ============================================\n // FormValueControl Implementation\n // (For signal forms: [formField])\n // ============================================\n // The FormValueControl interface only requires:\n // - value: ModelSignal<T> (already declared as abstract above)\n // The FormField directive automatically binds to the value model.\n\n /** Mark the control as touched (call on blur or panel close) */\n protected markAsTouched(): void {\n if (!this.touched()) {\n this.touched.set(true);\n this.onTouched();\n }\n }\n}\n\n/**\n * Factory function to provide NG_VALUE_ACCESSOR for a component.\n * Use in component providers array.\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [provideValueAccessor(LazySelectComponent)]\n * })\n * export class LazySelectComponent extends BaseFormControl<string | null> {}\n * ```\n */\nexport function provideValueAccessor<T extends new (...args: unknown[]) => ControlValueAccessor>(component: T) {\n return {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => component),\n multi: true\n };\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { AngularModule } from '../../modules/public-api';\nimport { IconTypeEnum } from '../../enums/public-api';\n\n@Component({\n selector: 'lib-icon',\n imports: [AngularModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (icon()) {\n @if (iconType() === IconTypeEnum.PRIMENG_ICON) {\n <i [class]=\"icon()\"></i>\n } @else if (iconType() === IconTypeEnum.IMAGE_FILE_LINK) {\n <img [alt]=\"icon()\" [src]=\"icon()\" />\n } @else {\n <i class=\"pi pi-question\"></i>\n }\n }\n `,\n})\nexport class IconComponent {\n icon = input.required<string>();\n iconType = input<IconTypeEnum | undefined>(IconTypeEnum.PRIMENG_ICON);\n protected readonly IconTypeEnum = IconTypeEnum; // Needed for template reference\n}\n","import { IPagination } from '../interfaces/filter-data.interface';\n\n/**\n * Configuration for scroll pagination behavior\n */\nexport interface ScrollPaginationConfig {\n /** Distance from bottom to trigger pagination (default: 50px) */\n threshold?: number;\n /** Current pagination state */\n pagination: IPagination;\n /** Total items available */\n total: number | undefined;\n /** Whether currently loading */\n isLoading: boolean;\n}\n\n/**\n * Check if scroll has reached near bottom and calculate next page if available.\n * Returns next pagination if should load more, null otherwise.\n *\n * @example\n * ```typescript\n * onScroll(event: Event): void {\n * const nextPagination = checkScrollPagination(event, {\n * pagination: this.pagination(),\n * total: this.total(),\n * isLoading: this.isLoading(),\n * });\n * if (nextPagination) {\n * this.onPagination.emit(nextPagination);\n * }\n * }\n * ```\n */\nexport function checkScrollPagination(\n event: Event,\n config: ScrollPaginationConfig,\n): IPagination | null {\n const el = event.target;\n if (!(el instanceof HTMLElement)) return null;\n\n const threshold = config.threshold ?? 50;\n const nearBottom = el.scrollTop + el.clientHeight >= el.scrollHeight - threshold;\n\n if (!nearBottom || config.isLoading) return null;\n\n const { pagination, total } = config;\n const nextPage = pagination.currentPage + 1;\n const hasMore = nextPage * pagination.pageSize < (total ?? 0);\n\n if (!hasMore) return null;\n\n return { ...pagination, currentPage: nextPage };\n}\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { CheckboxChangeEvent } from 'primeng/checkbox';\nimport { BaseFormControl, provideValueAccessor } from '../../classes/public-api';\nimport { IDropDown, IPagination } from '../../interfaces/public-api';\nimport { AngularModule, PrimeModule } from '../../modules/public-api';\nimport { checkScrollPagination } from '../../utils/scroll-pagination.util';\n\n/**\n * Lazy-loading multi-select component with search, pagination, and select-all.\n *\n * Supports ALL Angular form patterns:\n * - Template-driven: `[(value)]=\"selectedIds\"`\n * - Reactive forms: `[formControl]=\"ctrl\"` or `formControlName=\"field\"`\n * - Signal forms: `[formField]=\"formTree.field\"`\n */\n@Component({\n selector: 'lib-lazy-multi-select',\n imports: [PrimeModule, AngularModule],\n templateUrl: './lazy-multi-select.component.html',\n styleUrl: './lazy-multi-select.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [provideValueAccessor(LazyMultiSelectComponent)],\n})\nexport class LazyMultiSelectComponent extends BaseFormControl<string[] | null> {\n private readonly destroyRef = inject(DestroyRef);\n private readonly onDocumentClickBound = this.handleDocumentClick.bind(this);\n private isDestroyed = false;\n\n // View references\n readonly pSelectRef = viewChild.required<ElementRef<HTMLDivElement>>('pSelect');\n\n // Inputs\n readonly placeHolder = input<string>('Select Options');\n readonly isEditMode = input.required<boolean>();\n readonly isLoading = input.required<boolean>();\n readonly total = input.required<number | undefined>();\n readonly pagination = input.required<IPagination>();\n readonly selectDataList = input.required<Array<IDropDown>>();\n\n // Two-way bound value\n override readonly value = model<string[] | null>(null);\n\n // Outputs\n readonly onSearch = output<string>();\n readonly onPagination = output<IPagination>();\n\n // UI state\n readonly searchTerm = signal('');\n readonly openOptions = signal(false);\n\n // Computed values\n readonly selectedValueDisplay = computed(() => {\n const selectedValues = this.value() ?? [];\n if (selectedValues.length === 0) return '';\n if (selectedValues.length > 3) {\n return `${selectedValues.length} Items Selected`;\n }\n return this.selectDataList()\n .filter((item) => selectedValues.includes(item.value))\n .map((item) => item.label)\n .join(', ');\n });\n\n readonly isSelectAll = computed(() => {\n const selectedValues = this.value() ?? [];\n const allValues = this.selectDataList().map((item) => item.value);\n if (selectedValues.length === 0 || allValues.length === 0) return false;\n return allValues.every((val) => selectedValues.includes(val));\n });\n\n constructor() {\n super();\n this.initializeFormControl();\n\n // Search debounce using effect\n let debounceTimeout: ReturnType<typeof setTimeout> | null = null;\n let previousValue = this.searchTerm();\n\n effect((onCleanup) => {\n const currentValue = this.searchTerm();\n\n // Skip unchanged values\n if (currentValue === previousValue) return;\n previousValue = currentValue;\n\n // Clear existing timeout\n if (debounceTimeout) clearTimeout(debounceTimeout);\n\n // Debounced emit\n debounceTimeout = setTimeout(() => {\n this.onSearch.emit(currentValue);\n }, 500);\n\n onCleanup(() => {\n if (debounceTimeout) clearTimeout(debounceTimeout);\n });\n });\n\n // Document click listener for closing dropdown\n this.destroyRef.onDestroy(() => {\n this.isDestroyed = true;\n document.removeEventListener('click', this.onDocumentClickBound);\n });\n\n afterNextRender(() => {\n if (!this.isDestroyed) {\n document.addEventListener('click', this.onDocumentClickBound);\n }\n });\n }\n\n onScroll(event: Event): void {\n const nextPagination = checkScrollPagination(event, {\n pagination: this.pagination(),\n total: this.total(),\n isLoading: this.isLoading(),\n });\n if (nextPagination) {\n this.onPagination.emit(nextPagination);\n }\n }\n\n onSelectClick(event: Event): void {\n if (this.disabled()) return;\n this.pSelectRef()?.nativeElement.classList.add('p-focus');\n this.openOptions.update((isOpen) => !isOpen);\n }\n\n onOverlayClick(event: Event): void {\n event.stopPropagation();\n }\n\n private handleDocumentClick(event: MouseEvent): void {\n const clickedInside = this.pSelectRef()?.nativeElement.contains(event.target as Node);\n if (!clickedInside) {\n this.openOptions.set(false);\n this.pSelectRef()?.nativeElement.classList.remove('p-focus');\n this.markAsTouched();\n }\n }\n\n isSelected(data: IDropDown): boolean {\n return this.value()?.includes(data.value) ?? false;\n }\n\n key(option: IDropDown): string {\n return option.value;\n }\n\n selectValue(event: CheckboxChangeEvent, option: IDropDown): void {\n const previousValue = this.value() ?? [];\n if (event.checked) {\n if (!previousValue.includes(option.value)) {\n this.value.set([...previousValue, option.value]);\n }\n } else {\n this.value.set(previousValue.filter((v) => v !== option.value));\n }\n }\n\n changeSelectAll(event: CheckboxChangeEvent): void {\n if (event.checked) {\n this.value.set(this.selectDataList().map((item) => item.value));\n } else {\n this.value.set([]);\n }\n }\n\n clear(event: Event): void {\n event.stopPropagation();\n this.value.set([]);\n }\n}\n","<div class=\"p-select w-full\" #pSelect (click)=\"onSelectClick($event)\" [class.p-disabled]=\"disabled()\">\n @if (selectedValueDisplay()) {\n <span class=\"p-select-label\">{{ selectedValueDisplay() }}</span>\n } @else {\n <span class=\"p-select-label p-placeholder\">{{ placeHolder() }}</span>\n }\n\n <span class=\"p-select-clear-icon\" (click)=\"clear($event)\">\n <i class=\"pi pi-times\"></i>\n </span>\n\n <div class=\"p-select-dropdown\">\n <span class=\"p-select-dropdown-icon flex items-center\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\n class=\"p-multiselect-dropdown-icon p-icon\" aria-hidden=\"true\">\n <path d=\"M7.01744 10.398C6.91269 10.3985 6.8089 10.378 6.71215 10.3379C6.61541 10.2977 6.52766 10.2386 6.45405 10.1641L1.13907 4.84913C1.03306 4.69404 0.985221 4.5065 1.00399 4.31958C1.02276 4.13266 1.10693 3.95838 1.24166 3.82747C1.37639 3.69655 1.55301 3.61742 1.74039 3.60402C1.92777 3.59062 2.11386 3.64382 2.26584 3.75424L7.01744 8.47394L11.769 3.75424C11.9189 3.65709 12.097 3.61306 12.2748 3.62921C12.4527 3.64535 12.6199 3.72073 12.7498 3.84328C12.8797 3.96582 12.9647 4.12842 12.9912 4.30502C13.0177 4.48162 12.9841 4.662 12.8958 4.81724L7.58083 10.1322C7.50996 10.2125 7.42344 10.2775 7.32656 10.3232C7.22968 10.3689 7.12449 10.3944 7.01744 10.398Z\" fill=\"currentColor\" />\n </svg>\n </span>\n </div>\n\n @if (openOptions()) {\n <div class=\"p-select-overlay\" (click)=\"onOverlayClick($event)\">\n <div class=\"p-select-header flex flex-row gap-2 items-center\">\n <p-checkbox\n binary=\"true\"\n [ngModel]=\"isSelectAll()\"\n [disabled]=\"disabled()\"\n (onChange)=\"changeSelectAll($event)\"\n />\n <input\n type=\"text\"\n pInputText\n class=\"w-full\"\n placeholder=\"Search...\"\n [ngModel]=\"searchTerm()\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"searchTerm.set($event)\"\n />\n </div>\n <div class=\"p-select-list-container\" (scroll)=\"onScroll($event)\">\n <ul class=\"p-select-list\">\n @for (data of selectDataList(); track key(data)) {\n <li class=\"p-select-option flex flex-row gap-2 items-center\"\n [ngClass]=\"{ 'p-select-option-selected': isSelected(data) }\">\n <p-checkbox\n binary=\"true\"\n [ngModel]=\"isSelected(data)\"\n [disabled]=\"disabled()\"\n (onChange)=\"selectValue($event, data)\"\n />\n <span>{{ data.label }}</span>\n </li>\n }\n </ul>\n </div>\n </div>\n }\n</div>","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { BaseFormControl, provideValueAccessor } from '../../classes/public-api';\nimport { EditModeElementChangerDirective } from '../../directives/public-api';\nimport { IDropDown, IPagination } from '../../interfaces/public-api';\nimport { AngularModule, PrimeModule } from '../../modules/public-api';\nimport { checkScrollPagination } from '../../utils/scroll-pagination.util';\n\n/**\n * Lazy-loading single select component with search and pagination.\n *\n * Supports ALL Angular form patterns:\n * - Template-driven: `[(value)]=\"selectedId\"`\n * - Reactive forms: `[formControl]=\"ctrl\"` or `formControlName=\"field\"`\n * - Signal forms: `[formField]=\"formTree.field\"`\n */\n@Component({\n selector: 'lib-lazy-select',\n imports: [AngularModule, PrimeModule, EditModeElementChangerDirective],\n templateUrl: './lazy-select.component.html',\n styleUrl: './lazy-select.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [provideValueAccessor(LazySelectComponent)],\n})\nexport class LazySelectComponent extends BaseFormControl<string | null> {\n private readonly destroyRef = inject(DestroyRef);\n private readonly onScrollBound = this.onScroll.bind(this);\n private scrollTargetEl: HTMLElement | null = null;\n private isDestroyed = false;\n\n // View references\n readonly scrollContainer = viewChild.required<ElementRef<HTMLDivElement>>('scrollContainer');\n\n // Inputs\n readonly placeHolder = input<string>('Select Option');\n readonly optionLabel = input.required<string>();\n readonly optionValue = input.required<string>();\n readonly isEditMode = input.required<boolean>();\n readonly isLoading = input.required<boolean>();\n readonly total = input.required<number | undefined>();\n readonly pagination = input.required<IPagination>();\n readonly selectDataList = input.required<Array<IDropDown>>();\n\n // Two-way bound value\n override readonly value = model<string | null>(null);\n\n // Outputs\n readonly onSearch = output<string>();\n readonly onPagination = output<IPagination>();\n\n // UI state\n readonly searchTerm = signal('');\n readonly isPanelShow = signal(false);\n\n constructor() {\n super();\n this.initializeFormControl();\n\n // Search debounce using effect\n let debounceTimeout: ReturnType<typeof setTimeout> | null = null;\n let previousValue = this.searchTerm();\n\n effect((onCleanup) => {\n const currentValue = this.searchTerm();\n\n // Skip unchanged values\n if (currentValue === previousValue) return;\n previousValue = currentValue;\n\n // Clear existing timeout\n if (debounceTimeout) clearTimeout(debounceTimeout);\n\n // Debounced emit\n debounceTimeout = setTimeout(() => {\n this.onSearch.emit(currentValue);\n }, 500);\n\n onCleanup(() => {\n if (debounceTimeout) clearTimeout(debounceTimeout);\n });\n });\n\n // Cleanup scroll listener on destroy\n this.destroyRef.onDestroy(() => {\n this.isDestroyed = true;\n if (this.scrollTargetEl) {\n this.scrollTargetEl.removeEventListener('scroll', this.onScrollBound);\n }\n });\n }\n\n onScroll(event: Event): void {\n const nextPagination = checkScrollPagination(event, {\n pagination: this.pagination(),\n total: this.total(),\n isLoading: this.isLoading(),\n });\n if (nextPagination) {\n this.onPagination.emit(nextPagination);\n }\n }\n\n showPanel(): void {\n if (this.disabled()) return;\n this.isPanelShow.update((prev) => !prev);\n const isNowVisible = this.isPanelShow();\n\n if (isNowVisible) {\n afterNextRender(\n () => {\n if (this.isDestroyed) return;\n const containerEl = this.scrollContainer().nativeElement;\n const target = containerEl.querySelector<HTMLElement>('.p-select-list-container');\n if (target) {\n target.addEventListener('scroll', this.onScrollBound);\n this.scrollTargetEl = target;\n }\n },\n { injector: this.injector },\n );\n } else if (this.scrollTargetEl) {\n this.scrollTargetEl.removeEventListener('scroll', this.onScrollBound);\n this.scrollTargetEl = null;\n }\n }\n\n onBlur(): void {\n this.markAsTouched();\n }\n}\n","<div #scrollContainer class=\"lib-scroll-container\">\n <p-select\n class=\"w-full\"\n [options]=\"selectDataList()\"\n [optionLabel]=\"optionLabel()\"\n [optionValue]=\"optionValue()\"\n [filter]=\"true\"\n [showClear]=\"true\"\n [placeholder]=\"placeHolder()\"\n [disabled]=\"disabled()\"\n [(ngModel)]=\"value\"\n appEditModeElementChanger\n [isEditMode]=\"isEditMode()\"\n (click)=\"showPanel()\"\n (onBlur)=\"onBlur()\"\n >\n <ng-template #filter let-filter>\n <input\n pInputText\n class=\"w-full\"\n [ngModel]=\"searchTerm()\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"searchTerm.set($event)\"\n />\n </ng-template>\n <ng-template #selectedItem let-selectedOption>\n {{ selectedOption[optionLabel()] }}\n </ng-template>\n <ng-template #item let-item>\n {{ item[optionLabel()] }}\n </ng-template>\n </p-select>\n</div>\n","import { InjectionToken } from '@angular/core';\nimport {\n IAuthStateProvider,\n ICompanyApiProvider,\n IProfilePermissionProvider,\n IProfileUploadProvider,\n IUserListItem,\n IUserListProvider,\n IUserPermissionProvider,\n IUserProvider,\n} from '../interfaces/providers.interface';\n\n/**\n * Injection Tokens for Provider Interfaces\n *\n * These tokens enable dependency injection of provider implementations\n * without creating direct package dependencies.\n *\n * Pattern:\n * 1. ng-shared defines interfaces and tokens (no implementation)\n * 2. ng-auth provides implementations\n * 3. ng-iam and ng-storage inject via tokens\n * 4. app.config.ts wires everything together\n *\n * @example\n * // In IAM component\n * private readonly userProvider = inject(USER_PROVIDER);\n *\n * // In app.config.ts\n * providers: [\n * { provide: USER_PROVIDER, useClass: AuthUserProvider },\n * ]\n */\n\n/**\n * User Provider Token\n *\n * Provides user data access for IAM user selection.\n */\nexport const USER_PROVIDER = new InjectionToken<IUserProvider>(\n 'USER_PROVIDER',\n {\n providedIn: 'root',\n factory: () => {\n throw new Error(\n 'USER_PROVIDER not configured. Please provide an implementation in app.config.ts',\n );\n },\n },\n);\n\n/**\n * Company API Provider Token\n *\n * Provides company data access for IAM company selection.\n */\nexport const COMPANY_API_PROVIDER = new InjectionToken<ICompanyApiProvider>(\n 'COMPANY_API_PROVIDER',\n {\n providedIn: 'root',\n factory: () => {\n throw new Error(\n 'COMPANY_API_PROVIDER not configured. Please provide an implementation in app.config.ts',\n );\n },\n },\n);\n\n/**\n * User Permission Provider Token\n *\n * Provides user permission assignment operations for IAM.\n */\nexport const USER_PERMISSION_PROVIDER =\n new InjectionToken<IUserPermissionProvider>('USER_PERMISSION_PROVIDER', {\n providedIn: 'root',\n factory: () => {\n throw new Error(\n 'USER_PERMISSION_PROVIDER not configured. Please provide an implementation in app.config.ts',\n );\n },\n });\n\n/**\n * Auth State Provider Token\n *\n * Provides auth state access for feature packages (form-builder, etc.)\n */\nexport const AUTH_STATE_PROVIDER =\n new InjectionToken<IAuthStateProvider>('AUTH_STATE_PROVIDER', {\n providedIn: 'root',\n factory: () => {\n throw new Error(\n 'AUTH_STATE_PROVIDER not configured. Please provide an implementation in app.config.ts',\n );\n },\n });\n\n/**\n * Profile Permission Provider Token\n *\n * Provides user permission data for profile display.\n * Optional - if not configured, profile permissions section is hidden.\n * Use with `inject(PROFILE_PERMISSION_PROVIDER, { optional: true })`.\n */\nexport const PROFILE_PERMISSION_PROVIDER =\n new InjectionToken<IProfilePermissionProvider>('PROFILE_PERMISSION_PROVIDER');\n\n/**\n * Profile Upload Provider Token\n *\n * Provides file upload functionality for profile pictures.\n * Optional - if not configured or storage not enabled, upload section is hidden.\n * Use with `inject(PROFILE_UPLOAD_PROVIDER, { optional: true })`.\n */\nexport const PROFILE_UPLOAD_PROVIDER =\n new InjectionToken<IProfileUploadProvider>('PROFILE_UPLOAD_PROVIDER');\n\n/**\n * User List Provider Token\n *\n * Provides extra actions, columns, and data enrichment for user list.\n * Optional - if not configured, default user list behavior is used.\n * Use with `inject(USER_LIST_PROVIDER, { optional: true })`.\n *\n * @example\n * // In app.config.ts\n * providers: [\n * { provide: USER_LIST_PROVIDER, useClass: MyUserListProvider },\n * ]\n */\nexport const USER_LIST_PROVIDER =\n new InjectionToken<IUserListProvider<IUserListItem>>('USER_LIST_PROVIDER');\n","import {\n afterNextRender,\n computed,\n DestroyRef,\n Directive,\n effect,\n inject,\n Injector,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { firstValueFrom, map } from 'rxjs';\nimport { IDropDown } from '../../interfaces/common-data.interface';\nimport { IPagination } from '../../interfaces/filter-data.interface';\nimport {\n IUserBasicInfo,\n IUserProvider,\n IUserSelectFilter,\n LoadUsersFn,\n} from '../../interfaces/providers.interface';\nimport { USER_PROVIDER } from '../../tokens/provider.tokens';\n\nconst DEFAULT_PAGE_SIZE = 20;\n\n/**\n * Base class for user selection components.\n * Provides shared user loading, pagination, and search functionality.\n *\n * Subclasses must implement:\n * - `setupValueEffect()` to track value changes and emit selection events\n */\n@Directive()\nexport abstract class BaseUserSelectComponent {\n protected readonly destroyRef = inject(DestroyRef);\n protected readonly injector = inject(Injector);\n protected readonly userProvider = inject<IUserProvider>(USER_PROVIDER);\n protected abortController: AbortController | null = null;\n\n // Inputs\n readonly loadUsers = input<LoadUsersFn>();\n readonly placeHolder = input<string>('Select User');\n readonly isEditMode = input.required<boolean>();\n readonly filterActive = input<boolean>(true);\n readonly additionalFilters = input<Record<string, unknown>>({});\n readonly pageSize = input<number>(DEFAULT_PAGE_SIZE);\n\n // Outputs\n readonly onError = output<Error>();\n\n // Internal state\n readonly isLoading = signal(false);\n readonly users = signal<IUserBasicInfo[]>([]);\n readonly total = signal<number | undefined>(undefined);\n readonly pagination = signal<IPagination>({ pageSize: DEFAULT_PAGE_SIZE, currentPage: 0 });\n readonly searchTerm = signal('');\n\n // Computed dropdown data\n readonly dropdownUsers = computed<IDropDown[]>(() =>\n this.users().map((user) => ({\n label: user.name || user.email,\n value: user.id,\n }))\n );\n\n constructor() {\n // Cleanup on destroy\n this.destroyRef.onDestroy(() => {\n this.abortController?.abort();\n });\n\n // Update page size from input\n effect(() => {\n const size = this.pageSize();\n untracked(() => {\n this.pagination.update((p) => ({ ...p, pageSize: size }));\n });\n });\n\n // Load initial users after render\n afterNextRender(() => {\n this.fetchUsers();\n });\n\n // Setup value change tracking (implemented by subclass)\n this.setupValueEffect();\n }\n\n /** Setup effect to track value changes and emit selection events */\n protected abstract setupValueEffect(): void;\n\n handleSearch(search: string): void {\n this.searchTerm.set(search);\n this.pagination.update((p) => ({ ...p, currentPage: 0 }));\n this.users.set([]);\n this.fetchUsers();\n }\n\n handlePagination(pagination: IPagination): void {\n this.pagination.set(pagination);\n this.fetchUsers(true);\n }\n\n /** Reload users (useful when filters change externally) */\n reload(): void {\n this.pagination.update((p) => ({ ...p, currentPage: 0 }));\n this.users.set([]);\n this.fetchUsers();\n }\n\n protected async fetchUsers(append = false): Promise<void> {\n if (this.isLoading()) return;\n\n // Cancel previous request\n this.abortController?.abort();\n this.abortController = new AbortController();\n\n this.isLoading.set(true);\n try {\n const pag = this.pagination();\n const filter: IUserSelectFilter = {\n page: pag.currentPage,\n pageSize: pag.pageSize,\n search: this.searchTerm(),\n ...this.additionalFilters(),\n };\n\n // Use custom loadUsers if provided, otherwise use USER_PROVIDER\n const customLoadUsers = this.loadUsers();\n const response = await firstValueFrom(\n customLoadUsers\n ? customLoadUsers(filter)\n : this.loadUsersFromProvider(filter)\n );\n\n if (response.success && response.data) {\n if (append) {\n this.users.update((current) => [...current, ...response.data!]);\n } else {\n this.users.set(response.data);\n }\n this.total.set(response.meta?.total);\n }\n } catch (error) {\n if ((error as Error).name !== 'AbortError') {\n this.onError.emit(error as Error);\n }\n } finally {\n this.isLoading.set(false);\n }\n }\n\n /** Load users from USER_PROVIDER with active filter */\n private loadUsersFromProvider(filter: IUserSelectFilter) {\n return this.userProvider\n .getUsers({\n page: filter.page,\n pageSize: filter.pageSize,\n search: filter.search,\n isActive: this.filterActive() ? true : undefined,\n })\n .pipe(\n map((res) => ({\n ...res,\n data: res.data?.map((u) => ({\n id: u.id,\n name: u.name,\n email: u.email,\n })),\n }))\n );\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n effect,\n model,\n output,\n untracked,\n} from '@angular/core';\nimport { AngularModule } from '../../modules/angular.module';\nimport { PrimeModule } from '../../modules/prime.module';\nimport { LazySelectComponent } from '../lazy-select/lazy-select.component';\nimport { IUserBasicInfo } from '../../interfaces/providers.interface';\nimport { BaseUserSelectComponent } from './base-user-select.class';\n\n/**\n * User Select Component - Single user selection with lazy loading.\n *\n * Uses USER_PROVIDER internally by default, or accepts custom `loadUsers` function.\n *\n * Features:\n * - Search with debouncing (handled by lazy-select)\n * - Infinite scroll pagination\n * - Filter active users by default (configurable)\n * - Supports additional filters via `additionalFilters` input\n *\n * @example\n * ```html\n * <!-- Simple usage - uses USER_PROVIDER internally -->\n * <lib-user-select\n * [(value)]=\"selectedUserId\"\n * [isEditMode]=\"true\"\n * />\n *\n * <!-- With custom loadUsers function -->\n * <lib-user-select\n * [(value)]=\"selectedUserId\"\n * [isEditMode]=\"true\"\n * [loadUsers]=\"customLoadUsers\"\n * />\n * ```\n */\n@Component({\n selector: 'lib-user-select',\n imports: [AngularModule, PrimeModule, LazySelectComponent],\n template: `\n <lib-lazy-select\n [(value)]=\"value\"\n [placeHolder]=\"placeHolder()\"\n [optionLabel]=\"'label'\"\n [optionValue]=\"'value'\"\n [isEditMode]=\"isEditMode()\"\n [isLoading]=\"isLoading()\"\n [total]=\"total()\"\n [pagination]=\"pagination()\"\n [selectDataList]=\"dropdownUsers()\"\n (onSearch)=\"handleSearch($event)\"\n (onPagination)=\"handlePagination($event)\"\n />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UserSelectComponent extends BaseUserSelectComponent {\n // Two-way bound value\n readonly value = model<string | null>(null);\n\n // Outputs\n readonly userSelected = output<IUserBasicInfo | null>();\n\n protected override setupValueEffect(): void {\n // Emit selected user when value changes\n effect(() => {\n const selectedId = this.value();\n const users = this.users();\n untracked(() => {\n if (selectedId) {\n const user = users.find((u) => u.id === selectedId);\n this.userSelected.emit(user ?? null);\n } else {\n this.userSelected.emit(null);\n }\n });\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n effect,\n model,\n output,\n untracked,\n} from '@angular/core';\nimport { AngularModule } from '../../modules/angular.module';\nimport { PrimeModule } from '../../modules/prime.module';\nimport { LazyMultiSelectComponent } from '../lazy-multi-select/lazy-multi-select.component';\nimport { IUserBasicInfo } from '../../interfaces/providers.interface';\nimport { BaseUserSelectComponent } from '../user-select/base-user-select.class';\n\n/**\n * User Multi-Select Component - Multiple user selection with lazy loading.\n *\n * Uses USER_PROVIDER internally by default, or accepts custom `loadUsers` function.\n *\n * Features:\n * - Search with debouncing (handled by lazy-multi-select)\n * - Infinite scroll pagination\n * - Select all / deselect all\n * - Filter active users by default (configurable)\n * - Supports additional filters via `additionalFilters` input\n *\n * @example\n * ```html\n * <!-- Simple usage - uses USER_PROVIDER internally -->\n * <lib-user-multi-select\n * [(value)]=\"selectedUserIds\"\n * [isEditMode]=\"true\"\n * />\n *\n * <!-- With custom loadUsers function -->\n * <lib-user-multi-select\n * [(value)]=\"selectedUserIds\"\n * [isEditMode]=\"true\"\n * [loadUsers]=\"customLoadUsers\"\n * />\n * ```\n */\n@Component({\n selector: 'lib-user-multi-select',\n imports: [AngularModule, PrimeModule, LazyMultiSelectComponent],\n template: `\n <lib-lazy-multi-select\n [(value)]=\"value\"\n [placeHolder]=\"placeHolder()\"\n [isEditMode]=\"isEditMode()\"\n [isLoading]=\"isLoading()\"\n [total]=\"total()\"\n [pagination]=\"pagination()\"\n [selectDataList]=\"dropdownUsers()\"\n (onSearch)=\"handleSearch($event)\"\n (onPagination)=\"handlePagination($event)\"\n />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UserMultiSelectComponent extends BaseUserSelectComponent {\n // Two-way bound value\n readonly value = model<string[] | null>(null);\n\n // Outputs\n readonly usersSelected = output<IUserBasicInfo[]>();\n\n protected override setupValueEffect(): void {\n // Emit selected users when value changes\n effect(() => {\n const selectedIds = this.value() ?? [];\n const users = this.users();\n untracked(() => {\n const selectedUsers = users.filter((u) => selectedIds.includes(u.id));\n this.usersSelected.emit(selectedUsers);\n });\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { MessageService } from 'primeng/api';\nimport {\n FILE_TYPE_FILTERS,\n getAcceptString,\n getFileIconClass,\n IFileUploadOptions,\n isFileTypeAllowed,\n IUploadedFile,\n UploadFileFn,\n} from '../../interfaces/file-select.interface';\nimport { AngularModule, PrimeModule } from '../../modules/public-api';\n\n/**\n * File Uploader Component - Drag & drop file upload with type filtering.\n *\n * Pass your own `uploadFile` function - works with any storage API.\n */\n@Component({\n selector: 'lib-file-uploader',\n imports: [AngularModule, PrimeModule],\n template: `\n <div\n class=\"w-full\"\n [class.opacity-60]=\"disabled()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <!-- Upload Area - Responsive padding -->\n <div\n class=\"upload-zone border-2 border-dashed rounded-lg p-4 sm:p-6 md:p-8 cursor-pointer transition-all duration-200 text-center\"\n [class.drag-over]=\"isDragOver()\"\n [class.cursor-not-allowed]=\"disabled()\"\n (click)=\"fileInput.click()\"\n >\n @if (isUploading()) {\n <div class=\"flex flex-col items-center\">\n <i class=\"pi pi-spin pi-spinner text-3xl sm:text-4xl text-primary\"></i>\n <p class=\"mt-2 text-sm sm:text-base break-all px-2\">Uploading {{ uploadingFileName() }}...</p>\n @if (uploadProgress() > 0) {\n <p-progressBar [value]=\"uploadProgress()\" [showValue]=\"true\" class=\"w-full mt-2 max-w-xs\" />\n }\n </div>\n } @else {\n <div class=\"flex flex-col items-center\">\n <i class=\"pi pi-cloud-upload text-3xl sm:text-4xl text-primary\"></i>\n <p class=\"mt-2 mb-1 font-semibold text-sm sm:text-base\">\n {{ multiple() ? 'Drop files here or click to upload' : 'Drop file here or click to upload' }}\n </p>\n <p class=\"text-xs sm:text-sm text-color-secondary px-2\">\n @if (acceptTypesDisplay()) {\n Allowed: {{ acceptTypesDisplay() }}\n } @else {\n All file types allowed\n }\n @if (maxSizeMb()) {\n <span class=\"whitespace-nowrap\">(Max {{ maxSizeMb() }}MB)</span>\n }\n </p>\n </div>\n }\n </div>\n\n <!-- Hidden File Input -->\n <input\n #fileInput\n type=\"file\"\n class=\"hidden\"\n [accept]=\"acceptString()\"\n [multiple]=\"multiple()\"\n [disabled]=\"disabled() || isUploading()\"\n (change)=\"onFileSelected($event)\"\n />\n\n <!-- Selected Files Preview - Responsive layout -->\n @if (selectedFiles().length > 0 && showPreview()) {\n <div class=\"mt-3 space-y-2\">\n @for (file of selectedFiles(); track file.name) {\n <div class=\"file-preview-item flex items-center gap-2 p-2 sm:p-3 rounded-lg\">\n <i [class]=\"getFileIcon(file)\" class=\"text-lg sm:text-xl flex-shrink-0\"></i>\n <span class=\"flex-1 truncate text-sm sm:text-base min-w-0\">{{ file.name }}</span>\n <span class=\"text-xs sm:text-sm text-color-secondary whitespace-nowrap\">{{ formatSize(file.size) }}</span>\n <p-button\n icon=\"pi pi-times\"\n [text]=\"true\"\n [rounded]=\"true\"\n size=\"small\"\n severity=\"secondary\"\n [disabled]=\"isUploading()\"\n (onClick)=\"removeFile(file)\"\n />\n </div>\n }\n </div>\n }\n </div>\n `,\n styles: [`\n /* Upload zone - light mode */\n .upload-zone {\n border-color: var(--p-surface-300);\n background: var(--p-surface-50);\n }\n\n .upload-zone:hover:not(.cursor-not-allowed) {\n border-color: var(--p-primary-color);\n background: var(--p-surface-100);\n }\n\n .upload-zone.drag-over {\n border-color: var(--p-primary-color);\n background: var(--p-primary-50);\n }\n\n /* Upload zone - dark mode */\n :host-context(.p-dark) .upload-zone,\n .dark .upload-zone {\n border-color: var(--p-surface-600);\n background: var(--p-surface-800);\n }\n\n :host-context(.p-dark) .upload-zone:hover:not(.cursor-not-allowed),\n .dark .upload-zone:hover:not(.cursor-not-allowed) {\n border-color: var(--p-primary-color);\n background: var(--p-surface-700);\n }\n\n :host-context(.p-dark) .upload-zone.drag-over,\n .dark .upload-zone.drag-over {\n border-color: var(--p-primary-color);\n background: var(--p-primary-900);\n }\n\n /* File preview item */\n .file-preview-item {\n border: 1px solid var(--p-surface-200);\n background: var(--p-surface-0);\n }\n\n :host-context(.p-dark) .file-preview-item,\n .dark .file-preview-item {\n border-color: var(--p-surface-600);\n background: var(--p-surface-800);\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FileUploaderComponent {\n private readonly messageService = inject(MessageService);\n\n // Required: function to upload file\n readonly uploadFile = input.required<UploadFileFn>();\n\n // Inputs\n readonly acceptTypes = input<string[]>([]);\n readonly multiple = input<boolean>(false);\n readonly maxFiles = input<number>(10);\n readonly maxSizeMb = input<number>(10);\n readonly uploadOptions = input<IFileUploadOptions>({});\n readonly disabled = input<boolean>(false);\n readonly showPreview = input<boolean>(true);\n readonly autoUpload = input<boolean>(true);\n\n // Outputs\n readonly fileUploaded = output<IUploadedFile>();\n readonly filesUploaded = output<IUploadedFile[]>();\n readonly onError = output<Error>();\n readonly fileSelected = output<File[]>();\n\n // Internal state\n readonly isUploading = signal(false);\n readonly isDragOver = signal(false);\n readonly uploadProgress = signal(0);\n readonly uploadingFileName = signal('');\n readonly selectedFiles = signal<File[]>([]);\n\n // Computed\n readonly acceptString = computed(() => getAcceptString(this.acceptTypes()));\n readonly acceptTypesDisplay = computed(() => {\n const types = this.acceptTypes();\n if (!types.length) return '';\n\n // Check if types match predefined filters\n const typesStr = JSON.stringify(types);\n if (typesStr === JSON.stringify(FILE_TYPE_FILTERS.IMAGES)) return 'Images';\n if (typesStr === JSON.stringify(FILE_TYPE_FILTERS.DOCUMENTS)) return 'Documents';\n if (typesStr === JSON.stringify(FILE_TYPE_FILTERS.VIDEOS)) return 'Videos';\n if (typesStr === JSON.stringify(FILE_TYPE_FILTERS.AUDIO)) return 'Audio';\n\n return types.map(t => t.split('/')[1] || t).join(', ');\n });\n\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.disabled() && !this.isUploading()) {\n this.isDragOver.set(true);\n }\n }\n\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(false);\n }\n\n onDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(false);\n\n if (this.disabled() || this.isUploading()) return;\n\n const files = event.dataTransfer?.files;\n if (files?.length) {\n this.handleFiles(Array.from(files));\n }\n }\n\n onFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n const files = input.files;\n if (files?.length) {\n this.handleFiles(Array.from(files));\n }\n // Reset input to allow selecting same file again\n input.value = '';\n }\n\n private handleFiles(files: File[]): void {\n // Filter by type\n const allowedTypes = this.acceptTypes();\n const validFiles = files.filter(file => {\n if (!isFileTypeAllowed(file, allowedTypes)) {\n this.messageService.add({\n severity: 'warn',\n summary: 'Invalid File Type',\n detail: `File type not allowed: ${file.name}`,\n });\n return false;\n }\n return true;\n });\n\n // Filter by size\n const maxSize = this.maxSizeMb() * 1024 * 1024;\n const sizeValidFiles = validFiles.filter(file => {\n if (file.size > maxSize) {\n this.messageService.add({\n severity: 'warn',\n summary: 'File Too Large',\n detail: `${file.name} exceeds ${this.maxSizeMb()}MB limit`,\n });\n return false;\n }\n return true;\n });\n\n // Limit number of files\n const limitedFiles = this.multiple()\n ? sizeValidFiles.slice(0, this.maxFiles())\n : sizeValidFiles.slice(0, 1);\n\n if (!limitedFiles.length) return;\n\n this.selectedFiles.set(limitedFiles);\n this.fileSelected.emit(limitedFiles);\n\n if (this.autoUpload()) {\n this.uploadFiles(limitedFiles);\n }\n }\n\n removeFile(file: File): void {\n this.selectedFiles.update(files => files.filter(f => f !== file));\n }\n\n async uploadFiles(files?: File[]): Promise<void> {\n const filesToUpload = files ?? this.selectedFiles();\n if (!filesToUpload.length || this.isUploading()) return;\n\n this.isUploading.set(true);\n\n const uploadedFiles: IUploadedFile[] = [];\n\n try {\n for (const file of filesToUpload) {\n this.uploadingFileName.set(file.name);\n this.uploadProgress.set(0);\n\n const response = await firstValueFrom(\n this.uploadFile()(file, this.uploadOptions())\n );\n\n if (response.success && response.data) {\n uploadedFiles.push(response.data);\n this.fileUploaded.emit(response.data);\n } else {\n throw new Error(response.message || 'Upload failed');\n }\n }\n\n this.filesUploaded.emit(uploadedFiles);\n this.selectedFiles.set([]);\n\n this.messageService.add({\n severity: 'success',\n summary: 'Upload Complete',\n detail: `${uploadedFiles.length} file(s) uploaded successfully`,\n });\n } catch (error) {\n // Error toast handled by global interceptor\n this.onError.emit(error as Error);\n } finally {\n this.isUploading.set(false);\n this.uploadingFileName.set('');\n this.uploadProgress.set(0);\n }\n }\n\n getFileIcon(file: File): string {\n return getFileIconClass(file.type);\n }\n\n formatSize(bytes: number): string {\n const kb = bytes / 1024;\n if (kb < 1024) return `${kb.toFixed(1)} KB`;\n const mb = kb / 1024;\n return `${mb.toFixed(1)} MB`;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport {\n formatFileSize,\n getAcceptString,\n getFileIconClass,\n IFileBasicInfo,\n IFileSelectFilter,\n LoadFilesFn,\n} from '../../interfaces/file-select.interface';\nimport { IPagination } from '../../interfaces/filter-data.interface';\nimport { AngularModule, PrimeModule } from '../../modules/public-api';\nimport { checkScrollPagination } from '../../utils/scroll-pagination.util';\n\nconst DEFAULT_PAGE_SIZE = 20;\n\n/**\n * File Selector Dialog - Browse and select existing files with filtering.\n *\n * Pass your own `loadFiles` function - works with any storage API.\n *\n * Features:\n * - Search with debouncing\n * - File type filtering\n * - Infinite scroll pagination\n * - Single or multiple selection\n * - File preview with icons\n *\n * @example\n * ```typescript\n * // In component\n * readonly fileService = inject(FileManagerApiService);\n *\n * readonly loadFiles: LoadFilesFn = (filter) =>\n * this.fileService.getAll(filter.search, {\n * pagination: { currentPage: filter.page, pageSize: filter.pageSize },\n * filter: { contentTypes: filter.contentTypes },\n * }).pipe(\n * map(res => ({\n * ...res,\n * data: res.data?.map(f => ({\n * id: f.id,\n * name: f.name,\n * contentType: f.contentType,\n * size: f.size,\n * url: f.url\n * }))\n * }))\n * );\n * ```\n *\n * ```html\n * <lib-file-selector-dialog\n * [(visible)]=\"showFileSelector\"\n * [loadFiles]=\"loadFiles\"\n * [acceptTypes]=\"['image/*']\"\n * [multiple]=\"false\"\n * (fileSelected)=\"onFileSelected($event)\"\n * />\n * ```\n */\n@Component({\n selector: 'lib-file-selector-dialog',\n imports: [AngularModule, PrimeModule],\n template: `\n <p-dialog\n [header]=\"header()\"\n [(visible)]=\"visible\"\n [modal]=\"true\"\n [closable]=\"true\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [breakpoints]=\"{ '960px': '90vw', '640px': '95vw' }\"\n [style]=\"{ width: '800px', maxWidth: '95vw', maxHeight: '90vh' }\"\n styleClass=\"file-selector-dialog\"\n (onHide)=\"onDialogHide()\"\n >\n <!-- Search Bar -->\n <div class=\"flex flex-col sm:flex-row gap-2 mb-3\">\n <span class=\"p-input-icon-left flex-1\">\n <i class=\"pi pi-search\"></i>\n <input\n pInputText\n type=\"text\"\n [ngModel]=\"searchTerm()\"\n (ngModelChange)=\"onSearchChange($event)\"\n placeholder=\"Search files...\"\n class=\"w-full\"\n />\n </span>\n @if (multiple()) {\n <span class=\"text-sm text-color-secondary self-center whitespace-nowrap\">\n {{ selectedFiles().length }} selected\n </span>\n }\n </div>\n\n <!-- File Grid - Responsive columns -->\n <div\n class=\"file-grid\"\n #scrollContainer\n (scroll)=\"onScroll($event)\"\n >\n @if (isLoading() && files().length === 0) {\n <div class=\"col-span-full flex justify-center p-4\">\n <i class=\"pi pi-spin pi-spinner text-4xl text-color-secondary\"></i>\n </div>\n } @else if (files().length === 0) {\n <div class=\"col-span-full text-center p-4 text-color-secondary\">\n <i class=\"pi pi-inbox text-4xl mb-2 block\"></i>\n <p>No files found</p>\n </div>\n } @else {\n @for (file of files(); track file.id) {\n <div\n class=\"file-card\"\n [class.selected]=\"isSelected(file)\"\n [class.disabled]=\"!isFileAllowed(file)\"\n (click)=\"toggleSelection(file)\"\n >\n <!-- File Preview -->\n <div class=\"file-preview\">\n @if (isImage(file) && file.url) {\n <img [src]=\"file.url\" [alt]=\"file.name\" class=\"w-full h-full object-cover\" />\n } @else {\n <i [class]=\"getFileIcon(file)\" class=\"text-4xl sm:text-5xl text-color-secondary\"></i>\n }\n @if (isSelected(file)) {\n <div class=\"selected-overlay\">\n <i class=\"pi pi-check text-xl sm:text-2xl\"></i>\n </div>\n }\n </div>\n\n <!-- File Info -->\n <div class=\"p-2 text-center bg-surface-0 dark:bg-surface-900\">\n <span class=\"block text-xs sm:text-sm whitespace-nowrap overflow-hidden text-ellipsis\" [title]=\"file.name\">\n {{ file.name }}\n </span>\n <span class=\"block text-xs text-color-secondary\">{{ formatSize(file.size) }}</span>\n </div>\n </div>\n }\n\n @if (isLoading()) {\n <div class=\"col-span-full flex justify-center p-2\">\n <i class=\"pi pi-spin pi-spinner text-color-secondary\"></i>\n </div>\n }\n }\n </div>\n\n <!-- Footer -->\n <ng-template #footer>\n <div class=\"flex flex-col-reverse sm:flex-row gap-2 w-full sm:w-auto sm:justify-end\">\n <button\n pButton\n label=\"Cancel\"\n class=\"p-button-text w-full sm:w-auto\"\n (click)=\"onCancel()\"\n ></button>\n <button\n pButton\n [label]=\"multiple() ? 'Select (' + selectedFiles().length + ')' : 'Select'\"\n [disabled]=\"selectedFiles().length === 0\"\n class=\"w-full sm:w-auto\"\n (click)=\"onConfirm()\"\n ></button>\n </div>\n </ng-template>\n </p-dialog>\n `,\n styles: [`\n /* Responsive file grid */\n .file-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 0.75rem;\n max-height: 300px;\n overflow-y: auto;\n padding: 0.5rem;\n }\n\n @media (min-width: 480px) {\n .file-grid {\n grid-template-columns: repeat(3, 1fr);\n max-height: 350px;\n }\n }\n\n @media (min-width: 640px) {\n .file-grid {\n grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n gap: 1rem;\n max-height: 400px;\n }\n }\n\n /* File card styles */\n .file-card {\n border: 2px solid var(--p-surface-300);\n border-radius: var(--p-border-radius);\n cursor: pointer;\n transition: all 0.2s ease;\n overflow: hidden;\n background: var(--p-surface-0);\n }\n\n :host-context(.p-dark) .file-card,\n .dark .file-card {\n border-color: var(--p-surface-600);\n background: var(--p-surface-800);\n }\n\n .file-card:hover:not(.disabled) {\n border-color: var(--p-primary-color);\n transform: translateY(-2px);\n box-shadow: var(--p-overlay-shadow);\n }\n\n .file-card.selected {\n border-color: var(--p-primary-color);\n background: var(--p-primary-50);\n }\n\n :host-context(.p-dark) .file-card.selected,\n .dark .file-card.selected {\n background: var(--p-primary-900);\n }\n\n .file-card.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* File preview area */\n .file-preview {\n position: relative;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--p-surface-100);\n }\n\n @media (min-width: 640px) {\n .file-preview {\n height: 100px;\n }\n }\n\n :host-context(.p-dark) .file-preview,\n .dark .file-preview {\n background: var(--p-surface-700);\n }\n\n /* Selected overlay */\n .selected-overlay {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(var(--p-primary-500-rgb, 59, 130, 246), 0.3);\n }\n\n .selected-overlay i {\n color: var(--p-primary-color);\n background: var(--p-surface-0);\n border-radius: 50%;\n padding: 0.5rem;\n }\n\n :host-context(.p-dark) .selected-overlay i,\n .dark .selected-overlay i {\n background: var(--p-surface-900);\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FileSelectorDialogComponent {\n private readonly destroyRef = inject(DestroyRef);\n private abortController: AbortController | null = null;\n private searchDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n // Required: function to load files\n readonly loadFiles = input.required<LoadFilesFn>();\n\n // Inputs\n readonly header = input<string>('Select File');\n readonly acceptTypes = input<string[]>([]);\n readonly multiple = input<boolean>(false);\n readonly maxSelection = input<number>(10);\n readonly pageSize = input<number>(DEFAULT_PAGE_SIZE);\n\n // Two-way visibility binding\n readonly visible = model<boolean>(false);\n\n // Outputs\n readonly fileSelected = output<IFileBasicInfo>();\n readonly filesSelected = output<IFileBasicInfo[]>();\n readonly closed = output<void>();\n readonly onError = output<Error>();\n\n // Internal state\n readonly isLoading = signal(false);\n readonly files = signal<IFileBasicInfo[]>([]);\n readonly selectedFiles = signal<IFileBasicInfo[]>([]);\n readonly total = signal<number | undefined>(undefined);\n readonly pagination = signal<IPagination>({ pageSize: DEFAULT_PAGE_SIZE, currentPage: 0 });\n readonly searchTerm = signal('');\n\n // Computed\n readonly acceptString = computed(() => getAcceptString(this.acceptTypes()));\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.abortController?.abort();\n if (this.searchDebounceTimer) {\n clearTimeout(this.searchDebounceTimer);\n }\n });\n\n // Load files when dialog becomes visible\n effect(() => {\n const isVisible = this.visible();\n if (isVisible) {\n untracked(() => {\n this.resetState();\n this.fetchFiles();\n });\n }\n });\n\n // Update page size from input\n effect(() => {\n const size = this.pageSize();\n untracked(() => {\n this.pagination.update((p) => ({ ...p, pageSize: size }));\n });\n });\n }\n\n onSearchChange(value: string): void {\n // Debounce search\n if (this.searchDebounceTimer) {\n clearTimeout(this.searchDebounceTimer);\n }\n\n this.searchDebounceTimer = setTimeout(() => {\n this.searchTerm.set(value);\n this.pagination.update((p) => ({ ...p, currentPage: 0 }));\n this.files.set([]);\n this.fetchFiles();\n }, 500);\n }\n\n onScroll(event: Event): void {\n const nextPagination = checkScrollPagination(event, {\n pagination: this.pagination(),\n total: this.total(),\n isLoading: this.isLoading(),\n });\n if (nextPagination) {\n this.pagination.set(nextPagination);\n this.fetchFiles(true);\n }\n }\n\n toggleSelection(file: IFileBasicInfo): void {\n if (!this.isFileAllowed(file)) return;\n\n if (this.multiple()) {\n const selected = this.selectedFiles();\n const isSelected = selected.some((f) => f.id === file.id);\n\n if (isSelected) {\n this.selectedFiles.update((files) => files.filter((f) => f.id !== file.id));\n } else if (selected.length < this.maxSelection()) {\n this.selectedFiles.update((files) => [...files, file]);\n }\n } else {\n this.selectedFiles.set([file]);\n }\n }\n\n isSelected(file: IFileBasicInfo): boolean {\n return this.selectedFiles().some((f) => f.id === file.id);\n }\n\n isFileAllowed(file: IFileBasicInfo): boolean {\n const allowedTypes = this.acceptTypes();\n if (!allowedTypes.length) return true;\n\n return allowedTypes.some((type) => {\n if (type.endsWith('/*')) {\n return file.contentType.startsWith(type.replace('/*', '/'));\n }\n return file.contentType === type;\n });\n }\n\n isImage(file: IFileBasicInfo): boolean {\n return file.contentType.startsWith('image/') && !!file.url;\n }\n\n getFileIcon(file: IFileBasicInfo): string {\n return getFileIconClass(file.contentType);\n }\n\n formatSize(size: string): string {\n return formatFileSize(size);\n }\n\n onCancel(): void {\n this.visible.set(false);\n }\n\n onConfirm(): void {\n const selected = this.selectedFiles();\n if (selected.length === 0) return;\n\n if (this.multiple()) {\n this.filesSelected.emit(selected);\n } else {\n this.fileSelected.emit(selected[0]);\n }\n\n this.visible.set(false);\n }\n\n onDialogHide(): void {\n this.closed.emit();\n }\n\n private resetState(): void {\n this.files.set([]);\n this.selectedFiles.set([]);\n this.searchTerm.set('');\n this.pagination.set({ pageSize: this.pageSize(), currentPage: 0 });\n this.total.set(undefined);\n }\n\n private async fetchFiles(append = false): Promise<void> {\n if (this.isLoading()) return;\n\n this.abortController?.abort();\n this.abortController = new AbortController();\n\n this.isLoading.set(true);\n try {\n const pag = this.pagination();\n const filter: IFileSelectFilter = {\n page: pag.currentPage,\n pageSize: pag.pageSize,\n search: this.searchTerm(),\n contentTypes: this.acceptTypes().length ? this.acceptTypes() : undefined,\n };\n\n const response = await firstValueFrom(this.loadFiles()(filter));\n\n if (response.success && response.data) {\n if (append) {\n this.files.update((current) => [...current, ...response.data!]);\n } else {\n this.files.set(response.data);\n }\n this.total.set(response.meta?.total);\n }\n } catch (error) {\n if ((error as Error).name !== 'AbortError') {\n this.onError.emit(error as Error);\n }\n } finally {\n this.isLoading.set(false);\n }\n }\n}\n","import { inject, isDevMode } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { ILogicNode } from '../interfaces/common-data.interface';\nimport { PermissionValidatorService } from '../services/permission-validator.service';\nimport {\n evaluatePermission,\n hasAllPermissions,\n hasAnyPermission,\n} from '../utils/permission-evaluator.util';\n\ntype EvaluateFn = (userPermissions: string[]) => boolean;\n\nfunction createGuard(\n guardName: string,\n redirectTo: string,\n evaluate: EvaluateFn,\n getDenialMessage: () => string,\n): CanActivateFn {\n return () => {\n const permissionValidator = inject(PermissionValidatorService);\n const router = inject(Router);\n\n if (!permissionValidator.isPermissionsLoaded()) {\n if (isDevMode()) {\n console.log(`[${guardName}] Permissions not loaded, denying access`);\n }\n return router.createUrlTree([redirectTo]);\n }\n\n if (!evaluate(permissionValidator.permissions())) {\n if (isDevMode()) {\n console.log(`[${guardName}] ${getDenialMessage()}`);\n }\n return router.createUrlTree([redirectTo]);\n }\n\n return true;\n };\n}\n\n/**\n * Permission Guard - Single permission or ILogicNode check.\n *\n * @example\n * ```typescript\n * { path: 'users', canActivate: [permissionGuard('user.view')] }\n * { path: 'admin', canActivate: [permissionGuard(logicNode, '/access-denied')] }\n * ```\n */\nexport function permissionGuard(\n permission: string | ILogicNode,\n redirectTo = '/',\n): CanActivateFn {\n const code = typeof permission === 'string' ? permission : 'complex-logic';\n return createGuard(\n 'permissionGuard',\n redirectTo,\n (perms) => evaluatePermission(permission, perms),\n () => `Access denied - missing: ${code}`,\n );\n}\n\n/**\n * Any Permission Guard (OR logic) - Access if user has ANY permission.\n *\n * @example\n * ```typescript\n * { path: 'users', canActivate: [anyPermissionGuard(['user.view', 'user.create'])] }\n * ```\n */\nexport function anyPermissionGuard(\n permissions: string[],\n redirectTo = '/',\n): CanActivateFn {\n if (!permissions?.length) {\n return () => {\n if (isDevMode()) {\n console.log('[anyPermissionGuard] Empty permissions array, denying');\n }\n return inject(Router).createUrlTree([redirectTo]);\n };\n }\n return createGuard(\n 'anyPermissionGuard',\n redirectTo,\n (perms) => hasAnyPermission(permissions, perms),\n () => `Access denied - missing any of: ${permissions.join(', ')}`,\n );\n}\n\n/**\n * All Permissions Guard (AND logic) - Access only if user has ALL permissions.\n *\n * @example\n * ```typescript\n * { path: 'admin', canActivate: [allPermissionsGuard(['admin.view', 'admin.manage'])] }\n * ```\n */\nexport function allPermissionsGuard(\n permissions: string[],\n redirectTo = '/',\n): CanActivateFn {\n if (!permissions?.length) {\n return () => {\n if (isDevMode()) {\n console.log('[allPermissionsGuard] Empty permissions array, denying');\n }\n return inject(Router).createUrlTree([redirectTo]);\n };\n }\n return createGuard(\n 'allPermissionsGuard',\n redirectTo,\n (perms) => hasAllPermissions(permissions, perms),\n () => `Access denied - missing all of: ${permissions.join(', ')}`,\n );\n}\n","import {\n computed,\n DestroyRef,\n Directive,\n effect,\n inject,\n signal,\n Signal,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { MessageService } from 'primeng/api';\nimport { Observable } from 'rxjs';\n\n/**\n * Base class for form page components that handle create/edit operations.\n * Provides common functionality for loading existing items, form submission,\n * navigation, and toast notifications.\n *\n * ## Features\n * - Automatic route parameter handling (loads item when ID is present)\n * - Edit mode detection based on existing item\n * - Unified submit handler for create/update operations\n * - Cancel navigation\n * - Toast messages for success/validation errors\n *\n * ## Usage\n *\n * ```typescript\n * interface IProductFormModel {\n * name: string;\n * price: number;\n * }\n *\n * @Component({\n * selector: 'app-product-form',\n * standalone: true,\n * changeDetection: ChangeDetectionStrategy.OnPush,\n * template: `...`\n * })\n * export class ProductFormComponent extends BaseFormPage<IProduct, IProductFormModel> {\n * private readonly productService = inject(ProductApiService);\n *\n * // Form model signal (private writable, public readonly)\n * private readonly _formModel = signal<IProductFormModel>({ name: '', price: 0 });\n * readonly formModel = this._formModel.asReadonly();\n *\n * // Required abstract implementations\n * getFormModel(): Signal<IProductFormModel> {\n * return this.formModel;\n * }\n *\n * getResourceRoute(): string {\n * return '/products';\n * }\n *\n * getResourceName(): string {\n * return 'Product';\n * }\n *\n * isFormValid(): boolean {\n * const model = this.formModel();\n * return model.name.trim().length > 0 && model.price > 0;\n * }\n *\n * loadItem(id: string): void {\n * this.isLoading.set(true);\n * this.productService.findById(id)\n * .pipe(takeUntilDestroyed(this.destroyRef))\n * .subscribe({\n * next: (response) => {\n * if (response.success && response.data) {\n * this.existingItem.set(response.data);\n * this._formModel.set({\n * name: response.data.name,\n * price: response.data.price,\n * });\n * }\n * this.isLoading.set(false);\n * },\n * error: () => {\n * this.router.navigate([this.getResourceRoute()]);\n * this.isLoading.set(false);\n * },\n * });\n * }\n *\n * createItem(model: IProductFormModel): Observable<ISingleResponse<IProduct>> {\n * return this.productService.insert(model);\n * }\n *\n * updateItem(model: IProductFormModel): Observable<ISingleResponse<IProduct>> {\n * return this.productService.update({ id: this.existingItem()!.id, ...model });\n * }\n * }\n * ```\n *\n * @template T The entity/interface type being edited\n * @template TFormModel The form model interface\n */\n@Directive()\nexport abstract class BaseFormPage<T, TFormModel> {\n protected readonly router = inject(Router);\n protected readonly route = inject(ActivatedRoute);\n protected readonly messageService = inject(MessageService);\n protected readonly destroyRef = inject(DestroyRef);\n\n protected readonly routeParams = toSignal(this.route.paramMap);\n protected initialized = false;\n\n /** Loading state for async operations */\n readonly isLoading = signal(false);\n\n /** The existing item when in edit mode, null when creating */\n readonly existingItem = signal<T | null>(null);\n\n /** Whether the form is in edit mode (has existing item) */\n readonly isEditMode = computed(() => !!this.existingItem());\n\n /**\n * Get the form model signal.\n * Returns a readonly Signal - implementations should expose their\n * WritableSignal as readonly through this method.\n */\n abstract getFormModel(): Signal<TFormModel>;\n\n /**\n * Get the base route for the resource (used for navigation after save/cancel).\n * @example '/products' or '/administration/users'\n */\n abstract getResourceRoute(): string;\n\n /**\n * Get the display name of the resource for toast messages.\n * @example 'Product' or 'User'\n */\n abstract getResourceName(): string;\n\n /**\n * Validate the current form model.\n * Return true if the form is valid and can be submitted.\n */\n abstract isFormValid(): boolean;\n\n /**\n * Load an existing item by ID.\n * Should set existingItem and populate formModel on success.\n * Should handle loading state and navigation on error.\n */\n abstract loadItem(id: string): void;\n\n /**\n * Create a new item with the given form model.\n * Return an Observable that emits the API response.\n */\n abstract createItem(model: TFormModel): Observable<unknown>;\n\n /**\n * Update an existing item with the given form model.\n * Return an Observable that emits the API response.\n */\n abstract updateItem(model: TFormModel): Observable<unknown>;\n\n constructor() {\n effect(() => {\n const params = this.routeParams();\n if (!params || this.initialized) return;\n\n this.initialized = true;\n const id = params.get('id');\n if (id && id !== 'new') {\n this.loadItem(id);\n }\n });\n }\n\n /**\n * Handle form submission.\n * Validates the form, then calls createItem or updateItem based on mode.\n * Shows appropriate toast messages and navigates back on success.\n */\n onSubmit(): void {\n if (!this.isFormValid()) {\n this.showValidationError();\n return;\n }\n\n this.isLoading.set(true);\n const model = this.getFormModel()();\n\n const operation$ = this.isEditMode()\n ? this.updateItem(model)\n : this.createItem(model);\n\n operation$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe({\n next: () => {\n const action = this.isEditMode() ? 'updated' : 'created';\n this.showSuccess(`${this.getResourceName()} ${action} successfully.`);\n this.router.navigate([this.getResourceRoute()]);\n },\n error: () => {\n this.isLoading.set(false);\n },\n complete: () => {\n this.isLoading.set(false);\n },\n });\n }\n\n /**\n * Handle cancel action.\n * Navigates back to the resource list.\n */\n onCancel(): void {\n this.router.navigate([this.getResourceRoute()]);\n }\n\n /**\n * Show validation error toast.\n * Override to customize the validation error message.\n */\n protected showValidationError(): void {\n this.messageService.add({\n severity: 'error',\n summary: 'Validation Error',\n detail: 'Please fill in all required fields.',\n });\n }\n\n /**\n * Show success toast.\n * @param detail The success message to display\n */\n protected showSuccess(detail: string): void {\n this.messageService.add({\n severity: 'success',\n summary: 'Success',\n detail,\n });\n }\n\n /**\n * Show error toast.\n * @param detail The error message to display\n */\n protected showError(detail: string): void {\n this.messageService.add({\n severity: 'error',\n summary: 'Error',\n detail,\n });\n }\n}\n","import { computed, DestroyRef, Directive, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Router } from '@angular/router';\nimport { APP_CONFIG } from '@flusys/ng-core';\nimport { ConfirmationService, MessageService } from 'primeng/api';\nimport { Observable } from 'rxjs';\n\n/**\n * Base List Page\n * Abstract directive providing common signals, computed values, and utilities\n * for list page components across all feature packages.\n *\n * Features:\n * - Pagination state management (pageSize, currentPage, total)\n * - Loading state\n * - CRUD navigation helpers\n * - Message display utilities\n * - Delete confirmation with API integration\n * - Company feature flag support\n *\n * Usage:\n * ```typescript\n * @Component({ ... })\n * export class UserListComponent extends BaseListPage<IUser> {\n * getResourceRoute(): string { return '/users'; }\n * getDeleteConfirmMessage(user: IUser): string { return `Delete \"${user.name}\"?`; }\n * async loadData(): Promise<void> { ... }\n * }\n * ```\n */\n@Directive()\nexport abstract class BaseListPage<T> {\n protected readonly router = inject(Router);\n protected readonly messageService = inject(MessageService);\n protected readonly appConfig = inject(APP_CONFIG);\n protected readonly confirmationService = inject(ConfirmationService);\n protected readonly destroyRef = inject(DestroyRef);\n\n /** Items list */\n readonly items = signal<T[]>([]);\n\n /** Loading state */\n readonly isLoading = signal(false);\n\n /** Total records for pagination */\n readonly total = signal(0);\n\n /** Page size */\n readonly pageSize = signal(10);\n\n /** First record index (for p-table lazy load) */\n readonly first = signal(0);\n\n /** Current page (0-based for API, derived from first/pageSize) */\n readonly currentPage = computed(() => Math.floor(this.first() / this.pageSize()));\n\n /** Show company info if company feature enabled */\n readonly showCompanyInfo = computed(() => this.appConfig.enableCompanyFeature);\n\n /**\n * Abstract method to load data - must be implemented by subclass\n */\n abstract loadData(): Promise<void>;\n\n /**\n * Get the base route for this resource\n * Used for navigation to create/edit pages\n * @example '/administration/users' or '/storage/folders'\n */\n abstract getResourceRoute(): string;\n\n /**\n * Get the confirmation message for deleting an item\n * @param item The item to delete\n * @returns Confirmation message string\n */\n abstract getDeleteConfirmMessage(item: T): string;\n\n /**\n * Navigate to create page\n */\n onCreate(): void {\n this.router.navigate([this.getResourceRoute(), 'new']);\n }\n\n /**\n * Navigate to edit page\n * @param id The ID of the item to edit\n */\n onEdit(id: string): void {\n this.router.navigate([this.getResourceRoute(), id]);\n }\n\n /**\n * Handle page change from p-table lazy load\n */\n onPageChange(event: { first?: number | null; rows?: number | null }): void {\n this.first.set(event.first ?? 0);\n this.pageSize.set(event.rows ?? 10);\n this.loadData();\n }\n\n /**\n * Get pagination params for API call\n * Returns 0-based page for backend API\n */\n protected getPaginationParams(): { currentPage: number; pageSize: number } {\n return {\n currentPage: this.currentPage(),\n pageSize: this.pageSize(),\n };\n }\n\n /**\n * Show success toast message\n */\n protected showSuccess(detail: string, summary = 'Success'): void {\n this.messageService.add({ severity: 'success', summary, detail });\n }\n\n /**\n * Show error toast message\n */\n protected showError(detail: string, summary = 'Error'): void {\n this.messageService.add({ severity: 'error', summary, detail });\n }\n\n /**\n * Show info toast message\n */\n protected showInfo(detail: string, summary = 'Info'): void {\n this.messageService.add({ severity: 'info', summary, detail });\n }\n\n /**\n * Show warning toast message\n */\n protected showWarn(detail: string, summary = 'Warning'): void {\n this.messageService.add({ severity: 'warn', summary, detail });\n }\n\n /**\n * Delete an item with confirmation dialog\n * @param item The item to delete\n * @param idGetter Function to extract ID from item\n * @param deleteApiCall Function that returns Observable for delete API call\n * @param options Optional configuration\n */\n onDelete(\n item: T,\n idGetter: (item: T) => string,\n deleteApiCall: (id: string) => Observable<unknown>,\n options?: {\n header?: string;\n successMessage?: string;\n errorMessage?: string;\n },\n ): void {\n this.confirmationService.confirm({\n message: this.getDeleteConfirmMessage(item),\n header: options?.header ?? 'Confirm Delete',\n icon: 'pi pi-exclamation-triangle',\n acceptButtonStyleClass: 'p-button-danger',\n accept: () => {\n deleteApiCall(idGetter(item))\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: () => {\n this.showSuccess(options?.successMessage ?? 'Item deleted successfully.');\n this.loadData();\n },\n error: () => {\n this.showError(options?.errorMessage ?? 'Failed to delete item.');\n },\n });\n },\n });\n }\n\n /**\n * Delete an item with confirmation dialog using async/await\n * @param item The item to delete\n * @param idGetter Function to extract ID from item\n * @param deleteApiCall Async function for delete API call\n * @param options Optional configuration\n */\n async onDeleteAsync(\n item: T,\n idGetter: (item: T) => string,\n deleteApiCall: (id: string) => Promise<unknown>,\n options?: {\n header?: string;\n successMessage?: string;\n errorMessage?: string;\n },\n ): Promise<void> {\n this.confirmationService.confirm({\n message: this.getDeleteConfirmMessage(item),\n header: options?.header ?? 'Confirm Delete',\n icon: 'pi pi-exclamation-triangle',\n acceptButtonStyleClass: 'p-button-danger',\n accept: async () => {\n try {\n await deleteApiCall(idGetter(item));\n this.showSuccess(options?.successMessage ?? 'Item deleted successfully.');\n await this.loadData();\n } catch {\n this.showError(options?.errorMessage ?? 'Failed to delete item.');\n }\n },\n });\n }\n\n /**\n * Navigate to a route\n */\n protected navigateTo(path: string[]): void {\n this.router.navigate(path);\n }\n}\n","// Constants\nexport * from './constants/permissions';\n\n// Interfaces (consolidated)\nexport * from './interfaces/common-data.interface';\nexport * from './interfaces/filter-data.interface';\nexport * from './interfaces/response-payload.interface';\nexport * from './interfaces/file-select.interface';\nexport * from './interfaces/providers.interface';\n\n// Enums\nexport * from './enums/contact-type.enum';\nexport * from './enums/icon-type.enum';\n\n// Services\nexport * from './services/cookie.service';\nexport * from './services/file-url.service';\nexport * from './services/permission-validator.service';\nexport * from './services/platform.service';\n\n// Directives\nexport * from './directives/edit-mode-element-changer.directive';\nexport * from './directives/has-permission.directive';\nexport * from './directives/is-empty-image.directive';\nexport * from './directives/prevent-default.directive';\n\n// Modules\nexport * from './modules/angular.module';\nexport * from './modules/prime.module';\n\n// Classes\nexport * from './classes/api-resource.class';\nexport * from './classes/base-form-control.class';\n\n// Components\nexport * from './components/icon/icon.component';\nexport * from './components/lazy-multi-select/lazy-multi-select.component';\nexport * from './components/lazy-select/lazy-select.component';\nexport * from './components/user-select/base-user-select.class';\nexport * from './components/user-select/user-select.component';\nexport * from './components/user-multi-select/user-multi-select.component';\nexport * from './components/file-uploader/file-uploader.component';\nexport * from './components/file-selector-dialog/file-selector-dialog.component';\n\n// Tokens\nexport * from './tokens/provider.tokens';\n\n// Guards\nexport * from './guards/index';\n\n// Utils\nexport * from './utils/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.IsEmptyImageDirective","i4","i1","DEFAULT_PAGE_SIZE","map","i2","i3","i5"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"flusys-ng-shared.mjs","sources":["../../../projects/ng-shared/constants/permissions.ts","../../../projects/ng-shared/constants/messages.ts","../../../projects/ng-shared/interfaces/file-select.interface.ts","../../../projects/ng-shared/enums/contact-type.enum.ts","../../../projects/ng-shared/enums/icon-type.enum.ts","../../../projects/ng-shared/services/platform.service.ts","../../../projects/ng-shared/services/cookie.service.ts","../../../projects/ng-shared/services/file-url.service.ts","../../../projects/ng-shared/utils/permission-evaluator.util.ts","../../../projects/ng-shared/services/permission-validator.service.ts","../../../projects/ng-shared/directives/edit-mode-element-changer.directive.ts","../../../projects/ng-shared/directives/has-permission.directive.ts","../../../projects/ng-shared/directives/is-empty-image.directive.ts","../../../projects/ng-shared/directives/prevent-default.directive.ts","../../../projects/ng-shared/pipes/translate.pipe.ts","../../../projects/ng-shared/resolvers/translation-module.resolver.ts","../../../projects/ng-shared/providers/fallback-localization.providers.ts","../../../projects/ng-shared/modules/angular.module.ts","../../../projects/ng-shared/modules/prime.module.ts","../../../projects/ng-shared/classes/api-resource.class.ts","../../../projects/ng-shared/classes/base-form-control.class.ts","../../../projects/ng-shared/components/icon/icon.component.ts","../../../projects/ng-shared/utils/scroll-pagination.util.ts","../../../projects/ng-shared/components/lazy-multi-select/lazy-multi-select.component.ts","../../../projects/ng-shared/components/lazy-multi-select/lazy-multi-select.component.html","../../../projects/ng-shared/components/lazy-select/lazy-select.component.ts","../../../projects/ng-shared/components/lazy-select/lazy-select.component.html","../../../projects/ng-shared/tokens/provider.tokens.ts","../../../projects/ng-shared/components/user-select/base-user-select.class.ts","../../../projects/ng-shared/components/user-select/user-select.component.ts","../../../projects/ng-shared/components/user-multi-select/user-multi-select.component.ts","../../../projects/ng-shared/components/file-uploader/file-uploader.component.ts","../../../projects/ng-shared/components/file-selector-dialog/file-selector-dialog.component.ts","../../../projects/ng-shared/guards/permission.guard.ts","../../../projects/ng-shared/utils/base-form-page.ts","../../../projects/ng-shared/utils/base-list-page.ts","../../../projects/ng-shared/public-api.ts","../../../projects/ng-shared/flusys-ng-shared.ts"],"sourcesContent":["export const USER_PERMISSIONS = {\n CREATE: 'user.create',\n READ: 'user.read',\n UPDATE: 'user.update',\n DELETE: 'user.delete',\n} as const;\n\nexport const COMPANY_PERMISSIONS = {\n CREATE: 'company.create',\n READ: 'company.read',\n UPDATE: 'company.update',\n DELETE: 'company.delete',\n} as const;\n\nexport const BRANCH_PERMISSIONS = {\n CREATE: 'branch.create',\n READ: 'branch.read',\n UPDATE: 'branch.update',\n DELETE: 'branch.delete',\n} as const;\n\nexport const ACTION_PERMISSIONS = {\n CREATE: 'action.create',\n READ: 'action.read',\n UPDATE: 'action.update',\n DELETE: 'action.delete',\n} as const;\n\nexport const ROLE_PERMISSIONS = {\n CREATE: 'role.create',\n READ: 'role.read',\n UPDATE: 'role.update',\n DELETE: 'role.delete',\n} as const;\n\nexport const ROLE_ACTION_PERMISSIONS = {\n READ: 'role-action.read',\n ASSIGN: 'role-action.assign',\n} as const;\n\nexport const USER_ROLE_PERMISSIONS = {\n READ: 'user-role.read',\n ASSIGN: 'user-role.assign',\n} as const;\n\nexport const USER_ACTION_PERMISSIONS = {\n READ: 'user-action.read',\n ASSIGN: 'user-action.assign',\n} as const;\n\nexport const COMPANY_ACTION_PERMISSIONS = {\n READ: 'company-action.read',\n ASSIGN: 'company-action.assign',\n} as const;\n\nexport const FILE_PERMISSIONS = {\n CREATE: 'file.create',\n READ: 'file.read',\n UPDATE: 'file.update',\n DELETE: 'file.delete',\n} as const;\n\nexport const FOLDER_PERMISSIONS = {\n CREATE: 'folder.create',\n READ: 'folder.read',\n UPDATE: 'folder.update',\n DELETE: 'folder.delete',\n} as const;\n\nexport const STORAGE_CONFIG_PERMISSIONS = {\n CREATE: 'storage-config.create',\n READ: 'storage-config.read',\n UPDATE: 'storage-config.update',\n DELETE: 'storage-config.delete',\n} as const;\n\nexport const EMAIL_CONFIG_PERMISSIONS = {\n CREATE: 'email-config.create',\n READ: 'email-config.read',\n UPDATE: 'email-config.update',\n DELETE: 'email-config.delete',\n} as const;\n\nexport const EMAIL_TEMPLATE_PERMISSIONS = {\n CREATE: 'email-template.create',\n READ: 'email-template.read',\n UPDATE: 'email-template.update',\n DELETE: 'email-template.delete',\n} as const;\n\nexport const FORM_PERMISSIONS = {\n CREATE: 'form.create',\n READ: 'form.read',\n UPDATE: 'form.update',\n DELETE: 'form.delete',\n} as const;\n\nexport const EVENT_PERMISSIONS = {\n CREATE: 'event.create',\n READ: 'event.read',\n UPDATE: 'event.update',\n DELETE: 'event.delete',\n} as const;\n\nexport const EVENT_PARTICIPANT_PERMISSIONS = {\n CREATE: 'event-participant.create',\n READ: 'event-participant.read',\n UPDATE: 'event-participant.update',\n DELETE: 'event-participant.delete',\n} as const;\n\nexport const NOTIFICATION_PERMISSIONS = {\n CREATE: 'notification.create',\n READ: 'notification.read',\n UPDATE: 'notification.update',\n DELETE: 'notification.delete',\n} as const;\n\nexport const LANGUAGE_PERMISSIONS = {\n CREATE: 'language.create',\n READ: 'language.read',\n UPDATE: 'language.update',\n DELETE: 'language.delete',\n} as const;\n\nexport const TRANSLATION_KEY_PERMISSIONS = {\n CREATE: 'translation-key.create',\n READ: 'translation-key.read',\n UPDATE: 'translation-key.update',\n DELETE: 'translation-key.delete',\n} as const;\n\nexport const TRANSLATION_PERMISSIONS = {\n CREATE: 'translation.create',\n READ: 'translation.read',\n UPDATE: 'translation.update',\n DELETE: 'translation.delete',\n} as const;\n\nexport const PERMISSIONS = {\n USER: USER_PERMISSIONS,\n COMPANY: COMPANY_PERMISSIONS,\n BRANCH: BRANCH_PERMISSIONS,\n ACTION: ACTION_PERMISSIONS,\n ROLE: ROLE_PERMISSIONS,\n ROLE_ACTION: ROLE_ACTION_PERMISSIONS,\n USER_ROLE: USER_ROLE_PERMISSIONS,\n USER_ACTION: USER_ACTION_PERMISSIONS,\n COMPANY_ACTION: COMPANY_ACTION_PERMISSIONS,\n FILE: FILE_PERMISSIONS,\n FOLDER: FOLDER_PERMISSIONS,\n STORAGE_CONFIG: STORAGE_CONFIG_PERMISSIONS,\n EMAIL_CONFIG: EMAIL_CONFIG_PERMISSIONS,\n EMAIL_TEMPLATE: EMAIL_TEMPLATE_PERMISSIONS,\n FORM: FORM_PERMISSIONS,\n EVENT: EVENT_PERMISSIONS,\n EVENT_PARTICIPANT: EVENT_PARTICIPANT_PERMISSIONS,\n NOTIFICATION: NOTIFICATION_PERMISSIONS,\n LANGUAGE: LANGUAGE_PERMISSIONS,\n TRANSLATION_KEY: TRANSLATION_KEY_PERMISSIONS,\n TRANSLATION: TRANSLATION_PERMISSIONS,\n} as const;\n\nexport type PermissionCode =\n (typeof PERMISSIONS)[keyof typeof PERMISSIONS][keyof (typeof PERMISSIONS)[keyof typeof PERMISSIONS]];\n","export const SHARED_MESSAGES: Record<string, string> = {\n // Common actions\n 'shared.save': 'Save',\n 'shared.cancel': 'Cancel',\n 'shared.delete': 'Delete',\n 'shared.edit': 'Edit',\n 'shared.create': 'Create',\n 'shared.update': 'Update',\n 'shared.add': 'Add',\n 'shared.remove': 'Remove',\n 'shared.close': 'Close',\n 'shared.confirm': 'Confirm',\n 'shared.back': 'Back',\n 'shared.next': 'Next',\n 'shared.previous': 'Previous',\n 'shared.submit': 'Submit',\n 'shared.reset': 'Reset',\n 'shared.clear': 'Clear',\n 'shared.search': 'Search',\n 'shared.filter': 'Filter',\n 'shared.refresh': 'Refresh',\n 'shared.export': 'Export',\n 'shared.import': 'Import',\n 'shared.download': 'Download',\n 'shared.upload': 'Upload',\n 'shared.view': 'View',\n 'shared.details': 'Details',\n 'shared.actions': 'Actions',\n 'shared.options': 'Options',\n 'shared.settings': 'Settings',\n 'shared.yes': 'Yes',\n 'shared.no': 'No',\n 'shared.continue': 'Continue',\n 'shared.view.details': 'View Details',\n\n // Common labels\n 'shared.name': 'Name',\n 'shared.description': 'Description',\n 'shared.status': 'Status',\n 'shared.active': 'Active',\n 'shared.inactive': 'Inactive',\n 'shared.enabled': 'Enabled',\n 'shared.disabled': 'Disabled',\n 'shared.verified': 'Verified',\n 'shared.unverified': 'Unverified',\n 'shared.read.only': 'Read Only',\n 'shared.assigned': 'Assigned',\n 'shared.not.assigned': 'Not Assigned',\n 'shared.unknown': 'Unknown',\n 'shared.na': 'N/A',\n 'shared.no.company': 'No Company',\n 'shared.company': 'Company',\n 'shared.no.branch': 'No Branch',\n 'shared.display.order': 'Display Order',\n 'shared.display.order.placeholder': 'Enter display order',\n 'shared.created.at': 'Created At',\n 'shared.updated.at': 'Updated At',\n 'shared.created.by': 'Created By',\n 'shared.updated.by': 'Updated By',\n 'shared.date': 'Date',\n 'shared.time': 'Time',\n 'shared.email': 'Email',\n 'shared.phone': 'Phone',\n 'shared.address': 'Address',\n 'shared.type': 'Type',\n 'shared.category': 'Category',\n 'shared.code': 'Code',\n 'shared.serial': 'Serial',\n 'shared.order': 'Order',\n 'shared.priority': 'Priority',\n 'shared.notes': 'Notes',\n 'shared.comments': 'Comments',\n\n // Toast summaries\n 'shared.info': 'Info',\n 'shared.warning': 'Warning',\n 'shared.confirm.delete.header': 'Confirm Delete',\n\n // Status messages\n 'shared.loading': 'Loading...',\n 'shared.saving': 'Saving...',\n 'shared.deleting': 'Deleting...',\n 'shared.processing': 'Processing...',\n 'shared.please.wait': 'Please wait...',\n\n // Success messages\n 'shared.success': 'Success',\n 'shared.operation.success': 'Operation completed successfully',\n 'shared.save.success': 'Saved successfully',\n 'shared.delete.success': 'Deleted successfully',\n 'shared.update.success': 'Updated successfully',\n 'shared.create.success': 'Created successfully',\n\n // Error messages\n 'shared.error': 'Error',\n 'shared.operation.failed': 'Operation failed',\n 'shared.save.failed': 'Failed to save',\n 'shared.delete.failed': 'Failed to delete',\n 'shared.update.failed': 'Failed to update',\n 'shared.create.failed': 'Failed to create',\n 'shared.load.failed': 'Failed to load data',\n 'shared.unexpected.error': 'An unexpected error occurred',\n 'shared.network.error': 'Network error. Please check your connection.',\n 'shared.server.error': 'Server error. Please try again later.',\n\n // Validation messages\n 'shared.required': 'This field is required',\n 'shared.invalid.email': 'Please enter a valid email address',\n 'shared.invalid.phone': 'Please enter a valid phone number',\n 'shared.min.length': 'Minimum {{min}} characters required',\n 'shared.max.length': 'Maximum {{max}} characters allowed',\n 'shared.min.value': 'Minimum value is {{min}}',\n 'shared.max.value': 'Maximum value is {{max}}',\n 'shared.invalid.format': 'Invalid format',\n 'shared.password.mismatch': 'Passwords do not match',\n\n // Confirmation messages\n 'shared.confirm.delete': 'Are you sure you want to delete this item?',\n 'shared.confirm.delete.item': 'Are you sure you want to delete \"{{name}}\"?',\n 'shared.confirm.delete.multiple': 'Are you sure you want to delete {{count}} items?',\n 'shared.confirm.cancel': 'Are you sure you want to cancel? Unsaved changes will be lost.',\n 'shared.confirm.action': 'Are you sure you want to proceed?',\n 'shared.unsaved.changes': 'You have unsaved changes.',\n\n // Empty states\n 'shared.no.data': 'No data available',\n 'shared.no.results': 'No results found',\n 'shared.empty.list': 'The list is empty',\n 'shared.no.items.selected': 'No items selected',\n\n // Pagination\n 'shared.showing': 'Showing',\n 'shared.of': 'of',\n 'shared.items': 'items',\n 'shared.page': 'Page',\n 'shared.rows.per.page': 'Rows per page',\n 'shared.first': 'First',\n 'shared.last': 'Last',\n\n // CRUD operation messages (used by createApiController)\n 'item.create.success': 'Item created successfully',\n 'item.create.many.success': '{{count}} items created successfully',\n 'item.get.success': 'Item retrieved successfully',\n 'item.get.all.success': 'Items retrieved successfully',\n 'item.update.success': 'Item updated successfully',\n 'item.update.many.success': '{{count}} items updated successfully',\n 'item.delete.success': '{{count}} item(s) deleted successfully',\n 'item.restore.success': '{{count}} item(s) restored successfully',\n\n // HTTP error messages (for error interceptor)\n 'shared.error.bad.request': 'Bad Request',\n 'shared.error.not.found': 'Not Found',\n 'shared.error.conflict': 'Conflict',\n 'shared.error.validation.error': 'Validation Error',\n 'shared.error.server.error': 'Server Error',\n 'shared.error.service.unavailable': 'Service Unavailable',\n\n // Validation\n 'shared.validation.error': 'Validation Error',\n 'shared.fill.all.fields': 'Please fill in all required fields correctly.',\n 'shared.fill.required.fields': 'Please fill in all required fields',\n 'shared.name.required': 'Name is required',\n 'shared.email.required': 'Email is required',\n 'shared.select.all': 'Select All',\n 'shared.deselect.all': 'Deselect All',\n 'shared.save.changes': 'Save Changes',\n 'shared.validation.required': '{{field}} is required',\n 'shared.validation.email': 'Please enter a valid email address',\n 'shared.validation.min.length': '{{field}} must be at least {{min}} characters',\n 'shared.validation.max.length': '{{field}} must be at most {{max}} characters',\n 'shared.validation.min': '{{field}} must be at least {{min}}',\n 'shared.validation.max': '{{field}} must be at most {{max}}',\n 'shared.validation.pattern': '{{field}} format is invalid',\n 'shared.password.required': 'Password is required',\n 'shared.confirm.password.required': 'Please confirm your password',\n 'shared.min.characters': 'Min. {{count}} characters',\n 'shared.select': 'Select...',\n 'shared.select.option': 'Select an option',\n 'shared.placeholder.current.password': 'Enter current password',\n 'shared.placeholder.new.password': 'Enter new password',\n 'shared.placeholder.confirm.password': 'Confirm new password',\n\n // File uploader\n 'shared.upload.drop.multiple': 'Drop files here or click to upload',\n 'shared.upload.drop.single': 'Drop file here or click to upload',\n 'shared.upload.allowed.types': 'Allowed:',\n 'shared.upload.all.types.allowed': 'All file types allowed',\n 'shared.upload.uploading': 'Uploading {{fileName}}...',\n 'shared.upload.max.size': '(Max {{size}}MB)',\n 'shared.upload.invalid.type': 'Invalid File Type',\n 'shared.upload.file.too.large': 'File Too Large',\n 'shared.upload.complete': 'Upload Complete',\n 'shared.upload.files': 'files',\n 'shared.upload.files.uploaded': '{{count}} file(s) uploaded successfully',\n 'shared.upload.failed': 'Upload failed',\n 'shared.upload.provider.not.configured': 'File upload not configured. Add {{provider}} to your app config.',\n\n // File type categories\n 'shared.file.type.images': 'Images',\n 'shared.file.type.documents': 'Documents',\n 'shared.file.type.videos': 'Videos',\n 'shared.file.type.audio': 'Audio',\n\n // Size units\n 'shared.units.kb': 'KB',\n 'shared.units.mb': 'MB',\n 'shared.units.gb': 'GB',\n 'shared.units.tb': 'TB',\n 'shared.units.bytes': 'Bytes',\n\n // File selector\n 'shared.file.selector.search.placeholder': 'Search files...',\n 'shared.file.selector.no.files': 'No files found',\n 'shared.file.selector.selected': '{{count}} selected',\n 'shared.file.selector.select.multiple': 'Select ({{count}})',\n 'shared.file.selector.select': 'Select',\n 'shared.file.selector.default.header': 'Select File',\n 'shared.file.selector.select.file': 'Select File',\n 'shared.file.selector.select.files': 'Select Files',\n 'shared.file.selector.all.folders': 'All Folders',\n 'shared.file.selector.all.storage': 'All Storage',\n 'shared.file.selector.provider.not.configured': 'File selection not configured.',\n 'shared.file.selector.add.provider': 'Add',\n 'shared.default': 'Default',\n\n // User/option select\n 'shared.user.select.placeholder': 'Select User',\n 'shared.select.placeholder': 'Select Option',\n 'shared.multi.select.placeholder': 'Select Options',\n 'shared.multi.select.items.selected': '{{count}} Items Selected',\n 'shared.select.deselect.all': 'Select/Deselect All',\n 'shared.loading.actions': 'Loading actions...',\n 'shared.loading.roles': 'Loading roles...',\n 'shared.pending.changes': 'Pending Changes',\n 'shared.to.add': 'To Add',\n 'shared.to.remove': 'To Remove',\n 'shared.to.assign': 'To Assign',\n 'shared.to.whitelist': 'To Whitelist',\n 'shared.description.placeholder': 'Enter description',\n\n // Backend error keys (used by exception filters)\n 'error.generic': 'An error occurred',\n 'error.not.found': 'Resource not found',\n 'error.validation': 'Validation failed',\n 'error.unauthorized': 'Unauthorized access',\n 'error.forbidden': 'Access forbidden',\n 'error.conflict': 'Resource conflict',\n 'error.internal': 'Internal server error',\n 'error.service.unavailable': 'Service temporarily unavailable',\n 'error.http': 'HTTP error',\n 'error.unknown': 'Unknown error occurred',\n 'error.permission.system.unavailable': 'Permission system temporarily unavailable. Please try again later.',\n 'error.insufficient.permissions': 'Missing required permissions: {{permissions}}',\n 'error.insufficient.permissions.or': 'Requires at least one of: {{permissions}}',\n 'error.no.permissions.found': 'No permissions found. Please contact administrator.',\n\n // Backend system keys (infrastructure errors)\n 'system.repository.not.available': '{{entity}} repository not available',\n 'system.datasource.not.available': 'Data source not available',\n 'system.database.config.not.available': 'Database configuration not available',\n 'system.service.not.available': 'Service \"{{provider}}\" not available. Available: {{available}}',\n 'system.config.required': 'Configuration required',\n 'system.internal.error': 'Failed to initialize \"{{provider}}\": {{error}}',\n 'system.not.found': 'System resource not found',\n 'system.duplicate.request': 'Duplicate request detected',\n 'system.invalid.tenant.id': 'Invalid tenant ID',\n 'system.tenant.not.found': 'Tenant \"{{tenantId}}\" not found',\n 'system.tenant.header.required': 'Tenant not found. Ensure \"{{header}}\" header is set.',\n 'system.missing.parameter': 'Missing required parameter: {{key}}',\n 'system.sdk.not.installed': 'Required SDK \"{{sdk}}\" not installed. Run: npm install {{sdk}}',\n 'system.path.traversal.detected': 'Path traversal detected',\n 'system.invalid.file.key': 'Invalid file key',\n\n // Aliases for commonly used keys (dot-separated)\n 'shared.all': 'All',\n\n // PrimeNG component messages (synced to PrimeNGConfig)\n 'primeng.empty.message': 'No results found',\n 'primeng.empty.filter.message': 'No results found',\n 'primeng.empty.search.message': 'No results found',\n 'primeng.selection.message': '{0} items selected',\n 'primeng.empty.selection.message': 'No selected item',\n 'primeng.choose': 'Choose',\n 'primeng.upload': 'Upload',\n 'primeng.cancel': 'Cancel',\n 'primeng.pending': 'Pending',\n 'primeng.choose.date': 'Choose Date',\n 'primeng.today': 'Today',\n 'primeng.clear': 'Clear',\n 'primeng.week.header': 'Wk',\n 'primeng.first.day.of.week': '0',\n 'primeng.accept': 'Yes',\n 'primeng.reject': 'No',\n 'primeng.lt': 'Less than',\n 'primeng.lte': 'Less than or equal to',\n 'primeng.gt': 'Greater than',\n 'primeng.gte': 'Greater than or equal to',\n 'primeng.date.is': 'Date is',\n 'primeng.date.is.not': 'Date is not',\n 'primeng.date.before': 'Date is before',\n 'primeng.date.after': 'Date is after',\n 'primeng.contains': 'Contains',\n 'primeng.not.contains': 'Not contains',\n 'primeng.starts.with': 'Starts with',\n 'primeng.ends.with': 'Ends with',\n 'primeng.equals': 'Equals',\n 'primeng.not.equals': 'Not equals',\n 'primeng.no.filter': 'No Filter',\n 'primeng.match.all': 'Match All',\n 'primeng.match.any': 'Match Any',\n 'primeng.add.rule': 'Add Rule',\n 'primeng.remove.rule': 'Remove Rule',\n 'primeng.apply': 'Apply',\n 'primeng.aria.true.label': 'True',\n 'primeng.aria.false.label': 'False',\n 'primeng.aria.null.label': 'Not Selected',\n 'primeng.aria.star': '1 star',\n 'primeng.aria.stars': '{star} stars',\n 'primeng.aria.select.all': 'All items selected',\n 'primeng.aria.unselect.all': 'All items unselected',\n 'primeng.aria.close': 'Close',\n 'primeng.aria.previous': 'Previous',\n 'primeng.aria.next': 'Next',\n 'primeng.aria.navigation': 'Navigation',\n 'primeng.aria.scroll.top': 'Scroll Top',\n 'primeng.aria.move.top': 'Move Top',\n 'primeng.aria.move.up': 'Move Up',\n 'primeng.aria.move.down': 'Move Down',\n 'primeng.aria.move.bottom': 'Move Bottom',\n 'primeng.aria.move.to.target': 'Move to Target',\n 'primeng.aria.move.to.source': 'Move to Source',\n 'primeng.aria.move.all.to.target': 'Move All to Target',\n 'primeng.aria.move.all.to.source': 'Move All to Source',\n 'primeng.aria.page.label': 'Page {page}',\n 'primeng.aria.first.page.label': 'First Page',\n 'primeng.aria.last.page.label': 'Last Page',\n 'primeng.aria.next.page.label': 'Next Page',\n 'primeng.aria.prev.page.label': 'Previous Page',\n 'primeng.aria.rows.per.page.label': 'Rows per page',\n 'primeng.aria.jump.to.page.dropdown.label': 'Jump to Page Dropdown',\n 'primeng.aria.jump.to.page.input.label': 'Jump to Page Input',\n 'primeng.aria.select.row': 'Row Selected',\n 'primeng.aria.unselect.row': 'Row Unselected',\n 'primeng.aria.expand.row': 'Row Expanded',\n 'primeng.aria.collapse.row': 'Row Collapsed',\n 'primeng.aria.show.filter.menu': 'Show Filter Menu',\n 'primeng.aria.hide.filter.menu': 'Hide Filter Menu',\n 'primeng.aria.filter.operator': 'Filter Operator',\n 'primeng.aria.filter.constraint': 'Filter Constraint',\n 'primeng.aria.edit.row': 'Edit Row',\n 'primeng.aria.save.edit': 'Save Edit',\n 'primeng.aria.cancel.edit': 'Cancel Edit',\n 'primeng.aria.list.view': 'List View',\n 'primeng.aria.grid.view': 'Grid View',\n 'primeng.aria.slide': 'Slide',\n 'primeng.aria.slide.number': '{slideNumber}',\n 'primeng.aria.zoom.image': 'Zoom Image',\n 'primeng.aria.zoom.in': 'Zoom In',\n 'primeng.aria.zoom.out': 'Zoom Out',\n 'primeng.aria.rotate.right': 'Rotate Right',\n 'primeng.aria.rotate.left': 'Rotate Left',\n\n // Common aliases (backward compatibility for modules using common.* prefix)\n 'common.save': 'Save',\n 'common.cancel': 'Cancel',\n 'common.delete': 'Delete',\n 'common.edit': 'Edit',\n 'common.create': 'Create',\n 'common.update': 'Update',\n 'common.add': 'Add',\n 'common.remove': 'Remove',\n 'common.close': 'Close',\n 'common.confirm': 'Confirm',\n 'common.test': 'Test',\n 'common.name': 'Name',\n 'common.description': 'Description',\n 'common.status': 'Status',\n 'common.active': 'Active',\n 'common.inactive': 'Inactive',\n 'common.default': 'Default',\n 'common.type': 'Type',\n 'common.created': 'Created',\n 'common.updated': 'Updated',\n 'common.actions': 'Actions',\n 'common.company': 'Company',\n 'common.success': 'Success',\n 'common.error': 'Error',\n 'common.validation': 'Validation',\n 'common.fill.required.fields': 'Please fill in all required fields',\n\n // File uploader\n 'shared.file.uploader.no.upload.function': 'No upload function available. Configure FILE_PROVIDER or provide uploadFile input.',\n};\n","import { Observable } from 'rxjs';\nimport { IListResponse, ISingleResponse } from './response-payload.interface';\n\n// ─── Interfaces ───────────────────────────────────────────────────────────────\n\nexport interface IFileBasicInfo {\n id: string;\n name: string;\n contentType: string;\n size: string;\n url: string | null;\n}\n\nexport interface IUploadedFile {\n id?: string;\n name: string;\n key: string;\n size: number;\n contentType: string;\n}\n\nexport interface IFolderBasicInfo {\n id: string;\n name: string;\n slug: string;\n}\n\nexport interface IStorageConfigBasicInfo {\n id: string;\n name: string;\n isDefault: boolean;\n}\n\nexport interface IFileUploadOptions {\n storageConfigId?: string;\n folderPath?: string;\n maxWidth?: number;\n maxHeight?: number;\n quality?: number;\n compress?: boolean;\n isPrivate?: boolean;\n}\n\n// ─── Filter Interfaces ────────────────────────────────────────────────────────\n\nexport interface ISelectFilter {\n page: number;\n pageSize: number;\n search: string;\n}\n\nexport interface IFileSelectFilter extends ISelectFilter {\n contentTypes?: string[];\n folderId?: string;\n storageConfigId?: string;\n}\n\n// ─── Function Types ───────────────────────────────────────────────────────────\n\nexport type LoadFilesFn = (filter: IFileSelectFilter) => Observable<IListResponse<IFileBasicInfo>>;\nexport type UploadFileFn = (file: File, options?: IFileUploadOptions) => Observable<ISingleResponse<IUploadedFile>>;\nexport type UploadMultipleFilesFn = (files: File[], options?: IFileUploadOptions) => Observable<ISingleResponse<IUploadedFile[]>>;\nexport type GetFileUrlsFn = (fileIds: string[]) => Observable<ISingleResponse<IFileBasicInfo[]>>;\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\nexport const FILE_TYPE_FILTERS = {\n IMAGES: ['image/jpeg', 'image/png', 'image/gif', 'image/webp', 'image/svg+xml'],\n DOCUMENTS: [\n 'application/pdf',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n ],\n VIDEOS: ['video/mp4', 'video/webm', 'video/ogg', 'video/quicktime'],\n AUDIO: ['audio/mpeg', 'audio/wav', 'audio/ogg', 'audio/webm'],\n ALL: [] as string[],\n} as const;\n\n// ─── Utility Functions ────────────────────────────────────────────────────────\n\nexport function getAcceptString(contentTypes: string[]): string {\n return contentTypes.length ? contentTypes.join(',') : '*/*';\n}\n\nexport function isFileTypeAllowed(file: File, allowedTypes: string[]): boolean {\n if (!allowedTypes.length) return true;\n return allowedTypes.some((type) =>\n type.endsWith('/*') ? file.type.startsWith(type.replace('/*', '/')) : file.type === type\n );\n}\n\nexport function getFileIconClass(contentType: string): string {\n if (contentType.startsWith('image/')) return 'pi pi-image';\n if (contentType.startsWith('video/')) return 'pi pi-video';\n if (contentType.startsWith('audio/')) return 'pi pi-volume-up';\n if (contentType.includes('pdf')) return 'pi pi-file-pdf';\n if (contentType.includes('word') || contentType.includes('document')) return 'pi pi-file-word';\n if (contentType.includes('excel') || contentType.includes('spreadsheet')) return 'pi pi-file-excel';\n return 'pi pi-file';\n}\n\nexport function formatFileSize(sizeInKb: string | number): string {\n const kb = typeof sizeInKb === 'string' ? parseFloat(sizeInKb) : sizeInKb;\n if (kb < 1024) return `${kb.toFixed(1)} KB`;\n const mb = kb / 1024;\n if (mb < 1024) return `${mb.toFixed(1)} MB`;\n return `${(mb / 1024).toFixed(2)} GB`;\n}\n","export enum ContactTypeEnum {\n PHONE = 1,\n EMAIL = 2,\n}\n","export enum IconTypeEnum {\n PRIMENG_ICON = 1,\n IMAGE_FILE_LINK = 2,\n DIRECT_TAG_SVG = 3,\n}\n","import { Injectable, PLATFORM_ID, inject } from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\n\n@Injectable({ providedIn: 'root' })\nexport class PlatformService {\n private readonly platformId = inject(PLATFORM_ID);\n\n get isServer(): boolean {\n return isPlatformServer(this.platformId);\n }\n}\n","import { Injectable, inject, DOCUMENT, REQUEST } from '@angular/core';\n\nimport { PlatformService } from \"./platform.service\";\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CookieService {\n private doc = inject<Document>(DOCUMENT, { optional: true })!;\n private platformService = inject(PlatformService);\n private readonly request = inject(REQUEST, { optional: true });\n\n get(): string {\n return !this.platformService.isServer ? this.doc.cookie : this.request?.headers.get('cookie') ?? \"\";\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, Signal, inject, signal, computed } from '@angular/core';\nimport { APP_CONFIG, getServiceUrl } from '@flusys/ng-core';\nimport { Observable, of } from 'rxjs';\nimport { tap, catchError, map } from 'rxjs/operators';\nimport { ISingleResponse } from '../interfaces/response-payload.interface';\n\nexport interface FilesResponseDto {\n id: string;\n name: string;\n contentType: string;\n url: string;\n}\n\n/**\n * Service to fetch file URLs from the backend.\n * Handles presigned URLs for cloud storage, auto-refresh, and caching.\n */\n@Injectable({ providedIn: 'root' })\nexport class FileUrlService {\n private readonly http = inject(HttpClient);\n private readonly appConfig = inject(APP_CONFIG);\n\n private readonly _cache = signal<Map<string, FilesResponseDto>>(new Map());\n readonly cache = this._cache.asReadonly();\n\n /** Get file URL by ID from cache (synchronous) */\n getFileUrl(fileId: string | null | undefined): string | null {\n if (!fileId) return null;\n return this._cache().get(fileId)?.url ?? null;\n }\n\n /** Get file URL as computed signal */\n fileUrlSignal(fileId: string | null | undefined): Signal<string | null> {\n return computed(() => this.getFileUrl(fileId));\n }\n\n /** Fetch file URLs from backend and update cache */\n fetchFileUrls(\n fileIds: string[],\n forceRefresh = false,\n ): Observable<FilesResponseDto[]> {\n if (!fileIds.length) return of([]);\n\n const cache = this._cache();\n const missingIds = forceRefresh\n ? fileIds\n : fileIds.filter((id) => !cache.has(id));\n\n if (!missingIds.length) {\n return of(this.getFromCache(fileIds));\n }\n\n const requestDto = missingIds.map((id) => ({ id }));\n\n return this.http\n .post<ISingleResponse<FilesResponseDto[]>>(\n `${getServiceUrl(this.appConfig, 'storage')}/file-manager/get-files`,\n requestDto,\n )\n .pipe(\n map((response) => response.data ?? []),\n tap((files) => this.addToCache(files)),\n map(() => this.getFromCache(fileIds)),\n catchError(() => of([])),\n );\n }\n\n /** Fetch single file URL (delegates to fetchFileUrls) */\n fetchSingleFileUrl(\n fileId: string,\n forceRefresh = false,\n ): Observable<FilesResponseDto | null> {\n return this.fetchFileUrls([fileId], forceRefresh).pipe(\n map((files) => files[0] ?? null),\n );\n }\n\n /** Clear entire cache */\n clearCache(): void {\n this._cache.set(new Map());\n }\n\n /** Remove specific file from cache */\n removeFromCache(fileId: string): void {\n this._cache.update((cache) => {\n const next = new Map(cache);\n next.delete(fileId);\n return next;\n });\n }\n\n private addToCache(files: FilesResponseDto[]): void {\n this._cache.update((cache) => {\n const next = new Map(cache);\n for (const file of files) {\n next.set(file.id, file);\n }\n return next;\n });\n }\n\n private getFromCache(fileIds: string[]): FilesResponseDto[] {\n const cache = this._cache();\n return fileIds\n .map((id) => cache.get(id))\n .filter((f): f is FilesResponseDto => f !== undefined);\n }\n}\n","import { ILogicNode } from '../interfaces/common-data.interface';\n\n/**\n * Check if user has a specific permission using wildcard matching.\n * Supports:\n * - Exact match: 'user.create' matches 'user.create'\n * - Full wildcard: '*' matches everything\n * - Module wildcard: 'user.*' matches 'user.create', 'user.read', etc.\n */\nexport function hasPermission(\n requiredPermission: string,\n userPermissions: string[],\n): boolean {\n // Exact match\n if (userPermissions.includes(requiredPermission)) return true;\n\n // Wildcard matching\n for (const permission of userPermissions) {\n // Full wildcard - grants all permissions\n if (permission === '*') return true;\n\n // Module wildcard (e.g., 'user.*' matches 'user.create')\n if (\n permission.endsWith('.*') &&\n requiredPermission.startsWith(permission.slice(0, -1))\n ) {\n return true;\n }\n }\n\n return false;\n}\n\n/** Evaluate permission logic (string or ILogicNode) against user permissions */\nexport function evaluatePermission(\n logic: string | ILogicNode | null | undefined,\n permissions: string[],\n): boolean {\n if (!logic) return false;\n if (typeof logic === 'string') return hasPermission(logic, permissions);\n return evaluateLogicNode(logic, permissions);\n}\n\n/** Recursively evaluate an ILogicNode tree */\nexport function evaluateLogicNode(\n node: ILogicNode,\n permissions: string[],\n): boolean {\n switch (node.type) {\n case 'action':\n return node.actionId ? hasPermission(node.actionId, permissions) : false;\n\n case 'group':\n if (!node.children || node.children.length === 0) return false;\n\n return node.operator === 'AND'\n ? node.children.every((child) => evaluateLogicNode(child, permissions))\n : node.children.some((child) => evaluateLogicNode(child, permissions));\n\n default:\n return false;\n }\n}\n\n/** Check if user has ANY of the specified permissions (OR logic) */\nexport function hasAnyPermission(\n permissionCodes: string[],\n permissions: string[],\n): boolean {\n if (!permissionCodes?.length) return false;\n return permissionCodes.some((code) => hasPermission(code, permissions));\n}\n\n/** Check if user has ALL of the specified permissions (AND logic) */\nexport function hasAllPermissions(\n permissionCodes: string[],\n permissions: string[],\n): boolean {\n if (!permissionCodes?.length) return false;\n return permissionCodes.every((code) => hasPermission(code, permissions));\n}\n","import { Injectable, signal } from '@angular/core';\nimport { hasPermission } from '../utils/permission-evaluator.util';\n\n/**\n * Permission state management service.\n * Provides signal-based storage and permission checking with wildcard support.\n */\n@Injectable({ providedIn: 'root' })\nexport class PermissionValidatorService {\n private readonly _permissions = signal<string[]>([]);\n readonly permissions = this._permissions.asReadonly();\n\n private readonly _isLoaded = signal(false);\n readonly isLoaded = this._isLoaded.asReadonly();\n\n /** Set permissions (replaces existing) */\n setPermissions(permissions: string[]): void {\n this._permissions.set(permissions);\n this._isLoaded.set(true);\n }\n\n /** Clear all permissions */\n clearPermissions(): void {\n this._permissions.set([]);\n this._isLoaded.set(false);\n }\n\n /** Check if user has permission (supports wildcards: '*', 'module.*') */\n hasPermission(code: string): boolean {\n return hasPermission(code, this._permissions());\n }\n\n /** @deprecated Use `isLoaded()` signal instead */\n isPermissionsLoaded(): boolean {\n return this._isLoaded();\n }\n}\n","import { Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\n@Directive({\n selector: '[appEditModeElementChanger]',\n})\nexport class EditModeElementChangerDirective {\n private readonly el = inject(ElementRef);\n private readonly ngControl = inject(NgControl, { optional: true });\n\n readonly isEditMode = input.required<boolean>();\n\n constructor() {\n effect(() => {\n const editMode = this.isEditMode();\n this.updateElement(editMode);\n this.updateControl(editMode);\n });\n }\n\n private updateControl(editMode: boolean): void {\n if (!editMode) this.ngControl?.control?.disable();\n else this.ngControl?.control?.enable();\n }\n\n private updateElement(editMode: boolean): void {\n const inputElement: HTMLElement = this.el.nativeElement;\n\n if (inputElement instanceof HTMLInputElement) {\n if (!editMode) {\n inputElement.setAttribute('readonly', 'true');\n inputElement.classList.add('edit-mode-element-css');\n } else {\n inputElement.removeAttribute('readonly');\n inputElement.classList.remove('edit-mode-element-css');\n }\n }\n\n if (inputElement.tagName === 'P-SELECT') {\n const dropdown = inputElement.querySelector<HTMLElement>('.p-select-dropdown');\n const label = inputElement.querySelector<HTMLElement>('.p-select-label');\n if (!editMode) {\n inputElement.classList.add('edit-mode-element-css', 'overflow-hidden');\n if (dropdown) dropdown.style.display = 'none';\n label?.classList.add('edit-mode-element-css');\n } else {\n inputElement.classList.remove('edit-mode-element-css', 'overflow-hidden');\n if (dropdown) dropdown.style.display = 'flex';\n label?.classList.remove('edit-mode-element-css');\n }\n }\n\n if (inputElement.tagName === 'P-CALENDAR') {\n const firstChild = inputElement.firstElementChild;\n if (!editMode) {\n firstChild?.children[0]?.classList.add('edit-mode-element-css', 'cursor-auto');\n firstChild?.children[1]?.classList.add('hidden');\n } else {\n firstChild?.children[0]?.classList.remove('edit-mode-element-css', 'cursor-auto');\n firstChild?.children[1]?.classList.remove('hidden');\n }\n }\n }\n}\n","import {\n Directive,\n TemplateRef,\n ViewContainerRef,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { ILogicNode } from '../interfaces/common-data.interface';\nimport { PermissionValidatorService } from '../services/permission-validator.service';\nimport { evaluatePermission } from '../utils/permission-evaluator.util';\n\n/**\n * HasPermission Directive\n *\n * Structural directive for permission-based rendering.\n * Shows/hides elements based on permission logic evaluation.\n *\n * Supports:\n * - Simple permission check (string)\n * - Complex permission logic (ILogicNode with AND/OR operators)\n *\n * Usage:\n * ```html\n * <!-- Simple permission check -->\n * <button *hasPermission=\"'user.create'\">Create User</button>\n *\n * <!-- Complex permission logic -->\n * <button *hasPermission=\"userManageLogic\">Manage Users</button>\n *\n * <!-- Where userManageLogic is: -->\n * <!-- (user.view OR user.create) AND department.manage -->\n * ```\n *\n * The directive automatically reacts to permission changes through signals.\n *\n * @example\n * // In component\n * readonly userManageLogic: ILogicNode = {\n * id: 'root',\n * type: 'group',\n * operator: 'AND',\n * children: [\n * {\n * id: '1',\n * type: 'group',\n * operator: 'OR',\n * children: [\n * { id: '2', type: 'action', actionId: 'user.view' },\n * { id: '3', type: 'action', actionId: 'user.create' }\n * ]\n * },\n * { id: '4', type: 'action', actionId: 'department.manage' }\n * ]\n * };\n *\n * // In template\n * <div *hasPermission=\"userManageLogic\">\n * User management content\n * </div>\n */\n@Directive({\n selector: '[hasPermission]',\n})\nexport class HasPermissionDirective {\n // ==================== DEPENDENCIES ====================\n\n private readonly templateRef = inject(TemplateRef<unknown>);\n private readonly viewContainer = inject(ViewContainerRef);\n private readonly permissionValidator = inject(PermissionValidatorService);\n\n // ==================== SIGNALS ====================\n\n /**\n * Permission logic input signal\n * Accepts either:\n * - string: Single permission code to check\n * - ILogicNode: Complex permission logic tree\n */\n readonly hasPermission = input<string | ILogicNode | null>(null);\n\n /**\n * View created state\n */\n private viewCreated = false;\n\n // ==================== CONSTRUCTOR ====================\n\n constructor() {\n // Effect to reactively update view when permissions or logic changes\n effect(() => {\n // Track permission changes\n this.permissionValidator.permissions();\n\n // Track logic changes\n const logic = this.hasPermission();\n\n // Evaluate and update view\n this.updateView(logic);\n });\n }\n\n // ==================== VIEW MANAGEMENT ====================\n\n /**\n * Update view based on permission evaluation\n */\n private updateView(logic: string | ILogicNode | null): void {\n // Fail closed: No logic = no access\n if (!logic) {\n this.clearView();\n return;\n }\n\n // Fail closed: No permissions loaded = no access (unauthenticated state)\n if (!this.permissionValidator.isPermissionsLoaded()) {\n this.clearView();\n return;\n }\n\n // Use shared evaluatePermission utility\n const hasPermission = evaluatePermission(\n logic,\n this.permissionValidator.permissions(),\n );\n\n if (hasPermission && !this.viewCreated) {\n // Create view if not exists\n this.viewContainer.createEmbeddedView(this.templateRef);\n this.viewCreated = true;\n } else if (!hasPermission && this.viewCreated) {\n this.clearView();\n }\n }\n\n /**\n * Clear the view container\n */\n private clearView(): void {\n if (this.viewCreated) {\n this.viewContainer.clear();\n this.viewCreated = false;\n }\n }\n}\n","import { Directive, computed, input, signal } from '@angular/core';\n\n@Directive({\n selector: 'img',\n host: {\n '[src]': 'imageSrc()',\n '(error)': 'onError()',\n },\n})\nexport class IsEmptyImageDirective {\n readonly src = input<string>('');\n private readonly hasError = signal(false);\n private readonly defaultImg = 'lib/assets/images/default/default-image.jpg';\n\n readonly imageSrc = computed(() => {\n if (this.hasError()) {\n return this.defaultImg;\n }\n const srcValue = this.src();\n return srcValue ? srcValue : this.defaultImg;\n });\n\n onError(): void {\n this.hasError.set(true);\n }\n}\n","import { Directive, input, output } from '@angular/core';\n\n@Directive({\n selector: '[appPreventDefault]',\n host: {\n '(click)': 'onClick($event)',\n '(keydown)': 'onKeydown($event)',\n '(keyup)': 'onKeyup($event)',\n },\n})\nexport class PreventDefaultDirective {\n readonly eventType = input<'click' | 'keydown' | 'keyup'>('click');\n readonly preventKey = input<string | undefined>(undefined);\n readonly action = output<Event>();\n\n onClick(event: MouseEvent): void {\n if (this.eventType() === 'click') {\n this.processEvent(event);\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (this.eventType() === 'keydown') {\n if (!this.preventKey() || event.key === this.preventKey()) {\n this.processEvent(event);\n }\n }\n }\n\n onKeyup(event: KeyboardEvent): void {\n if (this.eventType() === 'keyup') {\n if (!this.preventKey() || event.key === this.preventKey()) {\n this.processEvent(event);\n }\n }\n }\n\n private processEvent(event: Event): void {\n event.preventDefault();\n this.action.emit(event);\n }\n}","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { FALLBACK_MESSAGES_REGISTRY, TRANSLATE_ADAPTER } from '@flusys/ng-core';\n\n@Pipe({\n name: 'translate',\n pure: false,\n})\nexport class TranslatePipe implements PipeTransform {\n private readonly translateAdapter = inject(TRANSLATE_ADAPTER, { optional: true });\n private readonly fallbackMessages = inject(FALLBACK_MESSAGES_REGISTRY, { optional: true });\n\n transform(key: string, params?: Record<string, string | number>): string {\n if (!this.translateAdapter) {\n return this.getFromFallback(key, params);\n }\n // Read languageCode signal to create reactive dependency for zoneless mode\n // This ensures the pipe re-evaluates when language changes\n this.translateAdapter.languageCode();\n return this.translateAdapter.translate(key, params);\n }\n\n private getFromFallback(template: string, params?: Record<string, string | number>): string {\n // Try to get from fallback messages registry first\n if (this.fallbackMessages) {\n const value = this.fallbackMessages[template];\n if (value) {\n return this.interpolate(value, params);\n }\n }\n // Fall back to interpolating the key itself\n return this.interpolate(template, params);\n }\n\n private interpolate(template: string, params?: Record<string, string | number>): string {\n if (!params) return template;\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (match, paramKey) => {\n const value = params[paramKey];\n return value !== undefined ? String(value) : match;\n });\n }\n}\n","import { inject, Injector, isDevMode } from '@angular/core';\nimport { ResolveFn } from '@angular/router';\nimport { firstValueFrom } from 'rxjs';\nimport { FALLBACK_MESSAGES_REGISTRY } from '@flusys/ng-core';\n\nexport interface IResolverModuleConfig {\n modules: string[];\n fallbackMessages?: Record<string, string>;\n}\n\n/**\n * Resolver to load translations for specific modules.\n * Works with or without @flusys/ng-localization provider.\n *\n * When localization provider is enabled:\n * - Registers fallback messages in state\n * - Fetches translations from API\n * - Merges them into state\n *\n * When localization provider is not enabled:\n * - Registers fallback messages in FALLBACK_MESSAGES_REGISTRY\n * - TranslatePipe uses registry for translations\n * - No API calls\n *\n * @param config - Module config with modules array and optional fallback messages\n * @returns ResolveFn that loads translations before route activation\n *\n * @example\n * // With fallback messages (recommended)\n * { resolve: { t: resolveTranslationModule({ modules: ['auth'], fallbackMessages: AUTH_MESSAGES }) } }\n *\n * @example\n * // Without fallback (API translations only, requires localization provider)\n * { resolve: { t: resolveTranslationModule({ modules: ['auth', 'iam'] }) } }\n */\ninterface LocalizationServices {\n stateService: {\n hasModuleFallbacks(module: string): boolean;\n registerModuleFallbacks(module: string, messages: Record<string, string>): void;\n currentLanguageCode(): string;\n isModuleLoaded(module: string): boolean;\n mergeTranslations(translations: Record<string, string>): void;\n markModuleLoaded(module: string): void;\n };\n apiService: {\n getTranslationsByLanguage(languageCode: string, modules: string[]): any;\n };\n}\n\nasync function tryLoadLocalizationServices(injector: Injector): Promise<LocalizationServices | null> {\n try {\n // @ts-ignore - ng-localization is optional and loaded dynamically at runtime\n const locModule = await import('@flusys/ng-localization');\n const config = injector.get(locModule.LOCALIZATION_CONFIG, null);\n if (!config) return null;\n\n return {\n stateService: injector.get(locModule.LocalizationStateService),\n apiService: injector.get(locModule.LocalizationApiService),\n };\n } catch {\n return null;\n }\n}\n\nexport function resolveTranslationModule(\n config: IResolverModuleConfig,\n): ResolveFn<boolean> {\n return async () => {\n const injector = inject(Injector);\n const { modules, fallbackMessages } = config;\n\n // Try to load localization services if available\n const locServices = await tryLoadLocalizationServices(injector);\n\n // Register fallback messages\n if (fallbackMessages) {\n if (locServices) {\n modules.forEach((module) => {\n if (!locServices.stateService.hasModuleFallbacks(module)) {\n locServices.stateService.registerModuleFallbacks(module, fallbackMessages);\n }\n });\n } else {\n const registry = injector.get(FALLBACK_MESSAGES_REGISTRY, null);\n if (registry) {\n Object.assign(registry, fallbackMessages);\n }\n }\n }\n\n if (!locServices) return true;\n\n // Load translations from API\n const languageCode = locServices.stateService.currentLanguageCode();\n const modulesToLoad = modules.filter((m) => !locServices.stateService.isModuleLoaded(m));\n\n if (modulesToLoad.length === 0) return true;\n\n try {\n const response = (await firstValueFrom(\n locServices.apiService.getTranslationsByLanguage(languageCode, modulesToLoad),\n )) as { success?: boolean; data?: Record<string, string> };\n\n if (response?.success && response?.data) {\n locServices.stateService.mergeTranslations(response.data);\n modulesToLoad.forEach((m) => locServices.stateService.markModuleLoaded(m));\n } else if (modulesToLoad.length > 0 && isDevMode()) {\n console.warn(\n `No translation data received for modules: ${modulesToLoad.join(', ')}`,\n );\n }\n } catch (error) {\n if (isDevMode()) {\n console.error(\n `Failed to load translations for modules: ${modules.join(', ')}`,\n error,\n );\n }\n }\n\n return true;\n };\n}\n\n","import { Provider, signal } from '@angular/core';\nimport { FALLBACK_MESSAGES_REGISTRY, TRANSLATE_ADAPTER } from '@flusys/ng-core';\n\n/** Fallback translate adapter for when localization provider is not used */\nconst createFallbackTranslateAdapter = (fallbackRegistry: Record<string, string>) => ({\n languageCode: signal('en'),\n translate: (key: string, params?: Record<string, string | number>): string => {\n // Check fallback messages registry first\n const value = fallbackRegistry[key];\n if (value) {\n // Simple parameter interpolation\n if (params) {\n return value.replace(/\\{\\{(\\w+)\\}\\}/g, (match, paramKey) => {\n const paramValue = params[paramKey];\n return paramValue !== undefined ? String(paramValue) : match;\n });\n }\n return value;\n }\n // Fall back to returning the key\n return key;\n },\n});\n\n/**\n * Provide fallback localization when @flusys/ng-localization is not used.\n * Uses hardcoded fallback messages registered by route resolvers.\n *\n * @example\n * ```typescript\n * providers: [\n * ...provideFallbackLocalization(),\n * ]\n * ```\n */\nexport function provideFallbackLocalization(): Provider[] {\n return [\n // Fallback messages registry (populated by route resolvers)\n { provide: FALLBACK_MESSAGES_REGISTRY, useValue: {} },\n // Fallback translate adapter (reads from registry)\n {\n provide: TRANSLATE_ADAPTER,\n useFactory: createFallbackTranslateAdapter,\n deps: [FALLBACK_MESSAGES_REGISTRY],\n },\n ];\n}\n","import { CommonModule, DatePipe, NgComponentOutlet, NgOptimizedImage } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router';\nimport { IsEmptyImageDirective, PreventDefaultDirective } from '../directives/public-api';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n RouterOutlet,\n RouterLink,\n RouterLinkActive,\n IsEmptyImageDirective,\n NgOptimizedImage,\n NgComponentOutlet,\n PreventDefaultDirective,\n ],\n providers: [DatePipe],\n exports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n RouterOutlet,\n RouterLink,\n RouterLinkActive,\n IsEmptyImageDirective,\n NgOptimizedImage,\n NgComponentOutlet,\n PreventDefaultDirective,\n ],\n})\nexport class AngularModule {}\n","import { NgModule } from '@angular/core';\nimport { AutoCompleteModule } from 'primeng/autocomplete';\nimport { AvatarModule } from 'primeng/avatar';\nimport { ButtonModule } from 'primeng/button';\nimport { CardModule } from 'primeng/card';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { DialogModule } from 'primeng/dialog';\nimport { DividerModule } from 'primeng/divider';\nimport { FileUploadModule } from 'primeng/fileupload';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { ImageModule } from 'primeng/image';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { ListboxModule } from 'primeng/listbox';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { PanelModule } from 'primeng/panel';\nimport { PasswordModule } from 'primeng/password';\nimport { PopoverModule } from 'primeng/popover';\nimport { ProgressBarModule } from 'primeng/progressbar';\nimport { RadioButtonModule } from 'primeng/radiobutton';\nimport { RippleModule } from 'primeng/ripple';\nimport { SelectModule } from 'primeng/select';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { SplitButtonModule } from 'primeng/splitbutton';\nimport { StepsModule } from 'primeng/steps';\nimport { TableModule } from 'primeng/table';\nimport { TabsModule } from 'primeng/tabs';\nimport { TagModule } from 'primeng/tag';\nimport { TextareaModule } from 'primeng/textarea';\nimport { ToastModule } from 'primeng/toast';\nimport { ToggleButtonModule } from 'primeng/togglebutton';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { TreeTableModule } from 'primeng/treetable';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { ColorPickerModule } from 'primeng/colorpicker';\n@NgModule({\n exports: [\n AutoCompleteModule,\n AvatarModule,\n ButtonModule,\n CardModule,\n CheckboxModule,\n ConfirmDialogModule,\n DatePickerModule,\n DialogModule,\n DividerModule,\n FileUploadModule,\n IconFieldModule,\n ImageModule,\n InputIconModule,\n InputNumberModule,\n InputTextModule,\n ListboxModule,\n MultiSelectModule,\n PaginatorModule,\n PanelModule,\n PasswordModule,\n PopoverModule,\n ProgressBarModule,\n RadioButtonModule,\n RippleModule,\n SelectButtonModule,\n SelectModule,\n SkeletonModule,\n SplitButtonModule,\n StepsModule,\n TableModule,\n TabsModule,\n TagModule,\n TextareaModule,\n ToastModule,\n ToggleButtonModule,\n ToggleSwitchModule,\n TooltipModule,\n TreeTableModule,\n ProgressSpinnerModule,\n ColorPickerModule,\n ],\n})\nexport class PrimeModule {}\n","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { computed, inject, Injector, resource, ResourceRef, runInInjectionContext, signal } from '@angular/core';\nimport { APP_CONFIG, getServiceUrl, IAppConfig } from '@flusys/ng-core';\nimport { firstValueFrom, Observable } from 'rxjs';\n\nexport type ServiceName = 'auth' | 'administration' | 'iam' | 'storage' | 'formBuilder' | 'email' | 'eventManager' | 'notification';\n\nimport {\n IBulkResponse,\n IDeleteData,\n IFilterData,\n IListResponse,\n IMessageResponse,\n IPagination,\n ISingleResponse,\n} from '../interfaces/public-api';\n\n/**\n * Service interface for CRUD operations.\n * Matches NestJS shared API controller endpoints (all POST, RPC-style).\n */\nexport interface IApiService<DtoT, InterfaceT> {\n insert(dto: DtoT): Observable<ISingleResponse<InterfaceT>>;\n insertMany(dtos: DtoT[]): Observable<IBulkResponse<InterfaceT>>;\n findById(id: string, select?: string[]): Observable<ISingleResponse<InterfaceT>>;\n getAll(search: string, filter: IFilterData): Observable<IListResponse<InterfaceT>>;\n update(dto: DtoT): Observable<ISingleResponse<InterfaceT>>;\n updateMany(dtos: DtoT[]): Observable<IBulkResponse<InterfaceT>>;\n delete(deleteDto: IDeleteData): Observable<IMessageResponse>;\n}\n\n/**\n * Abstract base class for API services using Angular 21 resource() API.\n * Provides signal-based reactive data fetching with automatic loading states.\n *\n * @example\n * ```typescript\n * @Injectable({ providedIn: 'root' })\n * export class UserService extends ApiResourceService<UserDto, User> {\n * constructor() {\n * super('auth/users', inject(HttpClient));\n * }\n * }\n * ```\n */\nexport abstract class ApiResourceService<DtoT, InterfaceT> implements IApiService<DtoT, InterfaceT> {\n protected readonly baseUrl: string;\n protected readonly injector = inject(Injector);\n protected readonly http: HttpClient;\n protected readonly moduleApiName: string;\n\n readonly searchTerm = signal('');\n readonly filterData = signal<IFilterData>({\n pagination: { currentPage: 0, pageSize: 10 },\n filter: {},\n select: [],\n sort: {},\n });\n\n private _listResource: ResourceRef<IListResponse<InterfaceT> | undefined> | null = null;\n private _resourceInitialized = false;\n private readonly _resourceInitSignal = signal(false);\n\n get listResource(): ResourceRef<IListResponse<InterfaceT> | undefined> {\n if (!this._listResource) {\n this.initListResource();\n }\n return this._listResource!;\n }\n\n initListResource(): void {\n if (this._resourceInitialized) return;\n this._resourceInitialized = true;\n runInInjectionContext(this.injector, () => {\n this._listResource = resource({\n params: () => ({\n search: this.searchTerm(),\n filter: this.filterData(),\n }),\n loader: async ({ params }) => this.getAllAsync(params.filter, params.search),\n });\n });\n this._resourceInitSignal.set(true);\n }\n\n readonly isLoading = computed(() => {\n this._resourceInitSignal();\n return this._listResource?.isLoading() ?? false;\n });\n\n readonly data = computed(() => {\n this._resourceInitSignal();\n return this._listResource?.value()?.data ?? [];\n });\n\n readonly total = computed(() => {\n this._resourceInitSignal();\n return this._listResource?.value()?.meta?.total ?? 0;\n });\n\n readonly pageInfo = computed(() => {\n this._resourceInitSignal();\n return this._listResource?.value()?.meta;\n });\n\n readonly hasMore = computed(() => {\n this._resourceInitSignal();\n const meta = this._listResource?.value()?.meta;\n if (!meta) return false;\n return meta.hasMore ?? (meta.page + 1) * meta.pageSize < meta.total;\n });\n\n constructor(moduleApiName: string, http: HttpClient, serviceName?: ServiceName) {\n this.moduleApiName = moduleApiName || serviceName || 'api';\n const config = inject<IAppConfig>(APP_CONFIG);\n const serviceBaseUrl = serviceName ? getServiceUrl(config, serviceName) : config.apiBaseUrl;\n this.baseUrl = moduleApiName ? `${serviceBaseUrl}/${moduleApiName}` : serviceBaseUrl;\n this.http = http;\n }\n\n protected getHttpOptions(endpoint: string, params?: HttpParams) {\n return {\n headers: new HttpHeaders({ 'x-loader-tag': `${this.moduleApiName}/${endpoint}` }),\n ...(params ? { params } : {}),\n };\n }\n\n // ==========================================================================\n // List Management\n // ==========================================================================\n\n fetchList(search: string = '', filter?: Partial<IFilterData>): void {\n this.initListResource();\n this.searchTerm.set(search);\n if (filter) {\n this.filterData.update((prev) => ({ ...prev, ...filter }));\n }\n }\n\n setPagination(pagination: IPagination): void {\n this.initListResource();\n this.filterData.update((prev) => ({ ...prev, pagination }));\n }\n\n nextPage(): void {\n this.initListResource();\n this.filterData.update((prev) => ({\n ...prev,\n pagination: {\n ...prev.pagination!,\n currentPage: (prev.pagination?.currentPage ?? 0) + 1,\n },\n }));\n }\n\n resetPagination(): void {\n this.initListResource();\n this.filterData.update((prev) => ({\n ...prev,\n pagination: { currentPage: 0, pageSize: prev.pagination?.pageSize ?? 10 },\n }));\n }\n\n reload(): void {\n this._listResource?.reload();\n }\n\n // ==========================================================================\n // Observable API (IApiService interface)\n // ==========================================================================\n\n insert(dto: DtoT): Observable<ISingleResponse<InterfaceT>> {\n return this.http.post<ISingleResponse<InterfaceT>>(\n `${this.baseUrl}/insert`,\n dto,\n this.getHttpOptions('insert'),\n );\n }\n\n insertMany(dtos: DtoT[]): Observable<IBulkResponse<InterfaceT>> {\n return this.http.post<IBulkResponse<InterfaceT>>(\n `${this.baseUrl}/insert-many`,\n dtos,\n this.getHttpOptions('insert-many'),\n );\n }\n\n findById(id: string, select?: string[]): Observable<ISingleResponse<InterfaceT>> {\n return this.http.post<ISingleResponse<InterfaceT>>(\n `${this.baseUrl}/get/${id}`,\n { select },\n this.getHttpOptions(`get/${id}`),\n );\n }\n\n getAll(search: string, filter: IFilterData): Observable<IListResponse<InterfaceT>> {\n let params = new HttpParams();\n if (search) {\n params = params.append('q', search);\n }\n return this.http.post<IListResponse<InterfaceT>>(\n `${this.baseUrl}/get-all`,\n filter,\n this.getHttpOptions('get-all', params),\n );\n }\n\n update(dto: DtoT): Observable<ISingleResponse<InterfaceT>> {\n return this.http.post<ISingleResponse<InterfaceT>>(\n `${this.baseUrl}/update`,\n dto,\n this.getHttpOptions('update'),\n );\n }\n\n updateMany(dtos: DtoT[]): Observable<IBulkResponse<InterfaceT>> {\n return this.http.post<IBulkResponse<InterfaceT>>(\n `${this.baseUrl}/update-many`,\n dtos,\n this.getHttpOptions('update-many'),\n );\n }\n\n delete(deleteDto: IDeleteData): Observable<IMessageResponse> {\n return this.http.post<IMessageResponse>(\n `${this.baseUrl}/delete`,\n deleteDto,\n this.getHttpOptions('delete'),\n );\n }\n\n // ==========================================================================\n // Async API\n // ==========================================================================\n\n async getAllAsync(filter: IFilterData, search: string = ''): Promise<IListResponse<InterfaceT>> {\n return firstValueFrom(this.getAll(search, filter));\n }\n\n async findByIdAsync(id: string, select?: string[]): Promise<ISingleResponse<InterfaceT>> {\n return firstValueFrom(this.findById(id, select));\n }\n\n async insertAsync(dto: DtoT): Promise<ISingleResponse<InterfaceT>> {\n return firstValueFrom(this.insert(dto));\n }\n\n async insertManyAsync(dtos: DtoT[]): Promise<IBulkResponse<InterfaceT>> {\n return firstValueFrom(this.insertMany(dtos));\n }\n\n async updateAsync(dto: DtoT): Promise<ISingleResponse<InterfaceT>> {\n return firstValueFrom(this.update(dto));\n }\n\n async updateManyAsync(dtos: DtoT[]): Promise<IBulkResponse<InterfaceT>> {\n return firstValueFrom(this.updateMany(dtos));\n }\n\n async deleteAsync(deleteDto: IDeleteData): Promise<IMessageResponse> {\n return firstValueFrom(this.delete(deleteDto));\n }\n}\n\nexport { ApiResourceService as ApiService };\n","import {\n Directive,\n effect,\n forwardRef,\n inject,\n Injector,\n model,\n runInInjectionContext,\n untracked\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { FormValueControl } from '@angular/forms/signals';\n\n/**\n * Base class for form controls that support ALL Angular form patterns:\n *\n * 1. **Template-driven forms:** `[(value)]=\"mySignal\"` or `[(ngModel)]=\"myValue\"`\n * 2. **Reactive forms:** `[formControl]=\"ctrl\"` or `formControlName=\"field\"`\n * 3. **Signal forms (Angular 21+):** `[formField]=\"formTree.field\"`\n *\n * Implements both `ControlValueAccessor` (reactive forms) and `FormValueControl` (signal forms).\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [provideValueAccessor(MySelectComponent)]\n * })\n * export class MySelectComponent extends BaseFormControl<string | null> {\n * override readonly value = model<string | null>(null);\n *\n * constructor() {\n * super();\n * this.initializeFormControl();\n * }\n * }\n *\n * // Usage:\n * // Template-driven: <my-select [(value)]=\"selectedId\" />\n * // Reactive forms: <my-select [formControl]=\"myControl\" />\n * // Signal forms: <my-select [formField]=\"formTree.myField\" />\n * ```\n */\n@Directive()\nexport abstract class BaseFormControl<T> implements ControlValueAccessor, FormValueControl<T> {\n protected readonly injector = inject(Injector);\n\n /**\n * The value model - must be overridden in subclass with model<T>().\n * This property satisfies both:\n * - FormValueControl interface (signal forms)\n * - Internal state for ControlValueAccessor (reactive forms)\n */\n abstract readonly value: ReturnType<typeof model<T>>;\n\n /**\n * Disabled state model - bound to form control disabled state.\n * Using model() to satisfy FormValueControl interface requirements.\n */\n readonly disabled = model<boolean>(false);\n\n /**\n * Touched state model - for validation styling.\n * Using model() to satisfy FormValueControl interface requirements.\n */\n readonly touched = model<boolean>(false);\n\n private onChange: (value: T) => void = () => {};\n private onTouched: () => void = () => {};\n private isWritingValue = false;\n\n /**\n * Initialize the form control synchronization for ControlValueAccessor.\n * Must be called in the subclass constructor after super().\n *\n * Note: For signal forms ([formField]), this is not needed as\n * the FormField directive binds directly to the value model.\n */\n protected initializeFormControl(): void {\n runInInjectionContext(this.injector, () => {\n effect(() => {\n const currentValue = this.value();\n if (!this.isWritingValue) {\n untracked(() => this.onChange(currentValue));\n }\n });\n });\n }\n\n // ============================================\n // ControlValueAccessor Implementation\n // (For reactive forms: formControl, formControlName)\n // ============================================\n\n /** ControlValueAccessor: Write value from form control to signal */\n writeValue(value: T): void {\n this.isWritingValue = true;\n this.value.set(value);\n this.isWritingValue = false;\n }\n\n /** ControlValueAccessor: Register change callback */\n registerOnChange(fn: (value: T) => void): void {\n this.onChange = fn;\n }\n\n /** ControlValueAccessor: Register touched callback */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** ControlValueAccessor: Set disabled state from form control */\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n // ============================================\n // FormValueControl Implementation\n // (For signal forms: [formField])\n // ============================================\n // The FormValueControl interface only requires:\n // - value: ModelSignal<T> (already declared as abstract above)\n // The FormField directive automatically binds to the value model.\n\n /** Mark the control as touched (call on blur or panel close) */\n protected markAsTouched(): void {\n if (!this.touched()) {\n this.touched.set(true);\n this.onTouched();\n }\n }\n}\n\n/**\n * Factory function to provide NG_VALUE_ACCESSOR for a component.\n * Use in component providers array.\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [provideValueAccessor(LazySelectComponent)]\n * })\n * export class LazySelectComponent extends BaseFormControl<string | null> {}\n * ```\n */\nexport function provideValueAccessor<T extends new (...args: unknown[]) => ControlValueAccessor>(component: T) {\n return {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => component),\n multi: true\n };\n}\n","import { Component, input } from '@angular/core';\nimport { AngularModule } from '../../modules/public-api';\nimport { IconTypeEnum } from '../../enums/public-api';\n\n@Component({\n selector: 'lib-icon',\n imports: [AngularModule],\n template: `\n @if (icon()) {\n @if (iconType() === IconTypeEnum.PRIMENG_ICON) {\n <i [class]=\"icon()\"></i>\n } @else if (iconType() === IconTypeEnum.IMAGE_FILE_LINK) {\n <img [alt]=\"icon()\" [src]=\"icon()\" />\n } @else {\n <i class=\"pi pi-question\"></i>\n }\n }\n `,\n})\nexport class IconComponent {\n icon = input.required<string>();\n iconType = input<IconTypeEnum | undefined>(IconTypeEnum.PRIMENG_ICON);\n protected readonly IconTypeEnum = IconTypeEnum; // Needed for template reference\n}\n","import { IPagination } from '../interfaces/filter-data.interface';\n\n/**\n * Configuration for scroll pagination behavior\n */\nexport interface ScrollPaginationConfig {\n /** Distance from bottom to trigger pagination (default: 50px) */\n threshold?: number;\n /** Current pagination state */\n pagination: IPagination;\n /** Total items available */\n total: number | undefined;\n /** Whether currently loading */\n isLoading: boolean;\n}\n\n/**\n * Check if scroll has reached near bottom and calculate next page if available.\n * Returns next pagination if should load more, null otherwise.\n *\n * @example\n * ```typescript\n * onScroll(event: Event): void {\n * const nextPagination = checkScrollPagination(event, {\n * pagination: this.pagination(),\n * total: this.total(),\n * isLoading: this.isLoading(),\n * });\n * if (nextPagination) {\n * this.onPagination.emit(nextPagination);\n * }\n * }\n * ```\n */\nexport function checkScrollPagination(\n event: Event,\n config: ScrollPaginationConfig,\n): IPagination | null {\n const el = event.target;\n if (!(el instanceof HTMLElement)) return null;\n\n const threshold = config.threshold ?? 50;\n const nearBottom = el.scrollTop + el.clientHeight >= el.scrollHeight - threshold;\n\n if (!nearBottom || config.isLoading) return null;\n\n const { pagination, total } = config;\n const nextPage = pagination.currentPage + 1;\n const hasMore = nextPage * pagination.pageSize < (total ?? 0);\n\n if (!hasMore) return null;\n\n return { ...pagination, currentPage: nextPage };\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n afterNextRender,\n ApplicationRef,\n Component,\n computed,\n effect,\n ElementRef,\n EmbeddedViewRef,\n inject,\n input,\n model,\n OnDestroy,\n output,\n signal,\n TemplateRef,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CheckboxChangeEvent } from 'primeng/checkbox';\nimport { TRANSLATE_ADAPTER } from '@flusys/ng-core';\nimport {\n BaseFormControl,\n provideValueAccessor,\n} from '../../classes/public-api';\nimport { IDropDown, IPagination } from '../../interfaces/public-api';\nimport { AngularModule, PrimeModule } from '../../modules/public-api';\nimport { TranslatePipe } from '../../pipes/translate.pipe';\nimport { checkScrollPagination } from '../../utils/scroll-pagination.util';\n\n/**\n * Lazy-loading multi-select component with search, pagination, and select-all.\n *\n * Supports ALL Angular form patterns:\n * - Template-driven: `[(value)]=\"selectedIds\"`\n * - Reactive forms: `[formControl]=\"ctrl\"` or `formControlName=\"field\"`\n * - Signal forms: `[formField]=\"formTree.field\"`\n */\n@Component({\n selector: 'lib-lazy-multi-select',\n imports: [PrimeModule, AngularModule, TranslatePipe],\n templateUrl: './lazy-multi-select.component.html',\n styleUrl: './lazy-multi-select.component.scss',\n encapsulation: ViewEncapsulation.None,\n providers: [provideValueAccessor(LazyMultiSelectComponent)],\n})\nexport class LazyMultiSelectComponent\n extends BaseFormControl<string[] | null>\n implements OnDestroy\n{\n private readonly document = inject(DOCUMENT);\n private readonly appRef = inject(ApplicationRef);\n private readonly translateAdapter = inject(TRANSLATE_ADAPTER, { optional: true });\n private readonly onDocumentClickBound = this.handleDocumentClick.bind(this);\n\n // View references\n readonly pSelectRef =\n viewChild.required<ElementRef<HTMLDivElement>>('pSelect');\n readonly overlayTemplate =\n viewChild.required<TemplateRef<unknown>>('overlayTpl');\n\n // Portal state\n private overlayViewRef: EmbeddedViewRef<unknown> | null = null;\n\n // Inputs\n readonly placeHolder = input<string>('');\n\n // Computed placeholder with translation fallback\n readonly displayPlaceholder = computed(() => {\n const customPlaceholder = this.placeHolder();\n if (customPlaceholder) return customPlaceholder;\n return this.t('shared.multi.select.placeholder');\n });\n readonly isEditMode = input.required<boolean>();\n readonly isLoading = input.required<boolean>();\n readonly total = input.required<number | undefined>();\n readonly pagination = input.required<IPagination>();\n readonly selectDataList = input.required<Array<IDropDown>>();\n\n // Two-way bound value\n override readonly value = model<string[] | null>(null);\n\n // Outputs\n readonly onSearch = output<string>();\n readonly onPagination = output<IPagination>();\n\n // UI state\n readonly searchTerm = signal('');\n readonly openOptions = signal(false);\n\n // Computed values\n readonly selectedValueDisplay = computed(() => {\n const selectedValues = this.value() ?? [];\n if (selectedValues.length === 0) return '';\n if (selectedValues.length > 3) {\n return this.t('shared.multi.select.items.selected', { count: selectedValues.length });\n }\n return this.selectDataList()\n .filter((item) => selectedValues.includes(item.value))\n .map((item) => item.label)\n .join(', ');\n });\n\n readonly isSelectAll = computed(() => {\n const selectedValues = this.value() ?? [];\n const allValues = this.selectDataList().map((item) => item.value);\n if (selectedValues.length === 0 || allValues.length === 0) return false;\n return allValues.every((val) => selectedValues.includes(val));\n });\n\n constructor() {\n super();\n this.initializeFormControl();\n\n // Search debounce using effect\n let debounceTimeout: ReturnType<typeof setTimeout> | null = null;\n let previousValue = this.searchTerm();\n\n effect((onCleanup) => {\n const currentValue = this.searchTerm();\n\n // Skip unchanged values\n if (currentValue === previousValue) return;\n previousValue = currentValue;\n\n // Clear existing timeout\n if (debounceTimeout) clearTimeout(debounceTimeout);\n\n // Debounced emit\n debounceTimeout = setTimeout(() => {\n this.onSearch.emit(currentValue);\n }, 500);\n\n onCleanup(() => {\n if (debounceTimeout) clearTimeout(debounceTimeout);\n });\n });\n\n // Document click listener for closing dropdown\n afterNextRender({\n write: () => {\n this.document.addEventListener('click', this.onDocumentClickBound);\n },\n });\n }\n\n ngOnDestroy(): void {\n this.document.removeEventListener('click', this.onDocumentClickBound);\n this.closeOverlay();\n }\n\n onScroll(event: Event): void {\n const nextPagination = checkScrollPagination(event, {\n pagination: this.pagination(),\n total: this.total(),\n isLoading: this.isLoading(),\n });\n if (nextPagination) {\n this.onPagination.emit(nextPagination);\n }\n }\n\n onSelectClick(): void {\n if (this.disabled() || !this.isEditMode()) return;\n\n if (this.openOptions()) {\n this.closeOverlay();\n } else {\n this.openOverlay();\n }\n }\n\n private openOverlay(): void {\n this.pSelectRef()?.nativeElement.classList.add('p-focus');\n this.openOptions.set(true);\n\n // Create embedded view and append to body (portal pattern)\n this.overlayViewRef = this.overlayTemplate().createEmbeddedView({});\n this.appRef.attachView(this.overlayViewRef);\n\n const overlayEl = this.overlayViewRef.rootNodes[0] as HTMLElement;\n this.document.body.appendChild(overlayEl);\n\n // Override positioning for portal (CSS class handles visual styles)\n const rect = this.pSelectRef()?.nativeElement.getBoundingClientRect();\n if (rect) {\n overlayEl.style.cssText = `\n position: fixed !important;\n top: ${rect.bottom + 2}px !important;\n left: ${rect.left}px !important;\n width: ${rect.width}px !important;\n max-width: ${rect.width}px !important;\n min-width: ${rect.width}px !important;\n z-index: 999999999999 !important;\n `;\n }\n }\n\n private closeOverlay(): void {\n this.openOptions.set(false);\n this.pSelectRef()?.nativeElement.classList.remove('p-focus');\n\n if (this.overlayViewRef) {\n this.appRef.detachView(this.overlayViewRef);\n this.overlayViewRef.destroy();\n this.overlayViewRef = null;\n }\n }\n\n onOverlayClick(event: Event): void {\n event.stopPropagation();\n }\n\n private handleDocumentClick(event: MouseEvent): void {\n const target = event.target as Node;\n const clickedInSelect = this.pSelectRef()?.nativeElement.contains(target);\n const clickedInOverlay =\n this.overlayViewRef?.rootNodes[0]?.contains(target);\n\n if (!clickedInSelect && !clickedInOverlay) {\n this.closeOverlay();\n this.markAsTouched();\n }\n }\n\n isSelected(data: IDropDown): boolean {\n return this.value()?.includes(data.value) ?? false;\n }\n\n selectValue(event: CheckboxChangeEvent, option: IDropDown): void {\n const previousValue = this.value() ?? [];\n if (event.checked) {\n if (!previousValue.includes(option.value)) {\n this.value.set([...previousValue, option.value]);\n }\n } else {\n this.value.set(previousValue.filter((v) => v !== option.value));\n }\n }\n\n changeSelectAll(event: CheckboxChangeEvent): void {\n if (event.checked) {\n this.value.set(this.selectDataList().map((item) => item.value));\n } else {\n this.value.set([]);\n }\n }\n\n clear(event: Event): void {\n event.stopPropagation();\n this.value.set([]);\n }\n\n private t(key: string, variables?: Record<string, string | number>): string {\n if (this.translateAdapter) {\n return this.translateAdapter.translate(key, variables);\n }\n return key;\n }\n}\n","<div\n class=\"p-select w-full\"\n #pSelect\n (click)=\"onSelectClick()\"\n [class.p-disabled]=\"disabled()\"\n [class.edit-mode-element-css]=\"!isEditMode()\"\n [class.overflow-hidden]=\"!isEditMode()\"\n>\n @if (selectedValueDisplay()) {\n <span class=\"p-select-label\" [class.edit-mode-element-css]=\"!isEditMode()\">\n {{ selectedValueDisplay() }}\n </span>\n } @else {\n <span class=\"p-select-label p-placeholder\">{{ displayPlaceholder() }}</span>\n }\n\n @if (isEditMode()) {\n <span class=\"p-select-clear-icon\" (click)=\"clear($event)\">\n <i class=\"pi pi-times\"></i>\n </span>\n\n <div class=\"p-select-dropdown\">\n <span class=\"p-select-dropdown-icon flex items-center\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"p-multiselect-dropdown-icon p-icon\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M7.01744 10.398C6.91269 10.3985 6.8089 10.378 6.71215 10.3379C6.61541 10.2977 6.52766 10.2386 6.45405 10.1641L1.13907 4.84913C1.03306 4.69404 0.985221 4.5065 1.00399 4.31958C1.02276 4.13266 1.10693 3.95838 1.24166 3.82747C1.37639 3.69655 1.55301 3.61742 1.74039 3.60402C1.92777 3.59062 2.11386 3.64382 2.26584 3.75424L7.01744 8.47394L11.769 3.75424C11.9189 3.65709 12.097 3.61306 12.2748 3.62921C12.4527 3.64535 12.6199 3.72073 12.7498 3.84328C12.8797 3.96582 12.9647 4.12842 12.9912 4.30502C13.0177 4.48162 12.9841 4.662 12.8958 4.81724L7.58083 10.1322C7.50996 10.2125 7.42344 10.2775 7.32656 10.3232C7.22968 10.3689 7.12449 10.3944 7.01744 10.398Z\"\n fill=\"currentColor\"\n />\n </svg>\n </span>\n </div>\n }\n</div>\n\n<ng-template #overlayTpl>\n <div class=\"p-select-overlay\" (click)=\"onOverlayClick($event)\">\n <div class=\"p-select-header flex flex-row gap-2 items-center\">\n <p-checkbox\n [binary]=\"true\"\n [ngModel]=\"isSelectAll()\"\n [disabled]=\"disabled()\"\n (onChange)=\"changeSelectAll($event)\"\n />\n <input\n type=\"text\"\n pInputText\n class=\"w-full\"\n [placeholder]=\"'shared.search' | translate\"\n [ngModel]=\"searchTerm()\"\n (ngModelChange)=\"searchTerm.set($event)\"\n />\n </div>\n <div class=\"p-select-list-container\" (scroll)=\"onScroll($event)\">\n <ul class=\"p-select-list\">\n @for (data of selectDataList(); track data.value) {\n <li\n class=\"p-select-option flex flex-row gap-2 items-center\"\n [class.p-select-option-selected]=\"isSelected(data)\"\n >\n <p-checkbox\n [binary]=\"true\"\n [ngModel]=\"isSelected(data)\"\n [disabled]=\"disabled()\"\n (onChange)=\"selectValue($event, data)\"\n />\n <span>{{ data.label }}</span>\n </li>\n }\n </ul>\n </div>\n </div>\n</ng-template>\n","import {\n afterNextRender,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { TRANSLATE_ADAPTER } from '@flusys/ng-core';\nimport { BaseFormControl, provideValueAccessor } from '../../classes/public-api';\nimport { EditModeElementChangerDirective } from '../../directives/public-api';\nimport { IDropDown, IPagination } from '../../interfaces/public-api';\nimport { AngularModule, PrimeModule } from '../../modules/public-api';\nimport { checkScrollPagination } from '../../utils/scroll-pagination.util';\n\n/**\n * Lazy-loading single select component with search and pagination.\n *\n * Supports ALL Angular form patterns:\n * - Template-driven: `[(value)]=\"selectedId\"`\n * - Reactive forms: `[formControl]=\"ctrl\"` or `formControlName=\"field\"`\n * - Signal forms: `[formField]=\"formTree.field\"`\n */\n@Component({\n selector: 'lib-lazy-select',\n imports: [AngularModule, PrimeModule, EditModeElementChangerDirective],\n templateUrl: './lazy-select.component.html',\n styleUrl: './lazy-select.component.scss',\n providers: [provideValueAccessor(LazySelectComponent)],\n})\nexport class LazySelectComponent extends BaseFormControl<string | null> {\n private readonly destroyRef = inject(DestroyRef);\n private readonly translateAdapter = inject(TRANSLATE_ADAPTER, { optional: true });\n private readonly onScrollBound = this.onScroll.bind(this);\n private scrollTargetEl: HTMLElement | null = null;\n private isDestroyed = false;\n\n // View references\n readonly scrollContainer = viewChild.required<ElementRef<HTMLDivElement>>('scrollContainer');\n\n // Inputs\n readonly placeHolder = input<string>('');\n\n // Computed placeholder with translation fallback\n readonly displayPlaceholder = computed(() => {\n const customPlaceholder = this.placeHolder();\n if (customPlaceholder) return customPlaceholder;\n return this.t('shared.select.placeholder');\n });\n readonly optionLabel = input.required<string>();\n readonly optionValue = input.required<string>();\n readonly isEditMode = input.required<boolean>();\n readonly isLoading = input.required<boolean>();\n readonly total = input.required<number | undefined>();\n readonly pagination = input.required<IPagination>();\n readonly selectDataList = input.required<Array<IDropDown>>();\n\n // Two-way bound value\n override readonly value = model<string | null>(null);\n\n // Outputs\n readonly onSearch = output<string>();\n readonly onPagination = output<IPagination>();\n\n // UI state\n readonly searchTerm = signal('');\n readonly isPanelShow = signal(false);\n\n constructor() {\n super();\n this.initializeFormControl();\n\n // Search debounce using effect\n let debounceTimeout: ReturnType<typeof setTimeout> | null = null;\n let previousValue = this.searchTerm();\n\n effect((onCleanup) => {\n const currentValue = this.searchTerm();\n\n // Skip unchanged values\n if (currentValue === previousValue) return;\n previousValue = currentValue;\n\n // Clear existing timeout\n if (debounceTimeout) clearTimeout(debounceTimeout);\n\n // Debounced emit\n debounceTimeout = setTimeout(() => {\n this.onSearch.emit(currentValue);\n }, 500);\n\n onCleanup(() => {\n if (debounceTimeout) clearTimeout(debounceTimeout);\n });\n });\n\n // Cleanup scroll listener on destroy\n this.destroyRef.onDestroy(() => {\n this.isDestroyed = true;\n if (this.scrollTargetEl) {\n this.scrollTargetEl.removeEventListener('scroll', this.onScrollBound);\n }\n });\n }\n\n onScroll(event: Event): void {\n const nextPagination = checkScrollPagination(event, {\n pagination: this.pagination(),\n total: this.total(),\n isLoading: this.isLoading(),\n });\n if (nextPagination) {\n this.onPagination.emit(nextPagination);\n }\n }\n\n showPanel(): void {\n if (this.disabled()) return;\n this.isPanelShow.update((prev) => !prev);\n const isNowVisible = this.isPanelShow();\n\n if (isNowVisible) {\n afterNextRender(\n () => {\n if (this.isDestroyed) return;\n const containerEl = this.scrollContainer().nativeElement;\n const target = containerEl.querySelector<HTMLElement>('.p-select-list-container');\n if (target) {\n target.addEventListener('scroll', this.onScrollBound);\n this.scrollTargetEl = target;\n }\n },\n { injector: this.injector },\n );\n } else if (this.scrollTargetEl) {\n this.scrollTargetEl.removeEventListener('scroll', this.onScrollBound);\n this.scrollTargetEl = null;\n }\n }\n\n onBlur(): void {\n this.markAsTouched();\n }\n\n private t(key: string, variables?: Record<string, string | number>): string {\n if (this.translateAdapter) {\n return this.translateAdapter.translate(key, variables);\n }\n return key;\n }\n}\n","<div #scrollContainer class=\"lib-scroll-container\">\n <p-select\n class=\"w-full\"\n [options]=\"selectDataList()\"\n [optionLabel]=\"optionLabel()\"\n [optionValue]=\"optionValue()\"\n [filter]=\"true\"\n [showClear]=\"true\"\n [placeholder]=\"displayPlaceholder()\"\n [disabled]=\"disabled()\"\n [(ngModel)]=\"value\"\n appEditModeElementChanger\n [isEditMode]=\"isEditMode()\"\n (click)=\"showPanel()\"\n (onBlur)=\"onBlur()\"\n >\n <ng-template #filter let-filter>\n <input\n pInputText\n class=\"w-full\"\n [ngModel]=\"searchTerm()\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"searchTerm.set($event)\"\n />\n </ng-template>\n <ng-template #selectedItem let-selectedOption>\n {{ selectedOption[optionLabel()] }}\n </ng-template>\n <ng-template #item let-item>\n {{ item[optionLabel()] }}\n </ng-template>\n </p-select>\n</div>\n","import { InjectionToken } from '@angular/core';\nimport {\n IAuthStateProvider,\n ICompanyApiProvider,\n IFileProvider,\n IProfilePermissionProvider,\n IUserListItem,\n IUserListProvider,\n IUserPermissionProvider,\n IUserProvider,\n} from '../interfaces/providers.interface';\n\n/**\n * Injection Tokens for Provider Interfaces\n *\n * These tokens enable dependency injection of provider implementations\n * without creating direct package dependencies.\n *\n * Pattern:\n * 1. ng-shared defines interfaces and tokens (no implementation)\n * 2. ng-auth provides implementations\n * 3. ng-iam and ng-storage inject via tokens\n * 4. app.config.ts wires everything together\n *\n * @example\n * // In IAM component\n * private readonly userProvider = inject(USER_PROVIDER);\n *\n * // In app.config.ts\n * providers: [\n * { provide: USER_PROVIDER, useClass: AuthUserProvider },\n * ]\n */\n\n/**\n * User Provider Token\n *\n * Provides user data access for IAM user selection.\n */\nexport const USER_PROVIDER = new InjectionToken<IUserProvider>(\n 'USER_PROVIDER',\n {\n providedIn: 'root',\n factory: () => {\n throw new Error(\n 'USER_PROVIDER not configured. Please provide an implementation in app.config.ts',\n );\n },\n },\n);\n\n/**\n * Company API Provider Token\n *\n * Provides company data access for IAM company selection.\n */\nexport const COMPANY_API_PROVIDER = new InjectionToken<ICompanyApiProvider>(\n 'COMPANY_API_PROVIDER',\n {\n providedIn: 'root',\n factory: () => {\n throw new Error(\n 'COMPANY_API_PROVIDER not configured. Please provide an implementation in app.config.ts',\n );\n },\n },\n);\n\n/**\n * User Permission Provider Token\n *\n * Provides user permission assignment operations for IAM.\n */\nexport const USER_PERMISSION_PROVIDER =\n new InjectionToken<IUserPermissionProvider>('USER_PERMISSION_PROVIDER', {\n providedIn: 'root',\n factory: () => {\n throw new Error(\n 'USER_PERMISSION_PROVIDER not configured. Please provide an implementation in app.config.ts',\n );\n },\n });\n\n/**\n * Auth State Provider Token\n *\n * Provides auth state access for feature packages (form-builder, etc.)\n */\nexport const AUTH_STATE_PROVIDER =\n new InjectionToken<IAuthStateProvider>('AUTH_STATE_PROVIDER', {\n providedIn: 'root',\n factory: () => {\n throw new Error(\n 'AUTH_STATE_PROVIDER not configured. Please provide an implementation in app.config.ts',\n );\n },\n });\n\n/**\n * Profile Permission Provider Token\n *\n * Provides user permission data for profile display.\n * Optional - if not configured, profile permissions section is hidden.\n * Use with `inject(PROFILE_PERMISSION_PROVIDER, { optional: true })`.\n */\nexport const PROFILE_PERMISSION_PROVIDER =\n new InjectionToken<IProfilePermissionProvider>('PROFILE_PERMISSION_PROVIDER');\n\n/**\n * User List Provider Token\n *\n * Provides extra actions, columns, and data enrichment for user list.\n * Optional - if not configured, default user list behavior is used.\n * Use with `inject(USER_LIST_PROVIDER, { optional: true })`.\n *\n * @example\n * // In app.config.ts\n * providers: [\n * { provide: USER_LIST_PROVIDER, useClass: MyUserListProvider },\n * ]\n */\nexport const USER_LIST_PROVIDER =\n new InjectionToken<IUserListProvider<IUserListItem>>('USER_LIST_PROVIDER');\n\n/**\n * File Provider Token\n *\n * Provides file loading and upload functionality for file selectors.\n * Optional - if not configured, file selector requires loadFiles/uploadFile inputs.\n * Use with `inject(FILE_PROVIDER, { optional: true })`.\n *\n * @example\n * // In app.config.ts\n * providers: [\n * { provide: FILE_PROVIDER, useClass: StorageFileProvider },\n * ]\n */\nexport const FILE_PROVIDER = new InjectionToken<IFileProvider>('FILE_PROVIDER');\n","import {\n afterNextRender,\n computed,\n DestroyRef,\n Directive,\n effect,\n inject,\n Injector,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { firstValueFrom, map } from 'rxjs';\nimport { TRANSLATE_ADAPTER } from '@flusys/ng-core';\nimport { IDropDown } from '../../interfaces/common-data.interface';\nimport { IPagination } from '../../interfaces/filter-data.interface';\nimport {\n IUserBasicInfo,\n IUserProvider,\n IUserSelectFilter,\n LoadUsersFn,\n} from '../../interfaces/providers.interface';\nimport { USER_PROVIDER } from '../../tokens/provider.tokens';\n\nconst DEFAULT_PAGE_SIZE = 20;\n\n/**\n * Base class for user selection components.\n * Provides shared user loading, pagination, and search functionality.\n *\n * Subclasses must implement:\n * - `setupValueEffect()` to track value changes and emit selection events\n */\n@Directive()\nexport abstract class BaseUserSelectComponent {\n protected readonly destroyRef = inject(DestroyRef);\n protected readonly injector = inject(Injector);\n protected readonly userProvider = inject<IUserProvider>(USER_PROVIDER);\n protected readonly translateAdapter = inject(TRANSLATE_ADAPTER, { optional: true });\n protected abortController: AbortController | null = null;\n\n // Inputs\n readonly loadUsers = input<LoadUsersFn>();\n readonly placeHolder = input<string>('');\n readonly isEditMode = input.required<boolean>();\n readonly filterActive = input<boolean>(true);\n readonly additionalFilters = input<Record<string, unknown>>({});\n readonly pageSize = input<number>(DEFAULT_PAGE_SIZE);\n\n // Outputs\n readonly onError = output<Error>();\n\n // Internal state\n readonly isLoading = signal(false);\n readonly users = signal<IUserBasicInfo[]>([]);\n readonly total = signal<number | undefined>(undefined);\n readonly pagination = signal<IPagination>({ pageSize: DEFAULT_PAGE_SIZE, currentPage: 0 });\n readonly searchTerm = signal('');\n\n // Computed dropdown data\n readonly dropdownUsers = computed<IDropDown[]>(() =>\n this.users().map((user) => ({\n label: user.name || user.email,\n value: user.id,\n }))\n );\n\n // Computed placeholder with translation fallback\n readonly displayPlaceholder = computed(() => {\n const customPlaceholder = this.placeHolder();\n if (customPlaceholder) return customPlaceholder;\n return this.t('shared.user.select.placeholder');\n });\n\n constructor() {\n // Cleanup on destroy\n this.destroyRef.onDestroy(() => {\n this.abortController?.abort();\n });\n\n // Update page size from input\n effect(() => {\n const size = this.pageSize();\n untracked(() => {\n this.pagination.update((p) => ({ ...p, pageSize: size }));\n });\n });\n\n // Load initial users after render\n afterNextRender(() => {\n this.fetchUsers();\n });\n\n // Setup value change tracking (implemented by subclass)\n this.setupValueEffect();\n }\n\n /** Setup effect to track value changes and emit selection events */\n protected abstract setupValueEffect(): void;\n\n handleSearch(search: string): void {\n this.searchTerm.set(search);\n this.pagination.update((p) => ({ ...p, currentPage: 0 }));\n this.users.set([]);\n this.fetchUsers();\n }\n\n handlePagination(pagination: IPagination): void {\n this.pagination.set(pagination);\n this.fetchUsers(true);\n }\n\n /** Reload users (useful when filters change externally) */\n reload(): void {\n this.pagination.update((p) => ({ ...p, currentPage: 0 }));\n this.users.set([]);\n this.fetchUsers();\n }\n\n protected async fetchUsers(append = false): Promise<void> {\n if (this.isLoading()) return;\n\n // Cancel previous request\n this.abortController?.abort();\n this.abortController = new AbortController();\n\n this.isLoading.set(true);\n try {\n const pag = this.pagination();\n const filter: IUserSelectFilter = {\n page: pag.currentPage,\n pageSize: pag.pageSize,\n search: this.searchTerm(),\n ...this.additionalFilters(),\n };\n\n // Use custom loadUsers if provided, otherwise use USER_PROVIDER\n const customLoadUsers = this.loadUsers();\n const response = await firstValueFrom(\n customLoadUsers\n ? customLoadUsers(filter)\n : this.loadUsersFromProvider(filter)\n );\n\n if (response.success && response.data) {\n if (append) {\n this.users.update((current) => [...current, ...response.data!]);\n } else {\n this.users.set(response.data);\n }\n this.total.set(response.meta?.total);\n }\n } catch (error) {\n if ((error as Error).name !== 'AbortError') {\n this.onError.emit(error as Error);\n }\n } finally {\n this.isLoading.set(false);\n }\n }\n\n /** Load users from USER_PROVIDER with active filter */\n private loadUsersFromProvider(filter: IUserSelectFilter) {\n return this.userProvider\n .getUsers({\n page: filter.page,\n pageSize: filter.pageSize,\n search: filter.search,\n isActive: this.filterActive() ? true : undefined,\n })\n .pipe(\n map((res) => ({\n ...res,\n data: res.data?.map((u) => ({\n id: u.id,\n name: u.name,\n email: u.email,\n })),\n }))\n );\n }\n\n protected t(key: string, variables?: Record<string, string | number>): string {\n if (this.translateAdapter) {\n return this.translateAdapter.translate(key, variables);\n }\n return key;\n }\n}\n","import {\n Component,\n effect,\n model,\n output,\n untracked,\n} from '@angular/core';\nimport { AngularModule } from '../../modules/angular.module';\nimport { PrimeModule } from '../../modules/prime.module';\nimport { LazySelectComponent } from '../lazy-select/lazy-select.component';\nimport { IUserBasicInfo } from '../../interfaces/providers.interface';\nimport { BaseUserSelectComponent } from './base-user-select.class';\n\n/**\n * User Select Component - Single user selection with lazy loading.\n *\n * Uses USER_PROVIDER internally by default, or accepts custom `loadUsers` function.\n *\n * Features:\n * - Search with debouncing (handled by lazy-select)\n * - Infinite scroll pagination\n * - Filter active users by default (configurable)\n * - Supports additional filters via `additionalFilters` input\n *\n * @example\n * ```html\n * <!-- Simple usage - uses USER_PROVIDER internally -->\n * <lib-user-select\n * [(value)]=\"selectedUserId\"\n * [isEditMode]=\"true\"\n * />\n *\n * <!-- With custom loadUsers function -->\n * <lib-user-select\n * [(value)]=\"selectedUserId\"\n * [isEditMode]=\"true\"\n * [loadUsers]=\"customLoadUsers\"\n * />\n * ```\n */\n@Component({\n selector: 'lib-user-select',\n imports: [AngularModule, PrimeModule, LazySelectComponent],\n template: `\n <lib-lazy-select\n [(value)]=\"value\"\n [placeHolder]=\"displayPlaceholder()\"\n [optionLabel]=\"'label'\"\n [optionValue]=\"'value'\"\n [isEditMode]=\"isEditMode()\"\n [isLoading]=\"isLoading()\"\n [total]=\"total()\"\n [pagination]=\"pagination()\"\n [selectDataList]=\"dropdownUsers()\"\n (onSearch)=\"handleSearch($event)\"\n (onPagination)=\"handlePagination($event)\"\n />\n `,\n})\nexport class UserSelectComponent extends BaseUserSelectComponent {\n // Two-way bound value\n readonly value = model<string | null>(null);\n\n // Outputs\n readonly userSelected = output<IUserBasicInfo | null>();\n\n protected override setupValueEffect(): void {\n // Emit selected user when value changes\n effect(() => {\n const selectedId = this.value();\n const users = this.users();\n untracked(() => {\n if (selectedId) {\n const user = users.find((u) => u.id === selectedId);\n this.userSelected.emit(user ?? null);\n } else {\n this.userSelected.emit(null);\n }\n });\n });\n }\n}\n","import {\n Component,\n effect,\n model,\n output,\n untracked,\n} from '@angular/core';\nimport { AngularModule } from '../../modules/angular.module';\nimport { PrimeModule } from '../../modules/prime.module';\nimport { LazyMultiSelectComponent } from '../lazy-multi-select/lazy-multi-select.component';\nimport { IUserBasicInfo } from '../../interfaces/providers.interface';\nimport { BaseUserSelectComponent } from '../user-select/base-user-select.class';\n\n/**\n * User Multi-Select Component - Multiple user selection with lazy loading.\n *\n * Uses USER_PROVIDER internally by default, or accepts custom `loadUsers` function.\n *\n * Features:\n * - Search with debouncing (handled by lazy-multi-select)\n * - Infinite scroll pagination\n * - Select all / deselect all\n * - Filter active users by default (configurable)\n * - Supports additional filters via `additionalFilters` input\n *\n * @example\n * ```html\n * <!-- Simple usage - uses USER_PROVIDER internally -->\n * <lib-user-multi-select\n * [(value)]=\"selectedUserIds\"\n * [isEditMode]=\"true\"\n * />\n *\n * <!-- With custom loadUsers function -->\n * <lib-user-multi-select\n * [(value)]=\"selectedUserIds\"\n * [isEditMode]=\"true\"\n * [loadUsers]=\"customLoadUsers\"\n * />\n * ```\n */\n@Component({\n selector: 'lib-user-multi-select',\n imports: [AngularModule, PrimeModule, LazyMultiSelectComponent],\n template: `\n <lib-lazy-multi-select\n [(value)]=\"value\"\n [placeHolder]=\"displayPlaceholder()\"\n [isEditMode]=\"isEditMode()\"\n [isLoading]=\"isLoading()\"\n [total]=\"total()\"\n [pagination]=\"pagination()\"\n [selectDataList]=\"dropdownUsers()\"\n (onSearch)=\"handleSearch($event)\"\n (onPagination)=\"handlePagination($event)\"\n />\n `,\n})\nexport class UserMultiSelectComponent extends BaseUserSelectComponent {\n // Two-way bound value\n readonly value = model<string[] | null>(null);\n\n // Outputs\n readonly usersSelected = output<IUserBasicInfo[]>();\n\n protected override setupValueEffect(): void {\n // Emit selected users when value changes\n effect(() => {\n const selectedIds = this.value() ?? [];\n const users = this.users();\n untracked(() => {\n const selectedUsers = users.filter((u) => selectedIds.includes(u.id));\n this.usersSelected.emit(selectedUsers);\n });\n });\n }\n}\n","import {\n Component,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { MessageService } from 'primeng/api';\nimport { firstValueFrom } from 'rxjs';\nimport { TRANSLATE_ADAPTER } from '@flusys/ng-core';\nimport {\n FILE_TYPE_FILTERS,\n getAcceptString,\n getFileIconClass,\n IFileUploadOptions,\n isFileTypeAllowed,\n IUploadedFile,\n UploadFileFn,\n UploadMultipleFilesFn,\n} from '../../interfaces/file-select.interface';\nimport { AngularModule, PrimeModule } from '../../modules/public-api';\nimport { TranslatePipe } from '../../pipes/translate.pipe';\nimport { FILE_PROVIDER } from '../../tokens/provider.tokens';\n\n/**\n * File Uploader Component - Drag & drop file upload with type filtering.\n *\n * Uses FILE_PROVIDER when available (no inputs needed).\n * Optionally pass `uploadFile` to override the provider.\n *\n * @example\n * ```html\n * <!-- Using FILE_PROVIDER (recommended) -->\n * <lib-file-uploader\n * [acceptTypes]=\"['image/*']\"\n * (fileUploaded)=\"onFileUploaded($event)\"\n * />\n *\n * <!-- Custom upload function -->\n * <lib-file-uploader\n * [uploadFile]=\"customUploadFn\"\n * (fileUploaded)=\"onFileUploaded($event)\"\n * />\n * ```\n */\n@Component({\n selector: 'lib-file-uploader',\n imports: [AngularModule, PrimeModule, TranslatePipe],\n template: `\n @if (!hasUploadCapability()) {\n <div class=\"p-4 border border-dashed border-orange-300 bg-orange-50 dark:bg-orange-900/20 rounded-lg text-center\">\n <i class=\"pi pi-exclamation-triangle text-2xl text-orange-500 mb-2\"></i>\n <p class=\"text-sm text-orange-700 dark:text-orange-300\">\n {{ 'shared.upload.provider.not.configured' | translate: { provider: 'provideStorageProviders()' } }}\n </p>\n </div>\n } @else {\n <div\n class=\"w-full\"\n [class.opacity-60]=\"disabled()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <!-- Upload Area - Responsive padding -->\n <div\n class=\"upload-zone border-2 border-dashed rounded-lg p-4 sm:p-6 md:p-8 cursor-pointer transition-all duration-200 text-center\"\n [class.drag-over]=\"isDragOver()\"\n [class.cursor-not-allowed]=\"disabled()\"\n (click)=\"fileInput.click()\"\n >\n @if (isUploading()) {\n <div class=\"flex flex-col items-center\">\n <i class=\"pi pi-spin pi-spinner text-3xl sm:text-4xl text-primary\"></i>\n <p class=\"mt-2 text-sm sm:text-base break-all px-2\">{{ 'shared.upload.uploading' | translate: { fileName: uploadingFileName() } }}</p>\n @if (uploadProgress() > 0) {\n <p-progressBar\n [value]=\"uploadProgress()\"\n [showValue]=\"true\"\n class=\"w-full mt-2 max-w-xs\"\n />\n }\n </div>\n } @else {\n <div class=\"flex flex-col items-center\">\n <i class=\"pi pi-cloud-upload text-3xl sm:text-4xl text-primary\"></i>\n <p class=\"mt-2 mb-1 font-semibold text-sm sm:text-base\">\n {{ multiple() ? ('shared.upload.drop.multiple' | translate) : ('shared.upload.drop.single' | translate) }}\n </p>\n <p class=\"text-xs sm:text-sm text-color-secondary px-2\">\n @if (acceptTypesDisplay()) {\n {{ 'shared.upload.allowed.types' | translate }} {{ acceptTypesDisplay() }}\n } @else {\n {{ 'shared.upload.all.types.allowed' | translate }}\n }\n @if (maxSizeMb()) {\n <span class=\"whitespace-nowrap\">{{ 'shared.upload.max.size' | translate: { size: maxSizeMb() } }}</span>\n }\n </p>\n </div>\n }\n </div>\n\n <!-- Hidden File Input -->\n <input\n #fileInput\n type=\"file\"\n class=\"hidden\"\n [accept]=\"acceptString()\"\n [multiple]=\"multiple()\"\n [disabled]=\"disabled() || isUploading()\"\n (change)=\"onFileSelected($event)\"\n />\n\n <!-- Selected Files Preview - Responsive layout -->\n @if (selectedFiles().length > 0 && showPreview()) {\n <div class=\"mt-3 space-y-2\">\n @for (file of selectedFiles(); track file.name) {\n <div\n class=\"file-preview-item flex items-center gap-2 p-2 sm:p-3 rounded-lg\"\n >\n <i\n [class]=\"getFileIcon(file)\"\n class=\"text-lg sm:text-xl flex-shrink-0\"\n ></i>\n <span class=\"flex-1 truncate text-sm sm:text-base min-w-0\">{{\n file.name\n }}</span>\n <span\n class=\"text-xs sm:text-sm text-color-secondary whitespace-nowrap\"\n >{{ formatSize(file.size) }}</span\n >\n <p-button\n icon=\"pi pi-times\"\n [text]=\"true\"\n [rounded]=\"true\"\n size=\"small\"\n severity=\"secondary\"\n [disabled]=\"isUploading()\"\n (onClick)=\"removeFile(file)\"\n />\n </div>\n }\n </div>\n }\n </div>\n }\n `,\n styles: [\n `\n /* Upload zone - light mode */\n .upload-zone {\n border-color: var(--p-surface-300);\n background: var(--p-surface-50);\n }\n\n .upload-zone:hover:not(.cursor-not-allowed) {\n border-color: var(--p-primary-color);\n background: var(--p-surface-100);\n }\n\n .upload-zone.drag-over {\n border-color: var(--p-primary-color);\n background: var(--p-primary-50);\n }\n\n /* Upload zone - dark mode */\n :host-context(.p-dark) .upload-zone,\n .dark .upload-zone {\n border-color: var(--p-surface-600);\n background: var(--p-surface-800);\n }\n\n :host-context(.p-dark) .upload-zone:hover:not(.cursor-not-allowed),\n .dark .upload-zone:hover:not(.cursor-not-allowed) {\n border-color: var(--p-primary-color);\n background: var(--p-surface-700);\n }\n\n :host-context(.p-dark) .upload-zone.drag-over,\n .dark .upload-zone.drag-over {\n border-color: var(--p-primary-color);\n background: var(--p-primary-900);\n }\n\n /* File preview item */\n .file-preview-item {\n border: 1px solid var(--p-surface-200);\n background: var(--p-surface-0);\n }\n\n :host-context(.p-dark) .file-preview-item,\n .dark .file-preview-item {\n border-color: var(--p-surface-600);\n background: var(--p-surface-800);\n }\n `,\n ],\n})\nexport class FileUploaderComponent {\n private readonly messageService = inject(MessageService);\n private readonly translateAdapter = inject(TRANSLATE_ADAPTER, { optional: true });\n private readonly fileProvider = inject(FILE_PROVIDER, { optional: true });\n\n // Optional: custom upload function (overrides FILE_PROVIDER)\n readonly uploadFile = input<UploadFileFn>();\n\n // Optional: function to upload multiple files at once (more efficient)\n readonly uploadMultipleFiles = input<UploadMultipleFilesFn>();\n\n // Check if upload capability is available\n readonly hasUploadCapability = computed(() => !!this.uploadFile() || !!this.fileProvider);\n\n // Get effective upload function (input or provider)\n private getUploadFn(): UploadFileFn {\n const inputFn = this.uploadFile();\n if (inputFn) return inputFn;\n if (this.fileProvider)\n return (file, opts) => this.fileProvider!.uploadFile(file, opts);\n throw new Error('shared.file.uploader.no.upload.function');\n }\n\n // Get effective multiple upload function\n private getUploadMultipleFn(): UploadMultipleFilesFn | undefined {\n const inputFn = this.uploadMultipleFiles();\n if (inputFn) return inputFn;\n if (this.fileProvider?.uploadMultipleFiles) {\n return (files, opts) =>\n this.fileProvider!.uploadMultipleFiles!(files, opts);\n }\n return undefined;\n }\n\n // Inputs\n readonly acceptTypes = input<string[]>([]);\n readonly multiple = input<boolean>(false);\n readonly maxFiles = input<number>(10);\n readonly maxSizeMb = input<number>(10);\n readonly uploadOptions = input<IFileUploadOptions>({});\n readonly disabled = input<boolean>(false);\n readonly showPreview = input<boolean>(true);\n readonly autoUpload = input<boolean>(true);\n\n // Outputs\n readonly fileUploaded = output<IUploadedFile>();\n readonly filesUploaded = output<IUploadedFile[]>();\n readonly onError = output<Error>();\n readonly fileSelected = output<File[]>();\n\n // Internal state\n readonly isUploading = signal(false);\n readonly isDragOver = signal(false);\n readonly uploadProgress = signal(0);\n readonly uploadingFileName = signal('');\n readonly selectedFiles = signal<File[]>([]);\n\n // Computed\n readonly acceptString = computed(() => getAcceptString(this.acceptTypes()));\n readonly acceptTypesDisplay = computed(() => {\n const types = this.acceptTypes();\n if (!types.length) return '';\n\n // Check if types match predefined filters\n const typesStr = JSON.stringify(types);\n if (typesStr === JSON.stringify(FILE_TYPE_FILTERS.IMAGES)) return this.t('shared.file.type.images');\n if (typesStr === JSON.stringify(FILE_TYPE_FILTERS.DOCUMENTS)) return this.t('shared.file.type.documents');\n if (typesStr === JSON.stringify(FILE_TYPE_FILTERS.VIDEOS)) return this.t('shared.file.type.videos');\n if (typesStr === JSON.stringify(FILE_TYPE_FILTERS.AUDIO)) return this.t('shared.file.type.audio');\n\n return types.map((t) => t.split('/')[1] || t).join(', ');\n });\n\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.disabled() && !this.isUploading()) {\n this.isDragOver.set(true);\n }\n }\n\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(false);\n }\n\n onDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(false);\n\n if (this.disabled() || this.isUploading()) return;\n\n const files = event.dataTransfer?.files;\n if (files?.length) {\n this.handleFiles(Array.from(files));\n }\n }\n\n onFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n const files = input.files;\n if (files?.length) {\n this.handleFiles(Array.from(files));\n }\n // Reset input to allow selecting same file again\n input.value = '';\n }\n\n private handleFiles(files: File[]): void {\n // Filter by type\n const allowedTypes = this.acceptTypes();\n const validFiles = files.filter((file) => {\n if (!isFileTypeAllowed(file, allowedTypes)) {\n this.messageService.add({\n severity: 'warn',\n summary: this.t('shared.upload.invalid.type'),\n detail: `${file.name}`,\n });\n return false;\n }\n return true;\n });\n\n // Filter by size\n const maxSize = this.maxSizeMb() * 1024 * 1024;\n const sizeValidFiles = validFiles.filter((file) => {\n if (file.size > maxSize) {\n this.messageService.add({\n severity: 'warn',\n summary: this.t('shared.upload.file.too.large'),\n detail: `${file.name} (${this.maxSizeMb()}${this.t('shared.units.mb')})`,\n });\n return false;\n }\n return true;\n });\n\n // Limit number of files\n const limitedFiles = this.multiple()\n ? sizeValidFiles.slice(0, this.maxFiles())\n : sizeValidFiles.slice(0, 1);\n\n if (!limitedFiles.length) return;\n\n this.selectedFiles.set(limitedFiles);\n this.fileSelected.emit(limitedFiles);\n\n if (this.autoUpload()) {\n this.uploadFiles(limitedFiles);\n }\n }\n\n removeFile(file: File): void {\n this.selectedFiles.update((files) => files.filter((f) => f !== file));\n }\n\n async uploadFiles(files?: File[]): Promise<void> {\n const filesToUpload = files ?? this.selectedFiles();\n if (!filesToUpload.length || this.isUploading()) return;\n\n this.isUploading.set(true);\n\n try {\n const batchUploadFn = this.getUploadMultipleFn();\n\n // Use batch upload if available and multiple files\n if (batchUploadFn && filesToUpload.length > 1) {\n await this.uploadBatch(filesToUpload, batchUploadFn);\n } else {\n await this.uploadSequential(filesToUpload);\n }\n } catch (error) {\n this.onError.emit(error as Error);\n } finally {\n this.isUploading.set(false);\n this.uploadingFileName.set('');\n this.uploadProgress.set(0);\n }\n }\n\n private async uploadBatch(\n files: File[],\n uploadFn: UploadMultipleFilesFn,\n ): Promise<void> {\n this.uploadingFileName.set(`${files.length} ${this.t('shared.upload.files')}`);\n this.uploadProgress.set(0);\n\n const response = await firstValueFrom(\n uploadFn(files, this.uploadOptions()),\n );\n\n if (response.success && response.data) {\n response.data.forEach((file) => this.fileUploaded.emit(file));\n this.filesUploaded.emit(response.data);\n this.selectedFiles.set([]);\n\n this.messageService.add({\n severity: 'success',\n summary: this.t('shared.upload.complete'),\n detail: this.t('shared.upload.files.uploaded',{ count: response.data.length }),\n });\n } else {\n throw new Error(response.message || this.t('shared.upload.failed'));\n }\n }\n\n private async uploadSequential(files: File[]): Promise<void> {\n const uploadedFiles: IUploadedFile[] = [];\n const uploadFn = this.getUploadFn();\n\n for (const file of files) {\n this.uploadingFileName.set(file.name);\n this.uploadProgress.set(0);\n\n const response = await firstValueFrom(\n uploadFn(file, this.uploadOptions()),\n );\n\n if (response.success && response.data) {\n uploadedFiles.push(response.data);\n this.fileUploaded.emit(response.data);\n } else {\n throw new Error(response.message || this.t('shared.upload.failed'));\n }\n }\n\n this.filesUploaded.emit(uploadedFiles);\n this.selectedFiles.set([]);\n\n this.messageService.add({\n severity: 'success',\n summary: this.t('shared.upload.complete'),\n detail: this.t('shared.upload.files.uploaded',{ count: uploadedFiles.length }),\n });\n }\n\n getFileIcon(file: File): string {\n return getFileIconClass(file.type);\n }\n\n formatSize(bytes: number): string {\n const kb = bytes / 1024;\n if (kb < 1024) return `${kb.toFixed(1)} ${this.t('shared.units.kb')}`;\n const mb = kb / 1024;\n return `${mb.toFixed(1)} ${this.t('shared.units.mb')}`;\n }\n\n private t(key: string, variables?: Record<string, string | number>): string {\n if (this.translateAdapter) {\n return this.translateAdapter.translate(key, variables);\n }\n return key;\n }\n}\n","import {\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { TRANSLATE_ADAPTER } from '@flusys/ng-core';\nimport {\n formatFileSize,\n getFileIconClass,\n IFileBasicInfo,\n IFileSelectFilter,\n IFileUploadOptions,\n IFolderBasicInfo,\n ISelectFilter,\n IStorageConfigBasicInfo,\n IUploadedFile,\n} from '../../interfaces/file-select.interface';\nimport { IPagination } from '../../interfaces/filter-data.interface';\nimport { AngularModule, PrimeModule } from '../../modules/public-api';\nimport { TranslatePipe } from '../../pipes/translate.pipe';\nimport { FILE_PROVIDER } from '../../tokens/provider.tokens';\nimport { checkScrollPagination } from '../../utils/scroll-pagination.util';\nimport { FileUploaderComponent } from '../file-uploader/file-uploader.component';\n\nconst DEFAULT_PAGE_SIZE = 20;\nconst DEFAULT_SELECTOR_PAGE_SIZE = 50;\n\n/**\n * File Selector Dialog - Self-contained file browser with upload support.\n *\n * Uses FILE_PROVIDER internally - no external functions needed.\n * Just configure with inputs and handle selection events.\n *\n * Features:\n * - Search with debouncing\n * - File type filtering (acceptTypes)\n * - Folder filtering\n * - Infinite scroll pagination\n * - Single or multiple selection\n * - Built-in file upload (withUploader)\n * - File preview with icons\n *\n * @example\n * ```html\n * <lib-file-selector-dialog\n * [(visible)]=\"showSelector\"\n * [acceptTypes]=\"['image/*']\"\n * [multiple]=\"true\"\n * [withUploader]=\"true\"\n * (filesSelected)=\"onFilesSelected($event)\"\n * />\n * ```\n */\n@Component({\n selector: 'lib-file-selector-dialog',\n imports: [AngularModule, PrimeModule, FileUploaderComponent, TranslatePipe],\n template: `\n <p-dialog\n [header]=\"dialogHeader()\"\n [(visible)]=\"visible\"\n [modal]=\"true\"\n [closable]=\"true\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [breakpoints]=\"{ '960px': '90vw', '640px': '95vw' }\"\n [style]=\"{ width: '800px', maxWidth: '95vw', maxHeight: '90vh' }\"\n styleClass=\"file-selector-dialog\"\n (onHide)=\"onDialogHide()\"\n >\n @if (!fileProvider) {\n <div class=\"p-6 text-center\">\n <i\n class=\"pi pi-exclamation-triangle text-4xl text-orange-500 mb-3\"\n ></i>\n <p class=\"text-lg font-medium text-color mb-2\">\n {{ 'shared.file.selector.provider.not.configured' | translate }}\n </p>\n <p class=\"text-sm text-color-secondary mb-4\">\n {{ 'shared.file.selector.add.provider' | translate }}\n <code class=\"inline-block bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200 px-2 py-1 rounded font-mono text-xs\">provideStorageProviders()</code>\n </p>\n <button\n pButton\n [label]=\"'shared.close' | translate\"\n class=\"p-button-text\"\n (click)=\"onCancel()\"\n ></button>\n </div>\n } @else {\n <!-- Upload Section (when withUploader is enabled) -->\n @if (withUploader()) {\n <div class=\"mb-4\">\n <lib-file-uploader\n [uploadFile]=\"uploadFileFn\"\n [uploadMultipleFiles]=\"uploadMultipleFilesFn\"\n [uploadOptions]=\"{ storageConfigId: effectiveStorageConfigId() }\"\n [acceptTypes]=\"acceptTypes()\"\n [multiple]=\"multiple()\"\n [maxFiles]=\"maxSelection()\"\n [maxSizeMb]=\"10\"\n [showPreview]=\"false\"\n (fileUploaded)=\"onFileUploaded($event)\"\n />\n </div>\n }\n\n <!-- Filters Row - All on same line on desktop -->\n <div\n class=\"flex flex-col sm:flex-row gap-2 mb-3 items-stretch sm:items-center\"\n >\n <!-- Search -->\n <p-iconfield class=\"flex-1\">\n <p-inputicon class=\"pi pi-search\" />\n <input\n pInputText\n type=\"text\"\n [ngModel]=\"searchTerm()\"\n (ngModelChange)=\"onSearchChange($event)\"\n [placeholder]=\"'shared.file.selector.search.placeholder' | translate\"\n class=\"w-full\"\n />\n </p-iconfield>\n\n <!-- Folder Selector -->\n @if (fileProvider.loadFolders) {\n <p-select\n [options]=\"folders()\"\n [ngModel]=\"selectedFolderId()\"\n (ngModelChange)=\"onFolderChange($event)\"\n optionLabel=\"name\"\n optionValue=\"id\"\n [placeholder]=\"'shared.file.selector.all.folders' | translate\"\n [showClear]=\"true\"\n [filter]=\"true\"\n filterBy=\"name\"\n (onFilter)=\"onFolderSearch($event)\"\n [loading]=\"foldersLoading()\"\n class=\"w-full sm:w-40\"\n (onShow)=\"loadFolders()\"\n >\n <ng-template pTemplate=\"selectedItem\" let-folder>\n <div class=\"flex items-center gap-2\">\n <i class=\"pi pi-folder text-color-secondary\"></i>\n <span>{{ folder?.name }}</span>\n </div>\n </ng-template>\n <ng-template pTemplate=\"item\" let-folder>\n <div class=\"flex items-center gap-2\">\n <i class=\"pi pi-folder text-color-secondary\"></i>\n <span>{{ folder.name }}</span>\n </div>\n </ng-template>\n </p-select>\n }\n\n <!-- Storage Config Selector -->\n @if (fileProvider.loadStorageConfigs) {\n <p-select\n [options]=\"storageConfigs()\"\n [ngModel]=\"selectedStorageConfigId()\"\n (ngModelChange)=\"onStorageConfigChange($event)\"\n optionLabel=\"name\"\n optionValue=\"id\"\n [placeholder]=\"'shared.file.selector.all.storage' | translate\"\n [showClear]=\"true\"\n [filter]=\"true\"\n filterBy=\"name\"\n (onFilter)=\"onStorageConfigSearch($event)\"\n [loading]=\"storageConfigsLoading()\"\n class=\"w-full sm:w-40\"\n (onShow)=\"loadStorageConfigs()\"\n >\n <ng-template pTemplate=\"selectedItem\" let-config>\n <div class=\"flex items-center gap-2\">\n <i class=\"pi pi-database text-color-secondary\"></i>\n <span>{{ config?.name }}</span>\n @if (config?.isDefault) {\n <span\n class=\"text-xs bg-primary text-primary-contrast px-1 rounded\"\n >{{ 'shared.default' | translate }}</span\n >\n }\n </div>\n </ng-template>\n <ng-template pTemplate=\"item\" let-config>\n <div class=\"flex items-center gap-2\">\n <i class=\"pi pi-database text-color-secondary\"></i>\n <span>{{ config.name }}</span>\n @if (config.isDefault) {\n <span\n class=\"text-xs bg-primary text-primary-contrast px-1 rounded\"\n >{{ 'shared.default' | translate }}</span\n >\n }\n </div>\n </ng-template>\n </p-select>\n }\n\n <!-- Selected count -->\n @if (multiple()) {\n <span\n class=\"text-sm text-color-secondary self-center whitespace-nowrap\"\n >\n {{ 'shared.file.selector.selected' | translate: { count: selectedFiles().length } }}\n </span>\n }\n </div>\n\n <!-- File Grid - Responsive columns -->\n <div class=\"file-grid\" #scrollContainer (scroll)=\"onScroll($event)\">\n @if (isLoading() && files().length === 0) {\n <div class=\"col-span-full flex justify-center p-4\">\n <i\n class=\"pi pi-spin pi-spinner text-4xl text-color-secondary\"\n ></i>\n </div>\n } @else if (files().length === 0) {\n <div class=\"col-span-full text-center p-4 text-color-secondary\">\n <i class=\"pi pi-inbox text-4xl mb-2 block\"></i>\n <p>{{ 'shared.file.selector.no.files' | translate }}</p>\n </div>\n } @else {\n @for (file of files(); track file.id) {\n <div\n class=\"file-card\"\n [class.selected]=\"isSelected(file)\"\n [class.disabled]=\"!isFileAllowed(file)\"\n (click)=\"toggleSelection(file)\"\n >\n <!-- File Preview -->\n <div class=\"file-preview\">\n @if (isImage(file) && file.url) {\n <img\n [src]=\"file.url\"\n [alt]=\"file.name\"\n class=\"w-full h-full object-cover\"\n />\n } @else {\n <i\n [class]=\"getFileIcon(file)\"\n class=\"text-4xl sm:text-5xl text-color-secondary\"\n ></i>\n }\n @if (isSelected(file)) {\n <div class=\"selected-overlay\">\n <i class=\"pi pi-check text-xl sm:text-2xl\"></i>\n </div>\n }\n </div>\n\n <!-- File Info -->\n <div class=\"p-2 text-center bg-surface-0 dark:bg-surface-900\">\n <span\n class=\"block text-xs sm:text-sm whitespace-nowrap overflow-hidden text-ellipsis\"\n [title]=\"file.name\"\n >\n {{ file.name }}\n </span>\n <span class=\"block text-xs text-color-secondary\">{{\n formatSize(file.size)\n }}</span>\n </div>\n </div>\n }\n\n @if (isLoading()) {\n <div class=\"col-span-full flex justify-center p-2\">\n <i class=\"pi pi-spin pi-spinner text-color-secondary\"></i>\n </div>\n }\n }\n </div>\n\n <!-- Footer -->\n <ng-template pTemplate=\"footer\">\n <div\n class=\"flex flex-col-reverse sm:flex-row gap-2 w-full sm:w-auto sm:justify-end\"\n >\n <button\n pButton\n type=\"button\"\n [label]=\"'shared.cancel' | translate\"\n class=\"p-button-text w-full sm:w-auto\"\n (click)=\"onCancel()\"\n ></button>\n <button\n pButton\n type=\"button\"\n [label]=\"\n multiple()\n ? ('shared.file.selector.select.multiple' | translate: { count: selectedFiles().length })\n : ('shared.file.selector.select' | translate)\n \"\n [disabled]=\"selectedFiles().length === 0\"\n class=\"w-full sm:w-auto\"\n (click)=\"onConfirm()\"\n ></button>\n </div>\n </ng-template>\n }\n </p-dialog>\n `,\n styles: [\n `\n /* Responsive file grid */\n .file-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 0.75rem;\n max-height: 300px;\n overflow-y: auto;\n padding: 0.5rem;\n }\n\n @media (min-width: 480px) {\n .file-grid {\n grid-template-columns: repeat(3, 1fr);\n max-height: 350px;\n }\n }\n\n @media (min-width: 640px) {\n .file-grid {\n grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n gap: 1rem;\n max-height: 400px;\n }\n }\n\n /* File card styles */\n .file-card {\n border: 2px solid var(--p-surface-300);\n border-radius: var(--p-border-radius);\n cursor: pointer;\n transition: all 0.2s ease;\n overflow: hidden;\n background: var(--p-surface-0);\n }\n\n :host-context(.p-dark) .file-card,\n .dark .file-card {\n border-color: var(--p-surface-600);\n background: var(--p-surface-800);\n }\n\n .file-card:hover:not(.disabled) {\n border-color: var(--p-primary-color);\n transform: translateY(-2px);\n box-shadow: var(--p-overlay-shadow);\n }\n\n .file-card.selected {\n border-color: var(--p-primary-color);\n background: var(--p-primary-50);\n }\n\n :host-context(.p-dark) .file-card.selected,\n .dark .file-card.selected {\n background: var(--p-primary-900);\n }\n\n .file-card.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* File preview area */\n .file-preview {\n position: relative;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--p-surface-100);\n }\n\n @media (min-width: 640px) {\n .file-preview {\n height: 100px;\n }\n }\n\n :host-context(.p-dark) .file-preview,\n .dark .file-preview {\n background: var(--p-surface-700);\n }\n\n /* Selected overlay */\n .selected-overlay {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(var(--p-primary-500-rgb, 59, 130, 246), 0.3);\n }\n\n .selected-overlay i {\n color: var(--p-primary-color);\n background: var(--p-surface-0);\n border-radius: 50%;\n padding: 0.5rem;\n }\n\n :host-context(.p-dark) .selected-overlay i,\n .dark .selected-overlay i {\n background: var(--p-surface-900);\n }\n `,\n ],\n})\nexport class FileSelectorDialogComponent {\n private readonly destroyRef = inject(DestroyRef);\n private readonly translateAdapter = inject(TRANSLATE_ADAPTER, { optional: true });\n readonly fileProvider = inject(FILE_PROVIDER, { optional: true });\n private abortController: AbortController | null = null;\n private searchDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n // Configuration inputs\n readonly header = input<string>();\n readonly acceptTypes = input<string[]>([]);\n readonly multiple = input<boolean>(false);\n\n // Computed header - shows \"Select Files\" for multiple, allows custom override\n readonly dialogHeader = computed(() => {\n const customHeader = this.header();\n if (customHeader) return customHeader;\n return this.t(this.multiple() ? 'shared.file.selector.select.files' : 'shared.file.selector.select.file');\n });\n readonly maxSelection = input<number>(10);\n readonly pageSize = input<number>(DEFAULT_PAGE_SIZE);\n readonly folderId = input<string>(); // Filter by folder\n readonly withUploader = input<boolean>(false);\n\n // Two-way visibility binding\n readonly visible = model<boolean>(false);\n\n // Outputs - return file IDs\n readonly fileSelected = output<IFileBasicInfo>();\n readonly filesSelected = output<IFileBasicInfo[]>();\n readonly closed = output<void>();\n readonly onError = output<Error>();\n\n // Internal state\n readonly isLoading = signal(false);\n readonly files = signal<IFileBasicInfo[]>([]);\n readonly selectedFiles = signal<IFileBasicInfo[]>([]);\n readonly total = signal<number | undefined>(undefined);\n readonly pagination = signal<IPagination>({\n pageSize: DEFAULT_PAGE_SIZE,\n currentPage: 0,\n });\n readonly searchTerm = signal('');\n\n // Folder selector state\n readonly folders = signal<IFolderBasicInfo[]>([]);\n readonly selectedFolderId = signal<string | null>(null);\n readonly foldersLoading = signal(false);\n readonly foldersPagination = signal<IPagination>({\n pageSize: DEFAULT_SELECTOR_PAGE_SIZE,\n currentPage: 0,\n });\n readonly foldersTotal = signal<number | undefined>(undefined);\n\n // Storage config selector state\n readonly storageConfigs = signal<IStorageConfigBasicInfo[]>([]);\n readonly selectedStorageConfigId = signal<string | null>(null);\n readonly storageConfigsLoading = signal(false);\n readonly storageConfigsPagination = signal<IPagination>({\n pageSize: DEFAULT_SELECTOR_PAGE_SIZE,\n currentPage: 0,\n });\n readonly storageConfigsTotal = signal<number | undefined>(undefined);\n\n // Get effective storage config ID (selected or default)\n readonly effectiveStorageConfigId = computed(() => {\n const selected = this.selectedStorageConfigId();\n if (selected) return selected;\n // Find default config\n const defaultConfig = this.storageConfigs().find((c) => c.isDefault);\n return defaultConfig?.id;\n });\n\n // Upload function bound to provider\n readonly uploadFileFn = (file: File, options?: IFileUploadOptions) => {\n if (!this.fileProvider) throw new Error('shared.file.selector.provider.not.configured');\n return this.fileProvider.uploadFile(file, options);\n };\n\n // Multiple upload function bound to provider (optional)\n readonly uploadMultipleFilesFn = this.fileProvider?.uploadMultipleFiles\n ? (files: File[], options?: IFileUploadOptions) =>\n this.fileProvider!.uploadMultipleFiles!(files, options)\n : undefined;\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.abortController?.abort();\n if (this.searchDebounceTimer) {\n clearTimeout(this.searchDebounceTimer);\n }\n });\n\n // Load files and storage configs when dialog becomes visible\n effect(() => {\n const isVisible = this.visible();\n if (isVisible) {\n untracked(() => {\n this.resetState();\n this.fetchFiles();\n // Preload storage configs for upload default\n if (this.fileProvider?.loadStorageConfigs) {\n this.loadStorageConfigs();\n }\n });\n }\n });\n\n // Update page size from input\n effect(() => {\n const size = this.pageSize();\n untracked(() => {\n this.pagination.update((p) => ({ ...p, pageSize: size }));\n });\n });\n }\n\n onSearchChange(value: string): void {\n if (this.searchDebounceTimer) {\n clearTimeout(this.searchDebounceTimer);\n }\n\n this.searchDebounceTimer = setTimeout(() => {\n this.searchTerm.set(value);\n this.pagination.update((p) => ({ ...p, currentPage: 0 }));\n this.files.set([]);\n this.fetchFiles();\n }, 500);\n }\n\n onScroll(event: Event): void {\n const nextPagination = checkScrollPagination(event, {\n pagination: this.pagination(),\n total: this.total(),\n isLoading: this.isLoading(),\n });\n if (nextPagination) {\n this.pagination.set(nextPagination);\n this.fetchFiles(true);\n }\n }\n\n toggleSelection(file: IFileBasicInfo): void {\n if (!this.isFileAllowed(file)) return;\n\n if (this.multiple()) {\n const selected = this.selectedFiles();\n const isSelected = selected.some((f) => f.id === file.id);\n\n if (isSelected) {\n this.selectedFiles.update((files) =>\n files.filter((f) => f.id !== file.id),\n );\n } else if (selected.length < this.maxSelection()) {\n this.selectedFiles.update((files) => [...files, file]);\n }\n } else {\n this.selectedFiles.set([file]);\n }\n }\n\n isSelected(file: IFileBasicInfo): boolean {\n return this.selectedFiles().some((f) => f.id === file.id);\n }\n\n isFileAllowed(file: IFileBasicInfo): boolean {\n const allowedTypes = this.acceptTypes();\n if (!allowedTypes.length) return true;\n\n return allowedTypes.some((type) => {\n if (type.endsWith('/*')) {\n return file.contentType.startsWith(type.replace('/*', '/'));\n }\n return file.contentType === type;\n });\n }\n\n isImage(file: IFileBasicInfo): boolean {\n return file.contentType.startsWith('image/') && !!file.url;\n }\n\n getFileIcon(file: IFileBasicInfo): string {\n return getFileIconClass(file.contentType);\n }\n\n formatSize(size: string): string {\n return formatFileSize(size);\n }\n\n onCancel(): void {\n this.visible.set(false);\n }\n\n onConfirm(): void {\n const selected = this.selectedFiles();\n if (selected.length === 0) return;\n\n if (this.multiple()) {\n this.filesSelected.emit(selected);\n } else {\n this.fileSelected.emit(selected[0]);\n }\n\n this.visible.set(false);\n }\n\n onDialogHide(): void {\n this.closed.emit();\n }\n\n // Folder selector methods\n onFolderChange(folderId: string | null): void {\n this.selectedFolderId.set(folderId);\n this.pagination.update((p) => ({ ...p, currentPage: 0 }));\n this.files.set([]);\n this.fetchFiles();\n }\n\n onFolderSearch(event: { filter: string }): void {\n this.foldersPagination.update((p) => ({ ...p, currentPage: 0 }));\n this.loadFolders(event.filter);\n }\n\n async loadFolders(search = ''): Promise<void> {\n if (!this.fileProvider?.loadFolders || this.foldersLoading()) return;\n\n this.foldersLoading.set(true);\n try {\n const pag = this.foldersPagination();\n const filter: ISelectFilter = {\n page: pag.currentPage,\n pageSize: pag.pageSize,\n search,\n };\n\n const response = await firstValueFrom(\n this.fileProvider.loadFolders(filter),\n );\n if (response.success && response.data) {\n this.folders.set(response.data);\n this.foldersTotal.set(response.meta?.total);\n }\n } catch (error) {\n this.onError.emit(error as Error);\n } finally {\n this.foldersLoading.set(false);\n }\n }\n\n // Storage config selector methods\n onStorageConfigChange(configId: string | null): void {\n this.selectedStorageConfigId.set(configId);\n this.pagination.update((p) => ({ ...p, currentPage: 0 }));\n this.files.set([]);\n this.fetchFiles();\n }\n\n onStorageConfigSearch(event: { filter: string }): void {\n this.storageConfigsPagination.update((p) => ({ ...p, currentPage: 0 }));\n this.loadStorageConfigs(event.filter);\n }\n\n async loadStorageConfigs(search = ''): Promise<void> {\n if (!this.fileProvider?.loadStorageConfigs || this.storageConfigsLoading())\n return;\n\n this.storageConfigsLoading.set(true);\n try {\n const pag = this.storageConfigsPagination();\n const filter: ISelectFilter = {\n page: pag.currentPage,\n pageSize: pag.pageSize,\n search,\n };\n\n const response = await firstValueFrom(\n this.fileProvider.loadStorageConfigs(filter),\n );\n if (response.success && response.data) {\n this.storageConfigs.set(response.data);\n this.storageConfigsTotal.set(response.meta?.total);\n }\n } catch (error) {\n this.onError.emit(error as Error);\n } finally {\n this.storageConfigsLoading.set(false);\n }\n }\n\n onFileUploaded(uploadedFile: IUploadedFile): void {\n if (!uploadedFile.id) return;\n\n // Convert uploaded file to IFileBasicInfo\n const fileInfo: IFileBasicInfo = {\n id: uploadedFile.id,\n name: uploadedFile.name,\n contentType: uploadedFile.contentType,\n size: String(uploadedFile.size / 1024),\n url: null,\n };\n\n // Add to the beginning of files list\n this.files.update((current) => [fileInfo, ...current]);\n\n // Auto-select the uploaded file\n if (this.multiple()) {\n const selected = this.selectedFiles();\n if (selected.length < this.maxSelection()) {\n this.selectedFiles.update((files) => [...files, fileInfo]);\n }\n } else {\n this.selectedFiles.set([fileInfo]);\n }\n\n // Refresh files to get proper URLs\n this.fetchFiles();\n }\n\n private resetState(): void {\n // Cancel any pending request and reset loading state\n this.abortController?.abort();\n this.abortController = null;\n this.isLoading.set(false);\n\n this.files.set([]);\n this.selectedFiles.set([]);\n this.searchTerm.set('');\n this.pagination.set({ pageSize: this.pageSize(), currentPage: 0 });\n this.total.set(undefined);\n // Reset folder selector\n this.selectedFolderId.set(null);\n this.folders.set([]);\n this.foldersPagination.set({\n pageSize: DEFAULT_SELECTOR_PAGE_SIZE,\n currentPage: 0,\n });\n this.foldersTotal.set(undefined);\n // Reset storage config selector\n this.selectedStorageConfigId.set(null);\n this.storageConfigs.set([]);\n this.storageConfigsPagination.set({\n pageSize: DEFAULT_SELECTOR_PAGE_SIZE,\n currentPage: 0,\n });\n this.storageConfigsTotal.set(undefined);\n }\n\n private async fetchFiles(append = false): Promise<void> {\n if (!this.fileProvider || this.isLoading()) return;\n\n this.abortController?.abort();\n this.abortController = new AbortController();\n\n this.isLoading.set(true);\n try {\n const pag = this.pagination();\n const filter: IFileSelectFilter = {\n page: pag.currentPage,\n pageSize: pag.pageSize,\n search: this.searchTerm(),\n contentTypes: this.acceptTypes().length\n ? this.acceptTypes()\n : undefined,\n folderId: this.selectedFolderId() || this.folderId(),\n storageConfigId: this.selectedStorageConfigId() || undefined,\n };\n\n const response = await firstValueFrom(\n this.fileProvider.loadFiles(filter),\n );\n\n if (response.success && response.data) {\n let files = response.data;\n\n // Always fetch URLs for all files to get fresh presigned URLs\n if (this.fileProvider.getFileUrls && files.length > 0) {\n const fileIds = files.map((f) => f.id);\n const urlResponse = await firstValueFrom(\n this.fileProvider.getFileUrls(fileIds),\n );\n if (urlResponse.success && urlResponse.data) {\n // Merge URLs into files\n const urlMap = new Map(urlResponse.data.map((f) => [f.id, f.url]));\n files = files.map((f) => ({\n ...f,\n url: urlMap.get(f.id) ?? f.url,\n }));\n }\n }\n\n if (append) {\n this.files.update((current) => [...current, ...files]);\n } else {\n this.files.set(files);\n }\n this.total.set(response.meta?.total);\n }\n } catch (error) {\n if ((error as Error).name !== 'AbortError') {\n this.onError.emit(error as Error);\n }\n } finally {\n this.isLoading.set(false);\n }\n }\n\n private t(key: string, variables?: Record<string, string | number>): string {\n if (this.translateAdapter) {\n return this.translateAdapter.translate(key, variables);\n }\n return key;\n }\n}\n","import { inject, isDevMode } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { ILogicNode } from '../interfaces/common-data.interface';\nimport { PermissionValidatorService } from '../services/permission-validator.service';\nimport {\n evaluatePermission,\n hasAllPermissions,\n hasAnyPermission,\n} from '../utils/permission-evaluator.util';\n\ntype EvaluateFn = (userPermissions: string[]) => boolean;\n\nfunction createGuard(\n guardName: string,\n redirectTo: string,\n evaluate: EvaluateFn,\n getDenialMessage: () => string,\n): CanActivateFn {\n return () => {\n const permissionValidator = inject(PermissionValidatorService);\n const router = inject(Router);\n\n if (!permissionValidator.isPermissionsLoaded()) {\n if (isDevMode()) {\n console.log(`[${guardName}] Permissions not loaded, denying access`);\n }\n return router.createUrlTree([redirectTo]);\n }\n\n if (!evaluate(permissionValidator.permissions())) {\n if (isDevMode()) {\n console.log(`[${guardName}] ${getDenialMessage()}`);\n }\n return router.createUrlTree([redirectTo]);\n }\n\n return true;\n };\n}\n\n/**\n * Permission Guard - Single permission or ILogicNode check.\n *\n * @example\n * ```typescript\n * { path: 'users', canActivate: [permissionGuard('user.view')] }\n * { path: 'admin', canActivate: [permissionGuard(logicNode, '/access-denied')] }\n * ```\n */\nexport function permissionGuard(\n permission: string | ILogicNode,\n redirectTo = '/',\n): CanActivateFn {\n const code = typeof permission === 'string' ? permission : 'complex-logic';\n return createGuard(\n 'permissionGuard',\n redirectTo,\n (perms) => evaluatePermission(permission, perms),\n () => `Access denied - missing: ${code}`,\n );\n}\n\n/**\n * Any Permission Guard (OR logic) - Access if user has ANY permission.\n *\n * @example\n * ```typescript\n * { path: 'users', canActivate: [anyPermissionGuard(['user.view', 'user.create'])] }\n * ```\n */\nexport function anyPermissionGuard(\n permissions: string[],\n redirectTo = '/',\n): CanActivateFn {\n if (!permissions?.length) {\n return () => {\n if (isDevMode()) {\n console.log('[anyPermissionGuard] Empty permissions array, denying');\n }\n return inject(Router).createUrlTree([redirectTo]);\n };\n }\n return createGuard(\n 'anyPermissionGuard',\n redirectTo,\n (perms) => hasAnyPermission(permissions, perms),\n () => `Access denied - missing any of: ${permissions.join(', ')}`,\n );\n}\n\n/**\n * All Permissions Guard (AND logic) - Access only if user has ALL permissions.\n *\n * @example\n * ```typescript\n * { path: 'admin', canActivate: [allPermissionsGuard(['admin.view', 'admin.manage'])] }\n * ```\n */\nexport function allPermissionsGuard(\n permissions: string[],\n redirectTo = '/',\n): CanActivateFn {\n if (!permissions?.length) {\n return () => {\n if (isDevMode()) {\n console.log('[allPermissionsGuard] Empty permissions array, denying');\n }\n return inject(Router).createUrlTree([redirectTo]);\n };\n }\n return createGuard(\n 'allPermissionsGuard',\n redirectTo,\n (perms) => hasAllPermissions(permissions, perms),\n () => `Access denied - missing all of: ${permissions.join(', ')}`,\n );\n}\n","import {\n computed,\n DestroyRef,\n Directive,\n effect,\n inject,\n signal,\n Signal,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { TRANSLATE_ADAPTER } from '@flusys/ng-core';\nimport { MessageService } from 'primeng/api';\nimport { Observable } from 'rxjs';\n\n/**\n * Base class for form page components that handle create/edit operations.\n * Provides common functionality for loading existing items, form submission,\n * navigation, and toast notifications.\n *\n * ## Features\n * - Automatic route parameter handling (loads item when ID is present)\n * - Edit mode detection based on existing item\n * - Unified submit handler for create/update operations\n * - Cancel navigation\n * - Toast messages for success/validation errors\n *\n * ## Usage\n *\n * ```typescript\n * interface IProductFormModel {\n * name: string;\n * price: number;\n * }\n *\n * @Component({\n * selector: 'app-product-form',\n * standalone: true,\n * * template: `...`\n * })\n * export class ProductFormComponent extends BaseFormPage<IProduct, IProductFormModel> {\n * private readonly productService = inject(ProductApiService);\n *\n * // Form model signal (private writable, public readonly)\n * private readonly _formModel = signal<IProductFormModel>({ name: '', price: 0 });\n * readonly formModel = this._formModel.asReadonly();\n *\n * // Required abstract implementations\n * getFormModel(): Signal<IProductFormModel> {\n * return this.formModel;\n * }\n *\n * getResourceRoute(): string {\n * return '/products';\n * }\n *\n * getResourceName(): string {\n * return 'Product';\n * }\n *\n * isFormValid(): boolean {\n * const model = this.formModel();\n * return model.name.trim().length > 0 && model.price > 0;\n * }\n *\n * loadItem(id: string): void {\n * this.isLoading.set(true);\n * this.productService.findById(id)\n * .pipe(takeUntilDestroyed(this.destroyRef))\n * .subscribe({\n * next: (response) => {\n * if (response.success && response.data) {\n * this.existingItem.set(response.data);\n * this._formModel.set({\n * name: response.data.name,\n * price: response.data.price,\n * });\n * }\n * this.isLoading.set(false);\n * },\n * error: () => {\n * this.router.navigate([this.getResourceRoute()]);\n * this.isLoading.set(false);\n * },\n * });\n * }\n *\n * createItem(model: IProductFormModel): Observable<ISingleResponse<IProduct>> {\n * return this.productService.insert(model);\n * }\n *\n * updateItem(model: IProductFormModel): Observable<ISingleResponse<IProduct>> {\n * return this.productService.update({ id: this.existingItem()!.id, ...model });\n * }\n * }\n * ```\n *\n * @template T The entity/interface type being edited\n * @template TFormModel The form model interface\n */\n@Directive()\nexport abstract class BaseFormPage<T, TFormModel> {\n protected readonly router = inject(Router);\n protected readonly route = inject(ActivatedRoute);\n protected readonly messageService = inject(MessageService);\n protected readonly destroyRef = inject(DestroyRef);\n protected readonly translateAdapter = inject(TRANSLATE_ADAPTER, { optional: true });\n\n protected readonly routeParams = toSignal(this.route.paramMap);\n protected initialized = false;\n\n /** Loading state for async operations */\n readonly isLoading = signal(false);\n\n /** The existing item when in edit mode, null when creating */\n readonly existingItem = signal<T | null>(null);\n\n /** Whether the form is in edit mode (has existing item) */\n readonly isEditMode = computed(() => !!this.existingItem());\n\n /**\n * Get the form model signal.\n * Returns a readonly Signal - implementations should expose their\n * WritableSignal as readonly through this method.\n */\n abstract getFormModel(): Signal<TFormModel>;\n\n /**\n * Get the base route for the resource (used for navigation after save/cancel).\n * @example '/products' or '/administration/users'\n */\n abstract getResourceRoute(): string;\n\n /**\n * Get the display name of the resource for toast messages.\n * @example 'Product' or 'User'\n */\n abstract getResourceName(): string;\n\n /**\n * Validate the current form model.\n * Return true if the form is valid and can be submitted.\n */\n abstract isFormValid(): boolean;\n\n /**\n * Load an existing item by ID.\n * Should set existingItem and populate formModel on success.\n * Should handle loading state and navigation on error.\n */\n abstract loadItem(id: string): void;\n\n /**\n * Create a new item with the given form model.\n * Return an Observable that emits the API response.\n */\n abstract createItem(model: TFormModel): Observable<unknown>;\n\n /**\n * Update an existing item with the given form model.\n * Return an Observable that emits the API response.\n */\n abstract updateItem(model: TFormModel): Observable<unknown>;\n\n constructor() {\n effect(() => {\n const params = this.routeParams();\n if (!params || this.initialized) return;\n\n this.initialized = true;\n const id = params.get('id');\n if (id && id !== 'new') {\n this.loadItem(id);\n }\n });\n }\n\n /**\n * Handle form submission.\n * Validates the form, then calls createItem or updateItem based on mode.\n * Shows appropriate toast messages and navigates back on success.\n */\n onSubmit(): void {\n if (!this.isFormValid()) {\n this.showValidationError();\n return;\n }\n\n this.isLoading.set(true);\n const model = this.getFormModel()();\n\n const operation$ = this.isEditMode()\n ? this.updateItem(model)\n : this.createItem(model);\n\n operation$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe({\n next: () => {\n const messageKey = this.isEditMode() ? 'shared.update.success' : 'shared.create.success';\n this.showSuccess(this.t(messageKey));\n this.router.navigate([this.getResourceRoute()]);\n },\n error: () => {\n this.isLoading.set(false);\n },\n complete: () => {\n this.isLoading.set(false);\n },\n });\n }\n\n /**\n * Handle cancel action.\n * Navigates back to the resource list.\n */\n onCancel(): void {\n this.router.navigate([this.getResourceRoute()]);\n }\n\n /**\n * Show validation error toast.\n * Override to customize the validation error message.\n */\n protected showValidationError(): void {\n this.messageService.add({\n severity: 'error',\n summary: this.t('shared.validation.error'),\n detail: this.t('shared.fill.all.fields'),\n });\n }\n\n /**\n * Show success toast.\n * @param detail The success message to display\n */\n protected showSuccess(detail: string): void {\n this.messageService.add({\n severity: 'success',\n summary: this.t('shared.success'),\n detail,\n });\n }\n\n /**\n * Show error toast.\n * @param detail The error message to display\n */\n protected showError(detail: string): void {\n this.messageService.add({\n severity: 'error',\n summary: this.t('shared.error'),\n detail,\n });\n }\n\n /**\n * Translate a key using the adapter, fallback to key if not available.\n */\n protected t(key: string, variables?: Record<string, string | number>): string {\n return this.translateAdapter?.translate(key, variables) ?? key;\n }\n}\n","import { computed, DestroyRef, Directive, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Router } from '@angular/router';\nimport { APP_CONFIG, TRANSLATE_ADAPTER } from '@flusys/ng-core';\nimport { ConfirmationService, MessageService } from 'primeng/api';\nimport { Observable } from 'rxjs';\n\n/**\n * Base List Page\n * Abstract directive providing common signals, computed values, and utilities\n * for list page components across all feature packages.\n *\n * Features:\n * - Pagination state management (pageSize, currentPage, total)\n * - Loading state\n * - CRUD navigation helpers\n * - Message display utilities\n * - Delete confirmation with API integration\n * - Company feature flag support\n *\n * Usage:\n * ```typescript\n * @Component({ ... })\n * export class UserListComponent extends BaseListPage<IUser> {\n * getResourceRoute(): string { return '/users'; }\n * getDeleteConfirmMessage(user: IUser): string { return `Delete \"${user.name}\"?`; }\n * async loadData(): Promise<void> { ... }\n * }\n * ```\n */\n@Directive()\nexport abstract class BaseListPage<T> {\n protected readonly router = inject(Router);\n protected readonly messageService = inject(MessageService);\n protected readonly appConfig = inject(APP_CONFIG);\n protected readonly confirmationService = inject(ConfirmationService);\n protected readonly destroyRef = inject(DestroyRef);\n protected readonly translateAdapter = inject(TRANSLATE_ADAPTER, { optional: true });\n\n /** Items list */\n readonly items = signal<T[]>([]);\n\n /** Loading state */\n readonly isLoading = signal(false);\n\n /** Total records for pagination */\n readonly total = signal(0);\n\n /** Page size */\n readonly pageSize = signal(10);\n\n /** First record index (for p-table lazy load) */\n readonly first = signal(0);\n\n /** Current page (0-based for API, derived from first/pageSize) */\n readonly currentPage = computed(() => Math.floor(this.first() / this.pageSize()));\n\n /** Show company info if company feature enabled */\n readonly showCompanyInfo = computed(() => this.appConfig.enableCompanyFeature);\n\n /**\n * Abstract method to load data - must be implemented by subclass\n */\n abstract loadData(): Promise<void>;\n\n /**\n * Get the base route for this resource\n * Used for navigation to create/edit pages\n * @example '/administration/users' or '/storage/folders'\n */\n abstract getResourceRoute(): string;\n\n /**\n * Get the confirmation message for deleting an item\n * @param item The item to delete\n * @returns Confirmation message string\n */\n abstract getDeleteConfirmMessage(item: T): string;\n\n /**\n * Navigate to create page\n */\n onCreate(): void {\n this.router.navigate([this.getResourceRoute(), 'new']);\n }\n\n /**\n * Navigate to edit page\n * @param id The ID of the item to edit\n */\n onEdit(id: string): void {\n this.router.navigate([this.getResourceRoute(), id]);\n }\n\n /**\n * Handle page change from p-table lazy load\n */\n onPageChange(event: { first?: number | null; rows?: number | null }): void {\n this.first.set(event.first ?? 0);\n this.pageSize.set(event.rows ?? 10);\n this.loadData();\n }\n\n /**\n * Get pagination params for API call\n * Returns 0-based page for backend API\n */\n protected getPaginationParams(): { currentPage: number; pageSize: number } {\n return {\n currentPage: this.currentPage(),\n pageSize: this.pageSize(),\n };\n }\n\n /**\n * Show success toast message\n */\n protected showSuccess(detail: string, summary?: string): void {\n this.messageService.add({ severity: 'success', summary: summary ?? this.t('shared.success'), detail });\n }\n\n /**\n * Show error toast message\n */\n protected showError(detail: string, summary?: string): void {\n this.messageService.add({ severity: 'error', summary: summary ?? this.t('shared.error'), detail });\n }\n\n /**\n * Show info toast message\n */\n protected showInfo(detail: string, summary?: string): void {\n this.messageService.add({ severity: 'info', summary: summary ?? this.t('shared.info'), detail });\n }\n\n /**\n * Show warning toast message\n */\n protected showWarn(detail: string, summary?: string): void {\n this.messageService.add({ severity: 'warn', summary: summary ?? this.t('shared.warning'), detail });\n }\n\n /**\n * Translate a key using the adapter, fallback to key if not available.\n */\n protected t(key: string, variables?: Record<string, string | number>): string {\n return this.translateAdapter?.translate(key, variables) ?? key;\n }\n\n /**\n * Delete an item with confirmation dialog\n * @param item The item to delete\n * @param idGetter Function to extract ID from item\n * @param deleteApiCall Function that returns Observable for delete API call\n * @param options Optional configuration\n */\n onDelete(\n item: T,\n idGetter: (item: T) => string,\n deleteApiCall: (id: string) => Observable<unknown>,\n options?: {\n header?: string;\n successMessage?: string;\n errorMessage?: string;\n },\n ): void {\n this.confirmationService.confirm({\n message: this.getDeleteConfirmMessage(item),\n header: options?.header ?? this.t('shared.confirm.delete.header'),\n icon: 'pi pi-exclamation-triangle',\n acceptButtonStyleClass: 'p-button-danger',\n accept: () => {\n deleteApiCall(idGetter(item))\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: () => {\n this.showSuccess(options?.successMessage ?? this.t('shared.delete.success'));\n this.loadData();\n },\n error: () => {\n this.showError(options?.errorMessage ?? this.t('shared.delete.failed'));\n },\n });\n },\n });\n }\n\n /**\n * Delete an item with confirmation dialog using async/await\n * @param item The item to delete\n * @param idGetter Function to extract ID from item\n * @param deleteApiCall Async function for delete API call\n * @param options Optional configuration\n */\n async onDeleteAsync(\n item: T,\n idGetter: (item: T) => string,\n deleteApiCall: (id: string) => Promise<unknown>,\n options?: {\n header?: string;\n successMessage?: string;\n errorMessage?: string;\n },\n ): Promise<void> {\n this.confirmationService.confirm({\n message: this.getDeleteConfirmMessage(item),\n header: options?.header ?? this.t('shared.confirm.delete.header'),\n icon: 'pi pi-exclamation-triangle',\n acceptButtonStyleClass: 'p-button-danger',\n accept: async () => {\n try {\n await deleteApiCall(idGetter(item));\n this.showSuccess(options?.successMessage ?? this.t('shared.delete.success'));\n await this.loadData();\n } catch {\n this.showError(options?.errorMessage ?? this.t('shared.delete.failed'));\n }\n },\n });\n }\n\n /**\n * Navigate to a route\n */\n protected navigateTo(path: string[]): void {\n this.router.navigate(path);\n }\n}\n","// Constants\nexport * from './constants/permissions';\nexport * from './constants/messages';\n\n// Interfaces (consolidated)\nexport * from './interfaces/common-data.interface';\nexport * from './interfaces/filter-data.interface';\nexport * from './interfaces/response-payload.interface';\nexport * from './interfaces/file-select.interface';\nexport * from './interfaces/providers.interface';\n\n// Enums\nexport * from './enums/contact-type.enum';\nexport * from './enums/icon-type.enum';\n\n// Services\nexport * from './services/cookie.service';\nexport * from './services/file-url.service';\nexport * from './services/permission-validator.service';\nexport * from './services/platform.service';\n\n// Directives\nexport * from './directives/edit-mode-element-changer.directive';\nexport * from './directives/has-permission.directive';\nexport * from './directives/is-empty-image.directive';\nexport * from './directives/prevent-default.directive';\n\n// Pipes\nexport * from './pipes/translate.pipe';\n\n// Resolvers\nexport * from './resolvers/translation-module.resolver';\n\n// Providers\nexport * from './providers/fallback-localization.providers';\n\n// Modules\nexport * from './modules/angular.module';\nexport * from './modules/prime.module';\n\n// Classes\nexport * from './classes/api-resource.class';\nexport * from './classes/base-form-control.class';\n\n// Components\nexport * from './components/icon/icon.component';\nexport * from './components/lazy-multi-select/lazy-multi-select.component';\nexport * from './components/lazy-select/lazy-select.component';\nexport * from './components/user-select/base-user-select.class';\nexport * from './components/user-select/user-select.component';\nexport * from './components/user-multi-select/user-multi-select.component';\nexport * from './components/file-uploader/file-uploader.component';\nexport * from './components/file-selector-dialog/file-selector-dialog.component';\n\n// Tokens\nexport * from './tokens/provider.tokens';\n\n// Guards\nexport * from './guards/index';\n\n// Utils\nexport * from './utils/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.IsEmptyImageDirective","DOCUMENT","i1","DEFAULT_PAGE_SIZE","map","i2","i2.IsEmptyImageDirective","i3","i4","i8","i9"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,MAAM,gBAAgB,GAAG;AAC9B,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,MAAM,EAAE,aAAa;;AAGhB,MAAM,mBAAmB,GAAG;AACjC,IAAA,MAAM,EAAE,gBAAgB;AACxB,IAAA,IAAI,EAAE,cAAc;AACpB,IAAA,MAAM,EAAE,gBAAgB;AACxB,IAAA,MAAM,EAAE,gBAAgB;;AAGnB,MAAM,kBAAkB,GAAG;AAChC,IAAA,MAAM,EAAE,eAAe;AACvB,IAAA,IAAI,EAAE,aAAa;AACnB,IAAA,MAAM,EAAE,eAAe;AACvB,IAAA,MAAM,EAAE,eAAe;;AAGlB,MAAM,kBAAkB,GAAG;AAChC,IAAA,MAAM,EAAE,eAAe;AACvB,IAAA,IAAI,EAAE,aAAa;AACnB,IAAA,MAAM,EAAE,eAAe;AACvB,IAAA,MAAM,EAAE,eAAe;;AAGlB,MAAM,gBAAgB,GAAG;AAC9B,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,MAAM,EAAE,aAAa;;AAGhB,MAAM,uBAAuB,GAAG;AACrC,IAAA,IAAI,EAAE,kBAAkB;AACxB,IAAA,MAAM,EAAE,oBAAoB;;AAGvB,MAAM,qBAAqB,GAAG;AACnC,IAAA,IAAI,EAAE,gBAAgB;AACtB,IAAA,MAAM,EAAE,kBAAkB;;AAGrB,MAAM,uBAAuB,GAAG;AACrC,IAAA,IAAI,EAAE,kBAAkB;AACxB,IAAA,MAAM,EAAE,oBAAoB;;AAGvB,MAAM,0BAA0B,GAAG;AACxC,IAAA,IAAI,EAAE,qBAAqB;AAC3B,IAAA,MAAM,EAAE,uBAAuB;;AAG1B,MAAM,gBAAgB,GAAG;AAC9B,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,MAAM,EAAE,aAAa;;AAGhB,MAAM,kBAAkB,GAAG;AAChC,IAAA,MAAM,EAAE,eAAe;AACvB,IAAA,IAAI,EAAE,aAAa;AACnB,IAAA,MAAM,EAAE,eAAe;AACvB,IAAA,MAAM,EAAE,eAAe;;AAGlB,MAAM,0BAA0B,GAAG;AACxC,IAAA,MAAM,EAAE,uBAAuB;AAC/B,IAAA,IAAI,EAAE,qBAAqB;AAC3B,IAAA,MAAM,EAAE,uBAAuB;AAC/B,IAAA,MAAM,EAAE,uBAAuB;;AAG1B,MAAM,wBAAwB,GAAG;AACtC,IAAA,MAAM,EAAE,qBAAqB;AAC7B,IAAA,IAAI,EAAE,mBAAmB;AACzB,IAAA,MAAM,EAAE,qBAAqB;AAC7B,IAAA,MAAM,EAAE,qBAAqB;;AAGxB,MAAM,0BAA0B,GAAG;AACxC,IAAA,MAAM,EAAE,uBAAuB;AAC/B,IAAA,IAAI,EAAE,qBAAqB;AAC3B,IAAA,MAAM,EAAE,uBAAuB;AAC/B,IAAA,MAAM,EAAE,uBAAuB;;AAG1B,MAAM,gBAAgB,GAAG;AAC9B,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,MAAM,EAAE,aAAa;;AAGhB,MAAM,iBAAiB,GAAG;AAC/B,IAAA,MAAM,EAAE,cAAc;AACtB,IAAA,IAAI,EAAE,YAAY;AAClB,IAAA,MAAM,EAAE,cAAc;AACtB,IAAA,MAAM,EAAE,cAAc;;AAGjB,MAAM,6BAA6B,GAAG;AAC3C,IAAA,MAAM,EAAE,0BAA0B;AAClC,IAAA,IAAI,EAAE,wBAAwB;AAC9B,IAAA,MAAM,EAAE,0BAA0B;AAClC,IAAA,MAAM,EAAE,0BAA0B;;AAG7B,MAAM,wBAAwB,GAAG;AACtC,IAAA,MAAM,EAAE,qBAAqB;AAC7B,IAAA,IAAI,EAAE,mBAAmB;AACzB,IAAA,MAAM,EAAE,qBAAqB;AAC7B,IAAA,MAAM,EAAE,qBAAqB;;AAGxB,MAAM,oBAAoB,GAAG;AAClC,IAAA,MAAM,EAAE,iBAAiB;AACzB,IAAA,IAAI,EAAE,eAAe;AACrB,IAAA,MAAM,EAAE,iBAAiB;AACzB,IAAA,MAAM,EAAE,iBAAiB;;AAGpB,MAAM,2BAA2B,GAAG;AACzC,IAAA,MAAM,EAAE,wBAAwB;AAChC,IAAA,IAAI,EAAE,sBAAsB;AAC5B,IAAA,MAAM,EAAE,wBAAwB;AAChC,IAAA,MAAM,EAAE,wBAAwB;;AAG3B,MAAM,uBAAuB,GAAG;AACrC,IAAA,MAAM,EAAE,oBAAoB;AAC5B,IAAA,IAAI,EAAE,kBAAkB;AACxB,IAAA,MAAM,EAAE,oBAAoB;AAC5B,IAAA,MAAM,EAAE,oBAAoB;;AAGvB,MAAM,WAAW,GAAG;AACzB,IAAA,IAAI,EAAE,gBAAgB;AACtB,IAAA,OAAO,EAAE,mBAAmB;AAC5B,IAAA,MAAM,EAAE,kBAAkB;AAC1B,IAAA,MAAM,EAAE,kBAAkB;AAC1B,IAAA,IAAI,EAAE,gBAAgB;AACtB,IAAA,WAAW,EAAE,uBAAuB;AACpC,IAAA,SAAS,EAAE,qBAAqB;AAChC,IAAA,WAAW,EAAE,uBAAuB;AACpC,IAAA,cAAc,EAAE,0BAA0B;AAC1C,IAAA,IAAI,EAAE,gBAAgB;AACtB,IAAA,MAAM,EAAE,kBAAkB;AAC1B,IAAA,cAAc,EAAE,0BAA0B;AAC1C,IAAA,YAAY,EAAE,wBAAwB;AACtC,IAAA,cAAc,EAAE,0BAA0B;AAC1C,IAAA,IAAI,EAAE,gBAAgB;AACtB,IAAA,KAAK,EAAE,iBAAiB;AACxB,IAAA,iBAAiB,EAAE,6BAA6B;AAChD,IAAA,YAAY,EAAE,wBAAwB;AACtC,IAAA,QAAQ,EAAE,oBAAoB;AAC9B,IAAA,eAAe,EAAE,2BAA2B;AAC5C,IAAA,WAAW,EAAE,uBAAuB;;;AChK/B,MAAM,eAAe,GAA2B;;AAErD,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,eAAe,EAAE,QAAQ;AACzB,IAAA,eAAe,EAAE,QAAQ;AACzB,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,eAAe,EAAE,QAAQ;AACzB,IAAA,eAAe,EAAE,QAAQ;AACzB,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,eAAe,EAAE,QAAQ;AACzB,IAAA,cAAc,EAAE,OAAO;AACvB,IAAA,gBAAgB,EAAE,SAAS;AAC3B,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,iBAAiB,EAAE,UAAU;AAC7B,IAAA,eAAe,EAAE,QAAQ;AACzB,IAAA,cAAc,EAAE,OAAO;AACvB,IAAA,cAAc,EAAE,OAAO;AACvB,IAAA,eAAe,EAAE,QAAQ;AACzB,IAAA,eAAe,EAAE,QAAQ;AACzB,IAAA,gBAAgB,EAAE,SAAS;AAC3B,IAAA,eAAe,EAAE,QAAQ;AACzB,IAAA,eAAe,EAAE,QAAQ;AACzB,IAAA,iBAAiB,EAAE,UAAU;AAC7B,IAAA,eAAe,EAAE,QAAQ;AACzB,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,gBAAgB,EAAE,SAAS;AAC3B,IAAA,gBAAgB,EAAE,SAAS;AAC3B,IAAA,gBAAgB,EAAE,SAAS;AAC3B,IAAA,iBAAiB,EAAE,UAAU;AAC7B,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,iBAAiB,EAAE,UAAU;AAC7B,IAAA,qBAAqB,EAAE,cAAc;;AAGrC,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,oBAAoB,EAAE,aAAa;AACnC,IAAA,eAAe,EAAE,QAAQ;AACzB,IAAA,eAAe,EAAE,QAAQ;AACzB,IAAA,iBAAiB,EAAE,UAAU;AAC7B,IAAA,gBAAgB,EAAE,SAAS;AAC3B,IAAA,iBAAiB,EAAE,UAAU;AAC7B,IAAA,iBAAiB,EAAE,UAAU;AAC7B,IAAA,mBAAmB,EAAE,YAAY;AACjC,IAAA,kBAAkB,EAAE,WAAW;AAC/B,IAAA,iBAAiB,EAAE,UAAU;AAC7B,IAAA,qBAAqB,EAAE,cAAc;AACrC,IAAA,gBAAgB,EAAE,SAAS;AAC3B,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,mBAAmB,EAAE,YAAY;AACjC,IAAA,gBAAgB,EAAE,SAAS;AAC3B,IAAA,kBAAkB,EAAE,WAAW;AAC/B,IAAA,sBAAsB,EAAE,eAAe;AACvC,IAAA,kCAAkC,EAAE,qBAAqB;AACzD,IAAA,mBAAmB,EAAE,YAAY;AACjC,IAAA,mBAAmB,EAAE,YAAY;AACjC,IAAA,mBAAmB,EAAE,YAAY;AACjC,IAAA,mBAAmB,EAAE,YAAY;AACjC,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,cAAc,EAAE,OAAO;AACvB,IAAA,cAAc,EAAE,OAAO;AACvB,IAAA,gBAAgB,EAAE,SAAS;AAC3B,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,iBAAiB,EAAE,UAAU;AAC7B,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,eAAe,EAAE,QAAQ;AACzB,IAAA,cAAc,EAAE,OAAO;AACvB,IAAA,iBAAiB,EAAE,UAAU;AAC7B,IAAA,cAAc,EAAE,OAAO;AACvB,IAAA,iBAAiB,EAAE,UAAU;;AAG7B,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,gBAAgB,EAAE,SAAS;AAC3B,IAAA,8BAA8B,EAAE,gBAAgB;;AAGhD,IAAA,gBAAgB,EAAE,YAAY;AAC9B,IAAA,eAAe,EAAE,WAAW;AAC5B,IAAA,iBAAiB,EAAE,aAAa;AAChC,IAAA,mBAAmB,EAAE,eAAe;AACpC,IAAA,oBAAoB,EAAE,gBAAgB;;AAGtC,IAAA,gBAAgB,EAAE,SAAS;AAC3B,IAAA,0BAA0B,EAAE,kCAAkC;AAC9D,IAAA,qBAAqB,EAAE,oBAAoB;AAC3C,IAAA,uBAAuB,EAAE,sBAAsB;AAC/C,IAAA,uBAAuB,EAAE,sBAAsB;AAC/C,IAAA,uBAAuB,EAAE,sBAAsB;;AAG/C,IAAA,cAAc,EAAE,OAAO;AACvB,IAAA,yBAAyB,EAAE,kBAAkB;AAC7C,IAAA,oBAAoB,EAAE,gBAAgB;AACtC,IAAA,sBAAsB,EAAE,kBAAkB;AAC1C,IAAA,sBAAsB,EAAE,kBAAkB;AAC1C,IAAA,sBAAsB,EAAE,kBAAkB;AAC1C,IAAA,oBAAoB,EAAE,qBAAqB;AAC3C,IAAA,yBAAyB,EAAE,8BAA8B;AACzD,IAAA,sBAAsB,EAAE,8CAA8C;AACtE,IAAA,qBAAqB,EAAE,uCAAuC;;AAG9D,IAAA,iBAAiB,EAAE,wBAAwB;AAC3C,IAAA,sBAAsB,EAAE,oCAAoC;AAC5D,IAAA,sBAAsB,EAAE,mCAAmC;AAC3D,IAAA,mBAAmB,EAAE,qCAAqC;AAC1D,IAAA,mBAAmB,EAAE,oCAAoC;AACzD,IAAA,kBAAkB,EAAE,0BAA0B;AAC9C,IAAA,kBAAkB,EAAE,0BAA0B;AAC9C,IAAA,uBAAuB,EAAE,gBAAgB;AACzC,IAAA,0BAA0B,EAAE,wBAAwB;;AAGpD,IAAA,uBAAuB,EAAE,4CAA4C;AACrE,IAAA,4BAA4B,EAAE,6CAA6C;AAC3E,IAAA,gCAAgC,EAAE,kDAAkD;AACpF,IAAA,uBAAuB,EAAE,gEAAgE;AACzF,IAAA,uBAAuB,EAAE,mCAAmC;AAC5D,IAAA,wBAAwB,EAAE,2BAA2B;;AAGrD,IAAA,gBAAgB,EAAE,mBAAmB;AACrC,IAAA,mBAAmB,EAAE,kBAAkB;AACvC,IAAA,mBAAmB,EAAE,mBAAmB;AACxC,IAAA,0BAA0B,EAAE,mBAAmB;;AAG/C,IAAA,gBAAgB,EAAE,SAAS;AAC3B,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,cAAc,EAAE,OAAO;AACvB,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,sBAAsB,EAAE,eAAe;AACvC,IAAA,cAAc,EAAE,OAAO;AACvB,IAAA,aAAa,EAAE,MAAM;;AAGrB,IAAA,qBAAqB,EAAE,2BAA2B;AAClD,IAAA,0BAA0B,EAAE,sCAAsC;AAClE,IAAA,kBAAkB,EAAE,6BAA6B;AACjD,IAAA,sBAAsB,EAAE,8BAA8B;AACtD,IAAA,qBAAqB,EAAE,2BAA2B;AAClD,IAAA,0BAA0B,EAAE,sCAAsC;AAClE,IAAA,qBAAqB,EAAE,wCAAwC;AAC/D,IAAA,sBAAsB,EAAE,yCAAyC;;AAGjE,IAAA,0BAA0B,EAAE,aAAa;AACzC,IAAA,wBAAwB,EAAE,WAAW;AACrC,IAAA,uBAAuB,EAAE,UAAU;AACnC,IAAA,+BAA+B,EAAE,kBAAkB;AACnD,IAAA,2BAA2B,EAAE,cAAc;AAC3C,IAAA,kCAAkC,EAAE,qBAAqB;;AAGzD,IAAA,yBAAyB,EAAE,kBAAkB;AAC7C,IAAA,wBAAwB,EAAE,+CAA+C;AACzE,IAAA,6BAA6B,EAAE,oCAAoC;AACnE,IAAA,sBAAsB,EAAE,kBAAkB;AAC1C,IAAA,uBAAuB,EAAE,mBAAmB;AAC5C,IAAA,mBAAmB,EAAE,YAAY;AACjC,IAAA,qBAAqB,EAAE,cAAc;AACrC,IAAA,qBAAqB,EAAE,cAAc;AACrC,IAAA,4BAA4B,EAAE,uBAAuB;AACrD,IAAA,yBAAyB,EAAE,oCAAoC;AAC/D,IAAA,8BAA8B,EAAE,+CAA+C;AAC/E,IAAA,8BAA8B,EAAE,8CAA8C;AAC9E,IAAA,uBAAuB,EAAE,oCAAoC;AAC7D,IAAA,uBAAuB,EAAE,mCAAmC;AAC5D,IAAA,2BAA2B,EAAE,6BAA6B;AAC1D,IAAA,0BAA0B,EAAE,sBAAsB;AAClD,IAAA,kCAAkC,EAAE,8BAA8B;AAClE,IAAA,uBAAuB,EAAE,2BAA2B;AACpD,IAAA,eAAe,EAAE,WAAW;AAC5B,IAAA,sBAAsB,EAAE,kBAAkB;AAC1C,IAAA,qCAAqC,EAAE,wBAAwB;AAC/D,IAAA,iCAAiC,EAAE,oBAAoB;AACvD,IAAA,qCAAqC,EAAE,sBAAsB;;AAG7D,IAAA,6BAA6B,EAAE,oCAAoC;AACnE,IAAA,2BAA2B,EAAE,mCAAmC;AAChE,IAAA,6BAA6B,EAAE,UAAU;AACzC,IAAA,iCAAiC,EAAE,wBAAwB;AAC3D,IAAA,yBAAyB,EAAE,2BAA2B;AACtD,IAAA,wBAAwB,EAAE,kBAAkB;AAC5C,IAAA,4BAA4B,EAAE,mBAAmB;AACjD,IAAA,8BAA8B,EAAE,gBAAgB;AAChD,IAAA,wBAAwB,EAAE,iBAAiB;AAC3C,IAAA,qBAAqB,EAAE,OAAO;AAC9B,IAAA,8BAA8B,EAAE,yCAAyC;AACzE,IAAA,sBAAsB,EAAE,eAAe;AACvC,IAAA,uCAAuC,EAAE,kEAAkE;;AAG3G,IAAA,yBAAyB,EAAE,QAAQ;AACnC,IAAA,4BAA4B,EAAE,WAAW;AACzC,IAAA,yBAAyB,EAAE,QAAQ;AACnC,IAAA,wBAAwB,EAAE,OAAO;;AAGjC,IAAA,iBAAiB,EAAE,IAAI;AACvB,IAAA,iBAAiB,EAAE,IAAI;AACvB,IAAA,iBAAiB,EAAE,IAAI;AACvB,IAAA,iBAAiB,EAAE,IAAI;AACvB,IAAA,oBAAoB,EAAE,OAAO;;AAG7B,IAAA,yCAAyC,EAAE,iBAAiB;AAC5D,IAAA,+BAA+B,EAAE,gBAAgB;AACjD,IAAA,+BAA+B,EAAE,oBAAoB;AACrD,IAAA,sCAAsC,EAAE,oBAAoB;AAC5D,IAAA,6BAA6B,EAAE,QAAQ;AACvC,IAAA,qCAAqC,EAAE,aAAa;AACpD,IAAA,kCAAkC,EAAE,aAAa;AACjD,IAAA,mCAAmC,EAAE,cAAc;AACnD,IAAA,kCAAkC,EAAE,aAAa;AACjD,IAAA,kCAAkC,EAAE,aAAa;AACjD,IAAA,8CAA8C,EAAE,gCAAgC;AAChF,IAAA,mCAAmC,EAAE,KAAK;AAC1C,IAAA,gBAAgB,EAAE,SAAS;;AAG3B,IAAA,gCAAgC,EAAE,aAAa;AAC/C,IAAA,2BAA2B,EAAE,eAAe;AAC5C,IAAA,iCAAiC,EAAE,gBAAgB;AACnD,IAAA,oCAAoC,EAAE,0BAA0B;AAChE,IAAA,4BAA4B,EAAE,qBAAqB;AACnD,IAAA,wBAAwB,EAAE,oBAAoB;AAC9C,IAAA,sBAAsB,EAAE,kBAAkB;AAC1C,IAAA,wBAAwB,EAAE,iBAAiB;AAC3C,IAAA,eAAe,EAAE,QAAQ;AACzB,IAAA,kBAAkB,EAAE,WAAW;AAC/B,IAAA,kBAAkB,EAAE,WAAW;AAC/B,IAAA,qBAAqB,EAAE,cAAc;AACrC,IAAA,gCAAgC,EAAE,mBAAmB;;AAGrD,IAAA,eAAe,EAAE,mBAAmB;AACpC,IAAA,iBAAiB,EAAE,oBAAoB;AACvC,IAAA,kBAAkB,EAAE,mBAAmB;AACvC,IAAA,oBAAoB,EAAE,qBAAqB;AAC3C,IAAA,iBAAiB,EAAE,kBAAkB;AACrC,IAAA,gBAAgB,EAAE,mBAAmB;AACrC,IAAA,gBAAgB,EAAE,uBAAuB;AACzC,IAAA,2BAA2B,EAAE,iCAAiC;AAC9D,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,eAAe,EAAE,wBAAwB;AACzC,IAAA,qCAAqC,EAAE,oEAAoE;AAC3G,IAAA,gCAAgC,EAAE,+CAA+C;AACjF,IAAA,mCAAmC,EAAE,2CAA2C;AAChF,IAAA,4BAA4B,EAAE,qDAAqD;;AAGnF,IAAA,iCAAiC,EAAE,qCAAqC;AACxE,IAAA,iCAAiC,EAAE,2BAA2B;AAC9D,IAAA,sCAAsC,EAAE,sCAAsC;AAC9E,IAAA,8BAA8B,EAAE,gEAAgE;AAChG,IAAA,wBAAwB,EAAE,wBAAwB;AAClD,IAAA,uBAAuB,EAAE,gDAAgD;AACzE,IAAA,kBAAkB,EAAE,2BAA2B;AAC/C,IAAA,0BAA0B,EAAE,4BAA4B;AACxD,IAAA,0BAA0B,EAAE,mBAAmB;AAC/C,IAAA,yBAAyB,EAAE,iCAAiC;AAC5D,IAAA,+BAA+B,EAAE,sDAAsD;AACvF,IAAA,0BAA0B,EAAE,qCAAqC;AACjE,IAAA,0BAA0B,EAAE,gEAAgE;AAC5F,IAAA,gCAAgC,EAAE,yBAAyB;AAC3D,IAAA,yBAAyB,EAAE,kBAAkB;;AAG7C,IAAA,YAAY,EAAE,KAAK;;AAGnB,IAAA,uBAAuB,EAAE,kBAAkB;AAC3C,IAAA,8BAA8B,EAAE,kBAAkB;AAClD,IAAA,8BAA8B,EAAE,kBAAkB;AAClD,IAAA,2BAA2B,EAAE,oBAAoB;AACjD,IAAA,iCAAiC,EAAE,kBAAkB;AACrD,IAAA,gBAAgB,EAAE,QAAQ;AAC1B,IAAA,gBAAgB,EAAE,QAAQ;AAC1B,IAAA,gBAAgB,EAAE,QAAQ;AAC1B,IAAA,iBAAiB,EAAE,SAAS;AAC5B,IAAA,qBAAqB,EAAE,aAAa;AACpC,IAAA,eAAe,EAAE,OAAO;AACxB,IAAA,eAAe,EAAE,OAAO;AACxB,IAAA,qBAAqB,EAAE,IAAI;AAC3B,IAAA,2BAA2B,EAAE,GAAG;AAChC,IAAA,gBAAgB,EAAE,KAAK;AACvB,IAAA,gBAAgB,EAAE,IAAI;AACtB,IAAA,YAAY,EAAE,WAAW;AACzB,IAAA,aAAa,EAAE,uBAAuB;AACtC,IAAA,YAAY,EAAE,cAAc;AAC5B,IAAA,aAAa,EAAE,0BAA0B;AACzC,IAAA,iBAAiB,EAAE,SAAS;AAC5B,IAAA,qBAAqB,EAAE,aAAa;AACpC,IAAA,qBAAqB,EAAE,gBAAgB;AACvC,IAAA,oBAAoB,EAAE,eAAe;AACrC,IAAA,kBAAkB,EAAE,UAAU;AAC9B,IAAA,sBAAsB,EAAE,cAAc;AACtC,IAAA,qBAAqB,EAAE,aAAa;AACpC,IAAA,mBAAmB,EAAE,WAAW;AAChC,IAAA,gBAAgB,EAAE,QAAQ;AAC1B,IAAA,oBAAoB,EAAE,YAAY;AAClC,IAAA,mBAAmB,EAAE,WAAW;AAChC,IAAA,mBAAmB,EAAE,WAAW;AAChC,IAAA,mBAAmB,EAAE,WAAW;AAChC,IAAA,kBAAkB,EAAE,UAAU;AAC9B,IAAA,qBAAqB,EAAE,aAAa;AACpC,IAAA,eAAe,EAAE,OAAO;AACxB,IAAA,yBAAyB,EAAE,MAAM;AACjC,IAAA,0BAA0B,EAAE,OAAO;AACnC,IAAA,yBAAyB,EAAE,cAAc;AACzC,IAAA,mBAAmB,EAAE,QAAQ;AAC7B,IAAA,oBAAoB,EAAE,cAAc;AACpC,IAAA,yBAAyB,EAAE,oBAAoB;AAC/C,IAAA,2BAA2B,EAAE,sBAAsB;AACnD,IAAA,oBAAoB,EAAE,OAAO;AAC7B,IAAA,uBAAuB,EAAE,UAAU;AACnC,IAAA,mBAAmB,EAAE,MAAM;AAC3B,IAAA,yBAAyB,EAAE,YAAY;AACvC,IAAA,yBAAyB,EAAE,YAAY;AACvC,IAAA,uBAAuB,EAAE,UAAU;AACnC,IAAA,sBAAsB,EAAE,SAAS;AACjC,IAAA,wBAAwB,EAAE,WAAW;AACrC,IAAA,0BAA0B,EAAE,aAAa;AACzC,IAAA,6BAA6B,EAAE,gBAAgB;AAC/C,IAAA,6BAA6B,EAAE,gBAAgB;AAC/C,IAAA,iCAAiC,EAAE,oBAAoB;AACvD,IAAA,iCAAiC,EAAE,oBAAoB;AACvD,IAAA,yBAAyB,EAAE,aAAa;AACxC,IAAA,+BAA+B,EAAE,YAAY;AAC7C,IAAA,8BAA8B,EAAE,WAAW;AAC3C,IAAA,8BAA8B,EAAE,WAAW;AAC3C,IAAA,8BAA8B,EAAE,eAAe;AAC/C,IAAA,kCAAkC,EAAE,eAAe;AACnD,IAAA,0CAA0C,EAAE,uBAAuB;AACnE,IAAA,uCAAuC,EAAE,oBAAoB;AAC7D,IAAA,yBAAyB,EAAE,cAAc;AACzC,IAAA,2BAA2B,EAAE,gBAAgB;AAC7C,IAAA,yBAAyB,EAAE,cAAc;AACzC,IAAA,2BAA2B,EAAE,eAAe;AAC5C,IAAA,+BAA+B,EAAE,kBAAkB;AACnD,IAAA,+BAA+B,EAAE,kBAAkB;AACnD,IAAA,8BAA8B,EAAE,iBAAiB;AACjD,IAAA,gCAAgC,EAAE,mBAAmB;AACrD,IAAA,uBAAuB,EAAE,UAAU;AACnC,IAAA,wBAAwB,EAAE,WAAW;AACrC,IAAA,0BAA0B,EAAE,aAAa;AACzC,IAAA,wBAAwB,EAAE,WAAW;AACrC,IAAA,wBAAwB,EAAE,WAAW;AACrC,IAAA,oBAAoB,EAAE,OAAO;AAC7B,IAAA,2BAA2B,EAAE,eAAe;AAC5C,IAAA,yBAAyB,EAAE,YAAY;AACvC,IAAA,sBAAsB,EAAE,SAAS;AACjC,IAAA,uBAAuB,EAAE,UAAU;AACnC,IAAA,2BAA2B,EAAE,cAAc;AAC3C,IAAA,0BAA0B,EAAE,aAAa;;AAGzC,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,eAAe,EAAE,QAAQ;AACzB,IAAA,eAAe,EAAE,QAAQ;AACzB,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,eAAe,EAAE,QAAQ;AACzB,IAAA,eAAe,EAAE,QAAQ;AACzB,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,eAAe,EAAE,QAAQ;AACzB,IAAA,cAAc,EAAE,OAAO;AACvB,IAAA,gBAAgB,EAAE,SAAS;AAC3B,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,oBAAoB,EAAE,aAAa;AACnC,IAAA,eAAe,EAAE,QAAQ;AACzB,IAAA,eAAe,EAAE,QAAQ;AACzB,IAAA,iBAAiB,EAAE,UAAU;AAC7B,IAAA,gBAAgB,EAAE,SAAS;AAC3B,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,gBAAgB,EAAE,SAAS;AAC3B,IAAA,gBAAgB,EAAE,SAAS;AAC3B,IAAA,gBAAgB,EAAE,SAAS;AAC3B,IAAA,gBAAgB,EAAE,SAAS;AAC3B,IAAA,gBAAgB,EAAE,SAAS;AAC3B,IAAA,cAAc,EAAE,OAAO;AACvB,IAAA,mBAAmB,EAAE,YAAY;AACjC,IAAA,6BAA6B,EAAE,oCAAoC;;AAGnE,IAAA,yCAAyC,EAAE,oFAAoF;;;ACvUjI;AAEO,MAAM,iBAAiB,GAAG;IAC/B,MAAM,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,CAAC;AAC/E,IAAA,SAAS,EAAE;QACT,iBAAiB;QACjB,oBAAoB;QACpB,yEAAyE;QACzE,0BAA0B;QAC1B,mEAAmE;AACpE,KAAA;IACD,MAAM,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,CAAC;IACnE,KAAK,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC;AAC7D,IAAA,GAAG,EAAE,EAAc;;AAGrB;AAEM,SAAU,eAAe,CAAC,YAAsB,EAAA;AACpD,IAAA,OAAO,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK;AAC7D;AAEM,SAAU,iBAAiB,CAAC,IAAU,EAAE,YAAsB,EAAA;IAClE,IAAI,CAAC,YAAY,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;AACrC,IAAA,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,KAC5B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CACzF;AACH;AAEM,SAAU,gBAAgB,CAAC,WAAmB,EAAA;AAClD,IAAA,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC;AAAE,QAAA,OAAO,aAAa;AAC1D,IAAA,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC;AAAE,QAAA,OAAO,aAAa;AAC1D,IAAA,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC;AAAE,QAAA,OAAO,iBAAiB;AAC9D,IAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,gBAAgB;AACxD,IAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;AAAE,QAAA,OAAO,iBAAiB;AAC9F,IAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC;AAAE,QAAA,OAAO,kBAAkB;AACnG,IAAA,OAAO,YAAY;AACrB;AAEM,SAAU,cAAc,CAAC,QAAyB,EAAA;AACtD,IAAA,MAAM,EAAE,GAAG,OAAO,QAAQ,KAAK,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,QAAQ;IACzE,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,CAAA,EAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;AAC3C,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI;IACpB,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,CAAA,EAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;AAC3C,IAAA,OAAO,CAAA,EAAG,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA,GAAA,CAAK;AACvC;;IC7GY;AAAZ,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,eAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS;AACT,IAAA,eAAA,CAAA,eAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS;AACX,CAAC,EAHW,eAAe,KAAf,eAAe,GAAA,EAAA,CAAA,CAAA;;ICAf;AAAZ,CAAA,UAAY,YAAY,EAAA;AACtB,IAAA,YAAA,CAAA,YAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAgB;AAChB,IAAA,YAAA,CAAA,YAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,iBAAmB;AACnB,IAAA,YAAA,CAAA,YAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAkB;AACpB,CAAC,EAJW,YAAY,KAAZ,YAAY,GAAA,EAAA,CAAA,CAAA;;MCIX,eAAe,CAAA;AACT,IAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAEjD,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC;IAC1C;uGALW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADF,MAAM,EAAA,CAAA;;2FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCIrB,aAAa,CAAA;IAChB,GAAG,GAAG,MAAM,CAAW,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAE;AACrD,IAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;IAChC,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAE9D,GAAG,GAAA;AACD,QAAA,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;IACrG;uGAPW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA;;2FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACQD;;;AAGG;MAEU,cAAc,CAAA;AACR,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC;AAE9B,IAAA,MAAM,GAAG,MAAM,CAAgC,IAAI,GAAG,EAAE,kDAAC;AACjE,IAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;;AAGzC,IAAA,UAAU,CAAC,MAAiC,EAAA;AAC1C,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;AACxB,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,IAAI;IAC/C;;AAGA,IAAA,aAAa,CAAC,MAAiC,EAAA;AAC7C,QAAA,OAAO,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAChD;;AAGA,IAAA,aAAa,CACX,OAAiB,EACjB,YAAY,GAAG,KAAK,EAAA;QAEpB,IAAI,CAAC,OAAO,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC;AAElC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;QAC3B,MAAM,UAAU,GAAG;AACjB,cAAE;AACF,cAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAE1C,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YACtB,OAAO,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACvC;AAEA,QAAA,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAEnD,OAAO,IAAI,CAAC;AACT,aAAA,IAAI,CACH,CAAA,EAAG,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA,uBAAA,CAAyB,EACpE,UAAU;aAEX,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,EACtC,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EACtC,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,EACrC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CACzB;IACL;;AAGA,IAAA,kBAAkB,CAChB,MAAc,EACd,YAAY,GAAG,KAAK,EAAA;AAEpB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,IAAI,CACpD,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CACjC;IACH;;IAGA,UAAU,GAAA;QACR,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IAC5B;;AAGA,IAAA,eAAe,CAAC,MAAc,EAAA;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;AAC3B,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;AAC3B,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AACnB,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,UAAU,CAAC,KAAyB,EAAA;QAC1C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;AAC3B,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;AAC3B,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;YACzB;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,YAAY,CAAC,OAAiB,EAAA;AACpC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,OAAO;AACJ,aAAA,GAAG,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;aACzB,MAAM,CAAC,CAAC,CAAC,KAA4B,CAAC,KAAK,SAAS,CAAC;IAC1D;uGAxFW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cADD,MAAM,EAAA,CAAA;;2FACnB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AChBlC;;;;;;AAMG;AACG,SAAU,aAAa,CAC3B,kBAA0B,EAC1B,eAAyB,EAAA;;AAGzB,IAAA,IAAI,eAAe,CAAC,QAAQ,CAAC,kBAAkB,CAAC;AAAE,QAAA,OAAO,IAAI;;AAG7D,IAAA,KAAK,MAAM,UAAU,IAAI,eAAe,EAAE;;QAExC,IAAI,UAAU,KAAK,GAAG;AAAE,YAAA,OAAO,IAAI;;AAGnC,QAAA,IACE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;AACzB,YAAA,kBAAkB,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EACtD;AACA,YAAA,OAAO,IAAI;QACb;IACF;AAEA,IAAA,OAAO,KAAK;AACd;AAEA;AACM,SAAU,kBAAkB,CAChC,KAA6C,EAC7C,WAAqB,EAAA;AAErB,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,KAAK;IACxB,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,QAAA,OAAO,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC;AACvE,IAAA,OAAO,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC;AAC9C;AAEA;AACM,SAAU,iBAAiB,CAC/B,IAAgB,EAChB,WAAqB,EAAA;AAErB,IAAA,QAAQ,IAAI,CAAC,IAAI;AACf,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK;AAE1E,QAAA,KAAK,OAAO;YACV,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;AAAE,gBAAA,OAAO,KAAK;AAE9D,YAAA,OAAO,IAAI,CAAC,QAAQ,KAAK;AACvB,kBAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC;AACtE,kBAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAE1E,QAAA;AACE,YAAA,OAAO,KAAK;;AAElB;AAEA;AACM,SAAU,gBAAgB,CAC9B,eAAyB,EACzB,WAAqB,EAAA;IAErB,IAAI,CAAC,eAAe,EAAE,MAAM;AAAE,QAAA,OAAO,KAAK;AAC1C,IAAA,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACzE;AAEA;AACM,SAAU,iBAAiB,CAC/B,eAAyB,EACzB,WAAqB,EAAA;IAErB,IAAI,CAAC,eAAe,EAAE,MAAM;AAAE,QAAA,OAAO,KAAK;AAC1C,IAAA,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AAC1E;;AC7EA;;;AAGG;MAEU,0BAA0B,CAAA;AACpB,IAAA,YAAY,GAAG,MAAM,CAAW,EAAE,wDAAC;AAC3C,IAAA,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AAEpC,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;AACjC,IAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;;AAG/C,IAAA,cAAc,CAAC,WAAqB,EAAA;AAClC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC;AAClC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;IAC1B;;IAGA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;IAC3B;;AAGA,IAAA,aAAa,CAAC,IAAY,EAAA;QACxB,OAAO,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;IACjD;;IAGA,mBAAmB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE;IACzB;uGA3BW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cADb,MAAM,EAAA,CAAA;;2FACnB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCDrB,+BAA+B,CAAA;AACzB,IAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;IACvB,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEzD,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,qDAAW;AAE/C,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE;AAClC,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC5B,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC9B,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,aAAa,CAAC,QAAiB,EAAA;AACrC,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE;;AAC5C,YAAA,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE;IACxC;AAEQ,IAAA,aAAa,CAAC,QAAiB,EAAA;AACrC,QAAA,MAAM,YAAY,GAAgB,IAAI,CAAC,EAAE,CAAC,aAAa;AAEvD,QAAA,IAAI,YAAY,YAAY,gBAAgB,EAAE;YAC5C,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,YAAY,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC;AAC7C,gBAAA,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC;YACrD;iBAAO;AACL,gBAAA,YAAY,CAAC,eAAe,CAAC,UAAU,CAAC;AACxC,gBAAA,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,uBAAuB,CAAC;YACxD;QACF;AAEA,QAAA,IAAI,YAAY,CAAC,OAAO,KAAK,UAAU,EAAE;YACvC,MAAM,QAAQ,GAAG,YAAY,CAAC,aAAa,CAAc,oBAAoB,CAAC;YAC9E,MAAM,KAAK,GAAG,YAAY,CAAC,aAAa,CAAc,iBAAiB,CAAC;YACxE,IAAI,CAAC,QAAQ,EAAE;gBACb,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAuB,EAAE,iBAAiB,CAAC;AACtE,gBAAA,IAAI,QAAQ;AAAE,oBAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC7C,gBAAA,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAC/C;iBAAO;gBACL,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,uBAAuB,EAAE,iBAAiB,CAAC;AACzE,gBAAA,IAAI,QAAQ;AAAE,oBAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC7C,gBAAA,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,uBAAuB,CAAC;YAClD;QACF;AAEA,QAAA,IAAI,YAAY,CAAC,OAAO,KAAK,YAAY,EAAE;AACzC,YAAA,MAAM,UAAU,GAAG,YAAY,CAAC,iBAAiB;YACjD,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,uBAAuB,EAAE,aAAa,CAAC;AAC9E,gBAAA,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClD;iBAAO;AACL,gBAAA,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,uBAAuB,EAAE,aAAa,CAAC;AACjF,gBAAA,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;YACrD;QACF;IACF;uGAxDW,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAH3C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,6BAA6B;AACxC,iBAAA;;;ACOD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDG;MAIU,sBAAsB,CAAA;;AAGhB,IAAA,WAAW,GAAG,MAAM,EAAC,WAAoB,EAAC;AAC1C,IAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,IAAA,mBAAmB,GAAG,MAAM,CAAC,0BAA0B,CAAC;;AAIzE;;;;;AAKG;AACM,IAAA,aAAa,GAAG,KAAK,CAA6B,IAAI,yDAAC;AAEhE;;AAEG;IACK,WAAW,GAAG,KAAK;;AAI3B,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;;AAEV,YAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE;;AAGtC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;;AAGlC,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACxB,QAAA,CAAC,CAAC;IACJ;;AAIA;;AAEG;AACK,IAAA,UAAU,CAAC,KAAiC,EAAA;;QAElD,IAAI,CAAC,KAAK,EAAE;YACV,IAAI,CAAC,SAAS,EAAE;YAChB;QACF;;QAGA,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,EAAE;YACnD,IAAI,CAAC,SAAS,EAAE;YAChB;QACF;;AAGA,QAAA,MAAM,aAAa,GAAG,kBAAkB,CACtC,KAAK,EACL,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,CACvC;AAED,QAAA,IAAI,aAAa,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;;YAEtC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACvD,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACzB;AAAO,aAAA,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,EAAE;YAC7C,IAAI,CAAC,SAAS,EAAE;QAClB;IACF;AAEA;;AAEG;IACK,SAAS,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QAC1B;IACF;uGA/EW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC5B,iBAAA;;;MCtDY,qBAAqB,CAAA;AACvB,IAAA,GAAG,GAAG,KAAK,CAAS,EAAE,+CAAC;AACf,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,oDAAC;IACxB,UAAU,GAAG,6CAA6C;AAElE,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AAChC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,OAAO,IAAI,CAAC,UAAU;QACxB;AACA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE;QAC3B,OAAO,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC,UAAU;AAC9C,IAAA,CAAC,oDAAC;IAEF,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;IACzB;uGAfW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,EAAA,UAAA,EAAA,EAAA,KAAA,EAAA,YAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,YAAY;AACrB,wBAAA,SAAS,EAAE,WAAW;AACvB,qBAAA;AACF,iBAAA;;;MCEY,uBAAuB,CAAA;AACzB,IAAA,SAAS,GAAG,KAAK,CAAgC,OAAO,qDAAC;AACzD,IAAA,UAAU,GAAG,KAAK,CAAqB,SAAS,sDAAC;IACjD,MAAM,GAAG,MAAM,EAAS;AAEjC,IAAA,OAAO,CAAC,KAAiB,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,OAAO,EAAE;AAChC,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAC1B;IACF;AAEA,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,SAAS,EAAE;AAClC,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,EAAE,EAAE;AACzD,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAC1B;QACF;IACF;AAEA,IAAA,OAAO,CAAC,KAAoB,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,OAAO,EAAE;AAChC,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,EAAE,EAAE;AACzD,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAC1B;QACF;IACF;AAEQ,IAAA,YAAY,CAAC,KAAY,EAAA;QAC/B,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB;uGA9BW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBARnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,iBAAiB;AAC5B,wBAAA,WAAW,EAAE,mBAAmB;AAChC,wBAAA,SAAS,EAAE,iBAAiB;AAC7B,qBAAA;AACF,iBAAA;;;MCFY,aAAa,CAAA;IACP,gBAAgB,GAAG,MAAM,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAChE,gBAAgB,GAAG,MAAM,CAAC,0BAA0B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAE1F,SAAS,CAAC,GAAW,EAAE,MAAwC,EAAA;AAC7D,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC1B,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC;QAC1C;;;AAGA,QAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;QACpC,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC;IACrD;IAEQ,eAAe,CAAC,QAAgB,EAAE,MAAwC,EAAA;;AAEhF,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;YAC7C,IAAI,KAAK,EAAE;gBACT,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC;YACxC;QACF;;QAEA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3C;IAEQ,WAAW,CAAC,QAAgB,EAAE,MAAwC,EAAA;AAC5E,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,QAAQ;QAC5B,OAAO,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAI;AAC5D,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC9B,YAAA,OAAO,KAAK,KAAK,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK;AACpD,QAAA,CAAC,CAAC;IACJ;uGAhCW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,IAAI,EAAE,KAAK;AACZ,iBAAA;;;AC2CD,eAAe,2BAA2B,CAAC,QAAkB,EAAA;AAC3D,IAAA,IAAI;;AAEF,QAAA,MAAM,SAAS,GAAG,MAAM,OAAO,yBAAyB,CAAC;AACzD,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,mBAAmB,EAAE,IAAI,CAAC;AAChE,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;QAExB,OAAO;YACL,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC;YAC9D,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC;SAC3D;IACH;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,IAAI;IACb;AACF;AAEM,SAAU,wBAAwB,CACtC,MAA6B,EAAA;IAE7B,OAAO,YAAW;AAChB,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,QAAA,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM;;AAG5C,QAAA,MAAM,WAAW,GAAG,MAAM,2BAA2B,CAAC,QAAQ,CAAC;;QAG/D,IAAI,gBAAgB,EAAE;YACpB,IAAI,WAAW,EAAE;AACf,gBAAA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;oBACzB,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE;wBACxD,WAAW,CAAC,YAAY,CAAC,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,CAAC;oBAC5E;AACF,gBAAA,CAAC,CAAC;YACJ;iBAAO;gBACL,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,CAAC;gBAC/D,IAAI,QAAQ,EAAE;AACZ,oBAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;gBAC3C;YACF;QACF;AAEA,QAAA,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,IAAI;;QAG7B,MAAM,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC,mBAAmB,EAAE;QACnE,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAExF,QAAA,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;AAE3C,QAAA,IAAI;AACF,YAAA,MAAM,QAAQ,IAAI,MAAM,cAAc,CACpC,WAAW,CAAC,UAAU,CAAC,yBAAyB,CAAC,YAAY,EAAE,aAAa,CAAC,CAC9E,CAAyD;YAE1D,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,EAAE,IAAI,EAAE;gBACvC,WAAW,CAAC,YAAY,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC;AACzD,gBAAA,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAC5E;iBAAO,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,EAAE,EAAE;AAClD,gBAAA,OAAO,CAAC,IAAI,CACV,CAAA,0CAAA,EAA6C,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CACxE;YACH;QACF;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,SAAS,EAAE,EAAE;AACf,gBAAA,OAAO,CAAC,KAAK,CACX,CAAA,yCAAA,EAA4C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,EAChE,KAAK,CACN;YACH;QACF;AAEA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;AACH;;ACxHA;AACA,MAAM,8BAA8B,GAAG,CAAC,gBAAwC,MAAM;AACpF,IAAA,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC;AAC1B,IAAA,SAAS,EAAE,CAAC,GAAW,EAAE,MAAwC,KAAY;;AAE3E,QAAA,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC;QACnC,IAAI,KAAK,EAAE;;YAET,IAAI,MAAM,EAAE;gBACV,OAAO,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAI;AACzD,oBAAA,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC;AACnC,oBAAA,OAAO,UAAU,KAAK,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK;AAC9D,gBAAA,CAAC,CAAC;YACJ;AACA,YAAA,OAAO,KAAK;QACd;;AAEA,QAAA,OAAO,GAAG;IACZ,CAAC;AACF,CAAA,CAAC;AAEF;;;;;;;;;;AAUG;SACa,2BAA2B,GAAA;IACzC,OAAO;;AAEL,QAAA,EAAE,OAAO,EAAE,0BAA0B,EAAE,QAAQ,EAAE,EAAE,EAAE;;AAErD,QAAA;AACE,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,UAAU,EAAE,8BAA8B;YAC1C,IAAI,EAAE,CAAC,0BAA0B,CAAC;AACnC,SAAA;KACF;AACH;;MCba,aAAa,CAAA;uGAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,YAzBtB,YAAY;YACZ,WAAW;YACX,mBAAmB;YACnB,YAAY;YACZ,UAAU;YACV,gBAAgB;YAChB,qBAAqB;YACrB,gBAAgB;YAChB,iBAAiB;AACjB,YAAA,uBAAuB,aAIvB,YAAY;YACZ,WAAW;YACX,mBAAmB;YACnB,YAAY;YACZ,UAAU;YACV,gBAAgB;YAChB,qBAAqB;YACrB,gBAAgB;YAChB,iBAAiB;YACjB,uBAAuB,CAAA,EAAA,CAAA;AAGd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,EAAA,SAAA,EAdb,CAAC,QAAQ,CAAC,YAXnB,YAAY;YACZ,WAAW;AACX,YAAA,mBAAmB,EAWnB,YAAY;YACZ,WAAW;YACX,mBAAmB,CAAA,EAAA,CAAA;;2FAUV,aAAa,EAAA,UAAA,EAAA,CAAA;kBA3BzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,YAAY;wBACZ,UAAU;wBACV,gBAAgB;wBAChB,qBAAqB;wBACrB,gBAAgB;wBAChB,iBAAiB;wBACjB,uBAAuB;AACxB,qBAAA;oBACD,SAAS,EAAE,CAAC,QAAQ,CAAC;AACrB,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,YAAY;wBACZ,UAAU;wBACV,gBAAgB;wBAChB,qBAAqB;wBACrB,gBAAgB;wBAChB,iBAAiB;wBACjB,uBAAuB;AACxB,qBAAA;AACF,iBAAA;;;MCqDY,WAAW,CAAA;uGAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,YA1CpB,kBAAkB;YAClB,YAAY;YACZ,YAAY;YACZ,UAAU;YACV,cAAc;YACd,mBAAmB;YACnB,gBAAgB;YAChB,YAAY;YACZ,aAAa;YACb,gBAAgB;YAChB,eAAe;YACf,WAAW;YACX,eAAe;YACf,iBAAiB;YACjB,eAAe;YACf,aAAa;YACb,iBAAiB;YACjB,eAAe;YACf,WAAW;YACX,cAAc;YACd,aAAa;YACb,iBAAiB;YACjB,iBAAiB;YACjB,YAAY;YACZ,kBAAkB;YAClB,YAAY;YACZ,cAAc;YACd,iBAAiB;YACjB,WAAW;YACX,WAAW;YACX,UAAU;YACV,SAAS;YACT,cAAc;YACd,WAAW;YACX,kBAAkB;YAClB,kBAAkB;YAClB,aAAa;YACb,eAAe;YACf,qBAAqB;YACrB,iBAAiB,CAAA,EAAA,CAAA;AAGR,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,YA1CpB,kBAAkB;YAClB,YAAY;YACZ,YAAY;YACZ,UAAU;YACV,cAAc;YACd,mBAAmB;YACnB,gBAAgB;YAChB,YAAY;YACZ,aAAa;YACb,gBAAgB;YAChB,eAAe;YACf,WAAW;YACX,eAAe;YACf,iBAAiB;YACjB,eAAe;YACf,aAAa;YACb,iBAAiB;YACjB,eAAe;YACf,WAAW;YACX,cAAc;YACd,aAAa;YACb,iBAAiB;YACjB,iBAAiB;YACjB,YAAY;YACZ,kBAAkB;YAClB,YAAY;YACZ,cAAc;YACd,iBAAiB;YACjB,WAAW;YACX,WAAW;YACX,UAAU;YACV,SAAS;YACT,cAAc;YACd,WAAW;YACX,kBAAkB;YAClB,kBAAkB;YAClB,aAAa;YACb,eAAe;YACf,qBAAqB;YACrB,iBAAiB,CAAA,EAAA,CAAA;;2FAGR,WAAW,EAAA,UAAA,EAAA,CAAA;kBA5CvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,kBAAkB;wBAClB,YAAY;wBACZ,YAAY;wBACZ,UAAU;wBACV,cAAc;wBACd,mBAAmB;wBACnB,gBAAgB;wBAChB,YAAY;wBACZ,aAAa;wBACb,gBAAgB;wBAChB,eAAe;wBACf,WAAW;wBACX,eAAe;wBACf,iBAAiB;wBACjB,eAAe;wBACf,aAAa;wBACb,iBAAiB;wBACjB,eAAe;wBACf,WAAW;wBACX,cAAc;wBACd,aAAa;wBACb,iBAAiB;wBACjB,iBAAiB;wBACjB,YAAY;wBACZ,kBAAkB;wBAClB,YAAY;wBACZ,cAAc;wBACd,iBAAiB;wBACjB,WAAW;wBACX,WAAW;wBACX,UAAU;wBACV,SAAS;wBACT,cAAc;wBACd,WAAW;wBACX,kBAAkB;wBAClB,kBAAkB;wBAClB,aAAa;wBACb,eAAe;wBACf,qBAAqB;wBACrB,iBAAiB;AAClB,qBAAA;AACF,iBAAA;;;ACrDD;;;;;;;;;;;;;AAaG;MACmB,kBAAkB,CAAA;AACnB,IAAA,OAAO;AACP,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,IAAI;AACJ,IAAA,aAAa;AAEvB,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,sDAAC;IACvB,UAAU,GAAG,MAAM,CAAc;QACxC,UAAU,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;AAC5C,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,IAAI,EAAE,EAAE;AACT,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IAEM,aAAa,GAA8D,IAAI;IAC/E,oBAAoB,GAAG,KAAK;AACnB,IAAA,mBAAmB,GAAG,MAAM,CAAC,KAAK,+DAAC;AAEpD,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,IAAI,CAAC,gBAAgB,EAAE;QACzB;QACA,OAAO,IAAI,CAAC,aAAc;IAC5B;IAEA,gBAAgB,GAAA;QACd,IAAI,IAAI,CAAC,oBAAoB;YAAE;AAC/B,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAK;YACxC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,eAAA,EAAA,GAAA,EAAA,CAAA,EAC3B,MAAM,EAAE,OAAO;AACb,oBAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE;AACzB,oBAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE;iBAC1B,CAAC;gBACF,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAA,CAC5E;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;IACpC;AAES,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;QACjC,IAAI,CAAC,mBAAmB,EAAE;QAC1B,OAAO,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,IAAI,KAAK;AACjD,IAAA,CAAC,qDAAC;AAEO,IAAA,IAAI,GAAG,QAAQ,CAAC,MAAK;QAC5B,IAAI,CAAC,mBAAmB,EAAE;QAC1B,OAAO,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,EAAE;AAChD,IAAA,CAAC,gDAAC;AAEO,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;QAC7B,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;AACtD,IAAA,CAAC,iDAAC;AAEO,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;QAChC,IAAI,CAAC,mBAAmB,EAAE;QAC1B,OAAO,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,IAAI;AAC1C,IAAA,CAAC,oDAAC;AAEO,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;QAC/B,IAAI,CAAC,mBAAmB,EAAE;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,IAAI;AAC9C,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,KAAK;AACvB,QAAA,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK;AACrE,IAAA,CAAC,mDAAC;AAEF,IAAA,WAAA,CAAY,aAAqB,EAAE,IAAgB,EAAE,WAAyB,EAAA;QAC5E,IAAI,CAAC,aAAa,GAAG,aAAa,IAAI,WAAW,IAAI,KAAK;AAC1D,QAAA,MAAM,MAAM,GAAG,MAAM,CAAa,UAAU,CAAC;AAC7C,QAAA,MAAM,cAAc,GAAG,WAAW,GAAG,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,MAAM,CAAC,UAAU;AAC3F,QAAA,IAAI,CAAC,OAAO,GAAG,aAAa,GAAG,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,aAAa,CAAA,CAAE,GAAG,cAAc;AACpF,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;IAClB;IAEU,cAAc,CAAC,QAAgB,EAAE,MAAmB,EAAA;QAC5D,OAAO;AACL,YAAA,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,CAAA,EAAG,IAAI,CAAC,aAAa,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,EAAE,CAAC;AACjF,YAAA,IAAI,MAAM,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;SAC9B;IACH;;;;AAMA,IAAA,SAAS,CAAC,MAAA,GAAiB,EAAE,EAAE,MAA6B,EAAA;QAC1D,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;QAC3B,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QAC5D;IACF;AAEA,IAAA,aAAa,CAAC,UAAuB,EAAA;QACnC,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IAC7D;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,gBAAgB,EAAE;QACvB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM;AAChC,YAAA,GAAG,IAAI;AACP,YAAA,UAAU,EAAE;gBACV,GAAG,IAAI,CAAC,UAAW;gBACnB,WAAW,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,IAAI,CAAC,IAAI,CAAC;AACrD,aAAA;AACF,SAAA,CAAC,CAAC;IACL;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,gBAAgB,EAAE;QACvB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM;AAChC,YAAA,GAAG,IAAI;AACP,YAAA,UAAU,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,IAAI,EAAE,EAAE;AAC1E,SAAA,CAAC,CAAC;IACL;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE;IAC9B;;;;AAMA,IAAA,MAAM,CAAC,GAAS,EAAA;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,OAAO,SAAS,EACxB,GAAG,EACH,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAC9B;IACH;AAEA,IAAA,UAAU,CAAC,IAAY,EAAA;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,OAAO,cAAc,EAC7B,IAAI,EACJ,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CACnC;IACH;IAEA,QAAQ,CAAC,EAAU,EAAE,MAAiB,EAAA;QACpC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,KAAA,EAAQ,EAAE,CAAA,CAAE,EAC3B,EAAE,MAAM,EAAE,EACV,IAAI,CAAC,cAAc,CAAC,CAAA,IAAA,EAAO,EAAE,CAAA,CAAE,CAAC,CACjC;IACH;IAEA,MAAM,CAAC,MAAc,EAAE,MAAmB,EAAA;AACxC,QAAA,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE;QAC7B,IAAI,MAAM,EAAE;YACV,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC;QACrC;QACA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,QAAA,CAAU,EACzB,MAAM,EACN,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CACvC;IACH;AAEA,IAAA,MAAM,CAAC,GAAS,EAAA;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,OAAO,SAAS,EACxB,GAAG,EACH,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAC9B;IACH;AAEA,IAAA,UAAU,CAAC,IAAY,EAAA;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,OAAO,cAAc,EAC7B,IAAI,EACJ,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CACnC;IACH;AAEA,IAAA,MAAM,CAAC,SAAsB,EAAA;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,OAAO,SAAS,EACxB,SAAS,EACT,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAC9B;IACH;;;;AAMA,IAAA,MAAM,WAAW,CAAC,MAAmB,EAAE,SAAiB,EAAE,EAAA;QACxD,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpD;AAEA,IAAA,MAAM,aAAa,CAAC,EAAU,EAAE,MAAiB,EAAA;QAC/C,OAAO,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAClD;IAEA,MAAM,WAAW,CAAC,GAAS,EAAA;QACzB,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzC;IAEA,MAAM,eAAe,CAAC,IAAY,EAAA;QAChC,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9C;IAEA,MAAM,WAAW,CAAC,GAAS,EAAA;QACzB,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzC;IAEA,MAAM,eAAe,CAAC,IAAY,EAAA;QAChC,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9C;IAEA,MAAM,WAAW,CAAC,SAAsB,EAAA;QACtC,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC/C;AACD;;ACzPD;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BG;MAEmB,eAAe,CAAA;AAChB,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAU9C;;;AAGG;AACM,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;AAEzC;;;AAGG;AACM,IAAA,OAAO,GAAG,KAAK,CAAU,KAAK,mDAAC;AAEhC,IAAA,QAAQ,GAAuB,MAAK,EAAE,CAAC;AACvC,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;IAChC,cAAc,GAAG,KAAK;AAE9B;;;;;;AAMG;IACO,qBAAqB,GAAA;AAC7B,QAAA,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAK;YACxC,MAAM,CAAC,MAAK;AACV,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;AACjC,gBAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;oBACxB,SAAS,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBAC9C;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;;;;;;AAQA,IAAA,UAAU,CAAC,KAAQ,EAAA;AACjB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;IAC7B;;AAGA,IAAA,gBAAgB,CAAC,EAAsB,EAAA;AACrC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;;AAGA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;;AAGA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC/B;;;;;;;;;IAWU,aAAa,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB,IAAI,CAAC,SAAS,EAAE;QAClB;IACF;uGAtFoB,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBADpC;;AA0FD;;;;;;;;;;;AAWG;AACG,SAAU,oBAAoB,CAA6D,SAAY,EAAA;IAC3G,OAAO;AACL,QAAA,OAAO,EAAE,iBAAiB;AAC1B,QAAA,WAAW,EAAE,UAAU,CAAC,MAAM,SAAS,CAAC;AACxC,QAAA,KAAK,EAAE;KACR;AACH;;MCnIa,aAAa,CAAA;AACxB,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAU;AAC/B,IAAA,QAAQ,GAAG,KAAK,CAA2B,YAAY,CAAC,YAAY,oDAAC;AAClD,IAAA,YAAY,GAAG,YAAY,CAAC;uGAHpC,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAZd;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAXS,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,qBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAaZ,aAAa,EAAA,UAAA,EAAA,CAAA;kBAfzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,UAAU;oBACpB,OAAO,EAAE,CAAC,aAAa,CAAC;AACxB,oBAAA,QAAQ,EAAE;;;;;;;;;;AAUT,EAAA,CAAA;AACF,iBAAA;;;ACFD;;;;;;;;;;;;;;;;;AAiBG;AACG,SAAU,qBAAqB,CACnC,KAAY,EACZ,MAA8B,EAAA;AAE9B,IAAA,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM;AACvB,IAAA,IAAI,EAAE,EAAE,YAAY,WAAW,CAAC;AAAE,QAAA,OAAO,IAAI;AAE7C,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE;AACxC,IAAA,MAAM,UAAU,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,YAAY,GAAG,SAAS;AAEhF,IAAA,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,SAAS;AAAE,QAAA,OAAO,IAAI;AAEhD,IAAA,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,MAAM;AACpC,IAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,GAAG,CAAC;AAC3C,IAAA,MAAM,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC,QAAQ,IAAI,KAAK,IAAI,CAAC,CAAC;AAE7D,IAAA,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,IAAI;IAEzB,OAAO,EAAE,GAAG,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE;AACjD;;ACvBA;;;;;;;AAOG;AASG,MAAO,wBACX,SAAQ,eAAgC,CAAA;AAGvB,IAAA,QAAQ,GAAG,MAAM,CAACC,UAAQ,CAAC;AAC3B,IAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;IAC/B,gBAAgB,GAAG,MAAM,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAChE,oBAAoB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGlE,IAAA,UAAU,GACjB,SAAS,CAAC,QAAQ,CAA6B,SAAS,CAAC;AAClD,IAAA,eAAe,GACtB,SAAS,CAAC,QAAQ,CAAuB,YAAY,CAAC;;IAGhD,cAAc,GAAoC,IAAI;;AAGrD,IAAA,WAAW,GAAG,KAAK,CAAS,EAAE,uDAAC;;AAG/B,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,EAAE;AAC5C,QAAA,IAAI,iBAAiB;AAAE,YAAA,OAAO,iBAAiB;AAC/C,QAAA,OAAO,IAAI,CAAC,CAAC,CAAC,iCAAiC,CAAC;AAClD,IAAA,CAAC,8DAAC;AACO,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,qDAAW;AACtC,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAW;AACrC,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAsB;AAC5C,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,qDAAe;AAC1C,IAAA,cAAc,GAAG,KAAK,CAAC,QAAQ,yDAAoB;;AAG1C,IAAA,KAAK,GAAG,KAAK,CAAkB,IAAI,iDAAC;;IAG7C,QAAQ,GAAG,MAAM,EAAU;IAC3B,YAAY,GAAG,MAAM,EAAe;;AAGpC,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,sDAAC;AACvB,IAAA,WAAW,GAAG,MAAM,CAAC,KAAK,uDAAC;;AAG3B,IAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAK;QAC5C,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;AACzC,QAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE;AAC1C,QAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,OAAO,IAAI,CAAC,CAAC,CAAC,oCAAoC,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC;QACvF;QACA,OAAO,IAAI,CAAC,cAAc;AACvB,aAAA,MAAM,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;aACpD,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK;aACxB,IAAI,CAAC,IAAI,CAAC;AACf,IAAA,CAAC,gEAAC;AAEO,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;QACnC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;AACzC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC;QACjE,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;AACvE,QAAA,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC/D,IAAA,CAAC,uDAAC;AAEF,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QACP,IAAI,CAAC,qBAAqB,EAAE;;QAG5B,IAAI,eAAe,GAAyC,IAAI;AAChE,QAAA,IAAI,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE;AAErC,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACnB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE;;YAGtC,IAAI,YAAY,KAAK,aAAa;gBAAE;YACpC,aAAa,GAAG,YAAY;;AAG5B,YAAA,IAAI,eAAe;gBAAE,YAAY,CAAC,eAAe,CAAC;;AAGlD,YAAA,eAAe,GAAG,UAAU,CAAC,MAAK;AAChC,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;YAClC,CAAC,EAAE,GAAG,CAAC;YAEP,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,eAAe;oBAAE,YAAY,CAAC,eAAe,CAAC;AACpD,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;;AAGF,QAAA,eAAe,CAAC;YACd,KAAK,EAAE,MAAK;gBACV,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC;YACpE,CAAC;AACF,SAAA,CAAC;IACJ;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC;QACrE,IAAI,CAAC,YAAY,EAAE;IACrB;AAEA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,cAAc,GAAG,qBAAqB,CAAC,KAAK,EAAE;AAClD,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC5B,SAAA,CAAC;QACF,IAAI,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;QACxC;IACF;IAEA,aAAa,GAAA;QACX,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAAE;AAE3C,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;YACtB,IAAI,CAAC,YAAY,EAAE;QACrB;aAAO;YACL,IAAI,CAAC,WAAW,EAAE;QACpB;IACF;IAEQ,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;AACzD,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;;AAG1B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;QAE3C,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAgB;QACjE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;;QAGzC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,CAAC,qBAAqB,EAAE;QACrE,IAAI,IAAI,EAAE;AACR,YAAA,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG;;eAEjB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;AACd,cAAA,EAAA,IAAI,CAAC,IAAI,CAAA;AACR,eAAA,EAAA,IAAI,CAAC,KAAK,CAAA;AACN,mBAAA,EAAA,IAAI,CAAC,KAAK,CAAA;AACV,mBAAA,EAAA,IAAI,CAAC,KAAK,CAAA;;OAExB;QACH;IACF;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;AAE5D,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;AAC3C,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AAC7B,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC5B;IACF;AAEA,IAAA,cAAc,CAAC,KAAY,EAAA;QACzB,KAAK,CAAC,eAAe,EAAE;IACzB;AAEQ,IAAA,mBAAmB,CAAC,KAAiB,EAAA;AAC3C,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAc;AACnC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;AACzE,QAAA,MAAM,gBAAgB,GACpB,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC;AAErD,QAAA,IAAI,CAAC,eAAe,IAAI,CAAC,gBAAgB,EAAE;YACzC,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,aAAa,EAAE;QACtB;IACF;AAEA,IAAA,UAAU,CAAC,IAAe,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK;IACpD;IAEA,WAAW,CAAC,KAA0B,EAAE,MAAiB,EAAA;QACvD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;AACxC,QAAA,IAAI,KAAK,CAAC,OAAO,EAAE;YACjB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACzC,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAClD;QACF;aAAO;YACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;QACjE;IACF;AAEA,IAAA,eAAe,CAAC,KAA0B,EAAA;AACxC,QAAA,IAAI,KAAK,CAAC,OAAO,EAAE;YACjB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE;aAAO;AACL,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB;IACF;AAEA,IAAA,KAAK,CAAC,KAAY,EAAA;QAChB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IACpB;IAEQ,CAAC,CAAC,GAAW,EAAE,SAA2C,EAAA;AAChE,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC;QACxD;AACA,QAAA,OAAO,GAAG;IACZ;uGApNW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAFxB,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5C7D,2/FAgFA,EAAA,MAAA,EAAA,CAAA,8wCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDxCY,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,SAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,gnBAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMxC,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBARpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,WACxB,CAAC,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC,EAAA,aAAA,EAGrC,iBAAiB,CAAC,IAAI,EAAA,SAAA,EAC1B,CAAC,oBAAoB,0BAA0B,CAAC,EAAA,QAAA,EAAA,2/FAAA,EAAA,MAAA,EAAA,CAAA,8wCAAA,CAAA,EAAA;AAaV,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,SAAS,yEAEf,YAAY,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEtCzD;;;;;;;AAOG;AAQG,MAAO,mBAAoB,SAAQ,eAA8B,CAAA;AACpD,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/B,gBAAgB,GAAG,MAAM,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAChE,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IACjD,cAAc,GAAuB,IAAI;IACzC,WAAW,GAAG,KAAK;;AAGlB,IAAA,eAAe,GAAG,SAAS,CAAC,QAAQ,CAA6B,iBAAiB,CAAC;;AAGnF,IAAA,WAAW,GAAG,KAAK,CAAS,EAAE,uDAAC;;AAG/B,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,EAAE;AAC5C,QAAA,IAAI,iBAAiB;AAAE,YAAA,OAAO,iBAAiB;AAC/C,QAAA,OAAO,IAAI,CAAC,CAAC,CAAC,2BAA2B,CAAC;AAC5C,IAAA,CAAC,8DAAC;AACO,IAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,sDAAU;AACtC,IAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,sDAAU;AACtC,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,qDAAW;AACtC,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAW;AACrC,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAsB;AAC5C,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,qDAAe;AAC1C,IAAA,cAAc,GAAG,KAAK,CAAC,QAAQ,yDAAoB;;AAG1C,IAAA,KAAK,GAAG,KAAK,CAAgB,IAAI,iDAAC;;IAG3C,QAAQ,GAAG,MAAM,EAAU;IAC3B,YAAY,GAAG,MAAM,EAAe;;AAGpC,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,sDAAC;AACvB,IAAA,WAAW,GAAG,MAAM,CAAC,KAAK,uDAAC;AAEpC,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QACP,IAAI,CAAC,qBAAqB,EAAE;;QAG5B,IAAI,eAAe,GAAyC,IAAI;AAChE,QAAA,IAAI,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE;AAErC,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACnB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE;;YAGtC,IAAI,YAAY,KAAK,aAAa;gBAAE;YACpC,aAAa,GAAG,YAAY;;AAG5B,YAAA,IAAI,eAAe;gBAAE,YAAY,CAAC,eAAe,CAAC;;AAGlD,YAAA,eAAe,GAAG,UAAU,CAAC,MAAK;AAChC,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;YAClC,CAAC,EAAE,GAAG,CAAC;YAEP,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,eAAe;oBAAE,YAAY,CAAC,eAAe,CAAC;AACpD,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC;YACvE;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,cAAc,GAAG,qBAAqB,CAAC,KAAK,EAAE;AAClD,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC5B,SAAA,CAAC;QACF,IAAI,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;QACxC;IACF;IAEA,SAAS,GAAA;QACP,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC;AACxC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE;QAEvC,IAAI,YAAY,EAAE;YAChB,eAAe,CACb,MAAK;gBACH,IAAI,IAAI,CAAC,WAAW;oBAAE;gBACtB,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,aAAa;gBACxD,MAAM,MAAM,GAAG,WAAW,CAAC,aAAa,CAAc,0BAA0B,CAAC;gBACjF,IAAI,MAAM,EAAE;oBACV,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC;AACrD,oBAAA,IAAI,CAAC,cAAc,GAAG,MAAM;gBAC9B;YACF,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC5B;QACH;AAAO,aAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YAC9B,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC;AACrE,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC5B;IACF;IAEA,MAAM,GAAA;QACJ,IAAI,CAAC,aAAa,EAAE;IACtB;IAEQ,CAAC,CAAC,GAAW,EAAE,SAA2C,EAAA;AAChE,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC;QACxD;AACA,QAAA,OAAO,GAAG;IACZ;uGAvHW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAFnB,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClCxD,48BAiCA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDFY,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,ksCAAE,+BAA+B,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAK1D,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,OAAA,EAClB,CAAC,aAAa,EAAE,WAAW,EAAE,+BAA+B,CAAC,EAAA,SAAA,EAG3D,CAAC,oBAAoB,CAAA,mBAAA,CAAqB,CAAC,EAAA,QAAA,EAAA,48BAAA,EAAA;uGAUoB,iBAAiB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEhC7F;;;;;;;;;;;;;;;;;;;;AAoBG;AAEH;;;;AAIG;MACU,aAAa,GAAG,IAAI,cAAc,CAC7C,eAAe,EACf;AACE,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAK;AACZ,QAAA,MAAM,IAAI,KAAK,CACb,iFAAiF,CAClF;IACH,CAAC;AACF,CAAA;AAGH;;;;AAIG;MACU,oBAAoB,GAAG,IAAI,cAAc,CACpD,sBAAsB,EACtB;AACE,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAK;AACZ,QAAA,MAAM,IAAI,KAAK,CACb,wFAAwF,CACzF;IACH,CAAC;AACF,CAAA;AAGH;;;;AAIG;MACU,wBAAwB,GACnC,IAAI,cAAc,CAA0B,0BAA0B,EAAE;AACtE,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAK;AACZ,QAAA,MAAM,IAAI,KAAK,CACb,4FAA4F,CAC7F;IACH,CAAC;AACF,CAAA;AAEH;;;;AAIG;MACU,mBAAmB,GAC9B,IAAI,cAAc,CAAqB,qBAAqB,EAAE;AAC5D,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAK;AACZ,QAAA,MAAM,IAAI,KAAK,CACb,uFAAuF,CACxF;IACH,CAAC;AACF,CAAA;AAEH;;;;;;AAMG;MACU,2BAA2B,GACtC,IAAI,cAAc,CAA6B,6BAA6B;AAE9E;;;;;;;;;;;;AAYG;MACU,kBAAkB,GAC7B,IAAI,cAAc,CAAmC,oBAAoB;AAE3E;;;;;;;;;;;;AAYG;MACU,aAAa,GAAG,IAAI,cAAc,CAAgB,eAAe;;AChH9E,MAAMC,mBAAiB,GAAG,EAAE;AAE5B;;;;;;AAMG;MAEmB,uBAAuB,CAAA;AACxB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,YAAY,GAAG,MAAM,CAAgB,aAAa,CAAC;IACnD,gBAAgB,GAAG,MAAM,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACzE,eAAe,GAA2B,IAAI;;IAG/C,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAe;AAChC,IAAA,WAAW,GAAG,KAAK,CAAS,EAAE,uDAAC;AAC/B,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,qDAAW;AACtC,IAAA,YAAY,GAAG,KAAK,CAAU,IAAI,wDAAC;AACnC,IAAA,iBAAiB,GAAG,KAAK,CAA0B,EAAE,6DAAC;AACtD,IAAA,QAAQ,GAAG,KAAK,CAASA,mBAAiB,oDAAC;;IAG3C,OAAO,GAAG,MAAM,EAAS;;AAGzB,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;AACzB,IAAA,KAAK,GAAG,MAAM,CAAmB,EAAE,iDAAC;AACpC,IAAA,KAAK,GAAG,MAAM,CAAqB,SAAS,iDAAC;AAC7C,IAAA,UAAU,GAAG,MAAM,CAAc,EAAE,QAAQ,EAAEA,mBAAiB,EAAE,WAAW,EAAE,CAAC,EAAE,sDAAC;AACjF,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,sDAAC;;AAGvB,IAAA,aAAa,GAAG,QAAQ,CAAc,MAC7C,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AAC1B,QAAA,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK;QAC9B,KAAK,EAAE,IAAI,CAAC,EAAE;KACf,CAAC,CAAC,yDACJ;;AAGQ,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,EAAE;AAC5C,QAAA,IAAI,iBAAiB;AAAE,YAAA,OAAO,iBAAiB;AAC/C,QAAA,OAAO,IAAI,CAAC,CAAC,CAAC,gCAAgC,CAAC;AACjD,IAAA,CAAC,8DAAC;AAEF,IAAA,WAAA,GAAA;;AAEE,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAC7B,YAAA,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE;AAC/B,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;YAC5B,SAAS,CAAC,MAAK;gBACb,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3D,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;;QAGF,eAAe,CAAC,MAAK;YACnB,IAAI,CAAC,UAAU,EAAE;AACnB,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAKA,IAAA,YAAY,CAAC,MAAc,EAAA;AACzB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;AACzD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,EAAE;IACnB;AAEA,IAAA,gBAAgB,CAAC,UAAuB,EAAA;AACtC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IACvB;;IAGA,MAAM,GAAA;QACJ,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;AACzD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,EAAE;IACnB;AAEU,IAAA,MAAM,UAAU,CAAC,MAAM,GAAG,KAAK,EAAA;QACvC,IAAI,IAAI,CAAC,SAAS,EAAE;YAAE;;AAGtB,QAAA,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE;AAC7B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE;AAE5C,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAA,MAAM,MAAM,GAAsB;gBAChC,IAAI,EAAE,GAAG,CAAC,WAAW;gBACrB,QAAQ,EAAE,GAAG,CAAC,QAAQ;AACtB,gBAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE;gBACzB,GAAG,IAAI,CAAC,iBAAiB,EAAE;aAC5B;;AAGD,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE;AACxC,YAAA,MAAM,QAAQ,GAAG,MAAM,cAAc,CACnC;AACE,kBAAE,eAAe,CAAC,MAAM;kBACtB,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CACvC;YAED,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;gBACrC,IAAI,MAAM,EAAE;oBACV,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,OAAO,EAAE,GAAG,QAAQ,CAAC,IAAK,CAAC,CAAC;gBACjE;qBAAO;oBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC/B;gBACA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;YACtC;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAK,KAAe,CAAC,IAAI,KAAK,YAAY,EAAE;AAC1C,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAc,CAAC;YACnC;QACF;gBAAU;AACR,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3B;IACF;;AAGQ,IAAA,qBAAqB,CAAC,MAAyB,EAAA;QACrD,OAAO,IAAI,CAAC;AACT,aAAA,QAAQ,CAAC;YACR,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,YAAA,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,GAAG,SAAS;SACjD;aACA,IAAI,CACHC,KAAG,CAAC,CAAC,GAAG,MAAM;AACZ,YAAA,GAAG,GAAG;AACN,YAAA,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM;gBAC1B,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;AACf,aAAA,CAAC,CAAC;SACJ,CAAC,CAAC,CACJ;IACL;IAEU,CAAC,CAAC,GAAW,EAAE,SAA2C,EAAA;AAClE,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC;QACxD;AACA,QAAA,OAAO,GAAG;IACZ;uGAzJoB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAD5C;;;ACrBD;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BG;AAoBG,MAAO,mBAAoB,SAAQ,uBAAuB,CAAA;;AAErD,IAAA,KAAK,GAAG,KAAK,CAAgB,IAAI,iDAAC;;IAGlC,YAAY,GAAG,MAAM,EAAyB;IAEpC,gBAAgB,GAAA;;QAEjC,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE;AAC/B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;YAC1B,SAAS,CAAC,MAAK;gBACb,IAAI,UAAU,EAAE;AACd,oBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC;oBACnD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;gBACtC;qBAAO;AACL,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC9B;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;uGArBW,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhBpB;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAfS,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAiB9C,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAnB/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,OAAO,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,mBAAmB,CAAC;AAC1D,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;AAcT,EAAA,CAAA;AACF,iBAAA;;;AC7CD;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BG;AAkBG,MAAO,wBAAyB,SAAQ,uBAAuB,CAAA;;AAE1D,IAAA,KAAK,GAAG,KAAK,CAAkB,IAAI,iDAAC;;IAGpC,aAAa,GAAG,MAAM,EAAoB;IAEhC,gBAAgB,GAAA;;QAEjC,MAAM,CAAC,MAAK;YACV,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;AACtC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;YAC1B,SAAS,CAAC,MAAK;gBACb,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACrE,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;AACxC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;uGAjBW,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAdzB;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAbS,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,wBAAwB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAenD,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAjBpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,OAAO,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,wBAAwB,CAAC;AAC/D,oBAAA,QAAQ,EAAE;;;;;;;;;;;;AAYT,EAAA,CAAA;AACF,iBAAA;;;AChCD;;;;;;;;;;;;;;;;;;;;AAoBG;MA2JU,qBAAqB,CAAA;AACf,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IACvC,gBAAgB,GAAG,MAAM,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAChE,YAAY,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;IAGhE,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAgB;;IAGlC,mBAAmB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAyB;;AAGpD,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,+DAAC;;IAGjF,WAAW,GAAA;AACjB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AACjC,QAAA,IAAI,OAAO;AAAE,YAAA,OAAO,OAAO;QAC3B,IAAI,IAAI,CAAC,YAAY;AACnB,YAAA,OAAO,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,YAAa,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;AAClE,QAAA,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;IAC5D;;IAGQ,mBAAmB,GAAA;AACzB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAC1C,QAAA,IAAI,OAAO;AAAE,YAAA,OAAO,OAAO;AAC3B,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,mBAAmB,EAAE;AAC1C,YAAA,OAAO,CAAC,KAAK,EAAE,IAAI,KACjB,IAAI,CAAC,YAAa,CAAC,mBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC;QACxD;AACA,QAAA,OAAO,SAAS;IAClB;;AAGS,IAAA,WAAW,GAAG,KAAK,CAAW,EAAE,uDAAC;AACjC,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;AAChC,IAAA,QAAQ,GAAG,KAAK,CAAS,EAAE,oDAAC;AAC5B,IAAA,SAAS,GAAG,KAAK,CAAS,EAAE,qDAAC;AAC7B,IAAA,aAAa,GAAG,KAAK,CAAqB,EAAE,yDAAC;AAC7C,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;AAChC,IAAA,WAAW,GAAG,KAAK,CAAU,IAAI,uDAAC;AAClC,IAAA,UAAU,GAAG,KAAK,CAAU,IAAI,sDAAC;;IAGjC,YAAY,GAAG,MAAM,EAAiB;IACtC,aAAa,GAAG,MAAM,EAAmB;IACzC,OAAO,GAAG,MAAM,EAAS;IACzB,YAAY,GAAG,MAAM,EAAU;;AAG/B,IAAA,WAAW,GAAG,MAAM,CAAC,KAAK,uDAAC;AAC3B,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,cAAc,GAAG,MAAM,CAAC,CAAC,0DAAC;AAC1B,IAAA,iBAAiB,GAAG,MAAM,CAAC,EAAE,6DAAC;AAC9B,IAAA,aAAa,GAAG,MAAM,CAAS,EAAE,yDAAC;;AAGlC,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,wDAAC;AAClE,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;QAChC,IAAI,CAAC,KAAK,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;;QAG5B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACtC,IAAI,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC;QACnG,IAAI,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,SAAS,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,CAAC,CAAC,4BAA4B,CAAC;QACzG,IAAI,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC;QACnG,IAAI,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC;QAEjG,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1D,IAAA,CAAC,8DAAC;AAEF,IAAA,UAAU,CAAC,KAAgB,EAAA;QACzB,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AAC3C,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;QAC3B;IACF;AAEA,IAAA,WAAW,CAAC,KAAgB,EAAA;QAC1B,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;IAC5B;AAEA,IAAA,MAAM,CAAC,KAAgB,EAAA;QACrB,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;QAE1B,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;YAAE;AAE3C,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE,KAAK;AACvC,QAAA,IAAI,KAAK,EAAE,MAAM,EAAE;YACjB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC;IACF;AAEA,IAAA,cAAc,CAAC,KAAY,EAAA;AACzB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;AACzB,QAAA,IAAI,KAAK,EAAE,MAAM,EAAE;YACjB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC;;AAEA,QAAA,KAAK,CAAC,KAAK,GAAG,EAAE;IAClB;AAEQ,IAAA,WAAW,CAAC,KAAa,EAAA;;AAE/B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE;QACvC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;YACvC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE;AAC1C,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,oBAAA,QAAQ,EAAE,MAAM;AAChB,oBAAA,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,4BAA4B,CAAC;AAC7C,oBAAA,MAAM,EAAE,CAAA,EAAG,IAAI,CAAC,IAAI,CAAA,CAAE;AACvB,iBAAA,CAAC;AACF,gBAAA,OAAO,KAAK;YACd;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;;QAGF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,GAAG,IAAI;QAC9C,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;AAChD,YAAA,IAAI,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE;AACvB,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,oBAAA,QAAQ,EAAE,MAAM;AAChB,oBAAA,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,8BAA8B,CAAC;AAC/C,oBAAA,MAAM,EAAE,CAAA,EAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAA,CAAA,CAAG;AACzE,iBAAA,CAAC;AACF,gBAAA,OAAO,KAAK;YACd;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ;cAC9B,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE;cACvC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAE9B,IAAI,CAAC,YAAY,CAAC,MAAM;YAAE;AAE1B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AAEpC,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACrB,YAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;QAChC;IACF;AAEA,IAAA,UAAU,CAAC,IAAU,EAAA;QACnB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;IACvE;IAEA,MAAM,WAAW,CAAC,KAAc,EAAA;QAC9B,MAAM,aAAa,GAAG,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE;QACnD,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE;YAAE;AAEjD,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAE1B,QAAA,IAAI;AACF,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE;;YAGhD,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC7C,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,aAAa,CAAC;YACtD;iBAAO;AACL,gBAAA,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;YAC5C;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAc,CAAC;QACnC;gBAAU;AACR,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B;IACF;AAEQ,IAAA,MAAM,WAAW,CACvB,KAAa,EACb,QAA+B,EAAA;AAE/B,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAA,EAAG,KAAK,CAAC,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAA,CAAE,CAAC;AAC9E,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1B,QAAA,MAAM,QAAQ,GAAG,MAAM,cAAc,CACnC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CACtC;QAED,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;AACrC,YAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACtC,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAE1B,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,gBAAA,QAAQ,EAAE,SAAS;AACnB,gBAAA,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC;AACzC,gBAAA,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,8BAA8B,EAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AAC/E,aAAA,CAAC;QACJ;aAAO;AACL,YAAA,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;QACrE;IACF;IAEQ,MAAM,gBAAgB,CAAC,KAAa,EAAA;QAC1C,MAAM,aAAa,GAAoB,EAAE;AACzC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE;AAEnC,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AACrC,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1B,YAAA,MAAM,QAAQ,GAAG,MAAM,cAAc,CACnC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CACrC;YAED,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;AACrC,gBAAA,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACjC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACvC;iBAAO;AACL,gBAAA,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;YACrE;QACF;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;AACtC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAE1B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC;AACzC,YAAA,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,8BAA8B,EAAC,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC;AAC/E,SAAA,CAAC;IACJ;AAEA,IAAA,WAAW,CAAC,IAAU,EAAA;AACpB,QAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;IACpC;AAEA,IAAA,UAAU,CAAC,KAAa,EAAA;AACtB,QAAA,MAAM,EAAE,GAAG,KAAK,GAAG,IAAI;QACvB,IAAI,EAAE,GAAG,IAAI;AAAE,YAAA,OAAO,CAAA,EAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE;AACrE,QAAA,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI;AACpB,QAAA,OAAO,CAAA,EAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE;IACxD;IAEQ,CAAC,CAAC,GAAW,EAAE,SAA2C,EAAA;AAChE,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC;QACxD;AACA,QAAA,OAAO,GAAG;IACZ;uGA9PW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvJtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmGT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,y7BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EApGS,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAwJxC,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA1JjC,SAAS;+BACE,mBAAmB,EAAA,OAAA,EACpB,CAAC,aAAa,EAAE,WAAW,EAAE,aAAa,CAAC,EAAA,QAAA,EAC1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmGT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,y7BAAA,CAAA,EAAA;;;ACpHH,MAAM,iBAAiB,GAAG,EAAE;AAC5B,MAAM,0BAA0B,GAAG,EAAE;AAErC;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;MAwWU,2BAA2B,CAAA;AACrB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/B,gBAAgB,GAAG,MAAM,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACxE,YAAY,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACzD,eAAe,GAA2B,IAAI;IAC9C,mBAAmB,GAAyC,IAAI;;IAG/D,MAAM,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AACxB,IAAA,WAAW,GAAG,KAAK,CAAW,EAAE,uDAAC;AACjC,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;;AAGhC,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AACpC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE;AAClC,QAAA,IAAI,YAAY;AAAE,YAAA,OAAO,YAAY;AACrC,QAAA,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,mCAAmC,GAAG,kCAAkC,CAAC;AAC3G,IAAA,CAAC,wDAAC;AACO,IAAA,YAAY,GAAG,KAAK,CAAS,EAAE,wDAAC;AAChC,IAAA,QAAQ,GAAG,KAAK,CAAS,iBAAiB,oDAAC;AAC3C,IAAA,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU,CAAC;AAC3B,IAAA,YAAY,GAAG,KAAK,CAAU,KAAK,wDAAC;;AAGpC,IAAA,OAAO,GAAG,KAAK,CAAU,KAAK,mDAAC;;IAG/B,YAAY,GAAG,MAAM,EAAkB;IACvC,aAAa,GAAG,MAAM,EAAoB;IAC1C,MAAM,GAAG,MAAM,EAAQ;IACvB,OAAO,GAAG,MAAM,EAAS;;AAGzB,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;AACzB,IAAA,KAAK,GAAG,MAAM,CAAmB,EAAE,iDAAC;AACpC,IAAA,aAAa,GAAG,MAAM,CAAmB,EAAE,yDAAC;AAC5C,IAAA,KAAK,GAAG,MAAM,CAAqB,SAAS,iDAAC;IAC7C,UAAU,GAAG,MAAM,CAAc;AACxC,QAAA,QAAQ,EAAE,iBAAiB;AAC3B,QAAA,WAAW,EAAE,CAAC;AACf,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AACO,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,sDAAC;;AAGvB,IAAA,OAAO,GAAG,MAAM,CAAqB,EAAE,mDAAC;AACxC,IAAA,gBAAgB,GAAG,MAAM,CAAgB,IAAI,4DAAC;AAC9C,IAAA,cAAc,GAAG,MAAM,CAAC,KAAK,0DAAC;IAC9B,iBAAiB,GAAG,MAAM,CAAc;AAC/C,QAAA,QAAQ,EAAE,0BAA0B;AACpC,QAAA,WAAW,EAAE,CAAC;AACf,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AACO,IAAA,YAAY,GAAG,MAAM,CAAqB,SAAS,wDAAC;;AAGpD,IAAA,cAAc,GAAG,MAAM,CAA4B,EAAE,0DAAC;AACtD,IAAA,uBAAuB,GAAG,MAAM,CAAgB,IAAI,mEAAC;AACrD,IAAA,qBAAqB,GAAG,MAAM,CAAC,KAAK,iEAAC;IACrC,wBAAwB,GAAG,MAAM,CAAc;AACtD,QAAA,QAAQ,EAAE,0BAA0B;AACpC,QAAA,WAAW,EAAE,CAAC;AACf,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,0BAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AACO,IAAA,mBAAmB,GAAG,MAAM,CAAqB,SAAS,+DAAC;;AAG3D,IAAA,wBAAwB,GAAG,QAAQ,CAAC,MAAK;AAChD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,EAAE;AAC/C,QAAA,IAAI,QAAQ;AAAE,YAAA,OAAO,QAAQ;;AAE7B,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;QACpE,OAAO,aAAa,EAAE,EAAE;AAC1B,IAAA,CAAC,oEAAC;;AAGO,IAAA,YAAY,GAAG,CAAC,IAAU,EAAE,OAA4B,KAAI;QACnE,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC;QACvF,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC;AACpD,IAAA,CAAC;;AAGQ,IAAA,qBAAqB,GAAG,IAAI,CAAC,YAAY,EAAE;AAClD,UAAE,CAAC,KAAa,EAAE,OAA4B,KAC1C,IAAI,CAAC,YAAa,CAAC,mBAAoB,CAAC,KAAK,EAAE,OAAO;UACxD,SAAS;AAEb,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAC7B,YAAA,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE;AAC7B,YAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,gBAAA,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC;YACxC;AACF,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE;YAChC,IAAI,SAAS,EAAE;gBACb,SAAS,CAAC,MAAK;oBACb,IAAI,CAAC,UAAU,EAAE;oBACjB,IAAI,CAAC,UAAU,EAAE;;AAEjB,oBAAA,IAAI,IAAI,CAAC,YAAY,EAAE,kBAAkB,EAAE;wBACzC,IAAI,CAAC,kBAAkB,EAAE;oBAC3B;AACF,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;YAC5B,SAAS,CAAC,MAAK;gBACb,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3D,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,cAAc,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC;QACxC;AAEA,QAAA,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC,MAAK;AACzC,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;YAC1B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;AACzD,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC,UAAU,EAAE;QACnB,CAAC,EAAE,GAAG,CAAC;IACT;AAEA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,cAAc,GAAG,qBAAqB,CAAC,KAAK,EAAE;AAClD,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC5B,SAAA,CAAC;QACF,IAAI,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC;AACnC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACvB;IACF;AAEA,IAAA,eAAe,CAAC,IAAoB,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YAAE;AAE/B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;AACrC,YAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAEzD,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,KAC9B,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CACtC;YACH;iBAAO,IAAI,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE;AAChD,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC;YACxD;QACF;aAAO;YACL,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAChC;IACF;AAEA,IAAA,UAAU,CAAC,IAAoB,EAAA;QAC7B,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;IAC3D;AAEA,IAAA,aAAa,CAAC,IAAoB,EAAA;AAChC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE;QACvC,IAAI,CAAC,YAAY,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;AAErC,QAAA,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;AAChC,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACvB,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC7D;AACA,YAAA,OAAO,IAAI,CAAC,WAAW,KAAK,IAAI;AAClC,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,OAAO,CAAC,IAAoB,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG;IAC5D;AAEA,IAAA,WAAW,CAAC,IAAoB,EAAA;AAC9B,QAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC;IAC3C;AAEA,IAAA,UAAU,CAAC,IAAY,EAAA;AACrB,QAAA,OAAO,cAAc,CAAC,IAAI,CAAC;IAC7B;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IACzB;IAEA,SAAS,GAAA;AACP,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;AACrC,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE;AAE3B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;QACnC;aAAO;YACL,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACrC;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IACzB;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;;AAGA,IAAA,cAAc,CAAC,QAAuB,EAAA;AACpC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;AACzD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,EAAE;IACnB;AAEA,IAAA,cAAc,CAAC,KAAyB,EAAA;QACtC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;AAChE,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;IAChC;AAEA,IAAA,MAAM,WAAW,CAAC,MAAM,GAAG,EAAE,EAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,IAAI,IAAI,CAAC,cAAc,EAAE;YAAE;AAE9D,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACpC,YAAA,MAAM,MAAM,GAAkB;gBAC5B,IAAI,EAAE,GAAG,CAAC,WAAW;gBACrB,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,MAAM;aACP;AAED,YAAA,MAAM,QAAQ,GAAG,MAAM,cAAc,CACnC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CACtC;YACD,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;gBACrC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC/B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;YAC7C;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAc,CAAC;QACnC;gBAAU;AACR,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;QAChC;IACF;;AAGA,IAAA,qBAAqB,CAAC,QAAuB,EAAA;AAC3C,QAAA,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;AACzD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,EAAE;IACnB;AAEA,IAAA,qBAAqB,CAAC,KAAyB,EAAA;QAC7C,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC;IACvC;AAEA,IAAA,MAAM,kBAAkB,CAAC,MAAM,GAAG,EAAE,EAAA;QAClC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,kBAAkB,IAAI,IAAI,CAAC,qBAAqB,EAAE;YACxE;AAEF,QAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC;AACpC,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,wBAAwB,EAAE;AAC3C,YAAA,MAAM,MAAM,GAAkB;gBAC5B,IAAI,EAAE,GAAG,CAAC,WAAW;gBACrB,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,MAAM;aACP;AAED,YAAA,MAAM,QAAQ,GAAG,MAAM,cAAc,CACnC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAC7C;YACD,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;gBACrC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACtC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;YACpD;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAc,CAAC;QACnC;gBAAU;AACR,YAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC;QACvC;IACF;AAEA,IAAA,cAAc,CAAC,YAA2B,EAAA;QACxC,IAAI,CAAC,YAAY,CAAC,EAAE;YAAE;;AAGtB,QAAA,MAAM,QAAQ,GAAmB;YAC/B,EAAE,EAAE,YAAY,CAAC,EAAE;YACnB,IAAI,EAAE,YAAY,CAAC,IAAI;YACvB,WAAW,EAAE,YAAY,CAAC,WAAW;YACrC,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC;AACtC,YAAA,GAAG,EAAE,IAAI;SACV;;AAGD,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC;;AAGtD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;YACrC,IAAI,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE;AACzC,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,GAAG,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC5D;QACF;aAAO;YACL,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QACpC;;QAGA,IAAI,CAAC,UAAU,EAAE;IACnB;IAEQ,UAAU,GAAA;;AAEhB,QAAA,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE;AAC7B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAEzB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;AAClE,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;;AAEzB,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;AACzB,YAAA,QAAQ,EAAE,0BAA0B;AACpC,YAAA,WAAW,EAAE,CAAC;AACf,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;;AAEhC,QAAA,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC;AACtC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC;AAChC,YAAA,QAAQ,EAAE,0BAA0B;AACpC,YAAA,WAAW,EAAE,CAAC;AACf,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC;IACzC;AAEQ,IAAA,MAAM,UAAU,CAAC,MAAM,GAAG,KAAK,EAAA;QACrC,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE;YAAE;AAE5C,QAAA,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE;AAC7B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE;AAE5C,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAA,MAAM,MAAM,GAAsB;gBAChC,IAAI,EAAE,GAAG,CAAC,WAAW;gBACrB,QAAQ,EAAE,GAAG,CAAC,QAAQ;AACtB,gBAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE;AACzB,gBAAA,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;AAC/B,sBAAE,IAAI,CAAC,WAAW;AAClB,sBAAE,SAAS;gBACb,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;AACpD,gBAAA,eAAe,EAAE,IAAI,CAAC,uBAAuB,EAAE,IAAI,SAAS;aAC7D;AAED,YAAA,MAAM,QAAQ,GAAG,MAAM,cAAc,CACnC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CACpC;YAED,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;AACrC,gBAAA,IAAI,KAAK,GAAG,QAAQ,CAAC,IAAI;;AAGzB,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACrD,oBAAA,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACtC,oBAAA,MAAM,WAAW,GAAG,MAAM,cAAc,CACtC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CACvC;oBACD,IAAI,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE;;wBAE3C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBAClE,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AACxB,4BAAA,GAAG,CAAC;AACJ,4BAAA,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG;AAC/B,yBAAA,CAAC,CAAC;oBACL;gBACF;gBAEA,IAAI,MAAM,EAAE;AACV,oBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC;gBACxD;qBAAO;AACL,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;gBACvB;gBACA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;YACtC;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAK,KAAe,CAAC,IAAI,KAAK,YAAY,EAAE;AAC1C,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAc,CAAC;YACnC;QACF;gBAAU;AACR,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3B;IACF;IAEQ,CAAC,CAAC,GAAW,EAAE,SAA2C,EAAA;AAChE,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC;QACxD;AACA,QAAA,OAAO,GAAG;IACZ;uGA1ZW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApW5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsPT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6lDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAvPS,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,qBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,cAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,eAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,cAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,cAAA,EAAA,QAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,qBAAqB,6RAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAqW/D,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAvWvC,SAAS;+BACE,0BAA0B,EAAA,OAAA,EAC3B,CAAC,aAAa,EAAE,WAAW,EAAE,qBAAqB,EAAE,aAAa,CAAC,EAAA,QAAA,EACjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsPT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,6lDAAA,CAAA,EAAA;;;AC1SH,SAAS,WAAW,CAClB,SAAiB,EACjB,UAAkB,EAClB,QAAoB,EACpB,gBAA8B,EAAA;AAE9B,IAAA,OAAO,MAAK;AACV,QAAA,MAAM,mBAAmB,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAC9D,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAE7B,QAAA,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,EAAE;YAC9C,IAAI,SAAS,EAAE,EAAE;AACf,gBAAA,OAAO,CAAC,GAAG,CAAC,IAAI,SAAS,CAAA,wCAAA,CAA0C,CAAC;YACtE;YACA,OAAO,MAAM,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,CAAC;QAC3C;QAEA,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC,EAAE;YAChD,IAAI,SAAS,EAAE,EAAE;gBACf,OAAO,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,SAAS,KAAK,gBAAgB,EAAE,CAAA,CAAE,CAAC;YACrD;YACA,OAAO,MAAM,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,CAAC;QAC3C;AAEA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;AACH;AAEA;;;;;;;;AAQG;SACa,eAAe,CAC7B,UAA+B,EAC/B,UAAU,GAAG,GAAG,EAAA;AAEhB,IAAA,MAAM,IAAI,GAAG,OAAO,UAAU,KAAK,QAAQ,GAAG,UAAU,GAAG,eAAe;IAC1E,OAAO,WAAW,CAChB,iBAAiB,EACjB,UAAU,EACV,CAAC,KAAK,KAAK,kBAAkB,CAAC,UAAU,EAAE,KAAK,CAAC,EAChD,MAAM,CAAA,yBAAA,EAA4B,IAAI,CAAA,CAAE,CACzC;AACH;AAEA;;;;;;;AAOG;SACa,kBAAkB,CAChC,WAAqB,EACrB,UAAU,GAAG,GAAG,EAAA;AAEhB,IAAA,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AACxB,QAAA,OAAO,MAAK;YACV,IAAI,SAAS,EAAE,EAAE;AACf,gBAAA,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC;YACtE;YACA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,CAAC;AACnD,QAAA,CAAC;IACH;AACA,IAAA,OAAO,WAAW,CAChB,oBAAoB,EACpB,UAAU,EACV,CAAC,KAAK,KAAK,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,EAC/C,MAAM,CAAA,gCAAA,EAAmC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAClE;AACH;AAEA;;;;;;;AAOG;SACa,mBAAmB,CACjC,WAAqB,EACrB,UAAU,GAAG,GAAG,EAAA;AAEhB,IAAA,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AACxB,QAAA,OAAO,MAAK;YACV,IAAI,SAAS,EAAE,EAAE;AACf,gBAAA,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC;YACvE;YACA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,CAAC;AACnD,QAAA,CAAC;IACH;AACA,IAAA,OAAO,WAAW,CAChB,qBAAqB,EACrB,UAAU,EACV,CAAC,KAAK,KAAK,iBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC,EAChD,MAAM,CAAA,gCAAA,EAAmC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAClE;AACH;;ACrGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoFG;MAEmB,YAAY,CAAA;AACb,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/B,gBAAgB,GAAG,MAAM,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAEhE,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IACpD,WAAW,GAAG,KAAK;;AAGpB,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;;AAGzB,IAAA,YAAY,GAAG,MAAM,CAAW,IAAI,wDAAC;;AAGrC,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,sDAAC;AA8C3D,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE;AACjC,YAAA,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW;gBAAE;AAEjC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;YACvB,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,YAAA,IAAI,EAAE,IAAI,EAAE,KAAK,KAAK,EAAE;AACtB,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnB;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;;AAIG;IACH,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;YACvB,IAAI,CAAC,mBAAmB,EAAE;YAC1B;QACF;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE;AAEnC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU;AAChC,cAAE,IAAI,CAAC,UAAU,CAAC,KAAK;AACvB,cAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AAE1B,QAAA,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7D,IAAI,EAAE,MAAK;AACT,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,uBAAuB,GAAG,uBAAuB;gBACxF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AACpC,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;YACjD,CAAC;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAC3B,CAAC;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAC3B,CAAC;AACF,SAAA,CAAC;IACJ;AAEA;;;AAGG;IACH,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACjD;AAEA;;;AAGG;IACO,mBAAmB,GAAA;AAC3B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC;AACzC,SAAA,CAAC;IACJ;AAEA;;;AAGG;AACO,IAAA,WAAW,CAAC,MAAc,EAAA;AAClC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;YACjC,MAAM;AACP,SAAA,CAAC;IACJ;AAEA;;;AAGG;AACO,IAAA,SAAS,CAAC,MAAc,EAAA;AAChC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;YAC/B,MAAM;AACP,SAAA,CAAC;IACJ;AAEA;;AAEG;IACO,CAAC,CAAC,GAAW,EAAE,SAA2C,EAAA;AAClE,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,GAAG;IAChE;uGA9JoB,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADjC;;;AC7FD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAEmB,YAAY,CAAA;AACb,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,IAAA,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC;AAC9B,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/B,gBAAgB,GAAG,MAAM,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;AAG1E,IAAA,KAAK,GAAG,MAAM,CAAM,EAAE,iDAAC;;AAGvB,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;;AAGzB,IAAA,KAAK,GAAG,MAAM,CAAC,CAAC,iDAAC;;AAGjB,IAAA,QAAQ,GAAG,MAAM,CAAC,EAAE,oDAAC;;AAGrB,IAAA,KAAK,GAAG,MAAM,CAAC,CAAC,iDAAC;;IAGjB,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGxE,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAqB9E;;AAEG;IACH,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,KAAK,CAAC,CAAC;IACxD;AAEA;;;AAGG;AACH,IAAA,MAAM,CAAC,EAAU,EAAA;AACf,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,EAAE,CAAC,CAAC;IACrD;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,KAAsD,EAAA;QACjE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,EAAE;IACjB;AAEA;;;AAGG;IACO,mBAAmB,GAAA;QAC3B,OAAO;AACL,YAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;SAC1B;IACH;AAEA;;AAEG;IACO,WAAW,CAAC,MAAc,EAAE,OAAgB,EAAA;QACpD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IACxG;AAEA;;AAEG;IACO,SAAS,CAAC,MAAc,EAAE,OAAgB,EAAA;QAClD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IACpG;AAEA;;AAEG;IACO,QAAQ,CAAC,MAAc,EAAE,OAAgB,EAAA;QACjD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAClG;AAEA;;AAEG;IACO,QAAQ,CAAC,MAAc,EAAE,OAAgB,EAAA;QACjD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IACrG;AAEA;;AAEG;IACO,CAAC,CAAC,GAAW,EAAE,SAA2C,EAAA;AAClE,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,GAAG;IAChE;AAEA;;;;;;AAMG;AACH,IAAA,QAAQ,CACN,IAAO,EACP,QAA6B,EAC7B,aAAkD,EAClD,OAIC,EAAA;AAED,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;AAC/B,YAAA,OAAO,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC;YAC3C,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,8BAA8B,CAAC;AACjE,YAAA,IAAI,EAAE,4BAA4B;AAClC,YAAA,sBAAsB,EAAE,iBAAiB;YACzC,MAAM,EAAE,MAAK;AACX,gBAAA,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;AACzB,qBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,qBAAA,SAAS,CAAC;oBACT,IAAI,EAAE,MAAK;AACT,wBAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC;wBAC5E,IAAI,CAAC,QAAQ,EAAE;oBACjB,CAAC;oBACD,KAAK,EAAE,MAAK;AACV,wBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;oBACzE,CAAC;AACF,iBAAA,CAAC;YACN,CAAC;AACF,SAAA,CAAC;IACJ;AAEA;;;;;;AAMG;IACH,MAAM,aAAa,CACjB,IAAO,EACP,QAA6B,EAC7B,aAA+C,EAC/C,OAIC,EAAA;AAED,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;AAC/B,YAAA,OAAO,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC;YAC3C,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,8BAA8B,CAAC;AACjE,YAAA,IAAI,EAAE,4BAA4B;AAClC,YAAA,sBAAsB,EAAE,iBAAiB;YACzC,MAAM,EAAE,YAAW;AACjB,gBAAA,IAAI;AACF,oBAAA,MAAM,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACnC,oBAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC;AAC5E,oBAAA,MAAM,IAAI,CAAC,QAAQ,EAAE;gBACvB;AAAE,gBAAA,MAAM;AACN,oBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;gBACzE;YACF,CAAC;AACF,SAAA,CAAC;IACJ;AAEA;;AAEG;AACO,IAAA,UAAU,CAAC,IAAc,EAAA;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B;uGAnMoB,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADjC;;;AC9BD;;ACAA;;AAEG;;;;"}
|