{"version":3,"sources":["../../src/config/constants.ts","../../src/styles/themes/web/index.ts","../../src/styles/themes/native/index.ts","../../src/components/primitives/switch/native.tsx","../../src/config/platform.ts","../../src/styles/themes/index.ts","../../src/utils/native-styles.ts","../../src/components/providers/theme-provider.tsx","../../src/components/primitives/slider/native.tsx","../../src/components/primitives/textarea/native.tsx","../../src/components/primitives/accordion/native.tsx","../../src/components/primitives/breadcrumbs/native.tsx","../../src/components/primitives/empty-state/native.tsx","../../src/components/layout/native/section.tsx","../../src/components/layout/native/grid.tsx","../../src/components/app-shell/native/Header.tsx","../../src/components/app-shell/native/Drawer.tsx","../../src/components/app-shell/native/AppShell.tsx","../../src/components/app-shell/native/Breadcrumbs.tsx","../../src/components/navigation/native/Tabs.tsx","../../src/components/navigation/native/BottomTabBar.tsx","../../src/components/navigation/native/Stepper.tsx","../../src/components/navigation/native/CommandPalette.tsx","../../src/components/navigation/native/Pagination.tsx","../../src/components/tour/native/Tour.tsx","../../src/components/tour/native/Tooltip.tsx","../../src/components/tour/native/Onboarding.tsx","../../src/components/tour/native/WelcomeModal.tsx","../../src/components/tour/native/FeatureHighlight.tsx","../../src/components/layout/templates/native/DashboardLayout.tsx","../../src/components/layout/templates/native/AuthLayout.tsx","../../src/components/layout/templates/native/SettingsLayout.tsx","../../src/hooks/native/use-keyboard.ts","../../src/hooks/native/use-dimensions.ts","../../src/hooks/network/use-network-info.ts","../../src/hooks/network/use-offline-state.ts","../../src/components/ui/responsive-header/responsive-header.tsx","../../src/utils/cn.ts","../../src/components/ui/mobile-navigation/mobile-navigation.tsx","../../src/components/ui/hamburger-icon/hamburger-icon.tsx","../../src/components/ui/mobile-hero/native/NativeMobileHero.tsx","../../src/components/ui/mobile-container/native/NativeMobileContainer.tsx","../../src/components/ui/page-transition/native/NativePageTransition.tsx","../../src/components/ui/network-aware-content/native/NativeNetworkAwareContent.tsx","../../src/components/ui/offline-wrapper/native/NativeOfflineWrapper.tsx","../../src/components/ui/toast/native/NativeToast.tsx","../../src/components/ui/login-form/native/LoginForm.tsx","../../src/components/ui/signup-form/native/SignupForm.tsx","../../src/components/ui/button/web/index.tsx","../../src/components/ui/card/web/index.tsx","../../src/components/ui/input/web/index.tsx","../../src/components/ui/page-transition/web/index.tsx","../../src/components/ui/swipeable-card/web/index.tsx","../../src/components/ui/pull-to-refresh/web/index.tsx","../../src/components/ui/lazy-image/web/index.tsx","../../src/components/ui/progressive-image/web/index.tsx","../../src/components/ui/virtual-scroll-list/web/index.tsx","../../src/components/ui/network-aware-content/web/index.tsx","../../src/components/ui/offline-wrapper/web/index.tsx","../../src/utils/formats.ts","../../src/utils/validation.ts","../../src/styles/design-tokens.ts","../../src/utils/motion-presets.ts","../../src/utils/animations.ts","../../src/utils/env.ts","../../src/native/index.ts","../../src/components/ui/chart/native/Chart.tsx","../../src/stores/optimized-store.ts"],"sourcesContent":["export const THEME_COLORS = {\n  // Primary colors\n  primary: {\n    50: \"#eff6ff\",\n    100: \"#dbeafe\",\n    500: \"#3b82f6\",\n    600: \"#2563eb\",\n    900: \"#1e3a8a\",\n  },\n  // Gray colors\n  gray: {\n    50: \"#f9fafb\",\n    100: \"#f3f4f6\",\n    200: \"#e5e7eb\",\n    300: \"#d1d5db\",\n    400: \"#9ca3af\",\n    500: \"#6b7280\",\n    600: \"#4b5563\",\n    700: \"#374151\",\n    800: \"#1f2937\",\n    900: \"#111827\",\n  },\n  // Status colors\n  success: \"#10b981\",\n  warning: \"#f59e0b\",\n  error: \"#ef4444\",\n  info: \"#3b82f6\",\n} as const;\n\nexport const ANIMATION_DURATION = {\n  fast: 150,\n  normal: 300,\n  slow: 500,\n} as const;\n\nexport const Z_INDEX = {\n  dropdown: 1000,\n  modal: 1050,\n  popover: 1060,\n  tooltip: 1070,\n  toast: 1080,\n} as const;\n","import { BaseTheme } from \"../index\";\nimport { THEME_COLORS } from \"../../../config/constants\";\n\nexport const theme: BaseTheme = {\n  colors: {\n    primary: THEME_COLORS.primary[500],\n    secondary: THEME_COLORS.gray[600],\n    background: \"#ffffff\",\n    surface: \"#ffffff\",\n    text: THEME_COLORS.gray[900],\n    textSecondary: THEME_COLORS.gray[600],\n    border: THEME_COLORS.gray[200],\n    success: THEME_COLORS.success,\n    warning: THEME_COLORS.warning,\n    error: THEME_COLORS.error,\n  },\n  spacing: {\n    xs: \"0.25rem\",\n    sm: \"0.5rem\",\n    md: \"1rem\",\n    lg: \"1.5rem\",\n    xl: \"2rem\",\n  },\n  borderRadius: {\n    sm: \"0.125rem\",\n    md: \"0.375rem\",\n    lg: \"0.5rem\",\n    full: \"9999px\",\n  },\n  fontSize: {\n    xs: \"0.75rem\",\n    sm: \"0.875rem\",\n    md: \"1rem\",\n    lg: \"1.125rem\",\n    xl: \"1.25rem\",\n  },\n};\n\n// Legacy CSS variables theme for backward compatibility\nexport const themes = {\n  light: {\n    \"--background\": \"0 0% 100%\",\n    \"--foreground\": \"222.2 84% 4.9%\",\n    \"--card\": \"0 0% 100%\",\n    \"--card-foreground\": \"222.2 84% 4.9%\",\n    \"--popover\": \"0 0% 100%\",\n    \"--popover-foreground\": \"222.2 84% 4.9%\",\n    \"--primary\": \"221.2 83.2% 53.3%\",\n    \"--primary-foreground\": \"210 40% 98%\",\n    \"--secondary\": \"210 40% 96.1%\",\n    \"--secondary-foreground\": \"222.2 47.4% 11.2%\",\n    \"--muted\": \"210 40% 96.1%\",\n    \"--muted-foreground\": \"215.4 16.3% 46.9%\",\n    \"--accent\": \"210 40% 96.1%\",\n    \"--accent-foreground\": \"222.2 47.4% 11.2%\",\n    \"--destructive\": \"0 84.2% 60.2%\",\n    \"--destructive-foreground\": \"210 40% 98%\",\n    \"--border\": \"214.3 31.8% 91.4%\",\n    \"--input\": \"214.3 31.8% 91.4%\",\n    \"--ring\": \"221.2 83.2% 53.3%\",\n    \"--radius\": \"0.5rem\",\n  },\n  dark: {\n    \"--background\": \"222.2 84% 4.9%\",\n    \"--foreground\": \"210 40% 98%\",\n    \"--card\": \"222.2 84% 4.9%\",\n    \"--card-foreground\": \"210 40% 98%\",\n    \"--popover\": \"222.2 84% 4.9%\",\n    \"--popover-foreground\": \"210 40% 98%\",\n    \"--primary\": \"217.2 91.2% 59.8%\",\n    \"--primary-foreground\": \"222.2 47.4% 11.2%\",\n    \"--secondary\": \"217.2 32.6% 17.5%\",\n    \"--secondary-foreground\": \"210 40% 98%\",\n    \"--muted\": \"217.2 32.6% 17.5%\",\n    \"--muted-foreground\": \"215 20.2% 65.1%\",\n    \"--accent\": \"217.2 32.6% 17.5%\",\n    \"--accent-foreground\": \"210 40% 98%\",\n    \"--destructive\": \"0 62.8% 30.6%\",\n    \"--destructive-foreground\": \"210 40% 98%\",\n    \"--border\": \"217.2 32.6% 17.5%\",\n    \"--input\": \"217.2 32.6% 17.5%\",\n    \"--ring\": \"224.3 76.3% 48%\",\n  },\n};\n","import { BaseTheme } from \"../index\";\nimport { THEME_COLORS } from \"../../../config/constants\";\n\nexport const theme: BaseTheme = {\n  colors: {\n    primary: THEME_COLORS.primary[500],\n    secondary: THEME_COLORS.gray[600],\n    background: \"#ffffff\",\n    surface: \"#ffffff\",\n    text: THEME_COLORS.gray[900],\n    textSecondary: THEME_COLORS.gray[600],\n    border: THEME_COLORS.gray[200],\n    success: THEME_COLORS.success,\n    warning: THEME_COLORS.warning,\n    error: THEME_COLORS.error,\n  },\n  spacing: {\n    xs: 4,\n    sm: 8,\n    md: 16,\n    lg: 24,\n    xl: 32,\n  },\n  borderRadius: {\n    sm: 2,\n    md: 6,\n    lg: 8,\n    full: 999,\n  },\n  fontSize: {\n    xs: 12,\n    sm: 14,\n    md: 16,\n    lg: 18,\n    xl: 20,\n  },\n};\n","// Native implementation of Switch component for React Native\nimport * as React from \"react\";\nimport { createStyles } from \"../../../utils/native-styles\";\nimport { useTheme } from \"../../providers/theme-provider\";\nimport type { NativeSwitchProps, NativeComponentRef } from \"../types\";\n\n// Dynamic imports for React Native components\nlet Switch: any;\nlet View: any;\nlet ActivityIndicator: any;\n\ntry {\n  const RN = require(\"react-native\");\n  Switch = RN.Switch;\n  View = RN.View;\n  ActivityIndicator = RN.ActivityIndicator;\n} catch {\n  // Fallback for web environments\n  Switch = \"input\";\n  View = \"div\";\n  ActivityIndicator = \"div\";\n}\n\nexport interface NativeSwitchComponentProps extends NativeSwitchProps {\n  onValueChange?: (value: boolean) => void;\n}\n\nconst NativeSwitchComponent = React.forwardRef<any, NativeSwitchComponentProps>(\n  (\n    {\n      checked,\n      defaultChecked,\n      onCheckedChange,\n      size = \"default\",\n      variant = \"default\",\n      loading = false,\n      disabled = false,\n      style,\n      testID,\n      activeThumbColor,\n      inactiveThumbColor,\n      activeTrackColor,\n      inactiveTrackColor,\n      ...props\n    },\n    ref,\n  ) => {\n    const { theme } = useTheme();\n    const [internalChecked, setInternalChecked] = React.useState(\n      defaultChecked || false,\n    );\n\n    // Controlled vs uncontrolled handling\n    const isControlled = checked !== undefined;\n    const switchValue = isControlled ? checked : internalChecked;\n\n    const handleValueChange = React.useCallback(\n      (value: boolean) => {\n        if (!isControlled) {\n          setInternalChecked(value);\n        }\n        onCheckedChange?.(value);\n      },\n      [isControlled, onCheckedChange],\n    );\n\n    const styles = React.useMemo(() => {\n      const sizeStyles = {\n        sm: { transform: [{ scale: 0.8 }] },\n        default: { transform: [{ scale: 1 }] },\n        lg: { transform: [{ scale: 1.2 }] },\n      };\n\n      const variantColors = {\n        default: {\n          activeTrack: theme.colors.primary,\n          inactiveTrack: theme.colors.border,\n          activeThumb: \"#ffffff\",\n          inactiveThumb: \"#ffffff\",\n        },\n        success: {\n          activeTrack: \"#16a34a\",\n          inactiveTrack: theme.colors.border,\n          activeThumb: \"#ffffff\",\n          inactiveThumb: \"#ffffff\",\n        },\n        warning: {\n          activeTrack: \"#ca8a04\",\n          inactiveTrack: theme.colors.border,\n          activeThumb: \"#ffffff\",\n          inactiveThumb: \"#ffffff\",\n        },\n        destructive: {\n          activeTrack: \"#dc2626\",\n          inactiveTrack: theme.colors.border,\n          activeThumb: \"#ffffff\",\n          inactiveThumb: \"#ffffff\",\n        },\n      };\n\n      return createStyles({\n        container: {\n          position: \"relative\",\n          ...sizeStyles[size],\n        },\n        switch: {\n          opacity: disabled ? 0.5 : 1,\n        },\n        loadingOverlay: {\n          position: \"absolute\",\n          top: 0,\n          left: 0,\n          right: 0,\n          bottom: 0,\n          alignItems: \"center\",\n          justifyContent: \"center\",\n          backgroundColor: \"rgba(255, 255, 255, 0.8)\",\n          borderRadius: 15,\n        },\n        ...variantColors,\n      });\n    }, [theme, size, variant, disabled]);\n\n    const colors = styles[variant];\n\n    return (\n      <View style={[styles.container, style]} testID={testID}>\n        <Switch\n          ref={ref}\n          value={switchValue}\n          onValueChange={handleValueChange}\n          disabled={disabled || loading}\n          style={styles.switch}\n          trackColor={{\n            false: inactiveTrackColor || colors.inactiveTrack,\n            true: activeTrackColor || colors.activeTrack,\n          }}\n          thumbColor={\n            switchValue\n              ? activeThumbColor || colors.activeThumb\n              : inactiveThumbColor || colors.inactiveThumb\n          }\n          ios_backgroundColor={inactiveTrackColor || colors.inactiveTrack}\n          {...props}\n        />\n        {loading && (\n          <View style={styles.loadingOverlay}>\n            <ActivityIndicator size=\"small\" color={theme.colors.primary} />\n          </View>\n        )}\n      </View>\n    );\n  },\n);\n\nNativeSwitchComponent.displayName = \"Switch\";\n\nexport { NativeSwitchComponent as Switch };\nexport type { NativeSwitchComponentProps as SwitchProps };\n","// Enhanced platform detection with error handling\nconst detectWeb = (): boolean => {\n  try {\n    return typeof window !== \"undefined\" && typeof document !== \"undefined\";\n  } catch {\n    return false;\n  }\n};\n\nconst detectNative = (): boolean => {\n  try {\n    return (\n      typeof navigator !== \"undefined\" && navigator.product === \"ReactNative\"\n    );\n  } catch {\n    return false;\n  }\n};\n\nconst detectExpo = (): boolean => {\n  try {\n    return !!(\n      typeof global !== \"undefined\" && (global as { __expo?: boolean }).__expo\n    );\n  } catch {\n    return false;\n  }\n};\n\nexport const isWeb = detectWeb();\nexport const isNative = detectNative();\nexport const isExpo = detectExpo();\n\nexport const Platform = {\n  OS: (isNative ? \"native\" : \"web\") as \"web\" | \"native\",\n  isWeb,\n  isNative,\n  isExpo,\n  select: <T>(options: { web: T; native: T }): T => {\n    return isNative ? options.native : options.web;\n  },\n  // Utility functions for better developer experience\n  get current(): \"web\" | \"native\" | \"unknown\" {\n    if (isNative) return \"native\";\n    if (isWeb) return \"web\";\n    return \"unknown\";\n  },\n  get isServer(): boolean {\n    return !isWeb && !isNative;\n  },\n  selectMultiple: <T>(options: {\n    web?: T;\n    native?: T;\n    expo?: T;\n    default: T;\n  }): T => {\n    if (isExpo && options.expo !== undefined) return options.expo;\n    if (isNative && options.native !== undefined) return options.native;\n    if (isWeb && options.web !== undefined) return options.web;\n    return options.default;\n  },\n};\n\n// Legacy export for backward compatibility\n// Removed to avoid conflicts with Platform export\n\nexport interface PlatformConfig {\n  spacing: {\n    xs: number | string;\n    sm: number | string;\n    md: number | string;\n    lg: number | string;\n    xl: number | string;\n  };\n  borderRadius: {\n    sm: number | string;\n    md: number | string;\n    lg: number | string;\n    full: number | string;\n  };\n  fontSize: {\n    xs: number | string;\n    sm: number | string;\n    md: number | string;\n    lg: number | string;\n    xl: number | string;\n  };\n}\n\nexport const webConfig: PlatformConfig = {\n  spacing: {\n    xs: \"0.25rem\",\n    sm: \"0.5rem\",\n    md: \"1rem\",\n    lg: \"1.5rem\",\n    xl: \"2rem\",\n  },\n  borderRadius: {\n    sm: \"0.125rem\",\n    md: \"0.375rem\",\n    lg: \"0.5rem\",\n    full: \"9999px\",\n  },\n  fontSize: {\n    xs: \"0.75rem\",\n    sm: \"0.875rem\",\n    md: \"1rem\",\n    lg: \"1.125rem\",\n    xl: \"1.25rem\",\n  },\n};\n\nexport const nativeConfig: PlatformConfig = {\n  spacing: {\n    xs: 4,\n    sm: 8,\n    md: 16,\n    lg: 24,\n    xl: 32,\n  },\n  borderRadius: {\n    sm: 2,\n    md: 6,\n    lg: 8,\n    full: 999,\n  },\n  fontSize: {\n    xs: 12,\n    sm: 14,\n    md: 16,\n    lg: 18,\n    xl: 20,\n  },\n};\n\nexport const getConfig = (): PlatformConfig => {\n  return Platform.select({ web: webConfig, native: nativeConfig });\n};\n","import { Platform } from \"../../config/platform\";\n\n// Common theme interface\nexport interface BaseTheme {\n  colors: {\n    primary: string;\n    secondary: string;\n    background: string;\n    surface: string;\n    text: string;\n    textSecondary: string;\n    border: string;\n    success: string;\n    warning: string;\n    error: string;\n  };\n  spacing: {\n    xs: number | string;\n    sm: number | string;\n    md: number | string;\n    lg: number | string;\n    xl: number | string;\n  };\n  borderRadius: {\n    sm: number | string;\n    md: number | string;\n    lg: number | string;\n    full: number | string;\n  };\n  fontSize: {\n    xs: number | string;\n    sm: number | string;\n    md: number | string;\n    lg: number | string;\n    xl: number | string;\n  };\n}\n\n// Import Platform-specific themes\n// eslint-disable-next-line @typescript-eslint/no-require-imports\nconst webTheme = Platform.isWeb ? require(\"./web\").theme : null;\n// eslint-disable-next-line @typescript-eslint/no-require-imports\nconst nativeTheme = Platform.isNative ? require(\"./native\").theme : null;\n\nexport const theme = Platform.select({\n  web: webTheme,\n  native: nativeTheme,\n});\n\nexport type Theme = typeof theme;\n\n// Legacy export for backward compatibility (web only)\n// eslint-disable-next-line @typescript-eslint/no-require-imports\nexport const themes = Platform.isWeb ? require(\"./web\").themes : {};\n","// React Native styling utilities\n// These will only be used in React Native environments\n\nimport { theme } from \"../styles/themes\";\n\n// Define types locally to avoid direct import of 'react-native' in web builds\ntype ViewStyle = object;\ntype TextStyle = object;\ntype ImageStyle = object;\ntype StyleProp<T> = T | T[];\n\n// A type for the styles that can be created by StyleSheet.create\ntype NamedStyles<T> = { [P in keyof T]: ViewStyle | TextStyle | ImageStyle };\n\n// Dynamically and safely import React Native's StyleSheet\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet StyleSheet: any;\n\n// A global flag can be set in the React Native entry point to indicate the platform.\n// This is a common pattern for hybrid packages.\n// @ts-expect-error - This is a safe check for a global flag.\nif (typeof global !== \"undefined\" && global.IS_REACT_NATIVE) {\n  // eslint-disable-next-line @typescript-eslint/no-require-imports\n  StyleSheet = require(\"react-native\").StyleSheet;\n} else {\n  // Fallback for web environments to avoid breaking the app when running on web.\n  // This mock implementation is sufficient for type-checking and basic rendering.\n  StyleSheet = {\n    create: <T extends NamedStyles<T>>(styles: T): T => styles,\n    flatten: <T>(style?: StyleProp<T>): T | object => {\n      if (!style) {\n        return {};\n      }\n      if (Array.isArray(style)) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return style.reduce((acc: any, s: any) => {\n          return { ...acc, ...(s ? StyleSheet.flatten(s) : {}) };\n        }, {});\n      }\n      return style;\n    },\n    compose: <T>(\n      style1: StyleProp<T>,\n      style2: StyleProp<T>,\n    ): StyleProp<T>[] => [style1, style2],\n    hairlineWidth: 1,\n    absoluteFillObject: {\n      position: \"absolute\",\n      top: 0,\n      left: 0,\n      right: 0,\n      bottom: 0,\n    },\n    absoluteFill: 2,\n  };\n}\n\nexport function createStyles<T extends NamedStyles<T>>(styles: T): T {\n  return StyleSheet.create(styles);\n}\n\n// Utility function to merge styles (similar to cn for web)\nexport function mergeStyles<T extends ViewStyle | TextStyle | ImageStyle>(\n  ...styles: StyleProp<T>[]\n): StyleProp<T> {\n  // The actual flattening logic is delegated to StyleSheet.flatten,\n  // which is either the real React Native implementation or our web mock.\n  return StyleSheet.flatten(styles) as StyleProp<T>;\n}\n\n// Common style mixins for React Native\nexport const mixins = {\n  shadow: (elevation: number = 2): ViewStyle => ({\n    shadowColor: \"#000\",\n    shadowOffset: {\n      width: 0,\n      height: elevation / 2,\n    },\n    shadowOpacity: 0.2 + elevation * 0.02,\n    shadowRadius: 1 + elevation * 0.4,\n    elevation,\n  }),\n\n  center: (): ViewStyle => ({\n    justifyContent: \"center\",\n    alignItems: \"center\",\n  }),\n\n  row: (): ViewStyle => ({\n    flexDirection: \"row\",\n    alignItems: \"center\",\n  }),\n\n  absoluteFill: (): ViewStyle => StyleSheet.absoluteFillObject,\n\n  rounded: (size: keyof typeof theme.borderRadius = \"md\"): ViewStyle => ({\n    borderRadius: theme.borderRadius[size],\n  }),\n\n  padding: (size: keyof typeof theme.spacing = \"md\"): ViewStyle => ({\n    padding: theme.spacing[size],\n  }),\n\n  margin: (size: keyof typeof theme.spacing = \"md\"): ViewStyle => ({\n    margin: theme.spacing[size],\n  }),\n};\n\n// Responsive utilities for React Native\nexport const responsive = {\n  fontSize: (size: keyof typeof theme.fontSize): TextStyle => ({\n    fontSize: theme.fontSize[size],\n  }),\n\n  spacing: (size: keyof typeof theme.spacing): number => {\n    return theme.spacing[size];\n  },\n\n  borderRadius: (size: keyof typeof theme.borderRadius): number => {\n    return theme.borderRadius[size];\n  },\n};\n","\"use client\";\n\nimport React, {\n  createContext,\n  useContext,\n  ReactNode,\n  useEffect,\n  useState,\n} from \"react\";\nimport { BaseTheme, theme, themes } from \"../../styles/themes\";\nimport { Platform } from \"../../config/platform\";\n\ninterface ThemeContextType {\n  theme: BaseTheme;\n  isDark: boolean;\n  toggleTheme: () => void;\n  setTheme: (theme: \"light\" | \"dark\" | \"system\") => void;\n  reducedMotion: boolean;\n  setReducedMotion: (reduced: boolean) => void;\n  systemTheme: \"light\" | \"dark\";\n  currentTheme: \"light\" | \"dark\" | \"system\";\n}\n\nconst ThemeContext = createContext<ThemeContextType | null>(null);\n\ninterface ThemeProviderProps {\n  children: ReactNode;\n  initialTheme?: \"light\" | \"dark\" | \"system\";\n  storageKey?: string;\n  enableSystem?: boolean;\n  disableTransitionOnChange?: boolean;\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({\n  children,\n  initialTheme = \"system\",\n  storageKey = \"ui-theme\",\n  enableSystem = true,\n  disableTransitionOnChange = false,\n}) => {\n  const [currentTheme, setCurrentTheme] = useState<\"light\" | \"dark\" | \"system\">(\n    initialTheme,\n  );\n  const [systemTheme, setSystemTheme] = useState<\"light\" | \"dark\">(\"light\");\n  const [reducedMotion, setReducedMotion] = useState(false);\n\n  // Determine if dark mode should be active\n  const isDark =\n    currentTheme === \"dark\" ||\n    (currentTheme === \"system\" && systemTheme === \"dark\");\n\n  // Initialize theme from storage\n  useEffect(() => {\n    if (Platform.isWeb && typeof localStorage !== \"undefined\") {\n      const stored = localStorage.getItem(storageKey) as\n        | \"light\"\n        | \"dark\"\n        | \"system\"\n        | null;\n      if (stored) {\n        setCurrentTheme(stored);\n      }\n    }\n  }, [storageKey]);\n\n  // Listen for system theme changes\n  useEffect(() => {\n    if (!Platform.isWeb || !enableSystem) return;\n\n    const mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\n    const handleChange = (e: MediaQueryListEvent) => {\n      setSystemTheme(e.matches ? \"dark\" : \"light\");\n    };\n\n    setSystemTheme(mediaQuery.matches ? \"dark\" : \"light\");\n    mediaQuery.addEventListener(\"change\", handleChange);\n\n    return () => mediaQuery.removeEventListener(\"change\", handleChange);\n  }, [enableSystem]);\n\n  // Listen for reduced motion preference\n  useEffect(() => {\n    if (!Platform.isWeb) return;\n\n    const mediaQuery = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n    const handleChange = (e: MediaQueryListEvent) => {\n      setReducedMotion(e.matches);\n    };\n\n    setReducedMotion(mediaQuery.matches);\n    mediaQuery.addEventListener(\"change\", handleChange);\n\n    return () => mediaQuery.removeEventListener(\"change\", handleChange);\n  }, []);\n\n  const setTheme = (newTheme: \"light\" | \"dark\" | \"system\") => {\n    setCurrentTheme(newTheme);\n\n    if (Platform.isWeb && typeof localStorage !== \"undefined\") {\n      localStorage.setItem(storageKey, newTheme);\n    }\n  };\n\n  const toggleTheme = () => {\n    if (currentTheme === \"light\") {\n      setTheme(\"dark\");\n    } else if (currentTheme === \"dark\") {\n      setTheme(enableSystem ? \"system\" : \"light\");\n    } else {\n      setTheme(\"light\");\n    }\n  };\n\n  const contextValue: ThemeContextType = {\n    theme,\n    isDark,\n    toggleTheme,\n    setTheme,\n    reducedMotion,\n    setReducedMotion,\n    systemTheme,\n    currentTheme,\n  };\n\n  // Apply theme changes to DOM\n  useEffect(() => {\n    if (!Platform.isWeb || typeof document === \"undefined\") return;\n\n    const root = document.documentElement;\n\n    // Disable transitions temporarily to prevent flash\n    if (disableTransitionOnChange) {\n      root.style.setProperty(\"--transition-duration\", \"0s\");\n    }\n\n    // Remove existing theme classes\n    root.classList.remove(\"light\", \"dark\");\n\n    // Add new theme class\n    const themeKey = isDark ? \"dark\" : \"light\";\n    root.classList.add(themeKey);\n\n    // Apply CSS variables\n    if (themes && themes[themeKey]) {\n      Object.entries(themes[themeKey]).forEach(([key, value]) => {\n        root.style.setProperty(key, value as string);\n      });\n    }\n\n    // Add reduced motion class\n    if (reducedMotion) {\n      root.classList.add(\"reduce-motion\");\n    } else {\n      root.classList.remove(\"reduce-motion\");\n    }\n\n    // Re-enable transitions after a brief delay\n    if (disableTransitionOnChange) {\n      setTimeout(() => {\n        root.style.removeProperty(\"--transition-duration\");\n      }, 50);\n    }\n  }, [isDark, reducedMotion, disableTransitionOnChange]);\n\n  if (Platform.isNative) {\n    // For React Native, we'll use a simple provider\n    return (\n      <ThemeContext.Provider value={contextValue}>\n        {children}\n      </ThemeContext.Provider>\n    );\n  }\n\n  return (\n    <ThemeContext.Provider value={contextValue}>\n      {children}\n    </ThemeContext.Provider>\n  );\n};\n\nexport const useTheme = () => {\n  const context = useContext(ThemeContext);\n  if (!context) {\n    console.warn(\n      \"useTheme must be used within a ThemeProvider. Using default values.\",\n    );\n    // Return default values instead of throwing\n    return {\n      theme,\n      isDark: false,\n      toggleTheme: () => {},\n      setTheme: () => {},\n      reducedMotion: false,\n      setReducedMotion: () => {},\n      systemTheme: \"light\" as const,\n      currentTheme: \"light\" as const,\n    };\n  }\n  return context;\n};\n\n// Theme toggle component\nexport interface ThemeToggleProps {\n  className?: string;\n  size?: \"sm\" | \"md\" | \"lg\";\n  variant?: \"default\" | \"outline\" | \"ghost\";\n}\n\nexport const ThemeToggle: React.FC<ThemeToggleProps> = ({\n  className,\n  size = \"md\",\n  variant = \"ghost\",\n}) => {\n  const { isDark, toggleTheme, currentTheme } = useTheme();\n\n  const sizeClasses = {\n    sm: \"h-8 w-8\",\n    md: \"h-9 w-9\",\n    lg: \"h-10 w-10\",\n  };\n\n  const variantClasses = {\n    default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n    outline:\n      \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n    ghost: \"hover:bg-accent hover:text-accent-foreground\",\n  };\n\n  return (\n    <button\n      onClick={toggleTheme}\n      className={`inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 ${sizeClasses[size]} ${variantClasses[variant]} ${className || \"\"}`}\n      aria-label={`Switch to ${isDark ? \"light\" : \"dark\"} mode`}\n      title={`Current: ${currentTheme} mode`}\n    >\n      {isDark ? (\n        <svg\n          className=\"h-4 w-4\"\n          fill=\"none\"\n          viewBox=\"0 0 24 24\"\n          stroke=\"currentColor\"\n        >\n          <path\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeWidth={2}\n            d=\"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z\"\n          />\n        </svg>\n      ) : (\n        <svg\n          className=\"h-4 w-4\"\n          fill=\"none\"\n          viewBox=\"0 0 24 24\"\n          stroke=\"currentColor\"\n        >\n          <path\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeWidth={2}\n            d=\"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z\"\n          />\n        </svg>\n      )}\n    </button>\n  );\n};\n","// Native implementation of Slider component for React Native\nimport * as React from \"react\";\nimport { createStyles } from \"../../../utils/native-styles\";\nimport { useTheme } from \"../../providers/theme-provider\";\nimport type { NativeSliderProps, NativeComponentRef } from \"../types\";\n\n// Dynamic imports for React Native components\nlet Slider: any;\nlet View: any;\nlet PanGestureHandler: any;\nlet Animated: any;\n\ntry {\n  const RN = require(\"react-native\");\n  Slider = RN.Slider;\n  View = RN.View;\n  Animated = RN.Animated;\n\n  // Try to import react-native-gesture-handler for better gestures\n  try {\n    const RNGH = require(\"react-native-gesture-handler\");\n    PanGestureHandler = RNGH.PanGestureHandler;\n  } catch {\n    // Fallback if gesture handler is not available\n    PanGestureHandler = null;\n  }\n} catch {\n  // Fallback for web environments\n  Slider = \"input\";\n  View = \"div\";\n  Animated = { View: \"div\" };\n  PanGestureHandler = null;\n}\n\nexport interface NativeSliderComponentProps extends NativeSliderProps {\n  onSlidingComplete?: (value: number[]) => void;\n}\n\nconst NativeSliderComponent = React.forwardRef<any, NativeSliderComponentProps>(\n  (\n    {\n      value,\n      defaultValue = [0],\n      onValueChange,\n      onValueCommit,\n      min = 0,\n      max = 100,\n      step = 1,\n      orientation = \"horizontal\",\n      size = \"default\",\n      variant = \"default\",\n      disabled = false,\n      style,\n      testID,\n      thumbStyle,\n      trackStyle,\n      minimumTrackTintColor,\n      maximumTrackTintColor,\n      thumbTintColor,\n      ...props\n    },\n    ref,\n  ) => {\n    const { theme } = useTheme();\n    const [internalValue, setInternalValue] = React.useState(defaultValue);\n\n    // Controlled vs uncontrolled handling\n    const isControlled = value !== undefined;\n    const sliderValue = isControlled ? value[0] || 0 : internalValue[0] || 0;\n\n    const handleValueChange = React.useCallback(\n      (newValue: number) => {\n        const valueArray = [newValue];\n        if (!isControlled) {\n          setInternalValue(valueArray);\n        }\n        onValueChange?.(valueArray);\n      },\n      [isControlled, onValueChange],\n    );\n\n    const handleSlidingComplete = React.useCallback(\n      (newValue: number) => {\n        const valueArray = [newValue];\n        onValueCommit?.(valueArray);\n      },\n      [onValueCommit],\n    );\n\n    const styles = React.useMemo(() => {\n      const sizeStyles = {\n        sm: { height: 32, trackHeight: 4, thumbSize: 16 },\n        default: { height: 40, trackHeight: 6, thumbSize: 20 },\n        lg: { height: 48, trackHeight: 8, thumbSize: 24 },\n      };\n\n      const variantColors = {\n        default: {\n          minimumTrack: theme.colors.primary,\n          maximumTrack: theme.colors.border,\n          thumb: \"#ffffff\",\n        },\n        primary: {\n          minimumTrack: theme.colors.primary,\n          maximumTrack: `${theme.colors.primary}33`, // 20% opacity\n          thumb: theme.colors.primary,\n        },\n        secondary: {\n          minimumTrack: theme.colors.secondary,\n          maximumTrack: theme.colors.border,\n          thumb: theme.colors.secondary,\n        },\n        destructive: {\n          minimumTrack: \"#dc2626\",\n          maximumTrack: \"#fecaca\", // red-200\n          thumb: \"#dc2626\",\n        },\n        outline: {\n          minimumTrack: theme.colors.primary,\n          maximumTrack: \"transparent\",\n          thumb: theme.colors.primary,\n        },\n        ghost: {\n          minimumTrack: theme.colors.text,\n          maximumTrack: `${theme.colors.text}33`, // 20% opacity\n          thumb: theme.colors.text,\n        },\n      };\n\n      const currentSize = sizeStyles[size];\n      const currentColors = variantColors[variant];\n\n      return createStyles({\n        container: {\n          height: currentSize.height,\n          justifyContent: \"center\",\n          opacity: disabled ? 0.5 : 1,\n          transform: orientation === \"vertical\" ? [{ rotate: \"-90deg\" }] : [],\n        },\n        slider: {\n          width: \"100%\",\n          height: currentSize.trackHeight,\n        },\n        track: {\n          height: currentSize.trackHeight,\n          borderRadius: currentSize.trackHeight / 2,\n          ...trackStyle,\n        },\n        thumb: {\n          width: currentSize.thumbSize,\n          height: currentSize.thumbSize,\n          borderRadius: currentSize.thumbSize / 2,\n          backgroundColor: currentColors.thumb,\n          shadowColor: \"#000\",\n          shadowOffset: { width: 0, height: 2 },\n          shadowOpacity: 0.1,\n          shadowRadius: 3,\n          elevation: 2,\n          ...thumbStyle,\n        },\n        colors: currentColors,\n      });\n    }, [theme, size, variant, disabled, orientation, trackStyle, thumbStyle]);\n\n    const colors = styles.colors;\n\n    if (orientation === \"vertical\") {\n      // For vertical sliders, we need custom implementation\n      // This is a simplified version - in production you might want a more sophisticated solution\n      return (\n        <View style={[styles.container, style]} testID={testID}>\n          <View style={{ transform: [{ rotate: \"90deg\" }], width: 200 }}>\n            <Slider\n              ref={ref}\n              style={styles.slider}\n              value={sliderValue}\n              onValueChange={handleValueChange}\n              onSlidingComplete={handleSlidingComplete}\n              minimumValue={min}\n              maximumValue={max}\n              step={step}\n              disabled={disabled}\n              minimumTrackTintColor={\n                minimumTrackTintColor || colors.minimumTrack\n              }\n              maximumTrackTintColor={\n                maximumTrackTintColor || colors.maximumTrack\n              }\n              thumbStyle={[\n                styles.thumb,\n                { backgroundColor: thumbTintColor || colors.thumb },\n              ]}\n              {...props}\n            />\n          </View>\n        </View>\n      );\n    }\n\n    return (\n      <View style={[styles.container, style]} testID={testID}>\n        <Slider\n          ref={ref}\n          style={styles.slider}\n          value={sliderValue}\n          onValueChange={handleValueChange}\n          onSlidingComplete={handleSlidingComplete}\n          minimumValue={min}\n          maximumValue={max}\n          step={step}\n          disabled={disabled}\n          minimumTrackTintColor={minimumTrackTintColor || colors.minimumTrack}\n          maximumTrackTintColor={maximumTrackTintColor || colors.maximumTrack}\n          thumbStyle={[\n            styles.thumb,\n            { backgroundColor: thumbTintColor || colors.thumb },\n          ]}\n          {...props}\n        />\n      </View>\n    );\n  },\n);\n\nNativeSliderComponent.displayName = \"Slider\";\n\n// Multi-range slider for React Native (simplified implementation)\nconst NativeMultiSlider = React.forwardRef<any, NativeSliderComponentProps>(\n  (props, ref) => {\n    // For now, return single slider - multi-range would require a more complex implementation\n    // or a third-party library like @react-native-community/slider\n    return <NativeSliderComponent {...props} ref={ref} />;\n  },\n);\n\nNativeMultiSlider.displayName = \"MultiSlider\";\n\nexport { NativeSliderComponent as Slider, NativeMultiSlider as MultiSlider };\nexport type { NativeSliderComponentProps as SliderProps };\n","// Native implementation of Textarea component for React Native\nimport * as React from \"react\";\nimport { createStyles } from \"../../../utils/native-styles\";\nimport { useTheme } from \"../../providers/theme-provider\";\nimport type { NativeTextareaProps, NativeComponentRef } from \"../types\";\n\n// Dynamic imports for React Native components\nlet TextInput: any;\nlet View: any;\nlet Text: any;\n\ntry {\n  const RN = require(\"react-native\");\n  TextInput = RN.TextInput;\n  View = RN.View;\n  Text = RN.Text;\n} catch {\n  // Fallback for web environments\n  TextInput = \"textarea\";\n  View = \"div\";\n  Text = \"span\";\n}\n\nexport interface NativeTextareaComponentProps extends NativeTextareaProps {\n  onChangeText?: (text: string) => void;\n}\n\nconst NativeTextareaComponent = React.forwardRef<\n  any,\n  NativeTextareaComponentProps\n>(\n  (\n    {\n      value,\n      defaultValue,\n      onChange,\n      onChangeText,\n      placeholder,\n      rows = 4,\n      minRows,\n      maxRows,\n      size = \"default\",\n      variant = \"default\",\n      error,\n      helperText,\n      disabled = false,\n      style,\n      testID,\n      autoCapitalize = \"sentences\",\n      autoCorrect = true,\n      keyboardType = \"default\",\n      maxLength,\n      numberOfLines,\n      textAlignVertical = \"top\",\n      onFocus,\n      onBlur,\n      ...props\n    },\n    ref,\n  ) => {\n    const { theme } = useTheme();\n    const [internalValue, setInternalValue] = React.useState(\n      defaultValue || \"\",\n    );\n    const [height, setHeight] = React.useState<number | undefined>(undefined);\n\n    // Controlled vs uncontrolled handling\n    const isControlled = value !== undefined;\n    const textareaValue = isControlled ? value : internalValue;\n\n    const handleChangeText = React.useCallback(\n      (text: string) => {\n        if (!isControlled) {\n          setInternalValue(text);\n        }\n        onChange?.(text);\n        onChangeText?.(text);\n      },\n      [isControlled, onChange, onChangeText],\n    );\n\n    const handleContentSizeChange = React.useCallback(\n      (event: any) => {\n        if (minRows || maxRows) {\n          const { height: contentHeight } = event.nativeEvent.contentSize;\n          const lineHeight = 20; // Approximate line height\n\n          const minHeight = minRows ? minRows * lineHeight : contentHeight;\n          const maxHeight = maxRows ? maxRows * lineHeight : Infinity;\n\n          const newHeight = Math.max(\n            minHeight,\n            Math.min(maxHeight, contentHeight),\n          );\n          setHeight(newHeight);\n        }\n      },\n      [minRows, maxRows],\n    );\n\n    const styles = React.useMemo(() => {\n      const sizeStyles = {\n        sm: {\n          fontSize: 12,\n          paddingHorizontal: 8,\n          paddingVertical: 6,\n          minHeight: 60,\n          borderRadius: 4,\n        },\n        default: {\n          fontSize: 14,\n          paddingHorizontal: 12,\n          paddingVertical: 8,\n          minHeight: 80,\n          borderRadius: 6,\n        },\n        lg: {\n          fontSize: 16,\n          paddingHorizontal: 16,\n          paddingVertical: 12,\n          minHeight: 120,\n          borderRadius: 8,\n        },\n      };\n\n      const variantStyles = {\n        default: {\n          borderWidth: 1,\n          borderColor: theme.colors.border,\n          backgroundColor: theme.colors.background,\n        },\n        filled: {\n          borderWidth: 0,\n          backgroundColor: theme.colors.surface,\n        },\n        outline: {\n          borderWidth: 2,\n          borderColor: theme.colors.border,\n          backgroundColor: \"transparent\",\n        },\n      };\n\n      const currentSize = sizeStyles[size];\n      const currentVariant = variantStyles[variant];\n      const hasError = Boolean(error);\n\n      return createStyles({\n        container: {\n          width: \"100%\",\n        },\n        textInput: {\n          ...currentSize,\n          ...currentVariant,\n          color: theme.colors.text,\n          textAlignVertical,\n          opacity: disabled ? 0.5 : 1,\n          height: height || currentSize.minHeight,\n          borderColor: hasError\n            ? theme.colors.error\n            : \"borderColor\" in currentVariant\n              ? currentVariant.borderColor\n              : undefined,\n        },\n        helperContainer: {\n          marginTop: 4,\n          flexDirection: \"column\",\n        },\n        errorText: {\n          fontSize: 12,\n          color: theme.colors.error,\n          fontWeight: \"500\",\n        },\n        helperText: {\n          fontSize: 12,\n          color: theme.colors.textSecondary,\n        },\n        counterContainer: {\n          alignItems: \"flex-end\",\n          marginTop: 4,\n        },\n        counterText: {\n          fontSize: 11,\n          color: theme.colors.textSecondary,\n        },\n        counterTextNearLimit: {\n          color: \"#ca8a04\", // yellow-600\n        },\n        counterTextOverLimit: {\n          color: theme.colors.error,\n        },\n      });\n    }, [theme, size, variant, disabled, error, height, textAlignVertical]);\n\n    const hasError = Boolean(error);\n    const errorMessage = typeof error === \"string\" ? error : \"\";\n    const currentLength =\n      typeof textareaValue === \"string\" ? textareaValue.length : 0;\n\n    return (\n      <View style={[styles.container, style]} testID={testID}>\n        <TextInput\n          ref={ref}\n          style={styles.textInput}\n          value={textareaValue}\n          onChangeText={handleChangeText}\n          onContentSizeChange={handleContentSizeChange}\n          placeholder={placeholder}\n          placeholderTextColor={theme.colors.textSecondary}\n          editable={!disabled}\n          multiline={true}\n          numberOfLines={numberOfLines || rows}\n          maxLength={maxLength}\n          autoCapitalize={autoCapitalize}\n          autoCorrect={autoCorrect}\n          keyboardType={keyboardType}\n          textAlignVertical={textAlignVertical}\n          onFocus={onFocus}\n          onBlur={onBlur}\n          {...props}\n        />\n\n        {(errorMessage || helperText || maxLength) && (\n          <View style={styles.helperContainer}>\n            {errorMessage && (\n              <Text style={styles.errorText}>{errorMessage}</Text>\n            )}\n            {helperText && !hasError && (\n              <Text style={styles.helperText}>{helperText}</Text>\n            )}\n            {maxLength && (\n              <View style={styles.counterContainer}>\n                <Text\n                  style={[\n                    styles.counterText,\n                    currentLength / maxLength > 0.8 &&\n                      styles.counterTextNearLimit,\n                    currentLength > maxLength && styles.counterTextOverLimit,\n                  ]}\n                >\n                  {currentLength}/{maxLength}\n                </Text>\n              </View>\n            )}\n          </View>\n        )}\n      </View>\n    );\n  },\n);\n\nNativeTextareaComponent.displayName = \"Textarea\";\n\n// Character counter wrapper component (same as main component but with different props)\ninterface NativeTextareaWithCounterProps extends NativeTextareaComponentProps {\n  showCounter?: boolean;\n}\n\nconst NativeTextareaWithCounter = React.forwardRef<\n  any,\n  NativeTextareaWithCounterProps\n>(({ showCounter = true, ...props }, ref) => {\n  // For native, the counter is built into the main component\n  return <NativeTextareaComponent ref={ref} {...props} />;\n});\n\nNativeTextareaWithCounter.displayName = \"TextareaWithCounter\";\n\nexport {\n  NativeTextareaComponent as Textarea,\n  NativeTextareaWithCounter as TextareaWithCounter,\n};\nexport type {\n  NativeTextareaComponentProps as TextareaProps,\n  NativeTextareaWithCounterProps as TextareaWithCounterProps,\n};\n","// Native implementation of Accordion component for React Native\nimport * as React from \"react\";\nimport { createStyles } from \"../../../utils/native-styles\";\nimport { useTheme } from \"../../providers/theme-provider\";\nimport type {\n  NativeAccordionProps,\n  NativeAccordionItemProps,\n  NativeComponentRef,\n} from \"../types\";\n\n// Dynamic imports for React Native components\nlet View: any;\nlet Text: any;\nlet TouchableOpacity: any;\nlet Animated: any;\nlet LayoutAnimation: any;\n\ntry {\n  const RN = require(\"react-native\");\n  View = RN.View;\n  Text = RN.Text;\n  TouchableOpacity = RN.TouchableOpacity;\n  Animated = RN.Animated;\n  LayoutAnimation = RN.LayoutAnimation;\n} catch {\n  // Fallback for web environments\n  View = \"div\";\n  Text = \"span\";\n  TouchableOpacity = \"button\";\n  Animated = { View: \"div\" };\n  LayoutAnimation = { configureNext: () => {} };\n}\n\ninterface NativeSimpleAccordionItem {\n  id: string;\n  trigger: React.ReactNode;\n  content: React.ReactNode;\n  disabled?: boolean;\n}\n\nexport interface NativeAccordionComponentProps extends NativeAccordionProps {\n  items?: NativeSimpleAccordionItem[];\n  animationDuration?: number;\n  easing?: any;\n}\n\nconst NativeAccordionComponent = React.forwardRef<\n  any,\n  NativeAccordionComponentProps\n>(\n  (\n    {\n      type = \"single\",\n      collapsible = false,\n      value,\n      defaultValue,\n      onValueChange,\n      size = \"default\",\n      variant = \"default\",\n      items = [],\n      animationDuration = 300,\n      easing,\n      disabled = false,\n      style,\n      testID,\n      children,\n      ...props\n    },\n    ref,\n  ) => {\n    const { theme } = useTheme();\n    const [expandedItems, setExpandedItems] = React.useState<Set<string>>(\n      () => {\n        if (defaultValue) {\n          return new Set(\n            Array.isArray(defaultValue) ? defaultValue : [defaultValue],\n          );\n        }\n        return new Set();\n      },\n    );\n\n    // Controlled vs uncontrolled handling\n    const isControlled = value !== undefined;\n    const currentExpandedItems = isControlled\n      ? new Set(Array.isArray(value) ? value : value ? [value] : [])\n      : expandedItems;\n\n    const handleItemPress = React.useCallback(\n      (itemId: string) => {\n        const newExpandedItems = new Set(currentExpandedItems);\n\n        if (type === \"single\") {\n          if (newExpandedItems.has(itemId)) {\n            if (collapsible) {\n              newExpandedItems.clear();\n            }\n          } else {\n            newExpandedItems.clear();\n            newExpandedItems.add(itemId);\n          }\n        } else {\n          // multiple type\n          if (newExpandedItems.has(itemId)) {\n            newExpandedItems.delete(itemId);\n          } else {\n            newExpandedItems.add(itemId);\n          }\n        }\n\n        if (!isControlled) {\n          setExpandedItems(newExpandedItems);\n        }\n\n        // Configure animation\n        LayoutAnimation.configureNext({\n          duration: animationDuration,\n          update: {\n            type: LayoutAnimation.Types.easeInEaseOut,\n            property: LayoutAnimation.Properties.scaleY,\n          },\n          delete: {\n            duration: animationDuration / 2,\n            type: LayoutAnimation.Types.easeOut,\n            property: LayoutAnimation.Properties.opacity,\n          },\n        });\n\n        const newValue =\n          type === \"single\"\n            ? newExpandedItems.size > 0\n              ? (Array.from(newExpandedItems)[0] ?? \"\")\n              : \"\"\n            : Array.from(newExpandedItems);\n\n        onValueChange?.(newValue);\n      },\n      [\n        currentExpandedItems,\n        type,\n        collapsible,\n        isControlled,\n        animationDuration,\n        onValueChange,\n      ],\n    );\n\n    const styles = React.useMemo(() => {\n      const sizeStyles = {\n        sm: {\n          fontSize: 12,\n          padding: 12,\n          triggerPadding: 12,\n          contentPadding: 12,\n        },\n        default: {\n          fontSize: 14,\n          padding: 16,\n          triggerPadding: 16,\n          contentPadding: 16,\n        },\n        lg: {\n          fontSize: 16,\n          padding: 20,\n          triggerPadding: 20,\n          contentPadding: 20,\n        },\n      };\n\n      const variantStyles = {\n        default: {\n          backgroundColor: theme.colors.background,\n          borderColor: theme.colors.border,\n          borderWidth: 1,\n          borderRadius: 8,\n        },\n        outline: {\n          backgroundColor: \"transparent\",\n          borderColor: theme.colors.border,\n          borderWidth: 2,\n          borderRadius: 8,\n        },\n        ghost: {\n          backgroundColor: \"transparent\",\n          borderColor: \"transparent\",\n          borderWidth: 0,\n          borderRadius: 0,\n        },\n      };\n\n      const currentSize = sizeStyles[size];\n      const currentVariant = variantStyles[variant];\n\n      return createStyles({\n        container: {\n          ...currentVariant,\n          opacity: disabled ? 0.5 : 1,\n        },\n        item: {\n          borderBottomWidth: variant === \"ghost\" ? 0.5 : 1,\n          borderBottomColor:\n            variant === \"ghost\"\n              ? `${theme.colors.border}80`\n              : theme.colors.border,\n        },\n        lastItem: {\n          borderBottomWidth: 0,\n        },\n        trigger: {\n          flexDirection: \"row\",\n          alignItems: \"center\",\n          justifyContent: \"space-between\",\n          padding: currentSize.triggerPadding,\n          backgroundColor:\n            variant === \"ghost\" ? \"transparent\" : theme.colors.surface,\n        },\n        triggerPressed: {\n          backgroundColor: theme.colors.surface,\n          opacity: 0.8,\n        },\n        triggerText: {\n          flex: 1,\n          fontSize: currentSize.fontSize,\n          fontWeight: \"500\",\n          color: theme.colors.text,\n        },\n        chevron: {\n          marginLeft: 8,\n        },\n        chevronText: {\n          fontSize: 16,\n          color: theme.colors.textSecondary,\n          fontWeight: \"bold\",\n        },\n        content: {\n          overflow: \"hidden\",\n          padding: currentSize.contentPadding,\n          paddingTop: 0,\n          backgroundColor: theme.colors.background,\n        },\n        contentText: {\n          fontSize: currentSize.fontSize - 1,\n          color: theme.colors.textSecondary,\n          lineHeight: currentSize.fontSize * 1.4,\n        },\n      });\n    }, [theme, size, variant, disabled]);\n\n    const renderItem = React.useCallback(\n      (item: NativeSimpleAccordionItem, index: number) => {\n        const isExpanded = currentExpandedItems.has(item.id);\n        const isLast = index === items.length - 1;\n\n        return (\n          <View key={item.id} style={[styles.item, isLast && styles.lastItem]}>\n            <TouchableOpacity\n              style={styles.trigger}\n              onPress={() => handleItemPress(item.id)}\n              disabled={item.disabled || disabled}\n              activeOpacity={0.7}\n            >\n              <View style={{ flex: 1 }}>\n                {typeof item.trigger === \"string\" ? (\n                  <Text style={styles.triggerText}>{item.trigger}</Text>\n                ) : (\n                  item.trigger\n                )}\n              </View>\n              <View style={styles.chevron}>\n                <Text\n                  style={[\n                    styles.chevronText,\n                    { transform: [{ rotate: isExpanded ? \"180deg\" : \"0deg\" }] },\n                  ]}\n                >\n                  ▼\n                </Text>\n              </View>\n            </TouchableOpacity>\n\n            {isExpanded && (\n              <View style={styles.content}>\n                {typeof item.content === \"string\" ? (\n                  <Text style={styles.contentText}>{item.content}</Text>\n                ) : (\n                  item.content\n                )}\n              </View>\n            )}\n          </View>\n        );\n      },\n      [currentExpandedItems, styles, handleItemPress, disabled, items.length],\n    );\n\n    return (\n      <View ref={ref} style={[styles.container, style]} testID={testID}>\n        {items.map(renderItem)}\n        {children}\n      </View>\n    );\n  },\n);\n\nNativeAccordionComponent.displayName = \"Accordion\";\n\n// Individual accordion item component\ninterface NativeAccordionItemComponentProps extends NativeAccordionItemProps {\n  isExpanded?: boolean;\n  onToggle?: () => void;\n  size?: \"sm\" | \"default\" | \"lg\";\n  variant?: \"default\" | \"outline\" | \"ghost\";\n}\n\nconst NativeAccordionItem = React.forwardRef<\n  any,\n  NativeAccordionItemComponentProps\n>(\n  (\n    {\n      value,\n      trigger,\n      content,\n      isExpanded,\n      onToggle,\n      size = \"default\",\n      variant = \"default\",\n      style,\n      ...props\n    },\n    ref,\n  ) => {\n    const { theme } = useTheme();\n\n    const styles = React.useMemo(() => {\n      const sizeStyles = {\n        sm: { padding: 12, fontSize: 12 },\n        default: { padding: 16, fontSize: 14 },\n        lg: { padding: 20, fontSize: 16 },\n      };\n\n      const currentSize = sizeStyles[size];\n\n      return createStyles({\n        container: {\n          borderBottomWidth: 1,\n          borderBottomColor: theme.colors.border,\n        },\n        trigger: {\n          flexDirection: \"row\",\n          alignItems: \"center\",\n          justifyContent: \"space-between\",\n          padding: currentSize.padding,\n        },\n        triggerText: {\n          flex: 1,\n          fontSize: currentSize.fontSize,\n          fontWeight: \"500\",\n          color: theme.colors.text,\n        },\n        content: {\n          padding: currentSize.padding,\n          paddingTop: 0,\n        },\n      });\n    }, [theme, size]);\n\n    return (\n      <View ref={ref} style={[styles.container, style]} {...props}>\n        <TouchableOpacity style={styles.trigger} onPress={onToggle}>\n          {typeof trigger === \"string\" ? (\n            <Text style={styles.triggerText}>{trigger}</Text>\n          ) : (\n            trigger\n          )}\n          <Text\n            style={{ transform: [{ rotate: isExpanded ? \"180deg\" : \"0deg\" }] }}\n          >\n            ▼\n          </Text>\n        </TouchableOpacity>\n\n        {isExpanded && <View style={styles.content}>{content}</View>}\n      </View>\n    );\n  },\n);\n\nNativeAccordionItem.displayName = \"AccordionItem\";\n\nexport {\n  NativeAccordionComponent as Accordion,\n  NativeAccordionItem as AccordionItem,\n};\n\nexport type {\n  NativeAccordionComponentProps as AccordionProps,\n  NativeAccordionItemComponentProps as AccordionItemProps,\n  NativeSimpleAccordionItem as SimpleAccordionItem,\n};\n","// Native implementation of Breadcrumbs component for React Native\nimport * as React from \"react\";\nimport { createStyles } from \"../../../utils/native-styles\";\nimport { useTheme } from \"../../providers/theme-provider\";\nimport type {\n  NativeBreadcrumbsProps,\n  BreadcrumbItem,\n  NativeComponentRef,\n} from \"../types\";\n\n// Dynamic imports for React Native components\nlet View: any;\nlet Text: any;\nlet TouchableOpacity: any;\nlet ScrollView: any;\n\ntry {\n  const RN = require(\"react-native\");\n  View = RN.View;\n  Text = RN.Text;\n  TouchableOpacity = RN.TouchableOpacity;\n  ScrollView = RN.ScrollView;\n} catch {\n  // Fallback for web environments\n  View = \"div\";\n  Text = \"span\";\n  TouchableOpacity = \"button\";\n  ScrollView = \"div\";\n}\n\nexport interface NativeBreadcrumbsComponentProps extends NativeBreadcrumbsProps {}\n\nconst NativeBreadcrumbsComponent = React.forwardRef<\n  any,\n  NativeBreadcrumbsComponentProps\n>(\n  (\n    {\n      items,\n      separator,\n      maxItems = 0,\n      itemsBeforeCollapse = 1,\n      itemsAfterCollapse = 1,\n      size = \"default\",\n      variant = \"default\",\n      disabled = false,\n      style,\n      testID,\n      ...props\n    },\n    ref,\n  ) => {\n    const { theme } = useTheme();\n\n    const processedItems = React.useMemo(() => {\n      if (maxItems <= 0 || items.length <= maxItems) {\n        return items;\n      }\n\n      const totalItemsToShow = itemsBeforeCollapse + itemsAfterCollapse;\n      if (totalItemsToShow >= items.length) {\n        return items;\n      }\n\n      const beforeItems = items.slice(0, itemsBeforeCollapse);\n      const afterItems = items.slice(items.length - itemsAfterCollapse);\n\n      return [\n        ...beforeItems,\n        { label: \"…\", disabled: true } as BreadcrumbItem,\n        ...afterItems,\n      ];\n    }, [items, maxItems, itemsBeforeCollapse, itemsAfterCollapse]);\n\n    const handleItemPress = React.useCallback(\n      (item: BreadcrumbItem, index: number) => {\n        if (item.disabled || disabled) return;\n\n        if (item.onClick) {\n          item.onClick();\n        }\n      },\n      [disabled],\n    );\n\n    const styles = React.useMemo(() => {\n      const sizeStyles = {\n        sm: {\n          fontSize: 12,\n          iconSize: 12,\n          spacing: 4,\n          padding: 4,\n        },\n        default: {\n          fontSize: 14,\n          iconSize: 16,\n          spacing: 6,\n          padding: 6,\n        },\n        lg: {\n          fontSize: 16,\n          iconSize: 20,\n          spacing: 8,\n          padding: 8,\n        },\n      };\n\n      const variantStyles = {\n        default: {\n          textColor: theme.colors.textSecondary,\n          lastItemColor: theme.colors.text,\n          activeColor: theme.colors.primary,\n        },\n        ghost: {\n          textColor: `${theme.colors.textSecondary}B3`, // 70% opacity\n          lastItemColor: `${theme.colors.text}B3`,\n          activeColor: `${theme.colors.primary}B3`,\n        },\n      };\n\n      const currentSize = sizeStyles[size];\n      const currentVariant = variantStyles[variant];\n\n      return createStyles({\n        container: {\n          opacity: disabled ? 0.5 : 1,\n        },\n        scrollView: {\n          flexGrow: 0,\n        },\n        breadcrumbsContainer: {\n          flexDirection: \"row\",\n          alignItems: \"center\",\n          paddingHorizontal: currentSize.spacing,\n        },\n        item: {\n          flexDirection: \"row\",\n          alignItems: \"center\",\n        },\n        itemContent: {\n          flexDirection: \"row\",\n          alignItems: \"center\",\n          paddingHorizontal: currentSize.padding,\n          paddingVertical: currentSize.padding / 2,\n          borderRadius: 4,\n        },\n        itemText: {\n          fontSize: currentSize.fontSize,\n          color: currentVariant.textColor,\n          marginLeft: currentSize.spacing / 2,\n        },\n        lastItemText: {\n          fontSize: currentSize.fontSize,\n          color: currentVariant.lastItemColor,\n          fontWeight: \"600\",\n          marginLeft: currentSize.spacing / 2,\n        },\n        clickableItem: {\n          // No additional styles needed, handled by TouchableOpacity\n        },\n        disabledItem: {\n          opacity: 0.5,\n        },\n        separator: {\n          marginHorizontal: currentSize.spacing,\n        },\n        separatorText: {\n          fontSize: currentSize.fontSize,\n          color: currentVariant.textColor,\n          fontWeight: \"400\",\n        },\n        icon: {\n          width: currentSize.iconSize,\n          height: currentSize.iconSize,\n        },\n        ellipsis: {\n          fontSize: currentSize.fontSize,\n          color: currentVariant.textColor,\n          fontWeight: \"bold\",\n        },\n      });\n    }, [theme, size, variant, disabled]);\n\n    const renderSeparator = React.useCallback(\n      (index: number) => {\n        if (separator) {\n          return (\n            <View key={`separator-${index}`} style={styles.separator}>\n              {separator}\n            </View>\n          );\n        }\n\n        return (\n          <View key={`separator-${index}`} style={styles.separator}>\n            <Text style={styles.separatorText}>›</Text>\n          </View>\n        );\n      },\n      [separator, styles],\n    );\n\n    const renderItem = React.useCallback(\n      (item: BreadcrumbItem, index: number) => {\n        const isLast = index === processedItems.length - 1;\n        const isClickable = !item.disabled && !disabled && !!item.onClick;\n        const isCollapsed = item.label === \"…\";\n\n        const itemContent = (\n          <View style={styles.itemContent}>\n            {item.icon && <View style={styles.icon}>{item.icon}</View>}\n            <Text\n              style={isLast ? styles.lastItemText : styles.itemText}\n              numberOfLines={1}\n            >\n              {item.label}\n            </Text>\n          </View>\n        );\n\n        if (isCollapsed) {\n          return (\n            <View key={`item-${index}`} style={styles.item}>\n              <View style={[styles.itemContent, styles.disabledItem]}>\n                <Text style={styles.ellipsis}>…</Text>\n              </View>\n            </View>\n          );\n        }\n\n        const itemElement = isClickable ? (\n          <TouchableOpacity\n            onPress={() => handleItemPress(item, index)}\n            disabled={item.disabled || disabled}\n            activeOpacity={0.7}\n            style={[styles.clickableItem, item.disabled && styles.disabledItem]}\n          >\n            {itemContent}\n          </TouchableOpacity>\n        ) : (\n          <View style={[item.disabled && styles.disabledItem]}>\n            {itemContent}\n          </View>\n        );\n\n        return (\n          <React.Fragment key={`item-${index}`}>\n            <View style={styles.item}>{itemElement}</View>\n            {!isLast && renderSeparator(index)}\n          </React.Fragment>\n        );\n      },\n      [\n        processedItems.length,\n        handleItemPress,\n        renderSeparator,\n        styles,\n        disabled,\n      ],\n    );\n\n    return (\n      <View ref={ref} style={[styles.container, style]} testID={testID}>\n        <ScrollView\n          horizontal\n          showsHorizontalScrollIndicator={false}\n          style={styles.scrollView}\n          contentContainerStyle={styles.breadcrumbsContainer}\n        >\n          {processedItems.map(renderItem)}\n        </ScrollView>\n      </View>\n    );\n  },\n);\n\nNativeBreadcrumbsComponent.displayName = \"Breadcrumbs\";\n\n// Simple breadcrumbs that takes a path string\ninterface NativeSimpleBreadcrumbsProps extends Omit<\n  NativeBreadcrumbsComponentProps,\n  \"items\"\n> {\n  path: string;\n  pathSeparator?: string;\n  rootLabel?: string;\n  onNavigate?: (path: string, index: number) => void;\n}\n\nconst NativeSimpleBreadcrumbs = React.forwardRef<\n  any,\n  NativeSimpleBreadcrumbsProps\n>(\n  (\n    { path, pathSeparator = \"/\", rootLabel = \"Home\", onNavigate, ...props },\n    ref,\n  ) => {\n    const items = React.useMemo(() => {\n      const segments = path.split(pathSeparator).filter(Boolean);\n      const breadcrumbItems: BreadcrumbItem[] = [];\n\n      // Add root item\n      breadcrumbItems.push({\n        label: rootLabel,\n        onClick: () => onNavigate?.(\"\", 0),\n      });\n\n      // Add path segments\n      segments.forEach((segment, index) => {\n        const fullPath = segments.slice(0, index + 1).join(pathSeparator);\n        const label = segment.charAt(0).toUpperCase() + segment.slice(1);\n\n        breadcrumbItems.push({\n          label,\n          onClick: () => onNavigate?.(fullPath, index + 1),\n        });\n      });\n\n      return breadcrumbItems;\n    }, [path, pathSeparator, rootLabel, onNavigate]);\n\n    return <NativeBreadcrumbsComponent ref={ref} items={items} {...props} />;\n  },\n);\n\nNativeSimpleBreadcrumbs.displayName = \"SimpleBreadcrumbs\";\n\nexport {\n  NativeBreadcrumbsComponent as Breadcrumbs,\n  NativeSimpleBreadcrumbs as SimpleBreadcrumbs,\n};\n\nexport type {\n  NativeBreadcrumbsComponentProps as BreadcrumbsProps,\n  NativeSimpleBreadcrumbsProps as SimpleBreadcrumbsProps,\n};\n","// Native implementation of Empty State component for React Native\nimport * as React from \"react\";\nimport { createStyles } from \"../../../utils/native-styles\";\nimport { useTheme } from \"../../providers/theme-provider\";\nimport type { NativeEmptyStateProps, NativeComponentRef } from \"../types\";\n\n// Dynamic imports for React Native components\nlet View: any;\nlet Text: any;\nlet TouchableOpacity: any;\nlet ScrollView: any;\n\ntry {\n  const RN = require(\"react-native\");\n  View = RN.View;\n  Text = RN.Text;\n  TouchableOpacity = RN.TouchableOpacity;\n  ScrollView = RN.ScrollView;\n} catch {\n  // Fallback for web environments\n  View = \"div\";\n  Text = \"span\";\n  TouchableOpacity = \"button\";\n  ScrollView = \"div\";\n}\n\nexport interface NativeEmptyStateComponentProps extends NativeEmptyStateProps {}\n\nconst NativeEmptyStateComponent = React.forwardRef<\n  any,\n  NativeEmptyStateComponentProps\n>(\n  (\n    {\n      title,\n      description,\n      icon,\n      illustration,\n      action,\n      secondaryAction,\n      size = \"default\",\n      variant = \"default\",\n      disabled = false,\n      style,\n      testID,\n      ...props\n    },\n    ref,\n  ) => {\n    const { theme } = useTheme();\n\n    const styles = React.useMemo(() => {\n      const sizeStyles = {\n        sm: {\n          padding: 32,\n          spacing: 12,\n          iconSize: 48,\n          illustrationSize: 128,\n          titleSize: 16,\n          descriptionSize: 13,\n        },\n        default: {\n          padding: 48,\n          spacing: 16,\n          iconSize: 64,\n          illustrationSize: 192,\n          titleSize: 18,\n          descriptionSize: 14,\n        },\n        lg: {\n          padding: 64,\n          spacing: 24,\n          iconSize: 80,\n          illustrationSize: 256,\n          titleSize: 20,\n          descriptionSize: 16,\n        },\n      };\n\n      const variantStyles = {\n        default: {\n          paddingVertical: sizeStyles[size].padding,\n        },\n        minimal: {\n          paddingVertical: sizeStyles[size].padding / 2,\n        },\n        illustrated: {\n          paddingVertical: sizeStyles[size].padding * 1.5,\n        },\n      };\n\n      const currentSize = sizeStyles[size];\n      const currentVariant = variantStyles[variant];\n\n      return createStyles({\n        container: {\n          flex: 1,\n          alignItems: \"center\",\n          justifyContent: \"center\",\n          paddingHorizontal: currentSize.padding,\n          ...currentVariant,\n          opacity: disabled ? 0.5 : 1,\n        },\n        scrollContainer: {\n          flexGrow: 1,\n          justifyContent: \"center\",\n        },\n        content: {\n          alignItems: \"center\",\n          justifyContent: \"center\",\n          maxWidth: 400,\n        },\n        illustrationContainer: {\n          width: currentSize.illustrationSize,\n          height: currentSize.illustrationSize,\n          alignItems: \"center\",\n          justifyContent: \"center\",\n          marginBottom: currentSize.spacing,\n        },\n        iconContainer: {\n          width: currentSize.iconSize,\n          height: currentSize.iconSize,\n          borderRadius: currentSize.iconSize / 2,\n          backgroundColor: theme.colors.surface,\n          alignItems: \"center\",\n          justifyContent: \"center\",\n          marginBottom: currentSize.spacing,\n        },\n        textContainer: {\n          alignItems: \"center\",\n          marginBottom: currentSize.spacing,\n        },\n        title: {\n          fontSize: currentSize.titleSize,\n          fontWeight: \"600\",\n          color: theme.colors.text,\n          textAlign: \"center\",\n          marginBottom: 8,\n        },\n        description: {\n          fontSize: currentSize.descriptionSize,\n          color: theme.colors.textSecondary,\n          textAlign: \"center\",\n          lineHeight: currentSize.descriptionSize * 1.4,\n          maxWidth: 320,\n        },\n        actionsContainer: {\n          flexDirection: \"row\",\n          alignItems: \"center\",\n          justifyContent: \"center\",\n          flexWrap: \"wrap\",\n          gap: 12,\n        },\n        actionButton: {\n          paddingHorizontal: 20,\n          paddingVertical: 10,\n          borderRadius: 6,\n          alignItems: \"center\",\n          justifyContent: \"center\",\n          minWidth: 100,\n        },\n        primaryAction: {\n          backgroundColor: theme.colors.primary,\n        },\n        secondaryAction: {\n          backgroundColor: \"transparent\",\n          borderWidth: 1,\n          borderColor: theme.colors.border,\n        },\n        actionText: {\n          fontSize: currentSize.descriptionSize,\n          fontWeight: \"500\",\n        },\n        primaryActionText: {\n          color: \"#ffffff\",\n        },\n        secondaryActionText: {\n          color: theme.colors.text,\n        },\n      });\n    }, [theme, size, variant, disabled]);\n\n    const hasIllustration = variant === \"illustrated\" && illustration;\n    const hasIcon = !hasIllustration && icon;\n\n    const renderAction = (actionConfig: any, isPrimary: boolean) => (\n      <TouchableOpacity\n        style={[\n          styles.actionButton,\n          isPrimary ? styles.primaryAction : styles.secondaryAction,\n        ]}\n        onPress={actionConfig.onClick}\n        disabled={disabled}\n        activeOpacity={0.8}\n      >\n        <Text\n          style={[\n            styles.actionText,\n            isPrimary ? styles.primaryActionText : styles.secondaryActionText,\n          ]}\n        >\n          {actionConfig.label}\n        </Text>\n      </TouchableOpacity>\n    );\n\n    return (\n      <ScrollView\n        ref={ref}\n        style={{ flex: 1 }}\n        contentContainerStyle={styles.scrollContainer}\n        showsVerticalScrollIndicator={false}\n        testID={testID}\n      >\n        <View style={[styles.container, style]}>\n          <View style={styles.content}>\n            {/* Illustration */}\n            {hasIllustration && (\n              <View style={styles.illustrationContainer}>{illustration}</View>\n            )}\n\n            {/* Icon */}\n            {hasIcon && <View style={styles.iconContainer}>{icon}</View>}\n\n            {/* Content */}\n            <View style={styles.textContainer}>\n              <Text style={styles.title}>{title}</Text>\n\n              {description && (\n                <Text style={styles.description}>{description}</Text>\n              )}\n            </View>\n\n            {/* Actions */}\n            {(action || secondaryAction) && (\n              <View style={styles.actionsContainer}>\n                {action && renderAction(action, true)}\n                {secondaryAction && renderAction(secondaryAction, false)}\n              </View>\n            )}\n          </View>\n        </View>\n      </ScrollView>\n    );\n  },\n);\n\nNativeEmptyStateComponent.displayName = \"EmptyState\";\n\n// Pre-built empty state components for common scenarios\ninterface NativeNoDataEmptyStateProps extends Omit<\n  NativeEmptyStateComponentProps,\n  \"title\" | \"icon\"\n> {\n  title?: string;\n  description?: string;\n  onRefresh?: () => void;\n  refreshLabel?: string;\n}\n\nconst NativeNoDataEmptyState = React.forwardRef<\n  any,\n  NativeNoDataEmptyStateProps\n>(\n  (\n    {\n      title = \"No data found\",\n      description = \"There's nothing to display here yet.\",\n      onRefresh,\n      refreshLabel = \"Refresh\",\n      ...props\n    },\n    ref,\n  ) => {\n    const { theme } = useTheme();\n\n    const defaultIcon = (\n      <View\n        style={{\n          width: 24,\n          height: 24,\n          alignItems: \"center\",\n          justifyContent: \"center\",\n        }}\n      >\n        <Text style={{ fontSize: 24, color: theme.colors.textSecondary }}>\n          📄\n        </Text>\n      </View>\n    );\n\n    return (\n      <NativeEmptyStateComponent\n        ref={ref}\n        title={title}\n        description={description}\n        icon={defaultIcon}\n        action={\n          onRefresh\n            ? {\n                label: refreshLabel,\n                onClick: onRefresh,\n              }\n            : undefined\n        }\n        {...props}\n      />\n    );\n  },\n);\n\nNativeNoDataEmptyState.displayName = \"NoDataEmptyState\";\n\ninterface NativeNoResultsEmptyStateProps extends Omit<\n  NativeEmptyStateComponentProps,\n  \"title\" | \"icon\"\n> {\n  title?: string;\n  description?: string;\n  searchTerm?: string;\n  onClearSearch?: () => void;\n  clearLabel?: string;\n}\n\nconst NativeNoResultsEmptyState = React.forwardRef<\n  any,\n  NativeNoResultsEmptyStateProps\n>(\n  (\n    {\n      title = \"No results found\",\n      description,\n      searchTerm,\n      onClearSearch,\n      clearLabel = \"Clear search\",\n      ...props\n    },\n    ref,\n  ) => {\n    const { theme } = useTheme();\n\n    const defaultDescription = searchTerm\n      ? `No results found for \"${searchTerm}\". Try adjusting your search terms.`\n      : \"Try adjusting your search terms or filters.\";\n\n    const defaultIcon = (\n      <View\n        style={{\n          width: 24,\n          height: 24,\n          alignItems: \"center\",\n          justifyContent: \"center\",\n        }}\n      >\n        <Text style={{ fontSize: 24, color: theme.colors.textSecondary }}>\n          🔍\n        </Text>\n      </View>\n    );\n\n    return (\n      <NativeEmptyStateComponent\n        ref={ref}\n        title={title}\n        description={description || defaultDescription}\n        icon={defaultIcon}\n        action={\n          onClearSearch\n            ? {\n                label: clearLabel,\n                onClick: onClearSearch,\n              }\n            : undefined\n        }\n        {...props}\n      />\n    );\n  },\n);\n\nNativeNoResultsEmptyState.displayName = \"NoResultsEmptyState\";\n\ninterface NativeErrorEmptyStateProps extends Omit<\n  NativeEmptyStateComponentProps,\n  \"title\" | \"icon\"\n> {\n  title?: string;\n  description?: string;\n  onRetry?: () => void;\n  retryLabel?: string;\n}\n\nconst NativeErrorEmptyState = React.forwardRef<any, NativeErrorEmptyStateProps>(\n  (\n    {\n      title = \"Something went wrong\",\n      description = \"We encountered an error while loading this content.\",\n      onRetry,\n      retryLabel = \"Try again\",\n      ...props\n    },\n    ref,\n  ) => {\n    const { theme } = useTheme();\n\n    const defaultIcon = (\n      <View\n        style={{\n          width: 24,\n          height: 24,\n          alignItems: \"center\",\n          justifyContent: \"center\",\n        }}\n      >\n        <Text style={{ fontSize: 24, color: theme.colors.error }}>⚠️</Text>\n      </View>\n    );\n\n    return (\n      <NativeEmptyStateComponent\n        ref={ref}\n        title={title}\n        description={description}\n        icon={defaultIcon}\n        action={\n          onRetry\n            ? {\n                label: retryLabel,\n                onClick: onRetry,\n              }\n            : undefined\n        }\n        {...props}\n      />\n    );\n  },\n);\n\nNativeErrorEmptyState.displayName = \"ErrorEmptyState\";\n\nexport {\n  NativeEmptyStateComponent as EmptyState,\n  NativeNoDataEmptyState as NoDataEmptyState,\n  NativeNoResultsEmptyState as NoResultsEmptyState,\n  NativeErrorEmptyState as ErrorEmptyState,\n};\n\nexport type {\n  NativeEmptyStateComponentProps as EmptyStateProps,\n  NativeNoDataEmptyStateProps as NoDataEmptyStateProps,\n  NativeNoResultsEmptyStateProps as NoResultsEmptyStateProps,\n  NativeErrorEmptyStateProps as ErrorEmptyStateProps,\n};\n","import React from \"react\";\nimport { createStyles } from \"../../../utils/native-styles\";\n\ntype ViewProps = {\n  style?: object;\n  children?: React.ReactNode;\n};\ntype StyleProp<T> = T | T[];\ntype ViewStyle = object;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet View: React.ComponentType<any> = \"div\" as any;\n\n// @ts-expect-error - This is a safe check for a global flag.\nif (typeof global !== \"undefined\" && global.IS_REACT_NATIVE) {\n  // eslint-disable-next-line @typescript-eslint/no-require-imports\n  View = require(\"react-native\").View;\n}\n\ninterface SectionProps extends ViewProps {\n  children: React.ReactNode;\n  style?: StyleProp<ViewStyle>;\n}\n\nexport function Section({ style, children, ...props }: SectionProps) {\n  const styles = getStyles();\n\n  return (\n    <View style={[styles.section, style]} {...props}>\n      {children}\n    </View>\n  );\n}\n\nconst getStyles = () =>\n  createStyles({\n    section: {\n      paddingVertical: 24, // Example value, adjust as needed\n    },\n  });\n","import React from \"react\";\nimport { createStyles } from \"../../../utils/native-styles\";\n\ntype ViewProps = {\n  style?: object;\n  children?: React.ReactNode;\n};\ntype StyleProp<T> = T | T[];\ntype ViewStyle = object;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet View: React.ComponentType<any> = \"div\" as any;\n\n// @ts-expect-error - This is a safe check for a global flag.\nif (typeof global !== \"undefined\" && global.IS_REACT_NATIVE) {\n  // eslint-disable-next-line @typescript-eslint/no-require-imports\n  View = require(\"react-native\").View;\n}\n\ninterface GridProps extends ViewProps {\n  children: React.ReactNode;\n  cols?: number;\n  gap?: number;\n  style?: StyleProp<ViewStyle>;\n}\n\nexport function Grid({\n  style,\n  cols = 1,\n  gap = 4,\n  children,\n  ...props\n}: GridProps) {\n  const styles = getStyles();\n  const childrenArray = React.Children.toArray(children);\n\n  // Calculate item width based on columns and gap\n  const itemWidth = `${100 / cols - (gap * (cols - 1)) / cols}%`;\n\n  return (\n    <View style={[styles.container, style]} {...props}>\n      {childrenArray.map((child, index) => (\n        <View\n          key={index}\n          style={[\n            styles.item,\n            {\n              width: itemWidth,\n              marginRight: (index + 1) % cols === 0 ? 0 : gap,\n              marginBottom: index < childrenArray.length - cols ? gap : 0,\n            },\n          ]}\n        >\n          {child}\n        </View>\n      ))}\n    </View>\n  );\n}\n\nconst getStyles = () =>\n  createStyles({\n    container: {\n      flexDirection: \"row\",\n      flexWrap: \"wrap\",\n      width: \"100%\",\n    },\n    item: {\n      flexShrink: 0,\n    },\n  });\n","import React from \"react\";\nimport {\n  View,\n  Text,\n  TouchableOpacity,\n  StyleSheet,\n  SafeAreaView,\n  StatusBar,\n  Platform,\n  Image,\n} from \"react-native\";\nimport type { HeaderProps } from \"../types\";\n\ninterface NativeHeaderProps extends Omit<\n  HeaderProps,\n  \"className\" | \"breadcrumbs\"\n> {\n  style?: any;\n  onMenuPress?: () => void;\n  showMenuButton?: boolean;\n  statusBarStyle?: \"light-content\" | \"dark-content\";\n  statusBarBackgroundColor?: string;\n}\n\nexport const Header: React.FC<NativeHeaderProps> = ({\n  title,\n  subtitle,\n  actions = [],\n  user,\n  userMenuActions = [],\n  showSearch = false,\n  onSearchChange,\n  searchPlaceholder = \"Search...\",\n  variant = \"default\",\n  onMenuPress,\n  showMenuButton = true,\n  statusBarStyle = \"dark-content\",\n  statusBarBackgroundColor = \"#FFFFFF\",\n  style,\n}) => {\n  const headerHeight = 56;\n  const paddingTop = Platform.OS === \"ios\" ? 0 : StatusBar.currentHeight || 0;\n\n  const renderUserAvatar = () => {\n    if (!user) return null;\n\n    return (\n      <TouchableOpacity style={styles.userContainer} activeOpacity={0.7}>\n        <View style={styles.userInfo}>\n          {user.avatar ? (\n            <Image source={{ uri: user.avatar }} style={styles.avatar} />\n          ) : (\n            <View style={styles.avatarPlaceholder}>\n              <Text style={styles.avatarText}>\n                {user.name?.charAt(0)?.toUpperCase() || \"U\"}\n              </Text>\n            </View>\n          )}\n          <View style={styles.userTextContainer}>\n            <Text style={styles.userName} numberOfLines={1}>\n              {user.name}\n            </Text>\n            {user.role && (\n              <Text style={styles.userRole} numberOfLines={1}>\n                {user.role}\n              </Text>\n            )}\n          </View>\n        </View>\n      </TouchableOpacity>\n    );\n  };\n\n  const renderActions = () => {\n    if (actions.length === 0) return null;\n\n    return (\n      <View style={styles.actionsContainer}>\n        {actions.slice(0, 3).map((action, index) => (\n          <TouchableOpacity\n            key={action.id}\n            style={[\n              styles.actionButton,\n              action.variant === \"outline\" && styles.actionButtonOutline,\n            ]}\n            onPress={action.onClick}\n            activeOpacity={0.7}\n          >\n            {action.icon && (\n              <View style={styles.actionIcon}>\n                <Text style={styles.actionIconText}>\n                  {typeof action.icon === \"string\" ? action.icon : \"•\"}\n                </Text>\n              </View>\n            )}\n            {action.badge && (\n              <View style={styles.actionBadge}>\n                <Text style={styles.actionBadgeText}>\n                  {typeof action.badge === \"number\" && action.badge > 99\n                    ? \"99+\"\n                    : action.badge}\n                </Text>\n              </View>\n            )}\n          </TouchableOpacity>\n        ))}\n      </View>\n    );\n  };\n\n  return (\n    <>\n      <StatusBar\n        barStyle={statusBarStyle}\n        backgroundColor={statusBarBackgroundColor}\n        translucent={Platform.OS === \"android\"}\n      />\n      <SafeAreaView\n        style={[styles.safeArea, { backgroundColor: statusBarBackgroundColor }]}\n      >\n        <View style={[styles.container, { height: headerHeight }, style]}>\n          {/* Left section */}\n          <View style={styles.leftSection}>\n            {showMenuButton && onMenuPress && (\n              <TouchableOpacity\n                style={styles.menuButton}\n                onPress={onMenuPress}\n                activeOpacity={0.7}\n              >\n                <Text style={styles.menuIcon}>☰</Text>\n              </TouchableOpacity>\n            )}\n\n            <View style={styles.titleContainer}>\n              <Text style={styles.title} numberOfLines={1}>\n                {title}\n              </Text>\n              {subtitle && (\n                <Text style={styles.subtitle} numberOfLines={1}>\n                  {subtitle}\n                </Text>\n              )}\n            </View>\n          </View>\n\n          {/* Right section */}\n          <View style={styles.rightSection}>\n            {renderActions()}\n            {renderUserAvatar()}\n          </View>\n        </View>\n      </SafeAreaView>\n    </>\n  );\n};\n\nconst styles = StyleSheet.create({\n  safeArea: {\n    backgroundColor: \"#FFFFFF\",\n  },\n  container: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n    justifyContent: \"space-between\",\n    paddingHorizontal: 16,\n    backgroundColor: \"#FFFFFF\",\n    borderBottomWidth: 1,\n    borderBottomColor: \"#E5E7EB\",\n    elevation: 2,\n    shadowColor: \"#000\",\n    shadowOffset: { width: 0, height: 1 },\n    shadowOpacity: 0.1,\n    shadowRadius: 2,\n  },\n  leftSection: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n    flex: 1,\n  },\n  rightSection: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n  },\n  menuButton: {\n    width: 40,\n    height: 40,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    marginRight: 8,\n  },\n  menuIcon: {\n    fontSize: 18,\n    color: \"#374151\",\n  },\n  titleContainer: {\n    flex: 1,\n  },\n  title: {\n    fontSize: 18,\n    fontWeight: \"600\",\n    color: \"#111827\",\n  },\n  subtitle: {\n    fontSize: 14,\n    color: \"#6B7280\",\n    marginTop: 2,\n  },\n  actionsContainer: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n    marginRight: 12,\n  },\n  actionButton: {\n    width: 40,\n    height: 40,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    marginLeft: 8,\n    borderRadius: 20,\n    position: \"relative\",\n  },\n  actionButtonOutline: {\n    borderWidth: 1,\n    borderColor: \"#D1D5DB\",\n  },\n  actionIcon: {\n    justifyContent: \"center\",\n    alignItems: \"center\",\n  },\n  actionIconText: {\n    fontSize: 16,\n    color: \"#374151\",\n  },\n  actionBadge: {\n    position: \"absolute\",\n    top: 6,\n    right: 6,\n    backgroundColor: \"#EF4444\",\n    borderRadius: 8,\n    minWidth: 16,\n    height: 16,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    paddingHorizontal: 4,\n  },\n  actionBadgeText: {\n    fontSize: 10,\n    fontWeight: \"600\",\n    color: \"#FFFFFF\",\n  },\n  userContainer: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n  },\n  userInfo: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n  },\n  avatar: {\n    width: 32,\n    height: 32,\n    borderRadius: 16,\n  },\n  avatarPlaceholder: {\n    width: 32,\n    height: 32,\n    borderRadius: 16,\n    backgroundColor: \"#3B82F6\",\n    justifyContent: \"center\",\n    alignItems: \"center\",\n  },\n  avatarText: {\n    fontSize: 14,\n    fontWeight: \"600\",\n    color: \"#FFFFFF\",\n  },\n  userTextContainer: {\n    marginLeft: 8,\n    maxWidth: 120,\n  },\n  userName: {\n    fontSize: 14,\n    fontWeight: \"600\",\n    color: \"#111827\",\n  },\n  userRole: {\n    fontSize: 12,\n    color: \"#6B7280\",\n    marginTop: 1,\n  },\n});\n","import React, { useState, useRef, useEffect } from \"react\";\nimport {\n  View,\n  Text,\n  TouchableOpacity,\n  ScrollView,\n  Modal,\n  Animated,\n  Dimensions,\n  StyleSheet,\n  SafeAreaView,\n  Platform,\n} from \"react-native\";\nimport type { SidebarProps, NavigationItem } from \"../types\";\n\ninterface NativeDrawerProps extends Omit<SidebarProps, \"className\"> {\n  style?: any;\n  isVisible: boolean;\n  onClose: () => void;\n  position?: \"left\" | \"right\";\n}\n\ninterface NavigationItemComponentProps {\n  item: NavigationItem;\n  level: number;\n  onItemPress: (item: NavigationItem) => void;\n}\n\nconst NavigationItemComponent: React.FC<NavigationItemComponentProps> = ({\n  item,\n  level,\n  onItemPress,\n}) => {\n  const [isExpanded, setIsExpanded] = useState(item.isActive || false);\n\n  const handlePress = () => {\n    if (item.children && item.children.length > 0) {\n      setIsExpanded(!isExpanded);\n    } else {\n      onItemPress(item);\n    }\n  };\n\n  const paddingLeft = 16 + level * 20;\n\n  return (\n    <View>\n      <TouchableOpacity\n        style={[\n          styles.navigationItem,\n          { paddingLeft },\n          item.isActive && styles.navigationItemActive,\n          item.disabled && styles.navigationItemDisabled,\n        ]}\n        onPress={handlePress}\n        disabled={item.disabled}\n        activeOpacity={0.7}\n      >\n        {/* Icon */}\n        {item.icon && (\n          <View style={styles.navigationIcon}>\n            <Text\n              style={[\n                styles.navigationIconText,\n                item.isActive && styles.navigationIconTextActive,\n              ]}\n            >\n              {typeof item.icon === \"string\" ? item.icon : \"•\"}\n            </Text>\n          </View>\n        )}\n\n        {/* Label */}\n        <Text\n          style={[\n            styles.navigationLabel,\n            item.isActive && styles.navigationLabelActive,\n            item.disabled && styles.navigationLabelDisabled,\n          ]}\n          numberOfLines={1}\n        >\n          {item.label}\n        </Text>\n\n        {/* Badge */}\n        {item.badge && (\n          <View style={styles.navigationBadge}>\n            <Text style={styles.navigationBadgeText}>\n              {typeof item.badge === \"number\" && item.badge > 99\n                ? \"99+\"\n                : item.badge}\n            </Text>\n          </View>\n        )}\n\n        {/* Expand indicator */}\n        {item.children && item.children.length > 0 && (\n          <Text\n            style={[\n              styles.expandIndicator,\n              isExpanded && styles.expandIndicatorExpanded,\n            ]}\n          >\n            ▶\n          </Text>\n        )}\n      </TouchableOpacity>\n\n      {/* Children */}\n      {item.children && isExpanded && (\n        <View>\n          {item.children.map((child) => (\n            <NavigationItemComponent\n              key={child.id}\n              item={child}\n              level={level + 1}\n              onItemPress={onItemPress}\n            />\n          ))}\n        </View>\n      )}\n    </View>\n  );\n};\n\nexport const Drawer: React.FC<NativeDrawerProps> = ({\n  navigation,\n  logo,\n  footer,\n  variant = \"default\",\n  isVisible,\n  onClose,\n  position = \"left\",\n  style,\n}) => {\n  const slideAnim = useRef(new Animated.Value(0)).current;\n  const fadeAnim = useRef(new Animated.Value(0)).current;\n  const screenWidth = Dimensions.get(\"window\").width;\n  const drawerWidth = Math.min(screenWidth * 0.8, 300);\n\n  useEffect(() => {\n    if (isVisible) {\n      Animated.parallel([\n        Animated.timing(fadeAnim, {\n          toValue: 1,\n          duration: 200,\n          useNativeDriver: true,\n        }),\n        Animated.timing(slideAnim, {\n          toValue: 1,\n          duration: 250,\n          useNativeDriver: true,\n        }),\n      ]).start();\n    } else {\n      Animated.parallel([\n        Animated.timing(fadeAnim, {\n          toValue: 0,\n          duration: 150,\n          useNativeDriver: true,\n        }),\n        Animated.timing(slideAnim, {\n          toValue: 0,\n          duration: 200,\n          useNativeDriver: true,\n        }),\n      ]).start();\n    }\n  }, [isVisible, fadeAnim, slideAnim]);\n\n  const handleItemPress = (item: NavigationItem) => {\n    if (item.onClick) {\n      item.onClick();\n    }\n    // Close drawer after navigation\n    onClose();\n  };\n\n  const renderNavigationGroup = (group: any, index: number) => {\n    return (\n      <View key={group.id || index} style={styles.navigationGroup}>\n        {group.label && (\n          <Text style={styles.navigationGroupLabel}>{group.label}</Text>\n        )}\n        {group.items.map((item: NavigationItem) => (\n          <NavigationItemComponent\n            key={item.id}\n            item={item}\n            level={0}\n            onItemPress={handleItemPress}\n          />\n        ))}\n      </View>\n    );\n  };\n\n  return (\n    <Modal\n      visible={isVisible}\n      transparent\n      animationType=\"none\"\n      onRequestClose={onClose}\n    >\n      {/* Backdrop */}\n      <Animated.View style={[styles.backdrop, { opacity: fadeAnim }]}>\n        <TouchableOpacity\n          style={StyleSheet.absoluteFillObject}\n          onPress={onClose}\n          activeOpacity={1}\n        />\n      </Animated.View>\n\n      {/* Drawer */}\n      <Animated.View\n        style={[\n          styles.drawer,\n          {\n            width: drawerWidth,\n            [position]: 0,\n            transform: [\n              {\n                translateX: slideAnim.interpolate({\n                  inputRange: [0, 1],\n                  outputRange:\n                    position === \"left\" ? [-drawerWidth, 0] : [drawerWidth, 0],\n                }),\n              },\n            ],\n          },\n          style,\n        ]}\n      >\n        <SafeAreaView style={styles.safeArea}>\n          {/* Header/Logo */}\n          {logo && (\n            <View style={styles.logoContainer}>\n              {typeof logo === \"string\" ? (\n                <Text style={styles.logoText}>{logo}</Text>\n              ) : (\n                logo\n              )}\n            </View>\n          )}\n\n          {/* Navigation */}\n          <ScrollView\n            style={styles.navigationContainer}\n            showsVerticalScrollIndicator={false}\n          >\n            {navigation?.map((group, index) =>\n              renderNavigationGroup(group, index),\n            )}\n          </ScrollView>\n\n          {/* Footer */}\n          {footer && (\n            <View style={styles.footerContainer}>\n              {typeof footer === \"string\" ? (\n                <Text style={styles.footerText}>{footer}</Text>\n              ) : (\n                footer\n              )}\n            </View>\n          )}\n        </SafeAreaView>\n      </Animated.View>\n    </Modal>\n  );\n};\n\nconst styles = StyleSheet.create({\n  backdrop: {\n    ...StyleSheet.absoluteFillObject,\n    backgroundColor: \"rgba(0, 0, 0, 0.5)\",\n  },\n  drawer: {\n    position: \"absolute\",\n    top: 0,\n    bottom: 0,\n    backgroundColor: \"#FFFFFF\",\n    shadowColor: \"#000\",\n    shadowOffset: { width: 2, height: 0 },\n    shadowOpacity: 0.1,\n    shadowRadius: 8,\n    elevation: 16,\n  },\n  safeArea: {\n    flex: 1,\n  },\n  logoContainer: {\n    padding: 20,\n    borderBottomWidth: 1,\n    borderBottomColor: \"#E5E7EB\",\n    alignItems: \"center\",\n  },\n  logoText: {\n    fontSize: 20,\n    fontWeight: \"bold\",\n    color: \"#111827\",\n  },\n  navigationContainer: {\n    flex: 1,\n    paddingVertical: 8,\n  },\n  navigationGroup: {\n    marginBottom: 24,\n  },\n  navigationGroupLabel: {\n    fontSize: 12,\n    fontWeight: \"600\",\n    color: \"#6B7280\",\n    textTransform: \"uppercase\",\n    letterSpacing: 0.5,\n    paddingHorizontal: 16,\n    paddingVertical: 8,\n    marginBottom: 4,\n  },\n  navigationItem: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n    paddingVertical: 12,\n    paddingRight: 16,\n    marginHorizontal: 8,\n    borderRadius: 8,\n  },\n  navigationItemActive: {\n    backgroundColor: \"#EBF4FF\",\n  },\n  navigationItemDisabled: {\n    opacity: 0.5,\n  },\n  navigationIcon: {\n    width: 24,\n    alignItems: \"center\",\n    marginRight: 12,\n  },\n  navigationIconText: {\n    fontSize: 16,\n    color: \"#6B7280\",\n  },\n  navigationIconTextActive: {\n    color: \"#3B82F6\",\n  },\n  navigationLabel: {\n    flex: 1,\n    fontSize: 16,\n    color: \"#374151\",\n    fontWeight: \"500\",\n  },\n  navigationLabelActive: {\n    color: \"#3B82F6\",\n    fontWeight: \"600\",\n  },\n  navigationLabelDisabled: {\n    color: \"#9CA3AF\",\n  },\n  navigationBadge: {\n    backgroundColor: \"#EF4444\",\n    borderRadius: 10,\n    minWidth: 20,\n    height: 20,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    paddingHorizontal: 6,\n    marginLeft: 8,\n  },\n  navigationBadgeText: {\n    fontSize: 12,\n    fontWeight: \"600\",\n    color: \"#FFFFFF\",\n  },\n  expandIndicator: {\n    fontSize: 12,\n    color: \"#6B7280\",\n    marginLeft: 8,\n    transform: [{ rotate: \"0deg\" }],\n  },\n  expandIndicatorExpanded: {\n    transform: [{ rotate: \"90deg\" }],\n  },\n  footerContainer: {\n    padding: 16,\n    borderTopWidth: 1,\n    borderTopColor: \"#E5E7EB\",\n    alignItems: \"center\",\n  },\n  footerText: {\n    fontSize: 12,\n    color: \"#6B7280\",\n    textAlign: \"center\",\n  },\n});\n","import React, { useState } from \"react\";\nimport {\n  View,\n  StyleSheet,\n  SafeAreaView,\n  KeyboardAvoidingView,\n  Platform,\n} from \"react-native\";\nimport { Header } from \"./Header\";\nimport { Drawer } from \"./Drawer\";\nimport type { AppShellProps } from \"../types\";\n\ninterface NativeAppShellProps extends Omit<AppShellProps, \"className\"> {\n  style?: any;\n  contentStyle?: any;\n  keyboardAvoidingBehavior?: \"height\" | \"position\" | \"padding\";\n}\n\nexport const AppShell: React.FC<NativeAppShellProps> = ({\n  children,\n  header,\n  sidebar,\n  footer,\n  layout = \"default\",\n  sidebarVariant = \"drawer\",\n  style,\n  contentStyle,\n  keyboardAvoidingBehavior = Platform.OS === \"ios\" ? \"padding\" : \"height\",\n}) => {\n  const [isDrawerVisible, setIsDrawerVisible] = useState(false);\n\n  const openDrawer = () => setIsDrawerVisible(true);\n  const closeDrawer = () => setIsDrawerVisible(false);\n\n  const renderHeader = () => {\n    if (!header) return null;\n\n    return (\n      <Header\n        {...header}\n        onMenuPress={sidebar ? openDrawer : undefined}\n        showMenuButton={!!sidebar}\n      />\n    );\n  };\n\n  const renderDrawer = () => {\n    if (!sidebar) return null;\n\n    return (\n      <Drawer {...sidebar} isVisible={isDrawerVisible} onClose={closeDrawer} />\n    );\n  };\n\n  const renderFooter = () => {\n    if (!footer) return null;\n\n    return <View style={styles.footer}>{footer}</View>;\n  };\n\n  return (\n    <SafeAreaView style={[styles.container, style]}>\n      <KeyboardAvoidingView\n        behavior={keyboardAvoidingBehavior}\n        style={styles.keyboardAvoidingView}\n      >\n        {/* Header */}\n        {renderHeader()}\n\n        {/* Main content area */}\n        <View style={[styles.content, contentStyle]}>{children}</View>\n\n        {/* Footer */}\n        {renderFooter()}\n\n        {/* Drawer */}\n        {renderDrawer()}\n      </KeyboardAvoidingView>\n    </SafeAreaView>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n    backgroundColor: \"#F9FAFB\",\n  },\n  keyboardAvoidingView: {\n    flex: 1,\n  },\n  content: {\n    flex: 1,\n    backgroundColor: \"#F9FAFB\",\n  },\n  footer: {\n    backgroundColor: \"#FFFFFF\",\n    borderTopWidth: 1,\n    borderTopColor: \"#E5E7EB\",\n    paddingHorizontal: 16,\n    paddingVertical: 12,\n  },\n});\n","import React from \"react\";\nimport {\n  View,\n  Text,\n  TouchableOpacity,\n  StyleSheet,\n  ScrollView,\n} from \"react-native\";\nimport type { BreadcrumbItem } from \"../types\";\n\ninterface BreadcrumbsProps {\n  items: BreadcrumbItem[];\n  showHome?: boolean;\n  maxItems?: number;\n  style?: any;\n}\n\nexport const Breadcrumbs: React.FC<BreadcrumbsProps> = ({\n  items,\n  showHome = true,\n  maxItems = 4,\n  style,\n}) => {\n  // Add home breadcrumb if requested\n  const allItems = showHome\n    ? [\n        {\n          label: \"Home\",\n          href: \"/\",\n        },\n        ...items,\n      ]\n    : items;\n\n  // Handle overflow by showing first item, ellipsis, and last few items\n  const shouldCollapse = allItems.length > maxItems;\n  const displayItems = shouldCollapse\n    ? [\n        allItems[0],\n        { label: \"...\", href: undefined },\n        ...allItems.slice(-(maxItems - 2)),\n      ]\n    : allItems;\n\n  const handleItemPress = (item: BreadcrumbItem) => {\n    if (item.onClick) {\n      item.onClick();\n    } else if (item.href) {\n      // In a real app, this would use React Navigation\n      console.log(\"Navigate to:\", item.href);\n    }\n  };\n\n  return (\n    <ScrollView\n      horizontal\n      showsHorizontalScrollIndicator={false}\n      style={[styles.container, style]}\n      contentContainerStyle={styles.content}\n    >\n      {displayItems.map((item, index) => {\n        if (!item) return null;\n        const isLast = index === displayItems.length - 1;\n        const isEllipsis = item.label === \"...\";\n\n        return (\n          <View key={`${item.label}-${index}`} style={styles.breadcrumbItem}>\n            {index > 0 && <Text style={styles.separator}> / </Text>}\n\n            {isEllipsis ? (\n              <Text style={styles.ellipsis}>...</Text>\n            ) : isLast ? (\n              <Text style={styles.currentItem} numberOfLines={1}>\n                {item.label}\n              </Text>\n            ) : (\n              <TouchableOpacity\n                onPress={() => item && handleItemPress(item)}\n                style={styles.linkItem}\n                activeOpacity={0.7}\n              >\n                <Text style={styles.linkText} numberOfLines={1}>\n                  {item.label}\n                </Text>\n              </TouchableOpacity>\n            )}\n          </View>\n        );\n      })}\n    </ScrollView>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    maxHeight: 40,\n  },\n  content: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n    paddingHorizontal: 16,\n    paddingVertical: 8,\n  },\n  breadcrumbItem: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n  },\n  separator: {\n    fontSize: 14,\n    color: \"#94A3B8\",\n    marginHorizontal: 8,\n  },\n  currentItem: {\n    fontSize: 14,\n    fontWeight: \"500\",\n    color: \"#0F172A\",\n    maxWidth: 120,\n  },\n  linkItem: {\n    paddingVertical: 4,\n    paddingHorizontal: 6,\n    borderRadius: 4,\n  },\n  linkText: {\n    fontSize: 14,\n    color: \"#64748B\",\n    maxWidth: 100,\n  },\n  ellipsis: {\n    fontSize: 14,\n    color: \"#94A3B8\",\n  },\n});\n","import React, { useState, useRef, useEffect } from \"react\";\nimport {\n  View,\n  Text,\n  TouchableOpacity,\n  ScrollView,\n  Animated,\n  StyleSheet,\n  ViewStyle,\n} from \"react-native\";\nimport type { TabsProps, TabItem } from \"../types\";\n\ninterface NativeTabsProps extends Omit<TabsProps, \"className\"> {\n  style?: any;\n  tabStyle?: any;\n  activeTabStyle?: any;\n  tabTextStyle?: any;\n  activeTabTextStyle?: any;\n  indicatorStyle?: any;\n}\n\nexport const Tabs: React.FC<NativeTabsProps> = ({\n  items,\n  value,\n  onValueChange,\n  variant = \"default\",\n  scrollable = false,\n  size = \"default\",\n  style,\n  tabStyle,\n  activeTabStyle,\n  tabTextStyle,\n  activeTabTextStyle,\n  indicatorStyle,\n}) => {\n  const [tabLayouts, setTabLayouts] = useState<{\n    [key: string]: { width: number; x: number };\n  }>({});\n  const indicatorAnim = useRef(new Animated.Value(0)).current;\n  const indicatorWidth = useRef(new Animated.Value(0)).current;\n  const scrollViewRef = useRef<ScrollView>(null);\n\n  const activeIndex = items.findIndex((item) => item.id === value);\n\n  // Animate indicator when active tab changes\n  useEffect(() => {\n    const activeTab = tabLayouts[value];\n    if (activeTab && variant === \"underline\") {\n      Animated.parallel([\n        Animated.timing(indicatorAnim, {\n          toValue: activeTab.x,\n          duration: 250,\n          useNativeDriver: false,\n        }),\n        Animated.timing(indicatorWidth, {\n          toValue: activeTab.width,\n          duration: 250,\n          useNativeDriver: false,\n        }),\n      ]).start();\n    }\n  }, [value, tabLayouts, indicatorAnim, indicatorWidth, variant]);\n\n  const handleTabPress = (item: TabItem) => {\n    if (item.disabled) return;\n\n    if (item.href && item.external) {\n      // Handle external links in React Native (would need Linking)\n      console.log(\"External link:\", item.href);\n    } else {\n      onValueChange?.(item.id);\n    }\n  };\n\n  const handleTabLayout = (\n    itemId: string,\n    layout: { width: number; x: number },\n  ) => {\n    setTabLayouts((prev) => ({\n      ...prev,\n      [itemId]: layout,\n    }));\n  };\n\n  const renderTabContent = (item: TabItem, isActive: boolean) => {\n    return (\n      <View style={styles.tabContent}>\n        {/* Icon */}\n        {item.icon && (\n          <View style={styles.tabIcon}>\n            <Text\n              style={[styles.tabIconText, isActive && styles.tabIconTextActive]}\n            >\n              {typeof item.icon === \"string\" ? item.icon : \"•\"}\n            </Text>\n          </View>\n        )}\n\n        {/* Label */}\n        <Text\n          style={[\n            styles.tabLabel,\n            size === \"sm\" && styles.tabLabelSmall,\n            size === \"lg\" && styles.tabLabelLarge,\n            isActive && styles.tabLabelActive,\n            tabTextStyle,\n            isActive && activeTabTextStyle,\n          ]}\n          numberOfLines={1}\n        >\n          {item.label}\n        </Text>\n\n        {/* Badge */}\n        {item.badge && (\n          <View style={styles.tabBadge}>\n            <Text style={styles.tabBadgeText}>\n              {typeof item.badge === \"number\" && item.badge > 99\n                ? \"99+\"\n                : item.badge}\n            </Text>\n          </View>\n        )}\n\n        {/* Close button for closable tabs */}\n        {item.closable && (\n          <TouchableOpacity\n            style={styles.closeButton}\n            onPress={(e) => {\n              e.stopPropagation();\n              item.onClose?.(item.id);\n            }}\n          >\n            <Text style={styles.closeButtonText}>✕</Text>\n          </TouchableOpacity>\n        )}\n      </View>\n    );\n  };\n\n  const renderTab = (item: TabItem, index: number) => {\n    const isActive = item.id === value;\n\n    const getTabStyles = (): ViewStyle[] => {\n      const baseStyle: ViewStyle[] = [styles.tab];\n\n      if (size === \"sm\") baseStyle.push(styles.tabSmall);\n      if (size === \"lg\") baseStyle.push(styles.tabLarge);\n\n      switch (variant) {\n        case \"pills\":\n          baseStyle.push(styles.tabPills);\n          if (isActive) baseStyle.push(styles.tabPillsActive);\n          break;\n        case \"cards\":\n          baseStyle.push(styles.tabCards);\n          if (isActive) baseStyle.push(styles.tabCardsActive);\n          break;\n        case \"underline\":\n        default:\n          baseStyle.push(styles.tabUnderline);\n          if (isActive) baseStyle.push(styles.tabUnderlineActive);\n          break;\n      }\n\n      if (item.disabled) baseStyle.push(styles.tabDisabled);\n      if (tabStyle) baseStyle.push(tabStyle as ViewStyle);\n      if (isActive && activeTabStyle)\n        baseStyle.push(activeTabStyle as ViewStyle);\n\n      return baseStyle;\n    };\n\n    return (\n      <TouchableOpacity\n        key={item.id}\n        style={getTabStyles()}\n        onPress={() => handleTabPress(item)}\n        disabled={item.disabled}\n        activeOpacity={0.7}\n        onLayout={(event) => {\n          const { width, x } = event.nativeEvent.layout;\n          handleTabLayout(item.id, { width, x });\n        }}\n      >\n        {renderTabContent(item, isActive)}\n      </TouchableOpacity>\n    );\n  };\n\n  const TabContainer = scrollable ? ScrollView : View;\n  const containerProps = scrollable\n    ? {\n        horizontal: true,\n        showsHorizontalScrollIndicator: false,\n        ref: scrollViewRef,\n        contentContainerStyle: styles.scrollContent,\n      }\n    : {\n        style: styles.staticContent,\n      };\n\n  return (\n    <View style={[styles.container, style]}>\n      <TabContainer {...containerProps}>\n        {items.map((item, index) => renderTab(item, index))}\n      </TabContainer>\n\n      {/* Underline indicator */}\n      {variant === \"underline\" && (\n        <Animated.View\n          style={[\n            styles.indicator,\n            {\n              left: indicatorAnim,\n              width: indicatorWidth,\n            },\n            indicatorStyle,\n          ]}\n        />\n      )}\n    </View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    backgroundColor: \"#FFFFFF\",\n    position: \"relative\",\n  },\n  scrollContent: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n  },\n  staticContent: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n  },\n  tab: {\n    paddingHorizontal: 16,\n    paddingVertical: 12,\n    minHeight: 44,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n  },\n  tabSmall: {\n    paddingHorizontal: 12,\n    paddingVertical: 8,\n    minHeight: 36,\n  },\n  tabLarge: {\n    paddingHorizontal: 20,\n    paddingVertical: 16,\n    minHeight: 52,\n  },\n  tabUnderline: {\n    borderBottomWidth: 2,\n    borderBottomColor: \"transparent\",\n  },\n  tabUnderlineActive: {\n    borderBottomColor: \"#3B82F6\",\n  },\n  tabPills: {\n    borderRadius: 20,\n    marginHorizontal: 4,\n  },\n  tabPillsActive: {\n    backgroundColor: \"#3B82F6\",\n  },\n  tabCards: {\n    borderWidth: 1,\n    borderColor: \"#E5E7EB\",\n    borderRadius: 8,\n    marginHorizontal: 2,\n    backgroundColor: \"#F9FAFB\",\n  },\n  tabCardsActive: {\n    backgroundColor: \"#FFFFFF\",\n    borderColor: \"#3B82F6\",\n  },\n  tabDisabled: {\n    opacity: 0.5,\n  },\n  tabContent: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n  },\n  tabIcon: {\n    marginRight: 8,\n  },\n  tabIconText: {\n    fontSize: 16,\n    color: \"#6B7280\",\n  },\n  tabIconTextActive: {\n    color: \"#3B82F6\",\n  },\n  tabLabel: {\n    fontSize: 14,\n    fontWeight: \"500\",\n    color: \"#374151\",\n  },\n  tabLabelSmall: {\n    fontSize: 12,\n  },\n  tabLabelLarge: {\n    fontSize: 16,\n  },\n  tabLabelActive: {\n    color: \"#3B82F6\",\n    fontWeight: \"600\",\n  },\n  tabBadge: {\n    backgroundColor: \"#EF4444\",\n    borderRadius: 8,\n    minWidth: 16,\n    height: 16,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    marginLeft: 8,\n    paddingHorizontal: 4,\n  },\n  tabBadgeText: {\n    fontSize: 10,\n    fontWeight: \"600\",\n    color: \"#FFFFFF\",\n  },\n  closeButton: {\n    marginLeft: 8,\n    width: 20,\n    height: 20,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n  },\n  closeButtonText: {\n    fontSize: 12,\n    color: \"#6B7280\",\n  },\n  indicator: {\n    position: \"absolute\",\n    bottom: 0,\n    height: 2,\n    backgroundColor: \"#3B82F6\",\n  },\n});\n","import React from \"react\";\nimport {\n  View,\n  Text,\n  TouchableOpacity,\n  StyleSheet,\n  SafeAreaView,\n  Platform,\n} from \"react-native\";\n\ninterface TabBarItem {\n  id: string;\n  label: string;\n  icon?: React.ReactNode | string;\n  badge?: string | number;\n  disabled?: boolean;\n  onPress?: () => void;\n}\n\ninterface BottomTabBarProps {\n  items: TabBarItem[];\n  activeTab: string;\n  onTabPress: (tabId: string) => void;\n  style?: any;\n  tabStyle?: any;\n  activeTabStyle?: any;\n  labelStyle?: any;\n  activeLabelStyle?: any;\n  showLabels?: boolean;\n  variant?: \"default\" | \"minimal\";\n}\n\nexport const BottomTabBar: React.FC<BottomTabBarProps> = ({\n  items,\n  activeTab,\n  onTabPress,\n  style,\n  tabStyle,\n  activeTabStyle,\n  labelStyle,\n  activeLabelStyle,\n  showLabels = true,\n  variant = \"default\",\n}) => {\n  const handleTabPress = (item: TabBarItem) => {\n    if (item.disabled) return;\n\n    item.onPress?.();\n    onTabPress(item.id);\n  };\n\n  const renderTab = (item: TabBarItem) => {\n    const isActive = item.id === activeTab;\n\n    return (\n      <TouchableOpacity\n        key={item.id}\n        style={[\n          styles.tab,\n          variant === \"minimal\" && styles.tabMinimal,\n          isActive && styles.tabActive,\n          item.disabled && styles.tabDisabled,\n          tabStyle,\n          isActive && activeTabStyle,\n        ]}\n        onPress={() => handleTabPress(item)}\n        disabled={item.disabled}\n        activeOpacity={0.7}\n      >\n        {/* Icon */}\n        {item.icon && (\n          <View style={styles.iconContainer}>\n            <Text style={[styles.iconText, isActive && styles.iconTextActive]}>\n              {typeof item.icon === \"string\" ? item.icon : \"•\"}\n            </Text>\n\n            {/* Badge */}\n            {item.badge && (\n              <View style={styles.badge}>\n                <Text style={styles.badgeText}>\n                  {typeof item.badge === \"number\" && item.badge > 99\n                    ? \"99+\"\n                    : item.badge}\n                </Text>\n              </View>\n            )}\n          </View>\n        )}\n\n        {/* Label */}\n        {showLabels && (\n          <Text\n            style={[\n              styles.label,\n              variant === \"minimal\" && styles.labelMinimal,\n              isActive && styles.labelActive,\n              labelStyle,\n              isActive && activeLabelStyle,\n            ]}\n            numberOfLines={1}\n          >\n            {item.label}\n          </Text>\n        )}\n\n        {/* Active indicator for minimal variant */}\n        {variant === \"minimal\" && isActive && (\n          <View style={styles.activeIndicator} />\n        )}\n      </TouchableOpacity>\n    );\n  };\n\n  return (\n    <SafeAreaView style={[styles.container, style]}>\n      <View\n        style={[styles.tabBar, variant === \"minimal\" && styles.tabBarMinimal]}\n      >\n        {items.map(renderTab)}\n      </View>\n    </SafeAreaView>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    backgroundColor: \"#FFFFFF\",\n    borderTopWidth: 1,\n    borderTopColor: \"#E5E7EB\",\n  },\n  tabBar: {\n    flexDirection: \"row\",\n    backgroundColor: \"#FFFFFF\",\n    paddingBottom: Platform.OS === \"ios\" ? 0 : 8,\n  },\n  tabBarMinimal: {\n    paddingHorizontal: 16,\n  },\n  tab: {\n    flex: 1,\n    alignItems: \"center\",\n    justifyContent: \"center\",\n    paddingVertical: 8,\n    paddingHorizontal: 4,\n    minHeight: 60,\n    position: \"relative\",\n  },\n  tabMinimal: {\n    borderRadius: 12,\n    marginHorizontal: 4,\n    minHeight: 50,\n  },\n  tabActive: {\n    // Base active styles\n  },\n  tabDisabled: {\n    opacity: 0.5,\n  },\n  iconContainer: {\n    position: \"relative\",\n    marginBottom: 4,\n    alignItems: \"center\",\n    justifyContent: \"center\",\n    width: 24,\n    height: 24,\n  },\n  iconText: {\n    fontSize: 20,\n    color: \"#6B7280\",\n  },\n  iconTextActive: {\n    color: \"#3B82F6\",\n  },\n  badge: {\n    position: \"absolute\",\n    top: -6,\n    right: -6,\n    backgroundColor: \"#EF4444\",\n    borderRadius: 8,\n    minWidth: 16,\n    height: 16,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    paddingHorizontal: 4,\n  },\n  badgeText: {\n    fontSize: 10,\n    fontWeight: \"600\",\n    color: \"#FFFFFF\",\n  },\n  label: {\n    fontSize: 12,\n    color: \"#6B7280\",\n    fontWeight: \"500\",\n    textAlign: \"center\",\n  },\n  labelMinimal: {\n    fontSize: 11,\n  },\n  labelActive: {\n    color: \"#3B82F6\",\n    fontWeight: \"600\",\n  },\n  activeIndicator: {\n    position: \"absolute\",\n    top: 4,\n    left: \"50%\",\n    marginLeft: -2,\n    width: 4,\n    height: 4,\n    borderRadius: 2,\n    backgroundColor: \"#3B82F6\",\n  },\n});\n","import React from \"react\";\nimport {\n  View,\n  Text,\n  TouchableOpacity,\n  ScrollView,\n  StyleSheet,\n} from \"react-native\";\nimport type { StepperProps, StepperStep } from \"../types\";\n\ninterface NativeStepperProps extends Omit<StepperProps, \"className\"> {\n  style?: any;\n  stepStyle?: any;\n  activeStepStyle?: any;\n  completedStepStyle?: any;\n  stepTextStyle?: any;\n  activeStepTextStyle?: any;\n  completedStepTextStyle?: any;\n}\n\nexport const Stepper: React.FC<NativeStepperProps> = ({\n  steps,\n  currentStep,\n  onStepClick,\n  orientation = \"horizontal\",\n  variant = \"default\",\n  showNumbers = true,\n  allowClickAhead = false,\n  style,\n  stepStyle,\n  activeStepStyle,\n  completedStepStyle,\n  stepTextStyle,\n  activeStepTextStyle,\n  completedStepTextStyle,\n}) => {\n  const handleStepPress = (index: number) => {\n    if (!onStepClick) return;\n\n    const step = steps[index];\n    if (!step || step.disabled) return;\n\n    // Allow clicking on current or previous steps, or ahead if allowed\n    if (index <= currentStep || allowClickAhead) {\n      onStepClick(index);\n    }\n  };\n\n  const getStepStatus = (index: number) => {\n    if (index < currentStep) return \"completed\";\n    if (index === currentStep) return \"current\";\n    return \"pending\";\n  };\n\n  const renderStepIndicator = (\n    step: StepperStep,\n    index: number,\n    status: string,\n  ) => {\n    const isClickable =\n      !step.disabled && (index <= currentStep || allowClickAhead);\n\n    return (\n      <TouchableOpacity\n        style={[\n          styles.stepIndicator,\n          variant === \"minimal\" && styles.stepIndicatorMinimal,\n          status === \"current\" && styles.stepIndicatorCurrent,\n          status === \"completed\" && styles.stepIndicatorCompleted,\n          step.disabled && styles.stepIndicatorDisabled,\n          stepStyle,\n          status === \"current\" && activeStepStyle,\n          status === \"completed\" && completedStepStyle,\n        ]}\n        onPress={() => handleStepPress(index)}\n        disabled={!isClickable}\n        activeOpacity={isClickable ? 0.7 : 1}\n      >\n        {/* Step content */}\n        {status === \"completed\" && variant !== \"minimal\" ? (\n          <Text style={styles.checkmark}>✓</Text>\n        ) : showNumbers ? (\n          <Text\n            style={[\n              styles.stepNumber,\n              status === \"current\" && styles.stepNumberCurrent,\n              status === \"completed\" && styles.stepNumberCompleted,\n              step.disabled && styles.stepNumberDisabled,\n            ]}\n          >\n            {index + 1}\n          </Text>\n        ) : step.icon ? (\n          <Text style={styles.stepIcon}>\n            {typeof step.icon === \"string\" ? step.icon : \"•\"}\n          </Text>\n        ) : null}\n      </TouchableOpacity>\n    );\n  };\n\n  const renderStepContent = (\n    step: StepperStep,\n    index: number,\n    status: string,\n  ) => {\n    return (\n      <View style={styles.stepContent}>\n        <Text\n          style={[\n            styles.stepTitle,\n            status === \"current\" && styles.stepTitleCurrent,\n            status === \"completed\" && styles.stepTitleCompleted,\n            step.disabled && styles.stepTitleDisabled,\n            stepTextStyle,\n            status === \"current\" && activeStepTextStyle,\n            status === \"completed\" && completedStepTextStyle,\n          ]}\n          numberOfLines={2}\n        >\n          {step.title ?? step.label}\n        </Text>\n\n        {step.description && (\n          <Text\n            style={[\n              styles.stepDescription,\n              status === \"current\" && styles.stepDescriptionCurrent,\n              step.disabled && styles.stepDescriptionDisabled,\n            ]}\n            numberOfLines={3}\n          >\n            {step.description}\n          </Text>\n        )}\n\n        {(step.isOptional ?? step.optional) && (\n          <Text style={styles.optionalLabel}>Optional</Text>\n        )}\n      </View>\n    );\n  };\n\n  const renderConnector = (index: number) => {\n    if (index === steps.length - 1) return null;\n\n    const isCompleted = index < currentStep;\n\n    return (\n      <View\n        style={[\n          styles.connector,\n          orientation === \"vertical\"\n            ? styles.connectorVertical\n            : styles.connectorHorizontal,\n          isCompleted && styles.connectorCompleted,\n        ]}\n      />\n    );\n  };\n\n  const renderStep = (step: StepperStep, index: number) => {\n    const status = getStepStatus(index);\n\n    if (orientation === \"vertical\") {\n      return (\n        <View key={step.id} style={styles.stepVertical}>\n          <View style={styles.stepVerticalIndicator}>\n            {renderStepIndicator(step, index, status)}\n            {renderConnector(index)}\n          </View>\n          <View style={styles.stepVerticalContent}>\n            {renderStepContent(step, index, status)}\n          </View>\n        </View>\n      );\n    }\n\n    return (\n      <View key={step.id} style={styles.stepHorizontal}>\n        {renderStepIndicator(step, index, status)}\n        {renderStepContent(step, index, status)}\n        {renderConnector(index)}\n      </View>\n    );\n  };\n\n  const Container =\n    orientation === \"horizontal\" && steps.length > 3 ? ScrollView : View;\n  const containerProps =\n    orientation === \"horizontal\" && steps.length > 3\n      ? {\n          horizontal: true,\n          showsHorizontalScrollIndicator: false,\n          contentContainerStyle: styles.scrollContainer,\n        }\n      : {\n          style: [\n            styles.container,\n            orientation === \"vertical\" && styles.containerVertical,\n            style,\n          ],\n        };\n\n  return (\n    <Container {...containerProps}>\n      {steps.map((step, index) => renderStep(step, index))}\n    </Container>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    backgroundColor: \"#FFFFFF\",\n  },\n  containerVertical: {\n    paddingVertical: 16,\n  },\n  scrollContainer: {\n    paddingHorizontal: 16,\n    alignItems: \"center\",\n  },\n  stepHorizontal: {\n    alignItems: \"center\",\n    flex: 1,\n    maxWidth: 120,\n    paddingHorizontal: 8,\n  },\n  stepVertical: {\n    flexDirection: \"row\",\n    paddingHorizontal: 16,\n    paddingVertical: 8,\n  },\n  stepVerticalIndicator: {\n    alignItems: \"center\",\n    marginRight: 16,\n  },\n  stepVerticalContent: {\n    flex: 1,\n    paddingBottom: 16,\n  },\n  stepIndicator: {\n    width: 40,\n    height: 40,\n    borderRadius: 20,\n    backgroundColor: \"#F3F4F6\",\n    borderWidth: 2,\n    borderColor: \"#E5E7EB\",\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    marginBottom: 8,\n  },\n  stepIndicatorMinimal: {\n    width: 32,\n    height: 32,\n    borderRadius: 16,\n  },\n  stepIndicatorCurrent: {\n    backgroundColor: \"#3B82F6\",\n    borderColor: \"#3B82F6\",\n  },\n  stepIndicatorCompleted: {\n    backgroundColor: \"#10B981\",\n    borderColor: \"#10B981\",\n  },\n  stepIndicatorDisabled: {\n    opacity: 0.5,\n  },\n  stepNumber: {\n    fontSize: 16,\n    fontWeight: \"600\",\n    color: \"#6B7280\",\n  },\n  stepNumberCurrent: {\n    color: \"#FFFFFF\",\n  },\n  stepNumberCompleted: {\n    color: \"#FFFFFF\",\n  },\n  stepNumberDisabled: {\n    color: \"#9CA3AF\",\n  },\n  checkmark: {\n    fontSize: 18,\n    fontWeight: \"bold\",\n    color: \"#FFFFFF\",\n  },\n  stepIcon: {\n    fontSize: 16,\n    color: \"#6B7280\",\n  },\n  stepContent: {\n    alignItems: \"center\",\n    flex: 1,\n  },\n  stepTitle: {\n    fontSize: 14,\n    fontWeight: \"600\",\n    color: \"#374151\",\n    textAlign: \"center\",\n    marginBottom: 4,\n  },\n  stepTitleCurrent: {\n    color: \"#3B82F6\",\n  },\n  stepTitleCompleted: {\n    color: \"#10B981\",\n  },\n  stepTitleDisabled: {\n    color: \"#9CA3AF\",\n  },\n  stepDescription: {\n    fontSize: 12,\n    color: \"#6B7280\",\n    textAlign: \"center\",\n    lineHeight: 16,\n  },\n  stepDescriptionCurrent: {\n    color: \"#374151\",\n  },\n  stepDescriptionDisabled: {\n    color: \"#9CA3AF\",\n  },\n  optionalLabel: {\n    fontSize: 10,\n    color: \"#9CA3AF\",\n    fontStyle: \"italic\",\n    marginTop: 2,\n  },\n  connector: {\n    backgroundColor: \"#E5E7EB\",\n  },\n  connectorHorizontal: {\n    height: 2,\n    flex: 1,\n    marginTop: 20,\n    marginHorizontal: 8,\n  },\n  connectorVertical: {\n    width: 2,\n    flex: 1,\n    marginTop: 8,\n  },\n  connectorCompleted: {\n    backgroundColor: \"#10B981\",\n  },\n});\n","import React, { useState, useEffect, useRef } from \"react\";\nimport {\n  View,\n  Text,\n  TextInput,\n  TouchableOpacity,\n  Modal,\n  FlatList,\n  StyleSheet,\n  Keyboard,\n  SafeAreaView,\n} from \"react-native\";\nimport type { CommandPaletteProps, CommandGroup, CommandItem } from \"../types\";\n\ninterface ExtendedCommandItem extends CommandItem {\n  recent?: boolean;\n  group?: string;\n}\n\nexport const CommandPalette: React.FC<CommandPaletteProps> = ({\n  open,\n  onOpenChange,\n  commands,\n  placeholder = \"Type a command or search...\",\n  emptyMessage = \"No results found.\",\n}) => {\n  const [searchQuery, setSearchQuery] = useState(\"\");\n  const [recentCommands, setRecentCommands] = useState<string[]>([]);\n  const inputRef = useRef<TextInput>(null);\n\n  // Flatten all commands for searching\n  const allCommands: ExtendedCommandItem[] = commands.flatMap((group) =>\n    group.items.map((item) => ({ ...item, group: group.label })),\n  );\n\n  // Filter commands based on search query\n  const filteredCommands = searchQuery\n    ? allCommands.filter(\n        (command) =>\n          command.label.toLowerCase().includes(searchQuery.toLowerCase()) ||\n          command.description\n            ?.toLowerCase()\n            .includes(searchQuery.toLowerCase()) ||\n          command.keywords?.some((keyword) =>\n            keyword.toLowerCase().includes(searchQuery.toLowerCase()),\n          ),\n      )\n    : allCommands;\n\n  // Add recent commands if no search query\n  const recentCommandItems: ExtendedCommandItem[] = searchQuery\n    ? []\n    : allCommands\n        .filter((cmd) => recentCommands.includes(cmd.id))\n        .map((cmd) => ({ ...cmd, recent: true }));\n\n  // Group filtered commands for display\n  const displayCommands =\n    searchQuery || recentCommandItems.length === 0\n      ? filteredCommands\n      : [\n          ...recentCommandItems,\n          ...filteredCommands.filter((cmd) => !recentCommands.includes(cmd.id)),\n        ];\n\n  // Focus input when modal opens\n  useEffect(() => {\n    if (open && inputRef.current) {\n      setTimeout(() => {\n        inputRef.current?.focus();\n      }, 100);\n    }\n  }, [open]);\n\n  const executeCommand = (command: ExtendedCommandItem) => {\n    // Add to recent commands\n    setRecentCommands((prev) =>\n      [command.id, ...prev.filter((id) => id !== command.id)].slice(0, 5),\n    );\n\n    // Execute command\n    command.action?.();\n\n    // Close palette\n    onOpenChange(false);\n\n    // Clear search and dismiss keyboard\n    setSearchQuery(\"\");\n    Keyboard.dismiss();\n  };\n\n  const handleClose = () => {\n    onOpenChange(false);\n    setSearchQuery(\"\");\n    Keyboard.dismiss();\n  };\n\n  const renderCommand = ({ item }: { item: ExtendedCommandItem }) => (\n    <TouchableOpacity\n      style={styles.commandItem}\n      onPress={() => executeCommand(item)}\n      activeOpacity={0.7}\n    >\n      <View style={styles.commandContent}>\n        <View style={styles.commandMain}>\n          <View style={styles.commandHeader}>\n            <Text style={styles.commandLabel}>{item.label}</Text>\n            {item.recent && (\n              <View style={styles.recentBadge}>\n                <Text style={styles.recentBadgeText}>Recent</Text>\n              </View>\n            )}\n          </View>\n          {item.description && (\n            <Text style={styles.commandDescription} numberOfLines={1}>\n              {item.description}\n            </Text>\n          )}\n        </View>\n        {item.shortcut && (\n          <View style={styles.shortcutBadge}>\n            <Text style={styles.shortcutText}>{item.shortcut}</Text>\n          </View>\n        )}\n      </View>\n    </TouchableOpacity>\n  );\n\n  const renderSectionHeader = (groupLabel: string) => (\n    <View style={styles.sectionHeader}>\n      <Text style={styles.sectionHeaderText}>{groupLabel}</Text>\n    </View>\n  );\n\n  // Group commands by category for rendering\n  const groupedData: Array<{\n    type: \"header\" | \"item\";\n    data: string | ExtendedCommandItem;\n  }> = [];\n\n  if (searchQuery || recentCommandItems.length === 0) {\n    // Show grouped by category\n    const groups = commands\n      .map((group) => ({\n        ...group,\n        items: displayCommands.filter((cmd) => cmd.group === group.label),\n      }))\n      .filter((group) => group.items.length > 0);\n\n    groups.forEach((group) => {\n      groupedData.push({ type: \"header\", data: group.label });\n      group.items.forEach((item) => {\n        groupedData.push({ type: \"item\", data: item });\n      });\n    });\n  } else {\n    // Show recent first, then others\n    if (recentCommandItems.length > 0) {\n      groupedData.push({ type: \"header\", data: \"Recent\" });\n      recentCommandItems.forEach((item) => {\n        groupedData.push({ type: \"item\", data: item });\n      });\n    }\n\n    const otherCommands = displayCommands.filter(\n      (cmd) => !recentCommands.includes(cmd.id),\n    );\n    if (otherCommands.length > 0) {\n      groupedData.push({ type: \"header\", data: \"Commands\" });\n      otherCommands.forEach((item) => {\n        groupedData.push({ type: \"item\", data: item });\n      });\n    }\n  }\n\n  const renderItem = ({ item }: { item: (typeof groupedData)[0] }) => {\n    if (item.type === \"header\") {\n      return renderSectionHeader(item.data as string);\n    }\n    return renderCommand({ item: item.data as ExtendedCommandItem });\n  };\n\n  return (\n    <Modal\n      visible={open}\n      animationType=\"fade\"\n      transparent\n      onRequestClose={handleClose}\n    >\n      <View style={styles.overlay}>\n        <SafeAreaView style={styles.safeArea}>\n          <View style={styles.modalContent}>\n            {/* Search Input */}\n            <View style={styles.searchContainer}>\n              <TextInput\n                ref={inputRef}\n                style={styles.searchInput}\n                placeholder={placeholder}\n                placeholderTextColor=\"#94A3B8\"\n                value={searchQuery}\n                onChangeText={setSearchQuery}\n                autoCapitalize=\"none\"\n                autoCorrect={false}\n                returnKeyType=\"search\"\n              />\n              <TouchableOpacity\n                style={styles.closeButton}\n                onPress={handleClose}\n                activeOpacity={0.7}\n              >\n                <Text style={styles.closeButtonText}>✕</Text>\n              </TouchableOpacity>\n            </View>\n\n            {/* Command List */}\n            {groupedData.length === 0 ? (\n              <View style={styles.emptyState}>\n                <Text style={styles.emptyText}>{emptyMessage}</Text>\n              </View>\n            ) : (\n              <FlatList\n                data={groupedData}\n                renderItem={renderItem}\n                keyExtractor={(item, index) =>\n                  item.type === \"header\"\n                    ? `header-${item.data}`\n                    : `item-${(item.data as ExtendedCommandItem).id}-${index}`\n                }\n                style={styles.commandList}\n                showsVerticalScrollIndicator={false}\n                keyboardShouldPersistTaps=\"handled\"\n              />\n            )}\n\n            {/* Footer */}\n            <View style={styles.footer}>\n              <Text style={styles.footerText}>\n                Tap to select • ESC to close\n              </Text>\n            </View>\n          </View>\n        </SafeAreaView>\n      </View>\n    </Modal>\n  );\n};\n\nconst styles = StyleSheet.create({\n  overlay: {\n    flex: 1,\n    backgroundColor: \"rgba(0, 0, 0, 0.5)\",\n    justifyContent: \"center\",\n    paddingHorizontal: 20,\n  },\n  safeArea: {\n    flex: 1,\n    justifyContent: \"center\",\n  },\n  modalContent: {\n    backgroundColor: \"#FFFFFF\",\n    borderRadius: 12,\n    maxHeight: \"80%\",\n    shadowColor: \"#000\",\n    shadowOffset: { width: 0, height: 10 },\n    shadowOpacity: 0.25,\n    shadowRadius: 20,\n    elevation: 10,\n  },\n  searchContainer: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n    paddingHorizontal: 16,\n    paddingVertical: 12,\n    borderBottomWidth: 1,\n    borderBottomColor: \"#E2E8F0\",\n  },\n  searchInput: {\n    flex: 1,\n    fontSize: 16,\n    color: \"#0F172A\",\n    paddingVertical: 8,\n  },\n  closeButton: {\n    padding: 8,\n    marginLeft: 8,\n  },\n  closeButtonText: {\n    fontSize: 18,\n    color: \"#64748B\",\n    fontWeight: \"bold\",\n  },\n  commandList: {\n    maxHeight: 400,\n  },\n  sectionHeader: {\n    paddingHorizontal: 16,\n    paddingVertical: 8,\n    backgroundColor: \"#F8FAFC\",\n    borderBottomWidth: 1,\n    borderBottomColor: \"#E2E8F0\",\n  },\n  sectionHeaderText: {\n    fontSize: 12,\n    fontWeight: \"600\",\n    color: \"#64748B\",\n    textTransform: \"uppercase\",\n    letterSpacing: 0.5,\n  },\n  commandItem: {\n    paddingHorizontal: 16,\n    paddingVertical: 12,\n    borderBottomWidth: 1,\n    borderBottomColor: \"#F1F5F9\",\n  },\n  commandContent: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n    justifyContent: \"space-between\",\n  },\n  commandMain: {\n    flex: 1,\n  },\n  commandHeader: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n    marginBottom: 2,\n  },\n  commandLabel: {\n    fontSize: 16,\n    fontWeight: \"500\",\n    color: \"#0F172A\",\n    marginRight: 8,\n  },\n  recentBadge: {\n    backgroundColor: \"#E2E8F0\",\n    paddingHorizontal: 6,\n    paddingVertical: 2,\n    borderRadius: 4,\n  },\n  recentBadgeText: {\n    fontSize: 10,\n    fontWeight: \"500\",\n    color: \"#64748B\",\n  },\n  commandDescription: {\n    fontSize: 14,\n    color: \"#64748B\",\n    marginTop: 2,\n  },\n  shortcutBadge: {\n    backgroundColor: \"#F1F5F9\",\n    borderWidth: 1,\n    borderColor: \"#E2E8F0\",\n    paddingHorizontal: 8,\n    paddingVertical: 4,\n    borderRadius: 4,\n  },\n  shortcutText: {\n    fontSize: 12,\n    fontFamily: \"monospace\",\n    color: \"#64748B\",\n  },\n  emptyState: {\n    padding: 40,\n    alignItems: \"center\",\n  },\n  emptyText: {\n    fontSize: 16,\n    color: \"#94A3B8\",\n    textAlign: \"center\",\n  },\n  footer: {\n    paddingHorizontal: 16,\n    paddingVertical: 12,\n    borderTopWidth: 1,\n    borderTopColor: \"#E2E8F0\",\n    backgroundColor: \"#F8FAFC\",\n  },\n  footerText: {\n    fontSize: 12,\n    color: \"#64748B\",\n    textAlign: \"center\",\n  },\n});\n","import React, { useState } from \"react\";\nimport {\n  View,\n  Text,\n  TouchableOpacity,\n  StyleSheet,\n  ScrollView,\n} from \"react-native\";\n\ninterface PaginationProps {\n  currentPage: number;\n  totalPages: number;\n  onPageChange: (page: number) => void;\n  pageSize?: number;\n  totalItems?: number;\n  onPageSizeChange?: (pageSize: number) => void;\n  pageSizeOptions?: number[];\n  showPageSize?: boolean;\n  showTotal?: boolean;\n  siblingCount?: number;\n  boundaryCount?: number;\n  size?: \"sm\" | \"default\" | \"lg\";\n  disabled?: boolean;\n  style?: any;\n}\n\nexport const Pagination: React.FC<PaginationProps> = ({\n  currentPage,\n  totalPages,\n  onPageChange,\n  pageSize = 10,\n  totalItems,\n  onPageSizeChange,\n  pageSizeOptions = [10, 20, 50, 100],\n  showPageSize = false,\n  showTotal = false,\n  siblingCount = 1,\n  boundaryCount = 1,\n  size = \"default\",\n  disabled = false,\n  style,\n}) => {\n  const [pageSizeMenuOpen, setPageSizeMenuOpen] = useState(false);\n\n  // Generate page numbers to display\n  const generatePageNumbers = () => {\n    const pages: (number | \"ellipsis\")[] = [];\n\n    const totalNumbers = siblingCount * 2 + 3;\n    const totalBlocks = totalNumbers + 2;\n\n    if (totalPages <= totalBlocks) {\n      for (let i = 1; i <= totalPages; i++) {\n        pages.push(i);\n      }\n    } else {\n      const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);\n      const rightSiblingIndex = Math.min(\n        currentPage + siblingCount,\n        totalPages,\n      );\n\n      if (leftSiblingIndex > 2) {\n        pages.push(1);\n        if (leftSiblingIndex > 3) {\n          pages.push(\"ellipsis\");\n        }\n      } else {\n        for (let i = 1; i < leftSiblingIndex; i++) {\n          pages.push(i);\n        }\n      }\n\n      for (let i = leftSiblingIndex; i <= rightSiblingIndex; i++) {\n        pages.push(i);\n      }\n\n      if (rightSiblingIndex < totalPages - 1) {\n        if (rightSiblingIndex < totalPages - 2) {\n          pages.push(\"ellipsis\");\n        }\n        pages.push(totalPages);\n      } else {\n        for (let i = rightSiblingIndex + 1; i <= totalPages; i++) {\n          pages.push(i);\n        }\n      }\n    }\n\n    return pages;\n  };\n\n  const pages = generatePageNumbers();\n\n  const buttonSizes = {\n    sm: { width: 32, height: 32, fontSize: 12 },\n    default: { width: 36, height: 36, fontSize: 14 },\n    lg: { width: 40, height: 40, fontSize: 16 },\n  };\n\n  const buttonSize = buttonSizes[size];\n\n  const getPageButton = (page: number | \"ellipsis\", index: number) => {\n    if (page === \"ellipsis\") {\n      return (\n        <View\n          key={`ellipsis-${index}`}\n          style={[\n            styles.pageButton,\n            {\n              width: buttonSize.width,\n              height: buttonSize.height,\n            },\n          ]}\n        >\n          <Text\n            style={[styles.ellipsisText, { fontSize: buttonSize.fontSize }]}\n          >\n            ...\n          </Text>\n        </View>\n      );\n    }\n\n    const isActive = page === currentPage;\n    const isDisabled = disabled;\n\n    return (\n      <TouchableOpacity\n        key={page}\n        style={[\n          styles.pageButton,\n          {\n            width: buttonSize.width,\n            height: buttonSize.height,\n          },\n          isActive && styles.activePageButton,\n          isDisabled && styles.disabledButton,\n        ]}\n        onPress={() => !isDisabled && onPageChange(page)}\n        disabled={isDisabled || isActive}\n        activeOpacity={0.7}\n      >\n        <Text\n          style={[\n            styles.pageButtonText,\n            { fontSize: buttonSize.fontSize },\n            isActive && styles.activePageButtonText,\n            isDisabled && styles.disabledText,\n          ]}\n        >\n          {page}\n        </Text>\n      </TouchableOpacity>\n    );\n  };\n\n  const startItem = totalItems ? (currentPage - 1) * pageSize + 1 : 0;\n  const endItem = totalItems ? Math.min(currentPage * pageSize, totalItems) : 0;\n\n  return (\n    <View style={[styles.container, style]}>\n      {/* Top row - Total info and page size */}\n      {(showTotal || showPageSize) && (\n        <View style={styles.infoRow}>\n          {showTotal && totalItems && (\n            <Text style={styles.totalText}>\n              Showing {startItem} to {endItem} of {totalItems} results\n            </Text>\n          )}\n\n          {showPageSize && onPageSizeChange && (\n            <View style={styles.pageSizeContainer}>\n              <Text style={styles.pageSizeLabel}>Show</Text>\n              <TouchableOpacity\n                style={[\n                  styles.pageSizeButton,\n                  disabled && styles.disabledButton,\n                ]}\n                onPress={() =>\n                  !disabled && setPageSizeMenuOpen(!pageSizeMenuOpen)\n                }\n                disabled={disabled}\n                activeOpacity={0.7}\n              >\n                <Text\n                  style={[\n                    styles.pageSizeButtonText,\n                    disabled && styles.disabledText,\n                  ]}\n                >\n                  {pageSize}\n                </Text>\n                <Text\n                  style={[\n                    styles.pageSizeArrow,\n                    disabled && styles.disabledText,\n                  ]}\n                >\n                  {pageSizeMenuOpen ? \"▲\" : \"▼\"}\n                </Text>\n              </TouchableOpacity>\n              <Text style={styles.pageSizeLabel}>per page</Text>\n\n              {/* Page Size Menu */}\n              {pageSizeMenuOpen && (\n                <View style={styles.pageSizeMenu}>\n                  {pageSizeOptions.map((option) => (\n                    <TouchableOpacity\n                      key={option}\n                      style={[\n                        styles.pageSizeMenuItem,\n                        option === pageSize && styles.activePageSizeMenuItem,\n                      ]}\n                      onPress={() => {\n                        onPageSizeChange(option);\n                        setPageSizeMenuOpen(false);\n                      }}\n                      activeOpacity={0.7}\n                    >\n                      <Text\n                        style={[\n                          styles.pageSizeMenuText,\n                          option === pageSize && styles.activePageSizeMenuText,\n                        ]}\n                      >\n                        {option}\n                      </Text>\n                    </TouchableOpacity>\n                  ))}\n                </View>\n              )}\n            </View>\n          )}\n        </View>\n      )}\n\n      {/* Pagination controls */}\n      <ScrollView\n        horizontal\n        showsHorizontalScrollIndicator={false}\n        contentContainerStyle={styles.paginationRow}\n      >\n        {/* Previous button */}\n        <TouchableOpacity\n          style={[\n            styles.navButton,\n            {\n              width: buttonSize.width,\n              height: buttonSize.height,\n            },\n            (disabled || currentPage <= 1) && styles.disabledButton,\n          ]}\n          onPress={() => onPageChange(currentPage - 1)}\n          disabled={disabled || currentPage <= 1}\n          activeOpacity={0.7}\n        >\n          <Text\n            style={[\n              styles.navButtonText,\n              { fontSize: buttonSize.fontSize },\n              (disabled || currentPage <= 1) && styles.disabledText,\n            ]}\n          >\n            ←\n          </Text>\n        </TouchableOpacity>\n\n        {/* Page numbers */}\n        {pages.map((page, index) => getPageButton(page, index))}\n\n        {/* Next button */}\n        <TouchableOpacity\n          style={[\n            styles.navButton,\n            {\n              width: buttonSize.width,\n              height: buttonSize.height,\n            },\n            (disabled || currentPage >= totalPages) && styles.disabledButton,\n          ]}\n          onPress={() => onPageChange(currentPage + 1)}\n          disabled={disabled || currentPage >= totalPages}\n          activeOpacity={0.7}\n        >\n          <Text\n            style={[\n              styles.navButtonText,\n              { fontSize: buttonSize.fontSize },\n              (disabled || currentPage >= totalPages) && styles.disabledText,\n            ]}\n          >\n            →\n          </Text>\n        </TouchableOpacity>\n      </ScrollView>\n    </View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    paddingVertical: 8,\n  },\n  infoRow: {\n    flexDirection: \"row\",\n    justifyContent: \"space-between\",\n    alignItems: \"center\",\n    marginBottom: 12,\n    paddingHorizontal: 4,\n  },\n  totalText: {\n    fontSize: 14,\n    color: \"#64748B\",\n  },\n  pageSizeContainer: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n    position: \"relative\",\n  },\n  pageSizeLabel: {\n    fontSize: 14,\n    color: \"#64748B\",\n    marginHorizontal: 8,\n  },\n  pageSizeButton: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n    paddingHorizontal: 12,\n    paddingVertical: 6,\n    backgroundColor: \"#FFFFFF\",\n    borderWidth: 1,\n    borderColor: \"#E2E8F0\",\n    borderRadius: 6,\n    minWidth: 60,\n  },\n  pageSizeButtonText: {\n    fontSize: 14,\n    color: \"#0F172A\",\n    marginRight: 4,\n  },\n  pageSizeArrow: {\n    fontSize: 10,\n    color: \"#64748B\",\n  },\n  pageSizeMenu: {\n    position: \"absolute\",\n    top: 35,\n    right: 0,\n    backgroundColor: \"#FFFFFF\",\n    borderWidth: 1,\n    borderColor: \"#E2E8F0\",\n    borderRadius: 6,\n    shadowColor: \"#000\",\n    shadowOffset: { width: 0, height: 2 },\n    shadowOpacity: 0.1,\n    shadowRadius: 8,\n    elevation: 5,\n    zIndex: 1000,\n  },\n  pageSizeMenuItem: {\n    paddingHorizontal: 16,\n    paddingVertical: 8,\n    minWidth: 60,\n  },\n  activePageSizeMenuItem: {\n    backgroundColor: \"#F1F5F9\",\n  },\n  pageSizeMenuText: {\n    fontSize: 14,\n    color: \"#0F172A\",\n    textAlign: \"center\",\n  },\n  activePageSizeMenuText: {\n    fontWeight: \"500\",\n    color: \"#3B82F6\",\n  },\n  paginationRow: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n    paddingHorizontal: 4,\n  },\n  pageButton: {\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    backgroundColor: \"#FFFFFF\",\n    borderWidth: 1,\n    borderColor: \"#E2E8F0\",\n    borderRadius: 6,\n    marginHorizontal: 2,\n  },\n  activePageButton: {\n    backgroundColor: \"#3B82F6\",\n    borderColor: \"#3B82F6\",\n  },\n  pageButtonText: {\n    color: \"#64748B\",\n    fontWeight: \"500\",\n  },\n  activePageButtonText: {\n    color: \"#FFFFFF\",\n  },\n  ellipsisText: {\n    color: \"#94A3B8\",\n  },\n  navButton: {\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    backgroundColor: \"#FFFFFF\",\n    borderWidth: 1,\n    borderColor: \"#E2E8F0\",\n    borderRadius: 6,\n    marginHorizontal: 2,\n  },\n  navButtonText: {\n    color: \"#64748B\",\n    fontWeight: \"500\",\n  },\n  disabledButton: {\n    opacity: 0.5,\n  },\n  disabledText: {\n    color: \"#CBD5E1\",\n  },\n});\n","import React, { useState, useEffect, useCallback, useRef } from \"react\";\nimport {\n  View,\n  Text,\n  Modal,\n  TouchableOpacity,\n  Animated,\n  Dimensions,\n  StyleSheet,\n  StatusBar,\n  Platform,\n} from \"react-native\";\nimport type { TourProps, TourStep } from \"../types\";\n\ninterface NativeTourProps extends Omit<TourProps, \"className\"> {\n  style?: any;\n}\n\ninterface TourOverlayProps {\n  targetLayout: { x: number; y: number; width: number; height: number } | null;\n  isVisible: boolean;\n}\n\nconst TourOverlay: React.FC<TourOverlayProps> = ({\n  targetLayout,\n  isVisible,\n}) => {\n  const fadeAnim = useRef(new Animated.Value(0)).current;\n\n  useEffect(() => {\n    Animated.timing(fadeAnim, {\n      toValue: isVisible ? 1 : 0,\n      duration: 300,\n      useNativeDriver: true,\n    }).start();\n  }, [isVisible, fadeAnim]);\n\n  if (!targetLayout) return null;\n\n  const screenHeight = Dimensions.get(\"window\").height;\n  const screenWidth = Dimensions.get(\"window\").width;\n  const statusBarHeight = StatusBar.currentHeight || 0;\n\n  return (\n    <Animated.View\n      style={[\n        StyleSheet.absoluteFillObject,\n        { opacity: fadeAnim, zIndex: 1000 },\n      ]}\n      pointerEvents=\"none\"\n    >\n      {/* Top overlay */}\n      <View\n        style={[\n          styles.overlaySection,\n          {\n            top: 0,\n            left: 0,\n            right: 0,\n            height: targetLayout.y - statusBarHeight,\n          },\n        ]}\n      />\n\n      {/* Left overlay */}\n      <View\n        style={[\n          styles.overlaySection,\n          {\n            top: targetLayout.y - statusBarHeight,\n            left: 0,\n            width: targetLayout.x,\n            height: targetLayout.height,\n          },\n        ]}\n      />\n\n      {/* Right overlay */}\n      <View\n        style={[\n          styles.overlaySection,\n          {\n            top: targetLayout.y - statusBarHeight,\n            left: targetLayout.x + targetLayout.width,\n            right: 0,\n            height: targetLayout.height,\n          },\n        ]}\n      />\n\n      {/* Bottom overlay */}\n      <View\n        style={[\n          styles.overlaySection,\n          {\n            top: targetLayout.y + targetLayout.height - statusBarHeight,\n            left: 0,\n            right: 0,\n            bottom: 0,\n          },\n        ]}\n      />\n\n      {/* Target highlight border */}\n      <View\n        style={[\n          styles.targetHighlight,\n          {\n            top: targetLayout.y - statusBarHeight - 4,\n            left: targetLayout.x - 4,\n            width: targetLayout.width + 8,\n            height: targetLayout.height + 8,\n          },\n        ]}\n      />\n    </Animated.View>\n  );\n};\n\ninterface TourTooltipProps {\n  step: TourStep;\n  targetLayout: { x: number; y: number; width: number; height: number } | null;\n  currentStepIndex: number;\n  totalSteps: number;\n  onNext: () => void;\n  onPrevious: () => void;\n  onClose: () => void;\n  onSkip: () => void;\n  showSkipButton: boolean;\n  locale: Required<NativeTourProps[\"locale\"]>;\n}\n\nconst TourTooltip: React.FC<TourTooltipProps> = ({\n  step,\n  targetLayout,\n  currentStepIndex,\n  totalSteps,\n  onNext,\n  onPrevious,\n  onClose,\n  onSkip,\n  showSkipButton,\n  locale,\n}) => {\n  const [tooltipLayout, setTooltipLayout] = useState({ width: 0, height: 0 });\n  const slideAnim = useRef(new Animated.Value(0)).current;\n\n  useEffect(() => {\n    Animated.spring(slideAnim, {\n      toValue: 1,\n      useNativeDriver: true,\n      tension: 100,\n      friction: 8,\n    }).start();\n  }, [slideAnim]);\n\n  const calculatePosition = () => {\n    if (!targetLayout || !tooltipLayout.width) {\n      return { top: 100, left: 20, right: 20 };\n    }\n\n    const screenHeight = Dimensions.get(\"window\").height;\n    const screenWidth = Dimensions.get(\"window\").width;\n    const statusBarHeight = StatusBar.currentHeight || 0;\n    const padding = 20;\n    const placement = step.placement || \"bottom\";\n\n    let top = 0;\n    const left = padding;\n    const right = padding;\n\n    switch (placement) {\n      case \"top\":\n        top = targetLayout.y - tooltipLayout.height - 16 - statusBarHeight;\n        break;\n      case \"bottom\":\n        top = targetLayout.y + targetLayout.height + 16 - statusBarHeight;\n        break;\n      case \"center\":\n        top = screenHeight / 2 - tooltipLayout.height / 2 - statusBarHeight;\n        break;\n      default:\n        top = targetLayout.y + targetLayout.height + 16 - statusBarHeight;\n    }\n\n    // Ensure tooltip stays within screen bounds\n    if (top < padding) top = padding;\n    if (top + tooltipLayout.height > screenHeight - padding - statusBarHeight) {\n      top = screenHeight - tooltipLayout.height - padding - statusBarHeight;\n    }\n\n    return { top, left, right };\n  };\n\n  const position = calculatePosition();\n\n  return (\n    <Animated.View\n      style={[\n        styles.tooltip,\n        position,\n        {\n          transform: [\n            {\n              translateY: slideAnim.interpolate({\n                inputRange: [0, 1],\n                outputRange: [20, 0],\n              }),\n            },\n            {\n              scale: slideAnim.interpolate({\n                inputRange: [0, 1],\n                outputRange: [0.95, 1],\n              }),\n            },\n          ],\n          opacity: slideAnim,\n        },\n      ]}\n      onLayout={(event) => {\n        const { width, height } = event.nativeEvent.layout;\n        setTooltipLayout({ width, height });\n      }}\n    >\n      {/* Header */}\n      <View style={styles.tooltipHeader}>\n        <Text style={styles.tooltipTitle}>{step.title}</Text>\n        {!step.hideCloseButton && (\n          <TouchableOpacity onPress={onClose} style={styles.closeButton}>\n            <Text style={styles.closeButtonText}>✕</Text>\n          </TouchableOpacity>\n        )}\n      </View>\n\n      {/* Content */}\n      <Text style={styles.tooltipContent}>\n        {typeof step.content === \"string\"\n          ? step.content\n          : \"Content not supported in React Native\"}\n      </Text>\n\n      {/* Footer */}\n      {!step.hideFooter && (\n        <View style={styles.tooltipFooter}>\n          <View style={styles.footerLeft}>\n            <View style={styles.stepBadge}>\n              <Text style={styles.stepBadgeText}>\n                {currentStepIndex + 1} of {totalSteps}\n              </Text>\n            </View>\n            {showSkipButton && (\n              <TouchableOpacity onPress={onSkip} style={styles.skipButton}>\n                <Text style={styles.skipButtonText}>\n                  {locale?.skip || \"Skip\"}\n                </Text>\n              </TouchableOpacity>\n            )}\n          </View>\n\n          <View style={styles.footerRight}>\n            {currentStepIndex > 0 && (\n              <TouchableOpacity onPress={onPrevious} style={styles.backButton}>\n                <Text style={styles.backButtonText}>\n                  {locale?.back || \"Back\"}\n                </Text>\n              </TouchableOpacity>\n            )}\n            <TouchableOpacity\n              onPress={currentStepIndex === totalSteps - 1 ? onClose : onNext}\n              style={styles.nextButton}\n            >\n              <Text style={styles.nextButtonText}>\n                {currentStepIndex === totalSteps - 1\n                  ? locale?.finish || \"Finish\"\n                  : locale?.next || \"Next\"}\n              </Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n      )}\n    </Animated.View>\n  );\n};\n\nexport const Tour: React.FC<NativeTourProps> = ({\n  steps,\n  isOpen,\n  onRequestClose,\n  onStepChange,\n  onFinish,\n  onSkip,\n  currentStepIndex = 0,\n  showProgress = true,\n  showSkipButton = true,\n  locale = {\n    back: \"Back\",\n    close: \"Close\",\n    last: \"Finish\",\n    next: \"Next\",\n    skip: \"Skip\",\n    finish: \"Finish\",\n  },\n  style,\n}) => {\n  const [internalStepIndex, setInternalStepIndex] = useState(currentStepIndex);\n  const [targetLayout, setTargetLayout] = useState<{\n    x: number;\n    y: number;\n    width: number;\n    height: number;\n  } | null>(null);\n  const currentStep = steps[internalStepIndex];\n\n  // Handle step changes\n  useEffect(() => {\n    onStepChange?.(internalStepIndex);\n  }, [internalStepIndex, onStepChange]);\n\n  // Find target element layout (would need ref system in real implementation)\n  useEffect(() => {\n    if (!isOpen || !currentStep?.target) {\n      setTargetLayout(null);\n      return;\n    }\n\n    // In a real implementation, you'd need to measure the target component\n    // For now, we'll use a placeholder layout\n    setTargetLayout({\n      x: 50,\n      y: 200,\n      width: 200,\n      height: 40,\n    });\n  }, [currentStep?.target, internalStepIndex, isOpen]);\n\n  const handleNext = useCallback(() => {\n    if (internalStepIndex < steps.length - 1) {\n      setInternalStepIndex((prev) => prev + 1);\n    } else {\n      onFinish?.();\n      onRequestClose();\n    }\n  }, [internalStepIndex, steps.length, onFinish, onRequestClose]);\n\n  const handlePrevious = useCallback(() => {\n    if (internalStepIndex > 0) {\n      setInternalStepIndex((prev) => prev - 1);\n    }\n  }, [internalStepIndex]);\n\n  const handleClose = useCallback(() => {\n    onRequestClose();\n  }, [onRequestClose]);\n\n  const handleSkip = useCallback(() => {\n    onSkip?.();\n    onRequestClose();\n  }, [onSkip, onRequestClose]);\n\n  if (!isOpen || !currentStep) {\n    return null;\n  }\n\n  return (\n    <Modal\n      visible={isOpen}\n      transparent\n      animationType=\"fade\"\n      onRequestClose={handleClose}\n      statusBarTranslucent={Platform.OS === \"android\"}\n    >\n      <View style={[styles.container, style]}>\n        {/* Progress indicator */}\n        {showProgress && (\n          <View style={styles.progressContainer}>\n            <Text style={styles.progressText}>Tour Progress</Text>\n            <View style={styles.progressBar}>\n              <View\n                style={[\n                  styles.progressFill,\n                  {\n                    width: `${((internalStepIndex + 1) / steps.length) * 100}%`,\n                  },\n                ]}\n              />\n            </View>\n            <Text style={styles.progressCounter}>\n              {internalStepIndex + 1}/{steps.length}\n            </Text>\n          </View>\n        )}\n\n        {/* Overlay */}\n        <TourOverlay targetLayout={targetLayout} isVisible={isOpen} />\n\n        {/* Tooltip */}\n        <TourTooltip\n          step={currentStep}\n          targetLayout={targetLayout}\n          currentStepIndex={internalStepIndex}\n          totalSteps={steps.length}\n          onNext={handleNext}\n          onPrevious={handlePrevious}\n          onClose={handleClose}\n          onSkip={handleSkip}\n          showSkipButton={showSkipButton}\n          locale={{\n            back: locale?.back ?? \"Back\",\n            close: locale?.close ?? \"Close\",\n            last: locale?.last ?? \"Finish\",\n            next: locale?.next ?? \"Next\",\n            skip: locale?.skip ?? \"Skip\",\n            finish: locale?.finish ?? \"Finish\",\n          }}\n        />\n      </View>\n    </Modal>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n    backgroundColor: \"transparent\",\n  },\n  progressContainer: {\n    position: \"absolute\",\n    top: Platform.OS === \"ios\" ? 60 : 40,\n    left: 20,\n    right: 20,\n    backgroundColor: \"#FFFFFF\",\n    borderRadius: 8,\n    padding: 12,\n    flexDirection: \"row\",\n    alignItems: \"center\",\n    shadowColor: \"#000\",\n    shadowOffset: { width: 0, height: 2 },\n    shadowOpacity: 0.1,\n    shadowRadius: 4,\n    elevation: 4,\n    zIndex: 1001,\n  },\n  progressText: {\n    fontSize: 14,\n    fontWeight: \"600\",\n    color: \"#111827\",\n    marginRight: 12,\n  },\n  progressBar: {\n    flex: 1,\n    height: 6,\n    backgroundColor: \"#E5E7EB\",\n    borderRadius: 3,\n    marginRight: 12,\n  },\n  progressFill: {\n    height: \"100%\",\n    backgroundColor: \"#3B82F6\",\n    borderRadius: 3,\n  },\n  progressCounter: {\n    fontSize: 12,\n    color: \"#6B7280\",\n  },\n  overlaySection: {\n    position: \"absolute\",\n    backgroundColor: \"rgba(0, 0, 0, 0.5)\",\n  },\n  targetHighlight: {\n    position: \"absolute\",\n    borderWidth: 2,\n    borderColor: \"#3B82F6\",\n    borderRadius: 6,\n    backgroundColor: \"transparent\",\n  },\n  tooltip: {\n    position: \"absolute\",\n    backgroundColor: \"#FFFFFF\",\n    borderRadius: 12,\n    padding: 20,\n    margin: 20,\n    shadowColor: \"#000\",\n    shadowOffset: { width: 0, height: 4 },\n    shadowOpacity: 0.15,\n    shadowRadius: 12,\n    elevation: 8,\n    zIndex: 1001,\n  },\n  tooltipHeader: {\n    flexDirection: \"row\",\n    justifyContent: \"space-between\",\n    alignItems: \"flex-start\",\n    marginBottom: 12,\n  },\n  tooltipTitle: {\n    fontSize: 18,\n    fontWeight: \"600\",\n    color: \"#111827\",\n    flex: 1,\n  },\n  closeButton: {\n    padding: 4,\n    marginLeft: 8,\n  },\n  closeButtonText: {\n    fontSize: 16,\n    color: \"#6B7280\",\n  },\n  tooltipContent: {\n    fontSize: 14,\n    color: \"#6B7280\",\n    lineHeight: 20,\n    marginBottom: 20,\n  },\n  tooltipFooter: {\n    flexDirection: \"row\",\n    justifyContent: \"space-between\",\n    alignItems: \"center\",\n  },\n  footerLeft: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n  },\n  footerRight: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n    gap: 8,\n  },\n  stepBadge: {\n    backgroundColor: \"#F3F4F6\",\n    paddingHorizontal: 8,\n    paddingVertical: 4,\n    borderRadius: 12,\n    marginRight: 12,\n  },\n  stepBadgeText: {\n    fontSize: 12,\n    color: \"#6B7280\",\n    fontWeight: \"500\",\n  },\n  skipButton: {\n    paddingHorizontal: 8,\n    paddingVertical: 4,\n  },\n  skipButtonText: {\n    fontSize: 14,\n    color: \"#6B7280\",\n  },\n  backButton: {\n    paddingHorizontal: 16,\n    paddingVertical: 8,\n    borderWidth: 1,\n    borderColor: \"#D1D5DB\",\n    borderRadius: 6,\n    marginRight: 8,\n  },\n  backButtonText: {\n    fontSize: 14,\n    color: \"#374151\",\n    fontWeight: \"500\",\n  },\n  nextButton: {\n    paddingHorizontal: 16,\n    paddingVertical: 8,\n    backgroundColor: \"#3B82F6\",\n    borderRadius: 6,\n  },\n  nextButtonText: {\n    fontSize: 14,\n    color: \"#FFFFFF\",\n    fontWeight: \"500\",\n  },\n});\n","import React, { useState, useEffect, useRef } from \"react\";\nimport {\n  View,\n  Text,\n  Modal,\n  TouchableOpacity,\n  Animated,\n  Dimensions,\n  StyleSheet,\n  Platform,\n} from \"react-native\";\nimport type { TooltipProps } from \"../types\";\n\ninterface NativeTooltipProps extends Omit<\n  TooltipProps,\n  \"className\" | \"target\"\n> {\n  style?: any;\n  targetRef?: React.RefObject<View>;\n  targetLayout?: { x: number; y: number; width: number; height: number };\n}\n\nexport const Tooltip: React.FC<NativeTooltipProps> = ({\n  isOpen,\n  onClose,\n  targetRef,\n  targetLayout: providedLayout,\n  placement = \"top\",\n  title,\n  content,\n  showCloseButton = true,\n  hideAfter,\n  offset = 8,\n  style,\n}) => {\n  const [tooltipLayout, setTooltipLayout] = useState({ width: 0, height: 0 });\n  const [targetLayout, setTargetLayout] = useState<{\n    x: number;\n    y: number;\n    width: number;\n    height: number;\n  } | null>(providedLayout || null);\n  const fadeAnim = useRef(new Animated.Value(0)).current;\n  const scaleAnim = useRef(new Animated.Value(0.95)).current;\n  const timeoutRef = useRef<NodeJS.Timeout | undefined>(undefined);\n\n  // Measure target element\n  useEffect(() => {\n    if (!isOpen || !targetRef?.current || providedLayout) return;\n\n    targetRef.current.measureInWindow((x, y, width, height) => {\n      setTargetLayout({ x, y, width, height });\n    });\n  }, [isOpen, targetRef, providedLayout]);\n\n  // Animate in/out\n  useEffect(() => {\n    if (isOpen) {\n      Animated.parallel([\n        Animated.timing(fadeAnim, {\n          toValue: 1,\n          duration: 200,\n          useNativeDriver: true,\n        }),\n        Animated.spring(scaleAnim, {\n          toValue: 1,\n          useNativeDriver: true,\n          tension: 100,\n          friction: 8,\n        }),\n      ]).start();\n    } else {\n      Animated.parallel([\n        Animated.timing(fadeAnim, {\n          toValue: 0,\n          duration: 150,\n          useNativeDriver: true,\n        }),\n        Animated.timing(scaleAnim, {\n          toValue: 0.95,\n          duration: 150,\n          useNativeDriver: true,\n        }),\n      ]).start();\n    }\n  }, [isOpen, fadeAnim, scaleAnim]);\n\n  // Auto-hide functionality\n  useEffect(() => {\n    if (!isOpen || !hideAfter) return;\n\n    timeoutRef.current = setTimeout(() => {\n      onClose();\n    }, hideAfter);\n\n    return () => {\n      if (timeoutRef.current) {\n        clearTimeout(timeoutRef.current);\n      }\n    };\n  }, [isOpen, hideAfter, onClose]);\n\n  const calculatePosition = () => {\n    if (!targetLayout || !tooltipLayout.width) {\n      return { top: 100, left: 20, right: 20 };\n    }\n\n    const screenWidth = Dimensions.get(\"window\").width;\n    const padding = 16;\n\n    let top = 0;\n    let left = padding;\n    let right = padding;\n\n    switch (placement) {\n      case \"top\":\n        top = targetLayout.y - tooltipLayout.height - offset;\n        left = Math.max(\n          padding,\n          targetLayout.x + (targetLayout.width - tooltipLayout.width) / 2,\n        );\n        right = Math.max(padding, screenWidth - left - tooltipLayout.width);\n        break;\n      case \"bottom\":\n        top = targetLayout.y + targetLayout.height + offset;\n        left = Math.max(\n          padding,\n          targetLayout.x + (targetLayout.width - tooltipLayout.width) / 2,\n        );\n        right = Math.max(padding, screenWidth - left - tooltipLayout.width);\n        break;\n      case \"left\":\n        top = targetLayout.y + (targetLayout.height - tooltipLayout.height) / 2;\n        left = padding;\n        right = screenWidth - targetLayout.x + offset;\n        break;\n      case \"right\":\n        top = targetLayout.y + (targetLayout.height - tooltipLayout.height) / 2;\n        left = targetLayout.x + targetLayout.width + offset;\n        right = padding;\n        break;\n    }\n\n    // Ensure tooltip stays within screen bounds\n    if (top < padding) top = padding;\n    if (left < padding) left = padding;\n    if (right < padding) right = padding;\n\n    return { top, left, right };\n  };\n\n  if (!isOpen || !targetLayout) {\n    return null;\n  }\n\n  const position = calculatePosition();\n\n  return (\n    <Modal\n      visible={isOpen}\n      transparent\n      animationType=\"none\"\n      onRequestClose={onClose}\n    >\n      {/* Backdrop */}\n      <TouchableOpacity\n        style={styles.backdrop}\n        activeOpacity={1}\n        onPress={onClose}\n      >\n        {/* Tooltip */}\n        <Animated.View\n          style={[\n            styles.tooltip,\n            position,\n            {\n              opacity: fadeAnim,\n              transform: [{ scale: scaleAnim }],\n            },\n            style,\n          ]}\n          onLayout={(event) => {\n            const { width, height } = event.nativeEvent.layout;\n            setTooltipLayout({ width, height });\n          }}\n        >\n          <TouchableOpacity\n            activeOpacity={1}\n            onPress={(e) => e.stopPropagation()}\n          >\n            {/* Header */}\n            {(title || showCloseButton) && (\n              <View style={styles.header}>\n                {title && (\n                  <Text style={styles.title} numberOfLines={2}>\n                    {title}\n                  </Text>\n                )}\n                {showCloseButton && (\n                  <TouchableOpacity\n                    onPress={onClose}\n                    style={styles.closeButton}\n                  >\n                    <Text style={styles.closeButtonText}>✕</Text>\n                  </TouchableOpacity>\n                )}\n              </View>\n            )}\n\n            {/* Content */}\n            <Text style={styles.content}>\n              {typeof content === \"string\"\n                ? content\n                : \"Content not supported in React Native\"}\n            </Text>\n          </TouchableOpacity>\n        </Animated.View>\n      </TouchableOpacity>\n    </Modal>\n  );\n};\n\nconst styles = StyleSheet.create({\n  backdrop: {\n    flex: 1,\n    backgroundColor: \"transparent\",\n  },\n  tooltip: {\n    position: \"absolute\",\n    backgroundColor: \"#FFFFFF\",\n    borderRadius: 8,\n    padding: 12,\n    maxWidth: 280,\n    shadowColor: \"#000\",\n    shadowOffset: { width: 0, height: 2 },\n    shadowOpacity: 0.1,\n    shadowRadius: 8,\n    elevation: 4,\n    borderWidth: 1,\n    borderColor: \"#E5E7EB\",\n  },\n  header: {\n    flexDirection: \"row\",\n    justifyContent: \"space-between\",\n    alignItems: \"flex-start\",\n    marginBottom: 8,\n  },\n  title: {\n    fontSize: 14,\n    fontWeight: \"600\",\n    color: \"#111827\",\n    flex: 1,\n  },\n  closeButton: {\n    padding: 2,\n    marginLeft: 8,\n  },\n  closeButtonText: {\n    fontSize: 12,\n    color: \"#6B7280\",\n  },\n  content: {\n    fontSize: 14,\n    color: \"#6B7280\",\n    lineHeight: 18,\n  },\n});\n","import React, { useState, useCallback } from \"react\";\nimport {\n  View,\n  Text,\n  ScrollView,\n  TouchableOpacity,\n  StyleSheet,\n  Dimensions,\n} from \"react-native\";\nimport type { OnboardingProps, OnboardingStep } from \"../types\";\n\ninterface NativeOnboardingProps extends Omit<OnboardingProps, \"className\"> {\n  style?: any;\n}\n\ninterface StepCardProps {\n  step: OnboardingStep;\n  index: number;\n  isActive: boolean;\n  isCompleted: boolean;\n  isAccessible: boolean;\n  onStepClick: (index: number) => void;\n  onComplete: () => void;\n  isLoading?: boolean;\n}\n\nconst StepCard: React.FC<StepCardProps> = ({\n  step,\n  index,\n  isActive,\n  isCompleted,\n  isAccessible,\n  onStepClick,\n  onComplete,\n  isLoading = false,\n}) => {\n  const handlePress = () => {\n    if (isAccessible && !isCompleted) {\n      onStepClick(index);\n    }\n  };\n\n  return (\n    <TouchableOpacity\n      style={[\n        styles.stepCard,\n        isActive && styles.stepCardActive,\n        isCompleted && styles.stepCardCompleted,\n        !isAccessible && styles.stepCardDisabled,\n      ]}\n      onPress={handlePress}\n      disabled={!isAccessible || isCompleted}\n      activeOpacity={0.7}\n    >\n      {/* Header */}\n      <View style={styles.stepHeader}>\n        <View style={styles.stepIndicatorContainer}>\n          {/* Step indicator */}\n          <View\n            style={[\n              styles.stepIndicator,\n              isCompleted\n                ? styles.stepIndicatorCompleted\n                : isActive\n                  ? styles.stepIndicatorActive\n                  : styles.stepIndicatorDefault,\n            ]}\n          >\n            {isCompleted ? (\n              <Text style={styles.stepIndicatorCheckmark}>✓</Text>\n            ) : (\n              <Text\n                style={[\n                  styles.stepIndicatorText,\n                  isActive && styles.stepIndicatorTextActive,\n                ]}\n              >\n                {index + 1}\n              </Text>\n            )}\n          </View>\n\n          <View style={styles.stepTitleContainer}>\n            <Text style={styles.stepTitle}>{step.title}</Text>\n            <Text style={styles.stepDescription}>{step.description}</Text>\n          </View>\n        </View>\n\n        <View style={styles.stepBadges}>\n          {step.estimatedTime && (\n            <View style={styles.timeBadge}>\n              <Text style={styles.timeBadgeText}>🕐 {step.estimatedTime}m</Text>\n            </View>\n          )}\n          {step.isOptional && (\n            <View style={styles.optionalBadge}>\n              <Text style={styles.optionalBadgeText}>Optional</Text>\n            </View>\n          )}\n        </View>\n      </View>\n\n      {/* Content when active */}\n      {isActive && (\n        <View style={styles.stepContent}>\n          {step.content && (\n            <View style={styles.stepContentText}>\n              <Text style={styles.contentText}>\n                {typeof step.content === \"string\"\n                  ? step.content\n                  : \"Content not supported in React Native\"}\n              </Text>\n            </View>\n          )}\n\n          {step.action && (\n            <View style={styles.stepActions}>\n              <TouchableOpacity\n                style={[\n                  styles.actionButton,\n                  isLoading && styles.actionButtonDisabled,\n                ]}\n                onPress={onComplete}\n                disabled={isLoading}\n              >\n                <Text style={styles.actionButtonText}>\n                  {isLoading ? \"Processing...\" : step.action.label}\n                </Text>\n                <Text style={styles.actionButtonArrow}>→</Text>\n              </TouchableOpacity>\n            </View>\n          )}\n        </View>\n      )}\n    </TouchableOpacity>\n  );\n};\n\nexport const Onboarding: React.FC<NativeOnboardingProps> = ({\n  steps,\n  currentStep,\n  onStepComplete,\n  onFinish,\n  onSkip,\n  showProgress = true,\n  allowSkip = true,\n  style,\n}) => {\n  const [loadingSteps, setLoadingSteps] = useState<Set<number>>(new Set());\n  const [completedSteps, setCompletedSteps] = useState<Set<number>>(new Set());\n\n  const progressPercentage = (completedSteps.size / steps.length) * 100;\n  const isCompleted = completedSteps.size === steps.length;\n\n  const handleStepClick = useCallback(\n    (stepIndex: number) => {\n      if (stepIndex <= currentStep) {\n        onStepComplete(stepIndex);\n      }\n    },\n    [currentStep, onStepComplete],\n  );\n\n  const handleStepAction = useCallback(\n    async (stepIndex: number) => {\n      const step = steps[stepIndex];\n      if (!step || !step.action) return;\n\n      setLoadingSteps((prev) => new Set(prev).add(stepIndex));\n\n      try {\n        await step.action.onClick();\n\n        if (step.validation) {\n          const isValid = await step.validation();\n          if (!isValid) {\n            return;\n          }\n        }\n\n        setCompletedSteps((prev) => new Set(prev).add(stepIndex));\n\n        if (stepIndex < steps.length - 1) {\n          setTimeout(() => {\n            onStepComplete(stepIndex + 1);\n          }, 500);\n        } else {\n          setTimeout(() => {\n            onFinish();\n          }, 1000);\n        }\n      } catch (error) {\n        console.error(\"Error completing step:\", error);\n      } finally {\n        setLoadingSteps((prev) => {\n          const newSet = new Set(prev);\n          newSet.delete(stepIndex);\n          return newSet;\n        });\n      }\n    },\n    [steps, onStepComplete, onFinish],\n  );\n\n  if (isCompleted) {\n    return (\n      <View style={[styles.container, styles.completedContainer, style]}>\n        <View style={styles.completedContent}>\n          <View style={styles.completedIcon}>\n            <Text style={styles.completedIconText}>✓</Text>\n          </View>\n          <Text style={styles.completedTitle}>Onboarding Complete!</Text>\n          <Text style={styles.completedDescription}>\n            You've successfully completed all the setup steps. Welcome aboard!\n          </Text>\n          <TouchableOpacity style={styles.getStartedButton} onPress={onFinish}>\n            <Text style={styles.getStartedButtonText}>Get Started</Text>\n            <Text style={styles.getStartedButtonArrow}>→</Text>\n          </TouchableOpacity>\n        </View>\n      </View>\n    );\n  }\n\n  return (\n    <View style={[styles.container, style]}>\n      {/* Header */}\n      <View style={styles.header}>\n        <View style={styles.headerContent}>\n          <View style={styles.headerTextContainer}>\n            <Text style={styles.headerTitle}>\n              Welcome! Let's get you set up\n            </Text>\n            <Text style={styles.headerSubtitle}>\n              Follow these steps to configure your account and get started.\n            </Text>\n          </View>\n\n          {allowSkip && onSkip && (\n            <TouchableOpacity onPress={onSkip} style={styles.skipButton}>\n              <Text style={styles.skipButtonText}>⏭ Skip Onboarding</Text>\n            </TouchableOpacity>\n          )}\n        </View>\n\n        {/* Progress */}\n        {showProgress && (\n          <View style={styles.progressContainer}>\n            <View style={styles.progressHeader}>\n              <Text style={styles.progressLabel}>Progress</Text>\n              <Text style={styles.progressText}>\n                {completedSteps.size} of {steps.length} completed\n              </Text>\n            </View>\n            <View style={styles.progressBar}>\n              <View\n                style={[\n                  styles.progressFill,\n                  { width: `${progressPercentage}%` },\n                ]}\n              />\n            </View>\n          </View>\n        )}\n      </View>\n\n      {/* Steps */}\n      <ScrollView\n        style={styles.stepsContainer}\n        showsVerticalScrollIndicator={false}\n      >\n        {steps.map((step, index) => {\n          const isActive = index === currentStep;\n          const isCompleted = completedSteps.has(index);\n          const isAccessible = index <= currentStep || isCompleted;\n          const isLoading = loadingSteps.has(index);\n\n          return (\n            <StepCard\n              key={step.id}\n              step={step}\n              index={index}\n              isActive={isActive}\n              isCompleted={isCompleted}\n              isAccessible={isAccessible}\n              onStepClick={handleStepClick}\n              onComplete={() => handleStepAction(index)}\n              isLoading={isLoading}\n            />\n          );\n        })}\n      </ScrollView>\n\n      {/* Footer */}\n      <View style={styles.footer}>\n        <Text style={styles.footerHelpText}>\n          Need help? Contact our support team.\n        </Text>\n        <Text style={styles.footerStepText}>\n          Step {currentStep + 1} of {steps.length}\n        </Text>\n      </View>\n    </View>\n  );\n};\n\nconst { width } = Dimensions.get(\"window\");\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n    backgroundColor: \"#F9FAFB\",\n  },\n  completedContainer: {\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    padding: 24,\n  },\n  completedContent: {\n    alignItems: \"center\",\n    backgroundColor: \"#FFFFFF\",\n    borderRadius: 16,\n    padding: 32,\n    width: \"100%\",\n    maxWidth: 400,\n    shadowColor: \"#000\",\n    shadowOffset: { width: 0, height: 2 },\n    shadowOpacity: 0.1,\n    shadowRadius: 8,\n    elevation: 4,\n  },\n  completedIcon: {\n    width: 64,\n    height: 64,\n    backgroundColor: \"#10B981\",\n    borderRadius: 32,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    marginBottom: 24,\n  },\n  completedIconText: {\n    fontSize: 32,\n    color: \"#FFFFFF\",\n    fontWeight: \"bold\",\n  },\n  completedTitle: {\n    fontSize: 24,\n    fontWeight: \"bold\",\n    color: \"#111827\",\n    textAlign: \"center\",\n    marginBottom: 12,\n  },\n  completedDescription: {\n    fontSize: 16,\n    color: \"#6B7280\",\n    textAlign: \"center\",\n    lineHeight: 24,\n    marginBottom: 24,\n  },\n  getStartedButton: {\n    backgroundColor: \"#3B82F6\",\n    paddingHorizontal: 24,\n    paddingVertical: 12,\n    borderRadius: 8,\n    flexDirection: \"row\",\n    alignItems: \"center\",\n  },\n  getStartedButtonText: {\n    fontSize: 16,\n    fontWeight: \"600\",\n    color: \"#FFFFFF\",\n    marginRight: 8,\n  },\n  getStartedButtonArrow: {\n    fontSize: 16,\n    color: \"#FFFFFF\",\n  },\n  header: {\n    backgroundColor: \"#FFFFFF\",\n    paddingHorizontal: 24,\n    paddingTop: 32,\n    paddingBottom: 24,\n    borderBottomWidth: 1,\n    borderBottomColor: \"#E5E7EB\",\n  },\n  headerContent: {\n    flexDirection: \"row\",\n    justifyContent: \"space-between\",\n    alignItems: \"flex-start\",\n    marginBottom: 20,\n  },\n  headerTextContainer: {\n    flex: 1,\n    marginRight: 16,\n  },\n  headerTitle: {\n    fontSize: 24,\n    fontWeight: \"bold\",\n    color: \"#111827\",\n    marginBottom: 8,\n  },\n  headerSubtitle: {\n    fontSize: 16,\n    color: \"#6B7280\",\n    lineHeight: 24,\n  },\n  skipButton: {\n    paddingHorizontal: 16,\n    paddingVertical: 8,\n    borderWidth: 1,\n    borderColor: \"#D1D5DB\",\n    borderRadius: 8,\n  },\n  skipButtonText: {\n    fontSize: 14,\n    color: \"#374151\",\n    fontWeight: \"500\",\n  },\n  progressContainer: {\n    marginTop: 8,\n  },\n  progressHeader: {\n    flexDirection: \"row\",\n    justifyContent: \"space-between\",\n    alignItems: \"center\",\n    marginBottom: 8,\n  },\n  progressLabel: {\n    fontSize: 14,\n    fontWeight: \"600\",\n    color: \"#111827\",\n  },\n  progressText: {\n    fontSize: 14,\n    color: \"#6B7280\",\n  },\n  progressBar: {\n    height: 6,\n    backgroundColor: \"#E5E7EB\",\n    borderRadius: 3,\n  },\n  progressFill: {\n    height: \"100%\",\n    backgroundColor: \"#3B82F6\",\n    borderRadius: 3,\n  },\n  stepsContainer: {\n    flex: 1,\n    padding: 24,\n  },\n  stepCard: {\n    backgroundColor: \"#FFFFFF\",\n    borderRadius: 12,\n    padding: 20,\n    marginBottom: 16,\n    borderWidth: 1,\n    borderColor: \"#E5E7EB\",\n    shadowColor: \"#000\",\n    shadowOffset: { width: 0, height: 1 },\n    shadowOpacity: 0.05,\n    shadowRadius: 4,\n    elevation: 2,\n  },\n  stepCardActive: {\n    borderColor: \"#3B82F6\",\n    borderWidth: 2,\n  },\n  stepCardCompleted: {\n    backgroundColor: \"#F9FAFB\",\n  },\n  stepCardDisabled: {\n    opacity: 0.5,\n  },\n  stepHeader: {\n    flexDirection: \"row\",\n    justifyContent: \"space-between\",\n    alignItems: \"flex-start\",\n  },\n  stepIndicatorContainer: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n    flex: 1,\n  },\n  stepIndicator: {\n    width: 32,\n    height: 32,\n    borderRadius: 16,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    borderWidth: 2,\n    marginRight: 12,\n  },\n  stepIndicatorDefault: {\n    borderColor: \"#D1D5DB\",\n    backgroundColor: \"#FFFFFF\",\n  },\n  stepIndicatorActive: {\n    borderColor: \"#3B82F6\",\n    backgroundColor: \"#FFFFFF\",\n  },\n  stepIndicatorCompleted: {\n    borderColor: \"#10B981\",\n    backgroundColor: \"#10B981\",\n  },\n  stepIndicatorText: {\n    fontSize: 14,\n    fontWeight: \"600\",\n    color: \"#6B7280\",\n  },\n  stepIndicatorTextActive: {\n    color: \"#3B82F6\",\n  },\n  stepIndicatorCheckmark: {\n    fontSize: 16,\n    color: \"#FFFFFF\",\n    fontWeight: \"bold\",\n  },\n  stepTitleContainer: {\n    flex: 1,\n  },\n  stepTitle: {\n    fontSize: 18,\n    fontWeight: \"600\",\n    color: \"#111827\",\n    marginBottom: 4,\n  },\n  stepDescription: {\n    fontSize: 14,\n    color: \"#6B7280\",\n    lineHeight: 20,\n  },\n  stepBadges: {\n    alignItems: \"flex-end\",\n  },\n  timeBadge: {\n    backgroundColor: \"#F3F4F6\",\n    paddingHorizontal: 8,\n    paddingVertical: 4,\n    borderRadius: 12,\n    marginBottom: 4,\n  },\n  timeBadgeText: {\n    fontSize: 12,\n    color: \"#6B7280\",\n  },\n  optionalBadge: {\n    backgroundColor: \"#FEF3C7\",\n    paddingHorizontal: 8,\n    paddingVertical: 4,\n    borderRadius: 12,\n  },\n  optionalBadgeText: {\n    fontSize: 12,\n    color: \"#92400E\",\n  },\n  stepContent: {\n    marginTop: 16,\n    paddingTop: 16,\n    borderTopWidth: 1,\n    borderTopColor: \"#E5E7EB\",\n  },\n  stepContentText: {\n    marginBottom: 16,\n  },\n  contentText: {\n    fontSize: 14,\n    color: \"#374151\",\n    lineHeight: 20,\n  },\n  stepActions: {\n    flexDirection: \"row\",\n    justifyContent: \"flex-end\",\n  },\n  actionButton: {\n    backgroundColor: \"#3B82F6\",\n    paddingHorizontal: 16,\n    paddingVertical: 10,\n    borderRadius: 8,\n    flexDirection: \"row\",\n    alignItems: \"center\",\n    minWidth: 120,\n  },\n  actionButtonDisabled: {\n    opacity: 0.6,\n  },\n  actionButtonText: {\n    fontSize: 14,\n    fontWeight: \"600\",\n    color: \"#FFFFFF\",\n    marginRight: 8,\n  },\n  actionButtonArrow: {\n    fontSize: 14,\n    color: \"#FFFFFF\",\n  },\n  footer: {\n    backgroundColor: \"#FFFFFF\",\n    paddingHorizontal: 24,\n    paddingVertical: 16,\n    borderTopWidth: 1,\n    borderTopColor: \"#E5E7EB\",\n    flexDirection: \"row\",\n    justifyContent: \"space-between\",\n    alignItems: \"center\",\n  },\n  footerHelpText: {\n    fontSize: 14,\n    color: \"#6B7280\",\n  },\n  footerStepText: {\n    fontSize: 14,\n    color: \"#6B7280\",\n  },\n});\n","import React from \"react\";\nimport {\n  View,\n  Text,\n  Modal,\n  TouchableOpacity,\n  ScrollView,\n  StyleSheet,\n  Dimensions,\n} from \"react-native\";\nimport type { WelcomeModalProps } from \"../types\";\n\ninterface NativeWelcomeModalProps extends Omit<WelcomeModalProps, \"className\"> {\n  style?: any;\n}\n\nexport const WelcomeModal: React.FC<NativeWelcomeModalProps> = ({\n  isOpen,\n  onClose,\n  onStartTour,\n  onSkip,\n  title = \"Welcome to our platform!\",\n  description = \"We're excited to have you here. Let us show you around with a quick tour of the key features.\",\n  tourButtonText = \"Start Tour\",\n  skipButtonText = \"Skip for now\",\n  features = [\n    {\n      icon: <Text style={styles.defaultFeatureIcon}>✨</Text>,\n      title: \"Modern Dashboard\",\n      description: \"Get insights at a glance with our intuitive dashboard\",\n    },\n    {\n      icon: <Text style={styles.defaultFeatureIcon}>📊</Text>,\n      title: \"Powerful Analytics\",\n      description: \"Track your progress with detailed analytics and reports\",\n    },\n    {\n      icon: <Text style={styles.defaultFeatureIcon}>👥</Text>,\n      title: \"Team Collaboration\",\n      description: \"Work together seamlessly with your team members\",\n    },\n  ],\n  style,\n}) => {\n  const handleStartTour = () => {\n    onStartTour();\n    onClose();\n  };\n\n  const handleSkip = () => {\n    onSkip?.();\n    onClose();\n  };\n\n  return (\n    <Modal\n      visible={isOpen}\n      transparent\n      animationType=\"fade\"\n      onRequestClose={onClose}\n    >\n      <View style={styles.backdrop}>\n        <View style={[styles.container, style]}>\n          <ScrollView\n            contentContainerStyle={styles.content}\n            showsVerticalScrollIndicator={false}\n          >\n            {/* Header */}\n            <View style={styles.header}>\n              {/* Welcome icon */}\n              <View style={styles.welcomeIcon}>\n                <Text style={styles.welcomeIconText}>✨</Text>\n              </View>\n\n              <Text style={styles.title}>{title}</Text>\n              <Text style={styles.description}>{description}</Text>\n            </View>\n\n            {/* Features grid */}\n            {features.length > 0 && (\n              <View style={styles.featuresContainer}>\n                {features.map((feature, index) => (\n                  <View key={index} style={styles.featureCard}>\n                    <View style={styles.featureIconContainer}>\n                      {feature.icon}\n                    </View>\n                    <Text style={styles.featureTitle}>{feature.title}</Text>\n                    <Text style={styles.featureDescription}>\n                      {feature.description}\n                    </Text>\n                  </View>\n                ))}\n              </View>\n            )}\n\n            {/* Action buttons */}\n            <View style={styles.actions}>\n              <TouchableOpacity\n                style={styles.tourButton}\n                onPress={handleStartTour}\n                activeOpacity={0.8}\n              >\n                <Text style={styles.tourButtonIcon}>▶</Text>\n                <Text style={styles.tourButtonText}>{tourButtonText}</Text>\n              </TouchableOpacity>\n\n              <TouchableOpacity\n                style={styles.skipButton}\n                onPress={handleSkip}\n                activeOpacity={0.8}\n              >\n                <Text style={styles.skipButtonIcon}>⏭</Text>\n                <Text style={styles.skipButtonText}>{skipButtonText}</Text>\n              </TouchableOpacity>\n            </View>\n\n            {/* Footer note */}\n            <Text style={styles.footerNote}>\n              You can always access the tour later from the help menu.\n            </Text>\n          </ScrollView>\n        </View>\n      </View>\n    </Modal>\n  );\n};\n\nconst { width, height } = Dimensions.get(\"window\");\n\nconst styles = StyleSheet.create({\n  backdrop: {\n    flex: 1,\n    backgroundColor: \"rgba(0, 0, 0, 0.5)\",\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    padding: 20,\n  },\n  container: {\n    backgroundColor: \"#FFFFFF\",\n    borderRadius: 16,\n    width: \"100%\",\n    maxWidth: 500,\n    maxHeight: height * 0.8,\n    shadowColor: \"#000\",\n    shadowOffset: { width: 0, height: 4 },\n    shadowOpacity: 0.15,\n    shadowRadius: 12,\n    elevation: 8,\n  },\n  content: {\n    padding: 24,\n  },\n  header: {\n    alignItems: \"center\",\n    marginBottom: 32,\n  },\n  welcomeIcon: {\n    width: 64,\n    height: 64,\n    backgroundColor: \"#3B82F6\",\n    borderRadius: 32,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    marginBottom: 24,\n  },\n  welcomeIconText: {\n    fontSize: 32,\n    color: \"#FFFFFF\",\n  },\n  title: {\n    fontSize: 24,\n    fontWeight: \"bold\",\n    color: \"#111827\",\n    textAlign: \"center\",\n    marginBottom: 16,\n  },\n  description: {\n    fontSize: 16,\n    color: \"#6B7280\",\n    textAlign: \"center\",\n    lineHeight: 24,\n    maxWidth: 320,\n  },\n  featuresContainer: {\n    marginBottom: 32,\n  },\n  featureCard: {\n    backgroundColor: \"#F9FAFB\",\n    borderRadius: 12,\n    padding: 16,\n    marginBottom: 12,\n    alignItems: \"center\",\n  },\n  featureIconContainer: {\n    width: 40,\n    height: 40,\n    backgroundColor: \"rgba(59, 130, 246, 0.1)\",\n    borderRadius: 20,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    marginBottom: 12,\n  },\n  defaultFeatureIcon: {\n    fontSize: 20,\n    color: \"#3B82F6\",\n  },\n  featureTitle: {\n    fontSize: 16,\n    fontWeight: \"600\",\n    color: \"#111827\",\n    marginBottom: 8,\n    textAlign: \"center\",\n  },\n  featureDescription: {\n    fontSize: 14,\n    color: \"#6B7280\",\n    textAlign: \"center\",\n    lineHeight: 20,\n  },\n  actions: {\n    gap: 12,\n    marginBottom: 24,\n  },\n  tourButton: {\n    backgroundColor: \"#3B82F6\",\n    paddingVertical: 16,\n    paddingHorizontal: 24,\n    borderRadius: 12,\n    flexDirection: \"row\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n  },\n  tourButtonIcon: {\n    fontSize: 16,\n    color: \"#FFFFFF\",\n    marginRight: 8,\n  },\n  tourButtonText: {\n    fontSize: 16,\n    fontWeight: \"600\",\n    color: \"#FFFFFF\",\n  },\n  skipButton: {\n    backgroundColor: \"transparent\",\n    paddingVertical: 16,\n    paddingHorizontal: 24,\n    borderRadius: 12,\n    borderWidth: 1,\n    borderColor: \"#D1D5DB\",\n    flexDirection: \"row\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n  },\n  skipButtonIcon: {\n    fontSize: 16,\n    color: \"#6B7280\",\n    marginRight: 8,\n  },\n  skipButtonText: {\n    fontSize: 16,\n    fontWeight: \"600\",\n    color: \"#374151\",\n  },\n  footerNote: {\n    fontSize: 12,\n    color: \"#9CA3AF\",\n    textAlign: \"center\",\n    lineHeight: 18,\n  },\n});\n","import React, { useState, useEffect, useRef } from \"react\";\nimport {\n  View,\n  Text,\n  Modal,\n  TouchableOpacity,\n  StyleSheet,\n  Animated,\n  Dimensions,\n  SafeAreaView,\n} from \"react-native\";\nimport type { FeatureHighlightProps } from \"../types\";\n\nconst { width: screenWidth, height: screenHeight } = Dimensions.get(\"window\");\n\nconst variantConfig = {\n  default: {\n    backgroundColor: \"#FFFFFF\",\n    borderColor: \"#E2E8F0\",\n    iconColor: \"#3B82F6\",\n    pulseColor: \"#3B82F6\",\n  },\n  success: {\n    backgroundColor: \"#F0FDF4\",\n    borderColor: \"#BBF7D0\",\n    iconColor: \"#16A34A\",\n    pulseColor: \"#16A34A\",\n  },\n  info: {\n    backgroundColor: \"#EFF6FF\",\n    borderColor: \"#BFDBFE\",\n    iconColor: \"#2563EB\",\n    pulseColor: \"#2563EB\",\n  },\n  warning: {\n    backgroundColor: \"#FFFBEB\",\n    borderColor: \"#FCD34D\",\n    iconColor: \"#D97706\",\n    pulseColor: \"#D97706\",\n  },\n};\n\nexport const FeatureHighlight: React.FC<FeatureHighlightProps> = ({\n  isOpen,\n  onClose,\n  target, // In native, this could be a ref or coordinates\n  title,\n  description,\n  placement = \"top\",\n  variant = \"default\",\n  showPulse = true,\n  autoClose,\n}) => {\n  const [targetPosition, setTargetPosition] = useState({\n    x: 0,\n    y: 0,\n    width: 0,\n    height: 0,\n  });\n  const pulseAnim = useRef(new Animated.Value(1)).current;\n  const fadeAnim = useRef(new Animated.Value(0)).current;\n  const timeoutRef = useRef<NodeJS.Timeout | undefined>(undefined);\n\n  const config = variantConfig[variant];\n\n  // Pulse animation\n  useEffect(() => {\n    if (!isOpen || !showPulse) return;\n\n    const createPulseAnimation = () => {\n      return Animated.loop(\n        Animated.sequence([\n          Animated.timing(pulseAnim, {\n            toValue: 1.2,\n            duration: 1000,\n            useNativeDriver: true,\n          }),\n          Animated.timing(pulseAnim, {\n            toValue: 1,\n            duration: 1000,\n            useNativeDriver: true,\n          }),\n        ]),\n      );\n    };\n\n    const pulseAnimation = createPulseAnimation();\n    pulseAnimation.start();\n\n    return () => pulseAnimation.stop();\n  }, [isOpen, showPulse, pulseAnim]);\n\n  // Fade in animation\n  useEffect(() => {\n    if (isOpen) {\n      Animated.timing(fadeAnim, {\n        toValue: 1,\n        duration: 200,\n        useNativeDriver: true,\n      }).start();\n    } else {\n      fadeAnim.setValue(0);\n    }\n  }, [isOpen, fadeAnim]);\n\n  // Auto-close functionality\n  useEffect(() => {\n    if (!isOpen || !autoClose) return;\n\n    timeoutRef.current = setTimeout(() => {\n      onClose();\n    }, autoClose);\n\n    return () => {\n      if (timeoutRef.current) {\n        clearTimeout(timeoutRef.current);\n      }\n    };\n  }, [isOpen, autoClose, onClose]);\n\n  // Calculate popup position based on placement\n  const getPopupPosition = () => {\n    const popupWidth = 280;\n    const popupHeight = 120;\n    const offset = 16;\n\n    let x = targetPosition.x;\n    let y = targetPosition.y;\n\n    switch (placement) {\n      case \"top\":\n        y = targetPosition.y - popupHeight - offset;\n        x = targetPosition.x + (targetPosition.width - popupWidth) / 2;\n        break;\n      case \"bottom\":\n        y = targetPosition.y + targetPosition.height + offset;\n        x = targetPosition.x + (targetPosition.width - popupWidth) / 2;\n        break;\n      case \"left\":\n        x = targetPosition.x - popupWidth - offset;\n        y = targetPosition.y + (targetPosition.height - popupHeight) / 2;\n        break;\n      case \"right\":\n        x = targetPosition.x + targetPosition.width + offset;\n        y = targetPosition.y + (targetPosition.height - popupHeight) / 2;\n        break;\n    }\n\n    // Keep popup within screen bounds\n    x = Math.max(16, Math.min(x, screenWidth - popupWidth - 16));\n    y = Math.max(50, Math.min(y, screenHeight - popupHeight - 50));\n\n    return { x, y, width: popupWidth, height: popupHeight };\n  };\n\n  const popupPosition = getPopupPosition();\n\n  const renderIcon = () => {\n    // Simple icon representation based on variant\n    const iconMap = {\n      default: \"ℹ\",\n      success: \"✓\",\n      info: \"ℹ\",\n      warning: \"⚠\",\n    };\n\n    return (\n      <View\n        style={[\n          styles.iconContainer,\n          { backgroundColor: config.iconColor + \"20\" },\n        ]}\n      >\n        <Text style={[styles.iconText, { color: config.iconColor }]}>\n          {iconMap[variant]}\n        </Text>\n      </View>\n    );\n  };\n\n  // For demonstration, set a default target position\n  // In a real implementation, you'd measure the target component\n  useEffect(() => {\n    if (isOpen && targetPosition.x === 0) {\n      // Default centered position for demonstration\n      setTargetPosition({\n        x: screenWidth / 2 - 50,\n        y: screenHeight / 2 - 25,\n        width: 100,\n        height: 50,\n      });\n    }\n  }, [isOpen, targetPosition.x]);\n\n  if (!isOpen) {\n    return null;\n  }\n\n  return (\n    <Modal\n      visible={isOpen}\n      transparent\n      animationType=\"none\"\n      onRequestClose={onClose}\n    >\n      <SafeAreaView style={styles.overlay}>\n        {/* Target highlight with pulse effect */}\n        {showPulse && (\n          <Animated.View\n            style={[\n              styles.targetHighlight,\n              {\n                left: targetPosition.x - 4,\n                top: targetPosition.y - 4,\n                width: targetPosition.width + 8,\n                height: targetPosition.height + 8,\n                borderColor: config.pulseColor,\n                transform: [{ scale: pulseAnim }],\n              },\n            ]}\n          />\n        )}\n\n        {/* Feature highlight popup */}\n        <Animated.View\n          style={[\n            styles.popup,\n            {\n              left: popupPosition.x,\n              top: popupPosition.y,\n              width: popupPosition.width,\n              backgroundColor: config.backgroundColor,\n              borderColor: config.borderColor,\n              opacity: fadeAnim,\n            },\n          ]}\n        >\n          <View style={styles.popupHeader}>\n            {renderIcon()}\n\n            <View style={styles.popupContent}>\n              <Text style={styles.popupTitle}>{title}</Text>\n              <Text style={styles.popupDescription}>{description}</Text>\n            </View>\n\n            <TouchableOpacity\n              style={styles.closeButton}\n              onPress={onClose}\n              activeOpacity={0.7}\n            >\n              <Text style={styles.closeButtonText}>✕</Text>\n            </TouchableOpacity>\n          </View>\n        </Animated.View>\n\n        {/* Background overlay to catch taps */}\n        <TouchableOpacity\n          style={styles.backgroundOverlay}\n          onPress={onClose}\n          activeOpacity={1}\n        />\n      </SafeAreaView>\n    </Modal>\n  );\n};\n\nconst styles = StyleSheet.create({\n  overlay: {\n    flex: 1,\n    backgroundColor: \"rgba(0, 0, 0, 0.1)\",\n  },\n  backgroundOverlay: {\n    ...StyleSheet.absoluteFillObject,\n    zIndex: -1,\n  },\n  targetHighlight: {\n    position: \"absolute\",\n    borderRadius: 8,\n    borderWidth: 2,\n    zIndex: 40,\n  },\n  popup: {\n    position: \"absolute\",\n    borderRadius: 12,\n    borderWidth: 1,\n    padding: 16,\n    zIndex: 50,\n    shadowColor: \"#000\",\n    shadowOffset: { width: 0, height: 4 },\n    shadowOpacity: 0.15,\n    shadowRadius: 12,\n    elevation: 8,\n  },\n  popupHeader: {\n    flexDirection: \"row\",\n    alignItems: \"flex-start\",\n  },\n  iconContainer: {\n    width: 24,\n    height: 24,\n    borderRadius: 12,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    marginRight: 12,\n    marginTop: 2,\n  },\n  iconText: {\n    fontSize: 14,\n    fontWeight: \"bold\",\n  },\n  popupContent: {\n    flex: 1,\n  },\n  popupTitle: {\n    fontSize: 16,\n    fontWeight: \"600\",\n    color: \"#0F172A\",\n    marginBottom: 4,\n  },\n  popupDescription: {\n    fontSize: 14,\n    color: \"#64748B\",\n    lineHeight: 20,\n  },\n  closeButton: {\n    width: 24,\n    height: 24,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    marginLeft: 8,\n  },\n  closeButtonText: {\n    fontSize: 16,\n    color: \"#64748B\",\n    fontWeight: \"bold\",\n  },\n});\n","import React, { useState } from \"react\";\nimport { View, StyleSheet } from \"react-native\";\nimport { AppShell } from \"@/components/app-shell/native/AppShell\";\nimport { BottomTabBar } from \"@/components/navigation/native/BottomTabBar\";\nimport type {\n  NavigationGroup,\n  User,\n  HeaderAction,\n} from \"@/components/app-shell/types\";\n\ninterface DashboardLayoutProps {\n  children: React.ReactNode;\n  user?: User;\n  currentPath?: string;\n  variant?: \"default\" | \"analytics\" | \"admin\";\n  customActions?: HeaderAction[];\n  customNavigation?: NavigationGroup[];\n  bottomTabs?: Array<{\n    id: string;\n    label: string;\n    icon?: string;\n    badge?: string | number;\n    onPress?: () => void;\n  }>;\n  activeBottomTab?: string;\n  onBottomTabPress?: (tabId: string) => void;\n  showBottomTabs?: boolean;\n  style?: any;\n}\n\nconst getDefaultNavigation = (\n  variant: string = \"default\",\n): NavigationGroup[] => {\n  const baseNavigation: NavigationGroup[] = [\n    {\n      id: \"main\",\n      label: \"Main\",\n      items: [\n        {\n          id: \"dashboard\",\n          label: \"Dashboard\",\n          href: \"/\",\n          icon: \"🏠\",\n          isActive: true,\n        },\n        {\n          id: \"analytics\",\n          label: \"Analytics\",\n          href: \"/analytics\",\n          icon: \"📊\",\n          badge: \"New\",\n        },\n        {\n          id: \"reports\",\n          label: \"Reports\",\n          href: \"/reports\",\n          icon: \"📄\",\n        },\n      ],\n    },\n    {\n      id: \"management\",\n      label: \"Management\",\n      items: [\n        {\n          id: \"users\",\n          label: \"Users\",\n          href: \"/users\",\n          icon: \"👥\",\n          badge: 12,\n        },\n        {\n          id: \"teams\",\n          label: \"Teams\",\n          href: \"/teams\",\n          icon: \"👥\",\n        },\n      ],\n    },\n    {\n      id: \"settings\",\n      label: \"Settings\",\n      items: [\n        {\n          id: \"general\",\n          label: \"General\",\n          href: \"/settings/general\",\n          icon: \"⚙️\",\n        },\n        {\n          id: \"integrations\",\n          label: \"Integrations\",\n          href: \"/settings/integrations\",\n          icon: \"🔌\",\n        },\n        {\n          id: \"security\",\n          label: \"Security\",\n          href: \"/settings/security\",\n          icon: \"🔒\",\n        },\n      ],\n    },\n  ];\n\n  if (variant === \"analytics\") {\n    return [\n      {\n        id: \"analytics\",\n        label: \"Analytics\",\n        items: [\n          {\n            id: \"overview\",\n            label: \"Overview\",\n            href: \"/analytics\",\n            icon: \"📊\",\n            isActive: true,\n          },\n          {\n            id: \"performance\",\n            label: \"Performance\",\n            href: \"/analytics/performance\",\n            icon: \"📈\",\n          },\n          {\n            id: \"users-analytics\",\n            label: \"User Analytics\",\n            href: \"/analytics/users\",\n            icon: \"👥\",\n          },\n          {\n            id: \"reports-analytics\",\n            label: \"Custom Reports\",\n            href: \"/analytics/reports\",\n            icon: \"📄\",\n          },\n        ],\n      },\n      ...baseNavigation.slice(1),\n    ];\n  }\n\n  if (variant === \"admin\") {\n    return [\n      {\n        id: \"admin\",\n        label: \"Administration\",\n        items: [\n          {\n            id: \"overview\",\n            label: \"Overview\",\n            href: \"/admin\",\n            icon: \"🏠\",\n            isActive: true,\n          },\n          {\n            id: \"system\",\n            label: \"System Health\",\n            href: \"/admin/system\",\n            icon: \"📊\",\n            badge: \"Live\",\n          },\n          {\n            id: \"audit\",\n            label: \"Audit Logs\",\n            href: \"/admin/audit\",\n            icon: \"📄\",\n          },\n        ],\n      },\n      ...baseNavigation,\n    ];\n  }\n\n  return baseNavigation;\n};\n\nconst getDefaultActions = (variant: string = \"default\"): HeaderAction[] => {\n  const baseActions: HeaderAction[] = [\n    {\n      id: \"search\",\n      label: \"Search\",\n      icon: \"🔍\",\n      onClick: () => console.log(\"Search clicked\"),\n    },\n    {\n      id: \"notifications\",\n      label: \"Notifications\",\n      icon: \"🔔\",\n      onClick: () => console.log(\"Notifications clicked\"),\n      badge: 3,\n    },\n  ];\n\n  if (variant === \"analytics\") {\n    return [\n      {\n        id: \"new-report\",\n        label: \"New Report\",\n        icon: \"➕\",\n        onClick: () => console.log(\"New report clicked\"),\n        variant: \"default\",\n      },\n      ...baseActions,\n    ];\n  }\n\n  if (variant === \"admin\") {\n    return [\n      {\n        id: \"system-status\",\n        label: \"System Status\",\n        icon: \"📈\",\n        onClick: () => console.log(\"System status clicked\"),\n        variant: \"outline\",\n      },\n      ...baseActions,\n    ];\n  }\n\n  return baseActions;\n};\n\nconst getDefaultBottomTabs = () => [\n  {\n    id: \"home\",\n    label: \"Home\",\n    icon: \"🏠\",\n  },\n  {\n    id: \"analytics\",\n    label: \"Analytics\",\n    icon: \"📊\",\n    badge: \"New\",\n  },\n  {\n    id: \"users\",\n    label: \"Users\",\n    icon: \"👥\",\n    badge: 12,\n  },\n  {\n    id: \"settings\",\n    label: \"Settings\",\n    icon: \"⚙️\",\n  },\n];\n\nexport const DashboardLayout: React.FC<DashboardLayoutProps> = ({\n  children,\n  user = {\n    id: \"1\",\n    name: \"John Doe\",\n    email: \"john@example.com\",\n    avatar:\n      \"https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=32&h=32&fit=crop&crop=face\",\n    role: \"Admin\",\n  },\n  currentPath = \"/\",\n  variant = \"default\",\n  customActions,\n  customNavigation,\n  bottomTabs = getDefaultBottomTabs(),\n  activeBottomTab = \"home\",\n  onBottomTabPress,\n  showBottomTabs = true,\n  style,\n}) => {\n  const [activeTab, setActiveTab] = useState(activeBottomTab);\n\n  const navigation = customNavigation || getDefaultNavigation(variant);\n  const actions = customActions || getDefaultActions(variant);\n\n  const getPageTitle = () => {\n    if (currentPath === \"/\") return \"Dashboard\";\n\n    const pathSegments = currentPath.split(\"/\").filter(Boolean);\n    const lastSegment = pathSegments[pathSegments.length - 1];\n    if (!lastSegment) return \"Dashboard\";\n    return lastSegment.charAt(0).toUpperCase() + lastSegment.slice(1);\n  };\n\n  const getPageSubtitle = () => {\n    switch (variant) {\n      case \"analytics\":\n        return \"Analytics Dashboard\";\n      case \"admin\":\n        return \"Administration Panel\";\n      default:\n        return \"Welcome back\";\n    }\n  };\n\n  const handleBottomTabPress = (tabId: string) => {\n    setActiveTab(tabId);\n    onBottomTabPress?.(tabId);\n  };\n\n  return (\n    <View style={[styles.container, style]}>\n      <AppShell\n        sidebar={{\n          navigation,\n          logo: (\n            <View style={styles.logo}>\n              <View style={styles.logoIcon}>\n                <View style={styles.logoIconInner} />\n              </View>\n              <View style={styles.logoText}>\n                <View style={styles.logoTextLine} />\n                <View style={[styles.logoTextLine, styles.logoTextLineShort]} />\n              </View>\n            </View>\n          ),\n          footer: (\n            <View style={styles.sidebarFooter}>\n              <View style={styles.versionText} />\n            </View>\n          ),\n          variant: \"default\",\n        }}\n        header={{\n          title: getPageTitle(),\n          subtitle: getPageSubtitle(),\n          actions,\n          user,\n          showSearch: false,\n          variant: \"default\",\n        }}\n        footer={\n          showBottomTabs ? (\n            <BottomTabBar\n              items={bottomTabs}\n              activeTab={activeTab}\n              onTabPress={handleBottomTabPress}\n            />\n          ) : undefined\n        }\n        layout=\"default\"\n        sidebarVariant=\"drawer\"\n      >\n        {children}\n      </AppShell>\n    </View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n  },\n  logo: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n  },\n  logoIcon: {\n    width: 32,\n    height: 32,\n    backgroundColor: \"#3B82F6\",\n    borderRadius: 8,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    marginRight: 8,\n  },\n  logoIconInner: {\n    width: 16,\n    height: 16,\n    backgroundColor: \"#FFFFFF\",\n    borderRadius: 4,\n  },\n  logoText: {\n    flex: 1,\n  },\n  logoTextLine: {\n    height: 8,\n    backgroundColor: \"#374151\",\n    borderRadius: 4,\n    marginBottom: 4,\n  },\n  logoTextLineShort: {\n    width: \"60%\",\n    marginBottom: 0,\n  },\n  sidebarFooter: {\n    alignItems: \"center\",\n  },\n  versionText: {\n    width: 40,\n    height: 12,\n    backgroundColor: \"#9CA3AF\",\n    borderRadius: 6,\n  },\n});\n","import React from \"react\";\nimport {\n  View,\n  Text,\n  ScrollView,\n  TouchableOpacity,\n  StyleSheet,\n  Dimensions,\n  SafeAreaView,\n  KeyboardAvoidingView,\n  Platform,\n} from \"react-native\";\n\ninterface AuthLayoutProps {\n  children: React.ReactNode;\n  title: string;\n  subtitle?: string;\n  showBackButton?: boolean;\n  onBack?: () => void;\n  variant?: \"login\" | \"register\" | \"forgot-password\" | \"verify\" | \"two-factor\";\n  logo?: React.ReactNode;\n  footer?: React.ReactNode;\n  testimonial?: {\n    content: string;\n    author: string;\n    role: string;\n    avatar?: string;\n  };\n  features?: string[];\n  style?: any;\n}\n\nconst defaultFeatures = [\n  \"Enterprise-grade security\",\n  \"Advanced analytics dashboard\",\n  \"Real-time collaboration\",\n  \"24/7 customer support\",\n  \"Single sign-on (SSO)\",\n  \"Advanced reporting tools\",\n];\n\nconst defaultTestimonial = {\n  content:\n    \"This platform has transformed how our team collaborates. The intuitive interface and powerful features have increased our productivity by 40%.\",\n  author: \"Sarah Johnson\",\n  role: \"CTO, TechCorp\",\n};\n\nexport const AuthLayout: React.FC<AuthLayoutProps> = ({\n  children,\n  title,\n  subtitle,\n  showBackButton = false,\n  onBack,\n  variant = \"login\",\n  logo,\n  footer,\n  testimonial = defaultTestimonial,\n  features = defaultFeatures,\n  style,\n}) => {\n  const { height } = Dimensions.get(\"window\");\n  const isLargeScreen = height > 700;\n\n  const getVariantConfig = () => {\n    switch (variant) {\n      case \"register\":\n        return {\n          showFeatures: true,\n          showTestimonial: true,\n        };\n      case \"login\":\n        return {\n          showFeatures: false,\n          showTestimonial: true,\n        };\n      case \"forgot-password\":\n      case \"verify\":\n      case \"two-factor\":\n        return {\n          showFeatures: false,\n          showTestimonial: false,\n        };\n      default:\n        return {\n          showFeatures: false,\n          showTestimonial: false,\n        };\n    }\n  };\n\n  const { showFeatures, showTestimonial } = getVariantConfig();\n\n  const renderFeatures = () => {\n    if (!showFeatures || !isLargeScreen) return null;\n\n    return (\n      <View style={styles.featuresSection}>\n        <Text style={styles.featuresTitle}>Everything you need to succeed</Text>\n        <Text style={styles.featuresSubtitle}>\n          Join thousands of teams already using our platform to scale their\n          business.\n        </Text>\n\n        <View style={styles.featuresList}>\n          {features.slice(0, 6).map((feature, index) => (\n            <View key={index} style={styles.featureItem}>\n              <View style={styles.featureCheck}>\n                <Text style={styles.featureCheckText}>✓</Text>\n              </View>\n              <Text style={styles.featureText}>{feature}</Text>\n            </View>\n          ))}\n        </View>\n      </View>\n    );\n  };\n\n  const renderTestimonial = () => {\n    if (!showTestimonial || !testimonial) return null;\n\n    return (\n      <View style={styles.testimonialSection}>\n        {showFeatures && <View style={styles.testimonialDivider} />}\n\n        <View style={styles.testimonial}>\n          <Text style={styles.testimonialContent}>\"{testimonial.content}\"</Text>\n\n          <View style={styles.testimonialAuthor}>\n            <View style={styles.testimonialAvatar}>\n              <Text style={styles.testimonialAvatarText}>\n                {testimonial.author.charAt(0)}\n              </Text>\n            </View>\n            <View>\n              <Text style={styles.testimonialAuthorName}>\n                {testimonial.author}\n              </Text>\n              <Text style={styles.testimonialAuthorRole}>\n                {testimonial.role}\n              </Text>\n            </View>\n          </View>\n        </View>\n      </View>\n    );\n  };\n\n  return (\n    <SafeAreaView style={[styles.container, style]}>\n      <KeyboardAvoidingView\n        behavior={Platform.OS === \"ios\" ? \"padding\" : \"height\"}\n        style={styles.keyboardAvoidingView}\n      >\n        <ScrollView\n          contentContainerStyle={styles.scrollContent}\n          showsVerticalScrollIndicator={false}\n          keyboardShouldPersistTaps=\"handled\"\n        >\n          {/* Back Button */}\n          {showBackButton && onBack && (\n            <TouchableOpacity\n              style={styles.backButton}\n              onPress={onBack}\n              activeOpacity={0.7}\n            >\n              <Text style={styles.backButtonIcon}>←</Text>\n              <Text style={styles.backButtonText}>Back</Text>\n            </TouchableOpacity>\n          )}\n\n          {/* Logo */}\n          {logo && <View style={styles.logoContainer}>{logo}</View>}\n\n          {/* Form Section */}\n          <View style={styles.formSection}>\n            <View style={styles.formHeader}>\n              <Text style={styles.title}>{title}</Text>\n              {subtitle && <Text style={styles.subtitle}>{subtitle}</Text>}\n            </View>\n\n            <View style={styles.formContent}>{children}</View>\n          </View>\n\n          {/* Features Section (for register variant on larger screens) */}\n          {renderFeatures()}\n\n          {/* Testimonial Section */}\n          {renderTestimonial()}\n\n          {/* Security Badge */}\n          <View style={styles.securityBadge}>\n            <Text style={styles.securityIcon}>🛡️</Text>\n            <Text style={styles.securityText}>\n              Protected by enterprise-grade security\n            </Text>\n          </View>\n\n          {/* Footer */}\n          {footer && <View style={styles.footerContainer}>{footer}</View>}\n        </ScrollView>\n      </KeyboardAvoidingView>\n    </SafeAreaView>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n    backgroundColor: \"#FFFFFF\",\n  },\n  keyboardAvoidingView: {\n    flex: 1,\n  },\n  scrollContent: {\n    flexGrow: 1,\n    paddingHorizontal: 24,\n    paddingVertical: 20,\n  },\n  backButton: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n    alignSelf: \"flex-start\",\n    marginBottom: 20,\n    paddingVertical: 8,\n    paddingHorizontal: 4,\n  },\n  backButtonIcon: {\n    fontSize: 18,\n    color: \"#6B7280\",\n    marginRight: 8,\n  },\n  backButtonText: {\n    fontSize: 16,\n    color: \"#6B7280\",\n    fontWeight: \"500\",\n  },\n  logoContainer: {\n    alignItems: \"center\",\n    marginBottom: 32,\n  },\n  formSection: {\n    marginBottom: 32,\n  },\n  formHeader: {\n    alignItems: \"center\",\n    marginBottom: 32,\n  },\n  title: {\n    fontSize: 28,\n    fontWeight: \"bold\",\n    color: \"#111827\",\n    textAlign: \"center\",\n    marginBottom: 8,\n  },\n  subtitle: {\n    fontSize: 16,\n    color: \"#6B7280\",\n    textAlign: \"center\",\n    lineHeight: 24,\n  },\n  formContent: {\n    gap: 24,\n  },\n  featuresSection: {\n    marginBottom: 32,\n    paddingHorizontal: 16,\n    paddingVertical: 24,\n    backgroundColor: \"#F8FAFC\",\n    borderRadius: 16,\n  },\n  featuresTitle: {\n    fontSize: 20,\n    fontWeight: \"bold\",\n    color: \"#111827\",\n    textAlign: \"center\",\n    marginBottom: 8,\n  },\n  featuresSubtitle: {\n    fontSize: 14,\n    color: \"#6B7280\",\n    textAlign: \"center\",\n    lineHeight: 20,\n    marginBottom: 24,\n  },\n  featuresList: {\n    gap: 12,\n  },\n  featureItem: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n  },\n  featureCheck: {\n    width: 20,\n    height: 20,\n    borderRadius: 10,\n    backgroundColor: \"rgba(16, 185, 129, 0.2)\",\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    marginRight: 12,\n  },\n  featureCheckText: {\n    fontSize: 12,\n    color: \"#10B981\",\n    fontWeight: \"bold\",\n  },\n  featureText: {\n    fontSize: 14,\n    color: \"#374151\",\n    flex: 1,\n  },\n  testimonialSection: {\n    marginBottom: 32,\n  },\n  testimonialDivider: {\n    height: 1,\n    backgroundColor: \"#E5E7EB\",\n    marginVertical: 24,\n  },\n  testimonial: {\n    paddingHorizontal: 16,\n  },\n  testimonialContent: {\n    fontSize: 16,\n    fontStyle: \"italic\",\n    color: \"#374151\",\n    lineHeight: 24,\n    textAlign: \"center\",\n    marginBottom: 16,\n  },\n  testimonialAuthor: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n  },\n  testimonialAvatar: {\n    width: 40,\n    height: 40,\n    borderRadius: 20,\n    backgroundColor: \"#3B82F6\",\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    marginRight: 12,\n  },\n  testimonialAvatarText: {\n    fontSize: 16,\n    fontWeight: \"600\",\n    color: \"#FFFFFF\",\n  },\n  testimonialAuthorName: {\n    fontSize: 14,\n    fontWeight: \"600\",\n    color: \"#111827\",\n  },\n  testimonialAuthorRole: {\n    fontSize: 12,\n    color: \"#6B7280\",\n  },\n  securityBadge: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n    marginBottom: 24,\n  },\n  securityIcon: {\n    fontSize: 16,\n    marginRight: 8,\n  },\n  securityText: {\n    fontSize: 12,\n    color: \"#6B7280\",\n  },\n  footerContainer: {\n    alignItems: \"center\",\n    marginTop: 16,\n  },\n});\n","import React, { useState } from \"react\";\nimport { View, Text, StyleSheet } from \"react-native\";\nimport { AppShell } from \"@/components/app-shell/native/AppShell\";\nimport { Tabs } from \"@/components/navigation/native/Tabs\";\nimport type { NavigationGroup, User } from \"@/components/app-shell/types\";\nimport type { TabItem } from \"@/components/navigation/web/Tabs\";\n\ninterface SettingsLayoutProps {\n  children: React.ReactNode;\n  currentTab?: string;\n  onTabChange?: (tab: string) => void;\n  user?: User;\n  variant?: \"user\" | \"admin\" | \"organization\";\n  showBackButton?: boolean;\n  onBack?: () => void;\n  style?: any;\n}\n\nconst getUserSettingsTabs = (): TabItem[] => [\n  {\n    id: \"profile\",\n    label: \"Profile\",\n    icon: \"👤\",\n    href: \"/settings/profile\",\n  },\n  {\n    id: \"security\",\n    label: \"Security\",\n    icon: \"🔒\",\n    href: \"/settings/security\",\n  },\n  {\n    id: \"notifications\",\n    label: \"Notifications\",\n    icon: \"🔔\",\n    href: \"/settings/notifications\",\n    badge: 2,\n  },\n  {\n    id: \"billing\",\n    label: \"Billing\",\n    icon: \"💳\",\n    href: \"/settings/billing\",\n  },\n  {\n    id: \"integrations\",\n    label: \"Integrations\",\n    icon: \"🔌\",\n    href: \"/settings/integrations\",\n  },\n];\n\nconst getAdminSettingsTabs = (): TabItem[] => [\n  {\n    id: \"general\",\n    label: \"General\",\n    icon: \"⚙️\",\n    href: \"/admin/settings/general\",\n  },\n  {\n    id: \"users\",\n    label: \"User Management\",\n    icon: \"👥\",\n    href: \"/admin/settings/users\",\n    badge: \"New\",\n  },\n  {\n    id: \"security\",\n    label: \"Security\",\n    icon: \"🔒\",\n    href: \"/admin/settings/security\",\n  },\n  {\n    id: \"api\",\n    label: \"API Keys\",\n    icon: \"🔑\",\n    href: \"/admin/settings/api\",\n  },\n  {\n    id: \"data\",\n    label: \"Data & Privacy\",\n    icon: \"🗃️\",\n    href: \"/admin/settings/data\",\n  },\n  {\n    id: \"integrations\",\n    label: \"System Integrations\",\n    icon: \"🔌\",\n    href: \"/admin/settings/integrations\",\n  },\n];\n\nconst getOrganizationSettingsTabs = (): TabItem[] => [\n  {\n    id: \"organization\",\n    label: \"Organization\",\n    icon: \"🌐\",\n    href: \"/org/settings/organization\",\n  },\n  {\n    id: \"members\",\n    label: \"Members\",\n    icon: \"👥\",\n    href: \"/org/settings/members\",\n    badge: 12,\n  },\n  {\n    id: \"teams\",\n    label: \"Teams\",\n    icon: \"👥\",\n    href: \"/org/settings/teams\",\n  },\n  {\n    id: \"billing\",\n    label: \"Billing\",\n    icon: \"💳\",\n    href: \"/org/settings/billing\",\n  },\n  {\n    id: \"security\",\n    label: \"Security\",\n    icon: \"🔒\",\n    href: \"/org/settings/security\",\n  },\n  {\n    id: \"integrations\",\n    label: \"Integrations\",\n    icon: \"🔌\",\n    href: \"/org/settings/integrations\",\n  },\n];\n\nconst getSettingsNavigation = (variant: string = \"user\"): NavigationGroup[] => {\n  const baseNavigation: NavigationGroup[] = [\n    {\n      id: \"main\",\n      label: \"Main\",\n      items: [\n        {\n          id: \"dashboard\",\n          label: \"Back to Dashboard\",\n          href: \"/\",\n          icon: \"🏠\",\n        },\n      ],\n    },\n  ];\n\n  if (variant === \"admin\") {\n    return [\n      ...baseNavigation,\n      {\n        id: \"admin\",\n        label: \"Administration\",\n        items: [\n          {\n            id: \"system-settings\",\n            label: \"System Settings\",\n            href: \"/admin/settings\",\n            icon: \"⚙️\",\n            isActive: true,\n            children: [\n              {\n                id: \"general\",\n                label: \"General\",\n                href: \"/admin/settings/general\",\n              },\n              {\n                id: \"users\",\n                label: \"Users\",\n                href: \"/admin/settings/users\",\n              },\n              {\n                id: \"security\",\n                label: \"Security\",\n                href: \"/admin/settings/security\",\n              },\n            ],\n          },\n          {\n            id: \"user-management\",\n            label: \"User Management\",\n            href: \"/admin/users\",\n            icon: \"👥\",\n          },\n        ],\n      },\n    ];\n  }\n\n  if (variant === \"organization\") {\n    return [\n      ...baseNavigation,\n      {\n        id: \"organization\",\n        label: \"Organization\",\n        items: [\n          {\n            id: \"org-settings\",\n            label: \"Organization Settings\",\n            href: \"/org/settings\",\n            icon: \"🌐\",\n            isActive: true,\n            children: [\n              {\n                id: \"organization\",\n                label: \"Organization\",\n                href: \"/org/settings/organization\",\n              },\n              {\n                id: \"members\",\n                label: \"Members\",\n                href: \"/org/settings/members\",\n              },\n              {\n                id: \"teams\",\n                label: \"Teams\",\n                href: \"/org/settings/teams\",\n              },\n            ],\n          },\n        ],\n      },\n    ];\n  }\n\n  return [\n    ...baseNavigation,\n    {\n      id: \"settings\",\n      label: \"Settings\",\n      items: [\n        {\n          id: \"user-settings\",\n          label: \"User Settings\",\n          href: \"/settings\",\n          icon: \"👤\",\n          isActive: true,\n          children: [\n            {\n              id: \"profile\",\n              label: \"Profile\",\n              href: \"/settings/profile\",\n            },\n            {\n              id: \"security\",\n              label: \"Security\",\n              href: \"/settings/security\",\n            },\n            {\n              id: \"notifications\",\n              label: \"Notifications\",\n              href: \"/settings/notifications\",\n            },\n          ],\n        },\n      ],\n    },\n  ];\n};\n\nexport const SettingsLayout: React.FC<SettingsLayoutProps> = ({\n  children,\n  currentTab = \"profile\",\n  onTabChange,\n  user = {\n    id: \"1\",\n    name: \"John Doe\",\n    email: \"john@example.com\",\n    avatar:\n      \"https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=32&h=32&fit=crop&crop=face\",\n    role: \"Admin\",\n  },\n  variant = \"user\",\n  showBackButton = true,\n  onBack,\n  style,\n}) => {\n  const [activeTab, setActiveTab] = useState(currentTab);\n\n  const getTabs = () => {\n    switch (variant) {\n      case \"admin\":\n        return getAdminSettingsTabs();\n      case \"organization\":\n        return getOrganizationSettingsTabs();\n      default:\n        return getUserSettingsTabs();\n    }\n  };\n\n  const getTitle = () => {\n    switch (variant) {\n      case \"admin\":\n        return \"Admin Settings\";\n      case \"organization\":\n        return \"Organization Settings\";\n      default:\n        return \"Settings\";\n    }\n  };\n\n  const getSubtitle = () => {\n    switch (variant) {\n      case \"admin\":\n        return \"Manage system configuration and user accounts\";\n      case \"organization\":\n        return \"Manage your organization and team settings\";\n      default:\n        return \"Manage your account settings and preferences\";\n    }\n  };\n\n  const tabs = getTabs();\n  const navigation = getSettingsNavigation(variant);\n\n  const handleTabChange = (tabId: string) => {\n    setActiveTab(tabId);\n    onTabChange?.(tabId);\n\n    // Find the tab and navigate to its href if it exists\n    const tab = tabs.find((t) => t.id === tabId);\n    if (tab?.href) {\n      // In a real app, this would use navigation\n      console.log(\"Navigate to:\", tab.href);\n    }\n  };\n\n  const actions =\n    showBackButton && onBack\n      ? [\n          {\n            id: \"back\",\n            label: \"Back to Dashboard\",\n            icon: \"🏠\",\n            onClick: onBack,\n            variant: \"outline\" as const,\n          },\n        ]\n      : [];\n\n  return (\n    <View style={[styles.container, style]}>\n      <AppShell\n        sidebar={{\n          navigation,\n          logo: (\n            <View style={styles.logo}>\n              <View style={styles.logoIcon}>\n                <Text style={styles.logoIconText}>⚙️</Text>\n              </View>\n              <View style={styles.logoText}>\n                <View style={styles.logoTextLine} />\n                <View style={[styles.logoTextLine, styles.logoTextLineShort]} />\n              </View>\n            </View>\n          ),\n          variant: \"default\",\n        }}\n        header={{\n          title: getTitle(),\n          subtitle: getSubtitle(),\n          actions,\n          user,\n          showSearch: false,\n          variant: \"default\",\n        }}\n        layout=\"default\"\n        sidebarVariant=\"drawer\"\n      >\n        <View style={styles.content}>\n          {/* Settings Tabs */}\n          <View style={styles.tabsContainer}>\n            <Tabs\n              items={tabs}\n              value={activeTab}\n              onValueChange={handleTabChange}\n              variant=\"underline\"\n              scrollable\n              size=\"default\"\n            />\n          </View>\n\n          {/* Settings Content */}\n          <View style={styles.settingsContent}>{children}</View>\n        </View>\n      </AppShell>\n    </View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n  },\n  content: {\n    flex: 1,\n    backgroundColor: \"#F9FAFB\",\n  },\n  logo: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n  },\n  logoIcon: {\n    width: 32,\n    height: 32,\n    backgroundColor: \"#3B82F6\",\n    borderRadius: 8,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    marginRight: 8,\n  },\n  logoIconText: {\n    fontSize: 16,\n    color: \"#FFFFFF\",\n  },\n  logoText: {\n    flex: 1,\n  },\n  logoTextLine: {\n    height: 8,\n    backgroundColor: \"#374151\",\n    borderRadius: 4,\n    marginBottom: 4,\n  },\n  logoTextLineShort: {\n    width: \"60%\",\n    marginBottom: 0,\n  },\n  tabsContainer: {\n    backgroundColor: \"#FFFFFF\",\n    borderBottomWidth: 1,\n    borderBottomColor: \"#E5E7EB\",\n  },\n  settingsContent: {\n    flex: 1,\n    padding: 24,\n  },\n});\n","import { useState, useEffect } from \"react\";\n\nimport { isNative } from \"../../config/platform\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet Keyboard: any;\n\nif (isNative) {\n  // eslint-disable-next-line @typescript-eslint/no-require-imports\n  Keyboard = require(\"react-native\").Keyboard;\n} else {\n  Keyboard = {\n    addListener: () => ({\n      remove: () => {},\n    }),\n  };\n}\n\ninterface KeyboardEvent {\n  endCoordinates: {\n    height: number;\n  };\n}\n\ninterface UseKeyboardReturn {\n  keyboardShown: boolean;\n  keyboardHeight: number;\n}\n\nexport const useKeyboard = (): UseKeyboardReturn => {\n  const [keyboardShown, setKeyboardShown] = useState(false);\n  const [keyboardHeight, setKeyboardHeight] = useState(0);\n\n  useEffect(() => {\n    const keyboardDidShowListener = Keyboard.addListener(\n      \"keyboardDidShow\",\n      (e: KeyboardEvent) => {\n        setKeyboardShown(true);\n        setKeyboardHeight(e.endCoordinates.height);\n      },\n    );\n\n    const keyboardDidHideListener = Keyboard.addListener(\n      \"keyboardDidHide\",\n      () => {\n        setKeyboardShown(false);\n        setKeyboardHeight(0);\n      },\n    );\n\n    return () => {\n      keyboardDidShowListener.remove();\n      keyboardDidHideListener.remove();\n    };\n  }, []);\n\n  return {\n    keyboardShown,\n    keyboardHeight,\n  };\n};\n","import { useState, useEffect } from \"react\";\n\nimport { isNative } from \"../../config/platform\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet Dimensions: any;\n\nif (isNative) {\n  // eslint-disable-next-line @typescript-eslint/no-require-imports\n  Dimensions = require(\"react-native\").Dimensions;\n} else {\n  Dimensions = {\n    get: () => ({\n      width: 0,\n      height: 0,\n    }),\n    addEventListener: () => ({\n      remove: () => {},\n    }),\n  };\n}\n\ninterface DimensionValue {\n  width: number;\n  height: number;\n}\ninterface UseDimensionsReturn {\n  window: DimensionValue;\n  screen: DimensionValue;\n}\n\nexport const useDimensions = (): UseDimensionsReturn => {\n  const [dimensions, setDimensions] = useState(() => ({\n    window: Dimensions.get(\"window\"),\n    screen: Dimensions.get(\"screen\"),\n  }));\n\n  useEffect(() => {\n    const subscription = Dimensions.addEventListener(\n      \"change\",\n      ({\n        window,\n        screen,\n      }: {\n        window: DimensionValue;\n        screen: DimensionValue;\n      }) => {\n        setDimensions({\n          window,\n          screen,\n        });\n      },\n    );\n\n    return () => subscription?.remove();\n  }, []);\n\n  return dimensions;\n};\n","import { useState, useEffect } from \"react\";\n\nexport interface NetworkInfo {\n  isOnline: boolean;\n  isSlowConnection: boolean;\n  connectionType: \"unknown\" | \"wifi\" | \"cellular\" | \"ethernet\";\n  effectiveType: \"slow-2g\" | \"2g\" | \"3g\" | \"4g\" | \"unknown\";\n}\n\n// Platform detection\nconst isReactNative = typeof navigator === \"undefined\";\n\nexport function useNetworkInfo(): NetworkInfo {\n  const [networkInfo, setNetworkInfo] = useState<NetworkInfo>(() => ({\n    isOnline: isReactNative\n      ? true\n      : typeof navigator !== \"undefined\"\n        ? navigator.onLine\n        : true,\n    isSlowConnection: false,\n    connectionType: \"unknown\",\n    effectiveType: \"unknown\",\n  }));\n\n  useEffect(() => {\n    if (isReactNative) {\n      // React Native implementation\n      let NetInfo: any;\n\n      try {\n        NetInfo = require(\"@react-native-community/netinfo\");\n      } catch (error) {\n        console.warn(\n          \"NetInfo not available, install @react-native-community/netinfo for network detection in React Native\",\n        );\n        return;\n      }\n\n      const unsubscribe = NetInfo.addEventListener((state: any) => {\n        setNetworkInfo({\n          isOnline: state.isConnected ?? false,\n          isSlowConnection:\n            state.details?.effectiveType === \"slow-2g\" ||\n            state.details?.effectiveType === \"2g\",\n          connectionType:\n            state.type === \"wifi\"\n              ? \"wifi\"\n              : state.type === \"cellular\"\n                ? \"cellular\"\n                : \"unknown\",\n          effectiveType: state.details?.effectiveType || \"unknown\",\n        });\n      });\n\n      return unsubscribe;\n    } else {\n      // Web implementation\n      if (typeof navigator === \"undefined\") return;\n\n      const updateNetworkInfo = () => {\n        const connection =\n          (navigator as any).connection ||\n          (navigator as any).mozConnection ||\n          (navigator as any).webkitConnection;\n\n        setNetworkInfo({\n          isOnline: navigator.onLine,\n          isSlowConnection: connection\n            ? connection.effectiveType === \"slow-2g\" ||\n              connection.effectiveType === \"2g\"\n            : false,\n          connectionType: connection ? connection.type || \"unknown\" : \"unknown\",\n          effectiveType: connection\n            ? connection.effectiveType || \"unknown\"\n            : \"unknown\",\n        });\n      };\n\n      updateNetworkInfo();\n\n      const handleOnline = () => updateNetworkInfo();\n      const handleOffline = () => updateNetworkInfo();\n      const handleConnectionChange = () => updateNetworkInfo();\n\n      window.addEventListener(\"online\", handleOnline);\n      window.addEventListener(\"offline\", handleOffline);\n\n      const connection =\n        (navigator as any).connection ||\n        (navigator as any).mozConnection ||\n        (navigator as any).webkitConnection;\n      if (connection) {\n        connection.addEventListener(\"change\", handleConnectionChange);\n      }\n\n      return () => {\n        window.removeEventListener(\"online\", handleOnline);\n        window.removeEventListener(\"offline\", handleOffline);\n        if (connection) {\n          connection.removeEventListener(\"change\", handleConnectionChange);\n        }\n      };\n    }\n  }, []);\n\n  return networkInfo;\n}\n","import { useState, useEffect } from \"react\";\n\nexport interface OfflineState {\n  isOffline: boolean;\n  isOnline: boolean;\n  wasOffline: boolean;\n}\n\n// Platform detection\nconst isReactNative = typeof navigator === \"undefined\";\n\nexport function useOfflineState(): OfflineState {\n  const [state, setState] = useState<OfflineState>(() => ({\n    isOffline: isReactNative\n      ? false\n      : typeof navigator !== \"undefined\"\n        ? !navigator.onLine\n        : false,\n    isOnline: isReactNative\n      ? true\n      : typeof navigator !== \"undefined\"\n        ? navigator.onLine\n        : true,\n    wasOffline: false,\n  }));\n\n  useEffect(() => {\n    if (isReactNative) {\n      // React Native implementation\n      let NetInfo: any;\n\n      try {\n        NetInfo = require(\"@react-native-community/netinfo\");\n      } catch (error) {\n        console.warn(\n          \"NetInfo not available, install @react-native-community/netinfo for offline detection in React Native\",\n        );\n        return;\n      }\n\n      const unsubscribe = NetInfo.addEventListener((netState: any) => {\n        const isConnected = netState.isConnected ?? false;\n\n        setState((prev) => ({\n          isOffline: !isConnected,\n          isOnline: isConnected,\n          wasOffline: prev.isOffline || !isConnected,\n        }));\n      });\n\n      return unsubscribe;\n    } else {\n      // Web implementation\n      if (typeof navigator === \"undefined\") return;\n\n      const handleOnline = () => {\n        setState((prev) => ({\n          isOffline: false,\n          isOnline: true,\n          wasOffline: prev.isOffline,\n        }));\n      };\n\n      const handleOffline = () => {\n        setState((prev) => ({\n          isOffline: true,\n          isOnline: false,\n          wasOffline: prev.wasOffline,\n        }));\n      };\n\n      window.addEventListener(\"online\", handleOnline);\n      window.addEventListener(\"offline\", handleOffline);\n\n      return () => {\n        window.removeEventListener(\"online\", handleOnline);\n        window.removeEventListener(\"offline\", handleOffline);\n      };\n    }\n  }, []);\n\n  return state;\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../../utils/cn\";\n\nconst headerVariants = cva(\n  \"w-full border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60\",\n  {\n    variants: {\n      sticky: {\n        always: \"sticky top-0 z-40\",\n        \"scroll-up\": \"sticky top-0 z-40 transition-transform duration-300\",\n        none: \"relative\",\n      },\n      size: {\n        sm: \"h-14\",\n        md: \"h-16\",\n        lg: \"h-20\",\n      },\n    },\n    defaultVariants: {\n      sticky: \"always\",\n      size: \"md\",\n    },\n  },\n);\n\nconst containerVariants = cva(\"flex items-center justify-between h-full px-4\", {\n  variants: {\n    maxWidth: {\n      sm: \"max-w-3xl mx-auto\",\n      md: \"max-w-5xl mx-auto\",\n      lg: \"max-w-7xl mx-auto\",\n      full: \"max-w-none\",\n    },\n  },\n  defaultVariants: {\n    maxWidth: \"lg\",\n  },\n});\n\nexport interface ResponsiveHeaderProps\n  extends\n    React.HTMLAttributes<HTMLDivElement>,\n    VariantProps<typeof headerVariants> {\n  maxWidth?: VariantProps<typeof containerVariants>[\"maxWidth\"];\n  desktopBreakpoint?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n  mobileMenuPosition?: \"right\" | \"left\" | \"fullscreen\";\n  showBrandOnMobile?: boolean;\n  children: React.ReactNode;\n  navigationItems?: any;\n  showThemeToggle?: boolean;\n  mobileBreakpoint?: string;\n  hamburgerIcon?: React.ReactNode;\n  networkStatus?: any;\n}\n\nconst ResponsiveHeader = React.forwardRef<\n  HTMLDivElement,\n  ResponsiveHeaderProps\n>(\n  (\n    {\n      className,\n      sticky,\n      size,\n      maxWidth,\n      desktopBreakpoint = \"md\",\n      mobileMenuPosition,\n      showBrandOnMobile,\n      children,\n      navigationItems,\n      showThemeToggle,\n      mobileBreakpoint,\n      hamburgerIcon,\n      networkStatus,\n      ...rest\n    },\n    ref,\n  ) => {\n    const [isScrolledUp, setIsScrolledUp] = React.useState(true);\n    const lastScrollY = React.useRef(0);\n\n    // Since component-specific props are already destructured above,\n    // rest should only contain valid DOM attributes\n    const domProps = rest;\n\n    // Handle scroll-based hide/show\n    React.useEffect(() => {\n      if (sticky !== \"scroll-up\") return;\n\n      const handleScroll = () => {\n        const currentScrollY = window.scrollY;\n\n        if (currentScrollY < lastScrollY.current || currentScrollY < 10) {\n          setIsScrolledUp(true);\n        } else if (\n          currentScrollY > 100 &&\n          currentScrollY > lastScrollY.current\n        ) {\n          setIsScrolledUp(false);\n        }\n\n        lastScrollY.current = currentScrollY;\n      };\n\n      window.addEventListener(\"scroll\", handleScroll, { passive: true });\n      return () => window.removeEventListener(\"scroll\", handleScroll);\n    }, [sticky]);\n\n    return (\n      <header\n        ref={ref}\n        className={cn(\n          headerVariants({ sticky, size }),\n          sticky === \"scroll-up\" && !isScrolledUp && \"-translate-y-full\",\n          className,\n        )}\n        {...domProps}\n      >\n        <div className={cn(containerVariants({ maxWidth }))}>{children}</div>\n      </header>\n    );\n  },\n);\n\n// Brand/Logo component\ninterface HeaderBrandProps extends React.HTMLAttributes<HTMLElement> {\n  children: React.ReactNode;\n  className?: string;\n  href?: string;\n  showOnMobile?: boolean;\n}\n\nconst HeaderBrand = React.forwardRef<HTMLElement, HeaderBrandProps>(\n  ({ children, className, href = \"/\", showOnMobile = true, ...props }, ref) => {\n    if (href) {\n      return (\n        <a\n          ref={ref as React.ForwardedRef<HTMLAnchorElement>}\n          href={href}\n          className={cn(\n            \"flex items-center space-x-2 font-bold text-lg\",\n            \"text-foreground hover:text-primary transition-colors\",\n            !showOnMobile && \"hidden md:flex\",\n            showOnMobile && \"flex\",\n            className,\n          )}\n          {...props}\n        >\n          {children}\n        </a>\n      );\n    }\n\n    return (\n      <div\n        ref={ref as React.ForwardedRef<HTMLDivElement>}\n        className={cn(\n          \"flex items-center space-x-2 font-bold text-lg\",\n          \"text-foreground hover:text-primary transition-colors\",\n          !showOnMobile && \"hidden md:flex\",\n          showOnMobile && \"flex\",\n          className,\n        )}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  },\n);\n\n// Desktop navigation\ninterface HeaderDesktopNavProps {\n  children: React.ReactNode;\n  className?: string;\n  breakpoint?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n}\n\nconst HeaderDesktopNav = ({\n  children,\n  className,\n  breakpoint = \"md\",\n}: HeaderDesktopNavProps) => {\n  const breakpointClass = {\n    sm: \"hidden sm:flex\",\n    md: \"hidden md:flex\",\n    lg: \"hidden lg:flex\",\n    xl: \"hidden xl:flex\",\n  }[breakpoint];\n\n  return (\n    <nav className={cn(breakpointClass, \"items-center space-x-6\", className)}>\n      {children}\n    </nav>\n  );\n};\n\n// Actions section (buttons, user menu, etc.)\ninterface HeaderActionsProps {\n  children: React.ReactNode;\n  className?: string;\n  spacing?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst HeaderActions = ({\n  children,\n  className,\n  spacing = \"md\",\n}: HeaderActionsProps) => {\n  const spacingClass = {\n    sm: \"space-x-2\",\n    md: \"space-x-4\",\n    lg: \"space-x-6\",\n  }[spacing];\n\n  return (\n    <div className={cn(\"flex items-center\", spacingClass, className)}>\n      {children}\n    </div>\n  );\n};\n\n// Navigation link for desktop\ninterface HeaderNavLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n  children: React.ReactNode;\n  isActive?: boolean;\n}\n\nconst HeaderNavLink = React.forwardRef<HTMLAnchorElement, HeaderNavLinkProps>(\n  ({ children, className, isActive, ...props }, ref) => {\n    return (\n      <a\n        ref={ref}\n        className={cn(\n          \"text-sm font-medium transition-colors\",\n          \"hover:text-primary\",\n          isActive ? \"text-primary\" : \"text-muted-foreground\",\n          className,\n        )}\n        {...props}\n      >\n        {children}\n      </a>\n    );\n  },\n);\n\n// Mobile menu trigger wrapper\ninterface HeaderMobileTriggerProps {\n  children: React.ReactNode;\n  className?: string;\n  breakpoint?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n}\n\nconst HeaderMobileTrigger = ({\n  children,\n  className,\n  breakpoint = \"md\",\n}: HeaderMobileTriggerProps) => {\n  const breakpointClass = {\n    sm: \"flex sm:hidden\",\n    md: \"flex md:hidden\",\n    lg: \"flex lg:hidden\",\n    xl: \"flex xl:hidden\",\n  }[breakpoint];\n\n  return (\n    <div className={cn(breakpointClass, \"items-center\", className)}>\n      {children}\n    </div>\n  );\n};\n\n// Responsive container for header content\ninterface HeaderContainerProps {\n  children: React.ReactNode;\n  className?: string;\n  layout?: \"default\" | \"center-brand\" | \"brand-left\";\n}\n\nconst HeaderContainer = ({\n  children,\n  className,\n  layout = \"default\",\n}: HeaderContainerProps) => {\n  const layoutClasses = {\n    default: \"justify-between\",\n    \"center-brand\": \"justify-center sm:justify-between\",\n    \"brand-left\": \"justify-start\",\n  };\n\n  return (\n    <div className={cn(\"flex items-center\", layoutClasses[layout], className)}>\n      {children}\n    </div>\n  );\n};\n\n// Pre-built responsive header patterns\ninterface SimpleResponsiveHeaderProps {\n  brand: React.ReactNode;\n  desktopNav?: React.ReactNode;\n  mobileNav?: React.ReactNode;\n  actions?: React.ReactNode;\n  mobileMenuTrigger?: React.ReactNode;\n  className?: string;\n}\n\nconst SimpleResponsiveHeader = ({\n  brand,\n  desktopNav,\n  mobileNav,\n  actions,\n  mobileMenuTrigger,\n  className,\n}: SimpleResponsiveHeaderProps) => {\n  return (\n    <ResponsiveHeader className={className}>\n      <HeaderBrand>{brand}</HeaderBrand>\n\n      {desktopNav && <HeaderDesktopNav>{desktopNav}</HeaderDesktopNav>}\n\n      <HeaderActions>\n        {actions}\n        {mobileMenuTrigger && (\n          <HeaderMobileTrigger>{mobileMenuTrigger}</HeaderMobileTrigger>\n        )}\n      </HeaderActions>\n\n      {mobileNav}\n    </ResponsiveHeader>\n  );\n};\n\nResponsiveHeader.displayName = \"ResponsiveHeader\";\nHeaderBrand.displayName = \"HeaderBrand\";\nHeaderDesktopNav.displayName = \"HeaderDesktopNav\";\nHeaderActions.displayName = \"HeaderActions\";\nHeaderNavLink.displayName = \"HeaderNavLink\";\nHeaderMobileTrigger.displayName = \"HeaderMobileTrigger\";\nHeaderContainer.displayName = \"HeaderContainer\";\nSimpleResponsiveHeader.displayName = \"SimpleResponsiveHeader\";\n\nexport {\n  ResponsiveHeader,\n  HeaderBrand,\n  HeaderDesktopNav,\n  HeaderActions,\n  HeaderNavLink,\n  HeaderMobileTrigger,\n  HeaderContainer,\n  SimpleResponsiveHeader,\n  headerVariants,\n};\n","// src/utils/cn.ts\nimport { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport { createContext, useContext } from \"react\";\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../../utils/cn\";\nimport { X } from \"lucide-react\";\n\n// Context for mobile navigation state\ninterface MobileNavigationContextValue {\n  isOpen: boolean;\n  setIsOpen: (open: boolean) => void;\n}\n\nconst MobileNavigationContext =\n  createContext<MobileNavigationContextValue | null>(null);\n\nconst useMobileNavigation = () => {\n  const context = useContext(MobileNavigationContext);\n  if (!context) {\n    throw new Error(\"useMobileNavigation must be used within MobileNavigation\");\n  }\n  return context;\n};\n\n// Main navigation wrapper\ninterface MobileNavigationProps {\n  children: React.ReactNode;\n  open?: boolean;\n  onOpenChange?: (open: boolean) => void;\n}\n\nconst MobileNavigation = ({\n  children,\n  open,\n  onOpenChange,\n}: MobileNavigationProps) => {\n  const [internalOpen, setInternalOpen] = React.useState(false);\n  const isControlled = open !== undefined;\n  const isOpen = isControlled ? open : internalOpen;\n  const setIsOpen = isControlled ? onOpenChange || (() => {}) : setInternalOpen;\n\n  return (\n    <MobileNavigationContext.Provider value={{ isOpen, setIsOpen }}>\n      <Dialog.Root open={isOpen} onOpenChange={setIsOpen}>\n        {children}\n      </Dialog.Root>\n    </MobileNavigationContext.Provider>\n  );\n};\n\n// Trigger component (hamburger icon wrapper)\ninterface MobileNavTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n  children?: React.ReactNode;\n}\n\nconst MobileNavTrigger = React.forwardRef<\n  HTMLButtonElement,\n  MobileNavTriggerProps\n>(({ children, className, ...props }, ref) => {\n  return (\n    <Dialog.Trigger asChild>\n      <button\n        ref={ref}\n        className={cn(\n          \"md:hidden\", // Only show on mobile\n          \"min-h-[44px] min-w-[44px]\", // WCAG touch target\n          \"flex items-center justify-center\",\n          \"focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2\",\n          className,\n        )}\n        {...props}\n      >\n        {children}\n      </button>\n    </Dialog.Trigger>\n  );\n});\n\n// Overlay with backdrop blur\nconst MobileNavOverlay = React.forwardRef<\n  React.ElementRef<typeof Dialog.Overlay>,\n  React.ComponentPropsWithoutRef<typeof Dialog.Overlay>\n>(({ className, ...props }, ref) => (\n  <Dialog.Overlay\n    ref={ref}\n    className={cn(\n      \"fixed inset-0 z-50\",\n      \"bg-black/50 backdrop-blur-sm\",\n      \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n      \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n      className,\n    )}\n    {...props}\n  />\n));\n\n// Drawer variants\nconst drawerVariants = cva(\n  \"fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out\",\n  {\n    variants: {\n      position: {\n        right: [\n          \"inset-y-0 right-0 h-full w-3/4 max-w-sm border-l\",\n          \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right\",\n        ],\n        left: [\n          \"inset-y-0 left-0 h-full w-3/4 max-w-sm border-r\",\n          \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left\",\n        ],\n        top: [\n          \"inset-x-0 top-0 border-b\",\n          \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\n        ],\n        bottom: [\n          \"inset-x-0 bottom-0 border-t\",\n          \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n        ],\n        fullscreen: [\n          \"inset-0\",\n          \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n        ],\n      },\n    },\n    defaultVariants: {\n      position: \"right\",\n    },\n  },\n);\n\n// Main drawer component\ninterface MobileNavDrawerProps\n  extends\n    React.ComponentPropsWithoutRef<typeof Dialog.Content>,\n    VariantProps<typeof drawerVariants> {}\n\nconst MobileNavDrawer = React.forwardRef<\n  React.ElementRef<typeof Dialog.Content>,\n  MobileNavDrawerProps\n>(({ position, className, children, ...props }, ref) => (\n  <>\n    <MobileNavOverlay />\n    <Dialog.Content\n      ref={ref}\n      className={cn(\n        drawerVariants({ position }),\n        \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n        \"data-[state=closed]:duration-300 data-[state=open]:duration-300\",\n        className,\n      )}\n      {...props}\n    >\n      {children}\n    </Dialog.Content>\n  </>\n));\n\n// Header with close button\ninterface MobileNavHeaderProps {\n  children?: React.ReactNode;\n  className?: string;\n  showCloseButton?: boolean;\n}\n\nconst MobileNavHeader = ({\n  children,\n  className,\n  showCloseButton = true,\n}: MobileNavHeaderProps) => {\n  return (\n    <div className={cn(\"flex items-center justify-between pb-4\", className)}>\n      {children}\n      {showCloseButton && (\n        <Dialog.Close className=\"rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\">\n          <X className=\"h-6 w-6\" />\n          <span className=\"sr-only\">Close</span>\n        </Dialog.Close>\n      )}\n    </div>\n  );\n};\n\n// Content area\ninterface MobileNavContentProps {\n  children: React.ReactNode;\n  className?: string;\n}\n\nconst MobileNavContent = ({ children, className }: MobileNavContentProps) => {\n  return (\n    <div className={cn(\"flex flex-col space-y-4 py-4\", className)}>\n      {children}\n    </div>\n  );\n};\n\n// Footer area\ninterface MobileNavFooterProps {\n  children: React.ReactNode;\n  className?: string;\n}\n\nconst MobileNavFooter = ({ children, className }: MobileNavFooterProps) => {\n  return (\n    <div className={cn(\"pt-4 mt-auto border-t\", className)}>{children}</div>\n  );\n};\n\n// Navigation link component\ninterface MobileNavLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n  children: React.ReactNode;\n}\n\nconst MobileNavLink = React.forwardRef<HTMLAnchorElement, MobileNavLinkProps>(\n  ({ className, children, onClick, ...props }, ref) => {\n    const { setIsOpen } = useMobileNavigation();\n\n    const handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n      onClick?.(event);\n      // Auto-close nav when link is clicked\n      setIsOpen(false);\n    };\n\n    return (\n      <a\n        ref={ref}\n        className={cn(\n          \"block py-3 px-4 text-base font-medium\",\n          \"text-foreground hover:text-primary\",\n          \"hover:bg-accent hover:text-accent-foreground\",\n          \"rounded-md transition-colors\",\n          \"min-h-[44px] flex items-center\", // WCAG touch target\n          className,\n        )}\n        onClick={handleClick}\n        {...props}\n      >\n        {children}\n      </a>\n    );\n  },\n);\n\n// Navigation button component\ninterface MobileNavButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n  children: React.ReactNode;\n}\n\nconst MobileNavButton = React.forwardRef<\n  HTMLButtonElement,\n  MobileNavButtonProps\n>(({ className, children, onClick, ...props }, ref) => {\n  const { setIsOpen } = useMobileNavigation();\n\n  const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n    onClick?.(event);\n    // Auto-close nav when button is clicked\n    setIsOpen(false);\n  };\n\n  return (\n    <button\n      ref={ref}\n      className={cn(\n        \"w-full py-3 px-4 text-base font-medium\",\n        \"text-foreground hover:text-primary\",\n        \"hover:bg-accent hover:text-accent-foreground\",\n        \"rounded-md transition-colors text-left\",\n        \"min-h-[44px] flex items-center\", // WCAG touch target\n        className,\n      )}\n      onClick={handleClick}\n      {...props}\n    >\n      {children}\n    </button>\n  );\n});\n\nMobileNavTrigger.displayName = \"MobileNavTrigger\";\nMobileNavOverlay.displayName = \"MobileNavOverlay\";\nMobileNavDrawer.displayName = \"MobileNavDrawer\";\nMobileNavHeader.displayName = \"MobileNavHeader\";\nMobileNavContent.displayName = \"MobileNavContent\";\nMobileNavFooter.displayName = \"MobileNavFooter\";\nMobileNavLink.displayName = \"MobileNavLink\";\nMobileNavButton.displayName = \"MobileNavButton\";\n\nexport {\n  MobileNavigation,\n  MobileNavTrigger,\n  MobileNavOverlay,\n  MobileNavDrawer,\n  MobileNavHeader,\n  MobileNavContent,\n  MobileNavFooter,\n  MobileNavLink,\n  MobileNavButton,\n  useMobileNavigation,\n};\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../../utils/cn\";\n\nconst hamburgerVariants = cva(\n  \"relative cursor-pointer transition-all duration-300 ease-in-out\",\n  {\n    variants: {\n      variant: {\n        default: \"space-y-1.5\",\n        minimal: \"space-y-1\",\n        rounded: \"space-y-2\",\n      },\n      size: {\n        sm: \"w-4 h-4\",\n        md: \"w-6 h-6\",\n        lg: \"w-8 h-8\",\n      },\n      animation: {\n        smooth: \"transition-all duration-300 ease-in-out\",\n        elastic:\n          \"transition-all duration-500 cubic-bezier(0.68, -0.55, 0.265, 1.55)\",\n        spring:\n          \"transition-all duration-400 cubic-bezier(0.175, 0.885, 0.32, 1.275)\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"md\",\n      animation: \"smooth\",\n    },\n  },\n);\n\nconst lineVariants = cva(\n  \"block h-0.5 bg-current transition-all origin-center\",\n  {\n    variants: {\n      variant: {\n        default: \"rounded-none\",\n        minimal: \"rounded-none\",\n        rounded: \"rounded-full\",\n      },\n      size: {\n        sm: \"h-0.5\",\n        md: \"h-0.5\",\n        lg: \"h-1\",\n      },\n      animation: {\n        smooth: \"duration-300 ease-in-out\",\n        elastic: \"duration-500 cubic-bezier(0.68, -0.55, 0.265, 1.55)\",\n        spring: \"duration-400 cubic-bezier(0.175, 0.885, 0.32, 1.275)\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"md\",\n      animation: \"smooth\",\n    },\n  },\n);\n\nexport interface HamburgerIconProps\n  extends\n    Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"onToggle\">,\n    VariantProps<typeof hamburgerVariants> {\n  isOpen?: boolean;\n  onToggle?: (isOpen: boolean) => void;\n}\n\nconst HamburgerIcon = React.forwardRef<HTMLButtonElement, HamburgerIconProps>(\n  (\n    {\n      className,\n      variant,\n      size,\n      animation,\n      isOpen = false,\n      onToggle,\n      onClick,\n      ...props\n    },\n    ref,\n  ) => {\n    const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n      onToggle?.(!isOpen);\n      onClick?.(event);\n    };\n\n    return (\n      <button\n        ref={ref}\n        className={cn(\n          hamburgerVariants({ variant, size, animation }),\n          \"focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2\",\n          \"active:scale-95\",\n          \"min-h-[44px] min-w-[44px] flex items-center justify-center\", // WCAG touch target\n          className,\n        )}\n        onClick={handleClick}\n        aria-label={isOpen ? \"Close menu\" : \"Open menu\"}\n        aria-expanded={isOpen}\n        {...props}\n      >\n        <div className={cn(hamburgerVariants({ variant, size }))}>\n          {/* Top line */}\n          <span\n            className={cn(\n              lineVariants({ variant, size, animation }),\n              \"w-full\",\n              isOpen && [\n                \"rotate-45 translate-y-[6px]\",\n                size === \"sm\" && \"translate-y-[4px]\",\n                size === \"lg\" && \"translate-y-[8px]\",\n              ],\n            )}\n          />\n\n          {/* Middle line */}\n          <span\n            className={cn(\n              lineVariants({ variant, size, animation }),\n              \"w-full\",\n              isOpen && \"opacity-0 scale-x-0\",\n            )}\n          />\n\n          {/* Bottom line */}\n          <span\n            className={cn(\n              lineVariants({ variant, size, animation }),\n              \"w-full\",\n              isOpen && [\n                \"-rotate-45 -translate-y-[6px]\",\n                size === \"sm\" && \"-translate-y-[4px]\",\n                size === \"lg\" && \"-translate-y-[8px]\",\n              ],\n            )}\n          />\n        </div>\n      </button>\n    );\n  },\n);\n\nHamburgerIcon.displayName = \"HamburgerIcon\";\n\nexport { HamburgerIcon, hamburgerVariants };\n","import React from \"react\";\nimport {\n  View,\n  Text,\n  StyleSheet,\n  ImageBackground,\n  ViewStyle,\n  TextStyle,\n  Dimensions,\n} from \"react-native\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nconst { width: screenWidth, height: screenHeight } = Dimensions.get(\"window\");\n\nexport interface NativeMobileHeroProps {\n  title?: string;\n  subtitle?: string;\n  children?: React.ReactNode;\n  backgroundImage?: string;\n  height?: \"auto\" | \"screen\" | \"50vh\" | \"60vh\" | \"75vh\" | \"80vh\";\n  backgroundType?: \"none\" | \"gradient\" | \"image\";\n  contentAlignment?: \"center\" | \"left\" | \"right\" | \"bottom\" | \"top\";\n  overlay?: \"none\" | \"light\" | \"medium\" | \"dark\" | \"gradient\";\n  style?: ViewStyle;\n  titleStyle?: TextStyle;\n  subtitleStyle?: TextStyle;\n  contentStyle?: ViewStyle;\n}\n\nconst getHeightValue = (height: string): number => {\n  switch (height) {\n    case \"screen\":\n      return screenHeight;\n    case \"50vh\":\n      return screenHeight * 0.5;\n    case \"60vh\":\n      return screenHeight * 0.6;\n    case \"75vh\":\n      return screenHeight * 0.75;\n    case \"80vh\":\n      return screenHeight * 0.8;\n    default:\n      return screenHeight * 0.6; // Default to 60vh\n  }\n};\n\nconst getContentAlignment = (alignment: string): ViewStyle => {\n  switch (alignment) {\n    case \"left\":\n      return { justifyContent: \"center\", alignItems: \"flex-start\" };\n    case \"right\":\n      return { justifyContent: \"center\", alignItems: \"flex-end\" };\n    case \"bottom\":\n      return {\n        justifyContent: \"flex-end\",\n        alignItems: \"center\",\n        paddingBottom: 32,\n      };\n    case \"top\":\n      return {\n        justifyContent: \"flex-start\",\n        alignItems: \"center\",\n        paddingTop: 32,\n      };\n    default:\n      return { justifyContent: \"center\", alignItems: \"center\" };\n  }\n};\n\nconst getOverlayColor = (overlay: string): [string, string] => {\n  switch (overlay) {\n    case \"light\":\n      return [\"rgba(0,0,0,0.2)\", \"rgba(0,0,0,0.2)\"];\n    case \"medium\":\n      return [\"rgba(0,0,0,0.4)\", \"rgba(0,0,0,0.4)\"];\n    case \"dark\":\n      return [\"rgba(0,0,0,0.6)\", \"rgba(0,0,0,0.6)\"];\n    case \"gradient\":\n      return [\"rgba(0,0,0,0.6)\", \"transparent\"];\n    default:\n      return [\"transparent\", \"transparent\"];\n  }\n};\n\nexport const NativeMobileHero: React.FC<NativeMobileHeroProps> = ({\n  title,\n  subtitle,\n  children,\n  backgroundImage,\n  height = \"60vh\",\n  backgroundType = \"gradient\",\n  contentAlignment = \"center\",\n  overlay = \"none\",\n  style,\n  titleStyle,\n  subtitleStyle,\n  contentStyle,\n}) => {\n  const heightValue = height === \"auto\" ? undefined : getHeightValue(height);\n  const alignmentStyle = getContentAlignment(contentAlignment);\n  const overlayColors = getOverlayColor(overlay);\n\n  const renderContent = () => (\n    <View style={[styles.content, alignmentStyle, contentStyle]}>\n      {title && <Text style={[styles.title, titleStyle]}>{title}</Text>}\n      {subtitle && (\n        <Text style={[styles.subtitle, subtitleStyle]}>{subtitle}</Text>\n      )}\n      {children}\n    </View>\n  );\n\n  const renderOverlay = () => {\n    if (overlay === \"none\") return null;\n\n    return (\n      <LinearGradient\n        colors={overlayColors}\n        style={StyleSheet.absoluteFillObject}\n      />\n    );\n  };\n\n  if (backgroundType === \"image\" && backgroundImage) {\n    return (\n      <ImageBackground\n        source={{ uri: backgroundImage }}\n        style={[styles.container, { height: heightValue }, style]}\n        resizeMode=\"cover\"\n      >\n        {renderOverlay()}\n        {renderContent()}\n      </ImageBackground>\n    );\n  }\n\n  if (backgroundType === \"gradient\") {\n    return (\n      <LinearGradient\n        colors={[\"#1e3a8a\", \"#3b82f6\"]} // Default blue gradient\n        style={[styles.container, { height: heightValue }, style]}\n      >\n        {renderOverlay()}\n        {renderContent()}\n      </LinearGradient>\n    );\n  }\n\n  return (\n    <View style={[styles.container, { height: heightValue }, style]}>\n      {renderOverlay()}\n      {renderContent()}\n    </View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    width: \"100%\",\n    backgroundColor: \"#f8fafc\",\n  },\n  content: {\n    flex: 1,\n    paddingHorizontal: 16,\n    paddingVertical: 32,\n  },\n  title: {\n    fontSize: 32,\n    fontWeight: \"bold\",\n    color: \"#ffffff\",\n    textAlign: \"center\",\n    marginBottom: 16,\n    textShadowColor: \"rgba(0, 0, 0, 0.3)\",\n    textShadowOffset: { width: 0, height: 1 },\n    textShadowRadius: 3,\n  },\n  subtitle: {\n    fontSize: 18,\n    color: \"#e2e8f0\",\n    textAlign: \"center\",\n    lineHeight: 26,\n    marginBottom: 24,\n    textShadowColor: \"rgba(0, 0, 0, 0.3)\",\n    textShadowOffset: { width: 0, height: 1 },\n    textShadowRadius: 2,\n  },\n});\n","import React from \"react\";\nimport {\n  View,\n  ScrollView,\n  StyleSheet,\n  ViewStyle,\n  Platform,\n} from \"react-native\";\nimport { useSafeAreaInsets } from \"react-native-safe-area-context\";\n\nexport interface NativeMobileContainerProps {\n  children: React.ReactNode;\n  safeArea?: boolean;\n  safeAreaTop?: boolean;\n  safeAreaBottom?: boolean;\n  scrollable?: boolean;\n  padding?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n  backgroundColor?: string;\n  style?: ViewStyle;\n  contentContainerStyle?: ViewStyle;\n  showsVerticalScrollIndicator?: boolean;\n  showsHorizontalScrollIndicator?: boolean;\n  keyboardShouldPersistTaps?: \"always\" | \"never\" | \"handled\";\n}\n\nconst getPaddingValue = (padding: string): number => {\n  switch (padding) {\n    case \"none\":\n      return 0;\n    case \"sm\":\n      return 8;\n    case \"md\":\n      return 16;\n    case \"lg\":\n      return 24;\n    case \"xl\":\n      return 32;\n    default:\n      return 16;\n  }\n};\n\nexport const NativeMobileContainer: React.FC<NativeMobileContainerProps> = ({\n  children,\n  safeArea = true,\n  safeAreaTop = true,\n  safeAreaBottom = true,\n  scrollable = false,\n  padding = \"md\",\n  backgroundColor = \"#ffffff\",\n  style,\n  contentContainerStyle,\n  showsVerticalScrollIndicator = true,\n  showsHorizontalScrollIndicator = false,\n  keyboardShouldPersistTaps = \"handled\",\n}) => {\n  const insets = useSafeAreaInsets();\n  const paddingValue = getPaddingValue(padding);\n\n  const containerStyle: ViewStyle = {\n    flex: 1,\n    backgroundColor,\n    paddingTop: safeArea && safeAreaTop ? insets.top : 0,\n    paddingBottom: safeArea && safeAreaBottom ? insets.bottom : 0,\n    paddingLeft: safeArea ? insets.left : 0,\n    paddingRight: safeArea ? insets.right : 0,\n  };\n\n  const contentStyle: ViewStyle = {\n    padding: paddingValue,\n  };\n\n  if (scrollable) {\n    return (\n      <View style={[containerStyle, style]}>\n        <ScrollView\n          style={styles.scrollContainer}\n          contentContainerStyle={[contentStyle, contentContainerStyle]}\n          showsVerticalScrollIndicator={showsVerticalScrollIndicator}\n          showsHorizontalScrollIndicator={showsHorizontalScrollIndicator}\n          keyboardShouldPersistTaps={keyboardShouldPersistTaps}\n          bounces={Platform.OS === \"ios\"}\n          overScrollMode={Platform.OS === \"android\" ? \"auto\" : undefined}\n        >\n          {children}\n        </ScrollView>\n      </View>\n    );\n  }\n\n  return <View style={[containerStyle, contentStyle, style]}>{children}</View>;\n};\n\nconst styles = StyleSheet.create({\n  scrollContainer: {\n    flex: 1,\n  },\n});\n","import React, { useRef, useEffect } from \"react\";\nimport {\n  View,\n  Animated,\n  StyleSheet,\n  ViewStyle,\n  Dimensions,\n  Platform,\n} from \"react-native\";\n\nconst { width: screenWidth, height: screenHeight } = Dimensions.get(\"window\");\n\nexport interface NativePageTransitionProps {\n  children: React.ReactNode;\n  type?:\n    | \"fade\"\n    | \"slide\"\n    | \"scale\"\n    | \"slideUp\"\n    | \"slideDown\"\n    | \"slideLeft\"\n    | \"slideRight\";\n  duration?: number;\n  delay?: number;\n  style?: ViewStyle;\n  onTransitionStart?: () => void;\n  onTransitionEnd?: () => void;\n  isVisible?: boolean;\n}\n\nexport const NativePageTransition: React.FC<NativePageTransitionProps> = ({\n  children,\n  type = \"fade\",\n  duration = 300,\n  delay = 0,\n  style,\n  onTransitionStart,\n  onTransitionEnd,\n  isVisible = true,\n}) => {\n  const animatedValue = useRef(new Animated.Value(isVisible ? 1 : 0)).current;\n  const translateX = useRef(new Animated.Value(0)).current;\n  const translateY = useRef(new Animated.Value(0)).current;\n  const scale = useRef(new Animated.Value(isVisible ? 1 : 0.8)).current;\n\n  useEffect(() => {\n    const targetValue = isVisible ? 1 : 0;\n\n    onTransitionStart?.();\n\n    const animations: Animated.CompositeAnimation[] = [];\n\n    // Opacity animation for all types\n    animations.push(\n      Animated.timing(animatedValue, {\n        toValue: targetValue,\n        duration,\n        delay,\n        useNativeDriver: true,\n      }),\n    );\n\n    switch (type) {\n      case \"scale\":\n        animations.push(\n          Animated.timing(scale, {\n            toValue: isVisible ? 1 : 0.8,\n            duration,\n            delay,\n            useNativeDriver: true,\n          }),\n        );\n        break;\n\n      case \"slideLeft\":\n        animations.push(\n          Animated.timing(translateX, {\n            toValue: isVisible ? 0 : -screenWidth,\n            duration,\n            delay,\n            useNativeDriver: true,\n          }),\n        );\n        break;\n\n      case \"slideRight\":\n        animations.push(\n          Animated.timing(translateX, {\n            toValue: isVisible ? 0 : screenWidth,\n            duration,\n            delay,\n            useNativeDriver: true,\n          }),\n        );\n        break;\n\n      case \"slideUp\":\n        animations.push(\n          Animated.timing(translateY, {\n            toValue: isVisible ? 0 : -screenHeight,\n            duration,\n            delay,\n            useNativeDriver: true,\n          }),\n        );\n        break;\n\n      case \"slideDown\":\n        animations.push(\n          Animated.timing(translateY, {\n            toValue: isVisible ? 0 : screenHeight,\n            duration,\n            delay,\n            useNativeDriver: true,\n          }),\n        );\n        break;\n\n      case \"slide\":\n        // Default slide from right\n        animations.push(\n          Animated.timing(translateX, {\n            toValue: isVisible ? 0 : screenWidth * 0.3,\n            duration,\n            delay,\n            useNativeDriver: true,\n          }),\n        );\n        break;\n    }\n\n    Animated.parallel(animations).start(({ finished }) => {\n      if (finished) {\n        onTransitionEnd?.();\n      }\n    });\n  }, [\n    isVisible,\n    type,\n    duration,\n    delay,\n    animatedValue,\n    translateX,\n    translateY,\n    scale,\n    onTransitionStart,\n    onTransitionEnd,\n  ]);\n\n  const getTransformStyle = (): ViewStyle => {\n    const transform: any[] = [];\n\n    if (type === \"scale\") {\n      transform.push({ scale });\n    }\n\n    if (type.includes(\"slide\") || type === \"slide\") {\n      transform.push({ translateX });\n      transform.push({ translateY });\n    }\n\n    return { transform };\n  };\n\n  return (\n    <Animated.View\n      style={[\n        styles.container,\n        {\n          opacity: animatedValue,\n          ...getTransformStyle(),\n        },\n        style,\n      ]}\n      pointerEvents={isVisible ? \"auto\" : \"none\"}\n    >\n      {children}\n    </Animated.View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n  },\n});\n","import React, { useState, useEffect } from \"react\";\nimport {\n  View,\n  Text,\n  StyleSheet,\n  ViewStyle,\n  TextStyle,\n  ActivityIndicator,\n} from \"react-native\";\nimport NetInfo, { NetInfoState } from \"@react-native-community/netinfo\";\n\nexport interface NativeNetworkAwareContentProps {\n  children: React.ReactNode;\n  fallback?: React.ReactNode;\n  loadingComponent?: React.ReactNode;\n  offlineComponent?: React.ReactNode;\n  slowConnectionComponent?: React.ReactNode;\n  showNetworkStatus?: boolean;\n  onNetworkChange?: (isConnected: boolean, connectionType: string) => void;\n  style?: ViewStyle;\n  minimumSpeed?: number; // in Mbps\n}\n\nconst DefaultLoadingComponent = () => (\n  <View style={styles.statusContainer}>\n    <ActivityIndicator size=\"small\" color=\"#3b82f6\" />\n    <Text style={styles.statusText}>Checking connection...</Text>\n  </View>\n);\n\nconst DefaultOfflineComponent = () => (\n  <View style={styles.statusContainer}>\n    <Text style={styles.statusText}>⚠️ No internet connection</Text>\n    <Text style={styles.statusSubtext}>Content may be limited</Text>\n  </View>\n);\n\nconst DefaultSlowConnectionComponent = () => (\n  <View style={styles.statusContainer}>\n    <Text style={styles.statusText}>🐌 Slow connection detected</Text>\n    <Text style={styles.statusSubtext}>Some features may be limited</Text>\n  </View>\n);\n\nexport const NativeNetworkAwareContent: React.FC<\n  NativeNetworkAwareContentProps\n> = ({\n  children,\n  fallback,\n  loadingComponent = <DefaultLoadingComponent />,\n  offlineComponent = <DefaultOfflineComponent />,\n  slowConnectionComponent = <DefaultSlowConnectionComponent />,\n  showNetworkStatus = true,\n  onNetworkChange,\n  style,\n  minimumSpeed = 1, // 1 Mbps minimum\n}) => {\n  const [networkState, setNetworkState] = useState<NetInfoState | null>(null);\n  const [isLoading, setIsLoading] = useState(true);\n\n  useEffect(() => {\n    const unsubscribe = NetInfo.addEventListener((state) => {\n      setNetworkState(state);\n      setIsLoading(false);\n\n      onNetworkChange?.(state.isConnected ?? false, state.type || \"unknown\");\n    });\n\n    // Get initial state\n    NetInfo.fetch().then((state) => {\n      setNetworkState(state);\n      setIsLoading(false);\n    });\n\n    return unsubscribe;\n  }, [onNetworkChange]);\n\n  if (isLoading) {\n    return <View style={[styles.container, style]}>{loadingComponent}</View>;\n  }\n\n  if (!networkState || !networkState.isConnected) {\n    return (\n      <View style={[styles.container, style]}>\n        {showNetworkStatus && offlineComponent}\n        {fallback || null}\n      </View>\n    );\n  }\n\n  // Check for slow connection\n  const isSlowConnection =\n    networkState.details &&\n    \"downlinkMax\" in networkState.details &&\n    typeof networkState.details.downlinkMax === \"number\" &&\n    networkState.details.downlinkMax < minimumSpeed;\n\n  return (\n    <View style={[styles.container, style]}>\n      {showNetworkStatus && isSlowConnection && slowConnectionComponent}\n      {children}\n    </View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n  },\n  statusContainer: {\n    padding: 16,\n    backgroundColor: \"#f8fafc\",\n    borderBottomWidth: 1,\n    borderBottomColor: \"#e2e8f0\",\n    alignItems: \"center\",\n    flexDirection: \"row\",\n    justifyContent: \"center\",\n  },\n  statusText: {\n    fontSize: 14,\n    fontWeight: \"500\",\n    color: \"#475569\",\n    marginLeft: 8,\n  },\n  statusSubtext: {\n    fontSize: 12,\n    color: \"#64748b\",\n    marginTop: 2,\n    textAlign: \"center\",\n  },\n});\n","import React, { useState, useEffect } from \"react\";\nimport {\n  View,\n  Text,\n  StyleSheet,\n  ViewStyle,\n  Animated,\n  TouchableOpacity,\n} from \"react-native\";\nimport NetInfo from \"@react-native-community/netinfo\";\n\nexport interface NativeOfflineWrapperProps {\n  children: React.ReactNode;\n  showBanner?: boolean;\n  bannerText?: string;\n  reconnectedText?: string;\n  bannerStyle?: ViewStyle;\n  onOffline?: () => void;\n  onOnline?: () => void;\n  style?: ViewStyle;\n  animationDuration?: number;\n}\n\nexport const NativeOfflineWrapper: React.FC<NativeOfflineWrapperProps> = ({\n  children,\n  showBanner = true,\n  bannerText = \"No internet connection\",\n  reconnectedText = \"Connection restored\",\n  bannerStyle,\n  onOffline,\n  onOnline,\n  style,\n  animationDuration = 300,\n}) => {\n  const [isConnected, setIsConnected] = useState<boolean | null>(null);\n  const [wasOffline, setWasOffline] = useState(false);\n  const [showReconnected, setShowReconnected] = useState(false);\n  const bannerOpacity = useState(new Animated.Value(0))[0];\n  const bannerHeight = useState(new Animated.Value(0))[0];\n\n  useEffect(() => {\n    const unsubscribe = NetInfo.addEventListener((state) => {\n      const connected = state.isConnected ?? false;\n\n      if (isConnected !== null) {\n        if (!connected && isConnected) {\n          // Just went offline\n          setWasOffline(true);\n          onOffline?.();\n        } else if (connected && !isConnected && wasOffline) {\n          // Just came back online\n          setShowReconnected(true);\n          onOnline?.();\n\n          // Hide reconnected message after 3 seconds\n          setTimeout(() => {\n            setShowReconnected(false);\n          }, 3000);\n        }\n      }\n\n      setIsConnected(connected);\n    });\n\n    // Get initial state\n    NetInfo.fetch().then((state) => {\n      setIsConnected(state.isConnected ?? false);\n    });\n\n    return unsubscribe;\n  }, [isConnected, wasOffline, onOffline, onOnline]);\n\n  useEffect(() => {\n    if (showBanner && (isConnected === false || showReconnected)) {\n      // Show banner\n      Animated.parallel([\n        Animated.timing(bannerOpacity, {\n          toValue: 1,\n          duration: animationDuration,\n          useNativeDriver: false,\n        }),\n        Animated.timing(bannerHeight, {\n          toValue: 50,\n          duration: animationDuration,\n          useNativeDriver: false,\n        }),\n      ]).start();\n    } else {\n      // Hide banner\n      Animated.parallel([\n        Animated.timing(bannerOpacity, {\n          toValue: 0,\n          duration: animationDuration,\n          useNativeDriver: false,\n        }),\n        Animated.timing(bannerHeight, {\n          toValue: 0,\n          duration: animationDuration,\n          useNativeDriver: false,\n        }),\n      ]).start();\n    }\n  }, [\n    isConnected,\n    showReconnected,\n    showBanner,\n    bannerOpacity,\n    bannerHeight,\n    animationDuration,\n  ]);\n\n  const getBannerStyle = () => {\n    if (showReconnected) {\n      return styles.reconnectedBanner;\n    }\n    return styles.offlineBanner;\n  };\n\n  const getBannerTextColor = () => {\n    if (showReconnected) {\n      return styles.reconnectedText;\n    }\n    return styles.offlineText;\n  };\n\n  const getCurrentText = () => {\n    if (showReconnected) {\n      return reconnectedText;\n    }\n    return bannerText;\n  };\n\n  return (\n    <View style={[styles.container, style]}>\n      {showBanner && (\n        <Animated.View\n          style={[\n            styles.bannerContainer,\n            getBannerStyle(),\n            {\n              opacity: bannerOpacity,\n              height: bannerHeight,\n            },\n            bannerStyle,\n          ]}\n        >\n          <TouchableOpacity\n            style={styles.bannerContent}\n            onPress={() => {\n              if (showReconnected) {\n                setShowReconnected(false);\n              }\n            }}\n            disabled={!showReconnected}\n          >\n            <Text style={[styles.bannerText, getBannerTextColor()]}>\n              {getCurrentText()}\n            </Text>\n            {isConnected === false && (\n              <Text style={styles.tapToRetry}>Tap to retry</Text>\n            )}\n          </TouchableOpacity>\n        </Animated.View>\n      )}\n      <View style={styles.content}>{children}</View>\n    </View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n  },\n  bannerContainer: {\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    paddingHorizontal: 16,\n    borderBottomWidth: 1,\n    borderBottomColor: \"rgba(255, 255, 255, 0.2)\",\n  },\n  bannerContent: {\n    alignItems: \"center\",\n    justifyContent: \"center\",\n    flex: 1,\n  },\n  bannerText: {\n    fontSize: 14,\n    fontWeight: \"500\",\n    textAlign: \"center\",\n  },\n  tapToRetry: {\n    fontSize: 12,\n    marginTop: 2,\n    color: \"rgba(255, 255, 255, 0.8)\",\n  },\n  offlineBanner: {\n    backgroundColor: \"#ef4444\",\n  },\n  reconnectedBanner: {\n    backgroundColor: \"#10b981\",\n  },\n  offlineText: {\n    color: \"#ffffff\",\n  },\n  reconnectedText: {\n    color: \"#ffffff\",\n  },\n  content: {\n    flex: 1,\n  },\n});\n","import React, {\n  useState,\n  useEffect,\n  forwardRef,\n  useImperativeHandle,\n} from \"react\";\nimport {\n  View,\n  Text,\n  StyleSheet,\n  Animated,\n  TouchableOpacity,\n  ViewStyle,\n  TextStyle,\n  Dimensions,\n  Platform,\n} from \"react-native\";\nimport { useSafeAreaInsets } from \"react-native-safe-area-context\";\n\nconst { width: screenWidth } = Dimensions.get(\"window\");\n\nexport interface NativeToastProps {\n  message?: string;\n  type?: \"success\" | \"error\" | \"warning\" | \"info\";\n  duration?: number;\n  position?: \"top\" | \"bottom\" | \"center\";\n  onHide?: () => void;\n  style?: ViewStyle;\n  textStyle?: TextStyle;\n  closable?: boolean;\n}\n\nexport interface ToastRef {\n  show: (message: string, options?: Partial<NativeToastProps>) => void;\n  hide: () => void;\n}\n\nexport const NativeToast = forwardRef<ToastRef, NativeToastProps>(\n  (\n    {\n      message = \"\",\n      type = \"info\",\n      duration = 3000,\n      position = \"top\",\n      onHide,\n      style,\n      textStyle,\n      closable = true,\n    },\n    ref,\n  ) => {\n    const [visible, setVisible] = useState(false);\n    const [currentMessage, setCurrentMessage] = useState(message);\n    const [currentType, setCurrentType] = useState(type);\n    const opacity = useState(new Animated.Value(0))[0];\n    const translateY = useState(\n      new Animated.Value(position === \"top\" ? -100 : 100),\n    )[0];\n    const insets = useSafeAreaInsets();\n\n    useImperativeHandle(ref, () => ({\n      show: (msg: string, options?: Partial<NativeToastProps>) => {\n        setCurrentMessage(msg);\n        setCurrentType(options?.type || \"info\");\n        setVisible(true);\n\n        const animDuration = 300;\n        const displayDuration = options?.duration || duration;\n\n        Animated.parallel([\n          Animated.timing(opacity, {\n            toValue: 1,\n            duration: animDuration,\n            useNativeDriver: true,\n          }),\n          Animated.timing(translateY, {\n            toValue: 0,\n            duration: animDuration,\n            useNativeDriver: true,\n          }),\n        ]).start();\n\n        if (displayDuration > 0) {\n          setTimeout(() => {\n            hideToast();\n          }, displayDuration);\n        }\n      },\n      hide: hideToast,\n    }));\n\n    const hideToast = () => {\n      const animDuration = 300;\n\n      Animated.parallel([\n        Animated.timing(opacity, {\n          toValue: 0,\n          duration: animDuration,\n          useNativeDriver: true,\n        }),\n        Animated.timing(translateY, {\n          toValue: position === \"top\" ? -100 : 100,\n          duration: animDuration,\n          useNativeDriver: true,\n        }),\n      ]).start(() => {\n        setVisible(false);\n        onHide?.();\n      });\n    };\n\n    useEffect(() => {\n      if (message && visible) {\n        const animDuration = 300;\n\n        Animated.parallel([\n          Animated.timing(opacity, {\n            toValue: 1,\n            duration: animDuration,\n            useNativeDriver: true,\n          }),\n          Animated.timing(translateY, {\n            toValue: 0,\n            duration: animDuration,\n            useNativeDriver: true,\n          }),\n        ]).start();\n\n        if (duration > 0) {\n          setTimeout(hideToast, duration);\n        }\n      }\n    }, [message, visible, duration, opacity, translateY]);\n\n    const getTypeStyles = () => {\n      switch (currentType) {\n        case \"success\":\n          return {\n            backgroundColor: \"#10b981\",\n            borderColor: \"#059669\",\n          };\n        case \"error\":\n          return {\n            backgroundColor: \"#ef4444\",\n            borderColor: \"#dc2626\",\n          };\n        case \"warning\":\n          return {\n            backgroundColor: \"#f59e0b\",\n            borderColor: \"#d97706\",\n          };\n        default:\n          return {\n            backgroundColor: \"#3b82f6\",\n            borderColor: \"#2563eb\",\n          };\n      }\n    };\n\n    const getPositionStyle = (): ViewStyle => {\n      const baseStyle: ViewStyle = {\n        position: \"absolute\",\n        left: 16,\n        right: 16,\n        zIndex: 9999,\n      };\n\n      switch (position) {\n        case \"top\":\n          return {\n            ...baseStyle,\n            top: insets.top + 10,\n          };\n        case \"bottom\":\n          return {\n            ...baseStyle,\n            bottom: insets.bottom + 10,\n          };\n        case \"center\":\n          return {\n            ...baseStyle,\n            top: \"50%\",\n            transform: [{ translateY: -25 }],\n          };\n        default:\n          return {\n            ...baseStyle,\n            top: insets.top + 10,\n          };\n      }\n    };\n\n    const getIcon = () => {\n      switch (currentType) {\n        case \"success\":\n          return \"✓\";\n        case \"error\":\n          return \"✕\";\n        case \"warning\":\n          return \"⚠\";\n        default:\n          return \"ℹ\";\n      }\n    };\n\n    if (!visible && !message) {\n      return null;\n    }\n\n    return (\n      <Animated.View\n        style={[\n          styles.container,\n          getPositionStyle(),\n          getTypeStyles(),\n          {\n            opacity,\n            transform: [{ translateY }],\n          },\n          style,\n        ]}\n        pointerEvents=\"auto\"\n      >\n        <View style={styles.content}>\n          <Text style={styles.icon}>{getIcon()}</Text>\n          <Text style={[styles.message, textStyle]} numberOfLines={3}>\n            {currentMessage || message}\n          </Text>\n          {closable && (\n            <TouchableOpacity onPress={hideToast} style={styles.closeButton}>\n              <Text style={styles.closeText}>✕</Text>\n            </TouchableOpacity>\n          )}\n        </View>\n      </Animated.View>\n    );\n  },\n);\n\nconst styles = StyleSheet.create({\n  container: {\n    borderRadius: 8,\n    marginHorizontal: 16,\n    borderWidth: 1,\n    shadowColor: \"#000\",\n    shadowOffset: {\n      width: 0,\n      height: 2,\n    },\n    shadowOpacity: 0.25,\n    shadowRadius: 3.84,\n    elevation: 5,\n  },\n  content: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n    paddingHorizontal: 16,\n    paddingVertical: 12,\n    minHeight: 50,\n  },\n  icon: {\n    fontSize: 16,\n    color: \"#ffffff\",\n    marginRight: 8,\n    fontWeight: \"bold\",\n  },\n  message: {\n    flex: 1,\n    fontSize: 14,\n    color: \"#ffffff\",\n    fontWeight: \"500\",\n    lineHeight: 18,\n  },\n  closeButton: {\n    marginLeft: 8,\n    padding: 4,\n  },\n  closeText: {\n    fontSize: 14,\n    color: \"#ffffff\",\n    fontWeight: \"bold\",\n    opacity: 0.8,\n  },\n});\n\nNativeToast.displayName = \"NativeToast\";\n","import React, { useState } from \"react\";\nimport {\n  View,\n  Text,\n  TextInput,\n  TouchableOpacity,\n  StyleSheet,\n  ViewStyle,\n  TextStyle,\n  ActivityIndicator,\n} from \"react-native\";\n\nexport interface LoginFormProps {\n  onSubmit?: (email: string, password: string) => void | Promise<void>;\n  onForgotPassword?: () => void;\n  onSignUp?: () => void;\n  loading?: boolean;\n  title?: string;\n  emailLabel?: string;\n  passwordLabel?: string;\n  loginButtonLabel?: string;\n  forgotPasswordLabel?: string;\n  signUpLabel?: string;\n  style?: ViewStyle;\n  titleStyle?: TextStyle;\n  inputStyle?: ViewStyle;\n  buttonStyle?: ViewStyle;\n  buttonTextStyle?: TextStyle;\n  linkStyle?: TextStyle;\n}\n\nexport const LoginForm: React.FC<LoginFormProps> = ({\n  onSubmit,\n  onForgotPassword,\n  onSignUp,\n  loading = false,\n  title = \"Sign In\",\n  emailLabel = \"Email\",\n  passwordLabel = \"Password\",\n  loginButtonLabel = \"Sign In\",\n  forgotPasswordLabel = \"Forgot Password?\",\n  signUpLabel = \"Don't have an account? Sign Up\",\n  style,\n  titleStyle,\n  inputStyle,\n  buttonStyle,\n  buttonTextStyle,\n  linkStyle,\n}) => {\n  const [email, setEmail] = useState(\"\");\n  const [password, setPassword] = useState(\"\");\n  const [errors, setErrors] = useState<{ email?: string; password?: string }>(\n    {},\n  );\n\n  const validateForm = () => {\n    const newErrors: { email?: string; password?: string } = {};\n\n    if (!email.trim()) {\n      newErrors.email = \"Email is required\";\n    } else if (!/\\S+@\\S+\\.\\S+/.test(email)) {\n      newErrors.email = \"Email is invalid\";\n    }\n\n    if (!password.trim()) {\n      newErrors.password = \"Password is required\";\n    } else if (password.length < 6) {\n      newErrors.password = \"Password must be at least 6 characters\";\n    }\n\n    setErrors(newErrors);\n    return Object.keys(newErrors).length === 0;\n  };\n\n  const handleSubmit = async () => {\n    if (!validateForm() || loading) return;\n\n    try {\n      await onSubmit?.(email, password);\n    } catch (error) {\n      console.error(\"Login failed:\", error);\n    }\n  };\n\n  return (\n    <View style={[styles.container, style]}>\n      <Text style={[styles.title, titleStyle]}>{title}</Text>\n\n      <View style={styles.formContainer}>\n        <View style={styles.inputContainer}>\n          <Text style={styles.label}>{emailLabel}</Text>\n          <TextInput\n            style={[\n              styles.input,\n              errors.email && styles.inputError,\n              inputStyle,\n            ]}\n            value={email}\n            onChangeText={setEmail}\n            placeholder=\"Enter your email\"\n            keyboardType=\"email-address\"\n            autoCapitalize=\"none\"\n            autoCorrect={false}\n            autoComplete=\"email\"\n            editable={!loading}\n          />\n          {errors.email && <Text style={styles.errorText}>{errors.email}</Text>}\n        </View>\n\n        <View style={styles.inputContainer}>\n          <Text style={styles.label}>{passwordLabel}</Text>\n          <TextInput\n            style={[\n              styles.input,\n              errors.password && styles.inputError,\n              inputStyle,\n            ]}\n            value={password}\n            onChangeText={setPassword}\n            placeholder=\"Enter your password\"\n            secureTextEntry\n            autoCapitalize=\"none\"\n            autoCorrect={false}\n            autoComplete=\"current-password\"\n            editable={!loading}\n          />\n          {errors.password && (\n            <Text style={styles.errorText}>{errors.password}</Text>\n          )}\n        </View>\n\n        <TouchableOpacity\n          style={[styles.button, loading && styles.buttonDisabled, buttonStyle]}\n          onPress={handleSubmit}\n          disabled={loading}\n        >\n          {loading ? (\n            <ActivityIndicator color=\"#ffffff\" size=\"small\" />\n          ) : (\n            <Text style={[styles.buttonText, buttonTextStyle]}>\n              {loginButtonLabel}\n            </Text>\n          )}\n        </TouchableOpacity>\n\n        {onForgotPassword && (\n          <TouchableOpacity\n            style={styles.linkContainer}\n            onPress={onForgotPassword}\n            disabled={loading}\n          >\n            <Text style={[styles.linkText, linkStyle]}>\n              {forgotPasswordLabel}\n            </Text>\n          </TouchableOpacity>\n        )}\n\n        {onSignUp && (\n          <TouchableOpacity\n            style={styles.linkContainer}\n            onPress={onSignUp}\n            disabled={loading}\n          >\n            <Text style={[styles.linkText, linkStyle]}>{signUpLabel}</Text>\n          </TouchableOpacity>\n        )}\n      </View>\n    </View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n    justifyContent: \"center\",\n    padding: 24,\n    backgroundColor: \"#ffffff\",\n  },\n  title: {\n    fontSize: 28,\n    fontWeight: \"bold\",\n    textAlign: \"center\",\n    marginBottom: 32,\n    color: \"#1f2937\",\n  },\n  formContainer: {\n    width: \"100%\",\n  },\n  inputContainer: {\n    marginBottom: 20,\n  },\n  label: {\n    fontSize: 16,\n    fontWeight: \"500\",\n    marginBottom: 8,\n    color: \"#374151\",\n  },\n  input: {\n    borderWidth: 1,\n    borderColor: \"#d1d5db\",\n    borderRadius: 8,\n    paddingHorizontal: 16,\n    paddingVertical: 12,\n    fontSize: 16,\n    backgroundColor: \"#ffffff\",\n    color: \"#1f2937\",\n  },\n  inputError: {\n    borderColor: \"#ef4444\",\n    borderWidth: 2,\n  },\n  errorText: {\n    color: \"#ef4444\",\n    fontSize: 14,\n    marginTop: 4,\n  },\n  button: {\n    backgroundColor: \"#3b82f6\",\n    paddingVertical: 14,\n    paddingHorizontal: 24,\n    borderRadius: 8,\n    alignItems: \"center\",\n    marginTop: 8,\n    marginBottom: 16,\n  },\n  buttonDisabled: {\n    backgroundColor: \"#9ca3af\",\n  },\n  buttonText: {\n    color: \"#ffffff\",\n    fontSize: 16,\n    fontWeight: \"600\",\n  },\n  linkContainer: {\n    alignItems: \"center\",\n    paddingVertical: 8,\n  },\n  linkText: {\n    color: \"#3b82f6\",\n    fontSize: 14,\n    fontWeight: \"500\",\n  },\n});\n","import React, { useState } from \"react\";\nimport {\n  View,\n  Text,\n  TextInput,\n  TouchableOpacity,\n  StyleSheet,\n  ViewStyle,\n  TextStyle,\n  ActivityIndicator,\n  ScrollView,\n} from \"react-native\";\n\nexport interface SignupFormProps {\n  onSubmit?: (data: {\n    email: string;\n    password: string;\n    confirmPassword: string;\n    name?: string;\n  }) => void | Promise<void>;\n  onSignIn?: () => void;\n  loading?: boolean;\n  title?: string;\n  nameLabel?: string;\n  emailLabel?: string;\n  passwordLabel?: string;\n  confirmPasswordLabel?: string;\n  signupButtonLabel?: string;\n  signInLabel?: string;\n  requireName?: boolean;\n  style?: ViewStyle;\n  titleStyle?: TextStyle;\n  inputStyle?: ViewStyle;\n  buttonStyle?: ViewStyle;\n  buttonTextStyle?: TextStyle;\n  linkStyle?: TextStyle;\n}\n\nexport const SignupForm: React.FC<SignupFormProps> = ({\n  onSubmit,\n  onSignIn,\n  loading = false,\n  title = \"Create Account\",\n  nameLabel = \"Full Name\",\n  emailLabel = \"Email\",\n  passwordLabel = \"Password\",\n  confirmPasswordLabel = \"Confirm Password\",\n  signupButtonLabel = \"Sign Up\",\n  signInLabel = \"Already have an account? Sign In\",\n  requireName = true,\n  style,\n  titleStyle,\n  inputStyle,\n  buttonStyle,\n  buttonTextStyle,\n  linkStyle,\n}) => {\n  const [formData, setFormData] = useState({\n    name: \"\",\n    email: \"\",\n    password: \"\",\n    confirmPassword: \"\",\n  });\n  const [errors, setErrors] = useState<{\n    name?: string;\n    email?: string;\n    password?: string;\n    confirmPassword?: string;\n  }>({});\n\n  const updateField = (field: keyof typeof formData, value: string) => {\n    setFormData((prev) => ({ ...prev, [field]: value }));\n  };\n\n  const validateForm = () => {\n    const newErrors: typeof errors = {};\n\n    if (requireName && !formData.name.trim()) {\n      newErrors.name = \"Name is required\";\n    }\n\n    if (!formData.email.trim()) {\n      newErrors.email = \"Email is required\";\n    } else if (!/\\S+@\\S+\\.\\S+/.test(formData.email)) {\n      newErrors.email = \"Email is invalid\";\n    }\n\n    if (!formData.password.trim()) {\n      newErrors.password = \"Password is required\";\n    } else if (formData.password.length < 8) {\n      newErrors.password = \"Password must be at least 8 characters\";\n    } else if (!/(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)/.test(formData.password)) {\n      newErrors.password =\n        \"Password must contain uppercase, lowercase, and number\";\n    }\n\n    if (!formData.confirmPassword.trim()) {\n      newErrors.confirmPassword = \"Please confirm your password\";\n    } else if (formData.password !== formData.confirmPassword) {\n      newErrors.confirmPassword = \"Passwords do not match\";\n    }\n\n    setErrors(newErrors);\n    return Object.keys(newErrors).length === 0;\n  };\n\n  const handleSubmit = async () => {\n    if (!validateForm() || loading) return;\n\n    try {\n      await onSubmit?.(formData);\n    } catch (error) {\n      console.error(\"Signup failed:\", error);\n    }\n  };\n\n  return (\n    <ScrollView\n      style={[styles.container, style]}\n      keyboardShouldPersistTaps=\"handled\"\n    >\n      <Text style={[styles.title, titleStyle]}>{title}</Text>\n\n      <View style={styles.formContainer}>\n        {requireName && (\n          <View style={styles.inputContainer}>\n            <Text style={styles.label}>{nameLabel}</Text>\n            <TextInput\n              style={[\n                styles.input,\n                errors.name && styles.inputError,\n                inputStyle,\n              ]}\n              value={formData.name}\n              onChangeText={(value) => updateField(\"name\", value)}\n              placeholder=\"Enter your full name\"\n              autoCapitalize=\"words\"\n              autoCorrect={false}\n              autoComplete=\"name\"\n              editable={!loading}\n            />\n            {errors.name && <Text style={styles.errorText}>{errors.name}</Text>}\n          </View>\n        )}\n\n        <View style={styles.inputContainer}>\n          <Text style={styles.label}>{emailLabel}</Text>\n          <TextInput\n            style={[\n              styles.input,\n              errors.email && styles.inputError,\n              inputStyle,\n            ]}\n            value={formData.email}\n            onChangeText={(value) => updateField(\"email\", value)}\n            placeholder=\"Enter your email\"\n            keyboardType=\"email-address\"\n            autoCapitalize=\"none\"\n            autoCorrect={false}\n            autoComplete=\"email\"\n            editable={!loading}\n          />\n          {errors.email && <Text style={styles.errorText}>{errors.email}</Text>}\n        </View>\n\n        <View style={styles.inputContainer}>\n          <Text style={styles.label}>{passwordLabel}</Text>\n          <TextInput\n            style={[\n              styles.input,\n              errors.password && styles.inputError,\n              inputStyle,\n            ]}\n            value={formData.password}\n            onChangeText={(value) => updateField(\"password\", value)}\n            placeholder=\"Create a password\"\n            secureTextEntry\n            autoCapitalize=\"none\"\n            autoCorrect={false}\n            autoComplete=\"new-password\"\n            editable={!loading}\n          />\n          {errors.password && (\n            <Text style={styles.errorText}>{errors.password}</Text>\n          )}\n        </View>\n\n        <View style={styles.inputContainer}>\n          <Text style={styles.label}>{confirmPasswordLabel}</Text>\n          <TextInput\n            style={[\n              styles.input,\n              errors.confirmPassword && styles.inputError,\n              inputStyle,\n            ]}\n            value={formData.confirmPassword}\n            onChangeText={(value) => updateField(\"confirmPassword\", value)}\n            placeholder=\"Confirm your password\"\n            secureTextEntry\n            autoCapitalize=\"none\"\n            autoCorrect={false}\n            autoComplete=\"new-password\"\n            editable={!loading}\n          />\n          {errors.confirmPassword && (\n            <Text style={styles.errorText}>{errors.confirmPassword}</Text>\n          )}\n        </View>\n\n        <TouchableOpacity\n          style={[styles.button, loading && styles.buttonDisabled, buttonStyle]}\n          onPress={handleSubmit}\n          disabled={loading}\n        >\n          {loading ? (\n            <ActivityIndicator color=\"#ffffff\" size=\"small\" />\n          ) : (\n            <Text style={[styles.buttonText, buttonTextStyle]}>\n              {signupButtonLabel}\n            </Text>\n          )}\n        </TouchableOpacity>\n\n        {onSignIn && (\n          <TouchableOpacity\n            style={styles.linkContainer}\n            onPress={onSignIn}\n            disabled={loading}\n          >\n            <Text style={[styles.linkText, linkStyle]}>{signInLabel}</Text>\n          </TouchableOpacity>\n        )}\n      </View>\n    </ScrollView>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n    backgroundColor: \"#ffffff\",\n  },\n  title: {\n    fontSize: 28,\n    fontWeight: \"bold\",\n    textAlign: \"center\",\n    marginBottom: 32,\n    marginTop: 32,\n    color: \"#1f2937\",\n  },\n  formContainer: {\n    paddingHorizontal: 24,\n    paddingBottom: 32,\n  },\n  inputContainer: {\n    marginBottom: 20,\n  },\n  label: {\n    fontSize: 16,\n    fontWeight: \"500\",\n    marginBottom: 8,\n    color: \"#374151\",\n  },\n  input: {\n    borderWidth: 1,\n    borderColor: \"#d1d5db\",\n    borderRadius: 8,\n    paddingHorizontal: 16,\n    paddingVertical: 12,\n    fontSize: 16,\n    backgroundColor: \"#ffffff\",\n    color: \"#1f2937\",\n  },\n  inputError: {\n    borderColor: \"#ef4444\",\n    borderWidth: 2,\n  },\n  errorText: {\n    color: \"#ef4444\",\n    fontSize: 14,\n    marginTop: 4,\n  },\n  button: {\n    backgroundColor: \"#3b82f6\",\n    paddingVertical: 14,\n    paddingHorizontal: 24,\n    borderRadius: 8,\n    alignItems: \"center\",\n    marginTop: 8,\n    marginBottom: 16,\n  },\n  buttonDisabled: {\n    backgroundColor: \"#9ca3af\",\n  },\n  buttonText: {\n    color: \"#ffffff\",\n    fontSize: 16,\n    fontWeight: \"600\",\n  },\n  linkContainer: {\n    alignItems: \"center\",\n    paddingVertical: 8,\n  },\n  linkText: {\n    color: \"#3b82f6\",\n    fontSize: 14,\n    fontWeight: \"500\",\n  },\n});\n","// src/components/ui/button/button.tsx\nimport * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../../../utils/cn\";\n\nconst buttonVariants = cva(\n  \"inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n        primary: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n        destructive:\n          \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n        outline:\n          \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n        secondary:\n          \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n        ghost: \"hover:bg-accent hover:text-accent-foreground\",\n        link: \"text-primary underline-offset-4 hover:underline\",\n      },\n      size: {\n        default: \"h-10 px-4 py-2\",\n        sm: \"h-9 rounded-md px-3\",\n        lg: \"h-11 rounded-md px-8\",\n        icon: \"h-10 w-10\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  },\n);\n\nexport interface ButtonProps\n  extends\n    React.ButtonHTMLAttributes<HTMLButtonElement>,\n    VariantProps<typeof buttonVariants> {\n  loading?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n  (\n    { className, variant, size, loading, disabled, children, ...props },\n    ref,\n  ) => {\n    return (\n      <button\n        className={cn(buttonVariants({ variant, size, className }))}\n        ref={ref}\n        disabled={disabled || loading}\n        {...props}\n      >\n        {loading && (\n          <svg\n            className=\"mr-2 h-4 w-4 animate-spin\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n            fill=\"none\"\n            viewBox=\"0 0 24 24\"\n          >\n            <circle\n              className=\"opacity-25\"\n              cx=\"12\"\n              cy=\"12\"\n              r=\"10\"\n              stroke=\"currentColor\"\n              strokeWidth=\"4\"\n            />\n            <path\n              className=\"opacity-75\"\n              fill=\"currentColor\"\n              d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n            />\n          </svg>\n        )}\n        {children}\n      </button>\n    );\n  },\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","// src/components/ui/card/card.tsx\nimport * as React from \"react\";\nimport { cn } from \"../../../../utils/cn\";\n\n/**\n * Surface system props for controlled variation.\n * These are optional — omitting them preserves existing behavior.\n */\nexport interface CardSurfaceProps {\n  /** Visual surface variant */\n  surface?: \"flat\" | \"subtle\" | \"elevated\" | \"glass\" | \"branded\";\n  /** Content density */\n  density?: \"comfortable\" | \"compact\";\n  /** Visual tone */\n  tone?: \"default\" | \"calm\" | \"energetic\" | \"premium\";\n}\n\nconst surfaceClasses: Record<\n  NonNullable<CardSurfaceProps[\"surface\"]>,\n  string\n> = {\n  flat: \"border bg-card shadow-none\",\n  subtle: \"border bg-card/50 shadow-sm\",\n  elevated: \"border bg-card shadow-md hover:shadow-lg transition-shadow\",\n  glass: \"border border-white/20 bg-white/10 backdrop-blur-md shadow-lg\",\n  branded: \"border-accent/20 bg-accent/5 shadow-sm\",\n};\n\nconst toneClasses: Record<NonNullable<CardSurfaceProps[\"tone\"]>, string> = {\n  default: \"\",\n  calm: \"border-muted bg-muted/30\",\n  energetic: \"border-accent bg-gradient-to-br from-accent/5 to-transparent\",\n  premium:\n    \"border-amber-200/50 bg-gradient-to-br from-amber-50/30 to-transparent dark:from-amber-950/20\",\n};\n\nconst Card = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement> & CardSurfaceProps\n>(({ className, surface, density, tone, ...props }, ref) => (\n  <div\n    ref={ref}\n    className={cn(\n      surface\n        ? surfaceClasses[surface]\n        : \"rounded-lg border bg-card text-card-foreground shadow-sm\",\n      surface && \"rounded-lg text-card-foreground\",\n      tone && toneClasses[tone],\n      density === \"compact\" &&\n        \"[&_[data-card-header]]:p-4 [&_[data-card-content]]:p-4 [&_[data-card-content]]:pt-0 [&_[data-card-footer]]:p-4\",\n      className,\n    )}\n    {...props}\n  />\n));\nCard.displayName = \"Card\";\n\nconst CardHeader = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n  <div\n    ref={ref}\n    data-card-header=\"\"\n    className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n    {...props}\n  />\n));\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<\n  HTMLHeadingElement,\n  React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n  <h3\n    ref={ref}\n    className={cn(\n      \"text-2xl font-semibold leading-none tracking-tight\",\n      className,\n    )}\n    {...props}\n  />\n));\nCardTitle.displayName = \"CardTitle\";\n\nconst CardDescription = React.forwardRef<\n  HTMLParagraphElement,\n  React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n  <p\n    ref={ref}\n    className={cn(\"text-sm text-muted-foreground\", className)}\n    {...props}\n  />\n));\nCardDescription.displayName = \"CardDescription\";\n\nconst CardContent = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n  <div\n    ref={ref}\n    data-card-content=\"\"\n    className={cn(\"p-6 pt-0\", className)}\n    {...props}\n  />\n));\nCardContent.displayName = \"CardContent\";\n\nconst CardFooter = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n  <div\n    ref={ref}\n    data-card-footer=\"\"\n    className={cn(\"flex items-center p-6 pt-0\", className)}\n    {...props}\n  />\n));\nCardFooter.displayName = \"CardFooter\";\n\nexport {\n  Card,\n  CardHeader,\n  CardFooter,\n  CardTitle,\n  CardDescription,\n  CardContent,\n};\n","// src/components/ui/input/input.tsx\nimport * as React from \"react\";\n\nimport { cn } from \"../../../../utils/cn\";\n\nexport type InputProps = React.InputHTMLAttributes<HTMLInputElement>;\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n  ({ className, type, ...props }, ref) => {\n    return (\n      <input\n        type={type}\n        className={cn(\n          \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n          className,\n        )}\n        ref={ref}\n        {...props}\n      />\n    );\n  },\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n","\"use client\";\n\nimport React from \"react\";\nimport { motion, AnimatePresence, Variants } from \"framer-motion\";\n\nexport type PageTransitionType =\n  | \"slide\"\n  | \"fade\"\n  | \"scale\"\n  | \"flip\"\n  | \"elastic\";\nexport type PageTransitionDirection =\n  | \"horizontal\"\n  | \"vertical\"\n  | \"up\"\n  | \"down\"\n  | \"left\"\n  | \"right\";\n\nexport interface PageTransitionProps {\n  children: React.ReactNode;\n  type?: PageTransitionType;\n  direction?: PageTransitionDirection;\n  duration?: number;\n  className?: string;\n  reduceMotion?: boolean;\n  onTransitionStart?: () => void;\n  onTransitionComplete?: () => void;\n  key?: string | number;\n  /** Additional HTML attributes for the container */\n  containerProps?: Omit<\n    React.HTMLAttributes<HTMLDivElement>,\n    | \"onAnimationStart\"\n    | \"onAnimationEnd\"\n    | \"onTransitionStart\"\n    | \"onTransitionEnd\"\n    | \"onDrag\"\n    | \"onDragStart\"\n    | \"onDragEnd\"\n  >;\n}\n\nconst createTransitionVariants = (\n  type: PageTransitionType,\n  direction: PageTransitionDirection,\n  duration: number = 300,\n): Variants => {\n  const durationInSeconds = duration / 1000;\n\n  const baseTransition = {\n    duration: durationInSeconds,\n    ease: [0.25, 0.25, 0.25, 0.75] as [number, number, number, number],\n  };\n\n  switch (type) {\n    case \"slide\":\n      switch (direction) {\n        case \"horizontal\":\n        case \"left\":\n          return {\n            initial: { x: \"100%\", opacity: 0 },\n            animate: { x: 0, opacity: 1, transition: baseTransition },\n            exit: { x: \"-100%\", opacity: 0, transition: baseTransition },\n          };\n        case \"right\":\n          return {\n            initial: { x: \"-100%\", opacity: 0 },\n            animate: { x: 0, opacity: 1, transition: baseTransition },\n            exit: { x: \"100%\", opacity: 0, transition: baseTransition },\n          };\n        case \"vertical\":\n        case \"up\":\n          return {\n            initial: { y: \"100%\", opacity: 0 },\n            animate: { y: 0, opacity: 1, transition: baseTransition },\n            exit: { y: \"-100%\", opacity: 0, transition: baseTransition },\n          };\n        case \"down\":\n          return {\n            initial: { y: \"-100%\", opacity: 0 },\n            animate: { y: 0, opacity: 1, transition: baseTransition },\n            exit: { y: \"100%\", opacity: 0, transition: baseTransition },\n          };\n        default:\n          return {\n            initial: { x: \"100%\", opacity: 0 },\n            animate: { x: 0, opacity: 1, transition: baseTransition },\n            exit: { x: \"-100%\", opacity: 0, transition: baseTransition },\n          };\n      }\n\n    case \"fade\":\n      return {\n        initial: { opacity: 0 },\n        animate: { opacity: 1, transition: baseTransition },\n        exit: { opacity: 0, transition: baseTransition },\n      };\n\n    case \"scale\":\n      return {\n        initial: { opacity: 0, scale: 0.8 },\n        animate: {\n          opacity: 1,\n          scale: 1,\n          transition: {\n            ...baseTransition,\n            scale: { type: \"spring\", damping: 20, stiffness: 300 },\n          },\n        },\n        exit: { opacity: 0, scale: 0.8, transition: baseTransition },\n      };\n\n    case \"flip\":\n      if (direction === \"horizontal\") {\n        return {\n          initial: { opacity: 0, rotateY: -90 },\n          animate: {\n            opacity: 1,\n            rotateY: 0,\n            transition: {\n              ...baseTransition,\n              rotateY: { type: \"spring\", damping: 15, stiffness: 200 },\n            },\n          },\n          exit: { opacity: 0, rotateY: 90, transition: baseTransition },\n        };\n      } else {\n        return {\n          initial: { opacity: 0, rotateX: -90 },\n          animate: {\n            opacity: 1,\n            rotateX: 0,\n            transition: {\n              ...baseTransition,\n              rotateX: { type: \"spring\", damping: 15, stiffness: 200 },\n            },\n          },\n          exit: { opacity: 0, rotateX: 90, transition: baseTransition },\n        };\n      }\n\n    case \"elastic\":\n      return {\n        initial: { opacity: 0, scale: 0 },\n        animate: {\n          opacity: 1,\n          scale: 1,\n          transition: {\n            duration: durationInSeconds * 1.5,\n            type: \"spring\",\n            damping: 8,\n            stiffness: 200,\n          },\n        },\n        exit: { opacity: 0, scale: 0, transition: baseTransition },\n      };\n\n    default:\n      return {\n        initial: { opacity: 0 },\n        animate: { opacity: 1, transition: baseTransition },\n        exit: { opacity: 0, transition: baseTransition },\n      };\n  }\n};\n\nexport const PageTransition: React.FC<PageTransitionProps> = ({\n  children,\n  type = \"slide\",\n  direction = \"horizontal\",\n  duration = 300,\n  className,\n  reduceMotion = false,\n  onTransitionStart,\n  onTransitionComplete,\n  key,\n  containerProps,\n}) => {\n  // Check for reduced motion preference\n  const prefersReducedMotion = React.useMemo(() => {\n    if (typeof window === \"undefined\") return false;\n    return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n  }, []);\n\n  // Use fade transition if reduced motion is preferred or requested\n  const effectiveType = reduceMotion || prefersReducedMotion ? \"fade\" : type;\n  const effectiveDuration =\n    reduceMotion || prefersReducedMotion ? 150 : duration;\n\n  const variants = React.useMemo(\n    () => createTransitionVariants(effectiveType, direction, effectiveDuration),\n    [effectiveType, direction, effectiveDuration],\n  );\n\n  const handleAnimationStart = React.useCallback(() => {\n    onTransitionStart?.();\n  }, [onTransitionStart]);\n\n  const handleAnimationComplete = React.useCallback(() => {\n    onTransitionComplete?.();\n  }, [onTransitionComplete]);\n\n  // Use containerProps for DOM attributes\n\n  return (\n    <AnimatePresence mode=\"wait\" initial={false}>\n      <motion.div\n        key={key || \"page-transition\"}\n        className={className}\n        variants={variants}\n        initial=\"initial\"\n        animate=\"animate\"\n        exit=\"exit\"\n        onAnimationStart={handleAnimationStart}\n        onAnimationComplete={handleAnimationComplete}\n        style={{\n          width: \"100%\",\n          height: \"100%\",\n          position: \"relative\",\n        }}\n        {...containerProps}\n      >\n        {children}\n      </motion.div>\n    </AnimatePresence>\n  );\n};\n\n// Higher-order component for easy page wrapping\nexport const withPageTransition = (\n  Component: React.ComponentType<any>,\n  transitionProps?: Partial<PageTransitionProps>,\n) => {\n  const WrappedComponent = (props: any) => (\n    <PageTransition {...transitionProps}>\n      <Component {...props} />\n    </PageTransition>\n  );\n\n  WrappedComponent.displayName = `withPageTransition(${Component.displayName || Component.name})`;\n  return WrappedComponent;\n};\n\nPageTransition.displayName = \"PageTransition\";\n","\"use client\";\n\nimport React, { useState, useRef, useCallback } from \"react\";\nimport { motion, PanInfo, useMotionValue, useTransform } from \"framer-motion\";\nimport { cn } from \"../../../../utils/cn\";\n\nexport interface SwipeAction {\n  id: string;\n  label: string;\n  icon?: React.ReactNode;\n  color?: string;\n  backgroundColor?: string;\n  onAction: () => void | Promise<void>;\n}\n\nexport interface SwipeableCardProps {\n  children: React.ReactNode;\n  className?: string;\n  leftActions?: SwipeAction[];\n  rightActions?: SwipeAction[];\n  threshold?: number;\n  onSwipeLeft?: () => void | Promise<void>;\n  onSwipeRight?: () => void | Promise<void>;\n  onSwipeStart?: () => void;\n  onSwipeEnd?: () => void;\n  hapticFeedback?: boolean;\n  disabled?: boolean;\n  snapBackDuration?: number;\n  maxSwipeDistance?: number;\n  showActionIndicator?: boolean;\n}\n\nexport const SwipeableCard: React.FC<SwipeableCardProps> = ({\n  children,\n  className,\n  leftActions = [],\n  rightActions = [],\n  threshold = 80,\n  onSwipeLeft,\n  onSwipeRight,\n  onSwipeStart,\n  onSwipeEnd,\n  hapticFeedback = true,\n  disabled = false,\n  snapBackDuration = 300,\n  maxSwipeDistance = 200,\n  showActionIndicator = true,\n}) => {\n  const [isActive, setIsActive] = useState(false);\n  const [isDragging, setIsDragging] = useState(false);\n  const containerRef = useRef<HTMLDivElement>(null);\n  const x = useMotionValue(0);\n\n  // Transform values for action indicators\n  const leftOpacity = useTransform(x, [0, threshold], [0, 1]);\n  const rightOpacity = useTransform(x, [-threshold, 0], [1, 0]);\n  const leftScale = useTransform(x, [0, threshold * 1.5], [0.8, 1.1]);\n  const rightScale = useTransform(x, [-threshold * 1.5, 0], [1.1, 0.8]);\n\n  // Haptic feedback helper\n  const triggerHaptic = useCallback(\n    (type: \"light\" | \"medium\" | \"heavy\" = \"light\") => {\n      if (!hapticFeedback || typeof navigator === \"undefined\") return;\n\n      // Use Web Vibration API if available\n      if (\"vibrate\" in navigator) {\n        const patterns = {\n          light: [10],\n          medium: [20],\n          heavy: [30],\n        };\n        navigator.vibrate(patterns[type]);\n      }\n    },\n    [hapticFeedback],\n  );\n\n  const handleDragStart = useCallback(() => {\n    if (disabled) return;\n    setIsDragging(true);\n    setIsActive(true);\n    onSwipeStart?.();\n    triggerHaptic(\"light\");\n  }, [disabled, onSwipeStart, triggerHaptic]);\n\n  const handleDragEnd = useCallback(\n    async (info: PanInfo) => {\n      if (disabled) return;\n\n      setIsDragging(false);\n      const swipeDistance = info.offset.x;\n      const velocity = info.velocity.x;\n\n      // Determine if swipe threshold was met\n      const isLeftSwipe = swipeDistance > threshold || velocity > 500;\n      const isRightSwipe = swipeDistance < -threshold || velocity < -500;\n\n      if (isLeftSwipe && (onSwipeLeft || leftActions.length > 0)) {\n        triggerHaptic(\"medium\");\n\n        // Execute first left action or callback\n        const firstLeftAction = leftActions[0];\n        if (firstLeftAction) {\n          await firstLeftAction.onAction();\n        } else if (onSwipeLeft) {\n          await onSwipeLeft();\n        }\n      } else if (isRightSwipe && (onSwipeRight || rightActions.length > 0)) {\n        triggerHaptic(\"medium\");\n\n        // Execute first right action or callback\n        const firstRightAction = rightActions[0];\n        if (firstRightAction) {\n          await firstRightAction.onAction();\n        } else if (onSwipeRight) {\n          await onSwipeRight();\n        }\n      }\n\n      // Reset position\n      x.set(0);\n      setIsActive(false);\n      onSwipeEnd?.();\n    },\n    [\n      disabled,\n      threshold,\n      onSwipeLeft,\n      onSwipeRight,\n      leftActions,\n      rightActions,\n      triggerHaptic,\n      onSwipeEnd,\n      x,\n    ],\n  );\n\n  const cardVariants = {\n    idle: { scale: 1 },\n    active: { scale: 1.02 },\n  };\n\n  const renderActionIndicator = (\n    actions: SwipeAction[],\n    side: \"left\" | \"right\",\n  ) => {\n    if (!showActionIndicator || !actions || actions.length === 0) return null;\n\n    const action = actions[0]; // Show first action as indicator\n    if (!action) return null;\n    const opacity = side === \"left\" ? leftOpacity : rightOpacity;\n    const scale = side === \"left\" ? leftScale : rightScale;\n\n    return (\n      <motion.div\n        className={cn(\n          \"absolute inset-y-0 flex items-center justify-center w-16\",\n          side === \"left\" ? \"left-0\" : \"right-0\",\n        )}\n        style={{\n          opacity,\n          scale,\n          backgroundColor:\n            action.backgroundColor || (side === \"left\" ? \"#10B981\" : \"#EF4444\"),\n        }}\n      >\n        <div className=\"text-white text-sm font-medium\">\n          {action.icon || action.label}\n        </div>\n      </motion.div>\n    );\n  };\n\n  if (disabled) {\n    return (\n      <div className={cn(\"relative\", className)} ref={containerRef}>\n        {children}\n      </div>\n    );\n  }\n\n  return (\n    <div\n      className={cn(\"relative overflow-hidden\", className)}\n      ref={containerRef}\n    >\n      {/* Left action indicator */}\n      {renderActionIndicator(leftActions, \"left\")}\n\n      {/* Right action indicator */}\n      {renderActionIndicator(rightActions, \"right\")}\n\n      {/* Main card content */}\n      <motion.div\n        className=\"relative z-10 bg-white\"\n        style={{ x }}\n        variants={cardVariants}\n        initial=\"idle\"\n        animate={isActive ? \"active\" : \"idle\"}\n        drag=\"x\"\n        dragConstraints={{ left: -maxSwipeDistance, right: maxSwipeDistance }}\n        dragElastic={0.2}\n        onDragStart={handleDragStart}\n        onDragEnd={(_, info) => handleDragEnd(info)}\n        whileTap={{ cursor: \"grabbing\" }}\n        transition={{\n          type: \"spring\",\n          damping: 20,\n          stiffness: 300,\n          duration: snapBackDuration / 1000,\n        }}\n      >\n        {children}\n      </motion.div>\n\n      {/* Drag indicator overlay */}\n      {isDragging && (\n        <motion.div\n          className=\"absolute inset-0 bg-black bg-opacity-5 pointer-events-none z-0\"\n          initial={{ opacity: 0 }}\n          animate={{ opacity: 1 }}\n          exit={{ opacity: 0 }}\n        />\n      )}\n    </div>\n  );\n};\n\nSwipeableCard.displayName = \"SwipeableCard\";\n","\"use client\";\n\nimport React, { useState, useRef, useCallback, useEffect } from \"react\";\nimport { motion, PanInfo, useMotionValue, useTransform } from \"framer-motion\";\nimport { cn } from \"../../../../utils/cn\";\n\nexport type RefreshState =\n  | \"idle\"\n  | \"pulling\"\n  | \"ready\"\n  | \"refreshing\"\n  | \"success\"\n  | \"error\";\n\nexport interface PullToRefreshProps {\n  children: React.ReactNode;\n  onRefresh: () => Promise<void>;\n  className?: string;\n  threshold?: number;\n  maxPullDistance?: number;\n  refreshTimeout?: number;\n  disabled?: boolean;\n  loadingIndicator?: React.ReactNode;\n  successMessage?: string;\n  errorMessage?: string;\n  showMessages?: boolean;\n  hapticFeedback?: boolean;\n}\n\nconst DefaultSpinner = () => (\n  <svg className=\"animate-spin h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\">\n    <circle\n      className=\"opacity-25\"\n      cx=\"12\"\n      cy=\"12\"\n      r=\"10\"\n      stroke=\"currentColor\"\n      strokeWidth=\"4\"\n    />\n    <path\n      className=\"opacity-75\"\n      fill=\"currentColor\"\n      d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n    />\n  </svg>\n);\n\nexport const PullToRefresh: React.FC<PullToRefreshProps> = ({\n  children,\n  onRefresh,\n  className,\n  threshold = 60,\n  maxPullDistance = 120,\n  refreshTimeout = 10000,\n  disabled = false,\n  loadingIndicator,\n  successMessage = \"Refresh successful!\",\n  errorMessage = \"Refresh failed. Try again.\",\n  showMessages = true,\n  hapticFeedback = true,\n}) => {\n  const [refreshState, setRefreshState] = useState<RefreshState>(\"idle\");\n  const containerRef = useRef<HTMLDivElement>(null);\n  const y = useMotionValue(0);\n  const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n  // Transform values for pull indicator\n  const opacity = useTransform(y, [0, threshold / 2], [0, 1]);\n  const scale = useTransform(y, [0, threshold], [0.8, 1.2]);\n  const rotate = useTransform(y, [0, threshold * 2], [0, 360]);\n\n  // Haptic feedback helper\n  const triggerHaptic = useCallback(\n    (type: \"light\" | \"medium\" | \"heavy\" = \"light\") => {\n      if (!hapticFeedback || typeof navigator === \"undefined\") return;\n\n      if (\"vibrate\" in navigator) {\n        const patterns = {\n          light: [10],\n          medium: [20],\n          heavy: [30],\n        };\n        navigator.vibrate(patterns[type]);\n      }\n    },\n    [hapticFeedback],\n  );\n\n  const handleDragStart = useCallback(() => {\n    if (disabled || refreshState === \"refreshing\") return false;\n\n    // Only allow pull from top of scroll container\n    const container = containerRef.current;\n    if (!container) return false;\n\n    const scrollTop = container.scrollTop;\n    return scrollTop <= 0;\n  }, [disabled, refreshState]);\n\n  const handleDrag = useCallback(\n    (info: PanInfo) => {\n      if (disabled || refreshState === \"refreshing\") return;\n\n      const pullDistance = Math.max(0, info.offset.y);\n      const clampedDistance = Math.min(pullDistance, maxPullDistance);\n\n      if (clampedDistance >= threshold && refreshState !== \"ready\") {\n        setRefreshState(\"ready\");\n        triggerHaptic(\"medium\");\n      } else if (clampedDistance < threshold && refreshState === \"ready\") {\n        setRefreshState(\"pulling\");\n        triggerHaptic(\"light\");\n      } else if (clampedDistance > 0 && refreshState === \"idle\") {\n        setRefreshState(\"pulling\");\n      }\n\n      y.set(clampedDistance);\n    },\n    [disabled, refreshState, threshold, maxPullDistance, triggerHaptic, y],\n  );\n\n  const handleDragEnd = useCallback(\n    async (info: PanInfo) => {\n      if (disabled || refreshState === \"refreshing\") return;\n\n      const pullDistance = info.offset.y;\n      const velocity = info.velocity.y;\n\n      if (\n        (pullDistance >= threshold || velocity > 500) &&\n        refreshState === \"ready\"\n      ) {\n        setRefreshState(\"refreshing\");\n        triggerHaptic(\"heavy\");\n\n        // Set timeout for refresh operation\n        if (timeoutRef.current) {\n          clearTimeout(timeoutRef.current);\n        }\n\n        timeoutRef.current = setTimeout(() => {\n          setRefreshState(\"error\");\n          setTimeout(() => {\n            setRefreshState(\"idle\");\n            y.set(0);\n          }, 2000);\n        }, refreshTimeout);\n\n        try {\n          await onRefresh();\n\n          if (timeoutRef.current) {\n            clearTimeout(timeoutRef.current);\n          }\n\n          setRefreshState(\"success\");\n\n          // Show success state briefly\n          setTimeout(() => {\n            setRefreshState(\"idle\");\n            y.set(0);\n          }, 1500);\n        } catch (error) {\n          if (timeoutRef.current) {\n            clearTimeout(timeoutRef.current);\n          }\n\n          setRefreshState(\"error\");\n\n          // Show error state briefly\n          setTimeout(() => {\n            setRefreshState(\"idle\");\n            y.set(0);\n          }, 2000);\n        }\n      } else {\n        // Snap back to idle\n        setRefreshState(\"idle\");\n        y.set(0);\n      }\n    },\n    [\n      disabled,\n      refreshState,\n      threshold,\n      onRefresh,\n      refreshTimeout,\n      triggerHaptic,\n      y,\n    ],\n  );\n\n  // Cleanup timeout on unmount\n  useEffect(() => {\n    return () => {\n      if (timeoutRef.current) {\n        clearTimeout(timeoutRef.current);\n      }\n    };\n  }, []);\n\n  const getIndicatorContent = () => {\n    switch (refreshState) {\n      case \"pulling\":\n        return \"↓\";\n      case \"ready\":\n        return \"↻\";\n      case \"refreshing\":\n        return loadingIndicator || <DefaultSpinner />;\n      case \"success\":\n        return \"✓\";\n      case \"error\":\n        return \"⚠\";\n      default:\n        return \"↓\";\n    }\n  };\n\n  const getIndicatorMessage = () => {\n    if (!showMessages) return null;\n\n    switch (refreshState) {\n      case \"pulling\":\n        return \"Pull to refresh\";\n      case \"ready\":\n        return \"Release to refresh\";\n      case \"refreshing\":\n        return \"Refreshing...\";\n      case \"success\":\n        return successMessage;\n      case \"error\":\n        return errorMessage;\n      default:\n        return null;\n    }\n  };\n\n  const getIndicatorColor = () => {\n    switch (refreshState) {\n      case \"ready\":\n        return \"text-blue-600\";\n      case \"refreshing\":\n        return \"text-blue-600\";\n      case \"success\":\n        return \"text-green-600\";\n      case \"error\":\n        return \"text-red-600\";\n      default:\n        return \"text-gray-500\";\n    }\n  };\n\n  if (disabled) {\n    return (\n      <div className={cn(\"relative\", className)} ref={containerRef}>\n        {children}\n      </div>\n    );\n  }\n\n  return (\n    <motion.div\n      className={cn(\"relative overflow-hidden\", className)}\n      style={{ y }}\n      ref={containerRef}\n    >\n      {/* Pull indicator */}\n      <motion.div\n        className=\"absolute top-0 left-0 right-0 flex flex-col items-center justify-center py-4 bg-white border-b\"\n        style={{\n          opacity,\n          scale,\n          y: -60, // Start above visible area\n        }}\n      >\n        <motion.div\n          className={cn(\"text-2xl font-semibold mb-2\", getIndicatorColor())}\n          style={{ rotate: refreshState === \"refreshing\" ? rotate : 0 }}\n        >\n          {getIndicatorContent()}\n        </motion.div>\n\n        {getIndicatorMessage() && (\n          <div className={cn(\"text-sm\", getIndicatorColor())}>\n            {getIndicatorMessage()}\n          </div>\n        )}\n      </motion.div>\n\n      {/* Content container */}\n      <motion.div\n        drag=\"y\"\n        dragConstraints={{ top: 0, bottom: 0 }}\n        dragElastic={{ top: 0.3, bottom: 0 }}\n        onDragStart={handleDragStart}\n        onDrag={(_, info) => handleDrag(info)}\n        onDragEnd={(_, info) => handleDragEnd(info)}\n        className=\"relative z-10\"\n      >\n        {children}\n      </motion.div>\n    </motion.div>\n  );\n};\n\nPullToRefresh.displayName = \"PullToRefresh\";\n","\"use client\";\n\nimport React, { useState, useRef, useEffect, useCallback } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { cn } from \"../../../../utils/cn\";\n\nexport type LazyImagePlaceholder = \"blur\" | \"skeleton\" | \"color\" | \"none\";\nexport type LazyImageLoading = \"lazy\" | \"eager\";\nexport type LazyImageFetchPriority = \"high\" | \"low\" | \"auto\";\n\nexport interface LazyImageProps extends Omit<\n  React.ImgHTMLAttributes<HTMLImageElement>,\n  \"loading\" | \"onDrag\" | \"onDragStart\" | \"onDragEnd\"\n> {\n  src: string;\n  alt: string;\n  className?: string;\n  placeholder?: LazyImagePlaceholder;\n  placeholderColor?: string;\n  blurDataURL?: string;\n  webpSupport?: boolean;\n  mobileOptimization?: {\n    quality?: number;\n    format?: \"webp\" | \"jpeg\" | \"png\";\n    sizes?: string;\n  };\n  loading?: LazyImageLoading;\n  fetchPriority?: LazyImageFetchPriority;\n  onLoad?: () => void;\n  onError?: () => void;\n  rootMargin?: string;\n  threshold?: number;\n  fadeInDuration?: number;\n  retryAttempts?: number;\n  retryDelay?: number;\n}\n\n// WebP support detection\nconst checkWebPSupport = (): Promise<boolean> => {\n  return new Promise((resolve) => {\n    const webp = new Image();\n    webp.onload = webp.onerror = () => {\n      resolve(webp.height === 2);\n    };\n    webp.src =\n      \"data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA\";\n  });\n};\n\n// Generate optimized image URL\nconst generateOptimizedUrl = (\n  src: string,\n  webpSupported: boolean,\n  mobileOptimization?: LazyImageProps[\"mobileOptimization\"],\n): string => {\n  if (!mobileOptimization) return src;\n\n  const url = new URL(\n    src,\n    typeof window !== \"undefined\" ? window.location.origin : \"http://localhost\",\n  );\n  const params = new URLSearchParams(url.search);\n\n  if (mobileOptimization.quality) {\n    params.set(\"q\", mobileOptimization.quality.toString());\n  }\n\n  if (webpSupported && mobileOptimization.format === \"webp\") {\n    params.set(\"format\", \"webp\");\n  } else if (mobileOptimization.format) {\n    params.set(\"format\", mobileOptimization.format);\n  }\n\n  url.search = params.toString();\n  return url.toString();\n};\n\nconst LazyImageSkeleton = ({ className }: { className?: string }) => (\n  <div className={cn(\"animate-pulse bg-gray-200 rounded\", className)} />\n);\n\nconst LazyImageBlurPlaceholder = ({\n  blurDataURL,\n  className,\n  alt,\n}: {\n  blurDataURL?: string;\n  className?: string;\n  alt: string;\n}) => (\n  <img\n    src={\n      blurDataURL ||\n      \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIwIiBoZWlnaHQ9IjMyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSIjZGRkIi8+PC9zdmc+\"\n    }\n    alt={alt}\n    className={cn(\"filter blur-sm\", className)}\n    aria-hidden=\"true\"\n  />\n);\n\nconst LazyImageColorPlaceholder = ({\n  color,\n  className,\n}: {\n  color?: string;\n  className?: string;\n}) => (\n  <div\n    className={cn(\"rounded\", className)}\n    style={{ backgroundColor: color || \"#f3f4f6\" }}\n  />\n);\n\nexport const LazyImage: React.FC<LazyImageProps> = ({\n  src,\n  alt,\n  className,\n  placeholder = \"blur\",\n  placeholderColor,\n  blurDataURL,\n  webpSupport = true,\n  mobileOptimization,\n  loading = \"lazy\",\n  fetchPriority = \"auto\",\n  onLoad,\n  onError,\n  rootMargin = \"50px\",\n  threshold = 0.1,\n  fadeInDuration = 300,\n  retryAttempts = 3,\n  retryDelay = 1000,\n  ...props\n}) => {\n  const [isLoaded, setIsLoaded] = useState(false);\n  const [isInView, setIsInView] = useState(loading === \"eager\");\n  const [hasError, setHasError] = useState(false);\n  const [webpSupported, setWebpSupported] = useState(false);\n  const [retryCount, setRetryCount] = useState(0);\n  const imgRef = useRef<HTMLImageElement>(null);\n  const observerRef = useRef<IntersectionObserver | null>(null);\n\n  // Check WebP support\n  useEffect(() => {\n    if (!webpSupport) return;\n\n    checkWebPSupport().then(setWebpSupported);\n  }, [webpSupport]);\n\n  // Set up intersection observer for lazy loading\n  useEffect(() => {\n    if (loading === \"eager\" || isInView) return;\n\n    const observer = new IntersectionObserver(\n      (entries) => {\n        entries.forEach((entry) => {\n          if (entry.isIntersecting) {\n            setIsInView(true);\n            observer.unobserve(entry.target);\n          }\n        });\n      },\n      {\n        rootMargin,\n        threshold,\n      },\n    );\n\n    const currentImg = imgRef.current;\n    if (currentImg) {\n      observer.observe(currentImg);\n      observerRef.current = observer;\n    }\n\n    return () => {\n      if (observerRef.current) {\n        observerRef.current.disconnect();\n      }\n    };\n  }, [loading, isInView, rootMargin, threshold]);\n\n  // Handle image load\n  const handleLoad = useCallback(() => {\n    setIsLoaded(true);\n    setHasError(false);\n    onLoad?.();\n  }, [onLoad]);\n\n  // Handle image error with retry logic\n  const handleError = useCallback(() => {\n    if (retryCount < retryAttempts) {\n      setTimeout(\n        () => {\n          setRetryCount((prev) => prev + 1);\n          const img = imgRef.current;\n          if (img) {\n            img.src = generateOptimizedUrl(\n              src,\n              webpSupported,\n              mobileOptimization,\n            );\n          }\n        },\n        retryDelay * Math.pow(2, retryCount),\n      ); // Exponential backoff\n    } else {\n      setHasError(true);\n      onError?.();\n    }\n  }, [\n    retryCount,\n    retryAttempts,\n    retryDelay,\n    src,\n    webpSupported,\n    mobileOptimization,\n    onError,\n  ]);\n\n  const optimizedSrc = generateOptimizedUrl(\n    src,\n    webpSupported,\n    mobileOptimization,\n  );\n\n  const renderPlaceholder = () => {\n    switch (placeholder) {\n      case \"skeleton\":\n        return <LazyImageSkeleton className={className} />;\n      case \"blur\":\n        return (\n          <LazyImageBlurPlaceholder\n            blurDataURL={blurDataURL}\n            className={className}\n            alt={alt}\n          />\n        );\n      case \"color\":\n        return (\n          <LazyImageColorPlaceholder\n            color={placeholderColor}\n            className={className}\n          />\n        );\n      case \"none\":\n      default:\n        return null;\n    }\n  };\n\n  const renderErrorState = () => (\n    <div\n      className={cn(\n        \"flex items-center justify-center bg-gray-100 text-gray-400 rounded\",\n        className,\n      )}\n    >\n      <svg\n        className=\"w-8 h-8\"\n        fill=\"none\"\n        viewBox=\"0 0 24 24\"\n        stroke=\"currentColor\"\n      >\n        <path\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeWidth={1.5}\n          d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\"\n        />\n      </svg>\n    </div>\n  );\n\n  if (hasError) {\n    return renderErrorState();\n  }\n\n  return (\n    <div className=\"relative\">\n      <AnimatePresence>\n        {!isLoaded && (\n          <motion.div\n            key=\"placeholder\"\n            initial={{ opacity: 1 }}\n            exit={{ opacity: 0 }}\n            transition={{ duration: fadeInDuration / 1000 }}\n          >\n            {renderPlaceholder()}\n          </motion.div>\n        )}\n      </AnimatePresence>\n\n      {isInView && (\n        <motion.img\n          ref={imgRef}\n          src={optimizedSrc}\n          alt={alt}\n          className={cn(className, !isLoaded && \"opacity-0 absolute inset-0\")}\n          onLoad={handleLoad}\n          onError={handleError}\n          initial={{ opacity: 0 }}\n          animate={{ opacity: isLoaded ? 1 : 0 }}\n          transition={{ duration: fadeInDuration / 1000 }}\n          sizes={mobileOptimization?.sizes}\n          fetchPriority={fetchPriority}\n          {...(props as any)}\n        />\n      )}\n    </div>\n  );\n};\n\nLazyImage.displayName = \"LazyImage\";\n","\"use client\";\n\nimport React, { useState, useRef, useEffect, useCallback } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { cn } from \"../../../../utils/cn\";\n\nexport type ProgressiveImageStrategy =\n  | \"thumbnail-first\"\n  | \"blur-up\"\n  | \"fade-in\";\nexport type ProgressiveImageTransition = \"fade\" | \"crossfade\" | \"slide\";\n\nexport interface ProgressiveImageProps extends Omit<\n  React.ImgHTMLAttributes<HTMLImageElement>,\n  \"src\" | \"onDrag\" | \"onDragStart\" | \"onDragEnd\"\n> {\n  lowQualitySrc: string;\n  highQualitySrc: string;\n  alt: string;\n  className?: string;\n  mobileStrategy?: ProgressiveImageStrategy;\n  transition?: ProgressiveImageTransition;\n  transitionDuration?: number;\n  rootMargin?: string;\n  threshold?: number;\n  onLowQualityLoad?: () => void;\n  onHighQualityLoad?: () => void;\n  onError?: () => void;\n  preloadHighQuality?: boolean;\n  qualityThreshold?: number;\n  networkAware?: boolean;\n}\n\n// Network speed detection\nconst getConnectionSpeed = (): \"slow\" | \"fast\" | \"unknown\" => {\n  if (typeof navigator === \"undefined\" || !(\"connection\" in navigator)) {\n    return \"unknown\";\n  }\n\n  const connection = (navigator as any).connection;\n  if (!connection) return \"unknown\";\n\n  // Effective types: 'slow-2g', '2g', '3g', '4g'\n  const effectiveType = connection.effectiveType;\n\n  if (effectiveType === \"slow-2g\" || effectiveType === \"2g\") {\n    return \"slow\";\n  }\n\n  return \"fast\";\n};\n\n// Check if image is already cached\nconst isImageCached = (src: string): boolean => {\n  const img = new Image();\n  img.src = src;\n  return img.complete && img.naturalWidth !== 0;\n};\n\nexport const ProgressiveImage: React.FC<ProgressiveImageProps> = ({\n  lowQualitySrc,\n  highQualitySrc,\n  alt,\n  className,\n  mobileStrategy = \"thumbnail-first\",\n  transition = \"fade\",\n  transitionDuration = 500,\n  rootMargin = \"50px\",\n  threshold = 0.1,\n  onLowQualityLoad,\n  onHighQualityLoad,\n  onError,\n  preloadHighQuality = true,\n  qualityThreshold = 0.8,\n  networkAware = true,\n  ...props\n}) => {\n  const [lowQualityLoaded, setLowQualityLoaded] = useState(false);\n  const [highQualityLoaded, setHighQualityLoaded] = useState(false);\n  const [isInView, setIsInView] = useState(false);\n  const [hasError, setHasError] = useState(false);\n  const [currentSrc, setCurrentSrc] = useState(lowQualitySrc);\n  const [connectionSpeed, setConnectionSpeed] = useState<\n    \"slow\" | \"fast\" | \"unknown\"\n  >(\"unknown\");\n\n  const containerRef = useRef<HTMLDivElement>(null);\n  const lowQualityRef = useRef<HTMLImageElement>(null);\n  const highQualityRef = useRef<HTMLImageElement>(null);\n  const observerRef = useRef<IntersectionObserver | null>(null);\n\n  // Detect network speed\n  useEffect(() => {\n    if (networkAware) {\n      setConnectionSpeed(getConnectionSpeed());\n    }\n  }, [networkAware]);\n\n  // Set up intersection observer\n  useEffect(() => {\n    const observer = new IntersectionObserver(\n      (entries) => {\n        entries.forEach((entry) => {\n          if (entry.isIntersecting) {\n            setIsInView(true);\n            observer.unobserve(entry.target);\n          }\n        });\n      },\n      {\n        rootMargin,\n        threshold,\n      },\n    );\n\n    const container = containerRef.current;\n    if (container) {\n      observer.observe(container);\n      observerRef.current = observer;\n    }\n\n    return () => {\n      if (observerRef.current) {\n        observerRef.current.disconnect();\n      }\n    };\n  }, [rootMargin, threshold]);\n\n  // Handle low quality image load\n  const handleLowQualityLoad = useCallback(() => {\n    setLowQualityLoaded(true);\n    onLowQualityLoad?.();\n\n    // Start loading high quality image if conditions are met\n    if (shouldLoadHighQuality()) {\n      loadHighQualityImage();\n    }\n  }, [onLowQualityLoad]);\n\n  // Handle high quality image load\n  const handleHighQualityLoad = useCallback(() => {\n    setHighQualityLoaded(true);\n    setCurrentSrc(highQualitySrc);\n    onHighQualityLoad?.();\n  }, [highQualitySrc, onHighQualityLoad]);\n\n  // Handle image errors\n  const handleError = useCallback(() => {\n    setHasError(true);\n    onError?.();\n  }, [onError]);\n\n  // Determine if high quality should be loaded\n  const shouldLoadHighQuality = useCallback((): boolean => {\n    if (!isInView) return false;\n    if (hasError) return false;\n\n    // Check if high quality is already cached\n    if (isImageCached(highQualitySrc)) return true;\n\n    // Network-aware loading\n    if (networkAware && connectionSpeed === \"slow\") {\n      return false; // Skip high quality on slow connections\n    }\n\n    return true;\n  }, [isInView, hasError, highQualitySrc, networkAware, connectionSpeed]);\n\n  // Load high quality image\n  const loadHighQualityImage = useCallback(() => {\n    if (highQualityRef.current || highQualityLoaded) return;\n\n    const img = new Image();\n    img.onload = handleHighQualityLoad;\n    img.onerror = handleError;\n    img.src = highQualitySrc;\n\n    // Store reference to prevent multiple loads\n    highQualityRef.current = img;\n  }, [highQualitySrc, highQualityLoaded, handleHighQualityLoad, handleError]);\n\n  // Preload high quality image when in view\n  useEffect(() => {\n    if (isInView && preloadHighQuality && shouldLoadHighQuality()) {\n      loadHighQualityImage();\n    }\n  }, [\n    isInView,\n    preloadHighQuality,\n    shouldLoadHighQuality,\n    loadHighQualityImage,\n  ]);\n\n  // Animation variants\n  const getTransitionVariants = () => {\n    const duration = transitionDuration / 1000;\n\n    switch (transition) {\n      case \"crossfade\":\n        return {\n          lowQuality: {\n            initial: { opacity: 1 },\n            animate: { opacity: highQualityLoaded ? 0 : 1 },\n            exit: { opacity: 0 },\n            transition: { duration },\n          },\n          highQuality: {\n            initial: { opacity: 0 },\n            animate: { opacity: highQualityLoaded ? 1 : 0 },\n            exit: { opacity: 0 },\n            transition: { duration },\n          },\n        };\n\n      case \"slide\":\n        return {\n          lowQuality: {\n            initial: { x: 0 },\n            animate: { x: highQualityLoaded ? -100 : 0 },\n            exit: { x: -100 },\n            transition: { duration },\n          },\n          highQuality: {\n            initial: { x: 100 },\n            animate: { x: highQualityLoaded ? 0 : 100 },\n            exit: { x: 100 },\n            transition: { duration },\n          },\n        };\n\n      case \"fade\":\n      default:\n        return {\n          lowQuality: {\n            initial: { opacity: 1 },\n            animate: { opacity: 1 },\n            exit: { opacity: 0 },\n            transition: { duration },\n          },\n          highQuality: {\n            initial: { opacity: 0 },\n            animate: { opacity: 1 },\n            exit: { opacity: 0 },\n            transition: { duration, delay: 0.1 },\n          },\n        };\n    }\n  };\n\n  const variants = getTransitionVariants();\n\n  const renderImage = () => {\n    // Separate className from other props to avoid conflicts\n    const baseClassName = cn(\"w-full h-full object-cover\", className);\n    const baseImageProps = {\n      alt,\n      ...(props as any), // Cast to avoid drag event conflicts\n    };\n\n    switch (mobileStrategy) {\n      case \"blur-up\":\n        return (\n          <div className=\"relative\">\n            {/* Low quality blurred image */}\n            <motion.img\n              ref={lowQualityRef}\n              src={lowQualitySrc}\n              onLoad={handleLowQualityLoad}\n              onError={handleError}\n              className={cn(\n                baseClassName,\n                \"filter blur-sm absolute inset-0\",\n                highQualityLoaded && \"opacity-0\",\n              )}\n              variants={variants.lowQuality}\n              initial=\"initial\"\n              animate=\"animate\"\n              exit=\"exit\"\n              {...baseImageProps}\n            />\n\n            {/* High quality image */}\n            <AnimatePresence>\n              {highQualityLoaded && (\n                <motion.img\n                  src={highQualitySrc}\n                  className={cn(baseClassName, \"relative z-10\")}\n                  variants={variants.highQuality}\n                  initial=\"initial\"\n                  animate=\"animate\"\n                  {...baseImageProps}\n                />\n              )}\n            </AnimatePresence>\n          </div>\n        );\n\n      case \"fade-in\":\n        return (\n          <AnimatePresence mode=\"wait\">\n            {!highQualityLoaded ? (\n              <motion.img\n                key=\"low-quality\"\n                ref={lowQualityRef}\n                src={lowQualitySrc}\n                onLoad={handleLowQualityLoad}\n                onError={handleError}\n                className={baseClassName}\n                variants={variants.lowQuality}\n                initial=\"initial\"\n                animate=\"animate\"\n                exit=\"exit\"\n                {...baseImageProps}\n              />\n            ) : (\n              <motion.img\n                key=\"high-quality\"\n                src={highQualitySrc}\n                className={baseClassName}\n                variants={variants.highQuality}\n                initial=\"initial\"\n                animate=\"animate\"\n                {...baseImageProps}\n              />\n            )}\n          </AnimatePresence>\n        );\n\n      case \"thumbnail-first\":\n      default:\n        return (\n          <div className=\"relative\">\n            {/* Low quality thumbnail */}\n            <motion.img\n              ref={lowQualityRef}\n              src={lowQualitySrc}\n              onLoad={handleLowQualityLoad}\n              onError={handleError}\n              className={cn(\n                baseClassName,\n                highQualityLoaded && transition === \"crossfade\"\n                  ? \"absolute inset-0\"\n                  : \"\",\n              )}\n              variants={variants.lowQuality}\n              initial=\"initial\"\n              animate=\"animate\"\n              {...baseImageProps}\n            />\n\n            {/* High quality overlay */}\n            <AnimatePresence>\n              {highQualityLoaded && (\n                <motion.img\n                  src={highQualitySrc}\n                  className={cn(\n                    baseClassName,\n                    transition === \"crossfade\"\n                      ? \"absolute inset-0 z-10\"\n                      : \"relative\",\n                  )}\n                  variants={variants.highQuality}\n                  initial=\"initial\"\n                  animate=\"animate\"\n                  {...baseImageProps}\n                />\n              )}\n            </AnimatePresence>\n          </div>\n        );\n    }\n  };\n\n  if (hasError) {\n    return (\n      <div\n        className={cn(\n          \"flex items-center justify-center bg-gray-100 text-gray-400\",\n          className,\n        )}\n      >\n        <svg\n          className=\"w-8 h-8\"\n          fill=\"none\"\n          viewBox=\"0 0 24 24\"\n          stroke=\"currentColor\"\n        >\n          <path\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeWidth={1.5}\n            d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\"\n          />\n        </svg>\n      </div>\n    );\n  }\n\n  return (\n    <div ref={containerRef} className=\"relative overflow-hidden\">\n      {renderImage()}\n\n      {/* Loading indicator */}\n      {isInView && !lowQualityLoaded && (\n        <div\n          className={cn(\n            \"absolute inset-0 flex items-center justify-center bg-gray-100\",\n            className,\n          )}\n        >\n          <div className=\"animate-pulse w-8 h-8 bg-gray-300 rounded\" />\n        </div>\n      )}\n    </div>\n  );\n};\n\nProgressiveImage.displayName = \"ProgressiveImage\";\n","\"use client\";\n\nimport React, {\n  useState,\n  useEffect,\n  useRef,\n  useCallback,\n  useMemo,\n  ReactNode,\n} from \"react\";\nimport { cn } from \"../../../../utils/cn\";\n\nexport interface VirtualScrollListProps<T = any> {\n  items: T[];\n  itemHeight: number | ((index: number, item: T) => number);\n  containerHeight?: number;\n  bufferSize?: number;\n  className?: string;\n  renderItem: (item: T, index: number, isVisible: boolean) => ReactNode;\n  onEndReached?: () => void;\n  onEndReachedThreshold?: number;\n  loading?: boolean;\n  loadingComponent?: ReactNode;\n  emptyComponent?: ReactNode;\n  errorComponent?: ReactNode;\n  hasError?: boolean;\n  mobileOptimized?: boolean;\n  overscan?: number;\n  scrollToIndex?: number;\n  onScroll?: (\n    scrollTop: number,\n    scrollHeight: number,\n    clientHeight: number,\n  ) => void;\n  estimatedItemHeight?: number;\n  maintainScrollPosition?: boolean;\n}\n\ninterface VirtualItem {\n  index: number;\n  start: number;\n  size: number;\n}\n\nconst DEFAULT_OVERSCAN = 5;\nconst DEFAULT_BUFFER_SIZE = 10;\n\nexport const VirtualScrollList = <T,>({\n  items,\n  itemHeight,\n  containerHeight = 400,\n  bufferSize = DEFAULT_BUFFER_SIZE,\n  className,\n  renderItem,\n  onEndReached,\n  onEndReachedThreshold = 0.8,\n  loading = false,\n  loadingComponent,\n  emptyComponent,\n  errorComponent,\n  hasError = false,\n  mobileOptimized = false,\n  overscan = DEFAULT_OVERSCAN,\n  scrollToIndex,\n  onScroll,\n  estimatedItemHeight,\n  maintainScrollPosition = false,\n}: VirtualScrollListProps<T>) => {\n  const [scrollTop, setScrollTop] = useState(0);\n  const [isScrolling, setIsScrolling] = useState(false);\n  const containerRef = useRef<HTMLDivElement>(null);\n  const scrollElementRef = useRef<HTMLDivElement>(null);\n  const scrollingTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(\n    null,\n  );\n  const previousScrollTop = useRef(0);\n  const measurementsRef = useRef<{ [key: number]: number }>({});\n\n  // Calculate item sizes\n  const itemSizes = useMemo(() => {\n    if (typeof itemHeight === \"number\") {\n      return Array(items?.length || 0).fill(itemHeight);\n    }\n\n    return (items || []).map((item, index) => {\n      if (measurementsRef.current[index] !== undefined) {\n        return measurementsRef.current[index];\n      }\n\n      return typeof itemHeight === \"function\"\n        ? itemHeight(index, item)\n        : estimatedItemHeight || 50;\n    });\n  }, [items, itemHeight, estimatedItemHeight]);\n\n  // Calculate total height and item positions\n  const { totalHeight, itemPositions } = useMemo(() => {\n    let totalHeight = 0;\n    const positions: VirtualItem[] = [];\n\n    itemSizes.forEach((size, index) => {\n      positions.push({\n        index,\n        start: totalHeight,\n        size,\n      });\n      totalHeight += size;\n    });\n\n    return { totalHeight, itemPositions: positions };\n  }, [itemSizes]);\n\n  // Calculate visible range\n  const visibleRange = useMemo(() => {\n    const containerHeight = scrollElementRef.current?.clientHeight || 400;\n    const start = Math.max(\n      0,\n      Math.floor(scrollTop / ((itemHeight as number) || 50)) - overscan,\n    );\n    const visibleCount =\n      Math.ceil(containerHeight / ((itemHeight as number) || 50)) +\n      overscan * 2;\n    const end = Math.min((items?.length || 0) - 1, start + visibleCount);\n\n    return { start, end };\n  }, [scrollTop, itemHeight, overscan, items?.length]);\n\n  // Get visible items\n  const visibleItems = useMemo(() => {\n    return itemPositions.slice(visibleRange.start, visibleRange.end + 1);\n  }, [itemPositions, visibleRange]);\n\n  // Calculate offset for first visible item\n  const offsetY = visibleItems.length > 0 ? (visibleItems[0]?.start ?? 0) : 0;\n\n  // Handle scroll events\n  const handleScroll = useCallback(\n    (event: React.UIEvent<HTMLDivElement>) => {\n      const element = event.currentTarget;\n      const newScrollTop = element.scrollTop;\n\n      setScrollTop(newScrollTop);\n      setIsScrolling(true);\n\n      // Call onScroll callback\n      onScroll?.(newScrollTop, element.scrollHeight, element.clientHeight);\n\n      // Clear existing timeout\n      if (scrollingTimeoutRef.current) {\n        clearTimeout(scrollingTimeoutRef.current);\n      }\n\n      // Set new timeout to detect scroll end\n      scrollingTimeoutRef.current = setTimeout(() => {\n        setIsScrolling(false);\n      }, 150);\n\n      // Handle end reached\n      if (onEndReached && !loading) {\n        const scrollPercentage =\n          (newScrollTop + element.clientHeight) / element.scrollHeight;\n        if (scrollPercentage >= onEndReachedThreshold) {\n          onEndReached();\n        }\n      }\n\n      previousScrollTop.current = newScrollTop;\n    },\n    [onScroll, onEndReached, onEndReachedThreshold, loading],\n  );\n\n  // Scroll to specific index\n  useEffect(() => {\n    if (scrollToIndex !== undefined && scrollElementRef.current) {\n      const item = itemPositions[scrollToIndex];\n      if (item) {\n        scrollElementRef.current.scrollTop = item.start;\n      }\n    }\n  }, [scrollToIndex, itemPositions]);\n\n  // Update item measurements\n  const updateItemSize = useCallback((index: number, size: number) => {\n    if (measurementsRef.current[index] !== size) {\n      measurementsRef.current[index] = size;\n      // Could trigger re-render here if needed for dynamic sizing\n    }\n  }, []);\n\n  // Maintain scroll position when items change\n  useEffect(() => {\n    if (maintainScrollPosition && scrollElementRef.current) {\n      const element = scrollElementRef.current;\n      const scrollRatio =\n        previousScrollTop.current / (element.scrollHeight || 1);\n      const newScrollTop = scrollRatio * element.scrollHeight;\n\n      if (Math.abs(newScrollTop - element.scrollTop) > 10) {\n        element.scrollTop = newScrollTop;\n      }\n    }\n  }, [items.length, maintainScrollPosition]);\n\n  // Cleanup timeout on unmount\n  useEffect(() => {\n    return () => {\n      if (scrollingTimeoutRef.current) {\n        clearTimeout(scrollingTimeoutRef.current);\n      }\n    };\n  }, []);\n\n  // Render error state\n  if (hasError) {\n    return (\n      <div\n        ref={containerRef}\n        className={cn(\"flex items-center justify-center\", className)}\n        style={{ height: containerHeight }}\n      >\n        {errorComponent || (\n          <div className=\"text-center text-gray-500\">\n            <p>Something went wrong</p>\n          </div>\n        )}\n      </div>\n    );\n  }\n\n  // Render empty state\n  if (items.length === 0 && !loading) {\n    return (\n      <div\n        ref={containerRef}\n        className={cn(\"flex items-center justify-center\", className)}\n        style={{ height: containerHeight }}\n      >\n        {emptyComponent || (\n          <div className=\"text-center text-gray-500\">\n            <p>No items to display</p>\n          </div>\n        )}\n      </div>\n    );\n  }\n\n  const DefaultLoadingComponent = () => (\n    <div className=\"flex items-center justify-center py-4\">\n      <div className=\"animate-spin rounded-full h-6 w-6 border-b-2 border-blue-600\"></div>\n      <span className=\"ml-2 text-sm text-gray-600\">Loading...</span>\n    </div>\n  );\n\n  return (\n    <div\n      ref={containerRef}\n      className={cn(\"relative\", className)}\n      style={{ height: containerHeight }}\n    >\n      <div\n        ref={scrollElementRef}\n        className=\"h-full overflow-auto\"\n        onScroll={handleScroll}\n        style={{\n          scrollBehavior: \"auto\",\n          WebkitOverflowScrolling: \"touch\", // Smooth scrolling on iOS\n        }}\n      >\n        {/* Virtual container with total height */}\n        <div style={{ height: totalHeight, position: \"relative\" }}>\n          {/* Rendered items */}\n          <div\n            style={{\n              transform: `translateY(${offsetY}px)`,\n              position: \"absolute\",\n              top: 0,\n              left: 0,\n              right: 0,\n            }}\n          >\n            {visibleItems.map((virtualItem) => {\n              const item = items[virtualItem.index];\n              if (item === undefined) return null;\n              const isVisible = !isScrolling || !mobileOptimized;\n\n              return (\n                <div\n                  key={virtualItem.index}\n                  style={{\n                    height: virtualItem.size,\n                    overflow: \"hidden\",\n                  }}\n                  data-index={virtualItem.index}\n                >\n                  {renderItem(item, virtualItem.index, isVisible)}\n                </div>\n              );\n            })}\n          </div>\n        </div>\n\n        {/* Loading indicator */}\n        {loading && (\n          <div className=\"sticky bottom-0\">\n            {loadingComponent || <DefaultLoadingComponent />}\n          </div>\n        )}\n      </div>\n    </div>\n  );\n};\n\nVirtualScrollList.displayName = \"VirtualScrollList\";\n","\"use client\";\n\nimport React, { useState, useEffect, useCallback, ReactNode } from \"react\";\nimport { cn } from \"../../../../utils/cn\";\n\nexport type NetworkSpeed = \"2g\" | \"3g\" | \"4g\" | \"slow\" | \"fast\" | \"unknown\";\nexport type NetworkType =\n  | \"cellular\"\n  | \"wifi\"\n  | \"bluetooth\"\n  | \"ethernet\"\n  | \"wimax\"\n  | \"other\"\n  | \"unknown\"\n  | \"none\";\n\nexport interface NetworkInfo {\n  type: NetworkType;\n  speed: NetworkSpeed;\n  effectiveType: string;\n  downlink: number;\n  rtt: number;\n  saveData: boolean;\n  online: boolean;\n}\n\nexport interface NetworkAwareContentProps {\n  children: ReactNode;\n  showOnFast?: ReactNode;\n  showOnSlow?: ReactNode;\n  showOnOffline?: ReactNode;\n  className?: string;\n  fastThreshold?: NetworkSpeed[];\n  slowThreshold?: NetworkSpeed[];\n  respectSaveData?: boolean;\n  onNetworkChange?: (networkInfo: NetworkInfo) => void;\n  loadingComponent?: ReactNode;\n  fallbackToDefault?: boolean;\n  /** Additional HTML attributes for the container */\n  containerProps?: React.HTMLAttributes<HTMLDivElement>;\n}\n\n// Get network connection information\nconst getNetworkInfo = (): NetworkInfo => {\n  const defaultInfo: NetworkInfo = {\n    type: \"unknown\",\n    speed: \"unknown\",\n    effectiveType: \"unknown\",\n    downlink: 0,\n    rtt: 0,\n    saveData: false,\n    online: navigator.onLine ?? true,\n  };\n\n  if (typeof navigator === \"undefined\") {\n    return defaultInfo;\n  }\n\n  const connection =\n    (navigator as any).connection ||\n    (navigator as any).mozConnection ||\n    (navigator as any).webkitConnection;\n\n  if (!connection) {\n    return {\n      ...defaultInfo,\n      online: navigator.onLine ?? true,\n    };\n  }\n\n  // Map effective types to our speed categories\n  const mapEffectiveType = (effectiveType: string): NetworkSpeed => {\n    switch (effectiveType) {\n      case \"slow-2g\":\n      case \"2g\":\n        return \"2g\";\n      case \"3g\":\n        return \"3g\";\n      case \"4g\":\n        return \"4g\";\n      default:\n        return \"unknown\";\n    }\n  };\n\n  // Determine speed category from downlink\n  const mapDownlinkToSpeed = (downlink: number): NetworkSpeed => {\n    if (downlink >= 10) return \"fast\";\n    if (downlink >= 1.5) return \"4g\";\n    if (downlink >= 0.4) return \"3g\";\n    return \"slow\";\n  };\n\n  const speed = connection.effectiveType\n    ? mapEffectiveType(connection.effectiveType)\n    : mapDownlinkToSpeed(connection.downlink || 0);\n\n  return {\n    type: connection.type || \"unknown\",\n    speed,\n    effectiveType: connection.effectiveType || \"unknown\",\n    downlink: connection.downlink || 0,\n    rtt: connection.rtt || 0,\n    saveData: connection.saveData || false,\n    online: navigator.onLine ?? true,\n  };\n};\n\nexport const NetworkAwareContent: React.FC<NetworkAwareContentProps> = ({\n  children,\n  showOnFast,\n  showOnSlow,\n  showOnOffline,\n  className,\n  fastThreshold = [\"4g\", \"fast\"],\n  slowThreshold = [\"2g\", \"3g\", \"slow\"],\n  respectSaveData = true,\n  onNetworkChange,\n  loadingComponent,\n  fallbackToDefault = true,\n  containerProps,\n}) => {\n  const [networkInfo, setNetworkInfo] = useState<NetworkInfo | null>(null);\n  const [isLoading, setIsLoading] = useState(true);\n\n  // Update network information\n  const updateNetworkInfo = useCallback(() => {\n    const info = getNetworkInfo();\n    setNetworkInfo(info);\n    setIsLoading(false);\n    onNetworkChange?.(info);\n  }, [onNetworkChange]);\n\n  // Set up network monitoring\n  useEffect(() => {\n    // Initial network check\n    updateNetworkInfo();\n\n    // Listen for online/offline events\n    const handleOnline = () => updateNetworkInfo();\n    const handleOffline = () => updateNetworkInfo();\n\n    window.addEventListener(\"online\", handleOnline);\n    window.addEventListener(\"offline\", handleOffline);\n\n    // Listen for connection changes (if supported)\n    const connection = (navigator as any).connection;\n    if (connection) {\n      connection.addEventListener(\"change\", updateNetworkInfo);\n    }\n\n    // Cleanup\n    return () => {\n      window.removeEventListener(\"online\", handleOnline);\n      window.removeEventListener(\"offline\", handleOffline);\n\n      if (connection) {\n        connection.removeEventListener(\"change\", updateNetworkInfo);\n      }\n    };\n  }, [updateNetworkInfo]);\n\n  // Use containerProps for DOM attributes\n\n  // Show loading state\n  if (isLoading || !networkInfo) {\n    return (\n      <div\n        className={cn(\"flex items-center justify-center p-4\", className)}\n        {...containerProps}\n      >\n        {loadingComponent || (\n          <div className=\"animate-pulse\">\n            <div className=\"h-4 bg-gray-200 rounded w-32\"></div>\n          </div>\n        )}\n      </div>\n    );\n  }\n\n  // Show offline content\n  if (!networkInfo.online) {\n    if (showOnOffline) {\n      return (\n        <div className={className} {...containerProps}>\n          {showOnOffline}\n        </div>\n      );\n    }\n\n    return (\n      <div\n        className={cn(\n          \"text-center p-4 bg-red-50 border border-red-200 rounded\",\n          className,\n        )}\n        {...containerProps}\n      >\n        <div className=\"text-red-800\">\n          <svg\n            className=\"w-6 h-6 mx-auto mb-2\"\n            fill=\"none\"\n            viewBox=\"0 0 24 24\"\n            stroke=\"currentColor\"\n          >\n            <path\n              strokeLinecap=\"round\"\n              strokeLinejoin=\"round\"\n              strokeWidth={2}\n              d=\"M18.364 5.636l-12.728 12.728m0-12.728l12.728 12.728\"\n            />\n          </svg>\n          <p className=\"font-medium\">No internet connection</p>\n          <p className=\"text-sm\">Please check your connection and try again</p>\n        </div>\n      </div>\n    );\n  }\n\n  // Check if user has data saver enabled\n  if (respectSaveData && networkInfo.saveData) {\n    if (showOnSlow) {\n      return (\n        <div className={className} {...containerProps}>\n          {showOnSlow}\n        </div>\n      );\n    }\n\n    if (fallbackToDefault) {\n      return (\n        <div className={className} {...containerProps}>\n          {children}\n        </div>\n      );\n    }\n\n    return (\n      <div\n        className={cn(\n          \"text-center p-4 bg-yellow-50 border border-yellow-200 rounded\",\n          className,\n        )}\n        {...containerProps}\n      >\n        <div className=\"text-yellow-800\">\n          <svg\n            className=\"w-6 h-6 mx-auto mb-2\"\n            fill=\"none\"\n            viewBox=\"0 0 24 24\"\n            stroke=\"currentColor\"\n          >\n            <path\n              strokeLinecap=\"round\"\n              strokeLinejoin=\"round\"\n              strokeWidth={2}\n              d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L4.082 16.5c-.77.833.192 2.5 1.732 2.5z\"\n            />\n          </svg>\n          <p className=\"font-medium\">Data saver mode enabled</p>\n          <p className=\"text-sm\">Showing minimal content to save data</p>\n        </div>\n      </div>\n    );\n  }\n\n  // Show content based on network speed\n  const isFastNetwork =\n    fastThreshold.includes(networkInfo.speed) || networkInfo.downlink >= 10;\n  const isSlowNetwork =\n    slowThreshold.includes(networkInfo.speed) || networkInfo.downlink < 1.5;\n\n  if (isFastNetwork && showOnFast) {\n    return (\n      <div className={className} {...containerProps}>\n        {showOnFast}\n      </div>\n    );\n  }\n\n  if (isSlowNetwork && showOnSlow) {\n    return (\n      <div className={className} {...containerProps}>\n        {showOnSlow}\n      </div>\n    );\n  }\n\n  // Default fallback\n  return (\n    <div className={className} {...containerProps}>\n      {children}\n    </div>\n  );\n};\n\n// Hook for network information\nexport const useNetworkInfo = () => {\n  const [networkInfo, setNetworkInfo] = useState<NetworkInfo | null>(null);\n\n  const updateNetworkInfo = useCallback(() => {\n    setNetworkInfo(getNetworkInfo());\n  }, []);\n\n  useEffect(() => {\n    updateNetworkInfo();\n\n    const handleOnline = () => updateNetworkInfo();\n    const handleOffline = () => updateNetworkInfo();\n\n    window.addEventListener(\"online\", handleOnline);\n    window.addEventListener(\"offline\", handleOffline);\n\n    const connection = (navigator as any).connection;\n    if (connection) {\n      connection.addEventListener(\"change\", updateNetworkInfo);\n    }\n\n    return () => {\n      window.removeEventListener(\"online\", handleOnline);\n      window.removeEventListener(\"offline\", handleOffline);\n\n      if (connection) {\n        connection.removeEventListener(\"change\", updateNetworkInfo);\n      }\n    };\n  }, [updateNetworkInfo]);\n\n  return networkInfo;\n};\n\n// Higher-order component for network-aware rendering\nexport const withNetworkAware = <P extends object>(\n  Component: React.ComponentType<P>,\n  networkProps?: Partial<NetworkAwareContentProps>,\n) => {\n  const WrappedComponent = (props: P) => (\n    <NetworkAwareContent {...networkProps}>\n      <Component {...props} />\n    </NetworkAwareContent>\n  );\n\n  WrappedComponent.displayName = `withNetworkAware(${Component.displayName || Component.name})`;\n  return WrappedComponent;\n};\n\nNetworkAwareContent.displayName = \"NetworkAwareContent\";\n","\"use client\";\n\nimport React, { useState, useEffect, useCallback, ReactNode } from \"react\";\nimport { cn } from \"../../../../utils/cn\";\n\nexport type CacheStrategy =\n  | \"cache-first\"\n  | \"network-first\"\n  | \"stale-while-revalidate\"\n  | \"cache-only\"\n  | \"network-only\";\n\nexport interface OfflineWrapperProps {\n  children: ReactNode;\n  fallback?: ReactNode;\n  className?: string;\n  cacheStrategy?: CacheStrategy;\n  cacheKey?: string;\n  cacheDuration?: number; // in milliseconds\n  onOffline?: () => void;\n  onOnline?: () => void;\n  onCacheHit?: (data: any) => void;\n  onCacheMiss?: () => void;\n  enableServiceWorker?: boolean;\n  showOfflineIndicator?: boolean;\n  retryOnReconnect?: boolean;\n  maxRetries?: number;\n  retryDelay?: number;\n}\n\ninterface CacheEntry {\n  data: any;\n  timestamp: number;\n  expires: number;\n}\n\n// Cache management utilities\nclass OfflineCache {\n  private static instance: OfflineCache;\n  private cache: Map<string, CacheEntry> = new Map();\n  private readonly storageKey = \"saas-factory-ui-offline-cache\";\n\n  static getInstance(): OfflineCache {\n    if (!OfflineCache.instance) {\n      OfflineCache.instance = new OfflineCache();\n    }\n    return OfflineCache.instance;\n  }\n\n  constructor() {\n    this.loadFromStorage();\n  }\n\n  private loadFromStorage(): void {\n    try {\n      const stored =\n        typeof window !== \"undefined\"\n          ? localStorage?.getItem(this.storageKey)\n          : null;\n      if (stored) {\n        const parsed = JSON.parse(stored);\n        this.cache = new Map(Object.entries(parsed));\n      }\n    } catch (error) {\n      console.warn(\"Failed to load cache from storage:\", error);\n    }\n  }\n\n  private saveToStorage(): void {\n    try {\n      if (typeof window !== \"undefined\" && localStorage) {\n        const cacheObject = Object.fromEntries(this.cache.entries());\n        localStorage.setItem(this.storageKey, JSON.stringify(cacheObject));\n      }\n    } catch (error) {\n      console.warn(\"Failed to save cache to storage:\", error);\n    }\n  }\n\n  set(key: string, data: any, ttl: number = 3600000): void {\n    const now = Date.now();\n    const entry: CacheEntry = {\n      data,\n      timestamp: now,\n      expires: now + ttl,\n    };\n\n    this.cache.set(key, entry);\n    this.saveToStorage();\n  }\n\n  get(key: string): any | null {\n    const entry = this.cache.get(key);\n\n    if (!entry) {\n      return null;\n    }\n\n    const now = Date.now();\n    if (now > entry.expires) {\n      this.cache.delete(key);\n      this.saveToStorage();\n      return null;\n    }\n\n    return entry.data;\n  }\n\n  isStale(key: string, maxAge: number): boolean {\n    const entry = this.cache.get(key);\n    if (!entry) return true;\n\n    const age = Date.now() - entry.timestamp;\n    return age > maxAge;\n  }\n\n  has(key: string): boolean {\n    return this.get(key) !== null;\n  }\n\n  delete(key: string): void {\n    this.cache.delete(key);\n    this.saveToStorage();\n  }\n\n  clear(): void {\n    this.cache.clear();\n    this.saveToStorage();\n  }\n\n  size(): number {\n    return this.cache.size;\n  }\n}\n\n// Service Worker registration\nconst registerServiceWorker =\n  async (): Promise<ServiceWorkerRegistration | null> => {\n    if (\"serviceWorker\" in navigator) {\n      try {\n        const registration = await navigator.serviceWorker.register(\"/sw.js\");\n        return registration;\n      } catch (error) {\n        console.warn(\"Service Worker registration failed:\", error);\n        return null;\n      }\n    }\n    return null;\n  };\n\nexport const OfflineWrapper: React.FC<OfflineWrapperProps> = ({\n  children,\n  fallback,\n  className,\n  cacheStrategy = \"stale-while-revalidate\",\n  cacheKey = \"default\",\n  cacheDuration = 3600000, // 1 hour\n  onOffline,\n  onOnline,\n  onCacheHit,\n  onCacheMiss,\n  enableServiceWorker = false,\n  showOfflineIndicator = true,\n  retryOnReconnect = true,\n  maxRetries = 3,\n  retryDelay = 1000,\n}) => {\n  const [isOnline, setIsOnline] = useState(\n    typeof window !== \"undefined\" ? navigator.onLine : true,\n  );\n  const [hasCache, setHasCache] = useState(false);\n  const [isLoading, setIsLoading] = useState(false);\n  const [retryCount, setRetryCount] = useState(0);\n  const [cacheData, setCacheData] = useState<any>(null);\n\n  const cache = OfflineCache.getInstance();\n\n  // Check cache on mount\n  useEffect(() => {\n    const cachedData = cache.get(cacheKey);\n    if (cachedData) {\n      setHasCache(true);\n      setCacheData(cachedData);\n      onCacheHit?.(cachedData);\n    } else {\n      onCacheMiss?.();\n    }\n  }, [cacheKey, onCacheHit, onCacheMiss]);\n\n  // Handle online/offline events\n  useEffect(() => {\n    const handleOnline = () => {\n      setIsOnline(true);\n      onOnline?.();\n\n      if (retryOnReconnect && retryCount < maxRetries) {\n        handleRetry();\n      }\n    };\n\n    const handleOffline = () => {\n      setIsOnline(false);\n      onOffline?.();\n    };\n\n    window.addEventListener(\"online\", handleOnline);\n    window.addEventListener(\"offline\", handleOffline);\n\n    return () => {\n      window.removeEventListener(\"online\", handleOnline);\n      window.removeEventListener(\"offline\", handleOffline);\n    };\n  }, [onOnline, onOffline, retryOnReconnect, retryCount, maxRetries]);\n\n  // Register service worker\n  useEffect(() => {\n    if (enableServiceWorker) {\n      registerServiceWorker();\n    }\n  }, [enableServiceWorker]);\n\n  // Handle retry logic\n  const handleRetry = useCallback(async () => {\n    if (retryCount >= maxRetries) return;\n\n    setIsLoading(true);\n\n    try {\n      await new Promise((resolve) =>\n        setTimeout(resolve, retryDelay * Math.pow(2, retryCount)),\n      );\n\n      // Attempt to fetch fresh data\n      // This would typically involve making an API call\n      // For demo purposes, we'll just reset the retry count\n      setRetryCount(0);\n    } catch (error) {\n      setRetryCount((prev) => prev + 1);\n    } finally {\n      setIsLoading(false);\n    }\n  }, [retryCount, maxRetries, retryDelay]);\n\n  // Cache data\n  const updateCacheData = useCallback(\n    (data: any) => {\n      cache.set(cacheKey, data, cacheDuration);\n      setHasCache(true);\n      setCacheData(data);\n    },\n    [cacheKey, cacheDuration],\n  );\n\n  // Get content based on cache strategy\n  const getContent = (): ReactNode => {\n    switch (cacheStrategy) {\n      case \"cache-only\":\n        return hasCache ? children : fallback || renderOfflineFallback();\n\n      case \"network-only\":\n        return isOnline ? children : fallback || renderOfflineFallback();\n\n      case \"cache-first\":\n        if (hasCache) return children;\n        return isOnline ? children : fallback || renderOfflineFallback();\n\n      case \"network-first\":\n        if (isOnline) return children;\n        return hasCache ? children : fallback || renderOfflineFallback();\n\n      case \"stale-while-revalidate\":\n      default:\n        // Show cached content immediately, fetch fresh data in background\n        if (hasCache) {\n          // Check if cache is stale\n          const isStale = cache.isStale(cacheKey, cacheDuration);\n          if (isStale && isOnline) {\n            // Trigger background refresh (would typically be an API call)\n            // For demo, we'll just note that we should refresh\n          }\n          return children;\n        }\n\n        return isOnline ? children : fallback || renderOfflineFallback();\n    }\n  };\n\n  // Render offline fallback\n  const renderOfflineFallback = (): ReactNode => {\n    return (\n      <div\n        className={cn(\n          \"flex flex-col items-center justify-center p-8 text-center\",\n          \"bg-gray-50 border-2 border-dashed border-gray-300 rounded-lg\",\n          className,\n        )}\n      >\n        <div className=\"text-6xl mb-4\">📡</div>\n        <h3 className=\"text-lg font-semibold text-gray-700 mb-2\">\n          You're offline\n        </h3>\n        <p className=\"text-gray-500 mb-4 max-w-sm\">\n          This content is not available offline. Please check your connection\n          and try again.\n        </p>\n\n        {retryOnReconnect && retryCount < maxRetries && (\n          <button\n            onClick={handleRetry}\n            disabled={isLoading}\n            className={cn(\n              \"px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors\",\n              isLoading && \"opacity-50 cursor-not-allowed\",\n            )}\n          >\n            {isLoading ? (\n              <span className=\"flex items-center\">\n                <svg\n                  className=\"animate-spin -ml-1 mr-2 h-4 w-4 text-white\"\n                  fill=\"none\"\n                  viewBox=\"0 0 24 24\"\n                >\n                  <circle\n                    className=\"opacity-25\"\n                    cx=\"12\"\n                    cy=\"12\"\n                    r=\"10\"\n                    stroke=\"currentColor\"\n                    strokeWidth=\"4\"\n                  />\n                  <path\n                    className=\"opacity-75\"\n                    fill=\"currentColor\"\n                    d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n                  />\n                </svg>\n                Retrying...\n              </span>\n            ) : (\n              \"Retry\"\n            )}\n          </button>\n        )}\n      </div>\n    );\n  };\n\n  return (\n    <div className={cn(\"relative\", className)}>\n      {/* Offline indicator */}\n      {!isOnline && showOfflineIndicator && (\n        <div className=\"absolute top-0 left-0 right-0 z-50 bg-red-600 text-white text-center py-2 text-sm\">\n          <span className=\"flex items-center justify-center\">\n            <svg\n              className=\"w-4 h-4 mr-2\"\n              fill=\"none\"\n              viewBox=\"0 0 24 24\"\n              stroke=\"currentColor\"\n            >\n              <path\n                strokeLinecap=\"round\"\n                strokeLinejoin=\"round\"\n                strokeWidth={2}\n                d=\"M18.364 5.636l-12.728 12.728m0-12.728l12.728 12.728\"\n              />\n            </svg>\n            You're offline\n          </span>\n        </div>\n      )}\n\n      {/* Main content */}\n      <div className={!isOnline && showOfflineIndicator ? \"pt-10\" : \"\"}>\n        {getContent()}\n      </div>\n    </div>\n  );\n};\n\n// Hook for offline state management\nexport const useOfflineState = () => {\n  const [isOnline, setIsOnline] = useState(\n    typeof window !== \"undefined\" ? navigator.onLine : true,\n  );\n\n  useEffect(() => {\n    const handleOnline = () => setIsOnline(true);\n    const handleOffline = () => setIsOnline(false);\n\n    window.addEventListener(\"online\", handleOnline);\n    window.addEventListener(\"offline\", handleOffline);\n\n    return () => {\n      window.removeEventListener(\"online\", handleOnline);\n      window.removeEventListener(\"offline\", handleOffline);\n    };\n  }, []);\n\n  return isOnline;\n};\n\n// Hook for cache management\nexport const useCache = (key: string, ttl: number = 3600000) => {\n  const cache = OfflineCache.getInstance();\n\n  const get = useCallback(() => cache.get(key), [key]);\n  const set = useCallback((data: any) => cache.set(key, data, ttl), [key, ttl]);\n  const remove = useCallback(() => cache.delete(key), [key]);\n  const has = useCallback(() => cache.has(key), [key]);\n\n  return { get, set, remove, has };\n};\n\nOfflineWrapper.displayName = \"OfflineWrapper\";\n","// src/utils/formats.ts\nexport const formatDate = (\n  date: Date | string,\n  options: Intl.DateTimeFormatOptions = {\n    month: \"long\",\n    day: \"numeric\",\n    year: \"numeric\",\n  },\n): string => {\n  if (!date) return \"Invalid date\";\n  try {\n    return new Date(date).toLocaleDateString(undefined, options);\n  } catch (error) {\n    return \"Invalid date\";\n  }\n};\n\nexport const formatNumber = (\n  number: number,\n  options: Intl.NumberFormatOptions = {\n    minimumFractionDigits: 0,\n    maximumFractionDigits: 2,\n  },\n): string => {\n  if (typeof number !== \"number\" || isNaN(number)) return \"0\";\n  return new Intl.NumberFormat(undefined, options).format(number);\n};\n\nexport const formatCurrency = (\n  amount: number,\n  currency: string = \"USD\",\n  locale: string = \"en-US\",\n): string => {\n  if (typeof amount !== \"number\" || isNaN(amount)) return \"$0.00\";\n  return new Intl.NumberFormat(locale, {\n    style: \"currency\",\n    currency,\n  }).format(amount);\n};\n","export const validateEmail = (email: string): boolean => {\n  if (!email || typeof email !== \"string\") return false;\n  const re = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n  return re.test(email);\n};\n\nexport const validatePassword = (\n  password: string,\n): {\n  isValid: boolean;\n  errors: string[];\n} => {\n  const errors: string[] = [];\n\n  if (!password || typeof password !== \"string\") {\n    errors.push(\"Password is required\");\n    return { isValid: false, errors };\n  }\n\n  if (password.length < 8) {\n    errors.push(\"Password must be at least 8 characters long\");\n  }\n  if (!/[A-Z]/.test(password)) {\n    errors.push(\"Password must contain at least one uppercase letter\");\n  }\n  if (!/[a-z]/.test(password)) {\n    errors.push(\"Password must contain at least one lowercase letter\");\n  }\n  if (!/[0-9]/.test(password)) {\n    errors.push(\"Password must contain at least one number\");\n  }\n\n  return {\n    isValid: errors.length === 0,\n    errors,\n  };\n};\n\n/* ═══════════════════════════════════════════════════\n   SECURITY VALIDATORS\n   Block dangerous content in user-facing text fields\n   (contact forms, comments, profile fields, etc.)\n   ═══════════════════════════════════════════════════ */\n\nconst HTML_TAG_RE = /<\\/?[a-z][\\s\\S]*?>/i;\nconst PROTOCOL_URL_RE = /(?:https?:\\/\\/|ftp:\\/\\/|www\\.)\\S+/i;\nconst BARE_DOMAIN_RE =\n  /\\b[\\w-]+\\.(?:com|org|net|io|dev|co|app|xyz|info|biz|me|us|uk)\\b/i;\n\n/**\n * Common validators for blocking dangerous user input.\n *\n * Use with any form validation library (Zod, yup, react-hook-form, etc.)\n *\n * @example\n * ```ts\n * // With Zod\n * const schema = z.object({\n *   name: z.string().refine(v => !commonValidators.noHtml.test(v), commonValidators.noHtml.message),\n * });\n *\n * // Direct usage\n * if (commonValidators.noHtml.test(input)) {\n *   setError(\"HTML tags are not allowed\");\n * }\n * ```\n */\nexport const commonValidators = {\n  /** Rejects any HTML tags (<script>, <a href>, etc.) */\n  noHtml: {\n    test: (value: string): boolean => HTML_TAG_RE.test(value),\n    message: \"HTML tags are not allowed\",\n    regex: HTML_TAG_RE,\n  },\n\n  /** Rejects protocol URLs (https://, http://, ftp://, www.) */\n  noUrls: {\n    test: (value: string): boolean => PROTOCOL_URL_RE.test(value),\n    message: \"URLs are not allowed\",\n    regex: PROTOCOL_URL_RE,\n  },\n\n  /** Rejects all links including bare domains (stricter than noUrls) */\n  noLinks: {\n    test: (value: string): boolean =>\n      PROTOCOL_URL_RE.test(value) || BARE_DOMAIN_RE.test(value),\n    message: \"Links are not allowed\",\n    regex: BARE_DOMAIN_RE,\n  },\n} as const;\n","/**\n * Cross-Platform Design Tokens System\n *\n * Provides consistent design values across web and React Native platforms\n * Optimized for modern glassmorphism, animations, and premium UX\n */\n\n// Core Color System\nexport const colorTokens = {\n  // Primary brand colors\n  primary: {\n    50: \"#eff6ff\",\n    100: \"#dbeafe\",\n    200: \"#bfdbfe\",\n    300: \"#93c5fd\",\n    400: \"#60a5fa\",\n    500: \"#3b82f6\", // Main primary\n    600: \"#2563eb\",\n    700: \"#1d4ed8\",\n    800: \"#1e40af\",\n    900: \"#1e3a8a\",\n    950: \"#172554\",\n  },\n\n  // Semantic colors for audio components\n  audio: {\n    playing: \"#10b981\", // Green for active/playing\n    paused: \"#6b7280\", // Gray for paused\n    liked: \"#ef4444\", // Red for liked/favorited\n    waveform: \"#8b5cf6\", // Purple for waveform\n    progress: \"#3b82f6\", // Blue for progress indicators\n  },\n\n  // Modern glassmorphism backgrounds\n  glass: {\n    light: {\n      primary: \"rgba(255, 255, 255, 0.8)\",\n      secondary: \"rgba(255, 255, 255, 0.6)\",\n      tertiary: \"rgba(255, 255, 255, 0.4)\",\n    },\n    dark: {\n      primary: \"rgba(17, 24, 39, 0.8)\",\n      secondary: \"rgba(31, 41, 55, 0.7)\",\n      tertiary: \"rgba(55, 65, 81, 0.6)\",\n    },\n  },\n\n  // Neutral scale\n  gray: {\n    50: \"#f9fafb\",\n    100: \"#f3f4f6\",\n    200: \"#e5e7eb\",\n    300: \"#d1d5db\",\n    400: \"#9ca3af\",\n    500: \"#6b7280\",\n    600: \"#4b5563\",\n    700: \"#374151\",\n    800: \"#1f2937\",\n    900: \"#111827\",\n    950: \"#030712\",\n  },\n} as const;\n\n// Typography System\nexport const typographyTokens = {\n  // Font sizes (responsive)\n  fontSize: {\n    xs: { web: \"0.75rem\", native: 12 }, // 12px\n    sm: { web: \"0.875rem\", native: 14 }, // 14px\n    base: { web: \"1rem\", native: 16 }, // 16px\n    lg: { web: \"1.125rem\", native: 18 }, // 18px\n    xl: { web: \"1.25rem\", native: 20 }, // 20px\n    \"2xl\": { web: \"1.5rem\", native: 24 }, // 24px\n    \"3xl\": { web: \"1.875rem\", native: 30 }, // 30px\n  },\n\n  // Font weights\n  fontWeight: {\n    normal: \"400\",\n    medium: \"500\",\n    semibold: \"600\",\n    bold: \"700\",\n    extrabold: \"800\",\n  },\n\n  // Line heights\n  lineHeight: {\n    tight: 1.25,\n    normal: 1.5,\n    relaxed: 1.625,\n    loose: 2,\n  },\n\n  // Letter spacing\n  letterSpacing: {\n    tight: \"-0.025em\",\n    normal: \"0em\",\n    wide: \"0.025em\",\n  },\n} as const;\n\n// Spacing System (8px grid)\nexport const spacingTokens = {\n  xs: { web: \"0.25rem\", native: 4 }, // 4px\n  sm: { web: \"0.5rem\", native: 8 }, // 8px\n  md: { web: \"1rem\", native: 16 }, // 16px\n  lg: { web: \"1.5rem\", native: 24 }, // 24px\n  xl: { web: \"2rem\", native: 32 }, // 32px\n  \"2xl\": { web: \"3rem\", native: 48 }, // 48px\n  \"3xl\": { web: \"4rem\", native: 64 }, // 64px\n} as const;\n\n// Border Radius System\nexport const radiusTokens = {\n  none: 0,\n  sm: { web: \"0.25rem\", native: 4 }, // 4px\n  md: { web: \"0.375rem\", native: 6 }, // 6px\n  lg: { web: \"0.5rem\", native: 8 }, // 8px\n  xl: { web: \"0.75rem\", native: 12 }, // 12px\n  \"2xl\": { web: \"1rem\", native: 16 }, // 16px\n  \"3xl\": { web: \"1.5rem\", native: 24 }, // 24px\n  full: { web: \"9999px\", native: 9999 },\n} as const;\n\n// Shadow System\nexport const shadowTokens = {\n  // Web shadows (CSS)\n  web: {\n    sm: \"0 1px 2px 0 rgb(0 0 0 / 0.05)\",\n    md: \"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)\",\n    lg: \"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)\",\n    xl: \"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)\",\n    \"2xl\": \"0 25px 50px -12px rgb(0 0 0 / 0.25)\",\n\n    // Glassmorphism shadows\n    glass: \"0 8px 32px rgba(0, 0, 0, 0.12)\",\n    glassHover: \"0 12px 48px rgba(0, 0, 0, 0.15)\",\n\n    // Audio-specific shadows\n    player: \"0 -8px 32px rgba(0, 0, 0, 0.1)\",\n    card: \"0 4px 16px rgba(0, 0, 0, 0.1)\",\n  },\n\n  // React Native shadows\n  native: {\n    sm: {\n      shadowColor: \"#000\",\n      shadowOffset: { width: 0, height: 1 },\n      shadowOpacity: 0.05,\n      shadowRadius: 2,\n      elevation: 1,\n    },\n    md: {\n      shadowColor: \"#000\",\n      shadowOffset: { width: 0, height: 4 },\n      shadowOpacity: 0.1,\n      shadowRadius: 6,\n      elevation: 4,\n    },\n    lg: {\n      shadowColor: \"#000\",\n      shadowOffset: { width: 0, height: 10 },\n      shadowOpacity: 0.15,\n      shadowRadius: 15,\n      elevation: 8,\n    },\n    xl: {\n      shadowColor: \"#000\",\n      shadowOffset: { width: 0, height: 20 },\n      shadowOpacity: 0.2,\n      shadowRadius: 25,\n      elevation: 12,\n    },\n  },\n} as const;\n\n// Animation System\nexport const animationTokens = {\n  // Duration\n  duration: {\n    fast: 150, // 150ms\n    normal: 300, // 300ms\n    slow: 500, // 500ms\n    slower: 800, // 800ms\n  },\n\n  // Easing curves\n  easing: {\n    // Web Framer Motion easing\n    web: {\n      ease: \"easeOut\" as const,\n      easeIn: \"easeIn\" as const,\n      easeOut: \"easeOut\" as const,\n      easeInOut: \"easeInOut\" as const,\n      spring: \"easeOut\" as const, // Using easeOut instead of custom cubic-bezier\n    },\n\n    // React Native easing\n    native: {\n      ease: \"ease\",\n      easeIn: \"easeIn\",\n      easeOut: \"easeOut\",\n      easeInOut: \"easeInOut\",\n      spring: \"spring\",\n    },\n  },\n\n  // Audio-specific animations\n  audio: {\n    waveform: {\n      duration: 1500,\n      easing: \"easeInOut\",\n      repeat: true,\n    },\n    equalizer: {\n      duration: 1000,\n      easing: \"easeInOut\",\n      repeat: true,\n    },\n    pulse: {\n      duration: 2000,\n      easing: \"easeInOut\",\n      repeat: true,\n    },\n    playButton: {\n      duration: 200,\n      easing: \"spring\",\n    },\n  },\n} as const;\n\n// Touch Target System (for mobile optimization)\nexport const touchTargets = {\n  minimum: { web: \"44px\", native: 44 }, // iOS/Android minimum\n  comfortable: { web: \"48px\", native: 48 }, // Recommended\n  large: { web: \"56px\", native: 56 }, // Large buttons\n} as const;\n\n// Z-Index System\nexport const zIndexTokens = {\n  base: 0,\n  dropdown: 10,\n  sticky: 20,\n  fixed: 30,\n  modalBackdrop: 40,\n  modal: 50,\n  popover: 60,\n  tooltip: 70,\n  toast: 80,\n  max: 9999,\n} as const;\n\n// Breakpoint System (for responsive design)\nexport const breakpointTokens = {\n  xs: \"475px\",\n  sm: \"640px\",\n  md: \"768px\",\n  lg: \"1024px\",\n  xl: \"1280px\",\n  \"2xl\": \"1536px\",\n} as const;\n\n// Platform Detection Utility\nexport const platform = {\n  isWeb: typeof window !== \"undefined\",\n  isNative: typeof window === \"undefined\",\n\n  select: <T>(values: { web?: T; native?: T; default?: T }): T => {\n    if (platform.isWeb && values.web !== undefined) return values.web;\n    if (platform.isNative && values.native !== undefined) return values.native;\n    if (values.default !== undefined) return values.default;\n    throw new Error(\"No platform-specific value provided\");\n  },\n} as const;\n\n// Theme Configuration\nexport const themeConfig = {\n  // Default theme\n  default: {\n    colors: colorTokens,\n    typography: typographyTokens,\n    spacing: spacingTokens,\n    radius: radiusTokens,\n    shadows: shadowTokens,\n    animations: animationTokens,\n    touchTargets,\n    zIndex: zIndexTokens,\n    breakpoints: breakpointTokens,\n  },\n} as const;\n\n// Export utility types\nexport type ColorToken = keyof typeof colorTokens;\nexport type SpacingToken = keyof typeof spacingTokens;\nexport type RadiusToken = keyof typeof radiusTokens;\nexport type AnimationToken = keyof typeof animationTokens.duration;\n\n// Export main theme\nexport const theme = themeConfig.default;\n","/**\n * Framer Motion Presets\n *\n * Standardized animation constants for consistent Framer Motion usage\n * across all apps. Provides typed durations, easings, hover effects,\n * distance presets, viewport settings, animation variants, stagger\n * containers, and helper functions.\n *\n * Usage:\n *   import { DURATIONS, EASINGS, VARIANTS } from '@digilogiclabs/saas-factory-ui'\n */\n\n// ============================================\n// DURATION PRESETS\n// ============================================\n\n/**\n * Standard animation durations (in seconds).\n * Choose based on interaction type and user expectation.\n */\nexport const DURATIONS = {\n  /** 0.15s - Micro-interactions, immediate feedback */\n  instant: 0.15,\n  /** 0.3s - Hover effects, tooltips, quick transitions */\n  fast: 0.3,\n  /** 0.5s - Standard page elements, cards, modals */\n  normal: 0.5,\n  /** 0.8s - Hero sections, emphasized content */\n  slow: 0.8,\n  /** 1.2s - Page transitions, complex sequences */\n  slower: 1.2,\n} as const;\n\n// ============================================\n// EASING FUNCTIONS\n// ============================================\n\n/**\n * Standard easing curves.\n * Choose based on animation direction and feel.\n */\nexport const EASINGS = {\n  /** Constant speed - use for continuous motion (spinners, scrolling) */\n  linear: [0, 0, 1, 1] as const,\n\n  /** Fast start, slow end - use for entrances (fade in, slide in) */\n  easeOut: [0, 0, 0.2, 1] as const,\n\n  /** Slow start, fast end - use for exits (fade out, slide out) */\n  easeIn: [0.4, 0, 1, 1] as const,\n\n  /** Smooth both ends - use for movement (slide across, scale) */\n  easeInOut: [0.4, 0, 0.2, 1] as const,\n\n  /** Natural bounce - use for interactive elements, emphasis */\n  spring: { type: \"spring\" as const, stiffness: 100, damping: 15 },\n\n  /** Gentle bounce - use for cards, modals, subtle effects */\n  softSpring: { type: \"spring\" as const, stiffness: 80, damping: 15 },\n\n  /** Bouncy - use for playful interactions, success states */\n  bouncySpring: { type: \"spring\" as const, stiffness: 120, damping: 12 },\n} as const;\n\n// ============================================\n// HOVER ANIMATIONS\n// ============================================\n\n/**\n * Standard hover effects.\n * Consistent lift and scale values for interactive elements.\n *\n * Usage:\n *   <motion.div whileHover={HOVER.lift} transition={HOVER_TRANSITION}>\n */\nexport const HOVER = {\n  /** Standard lift: -6px up (most common) */\n  lift: { y: -6 } as const,\n\n  /** Lift with scale: -6px up + 5% scale (buttons, cards) */\n  liftWithScale: { y: -6, scale: 1.05 } as const,\n\n  /** Subtle lift: -4px up (small elements, icons) */\n  subtle: { y: -4 } as const,\n\n  /** Dramatic lift: -8px up (hero elements, featured cards) */\n  dramatic: { y: -8 } as const,\n} as const;\n\n/**\n * Standard transition for hover effects.\n * Use with HOVER variants for consistent feel.\n */\nexport const HOVER_TRANSITION = {\n  duration: DURATIONS.fast,\n  ease: EASINGS.easeOut,\n} as const;\n\n// ============================================\n// DISTANCE PRESETS\n// ============================================\n\n/**\n * Standard movement distances (in pixels).\n * Use for slide animations (slideUp, slideDown, etc.).\n */\nexport const DISTANCES = {\n  /** 10px - Subtle movement, micro-interactions */\n  sm: 10,\n  /** 20px - Noticeable movement, standard slides */\n  md: 20,\n  /** 40px - Prominent movement, emphasized entrances */\n  lg: 40,\n  /** 60px - Dramatic movement, hero sections */\n  xl: 60,\n} as const;\n\n// ============================================\n// STAGGER DELAYS\n// ============================================\n\n/**\n * Delays between staggered animations (in seconds).\n * Use with STAGGER_CONTAINERS for sequential reveals.\n */\nexport const STAGGER = {\n  /** 0.05s - Fast stagger (3-5 items) */\n  fast: 0.05,\n  /** 0.1s - Normal stagger (6-10 items) */\n  normal: 0.1,\n  /** 0.15s - Slow stagger (large sections) */\n  slow: 0.15,\n} as const;\n\n// ============================================\n// VIEWPORT SETTINGS\n// ============================================\n\n/**\n * Viewport intersection settings for scroll-triggered animations.\n * Controls when animations trigger during scroll.\n */\nexport const VIEWPORT = {\n  /** Trigger once immediately when any part is visible */\n  once: { once: true, amount: 0 } as const,\n\n  /** Trigger once when 30% is visible - good for cards */\n  oncePartial: { once: true, amount: 0.3 } as const,\n\n  /** Trigger once when 50% is visible - good for large elements */\n  onceHalf: { once: true, amount: 0.5 } as const,\n\n  /** Trigger every time element enters viewport - use sparingly */\n  repeat: { once: false, amount: 0 } as const,\n} as const;\n\n// ============================================\n// COMMON ANIMATION VARIANTS\n// ============================================\n\n/**\n * Reusable animation variants for Framer Motion.\n * Use these for consistent animations across all apps.\n *\n * Usage:\n *   <motion.div variants={VARIANTS.fadeIn} initial=\"initial\" animate=\"animate\" />\n */\nexport const VARIANTS = {\n  /** Simple fade in/out */\n  fadeIn: {\n    initial: { opacity: 0 },\n    animate: { opacity: 1 },\n    exit: { opacity: 0 },\n  },\n\n  /** Fade in with slide up from bottom */\n  slideUp: {\n    initial: { opacity: 0, y: DISTANCES.lg },\n    animate: { opacity: 1, y: 0 },\n    exit: { opacity: 0, y: -DISTANCES.lg },\n  },\n\n  /** Fade in with slide down from top */\n  slideDown: {\n    initial: { opacity: 0, y: -DISTANCES.lg },\n    animate: { opacity: 1, y: 0 },\n    exit: { opacity: 0, y: DISTANCES.lg },\n  },\n\n  /** Fade in with slide from left */\n  slideLeft: {\n    initial: { opacity: 0, x: DISTANCES.lg },\n    animate: { opacity: 1, x: 0 },\n    exit: { opacity: 0, x: -DISTANCES.lg },\n  },\n\n  /** Fade in with slide from right */\n  slideRight: {\n    initial: { opacity: 0, x: -DISTANCES.lg },\n    animate: { opacity: 1, x: 0 },\n    exit: { opacity: 0, x: DISTANCES.lg },\n  },\n\n  /** Subtle scale effect for cards/modals */\n  scale: {\n    initial: { opacity: 0, scale: 0.95 },\n    animate: { opacity: 1, scale: 1 },\n    exit: { opacity: 0, scale: 0.95 },\n  },\n\n  /** Dramatic scale up effect */\n  scaleUp: {\n    initial: { opacity: 0, scale: 0.8 },\n    animate: { opacity: 1, scale: 1 },\n    exit: { opacity: 0, scale: 1.1 },\n  },\n\n  /** Rotate in effect (for icons, decorative elements) */\n  rotate: {\n    initial: { opacity: 0, rotate: -90 },\n    animate: { opacity: 1, rotate: 0 },\n    exit: { opacity: 0, rotate: 90 },\n  },\n\n  /** Slide up with bounce (for emphasized content) */\n  slideUpBounce: {\n    initial: { opacity: 0, y: DISTANCES.lg },\n    animate: { opacity: 1, y: 0 },\n    exit: { opacity: 0, y: -DISTANCES.lg },\n  },\n\n  /** Card reveal with subtle scale and slide */\n  cardReveal: {\n    initial: { opacity: 0, y: DISTANCES.lg, scale: 0.95 },\n    animate: { opacity: 1, y: 0, scale: 1 },\n    exit: { opacity: 0, y: -DISTANCES.lg, scale: 0.95 },\n  },\n} as const;\n\n// ============================================\n// STAGGER CONTAINER VARIANTS\n// ============================================\n\n/**\n * Container variants for staggered children animations.\n * Use with motion components to stagger child elements.\n */\nexport const STAGGER_CONTAINERS = {\n  /** Fast stagger for small lists */\n  fast: {\n    hidden: { opacity: 0 },\n    show: {\n      opacity: 1,\n      transition: {\n        staggerChildren: STAGGER.fast,\n      },\n    },\n  },\n\n  /** Normal stagger for medium lists */\n  normal: {\n    hidden: { opacity: 0 },\n    show: {\n      opacity: 1,\n      transition: {\n        staggerChildren: STAGGER.normal,\n      },\n    },\n  },\n\n  /** Slow stagger for large sections */\n  slow: {\n    hidden: { opacity: 0 },\n    show: {\n      opacity: 1,\n      transition: {\n        staggerChildren: STAGGER.slow,\n      },\n    },\n  },\n} as const;\n\n/**\n * Child variants for staggered animations.\n * Use as variants on children inside a STAGGER_CONTAINERS parent.\n */\nexport const STAGGER_ITEMS = {\n  /** Fade up for staggered items */\n  fadeUp: {\n    hidden: { opacity: 0, y: DISTANCES.md },\n    show: {\n      opacity: 1,\n      y: 0,\n      transition: EASINGS.softSpring,\n    },\n  },\n\n  /** Fade in for staggered items */\n  fade: {\n    hidden: { opacity: 0 },\n    show: {\n      opacity: 1,\n      transition: { duration: DURATIONS.normal },\n    },\n  },\n\n  /** Scale in for staggered items */\n  scale: {\n    hidden: { opacity: 0, scale: 0.95 },\n    show: {\n      opacity: 1,\n      scale: 1,\n      transition: EASINGS.softSpring,\n    },\n  },\n} as const;\n\n// ============================================\n// HELPER FUNCTIONS\n// ============================================\n\n/**\n * Create a custom transition with standard settings.\n * @param duration - Duration key from DURATIONS\n * @param easing - Easing key from EASINGS\n * @param delay - Optional delay in seconds\n */\nexport function createTransition(\n  duration: keyof typeof DURATIONS = \"normal\",\n  easing: keyof typeof EASINGS = \"easeOut\",\n  delay: number = 0,\n) {\n  const easingValue = EASINGS[easing];\n\n  // Handle spring easings differently\n  if (typeof easingValue === \"object\" && \"type\" in easingValue) {\n    return {\n      ...easingValue,\n      delay,\n    };\n  }\n\n  return {\n    duration: DURATIONS[duration],\n    ease: easingValue,\n    delay,\n  };\n}\n\n/**\n * Create a custom slide variant.\n * @param direction - Direction to slide from\n * @param distance - Distance key from DISTANCES\n */\nexport function createSlideVariant(\n  direction: \"up\" | \"down\" | \"left\" | \"right\",\n  distance: keyof typeof DISTANCES = \"lg\",\n) {\n  const dist = DISTANCES[distance];\n\n  const initial = {\n    opacity: 0,\n    ...(direction === \"up\" && { y: dist }),\n    ...(direction === \"down\" && { y: -dist }),\n    ...(direction === \"left\" && { x: dist }),\n    ...(direction === \"right\" && { x: -dist }),\n  };\n\n  return {\n    initial,\n    animate: { opacity: 1, x: 0, y: 0 },\n    exit: {\n      opacity: 0,\n      ...(direction === \"up\" && { y: -dist }),\n      ...(direction === \"down\" && { y: dist }),\n      ...(direction === \"left\" && { x: -dist }),\n      ...(direction === \"right\" && { x: dist }),\n    },\n  };\n}\n\n/**\n * Merge multiple variants into one.\n * Useful for combining effects (e.g., fade + slide).\n */\nexport function mergeVariants(\n  ...variants: Array<{\n    initial?: Record<string, unknown>;\n    animate?: Record<string, unknown>;\n    exit?: Record<string, unknown>;\n  }>\n) {\n  return variants.reduce(\n    (acc, variant) => {\n      return {\n        initial: { ...acc.initial, ...variant.initial },\n        animate: { ...acc.animate, ...variant.animate },\n        exit: { ...acc.exit, ...variant.exit },\n      };\n    },\n    {\n      initial: {} as Record<string, unknown>,\n      animate: {} as Record<string, unknown>,\n      exit: {} as Record<string, unknown>,\n    },\n  );\n}\n\n// ============================================\n// TYPE EXPORTS\n// ============================================\n\nexport type Duration = keyof typeof DURATIONS;\nexport type Easing = keyof typeof EASINGS;\nexport type Distance = keyof typeof DISTANCES;\nexport type StaggerSpeed = keyof typeof STAGGER;\nexport type ViewportSetting = keyof typeof VIEWPORT;\nexport type MotionVariant = keyof typeof VARIANTS;\n","/**\n * Cross-Platform Animation Utilities\n *\n * Provides consistent animation definitions for both web (Framer Motion)\n * and React Native (Animated API) platforms\n */\n\nimport { animationTokens, platform } from \"../styles/design-tokens\";\n\n// Web Animation Variants (Framer Motion)\nexport const webAnimations = {\n  // Fade animations\n  fadeIn: {\n    initial: { opacity: 0 },\n    animate: { opacity: 1 },\n    exit: { opacity: 0 },\n    transition: {\n      duration: animationTokens.duration.normal / 1000,\n      type: \"tween\",\n      ease: \"easeOut\",\n    },\n  },\n\n  fadeInUp: {\n    initial: { opacity: 0, y: 20 },\n    animate: { opacity: 1, y: 0 },\n    exit: { opacity: 0, y: -10 },\n    transition: {\n      duration: animationTokens.duration.normal / 1000,\n      type: \"tween\",\n      ease: \"easeOut\",\n    },\n  },\n\n  fadeInDown: {\n    initial: { opacity: 0, y: -20 },\n    animate: { opacity: 1, y: 0 },\n    exit: { opacity: 0, y: 10 },\n    transition: {\n      duration: animationTokens.duration.normal / 1000,\n      type: \"tween\",\n      ease: \"easeOut\",\n    },\n  },\n\n  // Scale animations\n  scaleIn: {\n    initial: { opacity: 0, scale: 0.9 },\n    animate: { opacity: 1, scale: 1 },\n    exit: { opacity: 0, scale: 0.9 },\n    transition: {\n      duration: animationTokens.duration.fast / 1000,\n      type: \"spring\",\n      stiffness: 400,\n      damping: 25,\n    },\n  },\n\n  // Slide animations\n  slideUp: {\n    initial: { y: \"100%\", opacity: 0 },\n    animate: { y: 0, opacity: 1 },\n    exit: { y: \"100%\", opacity: 0 },\n    transition: {\n      duration: animationTokens.duration.normal / 1000,\n      type: \"tween\",\n      ease: \"easeOut\",\n    },\n  },\n\n  slideDown: {\n    initial: { y: \"-100%\", opacity: 0 },\n    animate: { y: 0, opacity: 1 },\n    exit: { y: \"-100%\", opacity: 0 },\n    transition: {\n      duration: animationTokens.duration.normal / 1000,\n      type: \"tween\",\n      ease: \"easeOut\",\n    },\n  },\n\n  slideLeft: {\n    initial: { x: \"100%\", opacity: 0 },\n    animate: { x: 0, opacity: 1 },\n    exit: { x: \"-100%\", opacity: 0 },\n    transition: {\n      duration: animationTokens.duration.normal / 1000,\n      type: \"tween\",\n      ease: \"easeOut\",\n    },\n  },\n\n  slideRight: {\n    initial: { x: \"-100%\", opacity: 0 },\n    animate: { x: 0, opacity: 1 },\n    exit: { x: \"100%\", opacity: 0 },\n    transition: {\n      duration: animationTokens.duration.normal / 1000,\n      type: \"tween\",\n      ease: \"easeOut\",\n    },\n  },\n\n  // Audio-specific animations\n  waveform: {\n    animate: {\n      scaleY: [1, 1.5, 0.5, 1.2, 1],\n    },\n    transition: {\n      duration: animationTokens.audio.waveform.duration / 1000,\n      repeat: Infinity,\n      ease: animationTokens.easing.web.easeInOut,\n    },\n  },\n\n  equalizer: {\n    animate: {\n      height: [\"20%\", \"100%\", \"60%\", \"80%\", \"40%\"],\n    },\n    transition: {\n      duration: animationTokens.audio.equalizer.duration / 1000,\n      repeat: Infinity,\n      ease: animationTokens.easing.web.easeInOut,\n    },\n  },\n\n  pulse: {\n    animate: {\n      scale: [1, 1.05, 1],\n      opacity: [0.8, 1, 0.8],\n    },\n    transition: {\n      duration: animationTokens.audio.pulse.duration / 1000,\n      repeat: Infinity,\n      ease: animationTokens.easing.web.easeInOut,\n    },\n  },\n\n  playButton: {\n    whileHover: { scale: 1.05 },\n    whileTap: { scale: 0.95 },\n    transition: {\n      duration: animationTokens.audio.playButton.duration / 1000,\n      ease: animationTokens.easing.web.easeOut, // Use easeOut instead of spring\n    },\n  },\n\n  // Interactive animations\n  buttonHover: {\n    whileHover: { scale: 1.02, y: -2 },\n    whileTap: { scale: 0.98 },\n    transition: {\n      duration: animationTokens.duration.fast / 1000,\n      type: \"spring\",\n      stiffness: 300,\n      damping: 20,\n    },\n  },\n\n  cardHover: {\n    whileHover: {\n      y: -4,\n      boxShadow: \"0 12px 48px rgba(0, 0, 0, 0.15)\",\n    },\n    transition: {\n      duration: animationTokens.duration.normal / 1000,\n      type: \"tween\",\n      ease: \"easeOut\",\n    },\n  },\n\n  // Layout animations\n  listItem: {\n    initial: { opacity: 0, x: -20 },\n    animate: { opacity: 1, x: 0 },\n    exit: { opacity: 0, x: 20 },\n    transition: {\n      duration: animationTokens.duration.normal / 1000,\n      type: \"tween\",\n      ease: \"easeOut\",\n    },\n  },\n\n  staggerContainer: {\n    animate: {\n      transition: {\n        staggerChildren: 0.1,\n        delayChildren: 0.1,\n      },\n    },\n  },\n} as const;\n\n// React Native Animation Helpers\nexport const nativeAnimations = {\n  // Create fade animation\n  createFadeAnimation: (\n    animatedValue: any, // Animated.Value\n    toValue: number,\n    duration: number = animationTokens.duration.normal,\n  ) => {\n    if (platform.isNative) {\n      const Animated = require(\"react-native\").Animated;\n      return Animated.timing(animatedValue, {\n        toValue,\n        duration,\n        useNativeDriver: true,\n      });\n    }\n    return null;\n  },\n\n  // Create scale animation\n  createScaleAnimation: (\n    animatedValue: any, // Animated.Value\n    toValue: number,\n    duration: number = animationTokens.duration.fast,\n  ) => {\n    if (platform.isNative) {\n      const Animated = require(\"react-native\").Animated;\n      return Animated.spring(animatedValue, {\n        toValue,\n        useNativeDriver: true,\n        tension: 100,\n        friction: 8,\n      });\n    }\n    return null;\n  },\n\n  // Create slide animation\n  createSlideAnimation: (\n    animatedValue: any, // Animated.Value\n    toValue: number,\n    duration: number = animationTokens.duration.normal,\n  ) => {\n    if (platform.isNative) {\n      const Animated = require(\"react-native\").Animated;\n      return Animated.timing(animatedValue, {\n        toValue,\n        duration,\n        useNativeDriver: true,\n      });\n    }\n    return null;\n  },\n\n  // Create sequence animation\n  createSequence: (...animations: any[]) => {\n    if (platform.isNative) {\n      const Animated = require(\"react-native\").Animated;\n      return Animated.sequence(animations.filter(Boolean));\n    }\n    return null;\n  },\n\n  // Create parallel animation\n  createParallel: (...animations: any[]) => {\n    if (platform.isNative) {\n      const Animated = require(\"react-native\").Animated;\n      return Animated.parallel(animations.filter(Boolean));\n    }\n    return null;\n  },\n\n  // Create stagger animation\n  createStagger: (delay: number, animations: any[]) => {\n    if (platform.isNative) {\n      const Animated = require(\"react-native\").Animated;\n      return Animated.stagger(delay, animations.filter(Boolean));\n    }\n    return null;\n  },\n\n  // Audio-specific native animations\n  createWaveformAnimation: (animatedValue: any) => {\n    if (platform.isNative) {\n      const Animated = require(\"react-native\").Animated;\n      return Animated.loop(\n        Animated.sequence([\n          Animated.timing(animatedValue, {\n            toValue: 1.5,\n            duration: animationTokens.audio.waveform.duration / 4,\n            useNativeDriver: true,\n          }),\n          Animated.timing(animatedValue, {\n            toValue: 0.5,\n            duration: animationTokens.audio.waveform.duration / 4,\n            useNativeDriver: true,\n          }),\n          Animated.timing(animatedValue, {\n            toValue: 1.2,\n            duration: animationTokens.audio.waveform.duration / 4,\n            useNativeDriver: true,\n          }),\n          Animated.timing(animatedValue, {\n            toValue: 1,\n            duration: animationTokens.audio.waveform.duration / 4,\n            useNativeDriver: true,\n          }),\n        ]),\n      );\n    }\n    return null;\n  },\n\n  createPulseAnimation: (animatedValue: any) => {\n    if (platform.isNative) {\n      const Animated = require(\"react-native\").Animated;\n      return Animated.loop(\n        Animated.sequence([\n          Animated.timing(animatedValue, {\n            toValue: 1.05,\n            duration: animationTokens.audio.pulse.duration / 2,\n            useNativeDriver: true,\n          }),\n          Animated.timing(animatedValue, {\n            toValue: 1,\n            duration: animationTokens.audio.pulse.duration / 2,\n            useNativeDriver: true,\n          }),\n        ]),\n      );\n    }\n    return null;\n  },\n} as const;\n\n// Cross-platform animation utilities - simplified for type safety\nexport const createAnimation = {\n  // Quick animation helpers\n  getDefaultTransition: (\n    duration: number = animationTokens.duration.normal,\n  ) => ({\n    type: \"tween\" as const,\n    duration: duration / 1000,\n    ease: \"easeOut\" as const,\n  }),\n\n  getSpringTransition: (stiffness: number = 300, damping: number = 20) => ({\n    type: \"spring\" as const,\n    stiffness,\n    damping,\n  }),\n};\n\n// Animation presets for common use cases\nexport const animationPresets = {\n  // Page transitions\n  pageTransition: webAnimations.slideUp,\n  modalTransition: webAnimations.fadeIn,\n\n  // Component interactions\n  buttonPress: webAnimations.scaleIn,\n  cardHover: webAnimations.cardHover,\n\n  // List animations\n  listItemEnter: webAnimations.slideRight,\n  listItemExit: webAnimations.slideLeft,\n\n  // Audio component animations\n  playButtonPress: webAnimations.playButton,\n  waveformPulse: webAnimations.waveform,\n} as const;\n\n// Performance optimization utilities\nexport const optimizeForPerformance = {\n  // Reduce motion for accessibility\n  respectsReducedMotion: () => {\n    if (platform.isWeb && typeof window !== \"undefined\") {\n      return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n    }\n    return false;\n  },\n\n  // Get optimized duration based on user preference\n  getOptimizedDuration: (duration: number) => {\n    return optimizeForPerformance.respectsReducedMotion() ? 0 : duration;\n  },\n\n  // GPU-optimized properties for web\n  gpuOptimized: {\n    willChange: \"transform, opacity\",\n    backfaceVisibility: \"hidden\" as const,\n    perspective: 1000,\n  },\n\n  // Layout optimization\n  preventLayout: {\n    transform: \"translateZ(0)\",\n    willChange: \"transform, opacity\",\n  },\n} as const;\n\n// Legacy exports for backward compatibility\nexport const fadeIn = webAnimations.fadeIn;\nexport const slideIn = webAnimations.slideUp;\nexport const scaleIn = webAnimations.scaleIn;\n\nexport type WebAnimation = (typeof webAnimations)[keyof typeof webAnimations];\nexport type AnimationPreset =\n  (typeof animationPresets)[keyof typeof animationPresets];\n\n// Framer Motion presets (standardized animation constants)\nexport * from \"./motion-presets\";\n","/**\n * Environment variable utilities with fallbacks for development/demo purposes\n */\n\nexport interface EnvConfig {\n  supabaseUrl?: string;\n  supabaseAnonKey?: string;\n  firebaseConfig?: string;\n  authProvider?: \"supabase\" | \"firebase\" | \"auth0\" | \"demo\";\n}\n\n/**\n * Get environment variable with fallback\n */\nexport function getEnvVar(key: string, fallback?: string): string | undefined {\n  if (typeof process !== \"undefined\" && process.env) {\n    return process.env[key] || fallback;\n  }\n\n  // Client-side environment variables (Next.js pattern)\n  if (typeof window !== \"undefined\" && (window as any).__ENV__) {\n    return (window as any).__ENV__[key] || fallback;\n  }\n\n  return fallback;\n}\n\n/**\n * Detect authentication provider from environment\n * Returns demo provider as fallback for development\n */\nexport function detectAuthProvider(): EnvConfig {\n  const supabaseUrl = getEnvVar(\"NEXT_PUBLIC_SUPABASE_URL\");\n  const supabaseAnonKey = getEnvVar(\"NEXT_PUBLIC_SUPABASE_ANON_KEY\");\n  const firebaseConfig = getEnvVar(\"NEXT_PUBLIC_FIREBASE_CONFIG\");\n\n  // Check for Supabase\n  if (supabaseUrl && supabaseAnonKey) {\n    return {\n      authProvider: \"supabase\",\n      supabaseUrl,\n      supabaseAnonKey,\n    };\n  }\n\n  // Check for Firebase\n  if (firebaseConfig) {\n    return {\n      authProvider: \"firebase\",\n      firebaseConfig,\n    };\n  }\n\n  // Fallback to demo mode for development\n  console.warn(\n    \"No authentication provider configuration found. Using demo mode.\",\n  );\n  return {\n    authProvider: \"demo\",\n    supabaseUrl: \"https://demo.supabase.co\",\n    supabaseAnonKey: \"demo-anon-key\",\n  };\n}\n\n/**\n * Validate required environment variables\n */\nexport function validateEnvConfig(config: EnvConfig): string[] {\n  const errors: string[] = [];\n\n  if (config.authProvider === \"supabase\") {\n    if (\n      !config.supabaseUrl ||\n      config.supabaseUrl === \"https://demo.supabase.co\"\n    ) {\n      errors.push(\n        \"NEXT_PUBLIC_SUPABASE_URL is required for Supabase authentication\",\n      );\n    }\n    if (!config.supabaseAnonKey || config.supabaseAnonKey === \"demo-anon-key\") {\n      errors.push(\n        \"NEXT_PUBLIC_SUPABASE_ANON_KEY is required for Supabase authentication\",\n      );\n    }\n  }\n\n  if (config.authProvider === \"firebase\") {\n    if (!config.firebaseConfig) {\n      errors.push(\n        \"NEXT_PUBLIC_FIREBASE_CONFIG is required for Firebase authentication\",\n      );\n    }\n  }\n\n  return errors;\n}\n\n/**\n * Get environment info for debugging\n */\nexport function getEnvInfo(): Record<string, any> {\n  return {\n    hasProcess: typeof process !== \"undefined\",\n    hasWindow: typeof window !== \"undefined\",\n    nodeEnv: getEnvVar(\"NODE_ENV\", \"development\"),\n    authProvider: detectAuthProvider().authProvider,\n    isProduction: getEnvVar(\"NODE_ENV\") === \"production\",\n  };\n}\n","// src/native/index.ts - NATIVE BUILD - Can safely import React Native\n\n// 🆕 V2 Primitive Components (Standardized Cross-Platform)\n// High-impact components with consistent APIs across web and native\nexport * from \"../components/primitives/native\";\n\n// Export native-specific components\nexport * from \"../components/layout/native/section\";\nexport * from \"../components/layout/native/grid\";\n\n// 🏗️ Layout & Navigation System - Native Components (v0.21.0)\nexport * from \"../components/app-shell/native\";\nexport * from \"../components/navigation/native\";\nexport * from \"../components/tour/native\";\nexport * from \"../components/layout/templates/native\";\n\n// Export native-specific hooks\nexport * from \"../hooks/native/use-keyboard\";\nexport * from \"../hooks/native/use-dimensions\";\n\n// ✅ Essential network hooks for CLI templates (critical)\nexport { useNetworkInfo } from \"../hooks/network/use-network-info\";\nexport { useOfflineState } from \"../hooks/network/use-offline-state\";\n\n// ✅ Mobile navigation and responsive components\nexport { ResponsiveHeader } from \"../components/ui/responsive-header\";\nexport { MobileNavigation } from \"../components/ui/mobile-navigation\";\nexport { HamburgerIcon } from \"../components/ui/hamburger-icon\";\n\n// ✅ Native Mobile Components (CLI Template Requirements)\nexport { NativeMobileHero } from \"../components/ui/mobile-hero/native\";\nexport { NativeMobileContainer } from \"../components/ui/mobile-container/native\";\nexport { NativePageTransition } from \"../components/ui/page-transition/native\";\nexport { NativeNetworkAwareContent } from \"../components/ui/network-aware-content/native\";\nexport { NativeOfflineWrapper } from \"../components/ui/offline-wrapper/native\";\nexport { NativeToast } from \"../components/ui/toast/native\";\n\n// ✅ Native Auth Forms (CLI Template Requirements)\nexport { LoginForm } from \"../components/ui/login-form/native\";\nexport { SignupForm } from \"../components/ui/signup-form/native\";\n\n// ✅ Export types for CLI templates\nexport type { NativeMobileHeroProps } from \"../components/ui/mobile-hero/native\";\nexport type { NativeMobileContainerProps } from \"../components/ui/mobile-container/native\";\nexport type { NativePageTransitionProps } from \"../components/ui/page-transition/native\";\nexport type { NativeNetworkAwareContentProps } from \"../components/ui/network-aware-content/native\";\nexport type { NativeOfflineWrapperProps } from \"../components/ui/offline-wrapper/native\";\nexport type { NativeToastProps, ToastRef } from \"../components/ui/toast/native\";\nexport type { LoginFormProps } from \"../components/ui/login-form/native\";\nexport type { SignupFormProps } from \"../components/ui/signup-form/native\";\n\n// Export native utilities\nexport * from \"../utils/native-styles\";\n\n// ✅ Core UI Components that exist and work\nexport * from \"../components/ui/button\";\nexport * from \"../components/ui/card\";\nexport * from \"../components/ui/input\";\n\n// ✅ Mobile Interactions & Performance Components that exist\nexport * from \"../components/ui/page-transition\";\nexport * from \"../components/ui/swipeable-card\";\nexport * from \"../components/ui/pull-to-refresh\";\nexport * from \"../components/ui/lazy-image\";\nexport * from \"../components/ui/progressive-image\";\nexport * from \"../components/ui/virtual-scroll-list\";\n\n// ✅ Network & Offline Components that exist\nexport * from \"../components/ui/network-aware-content\";\nexport * from \"../components/ui/offline-wrapper\";\n\n// Export shared utilities\nexport * from \"../utils/cn\";\nexport * from \"../utils/formats\";\nexport * from \"../utils/validation\";\nexport * from \"../utils/animations\";\nexport * from \"../utils/env\";\n\n// Export shared config\nexport * from \"../config/platform\";\nexport * from \"../config/constants\";\n\n// Export shared types\nexport * from \"../types\";\n\n// Export native-specific styles and themes\nexport * from \"../styles/themes/native\";\n\n// Platform detection for React Native\nimport { Platform } from \"react-native\";\nexport const isNative = true;\nexport const isIOS = Platform.OS === \"ios\";\nexport const isAndroid = Platform.OS === \"android\";\n\n// 🚀 Performance-Optimized Components (v0.23.0)\n// Advanced data visualization and performance components for React Native\nexport * from \"../components/ui/chart/native\";\n\n// Advanced state management (cross-platform)\nexport * from \"../stores/optimized-store\";\n","import React, { useMemo, useCallback } from \"react\";\nimport {\n  View,\n  StyleSheet,\n  Dimensions,\n  PanResponder,\n  Animated,\n} from \"react-native\";\n// import { useOptimizedMemo } from '@/hooks/performance/use-virtualization';\n\nconst { width: screenWidth } = Dimensions.get(\"window\");\n\nexport interface ChartDataPoint {\n  x: number | string | Date;\n  y: number;\n  label?: string;\n  color?: string;\n}\n\nexport interface ChartProps {\n  data: ChartDataPoint[];\n  type: \"line\" | \"bar\" | \"area\" | \"pie\";\n  width?: number;\n  height?: number;\n  colors?: string[];\n  showGrid?: boolean;\n  showAxes?: boolean;\n  animate?: boolean;\n  onDataPointPress?: (point: ChartDataPoint, index: number) => void;\n  style?: any;\n}\n\ninterface ChartDimensions {\n  width: number;\n  height: number;\n  margin: { top: number; right: number; bottom: number; left: number };\n  innerWidth: number;\n  innerHeight: number;\n}\n\n/**\n * High-performance native Chart component with SVG rendering\n * Optimized for React Native with smooth animations and touch interactions\n */\nexport const Chart: React.FC<ChartProps> = ({\n  data,\n  type,\n  width = screenWidth - 40,\n  height = 250,\n  colors = [\"#3b82f6\", \"#ef4444\", \"#10b981\", \"#f59e0b\", \"#8b5cf6\"],\n  showGrid = true,\n  showAxes = true,\n  animate = true,\n  onDataPointPress,\n  style,\n}) => {\n  const animatedValue = React.useRef(new Animated.Value(0)).current;\n\n  React.useEffect(() => {\n    if (animate) {\n      Animated.timing(animatedValue, {\n        toValue: 1,\n        duration: 800,\n        useNativeDriver: false,\n      }).start();\n    }\n  }, [animate, animatedValue]);\n\n  const dimensions: ChartDimensions = useMemo(\n    () => ({\n      width,\n      height,\n      margin: { top: 20, right: 20, bottom: 40, left: 40 },\n      innerWidth: width - 60,\n      innerHeight: height - 60,\n    }),\n    [width, height],\n  );\n\n  // Optimized data processing for mobile performance\n  const processedData = useMemo(() => {\n    if (!data.length)\n      return {\n        points: [],\n        scales: { x: { min: 0, max: 1 }, y: { min: 0, max: 1 } },\n      };\n\n    const xValues = data.map((d) =>\n      typeof d.x === \"string\"\n        ? 0\n        : typeof d.x === \"number\"\n          ? d.x\n          : d.x.getTime(),\n    );\n    const yValues = data.map((d) => d.y);\n\n    const scales = {\n      x: { min: Math.min(...xValues), max: Math.max(...xValues) },\n      y: { min: Math.min(0, Math.min(...yValues)), max: Math.max(...yValues) },\n    };\n\n    const points = data.map((point, index) => ({\n      ...point,\n      x:\n        typeof point.x === \"string\"\n          ? index\n          : typeof point.x === \"number\"\n            ? point.x\n            : point.x.getTime(),\n      color: point.color || colors[index % colors.length],\n    }));\n\n    return { points, scales };\n  }, [data, colors]);\n\n  // Scale functions optimized for mobile\n  const xScale = useCallback(\n    (value: number) => {\n      const { scales } = processedData;\n      const range = scales.x.max - scales.x.min || 1;\n      return (\n        dimensions.margin.left +\n        ((value - scales.x.min) / range) * dimensions.innerWidth\n      );\n    },\n    [processedData, dimensions],\n  );\n\n  const yScale = useCallback(\n    (value: number) => {\n      const { scales } = processedData;\n      const range = scales.y.max - scales.y.min || 1;\n      return (\n        dimensions.margin.top +\n        dimensions.innerHeight -\n        ((value - scales.y.min) / range) * dimensions.innerHeight\n      );\n    },\n    [processedData, dimensions],\n  );\n\n  // Pan responder for touch interactions\n  const panResponder = useMemo(\n    () =>\n      PanResponder.create({\n        onStartShouldSetPanResponder: () => true,\n        onMoveShouldSetPanResponder: () => false,\n        onPanResponderGrant: (evt) => {\n          if (!onDataPointPress) return;\n\n          const { locationX } = evt.nativeEvent;\n          const { points } = processedData;\n\n          // Find closest data point\n          let closestIndex = 0;\n          let closestDistance = Infinity;\n\n          points.forEach((point, index) => {\n            const pointX = xScale(point.x as number);\n            const distance = Math.abs(locationX - pointX);\n\n            if (distance < closestDistance) {\n              closestDistance = distance;\n              closestIndex = index;\n            }\n          });\n\n          const closestPoint = points[closestIndex];\n          if (closestDistance < 20 && closestPoint) {\n            // 20px threshold\n            onDataPointPress(closestPoint, closestIndex);\n          }\n        },\n      }),\n    [processedData, xScale, onDataPointPress],\n  );\n\n  // Simplified chart rendering for React Native without SVG dependency\n  const renderChart = () => {\n    const { points } = processedData;\n    if (!points.length) return null;\n\n    // Simple bar chart implementation using View components\n    if (type === \"bar\") {\n      const barWidth = (dimensions.innerWidth / points.length) * 0.6;\n\n      return points.map((point, index) => {\n        const x = xScale(point.x as number) - barWidth / 2;\n        const y = yScale(point.y);\n        const barHeight = yScale(0) - y;\n\n        return (\n          <View\n            key={index}\n            style={[\n              styles.bar,\n              {\n                position: \"absolute\",\n                left: x,\n                top: y,\n                width: barWidth,\n                height: Math.max(barHeight, 2),\n                backgroundColor: point.color,\n              },\n            ]}\n          />\n        );\n      });\n    }\n\n    // For other types, render simple dots\n    return points.map((point, index) => (\n      <View\n        key={index}\n        style={[\n          styles.dot,\n          {\n            position: \"absolute\",\n            left: xScale(point.x as number) - 4,\n            top: yScale(point.y) - 4,\n            backgroundColor: point.color,\n          },\n        ]}\n      />\n    ));\n  };\n\n  return (\n    <View style={[styles.container, style]} {...panResponder.panHandlers}>\n      <View\n        style={{\n          width: dimensions.width,\n          height: dimensions.height,\n          position: \"relative\",\n          backgroundColor: \"#f9fafb\",\n          borderRadius: 8,\n        }}\n      >\n        {renderChart()}\n      </View>\n    </View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    backgroundColor: \"transparent\",\n  },\n  bar: {\n    borderRadius: 2,\n  },\n  dot: {\n    width: 8,\n    height: 8,\n    borderRadius: 4,\n  },\n});\n","import { create } from \"zustand\";\nimport { subscribeWithSelector, devtools, persist } from \"zustand/middleware\";\nimport { immer } from \"zustand/middleware/immer\";\n\n// Generic store creator with performance optimizations\nexport interface OptimizedStoreOptions<T> {\n  name: string;\n  initialState: T;\n  persist?: {\n    storage?: any; // AsyncStorage for React Native, localStorage for web\n    partialize?: (state: T) => Partial<T>;\n    version?: number;\n    migrate?: (persistedState: any, version: number) => T;\n  };\n  devtools?: boolean;\n  subscriptions?: boolean;\n  immer?: boolean;\n}\n\n/**\n * Creates an optimized Zustand store with performance middleware\n * Includes immer for immutable updates, persistence, and dev tools\n */\nexport function createOptimizedStore<\n  T extends Record<string, any>,\n  A extends Record<string, any>,\n>(\n  options: OptimizedStoreOptions<T>,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  storeDefinition: any,\n) {\n  let store = storeDefinition;\n\n  // Apply immer middleware for immutable updates\n  if (options.immer !== false) {\n    store = immer(store);\n  }\n\n  // Apply subscribeWithSelector for granular subscriptions\n  if (options.subscriptions !== false) {\n    store = subscribeWithSelector(store);\n  }\n\n  // Apply persistence middleware\n  if (options.persist) {\n    store = persist(store, {\n      name: `${options.name}-storage`,\n      ...options.persist,\n    });\n  }\n\n  // Apply devtools middleware (only in development)\n  if (options.devtools !== false && process.env.NODE_ENV === \"development\") {\n    store = devtools(store, { name: options.name });\n  }\n\n  return create<T & A>()(store);\n}\n\n/**\n * Hook for optimized store subscriptions with selector caching\n */\nexport function useOptimizedStoreSelector<T, R>(\n  store: (state: T) => R,\n  equalityFn?: (a: R, b: R) => boolean,\n) {\n  // Custom equality function for shallow comparison\n  const shallowEqual = (a: R, b: R): boolean => {\n    if (a === b) return true;\n\n    if (\n      typeof a !== \"object\" ||\n      typeof b !== \"object\" ||\n      a === null ||\n      b === null\n    ) {\n      return false;\n    }\n\n    const keysA = Object.keys(a as any);\n    const keysB = Object.keys(b as any);\n\n    if (keysA.length !== keysB.length) return false;\n\n    for (const key of keysA) {\n      if (!keysB.includes(key) || (a as any)[key] !== (b as any)[key]) {\n        return false;\n      }\n    }\n\n    return true;\n  };\n\n  return store(equalityFn || (shallowEqual as any));\n}\n\n// Example: Optimized form state management\ninterface FormState {\n  values: Record<string, any>;\n  errors: Record<string, string>;\n  touched: Set<string>;\n  isSubmitting: boolean;\n  isDirty: boolean;\n}\n\ninterface FormActions {\n  setValue: (field: string, value: any) => void;\n  setError: (field: string, error: string) => void;\n  clearError: (field: string) => void;\n  setTouched: (field: string) => void;\n  setSubmitting: (isSubmitting: boolean) => void;\n  resetForm: () => void;\n  validateField: (\n    field: string,\n    validator: (value: any) => string | null,\n  ) => void;\n}\n\ntype FormStore = FormState & FormActions;\n\nexport const createFormStore = (initialValues: Record<string, unknown> = {}) =>\n  createOptimizedStore<FormState, FormActions>(\n    {\n      name: \"form-store\",\n      initialState: {\n        values: initialValues,\n        errors: {},\n        touched: new Set(),\n        isSubmitting: false,\n        isDirty: false,\n      },\n      immer: true,\n      persist: {\n        partialize: (state: FormState) => ({ values: state.values }), // Only persist values\n      },\n    },\n    (set: (fn: (state: FormStore) => void) => void, get: () => FormStore) => ({\n      // Initial state\n      values: initialValues,\n      errors: {},\n      touched: new Set(),\n      isSubmitting: false,\n      isDirty: false,\n\n      // Actions\n      setValue: (field: string, value: unknown) =>\n        set((state) => {\n          state.values[field] = value;\n          state.isDirty = true;\n          // Clear error when value changes\n          if (state.errors[field]) {\n            delete state.errors[field];\n          }\n        }),\n\n      setError: (field: string, error: string) =>\n        set((state) => {\n          state.errors[field] = error;\n        }),\n\n      clearError: (field: string) =>\n        set((state) => {\n          delete state.errors[field];\n        }),\n\n      setTouched: (field: string) =>\n        set((state) => {\n          state.touched.add(field);\n        }),\n\n      setSubmitting: (isSubmitting: boolean) =>\n        set((state) => {\n          state.isSubmitting = isSubmitting;\n        }),\n\n      resetForm: () =>\n        set((state) => {\n          state.values = initialValues;\n          state.errors = {};\n          state.touched = new Set();\n          state.isSubmitting = false;\n          state.isDirty = false;\n        }),\n\n      validateField: (\n        field: string,\n        validator: (value: unknown) => string | null,\n      ) => {\n        const value = get().values[field];\n        const error = validator(value);\n\n        set((state) => {\n          if (error) {\n            state.errors[field] = error;\n          } else {\n            delete state.errors[field];\n          }\n        });\n      },\n    }),\n  );\n\n// Example: Optimized data fetching store\ninterface DataState<T> {\n  data: T | null;\n  loading: boolean;\n  error: string | null;\n  lastFetched: number | null;\n  cache: Map<string, { data: T; timestamp: number }>;\n}\n\ninterface DataActions<T> {\n  setData: (data: T) => void;\n  setLoading: (loading: boolean) => void;\n  setError: (error: string | null) => void;\n  fetchData: (\n    key: string,\n    fetcher: () => Promise<T>,\n    ttl?: number,\n  ) => Promise<void>;\n  clearCache: () => void;\n  invalidateCache: (key: string) => void;\n}\n\ntype DataStore<T> = DataState<T> & DataActions<T>;\n\nexport const createDataStore = <T>(\n  cacheTTL = 5 * 60 * 1000, // 5 minutes default TTL\n) =>\n  createOptimizedStore<DataState<T>, DataActions<T>>(\n    {\n      name: \"data-store\",\n      initialState: {\n        data: null,\n        loading: false,\n        error: null,\n        lastFetched: null,\n        cache: new Map(),\n      },\n      immer: true,\n    },\n    (\n      set: (fn: (state: DataStore<T>) => void) => void,\n      get: () => DataStore<T>,\n    ) => ({\n      // Initial state\n      data: null,\n      loading: false,\n      error: null,\n      lastFetched: null,\n      cache: new Map(),\n\n      // Actions\n      setData: (data: T) =>\n        set((state) => {\n          state.data = data;\n          state.lastFetched = Date.now();\n          state.error = null;\n        }),\n\n      setLoading: (loading: boolean) =>\n        set((state) => {\n          state.loading = loading;\n        }),\n\n      setError: (error: string | null) =>\n        set((state) => {\n          state.error = error;\n          state.loading = false;\n        }),\n\n      fetchData: async (\n        key: string,\n        fetcher: () => Promise<T>,\n        ttl = cacheTTL,\n      ) => {\n        const state = get();\n\n        // Check cache first\n        const cached = state.cache.get(key);\n        if (cached && Date.now() - cached.timestamp < ttl) {\n          set((state) => {\n            state.data = cached.data;\n            state.error = null;\n            state.loading = false;\n          });\n          return;\n        }\n\n        // Fetch fresh data\n        set((state) => {\n          state.loading = true;\n          state.error = null;\n        });\n\n        try {\n          const data = await fetcher();\n\n          set((state) => {\n            state.data = data;\n            state.loading = false;\n            state.error = null;\n            state.lastFetched = Date.now();\n\n            // Update cache\n            state.cache.set(key, {\n              data,\n              timestamp: Date.now(),\n            });\n          });\n        } catch (error) {\n          set((state) => {\n            state.error =\n              error instanceof Error ? error.message : \"An error occurred\";\n            state.loading = false;\n          });\n        }\n      },\n\n      clearCache: () =>\n        set((state) => {\n          state.cache.clear();\n        }),\n\n      invalidateCache: (key: string) =>\n        set((state) => {\n          state.cache.delete(key);\n        }),\n    }),\n  );\n\n// Optimized global state manager with performance monitoring\nexport class OptimizedStateManager {\n  private stores = new Map<string, any>();\n  private subscriptions = new Map<string, Set<() => void>>();\n  private performanceMetrics = {\n    updateCount: 0,\n    averageUpdateTime: 0,\n    totalUpdateTime: 0,\n  };\n\n  createStore<T extends Record<string, any>, A extends Record<string, any>>(\n    name: string,\n    options: OptimizedStoreOptions<T>,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    definition: any,\n  ) {\n    if (this.stores.has(name)) {\n      throw new Error(`Store \"${name}\" already exists`);\n    }\n\n    const store = createOptimizedStore(options, definition);\n    this.stores.set(name, store);\n\n    // Track performance metrics in development\n    if (process.env.NODE_ENV === \"development\") {\n      const originalSet = store.setState;\n      store.setState = (...args: Parameters<typeof originalSet>) => {\n        const start = performance.now();\n        const result = originalSet.apply(store, args);\n        const duration = performance.now() - start;\n\n        this.updatePerformanceMetrics(name, duration);\n\n        return result;\n      };\n    }\n\n    return store;\n  }\n\n  getStore<T>(name: string): T | null {\n    return this.stores.get(name) || null;\n  }\n\n  destroyStore(name: string) {\n    const store = this.stores.get(name);\n    if (store && typeof store.destroy === \"function\") {\n      store.destroy();\n    }\n    this.stores.delete(name);\n    this.subscriptions.delete(name);\n  }\n\n  private updatePerformanceMetrics(storeName: string, duration: number) {\n    this.performanceMetrics.updateCount += 1;\n    this.performanceMetrics.totalUpdateTime += duration;\n    this.performanceMetrics.averageUpdateTime =\n      this.performanceMetrics.totalUpdateTime /\n      this.performanceMetrics.updateCount;\n\n    // Warn if updates are consistently slow\n    if (duration > 16 && this.performanceMetrics.updateCount % 10 === 0) {\n      console.warn(\n        `[State Manager] Store \"${storeName}\" update took ${duration.toFixed(2)}ms. ` +\n          `Average: ${this.performanceMetrics.averageUpdateTime.toFixed(2)}ms`,\n      );\n    }\n  }\n\n  getPerformanceMetrics() {\n    return { ...this.performanceMetrics };\n  }\n}\n\n// Global instance\nexport const stateManager = new OptimizedStateManager();\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAa,cA6BA,oBAMA;AAnCb;AAAA;AAAA;AAAO,IAAM,eAAe;AAAA;AAAA,MAE1B,SAAS;AAAA,QACP,IAAI;AAAA,QACJ,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACP;AAAA;AAAA,MAEA,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACP;AAAA;AAAA,MAEA,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,MACP,MAAM;AAAA,IACR;AAEO,IAAM,qBAAqB;AAAA,MAChC,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM;AAAA,IACR;AAEO,IAAM,UAAU;AAAA,MACrB,UAAU;AAAA,MACV,OAAO;AAAA,MACP,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA;AAAA;;;ACzCA;AAAA;AAAA;AAAA;AAAA;AAAA,IAGa,OAoCA;AAvCb;AAAA;AAAA;AACA;AAEO,IAAM,QAAmB;AAAA,MAC9B,QAAQ;AAAA,QACN,SAAS,aAAa,QAAQ,GAAG;AAAA,QACjC,WAAW,aAAa,KAAK,GAAG;AAAA,QAChC,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,MAAM,aAAa,KAAK,GAAG;AAAA,QAC3B,eAAe,aAAa,KAAK,GAAG;AAAA,QACpC,QAAQ,aAAa,KAAK,GAAG;AAAA,QAC7B,SAAS,aAAa;AAAA,QACtB,SAAS,aAAa;AAAA,QACtB,OAAO,aAAa;AAAA,MACtB;AAAA,MACA,SAAS;AAAA,QACP,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AAAA,MACA,cAAc;AAAA,QACZ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,MACR;AAAA,MACA,UAAU;AAAA,QACR,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AAAA,IACF;AAGO,IAAM,SAAS;AAAA,MACpB,OAAO;AAAA,QACL,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,QAChB,UAAU;AAAA,QACV,qBAAqB;AAAA,QACrB,aAAa;AAAA,QACb,wBAAwB;AAAA,QACxB,aAAa;AAAA,QACb,wBAAwB;AAAA,QACxB,eAAe;AAAA,QACf,0BAA0B;AAAA,QAC1B,WAAW;AAAA,QACX,sBAAsB;AAAA,QACtB,YAAY;AAAA,QACZ,uBAAuB;AAAA,QACvB,iBAAiB;AAAA,QACjB,4BAA4B;AAAA,QAC5B,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,UAAU;AAAA,QACV,YAAY;AAAA,MACd;AAAA,MACA,MAAM;AAAA,QACJ,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,QAChB,UAAU;AAAA,QACV,qBAAqB;AAAA,QACrB,aAAa;AAAA,QACb,wBAAwB;AAAA,QACxB,aAAa;AAAA,QACb,wBAAwB;AAAA,QACxB,eAAe;AAAA,QACf,0BAA0B;AAAA,QAC1B,WAAW;AAAA,QACX,sBAAsB;AAAA,QACtB,YAAY;AAAA,QACZ,uBAAuB;AAAA,QACvB,iBAAiB;AAAA,QACjB,4BAA4B;AAAA,QAC5B,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,UAAU;AAAA,MACZ;AAAA,IACF;AAAA;AAAA;;;ACnFA;AAAA;AAAA,eAAAA;AAAA;AAAA,IAGaA;AAHb;AAAA;AAAA;AACA;AAEO,IAAMA,SAAmB;AAAA,MAC9B,QAAQ;AAAA,QACN,SAAS,aAAa,QAAQ,GAAG;AAAA,QACjC,WAAW,aAAa,KAAK,GAAG;AAAA,QAChC,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,MAAM,aAAa,KAAK,GAAG;AAAA,QAC3B,eAAe,aAAa,KAAK,GAAG;AAAA,QACpC,QAAQ,aAAa,KAAK,GAAG;AAAA,QAC7B,SAAS,aAAa;AAAA,QACtB,SAAS,aAAa;AAAA,QACtB,OAAO,aAAa;AAAA,MACtB;AAAA,MACA,SAAS;AAAA,QACP,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AAAA,MACA,cAAc;AAAA,QACZ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,MACR;AAAA,MACA,UAAU;AAAA,QACR,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AAAA,IACF;AAAA;AAAA;;;ACnCA,YAAYC,YAAW;;;ACAvB,IAAM,YAAY,MAAe;AAC/B,MAAI;AACF,WAAO,OAAO,WAAW,eAAe,OAAO,aAAa;AAAA,EAC9D,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAM,eAAe,MAAe;AAClC,MAAI;AACF,WACE,OAAO,cAAc,eAAe,UAAU,YAAY;AAAA,EAE9D,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAM,aAAa,MAAe;AAChC,MAAI;AACF,WAAO,CAAC,EACN,OAAO,WAAW,eAAgB,OAAgC;AAAA,EAEtE,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,IAAM,QAAQ,UAAU;AACxB,IAAM,WAAW,aAAa;AAC9B,IAAM,SAAS,WAAW;AAE1B,IAAM,WAAW;AAAA,EACtB,IAAK,WAAW,WAAW;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ,CAAI,YAAsC;AAChD,WAAO,WAAW,QAAQ,SAAS,QAAQ;AAAA,EAC7C;AAAA;AAAA,EAEA,IAAI,UAAwC;AAC1C,QAAI,SAAU,QAAO;AACrB,QAAI,MAAO,QAAO;AAClB,WAAO;AAAA,EACT;AAAA,EACA,IAAI,WAAoB;AACtB,WAAO,CAAC,SAAS,CAAC;AAAA,EACpB;AAAA,EACA,gBAAgB,CAAI,YAKX;AACP,QAAI,UAAU,QAAQ,SAAS,OAAW,QAAO,QAAQ;AACzD,QAAI,YAAY,QAAQ,WAAW,OAAW,QAAO,QAAQ;AAC7D,QAAI,SAAS,QAAQ,QAAQ,OAAW,QAAO,QAAQ;AACvD,WAAO,QAAQ;AAAA,EACjB;AACF;AA4BO,IAAM,YAA4B;AAAA,EACvC,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,cAAc;AAAA,IACZ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,MAAM;AAAA,EACR;AAAA,EACA,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AACF;AAEO,IAAM,eAA+B;AAAA,EAC1C,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,cAAc;AAAA,IACZ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,MAAM;AAAA,EACR;AAAA,EACA,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AACF;AAEO,IAAM,YAAY,MAAsB;AAC7C,SAAO,SAAS,OAAO,EAAE,KAAK,WAAW,QAAQ,aAAa,CAAC;AACjE;;;ACjGA,IAAM,WAAW,SAAS,QAAQ,wCAAiB,QAAQ;AAE3D,IAAM,cAAc,SAAS,WAAW,8CAAoB,QAAQ;AAE7D,IAAMC,SAAQ,SAAS,OAAO;AAAA,EACnC,KAAK;AAAA,EACL,QAAQ;AACV,CAAC;AAMM,IAAMC,UAAS,SAAS,QAAQ,wCAAiB,SAAS,CAAC;;;ACrClE,IAAI;AAKJ,IAAI,OAAO,WAAW,eAAe,OAAO,iBAAiB;AAE3D,eAAa,UAAQ,cAAc,EAAE;AACvC,OAAO;AAGL,eAAa;AAAA,IACX,QAAQ,CAA2BC,aAAiBA;AAAA,IACpD,SAAS,CAAI,UAAqC;AAChD,UAAI,CAAC,OAAO;AACV,eAAO,CAAC;AAAA,MACV;AACA,UAAI,MAAM,QAAQ,KAAK,GAAG;AAExB,eAAO,MAAM,OAAO,CAAC,KAAU,MAAW;AACxC,iBAAO,EAAE,GAAG,KAAK,GAAI,IAAI,WAAW,QAAQ,CAAC,IAAI,CAAC,EAAG;AAAA,QACvD,GAAG,CAAC,CAAC;AAAA,MACP;AACA,aAAO;AAAA,IACT;AAAA,IACA,SAAS,CACP,QACA,WACmB,CAAC,QAAQ,MAAM;AAAA,IACpC,eAAe;AAAA,IACf,oBAAoB;AAAA,MAClB,UAAU;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,IACV;AAAA,IACA,cAAc;AAAA,EAChB;AACF;AAEO,SAAS,aAAuCA,UAAc;AACnE,SAAO,WAAW,OAAOA,QAAM;AACjC;AAGO,SAAS,eACXA,UACW;AAGd,SAAO,WAAW,QAAQA,QAAM;AAClC;AAGO,IAAM,SAAS;AAAA,EACpB,QAAQ,CAAC,YAAoB,OAAkB;AAAA,IAC7C,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,OAAO;AAAA,MACP,QAAQ,YAAY;AAAA,IACtB;AAAA,IACA,eAAe,MAAM,YAAY;AAAA,IACjC,cAAc,IAAI,YAAY;AAAA,IAC9B;AAAA,EACF;AAAA,EAEA,QAAQ,OAAkB;AAAA,IACxB,gBAAgB;AAAA,IAChB,YAAY;AAAA,EACd;AAAA,EAEA,KAAK,OAAkB;AAAA,IACrB,eAAe;AAAA,IACf,YAAY;AAAA,EACd;AAAA,EAEA,cAAc,MAAiB,WAAW;AAAA,EAE1C,SAAS,CAAC,OAAwC,UAAqB;AAAA,IACrE,cAAcC,OAAM,aAAa,IAAI;AAAA,EACvC;AAAA,EAEA,SAAS,CAAC,OAAmC,UAAqB;AAAA,IAChE,SAASA,OAAM,QAAQ,IAAI;AAAA,EAC7B;AAAA,EAEA,QAAQ,CAAC,OAAmC,UAAqB;AAAA,IAC/D,QAAQA,OAAM,QAAQ,IAAI;AAAA,EAC5B;AACF;AAGO,IAAM,aAAa;AAAA,EACxB,UAAU,CAAC,UAAkD;AAAA,IAC3D,UAAUA,OAAM,SAAS,IAAI;AAAA,EAC/B;AAAA,EAEA,SAAS,CAAC,SAA6C;AACrD,WAAOA,OAAM,QAAQ,IAAI;AAAA,EAC3B;AAAA,EAEA,cAAc,CAAC,SAAkD;AAC/D,WAAOA,OAAM,aAAa,IAAI;AAAA,EAChC;AACF;;;ACvHA;AAAA,EACE;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,OACK;AA+JD;AAhJN,IAAM,eAAe,cAAuC,IAAI;AA6JzD,IAAM,WAAW,MAAM;AAC5B,QAAM,UAAU,WAAW,YAAY;AACvC,MAAI,CAAC,SAAS;AACZ,YAAQ;AAAA,MACN;AAAA,IACF;AAEA,WAAO;AAAA,MACL,OAAAC;AAAA,MACA,QAAQ;AAAA,MACR,aAAa,MAAM;AAAA,MAAC;AAAA,MACpB,UAAU,MAAM;AAAA,MAAC;AAAA,MACjB,eAAe;AAAA,MACf,kBAAkB,MAAM;AAAA,MAAC;AAAA,MACzB,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,EACF;AACA,SAAO;AACT;;;AJzEM,SACE,OAAAC,MADF;AAvHN,IAAI;AACJ,IAAI;AACJ,IAAI;AAEJ,IAAI;AACF,QAAM,KAAK,UAAQ,cAAc;AACjC,WAAS,GAAG;AACZ,SAAO,GAAG;AACV,sBAAoB,GAAG;AACzB,QAAQ;AAEN,WAAS;AACT,SAAO;AACP,sBAAoB;AACtB;AAMA,IAAM,wBAA8B;AAAA,EAClC,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,UAAU;AAAA,IACV,UAAU;AAAA,IACV,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,EAAE,OAAAC,OAAM,IAAI,SAAS;AAC3B,UAAM,CAAC,iBAAiB,kBAAkB,IAAU;AAAA,MAClD,kBAAkB;AAAA,IACpB;AAGA,UAAM,eAAe,YAAY;AACjC,UAAM,cAAc,eAAe,UAAU;AAE7C,UAAM,oBAA0B;AAAA,MAC9B,CAAC,UAAmB;AAClB,YAAI,CAAC,cAAc;AACjB,6BAAmB,KAAK;AAAA,QAC1B;AACA,0BAAkB,KAAK;AAAA,MACzB;AAAA,MACA,CAAC,cAAc,eAAe;AAAA,IAChC;AAEA,UAAMC,WAAe,eAAQ,MAAM;AACjC,YAAM,aAAa;AAAA,QACjB,IAAI,EAAE,WAAW,CAAC,EAAE,OAAO,IAAI,CAAC,EAAE;AAAA,QAClC,SAAS,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;AAAA,QACrC,IAAI,EAAE,WAAW,CAAC,EAAE,OAAO,IAAI,CAAC,EAAE;AAAA,MACpC;AAEA,YAAM,gBAAgB;AAAA,QACpB,SAAS;AAAA,UACP,aAAaD,OAAM,OAAO;AAAA,UAC1B,eAAeA,OAAM,OAAO;AAAA,UAC5B,aAAa;AAAA,UACb,eAAe;AAAA,QACjB;AAAA,QACA,SAAS;AAAA,UACP,aAAa;AAAA,UACb,eAAeA,OAAM,OAAO;AAAA,UAC5B,aAAa;AAAA,UACb,eAAe;AAAA,QACjB;AAAA,QACA,SAAS;AAAA,UACP,aAAa;AAAA,UACb,eAAeA,OAAM,OAAO;AAAA,UAC5B,aAAa;AAAA,UACb,eAAe;AAAA,QACjB;AAAA,QACA,aAAa;AAAA,UACX,aAAa;AAAA,UACb,eAAeA,OAAM,OAAO;AAAA,UAC5B,aAAa;AAAA,UACb,eAAe;AAAA,QACjB;AAAA,MACF;AAEA,aAAO,aAAa;AAAA,QAClB,WAAW;AAAA,UACT,UAAU;AAAA,UACV,GAAG,WAAW,IAAI;AAAA,QACpB;AAAA,QACA,QAAQ;AAAA,UACN,SAAS,WAAW,MAAM;AAAA,QAC5B;AAAA,QACA,gBAAgB;AAAA,UACd,UAAU;AAAA,UACV,KAAK;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,iBAAiB;AAAA,UACjB,cAAc;AAAA,QAChB;AAAA,QACA,GAAG;AAAA,MACL,CAAC;AAAA,IACH,GAAG,CAACA,QAAO,MAAM,SAAS,QAAQ,CAAC;AAEnC,UAAM,SAASC,SAAO,OAAO;AAE7B,WACE,qBAAC,QAAK,OAAO,CAACA,SAAO,WAAW,KAAK,GAAG,QACtC;AAAA,sBAAAF;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,OAAO;AAAA,UACP,eAAe;AAAA,UACf,UAAU,YAAY;AAAA,UACtB,OAAOE,SAAO;AAAA,UACd,YAAY;AAAA,YACV,OAAO,sBAAsB,OAAO;AAAA,YACpC,MAAM,oBAAoB,OAAO;AAAA,UACnC;AAAA,UACA,YACE,cACI,oBAAoB,OAAO,cAC3B,sBAAsB,OAAO;AAAA,UAEnC,qBAAqB,sBAAsB,OAAO;AAAA,UACjD,GAAG;AAAA;AAAA,MACN;AAAA,MACC,WACC,gBAAAF,KAAC,QAAK,OAAOE,SAAO,gBAClB,0BAAAF,KAAC,qBAAkB,MAAK,SAAQ,OAAOC,OAAM,OAAO,SAAS,GAC/D;AAAA,OAEJ;AAAA,EAEJ;AACF;AAEA,sBAAsB,cAAc;;;AK1JpC,YAAYE,YAAW;AA2KX,gBAAAC,YAAA;AArKZ,IAAI;AACJ,IAAIC;AACJ,IAAI;AACJ,IAAI;AAEJ,IAAI;AACF,QAAM,KAAK,UAAQ,cAAc;AACjC,WAAS,GAAG;AACZ,EAAAA,QAAO,GAAG;AACV,aAAW,GAAG;AAGd,MAAI;AACF,UAAM,OAAO,UAAQ,8BAA8B;AACnD,wBAAoB,KAAK;AAAA,EAC3B,QAAQ;AAEN,wBAAoB;AAAA,EACtB;AACF,QAAQ;AAEN,WAAS;AACT,EAAAA,QAAO;AACP,aAAW,EAAE,MAAM,MAAM;AACzB,sBAAoB;AACtB;AAMA,IAAM,wBAA8B;AAAA,EAClC,CACE;AAAA,IACE;AAAA,IACA,eAAe,CAAC,CAAC;AAAA,IACjB;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,cAAc;AAAA,IACd,OAAO;AAAA,IACP,UAAU;AAAA,IACV,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,EAAE,OAAAC,OAAM,IAAI,SAAS;AAC3B,UAAM,CAAC,eAAe,gBAAgB,IAAU,gBAAS,YAAY;AAGrE,UAAM,eAAe,UAAU;AAC/B,UAAM,cAAc,eAAe,MAAM,CAAC,KAAK,IAAI,cAAc,CAAC,KAAK;AAEvE,UAAM,oBAA0B;AAAA,MAC9B,CAAC,aAAqB;AACpB,cAAM,aAAa,CAAC,QAAQ;AAC5B,YAAI,CAAC,cAAc;AACjB,2BAAiB,UAAU;AAAA,QAC7B;AACA,wBAAgB,UAAU;AAAA,MAC5B;AAAA,MACA,CAAC,cAAc,aAAa;AAAA,IAC9B;AAEA,UAAM,wBAA8B;AAAA,MAClC,CAAC,aAAqB;AACpB,cAAM,aAAa,CAAC,QAAQ;AAC5B,wBAAgB,UAAU;AAAA,MAC5B;AAAA,MACA,CAAC,aAAa;AAAA,IAChB;AAEA,UAAMC,WAAe,eAAQ,MAAM;AACjC,YAAM,aAAa;AAAA,QACjB,IAAI,EAAE,QAAQ,IAAI,aAAa,GAAG,WAAW,GAAG;AAAA,QAChD,SAAS,EAAE,QAAQ,IAAI,aAAa,GAAG,WAAW,GAAG;AAAA,QACrD,IAAI,EAAE,QAAQ,IAAI,aAAa,GAAG,WAAW,GAAG;AAAA,MAClD;AAEA,YAAM,gBAAgB;AAAA,QACpB,SAAS;AAAA,UACP,cAAcD,OAAM,OAAO;AAAA,UAC3B,cAAcA,OAAM,OAAO;AAAA,UAC3B,OAAO;AAAA,QACT;AAAA,QACA,SAAS;AAAA,UACP,cAAcA,OAAM,OAAO;AAAA,UAC3B,cAAc,GAAGA,OAAM,OAAO,OAAO;AAAA;AAAA,UACrC,OAAOA,OAAM,OAAO;AAAA,QACtB;AAAA,QACA,WAAW;AAAA,UACT,cAAcA,OAAM,OAAO;AAAA,UAC3B,cAAcA,OAAM,OAAO;AAAA,UAC3B,OAAOA,OAAM,OAAO;AAAA,QACtB;AAAA,QACA,aAAa;AAAA,UACX,cAAc;AAAA,UACd,cAAc;AAAA;AAAA,UACd,OAAO;AAAA,QACT;AAAA,QACA,SAAS;AAAA,UACP,cAAcA,OAAM,OAAO;AAAA,UAC3B,cAAc;AAAA,UACd,OAAOA,OAAM,OAAO;AAAA,QACtB;AAAA,QACA,OAAO;AAAA,UACL,cAAcA,OAAM,OAAO;AAAA,UAC3B,cAAc,GAAGA,OAAM,OAAO,IAAI;AAAA;AAAA,UAClC,OAAOA,OAAM,OAAO;AAAA,QACtB;AAAA,MACF;AAEA,YAAM,cAAc,WAAW,IAAI;AACnC,YAAM,gBAAgB,cAAc,OAAO;AAE3C,aAAO,aAAa;AAAA,QAClB,WAAW;AAAA,UACT,QAAQ,YAAY;AAAA,UACpB,gBAAgB;AAAA,UAChB,SAAS,WAAW,MAAM;AAAA,UAC1B,WAAW,gBAAgB,aAAa,CAAC,EAAE,QAAQ,SAAS,CAAC,IAAI,CAAC;AAAA,QACpE;AAAA,QACA,QAAQ;AAAA,UACN,OAAO;AAAA,UACP,QAAQ,YAAY;AAAA,QACtB;AAAA,QACA,OAAO;AAAA,UACL,QAAQ,YAAY;AAAA,UACpB,cAAc,YAAY,cAAc;AAAA,UACxC,GAAG;AAAA,QACL;AAAA,QACA,OAAO;AAAA,UACL,OAAO,YAAY;AAAA,UACnB,QAAQ,YAAY;AAAA,UACpB,cAAc,YAAY,YAAY;AAAA,UACtC,iBAAiB,cAAc;AAAA,UAC/B,aAAa;AAAA,UACb,cAAc,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,UACpC,eAAe;AAAA,UACf,cAAc;AAAA,UACd,WAAW;AAAA,UACX,GAAG;AAAA,QACL;AAAA,QACA,QAAQ;AAAA,MACV,CAAC;AAAA,IACH,GAAG,CAACA,QAAO,MAAM,SAAS,UAAU,aAAa,YAAY,UAAU,CAAC;AAExE,UAAM,SAASC,SAAO;AAEtB,QAAI,gBAAgB,YAAY;AAG9B,aACE,gBAAAH,KAACC,OAAA,EAAK,OAAO,CAACE,SAAO,WAAW,KAAK,GAAG,QACtC,0BAAAH,KAACC,OAAA,EAAK,OAAO,EAAE,WAAW,CAAC,EAAE,QAAQ,QAAQ,CAAC,GAAG,OAAO,IAAI,GAC1D,0BAAAD;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,OAAOG,SAAO;AAAA,UACd,OAAO;AAAA,UACP,eAAe;AAAA,UACf,mBAAmB;AAAA,UACnB,cAAc;AAAA,UACd,cAAc;AAAA,UACd;AAAA,UACA;AAAA,UACA,uBACE,yBAAyB,OAAO;AAAA,UAElC,uBACE,yBAAyB,OAAO;AAAA,UAElC,YAAY;AAAA,YACVA,SAAO;AAAA,YACP,EAAE,iBAAiB,kBAAkB,OAAO,MAAM;AAAA,UACpD;AAAA,UACC,GAAG;AAAA;AAAA,MACN,GACF,GACF;AAAA,IAEJ;AAEA,WACE,gBAAAH,KAACC,OAAA,EAAK,OAAO,CAACE,SAAO,WAAW,KAAK,GAAG,QACtC,0BAAAH;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,OAAOG,SAAO;AAAA,QACd,OAAO;AAAA,QACP,eAAe;AAAA,QACf,mBAAmB;AAAA,QACnB,cAAc;AAAA,QACd,cAAc;AAAA,QACd;AAAA,QACA;AAAA,QACA,uBAAuB,yBAAyB,OAAO;AAAA,QACvD,uBAAuB,yBAAyB,OAAO;AAAA,QACvD,YAAY;AAAA,UACVA,SAAO;AAAA,UACP,EAAE,iBAAiB,kBAAkB,OAAO,MAAM;AAAA,QACpD;AAAA,QACC,GAAG;AAAA;AAAA,IACN,GACF;AAAA,EAEJ;AACF;AAEA,sBAAsB,cAAc;AAGpC,IAAM,oBAA0B;AAAA,EAC9B,CAAC,OAAO,QAAQ;AAGd,WAAO,gBAAAH,KAAC,yBAAuB,GAAG,OAAO,KAAU;AAAA,EACrD;AACF;AAEA,kBAAkB,cAAc;;;AC1OhC,YAAYI,YAAW;AAuMf,gBAAAC,MA+BQ,QAAAC,aA/BR;AAjMR,IAAI;AACJ,IAAIC;AACJ,IAAI;AAEJ,IAAI;AACF,QAAM,KAAK,UAAQ,cAAc;AACjC,cAAY,GAAG;AACf,EAAAA,QAAO,GAAG;AACV,SAAO,GAAG;AACZ,QAAQ;AAEN,cAAY;AACZ,EAAAA,QAAO;AACP,SAAO;AACT;AAMA,IAAM,0BAAgC;AAAA,EAIpC,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA,oBAAoB;AAAA,IACpB;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,EAAE,OAAAC,OAAM,IAAI,SAAS;AAC3B,UAAM,CAAC,eAAe,gBAAgB,IAAU;AAAA,MAC9C,gBAAgB;AAAA,IAClB;AACA,UAAM,CAACC,SAAQ,SAAS,IAAU,gBAA6B,MAAS;AAGxE,UAAM,eAAe,UAAU;AAC/B,UAAM,gBAAgB,eAAe,QAAQ;AAE7C,UAAM,mBAAyB;AAAA,MAC7B,CAAC,SAAiB;AAChB,YAAI,CAAC,cAAc;AACjB,2BAAiB,IAAI;AAAA,QACvB;AACA,mBAAW,IAAI;AACf,uBAAe,IAAI;AAAA,MACrB;AAAA,MACA,CAAC,cAAc,UAAU,YAAY;AAAA,IACvC;AAEA,UAAM,0BAAgC;AAAA,MACpC,CAAC,UAAe;AACd,YAAI,WAAW,SAAS;AACtB,gBAAM,EAAE,QAAQ,cAAc,IAAI,MAAM,YAAY;AACpD,gBAAM,aAAa;AAEnB,gBAAM,YAAY,UAAU,UAAU,aAAa;AACnD,gBAAM,YAAY,UAAU,UAAU,aAAa;AAEnD,gBAAM,YAAY,KAAK;AAAA,YACrB;AAAA,YACA,KAAK,IAAI,WAAW,aAAa;AAAA,UACnC;AACA,oBAAU,SAAS;AAAA,QACrB;AAAA,MACF;AAAA,MACA,CAAC,SAAS,OAAO;AAAA,IACnB;AAEA,UAAMC,WAAe,eAAQ,MAAM;AACjC,YAAM,aAAa;AAAA,QACjB,IAAI;AAAA,UACF,UAAU;AAAA,UACV,mBAAmB;AAAA,UACnB,iBAAiB;AAAA,UACjB,WAAW;AAAA,UACX,cAAc;AAAA,QAChB;AAAA,QACA,SAAS;AAAA,UACP,UAAU;AAAA,UACV,mBAAmB;AAAA,UACnB,iBAAiB;AAAA,UACjB,WAAW;AAAA,UACX,cAAc;AAAA,QAChB;AAAA,QACA,IAAI;AAAA,UACF,UAAU;AAAA,UACV,mBAAmB;AAAA,UACnB,iBAAiB;AAAA,UACjB,WAAW;AAAA,UACX,cAAc;AAAA,QAChB;AAAA,MACF;AAEA,YAAM,gBAAgB;AAAA,QACpB,SAAS;AAAA,UACP,aAAa;AAAA,UACb,aAAaF,OAAM,OAAO;AAAA,UAC1B,iBAAiBA,OAAM,OAAO;AAAA,QAChC;AAAA,QACA,QAAQ;AAAA,UACN,aAAa;AAAA,UACb,iBAAiBA,OAAM,OAAO;AAAA,QAChC;AAAA,QACA,SAAS;AAAA,UACP,aAAa;AAAA,UACb,aAAaA,OAAM,OAAO;AAAA,UAC1B,iBAAiB;AAAA,QACnB;AAAA,MACF;AAEA,YAAM,cAAc,WAAW,IAAI;AACnC,YAAM,iBAAiB,cAAc,OAAO;AAC5C,YAAMG,YAAW,QAAQ,KAAK;AAE9B,aAAO,aAAa;AAAA,QAClB,WAAW;AAAA,UACT,OAAO;AAAA,QACT;AAAA,QACA,WAAW;AAAA,UACT,GAAG;AAAA,UACH,GAAG;AAAA,UACH,OAAOH,OAAM,OAAO;AAAA,UACpB;AAAA,UACA,SAAS,WAAW,MAAM;AAAA,UAC1B,QAAQC,WAAU,YAAY;AAAA,UAC9B,aAAaE,YACTH,OAAM,OAAO,QACb,iBAAiB,iBACf,eAAe,cACf;AAAA,QACR;AAAA,QACA,iBAAiB;AAAA,UACf,WAAW;AAAA,UACX,eAAe;AAAA,QACjB;AAAA,QACA,WAAW;AAAA,UACT,UAAU;AAAA,UACV,OAAOA,OAAM,OAAO;AAAA,UACpB,YAAY;AAAA,QACd;AAAA,QACA,YAAY;AAAA,UACV,UAAU;AAAA,UACV,OAAOA,OAAM,OAAO;AAAA,QACtB;AAAA,QACA,kBAAkB;AAAA,UAChB,YAAY;AAAA,UACZ,WAAW;AAAA,QACb;AAAA,QACA,aAAa;AAAA,UACX,UAAU;AAAA,UACV,OAAOA,OAAM,OAAO;AAAA,QACtB;AAAA,QACA,sBAAsB;AAAA,UACpB,OAAO;AAAA;AAAA,QACT;AAAA,QACA,sBAAsB;AAAA,UACpB,OAAOA,OAAM,OAAO;AAAA,QACtB;AAAA,MACF,CAAC;AAAA,IACH,GAAG,CAACA,QAAO,MAAM,SAAS,UAAU,OAAOC,SAAQ,iBAAiB,CAAC;AAErE,UAAM,WAAW,QAAQ,KAAK;AAC9B,UAAM,eAAe,OAAO,UAAU,WAAW,QAAQ;AACzD,UAAM,gBACJ,OAAO,kBAAkB,WAAW,cAAc,SAAS;AAE7D,WACE,gBAAAH,MAACC,OAAA,EAAK,OAAO,CAACG,SAAO,WAAW,KAAK,GAAG,QACtC;AAAA,sBAAAL;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,OAAOK,SAAO;AAAA,UACd,OAAO;AAAA,UACP,cAAc;AAAA,UACd,qBAAqB;AAAA,UACrB;AAAA,UACA,sBAAsBF,OAAM,OAAO;AAAA,UACnC,UAAU,CAAC;AAAA,UACX,WAAW;AAAA,UACX,eAAe,iBAAiB;AAAA,UAChC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACC,GAAG;AAAA;AAAA,MACN;AAAA,OAEE,gBAAgB,cAAc,cAC9B,gBAAAF,MAACC,OAAA,EAAK,OAAOG,SAAO,iBACjB;AAAA,wBACC,gBAAAL,KAAC,QAAK,OAAOK,SAAO,WAAY,wBAAa;AAAA,QAE9C,cAAc,CAAC,YACd,gBAAAL,KAAC,QAAK,OAAOK,SAAO,YAAa,sBAAW;AAAA,QAE7C,aACC,gBAAAL,KAACE,OAAA,EAAK,OAAOG,SAAO,kBAClB,0BAAAJ;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,cACLI,SAAO;AAAA,cACP,gBAAgB,YAAY,OAC1BA,SAAO;AAAA,cACT,gBAAgB,aAAaA,SAAO;AAAA,YACtC;AAAA,YAEC;AAAA;AAAA,cAAc;AAAA,cAAE;AAAA;AAAA;AAAA,QACnB,GACF;AAAA,SAEJ;AAAA,OAEJ;AAAA,EAEJ;AACF;AAEA,wBAAwB,cAAc;AAOtC,IAAM,4BAAkC,kBAGtC,CAAC,EAAE,cAAc,MAAM,GAAG,MAAM,GAAG,QAAQ;AAE3C,SAAO,gBAAAL,KAAC,2BAAwB,KAAW,GAAG,OAAO;AACvD,CAAC;AAED,0BAA0B,cAAc;;;ACxQxC,YAAYO,YAAW;AA8PX,SAQM,OAAAC,MARN,QAAAC,aAAA;AApPZ,IAAIC;AACJ,IAAIC;AACJ,IAAI;AACJ,IAAIC;AACJ,IAAI;AAEJ,IAAI;AACF,QAAM,KAAK,UAAQ,cAAc;AACjC,EAAAF,QAAO,GAAG;AACV,EAAAC,QAAO,GAAG;AACV,qBAAmB,GAAG;AACtB,EAAAC,YAAW,GAAG;AACd,oBAAkB,GAAG;AACvB,QAAQ;AAEN,EAAAF,QAAO;AACP,EAAAC,QAAO;AACP,qBAAmB;AACnB,EAAAC,YAAW,EAAE,MAAM,MAAM;AACzB,oBAAkB,EAAE,eAAe,MAAM;AAAA,EAAC,EAAE;AAC9C;AAeA,IAAM,2BAAiC;AAAA,EAIrC,CACE;AAAA,IACE,OAAO;AAAA,IACP,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,oBAAoB;AAAA,IACpB;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,EAAE,OAAAC,OAAM,IAAI,SAAS;AAC3B,UAAM,CAAC,eAAe,gBAAgB,IAAU;AAAA,MAC9C,MAAM;AACJ,YAAI,cAAc;AAChB,iBAAO,IAAI;AAAA,YACT,MAAM,QAAQ,YAAY,IAAI,eAAe,CAAC,YAAY;AAAA,UAC5D;AAAA,QACF;AACA,eAAO,oBAAI,IAAI;AAAA,MACjB;AAAA,IACF;AAGA,UAAM,eAAe,UAAU;AAC/B,UAAM,uBAAuB,eACzB,IAAI,IAAI,MAAM,QAAQ,KAAK,IAAI,QAAQ,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,IAC3D;AAEJ,UAAM,kBAAwB;AAAA,MAC5B,CAAC,WAAmB;AAClB,cAAM,mBAAmB,IAAI,IAAI,oBAAoB;AAErD,YAAI,SAAS,UAAU;AACrB,cAAI,iBAAiB,IAAI,MAAM,GAAG;AAChC,gBAAI,aAAa;AACf,+BAAiB,MAAM;AAAA,YACzB;AAAA,UACF,OAAO;AACL,6BAAiB,MAAM;AACvB,6BAAiB,IAAI,MAAM;AAAA,UAC7B;AAAA,QACF,OAAO;AAEL,cAAI,iBAAiB,IAAI,MAAM,GAAG;AAChC,6BAAiB,OAAO,MAAM;AAAA,UAChC,OAAO;AACL,6BAAiB,IAAI,MAAM;AAAA,UAC7B;AAAA,QACF;AAEA,YAAI,CAAC,cAAc;AACjB,2BAAiB,gBAAgB;AAAA,QACnC;AAGA,wBAAgB,cAAc;AAAA,UAC5B,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,MAAM,gBAAgB,MAAM;AAAA,YAC5B,UAAU,gBAAgB,WAAW;AAAA,UACvC;AAAA,UACA,QAAQ;AAAA,YACN,UAAU,oBAAoB;AAAA,YAC9B,MAAM,gBAAgB,MAAM;AAAA,YAC5B,UAAU,gBAAgB,WAAW;AAAA,UACvC;AAAA,QACF,CAAC;AAED,cAAM,WACJ,SAAS,WACL,iBAAiB,OAAO,IACrB,MAAM,KAAK,gBAAgB,EAAE,CAAC,KAAK,KACpC,KACF,MAAM,KAAK,gBAAgB;AAEjC,wBAAgB,QAAQ;AAAA,MAC1B;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAMC,WAAe,eAAQ,MAAM;AACjC,YAAM,aAAa;AAAA,QACjB,IAAI;AAAA,UACF,UAAU;AAAA,UACV,SAAS;AAAA,UACT,gBAAgB;AAAA,UAChB,gBAAgB;AAAA,QAClB;AAAA,QACA,SAAS;AAAA,UACP,UAAU;AAAA,UACV,SAAS;AAAA,UACT,gBAAgB;AAAA,UAChB,gBAAgB;AAAA,QAClB;AAAA,QACA,IAAI;AAAA,UACF,UAAU;AAAA,UACV,SAAS;AAAA,UACT,gBAAgB;AAAA,UAChB,gBAAgB;AAAA,QAClB;AAAA,MACF;AAEA,YAAM,gBAAgB;AAAA,QACpB,SAAS;AAAA,UACP,iBAAiBD,OAAM,OAAO;AAAA,UAC9B,aAAaA,OAAM,OAAO;AAAA,UAC1B,aAAa;AAAA,UACb,cAAc;AAAA,QAChB;AAAA,QACA,SAAS;AAAA,UACP,iBAAiB;AAAA,UACjB,aAAaA,OAAM,OAAO;AAAA,UAC1B,aAAa;AAAA,UACb,cAAc;AAAA,QAChB;AAAA,QACA,OAAO;AAAA,UACL,iBAAiB;AAAA,UACjB,aAAa;AAAA,UACb,aAAa;AAAA,UACb,cAAc;AAAA,QAChB;AAAA,MACF;AAEA,YAAM,cAAc,WAAW,IAAI;AACnC,YAAM,iBAAiB,cAAc,OAAO;AAE5C,aAAO,aAAa;AAAA,QAClB,WAAW;AAAA,UACT,GAAG;AAAA,UACH,SAAS,WAAW,MAAM;AAAA,QAC5B;AAAA,QACA,MAAM;AAAA,UACJ,mBAAmB,YAAY,UAAU,MAAM;AAAA,UAC/C,mBACE,YAAY,UACR,GAAGA,OAAM,OAAO,MAAM,OACtBA,OAAM,OAAO;AAAA,QACrB;AAAA,QACA,UAAU;AAAA,UACR,mBAAmB;AAAA,QACrB;AAAA,QACA,SAAS;AAAA,UACP,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,SAAS,YAAY;AAAA,UACrB,iBACE,YAAY,UAAU,gBAAgBA,OAAM,OAAO;AAAA,QACvD;AAAA,QACA,gBAAgB;AAAA,UACd,iBAAiBA,OAAM,OAAO;AAAA,UAC9B,SAAS;AAAA,QACX;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,UAAU,YAAY;AAAA,UACtB,YAAY;AAAA,UACZ,OAAOA,OAAM,OAAO;AAAA,QACtB;AAAA,QACA,SAAS;AAAA,UACP,YAAY;AAAA,QACd;AAAA,QACA,aAAa;AAAA,UACX,UAAU;AAAA,UACV,OAAOA,OAAM,OAAO;AAAA,UACpB,YAAY;AAAA,QACd;AAAA,QACA,SAAS;AAAA,UACP,UAAU;AAAA,UACV,SAAS,YAAY;AAAA,UACrB,YAAY;AAAA,UACZ,iBAAiBA,OAAM,OAAO;AAAA,QAChC;AAAA,QACA,aAAa;AAAA,UACX,UAAU,YAAY,WAAW;AAAA,UACjC,OAAOA,OAAM,OAAO;AAAA,UACpB,YAAY,YAAY,WAAW;AAAA,QACrC;AAAA,MACF,CAAC;AAAA,IACH,GAAG,CAACA,QAAO,MAAM,SAAS,QAAQ,CAAC;AAEnC,UAAM,aAAmB;AAAA,MACvB,CAAC,MAAiC,UAAkB;AAClD,cAAM,aAAa,qBAAqB,IAAI,KAAK,EAAE;AACnD,cAAM,SAAS,UAAU,MAAM,SAAS;AAExC,eACE,gBAAAJ,MAACC,OAAA,EAAmB,OAAO,CAACI,SAAO,MAAM,UAAUA,SAAO,QAAQ,GAChE;AAAA,0BAAAL;AAAA,YAAC;AAAA;AAAA,cACC,OAAOK,SAAO;AAAA,cACd,SAAS,MAAM,gBAAgB,KAAK,EAAE;AAAA,cACtC,UAAU,KAAK,YAAY;AAAA,cAC3B,eAAe;AAAA,cAEf;AAAA,gCAAAN,KAACE,OAAA,EAAK,OAAO,EAAE,MAAM,EAAE,GACpB,iBAAO,KAAK,YAAY,WACvB,gBAAAF,KAACG,OAAA,EAAK,OAAOG,SAAO,aAAc,eAAK,SAAQ,IAE/C,KAAK,SAET;AAAA,gBACA,gBAAAN,KAACE,OAAA,EAAK,OAAOI,SAAO,SAClB,0BAAAN;AAAA,kBAACG;AAAA,kBAAA;AAAA,oBACC,OAAO;AAAA,sBACLG,SAAO;AAAA,sBACP,EAAE,WAAW,CAAC,EAAE,QAAQ,aAAa,WAAW,OAAO,CAAC,EAAE;AAAA,oBAC5D;AAAA,oBACD;AAAA;AAAA,gBAED,GACF;AAAA;AAAA;AAAA,UACF;AAAA,UAEC,cACC,gBAAAN,KAACE,OAAA,EAAK,OAAOI,SAAO,SACjB,iBAAO,KAAK,YAAY,WACvB,gBAAAN,KAACG,OAAA,EAAK,OAAOG,SAAO,aAAc,eAAK,SAAQ,IAE/C,KAAK,SAET;AAAA,aAjCO,KAAK,EAmChB;AAAA,MAEJ;AAAA,MACA,CAAC,sBAAsBA,UAAQ,iBAAiB,UAAU,MAAM,MAAM;AAAA,IACxE;AAEA,WACE,gBAAAL,MAACC,OAAA,EAAK,KAAU,OAAO,CAACI,SAAO,WAAW,KAAK,GAAG,QAC/C;AAAA,YAAM,IAAI,UAAU;AAAA,MACpB;AAAA,OACH;AAAA,EAEJ;AACF;AAEA,yBAAyB,cAAc;AAUvC,IAAM,sBAA4B;AAAA,EAIhC,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,UAAU;AAAA,IACV;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,EAAE,OAAAD,OAAM,IAAI,SAAS;AAE3B,UAAMC,WAAe,eAAQ,MAAM;AACjC,YAAM,aAAa;AAAA,QACjB,IAAI,EAAE,SAAS,IAAI,UAAU,GAAG;AAAA,QAChC,SAAS,EAAE,SAAS,IAAI,UAAU,GAAG;AAAA,QACrC,IAAI,EAAE,SAAS,IAAI,UAAU,GAAG;AAAA,MAClC;AAEA,YAAM,cAAc,WAAW,IAAI;AAEnC,aAAO,aAAa;AAAA,QAClB,WAAW;AAAA,UACT,mBAAmB;AAAA,UACnB,mBAAmBD,OAAM,OAAO;AAAA,QAClC;AAAA,QACA,SAAS;AAAA,UACP,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,SAAS,YAAY;AAAA,QACvB;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,UAAU,YAAY;AAAA,UACtB,YAAY;AAAA,UACZ,OAAOA,OAAM,OAAO;AAAA,QACtB;AAAA,QACA,SAAS;AAAA,UACP,SAAS,YAAY;AAAA,UACrB,YAAY;AAAA,QACd;AAAA,MACF,CAAC;AAAA,IACH,GAAG,CAACA,QAAO,IAAI,CAAC;AAEhB,WACE,gBAAAJ,MAACC,OAAA,EAAK,KAAU,OAAO,CAACI,SAAO,WAAW,KAAK,GAAI,GAAG,OACpD;AAAA,sBAAAL,MAAC,oBAAiB,OAAOK,SAAO,SAAS,SAAS,UAC/C;AAAA,eAAO,YAAY,WAClB,gBAAAN,KAACG,OAAA,EAAK,OAAOG,SAAO,aAAc,mBAAQ,IAE1C;AAAA,QAEF,gBAAAN;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,OAAO,EAAE,WAAW,CAAC,EAAE,QAAQ,aAAa,WAAW,OAAO,CAAC,EAAE;AAAA,YAClE;AAAA;AAAA,QAED;AAAA,SACF;AAAA,MAEC,cAAc,gBAAAH,KAACE,OAAA,EAAK,OAAOI,SAAO,SAAU,mBAAQ;AAAA,OACvD;AAAA,EAEJ;AACF;AAEA,oBAAoB,cAAc;;;ACnYlC,YAAYC,YAAW;AA0LX,gBAAAC,MAsBF,QAAAC,aAtBE;AAhLZ,IAAIC;AACJ,IAAIC;AACJ,IAAIC;AACJ,IAAI;AAEJ,IAAI;AACF,QAAM,KAAK,UAAQ,cAAc;AACjC,EAAAF,QAAO,GAAG;AACV,EAAAC,QAAO,GAAG;AACV,EAAAC,oBAAmB,GAAG;AACtB,eAAa,GAAG;AAClB,QAAQ;AAEN,EAAAF,QAAO;AACP,EAAAC,QAAO;AACP,EAAAC,oBAAmB;AACnB,eAAa;AACf;AAIA,IAAM,6BAAmC;AAAA,EAIvC,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,sBAAsB;AAAA,IACtB,qBAAqB;AAAA,IACrB,OAAO;AAAA,IACP,UAAU;AAAA,IACV,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,EAAE,OAAAC,OAAM,IAAI,SAAS;AAE3B,UAAM,iBAAuB,eAAQ,MAAM;AACzC,UAAI,YAAY,KAAK,MAAM,UAAU,UAAU;AAC7C,eAAO;AAAA,MACT;AAEA,YAAM,mBAAmB,sBAAsB;AAC/C,UAAI,oBAAoB,MAAM,QAAQ;AACpC,eAAO;AAAA,MACT;AAEA,YAAM,cAAc,MAAM,MAAM,GAAG,mBAAmB;AACtD,YAAM,aAAa,MAAM,MAAM,MAAM,SAAS,kBAAkB;AAEhE,aAAO;AAAA,QACL,GAAG;AAAA,QACH,EAAE,OAAO,UAAK,UAAU,KAAK;AAAA,QAC7B,GAAG;AAAA,MACL;AAAA,IACF,GAAG,CAAC,OAAO,UAAU,qBAAqB,kBAAkB,CAAC;AAE7D,UAAM,kBAAwB;AAAA,MAC5B,CAAC,MAAsB,UAAkB;AACvC,YAAI,KAAK,YAAY,SAAU;AAE/B,YAAI,KAAK,SAAS;AAChB,eAAK,QAAQ;AAAA,QACf;AAAA,MACF;AAAA,MACA,CAAC,QAAQ;AAAA,IACX;AAEA,UAAMC,WAAe,eAAQ,MAAM;AACjC,YAAM,aAAa;AAAA,QACjB,IAAI;AAAA,UACF,UAAU;AAAA,UACV,UAAU;AAAA,UACV,SAAS;AAAA,UACT,SAAS;AAAA,QACX;AAAA,QACA,SAAS;AAAA,UACP,UAAU;AAAA,UACV,UAAU;AAAA,UACV,SAAS;AAAA,UACT,SAAS;AAAA,QACX;AAAA,QACA,IAAI;AAAA,UACF,UAAU;AAAA,UACV,UAAU;AAAA,UACV,SAAS;AAAA,UACT,SAAS;AAAA,QACX;AAAA,MACF;AAEA,YAAM,gBAAgB;AAAA,QACpB,SAAS;AAAA,UACP,WAAWD,OAAM,OAAO;AAAA,UACxB,eAAeA,OAAM,OAAO;AAAA,UAC5B,aAAaA,OAAM,OAAO;AAAA,QAC5B;AAAA,QACA,OAAO;AAAA,UACL,WAAW,GAAGA,OAAM,OAAO,aAAa;AAAA;AAAA,UACxC,eAAe,GAAGA,OAAM,OAAO,IAAI;AAAA,UACnC,aAAa,GAAGA,OAAM,OAAO,OAAO;AAAA,QACtC;AAAA,MACF;AAEA,YAAM,cAAc,WAAW,IAAI;AACnC,YAAM,iBAAiB,cAAc,OAAO;AAE5C,aAAO,aAAa;AAAA,QAClB,WAAW;AAAA,UACT,SAAS,WAAW,MAAM;AAAA,QAC5B;AAAA,QACA,YAAY;AAAA,UACV,UAAU;AAAA,QACZ;AAAA,QACA,sBAAsB;AAAA,UACpB,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,mBAAmB,YAAY;AAAA,QACjC;AAAA,QACA,MAAM;AAAA,UACJ,eAAe;AAAA,UACf,YAAY;AAAA,QACd;AAAA,QACA,aAAa;AAAA,UACX,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,mBAAmB,YAAY;AAAA,UAC/B,iBAAiB,YAAY,UAAU;AAAA,UACvC,cAAc;AAAA,QAChB;AAAA,QACA,UAAU;AAAA,UACR,UAAU,YAAY;AAAA,UACtB,OAAO,eAAe;AAAA,UACtB,YAAY,YAAY,UAAU;AAAA,QACpC;AAAA,QACA,cAAc;AAAA,UACZ,UAAU,YAAY;AAAA,UACtB,OAAO,eAAe;AAAA,UACtB,YAAY;AAAA,UACZ,YAAY,YAAY,UAAU;AAAA,QACpC;AAAA,QACA,eAAe;AAAA;AAAA,QAEf;AAAA,QACA,cAAc;AAAA,UACZ,SAAS;AAAA,QACX;AAAA,QACA,WAAW;AAAA,UACT,kBAAkB,YAAY;AAAA,QAChC;AAAA,QACA,eAAe;AAAA,UACb,UAAU,YAAY;AAAA,UACtB,OAAO,eAAe;AAAA,UACtB,YAAY;AAAA,QACd;AAAA,QACA,MAAM;AAAA,UACJ,OAAO,YAAY;AAAA,UACnB,QAAQ,YAAY;AAAA,QACtB;AAAA,QACA,UAAU;AAAA,UACR,UAAU,YAAY;AAAA,UACtB,OAAO,eAAe;AAAA,UACtB,YAAY;AAAA,QACd;AAAA,MACF,CAAC;AAAA,IACH,GAAG,CAACA,QAAO,MAAM,SAAS,QAAQ,CAAC;AAEnC,UAAM,kBAAwB;AAAA,MAC5B,CAAC,UAAkB;AACjB,YAAI,WAAW;AACb,iBACE,gBAAAL,KAACE,OAAA,EAAgC,OAAOI,SAAO,WAC5C,uBADQ,aAAa,KAAK,EAE7B;AAAA,QAEJ;AAEA,eACE,gBAAAN,KAACE,OAAA,EAAgC,OAAOI,SAAO,WAC7C,0BAAAN,KAACG,OAAA,EAAK,OAAOG,SAAO,eAAe,oBAAC,KAD3B,aAAa,KAAK,EAE7B;AAAA,MAEJ;AAAA,MACA,CAAC,WAAWA,QAAM;AAAA,IACpB;AAEA,UAAM,aAAmB;AAAA,MACvB,CAAC,MAAsB,UAAkB;AACvC,cAAM,SAAS,UAAU,eAAe,SAAS;AACjD,cAAM,cAAc,CAAC,KAAK,YAAY,CAAC,YAAY,CAAC,CAAC,KAAK;AAC1D,cAAM,cAAc,KAAK,UAAU;AAEnC,cAAM,cACJ,gBAAAL,MAACC,OAAA,EAAK,OAAOI,SAAO,aACjB;AAAA,eAAK,QAAQ,gBAAAN,KAACE,OAAA,EAAK,OAAOI,SAAO,MAAO,eAAK,MAAK;AAAA,UACnD,gBAAAN;AAAA,YAACG;AAAA,YAAA;AAAA,cACC,OAAO,SAASG,SAAO,eAAeA,SAAO;AAAA,cAC7C,eAAe;AAAA,cAEd,eAAK;AAAA;AAAA,UACR;AAAA,WACF;AAGF,YAAI,aAAa;AACf,iBACE,gBAAAN,KAACE,OAAA,EAA2B,OAAOI,SAAO,MACxC,0BAAAN,KAACE,OAAA,EAAK,OAAO,CAACI,SAAO,aAAaA,SAAO,YAAY,GACnD,0BAAAN,KAACG,OAAA,EAAK,OAAOG,SAAO,UAAU,oBAAC,GACjC,KAHS,QAAQ,KAAK,EAIxB;AAAA,QAEJ;AAEA,cAAM,cAAc,cAClB,gBAAAN;AAAA,UAACI;AAAA,UAAA;AAAA,YACC,SAAS,MAAM,gBAAgB,MAAM,KAAK;AAAA,YAC1C,UAAU,KAAK,YAAY;AAAA,YAC3B,eAAe;AAAA,YACf,OAAO,CAACE,SAAO,eAAe,KAAK,YAAYA,SAAO,YAAY;AAAA,YAEjE;AAAA;AAAA,QACH,IAEA,gBAAAN,KAACE,OAAA,EAAK,OAAO,CAAC,KAAK,YAAYI,SAAO,YAAY,GAC/C,uBACH;AAGF,eACE,gBAAAL,MAAO,iBAAN,EACC;AAAA,0BAAAD,KAACE,OAAA,EAAK,OAAOI,SAAO,MAAO,uBAAY;AAAA,UACtC,CAAC,UAAU,gBAAgB,KAAK;AAAA,aAFd,QAAQ,KAAK,EAGlC;AAAA,MAEJ;AAAA,MACA;AAAA,QACE,eAAe;AAAA,QACf;AAAA,QACA;AAAA,QACAA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,WACE,gBAAAN,KAACE,OAAA,EAAK,KAAU,OAAO,CAACI,SAAO,WAAW,KAAK,GAAG,QAChD,0BAAAN;AAAA,MAAC;AAAA;AAAA,QACC,YAAU;AAAA,QACV,gCAAgC;AAAA,QAChC,OAAOM,SAAO;AAAA,QACd,uBAAuBA,SAAO;AAAA,QAE7B,yBAAe,IAAI,UAAU;AAAA;AAAA,IAChC,GACF;AAAA,EAEJ;AACF;AAEA,2BAA2B,cAAc;AAazC,IAAM,0BAAgC;AAAA,EAIpC,CACE,EAAE,MAAM,gBAAgB,KAAK,YAAY,QAAQ,YAAY,GAAG,MAAM,GACtE,QACG;AACH,UAAM,QAAc,eAAQ,MAAM;AAChC,YAAM,WAAW,KAAK,MAAM,aAAa,EAAE,OAAO,OAAO;AACzD,YAAM,kBAAoC,CAAC;AAG3C,sBAAgB,KAAK;AAAA,QACnB,OAAO;AAAA,QACP,SAAS,MAAM,aAAa,IAAI,CAAC;AAAA,MACnC,CAAC;AAGD,eAAS,QAAQ,CAAC,SAAS,UAAU;AACnC,cAAM,WAAW,SAAS,MAAM,GAAG,QAAQ,CAAC,EAAE,KAAK,aAAa;AAChE,cAAM,QAAQ,QAAQ,OAAO,CAAC,EAAE,YAAY,IAAI,QAAQ,MAAM,CAAC;AAE/D,wBAAgB,KAAK;AAAA,UACnB;AAAA,UACA,SAAS,MAAM,aAAa,UAAU,QAAQ,CAAC;AAAA,QACjD,CAAC;AAAA,MACH,CAAC;AAED,aAAO;AAAA,IACT,GAAG,CAAC,MAAM,eAAe,WAAW,UAAU,CAAC;AAE/C,WAAO,gBAAAN,KAAC,8BAA2B,KAAU,OAAe,GAAG,OAAO;AAAA,EACxE;AACF;AAEA,wBAAwB,cAAc;;;ACpUtC,YAAYO,YAAW;AAkMf,gBAAAC,MA8BI,QAAAC,aA9BJ;AA5LR,IAAIC;AACJ,IAAIC;AACJ,IAAIC;AACJ,IAAIC;AAEJ,IAAI;AACF,QAAM,KAAK,UAAQ,cAAc;AACjC,EAAAH,QAAO,GAAG;AACV,EAAAC,QAAO,GAAG;AACV,EAAAC,oBAAmB,GAAG;AACtB,EAAAC,cAAa,GAAG;AAClB,QAAQ;AAEN,EAAAH,QAAO;AACP,EAAAC,QAAO;AACP,EAAAC,oBAAmB;AACnB,EAAAC,cAAa;AACf;AAIA,IAAM,4BAAkC;AAAA,EAItC,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,UAAU;AAAA,IACV,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,EAAE,OAAAC,OAAM,IAAI,SAAS;AAE3B,UAAMC,WAAe,eAAQ,MAAM;AACjC,YAAM,aAAa;AAAA,QACjB,IAAI;AAAA,UACF,SAAS;AAAA,UACT,SAAS;AAAA,UACT,UAAU;AAAA,UACV,kBAAkB;AAAA,UAClB,WAAW;AAAA,UACX,iBAAiB;AAAA,QACnB;AAAA,QACA,SAAS;AAAA,UACP,SAAS;AAAA,UACT,SAAS;AAAA,UACT,UAAU;AAAA,UACV,kBAAkB;AAAA,UAClB,WAAW;AAAA,UACX,iBAAiB;AAAA,QACnB;AAAA,QACA,IAAI;AAAA,UACF,SAAS;AAAA,UACT,SAAS;AAAA,UACT,UAAU;AAAA,UACV,kBAAkB;AAAA,UAClB,WAAW;AAAA,UACX,iBAAiB;AAAA,QACnB;AAAA,MACF;AAEA,YAAM,gBAAgB;AAAA,QACpB,SAAS;AAAA,UACP,iBAAiB,WAAW,IAAI,EAAE;AAAA,QACpC;AAAA,QACA,SAAS;AAAA,UACP,iBAAiB,WAAW,IAAI,EAAE,UAAU;AAAA,QAC9C;AAAA,QACA,aAAa;AAAA,UACX,iBAAiB,WAAW,IAAI,EAAE,UAAU;AAAA,QAC9C;AAAA,MACF;AAEA,YAAM,cAAc,WAAW,IAAI;AACnC,YAAM,iBAAiB,cAAc,OAAO;AAE5C,aAAO,aAAa;AAAA,QAClB,WAAW;AAAA,UACT,MAAM;AAAA,UACN,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,mBAAmB,YAAY;AAAA,UAC/B,GAAG;AAAA,UACH,SAAS,WAAW,MAAM;AAAA,QAC5B;AAAA,QACA,iBAAiB;AAAA,UACf,UAAU;AAAA,UACV,gBAAgB;AAAA,QAClB;AAAA,QACA,SAAS;AAAA,UACP,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,UAAU;AAAA,QACZ;AAAA,QACA,uBAAuB;AAAA,UACrB,OAAO,YAAY;AAAA,UACnB,QAAQ,YAAY;AAAA,UACpB,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,cAAc,YAAY;AAAA,QAC5B;AAAA,QACA,eAAe;AAAA,UACb,OAAO,YAAY;AAAA,UACnB,QAAQ,YAAY;AAAA,UACpB,cAAc,YAAY,WAAW;AAAA,UACrC,iBAAiBD,OAAM,OAAO;AAAA,UAC9B,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,cAAc,YAAY;AAAA,QAC5B;AAAA,QACA,eAAe;AAAA,UACb,YAAY;AAAA,UACZ,cAAc,YAAY;AAAA,QAC5B;AAAA,QACA,OAAO;AAAA,UACL,UAAU,YAAY;AAAA,UACtB,YAAY;AAAA,UACZ,OAAOA,OAAM,OAAO;AAAA,UACpB,WAAW;AAAA,UACX,cAAc;AAAA,QAChB;AAAA,QACA,aAAa;AAAA,UACX,UAAU,YAAY;AAAA,UACtB,OAAOA,OAAM,OAAO;AAAA,UACpB,WAAW;AAAA,UACX,YAAY,YAAY,kBAAkB;AAAA,UAC1C,UAAU;AAAA,QACZ;AAAA,QACA,kBAAkB;AAAA,UAChB,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,UAAU;AAAA,UACV,KAAK;AAAA,QACP;AAAA,QACA,cAAc;AAAA,UACZ,mBAAmB;AAAA,UACnB,iBAAiB;AAAA,UACjB,cAAc;AAAA,UACd,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,UAAU;AAAA,QACZ;AAAA,QACA,eAAe;AAAA,UACb,iBAAiBA,OAAM,OAAO;AAAA,QAChC;AAAA,QACA,iBAAiB;AAAA,UACf,iBAAiB;AAAA,UACjB,aAAa;AAAA,UACb,aAAaA,OAAM,OAAO;AAAA,QAC5B;AAAA,QACA,YAAY;AAAA,UACV,UAAU,YAAY;AAAA,UACtB,YAAY;AAAA,QACd;AAAA,QACA,mBAAmB;AAAA,UACjB,OAAO;AAAA,QACT;AAAA,QACA,qBAAqB;AAAA,UACnB,OAAOA,OAAM,OAAO;AAAA,QACtB;AAAA,MACF,CAAC;AAAA,IACH,GAAG,CAACA,QAAO,MAAM,SAAS,QAAQ,CAAC;AAEnC,UAAM,kBAAkB,YAAY,iBAAiB;AACrD,UAAM,UAAU,CAAC,mBAAmB;AAEpC,UAAM,eAAe,CAAC,cAAmB,cACvC,gBAAAN;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACLG,SAAO;AAAA,UACP,YAAYA,SAAO,gBAAgBA,SAAO;AAAA,QAC5C;AAAA,QACA,SAAS,aAAa;AAAA,QACtB;AAAA,QACA,eAAe;AAAA,QAEf,0BAAAP;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACLI,SAAO;AAAA,cACP,YAAYA,SAAO,oBAAoBA,SAAO;AAAA,YAChD;AAAA,YAEC,uBAAa;AAAA;AAAA,QAChB;AAAA;AAAA,IACF;AAGF,WACE,gBAAAP;AAAA,MAACK;AAAA,MAAA;AAAA,QACC;AAAA,QACA,OAAO,EAAE,MAAM,EAAE;AAAA,QACjB,uBAAuBE,SAAO;AAAA,QAC9B,8BAA8B;AAAA,QAC9B;AAAA,QAEA,0BAAAP,KAACE,OAAA,EAAK,OAAO,CAACK,SAAO,WAAW,KAAK,GACnC,0BAAAN,MAACC,OAAA,EAAK,OAAOK,SAAO,SAEjB;AAAA,6BACC,gBAAAP,KAACE,OAAA,EAAK,OAAOK,SAAO,uBAAwB,wBAAa;AAAA,UAI1D,WAAW,gBAAAP,KAACE,OAAA,EAAK,OAAOK,SAAO,eAAgB,gBAAK;AAAA,UAGrD,gBAAAN,MAACC,OAAA,EAAK,OAAOK,SAAO,eAClB;AAAA,4BAAAP,KAACG,OAAA,EAAK,OAAOI,SAAO,OAAQ,iBAAM;AAAA,YAEjC,eACC,gBAAAP,KAACG,OAAA,EAAK,OAAOI,SAAO,aAAc,uBAAY;AAAA,aAElD;AAAA,WAGE,UAAU,oBACV,gBAAAN,MAACC,OAAA,EAAK,OAAOK,SAAO,kBACjB;AAAA,sBAAU,aAAa,QAAQ,IAAI;AAAA,YACnC,mBAAmB,aAAa,iBAAiB,KAAK;AAAA,aACzD;AAAA,WAEJ,GACF;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAEA,0BAA0B,cAAc;AAaxC,IAAM,yBAA+B;AAAA,EAInC,CACE;AAAA,IACE,QAAQ;AAAA,IACR,cAAc;AAAA,IACd;AAAA,IACA,eAAe;AAAA,IACf,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,EAAE,OAAAD,OAAM,IAAI,SAAS;AAE3B,UAAM,cACJ,gBAAAN;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,YAAY;AAAA,UACZ,gBAAgB;AAAA,QAClB;AAAA,QAEA,0BAAAF,KAACG,OAAA,EAAK,OAAO,EAAE,UAAU,IAAI,OAAOG,OAAM,OAAO,cAAc,GAAG,uBAElE;AAAA;AAAA,IACF;AAGF,WACE,gBAAAN;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,QACE,YACI;AAAA,UACE,OAAO;AAAA,UACP,SAAS;AAAA,QACX,IACA;AAAA,QAEL,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AAEA,uBAAuB,cAAc;AAarC,IAAM,4BAAkC;AAAA,EAItC,CACE;AAAA,IACE,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,EAAE,OAAAM,OAAM,IAAI,SAAS;AAE3B,UAAM,qBAAqB,aACvB,yBAAyB,UAAU,wCACnC;AAEJ,UAAM,cACJ,gBAAAN;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,YAAY;AAAA,UACZ,gBAAgB;AAAA,QAClB;AAAA,QAEA,0BAAAF,KAACG,OAAA,EAAK,OAAO,EAAE,UAAU,IAAI,OAAOG,OAAM,OAAO,cAAc,GAAG,uBAElE;AAAA;AAAA,IACF;AAGF,WACE,gBAAAN;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,aAAa,eAAe;AAAA,QAC5B,MAAM;AAAA,QACN,QACE,gBACI;AAAA,UACE,OAAO;AAAA,UACP,SAAS;AAAA,QACX,IACA;AAAA,QAEL,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AAEA,0BAA0B,cAAc;AAYxC,IAAM,wBAA8B;AAAA,EAClC,CACE;AAAA,IACE,QAAQ;AAAA,IACR,cAAc;AAAA,IACd;AAAA,IACA,aAAa;AAAA,IACb,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,EAAE,OAAAM,OAAM,IAAI,SAAS;AAE3B,UAAM,cACJ,gBAAAN;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,YAAY;AAAA,UACZ,gBAAgB;AAAA,QAClB;AAAA,QAEA,0BAAAF,KAACG,OAAA,EAAK,OAAO,EAAE,UAAU,IAAI,OAAOG,OAAM,OAAO,MAAM,GAAG,0BAAE;AAAA;AAAA,IAC9D;AAGF,WACE,gBAAAN;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,QACE,UACI;AAAA,UACE,OAAO;AAAA,UACP,SAAS;AAAA,QACX,IACA;AAAA,QAEL,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AAEA,sBAAsB,cAAc;;;AC1ZhC,gBAAAQ,YAAA;AAjBJ,IAAIC,QAAiC;AAGrC,IAAI,OAAO,WAAW,eAAe,OAAO,iBAAiB;AAE3D,EAAAA,QAAO,UAAQ,cAAc,EAAE;AACjC;AAOO,SAAS,QAAQ,EAAE,OAAO,UAAU,GAAG,MAAM,GAAiB;AACnE,QAAMC,WAAS,UAAU;AAEzB,SACE,gBAAAF,KAACC,OAAA,EAAK,OAAO,CAACC,SAAO,SAAS,KAAK,GAAI,GAAG,OACvC,UACH;AAEJ;AAEA,IAAM,YAAY,MAChB,aAAa;AAAA,EACX,SAAS;AAAA,IACP,iBAAiB;AAAA;AAAA,EACnB;AACF,CAAC;;;ACvCH,OAAOC,YAAW;AA0CV,gBAAAC,YAAA;AA/BR,IAAIC,QAAiC;AAGrC,IAAI,OAAO,WAAW,eAAe,OAAO,iBAAiB;AAE3D,EAAAA,QAAO,UAAQ,cAAc,EAAE;AACjC;AASO,SAAS,KAAK;AAAA,EACnB;AAAA,EACA,OAAO;AAAA,EACP,MAAM;AAAA,EACN;AAAA,EACA,GAAG;AACL,GAAc;AACZ,QAAMC,WAASC,WAAU;AACzB,QAAM,gBAAgBC,OAAM,SAAS,QAAQ,QAAQ;AAGrD,QAAM,YAAY,GAAG,MAAM,OAAQ,OAAO,OAAO,KAAM,IAAI;AAE3D,SACE,gBAAAJ,KAACC,OAAA,EAAK,OAAO,CAACC,SAAO,WAAW,KAAK,GAAI,GAAG,OACzC,wBAAc,IAAI,CAAC,OAAO,UACzB,gBAAAF;AAAA,IAACC;AAAA,IAAA;AAAA,MAEC,OAAO;AAAA,QACLC,SAAO;AAAA,QACP;AAAA,UACE,OAAO;AAAA,UACP,cAAc,QAAQ,KAAK,SAAS,IAAI,IAAI;AAAA,UAC5C,cAAc,QAAQ,cAAc,SAAS,OAAO,MAAM;AAAA,QAC5D;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,IAVI;AAAA,EAWP,CACD,GACH;AAEJ;AAEA,IAAMC,aAAY,MAChB,aAAa;AAAA,EACX,WAAW;AAAA,IACT,eAAe;AAAA,IACf,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,MAAM;AAAA,IACJ,YAAY;AAAA,EACd;AACF,CAAC;;;ACrEH;AAAA,EACE,QAAAE;AAAA,EACA,QAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,cAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAAC;AAAA,EACA,SAAAC;AAAA,OACK;AAwCK,SA6DR,YAAAC,WA7DQ,OAAAC,OAQF,QAAAC,aARE;AA1BL,IAAM,SAAsC,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,EACA,UAAU,CAAC;AAAA,EACX;AAAA,EACA,kBAAkB,CAAC;AAAA,EACnB,aAAa;AAAA,EACb;AAAA,EACA,oBAAoB;AAAA,EACpB,UAAU;AAAA,EACV;AAAA,EACA,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,2BAA2B;AAAA,EAC3B;AACF,MAAM;AACJ,QAAM,eAAe;AACrB,QAAM,aAAaJ,UAAS,OAAO,QAAQ,IAAI,UAAU,iBAAiB;AAE1E,QAAM,mBAAmB,MAAM;AAC7B,QAAI,CAAC,KAAM,QAAO;AAElB,WACE,gBAAAG,MAACL,mBAAA,EAAiB,OAAO,OAAO,eAAe,eAAe,KAC5D,0BAAAM,MAACR,OAAA,EAAK,OAAO,OAAO,UACjB;AAAA,WAAK,SACJ,gBAAAO,MAACF,QAAA,EAAM,QAAQ,EAAE,KAAK,KAAK,OAAO,GAAG,OAAO,OAAO,QAAQ,IAE3D,gBAAAE,MAACP,OAAA,EAAK,OAAO,OAAO,mBAClB,0BAAAO,MAACN,OAAA,EAAK,OAAO,OAAO,YACjB,eAAK,MAAM,OAAO,CAAC,GAAG,YAAY,KAAK,KAC1C,GACF;AAAA,MAEF,gBAAAO,MAACR,OAAA,EAAK,OAAO,OAAO,mBAClB;AAAA,wBAAAO,MAACN,OAAA,EAAK,OAAO,OAAO,UAAU,eAAe,GAC1C,eAAK,MACR;AAAA,QACC,KAAK,QACJ,gBAAAM,MAACN,OAAA,EAAK,OAAO,OAAO,UAAU,eAAe,GAC1C,eAAK,MACR;AAAA,SAEJ;AAAA,OACF,GACF;AAAA,EAEJ;AAEA,QAAM,gBAAgB,MAAM;AAC1B,QAAI,QAAQ,WAAW,EAAG,QAAO;AAEjC,WACE,gBAAAM,MAACP,OAAA,EAAK,OAAO,OAAO,kBACjB,kBAAQ,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,UAChC,gBAAAQ;AAAA,MAACN;AAAA,MAAA;AAAA,QAEC,OAAO;AAAA,UACL,OAAO;AAAA,UACP,OAAO,YAAY,aAAa,OAAO;AAAA,QACzC;AAAA,QACA,SAAS,OAAO;AAAA,QAChB,eAAe;AAAA,QAEd;AAAA,iBAAO,QACN,gBAAAK,MAACP,OAAA,EAAK,OAAO,OAAO,YAClB,0BAAAO,MAACN,OAAA,EAAK,OAAO,OAAO,gBACjB,iBAAO,OAAO,SAAS,WAAW,OAAO,OAAO,UACnD,GACF;AAAA,UAED,OAAO,SACN,gBAAAM,MAACP,OAAA,EAAK,OAAO,OAAO,aAClB,0BAAAO,MAACN,OAAA,EAAK,OAAO,OAAO,iBACjB,iBAAO,OAAO,UAAU,YAAY,OAAO,QAAQ,KAChD,QACA,OAAO,OACb,GACF;AAAA;AAAA;AAAA,MAtBG,OAAO;AAAA,IAwBd,CACD,GACH;AAAA,EAEJ;AAEA,SACE,gBAAAO,MAAAF,WAAA,EACE;AAAA,oBAAAC;AAAA,MAAC;AAAA;AAAA,QACC,UAAU;AAAA,QACV,iBAAiB;AAAA,QACjB,aAAaH,UAAS,OAAO;AAAA;AAAA,IAC/B;AAAA,IACA,gBAAAG;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,CAAC,OAAO,UAAU,EAAE,iBAAiB,yBAAyB,CAAC;AAAA,QAEtE,0BAAAC,MAACR,OAAA,EAAK,OAAO,CAAC,OAAO,WAAW,EAAE,QAAQ,aAAa,GAAG,KAAK,GAE7D;AAAA,0BAAAQ,MAACR,OAAA,EAAK,OAAO,OAAO,aACjB;AAAA,8BAAkB,eACjB,gBAAAO;AAAA,cAACL;AAAA,cAAA;AAAA,gBACC,OAAO,OAAO;AAAA,gBACd,SAAS;AAAA,gBACT,eAAe;AAAA,gBAEf,0BAAAK,MAACN,OAAA,EAAK,OAAO,OAAO,UAAU,oBAAC;AAAA;AAAA,YACjC;AAAA,YAGF,gBAAAO,MAACR,OAAA,EAAK,OAAO,OAAO,gBAClB;AAAA,8BAAAO,MAACN,OAAA,EAAK,OAAO,OAAO,OAAO,eAAe,GACvC,iBACH;AAAA,cACC,YACC,gBAAAM,MAACN,OAAA,EAAK,OAAO,OAAO,UAAU,eAAe,GAC1C,oBACH;AAAA,eAEJ;AAAA,aACF;AAAA,UAGA,gBAAAO,MAACR,OAAA,EAAK,OAAO,OAAO,cACjB;AAAA,0BAAc;AAAA,YACd,iBAAiB;AAAA,aACpB;AAAA,WACF;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAEA,IAAM,SAASG,YAAW,OAAO;AAAA,EAC/B,UAAU;AAAA,IACR,iBAAiB;AAAA,EACnB;AAAA,EACA,WAAW;AAAA,IACT,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,WAAW;AAAA,IACX,aAAa;AAAA,IACb,cAAc,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,IACpC,eAAe;AAAA,IACf,cAAc;AAAA,EAChB;AAAA,EACA,aAAa;AAAA,IACX,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,MAAM;AAAA,EACR;AAAA,EACA,cAAc;AAAA,IACZ,eAAe;AAAA,IACf,YAAY;AAAA,EACd;AAAA,EACA,YAAY;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,aAAa;AAAA,EACf;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACd,MAAM;AAAA,EACR;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,EACb;AAAA,EACA,kBAAkB;AAAA,IAChB,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,aAAa;AAAA,EACf;AAAA,EACA,cAAc;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACZ;AAAA,EACA,qBAAqB;AAAA,IACnB,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AAAA,EACA,YAAY;AAAA,IACV,gBAAgB;AAAA,IAChB,YAAY;AAAA,EACd;AAAA,EACA,gBAAgB;AAAA,IACd,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,aAAa;AAAA,IACX,UAAU;AAAA,IACV,KAAK;AAAA,IACL,OAAO;AAAA,IACP,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,mBAAmB;AAAA,EACrB;AAAA,EACA,iBAAiB;AAAA,IACf,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACb,eAAe;AAAA,IACf,YAAY;AAAA,EACd;AAAA,EACA,UAAU;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,EACd;AAAA,EACA,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA,mBAAmB;AAAA,IACjB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,YAAY;AAAA,EACd;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,mBAAmB;AAAA,IACjB,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,EACb;AACF,CAAC;;;AClSD,SAAgB,YAAAM,WAAU,QAAQ,aAAAC,kBAAiB;AACnD;AAAA,EACE,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,cAAAC;AAAA,EACA;AAAA,EACA,YAAAC;AAAA,EACA;AAAA,EACA,cAAAC;AAAA,EACA,gBAAAC;AAAA,OAEK;AAmCD,SAcM,OAAAC,OAdN,QAAAC,aAAA;AAnBN,IAAM,0BAAkE,CAAC;AAAA,EACvE;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,YAAY,aAAa,IAAIV,UAAS,KAAK,YAAY,KAAK;AAEnE,QAAM,cAAc,MAAM;AACxB,QAAI,KAAK,YAAY,KAAK,SAAS,SAAS,GAAG;AAC7C,oBAAc,CAAC,UAAU;AAAA,IAC3B,OAAO;AACL,kBAAY,IAAI;AAAA,IAClB;AAAA,EACF;AAEA,QAAM,cAAc,KAAK,QAAQ;AAEjC,SACE,gBAAAU,MAACR,QAAA,EACC;AAAA,oBAAAQ;AAAA,MAACN;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACLO,QAAO;AAAA,UACP,EAAE,YAAY;AAAA,UACd,KAAK,YAAYA,QAAO;AAAA,UACxB,KAAK,YAAYA,QAAO;AAAA,QAC1B;AAAA,QACA,SAAS;AAAA,QACT,UAAU,KAAK;AAAA,QACf,eAAe;AAAA,QAGd;AAAA,eAAK,QACJ,gBAAAF,MAACP,QAAA,EAAK,OAAOS,QAAO,gBAClB,0BAAAF;AAAA,YAACN;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACLQ,QAAO;AAAA,gBACP,KAAK,YAAYA,QAAO;AAAA,cAC1B;AAAA,cAEC,iBAAO,KAAK,SAAS,WAAW,KAAK,OAAO;AAAA;AAAA,UAC/C,GACF;AAAA,UAIF,gBAAAF;AAAA,YAACN;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACLQ,QAAO;AAAA,gBACP,KAAK,YAAYA,QAAO;AAAA,gBACxB,KAAK,YAAYA,QAAO;AAAA,cAC1B;AAAA,cACA,eAAe;AAAA,cAEd,eAAK;AAAA;AAAA,UACR;AAAA,UAGC,KAAK,SACJ,gBAAAF,MAACP,QAAA,EAAK,OAAOS,QAAO,iBAClB,0BAAAF,MAACN,OAAA,EAAK,OAAOQ,QAAO,qBACjB,iBAAO,KAAK,UAAU,YAAY,KAAK,QAAQ,KAC5C,QACA,KAAK,OACX,GACF;AAAA,UAID,KAAK,YAAY,KAAK,SAAS,SAAS,KACvC,gBAAAF;AAAA,YAACN;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACLQ,QAAO;AAAA,gBACP,cAAcA,QAAO;AAAA,cACvB;AAAA,cACD;AAAA;AAAA,UAED;AAAA;AAAA;AAAA,IAEJ;AAAA,IAGC,KAAK,YAAY,cAChB,gBAAAF,MAACP,QAAA,EACE,eAAK,SAAS,IAAI,CAAC,UAClB,gBAAAO;AAAA,MAAC;AAAA;AAAA,QAEC,MAAM;AAAA,QACN,OAAO,QAAQ;AAAA,QACf;AAAA;AAAA,MAHK,MAAM;AAAA,IAIb,CACD,GACH;AAAA,KAEJ;AAEJ;AAEO,IAAM,SAAsC,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AACF,MAAM;AACJ,QAAM,YAAY,OAAO,IAAIH,UAAS,MAAM,CAAC,CAAC,EAAE;AAChD,QAAM,WAAW,OAAO,IAAIA,UAAS,MAAM,CAAC,CAAC,EAAE;AAC/C,QAAMM,eAAc,WAAW,IAAI,QAAQ,EAAE;AAC7C,QAAM,cAAc,KAAK,IAAIA,eAAc,KAAK,GAAG;AAEnD,EAAAX,WAAU,MAAM;AACd,QAAI,WAAW;AACb,MAAAK,UAAS,SAAS;AAAA,QAChBA,UAAS,OAAO,UAAU;AAAA,UACxB,SAAS;AAAA,UACT,UAAU;AAAA,UACV,iBAAiB;AAAA,QACnB,CAAC;AAAA,QACDA,UAAS,OAAO,WAAW;AAAA,UACzB,SAAS;AAAA,UACT,UAAU;AAAA,UACV,iBAAiB;AAAA,QACnB,CAAC;AAAA,MACH,CAAC,EAAE,MAAM;AAAA,IACX,OAAO;AACL,MAAAA,UAAS,SAAS;AAAA,QAChBA,UAAS,OAAO,UAAU;AAAA,UACxB,SAAS;AAAA,UACT,UAAU;AAAA,UACV,iBAAiB;AAAA,QACnB,CAAC;AAAA,QACDA,UAAS,OAAO,WAAW;AAAA,UACzB,SAAS;AAAA,UACT,UAAU;AAAA,UACV,iBAAiB;AAAA,QACnB,CAAC;AAAA,MACH,CAAC,EAAE,MAAM;AAAA,IACX;AAAA,EACF,GAAG,CAAC,WAAW,UAAU,SAAS,CAAC;AAEnC,QAAM,kBAAkB,CAAC,SAAyB;AAChD,QAAI,KAAK,SAAS;AAChB,WAAK,QAAQ;AAAA,IACf;AAEA,YAAQ;AAAA,EACV;AAEA,QAAM,wBAAwB,CAAC,OAAY,UAAkB;AAC3D,WACE,gBAAAI,MAACR,QAAA,EAA6B,OAAOS,QAAO,iBACzC;AAAA,YAAM,SACL,gBAAAF,MAACN,OAAA,EAAK,OAAOQ,QAAO,sBAAuB,gBAAM,OAAM;AAAA,MAExD,MAAM,MAAM,IAAI,CAAC,SAChB,gBAAAF;AAAA,QAAC;AAAA;AAAA,UAEC;AAAA,UACA,OAAO;AAAA,UACP,aAAa;AAAA;AAAA,QAHR,KAAK;AAAA,MAIZ,CACD;AAAA,SAXQ,MAAM,MAAM,KAYvB;AAAA,EAEJ;AAEA,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,SAAS;AAAA,MACT,aAAW;AAAA,MACX,eAAc;AAAA,MACd,gBAAgB;AAAA,MAGhB;AAAA,wBAAAD,MAACH,UAAS,MAAT,EAAc,OAAO,CAACK,QAAO,UAAU,EAAE,SAAS,SAAS,CAAC,GAC3D,0BAAAF;AAAA,UAACL;AAAA,UAAA;AAAA,YACC,OAAOG,YAAW;AAAA,YAClB,SAAS;AAAA,YACT,eAAe;AAAA;AAAA,QACjB,GACF;AAAA,QAGA,gBAAAE;AAAA,UAACH,UAAS;AAAA,UAAT;AAAA,YACC,OAAO;AAAA,cACLK,QAAO;AAAA,cACP;AAAA,gBACE,OAAO;AAAA,gBACP,CAAC,QAAQ,GAAG;AAAA,gBACZ,WAAW;AAAA,kBACT;AAAA,oBACE,YAAY,UAAU,YAAY;AAAA,sBAChC,YAAY,CAAC,GAAG,CAAC;AAAA,sBACjB,aACE,aAAa,SAAS,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;AAAA,oBAC7D,CAAC;AAAA,kBACH;AAAA,gBACF;AAAA,cACF;AAAA,cACA;AAAA,YACF;AAAA,YAEA,0BAAAD,MAACF,eAAA,EAAa,OAAOG,QAAO,UAEzB;AAAA,sBACC,gBAAAF,MAACP,QAAA,EAAK,OAAOS,QAAO,eACjB,iBAAO,SAAS,WACf,gBAAAF,MAACN,OAAA,EAAK,OAAOQ,QAAO,UAAW,gBAAK,IAEpC,MAEJ;AAAA,cAIF,gBAAAF;AAAA,gBAACJ;AAAA,gBAAA;AAAA,kBACC,OAAOM,QAAO;AAAA,kBACd,8BAA8B;AAAA,kBAE7B,sBAAY;AAAA,oBAAI,CAAC,OAAO,UACvB,sBAAsB,OAAO,KAAK;AAAA,kBACpC;AAAA;AAAA,cACF;AAAA,cAGC,UACC,gBAAAF,MAACP,QAAA,EAAK,OAAOS,QAAO,iBACjB,iBAAO,WAAW,WACjB,gBAAAF,MAACN,OAAA,EAAK,OAAOQ,QAAO,YAAa,kBAAO,IAExC,QAEJ;AAAA,eAEJ;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,IAAMA,UAASJ,YAAW,OAAO;AAAA,EAC/B,UAAU;AAAA,IACR,GAAGA,YAAW;AAAA,IACd,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,IACN,UAAU;AAAA,IACV,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,cAAc,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,IACpC,eAAe;AAAA,IACf,cAAc;AAAA,IACd,WAAW;AAAA,EACb;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACA,eAAe;AAAA,IACb,SAAS;AAAA,IACT,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,YAAY;AAAA,EACd;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,qBAAqB;AAAA,IACnB,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,iBAAiB;AAAA,IACf,cAAc;AAAA,EAChB;AAAA,EACA,sBAAsB;AAAA,IACpB,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,eAAe;AAAA,IACf,eAAe;AAAA,IACf,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,cAAc;AAAA,EAChB;AAAA,EACA,gBAAgB;AAAA,IACd,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,kBAAkB;AAAA,IAClB,cAAc;AAAA,EAChB;AAAA,EACA,sBAAsB;AAAA,IACpB,iBAAiB;AAAA,EACnB;AAAA,EACA,wBAAwB;AAAA,IACtB,SAAS;AAAA,EACX;AAAA,EACA,gBAAgB;AAAA,IACd,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,aAAa;AAAA,EACf;AAAA,EACA,oBAAoB;AAAA,IAClB,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,0BAA0B;AAAA,IACxB,OAAO;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,uBAAuB;AAAA,IACrB,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,yBAAyB;AAAA,IACvB,OAAO;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACf,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,mBAAmB;AAAA,IACnB,YAAY;AAAA,EACd;AAAA,EACA,qBAAqB;AAAA,IACnB,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACf,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,WAAW,CAAC,EAAE,QAAQ,OAAO,CAAC;AAAA,EAChC;AAAA,EACA,yBAAyB;AAAA,IACvB,WAAW,CAAC,EAAE,QAAQ,QAAQ,CAAC;AAAA,EACjC;AAAA,EACA,iBAAiB;AAAA,IACf,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,YAAY;AAAA,EACd;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,EACb;AACF,CAAC;;;ACvYD,SAAgB,YAAAM,iBAAgB;AAChC;AAAA,EACE,QAAAC;AAAA,EACA,cAAAC;AAAA,EACA,gBAAAC;AAAA,EACA;AAAA,EACA,YAAAC;AAAA,OACK;AA+BD,gBAAAC,OAwBA,QAAAC,aAxBA;AApBC,IAAM,WAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,iBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA,2BAA2BC,UAAS,OAAO,QAAQ,YAAY;AACjE,MAAM;AACJ,QAAM,CAAC,iBAAiB,kBAAkB,IAAIC,UAAS,KAAK;AAE5D,QAAM,aAAa,MAAM,mBAAmB,IAAI;AAChD,QAAM,cAAc,MAAM,mBAAmB,KAAK;AAElD,QAAM,eAAe,MAAM;AACzB,QAAI,CAAC,OAAQ,QAAO;AAEpB,WACE,gBAAAH;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ,aAAa,UAAU,aAAa;AAAA,QACpC,gBAAgB,CAAC,CAAC;AAAA;AAAA,IACpB;AAAA,EAEJ;AAEA,QAAM,eAAe,MAAM;AACzB,QAAI,CAAC,QAAS,QAAO;AAErB,WACE,gBAAAA,MAAC,UAAQ,GAAG,SAAS,WAAW,iBAAiB,SAAS,aAAa;AAAA,EAE3E;AAEA,QAAM,eAAe,MAAM;AACzB,QAAI,CAAC,OAAQ,QAAO;AAEpB,WAAO,gBAAAA,MAACI,QAAA,EAAK,OAAOC,QAAO,QAAS,kBAAO;AAAA,EAC7C;AAEA,SACE,gBAAAL,MAACM,eAAA,EAAa,OAAO,CAACD,QAAO,WAAW,KAAK,GAC3C,0BAAAJ;AAAA,IAAC;AAAA;AAAA,MACC,UAAU;AAAA,MACV,OAAOI,QAAO;AAAA,MAGb;AAAA,qBAAa;AAAA,QAGd,gBAAAL,MAACI,QAAA,EAAK,OAAO,CAACC,QAAO,SAAS,YAAY,GAAI,UAAS;AAAA,QAGtD,aAAa;AAAA,QAGb,aAAa;AAAA;AAAA;AAAA,EAChB,GACF;AAEJ;AAEA,IAAMA,UAASE,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,sBAAsB;AAAA,IACpB,MAAM;AAAA,EACR;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,IACN,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,EACnB;AACF,CAAC;;;ACpGD;AAAA,EACE,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,OACK;AA2DG,SACgB,OAAAC,OADhB,QAAAC,aAAA;AAjDH,IAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX;AACF,MAAM;AAEJ,QAAM,WAAW,WACb;AAAA,IACE;AAAA,MACE,OAAO;AAAA,MACP,MAAM;AAAA,IACR;AAAA,IACA,GAAG;AAAA,EACL,IACA;AAGJ,QAAM,iBAAiB,SAAS,SAAS;AACzC,QAAM,eAAe,iBACjB;AAAA,IACE,SAAS,CAAC;AAAA,IACV,EAAE,OAAO,OAAO,MAAM,OAAU;AAAA,IAChC,GAAG,SAAS,MAAM,EAAE,WAAW,EAAE;AAAA,EACnC,IACA;AAEJ,QAAM,kBAAkB,CAAC,SAAyB;AAChD,QAAI,KAAK,SAAS;AAChB,WAAK,QAAQ;AAAA,IACf,WAAW,KAAK,MAAM;AAEpB,cAAQ,IAAI,gBAAgB,KAAK,IAAI;AAAA,IACvC;AAAA,EACF;AAEA,SACE,gBAAAD;AAAA,IAACD;AAAA,IAAA;AAAA,MACC,YAAU;AAAA,MACV,gCAAgC;AAAA,MAChC,OAAO,CAACG,QAAO,WAAW,KAAK;AAAA,MAC/B,uBAAuBA,QAAO;AAAA,MAE7B,uBAAa,IAAI,CAAC,MAAM,UAAU;AACjC,YAAI,CAAC,KAAM,QAAO;AAClB,cAAM,SAAS,UAAU,aAAa,SAAS;AAC/C,cAAM,aAAa,KAAK,UAAU;AAElC,eACE,gBAAAD,MAACN,QAAA,EAAoC,OAAOO,QAAO,gBAChD;AAAA,kBAAQ,KAAK,gBAAAF,MAACJ,OAAA,EAAK,OAAOM,QAAO,WAAW,iBAAG;AAAA,UAE/C,aACC,gBAAAF,MAACJ,OAAA,EAAK,OAAOM,QAAO,UAAU,iBAAG,IAC/B,SACF,gBAAAF,MAACJ,OAAA,EAAK,OAAOM,QAAO,aAAa,eAAe,GAC7C,eAAK,OACR,IAEA,gBAAAF;AAAA,YAACH;AAAA,YAAA;AAAA,cACC,SAAS,MAAM,QAAQ,gBAAgB,IAAI;AAAA,cAC3C,OAAOK,QAAO;AAAA,cACd,eAAe;AAAA,cAEf,0BAAAF,MAACJ,OAAA,EAAK,OAAOM,QAAO,UAAU,eAAe,GAC1C,eAAK,OACR;AAAA;AAAA,UACF;AAAA,aAlBO,GAAG,KAAK,KAAK,IAAI,KAAK,EAoBjC;AAAA,MAEJ,CAAC;AAAA;AAAA,EACH;AAEJ;AAEA,IAAMA,UAASJ,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA,SAAS;AAAA,IACP,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,EACnB;AAAA,EACA,gBAAgB;AAAA,IACd,eAAe;AAAA,IACf,YAAY;AAAA,EACd;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,kBAAkB;AAAA,EACpB;AAAA,EACA,aAAa;AAAA,IACX,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,UAAU;AAAA,IACR,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,cAAc;AAAA,EAChB;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AACF,CAAC;;;ACpID,SAAgB,YAAAK,WAAU,UAAAC,SAAQ,aAAAC,kBAAiB;AACnD;AAAA,EACE,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAAC;AAAA,OAEK;AA6ED,SAIM,OAAAC,OAJN,QAAAC,cAAA;AAjEC,IAAM,OAAkC,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,aAAa;AAAA,EACb,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,YAAY,aAAa,IAAIV,UAEjC,CAAC,CAAC;AACL,QAAM,gBAAgBC,QAAO,IAAIM,UAAS,MAAM,CAAC,CAAC,EAAE;AACpD,QAAM,iBAAiBN,QAAO,IAAIM,UAAS,MAAM,CAAC,CAAC,EAAE;AACrD,QAAM,gBAAgBN,QAAmB,IAAI;AAE7C,QAAM,cAAc,MAAM,UAAU,CAAC,SAAS,KAAK,OAAO,KAAK;AAG/D,EAAAC,WAAU,MAAM;AACd,UAAM,YAAY,WAAW,KAAK;AAClC,QAAI,aAAa,YAAY,aAAa;AACxC,MAAAK,UAAS,SAAS;AAAA,QAChBA,UAAS,OAAO,eAAe;AAAA,UAC7B,SAAS,UAAU;AAAA,UACnB,UAAU;AAAA,UACV,iBAAiB;AAAA,QACnB,CAAC;AAAA,QACDA,UAAS,OAAO,gBAAgB;AAAA,UAC9B,SAAS,UAAU;AAAA,UACnB,UAAU;AAAA,UACV,iBAAiB;AAAA,QACnB,CAAC;AAAA,MACH,CAAC,EAAE,MAAM;AAAA,IACX;AAAA,EACF,GAAG,CAAC,OAAO,YAAY,eAAe,gBAAgB,OAAO,CAAC;AAE9D,QAAM,iBAAiB,CAAC,SAAkB;AACxC,QAAI,KAAK,SAAU;AAEnB,QAAI,KAAK,QAAQ,KAAK,UAAU;AAE9B,cAAQ,IAAI,kBAAkB,KAAK,IAAI;AAAA,IACzC,OAAO;AACL,sBAAgB,KAAK,EAAE;AAAA,IACzB;AAAA,EACF;AAEA,QAAM,kBAAkB,CACtB,QACA,WACG;AACH,kBAAc,CAAC,UAAU;AAAA,MACvB,GAAG;AAAA,MACH,CAAC,MAAM,GAAG;AAAA,IACZ,EAAE;AAAA,EACJ;AAEA,QAAM,mBAAmB,CAAC,MAAe,aAAsB;AAC7D,WACE,gBAAAG,OAACP,QAAA,EAAK,OAAOQ,QAAO,YAEjB;AAAA,WAAK,QACJ,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,QAAO,SAClB,0BAAAF;AAAA,QAACL;AAAA,QAAA;AAAA,UACC,OAAO,CAACO,QAAO,aAAa,YAAYA,QAAO,iBAAiB;AAAA,UAE/D,iBAAO,KAAK,SAAS,WAAW,KAAK,OAAO;AAAA;AAAA,MAC/C,GACF;AAAA,MAIF,gBAAAF;AAAA,QAACL;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACLO,QAAO;AAAA,YACP,SAAS,QAAQA,QAAO;AAAA,YACxB,SAAS,QAAQA,QAAO;AAAA,YACxB,YAAYA,QAAO;AAAA,YACnB;AAAA,YACA,YAAY;AAAA,UACd;AAAA,UACA,eAAe;AAAA,UAEd,eAAK;AAAA;AAAA,MACR;AAAA,MAGC,KAAK,SACJ,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,QAAO,UAClB,0BAAAF,MAACL,OAAA,EAAK,OAAOO,QAAO,cACjB,iBAAO,KAAK,UAAU,YAAY,KAAK,QAAQ,KAC5C,QACA,KAAK,OACX,GACF;AAAA,MAID,KAAK,YACJ,gBAAAF;AAAA,QAACJ;AAAA,QAAA;AAAA,UACC,OAAOM,QAAO;AAAA,UACd,SAAS,CAAC,MAAM;AACd,cAAE,gBAAgB;AAClB,iBAAK,UAAU,KAAK,EAAE;AAAA,UACxB;AAAA,UAEA,0BAAAF,MAACL,OAAA,EAAK,OAAOO,QAAO,iBAAiB,oBAAC;AAAA;AAAA,MACxC;AAAA,OAEJ;AAAA,EAEJ;AAEA,QAAM,YAAY,CAAC,MAAe,UAAkB;AAClD,UAAM,WAAW,KAAK,OAAO;AAE7B,UAAM,eAAe,MAAmB;AACtC,YAAM,YAAyB,CAACA,QAAO,GAAG;AAE1C,UAAI,SAAS,KAAM,WAAU,KAAKA,QAAO,QAAQ;AACjD,UAAI,SAAS,KAAM,WAAU,KAAKA,QAAO,QAAQ;AAEjD,cAAQ,SAAS;AAAA,QACf,KAAK;AACH,oBAAU,KAAKA,QAAO,QAAQ;AAC9B,cAAI,SAAU,WAAU,KAAKA,QAAO,cAAc;AAClD;AAAA,QACF,KAAK;AACH,oBAAU,KAAKA,QAAO,QAAQ;AAC9B,cAAI,SAAU,WAAU,KAAKA,QAAO,cAAc;AAClD;AAAA,QACF,KAAK;AAAA,QACL;AACE,oBAAU,KAAKA,QAAO,YAAY;AAClC,cAAI,SAAU,WAAU,KAAKA,QAAO,kBAAkB;AACtD;AAAA,MACJ;AAEA,UAAI,KAAK,SAAU,WAAU,KAAKA,QAAO,WAAW;AACpD,UAAI,SAAU,WAAU,KAAK,QAAqB;AAClD,UAAI,YAAY;AACd,kBAAU,KAAK,cAA2B;AAE5C,aAAO;AAAA,IACT;AAEA,WACE,gBAAAF;AAAA,MAACJ;AAAA,MAAA;AAAA,QAEC,OAAO,aAAa;AAAA,QACpB,SAAS,MAAM,eAAe,IAAI;AAAA,QAClC,UAAU,KAAK;AAAA,QACf,eAAe;AAAA,QACf,UAAU,CAAC,UAAU;AACnB,gBAAM,EAAE,OAAAO,QAAO,EAAE,IAAI,MAAM,YAAY;AACvC,0BAAgB,KAAK,IAAI,EAAE,OAAAA,QAAO,EAAE,CAAC;AAAA,QACvC;AAAA,QAEC,2BAAiB,MAAM,QAAQ;AAAA;AAAA,MAV3B,KAAK;AAAA,IAWZ;AAAA,EAEJ;AAEA,QAAM,eAAe,aAAaN,cAAaH;AAC/C,QAAM,iBAAiB,aACnB;AAAA,IACE,YAAY;AAAA,IACZ,gCAAgC;AAAA,IAChC,KAAK;AAAA,IACL,uBAAuBQ,QAAO;AAAA,EAChC,IACA;AAAA,IACE,OAAOA,QAAO;AAAA,EAChB;AAEJ,SACE,gBAAAD,OAACP,QAAA,EAAK,OAAO,CAACQ,QAAO,WAAW,KAAK,GACnC;AAAA,oBAAAF,MAAC,gBAAc,GAAG,gBACf,gBAAM,IAAI,CAAC,MAAM,UAAU,UAAU,MAAM,KAAK,CAAC,GACpD;AAAA,IAGC,YAAY,eACX,gBAAAA;AAAA,MAACF,UAAS;AAAA,MAAT;AAAA,QACC,OAAO;AAAA,UACLI,QAAO;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA;AAAA,IACF;AAAA,KAEJ;AAEJ;AAEA,IAAMA,UAASH,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,iBAAiB;AAAA,IACjB,UAAU;AAAA,EACZ;AAAA,EACA,eAAe;AAAA,IACb,eAAe;AAAA,IACf,YAAY;AAAA,EACd;AAAA,EACA,eAAe;AAAA,IACb,eAAe;AAAA,IACf,YAAY;AAAA,EACd;AAAA,EACA,KAAK;AAAA,IACH,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,gBAAgB;AAAA,IAChB,YAAY;AAAA,EACd;AAAA,EACA,UAAU;AAAA,IACR,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,WAAW;AAAA,EACb;AAAA,EACA,UAAU;AAAA,IACR,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,WAAW;AAAA,EACb;AAAA,EACA,cAAc;AAAA,IACZ,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,EACrB;AAAA,EACA,oBAAoB;AAAA,IAClB,mBAAmB;AAAA,EACrB;AAAA,EACA,UAAU;AAAA,IACR,cAAc;AAAA,IACd,kBAAkB;AAAA,EACpB;AAAA,EACA,gBAAgB;AAAA,IACd,iBAAiB;AAAA,EACnB;AAAA,EACA,UAAU;AAAA,IACR,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,IACd,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,EACnB;AAAA,EACA,gBAAgB;AAAA,IACd,iBAAiB;AAAA,IACjB,aAAa;AAAA,EACf;AAAA,EACA,aAAa;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,eAAe;AAAA,IACf,YAAY;AAAA,EACd;AAAA,EACA,SAAS;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA,aAAa;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,mBAAmB;AAAA,IACjB,OAAO;AAAA,EACT;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA,eAAe;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA,gBAAgB;AAAA,IACd,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,UAAU;AAAA,IACR,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,mBAAmB;AAAA,EACrB;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,aAAa;AAAA,IACX,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,YAAY;AAAA,EACd;AAAA,EACA,iBAAiB;AAAA,IACf,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,iBAAiB;AAAA,EACnB;AACF,CAAC;;;ACvVD;AAAA,EACE,QAAAK;AAAA,EACA,QAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,YAAAC;AAAA,OACK;AA+DG,SACE,OAAAC,OADF,QAAAC,cAAA;AAvCH,IAAM,eAA4C,CAAC;AAAA,EACxD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,UAAU;AACZ,MAAM;AACJ,QAAM,iBAAiB,CAAC,SAAqB;AAC3C,QAAI,KAAK,SAAU;AAEnB,SAAK,UAAU;AACf,eAAW,KAAK,EAAE;AAAA,EACpB;AAEA,QAAM,YAAY,CAAC,SAAqB;AACtC,UAAM,WAAW,KAAK,OAAO;AAE7B,WACE,gBAAAA;AAAA,MAACL;AAAA,MAAA;AAAA,QAEC,OAAO;AAAA,UACLM,QAAO;AAAA,UACP,YAAY,aAAaA,QAAO;AAAA,UAChC,YAAYA,QAAO;AAAA,UACnB,KAAK,YAAYA,QAAO;AAAA,UACxB;AAAA,UACA,YAAY;AAAA,QACd;AAAA,QACA,SAAS,MAAM,eAAe,IAAI;AAAA,QAClC,UAAU,KAAK;AAAA,QACf,eAAe;AAAA,QAGd;AAAA,eAAK,QACJ,gBAAAD,OAACP,QAAA,EAAK,OAAOQ,QAAO,eAClB;AAAA,4BAAAF,MAACL,OAAA,EAAK,OAAO,CAACO,QAAO,UAAU,YAAYA,QAAO,cAAc,GAC7D,iBAAO,KAAK,SAAS,WAAW,KAAK,OAAO,UAC/C;AAAA,YAGC,KAAK,SACJ,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,QAAO,OAClB,0BAAAF,MAACL,OAAA,EAAK,OAAOO,QAAO,WACjB,iBAAO,KAAK,UAAU,YAAY,KAAK,QAAQ,KAC5C,QACA,KAAK,OACX,GACF;AAAA,aAEJ;AAAA,UAID,cACC,gBAAAF;AAAA,YAACL;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACLO,QAAO;AAAA,gBACP,YAAY,aAAaA,QAAO;AAAA,gBAChC,YAAYA,QAAO;AAAA,gBACnB;AAAA,gBACA,YAAY;AAAA,cACd;AAAA,cACA,eAAe;AAAA,cAEd,eAAK;AAAA;AAAA,UACR;AAAA,UAID,YAAY,aAAa,YACxB,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,QAAO,iBAAiB;AAAA;AAAA;AAAA,MAnDlC,KAAK;AAAA,IAqDZ;AAAA,EAEJ;AAEA,SACE,gBAAAF,MAACF,eAAA,EAAa,OAAO,CAACI,QAAO,WAAW,KAAK,GAC3C,0BAAAF;AAAA,IAACN;AAAA,IAAA;AAAA,MACC,OAAO,CAACQ,QAAO,QAAQ,YAAY,aAAaA,QAAO,aAAa;AAAA,MAEnE,gBAAM,IAAI,SAAS;AAAA;AAAA,EACtB,GACF;AAEJ;AAEA,IAAMA,UAASL,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,EAClB;AAAA,EACA,QAAQ;AAAA,IACN,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,eAAeE,UAAS,OAAO,QAAQ,IAAI;AAAA,EAC7C;AAAA,EACA,eAAe;AAAA,IACb,mBAAmB;AAAA,EACrB;AAAA,EACA,KAAK;AAAA,IACH,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,WAAW;AAAA,IACX,UAAU;AAAA,EACZ;AAAA,EACA,YAAY;AAAA,IACV,cAAc;AAAA,IACd,kBAAkB;AAAA,IAClB,WAAW;AAAA,EACb;AAAA,EACA,WAAW;AAAA;AAAA,EAEX;AAAA,EACA,aAAa;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,eAAe;AAAA,IACb,UAAU;AAAA,IACV,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACd,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,KAAK;AAAA,IACL,OAAO;AAAA,IACP,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,mBAAmB;AAAA,EACrB;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,WAAW;AAAA,EACb;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA,aAAa;AAAA,IACX,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,iBAAiB;AAAA,IACf,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,iBAAiB;AAAA,EACnB;AACF,CAAC;;;ACpND;AAAA,EACE,QAAAI;AAAA,EACA,QAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,OACK;AAyEG,gBAAAC,OA2BJ,QAAAC,cA3BI;AA5DH,IAAM,UAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,UAAU;AAAA,EACV,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,kBAAkB,CAAC,UAAkB;AACzC,QAAI,CAAC,YAAa;AAElB,UAAM,OAAO,MAAM,KAAK;AACxB,QAAI,CAAC,QAAQ,KAAK,SAAU;AAG5B,QAAI,SAAS,eAAe,iBAAiB;AAC3C,kBAAY,KAAK;AAAA,IACnB;AAAA,EACF;AAEA,QAAM,gBAAgB,CAAC,UAAkB;AACvC,QAAI,QAAQ,YAAa,QAAO;AAChC,QAAI,UAAU,YAAa,QAAO;AAClC,WAAO;AAAA,EACT;AAEA,QAAM,sBAAsB,CAC1B,MACA,OACA,WACG;AACH,UAAM,cACJ,CAAC,KAAK,aAAa,SAAS,eAAe;AAE7C,WACE,gBAAAD;AAAA,MAACH;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACLK,QAAO;AAAA,UACP,YAAY,aAAaA,QAAO;AAAA,UAChC,WAAW,aAAaA,QAAO;AAAA,UAC/B,WAAW,eAAeA,QAAO;AAAA,UACjC,KAAK,YAAYA,QAAO;AAAA,UACxB;AAAA,UACA,WAAW,aAAa;AAAA,UACxB,WAAW,eAAe;AAAA,QAC5B;AAAA,QACA,SAAS,MAAM,gBAAgB,KAAK;AAAA,QACpC,UAAU,CAAC;AAAA,QACX,eAAe,cAAc,MAAM;AAAA,QAGlC,qBAAW,eAAe,YAAY,YACrC,gBAAAF,MAACJ,QAAA,EAAK,OAAOM,QAAO,WAAW,oBAAC,IAC9B,cACF,gBAAAF;AAAA,UAACJ;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACLM,QAAO;AAAA,cACP,WAAW,aAAaA,QAAO;AAAA,cAC/B,WAAW,eAAeA,QAAO;AAAA,cACjC,KAAK,YAAYA,QAAO;AAAA,YAC1B;AAAA,YAEC,kBAAQ;AAAA;AAAA,QACX,IACE,KAAK,OACP,gBAAAF,MAACJ,QAAA,EAAK,OAAOM,QAAO,UACjB,iBAAO,KAAK,SAAS,WAAW,KAAK,OAAO,UAC/C,IACE;AAAA;AAAA,IACN;AAAA,EAEJ;AAEA,QAAM,oBAAoB,CACxB,MACA,OACA,WACG;AACH,WACE,gBAAAD,OAACN,QAAA,EAAK,OAAOO,QAAO,aAClB;AAAA,sBAAAF;AAAA,QAACJ;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACLM,QAAO;AAAA,YACP,WAAW,aAAaA,QAAO;AAAA,YAC/B,WAAW,eAAeA,QAAO;AAAA,YACjC,KAAK,YAAYA,QAAO;AAAA,YACxB;AAAA,YACA,WAAW,aAAa;AAAA,YACxB,WAAW,eAAe;AAAA,UAC5B;AAAA,UACA,eAAe;AAAA,UAEd,eAAK,SAAS,KAAK;AAAA;AAAA,MACtB;AAAA,MAEC,KAAK,eACJ,gBAAAF;AAAA,QAACJ;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACLM,QAAO;AAAA,YACP,WAAW,aAAaA,QAAO;AAAA,YAC/B,KAAK,YAAYA,QAAO;AAAA,UAC1B;AAAA,UACA,eAAe;AAAA,UAEd,eAAK;AAAA;AAAA,MACR;AAAA,OAGA,KAAK,cAAc,KAAK,aACxB,gBAAAF,MAACJ,QAAA,EAAK,OAAOM,QAAO,eAAe,sBAAQ;AAAA,OAE/C;AAAA,EAEJ;AAEA,QAAM,kBAAkB,CAAC,UAAkB;AACzC,QAAI,UAAU,MAAM,SAAS,EAAG,QAAO;AAEvC,UAAM,cAAc,QAAQ;AAE5B,WACE,gBAAAF;AAAA,MAACL;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACLO,QAAO;AAAA,UACP,gBAAgB,aACZA,QAAO,oBACPA,QAAO;AAAA,UACX,eAAeA,QAAO;AAAA,QACxB;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,QAAM,aAAa,CAAC,MAAmB,UAAkB;AACvD,UAAM,SAAS,cAAc,KAAK;AAElC,QAAI,gBAAgB,YAAY;AAC9B,aACE,gBAAAD,OAACN,QAAA,EAAmB,OAAOO,QAAO,cAChC;AAAA,wBAAAD,OAACN,QAAA,EAAK,OAAOO,QAAO,uBACjB;AAAA,8BAAoB,MAAM,OAAO,MAAM;AAAA,UACvC,gBAAgB,KAAK;AAAA,WACxB;AAAA,QACA,gBAAAF,MAACL,QAAA,EAAK,OAAOO,QAAO,qBACjB,4BAAkB,MAAM,OAAO,MAAM,GACxC;AAAA,WAPS,KAAK,EAQhB;AAAA,IAEJ;AAEA,WACE,gBAAAD,OAACN,QAAA,EAAmB,OAAOO,QAAO,gBAC/B;AAAA,0BAAoB,MAAM,OAAO,MAAM;AAAA,MACvC,kBAAkB,MAAM,OAAO,MAAM;AAAA,MACrC,gBAAgB,KAAK;AAAA,SAHb,KAAK,EAIhB;AAAA,EAEJ;AAEA,QAAM,YACJ,gBAAgB,gBAAgB,MAAM,SAAS,IAAIJ,cAAaH;AAClE,QAAM,iBACJ,gBAAgB,gBAAgB,MAAM,SAAS,IAC3C;AAAA,IACE,YAAY;AAAA,IACZ,gCAAgC;AAAA,IAChC,uBAAuBO,QAAO;AAAA,EAChC,IACA;AAAA,IACE,OAAO;AAAA,MACLA,QAAO;AAAA,MACP,gBAAgB,cAAcA,QAAO;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AAEN,SACE,gBAAAF,MAAC,aAAW,GAAG,gBACZ,gBAAM,IAAI,CAAC,MAAM,UAAU,WAAW,MAAM,KAAK,CAAC,GACrD;AAEJ;AAEA,IAAME,UAASH,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,iBAAiB;AAAA,EACnB;AAAA,EACA,mBAAmB;AAAA,IACjB,iBAAiB;AAAA,EACnB;AAAA,EACA,iBAAiB;AAAA,IACf,mBAAmB;AAAA,IACnB,YAAY;AAAA,EACd;AAAA,EACA,gBAAgB;AAAA,IACd,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,UAAU;AAAA,IACV,mBAAmB;AAAA,EACrB;AAAA,EACA,cAAc;AAAA,IACZ,eAAe;AAAA,IACf,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,EACnB;AAAA,EACA,uBAAuB;AAAA,IACrB,YAAY;AAAA,IACZ,aAAa;AAAA,EACf;AAAA,EACA,qBAAqB;AAAA,IACnB,MAAM;AAAA,IACN,eAAe;AAAA,EACjB;AAAA,EACA,eAAe;AAAA,IACb,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AAAA,EACA,sBAAsB;AAAA,IACpB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA,sBAAsB;AAAA,IACpB,iBAAiB;AAAA,IACjB,aAAa;AAAA,EACf;AAAA,EACA,wBAAwB;AAAA,IACtB,iBAAiB;AAAA,IACjB,aAAa;AAAA,EACf;AAAA,EACA,uBAAuB;AAAA,IACrB,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,mBAAmB;AAAA,IACjB,OAAO;AAAA,EACT;AAAA,EACA,qBAAqB;AAAA,IACnB,OAAO;AAAA,EACT;AAAA,EACA,oBAAoB;AAAA,IAClB,OAAO;AAAA,EACT;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,aAAa;AAAA,IACX,YAAY;AAAA,IACZ,MAAM;AAAA,EACR;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,WAAW;AAAA,IACX,cAAc;AAAA,EAChB;AAAA,EACA,kBAAkB;AAAA,IAChB,OAAO;AAAA,EACT;AAAA,EACA,oBAAoB;AAAA,IAClB,OAAO;AAAA,EACT;AAAA,EACA,mBAAmB;AAAA,IACjB,OAAO;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACf,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AAAA,EACA,wBAAwB;AAAA,IACtB,OAAO;AAAA,EACT;AAAA,EACA,yBAAyB;AAAA,IACvB,OAAO;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACb,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX,WAAW;AAAA,EACb;AAAA,EACA,WAAW;AAAA,IACT,iBAAiB;AAAA,EACnB;AAAA,EACA,qBAAqB;AAAA,IACnB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,WAAW;AAAA,IACX,kBAAkB;AAAA,EACpB;AAAA,EACA,mBAAmB;AAAA,IACjB,OAAO;AAAA,IACP,MAAM;AAAA,IACN,WAAW;AAAA,EACb;AAAA,EACA,oBAAoB;AAAA,IAClB,iBAAiB;AAAA,EACnB;AACF,CAAC;;;AC1VD,SAAgB,YAAAI,WAAU,aAAAC,YAAW,UAAAC,eAAc;AACnD;AAAA,EACE,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,SAAAC;AAAA,EACA;AAAA,EACA,cAAAC;AAAA,EACA;AAAA,EACA,gBAAAC;AAAA,OACK;AA8FG,SACE,OAAAC,OADF,QAAAC,cAAA;AAtFH,IAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,eAAe;AACjB,MAAM;AACJ,QAAM,CAAC,aAAa,cAAc,IAAIX,UAAS,EAAE;AACjD,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,UAAmB,CAAC,CAAC;AACjE,QAAM,WAAWE,QAAkB,IAAI;AAGvC,QAAM,cAAqC,SAAS;AAAA,IAAQ,CAAC,UAC3D,MAAM,MAAM,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,OAAO,MAAM,MAAM,EAAE;AAAA,EAC7D;AAGA,QAAM,mBAAmB,cACrB,YAAY;AAAA,IACV,CAAC,YACC,QAAQ,MAAM,YAAY,EAAE,SAAS,YAAY,YAAY,CAAC,KAC9D,QAAQ,aACJ,YAAY,EACb,SAAS,YAAY,YAAY,CAAC,KACrC,QAAQ,UAAU;AAAA,MAAK,CAAC,YACtB,QAAQ,YAAY,EAAE,SAAS,YAAY,YAAY,CAAC;AAAA,IAC1D;AAAA,EACJ,IACA;AAGJ,QAAM,qBAA4C,cAC9C,CAAC,IACD,YACG,OAAO,CAAC,QAAQ,eAAe,SAAS,IAAI,EAAE,CAAC,EAC/C,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,QAAQ,KAAK,EAAE;AAG9C,QAAM,kBACJ,eAAe,mBAAmB,WAAW,IACzC,mBACA;AAAA,IACE,GAAG;AAAA,IACH,GAAG,iBAAiB,OAAO,CAAC,QAAQ,CAAC,eAAe,SAAS,IAAI,EAAE,CAAC;AAAA,EACtE;AAGN,EAAAD,WAAU,MAAM;AACd,QAAI,QAAQ,SAAS,SAAS;AAC5B,iBAAW,MAAM;AACf,iBAAS,SAAS,MAAM;AAAA,MAC1B,GAAG,GAAG;AAAA,IACR;AAAA,EACF,GAAG,CAAC,IAAI,CAAC;AAET,QAAM,iBAAiB,CAAC,YAAiC;AAEvD;AAAA,MAAkB,CAAC,SACjB,CAAC,QAAQ,IAAI,GAAG,KAAK,OAAO,CAAC,OAAO,OAAO,QAAQ,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC;AAAA,IACpE;AAGA,YAAQ,SAAS;AAGjB,iBAAa,KAAK;AAGlB,mBAAe,EAAE;AACjB,aAAS,QAAQ;AAAA,EACnB;AAEA,QAAM,cAAc,MAAM;AACxB,iBAAa,KAAK;AAClB,mBAAe,EAAE;AACjB,aAAS,QAAQ;AAAA,EACnB;AAEA,QAAM,gBAAgB,CAAC,EAAE,KAAK,MAC5B,gBAAAS;AAAA,IAACJ;AAAA,IAAA;AAAA,MACC,OAAOM,QAAO;AAAA,MACd,SAAS,MAAM,eAAe,IAAI;AAAA,MAClC,eAAe;AAAA,MAEf,0BAAAD,OAACR,QAAA,EAAK,OAAOS,QAAO,gBAClB;AAAA,wBAAAD,OAACR,QAAA,EAAK,OAAOS,QAAO,aAClB;AAAA,0BAAAD,OAACR,QAAA,EAAK,OAAOS,QAAO,eAClB;AAAA,4BAAAF,MAACN,QAAA,EAAK,OAAOQ,QAAO,cAAe,eAAK,OAAM;AAAA,YAC7C,KAAK,UACJ,gBAAAF,MAACP,QAAA,EAAK,OAAOS,QAAO,aAClB,0BAAAF,MAACN,QAAA,EAAK,OAAOQ,QAAO,iBAAiB,oBAAM,GAC7C;AAAA,aAEJ;AAAA,UACC,KAAK,eACJ,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,QAAO,oBAAoB,eAAe,GACpD,eAAK,aACR;AAAA,WAEJ;AAAA,QACC,KAAK,YACJ,gBAAAF,MAACP,QAAA,EAAK,OAAOS,QAAO,eAClB,0BAAAF,MAACN,QAAA,EAAK,OAAOQ,QAAO,cAAe,eAAK,UAAS,GACnD;AAAA,SAEJ;AAAA;AAAA,EACF;AAGF,QAAM,sBAAsB,CAAC,eAC3B,gBAAAF,MAACP,QAAA,EAAK,OAAOS,QAAO,eAClB,0BAAAF,MAACN,QAAA,EAAK,OAAOQ,QAAO,mBAAoB,sBAAW,GACrD;AAIF,QAAM,cAGD,CAAC;AAEN,MAAI,eAAe,mBAAmB,WAAW,GAAG;AAElD,UAAM,SAAS,SACZ,IAAI,CAAC,WAAW;AAAA,MACf,GAAG;AAAA,MACH,OAAO,gBAAgB,OAAO,CAAC,QAAQ,IAAI,UAAU,MAAM,KAAK;AAAA,IAClE,EAAE,EACD,OAAO,CAAC,UAAU,MAAM,MAAM,SAAS,CAAC;AAE3C,WAAO,QAAQ,CAAC,UAAU;AACxB,kBAAY,KAAK,EAAE,MAAM,UAAU,MAAM,MAAM,MAAM,CAAC;AACtD,YAAM,MAAM,QAAQ,CAAC,SAAS;AAC5B,oBAAY,KAAK,EAAE,MAAM,QAAQ,MAAM,KAAK,CAAC;AAAA,MAC/C,CAAC;AAAA,IACH,CAAC;AAAA,EACH,OAAO;AAEL,QAAI,mBAAmB,SAAS,GAAG;AACjC,kBAAY,KAAK,EAAE,MAAM,UAAU,MAAM,SAAS,CAAC;AACnD,yBAAmB,QAAQ,CAAC,SAAS;AACnC,oBAAY,KAAK,EAAE,MAAM,QAAQ,MAAM,KAAK,CAAC;AAAA,MAC/C,CAAC;AAAA,IACH;AAEA,UAAM,gBAAgB,gBAAgB;AAAA,MACpC,CAAC,QAAQ,CAAC,eAAe,SAAS,IAAI,EAAE;AAAA,IAC1C;AACA,QAAI,cAAc,SAAS,GAAG;AAC5B,kBAAY,KAAK,EAAE,MAAM,UAAU,MAAM,WAAW,CAAC;AACrD,oBAAc,QAAQ,CAAC,SAAS;AAC9B,oBAAY,KAAK,EAAE,MAAM,QAAQ,MAAM,KAAK,CAAC;AAAA,MAC/C,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,aAAa,CAAC,EAAE,KAAK,MAAyC;AAClE,QAAI,KAAK,SAAS,UAAU;AAC1B,aAAO,oBAAoB,KAAK,IAAc;AAAA,IAChD;AACA,WAAO,cAAc,EAAE,MAAM,KAAK,KAA4B,CAAC;AAAA,EACjE;AAEA,SACE,gBAAAF;AAAA,IAACH;AAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT,eAAc;AAAA,MACd,aAAW;AAAA,MACX,gBAAgB;AAAA,MAEhB,0BAAAG,MAACP,QAAA,EAAK,OAAOS,QAAO,SAClB,0BAAAF,MAACD,eAAA,EAAa,OAAOG,QAAO,UAC1B,0BAAAD,OAACR,QAAA,EAAK,OAAOS,QAAO,cAElB;AAAA,wBAAAD,OAACR,QAAA,EAAK,OAAOS,QAAO,iBAClB;AAAA,0BAAAF;AAAA,YAACL;AAAA,YAAA;AAAA,cACC,KAAK;AAAA,cACL,OAAOO,QAAO;AAAA,cACd;AAAA,cACA,sBAAqB;AAAA,cACrB,OAAO;AAAA,cACP,cAAc;AAAA,cACd,gBAAe;AAAA,cACf,aAAa;AAAA,cACb,eAAc;AAAA;AAAA,UAChB;AAAA,UACA,gBAAAF;AAAA,YAACJ;AAAA,YAAA;AAAA,cACC,OAAOM,QAAO;AAAA,cACd,SAAS;AAAA,cACT,eAAe;AAAA,cAEf,0BAAAF,MAACN,QAAA,EAAK,OAAOQ,QAAO,iBAAiB,oBAAC;AAAA;AAAA,UACxC;AAAA,WACF;AAAA,QAGC,YAAY,WAAW,IACtB,gBAAAF,MAACP,QAAA,EAAK,OAAOS,QAAO,YAClB,0BAAAF,MAACN,QAAA,EAAK,OAAOQ,QAAO,WAAY,wBAAa,GAC/C,IAEA,gBAAAF;AAAA,UAAC;AAAA;AAAA,YACC,MAAM;AAAA,YACN;AAAA,YACA,cAAc,CAAC,MAAM,UACnB,KAAK,SAAS,WACV,UAAU,KAAK,IAAI,KACnB,QAAS,KAAK,KAA6B,EAAE,IAAI,KAAK;AAAA,YAE5D,OAAOE,QAAO;AAAA,YACd,8BAA8B;AAAA,YAC9B,2BAA0B;AAAA;AAAA,QAC5B;AAAA,QAIF,gBAAAF,MAACP,QAAA,EAAK,OAAOS,QAAO,QAClB,0BAAAF,MAACN,QAAA,EAAK,OAAOQ,QAAO,YAAY,+CAEhC,GACF;AAAA,SACF,GACF,GACF;AAAA;AAAA,EACF;AAEJ;AAEA,IAAMA,UAASJ,YAAW,OAAO;AAAA,EAC/B,SAAS;AAAA,IACP,MAAM;AAAA,IACN,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,EACrB;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,gBAAgB;AAAA,EAClB;AAAA,EACA,cAAc;AAAA,IACZ,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,WAAW;AAAA,IACX,aAAa;AAAA,IACb,cAAc,EAAE,OAAO,GAAG,QAAQ,GAAG;AAAA,IACrC,eAAe;AAAA,IACf,cAAc;AAAA,IACd,WAAW;AAAA,EACb;AAAA,EACA,iBAAiB;AAAA,IACf,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,EACrB;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,IACP,iBAAiB;AAAA,EACnB;AAAA,EACA,aAAa;AAAA,IACX,SAAS;AAAA,IACT,YAAY;AAAA,EACd;AAAA,EACA,iBAAiB;AAAA,IACf,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,aAAa;AAAA,IACX,WAAW;AAAA,EACb;AAAA,EACA,eAAe;AAAA,IACb,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,EACrB;AAAA,EACA,mBAAmB;AAAA,IACjB,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,eAAe;AAAA,IACf,eAAe;AAAA,EACjB;AAAA,EACA,aAAa;AAAA,IACX,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,EACrB;AAAA,EACA,gBAAgB;AAAA,IACd,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,EACR;AAAA,EACA,eAAe;AAAA,IACb,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA,aAAa;AAAA,IACX,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,cAAc;AAAA,EAChB;AAAA,EACA,iBAAiB;AAAA,IACf,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,oBAAoB;AAAA,IAClB,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,EACb;AAAA,EACA,eAAe;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,cAAc;AAAA,EAChB;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,IACT,YAAY;AAAA,EACd;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,EACb;AAAA,EACA,QAAQ;AAAA,IACN,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,EACb;AACF,CAAC;;;AC/XD,SAAgB,YAAAK,kBAAgB;AAChC;AAAA,EACE,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,OACK;AA4GG,gBAAAC,OAmDE,QAAAC,cAnDF;AAzFH,IAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,kBAAkB,CAAC,IAAI,IAAI,IAAI,GAAG;AAAA,EAClC,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,OAAO;AAAA,EACP,WAAW;AAAA,EACX;AACF,MAAM;AACJ,QAAM,CAAC,kBAAkB,mBAAmB,IAAIP,WAAS,KAAK;AAG9D,QAAM,sBAAsB,MAAM;AAChC,UAAMQ,SAAiC,CAAC;AAExC,UAAM,eAAe,eAAe,IAAI;AACxC,UAAM,cAAc,eAAe;AAEnC,QAAI,cAAc,aAAa;AAC7B,eAAS,IAAI,GAAG,KAAK,YAAY,KAAK;AACpC,QAAAA,OAAM,KAAK,CAAC;AAAA,MACd;AAAA,IACF,OAAO;AACL,YAAM,mBAAmB,KAAK,IAAI,cAAc,cAAc,CAAC;AAC/D,YAAM,oBAAoB,KAAK;AAAA,QAC7B,cAAc;AAAA,QACd;AAAA,MACF;AAEA,UAAI,mBAAmB,GAAG;AACxB,QAAAA,OAAM,KAAK,CAAC;AACZ,YAAI,mBAAmB,GAAG;AACxB,UAAAA,OAAM,KAAK,UAAU;AAAA,QACvB;AAAA,MACF,OAAO;AACL,iBAAS,IAAI,GAAG,IAAI,kBAAkB,KAAK;AACzC,UAAAA,OAAM,KAAK,CAAC;AAAA,QACd;AAAA,MACF;AAEA,eAAS,IAAI,kBAAkB,KAAK,mBAAmB,KAAK;AAC1D,QAAAA,OAAM,KAAK,CAAC;AAAA,MACd;AAEA,UAAI,oBAAoB,aAAa,GAAG;AACtC,YAAI,oBAAoB,aAAa,GAAG;AACtC,UAAAA,OAAM,KAAK,UAAU;AAAA,QACvB;AACA,QAAAA,OAAM,KAAK,UAAU;AAAA,MACvB,OAAO;AACL,iBAAS,IAAI,oBAAoB,GAAG,KAAK,YAAY,KAAK;AACxD,UAAAA,OAAM,KAAK,CAAC;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAEA,WAAOA;AAAA,EACT;AAEA,QAAM,QAAQ,oBAAoB;AAElC,QAAM,cAAc;AAAA,IAClB,IAAI,EAAE,OAAO,IAAI,QAAQ,IAAI,UAAU,GAAG;AAAA,IAC1C,SAAS,EAAE,OAAO,IAAI,QAAQ,IAAI,UAAU,GAAG;AAAA,IAC/C,IAAI,EAAE,OAAO,IAAI,QAAQ,IAAI,UAAU,GAAG;AAAA,EAC5C;AAEA,QAAM,aAAa,YAAY,IAAI;AAEnC,QAAM,gBAAgB,CAAC,MAA2B,UAAkB;AAClE,QAAI,SAAS,YAAY;AACvB,aACE,gBAAAF;AAAA,QAACL;AAAA,QAAA;AAAA,UAEC,OAAO;AAAA,YACLQ,QAAO;AAAA,YACP;AAAA,cACE,OAAO,WAAW;AAAA,cAClB,QAAQ,WAAW;AAAA,YACrB;AAAA,UACF;AAAA,UAEA,0BAAAH;AAAA,YAACJ;AAAA,YAAA;AAAA,cACC,OAAO,CAACO,QAAO,cAAc,EAAE,UAAU,WAAW,SAAS,CAAC;AAAA,cAC/D;AAAA;AAAA,UAED;AAAA;AAAA,QAbK,YAAY,KAAK;AAAA,MAcxB;AAAA,IAEJ;AAEA,UAAM,WAAW,SAAS;AAC1B,UAAM,aAAa;AAEnB,WACE,gBAAAH;AAAA,MAACH;AAAA,MAAA;AAAA,QAEC,OAAO;AAAA,UACLM,QAAO;AAAA,UACP;AAAA,YACE,OAAO,WAAW;AAAA,YAClB,QAAQ,WAAW;AAAA,UACrB;AAAA,UACA,YAAYA,QAAO;AAAA,UACnB,cAAcA,QAAO;AAAA,QACvB;AAAA,QACA,SAAS,MAAM,CAAC,cAAc,aAAa,IAAI;AAAA,QAC/C,UAAU,cAAc;AAAA,QACxB,eAAe;AAAA,QAEf,0BAAAH;AAAA,UAACJ;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACLO,QAAO;AAAA,cACP,EAAE,UAAU,WAAW,SAAS;AAAA,cAChC,YAAYA,QAAO;AAAA,cACnB,cAAcA,QAAO;AAAA,YACvB;AAAA,YAEC;AAAA;AAAA,QACH;AAAA;AAAA,MAvBK;AAAA,IAwBP;AAAA,EAEJ;AAEA,QAAM,YAAY,cAAc,cAAc,KAAK,WAAW,IAAI;AAClE,QAAM,UAAU,aAAa,KAAK,IAAI,cAAc,UAAU,UAAU,IAAI;AAE5E,SACE,gBAAAF,OAACN,QAAA,EAAK,OAAO,CAACQ,QAAO,WAAW,KAAK,GAEjC;AAAA,kBAAa,iBACb,gBAAAF,OAACN,QAAA,EAAK,OAAOQ,QAAO,SACjB;AAAA,mBAAa,cACZ,gBAAAF,OAACL,QAAA,EAAK,OAAOO,QAAO,WAAW;AAAA;AAAA,QACpB;AAAA,QAAU;AAAA,QAAK;AAAA,QAAQ;AAAA,QAAK;AAAA,QAAW;AAAA,SAClD;AAAA,MAGD,gBAAgB,oBACf,gBAAAF,OAACN,QAAA,EAAK,OAAOQ,QAAO,mBAClB;AAAA,wBAAAH,MAACJ,QAAA,EAAK,OAAOO,QAAO,eAAe,kBAAI;AAAA,QACvC,gBAAAF;AAAA,UAACJ;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACLM,QAAO;AAAA,cACP,YAAYA,QAAO;AAAA,YACrB;AAAA,YACA,SAAS,MACP,CAAC,YAAY,oBAAoB,CAAC,gBAAgB;AAAA,YAEpD;AAAA,YACA,eAAe;AAAA,YAEf;AAAA,8BAAAH;AAAA,gBAACJ;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACLO,QAAO;AAAA,oBACP,YAAYA,QAAO;AAAA,kBACrB;AAAA,kBAEC;AAAA;AAAA,cACH;AAAA,cACA,gBAAAH;AAAA,gBAACJ;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACLO,QAAO;AAAA,oBACP,YAAYA,QAAO;AAAA,kBACrB;AAAA,kBAEC,6BAAmB,WAAM;AAAA;AAAA,cAC5B;AAAA;AAAA;AAAA,QACF;AAAA,QACA,gBAAAH,MAACJ,QAAA,EAAK,OAAOO,QAAO,eAAe,sBAAQ;AAAA,QAG1C,oBACC,gBAAAH,MAACL,QAAA,EAAK,OAAOQ,QAAO,cACjB,0BAAgB,IAAI,CAAC,WACpB,gBAAAH;AAAA,UAACH;AAAA,UAAA;AAAA,YAEC,OAAO;AAAA,cACLM,QAAO;AAAA,cACP,WAAW,YAAYA,QAAO;AAAA,YAChC;AAAA,YACA,SAAS,MAAM;AACb,+BAAiB,MAAM;AACvB,kCAAoB,KAAK;AAAA,YAC3B;AAAA,YACA,eAAe;AAAA,YAEf,0BAAAH;AAAA,cAACJ;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,kBACLO,QAAO;AAAA,kBACP,WAAW,YAAYA,QAAO;AAAA,gBAChC;AAAA,gBAEC;AAAA;AAAA,YACH;AAAA;AAAA,UAlBK;AAAA,QAmBP,CACD,GACH;AAAA,SAEJ;AAAA,OAEJ;AAAA,IAIF,gBAAAF;AAAA,MAACF;AAAA,MAAA;AAAA,QACC,YAAU;AAAA,QACV,gCAAgC;AAAA,QAChC,uBAAuBI,QAAO;AAAA,QAG9B;AAAA,0BAAAH;AAAA,YAACH;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACLM,QAAO;AAAA,gBACP;AAAA,kBACE,OAAO,WAAW;AAAA,kBAClB,QAAQ,WAAW;AAAA,gBACrB;AAAA,iBACC,YAAY,eAAe,MAAMA,QAAO;AAAA,cAC3C;AAAA,cACA,SAAS,MAAM,aAAa,cAAc,CAAC;AAAA,cAC3C,UAAU,YAAY,eAAe;AAAA,cACrC,eAAe;AAAA,cAEf,0BAAAH;AAAA,gBAACJ;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACLO,QAAO;AAAA,oBACP,EAAE,UAAU,WAAW,SAAS;AAAA,qBAC/B,YAAY,eAAe,MAAMA,QAAO;AAAA,kBAC3C;AAAA,kBACD;AAAA;AAAA,cAED;AAAA;AAAA,UACF;AAAA,UAGC,MAAM,IAAI,CAAC,MAAM,UAAU,cAAc,MAAM,KAAK,CAAC;AAAA,UAGtD,gBAAAH;AAAA,YAACH;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACLM,QAAO;AAAA,gBACP;AAAA,kBACE,OAAO,WAAW;AAAA,kBAClB,QAAQ,WAAW;AAAA,gBACrB;AAAA,iBACC,YAAY,eAAe,eAAeA,QAAO;AAAA,cACpD;AAAA,cACA,SAAS,MAAM,aAAa,cAAc,CAAC;AAAA,cAC3C,UAAU,YAAY,eAAe;AAAA,cACrC,eAAe;AAAA,cAEf,0BAAAH;AAAA,gBAACJ;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACLO,QAAO;AAAA,oBACP,EAAE,UAAU,WAAW,SAAS;AAAA,qBAC/B,YAAY,eAAe,eAAeA,QAAO;AAAA,kBACpD;AAAA,kBACD;AAAA;AAAA,cAED;AAAA;AAAA,UACF;AAAA;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAEA,IAAMA,UAASL,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,iBAAiB;AAAA,EACnB;AAAA,EACA,SAAS;AAAA,IACP,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,mBAAmB;AAAA,EACrB;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,mBAAmB;AAAA,IACjB,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA,eAAe;AAAA,IACb,UAAU;AAAA,IACV,OAAO;AAAA,IACP,kBAAkB;AAAA,EACpB;AAAA,EACA,gBAAgB;AAAA,IACd,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,IACd,UAAU;AAAA,EACZ;AAAA,EACA,oBAAoB;AAAA,IAClB,UAAU;AAAA,IACV,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA,eAAe;AAAA,IACb,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,KAAK;AAAA,IACL,OAAO;AAAA,IACP,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,IACd,aAAa;AAAA,IACb,cAAc,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,IACpC,eAAe;AAAA,IACf,cAAc;AAAA,IACd,WAAW;AAAA,IACX,QAAQ;AAAA,EACV;AAAA,EACA,kBAAkB;AAAA,IAChB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,UAAU;AAAA,EACZ;AAAA,EACA,wBAAwB;AAAA,IACtB,iBAAiB;AAAA,EACnB;AAAA,EACA,kBAAkB;AAAA,IAChB,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,EACb;AAAA,EACA,wBAAwB;AAAA,IACtB,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACb,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,mBAAmB;AAAA,EACrB;AAAA,EACA,YAAY;AAAA,IACV,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,IACd,kBAAkB;AAAA,EACpB;AAAA,EACA,kBAAkB;AAAA,IAChB,iBAAiB;AAAA,IACjB,aAAa;AAAA,EACf;AAAA,EACA,gBAAgB;AAAA,IACd,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,sBAAsB;AAAA,IACpB,OAAO;AAAA,EACT;AAAA,EACA,cAAc;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,WAAW;AAAA,IACT,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,IACd,kBAAkB;AAAA,EACpB;AAAA,EACA,eAAe;AAAA,IACb,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,EACX;AAAA,EACA,cAAc;AAAA,IACZ,OAAO;AAAA,EACT;AACF,CAAC;;;ACxaD,SAAgB,YAAAM,YAAU,aAAAC,YAAW,eAAAC,cAAa,UAAAC,eAAc;AAChE;AAAA,EACE,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAC;AAAA,OACK;AAiCH,SAQE,OAAAC,OARF,QAAAC,cAAA;AArBJ,IAAM,cAA0C,CAAC;AAAA,EAC/C;AAAA,EACA;AACF,MAAM;AACJ,QAAM,WAAWX,QAAO,IAAIK,UAAS,MAAM,CAAC,CAAC,EAAE;AAE/C,EAAAP,WAAU,MAAM;AACd,IAAAO,UAAS,OAAO,UAAU;AAAA,MACxB,SAAS,YAAY,IAAI;AAAA,MACzB,UAAU;AAAA,MACV,iBAAiB;AAAA,IACnB,CAAC,EAAE,MAAM;AAAA,EACX,GAAG,CAAC,WAAW,QAAQ,CAAC;AAExB,MAAI,CAAC,aAAc,QAAO;AAE1B,QAAMO,gBAAeN,YAAW,IAAI,QAAQ,EAAE;AAC9C,QAAMO,eAAcP,YAAW,IAAI,QAAQ,EAAE;AAC7C,QAAM,kBAAkBE,WAAU,iBAAiB;AAEnD,SACE,gBAAAG;AAAA,IAACN,UAAS;AAAA,IAAT;AAAA,MACC,OAAO;AAAA,QACLE,aAAW;AAAA,QACX,EAAE,SAAS,UAAU,QAAQ,IAAK;AAAA,MACpC;AAAA,MACA,eAAc;AAAA,MAGd;AAAA,wBAAAG;AAAA,UAACT;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACLa,SAAO;AAAA,cACP;AAAA,gBACE,KAAK;AAAA,gBACL,MAAM;AAAA,gBACN,OAAO;AAAA,gBACP,QAAQ,aAAa,IAAI;AAAA,cAC3B;AAAA,YACF;AAAA;AAAA,QACF;AAAA,QAGA,gBAAAJ;AAAA,UAACT;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACLa,SAAO;AAAA,cACP;AAAA,gBACE,KAAK,aAAa,IAAI;AAAA,gBACtB,MAAM;AAAA,gBACN,OAAO,aAAa;AAAA,gBACpB,QAAQ,aAAa;AAAA,cACvB;AAAA,YACF;AAAA;AAAA,QACF;AAAA,QAGA,gBAAAJ;AAAA,UAACT;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACLa,SAAO;AAAA,cACP;AAAA,gBACE,KAAK,aAAa,IAAI;AAAA,gBACtB,MAAM,aAAa,IAAI,aAAa;AAAA,gBACpC,OAAO;AAAA,gBACP,QAAQ,aAAa;AAAA,cACvB;AAAA,YACF;AAAA;AAAA,QACF;AAAA,QAGA,gBAAAJ;AAAA,UAACT;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACLa,SAAO;AAAA,cACP;AAAA,gBACE,KAAK,aAAa,IAAI,aAAa,SAAS;AAAA,gBAC5C,MAAM;AAAA,gBACN,OAAO;AAAA,gBACP,QAAQ;AAAA,cACV;AAAA,YACF;AAAA;AAAA,QACF;AAAA,QAGA,gBAAAJ;AAAA,UAACT;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACLa,SAAO;AAAA,cACP;AAAA,gBACE,KAAK,aAAa,IAAI,kBAAkB;AAAA,gBACxC,MAAM,aAAa,IAAI;AAAA,gBACvB,OAAO,aAAa,QAAQ;AAAA,gBAC5B,QAAQ,aAAa,SAAS;AAAA,cAChC;AAAA,YACF;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EACF;AAEJ;AAeA,IAAM,cAA0C,CAAC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,eAAe,gBAAgB,IAAIjB,WAAS,EAAE,OAAO,GAAG,QAAQ,EAAE,CAAC;AAC1E,QAAM,YAAYG,QAAO,IAAIK,UAAS,MAAM,CAAC,CAAC,EAAE;AAEhD,EAAAP,WAAU,MAAM;AACd,IAAAO,UAAS,OAAO,WAAW;AAAA,MACzB,SAAS;AAAA,MACT,iBAAiB;AAAA,MACjB,SAAS;AAAA,MACT,UAAU;AAAA,IACZ,CAAC,EAAE,MAAM;AAAA,EACX,GAAG,CAAC,SAAS,CAAC;AAEd,QAAM,oBAAoB,MAAM;AAC9B,QAAI,CAAC,gBAAgB,CAAC,cAAc,OAAO;AACzC,aAAO,EAAE,KAAK,KAAK,MAAM,IAAI,OAAO,GAAG;AAAA,IACzC;AAEA,UAAMO,gBAAeN,YAAW,IAAI,QAAQ,EAAE;AAC9C,UAAMO,eAAcP,YAAW,IAAI,QAAQ,EAAE;AAC7C,UAAM,kBAAkBE,WAAU,iBAAiB;AACnD,UAAM,UAAU;AAChB,UAAM,YAAY,KAAK,aAAa;AAEpC,QAAI,MAAM;AACV,UAAM,OAAO;AACb,UAAM,QAAQ;AAEd,YAAQ,WAAW;AAAA,MACjB,KAAK;AACH,cAAM,aAAa,IAAI,cAAc,SAAS,KAAK;AACnD;AAAA,MACF,KAAK;AACH,cAAM,aAAa,IAAI,aAAa,SAAS,KAAK;AAClD;AAAA,MACF,KAAK;AACH,cAAMI,gBAAe,IAAI,cAAc,SAAS,IAAI;AACpD;AAAA,MACF;AACE,cAAM,aAAa,IAAI,aAAa,SAAS,KAAK;AAAA,IACtD;AAGA,QAAI,MAAM,QAAS,OAAM;AACzB,QAAI,MAAM,cAAc,SAASA,gBAAe,UAAU,iBAAiB;AACzE,YAAMA,gBAAe,cAAc,SAAS,UAAU;AAAA,IACxD;AAEA,WAAO,EAAE,KAAK,MAAM,MAAM;AAAA,EAC5B;AAEA,QAAM,WAAW,kBAAkB;AAEnC,SACE,gBAAAD;AAAA,IAACN,UAAS;AAAA,IAAT;AAAA,MACC,OAAO;AAAA,QACLS,SAAO;AAAA,QACP;AAAA,QACA;AAAA,UACE,WAAW;AAAA,YACT;AAAA,cACE,YAAY,UAAU,YAAY;AAAA,gBAChC,YAAY,CAAC,GAAG,CAAC;AAAA,gBACjB,aAAa,CAAC,IAAI,CAAC;AAAA,cACrB,CAAC;AAAA,YACH;AAAA,YACA;AAAA,cACE,OAAO,UAAU,YAAY;AAAA,gBAC3B,YAAY,CAAC,GAAG,CAAC;AAAA,gBACjB,aAAa,CAAC,MAAM,CAAC;AAAA,cACvB,CAAC;AAAA,YACH;AAAA,UACF;AAAA,UACA,SAAS;AAAA,QACX;AAAA,MACF;AAAA,MACA,UAAU,CAAC,UAAU;AACnB,cAAM,EAAE,OAAAC,QAAO,QAAAC,QAAO,IAAI,MAAM,YAAY;AAC5C,yBAAiB,EAAE,OAAAD,QAAO,QAAAC,QAAO,CAAC;AAAA,MACpC;AAAA,MAGA;AAAA,wBAAAL,OAACV,QAAA,EAAK,OAAOa,SAAO,eAClB;AAAA,0BAAAJ,MAACR,QAAA,EAAK,OAAOY,SAAO,cAAe,eAAK,OAAM;AAAA,UAC7C,CAAC,KAAK,mBACL,gBAAAJ,MAACN,oBAAA,EAAiB,SAAS,SAAS,OAAOU,SAAO,aAChD,0BAAAJ,MAACR,QAAA,EAAK,OAAOY,SAAO,iBAAiB,oBAAC,GACxC;AAAA,WAEJ;AAAA,QAGA,gBAAAJ,MAACR,QAAA,EAAK,OAAOY,SAAO,gBACjB,iBAAO,KAAK,YAAY,WACrB,KAAK,UACL,yCACN;AAAA,QAGC,CAAC,KAAK,cACL,gBAAAH,OAACV,QAAA,EAAK,OAAOa,SAAO,eAClB;AAAA,0BAAAH,OAACV,QAAA,EAAK,OAAOa,SAAO,YAClB;AAAA,4BAAAJ,MAACT,QAAA,EAAK,OAAOa,SAAO,WAClB,0BAAAH,OAACT,QAAA,EAAK,OAAOY,SAAO,eACjB;AAAA,iCAAmB;AAAA,cAAE;AAAA,cAAK;AAAA,eAC7B,GACF;AAAA,YACC,kBACC,gBAAAJ,MAACN,oBAAA,EAAiB,SAAS,QAAQ,OAAOU,SAAO,YAC/C,0BAAAJ,MAACR,QAAA,EAAK,OAAOY,SAAO,gBACjB,kBAAQ,QAAQ,QACnB,GACF;AAAA,aAEJ;AAAA,UAEA,gBAAAH,OAACV,QAAA,EAAK,OAAOa,SAAO,aACjB;AAAA,+BAAmB,KAClB,gBAAAJ,MAACN,oBAAA,EAAiB,SAAS,YAAY,OAAOU,SAAO,YACnD,0BAAAJ,MAACR,QAAA,EAAK,OAAOY,SAAO,gBACjB,kBAAQ,QAAQ,QACnB,GACF;AAAA,YAEF,gBAAAJ;AAAA,cAACN;AAAA,cAAA;AAAA,gBACC,SAAS,qBAAqB,aAAa,IAAI,UAAU;AAAA,gBACzD,OAAOU,SAAO;AAAA,gBAEd,0BAAAJ,MAACR,QAAA,EAAK,OAAOY,SAAO,gBACjB,+BAAqB,aAAa,IAC/B,QAAQ,UAAU,WAClB,QAAQ,QAAQ,QACtB;AAAA;AAAA,YACF;AAAA,aACF;AAAA,WACF;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEO,IAAM,OAAkC,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,mBAAmB;AAAA,EACnB,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,SAAS;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EACV;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,mBAAmB,oBAAoB,IAAIjB,WAAS,gBAAgB;AAC3E,QAAM,CAAC,cAAc,eAAe,IAAIA,WAK9B,IAAI;AACd,QAAM,cAAc,MAAM,iBAAiB;AAG3C,EAAAC,WAAU,MAAM;AACd,mBAAe,iBAAiB;AAAA,EAClC,GAAG,CAAC,mBAAmB,YAAY,CAAC;AAGpC,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,UAAU,CAAC,aAAa,QAAQ;AACnC,sBAAgB,IAAI;AACpB;AAAA,IACF;AAIA,oBAAgB;AAAA,MACd,GAAG;AAAA,MACH,GAAG;AAAA,MACH,OAAO;AAAA,MACP,QAAQ;AAAA,IACV,CAAC;AAAA,EACH,GAAG,CAAC,aAAa,QAAQ,mBAAmB,MAAM,CAAC;AAEnD,QAAM,aAAaC,aAAY,MAAM;AACnC,QAAI,oBAAoB,MAAM,SAAS,GAAG;AACxC,2BAAqB,CAAC,SAAS,OAAO,CAAC;AAAA,IACzC,OAAO;AACL,iBAAW;AACX,qBAAe;AAAA,IACjB;AAAA,EACF,GAAG,CAAC,mBAAmB,MAAM,QAAQ,UAAU,cAAc,CAAC;AAE9D,QAAM,iBAAiBA,aAAY,MAAM;AACvC,QAAI,oBAAoB,GAAG;AACzB,2BAAqB,CAAC,SAAS,OAAO,CAAC;AAAA,IACzC;AAAA,EACF,GAAG,CAAC,iBAAiB,CAAC;AAEtB,QAAM,cAAcA,aAAY,MAAM;AACpC,mBAAe;AAAA,EACjB,GAAG,CAAC,cAAc,CAAC;AAEnB,QAAM,aAAaA,aAAY,MAAM;AACnC,aAAS;AACT,mBAAe;AAAA,EACjB,GAAG,CAAC,QAAQ,cAAc,CAAC;AAE3B,MAAI,CAAC,UAAU,CAAC,aAAa;AAC3B,WAAO;AAAA,EACT;AAEA,SACE,gBAAAW;AAAA,IAACP;AAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT,aAAW;AAAA,MACX,eAAc;AAAA,MACd,gBAAgB;AAAA,MAChB,sBAAsBM,UAAS,OAAO;AAAA,MAEtC,0BAAAE,OAACV,QAAA,EAAK,OAAO,CAACa,SAAO,WAAW,KAAK,GAElC;AAAA,wBACC,gBAAAH,OAACV,QAAA,EAAK,OAAOa,SAAO,mBAClB;AAAA,0BAAAJ,MAACR,QAAA,EAAK,OAAOY,SAAO,cAAc,2BAAa;AAAA,UAC/C,gBAAAJ,MAACT,QAAA,EAAK,OAAOa,SAAO,aAClB,0BAAAJ;AAAA,YAACT;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACLa,SAAO;AAAA,gBACP;AAAA,kBACE,OAAO,IAAK,oBAAoB,KAAK,MAAM,SAAU,GAAG;AAAA,gBAC1D;AAAA,cACF;AAAA;AAAA,UACF,GACF;AAAA,UACA,gBAAAH,OAACT,QAAA,EAAK,OAAOY,SAAO,iBACjB;AAAA,gCAAoB;AAAA,YAAE;AAAA,YAAE,MAAM;AAAA,aACjC;AAAA,WACF;AAAA,QAIF,gBAAAJ,MAAC,eAAY,cAA4B,WAAW,QAAQ;AAAA,QAG5D,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAM;AAAA,YACN;AAAA,YACA,kBAAkB;AAAA,YAClB,YAAY,MAAM;AAAA,YAClB,QAAQ;AAAA,YACR,YAAY;AAAA,YACZ,SAAS;AAAA,YACT,QAAQ;AAAA,YACR;AAAA,YACA,QAAQ;AAAA,cACN,MAAM,QAAQ,QAAQ;AAAA,cACtB,OAAO,QAAQ,SAAS;AAAA,cACxB,MAAM,QAAQ,QAAQ;AAAA,cACtB,MAAM,QAAQ,QAAQ;AAAA,cACtB,MAAM,QAAQ,QAAQ;AAAA,cACtB,QAAQ,QAAQ,UAAU;AAAA,YAC5B;AAAA;AAAA,QACF;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;AAEA,IAAMI,WAASP,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,mBAAmB;AAAA,IACjB,UAAU;AAAA,IACV,KAAKE,UAAS,OAAO,QAAQ,KAAK;AAAA,IAClC,MAAM;AAAA,IACN,OAAO;AAAA,IACP,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,SAAS;AAAA,IACT,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,cAAc,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,IACpC,eAAe;AAAA,IACf,cAAc;AAAA,IACd,WAAW;AAAA,IACX,QAAQ;AAAA,EACV;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,aAAa;AAAA,EACf;AAAA,EACA,cAAc;AAAA,IACZ,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,cAAc;AAAA,EAChB;AAAA,EACA,iBAAiB;AAAA,IACf,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACd,UAAU;AAAA,IACV,iBAAiB;AAAA,EACnB;AAAA,EACA,iBAAiB;AAAA,IACf,UAAU;AAAA,IACV,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,IACd,iBAAiB;AAAA,EACnB;AAAA,EACA,SAAS;AAAA,IACP,UAAU;AAAA,IACV,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,cAAc,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,IACpC,eAAe;AAAA,IACf,cAAc;AAAA,IACd,WAAW;AAAA,IACX,QAAQ;AAAA,EACV;AAAA,EACA,eAAe;AAAA,IACb,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,aAAa;AAAA,IACX,SAAS;AAAA,IACT,YAAY;AAAA,EACd;AAAA,EACA,iBAAiB;AAAA,IACf,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACd,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AAAA,EACA,eAAe;AAAA,IACb,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,YAAY;AAAA,EACd;AAAA,EACA,YAAY;AAAA,IACV,eAAe;AAAA,IACf,YAAY;AAAA,EACd;AAAA,EACA,aAAa;AAAA,IACX,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,KAAK;AAAA,EACP;AAAA,EACA,WAAW;AAAA,IACT,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,aAAa;AAAA,EACf;AAAA,EACA,eAAe;AAAA,IACb,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,YAAY;AAAA,IACV,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,EACnB;AAAA,EACA,gBAAgB;AAAA,IACd,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,YAAY;AAAA,IACV,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,IACd,aAAa;AAAA,EACf;AAAA,EACA,gBAAgB;AAAA,IACd,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,YAAY;AAAA,IACV,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,cAAc;AAAA,EAChB;AAAA,EACA,gBAAgB;AAAA,IACd,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AACF,CAAC;;;AC5jBD,SAAgB,YAAAQ,YAAU,aAAAC,YAAW,UAAAC,eAAc;AACnD;AAAA,EACE,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,OAEK;AAsLO,SAEI,OAAAC,OAFJ,QAAAC,cAAA;AA1KP,IAAM,UAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA,SAAS;AAAA,EACT;AACF,MAAM;AACJ,QAAM,CAAC,eAAe,gBAAgB,IAAIX,WAAS,EAAE,OAAO,GAAG,QAAQ,EAAE,CAAC;AAC1E,QAAM,CAAC,cAAc,eAAe,IAAIA,WAK9B,kBAAkB,IAAI;AAChC,QAAM,WAAWE,QAAO,IAAIK,UAAS,MAAM,CAAC,CAAC,EAAE;AAC/C,QAAM,YAAYL,QAAO,IAAIK,UAAS,MAAM,IAAI,CAAC,EAAE;AACnD,QAAM,aAAaL,QAAmC,MAAS;AAG/D,EAAAD,WAAU,MAAM;AACd,QAAI,CAAC,UAAU,CAAC,WAAW,WAAW,eAAgB;AAEtD,cAAU,QAAQ,gBAAgB,CAAC,GAAG,GAAGW,QAAOC,YAAW;AACzD,sBAAgB,EAAE,GAAG,GAAG,OAAAD,QAAO,QAAAC,QAAO,CAAC;AAAA,IACzC,CAAC;AAAA,EACH,GAAG,CAAC,QAAQ,WAAW,cAAc,CAAC;AAGtC,EAAAZ,WAAU,MAAM;AACd,QAAI,QAAQ;AACV,MAAAM,UAAS,SAAS;AAAA,QAChBA,UAAS,OAAO,UAAU;AAAA,UACxB,SAAS;AAAA,UACT,UAAU;AAAA,UACV,iBAAiB;AAAA,QACnB,CAAC;AAAA,QACDA,UAAS,OAAO,WAAW;AAAA,UACzB,SAAS;AAAA,UACT,iBAAiB;AAAA,UACjB,SAAS;AAAA,UACT,UAAU;AAAA,QACZ,CAAC;AAAA,MACH,CAAC,EAAE,MAAM;AAAA,IACX,OAAO;AACL,MAAAA,UAAS,SAAS;AAAA,QAChBA,UAAS,OAAO,UAAU;AAAA,UACxB,SAAS;AAAA,UACT,UAAU;AAAA,UACV,iBAAiB;AAAA,QACnB,CAAC;AAAA,QACDA,UAAS,OAAO,WAAW;AAAA,UACzB,SAAS;AAAA,UACT,UAAU;AAAA,UACV,iBAAiB;AAAA,QACnB,CAAC;AAAA,MACH,CAAC,EAAE,MAAM;AAAA,IACX;AAAA,EACF,GAAG,CAAC,QAAQ,UAAU,SAAS,CAAC;AAGhC,EAAAN,WAAU,MAAM;AACd,QAAI,CAAC,UAAU,CAAC,UAAW;AAE3B,eAAW,UAAU,WAAW,MAAM;AACpC,cAAQ;AAAA,IACV,GAAG,SAAS;AAEZ,WAAO,MAAM;AACX,UAAI,WAAW,SAAS;AACtB,qBAAa,WAAW,OAAO;AAAA,MACjC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,QAAQ,WAAW,OAAO,CAAC;AAE/B,QAAM,oBAAoB,MAAM;AAC9B,QAAI,CAAC,gBAAgB,CAAC,cAAc,OAAO;AACzC,aAAO,EAAE,KAAK,KAAK,MAAM,IAAI,OAAO,GAAG;AAAA,IACzC;AAEA,UAAMa,eAAcN,YAAW,IAAI,QAAQ,EAAE;AAC7C,UAAM,UAAU;AAEhB,QAAI,MAAM;AACV,QAAI,OAAO;AACX,QAAI,QAAQ;AAEZ,YAAQ,WAAW;AAAA,MACjB,KAAK;AACH,cAAM,aAAa,IAAI,cAAc,SAAS;AAC9C,eAAO,KAAK;AAAA,UACV;AAAA,UACA,aAAa,KAAK,aAAa,QAAQ,cAAc,SAAS;AAAA,QAChE;AACA,gBAAQ,KAAK,IAAI,SAASM,eAAc,OAAO,cAAc,KAAK;AAClE;AAAA,MACF,KAAK;AACH,cAAM,aAAa,IAAI,aAAa,SAAS;AAC7C,eAAO,KAAK;AAAA,UACV;AAAA,UACA,aAAa,KAAK,aAAa,QAAQ,cAAc,SAAS;AAAA,QAChE;AACA,gBAAQ,KAAK,IAAI,SAASA,eAAc,OAAO,cAAc,KAAK;AAClE;AAAA,MACF,KAAK;AACH,cAAM,aAAa,KAAK,aAAa,SAAS,cAAc,UAAU;AACtE,eAAO;AACP,gBAAQA,eAAc,aAAa,IAAI;AACvC;AAAA,MACF,KAAK;AACH,cAAM,aAAa,KAAK,aAAa,SAAS,cAAc,UAAU;AACtE,eAAO,aAAa,IAAI,aAAa,QAAQ;AAC7C,gBAAQ;AACR;AAAA,IACJ;AAGA,QAAI,MAAM,QAAS,OAAM;AACzB,QAAI,OAAO,QAAS,QAAO;AAC3B,QAAI,QAAQ,QAAS,SAAQ;AAE7B,WAAO,EAAE,KAAK,MAAM,MAAM;AAAA,EAC5B;AAEA,MAAI,CAAC,UAAU,CAAC,cAAc;AAC5B,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,kBAAkB;AAEnC,SACE,gBAAAJ;AAAA,IAACL;AAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT,aAAW;AAAA,MACX,eAAc;AAAA,MACd,gBAAgB;AAAA,MAGhB,0BAAAK;AAAA,QAACJ;AAAA,QAAA;AAAA,UACC,OAAOS,SAAO;AAAA,UACd,eAAe;AAAA,UACf,SAAS;AAAA,UAGT,0BAAAL;AAAA,YAACH,UAAS;AAAA,YAAT;AAAA,cACC,OAAO;AAAA,gBACLQ,SAAO;AAAA,gBACP;AAAA,gBACA;AAAA,kBACE,SAAS;AAAA,kBACT,WAAW,CAAC,EAAE,OAAO,UAAU,CAAC;AAAA,gBAClC;AAAA,gBACA;AAAA,cACF;AAAA,cACA,UAAU,CAAC,UAAU;AACnB,sBAAM,EAAE,OAAAH,QAAO,QAAAC,QAAO,IAAI,MAAM,YAAY;AAC5C,iCAAiB,EAAE,OAAAD,QAAO,QAAAC,QAAO,CAAC;AAAA,cACpC;AAAA,cAEA,0BAAAF;AAAA,gBAACL;AAAA,gBAAA;AAAA,kBACC,eAAe;AAAA,kBACf,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,kBAGhC;AAAA,8BAAS,oBACT,gBAAAK,OAACR,QAAA,EAAK,OAAOY,SAAO,QACjB;AAAA,+BACC,gBAAAL,MAACN,QAAA,EAAK,OAAOW,SAAO,OAAO,eAAe,GACvC,iBACH;AAAA,sBAED,mBACC,gBAAAL;AAAA,wBAACJ;AAAA,wBAAA;AAAA,0BACC,SAAS;AAAA,0BACT,OAAOS,SAAO;AAAA,0BAEd,0BAAAL,MAACN,QAAA,EAAK,OAAOW,SAAO,iBAAiB,oBAAC;AAAA;AAAA,sBACxC;AAAA,uBAEJ;AAAA,oBAIF,gBAAAL,MAACN,QAAA,EAAK,OAAOW,SAAO,SACjB,iBAAO,YAAY,WAChB,UACA,yCACN;AAAA;AAAA;AAAA,cACF;AAAA;AAAA,UACF;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;AAEA,IAAMA,WAASN,aAAW,OAAO;AAAA,EAC/B,UAAU;AAAA,IACR,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,SAAS;AAAA,IACP,UAAU;AAAA,IACV,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,SAAS;AAAA,IACT,UAAU;AAAA,IACV,aAAa;AAAA,IACb,cAAc,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,IACpC,eAAe;AAAA,IACf,cAAc;AAAA,IACd,WAAW;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AAAA,EACA,QAAQ;AAAA,IACN,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,aAAa;AAAA,IACX,SAAS;AAAA,IACT,YAAY;AAAA,EACd;AAAA,EACA,iBAAiB;AAAA,IACf,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,SAAS;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AACF,CAAC;;;AC1QD,SAAgB,YAAAO,YAAU,eAAAC,oBAAmB;AAC7C;AAAA,EACE,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,OACK;AA6DO,gBAAAC,OAaJ,QAAAC,cAbI;AA3Cd,IAAM,WAAoC,CAAC;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AACd,MAAM;AACJ,QAAM,cAAc,MAAM;AACxB,QAAI,gBAAgB,CAAC,aAAa;AAChC,kBAAY,KAAK;AAAA,IACnB;AAAA,EACF;AAEA,SACE,gBAAAA;AAAA,IAACJ;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACLK,SAAO;AAAA,QACP,YAAYA,SAAO;AAAA,QACnB,eAAeA,SAAO;AAAA,QACtB,CAAC,gBAAgBA,SAAO;AAAA,MAC1B;AAAA,MACA,SAAS;AAAA,MACT,UAAU,CAAC,gBAAgB;AAAA,MAC3B,eAAe;AAAA,MAGf;AAAA,wBAAAD,OAACP,QAAA,EAAK,OAAOQ,SAAO,YAClB;AAAA,0BAAAD,OAACP,QAAA,EAAK,OAAOQ,SAAO,wBAElB;AAAA,4BAAAF;AAAA,cAACN;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,kBACLQ,SAAO;AAAA,kBACP,cACIA,SAAO,yBACP,WACEA,SAAO,sBACPA,SAAO;AAAA,gBACf;AAAA,gBAEC,wBACC,gBAAAF,MAACL,QAAA,EAAK,OAAOO,SAAO,wBAAwB,oBAAC,IAE7C,gBAAAF;AAAA,kBAACL;AAAA,kBAAA;AAAA,oBACC,OAAO;AAAA,sBACLO,SAAO;AAAA,sBACP,YAAYA,SAAO;AAAA,oBACrB;AAAA,oBAEC,kBAAQ;AAAA;AAAA,gBACX;AAAA;AAAA,YAEJ;AAAA,YAEA,gBAAAD,OAACP,QAAA,EAAK,OAAOQ,SAAO,oBAClB;AAAA,8BAAAF,MAACL,QAAA,EAAK,OAAOO,SAAO,WAAY,eAAK,OAAM;AAAA,cAC3C,gBAAAF,MAACL,QAAA,EAAK,OAAOO,SAAO,iBAAkB,eAAK,aAAY;AAAA,eACzD;AAAA,aACF;AAAA,UAEA,gBAAAD,OAACP,QAAA,EAAK,OAAOQ,SAAO,YACjB;AAAA,iBAAK,iBACJ,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,WAClB,0BAAAD,OAACN,QAAA,EAAK,OAAOO,SAAO,eAAe;AAAA;AAAA,cAAI,KAAK;AAAA,cAAc;AAAA,eAAC,GAC7D;AAAA,YAED,KAAK,cACJ,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,eAClB,0BAAAF,MAACL,QAAA,EAAK,OAAOO,SAAO,mBAAmB,sBAAQ,GACjD;AAAA,aAEJ;AAAA,WACF;AAAA,QAGC,YACC,gBAAAD,OAACP,QAAA,EAAK,OAAOQ,SAAO,aACjB;AAAA,eAAK,WACJ,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,iBAClB,0BAAAF,MAACL,QAAA,EAAK,OAAOO,SAAO,aACjB,iBAAO,KAAK,YAAY,WACrB,KAAK,UACL,yCACN,GACF;AAAA,UAGD,KAAK,UACJ,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,aAClB,0BAAAD;AAAA,YAACJ;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACLK,SAAO;AAAA,gBACP,aAAaA,SAAO;AAAA,cACtB;AAAA,cACA,SAAS;AAAA,cACT,UAAU;AAAA,cAEV;AAAA,gCAAAF,MAACL,QAAA,EAAK,OAAOO,SAAO,kBACjB,sBAAY,kBAAkB,KAAK,OAAO,OAC7C;AAAA,gBACA,gBAAAF,MAACL,QAAA,EAAK,OAAOO,SAAO,mBAAmB,oBAAC;AAAA;AAAA;AAAA,UAC1C,GACF;AAAA,WAEJ;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEO,IAAM,aAA8C,CAAC;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,YAAY;AAAA,EACZ;AACF,MAAM;AACJ,QAAM,CAAC,cAAc,eAAe,IAAIV,WAAsB,oBAAI,IAAI,CAAC;AACvE,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,WAAsB,oBAAI,IAAI,CAAC;AAE3E,QAAM,qBAAsB,eAAe,OAAO,MAAM,SAAU;AAClE,QAAM,cAAc,eAAe,SAAS,MAAM;AAElD,QAAM,kBAAkBC;AAAA,IACtB,CAAC,cAAsB;AACrB,UAAI,aAAa,aAAa;AAC5B,uBAAe,SAAS;AAAA,MAC1B;AAAA,IACF;AAAA,IACA,CAAC,aAAa,cAAc;AAAA,EAC9B;AAEA,QAAM,mBAAmBA;AAAA,IACvB,OAAO,cAAsB;AAC3B,YAAM,OAAO,MAAM,SAAS;AAC5B,UAAI,CAAC,QAAQ,CAAC,KAAK,OAAQ;AAE3B,sBAAgB,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,IAAI,SAAS,CAAC;AAEtD,UAAI;AACF,cAAM,KAAK,OAAO,QAAQ;AAE1B,YAAI,KAAK,YAAY;AACnB,gBAAM,UAAU,MAAM,KAAK,WAAW;AACtC,cAAI,CAAC,SAAS;AACZ;AAAA,UACF;AAAA,QACF;AAEA,0BAAkB,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,IAAI,SAAS,CAAC;AAExD,YAAI,YAAY,MAAM,SAAS,GAAG;AAChC,qBAAW,MAAM;AACf,2BAAe,YAAY,CAAC;AAAA,UAC9B,GAAG,GAAG;AAAA,QACR,OAAO;AACL,qBAAW,MAAM;AACf,qBAAS;AAAA,UACX,GAAG,GAAI;AAAA,QACT;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,MAAM,0BAA0B,KAAK;AAAA,MAC/C,UAAE;AACA,wBAAgB,CAAC,SAAS;AACxB,gBAAM,SAAS,IAAI,IAAI,IAAI;AAC3B,iBAAO,OAAO,SAAS;AACvB,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,CAAC,OAAO,gBAAgB,QAAQ;AAAA,EAClC;AAEA,MAAI,aAAa;AACf,WACE,gBAAAO,MAACN,QAAA,EAAK,OAAO,CAACQ,SAAO,WAAWA,SAAO,oBAAoB,KAAK,GAC9D,0BAAAD,OAACP,QAAA,EAAK,OAAOQ,SAAO,kBAClB;AAAA,sBAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,eAClB,0BAAAF,MAACL,QAAA,EAAK,OAAOO,SAAO,mBAAmB,oBAAC,GAC1C;AAAA,MACA,gBAAAF,MAACL,QAAA,EAAK,OAAOO,SAAO,gBAAgB,kCAAoB;AAAA,MACxD,gBAAAF,MAACL,QAAA,EAAK,OAAOO,SAAO,sBAAsB,gFAE1C;AAAA,MACA,gBAAAD,OAACJ,oBAAA,EAAiB,OAAOK,SAAO,kBAAkB,SAAS,UACzD;AAAA,wBAAAF,MAACL,QAAA,EAAK,OAAOO,SAAO,sBAAsB,yBAAW;AAAA,QACrD,gBAAAF,MAACL,QAAA,EAAK,OAAOO,SAAO,uBAAuB,oBAAC;AAAA,SAC9C;AAAA,OACF,GACF;AAAA,EAEJ;AAEA,SACE,gBAAAD,OAACP,QAAA,EAAK,OAAO,CAACQ,SAAO,WAAW,KAAK,GAEnC;AAAA,oBAAAD,OAACP,QAAA,EAAK,OAAOQ,SAAO,QAClB;AAAA,sBAAAD,OAACP,QAAA,EAAK,OAAOQ,SAAO,eAClB;AAAA,wBAAAD,OAACP,QAAA,EAAK,OAAOQ,SAAO,qBAClB;AAAA,0BAAAF,MAACL,QAAA,EAAK,OAAOO,SAAO,aAAa,2CAEjC;AAAA,UACA,gBAAAF,MAACL,QAAA,EAAK,OAAOO,SAAO,gBAAgB,2EAEpC;AAAA,WACF;AAAA,QAEC,aAAa,UACZ,gBAAAF,MAACH,oBAAA,EAAiB,SAAS,QAAQ,OAAOK,SAAO,YAC/C,0BAAAF,MAACL,QAAA,EAAK,OAAOO,SAAO,gBAAgB,oCAAiB,GACvD;AAAA,SAEJ;AAAA,MAGC,gBACC,gBAAAD,OAACP,QAAA,EAAK,OAAOQ,SAAO,mBAClB;AAAA,wBAAAD,OAACP,QAAA,EAAK,OAAOQ,SAAO,gBAClB;AAAA,0BAAAF,MAACL,QAAA,EAAK,OAAOO,SAAO,eAAe,sBAAQ;AAAA,UAC3C,gBAAAD,OAACN,QAAA,EAAK,OAAOO,SAAO,cACjB;AAAA,2BAAe;AAAA,YAAK;AAAA,YAAK,MAAM;AAAA,YAAO;AAAA,aACzC;AAAA,WACF;AAAA,QACA,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,aAClB,0BAAAF;AAAA,UAACN;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACLQ,SAAO;AAAA,cACP,EAAE,OAAO,GAAG,kBAAkB,IAAI;AAAA,YACpC;AAAA;AAAA,QACF,GACF;AAAA,SACF;AAAA,OAEJ;AAAA,IAGA,gBAAAF;AAAA,MAACJ;AAAA,MAAA;AAAA,QACC,OAAOM,SAAO;AAAA,QACd,8BAA8B;AAAA,QAE7B,gBAAM,IAAI,CAAC,MAAM,UAAU;AAC1B,gBAAM,WAAW,UAAU;AAC3B,gBAAMC,eAAc,eAAe,IAAI,KAAK;AAC5C,gBAAM,eAAe,SAAS,eAAeA;AAC7C,gBAAM,YAAY,aAAa,IAAI,KAAK;AAExC,iBACE,gBAAAH;AAAA,YAAC;AAAA;AAAA,cAEC;AAAA,cACA;AAAA,cACA;AAAA,cACA,aAAaG;AAAA,cACb;AAAA,cACA,aAAa;AAAA,cACb,YAAY,MAAM,iBAAiB,KAAK;AAAA,cACxC;AAAA;AAAA,YARK,KAAK;AAAA,UASZ;AAAA,QAEJ,CAAC;AAAA;AAAA,IACH;AAAA,IAGA,gBAAAF,OAACP,QAAA,EAAK,OAAOQ,SAAO,QAClB;AAAA,sBAAAF,MAACL,QAAA,EAAK,OAAOO,SAAO,gBAAgB,kDAEpC;AAAA,MACA,gBAAAD,OAACN,QAAA,EAAK,OAAOO,SAAO,gBAAgB;AAAA;AAAA,QAC5B,cAAc;AAAA,QAAE;AAAA,QAAK,MAAM;AAAA,SACnC;AAAA,OACF;AAAA,KACF;AAEJ;AAEA,IAAM,EAAE,MAAM,IAAIH,YAAW,IAAI,QAAQ;AAEzC,IAAMG,WAASJ,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,oBAAoB;AAAA,IAClB,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,SAAS;AAAA,EACX;AAAA,EACA,kBAAkB;AAAA,IAChB,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,SAAS;AAAA,IACT,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,IACb,cAAc,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,IACpC,eAAe;AAAA,IACf,cAAc;AAAA,IACd,WAAW;AAAA,EACb;AAAA,EACA,eAAe;AAAA,IACb,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AAAA,EACA,mBAAmB;AAAA,IACjB,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,gBAAgB;AAAA,IACd,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,WAAW;AAAA,IACX,cAAc;AAAA,EAChB;AAAA,EACA,sBAAsB;AAAA,IACpB,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AAAA,EACA,kBAAkB;AAAA,IAChB,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,eAAe;AAAA,IACf,YAAY;AAAA,EACd;AAAA,EACA,sBAAsB;AAAA,IACpB,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA,uBAAuB;AAAA,IACrB,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,EACrB;AAAA,EACA,eAAe;AAAA,IACb,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AAAA,EACA,qBAAqB;AAAA,IACnB,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,aAAa;AAAA,IACX,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,cAAc;AAAA,EAChB;AAAA,EACA,gBAAgB;AAAA,IACd,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,YAAY;AAAA,IACV,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,EAChB;AAAA,EACA,gBAAgB;AAAA,IACd,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,mBAAmB;AAAA,IACjB,WAAW;AAAA,EACb;AAAA,EACA,gBAAgB;AAAA,IACd,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AAAA,EACA,eAAe;AAAA,IACb,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,cAAc;AAAA,EAChB;AAAA,EACA,cAAc;AAAA,IACZ,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,cAAc;AAAA,EAChB;AAAA,EACA,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,UAAU;AAAA,IACR,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,SAAS;AAAA,IACT,cAAc;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,IACpC,eAAe;AAAA,IACf,cAAc;AAAA,IACd,WAAW;AAAA,EACb;AAAA,EACA,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AAAA,EACA,mBAAmB;AAAA,IACjB,iBAAiB;AAAA,EACnB;AAAA,EACA,kBAAkB;AAAA,IAChB,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,YAAY;AAAA,EACd;AAAA,EACA,wBAAwB;AAAA,IACtB,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,MAAM;AAAA,EACR;AAAA,EACA,eAAe;AAAA,IACb,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AAAA,EACA,sBAAsB;AAAA,IACpB,aAAa;AAAA,IACb,iBAAiB;AAAA,EACnB;AAAA,EACA,qBAAqB;AAAA,IACnB,aAAa;AAAA,IACb,iBAAiB;AAAA,EACnB;AAAA,EACA,wBAAwB;AAAA,IACtB,aAAa;AAAA,IACb,iBAAiB;AAAA,EACnB;AAAA,EACA,mBAAmB;AAAA,IACjB,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,yBAAyB;AAAA,IACvB,OAAO;AAAA,EACT;AAAA,EACA,wBAAwB;AAAA,IACtB,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,oBAAoB;AAAA,IAClB,MAAM;AAAA,EACR;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,cAAc;AAAA,EAChB;AAAA,EACA,iBAAiB;AAAA,IACf,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,YAAY;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA,WAAW;AAAA,IACT,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,cAAc;AAAA,EAChB;AAAA,EACA,eAAe;AAAA,IACb,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACb,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,cAAc;AAAA,EAChB;AAAA,EACA,mBAAmB;AAAA,IACjB,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,aAAa;AAAA,IACX,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,EAClB;AAAA,EACA,iBAAiB;AAAA,IACf,cAAc;AAAA,EAChB;AAAA,EACA,aAAa;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,aAAa;AAAA,IACX,eAAe;AAAA,IACf,gBAAgB;AAAA,EAClB;AAAA,EACA,cAAc;AAAA,IACZ,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA,sBAAsB;AAAA,IACpB,SAAS;AAAA,EACX;AAAA,EACA,kBAAkB;AAAA,IAChB,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA,mBAAmB;AAAA,IACjB,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,YAAY;AAAA,EACd;AAAA,EACA,gBAAgB;AAAA,IACd,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACd,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AACF,CAAC;;;ACpmBD;AAAA,EACE,QAAAM;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,OACK;AAkBK,gBAAAC,OAyCA,QAAAC,cAzCA;AAXL,IAAM,eAAkD,CAAC;AAAA,EAC9D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,WAAW;AAAA,IACT;AAAA,MACE,MAAM,gBAAAD,MAACN,QAAA,EAAK,OAAOQ,SAAO,oBAAoB,oBAAC;AAAA,MAC/C,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,MAAM,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,oBAAoB,uBAAE;AAAA,MAChD,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,MAAM,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,oBAAoB,uBAAE;AAAA,MAChD,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA;AACF,MAAM;AACJ,QAAM,kBAAkB,MAAM;AAC5B,gBAAY;AACZ,YAAQ;AAAA,EACV;AAEA,QAAM,aAAa,MAAM;AACvB,aAAS;AACT,YAAQ;AAAA,EACV;AAEA,SACE,gBAAAF;AAAA,IAACL;AAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT,aAAW;AAAA,MACX,eAAc;AAAA,MACd,gBAAgB;AAAA,MAEhB,0BAAAK,MAACP,QAAA,EAAK,OAAOS,SAAO,UAClB,0BAAAF,MAACP,QAAA,EAAK,OAAO,CAACS,SAAO,WAAW,KAAK,GACnC,0BAAAD;AAAA,QAACJ;AAAA,QAAA;AAAA,UACC,uBAAuBK,SAAO;AAAA,UAC9B,8BAA8B;AAAA,UAG9B;AAAA,4BAAAD,OAACR,QAAA,EAAK,OAAOS,SAAO,QAElB;AAAA,8BAAAF,MAACP,QAAA,EAAK,OAAOS,SAAO,aAClB,0BAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,iBAAiB,oBAAC,GACxC;AAAA,cAEA,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,OAAQ,iBAAM;AAAA,cAClC,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,aAAc,uBAAY;AAAA,eAChD;AAAA,YAGC,SAAS,SAAS,KACjB,gBAAAF,MAACP,QAAA,EAAK,OAAOS,SAAO,mBACjB,mBAAS,IAAI,CAAC,SAAS,UACtB,gBAAAD,OAACR,QAAA,EAAiB,OAAOS,SAAO,aAC9B;AAAA,8BAAAF,MAACP,QAAA,EAAK,OAAOS,SAAO,sBACjB,kBAAQ,MACX;AAAA,cACA,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,cAAe,kBAAQ,OAAM;AAAA,cACjD,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,oBACjB,kBAAQ,aACX;AAAA,iBAPS,KAQX,CACD,GACH;AAAA,YAIF,gBAAAD,OAACR,QAAA,EAAK,OAAOS,SAAO,SAClB;AAAA,8BAAAD;AAAA,gBAACL;AAAA,gBAAA;AAAA,kBACC,OAAOM,SAAO;AAAA,kBACd,SAAS;AAAA,kBACT,eAAe;AAAA,kBAEf;AAAA,oCAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,gBAAgB,oBAAC;AAAA,oBACrC,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,gBAAiB,0BAAe;AAAA;AAAA;AAAA,cACtD;AAAA,cAEA,gBAAAD;AAAA,gBAACL;AAAA,gBAAA;AAAA,kBACC,OAAOM,SAAO;AAAA,kBACd,SAAS;AAAA,kBACT,eAAe;AAAA,kBAEf;AAAA,oCAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,gBAAgB,oBAAC;AAAA,oBACrC,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,gBAAiB,0BAAe;AAAA;AAAA;AAAA,cACtD;AAAA,eACF;AAAA,YAGA,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,YAAY,sEAEhC;AAAA;AAAA;AAAA,MACF,GACF,GACF;AAAA;AAAA,EACF;AAEJ;AAEA,IAAM,EAAE,OAAAC,QAAO,OAAO,IAAIJ,YAAW,IAAI,QAAQ;AAEjD,IAAMG,WAASJ,aAAW,OAAO;AAAA,EAC/B,UAAU;AAAA,IACR,MAAM;AAAA,IACN,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,SAAS;AAAA,EACX;AAAA,EACA,WAAW;AAAA,IACT,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,OAAO;AAAA,IACP,UAAU;AAAA,IACV,WAAW,SAAS;AAAA,IACpB,aAAa;AAAA,IACb,cAAc,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,IACpC,eAAe;AAAA,IACf,cAAc;AAAA,IACd,WAAW;AAAA,EACb;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,EACX;AAAA,EACA,QAAQ;AAAA,IACN,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AAAA,EACA,aAAa;AAAA,IACX,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AAAA,EACA,iBAAiB;AAAA,IACf,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,WAAW;AAAA,IACX,cAAc;AAAA,EAChB;AAAA,EACA,aAAa;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA,mBAAmB;AAAA,IACjB,cAAc;AAAA,EAChB;AAAA,EACA,aAAa;AAAA,IACX,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,SAAS;AAAA,IACT,cAAc;AAAA,IACd,YAAY;AAAA,EACd;AAAA,EACA,sBAAsB;AAAA,IACpB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AAAA,EACA,oBAAoB;AAAA,IAClB,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,cAAc;AAAA,IACd,WAAW;AAAA,EACb;AAAA,EACA,oBAAoB;AAAA,IAClB,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AAAA,EACA,SAAS;AAAA,IACP,KAAK;AAAA,IACL,cAAc;AAAA,EAChB;AAAA,EACA,YAAY;AAAA,IACV,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,cAAc;AAAA,IACd,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAAA,EACA,gBAAgB;AAAA,IACd,UAAU;AAAA,IACV,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA,gBAAgB;AAAA,IACd,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,YAAY;AAAA,IACV,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,cAAc;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAAA,EACA,gBAAgB;AAAA,IACd,UAAU;AAAA,IACV,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA,gBAAgB;AAAA,IACd,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AACF,CAAC;;;AC7QD,SAAgB,YAAAM,YAAU,aAAAC,YAAW,UAAAC,eAAc;AACnD;AAAA,EACE,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAAC;AAAA,EACA,gBAAAC;AAAA,OACK;AAmKC,gBAAAC,OAmEI,QAAAC,cAnEJ;AAhKR,IAAM,EAAE,OAAO,aAAa,QAAQ,aAAa,IAAIH,YAAW,IAAI,QAAQ;AAE5E,IAAM,gBAAgB;AAAA,EACpB,SAAS;AAAA,IACP,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AAAA,EACA,SAAS;AAAA,IACP,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AAAA,EACA,MAAM;AAAA,IACJ,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AAAA,EACA,SAAS;AAAA,IACP,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AACF;AAEO,IAAM,mBAAoD,CAAC;AAAA,EAChE;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,YAAY;AAAA,EACZ;AACF,MAAM;AACJ,QAAM,CAAC,gBAAgB,iBAAiB,IAAIT,WAAS;AAAA,IACnD,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO;AAAA,IACP,QAAQ;AAAA,EACV,CAAC;AACD,QAAM,YAAYE,QAAO,IAAIM,UAAS,MAAM,CAAC,CAAC,EAAE;AAChD,QAAM,WAAWN,QAAO,IAAIM,UAAS,MAAM,CAAC,CAAC,EAAE;AAC/C,QAAM,aAAaN,QAAmC,MAAS;AAE/D,QAAM,SAAS,cAAc,OAAO;AAGpC,EAAAD,WAAU,MAAM;AACd,QAAI,CAAC,UAAU,CAAC,UAAW;AAE3B,UAAM,uBAAuB,MAAM;AACjC,aAAOO,UAAS;AAAA,QACdA,UAAS,SAAS;AAAA,UAChBA,UAAS,OAAO,WAAW;AAAA,YACzB,SAAS;AAAA,YACT,UAAU;AAAA,YACV,iBAAiB;AAAA,UACnB,CAAC;AAAA,UACDA,UAAS,OAAO,WAAW;AAAA,YACzB,SAAS;AAAA,YACT,UAAU;AAAA,YACV,iBAAiB;AAAA,UACnB,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,IACF;AAEA,UAAM,iBAAiB,qBAAqB;AAC5C,mBAAe,MAAM;AAErB,WAAO,MAAM,eAAe,KAAK;AAAA,EACnC,GAAG,CAAC,QAAQ,WAAW,SAAS,CAAC;AAGjC,EAAAP,WAAU,MAAM;AACd,QAAI,QAAQ;AACV,MAAAO,UAAS,OAAO,UAAU;AAAA,QACxB,SAAS;AAAA,QACT,UAAU;AAAA,QACV,iBAAiB;AAAA,MACnB,CAAC,EAAE,MAAM;AAAA,IACX,OAAO;AACL,eAAS,SAAS,CAAC;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,QAAQ,QAAQ,CAAC;AAGrB,EAAAP,WAAU,MAAM;AACd,QAAI,CAAC,UAAU,CAAC,UAAW;AAE3B,eAAW,UAAU,WAAW,MAAM;AACpC,cAAQ;AAAA,IACV,GAAG,SAAS;AAEZ,WAAO,MAAM;AACX,UAAI,WAAW,SAAS;AACtB,qBAAa,WAAW,OAAO;AAAA,MACjC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,QAAQ,WAAW,OAAO,CAAC;AAG/B,QAAM,mBAAmB,MAAM;AAC7B,UAAM,aAAa;AACnB,UAAM,cAAc;AACpB,UAAM,SAAS;AAEf,QAAI,IAAI,eAAe;AACvB,QAAI,IAAI,eAAe;AAEvB,YAAQ,WAAW;AAAA,MACjB,KAAK;AACH,YAAI,eAAe,IAAI,cAAc;AACrC,YAAI,eAAe,KAAK,eAAe,QAAQ,cAAc;AAC7D;AAAA,MACF,KAAK;AACH,YAAI,eAAe,IAAI,eAAe,SAAS;AAC/C,YAAI,eAAe,KAAK,eAAe,QAAQ,cAAc;AAC7D;AAAA,MACF,KAAK;AACH,YAAI,eAAe,IAAI,aAAa;AACpC,YAAI,eAAe,KAAK,eAAe,SAAS,eAAe;AAC/D;AAAA,MACF,KAAK;AACH,YAAI,eAAe,IAAI,eAAe,QAAQ;AAC9C,YAAI,eAAe,KAAK,eAAe,SAAS,eAAe;AAC/D;AAAA,IACJ;AAGA,QAAI,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,cAAc,aAAa,EAAE,CAAC;AAC3D,QAAI,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,eAAe,cAAc,EAAE,CAAC;AAE7D,WAAO,EAAE,GAAG,GAAG,OAAO,YAAY,QAAQ,YAAY;AAAA,EACxD;AAEA,QAAM,gBAAgB,iBAAiB;AAEvC,QAAM,aAAa,MAAM;AAEvB,UAAM,UAAU;AAAA,MACd,SAAS;AAAA,MACT,SAAS;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAEA,WACE,gBAAAU;AAAA,MAACR;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACLU,SAAO;AAAA,UACP,EAAE,iBAAiB,OAAO,YAAY,KAAK;AAAA,QAC7C;AAAA,QAEA,0BAAAF,MAACP,QAAA,EAAK,OAAO,CAACS,SAAO,UAAU,EAAE,OAAO,OAAO,UAAU,CAAC,GACvD,kBAAQ,OAAO,GAClB;AAAA;AAAA,IACF;AAAA,EAEJ;AAIA,EAAAZ,WAAU,MAAM;AACd,QAAI,UAAU,eAAe,MAAM,GAAG;AAEpC,wBAAkB;AAAA,QAChB,GAAG,cAAc,IAAI;AAAA,QACrB,GAAG,eAAe,IAAI;AAAA,QACtB,OAAO;AAAA,QACP,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,QAAQ,eAAe,CAAC,CAAC;AAE7B,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,SACE,gBAAAU;AAAA,IAACN;AAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT,aAAW;AAAA,MACX,eAAc;AAAA,MACd,gBAAgB;AAAA,MAEhB,0BAAAO,OAACF,eAAA,EAAa,OAAOG,SAAO,SAEzB;AAAA,qBACC,gBAAAF;AAAA,UAACH,UAAS;AAAA,UAAT;AAAA,YACC,OAAO;AAAA,cACLK,SAAO;AAAA,cACP;AAAA,gBACE,MAAM,eAAe,IAAI;AAAA,gBACzB,KAAK,eAAe,IAAI;AAAA,gBACxB,OAAO,eAAe,QAAQ;AAAA,gBAC9B,QAAQ,eAAe,SAAS;AAAA,gBAChC,aAAa,OAAO;AAAA,gBACpB,WAAW,CAAC,EAAE,OAAO,UAAU,CAAC;AAAA,cAClC;AAAA,YACF;AAAA;AAAA,QACF;AAAA,QAIF,gBAAAF;AAAA,UAACH,UAAS;AAAA,UAAT;AAAA,YACC,OAAO;AAAA,cACLK,SAAO;AAAA,cACP;AAAA,gBACE,MAAM,cAAc;AAAA,gBACpB,KAAK,cAAc;AAAA,gBACnB,OAAO,cAAc;AAAA,gBACrB,iBAAiB,OAAO;AAAA,gBACxB,aAAa,OAAO;AAAA,gBACpB,SAAS;AAAA,cACX;AAAA,YACF;AAAA,YAEA,0BAAAD,OAACT,QAAA,EAAK,OAAOU,SAAO,aACjB;AAAA,yBAAW;AAAA,cAEZ,gBAAAD,OAACT,QAAA,EAAK,OAAOU,SAAO,cAClB;AAAA,gCAAAF,MAACP,QAAA,EAAK,OAAOS,SAAO,YAAa,iBAAM;AAAA,gBACvC,gBAAAF,MAACP,QAAA,EAAK,OAAOS,SAAO,kBAAmB,uBAAY;AAAA,iBACrD;AAAA,cAEA,gBAAAF;AAAA,gBAACL;AAAA,gBAAA;AAAA,kBACC,OAAOO,SAAO;AAAA,kBACd,SAAS;AAAA,kBACT,eAAe;AAAA,kBAEf,0BAAAF,MAACP,QAAA,EAAK,OAAOS,SAAO,iBAAiB,oBAAC;AAAA;AAAA,cACxC;AAAA,eACF;AAAA;AAAA,QACF;AAAA,QAGA,gBAAAF;AAAA,UAACL;AAAA,UAAA;AAAA,YACC,OAAOO,SAAO;AAAA,YACd,SAAS;AAAA,YACT,eAAe;AAAA;AAAA,QACjB;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;AAEA,IAAMA,WAASN,aAAW,OAAO;AAAA,EAC/B,SAAS;AAAA,IACP,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,mBAAmB;AAAA,IACjB,GAAGA,aAAW;AAAA,IACd,QAAQ;AAAA,EACV;AAAA,EACA,iBAAiB;AAAA,IACf,UAAU;AAAA,IACV,cAAc;AAAA,IACd,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,cAAc;AAAA,IACd,aAAa;AAAA,IACb,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,cAAc,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,IACpC,eAAe;AAAA,IACf,cAAc;AAAA,IACd,WAAW;AAAA,EACb;AAAA,EACA,aAAa;AAAA,IACX,eAAe;AAAA,IACf,YAAY;AAAA,EACd;AAAA,EACA,eAAe;AAAA,IACb,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,WAAW;AAAA,EACb;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,EACR;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,cAAc;AAAA,EAChB;AAAA,EACA,kBAAkB;AAAA,IAChB,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,aAAa;AAAA,IACX,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AAAA,EACA,iBAAiB;AAAA,IACf,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AACF,CAAC;;;AChVD,SAAgB,YAAAO,kBAAgB;AAChC,SAAS,QAAAC,QAAM,cAAAC,oBAAkB;AAiTjB,gBAAAC,OAEF,QAAAC,cAFE;AApRhB,IAAM,uBAAuB,CAC3B,UAAkB,cACI;AACtB,QAAM,iBAAoC;AAAA,IACxC;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,OAAO;AAAA,QACL;AAAA,UACE,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,UAAU;AAAA,QACZ;AAAA,QACA;AAAA,UACE,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,OAAO;AAAA,QACL;AAAA,UACE,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,OAAO;AAAA,QACL;AAAA,UACE,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,QACA;AAAA,UACE,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,QACA;AAAA,UACE,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,YAAY,aAAa;AAC3B,WAAO;AAAA,MACL;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,OAAO;AAAA,UACL;AAAA,YACE,IAAI;AAAA,YACJ,OAAO;AAAA,YACP,MAAM;AAAA,YACN,MAAM;AAAA,YACN,UAAU;AAAA,UACZ;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,OAAO;AAAA,YACP,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,OAAO;AAAA,YACP,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,OAAO;AAAA,YACP,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,MACA,GAAG,eAAe,MAAM,CAAC;AAAA,IAC3B;AAAA,EACF;AAEA,MAAI,YAAY,SAAS;AACvB,WAAO;AAAA,MACL;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,OAAO;AAAA,UACL;AAAA,YACE,IAAI;AAAA,YACJ,OAAO;AAAA,YACP,MAAM;AAAA,YACN,MAAM;AAAA,YACN,UAAU;AAAA,UACZ;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,OAAO;AAAA,YACP,MAAM;AAAA,YACN,MAAM;AAAA,YACN,OAAO;AAAA,UACT;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,OAAO;AAAA,YACP,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,MACA,GAAG;AAAA,IACL;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAM,oBAAoB,CAAC,UAAkB,cAA8B;AACzE,QAAM,cAA8B;AAAA,IAClC;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,MAAM,QAAQ,IAAI,gBAAgB;AAAA,IAC7C;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,MAAM,QAAQ,IAAI,uBAAuB;AAAA,MAClD,OAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,YAAY,aAAa;AAC3B,WAAO;AAAA,MACL;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,MAAM,QAAQ,IAAI,oBAAoB;AAAA,QAC/C,SAAS;AAAA,MACX;AAAA,MACA,GAAG;AAAA,IACL;AAAA,EACF;AAEA,MAAI,YAAY,SAAS;AACvB,WAAO;AAAA,MACL;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,MAAM,QAAQ,IAAI,uBAAuB;AAAA,QAClD,SAAS;AAAA,MACX;AAAA,MACA,GAAG;AAAA,IACL;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAM,uBAAuB,MAAM;AAAA,EACjC;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AACF;AAEO,IAAM,kBAAkD,CAAC;AAAA,EAC9D;AAAA,EACA,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QACE;AAAA,IACF,MAAM;AAAA,EACR;AAAA,EACA,cAAc;AAAA,EACd,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA,aAAa,qBAAqB;AAAA,EAClC,kBAAkB;AAAA,EAClB;AAAA,EACA,iBAAiB;AAAA,EACjB;AACF,MAAM;AACJ,QAAM,CAAC,WAAW,YAAY,IAAIC,WAAS,eAAe;AAE1D,QAAM,aAAa,oBAAoB,qBAAqB,OAAO;AACnE,QAAM,UAAU,iBAAiB,kBAAkB,OAAO;AAE1D,QAAM,eAAe,MAAM;AACzB,QAAI,gBAAgB,IAAK,QAAO;AAEhC,UAAM,eAAe,YAAY,MAAM,GAAG,EAAE,OAAO,OAAO;AAC1D,UAAM,cAAc,aAAa,aAAa,SAAS,CAAC;AACxD,QAAI,CAAC,YAAa,QAAO;AACzB,WAAO,YAAY,OAAO,CAAC,EAAE,YAAY,IAAI,YAAY,MAAM,CAAC;AAAA,EAClE;AAEA,QAAM,kBAAkB,MAAM;AAC5B,YAAQ,SAAS;AAAA,MACf,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAEA,QAAM,uBAAuB,CAAC,UAAkB;AAC9C,iBAAa,KAAK;AAClB,uBAAmB,KAAK;AAAA,EAC1B;AAEA,SACE,gBAAAF,MAACG,QAAA,EAAK,OAAO,CAACC,SAAO,WAAW,KAAK,GACnC,0BAAAJ;AAAA,IAAC;AAAA;AAAA,MACC,SAAS;AAAA,QACP;AAAA,QACA,MACE,gBAAAC,OAACE,QAAA,EAAK,OAAOC,SAAO,MAClB;AAAA,0BAAAJ,MAACG,QAAA,EAAK,OAAOC,SAAO,UAClB,0BAAAJ,MAACG,QAAA,EAAK,OAAOC,SAAO,eAAe,GACrC;AAAA,UACA,gBAAAH,OAACE,QAAA,EAAK,OAAOC,SAAO,UAClB;AAAA,4BAAAJ,MAACG,QAAA,EAAK,OAAOC,SAAO,cAAc;AAAA,YAClC,gBAAAJ,MAACG,QAAA,EAAK,OAAO,CAACC,SAAO,cAAcA,SAAO,iBAAiB,GAAG;AAAA,aAChE;AAAA,WACF;AAAA,QAEF,QACE,gBAAAJ,MAACG,QAAA,EAAK,OAAOC,SAAO,eAClB,0BAAAJ,MAACG,QAAA,EAAK,OAAOC,SAAO,aAAa,GACnC;AAAA,QAEF,SAAS;AAAA,MACX;AAAA,MACA,QAAQ;AAAA,QACN,OAAO,aAAa;AAAA,QACpB,UAAU,gBAAgB;AAAA,QAC1B;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ,SAAS;AAAA,MACX;AAAA,MACA,QACE,iBACE,gBAAAJ;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,UACP;AAAA,UACA,YAAY;AAAA;AAAA,MACd,IACE;AAAA,MAEN,QAAO;AAAA,MACP,gBAAe;AAAA,MAEd;AAAA;AAAA,EACH,GACF;AAEJ;AAEA,IAAMI,WAASC,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,MAAM;AAAA,EACR;AAAA,EACA,MAAM;AAAA,IACJ,eAAe;AAAA,IACf,YAAY;AAAA,EACd;AAAA,EACA,UAAU;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,aAAa;AAAA,EACf;AAAA,EACA,eAAe;AAAA,IACb,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,cAAc;AAAA,EAChB;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACA,cAAc;AAAA,IACZ,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,cAAc;AAAA,EAChB;AAAA,EACA,mBAAmB;AAAA,IACjB,OAAO;AAAA,IACP,cAAc;AAAA,EAChB;AAAA,EACA,eAAe;AAAA,IACb,YAAY;AAAA,EACd;AAAA,EACA,aAAa;AAAA,IACX,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,cAAc;AAAA,EAChB;AACF,CAAC;;;ACvYD;AAAA,EACE,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,wBAAAC;AAAA,EACA,YAAAC;AAAA,OACK;AAuFC,gBAAAC,OAQI,QAAAC,cARJ;AAlER,IAAM,kBAAkB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,qBAAqB;AAAA,EACzB,SACE;AAAA,EACF,QAAQ;AAAA,EACR,MAAM;AACR;AAEO,IAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,WAAW;AAAA,EACX;AACF,MAAM;AACJ,QAAM,EAAE,QAAAC,QAAO,IAAIN,YAAW,IAAI,QAAQ;AAC1C,QAAM,gBAAgBM,UAAS;AAE/B,QAAM,mBAAmB,MAAM;AAC7B,YAAQ,SAAS;AAAA,MACf,KAAK;AACH,eAAO;AAAA,UACL,cAAc;AAAA,UACd,iBAAiB;AAAA,QACnB;AAAA,MACF,KAAK;AACH,eAAO;AAAA,UACL,cAAc;AAAA,UACd,iBAAiB;AAAA,QACnB;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO;AAAA,UACL,cAAc;AAAA,UACd,iBAAiB;AAAA,QACnB;AAAA,MACF;AACE,eAAO;AAAA,UACL,cAAc;AAAA,UACd,iBAAiB;AAAA,QACnB;AAAA,IACJ;AAAA,EACF;AAEA,QAAM,EAAE,cAAc,gBAAgB,IAAI,iBAAiB;AAE3D,QAAM,iBAAiB,MAAM;AAC3B,QAAI,CAAC,gBAAgB,CAAC,cAAe,QAAO;AAE5C,WACE,gBAAAD,OAACV,QAAA,EAAK,OAAOY,SAAO,iBAClB;AAAA,sBAAAH,MAACR,QAAA,EAAK,OAAOW,SAAO,eAAe,4CAA8B;AAAA,MACjE,gBAAAH,MAACR,QAAA,EAAK,OAAOW,SAAO,kBAAkB,yFAGtC;AAAA,MAEA,gBAAAH,MAACT,QAAA,EAAK,OAAOY,SAAO,cACjB,mBAAS,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,UAClC,gBAAAF,OAACV,QAAA,EAAiB,OAAOY,SAAO,aAC9B;AAAA,wBAAAH,MAACT,QAAA,EAAK,OAAOY,SAAO,cAClB,0BAAAH,MAACR,QAAA,EAAK,OAAOW,SAAO,kBAAkB,oBAAC,GACzC;AAAA,QACA,gBAAAH,MAACR,QAAA,EAAK,OAAOW,SAAO,aAAc,mBAAQ;AAAA,WAJjC,KAKX,CACD,GACH;AAAA,OACF;AAAA,EAEJ;AAEA,QAAM,oBAAoB,MAAM;AAC9B,QAAI,CAAC,mBAAmB,CAAC,YAAa,QAAO;AAE7C,WACE,gBAAAF,OAACV,QAAA,EAAK,OAAOY,SAAO,oBACjB;AAAA,sBAAgB,gBAAAH,MAACT,QAAA,EAAK,OAAOY,SAAO,oBAAoB;AAAA,MAEzD,gBAAAF,OAACV,QAAA,EAAK,OAAOY,SAAO,aAClB;AAAA,wBAAAF,OAACT,QAAA,EAAK,OAAOW,SAAO,oBAAoB;AAAA;AAAA,UAAE,YAAY;AAAA,UAAQ;AAAA,WAAC;AAAA,QAE/D,gBAAAF,OAACV,QAAA,EAAK,OAAOY,SAAO,mBAClB;AAAA,0BAAAH,MAACT,QAAA,EAAK,OAAOY,SAAO,mBAClB,0BAAAH,MAACR,QAAA,EAAK,OAAOW,SAAO,uBACjB,sBAAY,OAAO,OAAO,CAAC,GAC9B,GACF;AAAA,UACA,gBAAAF,OAACV,QAAA,EACC;AAAA,4BAAAS,MAACR,QAAA,EAAK,OAAOW,SAAO,uBACjB,sBAAY,QACf;AAAA,YACA,gBAAAH,MAACR,QAAA,EAAK,OAAOW,SAAO,uBACjB,sBAAY,MACf;AAAA,aACF;AAAA,WACF;AAAA,SACF;AAAA,OACF;AAAA,EAEJ;AAEA,SACE,gBAAAH,MAACH,eAAA,EAAa,OAAO,CAACM,SAAO,WAAW,KAAK,GAC3C,0BAAAH;AAAA,IAACF;AAAA,IAAA;AAAA,MACC,UAAUC,UAAS,OAAO,QAAQ,YAAY;AAAA,MAC9C,OAAOI,SAAO;AAAA,MAEd,0BAAAF;AAAA,QAACR;AAAA,QAAA;AAAA,UACC,uBAAuBU,SAAO;AAAA,UAC9B,8BAA8B;AAAA,UAC9B,2BAA0B;AAAA,UAGzB;AAAA,8BAAkB,UACjB,gBAAAF;AAAA,cAACP;AAAA,cAAA;AAAA,gBACC,OAAOS,SAAO;AAAA,gBACd,SAAS;AAAA,gBACT,eAAe;AAAA,gBAEf;AAAA,kCAAAH,MAACR,QAAA,EAAK,OAAOW,SAAO,gBAAgB,oBAAC;AAAA,kBACrC,gBAAAH,MAACR,QAAA,EAAK,OAAOW,SAAO,gBAAgB,kBAAI;AAAA;AAAA;AAAA,YAC1C;AAAA,YAID,QAAQ,gBAAAH,MAACT,QAAA,EAAK,OAAOY,SAAO,eAAgB,gBAAK;AAAA,YAGlD,gBAAAF,OAACV,QAAA,EAAK,OAAOY,SAAO,aAClB;AAAA,8BAAAF,OAACV,QAAA,EAAK,OAAOY,SAAO,YAClB;AAAA,gCAAAH,MAACR,QAAA,EAAK,OAAOW,SAAO,OAAQ,iBAAM;AAAA,gBACjC,YAAY,gBAAAH,MAACR,QAAA,EAAK,OAAOW,SAAO,UAAW,oBAAS;AAAA,iBACvD;AAAA,cAEA,gBAAAH,MAACT,QAAA,EAAK,OAAOY,SAAO,aAAc,UAAS;AAAA,eAC7C;AAAA,YAGC,eAAe;AAAA,YAGf,kBAAkB;AAAA,YAGnB,gBAAAF,OAACV,QAAA,EAAK,OAAOY,SAAO,eAClB;AAAA,8BAAAH,MAACR,QAAA,EAAK,OAAOW,SAAO,cAAc,6BAAG;AAAA,cACrC,gBAAAH,MAACR,QAAA,EAAK,OAAOW,SAAO,cAAc,oDAElC;AAAA,eACF;AAAA,YAGC,UAAU,gBAAAH,MAACT,QAAA,EAAK,OAAOY,SAAO,iBAAkB,kBAAO;AAAA;AAAA;AAAA,MAC1D;AAAA;AAAA,EACF,GACF;AAEJ;AAEA,IAAMA,WAASR,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,sBAAsB;AAAA,IACpB,MAAM;AAAA,EACR;AAAA,EACA,eAAe;AAAA,IACb,UAAU;AAAA,IACV,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,EACnB;AAAA,EACA,YAAY;AAAA,IACV,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,EACrB;AAAA,EACA,gBAAgB;AAAA,IACd,UAAU;AAAA,IACV,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA,gBAAgB;AAAA,IACd,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,eAAe;AAAA,IACb,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AAAA,EACA,aAAa;AAAA,IACX,cAAc;AAAA,EAChB;AAAA,EACA,YAAY;AAAA,IACV,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,WAAW;AAAA,IACX,cAAc;AAAA,EAChB;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AAAA,EACA,aAAa;AAAA,IACX,KAAK;AAAA,EACP;AAAA,EACA,iBAAiB;AAAA,IACf,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,cAAc;AAAA,EAChB;AAAA,EACA,eAAe;AAAA,IACb,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,WAAW;AAAA,IACX,cAAc;AAAA,EAChB;AAAA,EACA,kBAAkB;AAAA,IAChB,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AAAA,EACA,cAAc;AAAA,IACZ,KAAK;AAAA,EACP;AAAA,EACA,aAAa;AAAA,IACX,eAAe;AAAA,IACf,YAAY;AAAA,EACd;AAAA,EACA,cAAc;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,aAAa;AAAA,EACf;AAAA,EACA,kBAAkB;AAAA,IAChB,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,aAAa;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,oBAAoB;AAAA,IAClB,cAAc;AAAA,EAChB;AAAA,EACA,oBAAoB;AAAA,IAClB,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,EAClB;AAAA,EACA,aAAa;AAAA,IACX,mBAAmB;AAAA,EACrB;AAAA,EACA,oBAAoB;AAAA,IAClB,UAAU;AAAA,IACV,WAAW;AAAA,IACX,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,cAAc;AAAA,EAChB;AAAA,EACA,mBAAmB;AAAA,IACjB,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAAA,EACA,mBAAmB;AAAA,IACjB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,aAAa;AAAA,EACf;AAAA,EACA,uBAAuB;AAAA,IACrB,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,uBAAuB;AAAA,IACrB,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,uBAAuB;AAAA,IACrB,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACb,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,cAAc;AAAA,EAChB;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACf,YAAY;AAAA,IACZ,WAAW;AAAA,EACb;AACF,CAAC;;;ACxXD,SAAgB,YAAAS,kBAAgB;AAChC,SAAS,QAAAC,QAAM,QAAAC,QAAM,cAAAC,oBAAkB;AA4VvB,gBAAAC,OAEF,QAAAC,cAFE;AA3UhB,IAAM,sBAAsB,MAAiB;AAAA,EAC3C;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACF;AAEA,IAAM,uBAAuB,MAAiB;AAAA,EAC5C;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACF;AAEA,IAAM,8BAA8B,MAAiB;AAAA,EACnD;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACF;AAEA,IAAM,wBAAwB,CAAC,UAAkB,WAA8B;AAC7E,QAAM,iBAAoC;AAAA,IACxC;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,OAAO;AAAA,QACL;AAAA,UACE,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,YAAY,SAAS;AACvB,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,OAAO;AAAA,UACL;AAAA,YACE,IAAI;AAAA,YACJ,OAAO;AAAA,YACP,MAAM;AAAA,YACN,MAAM;AAAA,YACN,UAAU;AAAA,YACV,UAAU;AAAA,cACR;AAAA,gBACE,IAAI;AAAA,gBACJ,OAAO;AAAA,gBACP,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,IAAI;AAAA,gBACJ,OAAO;AAAA,gBACP,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,IAAI;AAAA,gBACJ,OAAO;AAAA,gBACP,MAAM;AAAA,cACR;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,OAAO;AAAA,YACP,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,YAAY,gBAAgB;AAC9B,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,OAAO;AAAA,UACL;AAAA,YACE,IAAI;AAAA,YACJ,OAAO;AAAA,YACP,MAAM;AAAA,YACN,MAAM;AAAA,YACN,UAAU;AAAA,YACV,UAAU;AAAA,cACR;AAAA,gBACE,IAAI;AAAA,gBACJ,OAAO;AAAA,gBACP,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,IAAI;AAAA,gBACJ,OAAO;AAAA,gBACP,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,IAAI;AAAA,gBACJ,OAAO;AAAA,gBACP,MAAM;AAAA,cACR;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,OAAO;AAAA,QACL;AAAA,UACE,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,UAAU;AAAA,UACV,UAAU;AAAA,YACR;AAAA,cACE,IAAI;AAAA,cACJ,OAAO;AAAA,cACP,MAAM;AAAA,YACR;AAAA,YACA;AAAA,cACE,IAAI;AAAA,cACJ,OAAO;AAAA,cACP,MAAM;AAAA,YACR;AAAA,YACA;AAAA,cACE,IAAI;AAAA,cACJ,OAAO;AAAA,cACP,MAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QACE;AAAA,IACF,MAAM;AAAA,EACR;AAAA,EACA,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,WAAW,YAAY,IAAIC,WAAS,UAAU;AAErD,QAAM,UAAU,MAAM;AACpB,YAAQ,SAAS;AAAA,MACf,KAAK;AACH,eAAO,qBAAqB;AAAA,MAC9B,KAAK;AACH,eAAO,4BAA4B;AAAA,MACrC;AACE,eAAO,oBAAoB;AAAA,IAC/B;AAAA,EACF;AAEA,QAAM,WAAW,MAAM;AACrB,YAAQ,SAAS;AAAA,MACf,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAEA,QAAM,cAAc,MAAM;AACxB,YAAQ,SAAS;AAAA,MACf,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAEA,QAAM,OAAO,QAAQ;AACrB,QAAM,aAAa,sBAAsB,OAAO;AAEhD,QAAM,kBAAkB,CAAC,UAAkB;AACzC,iBAAa,KAAK;AAClB,kBAAc,KAAK;AAGnB,UAAM,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK;AAC3C,QAAI,KAAK,MAAM;AAEb,cAAQ,IAAI,gBAAgB,IAAI,IAAI;AAAA,IACtC;AAAA,EACF;AAEA,QAAM,UACJ,kBAAkB,SACd;AAAA,IACE;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,EACF,IACA,CAAC;AAEP,SACE,gBAAAF,MAACG,QAAA,EAAK,OAAO,CAACC,SAAO,WAAW,KAAK,GACnC,0BAAAJ;AAAA,IAAC;AAAA;AAAA,MACC,SAAS;AAAA,QACP;AAAA,QACA,MACE,gBAAAC,OAACE,QAAA,EAAK,OAAOC,SAAO,MAClB;AAAA,0BAAAJ,MAACG,QAAA,EAAK,OAAOC,SAAO,UAClB,0BAAAJ,MAACK,QAAA,EAAK,OAAOD,SAAO,cAAc,0BAAE,GACtC;AAAA,UACA,gBAAAH,OAACE,QAAA,EAAK,OAAOC,SAAO,UAClB;AAAA,4BAAAJ,MAACG,QAAA,EAAK,OAAOC,SAAO,cAAc;AAAA,YAClC,gBAAAJ,MAACG,QAAA,EAAK,OAAO,CAACC,SAAO,cAAcA,SAAO,iBAAiB,GAAG;AAAA,aAChE;AAAA,WACF;AAAA,QAEF,SAAS;AAAA,MACX;AAAA,MACA,QAAQ;AAAA,QACN,OAAO,SAAS;AAAA,QAChB,UAAU,YAAY;AAAA,QACtB;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ,SAAS;AAAA,MACX;AAAA,MACA,QAAO;AAAA,MACP,gBAAe;AAAA,MAEf,0BAAAH,OAACE,QAAA,EAAK,OAAOC,SAAO,SAElB;AAAA,wBAAAJ,MAACG,QAAA,EAAK,OAAOC,SAAO,eAClB,0BAAAJ;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,YACP,OAAO;AAAA,YACP,eAAe;AAAA,YACf,SAAQ;AAAA,YACR,YAAU;AAAA,YACV,MAAK;AAAA;AAAA,QACP,GACF;AAAA,QAGA,gBAAAA,MAACG,QAAA,EAAK,OAAOC,SAAO,iBAAkB,UAAS;AAAA,SACjD;AAAA;AAAA,EACF,GACF;AAEJ;AAEA,IAAMA,WAASE,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,MAAM;AAAA,EACR;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,MAAM;AAAA,IACJ,eAAe;AAAA,IACf,YAAY;AAAA,EACd;AAAA,EACA,UAAU;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,aAAa;AAAA,EACf;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACA,cAAc;AAAA,IACZ,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,cAAc;AAAA,EAChB;AAAA,EACA,mBAAmB;AAAA,IACjB,OAAO;AAAA,IACP,cAAc;AAAA,EAChB;AAAA,EACA,eAAe;AAAA,IACb,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,EACrB;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF,CAAC;;;ACtbD,SAAS,YAAAC,YAAU,aAAAC,kBAAiB;AAKpC,IAAIC;AAEJ,IAAI,UAAU;AAEZ,EAAAA,YAAW,UAAQ,cAAc,EAAE;AACrC,OAAO;AACL,EAAAA,YAAW;AAAA,IACT,aAAa,OAAO;AAAA,MAClB,QAAQ,MAAM;AAAA,MAAC;AAAA,IACjB;AAAA,EACF;AACF;AAaO,IAAM,cAAc,MAAyB;AAClD,QAAM,CAAC,eAAe,gBAAgB,IAAIC,WAAS,KAAK;AACxD,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,WAAS,CAAC;AAEtD,EAAAC,WAAU,MAAM;AACd,UAAM,0BAA0BF,UAAS;AAAA,MACvC;AAAA,MACA,CAAC,MAAqB;AACpB,yBAAiB,IAAI;AACrB,0BAAkB,EAAE,eAAe,MAAM;AAAA,MAC3C;AAAA,IACF;AAEA,UAAM,0BAA0BA,UAAS;AAAA,MACvC;AAAA,MACA,MAAM;AACJ,yBAAiB,KAAK;AACtB,0BAAkB,CAAC;AAAA,MACrB;AAAA,IACF;AAEA,WAAO,MAAM;AACX,8BAAwB,OAAO;AAC/B,8BAAwB,OAAO;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;AC5DA,SAAS,YAAAG,YAAU,aAAAC,kBAAiB;AAKpC,IAAIC;AAEJ,IAAI,UAAU;AAEZ,EAAAA,cAAa,UAAQ,cAAc,EAAE;AACvC,OAAO;AACL,EAAAA,cAAa;AAAA,IACX,KAAK,OAAO;AAAA,MACV,OAAO;AAAA,MACP,QAAQ;AAAA,IACV;AAAA,IACA,kBAAkB,OAAO;AAAA,MACvB,QAAQ,MAAM;AAAA,MAAC;AAAA,IACjB;AAAA,EACF;AACF;AAWO,IAAM,gBAAgB,MAA2B;AACtD,QAAM,CAAC,YAAY,aAAa,IAAIC,WAAS,OAAO;AAAA,IAClD,QAAQD,YAAW,IAAI,QAAQ;AAAA,IAC/B,QAAQA,YAAW,IAAI,QAAQ;AAAA,EACjC,EAAE;AAEF,EAAAE,WAAU,MAAM;AACd,UAAM,eAAeF,YAAW;AAAA,MAC9B;AAAA,MACA,CAAC;AAAA,QACC,QAAAG;AAAA,QACA;AAAA,MACF,MAGM;AACJ,sBAAc;AAAA,UACZ,QAAAA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO,MAAM,cAAc,OAAO;AAAA,EACpC,GAAG,CAAC,CAAC;AAEL,SAAO;AACT;;;AC1DA,SAAS,YAAAC,YAAU,aAAAC,mBAAiB;AAUpC,IAAM,gBAAgB,OAAO,cAAc;AAEpC,SAAS,iBAA8B;AAC5C,QAAM,CAAC,aAAa,cAAc,IAAID,WAAsB,OAAO;AAAA,IACjE,UAAU,gBACN,OACA,OAAO,cAAc,cACnB,UAAU,SACV;AAAA,IACN,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,IAChB,eAAe;AAAA,EACjB,EAAE;AAEF,EAAAC,YAAU,MAAM;AACd,QAAI,eAAe;AAEjB,UAAIC;AAEJ,UAAI;AACF,QAAAA,WAAU,UAAQ,iCAAiC;AAAA,MACrD,SAAS,OAAO;AACd,gBAAQ;AAAA,UACN;AAAA,QACF;AACA;AAAA,MACF;AAEA,YAAM,cAAcA,SAAQ,iBAAiB,CAAC,UAAe;AAC3D,uBAAe;AAAA,UACb,UAAU,MAAM,eAAe;AAAA,UAC/B,kBACE,MAAM,SAAS,kBAAkB,aACjC,MAAM,SAAS,kBAAkB;AAAA,UACnC,gBACE,MAAM,SAAS,SACX,SACA,MAAM,SAAS,aACb,aACA;AAAA,UACR,eAAe,MAAM,SAAS,iBAAiB;AAAA,QACjD,CAAC;AAAA,MACH,CAAC;AAED,aAAO;AAAA,IACT,OAAO;AAEL,UAAI,OAAO,cAAc,YAAa;AAEtC,YAAM,oBAAoB,MAAM;AAC9B,cAAMC,cACH,UAAkB,cAClB,UAAkB,iBAClB,UAAkB;AAErB,uBAAe;AAAA,UACb,UAAU,UAAU;AAAA,UACpB,kBAAkBA,cACdA,YAAW,kBAAkB,aAC7BA,YAAW,kBAAkB,OAC7B;AAAA,UACJ,gBAAgBA,cAAaA,YAAW,QAAQ,YAAY;AAAA,UAC5D,eAAeA,cACXA,YAAW,iBAAiB,YAC5B;AAAA,QACN,CAAC;AAAA,MACH;AAEA,wBAAkB;AAElB,YAAM,eAAe,MAAM,kBAAkB;AAC7C,YAAM,gBAAgB,MAAM,kBAAkB;AAC9C,YAAM,yBAAyB,MAAM,kBAAkB;AAEvD,aAAO,iBAAiB,UAAU,YAAY;AAC9C,aAAO,iBAAiB,WAAW,aAAa;AAEhD,YAAM,aACH,UAAkB,cAClB,UAAkB,iBAClB,UAAkB;AACrB,UAAI,YAAY;AACd,mBAAW,iBAAiB,UAAU,sBAAsB;AAAA,MAC9D;AAEA,aAAO,MAAM;AACX,eAAO,oBAAoB,UAAU,YAAY;AACjD,eAAO,oBAAoB,WAAW,aAAa;AACnD,YAAI,YAAY;AACd,qBAAW,oBAAoB,UAAU,sBAAsB;AAAA,QACjE;AAAA,MACF;AAAA,IACF;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AACT;;;AC1GA,SAAS,YAAAC,YAAU,aAAAC,mBAAiB;AASpC,IAAMC,iBAAgB,OAAO,cAAc;AAEpC,SAAS,kBAAgC;AAC9C,QAAM,CAAC,OAAO,QAAQ,IAAIF,WAAuB,OAAO;AAAA,IACtD,WAAWE,iBACP,QACA,OAAO,cAAc,cACnB,CAAC,UAAU,SACX;AAAA,IACN,UAAUA,iBACN,OACA,OAAO,cAAc,cACnB,UAAU,SACV;AAAA,IACN,YAAY;AAAA,EACd,EAAE;AAEF,EAAAD,YAAU,MAAM;AACd,QAAIC,gBAAe;AAEjB,UAAIC;AAEJ,UAAI;AACF,QAAAA,WAAU,UAAQ,iCAAiC;AAAA,MACrD,SAAS,OAAO;AACd,gBAAQ;AAAA,UACN;AAAA,QACF;AACA;AAAA,MACF;AAEA,YAAM,cAAcA,SAAQ,iBAAiB,CAAC,aAAkB;AAC9D,cAAM,cAAc,SAAS,eAAe;AAE5C,iBAAS,CAAC,UAAU;AAAA,UAClB,WAAW,CAAC;AAAA,UACZ,UAAU;AAAA,UACV,YAAY,KAAK,aAAa,CAAC;AAAA,QACjC,EAAE;AAAA,MACJ,CAAC;AAED,aAAO;AAAA,IACT,OAAO;AAEL,UAAI,OAAO,cAAc,YAAa;AAEtC,YAAM,eAAe,MAAM;AACzB,iBAAS,CAAC,UAAU;AAAA,UAClB,WAAW;AAAA,UACX,UAAU;AAAA,UACV,YAAY,KAAK;AAAA,QACnB,EAAE;AAAA,MACJ;AAEA,YAAM,gBAAgB,MAAM;AAC1B,iBAAS,CAAC,UAAU;AAAA,UAClB,WAAW;AAAA,UACX,UAAU;AAAA,UACV,YAAY,KAAK;AAAA,QACnB,EAAE;AAAA,MACJ;AAEA,aAAO,iBAAiB,UAAU,YAAY;AAC9C,aAAO,iBAAiB,WAAW,aAAa;AAEhD,aAAO,MAAM;AACX,eAAO,oBAAoB,UAAU,YAAY;AACjD,eAAO,oBAAoB,WAAW,aAAa;AAAA,MACrD;AAAA,IACF;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AACT;;;AChFA,YAAYC,aAAW;AACvB,SAAS,WAA8B;;;ACFvC,SAAS,YAA6B;AACtC,SAAS,eAAe;AAEjB,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;;;ADmHQ,gBAAAC,OA4MF,QAAAC,cA5ME;AAnHR,IAAM,iBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,QAAQ;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,MACA,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,QAAQ;AAAA,MACR,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,IAAM,oBAAoB,IAAI,iDAAiD;AAAA,EAC7E,UAAU;AAAA,IACR,UAAU;AAAA,MACR,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,UAAU;AAAA,EACZ;AACF,CAAC;AAkBD,IAAM,mBAAyB;AAAA,EAI7B,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,oBAAoB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,CAAC,cAAc,eAAe,IAAU,iBAAS,IAAI;AAC3D,UAAM,cAAoB,eAAO,CAAC;AAIlC,UAAM,WAAW;AAGjB,IAAM,kBAAU,MAAM;AACpB,UAAI,WAAW,YAAa;AAE5B,YAAM,eAAe,MAAM;AACzB,cAAM,iBAAiB,OAAO;AAE9B,YAAI,iBAAiB,YAAY,WAAW,iBAAiB,IAAI;AAC/D,0BAAgB,IAAI;AAAA,QACtB,WACE,iBAAiB,OACjB,iBAAiB,YAAY,SAC7B;AACA,0BAAgB,KAAK;AAAA,QACvB;AAEA,oBAAY,UAAU;AAAA,MACxB;AAEA,aAAO,iBAAiB,UAAU,cAAc,EAAE,SAAS,KAAK,CAAC;AACjE,aAAO,MAAM,OAAO,oBAAoB,UAAU,YAAY;AAAA,IAChE,GAAG,CAAC,MAAM,CAAC;AAEX,WACE,gBAAAD;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW;AAAA,UACT,eAAe,EAAE,QAAQ,KAAK,CAAC;AAAA,UAC/B,WAAW,eAAe,CAAC,gBAAgB;AAAA,UAC3C;AAAA,QACF;AAAA,QACC,GAAG;AAAA,QAEJ,0BAAAA,MAAC,SAAI,WAAW,GAAG,kBAAkB,EAAE,SAAS,CAAC,CAAC,GAAI,UAAS;AAAA;AAAA,IACjE;AAAA,EAEJ;AACF;AAUA,IAAM,cAAoB;AAAA,EACxB,CAAC,EAAE,UAAU,WAAW,OAAO,KAAK,eAAe,MAAM,GAAG,MAAM,GAAG,QAAQ;AAC3E,QAAI,MAAM;AACR,aACE,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA,CAAC,gBAAgB;AAAA,YACjB,gBAAgB;AAAA,YAChB;AAAA,UACF;AAAA,UACC,GAAG;AAAA,UAEH;AAAA;AAAA,MACH;AAAA,IAEJ;AAEA,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA,CAAC,gBAAgB;AAAA,UACjB,gBAAgB;AAAA,UAChB;AAAA,QACF;AAAA,QACC,GAAG;AAAA,QAEH;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AASA,IAAM,mBAAmB,CAAC;AAAA,EACxB;AAAA,EACA;AAAA,EACA,aAAa;AACf,MAA6B;AAC3B,QAAM,kBAAkB;AAAA,IACtB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN,EAAE,UAAU;AAEZ,SACE,gBAAAA,MAAC,SAAI,WAAW,GAAG,iBAAiB,0BAA0B,SAAS,GACpE,UACH;AAEJ;AASA,IAAM,gBAAgB,CAAC;AAAA,EACrB;AAAA,EACA;AAAA,EACA,UAAU;AACZ,MAA0B;AACxB,QAAM,eAAe;AAAA,IACnB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN,EAAE,OAAO;AAET,SACE,gBAAAA,MAAC,SAAI,WAAW,GAAG,qBAAqB,cAAc,SAAS,GAC5D,UACH;AAEJ;AAQA,IAAM,gBAAsB;AAAA,EAC1B,CAAC,EAAE,UAAU,WAAW,UAAU,GAAG,MAAM,GAAG,QAAQ;AACpD,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA,WAAW,iBAAiB;AAAA,UAC5B;AAAA,QACF;AAAA,QACC,GAAG;AAAA,QAEH;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AASA,IAAM,sBAAsB,CAAC;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,aAAa;AACf,MAAgC;AAC9B,QAAM,kBAAkB;AAAA,IACtB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN,EAAE,UAAU;AAEZ,SACE,gBAAAA,MAAC,SAAI,WAAW,GAAG,iBAAiB,gBAAgB,SAAS,GAC1D,UACH;AAEJ;AASA,IAAM,kBAAkB,CAAC;AAAA,EACvB;AAAA,EACA;AAAA,EACA,SAAS;AACX,MAA4B;AAC1B,QAAM,gBAAgB;AAAA,IACpB,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,cAAc;AAAA,EAChB;AAEA,SACE,gBAAAA,MAAC,SAAI,WAAW,GAAG,qBAAqB,cAAc,MAAM,GAAG,SAAS,GACrE,UACH;AAEJ;AAYA,IAAM,yBAAyB,CAAC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAmC;AACjC,SACE,gBAAAC,OAAC,oBAAiB,WAChB;AAAA,oBAAAD,MAAC,eAAa,iBAAM;AAAA,IAEnB,cAAc,gBAAAA,MAAC,oBAAkB,sBAAW;AAAA,IAE7C,gBAAAC,OAAC,iBACE;AAAA;AAAA,MACA,qBACC,gBAAAD,MAAC,uBAAqB,6BAAkB;AAAA,OAE5C;AAAA,IAEC;AAAA,KACH;AAEJ;AAEA,iBAAiB,cAAc;AAC/B,YAAY,cAAc;AAC1B,iBAAiB,cAAc;AAC/B,cAAc,cAAc;AAC5B,cAAc,cAAc;AAC5B,oBAAoB,cAAc;AAClC,gBAAgB,cAAc;AAC9B,uBAAuB,cAAc;;;AExVrC,YAAYE,aAAW;AACvB,SAAS,iBAAAC,gBAAe,cAAAC,mBAAkB;AAC1C,YAAY,YAAY;AACxB,SAAS,OAAAC,YAA8B;AAEvC,SAAS,SAAS;AAsCZ,SAiGJ,YAAAC,WAjGI,OAAAC,OAiGJ,QAAAC,cAjGI;AA9BN,IAAM,0BACJC,eAAmD,IAAI;AAEzD,IAAM,sBAAsB,MAAM;AAChC,QAAM,UAAUC,YAAW,uBAAuB;AAClD,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,0DAA0D;AAAA,EAC5E;AACA,SAAO;AACT;AASA,IAAM,mBAAmB,CAAC;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AACF,MAA6B;AAC3B,QAAM,CAAC,cAAc,eAAe,IAAU,iBAAS,KAAK;AAC5D,QAAM,eAAe,SAAS;AAC9B,QAAM,SAAS,eAAe,OAAO;AACrC,QAAM,YAAY,eAAe,iBAAiB,MAAM;AAAA,EAAC,KAAK;AAE9D,SACE,gBAAAH,MAAC,wBAAwB,UAAxB,EAAiC,OAAO,EAAE,QAAQ,UAAU,GAC3D,0BAAAA,MAAQ,aAAP,EAAY,MAAM,QAAQ,cAAc,WACtC,UACH,GACF;AAEJ;AAOA,IAAM,mBAAyB,mBAG7B,CAAC,EAAE,UAAU,WAAW,GAAG,MAAM,GAAG,QAAQ;AAC5C,SACE,gBAAAA,MAAQ,gBAAP,EAAe,SAAO,MACrB,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA;AAAA,QACA;AAAA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,EACH,GACF;AAEJ,CAAC;AAGD,IAAM,mBAAyB,mBAG7B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B,gBAAAA;AAAA,EAAQ;AAAA,EAAP;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AAGD,IAAM,iBAAiBI;AAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,UAAU;AAAA,QACR,OAAO;AAAA,UACL;AAAA,UACA;AAAA,QACF;AAAA,QACA,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,QACF;AAAA,QACA,KAAK;AAAA,UACH;AAAA,UACA;AAAA,QACF;AAAA,QACA,QAAQ;AAAA,UACN;AAAA,UACA;AAAA,QACF;AAAA,QACA,YAAY;AAAA,UACV;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,UAAU;AAAA,IACZ;AAAA,EACF;AACF;AAQA,IAAM,kBAAwB,mBAG5B,CAAC,EAAE,UAAU,WAAW,UAAU,GAAG,MAAM,GAAG,QAC9C,gBAAAH,OAAAF,WAAA,EACE;AAAA,kBAAAC,MAAC,oBAAiB;AAAA,EAClB,gBAAAA;AAAA,IAAQ;AAAA,IAAP;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT,eAAe,EAAE,SAAS,CAAC;AAAA,QAC3B;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAAA,GACF,CACD;AASD,IAAM,kBAAkB,CAAC;AAAA,EACvB;AAAA,EACA;AAAA,EACA,kBAAkB;AACpB,MAA4B;AAC1B,SACE,gBAAAC,OAAC,SAAI,WAAW,GAAG,0CAA0C,SAAS,GACnE;AAAA;AAAA,IACA,mBACC,gBAAAA,OAAQ,cAAP,EAAa,WAAU,sLACtB;AAAA,sBAAAD,MAAC,KAAE,WAAU,WAAU;AAAA,MACvB,gBAAAA,MAAC,UAAK,WAAU,WAAU,mBAAK;AAAA,OACjC;AAAA,KAEJ;AAEJ;AAQA,IAAM,mBAAmB,CAAC,EAAE,UAAU,UAAU,MAA6B;AAC3E,SACE,gBAAAA,MAAC,SAAI,WAAW,GAAG,gCAAgC,SAAS,GACzD,UACH;AAEJ;AAQA,IAAM,kBAAkB,CAAC,EAAE,UAAU,UAAU,MAA4B;AACzE,SACE,gBAAAA,MAAC,SAAI,WAAW,GAAG,yBAAyB,SAAS,GAAI,UAAS;AAEtE;AAOA,IAAM,gBAAsB;AAAA,EAC1B,CAAC,EAAE,WAAW,UAAU,SAAS,GAAG,MAAM,GAAG,QAAQ;AACnD,UAAM,EAAE,UAAU,IAAI,oBAAoB;AAE1C,UAAM,cAAc,CAAC,UAA+C;AAClE,gBAAU,KAAK;AAEf,gBAAU,KAAK;AAAA,IACjB;AAEA,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS;AAAA,QACR,GAAG;AAAA,QAEH;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AAOA,IAAM,kBAAwB,mBAG5B,CAAC,EAAE,WAAW,UAAU,SAAS,GAAG,MAAM,GAAG,QAAQ;AACrD,QAAM,EAAE,UAAU,IAAI,oBAAoB;AAE1C,QAAM,cAAc,CAAC,UAA+C;AAClE,cAAU,KAAK;AAEf,cAAU,KAAK;AAAA,EACjB;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,QACA;AAAA,MACF;AAAA,MACA,SAAS;AAAA,MACR,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ,CAAC;AAED,iBAAiB,cAAc;AAC/B,iBAAiB,cAAc;AAC/B,gBAAgB,cAAc;AAC9B,gBAAgB,cAAc;AAC9B,iBAAiB,cAAc;AAC/B,gBAAgB,cAAc;AAC9B,cAAc,cAAc;AAC5B,gBAAgB,cAAc;;;AC9R9B,YAAYK,aAAW;AACvB,SAAS,OAAAC,YAA8B;AAuG/B,SAEE,OAAAC,OAFF,QAAAC,cAAA;AApGR,IAAM,oBAAoBC;AAAA,EACxB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,MACA,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AAAA,MACA,WAAW;AAAA,QACT,QAAQ;AAAA,QACR,SACE;AAAA,QACF,QACE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,MACN,WAAW;AAAA,IACb;AAAA,EACF;AACF;AAEA,IAAM,eAAeA;AAAA,EACnB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,MACA,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AAAA,MACA,WAAW;AAAA,QACT,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,MACN,WAAW;AAAA,IACb;AAAA,EACF;AACF;AAUA,IAAM,gBAAsB;AAAA,EAC1B,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,cAAc,CAAC,UAA+C;AAClE,iBAAW,CAAC,MAAM;AAClB,gBAAU,KAAK;AAAA,IACjB;AAEA,WACE,gBAAAF;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW;AAAA,UACT,kBAAkB,EAAE,SAAS,MAAM,UAAU,CAAC;AAAA,UAC9C;AAAA,UACA;AAAA,UACA;AAAA;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS;AAAA,QACT,cAAY,SAAS,eAAe;AAAA,QACpC,iBAAe;AAAA,QACd,GAAG;AAAA,QAEJ,0BAAAC,OAAC,SAAI,WAAW,GAAG,kBAAkB,EAAE,SAAS,KAAK,CAAC,CAAC,GAErD;AAAA,0BAAAD;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT,aAAa,EAAE,SAAS,MAAM,UAAU,CAAC;AAAA,gBACzC;AAAA,gBACA,UAAU;AAAA,kBACR;AAAA,kBACA,SAAS,QAAQ;AAAA,kBACjB,SAAS,QAAQ;AAAA,gBACnB;AAAA,cACF;AAAA;AAAA,UACF;AAAA,UAGA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT,aAAa,EAAE,SAAS,MAAM,UAAU,CAAC;AAAA,gBACzC;AAAA,gBACA,UAAU;AAAA,cACZ;AAAA;AAAA,UACF;AAAA,UAGA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT,aAAa,EAAE,SAAS,MAAM,UAAU,CAAC;AAAA,gBACzC;AAAA,gBACA,UAAU;AAAA,kBACR;AAAA,kBACA,SAAS,QAAQ;AAAA,kBACjB,SAAS,QAAQ;AAAA,gBACnB;AAAA,cACF;AAAA;AAAA,UACF;AAAA,WACF;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAEA,cAAc,cAAc;;;AChJ5B;AAAA,EACE,QAAAG;AAAA,EACA,QAAAC;AAAA,EACA,cAAAC;AAAA,EACA;AAAA,EAGA,cAAAC;AAAA,OACK;AACP,SAAS,sBAAsB;AA6F3B,SACY,OAAAC,OADZ,QAAAC,cAAA;AA3FJ,IAAM,EAAE,OAAOC,cAAa,QAAQC,cAAa,IAAIJ,YAAW,IAAI,QAAQ;AAiB5E,IAAM,iBAAiB,CAACK,YAA2B;AACjD,UAAQA,SAAQ;AAAA,IACd,KAAK;AACH,aAAOD;AAAA,IACT,KAAK;AACH,aAAOA,gBAAe;AAAA,IACxB,KAAK;AACH,aAAOA,gBAAe;AAAA,IACxB,KAAK;AACH,aAAOA,gBAAe;AAAA,IACxB,KAAK;AACH,aAAOA,gBAAe;AAAA,IACxB;AACE,aAAOA,gBAAe;AAAA,EAC1B;AACF;AAEA,IAAM,sBAAsB,CAAC,cAAiC;AAC5D,UAAQ,WAAW;AAAA,IACjB,KAAK;AACH,aAAO,EAAE,gBAAgB,UAAU,YAAY,aAAa;AAAA,IAC9D,KAAK;AACH,aAAO,EAAE,gBAAgB,UAAU,YAAY,WAAW;AAAA,IAC5D,KAAK;AACH,aAAO;AAAA,QACL,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,eAAe;AAAA,MACjB;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,YAAY;AAAA,MACd;AAAA,IACF;AACE,aAAO,EAAE,gBAAgB,UAAU,YAAY,SAAS;AAAA,EAC5D;AACF;AAEA,IAAM,kBAAkB,CAAC,YAAsC;AAC7D,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,aAAO,CAAC,mBAAmB,iBAAiB;AAAA,IAC9C,KAAK;AACH,aAAO,CAAC,mBAAmB,iBAAiB;AAAA,IAC9C,KAAK;AACH,aAAO,CAAC,mBAAmB,iBAAiB;AAAA,IAC9C,KAAK;AACH,aAAO,CAAC,mBAAmB,aAAa;AAAA,IAC1C;AACE,aAAO,CAAC,eAAe,aAAa;AAAA,EACxC;AACF;AAEO,IAAM,mBAAoD,CAAC;AAAA,EAChE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAAC,UAAS;AAAA,EACT,iBAAiB;AAAA,EACjB,mBAAmB;AAAA,EACnB,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,cAAcA,YAAW,SAAS,SAAY,eAAeA,OAAM;AACzE,QAAM,iBAAiB,oBAAoB,gBAAgB;AAC3D,QAAM,gBAAgB,gBAAgB,OAAO;AAE7C,QAAM,gBAAgB,MACpB,gBAAAH,OAACL,QAAA,EAAK,OAAO,CAACS,SAAO,SAAS,gBAAgB,YAAY,GACvD;AAAA,aAAS,gBAAAL,MAACH,QAAA,EAAK,OAAO,CAACQ,SAAO,OAAO,UAAU,GAAI,iBAAM;AAAA,IACzD,YACC,gBAAAL,MAACH,QAAA,EAAK,OAAO,CAACQ,SAAO,UAAU,aAAa,GAAI,oBAAS;AAAA,IAE1D;AAAA,KACH;AAGF,QAAM,gBAAgB,MAAM;AAC1B,QAAI,YAAY,OAAQ,QAAO;AAE/B,WACE,gBAAAL;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ;AAAA,QACR,OAAOF,aAAW;AAAA;AAAA,IACpB;AAAA,EAEJ;AAEA,MAAI,mBAAmB,WAAW,iBAAiB;AACjD,WACE,gBAAAG;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ,EAAE,KAAK,gBAAgB;AAAA,QAC/B,OAAO,CAACI,SAAO,WAAW,EAAE,QAAQ,YAAY,GAAG,KAAK;AAAA,QACxD,YAAW;AAAA,QAEV;AAAA,wBAAc;AAAA,UACd,cAAc;AAAA;AAAA;AAAA,IACjB;AAAA,EAEJ;AAEA,MAAI,mBAAmB,YAAY;AACjC,WACE,gBAAAJ;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ,CAAC,WAAW,SAAS;AAAA,QAC7B,OAAO,CAACI,SAAO,WAAW,EAAE,QAAQ,YAAY,GAAG,KAAK;AAAA,QAEvD;AAAA,wBAAc;AAAA,UACd,cAAc;AAAA;AAAA;AAAA,IACjB;AAAA,EAEJ;AAEA,SACE,gBAAAJ,OAACL,QAAA,EAAK,OAAO,CAACS,SAAO,WAAW,EAAE,QAAQ,YAAY,GAAG,KAAK,GAC3D;AAAA,kBAAc;AAAA,IACd,cAAc;AAAA,KACjB;AAEJ;AAEA,IAAMA,WAASP,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,OAAO;AAAA,IACP,iBAAiB;AAAA,EACnB;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,EACnB;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,WAAW;AAAA,IACX,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,kBAAkB,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,IACxC,kBAAkB;AAAA,EACpB;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,kBAAkB,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,IACxC,kBAAkB;AAAA,EACpB;AACF,CAAC;;;ACzLD;AAAA,EACE,QAAAQ;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EAEA,YAAAC;AAAA,OACK;AACP,SAAS,yBAAyB;AAmE1B,gBAAAC,aAAA;AAlDR,IAAM,kBAAkB,CAAC,YAA4B;AACnD,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEO,IAAM,wBAA8D,CAAC;AAAA,EAC1E;AAAA,EACA,WAAW;AAAA,EACX,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,UAAU;AAAA,EACV,kBAAkB;AAAA,EAClB;AAAA,EACA;AAAA,EACA,+BAA+B;AAAA,EAC/B,iCAAiC;AAAA,EACjC,4BAA4B;AAC9B,MAAM;AACJ,QAAM,SAAS,kBAAkB;AACjC,QAAM,eAAe,gBAAgB,OAAO;AAE5C,QAAM,iBAA4B;AAAA,IAChC,MAAM;AAAA,IACN;AAAA,IACA,YAAY,YAAY,cAAc,OAAO,MAAM;AAAA,IACnD,eAAe,YAAY,iBAAiB,OAAO,SAAS;AAAA,IAC5D,aAAa,WAAW,OAAO,OAAO;AAAA,IACtC,cAAc,WAAW,OAAO,QAAQ;AAAA,EAC1C;AAEA,QAAM,eAA0B;AAAA,IAC9B,SAAS;AAAA,EACX;AAEA,MAAI,YAAY;AACd,WACE,gBAAAA,MAACJ,QAAA,EAAK,OAAO,CAAC,gBAAgB,KAAK,GACjC,0BAAAI;AAAA,MAACH;AAAA,MAAA;AAAA,QACC,OAAOI,SAAO;AAAA,QACd,uBAAuB,CAAC,cAAc,qBAAqB;AAAA,QAC3D;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAASF,UAAS,OAAO;AAAA,QACzB,gBAAgBA,UAAS,OAAO,YAAY,SAAS;AAAA,QAEpD;AAAA;AAAA,IACH,GACF;AAAA,EAEJ;AAEA,SAAO,gBAAAC,MAACJ,QAAA,EAAK,OAAO,CAAC,gBAAgB,cAAc,KAAK,GAAI,UAAS;AACvE;AAEA,IAAMK,WAASH,aAAW,OAAO;AAAA,EAC/B,iBAAiB;AAAA,IACf,MAAM;AAAA,EACR;AACF,CAAC;;;ACjGD,SAAgB,UAAAI,SAAQ,aAAAC,mBAAiB;AACzC;AAAA,EAEE,YAAAC;AAAA,EACA,cAAAC;AAAA,EAEA,cAAAC;AAAA,OAEK;AA6JH,gBAAAC,aAAA;AA3JJ,IAAM,EAAE,OAAOC,cAAa,QAAQC,cAAa,IAAIH,aAAW,IAAI,QAAQ;AAoBrE,IAAM,uBAA4D,CAAC;AAAA,EACxE;AAAA,EACA,OAAO;AAAA,EACP,WAAW;AAAA,EACX,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AACd,MAAM;AACJ,QAAM,gBAAgBJ,QAAO,IAAIE,UAAS,MAAM,YAAY,IAAI,CAAC,CAAC,EAAE;AACpE,QAAM,aAAaF,QAAO,IAAIE,UAAS,MAAM,CAAC,CAAC,EAAE;AACjD,QAAM,aAAaF,QAAO,IAAIE,UAAS,MAAM,CAAC,CAAC,EAAE;AACjD,QAAM,QAAQF,QAAO,IAAIE,UAAS,MAAM,YAAY,IAAI,GAAG,CAAC,EAAE;AAE9D,EAAAD,YAAU,MAAM;AACd,UAAM,cAAc,YAAY,IAAI;AAEpC,wBAAoB;AAEpB,UAAM,aAA4C,CAAC;AAGnD,eAAW;AAAA,MACTC,UAAS,OAAO,eAAe;AAAA,QAC7B,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA,iBAAiB;AAAA,MACnB,CAAC;AAAA,IACH;AAEA,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,mBAAW;AAAA,UACTA,UAAS,OAAO,OAAO;AAAA,YACrB,SAAS,YAAY,IAAI;AAAA,YACzB;AAAA,YACA;AAAA,YACA,iBAAiB;AAAA,UACnB,CAAC;AAAA,QACH;AACA;AAAA,MAEF,KAAK;AACH,mBAAW;AAAA,UACTA,UAAS,OAAO,YAAY;AAAA,YAC1B,SAAS,YAAY,IAAI,CAACI;AAAA,YAC1B;AAAA,YACA;AAAA,YACA,iBAAiB;AAAA,UACnB,CAAC;AAAA,QACH;AACA;AAAA,MAEF,KAAK;AACH,mBAAW;AAAA,UACTJ,UAAS,OAAO,YAAY;AAAA,YAC1B,SAAS,YAAY,IAAII;AAAA,YACzB;AAAA,YACA;AAAA,YACA,iBAAiB;AAAA,UACnB,CAAC;AAAA,QACH;AACA;AAAA,MAEF,KAAK;AACH,mBAAW;AAAA,UACTJ,UAAS,OAAO,YAAY;AAAA,YAC1B,SAAS,YAAY,IAAI,CAACK;AAAA,YAC1B;AAAA,YACA;AAAA,YACA,iBAAiB;AAAA,UACnB,CAAC;AAAA,QACH;AACA;AAAA,MAEF,KAAK;AACH,mBAAW;AAAA,UACTL,UAAS,OAAO,YAAY;AAAA,YAC1B,SAAS,YAAY,IAAIK;AAAA,YACzB;AAAA,YACA;AAAA,YACA,iBAAiB;AAAA,UACnB,CAAC;AAAA,QACH;AACA;AAAA,MAEF,KAAK;AAEH,mBAAW;AAAA,UACTL,UAAS,OAAO,YAAY;AAAA,YAC1B,SAAS,YAAY,IAAII,eAAc;AAAA,YACvC;AAAA,YACA;AAAA,YACA,iBAAiB;AAAA,UACnB,CAAC;AAAA,QACH;AACA;AAAA,IACJ;AAEA,IAAAJ,UAAS,SAAS,UAAU,EAAE,MAAM,CAAC,EAAE,SAAS,MAAM;AACpD,UAAI,UAAU;AACZ,0BAAkB;AAAA,MACpB;AAAA,IACF,CAAC;AAAA,EACH,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,oBAAoB,MAAiB;AACzC,UAAM,YAAmB,CAAC;AAE1B,QAAI,SAAS,SAAS;AACpB,gBAAU,KAAK,EAAE,MAAM,CAAC;AAAA,IAC1B;AAEA,QAAI,KAAK,SAAS,OAAO,KAAK,SAAS,SAAS;AAC9C,gBAAU,KAAK,EAAE,WAAW,CAAC;AAC7B,gBAAU,KAAK,EAAE,WAAW,CAAC;AAAA,IAC/B;AAEA,WAAO,EAAE,UAAU;AAAA,EACrB;AAEA,SACE,gBAAAG;AAAA,IAACH,UAAS;AAAA,IAAT;AAAA,MACC,OAAO;AAAA,QACLM,SAAO;AAAA,QACP;AAAA,UACE,SAAS;AAAA,UACT,GAAG,kBAAkB;AAAA,QACvB;AAAA,QACA;AAAA,MACF;AAAA,MACA,eAAe,YAAY,SAAS;AAAA,MAEnC;AAAA;AAAA,EACH;AAEJ;AAEA,IAAMA,WAASL,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,MAAM;AAAA,EACR;AACF,CAAC;;;ACzLD,SAAgB,YAAAM,YAAU,aAAAC,mBAAiB;AAC3C;AAAA,EACE,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,cAAAC;AAAA,EAGA,qBAAAC;AAAA,OACK;AACP,OAAO,aAA+B;AAepC,SACE,OAAAC,OADF,QAAAC,cAAA;AADF,IAAM,0BAA0B,MAC9B,gBAAAA,OAACL,QAAA,EAAK,OAAOM,SAAO,iBAClB;AAAA,kBAAAF,MAACD,oBAAA,EAAkB,MAAK,SAAQ,OAAM,WAAU;AAAA,EAChD,gBAAAC,MAACH,QAAA,EAAK,OAAOK,SAAO,YAAY,oCAAsB;AAAA,GACxD;AAGF,IAAM,0BAA0B,MAC9B,gBAAAD,OAACL,QAAA,EAAK,OAAOM,SAAO,iBAClB;AAAA,kBAAAF,MAACH,QAAA,EAAK,OAAOK,SAAO,YAAY,iDAAyB;AAAA,EACzD,gBAAAF,MAACH,QAAA,EAAK,OAAOK,SAAO,eAAe,oCAAsB;AAAA,GAC3D;AAGF,IAAM,iCAAiC,MACrC,gBAAAD,OAACL,QAAA,EAAK,OAAOM,SAAO,iBAClB;AAAA,kBAAAF,MAACH,QAAA,EAAK,OAAOK,SAAO,YAAY,gDAA2B;AAAA,EAC3D,gBAAAF,MAACH,QAAA,EAAK,OAAOK,SAAO,eAAe,0CAA4B;AAAA,GACjE;AAGK,IAAM,4BAET,CAAC;AAAA,EACH;AAAA,EACA;AAAA,EACA,mBAAmB,gBAAAF,MAAC,2BAAwB;AAAA,EAC5C,mBAAmB,gBAAAA,MAAC,2BAAwB;AAAA,EAC5C,0BAA0B,gBAAAA,MAAC,kCAA+B;AAAA,EAC1D,oBAAoB;AAAA,EACpB;AAAA,EACA;AAAA,EACA,eAAe;AAAA;AACjB,MAAM;AACJ,QAAM,CAAC,cAAc,eAAe,IAAIN,WAA8B,IAAI;AAC1E,QAAM,CAAC,WAAW,YAAY,IAAIA,WAAS,IAAI;AAE/C,EAAAC,YAAU,MAAM;AACd,UAAM,cAAc,QAAQ,iBAAiB,CAAC,UAAU;AACtD,sBAAgB,KAAK;AACrB,mBAAa,KAAK;AAElB,wBAAkB,MAAM,eAAe,OAAO,MAAM,QAAQ,SAAS;AAAA,IACvE,CAAC;AAGD,YAAQ,MAAM,EAAE,KAAK,CAAC,UAAU;AAC9B,sBAAgB,KAAK;AACrB,mBAAa,KAAK;AAAA,IACpB,CAAC;AAED,WAAO;AAAA,EACT,GAAG,CAAC,eAAe,CAAC;AAEpB,MAAI,WAAW;AACb,WAAO,gBAAAK,MAACJ,QAAA,EAAK,OAAO,CAACM,SAAO,WAAW,KAAK,GAAI,4BAAiB;AAAA,EACnE;AAEA,MAAI,CAAC,gBAAgB,CAAC,aAAa,aAAa;AAC9C,WACE,gBAAAD,OAACL,QAAA,EAAK,OAAO,CAACM,SAAO,WAAW,KAAK,GAClC;AAAA,2BAAqB;AAAA,MACrB,YAAY;AAAA,OACf;AAAA,EAEJ;AAGA,QAAM,mBACJ,aAAa,WACb,iBAAiB,aAAa,WAC9B,OAAO,aAAa,QAAQ,gBAAgB,YAC5C,aAAa,QAAQ,cAAc;AAErC,SACE,gBAAAD,OAACL,QAAA,EAAK,OAAO,CAACM,SAAO,WAAW,KAAK,GAClC;AAAA,yBAAqB,oBAAoB;AAAA,IACzC;AAAA,KACH;AAEJ;AAEA,IAAMA,WAASJ,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,MAAM;AAAA,EACR;AAAA,EACA,iBAAiB;AAAA,IACf,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,gBAAgB;AAAA,EAClB;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,eAAe;AAAA,IACb,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX,WAAW;AAAA,EACb;AACF,CAAC;;;AClID,SAAgB,YAAAK,YAAU,aAAAC,mBAAiB;AAC3C;AAAA,EACE,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,cAAAC;AAAA,EAEA,YAAAC;AAAA,EACA,oBAAAC;AAAA,OACK;AACP,OAAOC,cAAa;AAyIV,SASE,OAAAC,OATF,QAAAC,cAAA;AA3HH,IAAM,uBAA4D,CAAC;AAAA,EACxE;AAAA,EACA,aAAa;AAAA,EACb,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,oBAAoB;AACtB,MAAM;AACJ,QAAM,CAAC,aAAa,cAAc,IAAIT,WAAyB,IAAI;AACnE,QAAM,CAAC,YAAY,aAAa,IAAIA,WAAS,KAAK;AAClD,QAAM,CAAC,iBAAiB,kBAAkB,IAAIA,WAAS,KAAK;AAC5D,QAAM,gBAAgBA,WAAS,IAAIK,UAAS,MAAM,CAAC,CAAC,EAAE,CAAC;AACvD,QAAM,eAAeL,WAAS,IAAIK,UAAS,MAAM,CAAC,CAAC,EAAE,CAAC;AAEtD,EAAAJ,YAAU,MAAM;AACd,UAAM,cAAcM,SAAQ,iBAAiB,CAAC,UAAU;AACtD,YAAM,YAAY,MAAM,eAAe;AAEvC,UAAI,gBAAgB,MAAM;AACxB,YAAI,CAAC,aAAa,aAAa;AAE7B,wBAAc,IAAI;AAClB,sBAAY;AAAA,QACd,WAAW,aAAa,CAAC,eAAe,YAAY;AAElD,6BAAmB,IAAI;AACvB,qBAAW;AAGX,qBAAW,MAAM;AACf,+BAAmB,KAAK;AAAA,UAC1B,GAAG,GAAI;AAAA,QACT;AAAA,MACF;AAEA,qBAAe,SAAS;AAAA,IAC1B,CAAC;AAGD,IAAAA,SAAQ,MAAM,EAAE,KAAK,CAAC,UAAU;AAC9B,qBAAe,MAAM,eAAe,KAAK;AAAA,IAC3C,CAAC;AAED,WAAO;AAAA,EACT,GAAG,CAAC,aAAa,YAAY,WAAW,QAAQ,CAAC;AAEjD,EAAAN,YAAU,MAAM;AACd,QAAI,eAAe,gBAAgB,SAAS,kBAAkB;AAE5D,MAAAI,UAAS,SAAS;AAAA,QAChBA,UAAS,OAAO,eAAe;AAAA,UAC7B,SAAS;AAAA,UACT,UAAU;AAAA,UACV,iBAAiB;AAAA,QACnB,CAAC;AAAA,QACDA,UAAS,OAAO,cAAc;AAAA,UAC5B,SAAS;AAAA,UACT,UAAU;AAAA,UACV,iBAAiB;AAAA,QACnB,CAAC;AAAA,MACH,CAAC,EAAE,MAAM;AAAA,IACX,OAAO;AAEL,MAAAA,UAAS,SAAS;AAAA,QAChBA,UAAS,OAAO,eAAe;AAAA,UAC7B,SAAS;AAAA,UACT,UAAU;AAAA,UACV,iBAAiB;AAAA,QACnB,CAAC;AAAA,QACDA,UAAS,OAAO,cAAc;AAAA,UAC5B,SAAS;AAAA,UACT,UAAU;AAAA,UACV,iBAAiB;AAAA,QACnB,CAAC;AAAA,MACH,CAAC,EAAE,MAAM;AAAA,IACX;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,iBAAiB,MAAM;AAC3B,QAAI,iBAAiB;AACnB,aAAOK,SAAO;AAAA,IAChB;AACA,WAAOA,SAAO;AAAA,EAChB;AAEA,QAAM,qBAAqB,MAAM;AAC/B,QAAI,iBAAiB;AACnB,aAAOA,SAAO;AAAA,IAChB;AACA,WAAOA,SAAO;AAAA,EAChB;AAEA,QAAM,iBAAiB,MAAM;AAC3B,QAAI,iBAAiB;AACnB,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAEA,SACE,gBAAAD,OAACP,QAAA,EAAK,OAAO,CAACQ,SAAO,WAAW,KAAK,GAClC;AAAA,kBACC,gBAAAF;AAAA,MAACH,UAAS;AAAA,MAAT;AAAA,QACC,OAAO;AAAA,UACLK,SAAO;AAAA,UACP,eAAe;AAAA,UACf;AAAA,YACE,SAAS;AAAA,YACT,QAAQ;AAAA,UACV;AAAA,UACA;AAAA,QACF;AAAA,QAEA,0BAAAD;AAAA,UAACH;AAAA,UAAA;AAAA,YACC,OAAOI,SAAO;AAAA,YACd,SAAS,MAAM;AACb,kBAAI,iBAAiB;AACnB,mCAAmB,KAAK;AAAA,cAC1B;AAAA,YACF;AAAA,YACA,UAAU,CAAC;AAAA,YAEX;AAAA,8BAAAF,MAACL,QAAA,EAAK,OAAO,CAACO,SAAO,YAAY,mBAAmB,CAAC,GAClD,yBAAe,GAClB;AAAA,cACC,gBAAgB,SACf,gBAAAF,MAACL,QAAA,EAAK,OAAOO,SAAO,YAAY,0BAAY;AAAA;AAAA;AAAA,QAEhD;AAAA;AAAA,IACF;AAAA,IAEF,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,SAAU,UAAS;AAAA,KACzC;AAEJ;AAEA,IAAMA,WAASN,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,MAAM;AAAA,EACR;AAAA,EACA,iBAAiB;AAAA,IACf,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,EACrB;AAAA,EACA,eAAe;AAAA,IACb,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,MAAM;AAAA,EACR;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,WAAW;AAAA,EACb;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,WAAW;AAAA,IACX,OAAO;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACb,iBAAiB;AAAA,EACnB;AAAA,EACA,mBAAmB;AAAA,IACjB,iBAAiB;AAAA,EACnB;AAAA,EACA,aAAa;AAAA,IACX,OAAO;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACf,OAAO;AAAA,EACT;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,EACR;AACF,CAAC;;;AClND;AAAA,EACE,YAAAO;AAAA,EACA,aAAAC;AAAA,EACA,cAAAC;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,cAAAC;AAAA,EACA,YAAAC;AAAA,EACA,oBAAAC;AAAA,EAGA,cAAAC;AAAA,OAEK;AACP,SAAS,qBAAAC,0BAAyB;AA8M1B,SACE,OAAAC,OADF,QAAAC,cAAA;AA5MR,IAAM,EAAE,OAAOC,aAAY,IAAIJ,aAAW,IAAI,QAAQ;AAkB/C,IAAM,cAAcN;AAAA,EACzB,CACE;AAAA,IACE,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EACb,GACA,QACG;AACH,UAAM,CAAC,SAAS,UAAU,IAAIF,WAAS,KAAK;AAC5C,UAAM,CAAC,gBAAgB,iBAAiB,IAAIA,WAAS,OAAO;AAC5D,UAAM,CAAC,aAAa,cAAc,IAAIA,WAAS,IAAI;AACnD,UAAM,UAAUA,WAAS,IAAIM,WAAS,MAAM,CAAC,CAAC,EAAE,CAAC;AACjD,UAAM,aAAaN;AAAA,MACjB,IAAIM,WAAS,MAAM,aAAa,QAAQ,OAAO,GAAG;AAAA,IACpD,EAAE,CAAC;AACH,UAAM,SAASG,mBAAkB;AAEjC,wBAAoB,KAAK,OAAO;AAAA,MAC9B,MAAM,CAAC,KAAa,YAAwC;AAC1D,0BAAkB,GAAG;AACrB,uBAAe,SAAS,QAAQ,MAAM;AACtC,mBAAW,IAAI;AAEf,cAAM,eAAe;AACrB,cAAM,kBAAkB,SAAS,YAAY;AAE7C,QAAAH,WAAS,SAAS;AAAA,UAChBA,WAAS,OAAO,SAAS;AAAA,YACvB,SAAS;AAAA,YACT,UAAU;AAAA,YACV,iBAAiB;AAAA,UACnB,CAAC;AAAA,UACDA,WAAS,OAAO,YAAY;AAAA,YAC1B,SAAS;AAAA,YACT,UAAU;AAAA,YACV,iBAAiB;AAAA,UACnB,CAAC;AAAA,QACH,CAAC,EAAE,MAAM;AAET,YAAI,kBAAkB,GAAG;AACvB,qBAAW,MAAM;AACf,sBAAU;AAAA,UACZ,GAAG,eAAe;AAAA,QACpB;AAAA,MACF;AAAA,MACA,MAAM;AAAA,IACR,EAAE;AAEF,UAAM,YAAY,MAAM;AACtB,YAAM,eAAe;AAErB,MAAAA,WAAS,SAAS;AAAA,QAChBA,WAAS,OAAO,SAAS;AAAA,UACvB,SAAS;AAAA,UACT,UAAU;AAAA,UACV,iBAAiB;AAAA,QACnB,CAAC;AAAA,QACDA,WAAS,OAAO,YAAY;AAAA,UAC1B,SAAS,aAAa,QAAQ,OAAO;AAAA,UACrC,UAAU;AAAA,UACV,iBAAiB;AAAA,QACnB,CAAC;AAAA,MACH,CAAC,EAAE,MAAM,MAAM;AACb,mBAAW,KAAK;AAChB,iBAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,IAAAL,YAAU,MAAM;AACd,UAAI,WAAW,SAAS;AACtB,cAAM,eAAe;AAErB,QAAAK,WAAS,SAAS;AAAA,UAChBA,WAAS,OAAO,SAAS;AAAA,YACvB,SAAS;AAAA,YACT,UAAU;AAAA,YACV,iBAAiB;AAAA,UACnB,CAAC;AAAA,UACDA,WAAS,OAAO,YAAY;AAAA,YAC1B,SAAS;AAAA,YACT,UAAU;AAAA,YACV,iBAAiB;AAAA,UACnB,CAAC;AAAA,QACH,CAAC,EAAE,MAAM;AAET,YAAI,WAAW,GAAG;AAChB,qBAAW,WAAW,QAAQ;AAAA,QAChC;AAAA,MACF;AAAA,IACF,GAAG,CAAC,SAAS,SAAS,UAAU,SAAS,UAAU,CAAC;AAEpD,UAAM,gBAAgB,MAAM;AAC1B,cAAQ,aAAa;AAAA,QACnB,KAAK;AACH,iBAAO;AAAA,YACL,iBAAiB;AAAA,YACjB,aAAa;AAAA,UACf;AAAA,QACF,KAAK;AACH,iBAAO;AAAA,YACL,iBAAiB;AAAA,YACjB,aAAa;AAAA,UACf;AAAA,QACF,KAAK;AACH,iBAAO;AAAA,YACL,iBAAiB;AAAA,YACjB,aAAa;AAAA,UACf;AAAA,QACF;AACE,iBAAO;AAAA,YACL,iBAAiB;AAAA,YACjB,aAAa;AAAA,UACf;AAAA,MACJ;AAAA,IACF;AAEA,UAAM,mBAAmB,MAAiB;AACxC,YAAM,YAAuB;AAAA,QAC3B,UAAU;AAAA,QACV,MAAM;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,MACV;AAEA,cAAQ,UAAU;AAAA,QAChB,KAAK;AACH,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,KAAK,OAAO,MAAM;AAAA,UACpB;AAAA,QACF,KAAK;AACH,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,QAAQ,OAAO,SAAS;AAAA,UAC1B;AAAA,QACF,KAAK;AACH,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,KAAK;AAAA,YACL,WAAW,CAAC,EAAE,YAAY,IAAI,CAAC;AAAA,UACjC;AAAA,QACF;AACE,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,KAAK,OAAO,MAAM;AAAA,UACpB;AAAA,MACJ;AAAA,IACF;AAEA,UAAM,UAAU,MAAM;AACpB,cAAQ,aAAa;AAAA,QACnB,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MACX;AAAA,IACF;AAEA,QAAI,CAAC,WAAW,CAAC,SAAS;AACxB,aAAO;AAAA,IACT;AAEA,WACE,gBAAAI;AAAA,MAACJ,WAAS;AAAA,MAAT;AAAA,QACC,OAAO;AAAA,UACLO,SAAO;AAAA,UACP,iBAAiB;AAAA,UACjB,cAAc;AAAA,UACd;AAAA,YACE;AAAA,YACA,WAAW,CAAC,EAAE,WAAW,CAAC;AAAA,UAC5B;AAAA,UACA;AAAA,QACF;AAAA,QACA,eAAc;AAAA,QAEd,0BAAAF,OAACR,QAAA,EAAK,OAAOU,SAAO,SAClB;AAAA,0BAAAH,MAACN,QAAA,EAAK,OAAOS,SAAO,MAAO,kBAAQ,GAAE;AAAA,UACrC,gBAAAH,MAACN,QAAA,EAAK,OAAO,CAACS,SAAO,SAAS,SAAS,GAAG,eAAe,GACtD,4BAAkB,SACrB;AAAA,UACC,YACC,gBAAAH,MAACH,oBAAA,EAAiB,SAAS,WAAW,OAAOM,SAAO,aAClD,0BAAAH,MAACN,QAAA,EAAK,OAAOS,SAAO,WAAW,oBAAC,GAClC;AAAA,WAEJ;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAEA,IAAMA,WAASR,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,cAAc;AAAA,IACd,kBAAkB;AAAA,IAClB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,OAAO;AAAA,MACP,QAAQ;AAAA,IACV;AAAA,IACA,eAAe;AAAA,IACf,cAAc;AAAA,IACd,WAAW;AAAA,EACb;AAAA,EACA,SAAS;AAAA,IACP,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,WAAW;AAAA,EACb;AAAA,EACA,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,OAAO;AAAA,IACP,aAAa;AAAA,IACb,YAAY;AAAA,EACd;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AAAA,EACA,aAAa;AAAA,IACX,YAAY;AAAA,IACZ,SAAS;AAAA,EACX;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,SAAS;AAAA,EACX;AACF,CAAC;AAED,YAAY,cAAc;;;AC7R1B,SAAgB,YAAAS,kBAAgB;AAChC;AAAA,EACE,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,cAAAC;AAAA,EAGA,qBAAAC;AAAA,OACK;AA4ED,gBAAAC,OAGE,QAAAC,cAHF;AAvDC,IAAM,YAAsC,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,sBAAsB;AAAA,EACtB,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,OAAO,QAAQ,IAAIR,WAAS,EAAE;AACrC,QAAM,CAAC,UAAU,WAAW,IAAIA,WAAS,EAAE;AAC3C,QAAM,CAAC,QAAQ,SAAS,IAAIA;AAAA,IAC1B,CAAC;AAAA,EACH;AAEA,QAAM,eAAe,MAAM;AACzB,UAAM,YAAmD,CAAC;AAE1D,QAAI,CAAC,MAAM,KAAK,GAAG;AACjB,gBAAU,QAAQ;AAAA,IACpB,WAAW,CAAC,eAAe,KAAK,KAAK,GAAG;AACtC,gBAAU,QAAQ;AAAA,IACpB;AAEA,QAAI,CAAC,SAAS,KAAK,GAAG;AACpB,gBAAU,WAAW;AAAA,IACvB,WAAW,SAAS,SAAS,GAAG;AAC9B,gBAAU,WAAW;AAAA,IACvB;AAEA,cAAU,SAAS;AACnB,WAAO,OAAO,KAAK,SAAS,EAAE,WAAW;AAAA,EAC3C;AAEA,QAAM,eAAe,YAAY;AAC/B,QAAI,CAAC,aAAa,KAAK,QAAS;AAEhC,QAAI;AACF,YAAM,WAAW,OAAO,QAAQ;AAAA,IAClC,SAAS,OAAO;AACd,cAAQ,MAAM,iBAAiB,KAAK;AAAA,IACtC;AAAA,EACF;AAEA,SACE,gBAAAQ,OAACP,QAAA,EAAK,OAAO,CAACQ,SAAO,WAAW,KAAK,GACnC;AAAA,oBAAAF,MAACL,QAAA,EAAK,OAAO,CAACO,SAAO,OAAO,UAAU,GAAI,iBAAM;AAAA,IAEhD,gBAAAD,OAACP,QAAA,EAAK,OAAOQ,SAAO,eAClB;AAAA,sBAAAD,OAACP,QAAA,EAAK,OAAOQ,SAAO,gBAClB;AAAA,wBAAAF,MAACL,QAAA,EAAK,OAAOO,SAAO,OAAQ,sBAAW;AAAA,QACvC,gBAAAF;AAAA,UAACJ;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACLM,SAAO;AAAA,cACP,OAAO,SAASA,SAAO;AAAA,cACvB;AAAA,YACF;AAAA,YACA,OAAO;AAAA,YACP,cAAc;AAAA,YACd,aAAY;AAAA,YACZ,cAAa;AAAA,YACb,gBAAe;AAAA,YACf,aAAa;AAAA,YACb,cAAa;AAAA,YACb,UAAU,CAAC;AAAA;AAAA,QACb;AAAA,QACC,OAAO,SAAS,gBAAAF,MAACL,QAAA,EAAK,OAAOO,SAAO,WAAY,iBAAO,OAAM;AAAA,SAChE;AAAA,MAEA,gBAAAD,OAACP,QAAA,EAAK,OAAOQ,SAAO,gBAClB;AAAA,wBAAAF,MAACL,QAAA,EAAK,OAAOO,SAAO,OAAQ,yBAAc;AAAA,QAC1C,gBAAAF;AAAA,UAACJ;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACLM,SAAO;AAAA,cACP,OAAO,YAAYA,SAAO;AAAA,cAC1B;AAAA,YACF;AAAA,YACA,OAAO;AAAA,YACP,cAAc;AAAA,YACd,aAAY;AAAA,YACZ,iBAAe;AAAA,YACf,gBAAe;AAAA,YACf,aAAa;AAAA,YACb,cAAa;AAAA,YACb,UAAU,CAAC;AAAA;AAAA,QACb;AAAA,QACC,OAAO,YACN,gBAAAF,MAACL,QAAA,EAAK,OAAOO,SAAO,WAAY,iBAAO,UAAS;AAAA,SAEpD;AAAA,MAEA,gBAAAF;AAAA,QAACH;AAAA,QAAA;AAAA,UACC,OAAO,CAACK,SAAO,QAAQ,WAAWA,SAAO,gBAAgB,WAAW;AAAA,UACpE,SAAS;AAAA,UACT,UAAU;AAAA,UAET,oBACC,gBAAAF,MAACD,oBAAA,EAAkB,OAAM,WAAU,MAAK,SAAQ,IAEhD,gBAAAC,MAACL,QAAA,EAAK,OAAO,CAACO,SAAO,YAAY,eAAe,GAC7C,4BACH;AAAA;AAAA,MAEJ;AAAA,MAEC,oBACC,gBAAAF;AAAA,QAACH;AAAA,QAAA;AAAA,UACC,OAAOK,SAAO;AAAA,UACd,SAAS;AAAA,UACT,UAAU;AAAA,UAEV,0BAAAF,MAACL,QAAA,EAAK,OAAO,CAACO,SAAO,UAAU,SAAS,GACrC,+BACH;AAAA;AAAA,MACF;AAAA,MAGD,YACC,gBAAAF;AAAA,QAACH;AAAA,QAAA;AAAA,UACC,OAAOK,SAAO;AAAA,UACd,SAAS;AAAA,UACT,UAAU;AAAA,UAEV,0BAAAF,MAACL,QAAA,EAAK,OAAO,CAACO,SAAO,UAAU,SAAS,GAAI,uBAAY;AAAA;AAAA,MAC1D;AAAA,OAEJ;AAAA,KACF;AAEJ;AAEA,IAAMA,WAASJ,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,MAAM;AAAA,IACN,gBAAgB;AAAA,IAChB,SAAS;AAAA,IACT,iBAAiB;AAAA,EACnB;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,cAAc;AAAA,IACd,OAAO;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACb,OAAO;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACd,cAAc;AAAA,EAChB;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA,IACL,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,UAAU;AAAA,IACV,iBAAiB;AAAA,IACjB,OAAO;AAAA,EACT;AAAA,EACA,YAAY;AAAA,IACV,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AAAA,EACA,WAAW;AAAA,IACT,OAAO;AAAA,IACP,UAAU;AAAA,IACV,WAAW;AAAA,EACb;AAAA,EACA,QAAQ;AAAA,IACN,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,cAAc;AAAA,EAChB;AAAA,EACA,gBAAgB;AAAA,IACd,iBAAiB;AAAA,EACnB;AAAA,EACA,YAAY;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA,eAAe;AAAA,IACb,YAAY;AAAA,IACZ,iBAAiB;AAAA,EACnB;AAAA,EACA,UAAU;AAAA,IACR,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AACF,CAAC;;;AClPD,SAAgB,YAAAK,kBAAgB;AAChC;AAAA,EACE,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,cAAAC;AAAA,EAGA,qBAAAC;AAAA,EACA,cAAAC;AAAA,OACK;AA8GD,gBAAAC,OAII,QAAAC,cAJJ;AAnFC,IAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,uBAAuB;AAAA,EACvB,oBAAoB;AAAA,EACpB,cAAc;AAAA,EACd,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,UAAU,WAAW,IAAIT,WAAS;AAAA,IACvC,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,IACV,iBAAiB;AAAA,EACnB,CAAC;AACD,QAAM,CAAC,QAAQ,SAAS,IAAIA,WAKzB,CAAC,CAAC;AAEL,QAAM,cAAc,CAAC,OAA8B,UAAkB;AACnE,gBAAY,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,EAAE;AAAA,EACrD;AAEA,QAAM,eAAe,MAAM;AACzB,UAAM,YAA2B,CAAC;AAElC,QAAI,eAAe,CAAC,SAAS,KAAK,KAAK,GAAG;AACxC,gBAAU,OAAO;AAAA,IACnB;AAEA,QAAI,CAAC,SAAS,MAAM,KAAK,GAAG;AAC1B,gBAAU,QAAQ;AAAA,IACpB,WAAW,CAAC,eAAe,KAAK,SAAS,KAAK,GAAG;AAC/C,gBAAU,QAAQ;AAAA,IACpB;AAEA,QAAI,CAAC,SAAS,SAAS,KAAK,GAAG;AAC7B,gBAAU,WAAW;AAAA,IACvB,WAAW,SAAS,SAAS,SAAS,GAAG;AACvC,gBAAU,WAAW;AAAA,IACvB,WAAW,CAAC,iCAAiC,KAAK,SAAS,QAAQ,GAAG;AACpE,gBAAU,WACR;AAAA,IACJ;AAEA,QAAI,CAAC,SAAS,gBAAgB,KAAK,GAAG;AACpC,gBAAU,kBAAkB;AAAA,IAC9B,WAAW,SAAS,aAAa,SAAS,iBAAiB;AACzD,gBAAU,kBAAkB;AAAA,IAC9B;AAEA,cAAU,SAAS;AACnB,WAAO,OAAO,KAAK,SAAS,EAAE,WAAW;AAAA,EAC3C;AAEA,QAAM,eAAe,YAAY;AAC/B,QAAI,CAAC,aAAa,KAAK,QAAS;AAEhC,QAAI;AACF,YAAM,WAAW,QAAQ;AAAA,IAC3B,SAAS,OAAO;AACd,cAAQ,MAAM,kBAAkB,KAAK;AAAA,IACvC;AAAA,EACF;AAEA,SACE,gBAAAS;AAAA,IAACF;AAAA,IAAA;AAAA,MACC,OAAO,CAACG,SAAO,WAAW,KAAK;AAAA,MAC/B,2BAA0B;AAAA,MAE1B;AAAA,wBAAAF,MAACN,QAAA,EAAK,OAAO,CAACQ,SAAO,OAAO,UAAU,GAAI,iBAAM;AAAA,QAEhD,gBAAAD,OAACR,QAAA,EAAK,OAAOS,SAAO,eACjB;AAAA,yBACC,gBAAAD,OAACR,QAAA,EAAK,OAAOS,SAAO,gBAClB;AAAA,4BAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,OAAQ,qBAAU;AAAA,YACtC,gBAAAF;AAAA,cAACL;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,kBACLO,SAAO;AAAA,kBACP,OAAO,QAAQA,SAAO;AAAA,kBACtB;AAAA,gBACF;AAAA,gBACA,OAAO,SAAS;AAAA,gBAChB,cAAc,CAAC,UAAU,YAAY,QAAQ,KAAK;AAAA,gBAClD,aAAY;AAAA,gBACZ,gBAAe;AAAA,gBACf,aAAa;AAAA,gBACb,cAAa;AAAA,gBACb,UAAU,CAAC;AAAA;AAAA,YACb;AAAA,YACC,OAAO,QAAQ,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,WAAY,iBAAO,MAAK;AAAA,aAC9D;AAAA,UAGF,gBAAAD,OAACR,QAAA,EAAK,OAAOS,SAAO,gBAClB;AAAA,4BAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,OAAQ,sBAAW;AAAA,YACvC,gBAAAF;AAAA,cAACL;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,kBACLO,SAAO;AAAA,kBACP,OAAO,SAASA,SAAO;AAAA,kBACvB;AAAA,gBACF;AAAA,gBACA,OAAO,SAAS;AAAA,gBAChB,cAAc,CAAC,UAAU,YAAY,SAAS,KAAK;AAAA,gBACnD,aAAY;AAAA,gBACZ,cAAa;AAAA,gBACb,gBAAe;AAAA,gBACf,aAAa;AAAA,gBACb,cAAa;AAAA,gBACb,UAAU,CAAC;AAAA;AAAA,YACb;AAAA,YACC,OAAO,SAAS,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,WAAY,iBAAO,OAAM;AAAA,aAChE;AAAA,UAEA,gBAAAD,OAACR,QAAA,EAAK,OAAOS,SAAO,gBAClB;AAAA,4BAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,OAAQ,yBAAc;AAAA,YAC1C,gBAAAF;AAAA,cAACL;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,kBACLO,SAAO;AAAA,kBACP,OAAO,YAAYA,SAAO;AAAA,kBAC1B;AAAA,gBACF;AAAA,gBACA,OAAO,SAAS;AAAA,gBAChB,cAAc,CAAC,UAAU,YAAY,YAAY,KAAK;AAAA,gBACtD,aAAY;AAAA,gBACZ,iBAAe;AAAA,gBACf,gBAAe;AAAA,gBACf,aAAa;AAAA,gBACb,cAAa;AAAA,gBACb,UAAU,CAAC;AAAA;AAAA,YACb;AAAA,YACC,OAAO,YACN,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,WAAY,iBAAO,UAAS;AAAA,aAEpD;AAAA,UAEA,gBAAAD,OAACR,QAAA,EAAK,OAAOS,SAAO,gBAClB;AAAA,4BAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,OAAQ,gCAAqB;AAAA,YACjD,gBAAAF;AAAA,cAACL;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,kBACLO,SAAO;AAAA,kBACP,OAAO,mBAAmBA,SAAO;AAAA,kBACjC;AAAA,gBACF;AAAA,gBACA,OAAO,SAAS;AAAA,gBAChB,cAAc,CAAC,UAAU,YAAY,mBAAmB,KAAK;AAAA,gBAC7D,aAAY;AAAA,gBACZ,iBAAe;AAAA,gBACf,gBAAe;AAAA,gBACf,aAAa;AAAA,gBACb,cAAa;AAAA,gBACb,UAAU,CAAC;AAAA;AAAA,YACb;AAAA,YACC,OAAO,mBACN,gBAAAF,MAACN,QAAA,EAAK,OAAOQ,SAAO,WAAY,iBAAO,iBAAgB;AAAA,aAE3D;AAAA,UAEA,gBAAAF;AAAA,YAACJ;AAAA,YAAA;AAAA,cACC,OAAO,CAACM,SAAO,QAAQ,WAAWA,SAAO,gBAAgB,WAAW;AAAA,cACpE,SAAS;AAAA,cACT,UAAU;AAAA,cAET,oBACC,gBAAAF,MAACF,oBAAA,EAAkB,OAAM,WAAU,MAAK,SAAQ,IAEhD,gBAAAE,MAACN,QAAA,EAAK,OAAO,CAACQ,SAAO,YAAY,eAAe,GAC7C,6BACH;AAAA;AAAA,UAEJ;AAAA,UAEC,YACC,gBAAAF;AAAA,YAACJ;AAAA,YAAA;AAAA,cACC,OAAOM,SAAO;AAAA,cACd,SAAS;AAAA,cACT,UAAU;AAAA,cAEV,0BAAAF,MAACN,QAAA,EAAK,OAAO,CAACQ,SAAO,UAAU,SAAS,GAAI,uBAAY;AAAA;AAAA,UAC1D;AAAA,WAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,IAAMA,WAASL,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,cAAc;AAAA,IACd,WAAW;AAAA,IACX,OAAO;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACb,mBAAmB;AAAA,IACnB,eAAe;AAAA,EACjB;AAAA,EACA,gBAAgB;AAAA,IACd,cAAc;AAAA,EAChB;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA,IACL,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,UAAU;AAAA,IACV,iBAAiB;AAAA,IACjB,OAAO;AAAA,EACT;AAAA,EACA,YAAY;AAAA,IACV,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AAAA,EACA,WAAW;AAAA,IACT,OAAO;AAAA,IACP,UAAU;AAAA,IACV,WAAW;AAAA,EACb;AAAA,EACA,QAAQ;AAAA,IACN,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,cAAc;AAAA,EAChB;AAAA,EACA,gBAAgB;AAAA,IACd,iBAAiB;AAAA,EACnB;AAAA,EACA,YAAY;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA,eAAe;AAAA,IACb,YAAY;AAAA,IACZ,iBAAiB;AAAA,EACnB;AAAA,EACA,UAAU;AAAA,IACR,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AACF,CAAC;;;ACnTD,YAAYM,aAAW;AACvB,SAAS,OAAAC,YAA8B;AAqD7B,SAME,OAAAC,OANF,QAAAC,cAAA;AAlDV,IAAM,iBAAiBC;AAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aACE;AAAA,QACF,SACE;AAAA,QACF,WACE;AAAA,QACF,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF;AACF;AASA,IAAM,SAAe;AAAA,EACnB,CACE,EAAE,WAAW,SAAS,MAAM,SAAS,UAAU,UAAU,GAAG,MAAM,GAClE,QACG;AACH,WACE,gBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,GAAG,eAAe,EAAE,SAAS,MAAM,UAAU,CAAC,CAAC;AAAA,QAC1D;AAAA,QACA,UAAU,YAAY;AAAA,QACrB,GAAG;AAAA,QAEH;AAAA,qBACC,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAM;AAAA,cACN,MAAK;AAAA,cACL,SAAQ;AAAA,cAER;AAAA,gCAAAD;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAU;AAAA,oBACV,IAAG;AAAA,oBACH,IAAG;AAAA,oBACH,GAAE;AAAA,oBACF,QAAO;AAAA,oBACP,aAAY;AAAA;AAAA,gBACd;AAAA,gBACA,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAU;AAAA,oBACV,MAAK;AAAA,oBACL,GAAE;AAAA;AAAA,gBACJ;AAAA;AAAA;AAAA,UACF;AAAA,UAED;AAAA;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AACA,OAAO,cAAc;;;AChFrB,YAAYG,aAAW;AAuCrB,gBAAAC,aAAA;AAvBF,IAAM,iBAGF;AAAA,EACF,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AACX;AAEA,IAAM,cAAqE;AAAA,EACzE,SAAS;AAAA,EACT,MAAM;AAAA,EACN,WAAW;AAAA,EACX,SACE;AACJ;AAEA,IAAM,OAAa,mBAGjB,CAAC,EAAE,WAAW,SAAS,SAAS,MAAM,GAAG,MAAM,GAAG,QAClD,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT,UACI,eAAe,OAAO,IACtB;AAAA,MACJ,WAAW;AAAA,MACX,QAAQ,YAAY,IAAI;AAAA,MACxB,YAAY,aACV;AAAA,MACF;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,KAAK,cAAc;AAEnB,IAAM,aAAmB,mBAGvB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,oBAAiB;AAAA,IACjB,WAAW,GAAG,iCAAiC,SAAS;AAAA,IACvD,GAAG;AAAA;AACN,CACD;AACD,WAAW,cAAc;AAEzB,IAAM,YAAkB,mBAGtB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,UAAU,cAAc;AAExB,IAAM,kBAAwB,mBAG5B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,WAAW,GAAG,iCAAiC,SAAS;AAAA,IACvD,GAAG;AAAA;AACN,CACD;AACD,gBAAgB,cAAc;AAE9B,IAAM,cAAoB,mBAGxB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,qBAAkB;AAAA,IAClB,WAAW,GAAG,YAAY,SAAS;AAAA,IAClC,GAAG;AAAA;AACN,CACD;AACD,YAAY,cAAc;AAE1B,IAAM,aAAmB,mBAGvB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,oBAAiB;AAAA,IACjB,WAAW,GAAG,8BAA8B,SAAS;AAAA,IACpD,GAAG;AAAA;AACN,CACD;AACD,WAAW,cAAc;;;ACxHzB,YAAYC,aAAW;AASjB,gBAAAC,aAAA;AAHN,IAAM,QAAc;AAAA,EAClB,CAAC,EAAE,WAAW,MAAM,GAAG,MAAM,GAAG,QAAQ;AACtC,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,QACC,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AACA,MAAM,cAAc;;;ACpBpB,OAAOC,aAAW;AAClB,SAAS,QAAQ,uBAAiC;AA2M5C,gBAAAC,aAAA;AApKN,IAAM,2BAA2B,CAC/B,MACA,WACA,WAAmB,QACN;AACb,QAAM,oBAAoB,WAAW;AAErC,QAAM,iBAAiB;AAAA,IACrB,UAAU;AAAA,IACV,MAAM,CAAC,MAAM,MAAM,MAAM,IAAI;AAAA,EAC/B;AAEA,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,cAAQ,WAAW;AAAA,QACjB,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,YACL,SAAS,EAAE,GAAG,QAAQ,SAAS,EAAE;AAAA,YACjC,SAAS,EAAE,GAAG,GAAG,SAAS,GAAG,YAAY,eAAe;AAAA,YACxD,MAAM,EAAE,GAAG,SAAS,SAAS,GAAG,YAAY,eAAe;AAAA,UAC7D;AAAA,QACF,KAAK;AACH,iBAAO;AAAA,YACL,SAAS,EAAE,GAAG,SAAS,SAAS,EAAE;AAAA,YAClC,SAAS,EAAE,GAAG,GAAG,SAAS,GAAG,YAAY,eAAe;AAAA,YACxD,MAAM,EAAE,GAAG,QAAQ,SAAS,GAAG,YAAY,eAAe;AAAA,UAC5D;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,YACL,SAAS,EAAE,GAAG,QAAQ,SAAS,EAAE;AAAA,YACjC,SAAS,EAAE,GAAG,GAAG,SAAS,GAAG,YAAY,eAAe;AAAA,YACxD,MAAM,EAAE,GAAG,SAAS,SAAS,GAAG,YAAY,eAAe;AAAA,UAC7D;AAAA,QACF,KAAK;AACH,iBAAO;AAAA,YACL,SAAS,EAAE,GAAG,SAAS,SAAS,EAAE;AAAA,YAClC,SAAS,EAAE,GAAG,GAAG,SAAS,GAAG,YAAY,eAAe;AAAA,YACxD,MAAM,EAAE,GAAG,QAAQ,SAAS,GAAG,YAAY,eAAe;AAAA,UAC5D;AAAA,QACF;AACE,iBAAO;AAAA,YACL,SAAS,EAAE,GAAG,QAAQ,SAAS,EAAE;AAAA,YACjC,SAAS,EAAE,GAAG,GAAG,SAAS,GAAG,YAAY,eAAe;AAAA,YACxD,MAAM,EAAE,GAAG,SAAS,SAAS,GAAG,YAAY,eAAe;AAAA,UAC7D;AAAA,MACJ;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL,SAAS,EAAE,SAAS,EAAE;AAAA,QACtB,SAAS,EAAE,SAAS,GAAG,YAAY,eAAe;AAAA,QAClD,MAAM,EAAE,SAAS,GAAG,YAAY,eAAe;AAAA,MACjD;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL,SAAS,EAAE,SAAS,GAAG,OAAO,IAAI;AAAA,QAClC,SAAS;AAAA,UACP,SAAS;AAAA,UACT,OAAO;AAAA,UACP,YAAY;AAAA,YACV,GAAG;AAAA,YACH,OAAO,EAAE,MAAM,UAAU,SAAS,IAAI,WAAW,IAAI;AAAA,UACvD;AAAA,QACF;AAAA,QACA,MAAM,EAAE,SAAS,GAAG,OAAO,KAAK,YAAY,eAAe;AAAA,MAC7D;AAAA,IAEF,KAAK;AACH,UAAI,cAAc,cAAc;AAC9B,eAAO;AAAA,UACL,SAAS,EAAE,SAAS,GAAG,SAAS,IAAI;AAAA,UACpC,SAAS;AAAA,YACP,SAAS;AAAA,YACT,SAAS;AAAA,YACT,YAAY;AAAA,cACV,GAAG;AAAA,cACH,SAAS,EAAE,MAAM,UAAU,SAAS,IAAI,WAAW,IAAI;AAAA,YACzD;AAAA,UACF;AAAA,UACA,MAAM,EAAE,SAAS,GAAG,SAAS,IAAI,YAAY,eAAe;AAAA,QAC9D;AAAA,MACF,OAAO;AACL,eAAO;AAAA,UACL,SAAS,EAAE,SAAS,GAAG,SAAS,IAAI;AAAA,UACpC,SAAS;AAAA,YACP,SAAS;AAAA,YACT,SAAS;AAAA,YACT,YAAY;AAAA,cACV,GAAG;AAAA,cACH,SAAS,EAAE,MAAM,UAAU,SAAS,IAAI,WAAW,IAAI;AAAA,YACzD;AAAA,UACF;AAAA,UACA,MAAM,EAAE,SAAS,GAAG,SAAS,IAAI,YAAY,eAAe;AAAA,QAC9D;AAAA,MACF;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL,SAAS,EAAE,SAAS,GAAG,OAAO,EAAE;AAAA,QAChC,SAAS;AAAA,UACP,SAAS;AAAA,UACT,OAAO;AAAA,UACP,YAAY;AAAA,YACV,UAAU,oBAAoB;AAAA,YAC9B,MAAM;AAAA,YACN,SAAS;AAAA,YACT,WAAW;AAAA,UACb;AAAA,QACF;AAAA,QACA,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,YAAY,eAAe;AAAA,MAC3D;AAAA,IAEF;AACE,aAAO;AAAA,QACL,SAAS,EAAE,SAAS,EAAE;AAAA,QACtB,SAAS,EAAE,SAAS,GAAG,YAAY,eAAe;AAAA,QAClD,MAAM,EAAE,SAAS,GAAG,YAAY,eAAe;AAAA,MACjD;AAAA,EACJ;AACF;AAEO,IAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,WAAW;AAAA,EACX;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AAEJ,QAAM,uBAAuBD,QAAM,QAAQ,MAAM;AAC/C,QAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,WAAO,OAAO,WAAW,kCAAkC,EAAE;AAAA,EAC/D,GAAG,CAAC,CAAC;AAGL,QAAM,gBAAgB,gBAAgB,uBAAuB,SAAS;AACtE,QAAM,oBACJ,gBAAgB,uBAAuB,MAAM;AAE/C,QAAM,WAAWA,QAAM;AAAA,IACrB,MAAM,yBAAyB,eAAe,WAAW,iBAAiB;AAAA,IAC1E,CAAC,eAAe,WAAW,iBAAiB;AAAA,EAC9C;AAEA,QAAM,uBAAuBA,QAAM,YAAY,MAAM;AACnD,wBAAoB;AAAA,EACtB,GAAG,CAAC,iBAAiB,CAAC;AAEtB,QAAM,0BAA0BA,QAAM,YAAY,MAAM;AACtD,2BAAuB;AAAA,EACzB,GAAG,CAAC,oBAAoB,CAAC;AAIzB,SACE,gBAAAC,MAAC,mBAAgB,MAAK,QAAO,SAAS,OACpC,0BAAAA;AAAA,IAAC,OAAO;AAAA,IAAP;AAAA,MAEC;AAAA,MACA;AAAA,MACA,SAAQ;AAAA,MACR,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,kBAAkB;AAAA,MAClB,qBAAqB;AAAA,MACrB,OAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,UAAU;AAAA,MACZ;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,IAfI,OAAO;AAAA,EAgBd,GACF;AAEJ;AAGO,IAAM,qBAAqB,CAChC,WACA,oBACG;AACH,QAAM,mBAAmB,CAAC,UACxB,gBAAAA,MAAC,kBAAgB,GAAG,iBAClB,0BAAAA,MAAC,aAAW,GAAG,OAAO,GACxB;AAGF,mBAAiB,cAAc,sBAAsB,UAAU,eAAe,UAAU,IAAI;AAC5F,SAAO;AACT;AAEA,eAAe,cAAc;;;ACjP7B,SAAgB,YAAAC,YAAU,UAAAC,SAAQ,eAAAC,oBAAmB;AACrD,SAAS,UAAAC,SAAiB,gBAAgB,oBAAoB;AAmKtD,gBAAAC,OAgBJ,QAAAC,cAhBI;AAtID,IAAM,gBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA;AAAA,EACA,cAAc,CAAC;AAAA,EACf,eAAe,CAAC;AAAA,EAChB,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,sBAAsB;AACxB,MAAM;AACJ,QAAM,CAAC,UAAU,WAAW,IAAIC,WAAS,KAAK;AAC9C,QAAM,CAAC,YAAY,aAAa,IAAIA,WAAS,KAAK;AAClD,QAAM,eAAeC,QAAuB,IAAI;AAChD,QAAM,IAAI,eAAe,CAAC;AAG1B,QAAM,cAAc,aAAa,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1D,QAAM,eAAe,aAAa,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5D,QAAM,YAAY,aAAa,GAAG,CAAC,GAAG,YAAY,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC;AAClE,QAAM,aAAa,aAAa,GAAG,CAAC,CAAC,YAAY,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC;AAGpE,QAAM,gBAAgBC;AAAA,IACpB,CAAC,OAAqC,YAAY;AAChD,UAAI,CAAC,kBAAkB,OAAO,cAAc,YAAa;AAGzD,UAAI,aAAa,WAAW;AAC1B,cAAM,WAAW;AAAA,UACf,OAAO,CAAC,EAAE;AAAA,UACV,QAAQ,CAAC,EAAE;AAAA,UACX,OAAO,CAAC,EAAE;AAAA,QACZ;AACA,kBAAU,QAAQ,SAAS,IAAI,CAAC;AAAA,MAClC;AAAA,IACF;AAAA,IACA,CAAC,cAAc;AAAA,EACjB;AAEA,QAAM,kBAAkBA,aAAY,MAAM;AACxC,QAAI,SAAU;AACd,kBAAc,IAAI;AAClB,gBAAY,IAAI;AAChB,mBAAe;AACf,kBAAc,OAAO;AAAA,EACvB,GAAG,CAAC,UAAU,cAAc,aAAa,CAAC;AAE1C,QAAM,gBAAgBA;AAAA,IACpB,OAAO,SAAkB;AACvB,UAAI,SAAU;AAEd,oBAAc,KAAK;AACnB,YAAM,gBAAgB,KAAK,OAAO;AAClC,YAAM,WAAW,KAAK,SAAS;AAG/B,YAAM,cAAc,gBAAgB,aAAa,WAAW;AAC5D,YAAM,eAAe,gBAAgB,CAAC,aAAa,WAAW;AAE9D,UAAI,gBAAgB,eAAe,YAAY,SAAS,IAAI;AAC1D,sBAAc,QAAQ;AAGtB,cAAM,kBAAkB,YAAY,CAAC;AACrC,YAAI,iBAAiB;AACnB,gBAAM,gBAAgB,SAAS;AAAA,QACjC,WAAW,aAAa;AACtB,gBAAM,YAAY;AAAA,QACpB;AAAA,MACF,WAAW,iBAAiB,gBAAgB,aAAa,SAAS,IAAI;AACpE,sBAAc,QAAQ;AAGtB,cAAM,mBAAmB,aAAa,CAAC;AACvC,YAAI,kBAAkB;AACpB,gBAAM,iBAAiB,SAAS;AAAA,QAClC,WAAW,cAAc;AACvB,gBAAM,aAAa;AAAA,QACrB;AAAA,MACF;AAGA,QAAE,IAAI,CAAC;AACP,kBAAY,KAAK;AACjB,mBAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,eAAe;AAAA,IACnB,MAAM,EAAE,OAAO,EAAE;AAAA,IACjB,QAAQ,EAAE,OAAO,KAAK;AAAA,EACxB;AAEA,QAAM,wBAAwB,CAC5B,SACA,SACG;AACH,QAAI,CAAC,uBAAuB,CAAC,WAAW,QAAQ,WAAW,EAAG,QAAO;AAErE,UAAM,SAAS,QAAQ,CAAC;AACxB,QAAI,CAAC,OAAQ,QAAO;AACpB,UAAM,UAAU,SAAS,SAAS,cAAc;AAChD,UAAM,QAAQ,SAAS,SAAS,YAAY;AAE5C,WACE,gBAAAJ;AAAA,MAACK,QAAO;AAAA,MAAP;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,SAAS,SAAS,WAAW;AAAA,QAC/B;AAAA,QACA,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA,iBACE,OAAO,oBAAoB,SAAS,SAAS,YAAY;AAAA,QAC7D;AAAA,QAEA,0BAAAL,MAAC,SAAI,WAAU,kCACZ,iBAAO,QAAQ,OAAO,OACzB;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,MAAI,UAAU;AACZ,WACE,gBAAAA,MAAC,SAAI,WAAW,GAAG,YAAY,SAAS,GAAG,KAAK,cAC7C,UACH;AAAA,EAEJ;AAEA,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,4BAA4B,SAAS;AAAA,MACnD,KAAK;AAAA,MAGJ;AAAA,8BAAsB,aAAa,MAAM;AAAA,QAGzC,sBAAsB,cAAc,OAAO;AAAA,QAG5C,gBAAAD;AAAA,UAACK,QAAO;AAAA,UAAP;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,EAAE;AAAA,YACX,UAAU;AAAA,YACV,SAAQ;AAAA,YACR,SAAS,WAAW,WAAW;AAAA,YAC/B,MAAK;AAAA,YACL,iBAAiB,EAAE,MAAM,CAAC,kBAAkB,OAAO,iBAAiB;AAAA,YACpE,aAAa;AAAA,YACb,aAAa;AAAA,YACb,WAAW,CAAC,GAAG,SAAS,cAAc,IAAI;AAAA,YAC1C,UAAU,EAAE,QAAQ,WAAW;AAAA,YAC/B,YAAY;AAAA,cACV,MAAM;AAAA,cACN,SAAS;AAAA,cACT,WAAW;AAAA,cACX,UAAU,mBAAmB;AAAA,YAC/B;AAAA,YAEC;AAAA;AAAA,QACH;AAAA,QAGC,cACC,gBAAAL;AAAA,UAACK,QAAO;AAAA,UAAP;AAAA,YACC,WAAU;AAAA,YACV,SAAS,EAAE,SAAS,EAAE;AAAA,YACtB,SAAS,EAAE,SAAS,EAAE;AAAA,YACtB,MAAM,EAAE,SAAS,EAAE;AAAA;AAAA,QACrB;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEA,cAAc,cAAc;;;AClO5B,SAAgB,YAAAC,YAAU,UAAAC,UAAQ,eAAAC,cAAa,aAAAC,mBAAiB;AAChE,SAAS,UAAAC,SAAiB,kBAAAC,iBAAgB,gBAAAC,qBAAoB;AA2B5D,SACE,OAAAC,OADF,QAAAC,cAAA;AADF,IAAM,iBAAiB,MACrB,gBAAAA,OAAC,SAAI,WAAU,wBAAuB,MAAK,QAAO,SAAQ,aACxD;AAAA,kBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,IAAG;AAAA,MACH,IAAG;AAAA,MACH,GAAE;AAAA,MACF,QAAO;AAAA,MACP,aAAY;AAAA;AAAA,EACd;AAAA,EACA,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,MAAK;AAAA,MACL,GAAE;AAAA;AAAA,EACJ;AAAA,GACF;AAGK,IAAM,gBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX;AAAA,EACA,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,eAAe;AAAA,EACf,iBAAiB;AACnB,MAAM;AACJ,QAAM,CAAC,cAAc,eAAe,IAAIE,WAAuB,MAAM;AACrE,QAAM,eAAeC,SAAuB,IAAI;AAChD,QAAM,IAAIC,gBAAe,CAAC;AAC1B,QAAM,aAAaD,SAA6C,IAAI;AAGpE,QAAM,UAAUE,cAAa,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1D,QAAM,QAAQA,cAAa,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,KAAK,GAAG,CAAC;AACxD,QAAM,SAASA,cAAa,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAG3D,QAAM,gBAAgBC;AAAA,IACpB,CAAC,OAAqC,YAAY;AAChD,UAAI,CAAC,kBAAkB,OAAO,cAAc,YAAa;AAEzD,UAAI,aAAa,WAAW;AAC1B,cAAM,WAAW;AAAA,UACf,OAAO,CAAC,EAAE;AAAA,UACV,QAAQ,CAAC,EAAE;AAAA,UACX,OAAO,CAAC,EAAE;AAAA,QACZ;AACA,kBAAU,QAAQ,SAAS,IAAI,CAAC;AAAA,MAClC;AAAA,IACF;AAAA,IACA,CAAC,cAAc;AAAA,EACjB;AAEA,QAAM,kBAAkBA,aAAY,MAAM;AACxC,QAAI,YAAY,iBAAiB,aAAc,QAAO;AAGtD,UAAM,YAAY,aAAa;AAC/B,QAAI,CAAC,UAAW,QAAO;AAEvB,UAAM,YAAY,UAAU;AAC5B,WAAO,aAAa;AAAA,EACtB,GAAG,CAAC,UAAU,YAAY,CAAC;AAE3B,QAAM,aAAaA;AAAA,IACjB,CAAC,SAAkB;AACjB,UAAI,YAAY,iBAAiB,aAAc;AAE/C,YAAM,eAAe,KAAK,IAAI,GAAG,KAAK,OAAO,CAAC;AAC9C,YAAM,kBAAkB,KAAK,IAAI,cAAc,eAAe;AAE9D,UAAI,mBAAmB,aAAa,iBAAiB,SAAS;AAC5D,wBAAgB,OAAO;AACvB,sBAAc,QAAQ;AAAA,MACxB,WAAW,kBAAkB,aAAa,iBAAiB,SAAS;AAClE,wBAAgB,SAAS;AACzB,sBAAc,OAAO;AAAA,MACvB,WAAW,kBAAkB,KAAK,iBAAiB,QAAQ;AACzD,wBAAgB,SAAS;AAAA,MAC3B;AAEA,QAAE,IAAI,eAAe;AAAA,IACvB;AAAA,IACA,CAAC,UAAU,cAAc,WAAW,iBAAiB,eAAe,CAAC;AAAA,EACvE;AAEA,QAAM,gBAAgBA;AAAA,IACpB,OAAO,SAAkB;AACvB,UAAI,YAAY,iBAAiB,aAAc;AAE/C,YAAM,eAAe,KAAK,OAAO;AACjC,YAAM,WAAW,KAAK,SAAS;AAE/B,WACG,gBAAgB,aAAa,WAAW,QACzC,iBAAiB,SACjB;AACA,wBAAgB,YAAY;AAC5B,sBAAc,OAAO;AAGrB,YAAI,WAAW,SAAS;AACtB,uBAAa,WAAW,OAAO;AAAA,QACjC;AAEA,mBAAW,UAAU,WAAW,MAAM;AACpC,0BAAgB,OAAO;AACvB,qBAAW,MAAM;AACf,4BAAgB,MAAM;AACtB,cAAE,IAAI,CAAC;AAAA,UACT,GAAG,GAAI;AAAA,QACT,GAAG,cAAc;AAEjB,YAAI;AACF,gBAAM,UAAU;AAEhB,cAAI,WAAW,SAAS;AACtB,yBAAa,WAAW,OAAO;AAAA,UACjC;AAEA,0BAAgB,SAAS;AAGzB,qBAAW,MAAM;AACf,4BAAgB,MAAM;AACtB,cAAE,IAAI,CAAC;AAAA,UACT,GAAG,IAAI;AAAA,QACT,SAAS,OAAO;AACd,cAAI,WAAW,SAAS;AACtB,yBAAa,WAAW,OAAO;AAAA,UACjC;AAEA,0BAAgB,OAAO;AAGvB,qBAAW,MAAM;AACf,4BAAgB,MAAM;AACtB,cAAE,IAAI,CAAC;AAAA,UACT,GAAG,GAAI;AAAA,QACT;AAAA,MACF,OAAO;AAEL,wBAAgB,MAAM;AACtB,UAAE,IAAI,CAAC;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAGA,EAAAC,YAAU,MAAM;AACd,WAAO,MAAM;AACX,UAAI,WAAW,SAAS;AACtB,qBAAa,WAAW,OAAO;AAAA,MACjC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,sBAAsB,MAAM;AAChC,YAAQ,cAAc;AAAA,MACpB,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO,oBAAoB,gBAAAP,MAAC,kBAAe;AAAA,MAC7C,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAEA,QAAM,sBAAsB,MAAM;AAChC,QAAI,CAAC,aAAc,QAAO;AAE1B,YAAQ,cAAc;AAAA,MACpB,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAEA,QAAM,oBAAoB,MAAM;AAC9B,YAAQ,cAAc;AAAA,MACpB,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAEA,MAAI,UAAU;AACZ,WACE,gBAAAA,MAAC,SAAI,WAAW,GAAG,YAAY,SAAS,GAAG,KAAK,cAC7C,UACH;AAAA,EAEJ;AAEA,SACE,gBAAAC;AAAA,IAACO,QAAO;AAAA,IAAP;AAAA,MACC,WAAW,GAAG,4BAA4B,SAAS;AAAA,MACnD,OAAO,EAAE,EAAE;AAAA,MACX,KAAK;AAAA,MAGL;AAAA,wBAAAP;AAAA,UAACO,QAAO;AAAA,UAAP;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,cACL;AAAA,cACA;AAAA,cACA,GAAG;AAAA;AAAA,YACL;AAAA,YAEA;AAAA,8BAAAR;AAAA,gBAACQ,QAAO;AAAA,gBAAP;AAAA,kBACC,WAAW,GAAG,+BAA+B,kBAAkB,CAAC;AAAA,kBAChE,OAAO,EAAE,QAAQ,iBAAiB,eAAe,SAAS,EAAE;AAAA,kBAE3D,8BAAoB;AAAA;AAAA,cACvB;AAAA,cAEC,oBAAoB,KACnB,gBAAAR,MAAC,SAAI,WAAW,GAAG,WAAW,kBAAkB,CAAC,GAC9C,8BAAoB,GACvB;AAAA;AAAA;AAAA,QAEJ;AAAA,QAGA,gBAAAA;AAAA,UAACQ,QAAO;AAAA,UAAP;AAAA,YACC,MAAK;AAAA,YACL,iBAAiB,EAAE,KAAK,GAAG,QAAQ,EAAE;AAAA,YACrC,aAAa,EAAE,KAAK,KAAK,QAAQ,EAAE;AAAA,YACnC,aAAa;AAAA,YACb,QAAQ,CAAC,GAAG,SAAS,WAAW,IAAI;AAAA,YACpC,WAAW,CAAC,GAAG,SAAS,cAAc,IAAI;AAAA,YAC1C,WAAU;AAAA,YAET;AAAA;AAAA,QACH;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,cAAc,cAAc;;;AC/S5B,SAAgB,YAAAC,YAAU,UAAAC,UAAQ,aAAAC,aAAW,eAAAC,qBAAmB;AAChE,SAAS,UAAAC,SAAQ,mBAAAC,wBAAuB;AA2EtC,gBAAAC,OAwME,QAAAC,cAxMF;AAxCF,IAAM,mBAAmB,MAAwB;AAC/C,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,OAAO,IAAI,MAAM;AACvB,SAAK,SAAS,KAAK,UAAU,MAAM;AACjC,cAAQ,KAAK,WAAW,CAAC;AAAA,IAC3B;AACA,SAAK,MACH;AAAA,EACJ,CAAC;AACH;AAGA,IAAM,uBAAuB,CAC3B,KACA,eACA,uBACW;AACX,MAAI,CAAC,mBAAoB,QAAO;AAEhC,QAAM,MAAM,IAAI;AAAA,IACd;AAAA,IACA,OAAO,WAAW,cAAc,OAAO,SAAS,SAAS;AAAA,EAC3D;AACA,QAAM,SAAS,IAAI,gBAAgB,IAAI,MAAM;AAE7C,MAAI,mBAAmB,SAAS;AAC9B,WAAO,IAAI,KAAK,mBAAmB,QAAQ,SAAS,CAAC;AAAA,EACvD;AAEA,MAAI,iBAAiB,mBAAmB,WAAW,QAAQ;AACzD,WAAO,IAAI,UAAU,MAAM;AAAA,EAC7B,WAAW,mBAAmB,QAAQ;AACpC,WAAO,IAAI,UAAU,mBAAmB,MAAM;AAAA,EAChD;AAEA,MAAI,SAAS,OAAO,SAAS;AAC7B,SAAO,IAAI,SAAS;AACtB;AAEA,IAAM,oBAAoB,CAAC,EAAE,UAAU,MACrC,gBAAAD,MAAC,SAAI,WAAW,GAAG,qCAAqC,SAAS,GAAG;AAGtE,IAAM,2BAA2B,CAAC;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AACF,MAKE,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACC,KACE,eACA;AAAA,IAEF;AAAA,IACA,WAAW,GAAG,kBAAkB,SAAS;AAAA,IACzC,eAAY;AAAA;AACd;AAGF,IAAM,4BAA4B,CAAC;AAAA,EACjC;AAAA,EACA;AACF,MAIE,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACC,WAAW,GAAG,WAAW,SAAS;AAAA,IAClC,OAAO,EAAE,iBAAiB,SAAS,UAAU;AAAA;AAC/C;AAGK,IAAM,YAAsC,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,GAAG;AACL,MAAM;AACJ,QAAM,CAAC,UAAU,WAAW,IAAIE,WAAS,KAAK;AAC9C,QAAM,CAAC,UAAU,WAAW,IAAIA,WAAS,YAAY,OAAO;AAC5D,QAAM,CAAC,UAAU,WAAW,IAAIA,WAAS,KAAK;AAC9C,QAAM,CAAC,eAAe,gBAAgB,IAAIA,WAAS,KAAK;AACxD,QAAM,CAAC,YAAY,aAAa,IAAIA,WAAS,CAAC;AAC9C,QAAM,SAASC,SAAyB,IAAI;AAC5C,QAAM,cAAcA,SAAoC,IAAI;AAG5D,EAAAC,YAAU,MAAM;AACd,QAAI,CAAC,YAAa;AAElB,qBAAiB,EAAE,KAAK,gBAAgB;AAAA,EAC1C,GAAG,CAAC,WAAW,CAAC;AAGhB,EAAAA,YAAU,MAAM;AACd,QAAI,YAAY,WAAW,SAAU;AAErC,UAAM,WAAW,IAAI;AAAA,MACnB,CAAC,YAAY;AACX,gBAAQ,QAAQ,CAAC,UAAU;AACzB,cAAI,MAAM,gBAAgB;AACxB,wBAAY,IAAI;AAChB,qBAAS,UAAU,MAAM,MAAM;AAAA,UACjC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,aAAa,OAAO;AAC1B,QAAI,YAAY;AACd,eAAS,QAAQ,UAAU;AAC3B,kBAAY,UAAU;AAAA,IACxB;AAEA,WAAO,MAAM;AACX,UAAI,YAAY,SAAS;AACvB,oBAAY,QAAQ,WAAW;AAAA,MACjC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,SAAS,UAAU,YAAY,SAAS,CAAC;AAG7C,QAAM,aAAaC,cAAY,MAAM;AACnC,gBAAY,IAAI;AAChB,gBAAY,KAAK;AACjB,aAAS;AAAA,EACX,GAAG,CAAC,MAAM,CAAC;AAGX,QAAM,cAAcA,cAAY,MAAM;AACpC,QAAI,aAAa,eAAe;AAC9B;AAAA,QACE,MAAM;AACJ,wBAAc,CAAC,SAAS,OAAO,CAAC;AAChC,gBAAM,MAAM,OAAO;AACnB,cAAI,KAAK;AACP,gBAAI,MAAM;AAAA,cACR;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,QACA,aAAa,KAAK,IAAI,GAAG,UAAU;AAAA,MACrC;AAAA,IACF,OAAO;AACL,kBAAY,IAAI;AAChB,gBAAU;AAAA,IACZ;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,oBAAoB,MAAM;AAC9B,YAAQ,aAAa;AAAA,MACnB,KAAK;AACH,eAAO,gBAAAL,MAAC,qBAAkB,WAAsB;AAAA,MAClD,KAAK;AACH,eACE,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA;AAAA,QACF;AAAA,MAEJ,KAAK;AACH,eACE,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,YACP;AAAA;AAAA,QACF;AAAA,MAEJ,KAAK;AAAA,MACL;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAEA,QAAM,mBAAmB,MACvB,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAEA,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,QAAO;AAAA,UAEP,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,eAAc;AAAA,cACd,gBAAe;AAAA,cACf,aAAa;AAAA,cACb,GAAE;AAAA;AAAA,UACJ;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAGF,MAAI,UAAU;AACZ,WAAO,iBAAiB;AAAA,EAC1B;AAEA,SACE,gBAAAC,OAAC,SAAI,WAAU,YACb;AAAA,oBAAAD,MAACM,kBAAA,EACE,WAAC,YACA,gBAAAN;AAAA,MAACO,QAAO;AAAA,MAAP;AAAA,QAEC,SAAS,EAAE,SAAS,EAAE;AAAA,QACtB,MAAM,EAAE,SAAS,EAAE;AAAA,QACnB,YAAY,EAAE,UAAU,iBAAiB,IAAK;AAAA,QAE7C,4BAAkB;AAAA;AAAA,MALf;AAAA,IAMN,GAEJ;AAAA,IAEC,YACC,gBAAAP;AAAA,MAACO,QAAO;AAAA,MAAP;AAAA,QACC,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,QACA,WAAW,GAAG,WAAW,CAAC,YAAY,4BAA4B;AAAA,QAClE,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,SAAS,EAAE,SAAS,EAAE;AAAA,QACtB,SAAS,EAAE,SAAS,WAAW,IAAI,EAAE;AAAA,QACrC,YAAY,EAAE,UAAU,iBAAiB,IAAK;AAAA,QAC9C,OAAO,oBAAoB;AAAA,QAC3B;AAAA,QACC,GAAI;AAAA;AAAA,IACP;AAAA,KAEJ;AAEJ;AAEA,UAAU,cAAc;;;ACtTxB,SAAgB,YAAAC,YAAU,UAAAC,UAAQ,aAAAC,aAAW,eAAAC,qBAAmB;AAChE,SAAS,UAAAC,SAAQ,mBAAAC,wBAAuB;AAmQ9B,SAEE,OAAAC,OAFF,QAAAC,cAAA;AApOV,IAAM,qBAAqB,MAAmC;AAC5D,MAAI,OAAO,cAAc,eAAe,EAAE,gBAAgB,YAAY;AACpE,WAAO;AAAA,EACT;AAEA,QAAM,aAAc,UAAkB;AACtC,MAAI,CAAC,WAAY,QAAO;AAGxB,QAAM,gBAAgB,WAAW;AAEjC,MAAI,kBAAkB,aAAa,kBAAkB,MAAM;AACzD,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAGA,IAAM,gBAAgB,CAAC,QAAyB;AAC9C,QAAM,MAAM,IAAI,MAAM;AACtB,MAAI,MAAM;AACV,SAAO,IAAI,YAAY,IAAI,iBAAiB;AAC9C;AAEO,IAAM,mBAAoD,CAAC;AAAA,EAChE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,qBAAqB;AAAA,EACrB,aAAa;AAAA,EACb,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAqB;AAAA,EACrB,mBAAmB;AAAA,EACnB,eAAe;AAAA,EACf,GAAG;AACL,MAAM;AACJ,QAAM,CAAC,kBAAkB,mBAAmB,IAAIC,WAAS,KAAK;AAC9D,QAAM,CAAC,mBAAmB,oBAAoB,IAAIA,WAAS,KAAK;AAChE,QAAM,CAAC,UAAU,WAAW,IAAIA,WAAS,KAAK;AAC9C,QAAM,CAAC,UAAU,WAAW,IAAIA,WAAS,KAAK;AAC9C,QAAM,CAAC,YAAY,aAAa,IAAIA,WAAS,aAAa;AAC1D,QAAM,CAAC,iBAAiB,kBAAkB,IAAIA,WAE5C,SAAS;AAEX,QAAM,eAAeC,SAAuB,IAAI;AAChD,QAAM,gBAAgBA,SAAyB,IAAI;AACnD,QAAM,iBAAiBA,SAAyB,IAAI;AACpD,QAAM,cAAcA,SAAoC,IAAI;AAG5D,EAAAC,YAAU,MAAM;AACd,QAAI,cAAc;AAChB,yBAAmB,mBAAmB,CAAC;AAAA,IACzC;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAGjB,EAAAA,YAAU,MAAM;AACd,UAAM,WAAW,IAAI;AAAA,MACnB,CAAC,YAAY;AACX,gBAAQ,QAAQ,CAAC,UAAU;AACzB,cAAI,MAAM,gBAAgB;AACxB,wBAAY,IAAI;AAChB,qBAAS,UAAU,MAAM,MAAM;AAAA,UACjC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,YAAY,aAAa;AAC/B,QAAI,WAAW;AACb,eAAS,QAAQ,SAAS;AAC1B,kBAAY,UAAU;AAAA,IACxB;AAEA,WAAO,MAAM;AACX,UAAI,YAAY,SAAS;AACvB,oBAAY,QAAQ,WAAW;AAAA,MACjC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,YAAY,SAAS,CAAC;AAG1B,QAAM,uBAAuBC,cAAY,MAAM;AAC7C,wBAAoB,IAAI;AACxB,uBAAmB;AAGnB,QAAI,sBAAsB,GAAG;AAC3B,2BAAqB;AAAA,IACvB;AAAA,EACF,GAAG,CAAC,gBAAgB,CAAC;AAGrB,QAAM,wBAAwBA,cAAY,MAAM;AAC9C,yBAAqB,IAAI;AACzB,kBAAc,cAAc;AAC5B,wBAAoB;AAAA,EACtB,GAAG,CAAC,gBAAgB,iBAAiB,CAAC;AAGtC,QAAM,cAAcA,cAAY,MAAM;AACpC,gBAAY,IAAI;AAChB,cAAU;AAAA,EACZ,GAAG,CAAC,OAAO,CAAC;AAGZ,QAAM,wBAAwBA,cAAY,MAAe;AACvD,QAAI,CAAC,SAAU,QAAO;AACtB,QAAI,SAAU,QAAO;AAGrB,QAAI,cAAc,cAAc,EAAG,QAAO;AAG1C,QAAI,gBAAgB,oBAAoB,QAAQ;AAC9C,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,UAAU,UAAU,gBAAgB,cAAc,eAAe,CAAC;AAGtE,QAAM,uBAAuBA,cAAY,MAAM;AAC7C,QAAI,eAAe,WAAW,kBAAmB;AAEjD,UAAM,MAAM,IAAI,MAAM;AACtB,QAAI,SAAS;AACb,QAAI,UAAU;AACd,QAAI,MAAM;AAGV,mBAAe,UAAU;AAAA,EAC3B,GAAG,CAAC,gBAAgB,mBAAmB,uBAAuB,WAAW,CAAC;AAG1E,EAAAD,YAAU,MAAM;AACd,QAAI,YAAY,sBAAsB,sBAAsB,GAAG;AAC7D,2BAAqB;AAAA,IACvB;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAGD,QAAM,wBAAwB,MAAM;AAClC,UAAM,WAAW,qBAAqB;AAEtC,YAAQ,YAAY;AAAA,MAClB,KAAK;AACH,eAAO;AAAA,UACL,YAAY;AAAA,YACV,SAAS,EAAE,SAAS,EAAE;AAAA,YACtB,SAAS,EAAE,SAAS,oBAAoB,IAAI,EAAE;AAAA,YAC9C,MAAM,EAAE,SAAS,EAAE;AAAA,YACnB,YAAY,EAAE,SAAS;AAAA,UACzB;AAAA,UACA,aAAa;AAAA,YACX,SAAS,EAAE,SAAS,EAAE;AAAA,YACtB,SAAS,EAAE,SAAS,oBAAoB,IAAI,EAAE;AAAA,YAC9C,MAAM,EAAE,SAAS,EAAE;AAAA,YACnB,YAAY,EAAE,SAAS;AAAA,UACzB;AAAA,QACF;AAAA,MAEF,KAAK;AACH,eAAO;AAAA,UACL,YAAY;AAAA,YACV,SAAS,EAAE,GAAG,EAAE;AAAA,YAChB,SAAS,EAAE,GAAG,oBAAoB,OAAO,EAAE;AAAA,YAC3C,MAAM,EAAE,GAAG,KAAK;AAAA,YAChB,YAAY,EAAE,SAAS;AAAA,UACzB;AAAA,UACA,aAAa;AAAA,YACX,SAAS,EAAE,GAAG,IAAI;AAAA,YAClB,SAAS,EAAE,GAAG,oBAAoB,IAAI,IAAI;AAAA,YAC1C,MAAM,EAAE,GAAG,IAAI;AAAA,YACf,YAAY,EAAE,SAAS;AAAA,UACzB;AAAA,QACF;AAAA,MAEF,KAAK;AAAA,MACL;AACE,eAAO;AAAA,UACL,YAAY;AAAA,YACV,SAAS,EAAE,SAAS,EAAE;AAAA,YACtB,SAAS,EAAE,SAAS,EAAE;AAAA,YACtB,MAAM,EAAE,SAAS,EAAE;AAAA,YACnB,YAAY,EAAE,SAAS;AAAA,UACzB;AAAA,UACA,aAAa;AAAA,YACX,SAAS,EAAE,SAAS,EAAE;AAAA,YACtB,SAAS,EAAE,SAAS,EAAE;AAAA,YACtB,MAAM,EAAE,SAAS,EAAE;AAAA,YACnB,YAAY,EAAE,UAAU,OAAO,IAAI;AAAA,UACrC;AAAA,QACF;AAAA,IACJ;AAAA,EACF;AAEA,QAAM,WAAW,sBAAsB;AAEvC,QAAM,cAAc,MAAM;AAExB,UAAM,gBAAgB,GAAG,8BAA8B,SAAS;AAChE,UAAM,iBAAiB;AAAA,MACrB;AAAA,MACA,GAAI;AAAA;AAAA,IACN;AAEA,YAAQ,gBAAgB;AAAA,MACtB,KAAK;AACH,eACE,gBAAAH,OAAC,SAAI,WAAU,YAEb;AAAA,0BAAAD;AAAA,YAACM,QAAO;AAAA,YAAP;AAAA,cACC,KAAK;AAAA,cACL,KAAK;AAAA,cACL,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,WAAW;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA,qBAAqB;AAAA,cACvB;AAAA,cACA,UAAU,SAAS;AAAA,cACnB,SAAQ;AAAA,cACR,SAAQ;AAAA,cACR,MAAK;AAAA,cACJ,GAAG;AAAA;AAAA,UACN;AAAA,UAGA,gBAAAN,MAACO,kBAAA,EACE,+BACC,gBAAAP;AAAA,YAACM,QAAO;AAAA,YAAP;AAAA,cACC,KAAK;AAAA,cACL,WAAW,GAAG,eAAe,eAAe;AAAA,cAC5C,UAAU,SAAS;AAAA,cACnB,SAAQ;AAAA,cACR,SAAQ;AAAA,cACP,GAAG;AAAA;AAAA,UACN,GAEJ;AAAA,WACF;AAAA,MAGJ,KAAK;AACH,eACE,gBAAAN,MAACO,kBAAA,EAAgB,MAAK,QACnB,WAAC,oBACA,gBAAAP;AAAA,UAACM,QAAO;AAAA,UAAP;AAAA,YAEC,KAAK;AAAA,YACL,KAAK;AAAA,YACL,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,WAAW;AAAA,YACX,UAAU,SAAS;AAAA,YACnB,SAAQ;AAAA,YACR,SAAQ;AAAA,YACR,MAAK;AAAA,YACJ,GAAG;AAAA;AAAA,UAVA;AAAA,QAWN,IAEA,gBAAAN;AAAA,UAACM,QAAO;AAAA,UAAP;AAAA,YAEC,KAAK;AAAA,YACL,WAAW;AAAA,YACX,UAAU,SAAS;AAAA,YACnB,SAAQ;AAAA,YACR,SAAQ;AAAA,YACP,GAAG;AAAA;AAAA,UANA;AAAA,QAON,GAEJ;AAAA,MAGJ,KAAK;AAAA,MACL;AACE,eACE,gBAAAL,OAAC,SAAI,WAAU,YAEb;AAAA,0BAAAD;AAAA,YAACM,QAAO;AAAA,YAAP;AAAA,cACC,KAAK;AAAA,cACL,KAAK;AAAA,cACL,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,WAAW;AAAA,gBACT;AAAA,gBACA,qBAAqB,eAAe,cAChC,qBACA;AAAA,cACN;AAAA,cACA,UAAU,SAAS;AAAA,cACnB,SAAQ;AAAA,cACR,SAAQ;AAAA,cACP,GAAG;AAAA;AAAA,UACN;AAAA,UAGA,gBAAAN,MAACO,kBAAA,EACE,+BACC,gBAAAP;AAAA,YAACM,QAAO;AAAA,YAAP;AAAA,cACC,KAAK;AAAA,cACL,WAAW;AAAA,gBACT;AAAA,gBACA,eAAe,cACX,0BACA;AAAA,cACN;AAAA,cACA,UAAU,SAAS;AAAA,cACnB,SAAQ;AAAA,cACR,SAAQ;AAAA,cACP,GAAG;AAAA;AAAA,UACN,GAEJ;AAAA,WACF;AAAA,IAEN;AAAA,EACF;AAEA,MAAI,UAAU;AACZ,WACE,gBAAAN;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QAEA,0BAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,QAAO;AAAA,YAEP,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,eAAc;AAAA,gBACd,gBAAe;AAAA,gBACf,aAAa;AAAA,gBACb,GAAE;AAAA;AAAA,YACJ;AAAA;AAAA,QACF;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,SACE,gBAAAC,OAAC,SAAI,KAAK,cAAc,WAAU,4BAC/B;AAAA,gBAAY;AAAA,IAGZ,YAAY,CAAC,oBACZ,gBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QAEA,0BAAAA,MAAC,SAAI,WAAU,6CAA4C;AAAA;AAAA,IAC7D;AAAA,KAEJ;AAEJ;AAEA,iBAAiB,cAAc;;;AC/Z/B;AAAA,EACE,YAAAQ;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC;AAAA,EACA,eAAAC;AAAA,EACA,WAAAC;AAAA,OAEK;AAqNK,gBAAAC,OAyBR,QAAAC,cAzBQ;AAlLZ,IAAM,mBAAmB;AACzB,IAAM,sBAAsB;AAErB,IAAM,oBAAoB,CAAK;AAAA,EACpC;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,wBAAwB;AAAA,EACxB,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,yBAAyB;AAC3B,MAAiC;AAC/B,QAAM,CAAC,WAAW,YAAY,IAAIC,WAAS,CAAC;AAC5C,QAAM,CAAC,aAAa,cAAc,IAAIA,WAAS,KAAK;AACpD,QAAM,eAAeC,SAAuB,IAAI;AAChD,QAAM,mBAAmBA,SAAuB,IAAI;AACpD,QAAM,sBAAsBA;AAAA,IAC1B;AAAA,EACF;AACA,QAAM,oBAAoBA,SAAO,CAAC;AAClC,QAAM,kBAAkBA,SAAkC,CAAC,CAAC;AAG5D,QAAM,YAAYC,SAAQ,MAAM;AAC9B,QAAI,OAAO,eAAe,UAAU;AAClC,aAAO,MAAM,OAAO,UAAU,CAAC,EAAE,KAAK,UAAU;AAAA,IAClD;AAEA,YAAQ,SAAS,CAAC,GAAG,IAAI,CAAC,MAAM,UAAU;AACxC,UAAI,gBAAgB,QAAQ,KAAK,MAAM,QAAW;AAChD,eAAO,gBAAgB,QAAQ,KAAK;AAAA,MACtC;AAEA,aAAO,OAAO,eAAe,aACzB,WAAW,OAAO,IAAI,IACtB,uBAAuB;AAAA,IAC7B,CAAC;AAAA,EACH,GAAG,CAAC,OAAO,YAAY,mBAAmB,CAAC;AAG3C,QAAM,EAAE,aAAa,cAAc,IAAIA,SAAQ,MAAM;AACnD,QAAIC,eAAc;AAClB,UAAM,YAA2B,CAAC;AAElC,cAAU,QAAQ,CAAC,MAAM,UAAU;AACjC,gBAAU,KAAK;AAAA,QACb;AAAA,QACA,OAAOA;AAAA,QACP;AAAA,MACF,CAAC;AACD,MAAAA,gBAAe;AAAA,IACjB,CAAC;AAED,WAAO,EAAE,aAAAA,cAAa,eAAe,UAAU;AAAA,EACjD,GAAG,CAAC,SAAS,CAAC;AAGd,QAAM,eAAeD,SAAQ,MAAM;AACjC,UAAME,mBAAkB,iBAAiB,SAAS,gBAAgB;AAClE,UAAM,QAAQ,KAAK;AAAA,MACjB;AAAA,MACA,KAAK,MAAM,aAAc,cAAyB,GAAG,IAAI;AAAA,IAC3D;AACA,UAAM,eACJ,KAAK,KAAKA,oBAAoB,cAAyB,GAAG,IAC1D,WAAW;AACb,UAAM,MAAM,KAAK,KAAK,OAAO,UAAU,KAAK,GAAG,QAAQ,YAAY;AAEnE,WAAO,EAAE,OAAO,IAAI;AAAA,EACtB,GAAG,CAAC,WAAW,YAAY,UAAU,OAAO,MAAM,CAAC;AAGnD,QAAM,eAAeF,SAAQ,MAAM;AACjC,WAAO,cAAc,MAAM,aAAa,OAAO,aAAa,MAAM,CAAC;AAAA,EACrE,GAAG,CAAC,eAAe,YAAY,CAAC;AAGhC,QAAM,UAAU,aAAa,SAAS,IAAK,aAAa,CAAC,GAAG,SAAS,IAAK;AAG1E,QAAM,eAAeG;AAAA,IACnB,CAAC,UAAyC;AACxC,YAAM,UAAU,MAAM;AACtB,YAAM,eAAe,QAAQ;AAE7B,mBAAa,YAAY;AACzB,qBAAe,IAAI;AAGnB,iBAAW,cAAc,QAAQ,cAAc,QAAQ,YAAY;AAGnE,UAAI,oBAAoB,SAAS;AAC/B,qBAAa,oBAAoB,OAAO;AAAA,MAC1C;AAGA,0BAAoB,UAAU,WAAW,MAAM;AAC7C,uBAAe,KAAK;AAAA,MACtB,GAAG,GAAG;AAGN,UAAI,gBAAgB,CAAC,SAAS;AAC5B,cAAM,oBACH,eAAe,QAAQ,gBAAgB,QAAQ;AAClD,YAAI,oBAAoB,uBAAuB;AAC7C,uBAAa;AAAA,QACf;AAAA,MACF;AAEA,wBAAkB,UAAU;AAAA,IAC9B;AAAA,IACA,CAAC,UAAU,cAAc,uBAAuB,OAAO;AAAA,EACzD;AAGA,EAAAC,YAAU,MAAM;AACd,QAAI,kBAAkB,UAAa,iBAAiB,SAAS;AAC3D,YAAM,OAAO,cAAc,aAAa;AACxC,UAAI,MAAM;AACR,yBAAiB,QAAQ,YAAY,KAAK;AAAA,MAC5C;AAAA,IACF;AAAA,EACF,GAAG,CAAC,eAAe,aAAa,CAAC;AAGjC,QAAM,iBAAiBD,cAAY,CAAC,OAAe,SAAiB;AAClE,QAAI,gBAAgB,QAAQ,KAAK,MAAM,MAAM;AAC3C,sBAAgB,QAAQ,KAAK,IAAI;AAAA,IAEnC;AAAA,EACF,GAAG,CAAC,CAAC;AAGL,EAAAC,YAAU,MAAM;AACd,QAAI,0BAA0B,iBAAiB,SAAS;AACtD,YAAM,UAAU,iBAAiB;AACjC,YAAM,cACJ,kBAAkB,WAAW,QAAQ,gBAAgB;AACvD,YAAM,eAAe,cAAc,QAAQ;AAE3C,UAAI,KAAK,IAAI,eAAe,QAAQ,SAAS,IAAI,IAAI;AACnD,gBAAQ,YAAY;AAAA,MACtB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,MAAM,QAAQ,sBAAsB,CAAC;AAGzC,EAAAA,YAAU,MAAM;AACd,WAAO,MAAM;AACX,UAAI,oBAAoB,SAAS;AAC/B,qBAAa,oBAAoB,OAAO;AAAA,MAC1C;AAAA,IACF;AAAA,EACF,GAAG,CAAC,CAAC;AAGL,MAAI,UAAU;AACZ,WACE,gBAAAR;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,WAAW,GAAG,oCAAoC,SAAS;AAAA,QAC3D,OAAO,EAAE,QAAQ,gBAAgB;AAAA,QAEhC,4BACC,gBAAAA,MAAC,SAAI,WAAU,6BACb,0BAAAA,MAAC,OAAE,kCAAoB,GACzB;AAAA;AAAA,IAEJ;AAAA,EAEJ;AAGA,MAAI,MAAM,WAAW,KAAK,CAAC,SAAS;AAClC,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,WAAW,GAAG,oCAAoC,SAAS;AAAA,QAC3D,OAAO,EAAE,QAAQ,gBAAgB;AAAA,QAEhC,4BACC,gBAAAA,MAAC,SAAI,WAAU,6BACb,0BAAAA,MAAC,OAAE,iCAAmB,GACxB;AAAA;AAAA,IAEJ;AAAA,EAEJ;AAEA,QAAMS,2BAA0B,MAC9B,gBAAAR,OAAC,SAAI,WAAU,yCACb;AAAA,oBAAAD,MAAC,SAAI,WAAU,gEAA+D;AAAA,IAC9E,gBAAAA,MAAC,UAAK,WAAU,8BAA6B,wBAAU;AAAA,KACzD;AAGF,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,WAAW,GAAG,YAAY,SAAS;AAAA,MACnC,OAAO,EAAE,QAAQ,gBAAgB;AAAA,MAEjC,0BAAAC;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,UACL,WAAU;AAAA,UACV,UAAU;AAAA,UACV,OAAO;AAAA,YACL,gBAAgB;AAAA,YAChB,yBAAyB;AAAA;AAAA,UAC3B;AAAA,UAGA;AAAA,4BAAAD,MAAC,SAAI,OAAO,EAAE,QAAQ,aAAa,UAAU,WAAW,GAEtD,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO;AAAA,kBACL,WAAW,cAAc,OAAO;AAAA,kBAChC,UAAU;AAAA,kBACV,KAAK;AAAA,kBACL,MAAM;AAAA,kBACN,OAAO;AAAA,gBACT;AAAA,gBAEC,uBAAa,IAAI,CAAC,gBAAgB;AACjC,wBAAM,OAAO,MAAM,YAAY,KAAK;AACpC,sBAAI,SAAS,OAAW,QAAO;AAC/B,wBAAM,YAAY,CAAC,eAAe,CAAC;AAEnC,yBACE,gBAAAA;AAAA,oBAAC;AAAA;AAAA,sBAEC,OAAO;AAAA,wBACL,QAAQ,YAAY;AAAA,wBACpB,UAAU;AAAA,sBACZ;AAAA,sBACA,cAAY,YAAY;AAAA,sBAEvB,qBAAW,MAAM,YAAY,OAAO,SAAS;AAAA;AAAA,oBAPzC,YAAY;AAAA,kBAQnB;AAAA,gBAEJ,CAAC;AAAA;AAAA,YACH,GACF;AAAA,YAGC,WACC,gBAAAA,MAAC,SAAI,WAAU,mBACZ,8BAAoB,gBAAAA,MAACS,0BAAA,EAAwB,GAChD;AAAA;AAAA;AAAA,MAEJ;AAAA;AAAA,EACF;AAEJ;AAEA,kBAAkB,cAAc;;;ACtThC,SAAgB,YAAAC,YAAU,aAAAC,aAAW,eAAAC,qBAA8B;AA2KvD,gBAAAC,OAyBJ,QAAAC,cAzBI;AAlIZ,IAAM,iBAAiB,MAAmB;AACxC,QAAM,cAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,OAAO;AAAA,IACP,eAAe;AAAA,IACf,UAAU;AAAA,IACV,KAAK;AAAA,IACL,UAAU;AAAA,IACV,QAAQ,UAAU,UAAU;AAAA,EAC9B;AAEA,MAAI,OAAO,cAAc,aAAa;AACpC,WAAO;AAAA,EACT;AAEA,QAAM,aACH,UAAkB,cAClB,UAAkB,iBAClB,UAAkB;AAErB,MAAI,CAAC,YAAY;AACf,WAAO;AAAA,MACL,GAAG;AAAA,MACH,QAAQ,UAAU,UAAU;AAAA,IAC9B;AAAA,EACF;AAGA,QAAM,mBAAmB,CAAC,kBAAwC;AAChE,YAAQ,eAAe;AAAA,MACrB,KAAK;AAAA,MACL,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAGA,QAAM,qBAAqB,CAAC,aAAmC;AAC7D,QAAI,YAAY,GAAI,QAAO;AAC3B,QAAI,YAAY,IAAK,QAAO;AAC5B,QAAI,YAAY,IAAK,QAAO;AAC5B,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,WAAW,gBACrB,iBAAiB,WAAW,aAAa,IACzC,mBAAmB,WAAW,YAAY,CAAC;AAE/C,SAAO;AAAA,IACL,MAAM,WAAW,QAAQ;AAAA,IACzB;AAAA,IACA,eAAe,WAAW,iBAAiB;AAAA,IAC3C,UAAU,WAAW,YAAY;AAAA,IACjC,KAAK,WAAW,OAAO;AAAA,IACvB,UAAU,WAAW,YAAY;AAAA,IACjC,QAAQ,UAAU,UAAU;AAAA,EAC9B;AACF;AAEO,IAAM,sBAA0D,CAAC;AAAA,EACtE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB,CAAC,MAAM,MAAM;AAAA,EAC7B,gBAAgB,CAAC,MAAM,MAAM,MAAM;AAAA,EACnC,kBAAkB;AAAA,EAClB;AAAA,EACA;AAAA,EACA,oBAAoB;AAAA,EACpB;AACF,MAAM;AACJ,QAAM,CAAC,aAAa,cAAc,IAAIC,WAA6B,IAAI;AACvE,QAAM,CAAC,WAAW,YAAY,IAAIA,WAAS,IAAI;AAG/C,QAAM,oBAAoBC,cAAY,MAAM;AAC1C,UAAM,OAAO,eAAe;AAC5B,mBAAe,IAAI;AACnB,iBAAa,KAAK;AAClB,sBAAkB,IAAI;AAAA,EACxB,GAAG,CAAC,eAAe,CAAC;AAGpB,EAAAC,YAAU,MAAM;AAEd,sBAAkB;AAGlB,UAAM,eAAe,MAAM,kBAAkB;AAC7C,UAAM,gBAAgB,MAAM,kBAAkB;AAE9C,WAAO,iBAAiB,UAAU,YAAY;AAC9C,WAAO,iBAAiB,WAAW,aAAa;AAGhD,UAAM,aAAc,UAAkB;AACtC,QAAI,YAAY;AACd,iBAAW,iBAAiB,UAAU,iBAAiB;AAAA,IACzD;AAGA,WAAO,MAAM;AACX,aAAO,oBAAoB,UAAU,YAAY;AACjD,aAAO,oBAAoB,WAAW,aAAa;AAEnD,UAAI,YAAY;AACd,mBAAW,oBAAoB,UAAU,iBAAiB;AAAA,MAC5D;AAAA,IACF;AAAA,EACF,GAAG,CAAC,iBAAiB,CAAC;AAKtB,MAAI,aAAa,CAAC,aAAa;AAC7B,WACE,gBAAAJ;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,GAAG,wCAAwC,SAAS;AAAA,QAC9D,GAAG;AAAA,QAEH,8BACC,gBAAAA,MAAC,SAAI,WAAU,iBACb,0BAAAA,MAAC,SAAI,WAAU,gCAA+B,GAChD;AAAA;AAAA,IAEJ;AAAA,EAEJ;AAGA,MAAI,CAAC,YAAY,QAAQ;AACvB,QAAI,eAAe;AACjB,aACE,gBAAAA,MAAC,SAAI,WAAuB,GAAG,gBAC5B,yBACH;AAAA,IAEJ;AAEA,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QACC,GAAG;AAAA,QAEJ,0BAAAC,OAAC,SAAI,WAAU,gBACb;AAAA,0BAAAD;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,MAAK;AAAA,cACL,SAAQ;AAAA,cACR,QAAO;AAAA,cAEP,0BAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,eAAc;AAAA,kBACd,gBAAe;AAAA,kBACf,aAAa;AAAA,kBACb,GAAE;AAAA;AAAA,cACJ;AAAA;AAAA,UACF;AAAA,UACA,gBAAAA,MAAC,OAAE,WAAU,eAAc,oCAAsB;AAAA,UACjD,gBAAAA,MAAC,OAAE,WAAU,WAAU,wDAA0C;AAAA,WACnE;AAAA;AAAA,IACF;AAAA,EAEJ;AAGA,MAAI,mBAAmB,YAAY,UAAU;AAC3C,QAAI,YAAY;AACd,aACE,gBAAAA,MAAC,SAAI,WAAuB,GAAG,gBAC5B,sBACH;AAAA,IAEJ;AAEA,QAAI,mBAAmB;AACrB,aACE,gBAAAA,MAAC,SAAI,WAAuB,GAAG,gBAC5B,UACH;AAAA,IAEJ;AAEA,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QACC,GAAG;AAAA,QAEJ,0BAAAC,OAAC,SAAI,WAAU,mBACb;AAAA,0BAAAD;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,MAAK;AAAA,cACL,SAAQ;AAAA,cACR,QAAO;AAAA,cAEP,0BAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,eAAc;AAAA,kBACd,gBAAe;AAAA,kBACf,aAAa;AAAA,kBACb,GAAE;AAAA;AAAA,cACJ;AAAA;AAAA,UACF;AAAA,UACA,gBAAAA,MAAC,OAAE,WAAU,eAAc,qCAAuB;AAAA,UAClD,gBAAAA,MAAC,OAAE,WAAU,WAAU,kDAAoC;AAAA,WAC7D;AAAA;AAAA,IACF;AAAA,EAEJ;AAGA,QAAM,gBACJ,cAAc,SAAS,YAAY,KAAK,KAAK,YAAY,YAAY;AACvE,QAAM,gBACJ,cAAc,SAAS,YAAY,KAAK,KAAK,YAAY,WAAW;AAEtE,MAAI,iBAAiB,YAAY;AAC/B,WACE,gBAAAA,MAAC,SAAI,WAAuB,GAAG,gBAC5B,sBACH;AAAA,EAEJ;AAEA,MAAI,iBAAiB,YAAY;AAC/B,WACE,gBAAAA,MAAC,SAAI,WAAuB,GAAG,gBAC5B,sBACH;AAAA,EAEJ;AAGA,SACE,gBAAAA,MAAC,SAAI,WAAuB,GAAG,gBAC5B,UACH;AAEJ;AAsCO,IAAM,mBAAmB,CAC9B,WACA,iBACG;AACH,QAAM,mBAAmB,CAAC,UACxB,gBAAAK,MAAC,uBAAqB,GAAG,cACvB,0BAAAA,MAAC,aAAW,GAAG,OAAO,GACxB;AAGF,mBAAiB,cAAc,oBAAoB,UAAU,eAAe,UAAU,IAAI;AAC1F,SAAO;AACT;AAEA,oBAAoB,cAAc;;;ACxVlC,SAAgB,YAAAC,YAAU,aAAAC,aAAW,eAAAC,qBAA8B;AAuS3D,gBAAAC,OAoBQ,QAAAC,cApBR;AApQR,IAAM,gBAAN,MAAM,cAAa;AAAA,EAYjB,cAAc;AAVd,wBAAQ,SAAiC,oBAAI,IAAI;AACjD,wBAAiB,cAAa;AAU5B,SAAK,gBAAgB;AAAA,EACvB;AAAA,EATA,OAAO,cAA4B;AACjC,QAAI,CAAC,cAAa,UAAU;AAC1B,oBAAa,WAAW,IAAI,cAAa;AAAA,IAC3C;AACA,WAAO,cAAa;AAAA,EACtB;AAAA,EAMQ,kBAAwB;AAC9B,QAAI;AACF,YAAM,SACJ,OAAO,WAAW,cACd,cAAc,QAAQ,KAAK,UAAU,IACrC;AACN,UAAI,QAAQ;AACV,cAAM,SAAS,KAAK,MAAM,MAAM;AAChC,aAAK,QAAQ,IAAI,IAAI,OAAO,QAAQ,MAAM,CAAC;AAAA,MAC7C;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,KAAK,sCAAsC,KAAK;AAAA,IAC1D;AAAA,EACF;AAAA,EAEQ,gBAAsB;AAC5B,QAAI;AACF,UAAI,OAAO,WAAW,eAAe,cAAc;AACjD,cAAM,cAAc,OAAO,YAAY,KAAK,MAAM,QAAQ,CAAC;AAC3D,qBAAa,QAAQ,KAAK,YAAY,KAAK,UAAU,WAAW,CAAC;AAAA,MACnE;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,KAAK,oCAAoC,KAAK;AAAA,IACxD;AAAA,EACF;AAAA,EAEA,IAAI,KAAa,MAAW,MAAc,MAAe;AACvD,UAAM,MAAM,KAAK,IAAI;AACrB,UAAM,QAAoB;AAAA,MACxB;AAAA,MACA,WAAW;AAAA,MACX,SAAS,MAAM;AAAA,IACjB;AAEA,SAAK,MAAM,IAAI,KAAK,KAAK;AACzB,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAI,KAAyB;AAC3B,UAAM,QAAQ,KAAK,MAAM,IAAI,GAAG;AAEhC,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,IACT;AAEA,UAAM,MAAM,KAAK,IAAI;AACrB,QAAI,MAAM,MAAM,SAAS;AACvB,WAAK,MAAM,OAAO,GAAG;AACrB,WAAK,cAAc;AACnB,aAAO;AAAA,IACT;AAEA,WAAO,MAAM;AAAA,EACf;AAAA,EAEA,QAAQ,KAAa,QAAyB;AAC5C,UAAM,QAAQ,KAAK,MAAM,IAAI,GAAG;AAChC,QAAI,CAAC,MAAO,QAAO;AAEnB,UAAM,MAAM,KAAK,IAAI,IAAI,MAAM;AAC/B,WAAO,MAAM;AAAA,EACf;AAAA,EAEA,IAAI,KAAsB;AACxB,WAAO,KAAK,IAAI,GAAG,MAAM;AAAA,EAC3B;AAAA,EAEA,OAAO,KAAmB;AACxB,SAAK,MAAM,OAAO,GAAG;AACrB,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,QAAc;AACZ,SAAK,MAAM,MAAM;AACjB,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,OAAe;AACb,WAAO,KAAK,MAAM;AAAA,EACpB;AACF;AA/FE,cADI,eACW;AADjB,IAAM,eAAN;AAmGA,IAAM,wBACJ,YAAuD;AACrD,MAAI,mBAAmB,WAAW;AAChC,QAAI;AACF,YAAM,eAAe,MAAM,UAAU,cAAc,SAAS,QAAQ;AACpE,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ,KAAK,uCAAuC,KAAK;AACzD,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEK,IAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,gBAAgB;AAAA;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,sBAAsB;AAAA,EACtB,uBAAuB;AAAA,EACvB,mBAAmB;AAAA,EACnB,aAAa;AAAA,EACb,aAAa;AACf,MAAM;AACJ,QAAM,CAAC,UAAU,WAAW,IAAIC;AAAA,IAC9B,OAAO,WAAW,cAAc,UAAU,SAAS;AAAA,EACrD;AACA,QAAM,CAAC,UAAU,WAAW,IAAIA,WAAS,KAAK;AAC9C,QAAM,CAAC,WAAW,YAAY,IAAIA,WAAS,KAAK;AAChD,QAAM,CAAC,YAAY,aAAa,IAAIA,WAAS,CAAC;AAC9C,QAAM,CAAC,WAAW,YAAY,IAAIA,WAAc,IAAI;AAEpD,QAAM,QAAQ,aAAa,YAAY;AAGvC,EAAAC,YAAU,MAAM;AACd,UAAM,aAAa,MAAM,IAAI,QAAQ;AACrC,QAAI,YAAY;AACd,kBAAY,IAAI;AAChB,mBAAa,UAAU;AACvB,mBAAa,UAAU;AAAA,IACzB,OAAO;AACL,oBAAc;AAAA,IAChB;AAAA,EACF,GAAG,CAAC,UAAU,YAAY,WAAW,CAAC;AAGtC,EAAAA,YAAU,MAAM;AACd,UAAM,eAAe,MAAM;AACzB,kBAAY,IAAI;AAChB,iBAAW;AAEX,UAAI,oBAAoB,aAAa,YAAY;AAC/C,oBAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,gBAAgB,MAAM;AAC1B,kBAAY,KAAK;AACjB,kBAAY;AAAA,IACd;AAEA,WAAO,iBAAiB,UAAU,YAAY;AAC9C,WAAO,iBAAiB,WAAW,aAAa;AAEhD,WAAO,MAAM;AACX,aAAO,oBAAoB,UAAU,YAAY;AACjD,aAAO,oBAAoB,WAAW,aAAa;AAAA,IACrD;AAAA,EACF,GAAG,CAAC,UAAU,WAAW,kBAAkB,YAAY,UAAU,CAAC;AAGlE,EAAAA,YAAU,MAAM;AACd,QAAI,qBAAqB;AACvB,4BAAsB;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,mBAAmB,CAAC;AAGxB,QAAM,cAAcC,cAAY,YAAY;AAC1C,QAAI,cAAc,WAAY;AAE9B,iBAAa,IAAI;AAEjB,QAAI;AACF,YAAM,IAAI;AAAA,QAAQ,CAAC,YACjB,WAAW,SAAS,aAAa,KAAK,IAAI,GAAG,UAAU,CAAC;AAAA,MAC1D;AAKA,oBAAc,CAAC;AAAA,IACjB,SAAS,OAAO;AACd,oBAAc,CAAC,SAAS,OAAO,CAAC;AAAA,IAClC,UAAE;AACA,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,YAAY,YAAY,UAAU,CAAC;AAGvC,QAAM,kBAAkBA;AAAA,IACtB,CAAC,SAAc;AACb,YAAM,IAAI,UAAU,MAAM,aAAa;AACvC,kBAAY,IAAI;AAChB,mBAAa,IAAI;AAAA,IACnB;AAAA,IACA,CAAC,UAAU,aAAa;AAAA,EAC1B;AAGA,QAAM,aAAa,MAAiB;AAClC,YAAQ,eAAe;AAAA,MACrB,KAAK;AACH,eAAO,WAAW,WAAW,YAAY,sBAAsB;AAAA,MAEjE,KAAK;AACH,eAAO,WAAW,WAAW,YAAY,sBAAsB;AAAA,MAEjE,KAAK;AACH,YAAI,SAAU,QAAO;AACrB,eAAO,WAAW,WAAW,YAAY,sBAAsB;AAAA,MAEjE,KAAK;AACH,YAAI,SAAU,QAAO;AACrB,eAAO,WAAW,WAAW,YAAY,sBAAsB;AAAA,MAEjE,KAAK;AAAA,MACL;AAEE,YAAI,UAAU;AAEZ,gBAAM,UAAU,MAAM,QAAQ,UAAU,aAAa;AACrD,cAAI,WAAW,UAAU;AAAA,UAGzB;AACA,iBAAO;AAAA,QACT;AAEA,eAAO,WAAW,WAAW,YAAY,sBAAsB;AAAA,IACnE;AAAA,EACF;AAGA,QAAM,wBAAwB,MAAiB;AAC7C,WACE,gBAAAH;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QAEA;AAAA,0BAAAD,MAAC,SAAI,WAAU,iBAAgB,uBAAE;AAAA,UACjC,gBAAAA,MAAC,QAAG,WAAU,4CAA2C,4BAEzD;AAAA,UACA,gBAAAA,MAAC,OAAE,WAAU,+BAA8B,gGAG3C;AAAA,UAEC,oBAAoB,aAAa,cAChC,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,SAAS;AAAA,cACT,UAAU;AAAA,cACV,WAAW;AAAA,gBACT;AAAA,gBACA,aAAa;AAAA,cACf;AAAA,cAEC,sBACC,gBAAAC,OAAC,UAAK,WAAU,qBACd;AAAA,gCAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAU;AAAA,oBACV,MAAK;AAAA,oBACL,SAAQ;AAAA,oBAER;AAAA,sCAAAD;AAAA,wBAAC;AAAA;AAAA,0BACC,WAAU;AAAA,0BACV,IAAG;AAAA,0BACH,IAAG;AAAA,0BACH,GAAE;AAAA,0BACF,QAAO;AAAA,0BACP,aAAY;AAAA;AAAA,sBACd;AAAA,sBACA,gBAAAA;AAAA,wBAAC;AAAA;AAAA,0BACC,WAAU;AAAA,0BACV,MAAK;AAAA,0BACL,GAAE;AAAA;AAAA,sBACJ;AAAA;AAAA;AAAA,gBACF;AAAA,gBAAM;AAAA,iBAER,IAEA;AAAA;AAAA,UAEJ;AAAA;AAAA;AAAA,IAEJ;AAAA,EAEJ;AAEA,SACE,gBAAAC,OAAC,SAAI,WAAW,GAAG,YAAY,SAAS,GAErC;AAAA,KAAC,YAAY,wBACZ,gBAAAD,MAAC,SAAI,WAAU,qFACb,0BAAAC,OAAC,UAAK,WAAU,oCACd;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,QAAO;AAAA,UAEP,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,eAAc;AAAA,cACd,gBAAe;AAAA,cACf,aAAa;AAAA,cACb,GAAE;AAAA;AAAA,UACJ;AAAA;AAAA,MACF;AAAA,MAAM;AAAA,OAER,GACF;AAAA,IAIF,gBAAAA,MAAC,SAAI,WAAW,CAAC,YAAY,uBAAuB,UAAU,IAC3D,qBAAW,GACd;AAAA,KACF;AAEJ;AAyBO,IAAM,WAAW,CAAC,KAAa,MAAc,SAAY;AAC9D,QAAM,QAAQ,aAAa,YAAY;AAEvC,QAAM,MAAMK,cAAY,MAAM,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;AACnD,QAAM,MAAMA,cAAY,CAAC,SAAc,MAAM,IAAI,KAAK,MAAM,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC;AAC5E,QAAM,SAASA,cAAY,MAAM,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC;AACzD,QAAM,MAAMA,cAAY,MAAM,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;AAEnD,SAAO,EAAE,KAAK,KAAK,QAAQ,IAAI;AACjC;AAEA,eAAe,cAAc;;;AC5ZtB,IAAM,aAAa,CACxB,MACA,UAAsC;AAAA,EACpC,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AACR,MACW;AACX,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI;AACF,WAAO,IAAI,KAAK,IAAI,EAAE,mBAAmB,QAAW,OAAO;AAAA,EAC7D,SAAS,OAAO;AACd,WAAO;AAAA,EACT;AACF;AAEO,IAAM,eAAe,CAC1B,QACA,UAAoC;AAAA,EAClC,uBAAuB;AAAA,EACvB,uBAAuB;AACzB,MACW;AACX,MAAI,OAAO,WAAW,YAAY,MAAM,MAAM,EAAG,QAAO;AACxD,SAAO,IAAI,KAAK,aAAa,QAAW,OAAO,EAAE,OAAO,MAAM;AAChE;AAEO,IAAM,iBAAiB,CAC5B,QACA,WAAmB,OACnB,SAAiB,YACN;AACX,MAAI,OAAO,WAAW,YAAY,MAAM,MAAM,EAAG,QAAO;AACxD,SAAO,IAAI,KAAK,aAAa,QAAQ;AAAA,IACnC,OAAO;AAAA,IACP;AAAA,EACF,CAAC,EAAE,OAAO,MAAM;AAClB;;;ACtCO,IAAM,gBAAgB,CAAC,UAA2B;AACvD,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAChD,QAAM,KAAK;AACX,SAAO,GAAG,KAAK,KAAK;AACtB;AAEO,IAAM,mBAAmB,CAC9B,aAIG;AACH,QAAM,SAAmB,CAAC;AAE1B,MAAI,CAAC,YAAY,OAAO,aAAa,UAAU;AAC7C,WAAO,KAAK,sBAAsB;AAClC,WAAO,EAAE,SAAS,OAAO,OAAO;AAAA,EAClC;AAEA,MAAI,SAAS,SAAS,GAAG;AACvB,WAAO,KAAK,6CAA6C;AAAA,EAC3D;AACA,MAAI,CAAC,QAAQ,KAAK,QAAQ,GAAG;AAC3B,WAAO,KAAK,qDAAqD;AAAA,EACnE;AACA,MAAI,CAAC,QAAQ,KAAK,QAAQ,GAAG;AAC3B,WAAO,KAAK,qDAAqD;AAAA,EACnE;AACA,MAAI,CAAC,QAAQ,KAAK,QAAQ,GAAG;AAC3B,WAAO,KAAK,2CAA2C;AAAA,EACzD;AAEA,SAAO;AAAA,IACL,SAAS,OAAO,WAAW;AAAA,IAC3B;AAAA,EACF;AACF;AAQA,IAAM,cAAc;AACpB,IAAM,kBAAkB;AACxB,IAAM,iBACJ;AAoBK,IAAM,mBAAmB;AAAA;AAAA,EAE9B,QAAQ;AAAA,IACN,MAAM,CAAC,UAA2B,YAAY,KAAK,KAAK;AAAA,IACxD,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AAAA;AAAA,EAGA,QAAQ;AAAA,IACN,MAAM,CAAC,UAA2B,gBAAgB,KAAK,KAAK;AAAA,IAC5D,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AAAA;AAAA,EAGA,SAAS;AAAA,IACP,MAAM,CAAC,UACL,gBAAgB,KAAK,KAAK,KAAK,eAAe,KAAK,KAAK;AAAA,IAC1D,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AACF;;;ACjFO,IAAM,cAAc;AAAA;AAAA,EAEzB,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AAAA;AAAA,EAGA,OAAO;AAAA,IACL,SAAS;AAAA;AAAA,IACT,QAAQ;AAAA;AAAA,IACR,OAAO;AAAA;AAAA,IACP,UAAU;AAAA;AAAA,IACV,UAAU;AAAA;AAAA,EACZ;AAAA;AAAA,EAGA,OAAO;AAAA,IACL,OAAO;AAAA,MACL,SAAS;AAAA,MACT,WAAW;AAAA,MACX,UAAU;AAAA,IACZ;AAAA,IACA,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,WAAW;AAAA,MACX,UAAU;AAAA,IACZ;AAAA,EACF;AAAA;AAAA,EAGA,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AACF;AAGO,IAAM,mBAAmB;AAAA;AAAA,EAE9B,UAAU;AAAA,IACR,IAAI,EAAE,KAAK,WAAW,QAAQ,GAAG;AAAA;AAAA,IACjC,IAAI,EAAE,KAAK,YAAY,QAAQ,GAAG;AAAA;AAAA,IAClC,MAAM,EAAE,KAAK,QAAQ,QAAQ,GAAG;AAAA;AAAA,IAChC,IAAI,EAAE,KAAK,YAAY,QAAQ,GAAG;AAAA;AAAA,IAClC,IAAI,EAAE,KAAK,WAAW,QAAQ,GAAG;AAAA;AAAA,IACjC,OAAO,EAAE,KAAK,UAAU,QAAQ,GAAG;AAAA;AAAA,IACnC,OAAO,EAAE,KAAK,YAAY,QAAQ,GAAG;AAAA;AAAA,EACvC;AAAA;AAAA,EAGA,YAAY;AAAA,IACV,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,MAAM;AAAA,IACN,WAAW;AAAA,EACb;AAAA;AAAA,EAGA,YAAY;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AAAA;AAAA,EAGA,eAAe;AAAA,IACb,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AACF;AAGO,IAAM,gBAAgB;AAAA,EAC3B,IAAI,EAAE,KAAK,WAAW,QAAQ,EAAE;AAAA;AAAA,EAChC,IAAI,EAAE,KAAK,UAAU,QAAQ,EAAE;AAAA;AAAA,EAC/B,IAAI,EAAE,KAAK,QAAQ,QAAQ,GAAG;AAAA;AAAA,EAC9B,IAAI,EAAE,KAAK,UAAU,QAAQ,GAAG;AAAA;AAAA,EAChC,IAAI,EAAE,KAAK,QAAQ,QAAQ,GAAG;AAAA;AAAA,EAC9B,OAAO,EAAE,KAAK,QAAQ,QAAQ,GAAG;AAAA;AAAA,EACjC,OAAO,EAAE,KAAK,QAAQ,QAAQ,GAAG;AAAA;AACnC;AAGO,IAAM,eAAe;AAAA,EAC1B,MAAM;AAAA,EACN,IAAI,EAAE,KAAK,WAAW,QAAQ,EAAE;AAAA;AAAA,EAChC,IAAI,EAAE,KAAK,YAAY,QAAQ,EAAE;AAAA;AAAA,EACjC,IAAI,EAAE,KAAK,UAAU,QAAQ,EAAE;AAAA;AAAA,EAC/B,IAAI,EAAE,KAAK,WAAW,QAAQ,GAAG;AAAA;AAAA,EACjC,OAAO,EAAE,KAAK,QAAQ,QAAQ,GAAG;AAAA;AAAA,EACjC,OAAO,EAAE,KAAK,UAAU,QAAQ,GAAG;AAAA;AAAA,EACnC,MAAM,EAAE,KAAK,UAAU,QAAQ,KAAK;AACtC;AAGO,IAAM,eAAe;AAAA;AAAA,EAE1B,KAAK;AAAA,IACH,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,OAAO;AAAA;AAAA,IAGP,OAAO;AAAA,IACP,YAAY;AAAA;AAAA,IAGZ,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA;AAAA,EAGA,QAAQ;AAAA,IACN,IAAI;AAAA,MACF,aAAa;AAAA,MACb,cAAc,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,MACpC,eAAe;AAAA,MACf,cAAc;AAAA,MACd,WAAW;AAAA,IACb;AAAA,IACA,IAAI;AAAA,MACF,aAAa;AAAA,MACb,cAAc,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,MACpC,eAAe;AAAA,MACf,cAAc;AAAA,MACd,WAAW;AAAA,IACb;AAAA,IACA,IAAI;AAAA,MACF,aAAa;AAAA,MACb,cAAc,EAAE,OAAO,GAAG,QAAQ,GAAG;AAAA,MACrC,eAAe;AAAA,MACf,cAAc;AAAA,MACd,WAAW;AAAA,IACb;AAAA,IACA,IAAI;AAAA,MACF,aAAa;AAAA,MACb,cAAc,EAAE,OAAO,GAAG,QAAQ,GAAG;AAAA,MACrC,eAAe;AAAA,MACf,cAAc;AAAA,MACd,WAAW;AAAA,IACb;AAAA,EACF;AACF;AAGO,IAAM,kBAAkB;AAAA;AAAA,EAE7B,UAAU;AAAA,IACR,MAAM;AAAA;AAAA,IACN,QAAQ;AAAA;AAAA,IACR,MAAM;AAAA;AAAA,IACN,QAAQ;AAAA;AAAA,EACV;AAAA;AAAA,EAGA,QAAQ;AAAA;AAAA,IAEN,KAAK;AAAA,MACH,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ;AAAA;AAAA,IACV;AAAA;AAAA,IAGA,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ;AAAA,IACV;AAAA,EACF;AAAA;AAAA,EAGA,OAAO;AAAA,IACL,UAAU;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AAAA,IACA,WAAW;AAAA,MACT,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AAAA,IACA,OAAO;AAAA,MACL,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AAAA,IACA,YAAY;AAAA,MACV,UAAU;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,EACF;AACF;AAGO,IAAM,eAAe;AAAA,EAC1B,SAAS,EAAE,KAAK,QAAQ,QAAQ,GAAG;AAAA;AAAA,EACnC,aAAa,EAAE,KAAK,QAAQ,QAAQ,GAAG;AAAA;AAAA,EACvC,OAAO,EAAE,KAAK,QAAQ,QAAQ,GAAG;AAAA;AACnC;AAGO,IAAM,eAAe;AAAA,EAC1B,MAAM;AAAA,EACN,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,eAAe;AAAA,EACf,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,KAAK;AACP;AAGO,IAAM,mBAAmB;AAAA,EAC9B,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AACT;AAGO,IAAM,WAAW;AAAA,EACtB,OAAO,OAAO,WAAW;AAAA,EACzB,UAAU,OAAO,WAAW;AAAA,EAE5B,QAAQ,CAAI,WAAoD;AAC9D,QAAI,SAAS,SAAS,OAAO,QAAQ,OAAW,QAAO,OAAO;AAC9D,QAAI,SAAS,YAAY,OAAO,WAAW,OAAW,QAAO,OAAO;AACpE,QAAI,OAAO,YAAY,OAAW,QAAO,OAAO;AAChD,UAAM,IAAI,MAAM,qCAAqC;AAAA,EACvD;AACF;AAGO,IAAM,cAAc;AAAA;AAAA,EAEzB,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,YAAY;AAAA,IACZ;AAAA,IACA,QAAQ;AAAA,IACR,aAAa;AAAA,EACf;AACF;AASO,IAAMC,SAAQ,YAAY;;;ACtR1B,IAAM,YAAY;AAAA;AAAA,EAEvB,SAAS;AAAA;AAAA,EAET,MAAM;AAAA;AAAA,EAEN,QAAQ;AAAA;AAAA,EAER,MAAM;AAAA;AAAA,EAEN,QAAQ;AACV;AAUO,IAAM,UAAU;AAAA;AAAA,EAErB,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAGnB,SAAS,CAAC,GAAG,GAAG,KAAK,CAAC;AAAA;AAAA,EAGtB,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC;AAAA;AAAA,EAGrB,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;AAAA;AAAA,EAG1B,QAAQ,EAAE,MAAM,UAAmB,WAAW,KAAK,SAAS,GAAG;AAAA;AAAA,EAG/D,YAAY,EAAE,MAAM,UAAmB,WAAW,IAAI,SAAS,GAAG;AAAA;AAAA,EAGlE,cAAc,EAAE,MAAM,UAAmB,WAAW,KAAK,SAAS,GAAG;AACvE;AAaO,IAAM,QAAQ;AAAA;AAAA,EAEnB,MAAM,EAAE,GAAG,GAAG;AAAA;AAAA,EAGd,eAAe,EAAE,GAAG,IAAI,OAAO,KAAK;AAAA;AAAA,EAGpC,QAAQ,EAAE,GAAG,GAAG;AAAA;AAAA,EAGhB,UAAU,EAAE,GAAG,GAAG;AACpB;AAMO,IAAM,mBAAmB;AAAA,EAC9B,UAAU,UAAU;AAAA,EACpB,MAAM,QAAQ;AAChB;AAUO,IAAM,YAAY;AAAA;AAAA,EAEvB,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AACN;AAUO,IAAM,UAAU;AAAA;AAAA,EAErB,MAAM;AAAA;AAAA,EAEN,QAAQ;AAAA;AAAA,EAER,MAAM;AACR;AAUO,IAAM,WAAW;AAAA;AAAA,EAEtB,MAAM,EAAE,MAAM,MAAM,QAAQ,EAAE;AAAA;AAAA,EAG9B,aAAa,EAAE,MAAM,MAAM,QAAQ,IAAI;AAAA;AAAA,EAGvC,UAAU,EAAE,MAAM,MAAM,QAAQ,IAAI;AAAA;AAAA,EAGpC,QAAQ,EAAE,MAAM,OAAO,QAAQ,EAAE;AACnC;AAaO,IAAM,WAAW;AAAA;AAAA,EAEtB,QAAQ;AAAA,IACN,SAAS,EAAE,SAAS,EAAE;AAAA,IACtB,SAAS,EAAE,SAAS,EAAE;AAAA,IACtB,MAAM,EAAE,SAAS,EAAE;AAAA,EACrB;AAAA;AAAA,EAGA,SAAS;AAAA,IACP,SAAS,EAAE,SAAS,GAAG,GAAG,UAAU,GAAG;AAAA,IACvC,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,IAC5B,MAAM,EAAE,SAAS,GAAG,GAAG,CAAC,UAAU,GAAG;AAAA,EACvC;AAAA;AAAA,EAGA,WAAW;AAAA,IACT,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,UAAU,GAAG;AAAA,IACxC,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,IAC5B,MAAM,EAAE,SAAS,GAAG,GAAG,UAAU,GAAG;AAAA,EACtC;AAAA;AAAA,EAGA,WAAW;AAAA,IACT,SAAS,EAAE,SAAS,GAAG,GAAG,UAAU,GAAG;AAAA,IACvC,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,IAC5B,MAAM,EAAE,SAAS,GAAG,GAAG,CAAC,UAAU,GAAG;AAAA,EACvC;AAAA;AAAA,EAGA,YAAY;AAAA,IACV,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,UAAU,GAAG;AAAA,IACxC,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,IAC5B,MAAM,EAAE,SAAS,GAAG,GAAG,UAAU,GAAG;AAAA,EACtC;AAAA;AAAA,EAGA,OAAO;AAAA,IACL,SAAS,EAAE,SAAS,GAAG,OAAO,KAAK;AAAA,IACnC,SAAS,EAAE,SAAS,GAAG,OAAO,EAAE;AAAA,IAChC,MAAM,EAAE,SAAS,GAAG,OAAO,KAAK;AAAA,EAClC;AAAA;AAAA,EAGA,SAAS;AAAA,IACP,SAAS,EAAE,SAAS,GAAG,OAAO,IAAI;AAAA,IAClC,SAAS,EAAE,SAAS,GAAG,OAAO,EAAE;AAAA,IAChC,MAAM,EAAE,SAAS,GAAG,OAAO,IAAI;AAAA,EACjC;AAAA;AAAA,EAGA,QAAQ;AAAA,IACN,SAAS,EAAE,SAAS,GAAG,QAAQ,IAAI;AAAA,IACnC,SAAS,EAAE,SAAS,GAAG,QAAQ,EAAE;AAAA,IACjC,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG;AAAA,EACjC;AAAA;AAAA,EAGA,eAAe;AAAA,IACb,SAAS,EAAE,SAAS,GAAG,GAAG,UAAU,GAAG;AAAA,IACvC,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,IAC5B,MAAM,EAAE,SAAS,GAAG,GAAG,CAAC,UAAU,GAAG;AAAA,EACvC;AAAA;AAAA,EAGA,YAAY;AAAA,IACV,SAAS,EAAE,SAAS,GAAG,GAAG,UAAU,IAAI,OAAO,KAAK;AAAA,IACpD,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG,OAAO,EAAE;AAAA,IACtC,MAAM,EAAE,SAAS,GAAG,GAAG,CAAC,UAAU,IAAI,OAAO,KAAK;AAAA,EACpD;AACF;AAUO,IAAM,qBAAqB;AAAA;AAAA,EAEhC,MAAM;AAAA,IACJ,QAAQ,EAAE,SAAS,EAAE;AAAA,IACrB,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,YAAY;AAAA,QACV,iBAAiB,QAAQ;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,QAAQ;AAAA,IACN,QAAQ,EAAE,SAAS,EAAE;AAAA,IACrB,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,YAAY;AAAA,QACV,iBAAiB,QAAQ;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM;AAAA,IACJ,QAAQ,EAAE,SAAS,EAAE;AAAA,IACrB,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,YAAY;AAAA,QACV,iBAAiB,QAAQ;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AACF;AAMO,IAAM,gBAAgB;AAAA;AAAA,EAE3B,QAAQ;AAAA,IACN,QAAQ,EAAE,SAAS,GAAG,GAAG,UAAU,GAAG;AAAA,IACtC,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,GAAG;AAAA,MACH,YAAY,QAAQ;AAAA,IACtB;AAAA,EACF;AAAA;AAAA,EAGA,MAAM;AAAA,IACJ,QAAQ,EAAE,SAAS,EAAE;AAAA,IACrB,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,YAAY,EAAE,UAAU,UAAU,OAAO;AAAA,IAC3C;AAAA,EACF;AAAA;AAAA,EAGA,OAAO;AAAA,IACL,QAAQ,EAAE,SAAS,GAAG,OAAO,KAAK;AAAA,IAClC,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,OAAO;AAAA,MACP,YAAY,QAAQ;AAAA,IACtB;AAAA,EACF;AACF;AAYO,SAAS,iBACd,WAAmC,UACnC,SAA+B,WAC/B,QAAgB,GAChB;AACA,QAAM,cAAc,QAAQ,MAAM;AAGlC,MAAI,OAAO,gBAAgB,YAAY,UAAU,aAAa;AAC5D,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,UAAU,UAAU,QAAQ;AAAA,IAC5B,MAAM;AAAA,IACN;AAAA,EACF;AACF;AAOO,SAAS,mBACd,WACA,WAAmC,MACnC;AACA,QAAM,OAAO,UAAU,QAAQ;AAE/B,QAAM,UAAU;AAAA,IACd,SAAS;AAAA,IACT,GAAI,cAAc,QAAQ,EAAE,GAAG,KAAK;AAAA,IACpC,GAAI,cAAc,UAAU,EAAE,GAAG,CAAC,KAAK;AAAA,IACvC,GAAI,cAAc,UAAU,EAAE,GAAG,KAAK;AAAA,IACtC,GAAI,cAAc,WAAW,EAAE,GAAG,CAAC,KAAK;AAAA,EAC1C;AAEA,SAAO;AAAA,IACL;AAAA,IACA,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,IAClC,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,GAAI,cAAc,QAAQ,EAAE,GAAG,CAAC,KAAK;AAAA,MACrC,GAAI,cAAc,UAAU,EAAE,GAAG,KAAK;AAAA,MACtC,GAAI,cAAc,UAAU,EAAE,GAAG,CAAC,KAAK;AAAA,MACvC,GAAI,cAAc,WAAW,EAAE,GAAG,KAAK;AAAA,IACzC;AAAA,EACF;AACF;AAMO,SAAS,iBACX,UAKH;AACA,SAAO,SAAS;AAAA,IACd,CAAC,KAAK,YAAY;AAChB,aAAO;AAAA,QACL,SAAS,EAAE,GAAG,IAAI,SAAS,GAAG,QAAQ,QAAQ;AAAA,QAC9C,SAAS,EAAE,GAAG,IAAI,SAAS,GAAG,QAAQ,QAAQ;AAAA,QAC9C,MAAM,EAAE,GAAG,IAAI,MAAM,GAAG,QAAQ,KAAK;AAAA,MACvC;AAAA,IACF;AAAA,IACA;AAAA,MACE,SAAS,CAAC;AAAA,MACV,SAAS,CAAC;AAAA,MACV,MAAM,CAAC;AAAA,IACT;AAAA,EACF;AACF;;;AC5YO,IAAM,gBAAgB;AAAA;AAAA,EAE3B,QAAQ;AAAA,IACN,SAAS,EAAE,SAAS,EAAE;AAAA,IACtB,SAAS,EAAE,SAAS,EAAE;AAAA,IACtB,MAAM,EAAE,SAAS,EAAE;AAAA,IACnB,YAAY;AAAA,MACV,UAAU,gBAAgB,SAAS,SAAS;AAAA,MAC5C,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,UAAU;AAAA,IACR,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG;AAAA,IAC7B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,IAC5B,MAAM,EAAE,SAAS,GAAG,GAAG,IAAI;AAAA,IAC3B,YAAY;AAAA,MACV,UAAU,gBAAgB,SAAS,SAAS;AAAA,MAC5C,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,YAAY;AAAA,IACV,SAAS,EAAE,SAAS,GAAG,GAAG,IAAI;AAAA,IAC9B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,IAC5B,MAAM,EAAE,SAAS,GAAG,GAAG,GAAG;AAAA,IAC1B,YAAY;AAAA,MACV,UAAU,gBAAgB,SAAS,SAAS;AAAA,MAC5C,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AAAA;AAAA,EAGA,SAAS;AAAA,IACP,SAAS,EAAE,SAAS,GAAG,OAAO,IAAI;AAAA,IAClC,SAAS,EAAE,SAAS,GAAG,OAAO,EAAE;AAAA,IAChC,MAAM,EAAE,SAAS,GAAG,OAAO,IAAI;AAAA,IAC/B,YAAY;AAAA,MACV,UAAU,gBAAgB,SAAS,OAAO;AAAA,MAC1C,MAAM;AAAA,MACN,WAAW;AAAA,MACX,SAAS;AAAA,IACX;AAAA,EACF;AAAA;AAAA,EAGA,SAAS;AAAA,IACP,SAAS,EAAE,GAAG,QAAQ,SAAS,EAAE;AAAA,IACjC,SAAS,EAAE,GAAG,GAAG,SAAS,EAAE;AAAA,IAC5B,MAAM,EAAE,GAAG,QAAQ,SAAS,EAAE;AAAA,IAC9B,YAAY;AAAA,MACV,UAAU,gBAAgB,SAAS,SAAS;AAAA,MAC5C,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,WAAW;AAAA,IACT,SAAS,EAAE,GAAG,SAAS,SAAS,EAAE;AAAA,IAClC,SAAS,EAAE,GAAG,GAAG,SAAS,EAAE;AAAA,IAC5B,MAAM,EAAE,GAAG,SAAS,SAAS,EAAE;AAAA,IAC/B,YAAY;AAAA,MACV,UAAU,gBAAgB,SAAS,SAAS;AAAA,MAC5C,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,WAAW;AAAA,IACT,SAAS,EAAE,GAAG,QAAQ,SAAS,EAAE;AAAA,IACjC,SAAS,EAAE,GAAG,GAAG,SAAS,EAAE;AAAA,IAC5B,MAAM,EAAE,GAAG,SAAS,SAAS,EAAE;AAAA,IAC/B,YAAY;AAAA,MACV,UAAU,gBAAgB,SAAS,SAAS;AAAA,MAC5C,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,YAAY;AAAA,IACV,SAAS,EAAE,GAAG,SAAS,SAAS,EAAE;AAAA,IAClC,SAAS,EAAE,GAAG,GAAG,SAAS,EAAE;AAAA,IAC5B,MAAM,EAAE,GAAG,QAAQ,SAAS,EAAE;AAAA,IAC9B,YAAY;AAAA,MACV,UAAU,gBAAgB,SAAS,SAAS;AAAA,MAC5C,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AAAA;AAAA,EAGA,UAAU;AAAA,IACR,SAAS;AAAA,MACP,QAAQ,CAAC,GAAG,KAAK,KAAK,KAAK,CAAC;AAAA,IAC9B;AAAA,IACA,YAAY;AAAA,MACV,UAAU,gBAAgB,MAAM,SAAS,WAAW;AAAA,MACpD,QAAQ;AAAA,MACR,MAAM,gBAAgB,OAAO,IAAI;AAAA,IACnC;AAAA,EACF;AAAA,EAEA,WAAW;AAAA,IACT,SAAS;AAAA,MACP,QAAQ,CAAC,OAAO,QAAQ,OAAO,OAAO,KAAK;AAAA,IAC7C;AAAA,IACA,YAAY;AAAA,MACV,UAAU,gBAAgB,MAAM,UAAU,WAAW;AAAA,MACrD,QAAQ;AAAA,MACR,MAAM,gBAAgB,OAAO,IAAI;AAAA,IACnC;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,SAAS;AAAA,MACP,OAAO,CAAC,GAAG,MAAM,CAAC;AAAA,MAClB,SAAS,CAAC,KAAK,GAAG,GAAG;AAAA,IACvB;AAAA,IACA,YAAY;AAAA,MACV,UAAU,gBAAgB,MAAM,MAAM,WAAW;AAAA,MACjD,QAAQ;AAAA,MACR,MAAM,gBAAgB,OAAO,IAAI;AAAA,IACnC;AAAA,EACF;AAAA,EAEA,YAAY;AAAA,IACV,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,UAAU,EAAE,OAAO,KAAK;AAAA,IACxB,YAAY;AAAA,MACV,UAAU,gBAAgB,MAAM,WAAW,WAAW;AAAA,MACtD,MAAM,gBAAgB,OAAO,IAAI;AAAA;AAAA,IACnC;AAAA,EACF;AAAA;AAAA,EAGA,aAAa;AAAA,IACX,YAAY,EAAE,OAAO,MAAM,GAAG,GAAG;AAAA,IACjC,UAAU,EAAE,OAAO,KAAK;AAAA,IACxB,YAAY;AAAA,MACV,UAAU,gBAAgB,SAAS,OAAO;AAAA,MAC1C,MAAM;AAAA,MACN,WAAW;AAAA,MACX,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EAEA,WAAW;AAAA,IACT,YAAY;AAAA,MACV,GAAG;AAAA,MACH,WAAW;AAAA,IACb;AAAA,IACA,YAAY;AAAA,MACV,UAAU,gBAAgB,SAAS,SAAS;AAAA,MAC5C,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AAAA;AAAA,EAGA,UAAU;AAAA,IACR,SAAS,EAAE,SAAS,GAAG,GAAG,IAAI;AAAA,IAC9B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,IAC5B,MAAM,EAAE,SAAS,GAAG,GAAG,GAAG;AAAA,IAC1B,YAAY;AAAA,MACV,UAAU,gBAAgB,SAAS,SAAS;AAAA,MAC5C,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,kBAAkB;AAAA,IAChB,SAAS;AAAA,MACP,YAAY;AAAA,QACV,iBAAiB;AAAA,QACjB,eAAe;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AACF;AAGO,IAAM,mBAAmB;AAAA;AAAA,EAE9B,qBAAqB,CACnB,eACA,SACA,WAAmB,gBAAgB,SAAS,WACzC;AACH,QAAI,SAAS,UAAU;AACrB,YAAMC,aAAW,UAAQ,cAAc,EAAE;AACzC,aAAOA,WAAS,OAAO,eAAe;AAAA,QACpC;AAAA,QACA;AAAA,QACA,iBAAiB;AAAA,MACnB,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,sBAAsB,CACpB,eACA,SACA,WAAmB,gBAAgB,SAAS,SACzC;AACH,QAAI,SAAS,UAAU;AACrB,YAAMA,aAAW,UAAQ,cAAc,EAAE;AACzC,aAAOA,WAAS,OAAO,eAAe;AAAA,QACpC;AAAA,QACA,iBAAiB;AAAA,QACjB,SAAS;AAAA,QACT,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,sBAAsB,CACpB,eACA,SACA,WAAmB,gBAAgB,SAAS,WACzC;AACH,QAAI,SAAS,UAAU;AACrB,YAAMA,aAAW,UAAQ,cAAc,EAAE;AACzC,aAAOA,WAAS,OAAO,eAAe;AAAA,QACpC;AAAA,QACA;AAAA,QACA,iBAAiB;AAAA,MACnB,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,gBAAgB,IAAI,eAAsB;AACxC,QAAI,SAAS,UAAU;AACrB,YAAMA,aAAW,UAAQ,cAAc,EAAE;AACzC,aAAOA,WAAS,SAAS,WAAW,OAAO,OAAO,CAAC;AAAA,IACrD;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,gBAAgB,IAAI,eAAsB;AACxC,QAAI,SAAS,UAAU;AACrB,YAAMA,aAAW,UAAQ,cAAc,EAAE;AACzC,aAAOA,WAAS,SAAS,WAAW,OAAO,OAAO,CAAC;AAAA,IACrD;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,eAAe,CAAC,OAAe,eAAsB;AACnD,QAAI,SAAS,UAAU;AACrB,YAAMA,aAAW,UAAQ,cAAc,EAAE;AACzC,aAAOA,WAAS,QAAQ,OAAO,WAAW,OAAO,OAAO,CAAC;AAAA,IAC3D;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,yBAAyB,CAAC,kBAAuB;AAC/C,QAAI,SAAS,UAAU;AACrB,YAAMA,aAAW,UAAQ,cAAc,EAAE;AACzC,aAAOA,WAAS;AAAA,QACdA,WAAS,SAAS;AAAA,UAChBA,WAAS,OAAO,eAAe;AAAA,YAC7B,SAAS;AAAA,YACT,UAAU,gBAAgB,MAAM,SAAS,WAAW;AAAA,YACpD,iBAAiB;AAAA,UACnB,CAAC;AAAA,UACDA,WAAS,OAAO,eAAe;AAAA,YAC7B,SAAS;AAAA,YACT,UAAU,gBAAgB,MAAM,SAAS,WAAW;AAAA,YACpD,iBAAiB;AAAA,UACnB,CAAC;AAAA,UACDA,WAAS,OAAO,eAAe;AAAA,YAC7B,SAAS;AAAA,YACT,UAAU,gBAAgB,MAAM,SAAS,WAAW;AAAA,YACpD,iBAAiB;AAAA,UACnB,CAAC;AAAA,UACDA,WAAS,OAAO,eAAe;AAAA,YAC7B,SAAS;AAAA,YACT,UAAU,gBAAgB,MAAM,SAAS,WAAW;AAAA,YACpD,iBAAiB;AAAA,UACnB,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,sBAAsB,CAAC,kBAAuB;AAC5C,QAAI,SAAS,UAAU;AACrB,YAAMA,aAAW,UAAQ,cAAc,EAAE;AACzC,aAAOA,WAAS;AAAA,QACdA,WAAS,SAAS;AAAA,UAChBA,WAAS,OAAO,eAAe;AAAA,YAC7B,SAAS;AAAA,YACT,UAAU,gBAAgB,MAAM,MAAM,WAAW;AAAA,YACjD,iBAAiB;AAAA,UACnB,CAAC;AAAA,UACDA,WAAS,OAAO,eAAe;AAAA,YAC7B,SAAS;AAAA,YACT,UAAU,gBAAgB,MAAM,MAAM,WAAW;AAAA,YACjD,iBAAiB;AAAA,UACnB,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;AAGO,IAAM,kBAAkB;AAAA;AAAA,EAE7B,sBAAsB,CACpB,WAAmB,gBAAgB,SAAS,YACxC;AAAA,IACJ,MAAM;AAAA,IACN,UAAU,WAAW;AAAA,IACrB,MAAM;AAAA,EACR;AAAA,EAEA,qBAAqB,CAAC,YAAoB,KAAK,UAAkB,QAAQ;AAAA,IACvE,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF;AACF;AAGO,IAAM,mBAAmB;AAAA;AAAA,EAE9B,gBAAgB,cAAc;AAAA,EAC9B,iBAAiB,cAAc;AAAA;AAAA,EAG/B,aAAa,cAAc;AAAA,EAC3B,WAAW,cAAc;AAAA;AAAA,EAGzB,eAAe,cAAc;AAAA,EAC7B,cAAc,cAAc;AAAA;AAAA,EAG5B,iBAAiB,cAAc;AAAA,EAC/B,eAAe,cAAc;AAC/B;AAGO,IAAM,yBAAyB;AAAA;AAAA,EAEpC,uBAAuB,MAAM;AAC3B,QAAI,SAAS,SAAS,OAAO,WAAW,aAAa;AACnD,aAAO,OAAO,WAAW,kCAAkC,EAAE;AAAA,IAC/D;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,sBAAsB,CAAC,aAAqB;AAC1C,WAAO,uBAAuB,sBAAsB,IAAI,IAAI;AAAA,EAC9D;AAAA;AAAA,EAGA,cAAc;AAAA,IACZ,YAAY;AAAA,IACZ,oBAAoB;AAAA,IACpB,aAAa;AAAA,EACf;AAAA;AAAA,EAGA,eAAe;AAAA,IACb,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AACF;AAGO,IAAM,SAAS,cAAc;AAC7B,IAAM,UAAU,cAAc;AAC9B,IAAM,UAAU,cAAc;;;AC/X9B,SAAS,UAAU,KAAa,UAAuC;AAC5E,MAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AACjD,WAAO,QAAQ,IAAI,GAAG,KAAK;AAAA,EAC7B;AAGA,MAAI,OAAO,WAAW,eAAgB,OAAe,SAAS;AAC5D,WAAQ,OAAe,QAAQ,GAAG,KAAK;AAAA,EACzC;AAEA,SAAO;AACT;AAMO,SAAS,qBAAgC;AAC9C,QAAM,cAAc,UAAU,0BAA0B;AACxD,QAAM,kBAAkB,UAAU,+BAA+B;AACjE,QAAM,iBAAiB,UAAU,6BAA6B;AAG9D,MAAI,eAAe,iBAAiB;AAClC,WAAO;AAAA,MACL,cAAc;AAAA,MACd;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAGA,MAAI,gBAAgB;AAClB,WAAO;AAAA,MACL,cAAc;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAGA,UAAQ;AAAA,IACN;AAAA,EACF;AACA,SAAO;AAAA,IACL,cAAc;AAAA,IACd,aAAa;AAAA,IACb,iBAAiB;AAAA,EACnB;AACF;AAKO,SAAS,kBAAkB,QAA6B;AAC7D,QAAM,SAAmB,CAAC;AAE1B,MAAI,OAAO,iBAAiB,YAAY;AACtC,QACE,CAAC,OAAO,eACR,OAAO,gBAAgB,4BACvB;AACA,aAAO;AAAA,QACL;AAAA,MACF;AAAA,IACF;AACA,QAAI,CAAC,OAAO,mBAAmB,OAAO,oBAAoB,iBAAiB;AACzE,aAAO;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,OAAO,iBAAiB,YAAY;AACtC,QAAI,CAAC,OAAO,gBAAgB;AAC1B,aAAO;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAKO,SAAS,aAAkC;AAChD,SAAO;AAAA,IACL,YAAY,OAAO,YAAY;AAAA,IAC/B,WAAW,OAAO,WAAW;AAAA,IAC7B,SAAS,UAAU,YAAY,aAAa;AAAA,IAC5C,cAAc,mBAAmB,EAAE;AAAA,IACnC,cAAc,UAAU,UAAU,MAAM;AAAA,EAC1C;AACF;;;AC5BA;AAMA;AAGA,SAAS,YAAAC,kBAAgB;;;ACzFzB,OAAOC,WAAS,WAAAC,UAAS,eAAAC,qBAAmB;AAC5C;AAAA,EACE,QAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA;AAAA,EACA,YAAAC;AAAA,OACK;AAyLG,gBAAAC,aAAA;AAtLV,IAAM,EAAE,OAAOC,aAAY,IAAIH,aAAW,IAAI,QAAQ;AAkC/C,IAAM,QAA8B,CAAC;AAAA,EAC1C;AAAA,EACA;AAAA,EACA,OAAAI,SAAQD,eAAc;AAAA,EACtB,QAAAE,UAAS;AAAA,EACT,SAAS,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;AAAA,EAC/D,WAAW;AAAA,EACX,WAAW;AAAA,EACX,UAAU;AAAA,EACV;AAAA,EACA;AACF,MAAM;AACJ,QAAM,gBAAgBV,QAAM,OAAO,IAAIM,WAAS,MAAM,CAAC,CAAC,EAAE;AAE1D,EAAAN,QAAM,UAAU,MAAM;AACpB,QAAI,SAAS;AACX,MAAAM,WAAS,OAAO,eAAe;AAAA,QAC7B,SAAS;AAAA,QACT,UAAU;AAAA,QACV,iBAAiB;AAAA,MACnB,CAAC,EAAE,MAAM;AAAA,IACX;AAAA,EACF,GAAG,CAAC,SAAS,aAAa,CAAC;AAE3B,QAAM,aAA8BL;AAAA,IAClC,OAAO;AAAA,MACL,OAAAQ;AAAA,MACA,QAAAC;AAAA,MACA,QAAQ,EAAE,KAAK,IAAI,OAAO,IAAI,QAAQ,IAAI,MAAM,GAAG;AAAA,MACnD,YAAYD,SAAQ;AAAA,MACpB,aAAaC,UAAS;AAAA,IACxB;AAAA,IACA,CAACD,QAAOC,OAAM;AAAA,EAChB;AAGA,QAAM,gBAAgBT,SAAQ,MAAM;AAClC,QAAI,CAAC,KAAK;AACR,aAAO;AAAA,QACL,QAAQ,CAAC;AAAA,QACT,QAAQ,EAAE,GAAG,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,GAAG,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE;AAAA,MACzD;AAEF,UAAM,UAAU,KAAK;AAAA,MAAI,CAAC,MACxB,OAAO,EAAE,MAAM,WACX,IACA,OAAO,EAAE,MAAM,WACb,EAAE,IACF,EAAE,EAAE,QAAQ;AAAA,IACpB;AACA,UAAM,UAAU,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;AAEnC,UAAM,SAAS;AAAA,MACb,GAAG,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,GAAG,KAAK,KAAK,IAAI,GAAG,OAAO,EAAE;AAAA,MAC1D,GAAG,EAAE,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG,OAAO,EAAE;AAAA,IACzE;AAEA,UAAM,SAAS,KAAK,IAAI,CAAC,OAAO,WAAW;AAAA,MACzC,GAAG;AAAA,MACH,GACE,OAAO,MAAM,MAAM,WACf,QACA,OAAO,MAAM,MAAM,WACjB,MAAM,IACN,MAAM,EAAE,QAAQ;AAAA,MACxB,OAAO,MAAM,SAAS,OAAO,QAAQ,OAAO,MAAM;AAAA,IACpD,EAAE;AAEF,WAAO,EAAE,QAAQ,OAAO;AAAA,EAC1B,GAAG,CAAC,MAAM,MAAM,CAAC;AAGjB,QAAM,SAASC;AAAA,IACb,CAAC,UAAkB;AACjB,YAAM,EAAE,OAAO,IAAI;AACnB,YAAM,QAAQ,OAAO,EAAE,MAAM,OAAO,EAAE,OAAO;AAC7C,aACE,WAAW,OAAO,QAChB,QAAQ,OAAO,EAAE,OAAO,QAAS,WAAW;AAAA,IAElD;AAAA,IACA,CAAC,eAAe,UAAU;AAAA,EAC5B;AAEA,QAAM,SAASA;AAAA,IACb,CAAC,UAAkB;AACjB,YAAM,EAAE,OAAO,IAAI;AACnB,YAAM,QAAQ,OAAO,EAAE,MAAM,OAAO,EAAE,OAAO;AAC7C,aACE,WAAW,OAAO,MAClB,WAAW,eACT,QAAQ,OAAO,EAAE,OAAO,QAAS,WAAW;AAAA,IAElD;AAAA,IACA,CAAC,eAAe,UAAU;AAAA,EAC5B;AAGA,QAAM,eAAeD;AAAA,IACnB,MACE,aAAa,OAAO;AAAA,MAClB,8BAA8B,MAAM;AAAA,MACpC,6BAA6B,MAAM;AAAA,MACnC,qBAAqB,CAAC,QAAQ;AAC5B,YAAI,CAAC,iBAAkB;AAEvB,cAAM,EAAE,UAAU,IAAI,IAAI;AAC1B,cAAM,EAAE,OAAO,IAAI;AAGnB,YAAI,eAAe;AACnB,YAAI,kBAAkB;AAEtB,eAAO,QAAQ,CAAC,OAAO,UAAU;AAC/B,gBAAM,SAAS,OAAO,MAAM,CAAW;AACvC,gBAAM,WAAW,KAAK,IAAI,YAAY,MAAM;AAE5C,cAAI,WAAW,iBAAiB;AAC9B,8BAAkB;AAClB,2BAAe;AAAA,UACjB;AAAA,QACF,CAAC;AAED,cAAM,eAAe,OAAO,YAAY;AACxC,YAAI,kBAAkB,MAAM,cAAc;AAExC,2BAAiB,cAAc,YAAY;AAAA,QAC7C;AAAA,MACF;AAAA,IACF,CAAC;AAAA,IACH,CAAC,eAAe,QAAQ,gBAAgB;AAAA,EAC1C;AAGA,QAAM,cAAc,MAAM;AACxB,UAAM,EAAE,OAAO,IAAI;AACnB,QAAI,CAAC,OAAO,OAAQ,QAAO;AAG3B,QAAI,SAAS,OAAO;AAClB,YAAM,WAAY,WAAW,aAAa,OAAO,SAAU;AAE3D,aAAO,OAAO,IAAI,CAAC,OAAO,UAAU;AAClC,cAAM,IAAI,OAAO,MAAM,CAAW,IAAI,WAAW;AACjD,cAAM,IAAI,OAAO,MAAM,CAAC;AACxB,cAAM,YAAY,OAAO,CAAC,IAAI;AAE9B,eACE,gBAAAM;AAAA,UAACJ;AAAA,UAAA;AAAA,YAEC,OAAO;AAAA,cACLQ,SAAO;AAAA,cACP;AAAA,gBACE,UAAU;AAAA,gBACV,MAAM;AAAA,gBACN,KAAK;AAAA,gBACL,OAAO;AAAA,gBACP,QAAQ,KAAK,IAAI,WAAW,CAAC;AAAA,gBAC7B,iBAAiB,MAAM;AAAA,cACzB;AAAA,YACF;AAAA;AAAA,UAXK;AAAA,QAYP;AAAA,MAEJ,CAAC;AAAA,IACH;AAGA,WAAO,OAAO,IAAI,CAAC,OAAO,UACxB,gBAAAJ;AAAA,MAACJ;AAAA,MAAA;AAAA,QAEC,OAAO;AAAA,UACLQ,SAAO;AAAA,UACP;AAAA,YACE,UAAU;AAAA,YACV,MAAM,OAAO,MAAM,CAAW,IAAI;AAAA,YAClC,KAAK,OAAO,MAAM,CAAC,IAAI;AAAA,YACvB,iBAAiB,MAAM;AAAA,UACzB;AAAA,QACF;AAAA;AAAA,MATK;AAAA,IAUP,CACD;AAAA,EACH;AAEA,SACE,gBAAAJ,MAACJ,QAAA,EAAK,OAAO,CAACQ,SAAO,WAAW,KAAK,GAAI,GAAG,aAAa,aACvD,0BAAAJ;AAAA,IAACJ;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,OAAO,WAAW;AAAA,QAClB,QAAQ,WAAW;AAAA,QACnB,UAAU;AAAA,QACV,iBAAiB;AAAA,QACjB,cAAc;AAAA,MAChB;AAAA,MAEC,sBAAY;AAAA;AAAA,EACf,GACF;AAEJ;AAEA,IAAMQ,WAASP,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,iBAAiB;AAAA,EACnB;AAAA,EACA,KAAK;AAAA,IACH,cAAc;AAAA,EAChB;AAAA,EACA,KAAK;AAAA,IACH,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AACF,CAAC;;;AChQD,SAAS,cAAc;AACvB,SAAS,uBAAuB,UAAU,eAAe;AACzD,SAAS,aAAa;AAqBf,SAAS,qBAId,SAEA,iBACA;AACA,MAAI,QAAQ;AAGZ,MAAI,QAAQ,UAAU,OAAO;AAC3B,YAAQ,MAAM,KAAK;AAAA,EACrB;AAGA,MAAI,QAAQ,kBAAkB,OAAO;AACnC,YAAQ,sBAAsB,KAAK;AAAA,EACrC;AAGA,MAAI,QAAQ,SAAS;AACnB,YAAQ,QAAQ,OAAO;AAAA,MACrB,MAAM,GAAG,QAAQ,IAAI;AAAA,MACrB,GAAG,QAAQ;AAAA,IACb,CAAC;AAAA,EACH;AAGA,MAAI,QAAQ,aAAa,SAAS,QAAQ,IAAI,aAAa,eAAe;AACxE,YAAQ,SAAS,OAAO,EAAE,MAAM,QAAQ,KAAK,CAAC;AAAA,EAChD;AAEA,SAAO,OAAc,EAAE,KAAK;AAC9B;AAKO,SAAS,0BACd,OACA,YACA;AAEA,QAAM,eAAe,CAAC,GAAM,MAAkB;AAC5C,QAAI,MAAM,EAAG,QAAO;AAEpB,QACE,OAAO,MAAM,YACb,OAAO,MAAM,YACb,MAAM,QACN,MAAM,MACN;AACA,aAAO;AAAA,IACT;AAEA,UAAM,QAAQ,OAAO,KAAK,CAAQ;AAClC,UAAM,QAAQ,OAAO,KAAK,CAAQ;AAElC,QAAI,MAAM,WAAW,MAAM,OAAQ,QAAO;AAE1C,eAAW,OAAO,OAAO;AACvB,UAAI,CAAC,MAAM,SAAS,GAAG,KAAM,EAAU,GAAG,MAAO,EAAU,GAAG,GAAG;AAC/D,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,SAAO,MAAM,cAAe,YAAoB;AAClD;AA0BO,IAAM,kBAAkB,CAAC,gBAAyC,CAAC,MACxE;AAAA,EACE;AAAA,IACE,MAAM;AAAA,IACN,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,QAAQ,CAAC;AAAA,MACT,SAAS,oBAAI,IAAI;AAAA,MACjB,cAAc;AAAA,MACd,SAAS;AAAA,IACX;AAAA,IACA,OAAO;AAAA,IACP,SAAS;AAAA,MACP,YAAY,CAAC,WAAsB,EAAE,QAAQ,MAAM,OAAO;AAAA;AAAA,IAC5D;AAAA,EACF;AAAA,EACA,CAAC,KAA+C,SAA0B;AAAA;AAAA,IAExE,QAAQ;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,SAAS,oBAAI,IAAI;AAAA,IACjB,cAAc;AAAA,IACd,SAAS;AAAA;AAAA,IAGT,UAAU,CAAC,OAAe,UACxB,IAAI,CAAC,UAAU;AACb,YAAM,OAAO,KAAK,IAAI;AACtB,YAAM,UAAU;AAEhB,UAAI,MAAM,OAAO,KAAK,GAAG;AACvB,eAAO,MAAM,OAAO,KAAK;AAAA,MAC3B;AAAA,IACF,CAAC;AAAA,IAEH,UAAU,CAAC,OAAe,UACxB,IAAI,CAAC,UAAU;AACb,YAAM,OAAO,KAAK,IAAI;AAAA,IACxB,CAAC;AAAA,IAEH,YAAY,CAAC,UACX,IAAI,CAAC,UAAU;AACb,aAAO,MAAM,OAAO,KAAK;AAAA,IAC3B,CAAC;AAAA,IAEH,YAAY,CAAC,UACX,IAAI,CAAC,UAAU;AACb,YAAM,QAAQ,IAAI,KAAK;AAAA,IACzB,CAAC;AAAA,IAEH,eAAe,CAAC,iBACd,IAAI,CAAC,UAAU;AACb,YAAM,eAAe;AAAA,IACvB,CAAC;AAAA,IAEH,WAAW,MACT,IAAI,CAAC,UAAU;AACb,YAAM,SAAS;AACf,YAAM,SAAS,CAAC;AAChB,YAAM,UAAU,oBAAI,IAAI;AACxB,YAAM,eAAe;AACrB,YAAM,UAAU;AAAA,IAClB,CAAC;AAAA,IAEH,eAAe,CACb,OACA,cACG;AACH,YAAM,QAAQ,IAAI,EAAE,OAAO,KAAK;AAChC,YAAM,QAAQ,UAAU,KAAK;AAE7B,UAAI,CAAC,UAAU;AACb,YAAI,OAAO;AACT,gBAAM,OAAO,KAAK,IAAI;AAAA,QACxB,OAAO;AACL,iBAAO,MAAM,OAAO,KAAK;AAAA,QAC3B;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;AA0BK,IAAM,kBAAkB,CAC7B,WAAW,IAAI,KAAK,QAEpB;AAAA,EACE;AAAA,IACE,MAAM;AAAA,IACN,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,MACT,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO,oBAAI,IAAI;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EACA,CACE,KACA,SACI;AAAA;AAAA,IAEJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,aAAa;AAAA,IACb,OAAO,oBAAI,IAAI;AAAA;AAAA,IAGf,SAAS,CAAC,SACR,IAAI,CAAC,UAAU;AACb,YAAM,OAAO;AACb,YAAM,cAAc,KAAK,IAAI;AAC7B,YAAM,QAAQ;AAAA,IAChB,CAAC;AAAA,IAEH,YAAY,CAAC,YACX,IAAI,CAAC,UAAU;AACb,YAAM,UAAU;AAAA,IAClB,CAAC;AAAA,IAEH,UAAU,CAAC,UACT,IAAI,CAAC,UAAU;AACb,YAAM,QAAQ;AACd,YAAM,UAAU;AAAA,IAClB,CAAC;AAAA,IAEH,WAAW,OACT,KACA,SACA,MAAM,aACH;AACH,YAAM,QAAQ,IAAI;AAGlB,YAAM,SAAS,MAAM,MAAM,IAAI,GAAG;AAClC,UAAI,UAAU,KAAK,IAAI,IAAI,OAAO,YAAY,KAAK;AACjD,YAAI,CAACQ,WAAU;AACb,UAAAA,OAAM,OAAO,OAAO;AACpB,UAAAA,OAAM,QAAQ;AACd,UAAAA,OAAM,UAAU;AAAA,QAClB,CAAC;AACD;AAAA,MACF;AAGA,UAAI,CAACA,WAAU;AACb,QAAAA,OAAM,UAAU;AAChB,QAAAA,OAAM,QAAQ;AAAA,MAChB,CAAC;AAED,UAAI;AACF,cAAM,OAAO,MAAM,QAAQ;AAE3B,YAAI,CAACA,WAAU;AACb,UAAAA,OAAM,OAAO;AACb,UAAAA,OAAM,UAAU;AAChB,UAAAA,OAAM,QAAQ;AACd,UAAAA,OAAM,cAAc,KAAK,IAAI;AAG7B,UAAAA,OAAM,MAAM,IAAI,KAAK;AAAA,YACnB;AAAA,YACA,WAAW,KAAK,IAAI;AAAA,UACtB,CAAC;AAAA,QACH,CAAC;AAAA,MACH,SAAS,OAAO;AACd,YAAI,CAACA,WAAU;AACb,UAAAA,OAAM,QACJ,iBAAiB,QAAQ,MAAM,UAAU;AAC3C,UAAAA,OAAM,UAAU;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IAEA,YAAY,MACV,IAAI,CAAC,UAAU;AACb,YAAM,MAAM,MAAM;AAAA,IACpB,CAAC;AAAA,IAEH,iBAAiB,CAAC,QAChB,IAAI,CAAC,UAAU;AACb,YAAM,MAAM,OAAO,GAAG;AAAA,IACxB,CAAC;AAAA,EACL;AACF;AAGK,IAAM,wBAAN,MAA4B;AAAA,EAA5B;AACL,wBAAQ,UAAS,oBAAI,IAAiB;AACtC,wBAAQ,iBAAgB,oBAAI,IAA6B;AACzD,wBAAQ,sBAAqB;AAAA,MAC3B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,iBAAiB;AAAA,IACnB;AAAA;AAAA,EAEA,YACE,MACA,SAEA,YACA;AACA,QAAI,KAAK,OAAO,IAAI,IAAI,GAAG;AACzB,YAAM,IAAI,MAAM,UAAU,IAAI,kBAAkB;AAAA,IAClD;AAEA,UAAM,QAAQ,qBAAqB,SAAS,UAAU;AACtD,SAAK,OAAO,IAAI,MAAM,KAAK;AAG3B,QAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,YAAM,cAAc,MAAM;AAC1B,YAAM,WAAW,IAAI,SAAyC;AAC5D,cAAM,QAAQ,YAAY,IAAI;AAC9B,cAAM,SAAS,YAAY,MAAM,OAAO,IAAI;AAC5C,cAAM,WAAW,YAAY,IAAI,IAAI;AAErC,aAAK,yBAAyB,MAAM,QAAQ;AAE5C,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,SAAY,MAAwB;AAClC,WAAO,KAAK,OAAO,IAAI,IAAI,KAAK;AAAA,EAClC;AAAA,EAEA,aAAa,MAAc;AACzB,UAAM,QAAQ,KAAK,OAAO,IAAI,IAAI;AAClC,QAAI,SAAS,OAAO,MAAM,YAAY,YAAY;AAChD,YAAM,QAAQ;AAAA,IAChB;AACA,SAAK,OAAO,OAAO,IAAI;AACvB,SAAK,cAAc,OAAO,IAAI;AAAA,EAChC;AAAA,EAEQ,yBAAyB,WAAmB,UAAkB;AACpE,SAAK,mBAAmB,eAAe;AACvC,SAAK,mBAAmB,mBAAmB;AAC3C,SAAK,mBAAmB,oBACtB,KAAK,mBAAmB,kBACxB,KAAK,mBAAmB;AAG1B,QAAI,WAAW,MAAM,KAAK,mBAAmB,cAAc,OAAO,GAAG;AACnE,cAAQ;AAAA,QACN,0BAA0B,SAAS,iBAAiB,SAAS,QAAQ,CAAC,CAAC,gBACzD,KAAK,mBAAmB,kBAAkB,QAAQ,CAAC,CAAC;AAAA,MACpE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,wBAAwB;AACtB,WAAO,EAAE,GAAG,KAAK,mBAAmB;AAAA,EACtC;AACF;AAGO,IAAM,eAAe,IAAI,sBAAsB;;;AF5T/C,IAAMC,YAAW;AACjB,IAAM,QAAQC,WAAS,OAAO;AAC9B,IAAM,YAAYA,WAAS,OAAO;","names":["theme","React","theme","themes","styles","theme","theme","jsx","theme","styles","React","jsx","View","theme","styles","React","jsx","jsxs","View","theme","height","styles","hasError","React","jsx","jsxs","View","Text","Animated","theme","styles","React","jsx","jsxs","View","Text","TouchableOpacity","theme","styles","React","jsx","jsxs","View","Text","TouchableOpacity","ScrollView","theme","styles","jsx","View","styles","React","jsx","View","styles","getStyles","React","View","Text","TouchableOpacity","StyleSheet","Platform","Image","Fragment","jsx","jsxs","useState","useEffect","View","Text","TouchableOpacity","ScrollView","Animated","StyleSheet","SafeAreaView","jsx","jsxs","styles","screenWidth","useState","View","StyleSheet","SafeAreaView","Platform","jsx","jsxs","Platform","useState","View","styles","SafeAreaView","StyleSheet","View","Text","TouchableOpacity","StyleSheet","ScrollView","jsx","jsxs","styles","useState","useRef","useEffect","View","Text","TouchableOpacity","ScrollView","Animated","StyleSheet","jsx","jsxs","styles","width","View","Text","TouchableOpacity","StyleSheet","SafeAreaView","Platform","jsx","jsxs","styles","View","Text","TouchableOpacity","ScrollView","StyleSheet","jsx","jsxs","styles","useState","useEffect","useRef","View","Text","TextInput","TouchableOpacity","Modal","StyleSheet","SafeAreaView","jsx","jsxs","styles","useState","View","Text","TouchableOpacity","StyleSheet","ScrollView","jsx","jsxs","pages","styles","useState","useEffect","useCallback","useRef","View","Text","Modal","TouchableOpacity","Animated","Dimensions","StyleSheet","StatusBar","Platform","jsx","jsxs","screenHeight","screenWidth","styles","width","height","useState","useEffect","useRef","View","Text","Modal","TouchableOpacity","Animated","Dimensions","StyleSheet","jsx","jsxs","width","height","screenWidth","styles","useState","useCallback","View","Text","ScrollView","TouchableOpacity","StyleSheet","Dimensions","jsx","jsxs","styles","isCompleted","View","Text","Modal","TouchableOpacity","ScrollView","StyleSheet","Dimensions","jsx","jsxs","styles","width","useState","useEffect","useRef","View","Text","Modal","TouchableOpacity","StyleSheet","Animated","Dimensions","SafeAreaView","jsx","jsxs","styles","useState","View","StyleSheet","jsx","jsxs","useState","View","styles","StyleSheet","View","Text","ScrollView","TouchableOpacity","StyleSheet","Dimensions","SafeAreaView","KeyboardAvoidingView","Platform","jsx","jsxs","height","styles","useState","View","Text","StyleSheet","jsx","jsxs","useState","View","styles","Text","StyleSheet","useState","useEffect","Keyboard","useState","useEffect","useState","useEffect","Dimensions","useState","useEffect","window","useState","useEffect","NetInfo","connection","useState","useEffect","isReactNative","NetInfo","React","jsx","jsxs","React","createContext","useContext","cva","Fragment","jsx","jsxs","createContext","useContext","cva","React","cva","jsx","jsxs","cva","View","Text","StyleSheet","Dimensions","jsx","jsxs","screenWidth","screenHeight","height","styles","View","ScrollView","StyleSheet","Platform","jsx","styles","useRef","useEffect","Animated","StyleSheet","Dimensions","jsx","screenWidth","screenHeight","styles","useState","useEffect","View","Text","StyleSheet","ActivityIndicator","jsx","jsxs","styles","useState","useEffect","View","Text","StyleSheet","Animated","TouchableOpacity","NetInfo","jsx","jsxs","styles","useState","useEffect","forwardRef","View","Text","StyleSheet","Animated","TouchableOpacity","Dimensions","useSafeAreaInsets","jsx","jsxs","screenWidth","styles","useState","View","Text","TextInput","TouchableOpacity","StyleSheet","ActivityIndicator","jsx","jsxs","styles","useState","View","Text","TextInput","TouchableOpacity","StyleSheet","ActivityIndicator","ScrollView","jsx","jsxs","styles","React","cva","jsx","jsxs","cva","React","jsx","React","jsx","React","jsx","useState","useRef","useCallback","motion","jsx","jsxs","useState","useRef","useCallback","motion","useState","useRef","useCallback","useEffect","motion","useMotionValue","useTransform","jsx","jsxs","useState","useRef","useMotionValue","useTransform","useCallback","useEffect","motion","useState","useRef","useEffect","useCallback","motion","AnimatePresence","jsx","jsxs","useState","useRef","useEffect","useCallback","AnimatePresence","motion","useState","useRef","useEffect","useCallback","motion","AnimatePresence","jsx","jsxs","useState","useRef","useEffect","useCallback","motion","AnimatePresence","useState","useEffect","useRef","useCallback","useMemo","jsx","jsxs","useState","useRef","useMemo","totalHeight","containerHeight","useCallback","useEffect","DefaultLoadingComponent","useState","useEffect","useCallback","jsx","jsxs","useState","useCallback","useEffect","jsx","useState","useEffect","useCallback","jsx","jsxs","useState","useEffect","useCallback","useCallback","theme","Animated","Platform","React","useMemo","useCallback","View","StyleSheet","Dimensions","Animated","jsx","screenWidth","width","height","styles","state","isNative","Platform"]}