ps-helix 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/README.md +286 -0
  2. package/fesm2022/ps-helix.mjs +3304 -0
  3. package/fesm2022/ps-helix.mjs.map +1 -0
  4. package/index.d.ts +5 -0
  5. package/lib/components/alert/alert.component.d.ts +26 -0
  6. package/lib/components/alert/alert.types.d.ts +46 -0
  7. package/lib/components/avatar/avatar.component.d.ts +20 -0
  8. package/lib/components/avatar/avatar.types.d.ts +33 -0
  9. package/lib/components/badge/badge.component.d.ts +25 -0
  10. package/lib/components/badge/badge.types.d.ts +4 -0
  11. package/lib/components/button/button.component.d.ts +25 -0
  12. package/lib/components/button/button.types.d.ts +16 -0
  13. package/lib/components/card/card.component.d.ts +82 -0
  14. package/lib/components/card/card.types.d.ts +31 -0
  15. package/lib/components/charts/pie-chart/pie-chart.component.d.ts +29 -0
  16. package/lib/components/charts/pie-chart/pie-chart.types.d.ts +45 -0
  17. package/lib/components/checkbox/checkbox.component.d.ts +23 -0
  18. package/lib/components/checkbox/checkbox.types.d.ts +4 -0
  19. package/lib/components/collapse/collapse.component.d.ts +17 -0
  20. package/lib/components/collapse/collapse.types.d.ts +8 -0
  21. package/lib/components/dropdown/dropdown.component.d.ts +32 -0
  22. package/lib/components/dropdown/dropdown.types.d.ts +36 -0
  23. package/lib/components/horizontal-card/horizontal-card.component.d.ts +33 -0
  24. package/lib/components/info-card/info-card.component.d.ts +28 -0
  25. package/lib/components/info-card/info-card.types.d.ts +12 -0
  26. package/lib/components/input/input.component.d.ts +63 -0
  27. package/lib/components/input/input.types.d.ts +28 -0
  28. package/lib/components/menu/menu.component.d.ts +24 -0
  29. package/lib/components/menu/menu.types.d.ts +33 -0
  30. package/lib/components/modal/modal.component.d.ts +73 -0
  31. package/lib/components/modal/modal.types.d.ts +27 -0
  32. package/lib/components/pagination/pagination.component.d.ts +36 -0
  33. package/lib/components/pagination/pagination.types.d.ts +27 -0
  34. package/lib/components/progressbar/progressbar.component.d.ts +22 -0
  35. package/lib/components/progressbar/progressbar.types.d.ts +29 -0
  36. package/lib/components/radio/radio.component.d.ts +32 -0
  37. package/lib/components/radio/radio.types.d.ts +29 -0
  38. package/lib/components/select/select.component.d.ts +84 -0
  39. package/lib/components/select/select.types.d.ts +82 -0
  40. package/lib/components/sidebar/sidebar.component.d.ts +30 -0
  41. package/lib/components/sidebar/sidebar.types.d.ts +21 -0
  42. package/lib/components/spinloader/spinloader.component.d.ts +21 -0
  43. package/lib/components/spinloader/spinloader.types.d.ts +23 -0
  44. package/lib/components/stat-card/stat-card.component.d.ts +48 -0
  45. package/lib/components/stepper/stepper.component.d.ts +42 -0
  46. package/lib/components/stepper/stepper.types.d.ts +59 -0
  47. package/lib/components/switch/switch.component.d.ts +34 -0
  48. package/lib/components/switch/switch.types.d.ts +25 -0
  49. package/lib/components/tab-bar/tab-bar.component.d.ts +27 -0
  50. package/lib/components/tab-bar/tab-bar.types.d.ts +28 -0
  51. package/lib/components/table/table.component.d.ts +56 -0
  52. package/lib/components/table/table.types.d.ts +70 -0
  53. package/lib/components/tabs/tabs.component.d.ts +37 -0
  54. package/lib/components/tabs/tabs.types.d.ts +32 -0
  55. package/lib/components/tag/tag.component.d.ts +24 -0
  56. package/lib/components/tag/tag.types.d.ts +25 -0
  57. package/lib/components/toast/toast.component.d.ts +24 -0
  58. package/lib/components/toast/toast.service.d.ts +38 -0
  59. package/lib/components/toast/toast.types.d.ts +40 -0
  60. package/lib/components/tooltip/tooltip.component.d.ts +38 -0
  61. package/lib/components/tooltip/tooltip.types.d.ts +21 -0
  62. package/lib/services/scroll.service.d.ts +8 -0
  63. package/lib/services/theme/theme.service.d.ts +41 -0
  64. package/lib/services/theme/types/theme.types.d.ts +9 -0
  65. package/lib/services/translation/translation.service.d.ts +25 -0
  66. package/lib/services/translation/types/i18n.types.d.ts +8 -0
  67. package/package.json +47 -0
  68. package/public-api.d.ts +62 -0
  69. package/src/lib/styles/reset.css +164 -0
  70. package/src/lib/styles/themes/dark.css +174 -0
  71. package/src/lib/styles/themes/light.css +258 -0
  72. package/src/lib/styles/utils/animations.css +176 -0
  73. package/src/lib/styles/utils/colors.css +228 -0
  74. package/src/lib/styles/utils/focus.css +76 -0
  75. package/src/lib/styles/utils/layout.css +149 -0
  76. package/src/lib/styles/utils/responsive.css +227 -0
  77. package/src/lib/styles/utils/spacing.css +172 -0
  78. package/src/lib/styles/utils/typography.css +68 -0
  79. package/styles.css +10 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ps-helix.mjs","sources":["../../../projects/ps-helix/src/lib/components/alert/alert.component.ts","../../../projects/ps-helix/src/lib/components/alert/alert.component.html","../../../projects/ps-helix/src/lib/components/avatar/avatar.component.ts","../../../projects/ps-helix/src/lib/components/avatar/avatar.component.html","../../../projects/ps-helix/src/lib/components/badge/badge.component.ts","../../../projects/ps-helix/src/lib/components/badge/badge.component.html","../../../projects/ps-helix/src/lib/components/button/button.component.ts","../../../projects/ps-helix/src/lib/components/button/button.component.html","../../../projects/ps-helix/src/lib/components/card/card.component.ts","../../../projects/ps-helix/src/lib/components/card/card.component.html","../../../projects/ps-helix/src/lib/components/tag/tag.component.ts","../../../projects/ps-helix/src/lib/components/tag/tag.component.html","../../../projects/ps-helix/src/lib/components/stat-card/stat-card.component.ts","../../../projects/ps-helix/src/lib/components/stat-card/stat-card.component.html","../../../projects/ps-helix/src/lib/components/horizontal-card/horizontal-card.component.ts","../../../projects/ps-helix/src/lib/components/horizontal-card/horizontal-card.component.html","../../../projects/ps-helix/src/lib/components/info-card/info-card.component.ts","../../../projects/ps-helix/src/lib/components/info-card/info-card.component.html","../../../projects/ps-helix/src/lib/components/charts/pie-chart/pie-chart.component.ts","../../../projects/ps-helix/src/lib/components/charts/pie-chart/pie-chart.component.html","../../../projects/ps-helix/src/lib/components/checkbox/checkbox.component.ts","../../../projects/ps-helix/src/lib/components/checkbox/checkbox.component.html","../../../projects/ps-helix/src/lib/components/collapse/collapse.component.ts","../../../projects/ps-helix/src/lib/components/collapse/collapse.component.html","../../../projects/ps-helix/src/lib/components/dropdown/dropdown.component.ts","../../../projects/ps-helix/src/lib/components/dropdown/dropdown.component.html","../../../projects/ps-helix/src/lib/components/input/input.component.ts","../../../projects/ps-helix/src/lib/components/input/input.component.html","../../../projects/ps-helix/src/lib/components/menu/menu.component.ts","../../../projects/ps-helix/src/lib/components/menu/menu.component.html","../../../projects/ps-helix/src/lib/components/modal/modal.component.ts","../../../projects/ps-helix/src/lib/components/modal/modal.component.html","../../../projects/ps-helix/src/lib/components/pagination/pagination.component.ts","../../../projects/ps-helix/src/lib/components/pagination/pagination.component.html","../../../projects/ps-helix/src/lib/components/progressbar/progressbar.component.ts","../../../projects/ps-helix/src/lib/components/progressbar/progressbar.component.html","../../../projects/ps-helix/src/lib/components/radio/radio.component.ts","../../../projects/ps-helix/src/lib/components/radio/radio.component.html","../../../projects/ps-helix/src/lib/components/select/select.component.ts","../../../projects/ps-helix/src/lib/components/select/select.component.html","../../../projects/ps-helix/src/lib/components/sidebar/sidebar.component.ts","../../../projects/ps-helix/src/lib/components/sidebar/sidebar.component.html","../../../projects/ps-helix/src/lib/components/spinloader/spinloader.component.ts","../../../projects/ps-helix/src/lib/components/spinloader/spinloader.component.html","../../../projects/ps-helix/src/lib/components/stepper/stepper.component.ts","../../../projects/ps-helix/src/lib/components/stepper/stepper.component.html","../../../projects/ps-helix/src/lib/components/switch/switch.component.ts","../../../projects/ps-helix/src/lib/components/switch/switch.component.html","../../../projects/ps-helix/src/lib/components/tab-bar/tab-bar.component.ts","../../../projects/ps-helix/src/lib/components/tab-bar/tab-bar.component.html","../../../projects/ps-helix/src/lib/components/table/table.component.ts","../../../projects/ps-helix/src/lib/components/table/table.component.html","../../../projects/ps-helix/src/lib/components/tabs/tabs.component.ts","../../../projects/ps-helix/src/lib/components/tabs/tabs.component.html","../../../projects/ps-helix/src/lib/components/toast/toast.service.ts","../../../projects/ps-helix/src/lib/components/toast/toast.component.ts","../../../projects/ps-helix/src/lib/components/toast/toast.component.html","../../../projects/ps-helix/src/lib/components/tooltip/tooltip.component.ts","../../../projects/ps-helix/src/lib/components/tooltip/tooltip.component.html","../../../projects/ps-helix/src/lib/services/theme/theme.service.ts","../../../projects/ps-helix/src/lib/services/translation/translation.service.ts","../../../projects/ps-helix/src/lib/services/scroll.service.ts","../../../projects/ps-helix/src/ps-helix.ts"],"sourcesContent":["import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n input,\r\n model,\r\n output,\r\n inject\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AlertType, IconPosition, AlertSize, AlertRole, AlertLabels } from './alert.types';\r\n\r\n// Default alert labels\r\nconst DEFAULT_LABELS: AlertLabels = {\r\n dismiss: 'Dismiss alert'\r\n};\r\n\r\n// Default alert icons\r\nconst DEFAULT_ICONS: Record<string, string> = {\r\n info: 'info',\r\n success: 'check-circle',\r\n warning: 'warning',\r\n danger: 'warning-octagon'\r\n};\r\n\r\n// Default alert configuration\r\nconst DEFAULT_CONFIG = {\r\n type: 'info' as AlertType,\r\n iconPosition: 'left' as IconPosition,\r\n closable: false,\r\n size: 'medium' as AlertSize,\r\n showIcon: true,\r\n role: 'alert' as AlertRole\r\n};\r\n\r\n@Component({\r\n selector: 'psh-alert',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './alert.component.html',\r\n styleUrls: ['./alert.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshAlertComponent {\r\n\r\n // Required model inputs\r\n type = model<AlertType>(DEFAULT_CONFIG.type);\r\n \r\n // Optional model inputs with defaults\r\n iconPosition = model<IconPosition>(DEFAULT_CONFIG.iconPosition);\r\n closable = model(DEFAULT_CONFIG.closable);\r\n size = model<AlertSize>(DEFAULT_CONFIG.size);\r\n showIcon = model(DEFAULT_CONFIG.showIcon);\r\n role = model<AlertRole>(DEFAULT_CONFIG.role);\r\n \r\n // Regular inputs\r\n icon = input<string>();\r\n ariaLabel = input<string>();\r\n dismissLabel = input(DEFAULT_LABELS.dismiss);\r\n ariaLive = input<'polite' | 'assertive'>();\r\n content = input('');\r\n \r\n // Outputs\r\n closed = output<void>();\r\n\r\n // Computed values\r\n defaultIcon = computed(() => DEFAULT_ICONS[this.type()] || 'info');\r\n getIcon = computed(() => this.icon() || this.defaultIcon());\r\n\r\n ariaDescribedBy = computed(() => {\r\n const parts: string[] = [];\r\n if (this.ariaLabel()) parts.push('alert-label');\r\n return parts.length ? parts.join(' ') : undefined;\r\n });\r\n\r\n computedAriaLive = computed(() => \r\n this.ariaLive() || (['warning', 'danger'].includes(this.type()) ? 'assertive' : 'polite')\r\n );\r\n\r\n computedRole = computed(() => \r\n this.role() || (['warning', 'danger'].includes(this.type()) ? 'alert' : 'status')\r\n );\r\n\r\n state = computed(() => {\r\n if (this.closable()) return 'closable';\r\n return this.type();\r\n });\r\n\r\n handleClose(): void {\r\n this.closed.emit();\r\n }\r\n\r\n // Static method to apply default configuration\r\n static applyDefaults(component: PshAlertComponent): void {\r\n component.type.set(DEFAULT_CONFIG.type);\r\n component.iconPosition.set(DEFAULT_CONFIG.iconPosition);\r\n component.closable.set(DEFAULT_CONFIG.closable);\r\n component.size.set(DEFAULT_CONFIG.size);\r\n component.showIcon.set(DEFAULT_CONFIG.showIcon);\r\n component.role.set(DEFAULT_CONFIG.role);\r\n }\r\n}","<div\r\n class=\"alert\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class]=\"type()\"\r\n [attr.role]=\"computedRole()\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [attr.aria-live]=\"computedAriaLive()\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n <div class=\"alert-content\" [class.icon-right]=\"iconPosition() === 'right'\">\r\n @if (showIcon()) {\r\n <i class=\"ph ph-{{ getIcon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n <div class=\"alert-message\">\r\n <ng-content>{{ content() }}</ng-content>\r\n </div>\r\n </div>\r\n \r\n @if (closable()) {\r\n <button\r\n type=\"button\"\r\n class=\"alert-dismiss\"\r\n (click)=\"handleClose()\"\r\n [attr.aria-label]=\"dismissLabel()\"\r\n >\r\n <i class=\"ph ph-x\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n</div>","import { ChangeDetectionStrategy, Component, computed, input, model, inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AvatarSize, AvatarShape, AvatarStatus } from './avatar.types';\r\n\r\n// Default configuration\r\nconst DEFAULT_CONFIG = {\r\n size: 'medium' as AvatarSize,\r\n shape: 'circle' as AvatarShape,\r\n alt: 'User avatar',\r\n icon: 'user'\r\n};\r\n\r\n// Default status colors\r\nconst DEFAULT_STATUS_COLORS: Record<AvatarStatus, string> = {\r\n online: 'var(--success-color)',\r\n offline: 'var(--surface-400)',\r\n away: 'var(--warning-color)',\r\n busy: 'var(--danger-color)'\r\n};\r\n\r\n@Component({\r\n selector: 'psh-avatar',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './avatar.component.html',\r\n styleUrls: ['./avatar.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshAvatarComponent {\r\n\r\n // Model inputs with defaults\r\n size = model<AvatarSize>(DEFAULT_CONFIG.size);\r\n shape = model<AvatarShape>(DEFAULT_CONFIG.shape);\r\n src = model<string | undefined>();\r\n alt = model<string>(DEFAULT_CONFIG.alt);\r\n\r\n // Regular inputs\r\n initials = input('');\r\n icon = input<string>(DEFAULT_CONFIG.icon);\r\n status = input<AvatarStatus | undefined>();\r\n ariaLabel = input<string>();\r\n\r\n // Computed values\r\n hasImage = computed(() => !!this.src());\r\n hasInitials = computed(() => !!this.initials() && !this.hasImage());\r\n hasIcon = computed(() => !this.hasImage() && !this.hasInitials());\r\n\r\n computedAriaLabel = computed(() => this.ariaLabel() || this.alt());\r\n\r\n statusColor = computed(() => {\r\n const currentStatus = this.status();\r\n if (!currentStatus) return undefined;\r\n return DEFAULT_STATUS_COLORS[currentStatus];\r\n });\r\n\r\n state = computed(() => this.status() || 'default');\r\n}","<div \r\n class=\"avatar\"\r\n [class.circle]=\"shape() === 'circle'\"\r\n [class.square]=\"shape() === 'square'\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class.xlarge]=\"size() === 'xlarge'\"\r\n role=\"img\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n @if (hasImage()) {\r\n <img [src]=\"src()\" [attr.alt]=\"alt()\" class=\"avatar-image\" />\r\n } @else if (hasInitials()) {\r\n <span class=\"avatar-initials\">{{ initials() }}</span>\r\n } @else if (hasIcon()) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n\r\n @if (status()) {\r\n <span \r\n class=\"avatar-status\"\r\n [class]=\"status()\"\r\n [style.background-color]=\"statusColor()\"\r\n [attr.aria-label]=\"status()\"\r\n ></span>\r\n }\r\n</div>","import { ChangeDetectionStrategy, Component, computed, input, model, output, inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { BadgeSize, BadgeVariant, BadgePosition, BadgeDisplayType } from './badge.types';\r\n\r\n// Default configuration\r\nconst DEFAULT_CONFIG = {\r\n variant: 'primary' as BadgeVariant,\r\n size: 'medium' as BadgeSize,\r\n displayType: 'text' as BadgeDisplayType,\r\n max: 99,\r\n showZero: false,\r\n position: 'top-right' as BadgePosition\r\n};\r\n\r\n@Component({\r\n selector: 'psh-badge',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './badge.component.html',\r\n styleUrls: ['./badge.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshBadgeComponent<T = number> {\r\n\r\n // Model inputs with defaults\r\n variant = model<BadgeVariant>(DEFAULT_CONFIG.variant);\r\n size = model<BadgeSize>(DEFAULT_CONFIG.size);\r\n displayType = model<BadgeDisplayType>(DEFAULT_CONFIG.displayType);\r\n content = model<string>('');\r\n visible = model(true);\r\n value = model<T>();\r\n max = model(DEFAULT_CONFIG.max);\r\n showZero = model(DEFAULT_CONFIG.showZero);\r\n position = model<BadgePosition>(DEFAULT_CONFIG.position);\r\n\r\n // Regular inputs\r\n overlap = input(false);\r\n ariaLabel = input<string>();\r\n formatter = input<((value: T) => string) | undefined>();\r\n\r\n // Computed values\r\n computedRole = computed(() =>\r\n this.displayType() === 'counter' ? 'status' : 'img'\r\n );\r\n\r\n computedAriaLabel = computed(() => {\r\n if (this.ariaLabel()) return this.ariaLabel();\r\n if (this.content()) return this.content();\r\n return this.computeDisplayValue();\r\n });\r\n\r\n state = computed(() => {\r\n if (!this.visible()) return 'hidden';\r\n if (this.overlap()) return 'overlap';\r\n return this.displayType();\r\n });\r\n\r\n computeDisplayValue = computed(() => {\r\n if (this.displayType() === 'dot') {\r\n return '';\r\n }\r\n\r\n if (this.displayType() !== 'counter' || this.value() === undefined) {\r\n return this.content();\r\n }\r\n\r\n const currentValue = this.value();\r\n const currentFormatter = this.formatter();\r\n\r\n if (currentFormatter && currentValue !== null && currentValue !== undefined) {\r\n return currentFormatter(currentValue);\r\n }\r\n\r\n if (typeof currentValue === 'number') {\r\n const numericValue = currentValue;\r\n if (!this.shouldDisplayValue(numericValue)) return this.content() || '';\r\n return this.formatValue(numericValue);\r\n }\r\n\r\n return currentValue !== undefined ? String(currentValue) : this.content() || '';\r\n });\r\n\r\n private shouldDisplayValue(value: number): boolean {\r\n return value > 0 || this.showZero();\r\n }\r\n\r\n private formatValue(value: number): string {\r\n const max = this.max() ?? 99;\r\n return value > max ? `${max}+` : `${value}`;\r\n }\r\n\r\n // Static method to apply default configuration\r\n static applyDefaults(component: PshBadgeComponent): void {\r\n component.variant.set(DEFAULT_CONFIG.variant);\r\n component.size.set(DEFAULT_CONFIG.size);\r\n component.displayType.set(DEFAULT_CONFIG.displayType);\r\n component.max.set(DEFAULT_CONFIG.max);\r\n component.showZero.set(DEFAULT_CONFIG.showZero);\r\n component.position.set(DEFAULT_CONFIG.position);\r\n }\r\n}","<div \r\n class=\"badge\"\r\n [class.primary]=\"variant() === 'primary'\"\r\n [class.secondary]=\"variant() === 'secondary'\"\r\n [class.success]=\"variant() === 'success'\"\r\n [class.warning]=\"variant() === 'warning'\"\r\n [class.danger]=\"variant() === 'danger'\"\r\n [class.dot]=\"displayType() === 'dot'\"\r\n [class.counter]=\"displayType() === 'counter'\"\r\n [class.overlap]=\"overlap()\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.medium]=\"size() === 'medium'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class.top-right]=\"position() === 'top-right'\"\r\n [class.top-left]=\"position() === 'top-left'\"\r\n [class.bottom-right]=\"position() === 'bottom-right'\"\r\n [class.bottom-left]=\"position() === 'bottom-left'\"\r\n [attr.role]=\"computedRole()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n @if (displayType() === 'text') {\r\n <ng-content></ng-content>\r\n } @else if (displayType() === 'counter') {\r\n {{ computeDisplayValue() }}\r\n }\r\n</div>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonAppearance, ButtonVariant, ButtonSize, ButtonIconPosition } from './button.types';\r\n\r\n@Component({\r\n selector: 'psh-button',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './button.component.html',\r\n styleUrls: ['./button.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshButtonComponent {\r\n private elementRef = inject(ElementRef);\r\n\r\n // Model inputs\r\n appearance = model<ButtonAppearance>('filled');\r\n variant = model<ButtonVariant>('primary');\r\n size = model<ButtonSize>('medium');\r\n disabled = model(false);\r\n loading = model(false);\r\n fullWidth = model(false);\r\n iconPosition = model<ButtonIconPosition>('left');\r\n\r\n // Regular inputs\r\n icon = input<string>();\r\n ariaLabel = input<string>();\r\n loadingText = input('Loading...');\r\n disabledText = input('This action is currently unavailable');\r\n iconOnlyText = input<string>();\r\n type = input<'button' | 'submit' | 'reset'>('button');\r\n\r\n // Outputs\r\n clicked = output<MouseEvent>();\r\n\r\n // Computed values\r\n computedAriaLabel = computed(() => {\r\n if (this.ariaLabel()) return this.ariaLabel();\r\n if (this.loading()) return this.loadingText();\r\n if (this.disabled()) return this.disabledText();\r\n if (this.iconPosition() === 'only') {\r\n return this.iconOnlyText() || `${this.variant()} button`;\r\n }\r\n return '';\r\n });\r\n\r\n state = computed(() => {\r\n if (this.disabled()) return 'disabled';\r\n if (this.loading()) return 'loading';\r\n return 'default';\r\n });\r\n\r\n protected hasContent(): boolean {\r\n const content = this.elementRef.nativeElement\r\n .querySelector('.button-content')\r\n ?.textContent?.trim();\r\n return !!content;\r\n }\r\n\r\n handleClick(event: MouseEvent): void {\r\n if (!this.disabled() && !this.loading()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n}","<button\r\n [attr.data-state]=\"state()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-disabled]=\"disabled() || loading()\"\r\n [attr.aria-busy]=\"loading()\"\r\n role=\"button\"\r\n [type]=\"type()\"\r\n [class]=\"appearance()\"\r\n [class.primary]=\"variant() === 'primary'\"\r\n [class.secondary]=\"variant() === 'secondary'\"\r\n [class.success]=\"variant() === 'success'\"\r\n [class.warning]=\"variant() === 'warning'\"\r\n [class.danger]=\"variant() === 'danger'\"\r\n [class.disabled]=\"disabled()\"\r\n [class.loading]=\"loading()\"\r\n [class.full-width]=\"fullWidth()\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class.icon-only]=\"iconPosition() === 'only'\"\r\n [attr.disabled]=\"disabled() || loading() ? '' : null\"\r\n (click)=\"handleClick($event)\"\r\n>\r\n <span class=\"button-content\">\r\n @if (loading()) {\r\n <span class=\"loader\" aria-hidden=\"true\"></span>\r\n @if (iconPosition() !== 'only') {\r\n {{ loadingText() }}\r\n }\r\n }\r\n @if (!loading() && icon() && (iconPosition() === 'left' || iconPosition() === 'only')) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n @if (!loading() && iconPosition() !== 'only') {\r\n <ng-content></ng-content>\r\n @if (!hasContent()) {\r\n Button\r\n }\r\n }\r\n @if (!loading() && icon() && iconPosition() === 'right') {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n </span>\r\n</button>","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CardVariant, CardColorVariant, CardDensity, CardActionsAlignment } from './card.types';\n\n/**\n * Composant carte métier - conteneur structuré pour contenu professionnel\n *\n * Ce composant fournit une structure de carte métier avec :\n * - Header enrichi avec titre, description et slots pour icônes/badges\n * - Body avec spacing généreux et bien défini\n * - Footer optionnel pour métadonnées\n * - Zone d'actions avec alignement configurable\n * - Support de différentes densités et variantes de couleur\n * - Dividers automatiques entre les sections\n *\n * @example\n * <psh-card\n * title=\"Mon titre\"\n * description=\"Ma description\"\n * variant=\"elevated\"\n * >\n * <p>Contenu principal</p>\n * <div card-actions>\n * <psh-button>Action</psh-button>\n * </div>\n * </psh-card>\n */\n@Component({\n selector: 'psh-card',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './card.component.html',\n styleUrls: ['./card.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PshCardComponent {\n\n // Model inputs - propriétés modifiables\n /** Variante visuelle de la carte (default, elevated, outlined) */\n variant = model<CardVariant>('default');\n\n /** Effet de survol activé (animation translateY) */\n hoverable = model(false);\n\n /** Carte cliquable (ajoute cursor pointer et gestion du focus) */\n interactive = model(false);\n\n // Regular inputs - propriétés en lecture seule\n /** Titre principal de la carte */\n title = input<string>('');\n\n /** Description/sous-titre optionnel */\n description = input<string>('');\n\n /** Variante de couleur pour cartes spéciales (info, success, warning, danger) */\n colorVariant = input<CardColorVariant>('default');\n\n /** Niveau de densité du spacing (compact, normal, spacious) */\n density = input<CardDensity>('normal');\n\n /** Alignement des actions (left, center, right, space-between) */\n actionsAlignment = input<CardActionsAlignment>('right');\n\n /** Afficher le divider entre header et body */\n showHeaderDivider = input<boolean>(true);\n\n /** Afficher le divider entre body et footer */\n showFooterDivider = input<boolean>(true);\n\n /** Afficher le divider avant les actions */\n showActionsDivider = input<boolean>(true);\n\n /** Classes CSS additionnelles */\n cssClass = input<string>('');\n\n /** Styles inline personnalisés */\n customStyle = input<Record<string, string>>({});\n\n /** État de chargement - affiche un skeleton */\n loading = input<boolean>(false);\n\n /** État désactivé - réduit l'opacité */\n disabled = input<boolean>(false);\n\n // Outputs\n /** Émis lors du clic sur la carte (si interactive) */\n clicked = output<MouseEvent>();\n\n // Computed values\n /** Classes CSS calculées selon les propriétés */\n computedClasses = computed(() => {\n const classes = ['card'];\n classes.push(`variant-${this.variant()}`);\n classes.push(`color-${this.colorVariant()}`);\n classes.push(`density-${this.density()}`);\n\n if (this.hoverable()) classes.push('hoverable');\n if (this.interactive()) classes.push('interactive');\n if (this.loading()) classes.push('loading');\n if (this.disabled()) classes.push('disabled');\n if (this.cssClass()) classes.push(this.cssClass());\n\n return classes.join(' ');\n });\n\n /** Styles calculés */\n computedStyles = computed(() => {\n return { ...this.customStyle() };\n });\n\n /** Indique si le header doit être affiché */\n hasHeader = computed(() => {\n return !!(this.title() || this.description());\n });\n\n /** Classe d'alignement des actions */\n actionsAlignmentClass = computed(() => {\n return `actions-align-${this.actionsAlignment()}`;\n });\n\n /**\n * Gère le clic sur la carte\n * Émet l'événement clicked seulement si la carte est interactive\n * et non désactivée\n */\n handleClick(event: MouseEvent): void {\n if (this.interactive() && !this.disabled() && !this.loading()) {\n this.clicked.emit(event);\n }\n }\n\n /**\n * Gère la navigation au clavier (Enter et Space)\n * Permet d'activer la carte au clavier pour l'accessibilité\n */\n handleKeydown(event: KeyboardEvent): void {\n if (this.interactive() && !this.disabled() && !this.loading()) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.clicked.emit(event as any);\n }\n }\n }\n}\n","<div\n [class]=\"computedClasses()\"\n [ngStyle]=\"computedStyles()\"\n (click)=\"handleClick($event)\"\n (keydown)=\"handleKeydown($event)\"\n role=\"article\"\n [attr.tabindex]=\"interactive() && !disabled() ? 0 : null\"\n [attr.aria-disabled]=\"disabled() ? 'true' : null\"\n [attr.aria-busy]=\"loading() ? 'true' : null\"\n>\n <!-- Header avec titre et description intégrés -->\n @if (hasHeader() || true) {\n <div class=\"card-header\" [class.has-divider]=\"showHeaderDivider()\">\n <!-- Slot pour icône/avatar avant le titre -->\n <ng-content select=\"[card-header-icon]\"></ng-content>\n\n <!-- Zone de titre et description -->\n @if (title() || description()) {\n <div class=\"card-header-content\">\n @if (title()) {\n <h3 class=\"card-title\">{{ title() }}</h3>\n }\n @if (description()) {\n <p class=\"card-description\">{{ description() }}</p>\n }\n </div>\n }\n\n <!-- Slot pour contenu personnalisé du header -->\n <ng-content select=\"[card-header-content]\"></ng-content>\n\n <!-- Slot pour badge/tag ou actions secondaires -->\n <ng-content select=\"[card-header-extra]\"></ng-content>\n </div>\n }\n\n <!-- Body avec contenu principal -->\n <div class=\"card-body\">\n <!-- État de chargement -->\n @if (loading()) {\n <div class=\"card-loading\">\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line short\"></div>\n </div>\n } @else {\n <!-- Contenu principal (slot par défaut) -->\n <ng-content></ng-content>\n }\n </div>\n\n <!-- Footer optionnel pour métadonnées -->\n <ng-content select=\"[card-footer]\"></ng-content>\n\n <!-- Actions -->\n <ng-content select=\"[card-actions]\"></ng-content>\n</div>\n","import { ChangeDetectionStrategy, Component, computed, inject, input, model, output, InjectionToken } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TagVariant, TagSize, TagConfig } from './tag.types';\r\n\r\nexport const TAG_CONFIG = new InjectionToken<Partial<TagConfig>>('TAG_CONFIG', {\r\n factory: () => ({\r\n variant: 'primary',\r\n size: 'medium',\r\n closable: false,\r\n disabled: false,\r\n closeLabel: 'Supprimer le tag',\r\n ariaLabels: {\r\n close: 'Supprimer le tag',\r\n disabled: 'Tag désactivé',\r\n status: 'État'\r\n }\r\n })\r\n});\r\n\r\nexport const TAG_STYLES = new InjectionToken<Record<string, string>[]>('TAG_STYLES', {\r\n factory: () => []\r\n});\r\n\r\n@Component({\r\n selector: 'psh-tag',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './tag.component.html',\r\n styleUrls: ['./tag.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshTagComponent {\r\n private config = inject(TAG_CONFIG);\r\n private styles = inject(TAG_STYLES, { optional: true }) ?? [];\r\n\r\n // Model inputs with defaults from config\r\n variant = model<TagVariant>(this.config.variant ?? 'primary');\r\n size = model<TagSize>(this.config.size ?? 'medium');\r\n closable = model(this.config.closable ?? false);\r\n disabled = model(this.config.disabled ?? false);\r\n\r\n // Regular inputs\r\n icon = input<string>();\r\n closeLabel = input(this.config.closeLabel ?? 'Supprimer le tag');\r\n content = input('Tag');\r\n\r\n // Outputs\r\n clicked = output<MouseEvent>();\r\n closed = output<void>();\r\n\r\n // Computed values\r\n customStyles = computed(() => Object.assign({}, ...this.styles));\r\n\r\n state = computed(() => this.disabled() ? 'disabled' : 'default');\r\n\r\n handleClick(event: MouseEvent): void {\r\n if (!this.disabled()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n handleClose(event: MouseEvent): void {\r\n event.stopPropagation();\r\n if (!this.disabled()) {\r\n this.closed.emit();\r\n }\r\n }\r\n}","<div \r\n class=\"tag\"\r\n [class.primary]=\"variant() === 'primary'\"\r\n [class.secondary]=\"variant() === 'secondary'\"\r\n [class.success]=\"variant() === 'success'\"\r\n [class.warning]=\"variant() === 'warning'\"\r\n [class.danger]=\"variant() === 'danger'\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class.disabled]=\"disabled()\"\r\n [attr.aria-disabled]=\"disabled()\"\r\n [attr.data-state]=\"state()\"\r\n role=\"status\"\r\n (click)=\"handleClick($event)\"\r\n>\r\n @if (icon()) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"tag-content\">\r\n <ng-content>{{ content() }}</ng-content>\r\n </span>\r\n @if (closable()) {\r\n <button\r\n type=\"button\"\r\n class=\"tag-close\"\r\n (click)=\"handleClose($event)\"\r\n [attr.aria-label]=\"closeLabel()\"\r\n [disabled]=\"disabled()\"\r\n >\r\n <i class=\"ph ph-x\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n</div>","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PshCardComponent } from '../card/card.component';\nimport { PshTagComponent } from '../tag/tag.component';\n\n/**\n * Interface pour les données d'une carte de statistiques\n */\nexport interface StatCardData {\n /** Titre principal (valeur numérique) */\n value: string | number;\n /** Description de la statistique */\n description: string;\n /** Icône à afficher */\n icon: string;\n /** Variante du tag d'évolution (optionnel) */\n tagVariant?: 'success' | 'danger' | 'warning' | 'primary';\n /** Label du tag d'évolution (optionnel) */\n tagLabel?: string;\n /** Couleur de fond de l'icône (optionnel) */\n iconBackground?: string;\n}\n\n/**\n * Composant carte de statistiques\n * \n * Composant spécialisé pour afficher des statistiques avec icône,\n * valeur, description et tag d'évolution optionnel\n */\n@Component({\n selector: 'psh-stat-card',\n standalone: true,\n imports: [CommonModule, PshCardComponent, PshTagComponent],\n templateUrl: './stat-card.component.html',\n styleUrls: ['./stat-card.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PshStatCardComponent {\n\n // Regular inputs\n /** Données de la statistique */\n data = input.required<StatCardData>();\n \n /** Variante de la carte de base */\n cardVariant = input<'default' | 'elevated' | 'outlined'>('default');\n \n /** Carte cliquable */\n interactive = input(false);\n\n // Outputs\n /** Émis lors du clic sur la carte */\n clicked = output<MouseEvent>();\n\n // Computed values\n /** Style de l'icône avec couleur de fond personnalisée */\n iconStyle = computed(() => {\n const background = this.data().iconBackground;\n return background ? { 'background': background } : {};\n });\n\n /** Vérifie si un tag doit être affiché */\n hasTag = computed(() => {\n const data = this.data();\n return !!(data.tagVariant && data.tagLabel);\n });\n\n /**\n * Gère le clic sur la carte\n */\n handleCardClick(event: MouseEvent): void {\n this.clicked.emit(event);\n }\n}","<psh-card \n [variant]=\"cardVariant()\"\n [interactive]=\"interactive()\"\n [hoverable]=\"interactive()\"\n (clicked)=\"handleCardClick($event)\"\n class=\"stat-card\"\n>\n <!-- Icône à gauche -->\n <div card-side class=\"stat-icon\" [ngStyle]=\"iconStyle()\">\n <i class=\"ph ph-{{ data().icon }}\" aria-hidden=\"true\"></i>\n </div>\n \n <!-- Contenu principal -->\n <div class=\"stat-content\">\n <h3 class=\"stat-value\">{{ data().value }}</h3>\n <p class=\"stat-description\">{{ data().description }}</p>\n \n <!-- Tag d'évolution si présent -->\n @if (hasTag()) {\n <psh-tag [variant]=\"data().tagVariant!\">\n {{ data().tagLabel }}\n </psh-tag>\n }\n </div>\n</psh-card>","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PshCardComponent } from '../card/card.component';\n\n/**\n * Composant carte horizontale\n * \n * Composant spécialisé qui compose psh-card pour créer\n * une mise en page horizontale avec contenu latéral\n */\n@Component({\n selector: 'psh-horizontal-card',\n standalone: true,\n imports: [CommonModule, PshCardComponent],\n templateUrl: './horizontal-card.component.html',\n styleUrls: ['./horizontal-card.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PshHorizontalCardComponent {\n\n // Model inputs\n /** Variante de la carte de base */\n variant = model<'default' | 'elevated' | 'outlined'>('default');\n \n /** Carte cliquable */\n interactive = model(false);\n \n /** Effet de survol */\n hoverable = model(false);\n\n // Regular inputs\n /** Largeur du contenu latéral */\n sideWidth = input<string>('200px');\n \n /** Gap entre le contenu latéral et principal */\n gap = input<string>('var(--spacing-md)');\n \n /** Padding du contenu latéral */\n sidePadding = input<string>('0');\n \n /** Padding du contenu principal */\n contentPadding = input<string>('var(--spacing-md)');\n \n /** Hauteur du contenu latéral (pour mobile) */\n mobileHeight = input<string>('200px');\n\n // Outputs\n /** Émis lors du clic sur la carte */\n clicked = output<MouseEvent>();\n\n /**\n * Gère le clic sur la carte\n */\n handleCardClick(event: MouseEvent): void {\n this.clicked.emit(event);\n }\n}","<psh-card \n [variant]=\"variant()\"\n [interactive]=\"interactive()\"\n [hoverable]=\"hoverable()\"\n (clicked)=\"handleCardClick($event)\"\n class=\"horizontal-card\"\n [customStyle]=\"{\n 'display': 'flex',\n 'flex-direction': 'row',\n 'align-items': 'stretch',\n 'gap': gap(),\n '--horizontal-side-width': sideWidth(),\n '--horizontal-side-padding': sidePadding(),\n '--horizontal-content-padding': contentPadding(),\n '--horizontal-mobile-height': mobileHeight()\n }\"\n>\n <!-- Contenu latéral -->\n <div card-side class=\"horizontal-side\" [style.width]=\"sideWidth()\">\n <ng-content select=\"[horizontal-side]\"></ng-content>\n </div>\n \n <!-- Contenu principal -->\n <div class=\"horizontal-content\">\n <!-- Header optionnel -->\n <ng-content select=\"[horizontal-header]\"></ng-content>\n \n <!-- Contenu principal -->\n <ng-content></ng-content>\n \n <!-- Actions optionnelles -->\n <ng-content select=\"[horizontal-actions]\"></ng-content>\n </div>\n</psh-card>","import { Component, ChangeDetectionStrategy, computed, input, model } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PshCardComponent } from '../card/card.component';\nimport { InfoCardData, InfoCardOptions } from './info-card.types';\n\n/**\n * Composant carte d'informations\n * \n * Composant spécialisé qui compose psh-card pour afficher\n * des données structurées sous forme de paires label/valeur\n */\n@Component({\n selector: 'psh-info-card',\n standalone: true,\n imports: [CommonModule, PshCardComponent],\n templateUrl: './info-card.component.html',\n styleUrls: ['./info-card.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PshInfoCardComponent {\n\n // Regular inputs\n /** Titre de la carte */\n title = input<string>('');\n \n /** Données à afficher */\n data = input<InfoCardData[]>([]);\n \n /** Options d'affichage */\n options = input<InfoCardOptions>({\n showEmptyState: true,\n emptyStateMessage: 'Aucune information disponible',\n labelWidth: undefined,\n valueWidth: undefined\n });\n\n // Model inputs\n /** Variante de la carte de base */\n cardVariant = model<'default' | 'elevated' | 'outlined'>('outlined');\n \n /** Icône du titre */\n icon = input<string>('circle-dashed');\n \n // Computed values\n /** Indique si l'état vide doit être affiché */\n shouldShowEmptyState = computed(() => {\n return this.options().showEmptyState && (!this.data() || this.data().length === 0);\n });\n\n /** Message d'état vide */\n getEmptyStateMessage = computed(() => {\n return this.options().emptyStateMessage || 'Aucune information disponible';\n });\n \n /** Classe CSS de l'icône de titre */\n titleIcon = computed(() => {\n return `ph-${this.icon()}`;\n });\n}","<psh-card [variant]=\"cardVariant()\">\n <!-- En-tête avec titre et icône -->\n @if (title()) {\n <div card-header>\n <h3 class=\"info-card-title\">\n <i class=\"ph {{ titleIcon() }}\" aria-hidden=\"true\"></i>\n {{ title() }}\n </h3>\n </div>\n }\n \n <!-- Contenu principal -->\n <div class=\"info-card-content\">\n @if (shouldShowEmptyState()) {\n <div class=\"info-card-empty-state\">\n {{ getEmptyStateMessage() }}\n </div>\n } @else {\n @for (item of data(); track $index) {\n <div class=\"info-card-row\">\n <div \n class=\"info-card-label\" \n [style.width]=\"item.labelWidth || options().labelWidth\"\n >\n {{ item.label }}\n </div>\n <div \n class=\"info-card-value\"\n [style.width]=\"item.valueWidth || options().valueWidth\"\n >\n {{ item.value || 'Non renseigné' }}\n </div>\n </div>\n }\n }\n </div>\n \n <!-- Actions (slot passthrough) -->\n <ng-content select=\"[card-actions]\"></ng-content>\n</psh-card>","import { ChangeDetectionStrategy, Component, computed, input, model, signal } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { PieChartData, PieChartConfig, PieChartSegment } from './pie-chart.types';\r\n\r\n// Default configuration\r\nconst DEFAULT_CONFIG: PieChartConfig = {\r\n width: 400,\r\n height: 400,\r\n margin: 40,\r\n tooltipFormat: 'percentage',\r\n showLegend: true,\r\n legendPosition: 'right',\r\n interactive: true\r\n};\r\n\r\n// Default data\r\nconst DEFAULT_DATA: PieChartData[] = [\r\n { label: 'Segment 1', value: 30, index: 0, color: 'var(--primary-color)' },\r\n { label: 'Segment 2', value: 25, index: 1, color: 'var(--secondary-color)' },\r\n { label: 'Segment 3', value: 20, index: 2, color: 'var(--success-color)' },\r\n { label: 'Segment 4', value: 15, index: 3, color: 'var(--warning-color)' }\r\n];\r\n\r\n@Component({\r\n selector: 'psh-pie-chart',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './pie-chart.component.html',\r\n styleUrls: ['./pie-chart.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshPieChartComponent {\r\n // Model inputs with defaults\r\n config = model<PieChartConfig>(DEFAULT_CONFIG);\r\n data = model<PieChartData[]>(DEFAULT_DATA);\r\n\r\n // State\r\n hoveredIndex = model<number | null>(null);\r\n hiddenSegments = model<Set<number>>(new Set());\r\n private tooltipWidthSignal = signal(160);\r\n\r\n // Computed values\r\n tooltipWidth = computed(() => this.tooltipWidthSignal());\r\n\r\n center = computed(() => ({\r\n x: this.config().width / 2,\r\n y: this.config().height / 2,\r\n }));\r\n\r\n radius = computed(() =>\r\n Math.min(this.config().width, this.config().height) / 2 - this.config().margin\r\n );\r\n\r\n segments = computed(() => {\r\n const visibleData = this.data().filter(\r\n (item) => !this.hiddenSegments().has(item.index)\r\n );\r\n const total = visibleData.reduce((sum, item) => sum + item.value, 0);\r\n\r\n if (total === 0) {\r\n this.hiddenSegments.set(new Set());\r\n return this.calculateSegments(this.data(), total);\r\n }\r\n\r\n return this.calculateSegments(visibleData, total);\r\n });\r\n\r\n private calculateSegments(data: PieChartData[], total: number): PieChartSegment[] {\r\n let startAngle = 0;\r\n return data.map((item) => {\r\n const percentage = (item.value / total) * 100;\r\n const angle = (percentage / 100) * 2 * Math.PI;\r\n const endAngle = startAngle + angle;\r\n\r\n const segment: PieChartSegment = {\r\n ...item,\r\n startAngle,\r\n endAngle,\r\n percentage,\r\n path: this.calculatePath(startAngle, endAngle),\r\n };\r\n\r\n startAngle = endAngle;\r\n return segment;\r\n });\r\n }\r\n\r\n private calculatePath(startAngle: number, endAngle: number): string {\r\n const radius = this.radius();\r\n const start = {\r\n x: radius * Math.cos(startAngle),\r\n y: radius * Math.sin(startAngle),\r\n };\r\n\r\n const end = {\r\n x: radius * Math.cos(endAngle),\r\n y: radius * Math.sin(endAngle),\r\n };\r\n\r\n const largeArcFlag = endAngle - startAngle <= Math.PI ? '0' : '1';\r\n\r\n return `M 0 0 L ${start.x} ${start.y} A ${radius} ${radius} 0 ${largeArcFlag} 1 ${end.x} ${end.y} Z`;\r\n }\r\n\r\n getTooltipPosition(segment: PieChartSegment) {\r\n const angle = (segment.startAngle + segment.endAngle) / 2;\r\n const distance = this.radius() * 0.6;\r\n\r\n return {\r\n x: this.center().x + Math.cos(angle) * distance,\r\n y: this.center().y + Math.sin(angle) * distance,\r\n };\r\n }\r\n\r\n onSegmentHover(index: number): void {\r\n this.hoveredIndex.set(index);\r\n }\r\n\r\n onSegmentLeave(): void {\r\n this.hoveredIndex.set(null);\r\n }\r\n\r\n getSegmentPercentage(index: number): number {\r\n const segment = this.segments().find((s) => s.index === index);\r\n return segment?.percentage || 0;\r\n }\r\n\r\n toggleSegment(index: number): void {\r\n if (!this.config().interactive) return;\r\n\r\n const newHiddenSegments = new Set(this.hiddenSegments());\r\n const totalSegments = this.data().length;\r\n const currentlyHidden = newHiddenSegments.size;\r\n\r\n if (newHiddenSegments.has(index)) {\r\n newHiddenSegments.delete(index);\r\n } else {\r\n if (currentlyHidden >= totalSegments - 1) {\r\n return;\r\n }\r\n newHiddenSegments.add(index);\r\n }\r\n\r\n this.hiddenSegments.set(newHiddenSegments);\r\n }\r\n\r\n formatValue(value: number, percentage: number): string {\r\n switch (this.config().tooltipFormat) {\r\n case 'value':\r\n return value.toString();\r\n case 'percentage':\r\n return `${percentage.toFixed(1)}%`;\r\n case 'both':\r\n return `${value} (${percentage.toFixed(1)}%)`;\r\n default:\r\n return `${percentage.toFixed(1)}%`;\r\n }\r\n }\r\n}","<div class=\"pie-container\" [class]=\"'legend-' + config().legendPosition\">\r\n <div class=\"chart-section\">\r\n <svg\r\n [attr.width]=\"config().width\"\r\n [attr.height]=\"config().height\"\r\n [attr.aria-label]=\"'Pie Chart'\"\r\n class=\"pie-chart\"\r\n role=\"img\"\r\n [attr.viewBox]=\"'0 0 ' + config().width + ' ' + config().height\"\r\n preserveAspectRatio=\"xMidYMid meet\"\r\n >\r\n <g [attr.transform]=\"'translate(' + center().x + ',' + center().y + ')'\">\r\n @for (segment of segments(); track segment.value) {\r\n <path\r\n [attr.d]=\"segment.path\"\r\n [style.fill]=\"segment.color || 'var(--chart-primary-color)'\"\r\n [class.hovered]=\"hoveredIndex() === segment.index\"\r\n [style.opacity]=\"hiddenSegments().has(segment.index) ? 0.3 : 1\"\r\n (mouseenter)=\"onSegmentHover(segment.index)\"\r\n (mouseleave)=\"onSegmentLeave()\"\r\n [attr.aria-label]=\"segment.label + ': ' + segment.percentage + '%'\"\r\n role=\"graphics-symbol\"\r\n />\r\n }\r\n </g>\r\n\r\n @if (hoveredIndex() !== null) {\r\n @for (segment of segments(); track segment.index) {\r\n @if (hoveredIndex() === segment.index) {\r\n <g \r\n class=\"tooltip\" \r\n [attr.transform]=\"'translate(' + getTooltipPosition(segment).x + ',' + getTooltipPosition(segment).y + ')'\"\r\n [style.--tooltip-width]=\"tooltipWidth() + 'px'\"\r\n > \r\n <rect\r\n [attr.x]=\"-(tooltipWidth() / 2 + 5)\"\r\n y=\"-30\"\r\n [attr.width]=\"tooltipWidth() + 10\"\r\n height=\"60\"\r\n rx=\"4\"\r\n class=\"tooltip-bg\"\r\n />\r\n <text \r\n y=\"-10\"\r\n class=\"tooltip-label\"\r\n [attr.x]=\"0\"\r\n >\r\n {{ segment.label }}\r\n </text>\r\n <text y=\"15\" class=\"tooltip-value\">\r\n {{ formatValue(segment.value, segment.percentage) }}\r\n </text>\r\n </g>\r\n }\r\n }\r\n }\r\n </svg>\r\n </div>\r\n\r\n @if (config().showLegend) {\r\n <div class=\"pie-legend\">\r\n @for (segment of data(); track segment.index) {\r\n <div \r\n class=\"legend-item\"\r\n [class.hidden]=\"hiddenSegments().has(segment.index)\"\r\n [class.hovered]=\"hoveredIndex() === segment.index\"\r\n (mouseenter)=\"onSegmentHover(segment.index)\"\r\n (mouseleave)=\"onSegmentLeave()\"\r\n (click)=\"toggleSegment(segment.index)\"\r\n >\r\n <span \r\n class=\"legend-color\"\r\n [style.background-color]=\"segment.color || 'var(--chart-primary-color)'\"\r\n ></span>\r\n <span class=\"legend-label\">{{ segment.label }}</span>\r\n <span class=\"legend-value\">\r\n {{ getSegmentPercentage(segment.index).toFixed(1) }}%\r\n </span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CheckboxSize } from './checkbox.types';\r\n\r\n// Default configuration\r\nconst DEFAULT_CONFIG = {\r\n checked: false,\r\n disabled: false,\r\n required: false,\r\n indeterminate: false,\r\n size: 'medium' as CheckboxSize,\r\n labelPosition: 'right' as 'left' | 'right'\r\n};\r\n\r\n@Component({\r\n selector: 'psh-checkbox',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './checkbox.component.html',\r\n styleUrls: ['./checkbox.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshCheckboxComponent {\r\n private elementRef = inject(ElementRef);\r\n\r\n // Model inputs with defaults\r\n checked = model(DEFAULT_CONFIG.checked);\r\n disabled = model(DEFAULT_CONFIG.disabled);\r\n required = model(DEFAULT_CONFIG.required);\r\n indeterminate = model(DEFAULT_CONFIG.indeterminate);\r\n size = model<CheckboxSize>(DEFAULT_CONFIG.size);\r\n labelPosition = model<'left' | 'right'>(DEFAULT_CONFIG.labelPosition);\r\n\r\n // Regular inputs\r\n label = input('');\r\n error = input('');\r\n success = input('');\r\n\r\n // Outputs\r\n checkedChange = output<boolean>();\r\n\r\n // Computed values\r\n ariaChecked = computed(() => \r\n this.indeterminate() ? 'mixed' : this.checked()\r\n );\r\n\r\n state = computed(() => this.getState());\r\n\r\n private getState(): string {\r\n if (this.disabled()) return 'disabled';\r\n if (this.indeterminate()) return 'indeterminate';\r\n if (this.error()) return 'error';\r\n if (this.success()) return 'success';\r\n return this.checked() ? 'checked' : 'unchecked';\r\n }\r\n\r\n protected hasContent(): boolean {\r\n const content = this.elementRef.nativeElement\r\n .querySelector('.checkbox-text')\r\n ?.textContent?.trim();\r\n return !!content || !!this.label();\r\n }\r\n\r\n toggle(): void {\r\n if (!this.disabled()) {\r\n const newValue = !this.checked();\r\n this.checked.set(newValue);\r\n this.indeterminate.set(false);\r\n this.checkedChange.emit(newValue);\r\n }\r\n }\r\n\r\n // Static method to apply default configuration\r\n static applyDefaults(component: PshCheckboxComponent): void {\r\n component.checked.set(DEFAULT_CONFIG.checked);\r\n component.disabled.set(DEFAULT_CONFIG.disabled);\r\n component.required.set(DEFAULT_CONFIG.required);\r\n component.indeterminate.set(DEFAULT_CONFIG.indeterminate);\r\n component.size.set(DEFAULT_CONFIG.size);\r\n component.labelPosition.set(DEFAULT_CONFIG.labelPosition);\r\n }\r\n}","<div \r\n class=\"checkbox-container\"\r\n [attr.aria-describedby]=\"error() ? 'error-message' : success() ? 'success-message' : null\"\r\n [class.disabled]=\"disabled()\"\r\n [class.error]=\"!!error()\"\r\n [class.success]=\"!!success()\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n <label class=\"checkbox-label\" [class.label-left]=\"labelPosition() === 'left'\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"checkbox-input\"\r\n [checked]=\"checked()\"\r\n [disabled]=\"disabled()\"\r\n [required]=\"required()\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-invalid]=\"!!error()\"\r\n [attr.aria-checked]=\"ariaChecked()\"\r\n (change)=\"toggle()\"\r\n />\r\n <span \r\n class=\"checkbox-control\"\r\n [class.error]=\"!!error()\"\r\n [class.success]=\"!!success()\"\r\n [class.indeterminate]=\"indeterminate()\"\r\n >\r\n @if (checked() && !indeterminate()) {\r\n <i class=\"ph ph-check\" aria-hidden=\"true\"></i>\r\n }\r\n @if (indeterminate()) {\r\n <i class=\"ph ph-minus\" aria-hidden=\"true\"></i>\r\n }\r\n </span>\r\n <span class=\"checkbox-text\">\r\n @if (label()) {\r\n {{ label() }}\r\n } @else {\r\n <ng-content>Checkbox</ng-content>\r\n }\r\n </span>\r\n </label>\r\n\r\n @if (error()) {\r\n <div id=\"error-message\" class=\"checkbox-error\" role=\"alert\">\r\n {{ error() }}\r\n </div>\r\n }\r\n\r\n @if (success()) {\r\n <div id=\"success-message\" class=\"checkbox-success\" role=\"status\">\r\n {{ success() }}\r\n </div>\r\n }\r\n</div>","import { ChangeDetectionStrategy, Component, computed, input, model, output, inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CollapseVariant, CollapseSize } from './collapse.types';\r\n\r\n// Default configuration\r\nconst DEFAULT_CONFIG = {\r\n expanded: false,\r\n disabled: false,\r\n icon: 'caret-down',\r\n variant: 'default' as CollapseVariant,\r\n size: 'medium' as CollapseSize\r\n};\r\n\r\n@Component({\r\n selector: 'psh-collapse',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './collapse.component.html',\r\n styleUrls: ['./collapse.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshCollapseComponent {\r\n\r\n // Model inputs with defaults\r\n expanded = model(DEFAULT_CONFIG.expanded);\r\n disabled = model(DEFAULT_CONFIG.disabled);\r\n variant = model<CollapseVariant>(DEFAULT_CONFIG.variant);\r\n size = model<CollapseSize>(DEFAULT_CONFIG.size);\r\n\r\n // Regular inputs\r\n icon = input<string>(DEFAULT_CONFIG.icon);\r\n header = input('');\r\n\r\n // Outputs\r\n expandedChange = output<boolean>();\r\n\r\n state = computed(() => this.getState());\r\n\r\n private getState(): string {\r\n if (this.disabled()) return 'disabled';\r\n return this.expanded() ? 'expanded' : 'collapsed';\r\n }\r\n\r\n toggle(): void {\r\n if (!this.disabled()) {\r\n const newValue = !this.expanded();\r\n this.expanded.set(newValue);\r\n this.expandedChange.emit(newValue);\r\n }\r\n }\r\n\r\n // Static method to apply default configuration\r\n static applyDefaults(component: PshCollapseComponent): void {\r\n component.expanded.set(DEFAULT_CONFIG.expanded);\r\n component.disabled.set(DEFAULT_CONFIG.disabled);\r\n component.variant.set(DEFAULT_CONFIG.variant);\r\n component.size.set(DEFAULT_CONFIG.size);\r\n }\r\n}","<div \r\n class=\"collapse\"\r\n [class.expanded]=\"expanded()\"\r\n [class.disabled]=\"disabled()\"\r\n [class.outline]=\"variant() === 'outline'\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n <button\r\n class=\"collapse-header\"\r\n (click)=\"toggle()\"\r\n [attr.aria-expanded]=\"expanded()\"\r\n [attr.aria-disabled]=\"disabled()\"\r\n type=\"button\"\r\n >\r\n <span class=\"header-content\">\r\n <ng-content select=\"[collapse-header]\">\r\n @if (header()) {\r\n {{ header() }}\r\n } @else {\r\n Section pliable\r\n }\r\n </ng-content>\r\n </span>\r\n <i \r\n class=\"ph ph-{{ icon() }}\"\r\n [class.expanded]=\"expanded()\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </button>\r\n\r\n <div \r\n class=\"collapse-content\"\r\n role=\"region\"\r\n [attr.aria-hidden]=\"!expanded()\"\r\n >\r\n <div class=\"content-wrapper\">\r\n <ng-content>\r\n <p>Contenu de la section pliable</p>\r\n </ng-content>\r\n </div>\r\n </div>\r\n</div>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n OnDestroy\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DropdownItem, DropdownPlacement } from './dropdown.types';\r\n\r\n@Component({\r\n selector: 'psh-dropdown',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './dropdown.component.html',\r\n styleUrls: ['./dropdown.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PshDropdownComponent<T = string> implements OnDestroy {\r\n private elementRef = inject(ElementRef);\r\n private clickOutsideHandler: ((event: MouseEvent) => void) | null = null;\r\n\r\n // Model inputs\r\n variant = model<'primary' | 'secondary' | 'outline' | 'text'>('primary');\r\n placement = model<DropdownPlacement>('bottom-start');\r\n disabled = model(false);\r\n\r\n // Regular inputs\r\n items = input<DropdownItem<T>[]>([]);\r\n label = input('Dropdown Menu');\r\n icon = input<string>();\r\n ariaLabel = input<string>();\r\n\r\n // State\r\n private isOpenSignal = signal(false);\r\n private selectedItemSignal = signal<DropdownItem<T> | null>(null);\r\n\r\n // Outputs\r\n selected = output<DropdownItem<T>>();\r\n opened = output<void>();\r\n closed = output<void>();\r\n\r\n // Computed values\r\n isOpen = computed(() => this.isOpenSignal());\r\n selectedItem = computed(() => this.selectedItemSignal());\r\n\r\n computedAriaLabel = computed(() => \r\n this.ariaLabel() || 'Toggle dropdown menu'\r\n );\r\n\r\n state = computed(() => this.getState());\r\n\r\n private getState(): string {\r\n if (this.disabled()) return 'disabled';\r\n if (this.isOpen()) return 'open';\r\n return 'closed';\r\n }\r\n\r\n constructor() {\r\n this.setupClickOutsideListener();\r\n }\r\n\r\n private setupClickOutsideListener(): void {\r\n this.clickOutsideHandler = (event: MouseEvent) => {\r\n if (this.isOpen()) {\r\n const target = event.target as HTMLElement;\r\n if (!this.elementRef.nativeElement.contains(target)) {\r\n this.close();\r\n }\r\n }\r\n };\r\n document.addEventListener('click', this.clickOutsideHandler);\r\n }\r\n\r\n toggleDropdown(): void {\r\n if (!this.disabled()) {\r\n event?.stopPropagation();\r\n this.isOpenSignal.update(v => !v);\r\n if (this.isOpen()) {\r\n this.opened.emit();\r\n } else {\r\n this.closed.emit();\r\n }\r\n }\r\n }\r\n\r\n selectItem(item: DropdownItem<T>): void {\r\n if (!item.disabled) {\r\n this.selectedItemSignal.set(item);\r\n this.selected.emit(item);\r\n this.close();\r\n }\r\n }\r\n\r\n close(): void {\r\n if (this.isOpen()) {\r\n this.isOpenSignal.set(false);\r\n this.closed.emit();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.clickOutsideHandler) {\r\n document.removeEventListener('click', this.clickOutsideHandler);\r\n }\r\n }\r\n}","<div \r\n class=\"dropdown-container\"\r\n [class.open]=\"isOpen()\"\r\n [class.disabled]=\"disabled()\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n <button\r\n class=\"dropdown-trigger\"\r\n [class]=\"variant()\"\r\n (click)=\"toggleDropdown()\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n [attr.aria-disabled]=\"disabled()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n type=\"button\"\r\n >\r\n <span class=\"trigger-content\">\r\n @if (icon()) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n <ng-content select=\"[dropdown-trigger]\">\r\n @if (label()) {\r\n {{ label() }}\r\n }\r\n </ng-content>\r\n <i \r\n class=\"ph ph-caret-down trigger-arrow\"\r\n [class.open]=\"isOpen()\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </span>\r\n </button>\r\n\r\n @if (isOpen()) {\r\n <div \r\n class=\"dropdown-menu\"\r\n [class]=\"placement()\"\r\n role=\"menu\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <ng-content select=\"[dropdown-menu]\">\r\n @for (item of items(); track item.value) {\r\n <button\r\n class=\"dropdown-item\"\r\n [class.disabled]=\"item.disabled\"\r\n [class.active]=\"selectedItem() === item\"\r\n (click)=\"selectItem(item)\"\r\n role=\"menuitem\"\r\n [attr.aria-disabled]=\"item.disabled\"\r\n >\r\n @if (item.icon) {\r\n <i class=\"ph ph-{{ item.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"item-label\">{{ item.content }}</span>\r\n </button>\r\n }\r\n </ng-content>\r\n </div>\r\n }\r\n</div>","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n model,\n output,\n signal,\n ChangeDetectorRef,\n forwardRef\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { InputType, InputVariant, InputSize, AutocompleteConfig } from './input.types';\n\n@Component({\n selector: 'psh-input',\n standalone: true,\n imports: [CommonModule, FormsModule],\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PshInputComponent),\n multi: true\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PshInputComponent implements ControlValueAccessor {\n private elementRef = inject(ElementRef);\n private cdr = inject(ChangeDetectorRef);\n\n // Generate unique ID for the input\n readonly inputId = `input-${Math.random().toString(36).substring(2, 11)}`;\n\n // Model inputs\n value = model('');\n disabled = model(false);\n required = model(false);\n readonly = model(false);\n loading = model(false);\n fullWidth = model(false);\n variant = model<InputVariant>('outlined');\n size = model<InputSize>('medium');\n showLabel = input(true);\n\n // Regular inputs\n type = input<InputType>('text');\n placeholder = input('');\n label = input(''); // Ajout d'un input label spécifique\n ariaLabel = input<string | null>(null); // Ajout d'un input ariaLabel spécifique\n iconStart = input<string>();\n iconEnd = input<string>();\n error = input<string | null | undefined>(null);\n success = input<string | null | undefined>(null);\n hint = input<string | null | undefined>(null);\n suggestions = input<string[] | ((query: string) => Promise<string[]>)>([]);\n autocompleteConfig = input<AutocompleteConfig>({\n minLength: 1,\n debounceTime: 300\n });\n\n // State\n private suggestionsVisible = signal(false);\n private focusedSignal = signal(false);\n private filteredSuggestionsSignal = signal<string[]>([]);\n focusedSuggestionIndex = signal(-1);\n private passwordVisibleSignal = signal(false);\n\n // Outputs\n valueChange = output<string>();\n inputFocus = output<void>();\n inputBlur = output<void>();\n suggestionSelect = output<string>();\n\n // Computed values\n showSuggestions = computed(() => this.suggestionsVisible() && this.filteredSuggestions().length > 0);\n filteredSuggestions = computed(() => this.filteredSuggestionsSignal());\n focused = computed(() => this.focusedSignal());\n passwordVisible = computed(() => this.passwordVisibleSignal());\n effectiveType = computed(() => {\n if (this.type() === 'password') {\n return this.passwordVisible() ? 'text' : 'password';\n }\n return this.type();\n });\n\n // Computed aria-label pour l'accessibilité\n computedAriaLabel = computed(() => {\n return this.ariaLabel() || this.label() || this.placeholder();\n });\n\n state = computed(() => this.getState());\n\n private getState(): string {\n if (this.disabled()) return 'disabled';\n if (this.readonly()) return 'readonly';\n if (this.loading()) return 'loading';\n if (this.error()) return 'error';\n if (this.success()) return 'success';\n if (this.focused()) return 'focused';\n return 'default';\n }\n\n // ControlValueAccessor implementation\n private onChange = (_: any) => {};\n private onTouched = () => {};\n\n writeValue(value: any): void {\n this.value.set(value ?? '');\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n // Event handlers\n handleInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.value.set(value);\n this.valueChange.emit(value);\n this.onChange(value);\n \n if (this.suggestions()) {\n this.updateSuggestions(value);\n }\n }\n\n handleFocus(): void {\n this.focusedSignal.set(true);\n this.inputFocus.emit();\n this.onTouched();\n \n if (this.suggestions() && this.value().length >= this.autocompleteConfig().minLength) {\n this.updateSuggestions(this.value());\n }\n }\n\n handleBlur(): void {\n this.focusedSignal.set(false);\n this.inputBlur.emit();\n this.onTouched();\n \n setTimeout(() => {\n this.suggestionsVisible.set(false);\n this.focusedSuggestionIndex.set(-1);\n }, 200);\n }\n\n handleKeydown(event: KeyboardEvent): void {\n if (!this.showSuggestions()) return;\n\n const suggestions = this.filteredSuggestions();\n const currentIndex = this.focusedSuggestionIndex();\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.focusedSuggestionIndex.update(i => \n i < suggestions.length - 1 ? i + 1 : 0\n );\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n this.focusedSuggestionIndex.update(i => \n i > 0 ? i - 1 : suggestions.length - 1\n );\n break;\n\n case 'Enter':\n event.preventDefault();\n if (currentIndex >= 0 && currentIndex < suggestions.length) {\n const selectedSuggestion = suggestions[currentIndex];\n if (selectedSuggestion) {\n this.handleSuggestionClick(selectedSuggestion);\n }\n }\n break;\n\n case 'Escape':\n event.preventDefault();\n this.suggestionsVisible.set(false);\n this.focusedSuggestionIndex.set(-1);\n break;\n }\n }\n\n handleSuggestionClick(suggestion: string): void {\n if (suggestion) {\n this.value.set(suggestion);\n this.valueChange.emit(suggestion);\n this.onChange(suggestion);\n this.suggestionSelect.emit(suggestion);\n this.suggestionsVisible.set(false);\n }\n }\n\n togglePasswordVisibility(): void {\n this.passwordVisibleSignal.update(v => !v);\n }\n\n protected hasLabelContent(): boolean {\n return !!this.elementRef.nativeElement.querySelector('[input-label]');\n }\n\n protected hasSlotContent(slot: string): boolean {\n return !!this.elementRef.nativeElement.querySelector(`[${slot}]`);\n }\n\n focusSelect(): void {\n const input = this.elementRef.nativeElement.querySelector('input');\n if (input) {\n input.focus();\n }\n }\n\n private async updateSuggestions(value: string) {\n const suggestionsValue = this.suggestions();\n \n if (typeof suggestionsValue === 'function') {\n try {\n const results = await suggestionsValue(value);\n if (Array.isArray(results)) {\n this.filteredSuggestionsSignal.set(results);\n this.suggestionsVisible.set(true);\n }\n } catch (error) {\n console.error('Error fetching suggestions:', error);\n this.filteredSuggestionsSignal.set([]);\n }\n } else if (Array.isArray(suggestionsValue)) {\n const filtered = suggestionsValue.filter(suggestion =>\n suggestion.toLowerCase().includes(value.toLowerCase())\n );\n this.filteredSuggestionsSignal.set(filtered);\n this.suggestionsVisible.set(true);\n }\n }\n}","<div \r\n class=\"input-container\"\r\n [class.full-width]=\"fullWidth()\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class.error]=\"!!error()\"\r\n [class.success]=\"!!success()\"\r\n [class.disabled]=\"disabled()\"\r\n [class.readonly]=\"readonly()\"\r\n [class.loading]=\"loading()\"\r\n [class.focused]=\"focused()\"\r\n [class.has-start-icon]=\"!!iconStart()\"\r\n [class.has-end-icon]=\"!!iconEnd() || type() === 'password'\"\r\n [class.outlined]=\"variant() === 'outlined'\"\r\n [class.filled]=\"variant() === 'filled'\"\r\n>\r\n <!-- Label slot -->\r\n @if (showLabel()) {\r\n <label class=\"input-label\" [for]=\"inputId\" (click)=\"focusSelect()\" [class.required]=\"required()\">\r\n <ng-content select=\"[input-label]\"></ng-content>\r\n @if (!hasLabelContent()) {\r\n {{ label() }}\r\n }\r\n </label>\r\n }\r\n\r\n <div class=\"input-wrapper\">\r\n @if (iconStart()) {\r\n <i class=\"ph ph-{{ iconStart() }}\" aria-hidden=\"true\"></i>\r\n }\r\n\r\n <input\r\n [id]=\"inputId\"\r\n [type]=\"effectiveType()\"\r\n [attr.placeholder]=\"placeholder()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-invalid]=\"!!error()\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-describedby]=\"error() ? 'error-message' : success() ? 'success-message' : hint() ? 'hint-message' : null\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [required]=\"required()\"\r\n [ngModel]=\"value()\"\r\n (ngModelChange)=\"value.set($event)\"\r\n (input)=\"handleInput($event)\"\r\n (keydown)=\"handleKeydown($event)\"\r\n (focus)=\"handleFocus()\"\r\n (blur)=\"handleBlur()\"\r\n [attr.data-state]=\"state()\"\r\n />\r\n\r\n @if (iconEnd()) {\r\n <i class=\"ph ph-{{ iconEnd() }}\" aria-hidden=\"true\"></i>\r\n }\r\n\r\n @if (type() === 'password') {\r\n <button\r\n type=\"button\"\r\n class=\"password-toggle\"\r\n (click)=\"togglePasswordVisibility()\"\r\n [attr.aria-label]=\"passwordVisible() ? 'Masquer le mot de passe' : 'Afficher le mot de passe'\"\r\n [disabled]=\"disabled() || readonly()\"\r\n >\r\n <i \r\n [class]=\"'ph ph-' + (passwordVisible() ? 'eye-slash' : 'eye')\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </button>\r\n }\r\n\r\n @if (loading()) {\r\n <div class=\"input-loader\" aria-hidden=\"true\">\r\n <div class=\"loader\"></div>\r\n </div>\r\n }\r\n\r\n @if (showSuggestions()) {\r\n <div class=\"suggestions-list\" role=\"listbox\">\r\n @for (suggestion of filteredSuggestions(); track suggestion; let i = $index) {\r\n <div \r\n class=\"suggestion-item\"\r\n [class.focused]=\"i === focusedSuggestionIndex()\"\r\n role=\"option\"\r\n [attr.aria-selected]=\"i === focusedSuggestionIndex()\"\r\n (click)=\"handleSuggestionClick(suggestion)\"\r\n (mouseenter)=\"focusedSuggestionIndex.set(i)\"\r\n >\r\n {{ suggestion }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Error message slot -->\r\n @if (error()) {\r\n <div id=\"error-message\" class=\"input-error\" role=\"alert\">\r\n <ng-content select=\"[input-error]\">\r\n {{ error() }}\r\n </ng-content>\r\n </div>\r\n }\r\n\r\n <!-- Success message slot -->\r\n @if (success()) {\r\n <div id=\"success-message\" class=\"input-success\" role=\"status\">\r\n <ng-content select=\"[input-success]\">\r\n {{ success() }}\r\n </ng-content>\r\n </div>\r\n }\r\n\r\n <!-- Hint message slot -->\r\n @if (hint()) {\r\n <div id=\"hint-message\" class=\"input-hint\">\r\n <ng-content select=\"[input-hint]\">\r\n {{ hint() }}\r\n </ng-content>\r\n </div>\r\n }\r\n</div>","import { Injectable } from '@angular/core';\r\nimport { Component, computed, inject, input, model, output, signal } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MenuItem, MenuMode, MenuVariant } from './menu.types';\r\n\r\n@Component({\r\n selector: 'psh-menu',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './menu.component.html',\r\n styleUrls: ['./menu.component.css'],\r\n})\r\nexport class PshMenuComponent<T = string> {\r\n\r\n // Model inputs\r\n mode = model<MenuMode>('vertical');\r\n variant = model<MenuVariant>('default');\r\n collapsible = model(false);\r\n collapsed = model(false);\r\n ariaLabels = model<Record<string, string>>({\r\n disabled: 'Disabled',\r\n submenu: 'Submenu',\r\n expand: 'Expand menu',\r\n collapse: 'Collapse menu'\r\n });\r\n\r\n // Regular inputs\r\n items = input<MenuItem<T>[]>([\r\n { id: 'home', content: 'Home', icon: 'house' } as MenuItem<T>,\r\n {\r\n id: 'settings',\r\n content: 'Settings',\r\n icon: 'gear',\r\n children: [\r\n { id: 'profile', content: 'Profile' } as MenuItem<T>,\r\n { id: 'security', content: 'Security' } as MenuItem<T>\r\n ]\r\n } as MenuItem<T>,\r\n { id: 'divider1', divider: true, content: 'Divider' } as MenuItem<T>,\r\n { id: 'help', content: 'Help', icon: 'question' } as MenuItem<T>\r\n ]);\r\n\r\n // Outputs\r\n itemClick = output<MenuItem<T>>();\r\n collapsedChange = output<boolean>();\r\n\r\n // State\r\n expandedItems = signal(new Set<string>());\r\n\r\n // Computed values\r\n hasItems = computed(() => this.items().length > 0);\r\n isHorizontal = computed(() => this.mode() === 'horizontal');\r\n isCollapsed = computed(() => this.collapsed() && !this.isHorizontal());\r\n\r\n state = computed(() => this.getState());\r\n\r\n private getState(): string {\r\n if (this.collapsed()) return 'collapsed';\r\n if (this.collapsible()) return 'collapsible';\r\n return this.mode();\r\n }\r\n\r\n toggleItem(item: MenuItem<T>): void {\r\n if (item.disabled) return;\r\n\r\n if (item.children?.length) {\r\n const newExpanded = new Set(this.expandedItems());\r\n if (newExpanded.has(item.id)) {\r\n newExpanded.delete(item.id);\r\n } else if (!this.collapsed()) {\r\n newExpanded.add(item.id);\r\n }\r\n this.expandedItems.set(newExpanded);\r\n }\r\n this.itemClick.emit(item);\r\n }\r\n\r\n isExpanded(item: MenuItem<T>): boolean {\r\n return !this.collapsed() && this.expandedItems().has(item.id);\r\n }\r\n\r\n toggleCollapse(): void {\r\n if (this.collapsible()) {\r\n // Fermer tous les sous-menus lors du collapse\r\n if (!this.collapsed()) {\r\n this.expandedItems.set(new Set());\r\n }\r\n this.collapsed.update((v) => !v);\r\n this.collapsedChange.emit(this.collapsed());\r\n }\r\n }\r\n\r\n getAriaLabel(item: MenuItem<T>): string {\r\n const base = item.content;\r\n if (item.disabled) {\r\n return `${base} (${this.ariaLabels()['disabled']})`;\r\n }\r\n if (item.children?.length) {\r\n return `${base} (${this.ariaLabels()['submenu']})`;\r\n }\r\n return base;\r\n }\r\n}","<nav \r\n class=\"menu\"\r\n [class.vertical]=\"mode() === 'vertical'\"\r\n [class.horizontal]=\"mode() === 'horizontal'\"\r\n [class.compact]=\"variant() === 'compact'\"\r\n [class.expanded]=\"variant() === 'expanded'\"\r\n [class.collapsed]=\"collapsed()\"\r\n role=\"navigation\"\r\n [attr.aria-label]=\"'Navigation menu'\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n @if (collapsible()) {\r\n <button \r\n class=\"menu-collapse-button\"\r\n (click)=\"toggleCollapse()\"\r\n [attr.aria-expanded]=\"!collapsed()\"\r\n [attr.aria-label]=\"collapsed() ? ariaLabels()['expand'] : ariaLabels()['collapse']\"\r\n >\r\n <i class=\"ph ph-caret-left\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n <ul class=\"menu-list\" role=\"menubar\">\r\n @for (item of items(); track item.id) {\r\n @if (item.divider) {\r\n <li class=\"menu-divider\" role=\"separator\"></li>\r\n } @else {\r\n <li \r\n class=\"menu-item\"\r\n [class.has-children]=\"item.children?.length\"\r\n [class.expanded]=\"isExpanded(item)\"\r\n [class.disabled]=\"item.disabled\"\r\n role=\"none\"\r\n >\r\n <a\r\n class=\"menu-link\"\r\n [attr.href]=\"item.path\"\r\n [class.active]=\"item.active\"\r\n [attr.aria-disabled]=\"item.disabled\"\r\n [attr.aria-expanded]=\"item.children?.length ? isExpanded(item) : null\"\r\n [attr.aria-label]=\"getAriaLabel(item)\"\r\n (click)=\"toggleItem(item)\"\r\n role=\"menuitem\"\r\n [attr.tabindex]=\"item.disabled ? -1 : 0\"\r\n >\r\n @if (item.icon) {\r\n <i class=\"ph ph-{{ item.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n \r\n @if (!collapsed() || mode() === 'horizontal') {\r\n <span class=\"menu-label\">{{ item.content }}</span>\r\n }\r\n\r\n @if (item.badge) {\r\n <span class=\"menu-badge\" role=\"status\">{{ item.badge }}</span>\r\n }\r\n\r\n @if (item.children?.length) {\r\n <i \r\n class=\"ph ph-caret-down menu-arrow\"\r\n [class.expanded]=\"isExpanded(item)\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n }\r\n </a>\r\n\r\n @if (item.children?.length) {\r\n <ul \r\n class=\"submenu\" \r\n role=\"menu\" \r\n [attr.aria-label]=\"item.content + ' submenu'\"\r\n >\r\n @for (child of item.children; track child.id) {\r\n <li class=\"menu-item\" role=\"none\">\r\n <a\r\n class=\"menu-link\"\r\n [attr.href]=\"child.path\"\r\n [class.active]=\"child.active\"\r\n [attr.aria-disabled]=\"child.disabled\"\r\n [attr.aria-label]=\"getAriaLabel(child)\"\r\n (click)=\"toggleItem(child)\"\r\n role=\"menuitem\"\r\n [attr.tabindex]=\"child.disabled ? -1 : 0\"\r\n >\r\n @if (child.icon) {\r\n <i class=\"ph ph-{{ child.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"menu-label\">{{ child.content }}</span>\r\n @if (child.badge) {\r\n <span class=\"menu-badge\" role=\"status\">{{ child.badge }}</span>\r\n }\r\n </a>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n }\r\n </ul>\r\n</nav>","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n ViewChild,\n ElementRef,\n AfterViewInit,\n OnDestroy,\n InjectionToken,\n Injectable,\n signal\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PshButtonComponent } from '../button/button.component';\nimport { ModalSize, ModalConfig } from './modal.types';\n\n/**\n * Token d'injection pour la configuration globale des modales\n */\nexport const MODAL_CONFIG = new InjectionToken<Partial<ModalConfig>>('MODAL_CONFIG', {\n factory: () => ({\n size: 'medium',\n showClose: true,\n closeOnBackdrop: true,\n closeOnEscape: true,\n preventScroll: true,\n showFooter: true,\n dismissLabel: 'Close',\n confirmLabel: 'Confirm',\n cancelLabel: 'Cancel'\n })\n});\n\n/**\n * Service pour la gestion des modales\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ModalService {\n private config = inject(MODAL_CONFIG);\n private modalsSignal = signal<Set<string>>(new Set());\n\n /**\n * Récupère la configuration de la modale\n */\n getConfig(): Partial<ModalConfig> {\n return this.config;\n }\n\n /**\n * Génère un identifiant unique pour la modale\n */\n generateId(): string {\n return `modal-${Math.random().toString(36).substring(2, 11)}`;\n }\n\n /**\n * Ajoute une modale à la liste\n */\n register(id: string): void {\n this.modalsSignal.update(modals => {\n modals.add(id);\n return modals;\n });\n }\n\n /**\n * Supprime une modale de la liste\n */\n unregister(id: string): void {\n this.modalsSignal.update(modals => {\n modals.delete(id);\n return modals;\n });\n }\n\n /**\n * Vérifie si une modale est enregistrée\n */\n isRegistered(id: string): boolean {\n return this.modalsSignal().has(id);\n }\n\n /**\n * Récupère le nombre de modales actives\n */\n getActiveModalsCount(): number {\n return this.modalsSignal().size;\n }\n}\n\n@Component({\n selector: 'psh-modal',\n standalone: true,\n imports: [CommonModule, PshButtonComponent],\n templateUrl: './modal.component.html',\n styleUrls: ['./modal.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PshModalComponent implements OnDestroy {\n private config = inject(MODAL_CONFIG);\n private modalService = inject(ModalService);\n private modalId = this.modalService.generateId();\n\n // Model inputs with defaults from config\n open = model(false);\n size = model<ModalSize>(this.config.size ?? 'medium');\n showClose = model(this.config.showClose ?? true);\n closeOnBackdrop = model(this.config.closeOnBackdrop ?? true);\n closeOnEscape = model(this.config.closeOnEscape ?? true);\n preventScroll = model(this.config.preventScroll ?? true);\n showFooter = model(this.config.showFooter ?? true);\n\n // Regular inputs\n title = input('Modal Title');\n dismissLabel = input(this.config.dismissLabel ?? 'Close');\n confirmLabel = input(this.config.confirmLabel ?? 'Confirm');\n cancelLabel = input(this.config.cancelLabel ?? 'Cancel');\n\n // Outputs\n closed = output<void>();\n confirmed = output<void>();\n\n private hasCustomFooterValue = false;\n private escapeHandler = (event: KeyboardEvent) => {\n if (this.closeOnEscape() && this.open() && event.key === 'Escape') {\n this.handleClose();\n }\n };\n\n // Computed values\n hasCustomFooter = computed(() => this.hasCustomFooterValue);\n\n state = computed(() => this.getState());\n\n private getState(): string {\n if (!this.open()) return 'closed';\n return 'open';\n }\n\n @ViewChild('modalContent', { static: false }) modalContent?: ElementRef;\n\n constructor() {\n // Gérer les changements d'état\n effect(() => {\n if (this.open()) {\n this.modalService.register(this.modalId);\n this.setupScrollLock();\n document.addEventListener('keydown', this.escapeHandler);\n } else {\n this.modalService.unregister(this.modalId);\n this.removeScrollLock();\n document.removeEventListener('keydown', this.escapeHandler);\n }\n });\n }\n\n\n handleClose(): void {\n this.open.set(false);\n this.closed.emit();\n }\n\n handleConfirm(): void {\n this.confirmed.emit();\n }\n\n handleBackdropClick(event: MouseEvent): void {\n if (this.closeOnBackdrop() && event.target === event.currentTarget) {\n this.handleClose();\n }\n }\n\n private setupScrollLock(): void {\n if (this.preventScroll() && typeof window !== 'undefined') {\n // Calculate scrollbar width only once when opening\n if (\n !document.documentElement.style.getPropertyValue('--scrollbar-width')\n ) {\n const scrollbarWidth =\n window.innerWidth - document.documentElement.clientWidth;\n document.documentElement.style.setProperty(\n '--scrollbar-width',\n `${scrollbarWidth}px`\n );\n }\n document.body.classList.add('modal-open');\n }\n }\n\n private removeScrollLock(): void {\n if (this.preventScroll() && typeof window !== 'undefined') {\n document.body.classList.remove('modal-open');\n }\n }\n\n ngOnDestroy(): void {\n this.removeScrollLock();\n document.removeEventListener('keydown', this.escapeHandler);\n this.modalService.unregister(this.modalId);\n }\n}","<div\n class=\"modal-backdrop\"\n [class.open]=\"open()\"\n (click)=\"handleBackdropClick($event)\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-hidden]=\"!open()\"\n [attr.aria-labelledby]=\"title() ? 'modal-title' : undefined\"\n [attr.data-state]=\"state()\"\n>\n <div\n class=\"modal-container\"\n [class.small]=\"size() === 'small'\"\n [class.large]=\"size() === 'large'\"\n role=\"document\"\n >\n <div #modalContent class=\"modal-content-wrapper\">\n <div class=\"modal-header\">\n <h2 class=\"modal-title\" id=\"modal-title\">\n <ng-content select=\"[modal-title]\">\n @if (title()) {\n {{ title() }}\n } @else { Modal Title }\n </ng-content>\n </h2>\n @if (showClose()) {\n <button\n class=\"modal-close\"\n (click)=\"handleClose()\"\n [attr.aria-label]=\"dismissLabel()\"\n >\n <i class=\"ph ph-x\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n\n <div class=\"modal-content\">\n <ng-content>\n <p>\n Modal content goes here. You can replace this with your own content.\n </p>\n </ng-content>\n </div>\n\n @if (showFooter() && !hasCustomFooter()) {\n <div class=\"modal-footer\">\n <psh-button appearance=\"outline\" variant=\"primary\" size=\"medium\" (clicked)=\"handleClose()\">\n {{ cancelLabel() }}\n </psh-button>\n <psh-button appearance=\"filled\" variant=\"primary\" size=\"medium\" (clicked)=\"handleConfirm()\">\n {{ confirmLabel() }}\n </psh-button>\n </div>\n } @if (showFooter() && hasCustomFooter()) {\n <div class=\"modal-footer\">\n <ng-content select=\"[modal-footer]\" #modalFooter></ng-content>\n </div>\n }\n </div>\n </div>\n</div>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n output\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { PaginationSize, PaginationVariant, PaginationConfig } from './pagination.types';\r\nimport { InjectionToken } from '@angular/core';\r\n\r\nexport const PAGINATION_CONFIG = new InjectionToken<Partial<PaginationConfig>>('PAGINATION_CONFIG', {\r\n factory: () => ({\r\n size: 'medium',\r\n variant: 'default',\r\n showFirstLast: true,\r\n showPrevNext: true,\r\n maxVisiblePages: 5,\r\n showItemsPerPage: false,\r\n itemsPerPageOptions: [5, 10, 25, 50]\r\n })\r\n});\r\n\r\nexport const PAGINATION_STYLES = new InjectionToken<Record<string, string>[]>('PAGINATION_STYLES', {\r\n factory: () => []\r\n});\r\n\r\n@Component({\r\n selector: 'psh-pagination',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './pagination.component.html',\r\n styleUrls: ['./pagination.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PshPaginationComponent {\r\n private config = inject(PAGINATION_CONFIG);\r\n private styles = inject(PAGINATION_STYLES, { optional: true }) ?? [];\r\n\r\n // Model inputs with defaults from config\r\n currentPage = model(1);\r\n totalPages = model(1);\r\n size = model<PaginationSize>(this.config.size ?? 'medium');\r\n variant = model<PaginationVariant>(this.config.variant ?? 'default');\r\n showFirstLast = model(this.config.showFirstLast ?? true);\r\n showPrevNext = model(this.config.showPrevNext ?? true);\r\n maxVisiblePages = model(this.config.maxVisiblePages ?? 5);\r\n showItemsPerPage = model(this.config.showItemsPerPage ?? false);\r\n\r\n // Regular inputs\r\n itemsPerPage = input(10);\r\n itemsPerPageOptions = input<number[]>([5, 10, 25, 50]);\r\n firstLabel = input('First');\r\n previousLabel = input('Previous');\r\n nextLabel = input('Next');\r\n lastLabel = input('Last');\r\n pageLabel = input('Page');\r\n itemsLabel = input('items');\r\n itemsPerPageLabel = input('Items per page');\r\n\r\n // Outputs\r\n pageChange = output<number>();\r\n itemsPerPageChange = output<number>();\r\n\r\n // Computed values\r\n pages = computed(() => {\r\n const pages: number[] = [];\r\n const halfVisible = Math.floor(this.maxVisiblePages() / 2);\r\n let start = Math.max(1, this.currentPage() - halfVisible);\r\n let end = Math.min(this.totalPages(), start + this.maxVisiblePages() - 1);\r\n\r\n if (end - start + 1 < this.maxVisiblePages()) {\r\n start = Math.max(1, end - this.maxVisiblePages() + 1);\r\n }\r\n\r\n for (let i = start; i <= end; i++) {\r\n pages.push(i);\r\n }\r\n\r\n return pages;\r\n });\r\n\r\n customStyles = computed(() => Object.assign({}, ...this.styles));\r\n\r\n state = computed(() => this.getState());\r\n\r\n private getState(): string {\r\n if (this.currentPage() === 1) return 'first';\r\n if (this.currentPage() === this.totalPages()) return 'last';\r\n return 'default';\r\n }\r\n\r\n goToPage(page: number): void {\r\n if (page !== this.currentPage() && page >= 1 && page <= this.totalPages()) {\r\n this.currentPage.set(page);\r\n this.pageChange.emit(page);\r\n }\r\n }\r\n\r\n onItemsPerPageChange(event: Event): void {\r\n const value = parseInt((event.target as HTMLSelectElement).value);\r\n this.itemsPerPageChange.emit(value);\r\n }\r\n}","<nav \r\n class=\"pagination\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class.outline]=\"variant() === 'outline'\"\r\n role=\"navigation\"\r\n [attr.aria-label]=\"'Pagination navigation'\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n @if (showItemsPerPage()) {\r\n <div class=\"items-per-page\">\r\n <select\r\n [value]=\"itemsPerPage()\"\r\n (change)=\"onItemsPerPageChange($event)\"\r\n [attr.aria-label]=\"itemsPerPageLabel()\"\r\n >\r\n @for (option of itemsPerPageOptions(); track option) {\r\n <option [value]=\"option\">\r\n {{ option }} {{ itemsLabel() }}\r\n </option>\r\n }\r\n </select>\r\n </div>\r\n }\r\n\r\n @if (showFirstLast()) {\r\n <button\r\n class=\"page-button\"\r\n [class.disabled]=\"currentPage() === 1\"\r\n (click)=\"goToPage(1)\"\r\n [attr.aria-label]=\"firstLabel()\"\r\n [disabled]=\"currentPage() === 1\"\r\n >\r\n <i class=\"ph ph-caret-double-left\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n @if (showPrevNext()) {\r\n <button\r\n class=\"page-button\"\r\n [class.disabled]=\"currentPage() === 1\"\r\n (click)=\"goToPage(currentPage() - 1)\"\r\n [attr.aria-label]=\"previousLabel()\"\r\n [disabled]=\"currentPage() === 1\"\r\n >\r\n <i class=\"ph ph-caret-left\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n @for (page of pages(); track page) {\r\n <button\r\n class=\"page-button\"\r\n [class.active]=\"page === currentPage()\"\r\n (click)=\"goToPage(page)\"\r\n [attr.aria-current]=\"page === currentPage() ? 'page' : null\"\r\n [attr.aria-label]=\"pageLabel() + ' ' + page\"\r\n >\r\n {{ page }}\r\n </button>\r\n }\r\n\r\n @if (showPrevNext()) {\r\n <button\r\n class=\"page-button\"\r\n [class.disabled]=\"currentPage() === totalPages()\"\r\n (click)=\"goToPage(currentPage() + 1)\"\r\n [attr.aria-label]=\"nextLabel()\"\r\n [disabled]=\"currentPage() === totalPages()\"\r\n >\r\n <i class=\"ph ph-caret-right\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n @if (showFirstLast()) {\r\n <button\r\n class=\"page-button\"\r\n [class.disabled]=\"currentPage() === totalPages()\"\r\n (click)=\"goToPage(totalPages())\"\r\n [attr.aria-label]=\"lastLabel()\"\r\n [disabled]=\"currentPage() === totalPages()\"\r\n >\r\n <i class=\"ph ph-caret-double-right\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n</nav>","import { ChangeDetectionStrategy, Component, computed, inject, input, model } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ProgressbarVariant, ProgressbarSize, ProgressbarConfig } from './progressbar.types';\r\nimport { InjectionToken } from '@angular/core';\r\n\r\nexport const PROGRESSBAR_CONFIG = new InjectionToken<Partial<ProgressbarConfig>>('PROGRESSBAR_CONFIG', {\r\n factory: () => ({\r\n value: 0,\r\n max: 100,\r\n variant: 'primary',\r\n size: 'medium',\r\n showLabel: true,\r\n indeterminate: false,\r\n striped: false,\r\n animated: false\r\n })\r\n});\r\n\r\n@Component({\r\n selector: 'psh-progressbar',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './progressbar.component.html',\r\n styleUrls: ['./progressbar.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PshProgressbarComponent {\r\n private config = inject(PROGRESSBAR_CONFIG);\r\n\r\n // Model inputs with defaults from config\r\n value = model(this.config.value ?? 0);\r\n max = model(this.config.max ?? 100);\r\n variant = model<ProgressbarVariant>(this.config.variant ?? 'primary');\r\n size = model<ProgressbarSize>(this.config.size ?? 'medium');\r\n showLabel = model(this.config.showLabel ?? true);\r\n indeterminate = model(this.config.indeterminate ?? false);\r\n striped = model(this.config.striped ?? false);\r\n animated = model(this.config.animated ?? false);\r\n\r\n // Regular inputs\r\n label = input('Loading...');\r\n\r\n // Computed values\r\n percentage = computed(() => {\r\n return Math.min(100, Math.max(0, (this.value() / this.max()) * 100));\r\n });\r\n\r\n computedAriaValueText = computed(() => {\r\n if (this.indeterminate()) {\r\n return this.label();\r\n }\r\n return `${this.percentage()}%`;\r\n });\r\n\r\n state = computed(() => this.getState());\r\n\r\n private getState(): string {\r\n if (this.indeterminate()) return 'indeterminate';\r\n if (this.animated()) return 'animated';\r\n if (this.striped()) return 'striped';\r\n return 'default';\r\n }\r\n}","<div \r\n class=\"progressbar-container\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n @if (showLabel() && !indeterminate()) {\r\n <span class=\"progress-label\">{{ percentage() }}%</span>\r\n }\r\n <div \r\n class=\"progressbar\"\r\n [class.striped]=\"striped()\"\r\n [class.animated]=\"animated()\"\r\n [class.indeterminate]=\"indeterminate()\"\r\n role=\"progressbar\"\r\n [attr.aria-valuenow]=\"indeterminate() ? null : value()\"\r\n [attr.aria-valuemin]=\"0\"\r\n [attr.aria-valuemax]=\"max()\"\r\n [attr.aria-valuetext]=\"computedAriaValueText()\"\r\n >\r\n <div \r\n class=\"progress-track\"\r\n [class]=\"variant()\"\r\n [style.width.%]=\"indeterminate() ? 100 : percentage()\"\r\n ></div>\r\n </div>\r\n</div>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RadioSize, RadioConfig } from './radio.types';\r\nimport { InjectionToken } from '@angular/core';\r\n\r\nexport const RADIO_CONFIG = new InjectionToken<Partial<RadioConfig>>('RADIO_CONFIG', {\r\n factory: () => ({\r\n checked: false,\r\n disabled: false,\r\n required: false,\r\n size: 'medium',\r\n labelPosition: 'right'\r\n })\r\n});\r\n\r\nexport const RADIO_STYLES = new InjectionToken<Record<string, string>[]>('RADIO_STYLES', {\r\n factory: () => []\r\n});\r\n\r\n@Component({\r\n selector: 'psh-radio',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './radio.component.html',\r\n styleUrls: ['./radio.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshRadioComponent {\r\n private config = inject(RADIO_CONFIG);\r\n private elementRef = inject(ElementRef);\r\n private styles = inject(RADIO_STYLES, { optional: true }) ?? [];\r\n\r\n // Model inputs with defaults from config\r\n checked = model(this.config.checked ?? false);\r\n disabled = model(this.config.disabled ?? false);\r\n required = model(this.config.required ?? false);\r\n size = model<RadioSize>(this.config.size ?? 'medium');\r\n labelPosition = model<'left' | 'right'>(this.config.labelPosition ?? 'right');\r\n\r\n // Regular inputs\r\n label = input('');\r\n error = input('');\r\n success = input('');\r\n name = input('');\r\n value = input<any>();\r\n\r\n // Outputs\r\n valueChange = output<any>();\r\n\r\n // Computed values\r\n customStyles = computed(() => Object.assign({}, ...this.styles));\r\n\r\n state = computed(() => this.getState());\r\n\r\n private getState(): string {\r\n if (this.disabled()) return 'disabled';\r\n if (this.error()) return 'error';\r\n if (this.success()) return 'success';\r\n return this.checked() ? 'checked' : 'unchecked';\r\n }\r\n\r\n protected hasContent(): boolean {\r\n const content = this.elementRef.nativeElement\r\n .querySelector('.radio-text')\r\n ?.textContent?.trim();\r\n return !!content || !!this.label();\r\n }\r\n\r\n handleChange(): void {\r\n if (!this.disabled()) {\r\n this.checked.set(true);\r\n this.valueChange.emit(this.value());\r\n }\r\n }\r\n\r\n /**\r\n * Génère un identifiant unique pour les messages\r\n */\r\n generateMessageId(type: 'error' | 'success', id: string): string {\r\n return `${type}-message-${id}`;\r\n }\r\n}","<div \r\n class=\"radio-container\"\r\n [attr.aria-describedby]=\"error() ? 'error-message' : success() ? 'success-message' : null\"\r\n [class.disabled]=\"disabled()\"\r\n [class.error]=\"!!error()\"\r\n [class.success]=\"!!success()\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n <label class=\"radio-label\" [class]=\"labelPosition() === 'left' ? 'label-left' : 'label-right'\">\r\n <input\r\n type=\"radio\"\r\n class=\"radio-input\"\r\n [checked]=\"checked()\"\r\n [disabled]=\"disabled()\"\r\n [required]=\"required()\"\r\n [name]=\"name()\"\r\n [value]=\"value()\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-invalid]=\"!!error()\"\r\n [attr.aria-checked]=\"checked()\"\r\n (change)=\"handleChange()\"\r\n />\r\n <span \r\n class=\"radio-control\"\r\n [class.error]=\"!!error()\"\r\n [class.success]=\"!!success()\"\r\n >\r\n <span class=\"radio-dot\"></span>\r\n </span>\r\n <span class=\"radio-text\">\r\n @if (label()) {\r\n {{ label() }}\r\n } @else {\r\n <ng-content>Radio</ng-content>\r\n }\r\n </span>\r\n </label>\r\n\r\n @if (error()) {\r\n <div id=\"error-message\" class=\"radio-error\" role=\"alert\">\r\n {{ error() }}\r\n </div>\r\n }\r\n\r\n @if (success()) {\r\n <div id=\"success-message\" class=\"radio-success\" role=\"status\">\r\n {{ success() }}\r\n </div>\r\n }\r\n</div>","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n model,\n output,\n signal,\n OnDestroy,\n ChangeDetectorRef,\n AfterContentInit\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SelectOption, SelectOptionGroup, SelectSize, SearchConfig, VirtualScrollConfig } from './select.types';\n\n@Component({\n selector: 'psh-select',\n standalone: true,\n imports: [CommonModule, FormsModule],\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: PshSelectComponent,\n multi: true\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PshSelectComponent<T = any> implements ControlValueAccessor, OnDestroy, AfterContentInit {\n private elementRef = inject(ElementRef);\n private cdr = inject(ChangeDetectorRef);\n private clickOutsideHandler: ((event: MouseEvent) => void) | null = null;\n\n // Unique ID for the select\n readonly selectId = `select-${Math.random().toString(36).substring(2, 11)}`;\n\n // Model inputs\n value = model<T | T[] | null>(null);\n disabled = model(false);\n required = model<boolean | ''>('');\n size = model<SelectSize>('medium');\n searchable = model(false);\n multiple = model(false);\n clearable = model(false);\n loading = model(false);\n fullWidth = model(false);\n virtualScroll = model(false);\n showLabel = input(true); // Moved back to input as it doesn't need two-way binding\n\n // Regular inputs\n options = input<(SelectOption<T> | SelectOptionGroup<T>)[]>([]);\n label = input(''); // Added dedicated label property\n ariaLabel = input<string | null>(null); // Added dedicated ariaLabel property\n placeholder = input<string>('Sélectionner une option');\n multiplePlaceholder = input<string>('Sélectionner des options');\n error = input('');\n success = input('');\n hint = input('');\n maxSelections = input<number | undefined>(undefined);\n minSelections = input<number | undefined>(undefined);\n compareWith = input<(a: T, b: T) => boolean>((a, b) => a === b);\n searchConfig = input<SearchConfig>({\n debounceTime: 300,\n placeholder: 'Rechercher...',\n minLength: 1\n });\n virtualScrollConfig = input<VirtualScrollConfig>({\n itemSize: 40,\n buffer: 4\n });\n\n // State\n private isOpenSignal = signal(false);\n private searchTermSignal = signal('');\n private selectedLabelSignal = signal('');\n private focusedOptionIndex = signal(-1);\n private hasLabelContentSignal = signal(false);\n private initializedSignal = signal(false);\n\n // Outputs\n valueChange = output<T | T[] | null>();\n opened = output<void>();\n closed = output<void>();\n scrollEnd = output<void>();\n loadOptions = output<string>();\n searched = output<string>();\n\n // Computed values\n isOpen = computed(() => this.isOpenSignal());\n searchTerm = computed(() => this.searchTermSignal());\n hasLabelContent = computed(() => this.hasLabelContentSignal());\n\n // Computed aria-label pour l'accessibilité\n computedAriaLabel = computed(() => {\n return this.ariaLabel() || this.label() || this.placeholder();\n });\n\n state = computed(() => this.getState());\n\n private getState(): string {\n if (this.disabled()) return 'disabled';\n if (this.loading()) return 'loading';\n if (this.error()) return 'error';\n if (this.success()) return 'success';\n if (this.isOpen()) return 'open';\n return 'closed';\n }\n\n selectedLabel = computed(() => {\n if (!this.initializedSignal() || !this.hasValue()) {\n return this.multiple() ? this.multiplePlaceholder() : this.placeholder();\n }\n return this.selectedLabelSignal() || (this.multiple() ? this.multiplePlaceholder() : this.placeholder());\n });\n\n filteredOptions = computed(() => {\n const term = this.searchTermSignal().toLowerCase();\n const opts = this.options();\n \n if (!term) return opts;\n\n return opts.map(opt => {\n if (this.isOptionGroup(opt)) {\n const filteredOptions = opt.options.filter(o => \n o.label.toLowerCase().includes(term) ||\n o.description?.toLowerCase().includes(term)\n );\n return filteredOptions.length > 0 ? { ...opt, options: filteredOptions } : null;\n }\n return opt.label.toLowerCase().includes(term) ||\n opt.description?.toLowerCase().includes(term)\n ? opt\n : null;\n }).filter((opt): opt is (SelectOption<T> | SelectOptionGroup<T>) => opt !== null);\n });\n\n constructor() {\n this.setupClickOutsideListener();\n }\n\n ngAfterContentInit() {\n Promise.resolve().then(() => {\n const hasLabel = !!this.elementRef.nativeElement.querySelector('[select-label]');\n this.hasLabelContentSignal.set(hasLabel);\n this.initializedSignal.set(true);\n this.cdr.markForCheck();\n });\n }\n\n private setupClickOutsideListener(): void {\n this.clickOutsideHandler = (event: MouseEvent) => {\n if (this.isOpen()) {\n const target = event.target as HTMLElement;\n if (!this.elementRef.nativeElement.contains(target)) {\n this.close();\n }\n }\n };\n document.addEventListener('click', this.clickOutsideHandler);\n }\n\n // Keyboard navigation\n handleKeyDown(event: KeyboardEvent): void {\n if (this.disabled()) return;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (!this.isOpen()) {\n this.toggle();\n } else if (this.focusedOptionIndex() >= 0) {\n const options = this.flattenOptions(this.filteredOptions());\n const option = options[this.focusedOptionIndex()];\n if (option) this.select(option);\n }\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.toggle();\n } else {\n this.focusNextOption();\n }\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n if (this.isOpen()) {\n this.focusPreviousOption();\n }\n break;\n\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.close();\n }\n break;\n\n case 'Tab':\n if (this.isOpen()) {\n this.close();\n }\n break;\n }\n }\n\n handleOptionKeyDown(event: KeyboardEvent, option: SelectOption<T>): void {\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.select(option);\n break;\n \n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n }\n }\n\n private focusNextOption(): void {\n const options = this.flattenOptions(this.filteredOptions());\n if (options.length === 0) return;\n\n const currentIndex = this.focusedOptionIndex();\n const nextIndex = currentIndex < options.length - 1 ? currentIndex + 1 : 0;\n this.focusedOptionIndex.set(nextIndex);\n this.scrollOptionIntoView(nextIndex);\n }\n\n private focusPreviousOption(): void {\n const options = this.flattenOptions(this.filteredOptions());\n if (options.length === 0) return;\n\n const currentIndex = this.focusedOptionIndex();\n const previousIndex = currentIndex > 0 ? currentIndex - 1 : options.length - 1;\n this.focusedOptionIndex.set(previousIndex);\n this.scrollOptionIntoView(previousIndex);\n }\n\n private scrollOptionIntoView(index: number): void {\n requestAnimationFrame(() => {\n const option = this.elementRef.nativeElement.querySelector(\n `.select-option:nth-child(${index + 1})`\n );\n if (option) {\n option.scrollIntoView({ block: 'nearest' });\n }\n });\n }\n\n // ControlValueAccessor implementation\n private onChange = (_: any) => {};\n private onTouched = () => {};\n\n writeValue(value: any): void {\n this.initializedSignal.set(true);\n this.value.set(value);\n this.updateSelectedLabel();\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n // Helper method to check if an option is a group\n isOptionGroup(option: SelectOption<T> | SelectOptionGroup<T>): option is SelectOptionGroup<T> {\n return 'options' in option;\n }\n\n // Get unique key for tracking\n getOptionKey(option: SelectOption<T> | SelectOptionGroup<T>): string {\n return this.isOptionGroup(option) ? `group-${option.label}` : `option-${String(option.value)}`;\n }\n\n // Check if there is a selected value\n hasValue(): boolean {\n const currentValue = this.value();\n if (this.multiple()) {\n return Array.isArray(currentValue) && currentValue.length > 0;\n }\n return currentValue !== null && currentValue !== undefined;\n }\n\n // Focus methods\n focusSelect(): void {\n const trigger = this.elementRef.nativeElement.querySelector('.select-trigger');\n if (trigger) {\n trigger.focus();\n }\n }\n\n // Selection methods\n select(option: SelectOption<T>): void {\n if (!this.disabled() && !option.disabled) {\n if (this.multiple()) {\n const currentValue = this.value();\n const values = Array.isArray(currentValue) ? [...currentValue] : [];\n const index = values.findIndex(v => this.compareWith()(v, option.value));\n \n if (index === -1) {\n const maxSelections = this.maxSelections();\n if (!maxSelections || values.length < maxSelections) {\n values.push(option.value);\n }\n } else {\n const minSelections = this.minSelections();\n if (!minSelections || values.length > minSelections) {\n values.splice(index, 1);\n }\n }\n \n this.value.set(values);\n this.onChange(values);\n } else {\n this.value.set(option.value);\n this.onChange(option.value);\n this.close();\n }\n \n this.valueChange.emit(this.value());\n this.updateSelectedLabel();\n this.onTouched();\n }\n }\n\n isSelected(option: SelectOption<T>): boolean {\n const currentValue = this.value();\n if (this.multiple() && Array.isArray(currentValue)) {\n return currentValue.some(v => this.compareWith()(v, option.value));\n }\n return currentValue !== null && this.compareWith()(currentValue as T, option.value);\n }\n\n // UI methods\n toggle(): void {\n if (!this.disabled()) {\n event?.stopPropagation();\n this.isOpenSignal.update(v => !v);\n if (this.isOpenSignal()) {\n this.opened.emit();\n } else {\n this.closed.emit();\n }\n }\n }\n\n close(): void {\n if (this.isOpenSignal()) {\n this.isOpenSignal.set(false);\n this.focusedOptionIndex.set(-1);\n this.searchTermSignal.set('');\n this.closed.emit();\n }\n }\n\n clear(event: Event): void {\n event.stopPropagation();\n if (!this.disabled()) {\n const newValue = this.multiple() ? [] : null;\n this.value.set(newValue);\n this.onChange(newValue);\n this.valueChange.emit(newValue);\n this.updateSelectedLabel();\n this.onTouched();\n }\n }\n\n onSearch(event: Event): void {\n const term = (event.target as HTMLInputElement).value;\n this.searchTermSignal.set(term);\n if (term.length >= (this.searchConfig().minLength ?? 1)) {\n this.searched.emit(term);\n }\n }\n\n onScroll(event: Event): void {\n const element = event.target as HTMLElement;\n if (\n element.scrollHeight - element.scrollTop === element.clientHeight\n ) {\n this.scrollEnd.emit();\n }\n }\n\n private updateSelectedLabel(): void {\n const currentValue = this.value();\n const currentOptions = this.flattenOptions(this.options());\n\n if (this.multiple() && Array.isArray(currentValue)) {\n const selected = currentOptions.filter(opt => \n currentValue.some(v => this.compareWith()(v, opt.value))\n );\n if (selected.length > 0) {\n const labels = selected.map(opt => opt.label);\n this.selectedLabelSignal.set(labels.join(', '));\n } else {\n this.selectedLabelSignal.set('');\n }\n } else {\n const selected = currentOptions.find(opt => \n currentValue !== null && this.compareWith()(opt.value, currentValue as T)\n );\n if (selected) {\n this.selectedLabelSignal.set(selected.label);\n } else {\n this.selectedLabelSignal.set('');\n }\n }\n this.cdr.markForCheck();\n }\n\n private flattenOptions(options: (SelectOption<T> | SelectOptionGroup<T>)[]): SelectOption<T>[] {\n return options.reduce((acc, opt) => {\n if (this.isOptionGroup(opt)) {\n return [...acc, ...opt.options];\n }\n return [...acc, opt];\n }, [] as SelectOption<T>[]);\n }\n\n ngOnDestroy(): void {\n if (this.clickOutsideHandler) {\n document.removeEventListener('click', this.clickOutsideHandler);\n }\n }\n}","<div \n class=\"select-container\"\n [class.full-width]=\"fullWidth()\"\n [class.small]=\"size() === 'small'\"\n [class.large]=\"size() === 'large'\"\n [class.error]=\"!!error()\"\n [class.success]=\"!!success()\"\n [class.disabled]=\"disabled()\"\n>\n <!-- Label slot -->\n @if (showLabel()) {\n <label class=\"select-label\" [for]=\"selectId\" (click)=\"focusSelect()\" [class.required]=\"!!required()\">\n <ng-content select=\"[select-label]\"></ng-content>\n @if (!hasLabelContent()) {\n {{ label() }}\n }\n </label>\n }\n\n <div \n class=\"select-trigger\"\n [id]=\"selectId\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-required]=\"required() ? 'true' : 'false'\"\n [attr.aria-invalid]=\"!!error()\"\n [attr.aria-label]=\"computedAriaLabel()\"\n [attr.aria-describedby]=\"error() ? 'error-message' : success() ? 'success-message' : hint() ? 'hint-message' : null\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n (click)=\"toggle()\"\n (keydown)=\"handleKeyDown($event)\"\n >\n <div class=\"select-value\">\n <span [class.placeholder]=\"!hasValue()\">{{ selectedLabel() }}</span>\n </div>\n\n <div class=\"select-actions\">\n @if (clearable() && hasValue()) {\n <button\n type=\"button\"\n class=\"select-clear\"\n (click)=\"clear($event)\"\n [attr.aria-label]=\"'Effacer la sélection'\"\n [tabindex]=\"disabled() ? -1 : 0\"\n >\n <i class=\"ph ph-x\" aria-hidden=\"true\"></i>\n </button>\n }\n <i \n class=\"ph ph-caret-down select-arrow\"\n [class.open]=\"isOpen()\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n\n @if (isOpen()) {\n <div \n class=\"select-dropdown\"\n role=\"listbox\"\n [attr.aria-multiselectable]=\"multiple()\"\n >\n @if (searchable()) {\n <div class=\"select-search\">\n <input\n type=\"text\"\n [placeholder]=\"searchConfig().placeholder\"\n [value]=\"searchTerm()\"\n (input)=\"onSearch($event)\"\n (click)=\"$event.stopPropagation()\"\n [attr.aria-label]=\"searchConfig().placeholder\"\n />\n </div>\n }\n\n <div class=\"select-options\" (scroll)=\"onScroll($event)\">\n @if (loading()) {\n <div class=\"select-loading\">\n <div class=\"select-loader\"></div>\n </div>\n } @else if (filteredOptions().length === 0) {\n <div class=\"select-no-results\">\n Aucun résultat\n </div>\n } @else {\n @for (option of filteredOptions(); track getOptionKey(option)) {\n @if (isOptionGroup(option)) {\n <div class=\"select-group\">\n <div class=\"select-group-label\">{{ option.label }}</div>\n @for (groupOption of option.options; track getOptionKey(groupOption)) {\n <div\n class=\"select-option\"\n role=\"option\"\n [class.selected]=\"isSelected(groupOption)\"\n [class.disabled]=\"option.disabled || groupOption.disabled\"\n [attr.aria-selected]=\"isSelected(groupOption)\"\n [attr.aria-disabled]=\"option.disabled || groupOption.disabled\"\n [attr.id]=\"selectId + '-option-' + groupOption.value\"\n [attr.tabindex]=\"option.disabled || groupOption.disabled ? -1 : 0\"\n (click)=\"select(groupOption)\"\n (keydown)=\"handleOptionKeyDown($event, groupOption)\"\n >\n @if (multiple()) {\n <div class=\"select-checkbox\">\n <i class=\"ph ph-check\" aria-hidden=\"true\"></i>\n </div>\n }\n @if (groupOption.icon) {\n <i class=\"ph ph-{{ groupOption.icon }}\" aria-hidden=\"true\"></i>\n }\n <div class=\"option-content\">\n <div class=\"option-label\">{{ groupOption.label }}</div>\n @if (groupOption.description) {\n <div class=\"option-description\">{{ groupOption.description }}</div>\n }\n </div>\n </div>\n }\n </div>\n } @else {\n <div\n class=\"select-option\"\n role=\"option\"\n [class.selected]=\"isSelected(option)\"\n [class.disabled]=\"option.disabled\"\n [attr.aria-selected]=\"isSelected(option)\"\n [attr.aria-disabled]=\"option.disabled\"\n [attr.id]=\"selectId + '-option-' + option.value\"\n [attr.tabindex]=\"option.disabled ? -1 : 0\"\n (click)=\"select(option)\"\n (keydown)=\"handleOptionKeyDown($event, option)\"\n >\n @if (multiple()) {\n <div class=\"select-checkbox\">\n <i class=\"ph ph-check\" aria-hidden=\"true\"></i>\n </div>\n }\n @if (option.icon) {\n <i class=\"ph ph-{{ option.icon }}\" aria-hidden=\"true\"></i>\n }\n <div class=\"option-content\">\n <div class=\"option-label\">{{ option.label }}</div>\n @if (option.description) {\n <div class=\"option-description\">{{ option.description }}</div>\n }\n </div>\n </div>\n }\n }\n }\n </div>\n </div>\n }\n\n <!-- Error message slot -->\n @if (error()) {\n <div id=\"error-message\" class=\"select-error\" role=\"alert\">\n <ng-content select=\"[select-error]\">\n {{ error() }}\n </ng-content>\n </div>\n }\n\n <!-- Success message slot -->\n @if (success()) {\n <div id=\"success-message\" class=\"select-success\" role=\"status\">\n <ng-content select=\"[select-success]\">\n {{ success() }}\n </ng-content>\n </div>\n }\n\n <!-- Hint message slot -->\n @if (hint()) {\n <div id=\"hint-message\" class=\"select-hint\">\n <ng-content select=\"[select-hint]\">\n {{ hint() }}\n </ng-content>\n </div>\n }\n</div>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n effect,\r\n OnDestroy,\r\n InjectionToken\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SidebarMode, SidebarPosition, SidebarConfig } from './sidebar.types';\r\n\r\nexport const SIDEBAR_CONFIG = new InjectionToken<Partial<SidebarConfig>>('SIDEBAR_CONFIG', {\r\n factory: () => ({\r\n mode: 'fixed',\r\n position: 'left',\r\n width: '250px',\r\n breakpoint: '768px'\r\n })\r\n});\r\n\r\n@Component({\r\n selector: 'psh-sidebar',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './sidebar.component.html',\r\n styleUrls: ['./sidebar.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshSidebarComponent implements OnDestroy {\r\n private config = inject(SIDEBAR_CONFIG);\r\n private elementRef = inject(ElementRef);\r\n private isDestroyed = signal(false);\r\n private focusedElementBeforeOpen: HTMLElement | null = null;\r\n\r\n // Model inputs with defaults from config\r\n open = model(false);\r\n mode = model<SidebarMode>(this.config.mode ?? 'fixed');\r\n position = model<SidebarPosition>(this.config.position ?? 'left');\r\n\r\n // Regular inputs\r\n width = input<string>(this.config.width ?? '250px');\r\n breakpoint = input<string>(this.config.breakpoint ?? '768px');\r\n\r\n // Outputs\r\n toggle = output<boolean>();\r\n\r\n // State\r\n private mobileSignal = signal(false);\r\n private overlayModeSignal = signal(false);\r\n\r\n // Computed values\r\n isMobile = computed(() => this.mobileSignal());\r\n isOverlayMode = computed(() => this.overlayModeSignal());\r\n effectiveMode = computed(() => \r\n this.isMobile() ? 'overlay' : this.mode()\r\n );\r\n\r\n state = computed(() => this.getState());\r\n\r\n private getState(): string {\r\n if (this.isMobile()) return 'mobile';\r\n if (this.open()) return 'open';\r\n return this.mode();\r\n }\r\n\r\n constructor() {\r\n // Handle responsive behavior\r\n effect(() => {\r\n if (this.isDestroyed()) return;\r\n\r\n const mediaQuery = window.matchMedia(`(max-width: ${this.breakpoint()})`);\r\n const handleResize = (e: MediaQueryListEvent | MediaQueryList) => {\r\n this.mobileSignal.set(e.matches);\r\n this.overlayModeSignal.set(e.matches || this.mode() === 'overlay');\r\n };\r\n\r\n // Initial check\r\n handleResize(mediaQuery);\r\n\r\n // Listen for changes\r\n const listener = (e: MediaQueryListEvent) => handleResize(e);\r\n mediaQuery.addEventListener('change', listener);\r\n\r\n return () => mediaQuery.removeEventListener('change', listener);\r\n });\r\n\r\n // Handle keyboard events\r\n effect(() => {\r\n if (this.isDestroyed()) return;\r\n\r\n if (this.open()) {\r\n const handleKeyDown = (event: KeyboardEvent) => {\r\n if (event.key === 'Escape' && this.isOverlayMode()) {\r\n this.closeSidebar();\r\n }\r\n if (event.key === 'Tab') {\r\n this.trapFocus(event);\r\n }\r\n };\r\n\r\n document.addEventListener('keydown', handleKeyDown);\r\n return () => document.removeEventListener('keydown', handleKeyDown);\r\n }\r\n return;\r\n });\r\n\r\n // Handle click outside\r\n effect(() => {\r\n if (this.isDestroyed()) return;\r\n\r\n if (this.open() && this.isOverlayMode()) {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (!this.elementRef.nativeElement.contains(event.target)) {\r\n this.closeSidebar();\r\n }\r\n };\r\n\r\n document.addEventListener('click', handleClickOutside);\r\n return () => document.removeEventListener('click', handleClickOutside);\r\n }\r\n return;\r\n });\r\n }\r\n\r\n toggleSidebar(): void {\r\n if (this.isDestroyed()) return;\r\n\r\n const newState = !this.open();\r\n this.open.set(newState);\r\n this.toggle.emit(newState);\r\n\r\n if (newState) {\r\n this.focusedElementBeforeOpen = document.activeElement as HTMLElement;\r\n requestAnimationFrame(() => {\r\n const firstFocusable = this.elementRef.nativeElement.querySelector(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\r\n ) as HTMLElement;\r\n if (firstFocusable) {\r\n firstFocusable.focus();\r\n }\r\n });\r\n } else {\r\n if (this.focusedElementBeforeOpen) {\r\n this.focusedElementBeforeOpen.focus();\r\n }\r\n }\r\n }\r\n\r\n closeSidebar(): void {\r\n if (this.isDestroyed()) return;\r\n\r\n if (this.open()) {\r\n this.open.set(false);\r\n this.toggle.emit(false);\r\n if (this.focusedElementBeforeOpen) {\r\n this.focusedElementBeforeOpen.focus();\r\n }\r\n }\r\n }\r\n\r\n private trapFocus(event: KeyboardEvent): void {\r\n const focusableElements = this.elementRef.nativeElement.querySelectorAll(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\r\n );\r\n const firstFocusable = focusableElements[0] as HTMLElement;\r\n const lastFocusable = focusableElements[focusableElements.length - 1] as HTMLElement;\r\n\r\n if (event.shiftKey) {\r\n if (document.activeElement === firstFocusable) {\r\n event.preventDefault();\r\n lastFocusable.focus();\r\n }\r\n } else {\r\n if (document.activeElement === lastFocusable) {\r\n event.preventDefault();\r\n firstFocusable.focus();\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.isDestroyed.set(true);\r\n }\r\n}","<div \r\n class=\"sidebar\"\r\n [class.open]=\"open()\"\r\n [class.fixed]=\"effectiveMode() === 'fixed'\"\r\n [class.overlay]=\"effectiveMode() === 'overlay'\"\r\n [class.collapsible]=\"effectiveMode() === 'collapsible'\"\r\n [class.left]=\"position() === 'left'\"\r\n [class.right]=\"position() === 'right'\"\r\n [style.width]=\"width()\"\r\n [style.--sidebar-width]=\"width()\"\r\n role=\"complementary\"\r\n [attr.aria-hidden]=\"!open()\"\r\n [attr.aria-expanded]=\"open()\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n <div class=\"sidebar-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n @if (effectiveMode() === 'collapsible') {\r\n <button\r\n type=\"button\"\r\n class=\"collapse-button\"\r\n (click)=\"toggleSidebar()\"\r\n [attr.aria-label]=\"open() ? 'Réduire le menu' : 'Développer le menu'\"\r\n >\r\n @if (position() === 'left') {\r\n <i \r\n class=\"ph\"\r\n [class.ph-caret-right]=\"!open()\"\r\n [class.ph-caret-left]=\"open()\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n } @else {\r\n <i \r\n class=\"ph\"\r\n [class.ph-caret-left]=\"!open()\"\r\n [class.ph-caret-right]=\"open()\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n }\r\n </button>\r\n }\r\n</div>\r\n\r\n@if (effectiveMode() === 'overlay' && open()) {\r\n <div \r\n class=\"sidebar-backdrop\"\r\n role=\"presentation\"\r\n (click)=\"closeSidebar()\"\r\n ></div>\r\n}","import { ChangeDetectionStrategy, Component, computed, inject, input, model, InjectionToken } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SpinLoaderVariant, SpinLoaderSize, SpinLoaderColor, SpinLoaderConfig } from './spinloader.types';\r\n\r\nexport const SPINLOADER_CONFIG = new InjectionToken<Partial<SpinLoaderConfig>>('SPINLOADER_CONFIG', {\r\n factory: () => ({\r\n variant: 'circle',\r\n size: 'medium',\r\n color: 'primary'\r\n })\r\n});\r\n\r\nexport const SPINLOADER_STYLES = new InjectionToken<Record<string, string>[]>('SPINLOADER_STYLES', {\r\n factory: () => []\r\n});\r\n\r\n@Component({\r\n selector: 'psh-spinloader',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './spinloader.component.html',\r\n styleUrls: ['./spinloader.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PshSpinLoaderComponent {\r\n private config = inject(SPINLOADER_CONFIG);\r\n private styles = inject(SPINLOADER_STYLES, { optional: true }) ?? [];\r\n\r\n // Model inputs with defaults from config\r\n variant = model<SpinLoaderVariant>(this.config.variant ?? 'circle');\r\n size = model<SpinLoaderSize>(this.config.size ?? 'medium');\r\n color = model<SpinLoaderColor>(this.config.color ?? 'primary');\r\n\r\n // Computed values\r\n customStyles = computed(() => Object.assign({}, ...this.styles));\r\n\r\n // Helper methods\r\n isSmall = computed(() => this.size() === 'small');\r\n isLarge = computed(() => this.size() === 'large');\r\n isCircle = computed(() => this.variant() === 'circle');\r\n isDots = computed(() => this.variant() === 'dots');\r\n isPulse = computed(() => this.variant() === 'pulse');\r\n\r\n state = computed(() => this.variant());\r\n}","<div \r\n class=\"spinloader\"\r\n [class.small]=\"isSmall()\"\r\n [class.large]=\"isLarge()\"\r\n role=\"status\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n @switch (variant()) {\r\n @case ('circle') {\r\n <div \r\n class=\"spinner-circle\"\r\n [class]=\"color()\"\r\n ></div>\r\n }\r\n @case ('dots') {\r\n <div class=\"spinner-dots\" [class]=\"color()\">\r\n <div class=\"dot\"></div>\r\n <div class=\"dot\"></div>\r\n <div class=\"dot\"></div>\r\n </div>\r\n }\r\n @case ('pulse') {\r\n <div class=\"spinner-pulse\" [class]=\"color()\">\r\n <div class=\"pulse\"></div>\r\n <div class=\"pulse\"></div>\r\n <div class=\"pulse\"></div>\r\n </div>\r\n }\r\n }\r\n</div>","import { \n ChangeDetectionStrategy, \n Component, \n ContentChildren, \n ElementRef, \n QueryList, \n computed, \n inject, \n input, \n model, \n output,\n signal,\n ChangeDetectorRef,\n InjectionToken\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { StepperOrientation, StepperVariant, StepConfig, StepperConfig } from './stepper.types';\n\n/**\n * Token d'injection pour la configuration globale du stepper\n */\nexport const STEPPER_CONFIG = new InjectionToken<Partial<StepperConfig>>('STEPPER_CONFIG', {\n factory: () => ({\n orientation: 'horizontal',\n variant: 'default',\n linear: true,\n ariaLabels: {\n step: 'Étape',\n completed: 'Étape complétée',\n active: 'Étape active',\n incomplete: 'Étape incomplète',\n disabled: 'Étape désactivée'\n }\n })\n});\n\n/**\n * Token d'injection pour les styles personnalisés\n */\nexport const STEPPER_STYLES = new InjectionToken<Record<string, string>[]>('STEPPER_STYLES', {\n factory: () => []\n});\n\n@Component({\n selector: 'psh-stepper',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './stepper.component.html',\n styleUrls: ['./stepper.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PshStepperComponent {\n private config = inject(STEPPER_CONFIG);\n private styles = inject(STEPPER_STYLES, { optional: true }) ?? [];\n private cdr = inject(ChangeDetectorRef);\n private observer: MutationObserver | null = null;\n protected elementRef = inject(ElementRef);\n \n // État initial avec 3 étapes par défaut\n private defaultSteps: StepConfig[] = [\n { title: 'Étape 1', subtitle: undefined, icon: 'user', disabled: false, completed: false },\n { title: 'Étape 2', subtitle: undefined, icon: 'info', disabled: false, completed: false },\n { title: 'Étape 3', subtitle: undefined, icon: 'check', disabled: false, completed: false }\n ];\n\n // Model inputs with defaults from config\n activeStep = model(0);\n orientation = model<StepperOrientation>(this.config.orientation ?? 'horizontal');\n variant = model<StepperVariant>(this.config.variant ?? 'default');\n linear = model(this.config.linear ?? true);\n\n // Regular inputs\n ariaLabels = input<Record<string, string>>({\n step: 'Étape',\n completed: 'Étape complétée',\n active: 'Étape active',\n incomplete: 'Étape incomplète',\n disabled: 'Étape désactivée'\n });\n\n // Outputs\n stepChange = output<number>();\n completed = output<void>();\n\n // State\n private stepsSignal = signal<StepConfig[]>(this.defaultSteps);\n steps = computed(() => this.stepsSignal());\n\n // Computed values\n customStyles = computed(() => Object.assign({}, ...this.styles));\n\n ngAfterContentInit() {\n // Observer les changements de contenu\n this.observer = new MutationObserver(() => {\n const steps = Array.from(this.elementRef.nativeElement.querySelectorAll('[stepContent]') as NodeListOf<HTMLElement>);\n \n // N'utiliser les étapes personnalisées que si elles existent\n if (steps.length > 0) {\n this.stepsSignal.set(steps.map((el, i) => ({\n title: el.getAttribute('data-title') || `Étape ${i + 1}`,\n subtitle: el.getAttribute('data-subtitle') || undefined,\n icon: el.getAttribute('data-icon') || undefined,\n disabled: el.hasAttribute('data-disabled'),\n completed: el.hasAttribute('data-completed'),\n error: el.getAttribute('data-error') || undefined,\n warning: el.getAttribute('data-warning') || undefined,\n success: el.getAttribute('data-success') || undefined\n })));\n }\n \n this.cdr.markForCheck();\n });\n\n this.observer.observe(this.elementRef.nativeElement, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['data-title', 'data-subtitle', 'data-icon', 'data-disabled', 'data-completed', 'data-error', 'data-warning', 'data-success']\n });\n \n // Initialiser les étapes\n this.observer.takeRecords();\n }\n\n ngOnDestroy() {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n }\n\n // Navigation\n next(): void {\n if (this.canGoNext()) {\n this.goToStep(this.activeStep() + 1);\n }\n }\n\n previous(): void {\n if (this.canGoPrevious()) {\n this.goToStep(this.activeStep() - 1);\n }\n }\n\n goToStep(index: number): void {\n if (this.canActivateStep(index) && index !== this.activeStep()) {\n this.activeStep.set(index);\n this.stepChange.emit(index);\n this.cdr.markForCheck();\n }\n }\n\n // Helpers\n canGoNext(): boolean {\n const nextIndex = this.activeStep() + 1;\n return nextIndex < this.steps().length && this.canActivateStep(nextIndex);\n }\n\n canGoPrevious(): boolean {\n return this.activeStep() > 0;\n }\n\n canActivateStep(index: number): boolean {\n if (!this.linear()) return true;\n if (index === 0) return true;\n\n const step = this.steps()[index];\n if (step?.disabled) return false;\n\n return this.steps()\n .slice(0, index)\n .every(step => step.completed && !step.error);\n }\n\n isStepValid(index: number): boolean {\n const step = this.steps()[index];\n return step ? !!step.completed && !step.error : false;\n }\n\n getStepAriaLabel(step: StepConfig, index: number): string {\n const labels = this.ariaLabels();\n const status = step.completed ? labels['completed'] :\n index === this.activeStep() ? labels['active'] :\n step.disabled ? labels['disabled'] :\n labels['incomplete'];\n return `${labels['step']} ${index + 1}: ${step.title} - ${status}`;\n }\n\n // Tracking\n trackByIndex(index: number): number {\n return index;\n }\n}","<div \r\n class=\"stepper-container\"\r\n [class.vertical]=\"orientation() === 'vertical'\"\r\n [class.numbered]=\"variant() === 'numbered'\"\r\n [class.progress]=\"variant() === 'progress'\"\r\n [class.icon-top]=\"variant() === 'icon-top'\"\r\n>\r\n <!-- Header -->\r\n <div class=\"stepper-header\" role=\"tablist\">\r\n @for (step of steps(); track $index; let i = $index) {\r\n <div \r\n class=\"step-header\"\r\n [class.active]=\"i === activeStep()\"\r\n [class.completed]=\"step.completed\"\r\n [class.disabled]=\"step.disabled\"\r\n [class.error]=\"!!step.error\"\r\n [class.warning]=\"!!step.warning\"\r\n [class.success]=\"!!step.success\"\r\n >\r\n <!-- Indicator -->\r\n <div \r\n class=\"step-indicator\"\r\n role=\"tab\"\r\n [attr.aria-selected]=\"i === activeStep()\"\r\n [attr.aria-disabled]=\"step.disabled\"\r\n [attr.aria-label]=\"getStepAriaLabel(step, i)\"\r\n (click)=\"canActivateStep(i) && !step.disabled && goToStep(i)\"\r\n >\r\n @if (variant() === 'numbered') {\r\n <span class=\"step-number\">{{ i + 1 }}</span>\r\n } @else if (step.completed) {\r\n <i class=\"ph ph-check\" aria-hidden=\"true\"></i>\r\n } @else if (step.icon) {\r\n <i class=\"ph ph-{{ step.icon }}\" aria-hidden=\"true\"></i>\r\n } @else {\r\n <span class=\"step-dot\"></span>\r\n }\r\n </div>\r\n\r\n <!-- Label -->\r\n <div class=\"step-label\">\r\n <span class=\"step-title\">{{ step.title }}</span>\r\n @if (step.subtitle) {\r\n <span class=\"step-subtitle\">{{ step.subtitle }}</span>\r\n }\r\n @if (step.error) {\r\n <span class=\"step-error\" [id]=\"'error-' + i\">{{ step.error }}</span>\r\n }\r\n @if (step.warning) {\r\n <span class=\"step-warning\" [id]=\"'warning-' + i\">{{ step.warning }}</span>\r\n }\r\n @if (step.success) {\r\n <span class=\"step-success\" [id]=\"'success-' + i\">{{ step.success }}</span>\r\n }\r\n </div>\r\n\r\n <!-- Connector -->\r\n @if (i < steps().length - 1) {\r\n <div class=\"step-connector\">\r\n <span class=\"connector-line\"></span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Content -->\r\n <div class=\"stepper-content\">\r\n @for (step of steps(); track $index; let i = $index) {\r\n <div \r\n class=\"step-content\"\r\n role=\"tabpanel\"\r\n [class.active]=\"i === activeStep()\"\r\n [attr.aria-labelledby]=\"'step-' + i\"\r\n [attr.id]=\"'panel-' + i\"\r\n [attr.tabindex]=\"i === activeStep() ? 0 : -1\"\r\n [attr.hidden]=\"i !== activeStep()\"\r\n >\r\n @if (elementRef.nativeElement.querySelector('[stepContent]')) {\r\n <ng-content select=\"[stepContent]\"></ng-content>\r\n } @else {\r\n <div class=\"default-content\">\r\n <p>Contenu de l'étape {{ i + 1 }}</p>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</div>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n ElementRef,\r\n InjectionToken\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SwitchSize, SwitchConfig } from './switch.types';\r\n\r\n/**\r\n * Token d'injection pour la configuration globale des switches\r\n */\r\nexport const SWITCH_CONFIG = new InjectionToken<Partial<SwitchConfig>>('SWITCH_CONFIG', {\r\n factory: () => ({\r\n checked: false,\r\n disabled: false,\r\n required: false,\r\n size: 'medium',\r\n labelPosition: 'right'\r\n })\r\n});\r\n\r\n/**\r\n * Token d'injection pour les styles personnalisés\r\n */\r\nexport const SWITCH_STYLES = new InjectionToken<Record<string, string>[]>('SWITCH_STYLES', {\r\n factory: () => []\r\n});\r\n\r\n@Component({\r\n selector: 'psh-switch',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './switch.component.html',\r\n styleUrls: ['./switch.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PshSwitchComponent {\r\n private config = inject(SWITCH_CONFIG);\r\n private elementRef = inject(ElementRef);\r\n private styles = inject(SWITCH_STYLES, { optional: true }) ?? [];\r\n\r\n // Model inputs with defaults from config\r\n checked = model(this.config.checked ?? false);\r\n disabled = model(this.config.disabled ?? false);\r\n required = model(this.config.required ?? false);\r\n size = model<SwitchSize>(this.config.size ?? 'medium');\r\n labelPosition = model<'left' | 'right'>(this.config.labelPosition ?? 'right');\r\n\r\n // Regular inputs\r\n label = input('');\r\n error = input('');\r\n success = input('');\r\n\r\n // Outputs\r\n checkedChange = output<boolean>();\r\n\r\n // Computed values\r\n customStyles = computed(() => Object.assign({}, ...this.styles));\r\n\r\n protected hasContent(): boolean {\r\n const content = this.elementRef.nativeElement\r\n .querySelector('.switch-text')\r\n ?.textContent?.trim();\r\n return !!content || !!this.label();\r\n }\r\n\r\n toggle(): void {\r\n if (!this.disabled()) {\r\n this.checked.update(v => !v);\r\n this.checkedChange.emit(this.checked());\r\n }\r\n }\r\n\r\n /**\r\n * Génère un identifiant unique pour les messages\r\n */\r\n generateMessageId(type: 'error' | 'success', id: string): string {\r\n return `${type}-message-${id}`;\r\n }\r\n}","<div \r\n class=\"switch-container\"\r\n [attr.aria-describedby]=\"error() ? 'error-message' : success() ? 'success-message' : null\"\r\n [class.disabled]=\"disabled()\"\r\n [class.error]=\"!!error()\"\r\n [class.success]=\"!!success()\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n>\r\n <label class=\"switch-label\" [class]=\"labelPosition() === 'left' ? 'label-left' : 'label-right'\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"switch-input\"\r\n [checked]=\"checked()\"\r\n [disabled]=\"disabled()\"\r\n [required]=\"required()\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-invalid]=\"!!error()\"\r\n [attr.aria-checked]=\"checked()\"\r\n (change)=\"toggle()\"\r\n />\r\n <span class=\"switch-control\">\r\n <span class=\"switch-thumb\"></span>\r\n </span>\r\n <span class=\"switch-text\">\r\n @if (label()) {\r\n {{ label() }}\r\n } @else {\r\n <ng-content>Switch</ng-content>\r\n }\r\n </span>\r\n </label>\r\n\r\n @if (error()) {\r\n <div id=\"error-message\" class=\"switch-error\" role=\"alert\">\r\n {{ error() }}\r\n </div>\r\n }\r\n\r\n @if (success()) {\r\n <div id=\"success-message\" class=\"switch-success\" role=\"status\">\r\n {{ success() }}\r\n </div>\r\n }\r\n</div>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n InjectionToken\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TabBarItem, TabBarConfig } from './tab-bar.types';\r\n\r\n/**\r\n * Token d'injection pour la configuration globale de la barre d'onglets\r\n */\r\nexport const TAB_BAR_CONFIG = new InjectionToken<Partial<TabBarConfig>>('TAB_BAR_CONFIG', {\r\n factory: () => ({\r\n disabled: false,\r\n position: 'bottom',\r\n animated: true,\r\n iconSize: 'medium'\r\n })\r\n});\r\n\r\n/**\r\n * Token d'injection pour les styles personnalisés\r\n */\r\nexport const TAB_BAR_STYLES = new InjectionToken<Record<string, string>[]>('TAB_BAR_STYLES', {\r\n factory: () => []\r\n});\r\n\r\n@Component({\r\n selector: 'psh-tab-bar',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './tab-bar.component.html',\r\n styleUrls: ['./tab-bar.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PshTabBarComponent {\r\n private config = inject(TAB_BAR_CONFIG);\r\n private styles = inject(TAB_BAR_STYLES, { optional: true }) ?? [];\r\n\r\n // Default items\r\n private defaultItems: TabBarItem[] = [\r\n { id: 'home', label: 'Accueil', icon: 'house' },\r\n { id: 'search', label: 'Rechercher', icon: 'magnifying-glass' },\r\n { id: 'notifications', label: 'Notifications', icon: 'bell', badge: '3' },\r\n { id: 'profile', label: 'Profil', icon: 'user' }\r\n ];\r\n\r\n // Model inputs with defaults from config\r\n disabled = model(this.config.disabled ?? false);\r\n position = model<'bottom' | 'top'>(this.config.position ?? 'bottom');\r\n animated = model(this.config.animated ?? true);\r\n iconSize = model<'small' | 'medium' | 'large'>(this.config.iconSize ?? 'medium');\r\n activeIndex = model(0);\r\n\r\n // Regular inputs\r\n items = input<TabBarItem[]>(this.defaultItems);\r\n\r\n // Outputs\r\n activeIndexChange = output<number>();\r\n\r\n // Computed values\r\n customStyles = computed(() => Object.assign({}, ...this.styles));\r\n\r\n selectTab(index: number): void {\r\n if (!this.disabled() && this.activeIndex() !== index) {\r\n this.activeIndex.set(index);\r\n this.activeIndexChange.emit(index);\r\n }\r\n }\r\n}","<nav \r\n class=\"tab-bar\"\r\n [class.top]=\"position() === 'top'\"\r\n [class.animated]=\"animated()\"\r\n [class.small]=\"iconSize() === 'small'\"\r\n [class.large]=\"iconSize() === 'large'\"\r\n role=\"tablist\"\r\n [attr.aria-label]=\"'Navigation par onglets'\"\r\n>\r\n @for (item of items(); track item.id; let i = $index) {\r\n <button\r\n class=\"tab-item\"\r\n [class.active]=\"activeIndex() === i\"\r\n [class.disabled]=\"disabled() || item.disabled\"\r\n role=\"tab\"\r\n [attr.aria-selected]=\"activeIndex() === i\"\r\n [attr.aria-disabled]=\"disabled() || item.disabled\"\r\n [attr.aria-label]=\"item.label\"\r\n (click)=\"selectTab(i)\"\r\n >\r\n <i \r\n [class]=\"activeIndex() === i ? 'ph-fill ph-' + item.icon : 'ph ph-' + item.icon\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n <span class=\"tab-label\">{{ item.label }}</span>\r\n @if (item.badge) {\r\n <span class=\"tab-badge\">{{ item.badge }}</span>\r\n }\r\n </button>\r\n }\r\n</nav>","import { ChangeDetectionStrategy, Component, computed, inject, input, model, output, ChangeDetectorRef } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TableColumn, TableRow, TableSort, TableConfig, TableRowClickEvent } from './table.types';\r\nimport { InjectionToken } from '@angular/core';\r\n\r\nexport const TABLE_CONFIG = new InjectionToken<Partial<TableConfig>>('TABLE_CONFIG', {\r\n factory: () => ({\r\n variant: 'default',\r\n size: 'medium',\r\n striped: false,\r\n hoverable: false,\r\n bordered: false,\r\n loading: false,\r\n emptyMessage: 'No data available',\r\n noResultsMessage: 'No results found',\r\n globalSearch: false,\r\n globalSearchPlaceholder: 'Search in all columns...'\r\n })\r\n});\r\n\r\nexport const TABLE_STYLES = new InjectionToken<Record<string, string>[]>('TABLE_STYLES', {\r\n factory: () => [{}]\r\n});\r\n\r\n@Component({\r\n selector: 'psh-table',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './table.component.html',\r\n styleUrls: ['./table.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PshTableComponent {\r\n private config = inject(TABLE_CONFIG);\r\n private cdr = inject(ChangeDetectorRef);\r\n private styles = inject(TABLE_STYLES, { optional: true }) ?? [{}];\r\n\r\n // Default data\r\n private defaultColumns: TableColumn[] = [\r\n { key: 'id', label: 'ID', width: '80px', sortable: true },\r\n { key: 'name', label: 'Name', sortable: true },\r\n { key: 'email', label: 'Email', sortable: true }\r\n ];\r\n\r\n private defaultData: TableRow[] = [\r\n { id: 1, name: 'John Doe', email: 'john@example.com' },\r\n { id: 2, name: 'Jane Smith', email: 'jane@example.com' },\r\n { id: 3, name: 'Bob Johnson', email: 'bob@example.com' }\r\n ];\r\n\r\n // Model inputs with defaults from config\r\n variant = model<'default' | 'outline'>(this.config.variant ?? 'default');\r\n size = model<'small' | 'medium' | 'large'>(this.config.size ?? 'medium');\r\n striped = model(this.config.striped ?? false);\r\n hoverable = model(this.config.hoverable ?? false);\r\n bordered = model(this.config.bordered ?? false);\r\n loading = model(this.config.loading ?? false);\r\n globalSearch = model(this.config.globalSearch ?? false);\r\n\r\n // Regular inputs\r\n columns = input<TableColumn[]>([]);\r\n data = input<TableRow[]>([]);\r\n emptyMessage = input<string>('No data available');\r\n noResultsMessage = input<string>('No results found');\r\n globalSearchPlaceholder = input(this.config.globalSearchPlaceholder ?? 'Search in all columns...');\r\n\r\n // Outputs\r\n sortChange = output<TableSort>();\r\n globalSearchChange = output<string>();\r\n rowClick = output<TableRowClickEvent>();\r\n\r\n // State\r\n currentSortSignal = model<TableSort | undefined>();\r\n searchTermSignal = model('');\r\n\r\n // Computed values\r\n computedEmptyMessage = computed(() => {\r\n return this.searchTerm() \r\n ? `${this.noResultsMessage()} \"${this.searchTerm()}\"` \r\n : this.emptyMessage();\r\n });\r\n\r\n currentSort = computed(() => this.currentSortSignal());\r\n searchTerm = computed(() => this.searchTermSignal());\r\n\r\n state = computed(() => {\r\n if (this.loading()) return 'loading';\r\n if (this.filteredData().length === 0) return 'empty';\r\n return 'default';\r\n });\r\n\r\n filteredData = computed(() => {\r\n let result = [...this.data()];\r\n \r\n // Apply global search\r\n if (this.searchTerm()) {\r\n result = this.filterData(result, this.searchTerm());\r\n }\r\n\r\n // Apply sorting\r\n const sort = this.currentSort();\r\n if (sort) {\r\n result = this.sortData(result, sort);\r\n }\r\n\r\n return result;\r\n });\r\n\r\n customStyles = computed(() => {\r\n return Object.assign({}, ...this.styles);\r\n });\r\n\r\n /**\r\n * Trie les données\r\n */\r\n private sortData(data: TableRow[], sort: TableSort): TableRow[] {\r\n return [...data].sort((a, b) => {\r\n const column = this.columns().find(col => col.key === sort.key);\r\n \r\n // Utiliser la fonction de tri personnalisée si elle existe\r\n if (column?.sortFn) {\r\n return sort.direction === 'asc' \r\n ? column.sortFn(a, b)\r\n : column.sortFn(b, a);\r\n }\r\n \r\n // Sinon, utiliser le tri par défaut avec le chemin\r\n const aValue = this.getNestedValue(a, column?.path || sort.key);\r\n const bValue = this.getNestedValue(b, column?.path || sort.key);\r\n \r\n if (sort.direction === 'asc') {\r\n return aValue > bValue ? 1 : -1;\r\n } else {\r\n return aValue < bValue ? 1 : -1;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Filtre les données\r\n */\r\n private filterData(data: TableRow[], searchTerm: string): TableRow[] {\r\n if (!searchTerm) return data;\r\n \r\n const term = searchTerm.toLowerCase();\r\n return data.filter(row => {\r\n return this.columns().some(column => {\r\n const value = this.getNestedValue(row, column.path || column.key);\r\n return value?.toString().toLowerCase().includes(term);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Récupère la valeur d'un objet imbriqué en utilisant un chemin\r\n */\r\n private getNestedValue(obj: any, path: string): any {\r\n return path.split('.').reduce((acc, part) => acc?.[part], obj);\r\n }\r\n\r\n handleSort(column: TableColumn): void {\r\n if (!column.sortable) return;\r\n\r\n const direction = !this.currentSort() || this.currentSort()?.key !== column.key\r\n ? 'asc'\r\n : this.currentSort()?.direction === 'asc'\r\n ? 'desc'\r\n : 'asc';\r\n\r\n const sort: TableSort = { key: column.key, direction };\r\n this.currentSortSignal.set(sort);\r\n this.sortChange.emit(sort);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n handleGlobalSearch(event: Event): void {\r\n const value = (event.target as HTMLInputElement).value;\r\n this.searchTermSignal.set(value);\r\n this.globalSearchChange.emit(value);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n handleRowClick(row: TableRow): void {\r\n this.rowClick.emit({ id: row.id, row });\r\n }\r\n\r\n /**\r\n * Applique la configuration par défaut\r\n */\r\n static applyDefaults(component: PshTableComponent): void {\r\n const config = inject(TABLE_CONFIG);\r\n if (config.variant) component.variant.set(config.variant);\r\n if (config.size) component.size.set(config.size);\r\n if (config.striped !== undefined) component.striped.set(config.striped);\r\n if (config.hoverable !== undefined) component.hoverable.set(config.hoverable);\r\n if (config.bordered !== undefined) component.bordered.set(config.bordered);\r\n if (config.loading !== undefined) component.loading.set(config.loading);\r\n if (config.globalSearch !== undefined) component.globalSearch.set(config.globalSearch);\r\n }\r\n}","<div \r\n class=\"table-wrapper\"\r\n [class.striped]=\"striped()\"\r\n [class.hoverable]=\"hoverable()\"\r\n [class.bordered]=\"bordered()\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class.outline]=\"variant() === 'outline'\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n @if (globalSearch()) {\r\n <div class=\"global-search\">\r\n <input\r\n type=\"text\"\r\n [attr.placeholder]=\"globalSearchPlaceholder()\"\r\n [value]=\"searchTerm()\"\r\n (input)=\"handleGlobalSearch($event)\"\r\n [attr.aria-label]=\"globalSearchPlaceholder()\"\r\n />\r\n <i class=\"ph ph-magnifying-glass\" aria-hidden=\"true\"></i>\r\n </div>\r\n }\r\n\r\n <table role=\"table\">\r\n <thead>\r\n <tr>\r\n @for (column of columns(); track column.key) {\r\n <th \r\n [style.width]=\"column.width\"\r\n [attr.aria-sort]=\"column.sortable ? (currentSort()?.key === column.key ? currentSort()?.direction : 'none') : null\"\r\n [class.sortable]=\"column.sortable\" \r\n (click)=\"handleSort(column)\"\r\n >\r\n <div class=\"th-content\">\r\n {{ column.label }}\r\n @if (column.sortable) {\r\n <i \r\n [class]=\"'ph ph-sort-' + (currentSort()?.key === column.key && currentSort()?.direction === 'desc' ? 'descending' : 'ascending')\"\r\n aria-hidden=\"true\">\r\n </i>\r\n }\r\n </div>\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n \r\n <tbody>\r\n @if (loading()) {\r\n <tr class=\"loading-row\">\r\n <td [attr.colspan]=\"columns().length\">\r\n <div class=\"loading-indicator\">\r\n <div class=\"spinner\"></div>\r\n </div>\r\n </td>\r\n </tr>\r\n } @else if (filteredData().length === 0) {\r\n <tr class=\"empty-row\">\r\n <td [attr.colspan]=\"columns().length\">\r\n {{ computedEmptyMessage() }}\r\n </td>\r\n </tr>\r\n } @else {\r\n @for (row of filteredData(); track row.id) {\r\n <tr (click)=\"handleRowClick(row)\">\r\n @for (column of columns(); track column.key) {\r\n <td>\r\n @if (column.template) {\r\n <ng-container \r\n [ngTemplateOutlet]=\"column.template\"\r\n [ngTemplateOutletContext]=\"{ $implicit: row }\"\r\n ></ng-container>\r\n } @else {\r\n {{ row[column.key] }}\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </table>\r\n</div>","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n inject,\n input,\n model,\n output,\n signal,\n ChangeDetectorRef,\n InjectionToken\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TabsVariant, TabsSize, Tab, TabsConfig } from './tabs.types';\n\n/**\n * Token d'injection pour la configuration globale des onglets\n */\nexport const TABS_CONFIG = new InjectionToken<Partial<TabsConfig>>('TABS_CONFIG', {\n factory: () => ({\n variant: 'default',\n size: 'medium',\n activeIndex: 0,\n animated: true,\n ariaLabels: {\n tab: 'Onglet',\n tablist: 'Liste d\\'onglets',\n tabpanel: 'Panneau d\\'onglet',\n selected: 'Sélectionné',\n unselected: 'Non sélectionné'\n }\n })\n});\n\n/**\n * Token d'injection pour les styles personnalisés\n */\nexport const TABS_STYLES = new InjectionToken<Record<string, string>[]>('TABS_STYLES', {\n factory: () => []\n});\n\n@Component({\n selector: 'psh-tabs',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PshTabsComponent {\n private config = inject(TABS_CONFIG);\n private styles = inject(TABS_STYLES, { optional: true }) ?? [];\n private cdr = inject(ChangeDetectorRef);\n private observer: MutationObserver | null = null;\n protected elementRef = inject(ElementRef);\n\n // Default tabs\n private defaultTabs: Tab[] = [\n { header: 'Onglet 1', content: 'Contenu de l\\'onglet 1' },\n { header: 'Onglet 2', content: 'Contenu de l\\'onglet 2' },\n { header: 'Onglet 3', content: 'Contenu de l\\'onglet 3' }\n ];\n\n // Model inputs with defaults from config\n variant = model<TabsVariant>(this.config.variant ?? 'default');\n size = model<TabsSize>(this.config.size ?? 'medium');\n activeIndex = model(this.config.activeIndex ?? 0);\n animated = model(this.config.animated ?? true);\n\n // State\n private tabsSignal = signal<Tab[]>(this.defaultTabs);\n tabs = computed(() => this.tabsSignal());\n\n // Outputs\n activeIndexChange = output<number>();\n\n ngAfterContentInit() {\n // Observer les changements de contenu\n this.observer = new MutationObserver(() => {\n const tabs = Array.from(this.elementRef.nativeElement.querySelectorAll('[tabContent]')) as HTMLElement[];\n \n // N'utiliser les onglets personnalisés que si ils existent\n if (tabs.length > 0) {\n this.tabsSignal.set(tabs.map((el, i) => ({\n header: el.getAttribute('data-header') || `Onglet ${i + 1}`,\n icon: el.getAttribute('data-icon') || undefined,\n content: el.innerHTML\n })));\n }\n \n this.cdr.markForCheck();\n });\n\n this.observer.observe(this.elementRef.nativeElement, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['data-header', 'data-icon']\n });\n \n // Initialiser les onglets\n this.observer.takeRecords();\n }\n\n ngOnDestroy() {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n }\n\n handleKeyDown(event: KeyboardEvent, index: number): void {\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n this.selectTab(index > 0 ? index - 1 : this.tabs().length - 1);\n break;\n case 'ArrowRight':\n event.preventDefault();\n this.selectTab(index < this.tabs().length - 1 ? index + 1 : 0);\n break;\n case 'Home':\n event.preventDefault();\n this.selectTab(0);\n break;\n case 'End':\n event.preventDefault();\n this.selectTab(this.tabs().length - 1);\n break;\n }\n }\n\n selectTab(index: number): void {\n if (this.activeIndex() !== index) {\n this.activeIndex.set(index);\n this.activeIndexChange.emit(index);\n this.cdr.markForCheck();\n }\n }\n\n // Computed values\n customStyles = computed(() => Object.assign({}, ...this.styles));\n\n /**\n * Applique la configuration par défaut\n */\n static applyDefaults(component: PshTabsComponent): void {\n const config = inject(TABS_CONFIG);\n if (config.variant) component.variant.set(config.variant);\n if (config.size) component.size.set(config.size);\n if (config.activeIndex !== undefined) component.activeIndex.set(config.activeIndex);\n if (config.animated !== undefined) component.animated.set(config.animated);\n }\n}","<div \r\n class=\"tabs-container\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class.animated]=\"animated()\"\r\n role=\"tablist\"\r\n>\r\n <div class=\"tabs-header\" [class]=\"variant()\">\r\n @for (tab of tabs(); track $index; let i = $index) {\r\n <button\r\n class=\"tab-button\"\r\n role=\"tab\"\r\n [class.active]=\"i === activeIndex()\"\r\n [attr.aria-selected]=\"i === activeIndex()\"\r\n [attr.aria-controls]=\"'panel-' + i\"\r\n [attr.id]=\"'tab-' + i\"\r\n [tabindex]=\"i === activeIndex() ? 0 : -1\"\r\n (click)=\"$event.preventDefault(); selectTab(i)\"\r\n (keydown)=\"handleKeyDown($event, i)\"\r\n >\r\n @if (tab.icon) {\r\n <i class=\"ph ph-{{ tab.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n {{ tab.header }}\r\n </button>\r\n }\r\n </div>\r\n\r\n <div class=\"tabs-content\">\r\n @for (tab of tabs(); track $index; let i = $index) {\r\n <div\r\n class=\"tab-panel\"\r\n role=\"tabpanel\"\r\n [class.active]=\"i === activeIndex()\"\r\n [attr.aria-labelledby]=\"'tab-' + i\"\r\n [attr.id]=\"'panel-' + i\"\r\n [attr.tabindex]=\"i === activeIndex() ? 0 : -1\"\r\n [attr.hidden]=\"i !== activeIndex()\"\r\n >\r\n @if (elementRef.nativeElement.querySelector('[tabContent]')) {\r\n <ng-content select=\"[tabContent]\"></ng-content>\r\n } @else {\r\n <div [innerHTML]=\"tab.content\"></div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</div>","import { Injectable, inject, signal } from '@angular/core';\r\nimport { TOAST_CONFIG, TOAST_STYLES } from './toast.component';\r\nimport { Toast, ToastPosition, ToastConfig } from './toast.types';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ToastService {\r\n private toasts = signal<Toast[]>([]);\r\n private positionSignal = signal<ToastPosition>('top-right');\r\n private config = inject(TOAST_CONFIG);\r\n private customStyles = inject(TOAST_STYLES, { optional: true }) ?? [];\r\n\r\n /**\r\n * Récupère la configuration du toast\r\n */\r\n getConfig(): Partial<ToastConfig> {\r\n return this.config;\r\n }\r\n\r\n /**\r\n * Récupère les styles personnalisés\r\n */\r\n getCustomStyles(): Record<string, string>[] {\r\n return this.customStyles;\r\n }\r\n\r\n /**\r\n * Récupère la position actuelle\r\n */\r\n getPosition() {\r\n return this.positionSignal;\r\n }\r\n\r\n /**\r\n * Récupère les toasts actifs\r\n */\r\n getToasts() {\r\n return this.toasts;\r\n }\r\n\r\n /**\r\n * Affiche un nouveau toast\r\n */\r\n show(toast: Omit<Toast, 'id'>) {\r\n const id = Math.random().toString(36).substring(7);\r\n const newToast: Toast = {\r\n ...toast,\r\n id,\r\n type: toast.type || 'info',\r\n duration: toast.duration ?? this.config.duration ?? 5000\r\n };\r\n\r\n // Limiter le nombre de toasts\r\n const maxToasts = this.config.maxToasts ?? 5;\r\n this.toasts.update(toasts => {\r\n const currentToasts = [...toasts];\r\n while (currentToasts.length >= maxToasts) {\r\n currentToasts.shift();\r\n }\r\n return [...currentToasts, newToast];\r\n });\r\n\r\n // Auto-suppression si durée > 0\r\n if (newToast.duration && newToast.duration > 0) {\r\n setTimeout(() => this.remove(id), newToast.duration);\r\n }\r\n\r\n return id;\r\n }\r\n\r\n /**\r\n * Supprime un toast\r\n */\r\n remove(id: string) {\r\n this.toasts.update(toasts => toasts.filter(t => t.id !== id));\r\n }\r\n\r\n /**\r\n * Change la position des toasts\r\n */\r\n setPosition(position: ToastPosition) {\r\n this.positionSignal.set(position);\r\n }\r\n}","import { ChangeDetectionStrategy, Component, computed, inject, InjectionToken } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Toast, ToastType, ToastConfig } from './toast.types';\r\nimport { ToastService } from './toast.service';\r\n\r\n/**\r\n * Token d'injection pour la configuration globale des toasts\r\n */\r\nexport const TOAST_CONFIG = new InjectionToken<Partial<ToastConfig>>('TOAST_CONFIG', {\r\n factory: () => ({\r\n position: 'top-right',\r\n duration: 5000,\r\n maxToasts: 5,\r\n pauseOnHover: true,\r\n showIcon: true,\r\n showCloseButton: true\r\n })\r\n});\r\n\r\n/**\r\n * Token d'injection pour les styles personnalisés\r\n */\r\nexport const TOAST_STYLES = new InjectionToken<Record<string, string>[]>('TOAST_STYLES', {\r\n factory: () => []\r\n});\r\n\r\n@Component({\r\n selector: 'psh-toast',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './toast.component.html',\r\n styleUrls: ['./toast.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ToastComponent {\r\n private toastService = inject(ToastService);\r\n private config = inject(TOAST_CONFIG);\r\n private styles = inject(TOAST_STYLES, { optional: true }) ?? [];\r\n\r\n // Computed values\r\n toasts = computed(() => this.toastService.getToasts()());\r\n position = computed(() => this.toastService.getPosition()());\r\n customStyles = computed(() => Object.assign({}, ...this.styles));\r\n\r\n getPositionClass(): string {\r\n return `${this.position()}`;\r\n }\r\n\r\n handleDismiss(id: string | undefined): void {\r\n if (id) {\r\n this.toastService.remove(id);\r\n }\r\n }\r\n\r\n getDefaultIcon(type: ToastType): string {\r\n const icons: Record<ToastType, string> = {\r\n info: 'info',\r\n success: 'check-circle',\r\n warning: 'warning',\r\n danger: 'warning-octagon'\r\n };\r\n return icons[type] || 'info';\r\n }\r\n}","<div class=\"toast-container\" [class]=\"getPositionClass()\">\r\n @for (toast of toasts(); track toast.id) {\r\n <div \r\n class=\"toast-item\"\r\n [class]=\"toast.type\"\r\n role=\"alert\"\r\n aria-live=\"polite\"\r\n [style.--progress-duration]=\"toast.duration + 'ms'\"\r\n >\r\n <i \r\n class=\"ph ph-{{ toast.icon || getDefaultIcon(toast.type) }} toast-icon\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n <div class=\"toast-content\">\r\n {{ toast.message }}\r\n </div>\r\n <button\r\n type=\"button\"\r\n class=\"toast-close\"\r\n (click)=\"handleDismiss(toast.id)\"\r\n aria-label=\"Fermer la notification\"\r\n >\r\n <i class=\"ph ph-x\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n }\r\n</div>","import { ChangeDetectionStrategy, Component, computed, inject, input, model, ChangeDetectorRef, ElementRef, HostListener, InjectionToken } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TooltipPosition, TooltipConfig } from './tooltip.types';\r\n\r\n/**\r\n * Token d'injection pour la configuration globale des tooltips\r\n */\r\nexport const TOOLTIP_CONFIG = new InjectionToken<Partial<TooltipConfig>>('TOOLTIP_CONFIG', {\r\n factory: () => ({\r\n variant: 'dark',\r\n position: 'top',\r\n showDelay: 200,\r\n hideDelay: 100,\r\n maxWidth: 200,\r\n defaultContent: 'TOOLTIP.DEFAULT.CONTENT'\r\n })\r\n});\r\n\r\n/**\r\n * Token d'injection pour les styles personnalisés\r\n */\r\nexport const TOOLTIP_STYLES = new InjectionToken<Record<string, string>[]>('TOOLTIP_STYLES', {\r\n factory: () => [{}]\r\n});\r\n\r\n@Component({\r\n selector: 'psh-tooltip',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './tooltip.component.html',\r\n styleUrls: ['./tooltip.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshTooltipComponent {\r\n private config = inject(TOOLTIP_CONFIG) as Required<TooltipConfig>;\r\n private cdr = inject(ChangeDetectorRef);\r\n private elementRef = inject(ElementRef);\r\n private styles = inject(TOOLTIP_STYLES, { optional: true }) ?? [];\r\n\r\n // Model inputs with defaults from config\r\n variant = model<'light' | 'dark'>(this.config.variant ?? 'dark');\r\n position = model<TooltipPosition>(this.config.position ?? 'top');\r\n showDelay = model(this.config.showDelay ?? 200);\r\n hideDelay = model(this.config.hideDelay ?? 100);\r\n maxWidth = model(this.config.maxWidth ?? 200);\r\n\r\n // Regular inputs\r\n content = input('Information contextuelle');\r\n\r\n // State\r\n isVisible = false;\r\n private showTimeout: ReturnType<typeof setTimeout> | null = null;\r\n private hideTimeout: ReturnType<typeof setTimeout> | null = null;\r\n\r\n // Computed values\r\n customStyles = computed(() => Object.assign({}, ...this.styles));\r\n\r\n @HostListener('mouseenter')\r\n show(): void {\r\n // Clear any existing hide timeout\r\n if (this.hideTimeout) {\r\n clearTimeout(this.hideTimeout);\r\n this.hideTimeout = null;\r\n }\r\n\r\n // Only start show timeout if tooltip isn't already visible\r\n if (!this.isVisible && !this.showTimeout) {\r\n this.showTimeout = setTimeout(() => {\r\n this.isVisible = true;\r\n this.showTimeout = null;\r\n this.cdr.markForCheck();\r\n }, this.showDelay());\r\n }\r\n }\r\n\r\n @HostListener('mouseleave')\r\n hide(): void {\r\n // Clear any existing show timeout\r\n if (this.showTimeout) {\r\n clearTimeout(this.showTimeout);\r\n this.showTimeout = null;\r\n }\r\n\r\n // Only start hide timeout if tooltip is visible\r\n if (this.isVisible && !this.hideTimeout) {\r\n this.hideTimeout = setTimeout(() => {\r\n this.isVisible = false;\r\n this.hideTimeout = null;\r\n this.cdr.markForCheck();\r\n }, this.hideDelay());\r\n }\r\n }\r\n\r\n onFocusIn(): void {\r\n this.show();\r\n }\r\n\r\n onFocusOut(): void {\r\n this.hide();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // Clean up any pending timeouts\r\n if (this.showTimeout) {\r\n clearTimeout(this.showTimeout);\r\n }\r\n if (this.hideTimeout) {\r\n clearTimeout(this.hideTimeout);\r\n }\r\n }\r\n\r\n /**\r\n * Applique la configuration par défaut\r\n */\r\n static applyDefaults(component: PshTooltipComponent): void {\r\n const config = inject(TOOLTIP_CONFIG) as Required<TooltipConfig>;\r\n if (config.variant) component.variant.set(config.variant);\r\n if (config.position) component.position.set(config.position);\r\n if (config.showDelay !== undefined) component.showDelay.set(config.showDelay);\r\n if (config.hideDelay !== undefined) component.hideDelay.set(config.hideDelay);\r\n if (config.maxWidth !== undefined) component.maxWidth.set(config.maxWidth);\r\n }\r\n}","<div \r\n class=\"tooltip-wrapper\"\r\n (mouseenter)=\"show()\"\r\n (mouseleave)=\"hide()\"\r\n (focusin)=\"show()\"\r\n (focusout)=\"hide()\"\r\n>\r\n <ng-content></ng-content>\r\n \r\n @if (isVisible) {\r\n <div \r\n class=\"tooltip\"\r\n [class]=\"position()\"\r\n [class.light]=\"variant() === 'light'\"\r\n [class.dark]=\"variant() === 'dark'\"\r\n [style.max-width.px]=\"maxWidth()\"\r\n role=\"tooltip\"\r\n >\r\n {{ content() }}\r\n <div class=\"tooltip-arrow\"></div>\r\n </div>\r\n }\r\n</div>","import { Injectable, signal, computed } from '@angular/core';\nimport { Theme, ThemeConfig } from './types/theme.types';\nimport { inject } from '@angular/core';\n\n// Clé pour le stockage localStorage\nconst THEME_STORAGE_KEY = 'helix-theme-preference';\n\n// Import optionnel - sera null si non fourni\ninterface InsurerContextService {\n primaryColor(): string;\n secondaryColor(): string;\n}\n\n// Token pour l'injection optionnelle\nimport { InjectionToken } from '@angular/core';\nexport const INSURER_CONTEXT_SERVICE = new InjectionToken<InsurerContextService>('INSURER_CONTEXT_SERVICE');\n\nconst DEFAULT_THEME_COLORS = {\n primary: '#0F02C4',\n secondary: '#7B3AEC' \n};\n\n/**\n * Convertit une couleur hexadécimale en RGB\n */\nfunction hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n // Nettoyer le hex code (enlever le # si présent)\n hex = hex.replace(/^#/, '');\n \n // S'assurer que la longueur est correcte\n if (![3, 6].includes(hex.length)) {\n console.error(`Invalid hex color: ${hex}`);\n return null;\n }\n \n // Si c'est un format court (3 chiffres), le convertir en format long (6 chiffres)\n if (hex.length === 3) {\n hex = hex.split('').map(char => char + char).join('');\n }\n \n // Extraire les composantes RGB\n const r = parseInt(hex.substring(0, 2), 16);\n const g = parseInt(hex.substring(2, 4), 16);\n const b = parseInt(hex.substring(4, 6), 16);\n \n return { r, g, b };\n}\n\n/**\n * Convertit des valeurs RGB en couleur hexadécimale\n */\nfunction rgbToHex(r: number, g: number, b: number): string {\n return '#' + [r, g, b]\n .map(x => {\n const hex = Math.max(0, Math.min(255, Math.round(x))).toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n })\n .join('');\n}\n\n/**\n * Éclaircit une couleur hexadécimale d'un certain pourcentage\n */\nfunction lightenColor(hex: string, percent: number): string {\n const rgb = hexToRgb(hex);\n if (!rgb) return hex;\n \n const { r, g, b } = rgb;\n const amount = percent / 100;\n \n const newR = r + (255 - r) * amount;\n const newG = g + (255 - g) * amount;\n const newB = b + (255 - b) * amount;\n \n return rgbToHex(newR, newG, newB);\n}\n\n/**\n * Assombrit une couleur hexadécimale d'un certain pourcentage\n */\nfunction darkenColor(hex: string, percent: number): string {\n const rgb = hexToRgb(hex);\n if (!rgb) return hex;\n \n const { r, g, b } = rgb;\n const amount = percent / 100;\n \n const newR = r * (1 - amount);\n const newG = g * (1 - amount);\n const newB = b * (1 - amount);\n \n return rgbToHex(newR, newG, newB);\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ThemeService {\n private insurerContext = inject(INSURER_CONTEXT_SERVICE, { optional: true });\n private isDarkThemeSignal = signal<boolean>(false);\n private themeNameSignal = signal<Theme>('light');\n private lastChangeSignal = signal<Date>(new Date());\n\n isDarkTheme = computed(() => this.isDarkThemeSignal());\n themeName = computed(() => this.themeNameSignal());\n \n themeInfo = computed(() => ({\n isDark: this.isDarkTheme(),\n name: this.themeName(),\n lastChange: this.lastChangeSignal()\n }));\n\n constructor() {\n // Initialiser le thème en fonction de la préférence stockée ou par défaut 'light'\n this.initializeTheme();\n \n // Listen for system theme changes (commented out to keep user control)\n // window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', e => {\n // this.setDarkTheme(e.matches);\n // });\n \n // Attendre que l'injection soit prête avant d'appliquer le thème\n setTimeout(() => {\n this.applyInsurerTheme();\n }, 0);\n }\n\n setDarkTheme(isDark: boolean) {\n document.documentElement.setAttribute('data-theme', isDark ? 'dark' : 'light');\n this.isDarkThemeSignal.set(isDark);\n this.themeNameSignal.set(isDark ? 'dark' : 'light');\n this.lastChangeSignal.set(new Date());\n \n // Réappliquer les couleurs de l'assureur après le changement de thème\n this.applyInsurerTheme();\n }\n\n toggleTheme() {\n this.setDarkTheme(!this.isDarkThemeSignal());\n }\n\n updateTheme(name: Theme) {\n this.themeNameSignal.set(name);\n this.isDarkThemeSignal.set(name === 'dark');\n this.lastChangeSignal.set(new Date());\n \n // Sauvegarder la préférence dans localStorage\n this.saveThemePreference(name);\n \n // Réappliquer les couleurs de l'assureur après le changement de thème\n this.applyInsurerTheme();\n }\n \n /**\n * Applique les couleurs de l'assureur aux variables CSS\n */\n applyInsurerTheme() {\n // Debug: vérifier si le contexte assureur est disponible\n if (!this.insurerContext) {\n console.warn('InsurerContext service not available, using default theme colors');\n }\n \n // Utiliser les couleurs de l'assureur si disponibles, sinon les couleurs par défaut\n const primaryColor = this.insurerContext?.primaryColor() || DEFAULT_THEME_COLORS.primary;\n const secondaryColor = this.insurerContext?.secondaryColor() || DEFAULT_THEME_COLORS.secondary;\n \n // Debug: afficher les couleurs utilisées\n console.log('Applying theme colors:', { \n primaryColor, \n secondaryColor,\n hasInsurerContext: !!this.insurerContext,\n insurerPrimary: this.insurerContext?.primaryColor(),\n insurerSecondary: this.insurerContext?.secondaryColor()\n });\n \n if (primaryColor) {\n try {\n // Générer les variantes de couleurs\n const primaryColorLight = lightenColor(primaryColor, 20);\n const primaryColorLighter = lightenColor(primaryColor, 40);\n const primaryColorDark = darkenColor(primaryColor, 20);\n const primaryColorDarker = darkenColor(primaryColor, 40);\n \n // Convertir en RGB pour les besoins de transparence\n const rgb = hexToRgb(primaryColor);\n const primaryColorRgb = rgb ? `${rgb.r}, ${rgb.g}, ${rgb.b}` : null;\n \n // Déterminer si le texte sur cette couleur doit être clair ou foncé\n // Une formule simple: luminosité = 0.299*R + 0.587*G + 0.114*B\n let primaryColorText = '#FFFFFF'; // Par défaut blanc\n if (rgb) {\n const luminance = (0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b) / 255;\n if (luminance > 0.5) {\n primaryColorText = '#000000'; // Texte noir pour les couleurs claires\n }\n }\n \n // Appliquer toutes les variantes\n document.documentElement.style.setProperty('--insurer-primary-color', primaryColor);\n document.documentElement.style.setProperty('--insurer-primary-color-light', primaryColorLight);\n document.documentElement.style.setProperty('--insurer-primary-color-lighter', primaryColorLighter);\n document.documentElement.style.setProperty('--insurer-primary-color-dark', primaryColorDark);\n document.documentElement.style.setProperty('--insurer-primary-color-darker', primaryColorDarker);\n document.documentElement.style.setProperty('--insurer-primary-color-text', primaryColorText);\n \n if (primaryColorRgb) {\n document.documentElement.style.setProperty('--insurer-primary-color-rgb', primaryColorRgb);\n }\n \n console.log(`Applied insurer theme with primary color: ${primaryColor}`);\n \n // Appliquer la couleur secondaire\n if (secondaryColor) {\n try {\n // Générer les variantes de couleurs secondaires\n const secondaryColorLight = lightenColor(secondaryColor, 20);\n const secondaryColorLighter = lightenColor(secondaryColor, 40);\n const secondaryColorDark = darkenColor(secondaryColor, 20);\n const secondaryColorDarker = darkenColor(secondaryColor, 40);\n \n // Convertir en RGB pour les besoins de transparence\n const rgb = hexToRgb(secondaryColor);\n const secondaryColorRgb = rgb ? `${rgb.r}, ${rgb.g}, ${rgb.b}` : null;\n \n // Déterminer si le texte sur cette couleur doit être clair ou foncé\n let secondaryColorText = '#FFFFFF'; // Par défaut blanc\n if (rgb) {\n const luminance = (0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b) / 255;\n if (luminance > 0.5) {\n secondaryColorText = '#000000'; // Texte noir pour les couleurs claires\n }\n }\n \n // Appliquer toutes les variantes\n document.documentElement.style.setProperty('--insurer-secondary-color', secondaryColor);\n document.documentElement.style.setProperty('--insurer-secondary-color-light', secondaryColorLight);\n document.documentElement.style.setProperty('--insurer-secondary-color-lighter', secondaryColorLighter);\n document.documentElement.style.setProperty('--insurer-secondary-color-dark', secondaryColorDark);\n document.documentElement.style.setProperty('--insurer-secondary-color-darker', secondaryColorDarker);\n document.documentElement.style.setProperty('--insurer-secondary-color-text', secondaryColorText);\n \n if (secondaryColorRgb) {\n document.documentElement.style.setProperty('--insurer-secondary-color-rgb', secondaryColorRgb);\n }\n \n console.log(`Applied insurer theme with secondary color: ${secondaryColor}`);\n } catch (error) {\n console.error('Error applying insurer secondary color theme:', error);\n }\n }\n } catch (error) {\n console.error('Error applying insurer theme:', error);\n }\n }\n }\n\n /**\n * Initialise le thème au démarrage de l'application\n * Utilise la préférence stockée ou le thème par défaut 'light'\n */\n private initializeTheme(): void {\n let savedTheme: Theme | null = null;\n \n // Tentative de récupération du thème sauvegardé\n try {\n savedTheme = localStorage.getItem(THEME_STORAGE_KEY) as Theme;\n } catch (error) {\n console.warn('Unable to read theme from localStorage:', error);\n }\n \n // Valider et appliquer le thème\n const isValidTheme = savedTheme === 'light' || savedTheme === 'dark';\n const themeToApply = isValidTheme ? savedTheme : 'light';\n \n this.setDarkTheme(themeToApply === 'dark');\n }\n\n /**\n * Sauvegarde la préférence de thème dans le localStorage\n */\n private saveThemePreference(theme: Theme): void {\n try {\n localStorage.setItem(THEME_STORAGE_KEY, theme);\n } catch (error) {\n console.warn('Unable to save theme to localStorage:', error);\n }\n }\n}","import { Injectable, inject, InjectionToken, Type } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nexport interface TranslationProvider {\n translate(key: string, params?: Record<string, any>): string;\n translateAsync(key: string, params?: Record<string, any>): Observable<string>;\n setLanguage(lang: string): void;\n getCurrentLanguage(): string;\n onLangChange(): Observable<string>;\n}\n\n@Injectable()\nexport class NgxTranslateProvider implements TranslationProvider {\n private translateService = inject(TranslateService);\n\n translate(key: string, params?: Record<string, any>): string {\n if (!key) return '';\n return this.translateService.instant(key, params);\n }\n\n translateAsync(key: string, params?: Record<string, any>): Observable<string> {\n if (!key) return new Observable(subscriber => subscriber.next(''));\n return this.translateService.stream(key, params);\n }\n\n setLanguage(lang: string): void {\n this.translateService.use(lang);\n }\n\n getCurrentLanguage(): string {\n return this.translateService.currentLang;\n }\n\n onLangChange(): Observable<string> {\n return this.translateService.onLangChange.pipe(\n map(event => event.lang)\n );\n }\n}\n\nexport const TRANSLATION_PROVIDER = new InjectionToken<TranslationProvider>('TRANSLATION_PROVIDER', {\n factory: () => new NgxTranslateProvider()\n});\n\nexport function provideTranslation(provider: Type<TranslationProvider> = NgxTranslateProvider) {\n return { provide: TRANSLATION_PROVIDER, useClass: provider };\n}","import { Injectable } from '@angular/core';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { filter } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ScrollService {\n constructor(private router: Router) {\n // Subscribe to router events\n this.router.events.pipe(\n // Filter only NavigationEnd events\n filter(event => event instanceof NavigationEnd)\n ).subscribe(() => {\n // Reset scroll position\n window.scrollTo(0, 0);\n });\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DEFAULT_CONFIG","i1"],"mappings":";;;;;;;;;;;;AAYA;AACA,MAAM,cAAc,GAAgB;AAClC,IAAA,OAAO,EAAE;CACV;AAED;AACA,MAAM,aAAa,GAA2B;AAC5C,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,OAAO,EAAE,cAAc;AACvB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,MAAM,EAAE;CACT;AAED;AACA,MAAMA,gBAAc,GAAG;AACrB,IAAA,IAAI,EAAE,MAAmB;AACzB,IAAA,YAAY,EAAE,MAAsB;AACpC,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,IAAI,EAAE,QAAqB;AAC3B,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,IAAI,EAAE;CACP;MAUY,iBAAiB,CAAA;AAR9B,IAAA,WAAA,GAAA;;AAWE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAYA,gBAAc,CAAC,IAAI,CAAC;;AAG5C,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAeA,gBAAc,CAAC,YAAY,CAAC;AAC/D,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAACA,gBAAc,CAAC,QAAQ,CAAC;AACzC,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAYA,gBAAc,CAAC,IAAI,CAAC;AAC5C,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAACA,gBAAc,CAAC,QAAQ,CAAC;AACzC,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAYA,gBAAc,CAAC,IAAI,CAAC;;QAG5C,IAAI,CAAA,IAAA,GAAG,KAAK,EAAU;QACtB,IAAS,CAAA,SAAA,GAAG,KAAK,EAAU;AAC3B,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC;QAC5C,IAAQ,CAAA,QAAA,GAAG,KAAK,EAA0B;AAC1C,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;;QAGnB,IAAM,CAAA,MAAA,GAAG,MAAM,EAAQ;;AAGvB,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,MAAM,CAAC;AAClE,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;AAE3D,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;YAC9B,MAAM,KAAK,GAAa,EAAE;YAC1B,IAAI,IAAI,CAAC,SAAS,EAAE;AAAE,gBAAA,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;AAC/C,YAAA,OAAO,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS;AACnD,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAC1B,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,WAAW,GAAG,QAAQ,CAAC,CAC1F;AAED,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MACtB,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,GAAG,QAAQ,CAAC,CAClF;AAED,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;YACpB,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,gBAAA,OAAO,UAAU;AACtC,YAAA,OAAO,IAAI,CAAC,IAAI,EAAE;AACpB,SAAC,CAAC;AAeH;IAbC,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;;;IAIpB,OAAO,aAAa,CAAC,SAA4B,EAAA;QAC/C,SAAS,CAAC,IAAI,CAAC,GAAG,CAACA,gBAAc,CAAC,IAAI,CAAC;QACvC,SAAS,CAAC,YAAY,CAAC,GAAG,CAACA,gBAAc,CAAC,YAAY,CAAC;QACvD,SAAS,CAAC,QAAQ,CAAC,GAAG,CAACA,gBAAc,CAAC,QAAQ,CAAC;QAC/C,SAAS,CAAC,IAAI,CAAC,GAAG,CAACA,gBAAc,CAAC,IAAI,CAAC;QACvC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAACA,gBAAc,CAAC,QAAQ,CAAC;QAC/C,SAAS,CAAC,IAAI,CAAC,GAAG,CAACA,gBAAc,CAAC,IAAI,CAAC;;8GAxD9B,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,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,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,IAAA,EAAA,YAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3C9B,88BA+BM,EAAA,MAAA,EAAA,CAAA,umDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDOM,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAR7B,SAAS;+BACE,WAAW,EAAA,UAAA,EACT,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,88BAAA,EAAA,MAAA,EAAA,CAAA,umDAAA,CAAA,EAAA;;;AErCjD;AACA,MAAMA,gBAAc,GAAG;AACrB,IAAA,IAAI,EAAE,QAAsB;AAC5B,IAAA,KAAK,EAAE,QAAuB;AAC9B,IAAA,GAAG,EAAE,aAAa;AAClB,IAAA,IAAI,EAAE;CACP;AAED;AACA,MAAM,qBAAqB,GAAiC;AAC1D,IAAA,MAAM,EAAE,sBAAsB;AAC9B,IAAA,OAAO,EAAE,oBAAoB;AAC7B,IAAA,IAAI,EAAE,sBAAsB;AAC5B,IAAA,IAAI,EAAE;CACP;MAUY,kBAAkB,CAAA;AAR/B,IAAA,WAAA,GAAA;;AAWE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAaA,gBAAc,CAAC,IAAI,CAAC;AAC7C,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAcA,gBAAc,CAAC,KAAK,CAAC;QAChD,IAAG,CAAA,GAAA,GAAG,KAAK,EAAsB;AACjC,QAAA,IAAA,CAAA,GAAG,GAAG,KAAK,CAASA,gBAAc,CAAC,GAAG,CAAC;;AAGvC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;AACpB,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAASA,gBAAc,CAAC,IAAI,CAAC;QACzC,IAAM,CAAA,MAAA,GAAG,KAAK,EAA4B;QAC1C,IAAS,CAAA,SAAA,GAAG,KAAK,EAAU;;AAG3B,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AACvC,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AACnE,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAEjE,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;AAElE,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC1B,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE;AACnC,YAAA,IAAI,CAAC,aAAa;AAAE,gBAAA,OAAO,SAAS;AACpC,YAAA,OAAO,qBAAqB,CAAC,aAAa,CAAC;AAC7C,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,SAAS,CAAC;AACnD;8GA5BY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,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,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,YAAA,EAAA,KAAA,EAAA,aAAA,EAAA,GAAA,EAAA,WAAA,EAAA,GAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5B/B,82BA2BM,EAAA,MAAA,EAAA,CAAA,yoDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDJM,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAR9B,SAAS;+BACE,YAAY,EAAA,UAAA,EACV,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,82BAAA,EAAA,MAAA,EAAA,CAAA,yoDAAA,CAAA,EAAA;;;AEtBjD;AACA,MAAMA,gBAAc,GAAG;AACrB,IAAA,OAAO,EAAE,SAAyB;AAClC,IAAA,IAAI,EAAE,QAAqB;AAC3B,IAAA,WAAW,EAAE,MAA0B;AACvC,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,QAAQ,EAAE;CACX;MAUY,iBAAiB,CAAA;AAR9B,IAAA,WAAA,GAAA;;AAWE,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAeA,gBAAc,CAAC,OAAO,CAAC;AACrD,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAYA,gBAAc,CAAC,IAAI,CAAC;AAC5C,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAmBA,gBAAc,CAAC,WAAW,CAAC;AACjE,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAS,EAAE,CAAC;AAC3B,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;QACrB,IAAK,CAAA,KAAA,GAAG,KAAK,EAAK;AAClB,QAAA,IAAA,CAAA,GAAG,GAAG,KAAK,CAACA,gBAAc,CAAC,GAAG,CAAC;AAC/B,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAACA,gBAAc,CAAC,QAAQ,CAAC;AACzC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAgBA,gBAAc,CAAC,QAAQ,CAAC;;AAGxD,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC;QACtB,IAAS,CAAA,SAAA,GAAG,KAAK,EAAU;QAC3B,IAAS,CAAA,SAAA,GAAG,KAAK,EAAsC;;QAGvD,IAAY,CAAA,YAAA,GAAG,QAAQ,CAAC,MACtB,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,GAAG,QAAQ,GAAG,KAAK,CACpD;AAED,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;YAChC,IAAI,IAAI,CAAC,SAAS,EAAE;AAAE,gBAAA,OAAO,IAAI,CAAC,SAAS,EAAE;YAC7C,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,IAAI,CAAC,OAAO,EAAE;AACzC,YAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE;AACnC,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;AACpB,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,QAAQ;YACpC,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,SAAS;AACpC,YAAA,OAAO,IAAI,CAAC,WAAW,EAAE;AAC3B,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;AAClC,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE;AAChC,gBAAA,OAAO,EAAE;;AAGX,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,SAAS,EAAE;AAClE,gBAAA,OAAO,IAAI,CAAC,OAAO,EAAE;;AAGvB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;AACjC,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,EAAE;YAEzC,IAAI,gBAAgB,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS,EAAE;AAC3E,gBAAA,OAAO,gBAAgB,CAAC,YAAY,CAAC;;AAGvC,YAAA,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;gBACpC,MAAM,YAAY,GAAG,YAAY;AACjC,gBAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;AAAE,oBAAA,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;AACvE,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;;AAGvC,YAAA,OAAO,YAAY,KAAK,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;AACjF,SAAC,CAAC;AAoBH;AAlBS,IAAA,kBAAkB,CAAC,KAAa,EAAA;QACtC,OAAO,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;;AAG7B,IAAA,WAAW,CAAC,KAAa,EAAA;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE;AAC5B,QAAA,OAAO,KAAK,GAAG,GAAG,GAAG,CAAA,EAAG,GAAG,CAAA,CAAA,CAAG,GAAG,CAAG,EAAA,KAAK,EAAE;;;IAI7C,OAAO,aAAa,CAAC,SAA4B,EAAA;QAC/C,SAAS,CAAC,OAAO,CAAC,GAAG,CAACA,gBAAc,CAAC,OAAO,CAAC;QAC7C,SAAS,CAAC,IAAI,CAAC,GAAG,CAACA,gBAAc,CAAC,IAAI,CAAC;QACvC,SAAS,CAAC,WAAW,CAAC,GAAG,CAACA,gBAAc,CAAC,WAAW,CAAC;QACrD,SAAS,CAAC,GAAG,CAAC,GAAG,CAACA,gBAAc,CAAC,GAAG,CAAC;QACrC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAACA,gBAAc,CAAC,QAAQ,CAAC;QAC/C,SAAS,CAAC,QAAQ,CAAC,GAAG,CAACA,gBAAc,CAAC,QAAQ,CAAC;;8GA5EtC,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,IAAA,EAAA,YAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,OAAA,EAAA,eAAA,EAAA,KAAA,EAAA,aAAA,EAAA,GAAA,EAAA,WAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtB9B,8hCA0BM,EAAA,MAAA,EAAA,CAAA,msDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDTM,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAR7B,SAAS;+BACE,WAAW,EAAA,UAAA,EACT,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,8hCAAA,EAAA,MAAA,EAAA,CAAA,msDAAA,CAAA,EAAA;;;MECpC,kBAAkB,CAAA;AAR/B,IAAA,WAAA,GAAA;AASU,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGvC,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAmB,QAAQ,CAAC;AAC9C,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAgB,SAAS,CAAC;AACzC,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAa,QAAQ,CAAC;AAClC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;AACvB,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC;AACtB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;AACxB,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAqB,MAAM,CAAC;;QAGhD,IAAI,CAAA,IAAA,GAAG,KAAK,EAAU;QACtB,IAAS,CAAA,SAAA,GAAG,KAAK,EAAU;AAC3B,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC;AACjC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,sCAAsC,CAAC;QAC5D,IAAY,CAAA,YAAA,GAAG,KAAK,EAAU;AAC9B,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAgC,QAAQ,CAAC;;QAGrD,IAAO,CAAA,OAAA,GAAG,MAAM,EAAc;;AAG9B,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;YAChC,IAAI,IAAI,CAAC,SAAS,EAAE;AAAE,gBAAA,OAAO,IAAI,CAAC,SAAS,EAAE;YAC7C,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,IAAI,CAAC,WAAW,EAAE;YAC7C,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,gBAAA,OAAO,IAAI,CAAC,YAAY,EAAE;AAC/C,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,MAAM,EAAE;gBAClC,OAAO,IAAI,CAAC,YAAY,EAAE,IAAI,CAAG,EAAA,IAAI,CAAC,OAAO,EAAE,CAAA,OAAA,CAAS;;AAE1D,YAAA,OAAO,EAAE;AACX,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;YACpB,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,gBAAA,OAAO,UAAU;YACtC,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,SAAS;AACpC,YAAA,OAAO,SAAS;AAClB,SAAC,CAAC;AAcH;IAZW,UAAU,GAAA;AAClB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;aAC7B,aAAa,CAAC,iBAAiB;AAChC,cAAE,WAAW,EAAE,IAAI,EAAE;QACvB,OAAO,CAAC,CAAC,OAAO;;AAGlB,IAAA,WAAW,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AACvC,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;;;8GAjDjB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,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,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,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,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,IAAA,EAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrB/B,kiDA0CS,EAAA,MAAA,EAAA,CAAA,gpHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED1BG,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAR9B,SAAS;+BACE,YAAY,EAAA,UAAA,EACV,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,kiDAAA,EAAA,MAAA,EAAA,CAAA,gpHAAA,CAAA,EAAA;;;AERjD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MASU,gBAAgB,CAAA;AAR7B,IAAA,WAAA,GAAA;;;AAYE,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAc,SAAS,CAAC;;AAGvC,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;;AAGxB,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC;;;AAI1B,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAS,EAAE,CAAC;;AAGzB,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAS,EAAE,CAAC;;AAG/B,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAmB,SAAS,CAAC;;AAGjD,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAc,QAAQ,CAAC;;AAGtC,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAuB,OAAO,CAAC;;AAGvD,QAAA,IAAA,CAAA,iBAAiB,GAAG,KAAK,CAAU,IAAI,CAAC;;AAGxC,QAAA,IAAA,CAAA,iBAAiB,GAAG,KAAK,CAAU,IAAI,CAAC;;AAGxC,QAAA,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAAU,IAAI,CAAC;;AAGzC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAS,EAAE,CAAC;;AAG5B,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAyB,EAAE,CAAC;;AAG/C,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAU,KAAK,CAAC;;AAG/B,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC;;;QAIhC,IAAO,CAAA,OAAA,GAAG,MAAM,EAAc;;;AAI9B,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AAC9B,YAAA,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,CAAW,QAAA,EAAA,IAAI,CAAC,OAAO,EAAE,CAAE,CAAA,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,CAAS,MAAA,EAAA,IAAI,CAAC,YAAY,EAAE,CAAE,CAAA,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,CAAW,QAAA,EAAA,IAAI,CAAC,OAAO,EAAE,CAAE,CAAA,CAAC;YAEzC,IAAI,IAAI,CAAC,SAAS,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;YAC/C,IAAI,IAAI,CAAC,WAAW,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;YACnD,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3C,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YAC7C,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAElD,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,SAAC,CAAC;;AAGF,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE;AAClC,SAAC,CAAC;;AAGF,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACxB,YAAA,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;AAC/C,SAAC,CAAC;;AAGF,QAAA,IAAA,CAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAK;AACpC,YAAA,OAAO,iBAAiB,IAAI,CAAC,gBAAgB,EAAE,EAAE;AACnD,SAAC,CAAC;AAyBH;AAvBC;;;;AAIG;AACH,IAAA,WAAW,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AAC7D,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAI5B;;;AAGG;AACH,IAAA,aAAa,CAAC,KAAoB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AAC7D,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;gBAC9C,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAY,CAAC;;;;8GAxG1B,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,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,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,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,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,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,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,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,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,eAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1C7B,23DAyDA,EAAA,MAAA,EAAA,CAAA,omNAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDpBY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAR5B,SAAS;+BACE,UAAU,EAAA,UAAA,EACR,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,23DAAA,EAAA,MAAA,EAAA,CAAA,omNAAA,CAAA,EAAA;;;MEpCpC,UAAU,GAAG,IAAI,cAAc,CAAqB,YAAY,EAAE;AAC7E,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,UAAU,EAAE,kBAAkB;AAC9B,QAAA,UAAU,EAAE;AACV,YAAA,KAAK,EAAE,kBAAkB;AACzB,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,MAAM,EAAE;AACT;KACF;AACF,CAAA;MAEY,UAAU,GAAG,IAAI,cAAc,CAA2B,YAAY,EAAE;AACnF,IAAA,OAAO,EAAE,MAAM;AAChB,CAAA;MAUY,eAAe,CAAA;AAR5B,IAAA,WAAA,GAAA;AASU,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;AAC3B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;;QAG7D,IAAO,CAAA,OAAA,GAAG,KAAK,CAAa,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC;QAC7D,IAAI,CAAA,IAAA,GAAG,KAAK,CAAU,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC;QACnD,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC;QAC/C,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC;;QAG/C,IAAI,CAAA,IAAA,GAAG,KAAK,EAAU;QACtB,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,kBAAkB,CAAC;AAChE,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC;;QAGtB,IAAO,CAAA,OAAA,GAAG,MAAM,EAAc;QAC9B,IAAM,CAAA,MAAA,GAAG,MAAM,EAAQ;;AAGvB,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAEhE,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,GAAG,UAAU,GAAG,SAAS,CAAC;AAcjE;AAZC,IAAA,WAAW,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAI5B,IAAA,WAAW,CAAC,KAAiB,EAAA;QAC3B,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;;;8GAjCX,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,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,IAAA,EAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/B5B,wgCAgCM,EAAA,MAAA,EAAA,CAAA,o8CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDNM,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,eAAe,EAAA,UAAA,EAAA,CAAA;kBAR3B,SAAS;+BACE,SAAS,EAAA,UAAA,EACP,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,wgCAAA,EAAA,MAAA,EAAA,CAAA,o8CAAA,CAAA,EAAA;;;AEAjD;;;;;AAKG;MASU,oBAAoB,CAAA;AARjC,IAAA,WAAA,GAAA;;;AAYE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAgB;;AAGrC,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAsC,SAAS,CAAC;;AAGnE,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC;;;QAI1B,IAAO,CAAA,OAAA,GAAG,MAAM,EAAc;;;AAI9B,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;YACxB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,cAAc;AAC7C,YAAA,OAAO,UAAU,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,EAAE;AACvD,SAAC,CAAC;;AAGF,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AACrB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;YACxB,OAAO,CAAC,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC;AAC7C,SAAC,CAAC;AAQH;AANC;;AAEG;AACH,IAAA,eAAe,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;;8GAjCf,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,8fC3CjC,8uBAwBW,EAAA,MAAA,EAAA,CAAA,mrDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDcC,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,8WAAE,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,YAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAK9C,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EACb,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,gBAAgB,EAAE,eAAe,CAAC,EAGzC,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,8uBAAA,EAAA,MAAA,EAAA,CAAA,mrDAAA,CAAA,EAAA;;;AE/BjD;;;;;AAKG;MASU,0BAA0B,CAAA;AARvC,IAAA,WAAA,GAAA;;;AAYE,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAsC,SAAS,CAAC;;AAG/D,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC;;AAG1B,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;;;AAIxB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAS,OAAO,CAAC;;AAGlC,QAAA,IAAA,CAAA,GAAG,GAAG,KAAK,CAAS,mBAAmB,CAAC;;AAGxC,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAS,GAAG,CAAC;;AAGhC,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAS,mBAAmB,CAAC;;AAGnD,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAS,OAAO,CAAC;;;QAIrC,IAAO,CAAA,OAAA,GAAG,MAAM,EAAc;AAQ/B;AANC;;AAEG;AACH,IAAA,eAAe,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;;8GApCf,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,ECxBvC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,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,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,whCAiCW,EDdC,MAAA,EAAA,CAAA,6vCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+BAAE,gBAAgB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,aAAA,EAAA,cAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAK7B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBARtC,SAAS;+BACE,qBAAqB,EAAA,UAAA,EACnB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,gBAAgB,CAAC,EAAA,eAAA,EAGxB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,whCAAA,EAAA,MAAA,EAAA,CAAA,6vCAAA,CAAA,EAAA;;;AEjBjD;;;;;AAKG;MASU,oBAAoB,CAAA;AARjC,IAAA,WAAA,GAAA;;;AAYE,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAS,EAAE,CAAC;;AAGzB,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAiB,EAAE,CAAC;;QAGhC,IAAO,CAAA,OAAA,GAAG,KAAK,CAAkB;AAC/B,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,iBAAiB,EAAE,+BAA+B;AAClD,YAAA,UAAU,EAAE,SAAS;AACrB,YAAA,UAAU,EAAE;AACb,SAAA,CAAC;;;AAIF,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAsC,UAAU,CAAC;;AAGpE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,eAAe,CAAC;;;AAIrC,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAK;YACnC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;AACpF,SAAC,CAAC;;AAGF,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAK;YACnC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,iBAAiB,IAAI,+BAA+B;AAC5E,SAAC,CAAC;;AAGF,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACxB,YAAA,OAAO,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE;AAC5B,SAAC,CAAC;AACH;8GAvCY,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,ECnBjC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,6nCAuCW,EDzBC,MAAA,EAAA,CAAA,k0EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+BAAE,gBAAgB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,aAAA,EAAA,cAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAK7B,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,gBAAgB,CAAC,EAAA,eAAA,EAGxB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,6nCAAA,EAAA,MAAA,EAAA,CAAA,k0EAAA,CAAA,EAAA;;;AEbjD;AACA,MAAMA,gBAAc,GAAmB;AACrC,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,MAAM,EAAE,GAAG;AACX,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,aAAa,EAAE,YAAY;AAC3B,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,cAAc,EAAE,OAAO;AACvB,IAAA,WAAW,EAAE;CACd;AAED;AACA,MAAM,YAAY,GAAmB;AACnC,IAAA,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE;AAC1E,IAAA,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE;AAC5E,IAAA,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE;AAC1E,IAAA,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,sBAAsB;CACzE;MAUY,oBAAoB,CAAA;AARjC,IAAA,WAAA,GAAA;;AAUE,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAiBA,gBAAc,CAAC;AAC9C,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAiB,YAAY,CAAC;;AAG1C,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAgB,IAAI,CAAC;AACzC,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAc,IAAI,GAAG,EAAE,CAAC;AACtC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC;;QAGxC,IAAY,CAAA,YAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAExD,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,OAAO;YACvB,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,GAAG,CAAC;YAC1B,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC;AAC5B,SAAA,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAChB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAC/E;AAED,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;YACvB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CACpC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CACjD;YACD,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AAEpE,YAAA,IAAI,KAAK,KAAK,CAAC,EAAE;gBACf,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;gBAClC,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC;;YAGnD,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC;AACnD,SAAC,CAAC;AA6FH;IA3FS,iBAAiB,CAAC,IAAoB,EAAE,KAAa,EAAA;QAC3D,IAAI,UAAU,GAAG,CAAC;AAClB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;YACvB,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,GAAG;AAC7C,YAAA,MAAM,KAAK,GAAG,CAAC,UAAU,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;AAC9C,YAAA,MAAM,QAAQ,GAAG,UAAU,GAAG,KAAK;AAEnC,YAAA,MAAM,OAAO,GAAoB;AAC/B,gBAAA,GAAG,IAAI;gBACP,UAAU;gBACV,QAAQ;gBACR,UAAU;gBACV,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC;aAC/C;YAED,UAAU,GAAG,QAAQ;AACrB,YAAA,OAAO,OAAO;AAChB,SAAC,CAAC;;IAGI,aAAa,CAAC,UAAkB,EAAE,QAAgB,EAAA;AACxD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,MAAM,KAAK,GAAG;YACZ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;YAChC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;SACjC;AAED,QAAA,MAAM,GAAG,GAAG;YACV,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC9B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;SAC/B;AAED,QAAA,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG;QAEjE,OAAO,CAAA,QAAA,EAAW,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAA,GAAA,EAAM,MAAM,CAAA,CAAA,EAAI,MAAM,CAAM,GAAA,EAAA,YAAY,CAAM,GAAA,EAAA,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA,EAAA,CAAI;;AAGtG,IAAA,kBAAkB,CAAC,OAAwB,EAAA;AACzC,QAAA,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC;QACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG;QAEpC,OAAO;AACL,YAAA,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,QAAQ;AAC/C,YAAA,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,QAAQ;SAChD;;AAGH,IAAA,cAAc,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;;IAG9B,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;;AAG7B,IAAA,oBAAoB,CAAC,KAAa,EAAA;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;AAC9D,QAAA,OAAO,OAAO,EAAE,UAAU,IAAI,CAAC;;AAGjC,IAAA,aAAa,CAAC,KAAa,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW;YAAE;QAEhC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QACxD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM;AACxC,QAAA,MAAM,eAAe,GAAG,iBAAiB,CAAC,IAAI;AAE9C,QAAA,IAAI,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAChC,YAAA,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC;;aAC1B;AACL,YAAA,IAAI,eAAe,IAAI,aAAa,GAAG,CAAC,EAAE;gBACxC;;AAEF,YAAA,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;;AAG9B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAiB,CAAC;;IAG5C,WAAW,CAAC,KAAa,EAAE,UAAkB,EAAA;AAC3C,QAAA,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa;AACjC,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;AACzB,YAAA,KAAK,YAAY;gBACf,OAAO,CAAA,EAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;AACpC,YAAA,KAAK,MAAM;gBACT,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI;AAC/C,YAAA;gBACE,OAAO,CAAA,EAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;;;8GA5H7B,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,cAAA,EAAA,IAAA,EAAA,YAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/BjC,+qGAkFM,EAAA,MAAA,EAAA,CAAA,8xFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDxDM,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,+qGAAA,EAAA,MAAA,EAAA,CAAA,8xFAAA,CAAA,EAAA;;;AEhBjD;AACA,MAAMA,gBAAc,GAAG;AACrB,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,aAAa,EAAE,KAAK;AACpB,IAAA,IAAI,EAAE,QAAwB;AAC9B,IAAA,aAAa,EAAE;CAChB;MAUY,oBAAoB,CAAA;AARjC,IAAA,WAAA,GAAA;AASU,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGvC,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAACA,gBAAc,CAAC,OAAO,CAAC;AACvC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAACA,gBAAc,CAAC,QAAQ,CAAC;AACzC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAACA,gBAAc,CAAC,QAAQ,CAAC;AACzC,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAACA,gBAAc,CAAC,aAAa,CAAC;AACnD,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAeA,gBAAc,CAAC,IAAI,CAAC;AAC/C,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAmBA,gBAAc,CAAC,aAAa,CAAC;;AAGrE,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC;AACjB,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC;AACjB,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;;QAGnB,IAAa,CAAA,aAAA,GAAG,MAAM,EAAW;;QAGjC,IAAW,CAAA,WAAA,GAAG,QAAQ,CAAC,MACrB,IAAI,CAAC,aAAa,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAChD;QAED,IAAK,CAAA,KAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;AAmCxC;IAjCS,QAAQ,GAAA;QACd,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,UAAU;QACtC,IAAI,IAAI,CAAC,aAAa,EAAE;AAAE,YAAA,OAAO,eAAe;QAChD,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,OAAO;QAChC,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,SAAS;AACpC,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,SAAS,GAAG,WAAW;;IAGvC,UAAU,GAAA;AAClB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;aAC7B,aAAa,CAAC,gBAAgB;AAC/B,cAAE,WAAW,EAAE,IAAI,EAAE;QACvB,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;;IAGpC,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE;AAChC,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC1B,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;;;;IAKrC,OAAO,aAAa,CAAC,SAA+B,EAAA;QAClD,SAAS,CAAC,OAAO,CAAC,GAAG,CAACA,gBAAc,CAAC,OAAO,CAAC;QAC7C,SAAS,CAAC,QAAQ,CAAC,GAAG,CAACA,gBAAc,CAAC,QAAQ,CAAC;QAC/C,SAAS,CAAC,QAAQ,CAAC,GAAG,CAACA,gBAAc,CAAC,QAAQ,CAAC;QAC/C,SAAS,CAAC,aAAa,CAAC,GAAG,CAACA,gBAAc,CAAC,aAAa,CAAC;QACzD,SAAS,CAAC,IAAI,CAAC,GAAG,CAACA,gBAAc,CAAC,IAAI,CAAC;QACvC,SAAS,CAAC,aAAa,CAAC,GAAG,CAACA,gBAAc,CAAC,aAAa,CAAC;;8GAzDhD,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,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,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,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,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,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,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/BjC,0sDAuDM,EAAA,MAAA,EAAA,CAAA,ivEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED7BM,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;+BACE,cAAc,EAAA,UAAA,EACZ,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,0sDAAA,EAAA,MAAA,EAAA,CAAA,ivEAAA,CAAA,EAAA;;;AEzBjD;AACA,MAAM,cAAc,GAAG;AACrB,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,IAAI,EAAE,YAAY;AAClB,IAAA,OAAO,EAAE,SAA4B;AACrC,IAAA,IAAI,EAAE;CACP;MAUY,oBAAoB,CAAA;AARjC,IAAA,WAAA,GAAA;;AAWE,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC;AACzC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC;AACzC,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAkB,cAAc,CAAC,OAAO,CAAC;AACxD,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAe,cAAc,CAAC,IAAI,CAAC;;AAG/C,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,cAAc,CAAC,IAAI,CAAC;AACzC,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC;;QAGlB,IAAc,CAAA,cAAA,GAAG,MAAM,EAAW;QAElC,IAAK,CAAA,KAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;AAsBxC;IApBS,QAAQ,GAAA;QACd,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,UAAU;AACtC,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,UAAU,GAAG,WAAW;;IAGnD,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;AACjC,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC3B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;;;;IAKtC,OAAO,aAAa,CAAC,SAA+B,EAAA;QAClD,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC;QAC/C,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC;QAC/C,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC;QAC7C,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC;;8GAnC9B,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,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,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,IAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrBjC,goCA2CM,EAAA,MAAA,EAAA,CAAA,+wDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3BM,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;+BACE,cAAc,EAAA,UAAA,EACZ,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,goCAAA,EAAA,MAAA,EAAA,CAAA,+wDAAA,CAAA,EAAA;;;MEIpC,oBAAoB,CAAA;IAkCvB,QAAQ,GAAA;QACd,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,UAAU;QACtC,IAAI,IAAI,CAAC,MAAM,EAAE;AAAE,YAAA,OAAO,MAAM;AAChC,QAAA,OAAO,QAAQ;;AAGjB,IAAA,WAAA,GAAA;AAvCQ,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC/B,IAAmB,CAAA,mBAAA,GAAyC,IAAI;;AAGxE,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAA+C,SAAS,CAAC;AACxE,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAoB,cAAc,CAAC;AACpD,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;;AAGvB,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAoB,EAAE,CAAC;AACpC,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,eAAe,CAAC;QAC9B,IAAI,CAAA,IAAA,GAAG,KAAK,EAAU;QACtB,IAAS,CAAA,SAAA,GAAG,KAAK,EAAU;;AAGnB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAyB,IAAI,CAAC;;QAGjE,IAAQ,CAAA,QAAA,GAAG,MAAM,EAAmB;QACpC,IAAM,CAAA,MAAA,GAAG,MAAM,EAAQ;QACvB,IAAM,CAAA,MAAA,GAAG,MAAM,EAAQ;;QAGvB,IAAM,CAAA,MAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5C,IAAY,CAAA,YAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAExD,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAC3B,IAAI,CAAC,SAAS,EAAE,IAAI,sBAAsB,CAC3C;QAED,IAAK,CAAA,KAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QASrC,IAAI,CAAC,yBAAyB,EAAE;;IAG1B,yBAAyB,GAAA;AAC/B,QAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC,KAAiB,KAAI;AAC/C,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,gBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;oBACnD,IAAI,CAAC,KAAK,EAAE;;;AAGlB,SAAC;QACD,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC;;IAG9D,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACpB,KAAK,EAAE,eAAe,EAAE;AACxB,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACjC,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;;iBACb;AACL,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;;;;AAKxB,IAAA,UAAU,CAAC,IAAqB,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;AACjC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YACxB,IAAI,CAAC,KAAK,EAAE;;;IAIhB,KAAK,GAAA;AACH,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;;;IAItB,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC;;;8GArFxD,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvBjC,+uDA0DM,EAAA,MAAA,EAAA,CAAA,uqHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDxCM,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;+BACE,cAAc,EAAA,UAAA,EACZ,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,+uDAAA,EAAA,MAAA,EAAA,CAAA,uqHAAA,CAAA,EAAA;;;MEWpC,iBAAiB,CAAA;AAf9B,IAAA,WAAA,GAAA;AAgBU,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG9B,QAAA,IAAA,CAAA,OAAO,GAAG,CAAS,MAAA,EAAA,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;;AAGzE,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC;AACjB,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;AACvB,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;AACvB,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;AACvB,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC;AACtB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;AACxB,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAe,UAAU,CAAC;AACzC,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAY,QAAQ,CAAC;AACjC,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;;AAGvB,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAY,MAAM,CAAC;AAC/B,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,EAAE,CAAC;AACvB,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AAClB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;QACvC,IAAS,CAAA,SAAA,GAAG,KAAK,EAAU;QAC3B,IAAO,CAAA,OAAA,GAAG,KAAK,EAAU;AACzB,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAA4B,IAAI,CAAC;AAC9C,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAA4B,IAAI,CAAC;AAChD,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAA4B,IAAI,CAAC;AAC7C,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAoD,EAAE,CAAC;QAC1E,IAAkB,CAAA,kBAAA,GAAG,KAAK,CAAqB;AAC7C,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,YAAY,EAAE;AACf,SAAA,CAAC;;AAGM,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC;AAClC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CAAW,EAAE,CAAC;AACxD,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAC3B,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,KAAK,CAAC;;QAG7C,IAAW,CAAA,WAAA,GAAG,MAAM,EAAU;QAC9B,IAAU,CAAA,UAAA,GAAG,MAAM,EAAQ;QAC3B,IAAS,CAAA,SAAA,GAAG,MAAM,EAAQ;QAC1B,IAAgB,CAAA,gBAAA,GAAG,MAAM,EAAU;;QAGnC,IAAe,CAAA,eAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QACpG,IAAmB,CAAA,mBAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACtE,IAAO,CAAA,OAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,IAAe,CAAA,eAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC9D,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,UAAU,EAAE;AAC9B,gBAAA,OAAO,IAAI,CAAC,eAAe,EAAE,GAAG,MAAM,GAAG,UAAU;;AAErD,YAAA,OAAO,IAAI,CAAC,IAAI,EAAE;AACpB,SAAC,CAAC;;AAGF,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AAChC,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;AAC/D,SAAC,CAAC;QAEF,IAAK,CAAA,KAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;;AAa/B,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,CAAM,KAAI,GAAG;AACzB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAK,GAAG;AA8I7B;IA1JS,QAAQ,GAAA;QACd,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,UAAU;QACtC,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,UAAU;QACtC,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,SAAS;QACpC,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,OAAO;QAChC,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,SAAS;QACpC,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,SAAS;AACpC,QAAA,OAAO,SAAS;;AAOlB,IAAA,UAAU,CAAC,KAAU,EAAA;QACnB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;AAGzB,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAGpB,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGrB,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;;;AAI/B,IAAA,WAAW,CAAC,KAAY,EAAA;AACtB,QAAA,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;AACtD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAEpB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACtB,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;;;IAIjC,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;QACtB,IAAI,CAAC,SAAS,EAAE;AAEhB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC,SAAS,EAAE;YACpF,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;;;IAIxC,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACrB,IAAI,CAAC,SAAS,EAAE;QAEhB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;YAClC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACpC,EAAE,GAAG,CAAC;;AAGT,IAAA,aAAa,CAAC,KAAoB,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YAAE;AAE7B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAC9C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,EAAE;AAElD,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,IAClC,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CACvC;gBACD;AAEF,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,IAClC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CACvC;gBACD;AAEF,YAAA,KAAK,OAAO;gBACV,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,YAAY,IAAI,CAAC,IAAI,YAAY,GAAG,WAAW,CAAC,MAAM,EAAE;AAC1D,oBAAA,MAAM,kBAAkB,GAAG,WAAW,CAAC,YAAY,CAAC;oBACpD,IAAI,kBAAkB,EAAE;AACtB,wBAAA,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC;;;gBAGlD;AAEF,YAAA,KAAK,QAAQ;gBACX,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;gBAClC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnC;;;AAIN,IAAA,qBAAqB,CAAC,UAAkB,EAAA;QACtC,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;AAC1B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AACjC,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AACzB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC;AACtC,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;;;IAItC,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;;IAGlC,eAAe,GAAA;AACvB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC;;AAG7D,IAAA,cAAc,CAAC,IAAY,EAAA;AACnC,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAG,CAAC;;IAGnE,WAAW,GAAA;AACT,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC;QAClE,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,KAAK,EAAE;;;IAIT,MAAM,iBAAiB,CAAC,KAAa,EAAA;AAC3C,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE;AAE3C,QAAA,IAAI,OAAO,gBAAgB,KAAK,UAAU,EAAE;AAC1C,YAAA,IAAI;AACF,gBAAA,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC;AAC7C,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC1B,oBAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,OAAO,CAAC;AAC3C,oBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;;;YAEnC,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC;AACnD,gBAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,EAAE,CAAC;;;AAEnC,aAAA,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;YAC1C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAU,IACjD,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CACvD;AACD,YAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC5C,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;;;8GAzN1B,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EATjB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,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,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,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,IAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAChD,gBAAA,KAAK,EAAE;AACR;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7BH,k6HAwHM,EAAA,MAAA,EAAA,CAAA,+pIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDpGM,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,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,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,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,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAYxB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAf7B,SAAS;+BACE,WAAW,EAAA,UAAA,EACT,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,WAAW,CAAC,EAGzB,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,uBAAuB,CAAC;AAChD,4BAAA,KAAK,EAAE;AACR;qBACF,EACgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,k6HAAA,EAAA,MAAA,EAAA,CAAA,+pIAAA,CAAA,EAAA;;;MElBpC,gBAAgB,CAAA;AAP7B,IAAA,WAAA,GAAA;;AAUE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAW,UAAU,CAAC;AAClC,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAc,SAAS,CAAC;AACvC,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;QACxB,IAAU,CAAA,UAAA,GAAG,KAAK,CAAyB;AACzC,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,MAAM,EAAE,aAAa;AACrB,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;;QAGF,IAAK,CAAA,KAAA,GAAG,KAAK,CAAgB;YAC3B,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAiB;AAC7D,YAAA;AACE,gBAAA,EAAE,EAAE,UAAU;AACd,gBAAA,OAAO,EAAE,UAAU;AACnB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,QAAQ,EAAE;AACR,oBAAA,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAiB;AACpD,oBAAA,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU;AACtC;AACa,aAAA;YAChB,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAiB;YACpE,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU;AAChD,SAAA,CAAC;;QAGF,IAAS,CAAA,SAAA,GAAG,MAAM,EAAe;QACjC,IAAe,CAAA,eAAA,GAAG,MAAM,EAAW;;AAGnC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,IAAI,GAAG,EAAU,CAAC;;AAGzC,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAClD,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,YAAY,CAAC;AAC3D,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QAEtE,IAAK,CAAA,KAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;AAgDxC;IA9CS,QAAQ,GAAA;QACd,IAAI,IAAI,CAAC,SAAS,EAAE;AAAE,YAAA,OAAO,WAAW;QACxC,IAAI,IAAI,CAAC,WAAW,EAAE;AAAE,YAAA,OAAO,aAAa;AAC5C,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE;;AAGpB,IAAA,UAAU,CAAC,IAAiB,EAAA;QAC1B,IAAI,IAAI,CAAC,QAAQ;YAAE;AAEnB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;YACzB,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACjD,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AAC5B,gBAAA,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;;AACtB,iBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AAC5B,gBAAA,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;;AAE1B,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC;;AAErC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;AAG3B,IAAA,UAAU,CAAC,IAAiB,EAAA;AAC1B,QAAA,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;;IAG/D,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;;AAEtB,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;gBACrB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;;AAEnC,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;;;AAI/C,IAAA,YAAY,CAAC,IAAiB,EAAA;AAC5B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;AACzB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,IAAI,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,CAAA,CAAA,CAAG;;AAErD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;YACzB,OAAO,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,IAAI,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAA,CAAA,CAAG;;AAEpD,QAAA,OAAO,IAAI;;8GAxFF,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhB,gBAAgB,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,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,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,IAAA,EAAA,YAAA,EAAA,OAAA,EAAA,eAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZ7B,gsHAoGM,EAAA,MAAA,EAAA,CAAA,s+GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED5FM,YAAY,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAIX,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EACR,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,gsHAAA,EAAA,MAAA,EAAA,CAAA,s+GAAA,CAAA,EAAA;;;AEazB;;AAEG;MACU,YAAY,GAAG,IAAI,cAAc,CAAuB,cAAc,EAAE;AACnF,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,eAAe,EAAE,IAAI;AACrB,QAAA,aAAa,EAAE,IAAI;AACnB,QAAA,aAAa,EAAE,IAAI;AACnB,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,YAAY,EAAE,OAAO;AACrB,QAAA,YAAY,EAAE,SAAS;AACvB,QAAA,WAAW,EAAE;KACd;AACF,CAAA;AAED;;AAEG;MAIU,YAAY,CAAA;AAHzB,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;AAC7B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAc,IAAI,GAAG,EAAE,CAAC;AAiDtD;AA/CC;;AAEG;IACH,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;;AAGpB;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,OAAO,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;;AAG/D;;AAEG;AACH,IAAA,QAAQ,CAAC,EAAU,EAAA;AACjB,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,IAAG;AAChC,YAAA,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACd,YAAA,OAAO,MAAM;AACf,SAAC,CAAC;;AAGJ;;AAEG;AACH,IAAA,UAAU,CAAC,EAAU,EAAA;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,IAAG;AAChC,YAAA,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AACjB,YAAA,OAAO,MAAM;AACf,SAAC,CAAC;;AAGJ;;AAEG;AACH,IAAA,YAAY,CAAC,EAAU,EAAA;QACrB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;;AAGpC;;AAEG;IACH,oBAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI;;8GAjDtB,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA;;2FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;MA8DY,iBAAiB,CAAA;IAoCpB,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,OAAO,QAAQ;AACjC,QAAA,OAAO,MAAM;;AAKf,IAAA,WAAA,GAAA;AA1CQ,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;AAC7B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;;AAGhD,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;QACnB,IAAI,CAAA,IAAA,GAAG,KAAK,CAAY,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC;QACrD,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC;QAChD,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC;QAC5D,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC;QACxD,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC;QACxD,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC;;AAGlD,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC;QAC5B,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,OAAO,CAAC;QACzD,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,SAAS,CAAC;QAC3D,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC;;QAGxD,IAAM,CAAA,MAAA,GAAG,MAAM,EAAQ;QACvB,IAAS,CAAA,SAAA,GAAG,MAAM,EAAQ;QAElB,IAAoB,CAAA,oBAAA,GAAG,KAAK;AAC5B,QAAA,IAAA,CAAA,aAAa,GAAG,CAAC,KAAoB,KAAI;AAC/C,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;gBACjE,IAAI,CAAC,WAAW,EAAE;;AAEtB,SAAC;;QAGD,IAAe,CAAA,eAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC;QAE3D,IAAK,CAAA,KAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;;QAWrC,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;gBACf,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;gBACxC,IAAI,CAAC,eAAe,EAAE;gBACtB,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC;;iBACnD;gBACL,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC1C,IAAI,CAAC,gBAAgB,EAAE;gBACvB,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC;;AAE/D,SAAC,CAAC;;IAIJ,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;;IAGpB,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;;AAGvB,IAAA,mBAAmB,CAAC,KAAiB,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa,EAAE;YAClE,IAAI,CAAC,WAAW,EAAE;;;IAId,eAAe,GAAA;QACrB,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;;AAEzD,YAAA,IACE,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,EACrE;gBACA,MAAM,cAAc,GAClB,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC,eAAe,CAAC,WAAW;AAC1D,gBAAA,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CACxC,mBAAmB,EACnB,CAAA,EAAG,cAAc,CAAA,EAAA,CAAI,CACtB;;YAEH,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;;;IAIrC,gBAAgB,GAAA;QACtB,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YACzD,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC;;;IAIhD,WAAW,GAAA;QACT,IAAI,CAAC,gBAAgB,EAAE;QACvB,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC;QAC3D,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;;8GApGjC,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,ECzG9B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,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,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,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,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,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,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,YAAA,EAAA,IAAA,EAAA,YAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,u2DA4DM,EDwCM,MAAA,EAAA,CAAA,woGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+BAAE,kBAAkB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,cAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,cAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAK/B,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAR7B,SAAS;+BACE,WAAW,EAAA,UAAA,EACT,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAAA,eAAA,EAG1B,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,u2DAAA,EAAA,MAAA,EAAA,CAAA,woGAAA,CAAA,EAAA;wDA2CD,YAAY,EAAA,CAAA;sBAAzD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;MErIjC,iBAAiB,GAAG,IAAI,cAAc,CAA4B,mBAAmB,EAAE;AAClG,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,aAAa,EAAE,IAAI;AACnB,QAAA,YAAY,EAAE,IAAI;AAClB,QAAA,eAAe,EAAE,CAAC;AAClB,QAAA,gBAAgB,EAAE,KAAK;QACvB,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;KACpC;AACF,CAAA;MAEY,iBAAiB,GAAG,IAAI,cAAc,CAA2B,mBAAmB,EAAE;AACjG,IAAA,OAAO,EAAE,MAAM;AAChB,CAAA;MAUY,sBAAsB,CAAA;AARnC,IAAA,WAAA,GAAA;AASU,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAClC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;;AAGpE,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC;AACtB,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC;QACrB,IAAI,CAAA,IAAA,GAAG,KAAK,CAAiB,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC;QAC1D,IAAO,CAAA,OAAA,GAAG,KAAK,CAAoB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC;QACpE,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC;QACxD,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC;QACtD,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC;QACzD,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,KAAK,CAAC;;AAG/D,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,EAAE,CAAC;AACxB,QAAA,IAAA,CAAA,mBAAmB,GAAG,KAAK,CAAW,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AACtD,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC;AAC3B,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC;AACjC,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;AACzB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;AACzB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;AACzB,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC;AAC3B,QAAA,IAAA,CAAA,iBAAiB,GAAG,KAAK,CAAC,gBAAgB,CAAC;;QAG3C,IAAU,CAAA,UAAA,GAAG,MAAM,EAAU;QAC7B,IAAkB,CAAA,kBAAA,GAAG,MAAM,EAAU;;AAGrC,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;YACpB,MAAM,KAAK,GAAa,EAAE;AAC1B,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;AAC1D,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,WAAW,CAAC;YACzD,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;YAEzE,IAAI,GAAG,GAAG,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE;AAC5C,gBAAA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;;AAGvD,YAAA,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE;AACjC,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;;AAGf,YAAA,OAAO,KAAK;AACd,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhE,IAAK,CAAA,KAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;AAmBxC;IAjBS,QAAQ,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC;AAAE,YAAA,OAAO,OAAO;QAC5C,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,UAAU,EAAE;AAAE,YAAA,OAAO,MAAM;AAC3D,QAAA,OAAO,SAAS;;AAGlB,IAAA,QAAQ,CAAC,IAAY,EAAA;AACnB,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACzE,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAI9B,IAAA,oBAAoB,CAAC,KAAY,EAAA;QAC/B,MAAM,KAAK,GAAG,QAAQ,CAAE,KAAK,CAAC,MAA4B,CAAC,KAAK,CAAC;AACjE,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;;8GAlE1B,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,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,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,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,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,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,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,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,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,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,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,OAAA,EAAA,eAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,gBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrCnC,0jFAoFM,EAAA,MAAA,EAAA,CAAA,owFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDpDM,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBARlC,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,0jFAAA,EAAA,MAAA,EAAA,CAAA,owFAAA,CAAA,EAAA;;;ME9BpC,kBAAkB,GAAG,IAAI,cAAc,CAA6B,oBAAoB,EAAE;AACrG,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,GAAG,EAAE,GAAG;AACR,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,aAAa,EAAE,KAAK;AACpB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE;KACX;AACF,CAAA;MAUY,uBAAuB,CAAA;AARpC,IAAA,WAAA,GAAA;AASU,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC;;QAG3C,IAAK,CAAA,KAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;QACrC,IAAG,CAAA,GAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC;QACnC,IAAO,CAAA,OAAA,GAAG,KAAK,CAAqB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC;QACrE,IAAI,CAAA,IAAA,GAAG,KAAK,CAAkB,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC;QAC3D,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC;QAChD,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,KAAK,CAAC;QACzD,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;QAC7C,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC;;AAG/C,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC;;AAG3B,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;YACzB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC;AACtE,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAK;AACpC,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACxB,gBAAA,OAAO,IAAI,CAAC,KAAK,EAAE;;AAErB,YAAA,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG;AAChC,SAAC,CAAC;QAEF,IAAK,CAAA,KAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;AAQxC;IANS,QAAQ,GAAA;QACd,IAAI,IAAI,CAAC,aAAa,EAAE;AAAE,YAAA,OAAO,eAAe;QAChD,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,UAAU;QACtC,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,SAAS;AACpC,QAAA,OAAO,SAAS;;8GAlCP,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAvB,uBAAuB,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,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,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,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,GAAA,EAAA,WAAA,EAAA,OAAA,EAAA,eAAA,EAAA,IAAA,EAAA,YAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1BpC,41BA0BM,EAAA,MAAA,EAAA,CAAA,6iDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDLM,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBARnC,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,41BAAA,EAAA,MAAA,EAAA,CAAA,6iDAAA,CAAA,EAAA;;;MEVpC,YAAY,GAAG,IAAI,cAAc,CAAuB,cAAc,EAAE;AACnF,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,aAAa,EAAE;KAChB;AACF,CAAA;MAEY,YAAY,GAAG,IAAI,cAAc,CAA2B,cAAc,EAAE;AACvF,IAAA,OAAO,EAAE,MAAM;AAChB,CAAA;MAUY,iBAAiB,CAAA;AAR9B,IAAA,WAAA,GAAA;AASU,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;AAC7B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;;QAG/D,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;QAC7C,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC;QAC/C,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC;QAC/C,IAAI,CAAA,IAAA,GAAG,KAAK,CAAY,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC;QACrD,IAAa,CAAA,aAAA,GAAG,KAAK,CAAmB,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,OAAO,CAAC;;AAG7E,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC;AACjB,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC;AACjB,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;AACnB,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;QAChB,IAAK,CAAA,KAAA,GAAG,KAAK,EAAO;;QAGpB,IAAW,CAAA,WAAA,GAAG,MAAM,EAAO;;AAG3B,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhE,IAAK,CAAA,KAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;AA6BxC;IA3BS,QAAQ,GAAA;QACd,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,UAAU;QACtC,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,OAAO;QAChC,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,SAAS;AACpC,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,SAAS,GAAG,WAAW;;IAGvC,UAAU,GAAA;AAClB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;aAC7B,aAAa,CAAC,aAAa;AAC5B,cAAE,WAAW,EAAE,IAAI,EAAE;QACvB,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;;IAGpC,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;;;AAIvC;;AAEG;IACH,iBAAiB,CAAC,IAAyB,EAAE,EAAU,EAAA;AACrD,QAAA,OAAO,CAAG,EAAA,IAAI,CAAY,SAAA,EAAA,EAAE,EAAE;;8GApDrB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,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,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,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,OAAA,EAAA,eAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpC9B,mhDAmDM,EAAA,MAAA,EAAA,CAAA,shEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDpBM,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAR7B,SAAS;+BACE,WAAW,EAAA,UAAA,EACT,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,mhDAAA,EAAA,MAAA,EAAA,CAAA,shEAAA,CAAA,EAAA;;;MEDpC,kBAAkB,CAAA;IAuErB,QAAQ,GAAA;QACd,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,UAAU;QACtC,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,SAAS;QACpC,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,OAAO;QAChC,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,SAAS;QACpC,IAAI,IAAI,CAAC,MAAM,EAAE;AAAE,YAAA,OAAO,MAAM;AAChC,QAAA,OAAO,QAAQ;;AA+BjB,IAAA,WAAA,GAAA;AA3GQ,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAC/B,IAAmB,CAAA,mBAAA,GAAyC,IAAI;;AAG/D,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAU,OAAA,EAAA,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;;AAG3E,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAiB,IAAI,CAAC;AACnC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;AACvB,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAe,EAAE,CAAC;AAClC,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAa,QAAQ,CAAC;AAClC,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;AACzB,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;AACvB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;AACxB,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC;AACtB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;AACxB,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;;AAGxB,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAA6C,EAAE,CAAC;AAC/D,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AAClB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;AACvC,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAS,yBAAyB,CAAC;AACtD,QAAA,IAAA,CAAA,mBAAmB,GAAG,KAAK,CAAS,0BAA0B,CAAC;AAC/D,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC;AACjB,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;AACnB,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;AAChB,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAqB,SAAS,CAAC;AACpD,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAqB,SAAS,CAAC;AACpD,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAA0B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/D,IAAY,CAAA,YAAA,GAAG,KAAK,CAAe;AACjC,YAAA,YAAY,EAAE,GAAG;AACjB,YAAA,WAAW,EAAE,eAAe;AAC5B,YAAA,SAAS,EAAE;AACZ,SAAA,CAAC;QACF,IAAmB,CAAA,mBAAA,GAAG,KAAK,CAAsB;AAC/C,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,MAAM,EAAE;AACT,SAAA,CAAC;;AAGM,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,EAAE,CAAC;AAC7B,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,EAAE,CAAC;AAChC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,KAAK,CAAC;AACrC,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC;;QAGzC,IAAW,CAAA,WAAA,GAAG,MAAM,EAAkB;QACtC,IAAM,CAAA,MAAA,GAAG,MAAM,EAAQ;QACvB,IAAM,CAAA,MAAA,GAAG,MAAM,EAAQ;QACvB,IAAS,CAAA,SAAA,GAAG,MAAM,EAAQ;QAC1B,IAAW,CAAA,WAAA,GAAG,MAAM,EAAU;QAC9B,IAAQ,CAAA,QAAA,GAAG,MAAM,EAAU;;QAG3B,IAAM,CAAA,MAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5C,IAAU,CAAA,UAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpD,IAAe,CAAA,eAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;;AAG9D,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AAChC,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;AAC/D,SAAC,CAAC;QAEF,IAAK,CAAA,KAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;AAWvC,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACjD,gBAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;;YAE1E,OAAO,IAAI,CAAC,mBAAmB,EAAE,KAAK,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAC1G,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,EAAE;AAClD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAE3B,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,IAAI;AAEtB,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,IAAG;AACpB,gBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;oBAC3B,MAAM,eAAe,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAC1C,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;wBACpC,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC5C;oBACD,OAAO,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI;;gBAEjF,OAAO,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACtC,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI;AACjD,sBAAE;sBACA,IAAI;AACV,aAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,KAAsD,GAAG,KAAK,IAAI,CAAC;AACnF,SAAC,CAAC;;AA0HM,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,CAAM,KAAI,GAAG;AACzB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAK,GAAG;QAxH1B,IAAI,CAAC,yBAAyB,EAAE;;IAGlC,kBAAkB,GAAA;AAChB,QAAA,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;AAC1B,YAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAC;AAChF,YAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC;AACxC,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;AAChC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,SAAC,CAAC;;IAGI,yBAAyB,GAAA;AAC/B,QAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC,KAAiB,KAAI;AAC/C,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,gBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;oBACnD,IAAI,CAAC,KAAK,EAAE;;;AAGlB,SAAC;QACD,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC;;;AAI9D,IAAA,aAAa,CAAC,KAAoB,EAAA;QAChC,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AAErB,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;gBACN,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;oBAClB,IAAI,CAAC,MAAM,EAAE;;AACR,qBAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,EAAE;oBACzC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;oBAC3D,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;AACjD,oBAAA,IAAI,MAAM;AAAE,wBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;;gBAEjC;AAEF,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;oBAClB,IAAI,CAAC,MAAM,EAAE;;qBACR;oBACL,IAAI,CAAC,eAAe,EAAE;;gBAExB;AAEF,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;oBACjB,IAAI,CAAC,mBAAmB,EAAE;;gBAE5B;AAEF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;oBACjB,KAAK,CAAC,cAAc,EAAE;oBACtB,IAAI,CAAC,KAAK,EAAE;;gBAEd;AAEF,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;oBACjB,IAAI,CAAC,KAAK,EAAE;;gBAEd;;;IAIN,mBAAmB,CAAC,KAAoB,EAAE,MAAuB,EAAA;AAC/D,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;gBACN,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;gBACnB;AAEF,YAAA,KAAK,QAAQ;gBACX,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,KAAK,EAAE;gBACZ;;;IAIE,eAAe,GAAA;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AAC3D,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE;AAE1B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE;AAC9C,QAAA,MAAM,SAAS,GAAG,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,CAAC;AAC1E,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;AACtC,QAAA,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC;;IAG9B,mBAAmB,GAAA;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AAC3D,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE;AAE1B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE;AAC9C,QAAA,MAAM,aAAa,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;AAC9E,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC;AAC1C,QAAA,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC;;AAGlC,IAAA,oBAAoB,CAAC,KAAa,EAAA;QACxC,qBAAqB,CAAC,MAAK;AACzB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CACxD,4BAA4B,KAAK,GAAG,CAAC,CAAA,CAAA,CAAG,CACzC;YACD,IAAI,MAAM,EAAE;gBACV,MAAM,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;;AAE/C,SAAC,CAAC;;AAOJ,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QACrB,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;AAGzB,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAGpB,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGrB,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;;;AAI/B,IAAA,aAAa,CAAC,MAA8C,EAAA;QAC1D,OAAO,SAAS,IAAI,MAAM;;;AAI5B,IAAA,YAAY,CAAC,MAA8C,EAAA;QACzD,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAA,MAAA,EAAS,MAAM,CAAC,KAAK,CAAE,CAAA,GAAG,CAAU,OAAA,EAAA,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,CAAE;;;IAIhG,QAAQ,GAAA;AACN,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;AACjC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;;AAE/D,QAAA,OAAO,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS;;;IAI5D,WAAW,GAAA;AACT,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,iBAAiB,CAAC;QAC9E,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,KAAK,EAAE;;;;AAKnB,IAAA,MAAM,CAAC,MAAuB,EAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACxC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;AACjC,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE;gBACnE,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAExE,gBAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,oBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;oBAC1C,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,MAAM,GAAG,aAAa,EAAE;AACnD,wBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;;;qBAEtB;AACL,oBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;oBAC1C,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,MAAM,GAAG,aAAa,EAAE;AACnD,wBAAA,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;;;AAI3B,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;AACtB,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;;iBAChB;gBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;AAC5B,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC3B,IAAI,CAAC,KAAK,EAAE;;YAGd,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,SAAS,EAAE;;;AAIpB,IAAA,UAAU,CAAC,MAAuB,EAAA;AAChC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;AACjC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;YAClD,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;;AAEpE,QAAA,OAAO,YAAY,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,YAAiB,EAAE,MAAM,CAAC,KAAK,CAAC;;;IAIrF,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACpB,KAAK,EAAE,eAAe,EAAE;AACxB,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACjC,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;;iBACb;AACL,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;;;;IAKxB,KAAK,GAAA;AACH,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;YAC5B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/B,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;;;AAItB,IAAA,KAAK,CAAC,KAAY,EAAA;QAChB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI;AAC5C,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC/B,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,SAAS,EAAE;;;AAIpB,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,IAAI,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;AACrD,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,IAAI,CAAC,CAAC,EAAE;AACvD,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAI5B,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAAqB;AAC3C,QAAA,IACE,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,YAAY,EACjE;AACA,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;;;IAIjB,mBAAmB,GAAA;AACzB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;QACjC,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AAE1D,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AAClD,YAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,IACxC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CACzD;AACD,YAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,gBAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;AAC7C,gBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;iBAC1C;AACL,gBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;;;aAE7B;YACL,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,IACtC,YAAY,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,YAAiB,CAAC,CAC1E;YACD,IAAI,QAAQ,EAAE;gBACZ,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;;iBACvC;AACL,gBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;;;AAGpC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;AAGjB,IAAA,cAAc,CAAC,OAAmD,EAAA;QACxE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAI;AACjC,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;gBAC3B,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;;AAEjC,YAAA,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC;SACrB,EAAE,EAAuB,CAAC;;IAG7B,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC;;;8GAxZxD,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EATlB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,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,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,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,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,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,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,kBAAkB;AAC/B,gBAAA,KAAK,EAAE;AACR;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9BH,67MAqLM,EAAA,MAAA,EAAA,CAAA,yyJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDhKM,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAYxB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAf9B,SAAS;+BACE,YAAY,EAAA,UAAA,EACV,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,WAAW,CAAC,EAGzB,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAoB,kBAAA;AAC/B,4BAAA,KAAK,EAAE;AACR;qBACF,EACgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,67MAAA,EAAA,MAAA,EAAA,CAAA,yyJAAA,CAAA,EAAA;;;MEdpC,cAAc,GAAG,IAAI,cAAc,CAAyB,gBAAgB,EAAE;AACzF,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,UAAU,EAAE;KACb;AACF,CAAA;MAUY,mBAAmB,CAAA;IA+BtB,QAAQ,GAAA;QACd,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,QAAQ;QACpC,IAAI,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,OAAO,MAAM;AAC9B,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE;;AAGpB,IAAA,WAAA,GAAA;AApCQ,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,IAAwB,CAAA,wBAAA,GAAuB,IAAI;;AAG3D,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;QACnB,IAAI,CAAA,IAAA,GAAG,KAAK,CAAc,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC;QACtD,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAkB,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC;;QAGjE,IAAK,CAAA,KAAA,GAAG,KAAK,CAAS,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC;QACnD,IAAU,CAAA,UAAA,GAAG,KAAK,CAAS,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC;;QAG7D,IAAM,CAAA,MAAA,GAAG,MAAM,EAAW;;AAGlB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC;;QAGzC,IAAQ,CAAA,QAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9C,IAAa,CAAA,aAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACxD,IAAa,CAAA,aAAA,GAAG,QAAQ,CAAC,MACvB,IAAI,CAAC,QAAQ,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAC1C;QAED,IAAK,CAAA,KAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;;QAUrC,MAAM,CAAC,MAAK;YACV,IAAI,IAAI,CAAC,WAAW,EAAE;gBAAE;AAExB,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAe,YAAA,EAAA,IAAI,CAAC,UAAU,EAAE,CAAA,CAAA,CAAG,CAAC;AACzE,YAAA,MAAM,YAAY,GAAG,CAAC,CAAuC,KAAI;gBAC/D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;AAChC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,SAAS,CAAC;AACpE,aAAC;;YAGD,YAAY,CAAC,UAAU,CAAC;;YAGxB,MAAM,QAAQ,GAAG,CAAC,CAAsB,KAAK,YAAY,CAAC,CAAC,CAAC;AAC5D,YAAA,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC;YAE/C,OAAO,MAAM,UAAU,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACjE,SAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;YACV,IAAI,IAAI,CAAC,WAAW,EAAE;gBAAE;AAExB,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;AACf,gBAAA,MAAM,aAAa,GAAG,CAAC,KAAoB,KAAI;oBAC7C,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;wBAClD,IAAI,CAAC,YAAY,EAAE;;AAErB,oBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;AACvB,wBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;;AAEzB,iBAAC;AAED,gBAAA,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC;gBACnD,OAAO,MAAM,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC;;YAErE;AACF,SAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;YACV,IAAI,IAAI,CAAC,WAAW,EAAE;gBAAE;YAExB,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACvC,gBAAA,MAAM,kBAAkB,GAAG,CAAC,KAAiB,KAAI;AAC/C,oBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;wBACzD,IAAI,CAAC,YAAY,EAAE;;AAEvB,iBAAC;AAED,gBAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,CAAC;gBACtD,OAAO,MAAM,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,CAAC;;YAExE;AACF,SAAC,CAAC;;IAGJ,aAAa,GAAA;QACX,IAAI,IAAI,CAAC,WAAW,EAAE;YAAE;AAExB,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QAE1B,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC,aAA4B;YACrE,qBAAqB,CAAC,MAAK;AACzB,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAChE,0EAA0E,CAC5D;gBAChB,IAAI,cAAc,EAAE;oBAClB,cAAc,CAAC,KAAK,EAAE;;AAE1B,aAAC,CAAC;;aACG;AACL,YAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE;AACjC,gBAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE;;;;IAK3C,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,WAAW,EAAE;YAAE;AAExB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;AACf,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACpB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACvB,YAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE;AACjC,gBAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE;;;;AAKnC,IAAA,SAAS,CAAC,KAAoB,EAAA;AACpC,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CACtE,0EAA0E,CAC3E;AACD,QAAA,MAAM,cAAc,GAAG,iBAAiB,CAAC,CAAC,CAAgB;QAC1D,MAAM,aAAa,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAgB;AAEpF,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,QAAQ,CAAC,aAAa,KAAK,cAAc,EAAE;gBAC7C,KAAK,CAAC,cAAc,EAAE;gBACtB,aAAa,CAAC,KAAK,EAAE;;;aAElB;AACL,YAAA,IAAI,QAAQ,CAAC,aAAa,KAAK,aAAa,EAAE;gBAC5C,KAAK,CAAC,cAAc,EAAE;gBACtB,cAAc,CAAC,KAAK,EAAE;;;;IAK5B,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;;8GAzJjB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,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,IAAA,EAAA,YAAA,EAAA,IAAA,EAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClChC,4/CAmDC,EAAA,MAAA,EAAA,CAAA,mzEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtBW,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAR/B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,4/CAAA,EAAA,MAAA,EAAA,CAAA,mzEAAA,CAAA,EAAA;;;ME5BpC,iBAAiB,GAAG,IAAI,cAAc,CAA4B,mBAAmB,EAAE;AAClG,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,OAAO,EAAE,QAAQ;AACjB,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,KAAK,EAAE;KACR;AACF,CAAA;MAEY,iBAAiB,GAAG,IAAI,cAAc,CAA2B,mBAAmB,EAAE;AACjG,IAAA,OAAO,EAAE,MAAM;AAChB,CAAA;MAUY,sBAAsB,CAAA;AARnC,IAAA,WAAA,GAAA;AASU,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAClC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;;QAGpE,IAAO,CAAA,OAAA,GAAG,KAAK,CAAoB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC;QACnE,IAAI,CAAA,IAAA,GAAG,KAAK,CAAiB,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC;QAC1D,IAAK,CAAA,KAAA,GAAG,KAAK,CAAkB,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC;;AAG9D,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;;AAGhE,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC;AACjD,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC;AACjD,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC;AACtD,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK,MAAM,CAAC;AAClD,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC;QAEpD,IAAK,CAAA,KAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;AACvC;8GApBY,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,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,OAAA,EAAA,eAAA,EAAA,IAAA,EAAA,YAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxBnC,8wBA6BM,EAAA,MAAA,EAAA,CAAA,iwFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDVM,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBARlC,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,8wBAAA,EAAA,MAAA,EAAA,CAAA,iwFAAA,CAAA,EAAA;;;AEJjD;;AAEG;MACU,cAAc,GAAG,IAAI,cAAc,CAAyB,gBAAgB,EAAE;AACzF,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,WAAW,EAAE,YAAY;AACzB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,UAAU,EAAE;AACV,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,SAAS,EAAE,iBAAiB;AAC5B,YAAA,MAAM,EAAE,cAAc;AACtB,YAAA,UAAU,EAAE,kBAAkB;AAC9B,YAAA,QAAQ,EAAE;AACX;KACF;AACF,CAAA;AAED;;AAEG;MACU,cAAc,GAAG,IAAI,cAAc,CAA2B,gBAAgB,EAAE;AAC3F,IAAA,OAAO,EAAE,MAAM;AAChB,CAAA;MAUY,mBAAmB,CAAA;AARhC,IAAA,WAAA,GAAA;AASU,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;AAC/B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AACzD,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAC/B,IAAQ,CAAA,QAAA,GAA4B,IAAI;AACtC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGjC,QAAA,IAAA,CAAA,YAAY,GAAiB;AACnC,YAAA,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;AAC1F,YAAA,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;AAC1F,YAAA,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK;SAC1F;;AAGD,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC;QACrB,IAAW,CAAA,WAAA,GAAG,KAAK,CAAqB,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,YAAY,CAAC;QAChF,IAAO,CAAA,OAAA,GAAG,KAAK,CAAiB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC;QACjE,IAAM,CAAA,MAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC;;QAG1C,IAAU,CAAA,UAAA,GAAG,KAAK,CAAyB;AACzC,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,SAAS,EAAE,iBAAiB;AAC5B,YAAA,MAAM,EAAE,cAAc;AACtB,YAAA,UAAU,EAAE,kBAAkB;AAC9B,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;;QAGF,IAAU,CAAA,UAAA,GAAG,MAAM,EAAU;QAC7B,IAAS,CAAA,SAAA,GAAG,MAAM,EAAQ;;AAGlB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAe,IAAI,CAAC,YAAY,CAAC;QAC7D,IAAK,CAAA,KAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;;AAG1C,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAuGjE;IArGC,kBAAkB,GAAA;;AAEhB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,MAAK;AACxC,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,eAAe,CAA4B,CAAC;;AAGpH,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM;AACzC,oBAAA,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAS,MAAA,EAAA,CAAC,GAAG,CAAC,CAAE,CAAA;oBACxD,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,SAAS;oBACvD,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,SAAS;AAC/C,oBAAA,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC;AAC1C,oBAAA,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC;oBAC5C,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,SAAS;oBACjD,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,SAAS;oBACrD,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI;iBAC7C,CAAC,CAAC,CAAC;;AAGN,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,SAAC,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;AACnD,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,eAAe,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc;AAC9I,SAAA,CAAC;;AAGF,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;;IAG7B,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;AAC1B,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;;;;IAKxB,IAAI,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;;;IAIxC,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;YACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;;;AAIxC,IAAA,QAAQ,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,UAAU,EAAE,EAAE;AAC9D,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;;;IAK3B,SAAS,GAAA;QACP,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC;AACvC,QAAA,OAAO,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;;IAG3E,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC;;AAG9B,IAAA,eAAe,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAAE,YAAA,OAAO,IAAI;QAC/B,IAAI,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;QAE5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC;QAChC,IAAI,IAAI,EAAE,QAAQ;AAAE,YAAA,OAAO,KAAK;QAEhC,OAAO,IAAI,CAAC,KAAK;AACd,aAAA,KAAK,CAAC,CAAC,EAAE,KAAK;AACd,aAAA,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGjD,IAAA,WAAW,CAAC,KAAa,EAAA;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC;AAChC,QAAA,OAAO,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK;;IAGvD,gBAAgB,CAAC,IAAgB,EAAE,KAAa,EAAA;AAC9C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;AAChC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC;AACrC,YAAA,KAAK,KAAK,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC;gBAC9C,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC;oBAClC,MAAM,CAAC,YAAY,CAAC;AAClC,QAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,KAAK,CAAM,GAAA,EAAA,MAAM,EAAE;;;AAIpE,IAAA,YAAY,CAAC,KAAa,EAAA;AACxB,QAAA,OAAO,KAAK;;8GA3IH,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,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,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,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,UAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,MAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnDhC,qsGAwFM,EAAA,MAAA,EAAA,CAAA,g8JAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED1CM,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAR/B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,qsGAAA,EAAA,MAAA,EAAA,CAAA,g8JAAA,CAAA,EAAA;;;AEnCjD;;AAEG;MACU,aAAa,GAAG,IAAI,cAAc,CAAwB,eAAe,EAAE;AACtF,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,aAAa,EAAE;KAChB;AACF,CAAA;AAED;;AAEG;MACU,aAAa,GAAG,IAAI,cAAc,CAA2B,eAAe,EAAE;AACzF,IAAA,OAAO,EAAE,MAAM;AAChB,CAAA;MAUY,kBAAkB,CAAA;AAR/B,IAAA,WAAA,GAAA;AASU,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;AAC9B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;;QAGhE,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;QAC7C,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC;QAC/C,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC;QAC/C,IAAI,CAAA,IAAA,GAAG,KAAK,CAAa,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC;QACtD,IAAa,CAAA,aAAA,GAAG,KAAK,CAAmB,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,OAAO,CAAC;;AAG7E,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC;AACjB,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC;AACjB,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;;QAGnB,IAAa,CAAA,aAAA,GAAG,MAAM,EAAW;;AAGjC,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAsBjE;IApBW,UAAU,GAAA;AAClB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;aAC7B,aAAa,CAAC,cAAc;AAC7B,cAAE,WAAW,EAAE,IAAI,EAAE;QACvB,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;;IAGpC,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;;;AAI3C;;AAEG;IACH,iBAAiB,CAAC,IAAyB,EAAE,EAAU,EAAA;AACrD,QAAA,OAAO,CAAG,EAAA,IAAI,CAAY,SAAA,EAAA,EAAE,EAAE;;8GAzCrB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,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,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,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,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,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1C/B,g2CA4CM,EAAA,MAAA,EAAA,CAAA,ywDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDPM,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAR9B,SAAS;+BACE,YAAY,EAAA,UAAA,EACV,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,g2CAAA,EAAA,MAAA,EAAA,CAAA,ywDAAA,CAAA,EAAA;;;AE1BjD;;AAEG;MACU,cAAc,GAAG,IAAI,cAAc,CAAwB,gBAAgB,EAAE;AACxF,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,QAAQ,EAAE;KACX;AACF,CAAA;AAED;;AAEG;MACU,cAAc,GAAG,IAAI,cAAc,CAA2B,gBAAgB,EAAE;AAC3F,IAAA,OAAO,EAAE,MAAM;AAChB,CAAA;MAUY,kBAAkB,CAAA;AAR/B,IAAA,WAAA,GAAA;AASU,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;AAC/B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;;AAGzD,QAAA,IAAA,CAAA,YAAY,GAAiB;YACnC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;YAC/C,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,EAAE;AAC/D,YAAA,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE;YACzE,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM;SAC/C;;QAGD,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC;QAC/C,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAmB,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC;QACpE,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC;QAC9C,IAAQ,CAAA,QAAA,GAAG,KAAK,CAA+B,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC;AAChF,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC;;AAGtB,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAe,IAAI,CAAC,YAAY,CAAC;;QAG9C,IAAiB,CAAA,iBAAA,GAAG,MAAM,EAAU;;AAGpC,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAQjE;AANC,IAAA,SAAS,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE;AACpD,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;;;8GA/B3B,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,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,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,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,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,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzC/B,oiCA8BM,EAAA,MAAA,EAAA,CAAA,6pDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDMM,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAR9B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,oiCAAA,EAAA,MAAA,EAAA,CAAA,6pDAAA,CAAA,EAAA;;;MElCpC,YAAY,GAAG,IAAI,cAAc,CAAuB,cAAc,EAAE;AACnF,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,YAAY,EAAE,mBAAmB;AACjC,QAAA,gBAAgB,EAAE,kBAAkB;AACpC,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,uBAAuB,EAAE;KAC1B;AACF,CAAA;MAEY,YAAY,GAAG,IAAI,cAAc,CAA2B,cAAc,EAAE;AACvF,IAAA,OAAO,EAAE,MAAM,CAAC,EAAE;AACnB,CAAA;MAUY,iBAAiB,CAAA;AAR9B,IAAA,WAAA,GAAA;AASU,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;AAC7B,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;;AAGzD,QAAA,IAAA,CAAA,cAAc,GAAkB;AACtC,YAAA,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YACzD,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC9C,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI;SAC/C;AAEO,QAAA,IAAA,CAAA,WAAW,GAAe;YAChC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,kBAAkB,EAAE;YACtD,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,EAAE;YACxD,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB;SACvD;;QAGD,IAAO,CAAA,OAAA,GAAG,KAAK,CAAwB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC;QACxE,IAAI,CAAA,IAAA,GAAG,KAAK,CAA+B,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC;QACxE,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;QAC7C,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC;QACjD,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC;QAC/C,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;QAC7C,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,KAAK,CAAC;;AAGvD,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAgB,EAAE,CAAC;AAClC,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAa,EAAE,CAAC;AAC5B,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAS,mBAAmB,CAAC;AACjD,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAS,kBAAkB,CAAC;QACpD,IAAuB,CAAA,uBAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,uBAAuB,IAAI,0BAA0B,CAAC;;QAGlG,IAAU,CAAA,UAAA,GAAG,MAAM,EAAa;QAChC,IAAkB,CAAA,kBAAA,GAAG,MAAM,EAAU;QACrC,IAAQ,CAAA,QAAA,GAAG,MAAM,EAAsB;;QAGvC,IAAiB,CAAA,iBAAA,GAAG,KAAK,EAAyB;AAClD,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAC,EAAE,CAAC;;AAG5B,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAK;YACnC,OAAO,IAAI,CAAC,UAAU;kBAClB,CAAG,EAAA,IAAI,CAAC,gBAAgB,EAAE,CAAA,EAAA,EAAK,IAAI,CAAC,UAAU,EAAE,CAAG,CAAA;AACrD,kBAAE,IAAI,CAAC,YAAY,EAAE;AACzB,SAAC,CAAC;QAEF,IAAW,CAAA,WAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACtD,IAAU,CAAA,UAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAEpD,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;YACpB,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,SAAS;AACpC,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,KAAK,CAAC;AAAE,gBAAA,OAAO,OAAO;AACpD,YAAA,OAAO,SAAS;AAClB,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;YAC3B,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;;AAG7B,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACrB,gBAAA,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;;;AAIrD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;YAC/B,IAAI,IAAI,EAAE;gBACR,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;;AAGtC,YAAA,OAAO,MAAM;AACf,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;YAC3B,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;AAC1C,SAAC,CAAC;AAyFH;AAvFC;;AAEG;IACK,QAAQ,CAAC,IAAgB,EAAE,IAAe,EAAA;AAChD,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC;;AAG/D,YAAA,IAAI,MAAM,EAAE,MAAM,EAAE;AAClB,gBAAA,OAAO,IAAI,CAAC,SAAS,KAAK;sBACtB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;sBAClB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;;;AAIzB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC;AAC/D,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC;AAE/D,YAAA,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;AAC5B,gBAAA,OAAO,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;;iBAC1B;AACL,gBAAA,OAAO,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;;AAEnC,SAAC,CAAC;;AAGJ;;AAEG;IACK,UAAU,CAAC,IAAgB,EAAE,UAAkB,EAAA;AACrD,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,IAAI;AAE5B,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,EAAE;AACrC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,IAAG;YACvB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,IAAG;AAClC,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC;AACjE,gBAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;AACvD,aAAC,CAAC;AACJ,SAAC,CAAC;;AAGJ;;AAEG;IACK,cAAc,CAAC,GAAQ,EAAE,IAAY,EAAA;QAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;;AAGhE,IAAA,UAAU,CAAC,MAAmB,EAAA;QAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE;AAEtB,QAAA,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,KAAK,MAAM,CAAC;AAC1E,cAAE;cACA,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,KAAK;AAClC,kBAAE;kBACA,KAAK;QAEX,MAAM,IAAI,GAAc,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE;AACtD,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;AAGzB,IAAA,kBAAkB,CAAC,KAAY,EAAA;AAC7B,QAAA,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;AACtD,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;AAGzB,IAAA,cAAc,CAAC,GAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC;;AAGzC;;AAEG;IACH,OAAO,aAAa,CAAC,SAA4B,EAAA;AAC/C,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;QACnC,IAAI,MAAM,CAAC,OAAO;YAAE,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;QACzD,IAAI,MAAM,CAAC,IAAI;YAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;AAChD,QAAA,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;YAAE,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;AACvE,QAAA,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;YAAE,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;AAC7E,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;YAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC1E,QAAA,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;YAAE,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;AACvE,QAAA,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS;YAAE,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC;;8GArK7E,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,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,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,IAAA,EAAA,YAAA,EAAA,OAAA,EAAA,eAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,gBAAA,EAAA,wBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChC9B,ywFAkFM,EAAA,MAAA,EAAA,CAAA,uqGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDvDM,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAR7B,SAAS;+BACE,WAAW,EAAA,UAAA,EACT,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,ywFAAA,EAAA,MAAA,EAAA,CAAA,uqGAAA,CAAA,EAAA;;;AEdjD;;AAEG;MACU,WAAW,GAAG,IAAI,cAAc,CAAsB,aAAa,EAAE;AAChF,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,WAAW,EAAE,CAAC;AACd,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,UAAU,EAAE;AACV,YAAA,GAAG,EAAE,QAAQ;AACb,YAAA,OAAO,EAAE,kBAAkB;AAC3B,YAAA,QAAQ,EAAE,mBAAmB;AAC7B,YAAA,QAAQ,EAAE,aAAa;AACvB,YAAA,UAAU,EAAE;AACb;KACF;AACF,CAAA;AAED;;AAEG;MACU,WAAW,GAAG,IAAI,cAAc,CAA2B,aAAa,EAAE;AACrF,IAAA,OAAO,EAAE,MAAM;AAChB,CAAA;MAUY,gBAAgB,CAAA;AAR7B,IAAA,WAAA,GAAA;AASU,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;AAC5B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AACtD,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAC/B,IAAQ,CAAA,QAAA,GAA4B,IAAI;AACtC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGjC,QAAA,IAAA,CAAA,WAAW,GAAU;AAC3B,YAAA,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,wBAAwB,EAAE;AACzD,YAAA,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,wBAAwB,EAAE;AACzD,YAAA,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,wBAAwB;SACxD;;QAGD,IAAO,CAAA,OAAA,GAAG,KAAK,CAAc,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC;QAC9D,IAAI,CAAA,IAAA,GAAG,KAAK,CAAW,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC;QACpD,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;QACjD,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC;;AAGtC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAQ,IAAI,CAAC,WAAW,CAAC;QACpD,IAAI,CAAA,IAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;;QAGxC,IAAiB,CAAA,iBAAA,GAAG,MAAM,EAAU;;AAmEpC,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAYjE;IA7EC,kBAAkB,GAAA;;AAEhB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,MAAK;AACxC,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAkB;;AAGxG,YAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACnB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM;AACvC,oBAAA,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAU,OAAA,EAAA,CAAC,GAAG,CAAC,CAAE,CAAA;oBAC3D,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,SAAS;oBAC/C,OAAO,EAAE,EAAE,CAAC;iBACb,CAAC,CAAC,CAAC;;AAGN,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,SAAC,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;AACnD,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,eAAe,EAAE,CAAC,aAAa,EAAE,WAAW;AAC7C,SAAA,CAAC;;AAGF,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;;IAG7B,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;AAC1B,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;;;IAIxB,aAAa,CAAC,KAAoB,EAAE,KAAa,EAAA;AAC/C,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC9D;AACF,YAAA,KAAK,YAAY;gBACf,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC9D;AACF,YAAA,KAAK,MAAM;gBACT,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;gBACjB;AACF,YAAA,KAAK,KAAK;gBACR,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;gBACtC;;;AAIN,IAAA,SAAS,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE;AAChC,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;AAClC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;;AAO3B;;AAEG;IACH,OAAO,aAAa,CAAC,SAA2B,EAAA;AAC9C,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;QAClC,IAAI,MAAM,CAAC,OAAO;YAAE,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;QACzD,IAAI,MAAM,CAAC,IAAI;YAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;AAChD,QAAA,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS;YAAE,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC;AACnF,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;YAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;;8GAtGjE,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,IAAA,EAAA,YAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClD7B,ulDA+CM,EAAA,MAAA,EAAA,CAAA,6kEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDFM,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAR5B,SAAS;+BACE,UAAU,EAAA,UAAA,EACR,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,ulDAAA,EAAA,MAAA,EAAA,CAAA,6kEAAA,CAAA,EAAA;;;MEzCpC,YAAY,CAAA;AAHzB,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAU,EAAE,CAAC;AAC5B,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAgB,WAAW,CAAC;AACnD,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;AAC7B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AAyEtE;AAvEC;;AAEG;IACH,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;;AAGpB;;AAEG;IACH,eAAe,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;;AAG1B;;AAEG;IACH,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,cAAc;;AAG5B;;AAEG;IACH,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;;AAGpB;;AAEG;AACH,IAAA,IAAI,CAAC,KAAwB,EAAA;AAC3B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAClD,QAAA,MAAM,QAAQ,GAAU;AACtB,YAAA,GAAG,KAAK;YACR,EAAE;AACF,YAAA,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,MAAM;YAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI;SACrD;;QAGD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC;AAC5C,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAG;AAC1B,YAAA,MAAM,aAAa,GAAG,CAAC,GAAG,MAAM,CAAC;AACjC,YAAA,OAAO,aAAa,CAAC,MAAM,IAAI,SAAS,EAAE;gBACxC,aAAa,CAAC,KAAK,EAAE;;AAEvB,YAAA,OAAO,CAAC,GAAG,aAAa,EAAE,QAAQ,CAAC;AACrC,SAAC,CAAC;;QAGF,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,GAAG,CAAC,EAAE;AAC9C,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC;;AAGtD,QAAA,OAAO,EAAE;;AAGX;;AAEG;AACH,IAAA,MAAM,CAAC,EAAU,EAAA;QACf,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;;AAG/D;;AAEG;AACH,IAAA,WAAW,CAAC,QAAuB,EAAA;AACjC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;;8GA3ExB,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA;;2FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACDD;;AAEG;MACU,YAAY,GAAG,IAAI,cAAc,CAAuB,cAAc,EAAE;AACnF,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,QAAQ,EAAE,WAAW;AACrB,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,SAAS,EAAE,CAAC;AACZ,QAAA,YAAY,EAAE,IAAI;AAClB,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,eAAe,EAAE;KAClB;AACF,CAAA;AAED;;AAEG;MACU,YAAY,GAAG,IAAI,cAAc,CAA2B,cAAc,EAAE;AACvF,IAAA,OAAO,EAAE,MAAM;AAChB,CAAA;MAUY,cAAc,CAAA;AAR3B,IAAA,WAAA,GAAA;AASU,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;AAC7B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;;AAG/D,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC;AACxD,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC;AAC5D,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAqBjE;IAnBC,gBAAgB,GAAA;AACd,QAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE;;AAG7B,IAAA,aAAa,CAAC,EAAsB,EAAA;QAClC,IAAI,EAAE,EAAE;AACN,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;;;AAIhC,IAAA,cAAc,CAAC,IAAe,EAAA;AAC5B,QAAA,MAAM,KAAK,GAA8B;AACvC,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,MAAM,EAAE;SACT;AACD,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM;;8GA3BnB,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClC3B,o0BA0BM,EAAA,MAAA,EAAA,CAAA,s6FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDGM,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,cAAc,EAAA,UAAA,EAAA,CAAA;kBAR1B,SAAS;+BACE,WAAW,EAAA,UAAA,EACT,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,o0BAAA,EAAA,MAAA,EAAA,CAAA,s6FAAA,CAAA,EAAA;;;AE5BjD;;AAEG;MACU,cAAc,GAAG,IAAI,cAAc,CAAyB,gBAAgB,EAAE;AACzF,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,SAAS,EAAE,GAAG;AACd,QAAA,SAAS,EAAE,GAAG;AACd,QAAA,QAAQ,EAAE,GAAG;AACb,QAAA,cAAc,EAAE;KACjB;AACF,CAAA;AAED;;AAEG;MACU,cAAc,GAAG,IAAI,cAAc,CAA2B,gBAAgB,EAAE;AAC3F,IAAA,OAAO,EAAE,MAAM,CAAC,EAAE;AACnB,CAAA;MAUY,mBAAmB,CAAA;AARhC,IAAA,WAAA,GAAA;AASU,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAA4B;AAC1D,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;;QAGjE,IAAO,CAAA,OAAA,GAAG,KAAK,CAAmB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;QAChE,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAkB,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC;QAChE,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,GAAG,CAAC;QAC/C,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,GAAG,CAAC;QAC/C,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,GAAG,CAAC;;AAG7C,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,0BAA0B,CAAC;;QAG3C,IAAS,CAAA,SAAA,GAAG,KAAK;QACT,IAAW,CAAA,WAAA,GAAyC,IAAI;QACxD,IAAW,CAAA,WAAA,GAAyC,IAAI;;AAGhE,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAmEjE;IAhEC,IAAI,GAAA;;AAEF,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;;;QAIzB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACxC,YAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,MAAK;AACjC,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,aAAC,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;;;IAKxB,IAAI,GAAA;;AAEF,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;;;QAIzB,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACvC,YAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,MAAK;AACjC,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,aAAC,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;;;IAIxB,SAAS,GAAA;QACP,IAAI,CAAC,IAAI,EAAE;;IAGb,UAAU,GAAA;QACR,IAAI,CAAC,IAAI,EAAE;;IAGb,WAAW,GAAA;;AAET,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;;AAEhC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;;;AAIlC;;AAEG;IACH,OAAO,aAAa,CAAC,SAA8B,EAAA;AACjD,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAA4B;QAChE,IAAI,MAAM,CAAC,OAAO;YAAE,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;QACzD,IAAI,MAAM,CAAC,QAAQ;YAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC5D,QAAA,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;YAAE,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;AAC7E,QAAA,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;YAAE,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;AAC7E,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;YAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;;8GAvFjE,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,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,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,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,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,QAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjChC,mjBAsBM,EAAA,MAAA,EAAA,CAAA,uhDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDMM,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAR/B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,mjBAAA,EAAA,MAAA,EAAA,CAAA,uhDAAA,CAAA,EAAA;8BA2B/C,IAAI,EAAA,CAAA;sBADH,YAAY;uBAAC,YAAY;gBAmB1B,IAAI,EAAA,CAAA;sBADH,YAAY;uBAAC,YAAY;;;AEvE5B;AACA,MAAM,iBAAiB,GAAG,wBAAwB;MAUrC,uBAAuB,GAAG,IAAI,cAAc,CAAwB,yBAAyB;AAE1G,MAAM,oBAAoB,GAAG;AAC3B,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,SAAS,EAAE;CACZ;AAED;;AAEG;AACH,SAAS,QAAQ,CAAC,GAAW,EAAA;;IAE3B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;;AAG3B,IAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AAChC,QAAA,OAAO,CAAC,KAAK,CAAC,sBAAsB,GAAG,CAAA,CAAE,CAAC;AAC1C,QAAA,OAAO,IAAI;;;AAIb,IAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;QACpB,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;;AAIvD,IAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AAC3C,IAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AAC3C,IAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AAE3C,IAAA,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACpB;AAEA;;AAEG;AACH,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAA;IAC/C,OAAO,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;SAClB,GAAG,CAAC,CAAC,IAAG;QACP,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AAClE,QAAA,OAAO,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AAC3C,KAAC;SACA,IAAI,CAAC,EAAE,CAAC;AACb;AAEA;;AAEG;AACH,SAAS,YAAY,CAAC,GAAW,EAAE,OAAe,EAAA;AAChD,IAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;AACzB,IAAA,IAAI,CAAC,GAAG;AAAE,QAAA,OAAO,GAAG;IAEpB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG;AACvB,IAAA,MAAM,MAAM,GAAG,OAAO,GAAG,GAAG;IAE5B,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,MAAM;IACnC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,MAAM;IACnC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,MAAM;IAEnC,OAAO,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AACnC;AAEA;;AAEG;AACH,SAAS,WAAW,CAAC,GAAW,EAAE,OAAe,EAAA;AAC/C,IAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;AACzB,IAAA,IAAI,CAAC,GAAG;AAAE,QAAA,OAAO,GAAG;IAEpB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG;AACvB,IAAA,MAAM,MAAM,GAAG,OAAO,GAAG,GAAG;IAE5B,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;IAC7B,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;IAC7B,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;IAE7B,OAAO,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AACnC;MAKa,YAAY,CAAA;AAevB,IAAA,WAAA,GAAA;QAdQ,IAAc,CAAA,cAAA,GAAG,MAAM,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACpE,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAU,KAAK,CAAC;AAC1C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAQ,OAAO,CAAC;AACxC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAO,IAAI,IAAI,EAAE,CAAC;QAEnD,IAAW,CAAA,WAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACtD,IAAS,CAAA,SAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;AAElD,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,OAAO;AAC1B,YAAA,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE;AAC1B,YAAA,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE;AACtB,YAAA,UAAU,EAAE,IAAI,CAAC,gBAAgB;AAClC,SAAA,CAAC,CAAC;;QAID,IAAI,CAAC,eAAe,EAAE;;;;;;QAQtB,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,iBAAiB,EAAE;SACzB,EAAE,CAAC,CAAC;;AAGP,IAAA,YAAY,CAAC,MAAe,EAAA;AAC1B,QAAA,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAC9E,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC;AAClC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QACnD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;;QAGrC,IAAI,CAAC,iBAAiB,EAAE;;IAG1B,WAAW,GAAA;QACT,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;;AAG9C,IAAA,WAAW,CAAC,IAAW,EAAA;AACrB,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC;QAC3C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;;AAGrC,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;;QAG9B,IAAI,CAAC,iBAAiB,EAAE;;AAG1B;;AAEG;IACH,iBAAiB,GAAA;;AAEf,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,OAAO,CAAC,IAAI,CAAC,kEAAkE,CAAC;;;AAIlF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,EAAE,YAAY,EAAE,IAAI,oBAAoB,CAAC,OAAO;AACxF,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,cAAc,EAAE,IAAI,oBAAoB,CAAC,SAAS;;AAG9F,QAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE;YACpC,YAAY;YACZ,cAAc;AACd,YAAA,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc;AACxC,YAAA,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,YAAY,EAAE;AACnD,YAAA,gBAAgB,EAAE,IAAI,CAAC,cAAc,EAAE,cAAc;AACtD,SAAA,CAAC;QAEF,IAAI,YAAY,EAAE;AAChB,YAAA,IAAI;;gBAEF,MAAM,iBAAiB,GAAG,YAAY,CAAC,YAAY,EAAE,EAAE,CAAC;gBACxD,MAAM,mBAAmB,GAAG,YAAY,CAAC,YAAY,EAAE,EAAE,CAAC;gBAC1D,MAAM,gBAAgB,GAAG,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC;gBACtD,MAAM,kBAAkB,GAAG,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC;;AAGxD,gBAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,CAAC;gBAClC,MAAM,eAAe,GAAG,GAAG,GAAG,CAAA,EAAG,GAAG,CAAC,CAAC,CAAA,EAAA,EAAK,GAAG,CAAC,CAAC,CAAK,EAAA,EAAA,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI;;;AAInE,gBAAA,IAAI,gBAAgB,GAAG,SAAS,CAAC;gBACjC,IAAI,GAAG,EAAE;oBACP,MAAM,SAAS,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG;AACvE,oBAAA,IAAI,SAAS,GAAG,GAAG,EAAE;AACnB,wBAAA,gBAAgB,GAAG,SAAS,CAAC;;;;gBAKjC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,yBAAyB,EAAE,YAAY,CAAC;gBACnF,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,+BAA+B,EAAE,iBAAiB,CAAC;gBAC9F,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,iCAAiC,EAAE,mBAAmB,CAAC;gBAClG,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,8BAA8B,EAAE,gBAAgB,CAAC;gBAC5F,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,gCAAgC,EAAE,kBAAkB,CAAC;gBAChG,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,8BAA8B,EAAE,gBAAgB,CAAC;gBAE5F,IAAI,eAAe,EAAE;oBACnB,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,6BAA6B,EAAE,eAAe,CAAC;;AAG5F,gBAAA,OAAO,CAAC,GAAG,CAAC,6CAA6C,YAAY,CAAA,CAAE,CAAC;;gBAGzE,IAAI,cAAc,EAAE;AAClB,oBAAA,IAAI;;wBAEF,MAAM,mBAAmB,GAAG,YAAY,CAAC,cAAc,EAAE,EAAE,CAAC;wBAC5D,MAAM,qBAAqB,GAAG,YAAY,CAAC,cAAc,EAAE,EAAE,CAAC;wBAC9D,MAAM,kBAAkB,GAAG,WAAW,CAAC,cAAc,EAAE,EAAE,CAAC;wBAC1D,MAAM,oBAAoB,GAAG,WAAW,CAAC,cAAc,EAAE,EAAE,CAAC;;AAG5D,wBAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC;wBACpC,MAAM,iBAAiB,GAAG,GAAG,GAAG,CAAA,EAAG,GAAG,CAAC,CAAC,CAAA,EAAA,EAAK,GAAG,CAAC,CAAC,CAAK,EAAA,EAAA,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI;;AAGrE,wBAAA,IAAI,kBAAkB,GAAG,SAAS,CAAC;wBACnC,IAAI,GAAG,EAAE;4BACP,MAAM,SAAS,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG;AACvE,4BAAA,IAAI,SAAS,GAAG,GAAG,EAAE;AACnB,gCAAA,kBAAkB,GAAG,SAAS,CAAC;;;;wBAKnC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,2BAA2B,EAAE,cAAc,CAAC;wBACvF,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,iCAAiC,EAAE,mBAAmB,CAAC;wBAClG,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,mCAAmC,EAAE,qBAAqB,CAAC;wBACtG,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,gCAAgC,EAAE,kBAAkB,CAAC;wBAChG,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,kCAAkC,EAAE,oBAAoB,CAAC;wBACpG,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,gCAAgC,EAAE,kBAAkB,CAAC;wBAEhG,IAAI,iBAAiB,EAAE;4BACrB,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,+BAA+B,EAAE,iBAAiB,CAAC;;AAGhG,wBAAA,OAAO,CAAC,GAAG,CAAC,+CAA+C,cAAc,CAAA,CAAE,CAAC;;oBAC5E,OAAO,KAAK,EAAE;AACd,wBAAA,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,KAAK,CAAC;;;;YAGxE,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC;;;;AAK3D;;;AAGG;IACK,eAAe,GAAA;QACrB,IAAI,UAAU,GAAiB,IAAI;;AAGnC,QAAA,IAAI;AACF,YAAA,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAU;;QAC7D,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CAAC,yCAAyC,EAAE,KAAK,CAAC;;;QAIhE,MAAM,YAAY,GAAG,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,MAAM;QACpE,MAAM,YAAY,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO;AAExD,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,KAAK,MAAM,CAAC;;AAG5C;;AAEG;AACK,IAAA,mBAAmB,CAAC,KAAY,EAAA;AACtC,QAAA,IAAI;AACF,YAAA,YAAY,CAAC,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC;;QAC9C,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CAAC,uCAAuC,EAAE,KAAK,CAAC;;;8GA3LrD,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA;;2FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MClFY,oBAAoB,CAAA;AADjC,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAyBpD;IAvBC,SAAS,CAAC,GAAW,EAAE,MAA4B,EAAA;AACjD,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE;QACnB,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;;IAGnD,cAAc,CAAC,GAAW,EAAE,MAA4B,EAAA;AACtD,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,IAAI,UAAU,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC;;AAGlD,IAAA,WAAW,CAAC,IAAY,EAAA;AACtB,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;;IAGjC,kBAAkB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW;;IAG1C,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAC5C,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,CACzB;;8GAxBQ,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAApB,oBAAoB,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;MA6BY,oBAAoB,GAAG,IAAI,cAAc,CAAsB,sBAAsB,EAAE;AAClG,IAAA,OAAO,EAAE,MAAM,IAAI,oBAAoB;AACxC,CAAA;AAEe,SAAA,kBAAkB,CAAC,QAAA,GAAsC,oBAAoB,EAAA;IAC3F,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC9D;;MCzCa,aAAa,CAAA;AACxB,IAAA,WAAA,CAAoB,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM;;AAExB,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI;;AAErB,QAAA,MAAM,CAAC,KAAK,IAAI,KAAK,YAAY,aAAa,CAAC,CAChD,CAAC,SAAS,CAAC,MAAK;;AAEf,YAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;AACvB,SAAC,CAAC;;8GATO,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,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,CAAA;;2FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACND;;AAEG;;;;"}