angular-hijri-gregorian-datepicker
Version:
[](https://www.npmjs.com/package/angular-hijri-gregorian-datepicker) [](https://www.npmjs.com/package/angular-hijri-
1 lines • 87.5 kB
Source Map (JSON)
{"version":3,"file":"angular-hijri-gregorian-datepicker.mjs","sources":["../../../projects/hijri-gregorian-datepicker/src/_services/date-utilities.service.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":["import { Injectable } from '@angular/core';\nimport * as datesDictionary from '../_data/dictionary.json';\nimport { Data, DayInfo, MonthDays } from '../_interfaces/calendar-model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DateUtilitiesService {\n public calendarData: Data;\n\n constructor() {\n this.calendarData = (datesDictionary as any)['default']; //prod\n // this.calendarData = datesDictionary; //debug\n }\n\n parseDate(dateStr: string): Date | null {\n if (!dateStr) {\n return null;\n }\n const parts = dateStr?.split('/');\n if (parts.length !== 3) {\n return null;\n }\n const [day, month, year] = parts.map(Number);\n if (\n isNaN(day) ||\n isNaN(month) ||\n isNaN(year) ||\n day < 1 ||\n day > 31 ||\n month < 1 ||\n month > 12 ||\n year < 1\n ) {\n return null;\n }\n return new Date(year, month - 1, day);\n }\n\n 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 getDayShortHand(date: Date): string {\n return date.toLocaleString('en-US', { weekday: 'short' });\n }\n\n generateDates(fD: DayInfo, lD: DayInfo, uC: number): MonthDays {\n const startDate = this.parseDate(fD?.gD);\n const endDate = this.parseDate(lD?.gD);\n const daysInMonth: MonthDays = [];\n let currentGregorianDate = new Date(startDate);\n let currentUmmAlQuraDay = parseInt(fD?.uD?.split('/')[0]);\n let currentUmmAlQuraMonth = parseInt(fD?.uD?.split('/')[1]);\n let currentUmmAlQuraYear = parseInt(fD?.uD?.split('/')[2]);\n let daysInCurrentUmmAlQuraMonth = uC;\n while (currentGregorianDate <= endDate) {\n const ummAlQuraDate = `${currentUmmAlQuraDay\n .toString()\n .padStart(2, '0')}/${currentUmmAlQuraMonth\n .toString()\n .padStart(2, '0')}/${currentUmmAlQuraYear}`;\n daysInMonth.push({\n gD: this.formatDate(currentGregorianDate),\n uD: ummAlQuraDate,\n dN: this.getDayShortHand(currentGregorianDate),\n uC: 0,\n });\n currentGregorianDate.setDate(currentGregorianDate.getDate() + 1);\n currentUmmAlQuraDay += 1;\n if (currentUmmAlQuraDay > daysInCurrentUmmAlQuraMonth) {\n currentUmmAlQuraDay = 1;\n currentUmmAlQuraMonth += 1;\n if (currentUmmAlQuraMonth > 12) {\n currentUmmAlQuraMonth = 1;\n currentUmmAlQuraYear += 1;\n }\n const nextMonthData =\n this.calendarData[currentUmmAlQuraYear.toString()]?.[\n currentUmmAlQuraMonth.toString()\n ];\n daysInCurrentUmmAlQuraMonth = nextMonthData ? nextMonthData.fD.uC : 30;\n }\n }\n return daysInMonth;\n }\n\n convertDate(dateStr: string, isGregorian: boolean): DayInfo | null {\n if (!dateStr) return null;\n\n if (isGregorian) {\n // Preprocess Gregorian date\n const gregorianDate = this.parseDate(dateStr);\n if (!gregorianDate) return null;\n const formattedDate = this.formatDate(gregorianDate);\n\n for (const yearKey in this.calendarData) {\n for (const monthKey in this.calendarData[yearKey]) {\n const monthData = this.calendarData[yearKey][monthKey];\n\n if (\n this.isDateInMonthRange(\n formattedDate,\n monthData.fD?.gD,\n monthData.lD?.gD\n )\n ) {\n const daysInMonth = this.generateDates(\n monthData.fD,\n monthData.lD,\n monthData.fD?.uC\n );\n\n const dayMatch = daysInMonth.find((d) => d.gD === formattedDate);\n if (dayMatch) return dayMatch;\n }\n }\n }\n } else {\n const [day, month, year] = dateStr.split('/').map(Number);\n\n if (isNaN(day) || isNaN(month) || isNaN(year)) return null;\n\n for (const yearKey in this.calendarData) {\n for (const monthKey in this.calendarData[yearKey]) {\n const monthData = this.calendarData[yearKey][monthKey];\n\n if (\n this.isDateInMonthRange(\n `${day}/${month}/${year}`,\n monthData.fD?.uD,\n monthData.lD?.uD\n )\n ) {\n const daysInMonth = this.generateDates(\n monthData.fD,\n monthData.lD,\n monthData.fD?.uC\n );\n\n const dayMatch = daysInMonth.find((d) => {\n const [uDay, uMonth, uYear] = d?.uD?.split('/').map(Number);\n return uDay === day && uMonth === month && uYear === year;\n });\n\n if (dayMatch) return dayMatch;\n }\n }\n }\n }\n\n return null;\n }\n\n private isDateInMonthRange(\n dateToCheck: string,\n monthStartDate: string | undefined,\n monthEndDate: string | undefined\n ): boolean {\n if (!monthStartDate || !monthEndDate) return false;\n\n const checkDate = this.parseDate(dateToCheck);\n const startDate = this.parseDate(monthStartDate);\n const endDate = this.parseDate(monthEndDate);\n\n if (!checkDate || !startDate || !endDate) return false;\n\n return checkDate >= startDate && checkDate <= endDate;\n }\n\n getMonthData(inputDate: string, type: string): DayInfo[] | null {\n const [day, month, year] = inputDate?.split('/').map(Number);\n let isGregorian: boolean;\n if (type == 'greg') {\n isGregorian = true;\n } else {\n isGregorian = false;\n }\n if (isGregorian) {\n return this.getGregorianMonthData(day, month, year);\n } else {\n return this.getUmAlQurraMonthData(day, month, year);\n }\n }\n\n getGregorianMonthData(\n day: number,\n month: number,\n year: number\n ): DayInfo[] | null {\n const yearData = this.calendarData[year];\n if (!yearData) return null;\n const monthData = yearData[month];\n if (!monthData) return null;\n const monthArray: DayInfo[] = [];\n const endDate = new Date(year, month, 0);\n for (let d = 1; d <= endDate.getDate(); d++) {\n const offset = d - 1;\n\n monthArray.push({\n gD: `${d.toString().padStart(2, '0')}/${month\n .toString()\n .padStart(2, '0')}/${year}`,\n uD: this.calculateUmAlQurraDate(\n monthData.fD.uD,\n offset,\n monthData.fD.uC\n ),\n dN: this.getDayName(new Date(year, month - 1, d).getDay()),\n uC: monthData.fD.uC,\n });\n }\n\n return monthArray;\n }\n\n getUmAlQurraMonthData(\n day: number,\n month: number,\n year: number\n ): DayInfo[] | null {\n for (const gregorianYear in this.calendarData) {\n const yearData = this.calendarData[parseInt(gregorianYear)];\n\n for (const monthIndex in yearData) {\n const monthData = yearData[parseInt(monthIndex)];\n const [fDay, fMonth, fYear] = monthData?.fD?.uD?.split('/').map(Number);\n\n if (fYear === year && fMonth === month) {\n const totalDays = monthData.fD.uC;\n const monthArray: DayInfo[] = [];\n const umAlQurraStartDate = `01/${month\n .toString()\n .padStart(2, '0')}/${year}`;\n const dayDifference = fDay - 1;\n\n const startGregorianDate = this.calculateGregorianDate(\n monthData.fD.gD,\n -dayDifference\n );\n\n for (let i = 0; i < totalDays; i++) {\n const uDate = this.calculateUmAlQurraDate(\n umAlQurraStartDate,\n i,\n totalDays\n );\n const gDate = this.calculateGregorianDate(startGregorianDate, i);\n const [gDay, gMonth, gYear] = gDate?.split('/').map(Number);\n const dayName = this.getDayName(\n new Date(gYear, gMonth - 1, gDay).getDay()\n );\n\n monthArray.push({\n gD: gDate,\n uD: uDate,\n dN: dayName,\n uC: totalDays,\n });\n }\n\n return monthArray;\n }\n }\n }\n\n return null;\n }\n\n calculateGregorianDate(startGDate: string, offset: number): string {\n const [day, month, year] = startGDate?.split('/').map(Number);\n const newDate = new Date(year, month - 1, day + offset);\n\n return `${newDate.getDate().toString().padStart(2, '0')}/${(\n newDate.getMonth() + 1\n )\n .toString()\n .padStart(2, '0')}/${newDate.getFullYear()}`;\n }\n\n calculateUmAlQurraDate(\n startUDate: string,\n offset: number,\n uC: number\n ): string {\n const [day, month, year] = startUDate?.split('/').map(Number);\n\n let newDay = day + offset;\n let newMonth = month;\n let newYear = year;\n\n while (newDay > uC) {\n newDay -= uC;\n newMonth += 1;\n }\n\n while (newMonth > 12) {\n newMonth = 1;\n newYear += 1;\n }\n\n return `${newDay.toString().padStart(2, '0')}/${newMonth\n .toString()\n .padStart(2, '0')}/${newYear}`;\n }\n\n getDayName(dayIndex: number): string {\n const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n return days[dayIndex];\n }\n\n /// Check date is it in past or future\n checkPastOrFuture(inputDate: any, targetDate: any) {\n if (inputDate) {\n const [day, month, year] = inputDate?.split('/').map(Number);\n const dateToCheck = new Date(year, month - 1, day);\n const today = targetDate;\n today.setHours(0, 0, 0, 0);\n if (dateToCheck > today) {\n return 'Future';\n } else if (dateToCheck < today) {\n return 'Past';\n } else {\n return 'Today';\n }\n }\n }\n\n /// Convert english numbers to arabic equivalent\n parseEnglish(englishNum: any) {\n if (!englishNum) return englishNum;\n const numStr = String(englishNum);\n const arabicNumbers = [\n '\\u0660',\n '\\u0661',\n '\\u0662',\n '\\u0663',\n '\\u0664',\n '\\u0665',\n '\\u0666',\n '\\u0667',\n '\\u0668',\n '\\u0669',\n ];\n return numStr.replace(/[0-9]/g, (digit) => {\n return arabicNumbers[Number(digit)] || digit;\n });\n }\n\n /// Convert arabic numbers to english equivalent\n parseArabic(arabicNum: any) {\n return arabicNum.replace(/[٠١٢٣٤٥٦٧٨٩]/g, function (d: string) {\n return d.charCodeAt(0) - 1632;\n });\n }\n\n ///\n convertDateNumerals(date: string, targetLang: 'en' | 'ar'): string {\n const arabicNumbers = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];\n const englishNumbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];\n\n const toArabic = (value: string) =>\n value\n .split('')\n .map((char) => (/\\d/.test(char) ? arabicNumbers[+char] : char))\n .join('');\n\n const toEnglish = (value: string) =>\n value\n .split('')\n .map((char) => {\n const index = arabicNumbers.indexOf(char);\n return index > -1 ? englishNumbers[index] : char;\n })\n .join('');\n\n if (targetLang === 'ar') {\n const [day, month, year] = date.split('/');\n return `${toArabic(year)}/${toArabic(month)}/${toArabic(day)}`;\n } else {\n const [year, month, day] = date.split('/');\n return `${toEnglish(day)}/${toEnglish(month)}/${toEnglish(year)}`;\n }\n }\n}\n","import {\n Component,\n Input,\n OnInit,\n Output,\n EventEmitter,\n HostBinding,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\nimport { stylesConfig } from '../_interfaces/styles-config.model';\nimport { DateUtilitiesService } from '../_services/date-utilities.service';\nimport { TodayDate, DayInfo } from '../_interfaces/calendar-model';\nimport * as themesConfig from '../themes/themes.json';\n@Component({\n selector: 'hijri-gregorian-datepicker',\n templateUrl: './hijri-gregorian-datepicker.component.html',\n styleUrls: ['./hijri-gregorian-datepicker.component.scss'],\n})\nexport class HijriGregorianDatepickerComponent implements OnInit, OnChanges {\n /// Inputs\n @Input() markToday: boolean = true;\n @Input() canChangeMode: boolean = true;\n @Input() todaysDateSection: boolean = true;\n @Input() futureValidation: boolean = true;\n @Input() disableYearPicker: boolean = false;\n @Input() disableMonthPicker: boolean = false;\n @Input() disableDayPicker: boolean = false;\n @Input() multiple: boolean = false;\n @Input() isRequired: boolean = false;\n @Input() showConfirmButton: boolean = true;\n @Input() futureValidationMessage: boolean = false;\n @Input() arabicLayout: boolean = false;\n @Input() mode: string = 'greg';\n @Input() dir: string = 'ltr';\n @Input() locale: string = 'en';\n @Input() submitTextButton: string = 'Confirm';\n @Input() todaysDateText: string = \"Today's Date\";\n @Input() ummAlQuraDateText: string = 'Hijri Date';\n @Input() monthSelectLabel: string = 'Month';\n @Input() yearSelectLabel: string = 'Year';\n @Input() futureValidationMessageEn: string;\n @Input() futureValidationMessageAr: string;\n @Input() theme?: string = '';\n @Input() pastYearsLimit: number = 90;\n @Input() futureYearsLimit: number = 0;\n @Input() styles?: stylesConfig = {};\n /// Outputs\n @Output() onSubmit = new EventEmitter<object>();\n @Output() onDaySelect = new EventEmitter<object>();\n @Output() onMonthChange = new EventEmitter<object>();\n @Output() onYearChange = new EventEmitter<object>();\n /// Variables\n ummAlQuraMonths = [\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 gregMonths = [\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 ummAlQuraYear: number;\n gregYear: number;\n years: any[];\n weeks: any[];\n months: any[];\n weekdaysEn = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n weekdaysAr = ['سبت', 'جمعة', 'خميس', 'أربعاء', 'ثلاثاء', 'اثنين', 'أحد'];\n // weekdaysAr = ['س', 'ج', 'خ', 'أر', 'ث', 'إث', 'أح'];\n todaysDate: TodayDate = {};\n selectedDay: DayInfo;\n periodForm: UntypedFormGroup;\n multipleSelectedDates = [] as DayInfo[];\n themes = [] as any;\n @HostBinding('style.font-family') fontFamilyStyle: string;\n constructor(\n public formBuilder: UntypedFormBuilder,\n public _dateUtilsService: DateUtilitiesService\n ) {}\n\n ngOnInit(): void {\n this.initTheme();\n this.initializeForm();\n this.getTodaysDateInfo();\n this.initializeYearsAndMonths();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (!changes['mode'].isFirstChange()) {\n this.changeCalendarMode();\n }\n }\n\n initTheme() {\n if (this.theme != '') {\n this.themes = themesConfig;\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 this.fontFamilyStyle = this.styles.fontFamily;\n }\n\n /// Initialize form control for month and year select\n initializeForm() {\n this.periodForm = this.formBuilder.group({\n year: [{ value: '', disabled: this.disableYearPicker }, []],\n month: [{ value: '', disabled: this.disableMonthPicker }, []],\n });\n }\n\n // Initialize years and months for calendar\n initializeYearsAndMonths() {\n this.years = [];\n this.months = [];\n if (this.mode == 'greg') {\n this.gregYear =\n this.futureYearsLimit == 0\n ? Number(this.todaysDate.gregorian?.split('/')[2])\n : Number(this.todaysDate.gregorian?.split('/')[2]) +\n this.futureYearsLimit;\n for (let i = 0; i < this.gregYear; i++) {\n if (i < this.pastYearsLimit) {\n let val = this.gregYear--;\n this.years.push(val);\n } else {\n break;\n }\n }\n this.months = this.gregMonths;\n } else {\n this.ummAlQuraYear =\n this.futureYearsLimit == 0\n ? Number(this.todaysDate.ummAlQura?.split('/')[2])\n : Number(this.todaysDate.ummAlQura?.split('/')[2]) +\n this.futureYearsLimit;\n for (let i = 0; i < this.ummAlQuraYear; i++) {\n if (i < this.pastYearsLimit) {\n let val = this.ummAlQuraYear--;\n this.years.push(val);\n } else {\n break;\n }\n }\n this.months = this.ummAlQuraMonths;\n }\n this.years.map((year: any) => {\n if (\n year ==\n (this.mode == 'greg'\n ? this.todaysDate.gregorian?.split('/')[2]\n : this.todaysDate.ummAlQura?.split('/')[2])\n ) {\n this.periodForm.controls['year'].setValue(year);\n }\n });\n this.months.map((month: any) => {\n if (\n month.value ==\n (this.mode == 'greg'\n ? this.todaysDate.gregorian?.split('/')[1]\n : this.todaysDate.ummAlQura?.split('/')[1])\n ) {\n this.periodForm.controls['month'].setValue(month.value);\n }\n });\n }\n\n /// On change event of years and months\n onPeriodChange(type: string) {\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 const days = this._dateUtilsService.getMonthData(\n '01/' +\n this.periodForm.controls['month'].value +\n '/' +\n this.periodForm.controls['year'].value,\n this.mode\n );\n this.weeks = this.generateWeeksArray(days);\n }\n\n /// Get todays(greg and umm al qura) date info\n getTodaysDateInfo() {\n this.todaysDate.gregorian = this._dateUtilsService.formatDate(new Date());\n this.todaysDate.ummAlQura = this._dateUtilsService.convertDate(\n this.todaysDate.gregorian,\n true\n )?.uD;\n this.generatetMonthData(\n this.mode == 'greg'\n ? this.todaysDate.gregorian\n : this.todaysDate.ummAlQura\n );\n }\n\n /// Generate month days from JSON\n generatetMonthData(date: string) {\n const days = this._dateUtilsService.getMonthData(date, this.mode);\n this.weeks = this.generateWeeksArray(days);\n }\n\n /// Generate month weeks\n generateWeeksArray(daysArray: any) {\n const firstDayName = daysArray[0]?.dN;\n const startIndex = this.weekdaysEn.indexOf(firstDayName);\n const weeks = [[]] as any;\n let currentWeek = 0;\n let currentDayIndex = startIndex;\n\n daysArray?.forEach((day: any) => {\n if (!weeks[currentWeek]) {\n weeks[currentWeek] = [];\n }\n\n weeks[currentWeek][currentDayIndex] = day;\n currentDayIndex++;\n\n if (currentDayIndex === 7) {\n currentDayIndex = 0;\n currentWeek++;\n }\n });\n weeks.forEach((week: any) => {\n while (week.length < 7) {\n week.push({});\n }\n });\n return weeks;\n }\n\n /// Change calendar mode 'greg' or 'ummAlQura'\n changeCalendarMode() {\n this.mode = this.mode == 'greg' ? 'ummAlQura' : 'greg';\n this.initializeYearsAndMonths();\n this.generatetMonthData(\n '01/' +\n this.periodForm.controls['month'].value +\n '/' +\n this.periodForm.controls['year'].value\n );\n }\n\n /// On day clicked handler\n onDayClicked(day: DayInfo) {\n if (day && day?.gD) {\n if (this.futureValidation) {\n if (this.checkFutureValidation(day)) {\n this.futureValidationMessage = true;\n } else {\n this.futureValidationMessage = false;\n this.markDaySelected(day);\n }\n } else {\n this.markDaySelected(day);\n }\n }\n }\n\n /// Mark day as selected\n markDaySelected(dayInfo: DayInfo) {\n if (dayInfo.selected) {\n dayInfo.selected = false;\n this.multipleSelectedDates = this.multipleSelectedDates.filter(\n (day) => day !== dayInfo\n );\n if (!this.multiple) {\n this.selectedDay = undefined;\n }\n } else {\n if (!this.multiple) {\n this.weeks.forEach((week: any) => {\n week.forEach((day: DayInfo) => {\n day.selected = false;\n });\n });\n\n dayInfo.selected = true;\n this.selectedDay = dayInfo;\n this.multipleSelectedDates = [dayInfo];\n this.onDaySelect.emit(dayInfo);\n } else {\n dayInfo.selected = true;\n this.onDaySelect.emit(dayInfo);\n if (!this.multipleSelectedDates.includes(dayInfo)) {\n this.multipleSelectedDates.push(dayInfo);\n }\n }\n }\n }\n\n /// On confirm button clicked\n onConfirmClicked() {\n 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) {\n if (\n this._dateUtilsService.checkPastOrFuture(day?.gD, new Date()) == 'Future'\n ) {\n return true;\n }\n }\n\n /// Check if passed day is today or not\n checkTodaysDate(day: DayInfo) {\n return (\n this.todaysDate?.gregorian == day?.gD ||\n this.todaysDate?.ummAlQura == day?.uD\n );\n }\n}\n","<div class=\"calendar-container\">\n <div class=\"toggle-section\" [dir]=\"dir\" *ngIf=\"canChangeMode\" [ngStyle]=\"{ color: styles.primaryColor }\">\n <span> {{ ummAlQuraDateText }} </span>\n <label class=\"switch\">\n <input type=\"checkbox\" [disabled]=\"!canChangeMode\" [checked]=\"mode === 'ummAlQura'\"\n (change)=\"changeCalendarMode()\" #calendarCheckbox />\n <span class=\"slider\"\n [ngStyle]=\"calendarCheckbox.checked ? { 'background-color': styles.primaryColor } : {'background-color': styles.backgroundColor}\"></span>\n </label>\n </div>\n\n <div class=\"todays-date-section\" *ngIf=\"todaysDateSection\" [ngStyle]=\"{\n 'background-color': styles.backgroundColor,\n color: styles.primaryColor,\n 'border-radius': styles.borderRadius\n }\">\n <div class=\"text-info\" [ngClass]=\"{\n order: dir == 'rtl'\n }\">\n <p>{{ todaysDateText }}</p>\n </div>\n\n <div class=\"data\" [dir]=\"dir\" [ngStyle]=\"{\n 'background-color': styles.todaysDateBgColor,\n color: styles.todaysDateTextColor\n }\">\n <p *ngIf=\"mode == 'ummAlQura'\">\n <!-- {{todaysDate.ummAlQura}} -->\n {{ locale == 'ar' ? _dateUtilsService.convertDateNumerals(todaysDate.ummAlQura,'ar') : todaysDate.ummAlQura }}\n </p>\n <p *ngIf=\"mode == 'greg'\">\n {{ locale == 'ar' ? _dateUtilsService.convertDateNumerals(todaysDate.gregorian,'ar') : todaysDate.gregorian }}\n </p>\n </div>\n </div>\n\n <div class=\"period-container\">\n <form [formGroup]=\"periodForm\" class=\"period-form\">\n <div class=\"select-item\" [ngClass]=\"{\n order: dir == 'ltr'\n }\" [ngStyle]=\"{ 'background-color': styles.backgroundColor, 'border-radius': styles.borderRadius }\">\n <label *ngIf=\"!periodForm.controls['year'].value\">{{\n yearSelectLabel\n }}</label>\n\n <select formControlName=\"year\" class=\"{{ 'icon-' + dir }}\" placeholder=\"السنة\" (change)=\"onPeriodChange('year')\"\n [dir]=\"dir\" [ngStyle]=\"{\n color: styles.primaryColor,\n 'font-family': styles.fontFamily\n }\">\n <option *ngFor=\"let year of years\" [ngValue]=\"year\">\n {{ locale == \"ar\" ? _dateUtilsService.parseEnglish(year) : year }}\n </option>\n </select>\n </div>\n\n <div class=\"select-item\" [ngClass]=\"{\n order: dir == 'rtl'\n }\" [ngStyle]=\"{ 'background-color': styles.backgroundColor, 'border-radius': styles.borderRadius }\">\n <label *ngIf=\"!periodForm.controls['month'].value\">{{\n monthSelectLabel\n }}</label>\n <select class=\"{{ 'icon-' + dir }}\" formControlName=\"month\" (change)=\"onPeriodChange('month')\" [dir]=\"dir\"\n [ngStyle]=\"{\n color: styles.primaryColor,\n 'font-family': styles.fontFamily\n }\">\n <option *ngFor=\"let month of months\" [ngValue]=\"month.value\">\n {{ locale == \"ar\" ? month?.labelAr : month?.labelEn }}\n </option>\n </select>\n </div>\n </form>\n </div>\n\n <div class=\"calendar-layout\" [ngStyle]=\"{ 'background-color': styles.backgroundColor, 'border-radius': styles.borderRadius }\">\n <div class=\"week-days\">\n <div class=\"week-day\" [ngStyle]=\"{ color: styles.dayNameColor }\"\n *ngFor=\"let date of locale == 'ar' ? weekdaysAr : weekdaysEn\">\n {{ date }}\n </div>\n </div>\n\n <div [dir]=\"dir\">\n <div class=\"week\" *ngFor=\"let week of weeks\">\n <div class=\"day\" *ngFor=\"let day of week\" (click)=\"disableDayPicker == false ? onDayClicked(day) : ''\"\n [ngStyle]=\"{\n 'background-color': styles.backgroundColor,\n color: styles.dayColor\n }\">\n <div id=\"greg-day\" [ngClass]=\"{\n 'todays-date': checkTodaysDate(day),\n 'selected-date': day?.selected == true\n }\" [ngStyle]=\"{\n border:\n markToday && checkTodaysDate(day)\n ? '1px solid ' + styles.secondaryColor\n : '',\n 'background-color':\n day?.selected == true ? styles.secondaryColor : '',\n color:\n (day?.selected == true ? styles.todaysDateTextColor : '') ||\n (checkFutureValidation(day) && futureValidation\n ? styles.disabledDayColor\n : '')\n }\">\n <span *ngIf=\"mode == 'greg'\">{{ \n locale == 'ar' \n ? _dateUtilsService.parseEnglish(day?.gD?.split(\"/\")[0] | number) : \n day?.gD?.split(\"/\")[0] | number\n }}</span>\n\n <span id=\"ummAlQura-day\" *ngIf=\"mode == 'ummAlQura'\">{{\n locale == 'ar' \n ? _dateUtilsService.parseEnglish(day?.uD?.split(\"/\")[0] | number)\n : day?.uD?.split(\"/\")[0] | number\n }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"future-validation\" dir=\"auto\" *ngIf=\"futureValidationMessage\">\n <span *ngIf=\"locale == 'ar'\">\n {{ futureValidationMessageAr }}\n </span>\n <span *ngIf=\"locale == 'en'\">\n {{ futureValidationMessageEn }}\n </span>\n </div>\n <div>\n <button type=\"button\" class=\"confirm-btn\" [disabled]=\"\n isRequired &&\n ((!selectedDay && !multiple) ||\n (!multipleSelectedDates.length && multiple))\n \" (click)=\"onConfirmClicked()\" *ngIf=\"showConfirmButton\" [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 </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { HijriGregorianDatepickerComponent } from './hijri-gregorian-datepicker.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n declarations: [HijriGregorianDatepickerComponent],\n imports: [FormsModule, ReactiveFormsModule, CommonModule],\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';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["datesDictionary['default']","i2.DateUtilitiesService"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}