{"version":3,"file":"angular-hijri-gregorian-datepicker.mjs","sources":["../../../projects/hijri-gregorian-datepicker/src/_constants/calendar.constants.ts","../../../projects/hijri-gregorian-datepicker/src/_utils/date-formatting.util.ts","../../../projects/hijri-gregorian-datepicker/src/_utils/umm-al-qura-calendar.util.ts","../../../projects/hijri-gregorian-datepicker/src/_services/date-utilities.service.ts","../../../projects/hijri-gregorian-datepicker/src/lib/_directives/fade-in-animation.directive.ts","../../../projects/hijri-gregorian-datepicker/src/_utils/number-conversion.util.ts","../../../projects/hijri-gregorian-datepicker/src/lib/hijri-gregorian-datepicker.component.ts","../../../projects/hijri-gregorian-datepicker/src/lib/hijri-gregorian-datepicker.component.html","../../../projects/hijri-gregorian-datepicker/src/lib/hijri-gregorian-datepicker.module.ts","../../../projects/hijri-gregorian-datepicker/src/public-api.ts","../../../projects/hijri-gregorian-datepicker/src/angular-hijri-gregorian-datepicker.ts"],"sourcesContent":["export interface MonthData {\n  labelAr: string;\n  labelEn: string;\n  value: number;\n}\n\nexport const umAlQura_MONTHS: MonthData[] = [\n  { labelAr: 'محرم', labelEn: 'Muharram', value: 1 },\n  { labelAr: 'صفر', labelEn: 'Safar', value: 2 },\n  { labelAr: 'ربيع الأول', labelEn: 'Rabi al-Awwal', value: 3 },\n  { labelAr: 'ربيع الثاني', labelEn: 'Rabi al-Thani', value: 4 },\n  { labelAr: 'جمادى الأولى', labelEn: 'Jumada al-Awwal', value: 5 },\n  { labelAr: 'جمادى الآخرة', labelEn: 'Jumada al-Thani', value: 6 },\n  { labelAr: 'رجب', labelEn: 'Rajab', value: 7 },\n  { labelAr: 'شعبان', labelEn: 'Shaban', value: 8 },\n  { labelAr: 'رمضان', labelEn: 'Ramadan', value: 9 },\n  { labelAr: 'شوال', labelEn: 'Shawwal', value: 10 },\n  { labelAr: 'ذو القعدة', labelEn: 'Dhu al-Qadah', value: 11 },\n  { labelAr: 'ذو الحجة', labelEn: 'Dhu al-Hijjah', value: 12 },\n];\n\nexport const GREGORIAN_MONTHS: MonthData[] = [\n  { labelAr: 'يناير', labelEn: 'January', value: 1 },\n  { labelAr: 'فبراير', labelEn: 'February', value: 2 },\n  { labelAr: 'مارس', labelEn: 'March', value: 3 },\n  { labelAr: 'ابريل', labelEn: 'April', value: 4 },\n  { labelAr: 'مايو', labelEn: 'May', value: 5 },\n  { labelAr: 'يونيو', labelEn: 'June', value: 6 },\n  { labelAr: 'يوليو', labelEn: 'July', value: 7 },\n  { labelAr: 'اغسطس', labelEn: 'August', value: 8 },\n  { labelAr: 'سبتمبر', labelEn: 'September', value: 9 },\n  { labelAr: 'اكتوبر', labelEn: 'October', value: 10 },\n  { labelAr: 'نوفمبر', labelEn: 'November', value: 11 },\n  { labelAr: 'ديسمبر', labelEn: 'December', value: 12 },\n];\n\nexport const WEEKDAYS_EN = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nexport const WEEKDAYS_AR = ['سبت', 'جمعة', 'خميس', 'أربعاء', 'ثلاثاء', 'اثنين', 'أحد'];\n\nexport const CALENDAR_CONSTANTS = {\n  DAYS_IN_WEEK: 7,\n  MAX_MONTH_VALUE: 12,\n  MIN_MONTH_VALUE: 1,\n  DATE_PART_COUNT: 3,\n  ARABIC_ZERO_UNICODE: 1632,\n} as const;\n\nexport const CALENDAR_MODES = {\n  GREGORIAN: 'greg',\n  umAlQura: 'umAlQura'\n} as const;\n\nexport type CalendarMode = typeof CALENDAR_MODES[keyof typeof CALENDAR_MODES];","import { CALENDAR_CONSTANTS, WEEKDAYS_EN } from '../_constants/calendar.constants';\n\nexport class DateFormattingUtil {\n  // Formats a Date object to DD/MM/YYYY string\n  static formatDate(date: Date): string {\n    const day = String(date.getDate()).padStart(2, '0');\n    const month = String(date.getMonth() + 1).padStart(2, '0');\n    const year = date.getFullYear();\n    return `${day}/${month}/${year}`;\n  }\n\n  // Parses a date string in DD/MM/YYYY format to Date object\n  static parseDate(dateStr: string): Date | null {\n    if (!dateStr) {\n      return null;\n    }\n\n    const parts = dateStr.split('/');\n    if (parts.length !== CALENDAR_CONSTANTS.DATE_PART_COUNT) {\n      return null;\n    }\n\n    const [day, month, year] = parts.map(Number);\n    if (!this.isValidDateParts(day, month, year)) {\n      return null;\n    }\n\n    return new Date(year, month - 1, day);\n  }\n\n\n  // Gets the day shorthand for a date\n  static getDayShortHand(date: Date): string {\n    return date.toLocaleString('en-US', { weekday: 'short' });\n  }\n\n  // Validates date parts\n  private static isValidDateParts(day: number, month: number, year: number): boolean {\n    return !isNaN(day) && !isNaN(month) && !isNaN(year) &&\n      day >= 1 && day <= 31 &&\n      month >= CALENDAR_CONSTANTS.MIN_MONTH_VALUE &&\n      month <= CALENDAR_CONSTANTS.MAX_MONTH_VALUE &&\n      year >= 1;\n  }\n\n\n  // Checks if a date is in the past, today, or future\n  static compareDateToTarget(inputDate: string, targetDate: Date): 'Past' | 'Today' | 'Future' | null {\n    if (!inputDate) return null;\n\n    const parsedDate = this.parseDate(inputDate);\n    if (!parsedDate) return null;\n\n    const today = new Date(targetDate);\n    today.setHours(0, 0, 0, 0);\n    parsedDate.setHours(0, 0, 0, 0);\n\n    if (parsedDate > today) {\n      return 'Future';\n    } else if (parsedDate < today) {\n      return 'Past';\n    } else {\n      return 'Today';\n    }\n  }\n}","/**\n * UmAlQura Calendar - TypeScript Implementation\n * Ported from Microsoft .NET System.Globalization.UmAlQuraCalendar\n * \n * Calendar support range:\n *   Gregorian: 1900/04/30 - 2077/11/17\n *   UmAlQura:  1318/01/01 - 1500/12/30\n */\n\nconst MIN_CALENDAR_YEAR = 1318;\nconst MAX_CALENDAR_YEAR = 1500;\nconst MS_PER_DAY = 86400000;\n\ninterface HijriYearInfo {\n  hijriMonthsLengthFlags: number;\n  gregorianDate: Date;\n}\n\ninterface HijriDate {\n  year: number;\n  month: number;\n  day: number;\n}\n\n// Raw data from .NET source - each entry: [HijriMonthsLengthFlags, GYear, GMonth, GDay]\nconst RAW_DATA = [\n  0x02EA, 1900, 4, 30,\n  0x06E9, 1901, 4, 19,\n  0x0ED2, 1902, 4, 9,\n  0x0EA4, 1903, 3, 30,\n  0x0D4A, 1904, 3, 18,\n  0x0A96, 1905, 3, 7,\n  0x0536, 1906, 2, 24,\n  0x0AB5, 1907, 2, 13,\n  0x0DAA, 1908, 2, 3,\n  0x0BA4, 1909, 1, 23,\n  0x0B49, 1910, 1, 12,\n  0x0A93, 1911, 1, 1,\n  0x052B, 1911, 12, 21,\n  0x0A57, 1912, 12, 9,\n  0x04B6, 1913, 11, 29,\n  0x0AB5, 1914, 11, 18,\n  0x05AA, 1915, 11, 8,\n  0x0D55, 1916, 10, 27,\n  0x0D2A, 1917, 10, 17,\n  0x0A56, 1918, 10, 6,\n  0x04AE, 1919, 9, 25,\n  0x095D, 1920, 9, 13,\n  0x02EC, 1921, 9, 3,\n  0x06D5, 1922, 8, 23,\n  0x06AA, 1923, 8, 13,\n  0x0555, 1924, 8, 1,\n  0x04AB, 1925, 7, 21,\n  0x095B, 1926, 7, 10,\n  0x02BA, 1927, 6, 30,\n  0x0575, 1928, 6, 18,\n  0x0BB2, 1929, 6, 8,\n  0x0764, 1930, 5, 29,\n  0x0749, 1931, 5, 18,\n  0x0655, 1932, 5, 6,\n  0x02AB, 1933, 4, 25,\n  0x055B, 1934, 4, 14,\n  0x0ADA, 1935, 4, 4,\n  0x06D4, 1936, 3, 24,\n  0x0EC9, 1937, 3, 13,\n  0x0D92, 1938, 3, 3,\n  0x0D25, 1939, 2, 20,\n  0x0A4D, 1940, 2, 9,\n  0x02AD, 1941, 1, 28,\n  0x056D, 1942, 1, 17,\n  0x0B6A, 1943, 1, 7,\n  0x0B52, 1943, 12, 28,\n  0x0AA5, 1944, 12, 16,\n  0x0A4B, 1945, 12, 5,\n  0x0497, 1946, 11, 24,\n  0x0937, 1947, 11, 13,\n  0x02B6, 1948, 11, 2,\n  0x0575, 1949, 10, 22,\n  0x0D6A, 1950, 10, 12,\n  0x0D52, 1951, 10, 2,\n  0x0A96, 1952, 9, 20,\n  0x092D, 1953, 9, 9,\n  0x025D, 1954, 8, 29,\n  0x04DD, 1955, 8, 18,\n  0x0ADA, 1956, 8, 7,\n  0x05D4, 1957, 7, 28,\n  0x0DA9, 1958, 7, 17,\n  0x0D52, 1959, 7, 7,\n  0x0AAA, 1960, 6, 25,\n  0x04D6, 1961, 6, 14,\n  0x09B6, 1962, 6, 3,\n  0x0374, 1963, 5, 24,\n  0x0769, 1964, 5, 12,\n  0x0752, 1965, 5, 2,\n  0x06A5, 1966, 4, 21,\n  0x054B, 1967, 4, 10,\n  0x0AAB, 1968, 3, 29,\n  0x055A, 1969, 3, 19,\n  0x0AD5, 1970, 3, 8,\n  0x0DD2, 1971, 2, 26,\n  0x0DA4, 1972, 2, 16,\n  0x0D49, 1973, 2, 4,\n  0x0A95, 1974, 1, 24,\n  0x052D, 1975, 1, 13,\n  0x0A5D, 1976, 1, 2,\n  0x055A, 1976, 12, 22,\n  0x0AD5, 1977, 12, 11,\n  0x06AA, 1978, 12, 1,\n  0x0695, 1979, 11, 20,\n  0x052B, 1980, 11, 8,\n  0x0A57, 1981, 10, 28,\n  0x04AE, 1982, 10, 18,\n  0x0976, 1983, 10, 7,\n  0x056C, 1984, 9, 26,\n  0x0B55, 1985, 9, 15,\n  0x0AAA, 1986, 9, 5,\n  0x0A55, 1987, 8, 25,\n  0x04AD, 1988, 8, 13,\n  0x095D, 1989, 8, 2,\n  0x02DA, 1990, 7, 23,\n  0x05D9, 1991, 7, 12,\n  0x0DB2, 1992, 7, 1,\n  0x0BA4, 1993, 6, 21,\n  0x0B4A, 1994, 6, 10,\n  0x0A55, 1995, 5, 30,\n  0x02B5, 1996, 5, 18,\n  0x0575, 1997, 5, 7,\n  0x0B6A, 1998, 4, 27,\n  0x0BD2, 1999, 4, 17,\n  0x0BC4, 2000, 4, 6,\n  0x0B89, 2001, 3, 26,\n  0x0A95, 2002, 3, 15,\n  0x052D, 2003, 3, 4,\n  0x05AD, 2004, 2, 21,\n  0x0B6A, 2005, 2, 10,\n  0x06D4, 2006, 1, 31,\n  0x0DC9, 2007, 1, 20,\n  0x0D92, 2008, 1, 10,\n  0x0AA6, 2008, 12, 29,\n  0x0956, 2009, 12, 18,\n  0x02AE, 2010, 12, 7,\n  0x056D, 2011, 11, 26,\n  0x036A, 2012, 11, 15,\n  0x0B55, 2013, 11, 4,\n  0x0AAA, 2014, 10, 25,\n  0x094D, 2015, 10, 14,\n  0x049D, 2016, 10, 2,\n  0x095D, 2017, 9, 21,\n  0x02BA, 2018, 9, 11,\n  0x05B5, 2019, 8, 31,\n  0x05AA, 2020, 8, 20,\n  0x0D55, 2021, 8, 9,\n  0x0A9A, 2022, 7, 30,\n  0x092E, 2023, 7, 19,\n  0x026E, 2024, 7, 7,\n  0x055D, 2025, 6, 26,\n  0x0ADA, 2026, 6, 16,\n  0x06D4, 2027, 6, 6,\n  0x06A5, 2028, 5, 25,\n  0x054B, 2029, 5, 14,\n  0x0A97, 2030, 5, 3,\n  0x054E, 2031, 4, 23,\n  0x0AAE, 2032, 4, 11,\n  0x05AC, 2033, 4, 1,\n  0x0BA9, 2034, 3, 21,\n  0x0D92, 2035, 3, 11,\n  0x0B25, 2036, 2, 28,\n  0x064B, 2037, 2, 16,\n  0x0CAB, 2038, 2, 5,\n  0x055A, 2039, 1, 26,\n  0x0B55, 2040, 1, 15,\n  0x06D2, 2041, 1, 4,\n  0x0EA5, 2041, 12, 24,\n  0x0E4A, 2042, 12, 14,\n  0x0A95, 2043, 12, 3,\n  0x052D, 2044, 11, 21,\n  0x0AAD, 2045, 11, 10,\n  0x036C, 2046, 10, 31,\n  0x0759, 2047, 10, 20,\n  0x06D2, 2048, 10, 9,\n  0x0695, 2049, 9, 28,\n  0x052D, 2050, 9, 17,\n  0x0A5B, 2051, 9, 6,\n  0x04BA, 2052, 8, 26,\n  0x09BA, 2053, 8, 15,\n  0x03B4, 2054, 8, 5,\n  0x0B69, 2055, 7, 25,\n  0x0B52, 2056, 7, 14,\n  0x0AA6, 2057, 7, 3,\n  0x04B6, 2058, 6, 22,\n  0x096D, 2059, 6, 11,\n  0x02EC, 2060, 5, 31,\n  0x06D9, 2061, 5, 20,\n  0x0EB2, 2062, 5, 10,\n  0x0D54, 2063, 4, 30,\n  0x0D2A, 2064, 4, 18,\n  0x0A56, 2065, 4, 7,\n  0x04AE, 2066, 3, 27,\n  0x096D, 2067, 3, 16,\n  0x0D6A, 2068, 3, 5,\n  0x0B54, 2069, 2, 23,\n  0x0B29, 2070, 2, 12,\n  0x0A93, 2071, 2, 1,\n  0x052B, 2072, 1, 21,\n  0x0A57, 2073, 1, 9,\n  0x0536, 2073, 12, 30,\n  0x0AB5, 2074, 12, 19,\n  0x06AA, 2075, 12, 9,\n  0x0E93, 2076, 11, 27,\n  0, 2077, 11, 17\n];\n\n// Initialize the HijriYearInfo array from raw data\nconst HIJRI_YEAR_INFO: HijriYearInfo[] = [];\nfor (let i = 0; i < RAW_DATA.length / 4; i++) {\n  HIJRI_YEAR_INFO.push({\n    hijriMonthsLengthFlags: RAW_DATA[i * 4],\n    gregorianDate: new Date(Date.UTC(RAW_DATA[i * 4 + 1], RAW_DATA[i * 4 + 2] - 1, RAW_DATA[i * 4 + 3]))\n  });\n}\n\n// Min/Max supported dates\nconst MIN_DATE = new Date(Date.UTC(1900, 3, 30));\nconst MAX_DATE = new Date(Date.UTC(2077, 10, 16, 23, 59, 59, 999));\n\nexport class UmmAlQuraCalendarUtil {\n  \n  private static checkDateRange(date: Date): void {\n    const time = date.getTime();\n    if (time < MIN_DATE.getTime() || time > MAX_DATE.getTime()) {\n      throw new RangeError(\n        `Date is out of range. Supported range: ${MIN_DATE.toISOString()} to ${MAX_DATE.toISOString()}`\n      );\n    }\n  }\n\n  private static checkYearRange(year: number): void {\n    if (year < MIN_CALENDAR_YEAR || year > MAX_CALENDAR_YEAR) {\n      throw new RangeError(\n        `Year ${year} is out of range. Supported range: ${MIN_CALENDAR_YEAR} to ${MAX_CALENDAR_YEAR}`\n      );\n    }\n  }\n\n  private static checkYearMonthRange(year: number, month: number): void {\n    UmmAlQuraCalendarUtil.checkYearRange(year);\n    if (month < 1 || month > 12) {\n      throw new RangeError(`Month ${month} is out of range. Must be between 1 and 12.`);\n    }\n  }\n\n  static getDaysInMonth(year: number, month: number): number {\n    UmmAlQuraCalendarUtil.checkYearMonthRange(year, month);\n    const flags = HIJRI_YEAR_INFO[year - MIN_CALENDAR_YEAR].hijriMonthsLengthFlags;\n    return (flags & (1 << (month - 1))) === 0 ? 29 : 30;\n  }\n\n\n\n  static gregorianToHijri(date: Date): HijriDate {\n    UmmAlQuraCalendarUtil.checkDateRange(date);\n    \n    // Create a normalized date to avoid timezone issues\n    // Use the date as-is without UTC conversion to preserve local date values\n    const normalizedDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n    const time = normalizedDate.getTime();\n    \n    const minTime = MIN_DATE.getTime();\n    \n    let index = Math.floor((time - minTime) / MS_PER_DAY / 355);\n    \n    while (index < HIJRI_YEAR_INFO.length - 1 && \n           time >= HIJRI_YEAR_INFO[index + 1].gregorianDate.getTime()) {\n      index++;\n    }\n    \n    const yearStartTime = HIJRI_YEAR_INFO[index].gregorianDate.getTime();\n    let nDays = Math.floor((time - yearStartTime) / MS_PER_DAY);\n    \n    const hijriYear = index + MIN_CALENDAR_YEAR;\n    let hijriMonth = 1;\n    let hijriDay = 1;\n    \n    let flags = HIJRI_YEAR_INFO[index].hijriMonthsLengthFlags;\n    let daysPerThisMonth = 29 + (flags & 1);\n    \n    while (nDays >= daysPerThisMonth) {\n      nDays -= daysPerThisMonth;\n      flags = flags >> 1;\n      daysPerThisMonth = 29 + (flags & 1);\n      hijriMonth++;\n    }\n    \n    hijriDay += nDays;\n    \n    return {\n      year: hijriYear,\n      month: hijriMonth,\n      day: hijriDay\n    };\n  }\n\n  static hijriToGregorian(hijriYear: number, hijriMonth: number, hijriDay: number): Date {\n    UmmAlQuraCalendarUtil.checkYearMonthRange(hijriYear, hijriMonth);\n    \n    const daysInMonth = UmmAlQuraCalendarUtil.getDaysInMonth(hijriYear, hijriMonth);\n    if (hijriDay < 1 || hijriDay > daysInMonth) {\n      throw new RangeError(\n        `Day ${hijriDay} is out of range for month ${hijriMonth}. Must be between 1 and ${daysInMonth}.`\n      );\n    }\n    \n    const index = hijriYear - MIN_CALENDAR_YEAR;\n    const yearStart = HIJRI_YEAR_INFO[index].gregorianDate;\n    let flags = HIJRI_YEAR_INFO[index].hijriMonthsLengthFlags;\n    \n    let nDays = hijriDay - 1;\n    \n    for (let m = 1; m < hijriMonth; m++) {\n      nDays += 29 + (flags & 0x1);\n      flags = flags >> 1;\n    }\n    \n    return new Date(yearStart.getTime() + nDays * MS_PER_DAY);\n  }\n\n}","import { Injectable } from '@angular/core';\nimport { DayInfo } from '../_interfaces/calendar.model';\nimport { DateFormattingUtil } from '../_utils/date-formatting.util';\nimport { UmmAlQuraCalendarUtil } from '../_utils/umm-al-qura-calendar.util';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DateUtilitiesService {\n  private monthDataCache = new Map<string, DayInfo[]>();\n  private readonly MAX_CACHE_SIZE = 100;\n\n  constructor() {}\n\n  parseDate(dateStr: string): Date | null {\n    return DateFormattingUtil.parseDate(dateStr);\n  }\n\n  formatDate(date: Date): string {\n    return DateFormattingUtil.formatDate(date);\n  }\n\n  private getDayShortHand(date: Date): string {\n    return DateFormattingUtil.getDayShortHand(date);\n  }\n\n  private generateDatesForHijriMonth(hijriYear: number, hijriMonth: number): DayInfo[] {\n    const daysInMonth = UmmAlQuraCalendarUtil.getDaysInMonth(hijriYear, hijriMonth);\n    const monthArray: DayInfo[] = [];\n    \n    for (let day = 1; day <= daysInMonth; day++) {\n      const gregorianDate = UmmAlQuraCalendarUtil.hijriToGregorian(hijriYear, hijriMonth, day);\n      \n      monthArray.push({\n        gD: this.formatDate(gregorianDate),\n        uD: `${day.toString().padStart(2, '0')}/${hijriMonth.toString().padStart(2, '0')}/${hijriYear}`,\n        dN: this.getDayShortHand(gregorianDate),\n        uC: daysInMonth,\n      });\n    }\n    \n    return monthArray;\n  }\n\n  private generateDatesForGregorianMonth(gregorianYear: number, gregorianMonth: number): DayInfo[] {\n    const daysInMonth = new Date(gregorianYear, gregorianMonth, 0).getDate();\n    const monthArray: DayInfo[] = [];\n    \n    for (let day = 1; day <= daysInMonth; day++) {\n      const gregorianDate = new Date(gregorianYear, gregorianMonth - 1, day);\n      const hijriDate = UmmAlQuraCalendarUtil.gregorianToHijri(gregorianDate);\n      \n      monthArray.push({\n        gD: this.formatDate(gregorianDate),\n        uD: `${hijriDate.day.toString().padStart(2, '0')}/${hijriDate.month.toString().padStart(2, '0')}/${hijriDate.year}`,\n        dN: this.getDayShortHand(gregorianDate),\n        uC: UmmAlQuraCalendarUtil.getDaysInMonth(hijriDate.year, hijriDate.month),\n      });\n    }\n    \n    return monthArray;\n  }\n\n  convertDate(dateStr: string, isGregorian: boolean): DayInfo | null {\n    if (!dateStr) return null;\n\n    try {\n      if (isGregorian) {\n        return this.convertGregorianDate(dateStr);\n      } else {\n        return this.convertHijriDate(dateStr);\n      }\n    } catch (error) {\n      return null;\n    }\n  }\n\n  private convertGregorianDate(dateStr: string): DayInfo | null {\n    const gregorianDate = this.parseDate(dateStr);\n    if (!gregorianDate) return null;\n\n    try {\n      const hijriDate = UmmAlQuraCalendarUtil.gregorianToHijri(gregorianDate);\n      \n      return {\n        gD: this.formatDate(gregorianDate),\n        uD: `${hijriDate.day.toString().padStart(2, '0')}/${hijriDate.month.toString().padStart(2, '0')}/${hijriDate.year}`,\n        dN: this.getDayShortHand(gregorianDate),\n        uC: UmmAlQuraCalendarUtil.getDaysInMonth(hijriDate.year, hijriDate.month),\n      };\n    } catch (error) {\n      return null;\n    }\n  }\n\n  private convertHijriDate(dateStr: string): DayInfo | null {\n    const [day, month, year] = dateStr.split('/').map(Number);\n    if (isNaN(day) || isNaN(month) || isNaN(year)) return null;\n\n    try {\n      const gregorianDate = UmmAlQuraCalendarUtil.hijriToGregorian(year, month, day);\n      \n      return {\n        gD: this.formatDate(gregorianDate),\n        uD: dateStr,\n        dN: this.getDayShortHand(gregorianDate),\n        uC: UmmAlQuraCalendarUtil.getDaysInMonth(year, month),\n      };\n    } catch (error) {\n      return null;\n    }\n  }\n\n  private setCachedMonthData(key: string, data: DayInfo[]): void {\n    if (this.monthDataCache.size >= this.MAX_CACHE_SIZE) {\n      // Remove oldest entry (simple LRU-like behavior)\n      const firstKey = this.monthDataCache.keys().next().value;\n      this.monthDataCache.delete(firstKey);\n    }\n    this.monthDataCache.set(key, data);\n  }\n\n  getMonthData(inputDate: string, type: string): DayInfo[] | null {\n    if (!inputDate || !type) return null;\n    \n    const dateParts = inputDate.split('/');\n    if (dateParts.length !== 3) return null;\n    \n    const [day, month, year] = dateParts.map(Number);\n    if (isNaN(day) || isNaN(month) || isNaN(year)) return null;\n    \n    const isGregorian = type === 'greg';\n    \n    // Use cache for month data\n    const cacheKey = `${year}-${month}-${type}`;\n    const cachedData = this.monthDataCache.get(cacheKey);\n    if (cachedData) {\n      return cachedData;\n    }\n    \n    try {\n      const monthData = isGregorian \n        ? this.generateDatesForGregorianMonth(year, month)\n        : this.generateDatesForHijriMonth(year, month);\n      \n      if (monthData && monthData.length > 0) {\n        this.setCachedMonthData(cacheKey, monthData);\n      }\n      \n      return monthData;\n    } catch (error) {\n      return null;\n    }\n  }\n\n  checkPastOrFuture(inputDate: string, targetDate: Date): 'Past' | 'Today' | 'Future' | null {\n    return DateFormattingUtil.compareDateToTarget(inputDate, targetDate);\n  }\n}\n","import { Directive, ElementRef, Input, OnInit, OnDestroy } from '@angular/core';\n\n@Directive({\n  selector: '[fadeInAnimation]',\n  standalone: true\n})\nexport class FadeInAnimationDirective implements OnInit, OnDestroy {\n  @Input() fadeInAnimation: boolean = true; // Controls whether animations should run\n  @Input() animationDelay: number = 0;\n  @Input() animationType: 'fade' | 'slideUp' | 'scale' | 'slideLeft' = 'fade';\n  @Input() staggerDelay: number = 0;\n\n  constructor(private el: ElementRef) {}\n\n  ngOnInit() {\n    if (this.fadeInAnimation) {\n      this.setupInitialState();\n      this.startAnimation();\n    }\n  }\n\n  ngOnDestroy() {\n    if (this.el.nativeElement) {\n      this.el.nativeElement.style.transition = '';\n    }\n  }\n\n  private setupInitialState() {\n    const element = this.el.nativeElement;\n        switch (this.animationType) {\n      case 'fade':\n        element.style.opacity = '0';\n        break;\n      case 'slideUp':\n        element.style.opacity = '0';\n        element.style.transform = 'translateY(20px)';\n        break;\n      case 'scale':\n        element.style.opacity = '0';\n        element.style.transform = 'scale(0.8)';\n        break;\n      case 'slideLeft':\n        element.style.opacity = '0';\n        element.style.transform = 'translateX(-20px)';\n        break;\n    }\n    \n    element.style.transition = 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)';\n  }\n\n  private startAnimation() {\n    const element = this.el.nativeElement;\n    const totalDelay = this.animationDelay + this.staggerDelay;\n    \n    setTimeout(() => {\n\n      element.style.opacity = '1';\n      element.style.transform = 'translateY(0) translateX(0) scale(1)';\n      \n      setTimeout(() => {\n        element.style.transition = '';\n      }, 300);\n    }, totalDelay);\n  }\n}","import { CALENDAR_CONSTANTS } from '../_constants/calendar.constants';\n\nexport class NumberConversionUtil {\n  private static readonly ARABIC_NUMBERS = [\n    '\\u0660', // ٠\n    '\\u0661', // ١\n    '\\u0662', // ٢\n    '\\u0663', // ٣\n    '\\u0664', // ٤\n    '\\u0665', // ٥\n    '\\u0666', // ٦\n    '\\u0667', // ٧\n    '\\u0668', // ٨\n    '\\u0669', // ٩\n  ];\n\n  private static readonly ENGLISH_NUMBERS = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];\n\n\n  // Converts English numbers to Arabic equivalent\n  static toArabicNumerals(englishNum: number | string): string {\n    if (!englishNum) return String(englishNum);\n\n    const numStr = String(englishNum);\n    return numStr.replace(/[0-9]/g, (digit) => {\n      return this.ARABIC_NUMBERS[Number(digit)] || digit;\n    });\n  }\n\n  // Converts Arabic numbers to English equivalent\n  static toEnglishNumerals(arabicNum: string): string {\n    return arabicNum.replace(/[٠١٢٣٤٥٦٧٨٩]/g, (digit: string) => {\n      return String(digit.charCodeAt(0) - CALENDAR_CONSTANTS.ARABIC_ZERO_UNICODE);\n    });\n  }\n\n\n  // Converts Arabic numbers to English number for arithmetic operations\n  static arabicToNumber(arabicNum: string): number {\n    const converted = this.toEnglishNumerals(arabicNum);\n    return Number(converted);\n  }\n\n}","import {\n  Component,\n  Input,\n  OnInit,\n  Output,\n  EventEmitter,\n  OnChanges,\n  SimpleChanges,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  TrackByFunction,\n} from '@angular/core';\nimport { FormBuilder, FormGroup, FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { StylesConfig } from '../_interfaces/styles-config.model';\nimport { FadeInAnimationDirective } from './_directives/fade-in-animation.directive';\nimport { TodayDate, DayInfo } from '../_interfaces/calendar.model';\nimport { DateUtilitiesService } from '../_services/date-utilities.service';\nimport * as themesConfig from '../themes/themes.json';\nimport { \n  umAlQura_MONTHS, \n  GREGORIAN_MONTHS, \n  WEEKDAYS_EN, \n  WEEKDAYS_AR, \n  CALENDAR_CONSTANTS, \n  CALENDAR_MODES,\n  MonthData,\n  CalendarMode \n} from '../_constants/calendar.constants';\nimport { NumberConversionUtil } from '../_utils/number-conversion.util';\nimport { UmmAlQuraCalendarUtil } from '../_utils/umm-al-qura-calendar.util';\n\n@Component({\n  selector: 'hijri-gregorian-datepicker',\n  templateUrl: './hijri-gregorian-datepicker.component.html',\n  styleUrls: ['./hijri-gregorian-datepicker.component.scss'],\n  standalone: true,\n  imports: [FormsModule, ReactiveFormsModule, CommonModule, FadeInAnimationDirective],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class HijriGregorianDatepickerComponent implements OnInit, OnChanges {\n  /// Inputs\n  @Input() canChangeMode: boolean = true;\n  @Input() futureValidation: boolean = true;\n  @Input() pastDateValidation: boolean = false;\n  @Input() hideYearPicker: boolean = false;\n  @Input() hideMonthPicker: boolean = false;\n  @Input() disableDayPicker: boolean = false;\n  @Input() showNavigationArrows: boolean = true;\n  @Input() enableAnimations: boolean = true;\n  @Input() multiple: boolean = false;\n  @Input() isRequired: boolean = false;\n  @Input() showConfirmButton: boolean = true;\n  @Input() mode: CalendarMode = CALENDAR_MODES.GREGORIAN;\n  @Input() dir: string = 'ltr';\n  @Input() locale: string = 'en';\n  @Input() submitTextButton: string = 'Confirm';\n  @Input() futureValidationMessageEn: string;\n  @Input() futureValidationMessageAr: string;\n  @Input() pastDateValidationMessageEn: string;\n  @Input() pastDateValidationMessageAr: string;\n  @Input() theme?: string = '';\n  @Input() pastYearsLimit: number = 90;\n  @Input() futureYearsLimit: number = 0;\n  @Input() minDate?: string; // Format: 'dd/mm/yyyy'\n  @Input() maxDate?: string; // Format: 'dd/mm/yyyy'\n  @Input() disabledDates?: string[]; // Array of dates in format: 'dd/mm/yyyy'\n  @Input() rangeSelection: boolean = false; // Enable date range selection\n  @Input() initialDate?: string; // Initial date to open calendar to (format: 'dd/mm/yyyy')\n  @Input() styles?: StylesConfig = {};\n  /// Outputs\n  @Output() onSubmit = new EventEmitter<DayInfo | DayInfo[]>();\n  @Output() onDaySelect = new EventEmitter<DayInfo>();\n  @Output() onMonthChange = new EventEmitter<number | null>();\n  @Output() onYearChange = new EventEmitter<number | null>();\n  /// Variables\n  readonly umAlQuraMonths = umAlQura_MONTHS;\n  readonly gregMonths = GREGORIAN_MONTHS;\n  years: number[] = [];\n  weeks: (DayInfo | null)[][] = [];\n  months: MonthData[] = [];\n  selectedRange: { start: DayInfo | null; end: DayInfo | null } = { start: null, end: null };\n  readonly weekdaysEn = WEEKDAYS_EN;\n  readonly weekdaysAr = WEEKDAYS_AR;\n  todaysDate: TodayDate = {};\n  selectedDay: DayInfo | undefined;\n  periodForm: FormGroup<{\n    year: FormControl<number | null>;\n    month: FormControl<number | null>;\n  }>;\n  multipleSelectedDates: DayInfo[] = [];\n  themes: { default: Array<{ name: string; stylesConfig: StylesConfig }> } | null = null;\n  \n  // View states\n  currentView: 'years' | 'months' | 'days' = 'days';\n\n  // Validation states\n  private futureValidationActive: boolean = false;\n  private pastDateValidationActive: boolean = false;\n\n  // TrackBy functions for performance optimization\n  trackByYear: TrackByFunction<number> = (index: number, year: number): number => year;\n  trackByMonth: TrackByFunction<MonthData> = (index: number, month: MonthData): number => month.value;\n  trackByWeekday: TrackByFunction<string> = (index: number, day: string): string => day;\n  trackByWeek: TrackByFunction<(DayInfo | null)[]> = (index: number, week: (DayInfo | null)[]): string => `week-${index}`;\n  trackByDay: TrackByFunction<DayInfo | null> = (index: number, day: DayInfo | null): string => day?.gD || `empty-${index}`;\n    \n  constructor(\n    public formBuilder: FormBuilder,\n    private _dateUtilsService: DateUtilitiesService,\n    private cdr: ChangeDetectorRef\n  ) { }\n\n  /// Check if future validation message should be displayed\n  showFutureValidationMessage(): boolean {\n    return this.futureValidation && this.futureValidationActive;\n  }\n\n  /// Check if past date validation message should be displayed  \n  showPastDateValidationMessage(): boolean {\n    return this.pastDateValidation && this.pastDateValidationActive;\n  }\n\n  ngOnInit(): void {\n    this.initTheme();\n    this.initializeForm();\n    this.getTodaysDateInfo();\n    this.initializeYearsAndMonths();\n    this.updateCalendarWeeks();\n    this.initializeView();\n    // Initialize validation message states\n    this.futureValidationActive = false;\n    this.pastDateValidationActive = false;\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['mode'] && !changes['mode'].isFirstChange()) {\n      this.changeCalendarMode();\n    }\n    \n    if (changes['initialDate'] && !changes['initialDate'].isFirstChange()) {\n      this.initializeYearsAndMonths();\n      this.updateCalendarWeeks();\n    }\n  }\n\n  initTheme(): void {\n    if (this.theme !== '') {\n      // Handle JSON import - check if it has a default property or use direct import\n      if ('default' in themesConfig) {\n        this.themes = themesConfig as { default: Array<{ name: string; stylesConfig: StylesConfig }> };\n      } else {\n        this.themes = { default: themesConfig as unknown as Array<{ name: string; stylesConfig: StylesConfig }> };\n      }\n      \n      for (const themeItem of this.themes['default']) {\n        if (themeItem.name === this.theme) {\n          this.styles = themeItem.stylesConfig;\n          break;\n        }\n      }\n    }\n  }\n\n  /// Initialize form control for month and year select\n  initializeForm(): void {\n    this.periodForm = this.formBuilder.group({\n      year: new FormControl<number | null>({ value: null, disabled: this.hideYearPicker }),\n      month: new FormControl<number | null>({ value: null, disabled: this.hideMonthPicker }),\n    });\n  }\n\n  // Initialize years and months for calendar\n  initializeYearsAndMonths(): void {\n    this.years = [];\n    this.months = [];\n    \n    if (this.mode === CALENDAR_MODES.GREGORIAN) {\n      this.initializeGregorianYearsAndMonths();\n    } else {\n      this.initializeumAlQuraYearsAndMonths();\n    }\n    \n    this.setCurrentYearInForm();\n    this.setCurrentMonthInForm();\n  }\n\n  private initializeGregorianYearsAndMonths(): void {\n    const currentYear = this.getCurrentYear();\n    this.years = this.generateYearsArray(currentYear);\n    this.months = this.gregMonths;\n  }\n\n  private initializeumAlQuraYearsAndMonths(): void {\n    const currentYear = this.getCurrentYear();\n    this.years = this.generateYearsArray(currentYear);\n    this.months = this.umAlQuraMonths;\n  }\n\n  private getCurrentYear(): number {\n    const dateString = this.getEffectiveDate();\n    return Number(dateString?.split('/')[2]);\n  }\n\n  private getEffectiveDate(): string | undefined {\n    // Use initialDate if provided and valid, otherwise use today's date\n    if (this.initialDate && this.isValidInitialDate(this.initialDate)) {\n      if (this.mode === CALENDAR_MODES.GREGORIAN) {\n        return this.initialDate;\n      } else {\n        // Convert initialDate to Hijri for Hijri mode\n        const convertedDate = this._dateUtilsService.convertDate(this.initialDate, true);\n        return convertedDate?.uD;\n      }\n    }\n    \n    // Fallback to today's date\n    return this.mode === CALENDAR_MODES.GREGORIAN \n      ? this.todaysDate.gregorian \n      : this.todaysDate.umAlQura;\n  }\n\n  private isValidInitialDate(dateStr: string): boolean {\n    // Check if the date string is in valid format\n    const dateRegex = /^\\d{2}\\/\\d{2}\\/\\d{4}$/;\n    if (!dateRegex.test(dateStr)) {\n      return false;\n    }\n\n    // Parse the date to ensure it's a valid date\n    const parsedDate = this._dateUtilsService.parseDate(dateStr);\n    if (!parsedDate) {\n      return false;\n    }\n\n    // Check against minDate and maxDate constraints\n    if (this.minDate) {\n      const minDateParsed = this._dateUtilsService.parseDate(this.minDate);\n      if (minDateParsed && parsedDate < minDateParsed) {\n        return false;\n      }\n    }\n\n    if (this.maxDate) {\n      const maxDateParsed = this._dateUtilsService.parseDate(this.maxDate);\n      if (maxDateParsed && parsedDate > maxDateParsed) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  private generateYearsArray(currentYear: number): number[] {\n    const years: number[] = [];\n    \n    // Define calendar system limits\n    const isGregorian = this.mode === CALENDAR_MODES.GREGORIAN;\n    const minYear = isGregorian ? 1901 : 1318;\n    const maxYear = isGregorian ? 2077 : 1500;\n    \n    // Calculate effective past and future limits based on calendar bounds\n    const maxPastYears = Math.min(this.pastYearsLimit, currentYear - minYear);\n    const maxFutureYears = Math.min(this.futureYearsLimit, maxYear - currentYear);\n    \n    // Add past years (including current year)\n    for (let i = 0; i <= maxPastYears; i++) {\n      const year = currentYear - i;\n      if (year >= minYear) {\n        years.push(year);\n      }\n    }\n    \n    // Add future years (excluding current year to avoid duplication)\n    for (let i = 1; i <= maxFutureYears; i++) {\n      const year = currentYear + i;\n      if (year <= maxYear) {\n        years.push(year);\n      }\n    }\n    \n    // Sort years in descending order (latest first)\n    return years.sort((a, b) => b - a);\n  }\n\n  private setCurrentYearInForm(): void {\n    const currentYear = this.getCurrentYear();\n    const yearMatch = this.years.find(year => year === currentYear);\n    if (yearMatch) {\n      this.periodForm.controls.year.setValue(yearMatch);\n    }\n  }\n\n  private setCurrentMonthInForm(): void {\n    const dateString = this.getEffectiveDate();\n    const currentMonth = Number(dateString?.split('/')[1]);\n    const monthMatch = this.months.find(month => month.value === currentMonth);\n    if (monthMatch) {\n      this.periodForm.controls.month.setValue(monthMatch.value);\n    }\n  }\n\n  /// On change event of years and months\n  onPeriodChange(type: 'year' | 'month'): void {\n    this.emitPeriodChangeEvent(type);\n    this.updateCalendarWeeks();\n    \n    // Reset validation messages when period changes\n    this.futureValidationActive = false;\n    this.pastDateValidationActive = false;\n  }\n\n  private emitPeriodChangeEvent(type: 'year' | 'month'): void {\n    if (type === 'year') {\n      this.onYearChange.emit(this.periodForm.controls.year.value);\n    } else {\n      this.onMonthChange.emit(this.periodForm.controls.month.value);\n    }\n  }\n\n  private updateCalendarWeeks(): void {\n    const formattedDate = this.buildDateString();\n    const days = this._dateUtilsService.getMonthData(formattedDate, this.mode);\n    this.weeks = this.generateWeeksArray(days);\n    this.markInitialDateAsSelected();\n  }\n\n  private markInitialDateAsSelected(): void {\n    if (!this.initialDate || this.selectedDay) return; // Don't auto-select if user already selected something\n    \n    // Find the initial date in the current weeks and mark it as selected\n    for (const week of this.weeks) {\n      for (const day of week) {\n        if (day && this.checkInitialDate(day)) {\n          day.selected = true;\n          this.selectedDay = day;\n          this.onDaySelect.emit(day);\n          this.cdr.detectChanges();\n          return;\n        }\n      }\n    }\n  }\n\n  private buildDateString(): string {\n    const day = '01';\n    const month = this.periodForm.controls.month.value;\n    const year = this.periodForm.controls.year.value;\n    return `${day}/${month}/${year}`;\n  }\n\n  /// Get todays(greg and umm al qura) date info\n  getTodaysDateInfo(): void {\n    try {\n      // Create today's date normalized to local timezone to avoid boundary issues\n      const today = new Date();\n      const normalizedToday = new Date(today.getFullYear(), today.getMonth(), today.getDate());\n      this.todaysDate.gregorian = this._dateUtilsService.formatDate(normalizedToday);\n      \n      // Special handling for today's date to ensure accuracy\n      const hijriConversion = this._dateUtilsService.convertDate(\n        this.todaysDate.gregorian,\n        true\n      );\n      \n      if (hijriConversion?.uD) {\n        // Apply +1 day correction for today's date only (known calendar offset issue)\n        const hijriParts = hijriConversion.uD.split('/');\n        let day = parseInt(hijriParts[0]);\n        let month = parseInt(hijriParts[1]); \n        let year = parseInt(hijriParts[2]);\n        \n        // Add one day for today's date accuracy\n        day += 1;\n        \n        // Handle month overflow\n        const daysInMonth = this.getHijriDaysInMonth(year, month);\n        if (day > daysInMonth) {\n          day = 1;\n          month += 1;\n          if (month > 12) {\n            month = 1;\n            year += 1;\n          }\n        }\n        \n        this.todaysDate.umAlQura = `${day.toString().padStart(2, '0')}/${month.toString().padStart(2, '0')}/${year}`;\n      } else {\n        this.todaysDate.umAlQura = hijriConversion?.uD || '';\n      }\n      \n      const dateToUse = this.mode === CALENDAR_MODES.GREGORIAN\n        ? this.todaysDate.gregorian\n        : this.todaysDate.umAlQura;\n        \n      if (dateToUse) {\n        this.generateMonthData(dateToUse);\n      }\n    } catch (error) {\n      // Fallback to current date\n      this.todaysDate.gregorian = this._dateUtilsService.formatDate(new Date());\n    }\n  }\n\n  /// Generate month days from JSON\n  generateMonthData(date: string): void {\n    if (!date) return;\n    \n    const days = this._dateUtilsService.getMonthData(date, this.mode);\n    if (days && days.length > 0) {\n      this.weeks = this.generateWeeksArray(days);\n    }\n  }\n\n  /// Generate month weeks\n  generateWeeksArray(daysArray: DayInfo[]): (DayInfo | null)[][] {\n    if (!daysArray || daysArray.length === 0) {\n      return [[]];\n    }\n    \n    const firstDayName = daysArray[0]?.dN;\n    const startIndex = WEEKDAYS_EN.indexOf(firstDayName);\n    const weeks: (DayInfo | null)[][] = [[]];\n    let currentWeek = 0;\n    let currentDayIndex = startIndex;\n\n    daysArray?.forEach((day: DayInfo) => {\n      if (!weeks[currentWeek]) {\n        weeks[currentWeek] = [];\n      }\n\n      weeks[currentWeek][currentDayIndex] = day;\n      currentDayIndex++;\n\n      if (currentDayIndex === CALENDAR_CONSTANTS.DAYS_IN_WEEK) {\n        currentDayIndex = 0;\n        currentWeek++;\n      }\n    });\n    weeks.forEach((week: (DayInfo | null)[]) => {\n      while (week.length < CALENDAR_CONSTANTS.DAYS_IN_WEEK) {\n        week.push(null);\n      }\n    });\n    return weeks;\n  }\n\n  /// Change calendar mode 'greg' or 'umAlQura'\n  changeCalendarMode(): void {\n    this.toggleCalendarMode();\n    \n    // Refresh today's date info after mode change to ensure correct highlighting\n    this.getTodaysDateInfo();\n    \n    this.initializeYearsAndMonths();\n    this.refreshCalendarData();\n    \n    // Reset validation messages when calendar mode changes\n    this.futureValidationActive = false;\n    this.pastDateValidationActive = false;\n  }\n\n  private toggleCalendarMode(): void {\n    this.mode = this.mode === CALENDAR_MODES.GREGORIAN \n      ? CALENDAR_MODES.umAlQura \n      : CALENDAR_MODES.GREGORIAN;\n  }\n\n  private refreshCalendarData(): void {\n    const formattedDate = this.buildDateString();\n    this.generateMonthData(formattedDate);\n  }\n\n  /// Navigate to previous or next month\n  navigateMonth(direction: 'previous' | 'next'): void {\n    const currentMonth = this.periodForm.controls.month.value;\n    const currentYear = this.periodForm.controls.year.value;\n    \n    if (!currentMonth || !currentYear) return;\n\n    let newMonth = currentMonth;\n    let newYear = currentYear;\n\n    if (direction === 'next') {\n      if (currentMonth === 12) {\n        newMonth = 1;\n        newYear = currentYear + 1;\n      } else {\n        newMonth = currentMonth + 1;\n      }\n    } else {\n      if (currentMonth === 1) {\n        newMonth = 12;\n        newYear = currentYear - 1;\n      } else {\n        newMonth = currentMonth - 1;\n      }\n    }\n\n    // Check if the new year is within calendar system limits\n    const isGregorian = this.mode === CALENDAR_MODES.GREGORIAN;\n    const minYear = isGregorian ? 1901 : 1318;\n    const maxYear = isGregorian ? 2077 : 1500;\n    \n    // Don't navigate beyond calendar system limits\n    if (newYear < minYear || newYear > maxYear) {\n      return;\n    }\n\n    // Check if the new year is within allowed range\n    const yearExists = this.years.includes(newYear);\n    if (!yearExists) {\n      // Update years array if needed\n      this.updateYearsRange(newYear);\n    }\n\n    // Update form controls\n    this.periodForm.controls.year.setValue(newYear);\n    this.periodForm.controls.month.setValue(newMonth);\n\n    // Update calendar display\n    this.updateCalendarWeeks();\n    \n    // Reset validation messages\n    this.futureValidationActive = false;\n    this.pastDateValidationActive = false;\n\n    // Emit events\n    this.onYearChange.emit(newYear);\n    this.onMonthChange.emit(newMonth);\n  }\n\n  /// Update years range if navigation goes beyond current range\n  private updateYearsRange(targetYear: number): void {\n    const isGregorian = this.mode === CALENDAR_MODES.GREGORIAN;\n    const minYear = isGregorian ? 1901 : 1318;\n    const maxYear = isGregorian ? 2077 : 1500;\n    \n    // Only add year if it's within calendar system limits\n    if (targetYear >= minYear && targetYear <= maxYear) {\n      if (!this.years.includes(targetYear)) {\n        this.years.push(targetYear);\n        this.years.sort((a, b) => b - a); // Keep descending order\n      }\n    }\n  }\n\n  /// Check if previous month navigation should be disabled\n  canNavigatePrevious(): boolean {\n    const currentMonth = this.periodForm.controls.month.value;\n    const currentYear = this.periodForm.controls.year.value;\n    \n    if (!currentMonth || !currentYear) return false;\n\n    const isGregorian = this.mode === CALENDAR_MODES.GREGORIAN;\n    const minYear = isGregorian ? 1901 : 1318;\n    \n    // Check if we're at the minimum year and first month\n    if (currentYear === minYear && currentMonth === 1) {\n      return false;\n    }\n    \n    return true;\n  }\n\n  /// Check if next month navigation should be disabled\n  canNavigateNext(): boolean {\n    const currentMonth = this.periodForm.controls.month.value;\n    const currentYear = this.periodForm.controls.year.value;\n    \n    if (!currentMonth || !currentYear) return false;\n\n    const isGregorian = this.mode === CALENDAR_MODES.GREGORIAN;\n    const maxYear = isGregorian ? 2077 : 1500;\n    \n    // Check if we're at the maximum year and last month\n    if (currentYear === maxYear && currentMonth === 12) {\n      return false;\n    }\n    \n    return true;\n  }\n\n  /// Navigate to month selection view\n  toggleMonthDropdown(): void {\n    this.currentView = 'months';\n  }\n\n  /// Navigate to year selection view\n  toggleYearDropdown(): void {\n    this.currentView = 'years';\n  }\n\n  /// Select a month from grid\n  selectMonth(monthValue: number): void {\n    this.periodForm.controls.month.setValue(monthValue);\n    this.currentView = 'days';\n    this.onPeriodChange('month');\n  }\n\n  /// Select a year from grid\n  selectYear(yearValue: number): void {\n    this.periodForm.controls.year.setValue(yearValue);\n    this.currentView = 'months';\n    this.onPeriodChange('year');\n  }\n\n  /// Get current month label for display\n  getCurrentMonthLabel(): string {\n    const currentMonth = this.periodForm.controls.month.value;\n    if (!currentMonth) return this.locale === 'ar' ? 'الشهر' : 'Month';\n    \n    const monthData = this.months.find(month => month.value === currentMonth);\n    if (!monthData) return this.locale === 'ar' ? 'الشهر' : 'Month';\n    \n    return this.locale === 'ar' ? monthData.labelAr : monthData.labelEn;\n  }\n\n  /// Get current year label for display\n  getCurrentYearLabel(): string {\n    const currentYear = this.periodForm.controls.year.value;\n    if (!currentYear) return this.locale === 'ar' ? 'السنة' : 'Year';\n    \n    return this.locale === 'ar' ? this.parseEnglish(currentYear) : currentYear.toString();\n  }\n\n\n  /// Handle clicks within the calendar layout\n  onCalendarClick(event: Event): void {\n    const target = event.target as HTMLElement;\n    \n    // Check if click is within the period selector or its dropdowns\n    const periodSelector = target.closest('.unified-period-selector');\n    const monthDropdown = target.closest('.month-dropdown');\n    const yearDropdown = target.closest('.year-dropdown');\n    const periodText = target.closest('.period-text');\n    \n    // If click is not in the period selector area or dropdowns, close dropdowns\n    if (!periodSelector && !monthDropdown && !yearDropdown && !periodText) {\n      // No longer needed for grid-based navigation\n    }\n  }\n\n  /// On day clicked handler\n  onDayClicked(day: DayInfo): void {\n    \n    if (day && day?.gD) {\n      // Check if date is disabled by any validation rule\n      if (this.isDateDisabled(day)) {\n        this.futureValidationActive = this.futureValidation && this.checkFutureValidation(day);\n        this.pastDateValidationActive = this.pastDateValidation && this.checkPastDateValidation(day);\n        return;\n      }\n      \n      this.futureValidationActive = false;\n      this.pastDateValidationActive = false;\n      \n      // Handle different selection modes\n      if (this.rangeSelection) {\n        this.handleRangeSelection(day);\n      } else {\n        this.markDaySelected(day);\n      }\n    }\n  }\n\n  /// Mark day as selected\n  markDaySelected(dayInfo: DayInfo): void {\n    if (dayInfo.selected) {\n      this.deselectDay(dayInfo);\n    } else {\n      this.selectDay(dayInfo);\n    }\n  }\n\n  private deselectDay(dayInfo: DayInfo): void {\n    dayInfo.selected = false;\n    this.multipleSelectedDates = this.multipleSelectedDates.filter(\n      (day) => day !== dayInfo\n    );\n    \n    if (!this.multiple) {\n      this.selectedDay = undefined;\n    }\n  }\n\n  private selectDay(dayInfo: DayInfo): void {\n    if (!this.multiple) {\n      this.handleSingleSelection(dayInfo);\n    } else {\n      this.handleMultipleSelection(dayInfo);\n    }\n  }\n\n  private handleSingleSelection(dayInfo: DayInfo): void {\n    this.clearAllSelections();\n    dayInfo.selected = true;\n    this.selectedDay = dayInfo;\n    this.multipleSelectedDates = [dayInfo];\n    this.onDaySelect.emit(dayInfo);\n  }\n\n  private handleMultipleSelection(dayInfo: DayInfo): void {\n    dayInfo.selected = true;\n    this.onDaySelect.emit(dayInfo);\n    \n    if (!this.multipleSelectedDates.includes(dayInfo)) {\n      this.multipleSelectedDates.push(dayInfo);\n    }\n  }\n\n  private clearAllSelections(): void {\n    this.weeks.forEach((week: (DayInfo | null)[]) => {\n      week.forEach((day: DayInfo | null) => {\n        if (day) {\n          day.selected = false;\n        }\n      });\n    });\n  }\n\n  /// Get all dates in the selected range (start, between, end)\n  private getAllDatesInRange(): DayInfo[] {\n    if (!this.selectedRange.start || !this.selectedRange.end) {\n      return [];\n    }\n\n    const allDatesInRange: DayInfo[] = [];\n    \n    // Add start date\n    allDatesInRange.push(this.selectedRange.start);\n    \n    // Add all dates between start and end\n    this.weeks.forEach((week: (DayInfo | null)[]) => {\n      week.forEach((day: DayInfo | null) => {\n        if (day && day.isInRange) {\n          allDatesInRange.push(day);\n        }\n      });\n    });\n    \n    // Add end date (if different from start)\n    if (this.selectedRange.start !== this.selectedRange.end) {\n      allDatesInRange.push(this.selectedRange.end);\n    }\n    \n    // Sort dates chronologically\n    allDatesInRange.sort((a, b) => {\n      const dateA = new Date(this.parseDate(a.gD || ''));\n      const dateB = new Date(this.parseDate(b.gD || ''));\n      return dateA.getTime() - dateB.getTime();\n    });\n    \n    return allDatesInRange;\n  }\n\n  /// On confirm button clicked\n  onConfirmClicked(): void {\n    \n    if (this.rangeSelection && this.selectedRange.start && this.selectedRange.end) {\n      const allDatesInRange = this.getAllDatesInRange();\n      this.onSubmit.emit(allDatesInRange);\n    } else if (this.multiple) {\n      this.onSubmit.emit(this.multipleSelectedDates);\n    } else {\n      this.onSubmit.emit(this.selectedDay);\n    }\n  }\n\n  /// Check if date from future\n  checkFutureValidation(day: DayInfo): boolean | undefined {\n    if (\n      this._dateUtilsService.checkPastOrFuture(day?.gD, new Date()) === 'Future'\n    ) {\n      return true;\n    }\n  }\n\n  /// Check if date is from past\n  checkPastDateValidation(day: DayInfo): boolean | undefined {\n    if (\n      this._dateUtilsService.checkPastOrFuture(day?.gD, new Date()) === 'Past'\n    ) {\n      return true;\n    }\n  }\n\n  /// Check if passed day is today or not\n  checkTodaysDate(day: DayInfo): boolean {\n    if (this.mode === CALENDAR_MODES.GREGORIAN) {\n      return this.todaysDate?.gregorian === day?.gD;\n    } else {\n      return this.todaysDate?.umAlQura === day?.uD;\n    }\n  }\n\n  /// Check if passed day should be highlighted (today or initial date)\n  checkHighlightedDate(day: DayInfo): boolean {\n    const isTodaysDate = this.checkTodaysDate(day);\n    const isInitialDate = this.checkInitialDate(day);\n    return isTodaysDate || isInitialDate;\n  }\n\n  /// Check if passed day is the initial date\n  checkInitialDate(day: DayInfo): boolean {\n    if (!this.initialDate) return false;\n    \n    if (this.mode === CALENDAR_MODES.GREGORIAN) {\n      return this.initialDate === day?.gD;\n    } else {\n      // Convert initialDate to Hijri and compare\n      const convertedDate = this._dateUtilsService.convertDate(this.initialDate, true);\n      return convertedDate?.uD === day?.uD;\n    }\n  }\n\n  /// Check if date is before minDate\n  checkMinDateValidation(day: DayInfo): boolean {\n    if (!this.minDate) return false;\n    \n    // Always use Gregorian date for comparison since minDate is Gregorian\n    const dayDate = day?.gD;\n    if (!dayDate) return false;\n    \n    // Convert minDate string to Date object\n    const minDateParts = this.minDate.split('/');\n    const minDateObj = new Date(Number(minDateParts[2]), Number(minDateParts[1]) - 1, Number(minDateParts[0]));\n    \n    return this._dateUtilsService.checkPastOrFuture(dayDate, minDateObj) === 'Past';\n  }\n\n  /// Check if date is after maxDate\n  checkMaxDateValidation(day: DayInfo): boolean {\n    if (!this.maxDate) return false;\n    \n    // Always use Gregorian date for comparison since maxDate is Gregorian\n    const dayDate = day?.gD;\n    if (!dayDate) return false;\n    \n    // Convert maxDate string to Date object\n    const maxDateParts = this.maxDate.split('/');\n    const maxDateObj = new Date(Number(maxDateParts[2]), Number(maxDateParts[1]) - 1, Number(maxDateParts[0]));\n    \n    return this._dateUtilsService.checkPastOrFuture(dayDate, maxDateObj) === 'Future';\n  }\n\n  /// Check if date is in disabled dates array\n  checkDisabledDate(day: DayInfo): boolean {\n    if (!this.disabledDates || this.disabledDates.length === 0) return false;\n    \n    // Always use Gregorian date for comparison since disabledDates are Gregorian\n    const dayDate = day?.gD;\n    return this.disabledDates.includes(dayDate || '');\n  }\n\n  /// Check if date should be disabled (combines all validation rules)\n  isDateDisabled(day: DayInfo): boolean {\n    return this.checkMinDateValidation(day) || \n           this.checkMaxDateValidation(day) || \n           this.checkDisabledDate(day) ||\n           (this.futureValidation && this.checkFutureValidation(day) === true) ||\n           (this.pastDateValidation && this.checkPastDateValidation(day) === true);\n  }\n\n  /// Check if date is disabled specifically due to validation (past/future)\n  isValidationDisabled(day: DayInfo): boolean {\n    return (this.futureValidation && this.checkFutureValidation(day) === true) ||\n           (this.pastDateValidation && this.checkPastDateValidation(day) === true);\n  }\n\n  /// Handle range selection\n  private handleRangeSelection(dayInfo: DayInfo): void {\n    \n    if (this.isDateDisabled(dayInfo)) {\n      return;\n    }\n    \n    if (!this.selectedRange.start || this.selectedRange.end) {\n      // Start new range\n      this.clearRangeSelection();\n      this.selectedRange.start = dayInfo;\n      dayInfo.selected = true;\n      dayInfo.isRangeStart = true;\n    } else {\n      // Complete the range\n      this.selectedRange.end = dayInfo;\n      dayInfo.selected = true;\n      dayInfo.isRangeEnd = true;\n      this.highlightRange();\n    }\n    \n    // Force change detection\n    this.cdr.detectChanges();\n    this.onDaySelect.emit(dayInfo);\n  }\n\n  /// Clear range selection\n  private clearRangeSelection(): void {\n    this.weeks.forEach((week: (DayInfo | null)[]) => {\n      week.forEach((day: DayInfo | null) => {\n        if (day) {\n          day.selected = false;\n          day.isRangeStart = false;\n          day.isRangeEnd = false;\n          day.isInRange = false;\n        }\n      });\n    });\n    this.selectedRange = { start: null, end: null };\n  }\n\n  /// Highlight dates between start and end\n  private highlightRange(): void {\n    if (!this.selectedRange.start || !this.selectedRange.end) return;\n    \n    const startDate = new Date(this.parseDate(this.selectedRange.start.gD || ''));\n    const endDate = new Date(this.parseDate(this.selectedRange.end.gD || ''));\n    \n    // Ensure dates are in correct order\n    const earlierDate = startDate <= endDate ? startDate : endDate;\n    const laterDate = startDate <= endDate ? endDate : startDate;\n    \n    // Update range flags for proper visual feedback\n    if (startDate > endDate) {\n      // Swap the range flags if dates are reversed\n      this.selectedRange.start.isRangeEnd = true;\n      this.selectedRange.start.isRangeStart = false;\n      this.selectedRange.end.isRangeStart = true;\n      this.selectedRange.end.isRangeEnd = false;\n    }\n    \n    this.weeks.forEach((week: (DayInfo | null)[]) => {\n      week.forEach((day: DayInfo | null) => {\n        if (day && day.gD) {\n          const dayDate = new Date(this.parseDate(day.gD));\n          \n          // Check if day is between start and end (exclusive)\n          if (dayDate > earlierDate && dayDate < laterDate) {\n            day.isInRange = true;\n          }\n          \n          // Handle edge case where start and end are the same day\n          if (earlierDate.getTime() === laterDate.getTime() && dayDate.getTime() === earlierDate.getTime()) {\n            day.isRangeStart = true;\n            day.isRangeEnd = true;\n            day.isInRange = false;\n          }\n        }\n      });\n    });\n  }\n\n  /// Helper to parse date string to Date object\n  private parseDate(dateStr: string): string {\n    const parts = dateStr.split('/');\n    return `${parts[2]}-${parts[1].padStart(2, '0')}-${parts[0].padStart(2, '0')}`;\n  }\n\n  /// Convert english numbers to arabic equivalent\n  parseEnglish(englishNum: number | string): string {\n    return NumberConversionUtil.toArabicNumerals(englishNum);\n  }\n\n  /// Convert arabic numbers to english equivalent\n  parseArabic(arabicNum: string): string {\n    return NumberConversionUtil.toEnglishNumerals(arabicNum);\n  }\n\n  /// Convert arabic numbers to english number for arithmetic operations\n  parseArabicToNumber(arabicNum: string): number {\n    return NumberConversionUtil.arabicToNumber(arabicNum);\n  }\n\n  /// Get current display text for the header\n  getCurrentDisplayText(): string {\n    if (this.currentView === 'years') {\n      return this.getYearRangeDisplay();\n    } else if (this.currentView === 'months') {\n      const currentYear = this.periodForm.controls.year.value;\n      if (currentYear) {\n        return this.locale === 'ar' ? this.parseEnglish(currentYear) : currentYear.toString();\n      }\n      return this.locale === 'ar' ? 'السنة' : 'Year';\n    } else {\n      const currentMonth = this.periodForm.controls.month.value;\n      const currentYear = this.periodForm.controls.year.value;\n      \n      if (currentMonth && currentYear) {\n        const monthData = this.months.find(month => month.value === currentMonth);\n        const monthName = monthData ? (this.locale === 'ar' ? monthData.labelAr : monthData.labelEn) : '';\n        const yearStr = this.locale === 'ar' ? this.parseEnglish(currentYear) : currentYear.toString();\n        return `${monthName} ${yearStr}`;\n      }\n      return '';\n    }\n  }\n\n  /// Get days in Hijri month for date calculations\n  private getHijriDaysInMonth(year: number, month: number): number {\n    // Hijri months alternate between 29 and 30 days, with adjustments\n    // This is a simplified version - in practice the service should be used\n    try {\n      return UmmAlQuraCalendarUtil.getDaysInMonth(year, month);\n    } catch {\n      // Fallback: Hijri months are typically 29 or 30 days\n      return month % 2 === 1 ? 30 : 29;\n    }\n  }\n\n  /// Get current year in the active calendar system\n  private getCurrentCalendarYear(): number {\n    if (this.mode === CALENDAR_MODES.GREGORIAN) {\n      return new Date().getFullYear();\n    } else {\n      // Get current Hijri year\n      const todaysGregorian = this._dateUtilsService.formatDate(new Date());\n      const todaysHijri = this._dateUtilsService.convertDate(todaysGregorian, true);\n      return todaysHijri ? Number(todaysHijri.uD?.split('/')[2]) : new Date().getFullYear();\n    }\n  }\n\n  /// Get year range display for years view\n  getYearRangeDisplay(): string {\n    const displayYears = this.getDisplayYears();\n    if (displayYears.length > 0) {\n      const firstYear = displayYears[0];\n      const lastYear = displayYears[displayYears.length - 1];\n      if (this.locale === 'ar') {\n        return `${this.parseEnglish(firstYear)} - ${this.parseEnglish(lastYear)}`;\n      } else {\n        return `${firstYear} - ${lastYear}`;\n      }\n    }\n    return '';\n  }\n\n  /// Get years to display in the grid\n  getDisplayYears(): number[] {\n    const currentYear = this.periodForm.controls.year.value || this.getCurrentCalendarYear();\n    const startYear = Math.floor(currentYear / 12) * 12;\n    const years = [];\n    \n    // Get current calendar year and calculate limits based on calendar system\n    const currentCalendarYear = this.getCurrentCalendarYear();\n    const minYear = currentCalendarYear - this.pastYearsLimit;\n    const maxYear = currentCalendarYear + this.futureYearsLimit;\n    \n    // Apply calendar system constraints\n    const isGregorian = this.mode === CALENDAR_MODES.GREGORIAN;\n    const systemMinYear = isGregorian ? 1901 : 1318;\n    const systemMaxYear = isGregorian ? 2077 : 1500;\n    \n    // Use the more restrictive bounds\n    const effectiveMinYear = Math.max(minYear, systemMinYear);\n    const effectiveMaxYear = Math.min(maxYear, systemMaxYear);\n    \n    for (let i = 0; i < 12; i++) {\n      const year = startYear + i;\n      if (year >= effectiveMinYear && year <= effectiveMaxYear) {\n        years.push(year);\n      }\n    }\n    \n    return years;\n  }\n\n\n  /// Initialize the view based on component state\n  private initializeView(): void {\n    // Always start with days view to match the original design\n    this.currentView = 'days';\n  }\n\n  /// Handle title click to navigate between views\n  onTitleClick(): void {\n    if (this.currentView === 'days') {\n      this.currentView = 'months';\n    } else if (this.currentView === 'months') {\n      this.currentView = 'years';\n    }\n  }\n\n  /// Navigate years in year view\n  navigateYears(direction: 'previous' | 'next'): void {\n    const currentYear = this.periodForm.controls.year.value || this.getCurrentCalendarYear();\n    const currentStartYear = Math.floor(currentYear / 12) * 12;\n    const newStartYear = direction === 'next' ? currentStartYear + 12 : currentStartYear - 12;\n    \n    // Get current calendar year and calculate limits based on calendar system\n    const currentCalendarYear = this.getCurrentCalendarYear();\n    const minYear = currentCalendarYear - this.pastYearsLimit;\n    const maxYear = currentCalendarYear + this.futureYearsLimit;\n    \n    // Apply calendar system constraints\n    const isGregorian = this.mode === CALENDAR_MODES.GREGORIAN;\n    const systemMinYear = isGregorian ? 1901 : 1318;\n    const systemMaxYear = isGregorian ? 2077 : 1500;\n    \n    // Use the more restrictive bounds\n    const effectiveMinYear = Math.max(minYear, systemMinYear);\n    const effectiveMaxYear = Math.min(maxYear, systemMaxYear);\n    \n    // Check if the new range would be within allowed limits\n    const newRangeMinYear = newStartYear;\n    const newRangeMaxYear = newStartYear + 11;\n    \n    // Only navigate if the new range has at least some years within the allowed limits\n    if ((newRangeMinYear <= effectiveMaxYear && newRangeMaxYear >= effectiveMinYear)) {\n      this.periodForm.controls.year.setValue(newStartYear);\n      this.updateYearsRange(newStartYear);\n    }\n  }\n}\n","<div class=\"calendar-container\">\n  <div class=\"calendar-card\" \n    (click)=\"onCalendarClick($event)\"\n    [ngStyle]=\"{ 'background-color': styles.backgroundColor, 'border-radius': styles.borderRadius }\">\n    \n    <!-- Header with title and toggle -->\n    <div class=\"header-section\" [dir]=\"dir\">\n      <div class=\"title-group\">\n        @if (canChangeMode) {\n          <span class=\"mode-label\" [ngStyle]=\"{ color: styles.primaryColor, 'font-family': styles.fontFamily, 'text-align': locale === 'ar' ? 'right' : 'left' }\">\n            {{ mode === 'umAlQura' ? (locale === 'ar' ? 'تقويم هجري' : 'HIJRI DATE') : (locale === 'ar' ? 'تقويم ميلادي' : 'GREGORIAN DATE') }}\n          </span>\n        }\n        <h2 class=\"main-title\" [ngStyle]=\"{ color: styles.primaryColor, 'font-family': styles.fontFamily, 'text-align': locale === 'ar' ? 'right' : 'left' }\" (click)=\"onTitleClick()\">\n          {{ getCurrentDisplayText() }}\n        </h2>\n      </div>\n      @if (canChangeMode) {\n        <div class=\"toggle-section\">\n          <span class=\"toggle-label\" [ngStyle]=\"{ color: styles.primaryColor, 'font-family': styles.fontFamily }\">\n            {{ locale === 'ar' ? 'هـ/م' : 'H/G' }}\n          </span>\n          <label class=\"toggle-switch\">\n            <input type=\"checkbox\" [disabled]=\"!canChangeMode\" [checked]=\"mode === 'umAlQura'\" (change)=\"changeCalendarMode()\" #calendarCheckbox />\n            <div class=\"slider\" [ngStyle]=\"calendarCheckbox.checked ? { 'background-color': styles.primaryColor } : {'background-color': styles.sliderToggleBackground || '#d1d5db'}\"></div>\n          </label>\n        </div>\n      }\n    </div>\n\n    <!-- Navigation section -->\n    @if (currentView === 'days') {\n      <div class=\"navigation-bar\" [class.no-arrows]=\"!showNavigationArrows\">\n        @if (showNavigationArrows) {\n          <button class=\"nav-button\" \n                  [fadeInAnimation]=\"enableAnimations\"\n                  [animationType]=\"'scale'\"\n                  [animationDelay]=\"100\"\n                  (click)=\"navigateMonth('previous')\" \n                  [disabled]=\"!canNavigatePrevious()\"\n                  [ngStyle]=\"{ color: styles.primaryColor, opacity: canNavigatePrevious() ? 1 : 0.3 }\" \n                  type=\"button\">\n            <svg class=\"material-icon\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n              <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"/>\n            </svg>\n          </button>\n        }\n        \n        <div class=\"period-controls\" [dir]=\"dir\">\n          @if (!hideMonthPicker) {\n            <button class=\"period-button\" \n                    [fadeInAnimation]=\"enableAnimations\"\n                    [animationType]=\"'slideUp'\"\n                    [animationDelay]=\"150\"\n                    (click)=\"toggleMonthDropdown()\" \n                    [ngStyle]=\"{ \n                      color: styles.primaryColor, \n                      'font-family': styles.fontFamily\n                    }\">\n              {{ getCurrentMonthLabel() }}\n              <svg class=\"dropdown-icon\" [ngStyle]=\"{ color: styles.primaryColor }\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n                <path d=\"M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z\"/>\n              </svg>\n            </button>\n          }\n          @if (!hideYearPicker) {\n            <button class=\"period-button\" \n                    [fadeInAnimation]=\"enableAnimations\"\n                    [animationType]=\"'slideUp'\"\n                    [animationDelay]=\"200\"\n                    (click)=\"toggleYearDropdown()\" \n                    [ngStyle]=\"{ \n                      color: styles.primaryColor, \n                      'font-family': styles.fontFamily\n                    }\">\n              {{ getCurrentYearLabel() }}\n              <svg class=\"dropdown-icon\" [ngStyle]=\"{ color: styles.primaryColor }\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n                <path d=\"M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z\"/>\n              </svg>\n            </button>\n          }\n        </div>\n        \n        @if (showNavigationArrows) {\n          <button class=\"nav-button\" \n                  [fadeInAnimation]=\"enableAnimations\"\n                  [animationType]=\"'scale'\"\n                  [animationDelay]=\"100\"\n                  (click)=\"navigateMonth('next')\" \n                  [disabled]=\"!canNavigateNext()\"\n                  [ngStyle]=\"{ color: styles.primaryColor, opacity: canNavigateNext() ? 1 : 0.3 }\" \n                  type=\"button\">\n            <svg class=\"material-icon\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n              <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/>\n            </svg>\n          </button>\n        }\n      </div>\n    }\n\n    @if (currentView === 'years') {\n      <div class=\"year-navigation\">\n        <button class=\"nav-button\" \n                [fadeInAnimation]=\"enableAnimations\"\n                [animationType]=\"'scale'\"\n                [animationDelay]=\"100\"\n                (click)=\"navigateYears('previous')\" \n                [ngStyle]=\"{ color: styles.primaryColor }\" \n                type=\"button\">\n          <svg class=\"material-icon\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n            <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"/>\n          </svg>\n        </button>\n        \n        <div class=\"year-range-display\">\n          <button class=\"year-range-button\" \n                  [fadeInAnimation]=\"enableAnimations\"\n                  [animationType]=\"'slideUp'\"\n                  [animationDelay]=\"150\"\n                  [ngStyle]=\"{ color: styles.todaysDateTextColor, background:styles.secondaryColor, 'font-family': styles.fontFamily }\">\n            {{ getYearRangeDisplay() }}\n          </button>\n        </div>\n        \n        <button class=\"nav-button\" \n                [fadeInAnimation]=\"enableAnimations\"\n                [animationType]=\"'scale'\"\n                [animationDelay]=\"100\"\n                (click)=\"navigateYears('next')\" \n                [ngStyle]=\"{ color: styles.primaryColor }\" \n                type=\"button\">\n          <svg class=\"material-icon\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n            <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/>\n          </svg>\n        </button>\n      </div>\n    }\n\n    <!-- Content area -->\n    <div class=\"content-area\">\n      \n      <!-- Years Grid -->\n      @if (currentView === 'years') {\n        <div class=\"years-grid\">\n          @for (year of getDisplayYears(); track trackByYear($index, year)) {\n            <button class=\"year-item\" \n                    [fadeInAnimation]=\"enableAnimations\"\n                    [animationType]=\"'slideUp'\"\n                    [staggerDelay]=\"$index * 50\"\n                    [animationDelay]=\"100\"\n                    (click)=\"selectYear(year)\"\n                    [class.selected]=\"year === periodForm.controls.year.value\"\n                    [ngStyle]=\"{ \n                      color: year === periodForm.controls.year.value ? styles.todaysDateTextColor : styles.primaryColor,\n                      'background-color': year === periodForm.controls.year.value ? styles.secondaryColor : 'transparent',\n                      'font-family': styles.fontFamily\n                    }\">\n              {{ locale == \"ar\" ? parseEnglish(year) : year }}\n            </button>\n          }\n        </div>\n      }\n\n      <!-- Months Grid -->\n      @if (currentView === 'months') {\n        <div class=\"months-grid\">\n          @for (month of months; track trackByMonth($index, month)) {\n            <button class=\"month-item\" \n                    [fadeInAnimation]=\"enableAnimations\"\n                    [animationType]=\"'scale'\"\n                    [staggerDelay]=\"$index * 80\"\n                    [animationDelay]=\"150\"\n                    (click)=\"selectMonth(month.value)\"\n                    [class.selected]=\"month.value === periodForm.controls.month.value\"\n                    [ngStyle]=\"{ \n                      color: month.value === periodForm.controls.month.value ? styles.todaysDateTextColor : styles.primaryColor,\n                      'background-color': month.value === periodForm.controls.month.value ? styles.secondaryColor : 'transparent',\n                      'font-family': styles.fontFamily\n                    }\">\n              {{ locale == \"ar\" ? month?.labelAr : month?.labelEn }}\n            </button>\n          }\n        </div>\n      }\n\n      <!-- Days View -->\n      @if (currentView === 'days') {\n        <!-- Weekdays header -->\n        <div class=\"weekdays-grid\">\n          @for (day of locale == 'ar' ? weekdaysAr : weekdaysEn; track trackByWeekday($index, day)) {\n            <div class=\"weekday-label\" \n                 [fadeInAnimation]=\"enableAnimations\"\n                 [animationType]=\"'slideLeft'\"\n                 [staggerDelay]=\"$index * 30\"\n                 [animationDelay]=\"50\"\n                 [ngStyle]=\"{ color: styles.dayNameColor, 'font-family': styles.fontFamily }\">\n              {{ day }}\n            </div>\n          }\n        </div>\n\n        <!-- Days grid -->\n        <div class=\"days-grid\" [dir]=\"dir\">\n          @for (week of weeks; track trackByWeek($index, week)) {\n            @for (day of week; track trackByDay($index, day)) {\n              <div class=\"day-container\">\n                @if (day) {\n                  <button class=\"day-button\" \n                          [fadeInAnimation]=\"enableAnimations\"\n                          [animationType]=\"'fade'\"\n                          [staggerDelay]=\"$index * 25\"\n                          [animationDelay]=\"200\"\n                          (click)=\"!disableDayPicker ? onDayClicked(day) : ''\"\n                          [class.today]=\"checkHighlightedDate(day)\"\n                          [class.selected]=\"day?.selected == true\"\n                          [class.range-start]=\"day?.isRangeStart == true\"\n                          [class.range-end]=\"day?.isRangeEnd == true\"\n                          [class.range-between]=\"day?.isInRange == true\"\n                          [ngStyle]=\"{\n                            'background-color': day?.isRangeStart ? (styles.rangeStartColor || styles.secondaryColor) : \n                                               day?.isRangeEnd ? (styles.rangeEndColor || styles.secondaryColor) : \n                                               day?.isInRange ? (styles.rangeBetweenColor || styles.secondaryColor) :\n                                               day?.selected == true ? styles.secondaryColor : '',\n                            color: isDateDisabled(day) ? styles.disabledDayColor : \n                                   (day?.isRangeStart || day?.isRangeEnd || day?.isInRange || day?.selected == true) ? styles.todaysDateTextColor : styles.primaryColor,\n                            opacity: isDateDisabled(day) ? '0.5' : '1',\n                            'pointer-events': (isDateDisabled(day) && !isValidationDisabled(day)) ? 'none' : 'auto',\n                            'border-color': checkHighlightedDate(day) ? styles.secondaryColor : 'transparent',\n                            'font-family': styles.fontFamily\n                          }\">\n                    @if (mode == 'greg') {\n                      {{ locale == 'ar' ? parseEnglish(day?.gD?.split(\"/\")[0] | number) : day?.gD?.split(\"/\")[0] | number }}\n                    }\n                    @if (mode == 'umAlQura') {\n                      {{ locale == 'ar' ? parseEnglish(day?.uD?.split(\"/\")[0] | number) : day?.uD?.split(\"/\")[0] | number }}\n                    }\n                    @if (checkHighlightedDate(day)) {\n                      <span class=\"today-dot\"></span>\n                    }\n                  </button>\n                }\n              </div>\n            }\n          }\n        </div>\n      }\n    </div>\n  </div>\n  \n  <!-- Validation messages -->\n  @if (showFutureValidationMessage()) {\n  <div class=\"validation-message\" dir=\"auto\" [ngStyle]=\"{ 'font-family': styles.fontFamily }\">\n    @if (locale == 'ar') {\n    <span>{{ futureValidationMessageAr }}</span>\n    }\n    @if (locale == 'en') {\n    <span>{{ futureValidationMessageEn }}</span>\n    }\n  </div>\n  }\n  @if (showPastDateValidationMessage()) {\n  <div class=\"validation-message\" dir=\"auto\" [ngStyle]=\"{ 'font-family': styles.fontFamily }\">\n    @if (locale == 'ar') {\n    <span>{{ pastDateValidationMessageAr }}</span>\n    }\n    @if (locale == 'en') {\n    <span>{{ pastDateValidationMessageEn }}</span>\n    }\n  </div>\n  }\n  \n  <!-- Confirm button -->\n  @if (showConfirmButton) {\n  <button type=\"button\" class=\"confirm-button\" \n          [disabled]=\"isRequired && ((rangeSelection && (!selectedRange.start || !selectedRange.end)) || (!rangeSelection && !multiple && !selectedDay) || (!rangeSelection && multiple && !multipleSelectedDates.length))\" \n          (click)=\"onConfirmClicked()\" \n          [ngStyle]=\"{\n            'background-color': styles.secondaryColor,\n            color: styles.confirmBtnTextColor,\n            'font-family': styles.fontFamily,\n            'border-radius': styles.borderRadius\n          }\">\n    {{ submitTextButton }}\n  </button>\n  }\n</div>","import { NgModule } from '@angular/core';\nimport { HijriGregorianDatepickerComponent } from './hijri-gregorian-datepicker.component';\n\n@NgModule({\n  imports: [HijriGregorianDatepickerComponent],\n  exports: [HijriGregorianDatepickerComponent],\n})\nexport class HijriGregorianDatepickerModule { }\n","/*\n * Public API Surface of hijri-gregorian-datepicker\n */\n\nexport * from './_services/date-utilities.service';\nexport * from './lib/hijri-gregorian-datepicker.component';\nexport * from './lib/hijri-gregorian-datepicker.module';\nexport * from './_interfaces/styles-config.model';\nexport * from './_interfaces/calendar.model';\nexport * from './_constants/calendar.constants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.DateUtilitiesService"],"mappings":"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,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACnB,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACpB,IAAA,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;CACd;AAED;AACA,MAAM,eAAe,GAAoB,EAAE;AAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;IAC5C,eAAe,CAAC,IAAI,CAAC;AACnB,QAAA,sBAAsB,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;AACvC,QAAA,aAAa,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACpG,KAAA,CAAC;AACJ;AAEA;AACA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAChD,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;MAErD,qBAAqB,CAAA;IAExB,OAAO,cAAc,CAAC,IAAU,EAAA;AACtC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3B,QAAA,IAAI,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE;AAC1D,YAAA,MAAM,IAAI,UAAU,CAClB,CAAA,uCAAA,EAA0C,QAAQ,CAAC,WAAW,EAAE,CAAA,IAAA,EAAO,QAAQ,CAAC,WAAW,EAAE,CAAA,CAAE,CAChG;QACH;IACF;IAEQ,OAAO,cAAc,CAAC,IAAY,EAAA;QACxC,IAAI,IAAI,GAAG,iBAAiB,IAAI,IAAI,GAAG,iBAAiB,EAAE;YACxD,MAAM,IAAI,UAAU,CAClB,CAAA,KAAA,EAAQ,IAAI,CAAA,mCAAA,EAAsC,iBAAiB,CAAA,IAAA,EAAO,iBAAiB,CAAA,CAAE,CAC9F;QACH;IACF;AAEQ,IAAA,OAAO,mBAAmB,CAAC,IAAY,EAAE,KAAa,EAAA;AAC5D,QAAA,qBAAqB,CAAC,cAAc,CAAC,IAAI,CAAC;QAC1C,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,EAAE;AAC3B,YAAA,MAAM,IAAI,UAAU,CAAC,SAAS,KAAK,CAAA,2CAAA,CAA6C,CAAC;QACnF;IACF;AAEA,IAAA,OAAO,cAAc,CAAC,IAAY,EAAE,KAAa,EAAA;AAC/C,QAAA,qBAAqB,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC;QACtD,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,GAAG,iBAAiB,CAAC,CAAC,sBAAsB;QAC9E,OAAO,CAAC,KAAK,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE;IACrD;IAIA,OAAO,gBAAgB,CAAC,IAAU,EAAA;AAChC,QAAA,qBAAqB,CAAC,cAAc,CAAC,IAAI,CAAC;;;QAI1C,MAAM,cAAc,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AACpF,QAAA,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,EAAE;AAErC,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE;AAElC,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,OAAO,IAAI,UAAU,GAAG,GAAG,CAAC;AAE3D,QAAA,OAAO,KAAK,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC;AAClC,YAAA,IAAI,IAAI,eAAe,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE;AACjE,YAAA,KAAK,EAAE;QACT;QAEA,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,OAAO,EAAE;AACpE,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,aAAa,IAAI,UAAU,CAAC;AAE3D,QAAA,MAAM,SAAS,GAAG,KAAK,GAAG,iBAAiB;QAC3C,IAAI,UAAU,GAAG,CAAC;QAClB,IAAI,QAAQ,GAAG,CAAC;QAEhB,IAAI,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,sBAAsB;QACzD,IAAI,gBAAgB,GAAG,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;AAEvC,QAAA,OAAO,KAAK,IAAI,gBAAgB,EAAE;YAChC,KAAK,IAAI,gBAAgB;AACzB,YAAA,KAAK,GAAG,KAAK,IAAI,CAAC;YAClB,gBAAgB,GAAG,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;AACnC,YAAA,UAAU,EAAE;QACd;QAEA,QAAQ,IAAI,KAAK;QAEjB,OAAO;AACL,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,GAAG,EAAE;SACN;IACH;AAEA,IAAA,OAAO,gBAAgB,CAAC,SAAiB,EAAE,UAAkB,EAAE,QAAgB,EAAA;AAC7E,QAAA,qBAAqB,CAAC,mBAAmB,CAAC,SAAS,EAAE,UAAU,CAAC;QAEhE,MAAM,WAAW,GAAG,qBAAqB,CAAC,cAAc,CAAC,SAAS,EAAE,UAAU,CAAC;QAC/E,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,WAAW,EAAE;YAC1C,MAAM,IAAI,UAAU,CAClB,CAAA,IAAA,EAAO,QAAQ,CAAA,2BAAA,EAA8B,UAAU,CAAA,wBAAA,EAA2B,WAAW,CAAA,CAAA,CAAG,CACjG;QACH;AAEA,QAAA,MAAM,KAAK,GAAG,SAAS,GAAG,iBAAiB;QAC3C,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,aAAa;QACtD,IAAI,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,sBAAsB;AAEzD,QAAA,IAAI,KAAK,GAAG,QAAQ,GAAG,CAAC;AAExB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;YACnC,KAAK,IAAI,EAAE,IAAI,KAAK,GAAG,GAAG,CAAC;AAC3B,YAAA,KAAK,GAAG,KAAK,IAAI,CAAC;QACpB;AAEA,QAAA,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,UAAU,CAAC;IAC3D;AAED;;MC9TY,oBAAoB,CAAA;AAI/B,IAAA,WAAA,GAAA;AAHQ,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,GAAG,EAAqB;QACpC,IAAA,CAAA,cAAc,GAAG,GAAG;IAEtB;AAEf,IAAA,SAAS,CAAC,OAAe,EAAA;AACvB,QAAA,OAAO,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC;IAC9C;AAEA,IAAA,UAAU,CAAC,IAAU,EAAA;AACnB,QAAA,OAAO,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC;IAC5C;AAEQ,IAAA,eAAe,CAAC,IAAU,EAAA;AAChC,QAAA,OAAO,kBAAkB,CAAC,eAAe,CAAC,IAAI,CAAC;IACjD;IAEQ,0BAA0B,CAAC,SAAiB,EAAE,UAAkB,EAAA;QACtE,MAAM,WAAW,GAAG,qBAAqB,CAAC,cAAc,CAAC,SAAS,EAAE,UAAU,CAAC;QAC/E,MAAM,UAAU,GAAc,EAAE;AAEhC,QAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,WAAW,EAAE,GAAG,EAAE,EAAE;AAC3C,YAAA,MAAM,aAAa,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,CAAC;YAExF,UAAU,CAAC,IAAI,CAAC;AACd,gBAAA,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;gBAClC,EAAE,EAAE,CAAA,EAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE;AAC/F,gBAAA,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;AACvC,gBAAA,EAAE,EAAE,WAAW;AAChB,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,UAAU;IACnB;IAEQ,8BAA8B,CAAC,aAAqB,EAAE,cAAsB,EAAA;AAClF,QAAA,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;QACxE,MAAM,UAAU,GAAc,EAAE;AAEhC,QAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,WAAW,EAAE,GAAG,EAAE,EAAE;AAC3C,YAAA,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE,cAAc,GAAG,CAAC,EAAE,GAAG,CAAC;YACtE,MAAM,SAAS,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,aAAa,CAAC;YAEvE,UAAU,CAAC,IAAI,CAAC;AACd,gBAAA,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;AAClC,gBAAA,EAAE,EAAE,CAAA,EAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI,SAAS,CAAC,IAAI,CAAA,CAAE;AACnH,gBAAA,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;AACvC,gBAAA,EAAE,EAAE,qBAAqB,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC;AAC1E,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,UAAU;IACnB;IAEA,WAAW,CAAC,OAAe,EAAE,WAAoB,EAAA;AAC/C,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;AAEzB,QAAA,IAAI;YACF,IAAI,WAAW,EAAE;AACf,gBAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAC3C;iBAAO;AACL,gBAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;YACvC;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,IAAI;QACb;IACF;AAEQ,IAAA,oBAAoB,CAAC,OAAe,EAAA;QAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AAC7C,QAAA,IAAI,CAAC,aAAa;AAAE,YAAA,OAAO,IAAI;AAE/B,QAAA,IAAI;YACF,MAAM,SAAS,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,aAAa,CAAC;YAEvE,OAAO;AACL,gBAAA,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;AAClC,gBAAA,EAAE,EAAE,CAAA,EAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI,SAAS,CAAC,IAAI,CAAA,CAAE;AACnH,gBAAA,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;AACvC,gBAAA,EAAE,EAAE,qBAAqB,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC;aAC1E;QACH;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,IAAI;QACb;IACF;AAEQ,IAAA,gBAAgB,CAAC,OAAe,EAAA;AACtC,QAAA,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;AACzD,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,IAAI;AAE1D,QAAA,IAAI;AACF,YAAA,MAAM,aAAa,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;YAE9E,OAAO;AACL,gBAAA,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;AAClC,gBAAA,EAAE,EAAE,OAAO;AACX,gBAAA,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;gBACvC,EAAE,EAAE,qBAAqB,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC;aACtD;QACH;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,IAAI;QACb;IACF;IAEQ,kBAAkB,CAAC,GAAW,EAAE,IAAe,EAAA;QACrD,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;;AAEnD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK;AACxD,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC;QACtC;QACA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;IACpC;IAEA,YAAY,CAAC,SAAiB,EAAE,IAAY,EAAA;AAC1C,QAAA,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;QAEpC,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;AACtC,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;AAEvC,QAAA,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,IAAI;AAE1D,QAAA,MAAM,WAAW,GAAG,IAAI,KAAK,MAAM;;QAGnC,MAAM,QAAQ,GAAG,CAAA,EAAG,IAAI,IAAI,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;QACpD,IAAI,UAAU,EAAE;AACd,YAAA,OAAO,UAAU;QACnB;AAEA,QAAA,IAAI;YACF,MAAM,SAAS,GAAG;kBACd,IAAI,CAAC,8BAA8B,CAAC,IAAI,EAAE,KAAK;kBAC/C,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC;YAEhD,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACrC,gBAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC;YAC9C;AAEA,YAAA,OAAO,SAAS;QAClB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,IAAI;QACb;IACF;IAEA,iBAAiB,CAAC,SAAiB,EAAE,UAAgB,EAAA;QACnD,OAAO,kBAAkB,CAAC,mBAAmB,CAAC,SAAS,EAAE,UAAU,CAAC;IACtE;8GArJW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA,CAAA;;2FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCDY,wBAAwB,CAAA;AAMnC,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;AALb,QAAA,IAAA,CAAA,eAAe,GAAY,IAAI,CAAC;QAChC,IAAA,CAAA,cAAc,GAAW,CAAC;QAC1B,IAAA,CAAA,aAAa,GAA+C,MAAM;QAClE,IAAA,CAAA,YAAY,GAAW,CAAC;IAEI;IAErC,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,cAAc,EAAE;QACvB;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;YACzB,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE;QAC7C;IACF;IAEQ,iBAAiB,GAAA;AACvB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;AACjC,QAAA,QAAQ,IAAI,CAAC,aAAa;AAC5B,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG;gBAC3B;AACF,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG;AAC3B,gBAAA,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,kBAAkB;gBAC5C;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG;AAC3B,gBAAA,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,YAAY;gBACtC;AACF,YAAA,KAAK,WAAW;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG;AAC3B,gBAAA,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,mBAAmB;gBAC7C;;AAGJ,QAAA,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,uCAAuC;IACpE;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY;QAE1D,UAAU,CAAC,MAAK;AAEd,YAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG;AAC3B,YAAA,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,sCAAsC;YAEhE,UAAU,CAAC,MAAK;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE;YAC/B,CAAC,EAAE,GAAG,CAAC;QACT,CAAC,EAAE,UAAU,CAAC;IAChB;8GAzDW,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE;AACb,iBAAA;;sBAEE;;sBACA;;sBACA;;sBACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MCRU,oBAAoB,CAAA;AACP,IAAA,SAAA,IAAA,CAAA,cAAc,GAAG;AACvC,QAAA,QAAQ;AACR,QAAA,QAAQ;AACR,QAAA,QAAQ;AACR,QAAA,QAAQ;AACR,QAAA,QAAQ;AACR,QAAA,QAAQ;AACR,QAAA,QAAQ;AACR,QAAA,QAAQ;AACR,QAAA,QAAQ;AACR,QAAA,QAAQ;KACT,CAAC;aAEsB,IAAA,CAAA,eAAe,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;;IAI7F,OAAO,gBAAgB,CAAC,UAA2B,EAAA;AACjD,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,MAAM,CAAC,UAAU,CAAC;AAE1C,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;QACjC,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,KAAI;YACxC,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK;AACpD,QAAA,CAAC,CAAC;IACJ;;IAGA,OAAO,iBAAiB,CAAC,SAAiB,EAAA;QACxC,OAAO,SAAS,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,KAAa,KAAI;AAC1D,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,mBAAmB,CAAC;AAC7E,QAAA,CAAC,CAAC;IACJ;;IAIA,OAAO,cAAc,CAAC,SAAiB,EAAA;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;AACnD,QAAA,OAAO,MAAM,CAAC,SAAS,CAAC;IAC1B;;;MCDW,iCAAiC,CAAA;AAmE5C,IAAA,WAAA,CACS,WAAwB,EACvB,iBAAuC,EACvC,GAAsB,EAAA;QAFvB,IAAA,CAAA,WAAW,GAAX,WAAW;QACV,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,GAAG,GAAH,GAAG;;QApEJ,IAAA,CAAA,aAAa,GAAY,IAAI;QAC7B,IAAA,CAAA,gBAAgB,GAAY,IAAI;QAChC,IAAA,CAAA,kBAAkB,GAAY,KAAK;QACnC,IAAA,CAAA,cAAc,GAAY,KAAK;QAC/B,IAAA,CAAA,eAAe,GAAY,KAAK;QAChC,IAAA,CAAA,gBAAgB,GAAY,KAAK;QACjC,IAAA,CAAA,oBAAoB,GAAY,IAAI;QACpC,IAAA,CAAA,gBAAgB,GAAY,IAAI;QAChC,IAAA,CAAA,QAAQ,GAAY,KAAK;QACzB,IAAA,CAAA,UAAU,GAAY,KAAK;QAC3B,IAAA,CAAA,iBAAiB,GAAY,IAAI;AACjC,QAAA,IAAA,CAAA,IAAI,GAAiB,cAAc,CAAC,SAAS;QAC7C,IAAA,CAAA,GAAG,GAAW,KAAK;QACnB,IAAA,CAAA,MAAM,GAAW,IAAI;QACrB,IAAA,CAAA,gBAAgB,GAAW,SAAS;QAKpC,IAAA,CAAA,KAAK,GAAY,EAAE;QACnB,IAAA,CAAA,cAAc,GAAW,EAAE;QAC3B,IAAA,CAAA,gBAAgB,GAAW,CAAC;AAI5B,QAAA,IAAA,CAAA,cAAc,GAAY,KAAK,CAAC;QAEhC,IAAA,CAAA,MAAM,GAAkB,EAAE;;AAEzB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAuB;AAClD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAW;AACzC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAiB;AACjD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAiB;;QAEjD,IAAA,CAAA,cAAc,GAAG,eAAe;QAChC,IAAA,CAAA,UAAU,GAAG,gBAAgB;QACtC,IAAA,CAAA,KAAK,GAAa,EAAE;QACpB,IAAA,CAAA,KAAK,GAAyB,EAAE;QAChC,IAAA,CAAA,MAAM,GAAgB,EAAE;QACxB,IAAA,CAAA,aAAa,GAAmD,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;QACjF,IAAA,CAAA,UAAU,GAAG,WAAW;QACxB,IAAA,CAAA,UAAU,GAAG,WAAW;QACjC,IAAA,CAAA,UAAU,GAAc,EAAE;QAM1B,IAAA,CAAA,qBAAqB,GAAc,EAAE;QACrC,IAAA,CAAA,MAAM,GAA4E,IAAI;;QAGtF,IAAA,CAAA,WAAW,GAAgC,MAAM;;QAGzC,IAAA,CAAA,sBAAsB,GAAY,KAAK;QACvC,IAAA,CAAA,wBAAwB,GAAY,KAAK;;QAGjD,IAAA,CAAA,WAAW,GAA4B,CAAC,KAAa,EAAE,IAAY,KAAa,IAAI;QACpF,IAAA,CAAA,YAAY,GAA+B,CAAC,KAAa,EAAE,KAAgB,KAAa,KAAK,CAAC,KAAK;QACnG,IAAA,CAAA,cAAc,GAA4B,CAAC,KAAa,EAAE,GAAW,KAAa,GAAG;QACrF,IAAA,CAAA,WAAW,GAAwC,CAAC,KAAa,EAAE,IAAwB,KAAa,CAAA,KAAA,EAAQ,KAAK,CAAA,CAAE;AACvH,QAAA,IAAA,CAAA,UAAU,GAAoC,CAAC,KAAa,EAAE,GAAmB,KAAa,GAAG,EAAE,EAAE,IAAI,CAAA,MAAA,EAAS,KAAK,EAAE;IAMrH;;IAGJ,2BAA2B,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,sBAAsB;IAC7D;;IAGA,6BAA6B,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,wBAAwB;IACjE;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,cAAc,EAAE;;AAErB,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;AACnC,QAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;IACvC;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,EAAE;YACvD,IAAI,CAAC,kBAAkB,EAAE;QAC3B;AAEA,QAAA,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,aAAa,EAAE,EAAE;YACrE,IAAI,CAAC,wBAAwB,EAAE;YAC/B,IAAI,CAAC,mBAAmB,EAAE;QAC5B;IACF;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,EAAE,EAAE;;AAErB,YAAA,IAAI,IAAyB,EAAE;AAC7B,gBAAA,IAAI,CAAC,MAAM,GAAG,YAAgF;YAChG;iBAAO;gBACL,IAAI,CAAC,MAAM,GAAG,EAAE,OAAO,EAAE,YAA8E,EAAE;YAC3G;YAEA,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;gBAC9C,IAAI,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE;AACjC,oBAAA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,YAAY;oBACpC;gBACF;YACF;QACF;IACF;;IAGA,cAAc,GAAA;QACZ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvC,YAAA,IAAI,EAAE,IAAI,WAAW,CAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;AACpF,YAAA,KAAK,EAAE,IAAI,WAAW,CAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;AACvF,SAAA,CAAC;IACJ;;IAGA,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QAEhB,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,SAAS,EAAE;YAC1C,IAAI,CAAC,iCAAiC,EAAE;QAC1C;aAAO;YACL,IAAI,CAAC,gCAAgC,EAAE;QACzC;QAEA,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,qBAAqB,EAAE;IAC9B;IAEQ,iCAAiC,GAAA;AACvC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;QACzC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC;AACjD,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU;IAC/B;IAEQ,gCAAgC,GAAA;AACtC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;QACzC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC;AACjD,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc;IACnC;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC1C,QAAA,OAAO,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C;IAEQ,gBAAgB,GAAA;;AAEtB,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YACjE,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,SAAS,EAAE;gBAC1C,OAAO,IAAI,CAAC,WAAW;YACzB;iBAAO;;AAEL,gBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;gBAChF,OAAO,aAAa,EAAE,EAAE;YAC1B;QACF;;AAGA,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC;AAClC,cAAE,IAAI,CAAC,UAAU,CAAC;AAClB,cAAE,IAAI,CAAC,UAAU,CAAC,QAAQ;IAC9B;AAEQ,IAAA,kBAAkB,CAAC,OAAe,EAAA;;QAExC,MAAM,SAAS,GAAG,uBAAuB;QACzC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AAC5B,YAAA,OAAO,KAAK;QACd;;QAGA,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC;QAC5D,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,KAAK;QACd;;AAGA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AACpE,YAAA,IAAI,aAAa,IAAI,UAAU,GAAG,aAAa,EAAE;AAC/C,gBAAA,OAAO,KAAK;YACd;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AACpE,YAAA,IAAI,aAAa,IAAI,UAAU,GAAG,aAAa,EAAE;AAC/C,gBAAA,OAAO,KAAK;YACd;QACF;AAEA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,kBAAkB,CAAC,WAAmB,EAAA;QAC5C,MAAM,KAAK,GAAa,EAAE;;QAG1B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,SAAS;QAC1D,MAAM,OAAO,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI;QACzC,MAAM,OAAO,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI;;AAGzC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,GAAG,OAAO,CAAC;AACzE,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,WAAW,CAAC;;AAG7E,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,MAAM,IAAI,GAAG,WAAW,GAAG,CAAC;AAC5B,YAAA,IAAI,IAAI,IAAI,OAAO,EAAE;AACnB,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAClB;QACF;;AAGA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,MAAM,IAAI,GAAG,WAAW,GAAG,CAAC;AAC5B,YAAA,IAAI,IAAI,IAAI,OAAO,EAAE;AACnB,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAClB;QACF;;AAGA,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;AACzC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,WAAW,CAAC;QAC/D,IAAI,SAAS,EAAE;YACb,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACnD;IACF;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC1C,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,YAAY,CAAC;QAC1E,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;QAC3D;IACF;;AAGA,IAAA,cAAc,CAAC,IAAsB,EAAA;AACnC,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,mBAAmB,EAAE;;AAG1B,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;AACnC,QAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;IACvC;AAEQ,IAAA,qBAAqB,CAAC,IAAsB,EAAA;AAClD,QAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAC7D;aAAO;AACL,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;QAC/D;IACF;IAEQ,mBAAmB,GAAA;AACzB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE;AAC5C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC;QAC1E,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;QAC1C,IAAI,CAAC,yBAAyB,EAAE;IAClC;IAEQ,yBAAyB,GAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO;;AAGlD,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;gBACtB,IAAI,GAAG,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE;AACrC,oBAAA,GAAG,CAAC,QAAQ,GAAG,IAAI;AACnB,oBAAA,IAAI,CAAC,WAAW,GAAG,GAAG;AACtB,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,oBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;oBACxB;gBACF;YACF;QACF;IACF;IAEQ,eAAe,GAAA;QACrB,MAAM,GAAG,GAAG,IAAI;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK;AAChD,QAAA,OAAO,GAAG,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,IAAI,EAAE;IAClC;;IAGA,iBAAiB,GAAA;AACf,QAAA,IAAI;;AAEF,YAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE;YACxB,MAAM,eAAe,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;AACxF,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,eAAe,CAAC;;AAG9E,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CACxD,IAAI,CAAC,UAAU,CAAC,SAAS,EACzB,IAAI,CACL;AAED,YAAA,IAAI,eAAe,EAAE,EAAE,EAAE;;gBAEvB,MAAM,UAAU,GAAG,eAAe,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;gBAChD,IAAI,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBACjC,IAAI,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;;gBAGlC,GAAG,IAAI,CAAC;;gBAGR,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC;AACzD,gBAAA,IAAI,GAAG,GAAG,WAAW,EAAE;oBACrB,GAAG,GAAG,CAAC;oBACP,KAAK,IAAI,CAAC;AACV,oBAAA,IAAI,KAAK,GAAG,EAAE,EAAE;wBACd,KAAK,GAAG,CAAC;wBACT,IAAI,IAAI,CAAC;oBACX;gBACF;AAEA,gBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAA,EAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI,IAAI,EAAE;YAC9G;iBAAO;gBACL,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,eAAe,EAAE,EAAE,IAAI,EAAE;YACtD;YAEA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC;AAC7C,kBAAE,IAAI,CAAC,UAAU,CAAC;AAClB,kBAAE,IAAI,CAAC,UAAU,CAAC,QAAQ;YAE5B,IAAI,SAAS,EAAE;AACb,gBAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;YACnC;QACF;QAAE,OAAO,KAAK,EAAE;;AAEd,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;QAC3E;IACF;;AAGA,IAAA,iBAAiB,CAAC,IAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,IAAI;YAAE;AAEX,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;QACjE,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;QAC5C;IACF;;AAGA,IAAA,kBAAkB,CAAC,SAAoB,EAAA;QACrC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YACxC,OAAO,CAAC,EAAE,CAAC;QACb;QAEA,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE;QACrC,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC;AACpD,QAAA,MAAM,KAAK,GAAyB,CAAC,EAAE,CAAC;QACxC,IAAI,WAAW,GAAG,CAAC;QACnB,IAAI,eAAe,GAAG,UAAU;AAEhC,QAAA,SAAS,EAAE,OAAO,CAAC,CAAC,GAAY,KAAI;AAClC,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;AACvB,gBAAA,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;YACzB;YAEA,KAAK,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC,GAAG,GAAG;AACzC,YAAA,eAAe,EAAE;AAEjB,YAAA,IAAI,eAAe,KAAK,kBAAkB,CAAC,YAAY,EAAE;gBACvD,eAAe,GAAG,CAAC;AACnB,gBAAA,WAAW,EAAE;YACf;AACF,QAAA,CAAC,CAAC;AACF,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAwB,KAAI;YACzC,OAAO,IAAI,CAAC,MAAM,GAAG,kBAAkB,CAAC,YAAY,EAAE;AACpD,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACjB;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,KAAK;IACd;;IAGA,kBAAkB,GAAA;QAChB,IAAI,CAAC,kBAAkB,EAAE;;QAGzB,IAAI,CAAC,iBAAiB,EAAE;QAExB,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,mBAAmB,EAAE;;AAG1B,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;AACnC,QAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;IACvC;IAEQ,kBAAkB,GAAA;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC;cACrC,cAAc,CAAC;AACjB,cAAE,cAAc,CAAC,SAAS;IAC9B;IAEQ,mBAAmB,GAAA;AACzB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE;AAC5C,QAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;IACvC;;AAGA,IAAA,aAAa,CAAC,SAA8B,EAAA;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK;QACzD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK;AAEvD,QAAA,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW;YAAE;QAEnC,IAAI,QAAQ,GAAG,YAAY;QAC3B,IAAI,OAAO,GAAG,WAAW;AAEzB,QAAA,IAAI,SAAS,KAAK,MAAM,EAAE;AACxB,YAAA,IAAI,YAAY,KAAK,EAAE,EAAE;gBACvB,QAAQ,GAAG,CAAC;AACZ,gBAAA,OAAO,GAAG,WAAW,GAAG,CAAC;YAC3B;iBAAO;AACL,gBAAA,QAAQ,GAAG,YAAY,GAAG,CAAC;YAC7B;QACF;aAAO;AACL,YAAA,IAAI,YAAY,KAAK,CAAC,EAAE;gBACtB,QAAQ,GAAG,EAAE;AACb,gBAAA,OAAO,GAAG,WAAW,GAAG,CAAC;YAC3B;iBAAO;AACL,gBAAA,QAAQ,GAAG,YAAY,GAAG,CAAC;YAC7B;QACF;;QAGA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,SAAS;QAC1D,MAAM,OAAO,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI;QACzC,MAAM,OAAO,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI;;QAGzC,IAAI,OAAO,GAAG,OAAO,IAAI,OAAO,GAAG,OAAO,EAAE;YAC1C;QACF;;QAGA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC/C,IAAI,CAAC,UAAU,EAAE;;AAEf,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QAChC;;QAGA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC/C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;;QAGjD,IAAI,CAAC,mBAAmB,EAAE;;AAG1B,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;AACnC,QAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;;AAGrC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;IACnC;;AAGQ,IAAA,gBAAgB,CAAC,UAAkB,EAAA;QACzC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,SAAS;QAC1D,MAAM,OAAO,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI;QACzC,MAAM,OAAO,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI;;QAGzC,IAAI,UAAU,IAAI,OAAO,IAAI,UAAU,IAAI,OAAO,EAAE;YAClD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AACpC,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;AAC3B,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC;QACF;IACF;;IAGA,mBAAmB,GAAA;QACjB,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK;QACzD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK;AAEvD,QAAA,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,KAAK;QAE/C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,SAAS;QAC1D,MAAM,OAAO,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI;;QAGzC,IAAI,WAAW,KAAK,OAAO,IAAI,YAAY,KAAK,CAAC,EAAE;AACjD,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI;IACb;;IAGA,eAAe,GAAA;QACb,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK;QACzD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK;AAEvD,QAAA,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,KAAK;QAE/C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,SAAS;QAC1D,MAAM,OAAO,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI;;QAGzC,IAAI,WAAW,KAAK,OAAO,IAAI,YAAY,KAAK,EAAE,EAAE;AAClD,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI;IACb;;IAGA,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,WAAW,GAAG,QAAQ;IAC7B;;IAGA,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO;IAC5B;;AAGA,IAAA,WAAW,CAAC,UAAkB,EAAA;QAC5B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;AACnD,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;IAC9B;;AAGA,IAAA,UAAU,CAAC,SAAiB,EAAA;QAC1B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AACjD,QAAA,IAAI,CAAC,WAAW,GAAG,QAAQ;AAC3B,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;IAC7B;;IAGA,oBAAoB,GAAA;QAClB,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK;AACzD,QAAA,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,GAAG,OAAO,GAAG,OAAO;AAElE,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,YAAY,CAAC;AACzE,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,GAAG,OAAO,GAAG,OAAO;AAE/D,QAAA,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,GAAG,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO;IACrE;;IAGA,mBAAmB,GAAA;QACjB,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK;AACvD,QAAA,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,GAAG,OAAO,GAAG,MAAM;QAEhE,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,QAAQ,EAAE;IACvF;;AAIA,IAAA,eAAe,CAAC,KAAY,EAAA;AAC1B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;;QAG1C,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC;QACjE,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC;QACvD,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;QACrD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;;AAGjD,QAAA,IAAI,CAAC,cAAc,IAAI,CAAC,aAAa,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,EAAE;;QAEvE;IACF;;AAGA,IAAA,YAAY,CAAC,GAAY,EAAA;AAEvB,QAAA,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,EAAE;;AAElB,YAAA,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;AAC5B,gBAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC;AACtF,gBAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC;gBAC5F;YACF;AAEA,YAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;AACnC,YAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;;AAGrC,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;YAChC;iBAAO;AACL,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YAC3B;QACF;IACF;;AAGA,IAAA,eAAe,CAAC,OAAgB,EAAA;AAC9B,QAAA,IAAI,OAAO,CAAC,QAAQ,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;QAC3B;aAAO;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QACzB;IACF;AAEQ,IAAA,WAAW,CAAC,OAAgB,EAAA;AAClC,QAAA,OAAO,CAAC,QAAQ,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAC5D,CAAC,GAAG,KAAK,GAAG,KAAK,OAAO,CACzB;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,WAAW,GAAG,SAAS;QAC9B;IACF;AAEQ,IAAA,SAAS,CAAC,OAAgB,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;QACrC;aAAO;AACL,YAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC;QACvC;IACF;AAEQ,IAAA,qBAAqB,CAAC,OAAgB,EAAA;QAC5C,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,OAAO,CAAC,QAAQ,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO;AAC1B,QAAA,IAAI,CAAC,qBAAqB,GAAG,CAAC,OAAO,CAAC;AACtC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;IAChC;AAEQ,IAAA,uBAAuB,CAAC,OAAgB,EAAA;AAC9C,QAAA,OAAO,CAAC,QAAQ,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;QAE9B,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AACjD,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC;QAC1C;IACF;IAEQ,kBAAkB,GAAA;QACxB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAwB,KAAI;AAC9C,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAmB,KAAI;gBACnC,IAAI,GAAG,EAAE;AACP,oBAAA,GAAG,CAAC,QAAQ,GAAG,KAAK;gBACtB;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;;IAGQ,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;AACxD,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,eAAe,GAAc,EAAE;;QAGrC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;;QAG9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAwB,KAAI;AAC9C,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAmB,KAAI;AACnC,gBAAA,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,EAAE;AACxB,oBAAA,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC3B;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;YACvD,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;QAC9C;;QAGA,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC5B,YAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAClD,YAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,OAAO,KAAK,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE;AAC1C,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,eAAe;IACxB;;IAGA,gBAAgB,GAAA;AAEd,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;AAC7E,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACjD,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;QACrC;AAAO,aAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;QAChD;aAAO;YACL,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;QACtC;IACF;;AAGA,IAAA,qBAAqB,CAAC,GAAY,EAAA;AAChC,QAAA,IACE,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,KAAK,QAAQ,EAC1E;AACA,YAAA,OAAO,IAAI;QACb;IACF;;AAGA,IAAA,uBAAuB,CAAC,GAAY,EAAA;AAClC,QAAA,IACE,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,KAAK,MAAM,EACxE;AACA,YAAA,OAAO,IAAI;QACb;IACF;;AAGA,IAAA,eAAe,CAAC,GAAY,EAAA;QAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,SAAS,EAAE;YAC1C,OAAO,IAAI,CAAC,UAAU,EAAE,SAAS,KAAK,GAAG,EAAE,EAAE;QAC/C;aAAO;YACL,OAAO,IAAI,CAAC,UAAU,EAAE,QAAQ,KAAK,GAAG,EAAE,EAAE;QAC9C;IACF;;AAGA,IAAA,oBAAoB,CAAC,GAAY,EAAA;QAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;QAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;QAChD,OAAO,YAAY,IAAI,aAAa;IACtC;;AAGA,IAAA,gBAAgB,CAAC,GAAY,EAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,KAAK;QAEnC,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,SAAS,EAAE;AAC1C,YAAA,OAAO,IAAI,CAAC,WAAW,KAAK,GAAG,EAAE,EAAE;QACrC;aAAO;;AAEL,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;AAChF,YAAA,OAAO,aAAa,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE;QACtC;IACF;;AAGA,IAAA,sBAAsB,CAAC,GAAY,EAAA;QACjC,IAAI,CAAC,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK;;AAG/B,QAAA,MAAM,OAAO,GAAG,GAAG,EAAE,EAAE;AACvB,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK;;QAG1B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAC5C,QAAA,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1G,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,MAAM;IACjF;;AAGA,IAAA,sBAAsB,CAAC,GAAY,EAAA;QACjC,IAAI,CAAC,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK;;AAG/B,QAAA,MAAM,OAAO,GAAG,GAAG,EAAE,EAAE;AACvB,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK;;QAG1B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAC5C,QAAA,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1G,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,QAAQ;IACnF;;AAGA,IAAA,iBAAiB,CAAC,GAAY,EAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;;AAGxE,QAAA,MAAM,OAAO,GAAG,GAAG,EAAE,EAAE;QACvB,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;IACnD;;AAGA,IAAA,cAAc,CAAC,GAAY,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC;AAChC,YAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC;AAChC,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;AAC3B,aAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;AACnE,aAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IAChF;;AAGA,IAAA,oBAAoB,CAAC,GAAY,EAAA;AAC/B,QAAA,OAAO,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,IAAI;AAClE,aAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IAChF;;AAGQ,IAAA,oBAAoB,CAAC,OAAgB,EAAA;AAE3C,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;YAChC;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;;YAEvD,IAAI,CAAC,mBAAmB,EAAE;AAC1B,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,OAAO;AAClC,YAAA,OAAO,CAAC,QAAQ,GAAG,IAAI;AACvB,YAAA,OAAO,CAAC,YAAY,GAAG,IAAI;QAC7B;aAAO;;AAEL,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,OAAO;AAChC,YAAA,OAAO,CAAC,QAAQ,GAAG,IAAI;AACvB,YAAA,OAAO,CAAC,UAAU,GAAG,IAAI;YACzB,IAAI,CAAC,cAAc,EAAE;QACvB;;AAGA,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;IAChC;;IAGQ,mBAAmB,GAAA;QACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAwB,KAAI;AAC9C,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAmB,KAAI;gBACnC,IAAI,GAAG,EAAE;AACP,oBAAA,GAAG,CAAC,QAAQ,GAAG,KAAK;AACpB,oBAAA,GAAG,CAAC,YAAY,GAAG,KAAK;AACxB,oBAAA,GAAG,CAAC,UAAU,GAAG,KAAK;AACtB,oBAAA,GAAG,CAAC,SAAS,GAAG,KAAK;gBACvB;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;IACjD;;IAGQ,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG;YAAE;QAE1D,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7E,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;;AAGzE,QAAA,MAAM,WAAW,GAAG,SAAS,IAAI,OAAO,GAAG,SAAS,GAAG,OAAO;AAC9D,QAAA,MAAM,SAAS,GAAG,SAAS,IAAI,OAAO,GAAG,OAAO,GAAG,SAAS;;AAG5D,QAAA,IAAI,SAAS,GAAG,OAAO,EAAE;;YAEvB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI;YAC1C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK;YAC7C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI;YAC1C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,GAAG,KAAK;QAC3C;QAEA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAwB,KAAI;AAC9C,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAmB,KAAI;AACnC,gBAAA,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE;AACjB,oBAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;;oBAGhD,IAAI,OAAO,GAAG,WAAW,IAAI,OAAO,GAAG,SAAS,EAAE;AAChD,wBAAA,GAAG,CAAC,SAAS,GAAG,IAAI;oBACtB;;oBAGA,IAAI,WAAW,CAAC,OAAO,EAAE,KAAK,SAAS,CAAC,OAAO,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,WAAW,CAAC,OAAO,EAAE,EAAE;AAChG,wBAAA,GAAG,CAAC,YAAY,GAAG,IAAI;AACvB,wBAAA,GAAG,CAAC,UAAU,GAAG,IAAI;AACrB,wBAAA,GAAG,CAAC,SAAS,GAAG,KAAK;oBACvB;gBACF;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;;AAGQ,IAAA,SAAS,CAAC,OAAe,EAAA;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAChC,QAAA,OAAO,CAAA,EAAG,KAAK,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;IAChF;;AAGA,IAAA,YAAY,CAAC,UAA2B,EAAA;AACtC,QAAA,OAAO,oBAAoB,CAAC,gBAAgB,CAAC,UAAU,CAAC;IAC1D;;AAGA,IAAA,WAAW,CAAC,SAAiB,EAAA;AAC3B,QAAA,OAAO,oBAAoB,CAAC,iBAAiB,CAAC,SAAS,CAAC;IAC1D;;AAGA,IAAA,mBAAmB,CAAC,SAAiB,EAAA;AACnC,QAAA,OAAO,oBAAoB,CAAC,cAAc,CAAC,SAAS,CAAC;IACvD;;IAGA,qBAAqB,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE;AAChC,YAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE;QACnC;AAAO,aAAA,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE;YACxC,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK;YACvD,IAAI,WAAW,EAAE;gBACf,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,QAAQ,EAAE;YACvF;AACA,YAAA,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,GAAG,OAAO,GAAG,MAAM;QAChD;aAAO;YACL,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK;YACzD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK;AAEvD,YAAA,IAAI,YAAY,IAAI,WAAW,EAAE;AAC/B,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,YAAY,CAAC;AACzE,gBAAA,MAAM,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,GAAG,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,IAAI,EAAE;gBACjG,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,QAAQ,EAAE;AAC9F,gBAAA,OAAO,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,OAAO,EAAE;YAClC;AACA,YAAA,OAAO,EAAE;QACX;IACF;;IAGQ,mBAAmB,CAAC,IAAY,EAAE,KAAa,EAAA;;;AAGrD,QAAA,IAAI;YACF,OAAO,qBAAqB,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC;QAC1D;AAAE,QAAA,MAAM;;AAEN,YAAA,OAAO,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;QAClC;IACF;;IAGQ,sBAAsB,GAAA;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,SAAS,EAAE;AAC1C,YAAA,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACjC;aAAO;;AAEL,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;AACrE,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC;YAC7E,OAAO,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACvF;IACF;;IAGA,mBAAmB,GAAA;AACjB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;AAC3C,QAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,YAAA,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC;YACjC,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AACtD,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;AACxB,gBAAA,OAAO,CAAA,EAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA,GAAA,EAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;YAC3E;iBAAO;AACL,gBAAA,OAAO,CAAA,EAAG,SAAS,CAAA,GAAA,EAAM,QAAQ,EAAE;YACrC;QACF;AACA,QAAA,OAAO,EAAE;IACX;;IAGA,eAAe,GAAA;AACb,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,sBAAsB,EAAE;AACxF,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,EAAE;QACnD,MAAM,KAAK,GAAG,EAAE;;AAGhB,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,EAAE;AACzD,QAAA,MAAM,OAAO,GAAG,mBAAmB,GAAG,IAAI,CAAC,cAAc;AACzD,QAAA,MAAM,OAAO,GAAG,mBAAmB,GAAG,IAAI,CAAC,gBAAgB;;QAG3D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,SAAS;QAC1D,MAAM,aAAa,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI;QAC/C,MAAM,aAAa,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI;;QAG/C,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC;QACzD,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC;AAEzD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AAC3B,YAAA,MAAM,IAAI,GAAG,SAAS,GAAG,CAAC;YAC1B,IAAI,IAAI,IAAI,gBAAgB,IAAI,IAAI,IAAI,gBAAgB,EAAE;AACxD,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAClB;QACF;AAEA,QAAA,OAAO,KAAK;IACd;;IAIQ,cAAc,GAAA;;AAEpB,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM;IAC3B;;IAGA,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE;AAC/B,YAAA,IAAI,CAAC,WAAW,GAAG,QAAQ;QAC7B;AAAO,aAAA,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE;AACxC,YAAA,IAAI,CAAC,WAAW,GAAG,OAAO;QAC5B;IACF;;AAGA,IAAA,aAAa,CAAC,SAA8B,EAAA;AAC1C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,sBAAsB,EAAE;AACxF,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,EAAE;AAC1D,QAAA,MAAM,YAAY,GAAG,SAAS,KAAK,MAAM,GAAG,gBAAgB,GAAG,EAAE,GAAG,gBAAgB,GAAG,EAAE;;AAGzF,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,EAAE;AACzD,QAAA,MAAM,OAAO,GAAG,mBAAmB,GAAG,IAAI,CAAC,cAAc;AACzD,QAAA,MAAM,OAAO,GAAG,mBAAmB,GAAG,IAAI,CAAC,gBAAgB;;QAG3D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,SAAS;QAC1D,MAAM,aAAa,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI;QAC/C,MAAM,aAAa,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI;;QAG/C,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC;QACzD,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC;;QAGzD,MAAM,eAAe,GAAG,YAAY;AACpC,QAAA,MAAM,eAAe,GAAG,YAAY,GAAG,EAAE;;QAGzC,KAAK,eAAe,IAAI,gBAAgB,IAAI,eAAe,IAAI,gBAAgB,GAAG;YAChF,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;AACpD,YAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;QACrC;IACF;8GA/iCW,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjC,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,GAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,KAAA,EAAA,OAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxC9C,g8aA6RM,EAAA,MAAA,EAAA,CAAA,woSAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDxPM,WAAW,8BAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGvE,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAR7C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,EAAA,UAAA,EAG1B,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,wBAAwB,CAAC,EAAA,eAAA,EAClE,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,g8aAAA,EAAA,MAAA,EAAA,CAAA,woSAAA,CAAA,EAAA;;sBAI9C;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;;MEnEU,8BAA8B,CAAA;8GAA9B,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAA9B,8BAA8B,EAAA,OAAA,EAAA,CAH/B,iCAAiC,CAAA,EAAA,OAAA,EAAA,CACjC,iCAAiC,CAAA,EAAA,CAAA,CAAA;AAEhC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,YAH/B,iCAAiC,CAAA,EAAA,CAAA,CAAA;;2FAGhC,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAJ1C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,iCAAiC,CAAC;oBAC5C,OAAO,EAAE,CAAC,iCAAiC,CAAC;AAC7C,iBAAA;;;ACND;;AAEG;;ACFH;;AAEG;;;;"}