Repository: vacanza/holidays
Pull request #2232 (2025-01-20 17:48:26)

v0.65
Version 0.65
============

Released January 20, 2025

- Update Afghanistan and Iran holidays: change weekend to FRI-SAT and FRI respectively (#2223 by @gio8tisu, @arkid15r)
- Update Afghanistan holidays (#2221 by @KJhellico)
- Update South Korea holidays: 2025 temporary public holidays (#2218 by @YiGeon)
- Update ruff from v0.8.6 to v0.9.1 (#2224 by @arkid15r)
- Add faster date parsing from strings in ISO 8601 format (#2227 by @KJhellico)
- Add signed artifacts path (#2216 by @arkid15r)


Patch:
diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml
index 6410defd..6cd7cba7 100644
--- a/.github/workflows/ci-cd.yml
+++ b/.github/workflows/ci-cd.yml
@@ -268,7 +268,8 @@ jobs:
 
       - name: Compute SHA1 checksums
         run: |
-          for file in dist/*; do
+          cd dist
+          for file in *; do
             sha1sum "$file" > "$file.sha1"
           done
 
@@ -283,7 +284,7 @@ jobs:
         uses: actions/upload-artifact@v4
         with:
           name: signed-artifacts
-          path: dist/
+          path: dist
 
   update-github-release:
     name: Update GitHub release with SBOM and signed artifacts
@@ -302,6 +303,7 @@ jobs:
         uses: actions/download-artifact@v4
         with:
           name: signed-artifacts
+          path: dist
 
       - name: Update Github release
         env:
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index e3253093..aee27c40 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -23,7 +23,7 @@ repos:
           - --py39-plus
 
   - repo: https://github.com/astral-sh/ruff-pre-commit
-    rev: v0.8.6
+    rev: v0.9.2
     hooks:
       - id: ruff
       - id: ruff-format
@@ -39,7 +39,7 @@ repos:
           - docs/file_header.txt
 
   - repo: https://github.com/pycqa/bandit
-    rev: 1.8.0
+    rev: 1.8.2
     hooks:
       - id: bandit
         additional_dependencies:
diff --git a/CHANGES b/CHANGES
index a2a88384..a2acecb5 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,15 @@
+Version 0.65
+============
+
+Released January 20, 2025
+
+- Update Afghanistan and Iran holidays: change weekend to FRI-SAT and FRI respectively (#2223 by @gio8tisu, @arkid15r)
+- Update Afghanistan holidays (#2221 by @KJhellico)
+- Update South Korea holidays: 2025 temporary public holidays (#2218 by @YiGeon)
+- Update ruff from v0.8.6 to v0.9.1 (#2224 by @arkid15r)
+- Add faster date parsing from strings in ISO 8601 format (#2227 by @KJhellico)
+- Add signed artifacts path (#2216 by @arkid15r)
+
 Version 0.64
 ============
 
@@ -18,7 +30,7 @@ Released January 6, 2025
 - Add Norway holidays localization: th (#2200 by @ansntu)
 - Add Russia holidays localization: th (#2190 by @PPsyrius, @arkid15r)
 - Add Ukraine holidays localization: th (#2189 by @PPsyrius, @arkid15r)
-- Sign release artifacts using Sigstore (#2195 by @arkid15r
+- Sign release artifacts using Sigstore (#2195 by @arkid15r)
 
 Version 0.63
 ============
diff --git a/SECURITY.md b/SECURITY.md
index da98187d..849c9e0b 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -4,8 +4,8 @@
 
 | Version | Supported          |
 | ------- | ------------------ |
-| 0.64    | :white_check_mark: |
-| < 0.64  | :x:                |
+| 0.65    | :white_check_mark: |
+| < 0.65  | :x:                |
 
 ## Reporting a Vulnerability
 
diff --git a/holidays/countries/afghanistan.py b/holidays/countries/afghanistan.py
index d1b9ee5d..4ef6c679 100644
--- a/holidays/countries/afghanistan.py
+++ b/holidays/countries/afghanistan.py
@@ -12,31 +12,46 @@
 
 from gettext import gettext as tr
 
-from holidays.groups import InternationalHolidays, IslamicHolidays
+from holidays.calendars import _CustomIslamicHolidays
+from holidays.calendars.gregorian import (
+    JAN,
+    MAR,
+    APR,
+    MAY,
+    JUN,
+    JUL,
+    AUG,
+    SEP,
+    OCT,
+    NOV,
+    DEC,
+    FRI,
+    SAT,
+)
+from holidays.groups import InternationalHolidays, IslamicHolidays, PersianCalendarHolidays
 from holidays.holiday_base import HolidayBase
 
 
-class Afghanistan(HolidayBase, InternationalHolidays, IslamicHolidays):
+class Afghanistan(HolidayBase, InternationalHolidays, IslamicHolidays, PersianCalendarHolidays):
     """
     https://en.wikipedia.org/wiki/Public_holidays_in_Afghanistan
     https://www.timeanddate.com/holidays/afghanistan/
+    https://en.wikipedia.org/wiki/Workweek_and_weekend
     """
 
     country = "AF"
     default_language = "fa_AF"
     # %s (estimated).
     estimated_label = tr("%s (برآورد شده)")
-    # %s (observed).
-    observed_label = tr("%s (مشاهده شده)")
-    # %s (observed, estimated).
-    observed_estimated_label = tr("%s (مشاهده شده، برآورد شده)")
     supported_languages = ("en_US", "fa_AF", "ps_AF")
     # Afghanistan's regaining of full independence from British influence.
     start_year = 1919
+    weekend = {FRI, SAT}
 
     def __init__(self, *args, **kwargs):
         InternationalHolidays.__init__(self)
-        IslamicHolidays.__init__(self)
+        IslamicHolidays.__init__(self, AfghanistanIslamicHolidays)
+        PersianCalendarHolidays.__init__(self)
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
@@ -49,7 +64,7 @@ class Afghanistan(HolidayBase, InternationalHolidays, IslamicHolidays):
 
         if self._year <= 1996 or 2001 <= self._year <= 2020:
             # Nowruz.
-            self._add_holiday_mar_21(tr("نوروز"))
+            self._add_nowruz_day(tr("نوروز"))
 
         if self._year >= 1992:
             # Mojahedin's Victory Day.
@@ -64,13 +79,26 @@ class Afghanistan(HolidayBase, InternationalHolidays, IslamicHolidays):
             self._add_holiday_may_9(tr("روز پیروزی شوروی"))
 
         if self._year >= 2022:
+            # Islamic Emirate Victory Day.
+            self._add_islamic_emirat_victory_day(tr("روز پیروزی امارت اسلامی"))
+
             # American Withdrawal Day.
             self._add_holiday_aug_31(tr("روز خروج آمریکایی ها"))
 
-        if self._year >= 2012:
+        if 2012 <= self._year <= 2020:
             # Martyrs' Day.
             self._add_holiday_sep_9(tr("روز شهیدان"))
 
+        if self._year <= 2021:
+            # Ashura.
+            self._add_ashura_day(tr("عاشورا"))
+
+        # Prophet's Birthday.
+        self._add_mawlid_day(tr("میلاد پیامبر"))
+
+        # First Day of Ramadan.
+        self._add_ramadan_beginning_day(tr("اول رمضان"))
+
         # Eid al-Fitr.
         name = tr("عید فطر")
         self._add_eid_al_fitr_day(name)
@@ -86,15 +114,6 @@ class Afghanistan(HolidayBase, InternationalHolidays, IslamicHolidays):
         self._add_eid_al_adha_day_two(name)
         self._add_eid_al_adha_day_three(name)
 
-        # Ashura.
-        self._add_ashura_day(tr("عاشورا"))
-
-        # First Day of Ramadan.
-        self._add_ramadan_beginning_day(tr("اول رمضان"))
-
-        # Prophet's Birthday.
-        self._add_mawlid_day(tr("میلاد پیامبر"))
-
 
 class AF(Afghanistan):
     pass
@@ -102,3 +121,72 @@ class AF(Afghanistan):
 
 class AFG(Afghanistan):
     pass
+
+
+class AfghanistanIslamicHolidays(_CustomIslamicHolidays):
+    ASHURA_DATES = {
+        2014: (NOV, 3),
+        2015: (OCT, 24),
+        2016: (OCT, 12),
+        2017: (OCT, 1),
+        2018: (SEP, 21),
+        2019: (SEP, 10),
+        2020: (AUG, 30),
+        2021: (AUG, 19),
+    }
+
+    EID_AL_ADHA_DATES = {
+        2014: (OCT, 5),
+        2015: (SEP, 23),
+        2016: (SEP, 13),
+        2017: (SEP, 2),
+        2018: (AUG, 22),
+        2019: (AUG, 11),
+        2020: (JUL, 31),
+        2021: (JUL, 20),
+        2022: (JUL, 9),
+        2023: (JUN, 28),
+        2024: (JUN, 17),
+    }
+
+    EID_AL_FITR_DATES = {
+        2014: (JUL, 29),
+        2015: (JUL, 18),
+        2016: (JUL, 7),
+        2017: (JUN, 26),
+        2018: (JUN, 15),
+        2019: (JUN, 4),
+        2020: (MAY, 24),
+        2021: (MAY, 13),
+        2022: (MAY, 1),
+        2023: (APR, 22),
+        2024: (APR, 10),
+    }
+
+    MAWLID_DATES = {
+        2014: (JAN, 14),
+        2015: ((JAN, 3), (DEC, 24)),
+        2016: (DEC, 12),
+        2017: (DEC, 1),
+        2018: (NOV, 21),
+        2019: (NOV, 10),
+        2020: (OCT, 29),
+        2021: (OCT, 19),
+        2022: (OCT, 8),
+        2023: (SEP, 27),
+        2024: (SEP, 16),
+    }
+
+    RAMADAN_BEGINNING_DATES = {
+        2014: (JUN, 29),
+        2015: (JUN, 18),
+        2016: (JUN, 7),
+        2017: (MAY, 27),
+        2018: (MAY, 16),
+        2019: (MAY, 6),
+        2020: (APR, 24),
+        2021: (APR, 13),
+        2022: (APR, 2),
+        2023: (MAR, 23),
+        2024: (MAR, 11),
+    }
diff --git a/holidays/countries/iran.py b/holidays/countries/iran.py
index db7595e3..ce7847f3 100644
--- a/holidays/countries/iran.py
+++ b/holidays/countries/iran.py
@@ -12,6 +12,7 @@
 
 from gettext import gettext as tr
 
+from holidays.calendars.gregorian import FRI
 from holidays.groups import IslamicHolidays, PersianCalendarHolidays
 from holidays.holiday_base import HolidayBase
 
@@ -21,6 +22,7 @@ class Iran(HolidayBase, IslamicHolidays, PersianCalendarHolidays):
     References:
     - https://en.wikipedia.org/wiki/Public_holidays_in_Iran
     - https://fa.wikipedia.org/wiki/تعطیلات_عمومی_در_ایران
+    - https://en.wikipedia.org/wiki/Workweek_and_weekend
     """
 
     country = "IR"
@@ -29,6 +31,7 @@ class Iran(HolidayBase, IslamicHolidays, PersianCalendarHolidays):
     estimated_label = tr("(تخمین زده) %s")
     supported_languages = ("en_US", "fa")
     start_year = 1980
+    weekend = {FRI}
 
     def __init__(self, *args, **kwargs):
         IslamicHolidays.__init__(self)
diff --git a/holidays/countries/lithuania.py b/holidays/countries/lithuania.py
index 316940e8..222e0d21 100644
--- a/holidays/countries/lithuania.py
+++ b/holidays/countries/lithuania.py
@@ -67,10 +67,7 @@ class Lithuania(HolidayBase, ChristianHolidays, InternationalHolidays):
         if self._year >= 1991:
             self._add_holiday_jul_6(
                 # Statehood Day.
-                tr(
-                    "Valstybės (Lietuvos karaliaus Mindaugo karūnavimo) "
-                    "ir Tautiškos giesmės diena"
-                )
+                tr("Valstybės (Lietuvos karaliaus Mindaugo karūnavimo) ir Tautiškos giesmės diena")
             )
 
         # Assumption Day.
diff --git a/holidays/countries/south_korea.py b/holidays/countries/south_korea.py
index 26304958..e90912c0 100644
--- a/holidays/countries/south_korea.py
+++ b/holidays/countries/south_korea.py
@@ -617,6 +617,8 @@ class SouthKoreaStaticHolidays:
         2023: (OCT, 2, temporary_public_holiday),
         # 76th Anniversary of the Armed Forces of Korea.
         2024: (OCT, 1, armed_forces_day),
+        # Added to create a 6-day long holiday period.
+        2025: (JAN, 27, temporary_public_holiday),
     }
     # Pre-2014 Alternate Holidays
     # https://namu.wiki/w/대체%20휴일%20제도#s-4.2.1
diff --git a/holidays/countries/thailand.py b/holidays/countries/thailand.py
index 53bd7dd1..f5dbb16d 100644
--- a/holidays/countries/thailand.py
+++ b/holidays/countries/thailand.py
@@ -556,8 +556,7 @@ class Thailand(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiC
         if self._year >= 2019:
             # HM King Bhumibol Adulyadej the Great's Birthday Anniversary.
             name = tr(
-                "วันคล้ายวันเฉลิมพระชนมพรรษาพระบาทสมเด็จพระบรมชนกาธิเบศร "
-                "มหาภูมิพลอดุลยเดชมหาราช บรมนาถบพิตร"
+                "วันคล้ายวันเฉลิมพระชนมพรรษาพระบาทสมเด็จพระบรมชนกาธิเบศร มหาภูมิพลอดุลยเดชมหาราช บรมนาถบพิตร"
             )
         elif self._year >= 2016:
             # HM King Bhumibol Adulyadej Birthday Anniversary.
diff --git a/holidays/groups/persian.py b/holidays/groups/persian.py
index dccc07c1..c4a2cba2 100644
--- a/holidays/groups/persian.py
+++ b/holidays/groups/persian.py
@@ -36,6 +36,17 @@ class PersianCalendarHolidays:
             name, self._persian_calendar.persian_to_gregorian(self._year, 3, 14)
         )
 
+    def _add_islamic_emirat_victory_day(self, name: str) -> Optional[date]:
+        """
+        Add Islamic Emirate Victory Day (24th day of the 5th month).
+
+        Anniversary of the Taliban forces arrival in Kabul.
+        https://en.wikipedia.org/wiki/Fall_of_Kabul_(2021)
+        """
+        return self._add_persian_calendar_holiday(
+            name, self._persian_calendar.persian_to_gregorian(self._year, 5, 24)
+        )
+
     def _add_islamic_republic_day(self, name: str) -> Optional[date]:
         """
         Add Islamic Republic Day (12th day of the 1st month).
diff --git a/holidays/holiday_base.py b/holidays/holiday_base.py
index 2db65448..4cf88831 100644
--- a/holidays/holiday_base.py
+++ b/holidays/holiday_base.py
@@ -329,8 +329,7 @@ class HolidayBase(dict[date, str]):
             # Deprecated arguments.
             if prov_state := prov or state:
                 warnings.warn(
-                    "Arguments prov and state are deprecated, use "
-                    f"subdiv='{prov_state}' instead.",
+                    f"Arguments prov and state are deprecated, use subdiv='{prov_state}' instead.",
                     DeprecationWarning,
                 )
 
@@ -585,6 +584,7 @@ class HolidayBase(dict[date, str]):
 
         to :class:`datetime.date`, which is how it's stored by the class."""
 
+        dt: Optional[date] = None
         # Try to catch `date` and `str` type keys first.
         # Using type() here to skip date subclasses.
         # Key is `date`.
@@ -593,10 +593,17 @@ class HolidayBase(dict[date, str]):
 
         # Key is `str` instance.
         elif isinstance(key, str):
-            try:
-                dt = parse(key).date()
-            except (OverflowError, ValueError):
-                raise ValueError(f"Cannot parse date from string '{key}'")
+            # key possibly contains a date in YYYY-MM-DD or YYYYMMDD format.
+            if len(key) in {8, 10}:
+                try:
+                    dt = date.fromisoformat(key)
+                except ValueError:
+                    pass
+            if dt is None:
+                try:
+                    dt = parse(key).date()
+                except (OverflowError, ValueError):
+                    raise ValueError(f"Cannot parse date from string '{key}'")
 
         # Key is `datetime` instance.
         elif isinstance(key, datetime):
diff --git a/holidays/locale/en_US/LC_MESSAGES/AF.po b/holidays/locale/en_US/LC_MESSAGES/AF.po
index 71d0c01c..b51f4ea0 100644
--- a/holidays/locale/en_US/LC_MESSAGES/AF.po
+++ b/holidays/locale/en_US/LC_MESSAGES/AF.po
@@ -14,10 +14,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Holidays 0.64\n"
+"Project-Id-Version: Holidays 0.65\n"
 "POT-Creation-Date: 2024-12-24 13:40+0530\n"
-"PO-Revision-Date: 2024-12-31 15:52+0700\n"
-"Last-Translator: Prateekshit Jaiswal <prateekshitjaiswal73@gmail.com>\n"
+"PO-Revision-Date: 2025-01-10 18:59+0200\n"
+"Last-Translator: ~Jhellico <jhellico@gmail.com>\n"
 "Language-Team: Holidays Localization Team\n"
 "Language: en_US\n"
 "MIME-Version: 1.0\n"
@@ -63,16 +63,6 @@ msgstr "First Day of Ramadan"
 msgid "%s (برآورد شده)"
 msgstr "%s (estimated)"
 
-#. %s (observed).
-#, c-format
-msgid "%s (مشاهده شده)"
-msgstr "%s (observed)"
-
-#. %s (observed, estimated).
-#, c-format
-msgid "%s (مشاهده شده، برآورد شده)"
-msgstr "%s (observed, estimated)"
-
 #. Soviet Victory Day.
 msgid "روز پیروزی شوروی"
 msgstr "Soviet Victory Day"
@@ -93,6 +83,10 @@ msgstr "Eid al-Fitr"
 msgid "عید قربانی"
 msgstr "Eid al-Adha"
 
+#. Islamic Emirate Victory Day.
+msgid "روز پیروزی امارت اسلامی"
+msgstr "Islamic Emirate Victory Day"
+
 #. American Withdrawal Day.
 msgid "روز خروج آمریکایی ها"
 msgstr "American Withdrawal Day"
diff --git a/holidays/locale/fa_AF/LC_MESSAGES/AF.po b/holidays/locale/fa_AF/LC_MESSAGES/AF.po
index 05ac627d..8cfe2886 100644
--- a/holidays/locale/fa_AF/LC_MESSAGES/AF.po
+++ b/holidays/locale/fa_AF/LC_MESSAGES/AF.po
@@ -14,10 +14,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Holidays 0.64\n"
+"Project-Id-Version: Holidays 0.65\n"
 "POT-Creation-Date: 2024-12-24 13:40+0530\n"
-"PO-Revision-Date: 2024-12-31 15:53+0700\n"
-"Last-Translator: Prateekshit Jaiswal <prateekshitjaiswal73@gmail.com>\n"
+"PO-Revision-Date: 2025-01-10 18:59+0200\n"
+"Last-Translator: ~Jhellico <jhellico@gmail.com>\n"
 "Language-Team: Holidays Localization Team\n"
 "Language: fa\n"
 "MIME-Version: 1.0\n"
@@ -63,16 +63,6 @@ msgstr ""
 msgid "%s (برآورد شده)"
 msgstr ""
 
-#. %s (observed).
-#, c-format
-msgid "%s (مشاهده شده)"
-msgstr ""
-
-#. %s (observed, estimated).
-#, c-format
-msgid "%s (مشاهده شده، برآورد شده)"
-msgstr ""
-
 #. Soviet Victory Day.
 msgid "روز پیروزی شوروی"
 msgstr ""
@@ -93,6 +83,10 @@ msgstr ""
 msgid "عید قربانی"
 msgstr ""
 
+#. Islamic Emirate Victory Day.
+msgid "روز پیروزی امارت اسلامی"
+msgstr ""
+
 #. American Withdrawal Day.
 msgid "روز خروج آمریکایی ها"
 msgstr ""
diff --git a/holidays/locale/ps_AF/LC_MESSAGES/AF.po b/holidays/locale/ps_AF/LC_MESSAGES/AF.po
index 66327dfe..cd441360 100644
--- a/holidays/locale/ps_AF/LC_MESSAGES/AF.po
+++ b/holidays/locale/ps_AF/LC_MESSAGES/AF.po
@@ -14,10 +14,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Holidays 0.64\n"
+"Project-Id-Version: Holidays 0.65\n"
 "POT-Creation-Date: 2024-12-25 20:00+0530\n"
-"PO-Revision-Date: 2024-12-31 15:53+0700\n"
-"Last-Translator: Prateekshit Jaiswal <prateekshitjaiswal73@gmail.com>\n"
+"PO-Revision-Date: 2025-01-10 18:59+0200\n"
+"Last-Translator: ~Jhellico <jhellico@gmail.com>\n"
 "Language-Team: Holidays Localization Team\n"
 "Language: ps_AF\n"
 "MIME-Version: 1.0\n"
@@ -63,16 +63,6 @@ msgstr "د روژې لومړۍ نیټه"
 msgid "%s (برآورد شده)"
 msgstr "%s (اټکل)"
 
-#. %s (observed).
-#, c-format
-msgid "%s (مشاهده شده)"
-msgstr "%s (په دې وروستیو کې د افغانستان د کرکټ ملی)"
-
-#. %s (observed, estimated).
-#, c-format
-msgid "%s (مشاهده شده، برآورد شده)"
-msgstr "%s (مشاهده شده، تخمین زده شده است)"
-
 #. Soviet Victory Day.
 msgid "روز پیروزی شوروی"
 msgstr "د شوروی د بریالیتوب ورځ"
@@ -93,6 +83,10 @@ msgstr "عید فطر"
 msgid "عید قربانی"
 msgstr "عید قربانی"
 
+#. Islamic Emirate Victory Day.
+msgid "روز پیروزی امارت اسلامی"
+msgstr "د اسلامي امارت د بریا ورځ"
+
 #. American Withdrawal Day.
 msgid "روز خروج آمریکایی ها"
 msgstr "د امریکا د وتلو ورځ"
diff --git a/holidays/version.py b/holidays/version.py
index 3adeaf9d..1b3a3d85 100644
--- a/holidays/version.py
+++ b/holidays/version.py
@@ -10,4 +10,4 @@
 #  Website: https://github.com/vacanza/holidays
 #  License: MIT (see LICENSE file)
 
-__version__ = "0.64"
+__version__ = "0.65"
diff --git a/requirements/dev.txt b/requirements/dev.txt
index 91f6bf01..ae2b6f64 100644
--- a/requirements/dev.txt
+++ b/requirements/dev.txt
@@ -2,12 +2,12 @@
 
 build==1.2.2.post1
 convertdate==2.4.0
-gitpython==3.1.43
+gitpython==3.1.44
 hijridate==2.5.0
 lingva==5.0.4
 pre-commit==4.0.1
 pygithub==2.5.0
-ruff==0.8.4
+ruff==0.9.1
 tox==4.23.2
 urllib3>=2.2.2 # not directly required, pinned by Snyk to avoid a vulnerability
 zipp>=3.19.1 # not directly required, pinned by Snyk to avoid a vulnerability
diff --git a/scripts/generate_release_notes.py b/scripts/generate_release_notes.py
index 00afa096..955c65ab 100755
--- a/scripts/generate_release_notes.py
+++ b/scripts/generate_release_notes.py
@@ -140,7 +140,7 @@ class ReleaseNotesGenerator:
 
         # Skip failed release attempt PRs, version upgrades.
         pr_title = pull_request.title
-        skip_titles = (f"v.{self.tag}", "Bump", "Revert")
+        skip_titles = (f"v{self.tag}", "Bump", "Revert")
         for skip_title in skip_titles:
             if pr_title.startswith(skip_title):
                 return None
diff --git a/snapshots/countries/AF_COMMON.json b/snapshots/countries/AF_COMMON.json
index b36f6127..4b653683 100644
--- a/snapshots/countries/AF_COMMON.json
+++ b/snapshots/countries/AF_COMMON.json
@@ -12,7 +12,7 @@
     "1950-09-25": "Eid al-Adha (estimated)",
     "1950-10-22": "Ashura (estimated)",
     "1950-12-22": "Prophet's Birthday (estimated)",
-    "1951-03-21": "Nowruz",
+    "1951-03-22": "Nowruz",
     "1951-06-06": "First Day of Ramadan (estimated)",
     "1951-07-06": "Eid al-Fitr (estimated)",
     "1951-07-07": "Eid al-Fitr (estimated)",
@@ -59,7 +59,7 @@
     "1954-08-19": "Afghanistan Independence Day",
     "1954-09-08": "Ashura (estimated)",
     "1954-11-08": "Prophet's Birthday (estimated)",
-    "1955-03-21": "Nowruz",
+    "1955-03-22": "Nowruz",
     "1955-04-24": "First Day of Ramadan (estimated)",
     "1955-05-23": "Eid al-Fitr (estimated)",
     "1955-05-24": "Eid al-Fitr (estimated)",
@@ -107,7 +107,7 @@
     "1958-08-19": "Afghanistan Independence Day",
     "1958-09-26": "Prophet's Birthday (estimated)",
     "1959-03-11": "First Day of Ramadan (estimated)",
-    "1959-03-21": "Nowruz",
+    "1959-03-22": "Nowruz",
     "1959-04-10": "Eid al-Fitr (estimated)",
     "1959-04-11": "Eid al-Fitr (estimated)",
     "1959-04-12": "Eid al-Fitr (estimated)",
@@ -606,7 +606,7 @@
     "1996-02-19": "Eid al-Fitr (estimated)",
     "1996-02-20": "Eid al-Fitr (estimated)",
     "1996-02-21": "Eid al-Fitr (estimated)",
-    "1996-03-21": "Nowruz",
+    "1996-03-20": "Nowruz",
     "1996-04-26": "Day of Arafah (estimated)",
     "1996-04-27": "Eid al-Adha (estimated)",
     "1996-04-28": "Eid al-Adha (estimated); Mojahedin's Victory Day",
@@ -721,7 +721,7 @@
     "2004-02-03": "Eid al-Adha (estimated)",
     "2004-02-15": "Liberation Day",
     "2004-03-01": "Ashura (estimated)",
-    "2004-03-21": "Nowruz",
+    "2004-03-20": "Nowruz",
     "2004-04-28": "Mojahedin's Victory Day",
     "2004-05-01": "International Workers' Day; Prophet's Birthday (estimated)",
     "2004-08-19": "Afghanistan Independence Day",
@@ -780,8 +780,7 @@
     "2007-12-22": "Eid al-Adha (estimated)",
     "2008-01-19": "Ashura (estimated)",
     "2008-02-15": "Liberation Day",
-    "2008-03-20": "Prophet's Birthday (estimated)",
-    "2008-03-21": "Nowruz",
+    "2008-03-20": "Nowruz; Prophet's Birthday (estimated)",
     "2008-04-28": "Mojahedin's Victory Day",
     "2008-05-01": "International Workers' Day",
     "2008-08-19": "Afghanistan Independence Day",
@@ -840,7 +839,7 @@
     "2011-12-05": "Ashura (estimated)",
     "2012-02-04": "Prophet's Birthday (estimated)",
     "2012-02-15": "Liberation Day",
-    "2012-03-21": "Nowruz",
+    "2012-03-20": "Nowruz",
     "2012-04-28": "Mojahedin's Victory Day",
     "2012-05-01": "International Workers' Day",
     "2012-07-20": "First Day of Ramadan (estimated)",
@@ -869,178 +868,174 @@
     "2013-10-16": "Eid al-Adha (estimated)",
     "2013-10-17": "Eid al-Adha (estimated)",
     "2013-11-13": "Ashura (estimated)",
-    "2014-01-13": "Prophet's Birthday (estimated)",
+    "2014-01-14": "Prophet's Birthday",
     "2014-02-15": "Liberation Day",
     "2014-03-21": "Nowruz",
     "2014-04-28": "Mojahedin's Victory Day",
     "2014-05-01": "International Workers' Day",
-    "2014-06-28": "First Day of Ramadan (estimated)",
-    "2014-07-28": "Eid al-Fitr (estimated)",
-    "2014-07-29": "Eid al-Fitr (estimated)",
-    "2014-07-30": "Eid al-Fitr (estimated)",
+    "2014-06-29": "First Day of Ramadan",
+    "2014-07-29": "Eid al-Fitr",
+    "2014-07-30": "Eid al-Fitr",
+    "2014-07-31": "Eid al-Fitr",
     "2014-08-19": "Afghanistan Independence Day",
     "2014-09-09": "Martyrs' Day",
-    "2014-10-03": "Day of Arafah (estimated)",
-    "2014-10-04": "Eid al-Adha (estimated)",
-    "2014-10-05": "Eid al-Adha (estimated)",
-    "2014-10-06": "Eid al-Adha (estimated)",
-    "2014-11-03": "Ashura (estimated)",
-    "2015-01-03": "Prophet's Birthday (estimated)",
+    "2014-10-04": "Day of Arafah",
+    "2014-10-05": "Eid al-Adha",
+    "2014-10-06": "Eid al-Adha",
+    "2014-10-07": "Eid al-Adha",
+    "2014-11-03": "Ashura",
+    "2015-01-03": "Prophet's Birthday",
     "2015-02-15": "Liberation Day",
     "2015-03-21": "Nowruz",
     "2015-04-28": "Mojahedin's Victory Day",
     "2015-05-01": "International Workers' Day",
-    "2015-06-18": "First Day of Ramadan (estimated)",
-    "2015-07-17": "Eid al-Fitr (estimated)",
-    "2015-07-18": "Eid al-Fitr (estimated)",
-    "2015-07-19": "Eid al-Fitr (estimated)",
+    "2015-06-18": "First Day of Ramadan",
+    "2015-07-18": "Eid al-Fitr",
+    "2015-07-19": "Eid al-Fitr",
+    "2015-07-20": "Eid al-Fitr",
     "2015-08-19": "Afghanistan Independence Day",
     "2015-09-09": "Martyrs' Day",
-    "2015-09-22": "Day of Arafah (estimated)",
-    "2015-09-23": "Eid al-Adha (estimated)",
-    "2015-09-24": "Eid al-Adha (estimated)",
-    "2015-09-25": "Eid al-Adha (estimated)",
-    "2015-10-23": "Ashura (estimated)",
-    "2015-12-23": "Prophet's Birthday (estimated)",
+    "2015-09-22": "Day of Arafah",
+    "2015-09-23": "Eid al-Adha",
+    "2015-09-24": "Eid al-Adha",
+    "2015-09-25": "Eid al-Adha",
+    "2015-10-24": "Ashura",
+    "2015-12-24": "Prophet's Birthday",
     "2016-02-15": "Liberation Day",
-    "2016-03-21": "Nowruz",
+    "2016-03-20": "Nowruz",
     "2016-04-28": "Mojahedin's Victory Day",
     "2016-05-01": "International Workers' Day",
-    "2016-06-06": "First Day of Ramadan (estimated)",
-    "2016-07-06": "Eid al-Fitr (estimated)",
-    "2016-07-07": "Eid al-Fitr (estimated)",
-    "2016-07-08": "Eid al-Fitr (estimated)",
+    "2016-06-07": "First Day of Ramadan",
+    "2016-07-07": "Eid al-Fitr",
+    "2016-07-08": "Eid al-Fitr",
+    "2016-07-09": "Eid al-Fitr",
     "2016-08-19": "Afghanistan Independence Day",
     "2016-09-09": "Martyrs' Day",
-    "2016-09-10": "Day of Arafah (estimated)",
-    "2016-09-11": "Eid al-Adha (estimated)",
-    "2016-09-12": "Eid al-Adha (estimated)",
-    "2016-09-13": "Eid al-Adha (estimated)",
-    "2016-10-11": "Ashura (estimated)",
-    "2016-12-11": "Prophet's Birthday (estimated)",
+    "2016-09-12": "Day of Arafah",
+    "2016-09-13": "Eid al-Adha",
+    "2016-09-14": "Eid al-Adha",
+    "2016-09-15": "Eid al-Adha",
+    "2016-10-12": "Ashura",
+    "2016-12-12": "Prophet's Birthday",
     "2017-02-15": "Liberation Day",
     "2017-03-21": "Nowruz",
     "2017-04-28": "Mojahedin's Victory Day",
     "2017-05-01": "International Workers' Day",
-    "2017-05-27": "First Day of Ramadan (estimated)",
-    "2017-06-25": "Eid al-Fitr (estimated)",
-    "2017-06-26": "Eid al-Fitr (estimated)",
-    "2017-06-27": "Eid al-Fitr (estimated)",
+    "2017-05-27": "First Day of Ramadan",
+    "2017-06-26": "Eid al-Fitr",
+    "2017-06-27": "Eid al-Fitr",
+    "2017-06-28": "Eid al-Fitr",
     "2017-08-19": "Afghanistan Independence Day",
-    "2017-08-31": "Day of Arafah (estimated)",
-    "2017-09-01": "Eid al-Adha (estimated)",
-    "2017-09-02": "Eid al-Adha (estimated)",
-    "2017-09-03": "Eid al-Adha (estimated)",
+    "2017-09-01": "Day of Arafah",
+    "2017-09-02": "Eid al-Adha",
+    "2017-09-03": "Eid al-Adha",
+    "2017-09-04": "Eid al-Adha",
     "2017-09-09": "Martyrs' Day",
-    "2017-09-30": "Ashura (estimated)",
-    "2017-11-30": "Prophet's Birthday (estimated)",
+    "2017-10-01": "Ashura",
+    "2017-12-01": "Prophet's Birthday",
     "2018-02-15": "Liberation Day",
     "2018-03-21": "Nowruz",
     "2018-04-28": "Mojahedin's Victory Day",
     "2018-05-01": "International Workers' Day",
-    "2018-05-16": "First Day of Ramadan (estimated)",
-    "2018-06-15": "Eid al-Fitr (estimated)",
-    "2018-06-16": "Eid al-Fitr (estimated)",
-    "2018-06-17": "Eid al-Fitr (estimated)",
+    "2018-05-16": "First Day of Ramadan",
+    "2018-06-15": "Eid al-Fitr",
+    "2018-06-16": "Eid al-Fitr",
+    "2018-06-17": "Eid al-Fitr",
     "2018-08-19": "Afghanistan Independence Day",
-    "2018-08-20": "Day of Arafah (estimated)",
-    "2018-08-21": "Eid al-Adha (estimated)",
-    "2018-08-22": "Eid al-Adha (estimated)",
-    "2018-08-23": "Eid al-Adha (estimated)",
+    "2018-08-21": "Day of Arafah",
+    "2018-08-22": "Eid al-Adha",
+    "2018-08-23": "Eid al-Adha",
+    "2018-08-24": "Eid al-Adha",
     "2018-09-09": "Martyrs' Day",
-    "2018-09-20": "Ashura (estimated)",
-    "2018-11-20": "Prophet's Birthday (estimated)",
+    "2018-09-21": "Ashura",
+    "2018-11-21": "Prophet's Birthday",
     "2019-02-15": "Liberation Day",
     "2019-03-21": "Nowruz",
     "2019-04-28": "Mojahedin's Victory Day",
     "2019-05-01": "International Workers' Day",
-    "2019-05-06": "First Day of Ramadan (estimated)",
-    "2019-06-04": "Eid al-Fitr (estimated)",
-    "2019-06-05": "Eid al-Fitr (estimated)",
-    "2019-06-06": "Eid al-Fitr (estimated)",
-    "2019-08-10": "Day of Arafah (estimated)",
-    "2019-08-11": "Eid al-Adha (estimated)",
-    "2019-08-12": "Eid al-Adha (estimated)",
-    "2019-08-13": "Eid al-Adha (estimated)",
+    "2019-05-06": "First Day of Ramadan",
+    "2019-06-04": "Eid al-Fitr",
+    "2019-06-05": "Eid al-Fitr",
+    "2019-06-06": "Eid al-Fitr",
+    "2019-08-10": "Day of Arafah",
+    "2019-08-11": "Eid al-Adha",
+    "2019-08-12": "Eid al-Adha",
+    "2019-08-13": "Eid al-Adha",
     "2019-08-19": "Afghanistan Independence Day",
-    "2019-09-09": "Ashura (estimated); Martyrs' Day",
-    "2019-11-09": "Prophet's Birthday (estimated)",
+    "2019-09-09": "Martyrs' Day",
+    "2019-09-10": "Ashura",
+    "2019-11-10": "Prophet's Birthday",
     "2020-02-15": "Liberation Day",
-    "2020-03-21": "Nowruz",
-    "2020-04-24": "First Day of Ramadan (estimated)",
+    "2020-03-20": "Nowruz",
+    "2020-04-24": "First Day of Ramadan",
     "2020-04-28": "Mojahedin's Victory Day",
     "2020-05-01": "International Workers' Day",
-    "2020-05-24": "Eid al-Fitr (estimated)",
-    "2020-05-25": "Eid al-Fitr (estimated)",
-    "2020-05-26": "Eid al-Fitr (estimated)",
-    "2020-07-30": "Day of Arafah (estimated)",
-    "2020-07-31": "Eid al-Adha (estimated)",
-    "2020-08-01": "Eid al-Adha (estimated)",
-    "2020-08-02": "Eid al-Adha (estimated)",
+    "2020-05-24": "Eid al-Fitr",
+    "2020-05-25": "Eid al-Fitr",
+    "2020-05-26": "Eid al-Fitr",
+    "2020-07-30": "Day of Arafah",
+    "2020-07-31": "Eid al-Adha",
+    "2020-08-01": "Eid al-Adha",
+    "2020-08-02": "Eid al-Adha",
     "2020-08-19": "Afghanistan Independence Day",
-    "2020-08-29": "Ashura (estimated)",
+    "2020-08-30": "Ashura",
     "2020-09-09": "Martyrs' Day",
-    "2020-10-29": "Prophet's Birthday (estimated)",
+    "2020-10-29": "Prophet's Birthday",
     "2021-02-15": "Liberation Day",
-    "2021-04-13": "First Day of Ramadan (estimated)",
+    "2021-04-13": "First Day of Ramadan",
     "2021-04-28": "Mojahedin's Victory Day",
     "2021-05-01": "International Workers' Day",
-    "2021-05-13": "Eid al-Fitr (estimated)",
-    "2021-05-14": "Eid al-Fitr (estimated)",
-    "2021-05-15": "Eid al-Fitr (estimated)",
-    "2021-07-19": "Day of Arafah (estimated)",
-    "2021-07-20": "Eid al-Adha (estimated)",
-    "2021-07-21": "Eid al-Adha (estimated)",
-    "2021-07-22": "Eid al-Adha (estimated)",
-    "2021-08-18": "Ashura (estimated)",
-    "2021-08-19": "Afghanistan Independence Day",
-    "2021-09-09": "Martyrs' Day",
-    "2021-10-18": "Prophet's Birthday (estimated)",
+    "2021-05-13": "Eid al-Fitr",
+    "2021-05-14": "Eid al-Fitr",
+    "2021-05-15": "Eid al-Fitr",
+    "2021-07-19": "Day of Arafah",
+    "2021-07-20": "Eid al-Adha",
+    "2021-07-21": "Eid al-Adha",
+    "2021-07-22": "Eid al-Adha",
+    "2021-08-19": "Afghanistan Independence Day; Ashura",
+    "2021-10-19": "Prophet's Birthday",
     "2022-02-15": "Liberation Day",
-    "2022-04-02": "First Day of Ramadan (estimated)",
+    "2022-04-02": "First Day of Ramadan",
     "2022-04-28": "Mojahedin's Victory Day",
-    "2022-05-02": "Eid al-Fitr (estimated)",
-    "2022-05-03": "Eid al-Fitr (estimated)",
-    "2022-05-04": "Eid al-Fitr (estimated)",
-    "2022-07-08": "Day of Arafah (estimated)",
-    "2022-07-09": "Eid al-Adha (estimated)",
-    "2022-07-10": "Eid al-Adha (estimated)",
-    "2022-07-11": "Eid al-Adha (estimated)",
-    "2022-08-08": "Ashura (estimated)",
+    "2022-05-01": "Eid al-Fitr",
+    "2022-05-02": "Eid al-Fitr",
+    "2022-05-03": "Eid al-Fitr",
+    "2022-07-08": "Day of Arafah",
+    "2022-07-09": "Eid al-Adha",
+    "2022-07-10": "Eid al-Adha",
+    "2022-07-11": "Eid al-Adha",
+    "2022-08-15": "Islamic Emirate Victory Day",
     "2022-08-19": "Afghanistan Independence Day",
     "2022-08-31": "American Withdrawal Day",
-    "2022-09-09": "Martyrs' Day",
-    "2022-10-08": "Prophet's Birthday (estimated)",
+    "2022-10-08": "Prophet's Birthday",
     "2023-02-15": "Liberation Day",
-    "2023-03-23": "First Day of Ramadan (estimated)",
-    "2023-04-21": "Eid al-Fitr (estimated)",
-    "2023-04-22": "Eid al-Fitr (estimated)",
-    "2023-04-23": "Eid al-Fitr (estimated)",
+    "2023-03-23": "First Day of Ramadan",
+    "2023-04-22": "Eid al-Fitr",
+    "2023-04-23": "Eid al-Fitr",
+    "2023-04-24": "Eid al-Fitr",
     "2023-04-28": "Mojahedin's Victory Day",
-    "2023-06-27": "Day of Arafah (estimated)",
-    "2023-06-28": "Eid al-Adha (estimated)",
-    "2023-06-29": "Eid al-Adha (estimated)",
-    "2023-06-30": "Eid al-Adha (estimated)",
-    "2023-07-28": "Ashura (estimated)",
+    "2023-06-27": "Day of Arafah",
+    "2023-06-28": "Eid al-Adha",
+    "2023-06-29": "Eid al-Adha",
+    "2023-06-30": "Eid al-Adha",
+    "2023-08-15": "Islamic Emirate Victory Day",
     "2023-08-19": "Afghanistan Independence Day",
     "2023-08-31": "American Withdrawal Day",
-    "2023-09-09": "Martyrs' Day",
-    "2023-09-27": "Prophet's Birthday (estimated)",
+    "2023-09-27": "Prophet's Birthday",
     "2024-02-15": "Liberation Day",
-    "2024-03-11": "First Day of Ramadan (estimated)",
-    "2024-04-10": "Eid al-Fitr (estimated)",
-    "2024-04-11": "Eid al-Fitr (estimated)",
-    "2024-04-12": "Eid al-Fitr (estimated)",
+    "2024-03-11": "First Day of Ramadan",
+    "2024-04-10": "Eid al-Fitr",
+    "2024-04-11": "Eid al-Fitr",
+    "2024-04-12": "Eid al-Fitr",
     "2024-04-28": "Mojahedin's Victory Day",
-    "2024-06-15": "Day of Arafah (estimated)",
-    "2024-06-16": "Eid al-Adha (estimated)",
-    "2024-06-17": "Eid al-Adha (estimated)",
-    "2024-06-18": "Eid al-Adha (estimated)",
-    "2024-07-16": "Ashura (estimated)",
+    "2024-06-16": "Day of Arafah",
+    "2024-06-17": "Eid al-Adha",
+    "2024-06-18": "Eid al-Adha",
+    "2024-06-19": "Eid al-Adha",
+    "2024-08-14": "Islamic Emirate Victory Day",
     "2024-08-19": "Afghanistan Independence Day",
     "2024-08-31": "American Withdrawal Day",
-    "2024-09-09": "Martyrs' Day",
-    "2024-09-15": "Prophet's Birthday (estimated)",
+    "2024-09-16": "Prophet's Birthday",
     "2025-02-15": "Liberation Day",
     "2025-03-01": "First Day of Ramadan (estimated)",
     "2025-03-30": "Eid al-Fitr (estimated)",
@@ -1051,11 +1046,10 @@
     "2025-06-06": "Eid al-Adha (estimated)",
     "2025-06-07": "Eid al-Adha (estimated)",
     "2025-06-08": "Eid al-Adha (estimated)",
-    "2025-07-05": "Ashura (estimated)",
+    "2025-08-15": "Islamic Emirate Victory Day",
     "2025-08-19": "Afghanistan Independence Day",
     "2025-08-31": "American Withdrawal Day",
     "2025-09-04": "Prophet's Birthday (estimated)",
-    "2025-09-09": "Martyrs' Day",
     "2026-02-15": "Liberation Day",
     "2026-02-18": "First Day of Ramadan (estimated)",
     "2026-03-20": "Eid al-Fitr (estimated)",
@@ -1066,11 +1060,10 @@
     "2026-05-27": "Eid al-Adha (estimated)",
     "2026-05-28": "Eid al-Adha (estimated)",
     "2026-05-29": "Eid al-Adha (estimated)",
-    "2026-06-25": "Ashura (estimated)",
+    "2026-08-15": "Islamic Emirate Victory Day",
     "2026-08-19": "Afghanistan Independence Day",
     "2026-08-25": "Prophet's Birthday (estimated)",
     "2026-08-31": "American Withdrawal Day",
-    "2026-09-09": "Martyrs' Day",
     "2027-02-08": "First Day of Ramadan (estimated)",
     "2027-02-15": "Liberation Day",
     "2027-03-09": "Eid al-Fitr (estimated)",
@@ -1081,11 +1074,10 @@
     "2027-05-16": "Eid al-Adha (estimated)",
     "2027-05-17": "Eid al-Adha (estimated)",
     "2027-05-18": "Eid al-Adha (estimated)",
-    "2027-06-15": "Ashura (estimated)",
     "2027-08-14": "Prophet's Birthday (estimated)",
+    "2027-08-15": "Islamic Emirate Victory Day",
     "2027-08-19": "Afghanistan Independence Day",
     "2027-08-31": "American Withdrawal Day",
-    "2027-09-09": "Martyrs' Day",
     "2028-01-28": "First Day of Ramadan (estimated)",
     "2028-02-15": "Liberation Day",
     "2028-02-26": "Eid al-Fitr (estimated)",
@@ -1096,11 +1088,10 @@
     "2028-05-05": "Eid al-Adha (estimated)",
     "2028-05-06": "Eid al-Adha (estimated)",
     "2028-05-07": "Eid al-Adha (estimated)",
-    "2028-06-03": "Ashura (estimated)",
     "2028-08-03": "Prophet's Birthday (estimated)",
+    "2028-08-14": "Islamic Emirate Victory Day",
     "2028-08-19": "Afghanistan Independence Day",
     "2028-08-31": "American Withdrawal Day",
-    "2028-09-09": "Martyrs' Day",
     "2029-01-16": "First Day of Ramadan (estimated)",
     "2029-02-14": "Eid al-Fitr (estimated)",
     "2029-02-15": "Eid al-Fitr (estimated); Liberation Day",
@@ -1110,11 +1101,10 @@
     "2029-04-25": "Eid al-Adha (estimated)",
     "2029-04-26": "Eid al-Adha (estimated)",
     "2029-04-28": "Mojahedin's Victory Day",
-    "2029-05-23": "Ashura (estimated)",
     "2029-07-24": "Prophet's Birthday (estimated)",
+    "2029-08-14": "Islamic Emirate Victory Day",
     "2029-08-19": "Afghanistan Independence Day",
     "2029-08-31": "American Withdrawal Day",
-    "2029-09-09": "Martyrs' Day",
     "2030-01-05": "First Day of Ramadan (estimated)",
     "2030-02-04": "Eid al-Fitr (estimated)",
     "2030-02-05": "Eid al-Fitr (estimated)",
@@ -1125,11 +1115,10 @@
     "2030-04-14": "Eid al-Adha (estimated)",
     "2030-04-15": "Eid al-Adha (estimated)",
     "2030-04-28": "Mojahedin's Victory Day",
-    "2030-05-12": "Ashura (estimated)",
     "2030-07-13": "Prophet's Birthday (estimated)",
+    "2030-08-15": "Islamic Emirate Victory Day",
     "2030-08-19": "Afghanistan Independence Day",
     "2030-08-31": "American Withdrawal Day",
-    "2030-09-09": "Martyrs' Day",
     "2030-12-26": "First Day of Ramadan (estimated)",
     "2031-01-24": "Eid al-Fitr (estimated)",
     "2031-01-25": "Eid al-Fitr (estimated)",
@@ -1140,11 +1129,10 @@
     "2031-04-03": "Eid al-Adha (estimated)",
     "2031-04-04": "Eid al-Adha (estimated)",
     "2031-04-28": "Mojahedin's Victory Day",
-    "2031-05-02": "Ashura (estimated)",
     "2031-07-02": "Prophet's Birthday (estimated)",
+    "2031-08-15": "Islamic Emirate Victory Day",
     "2031-08-19": "Afghanistan Independence Day",
     "2031-08-31": "American Withdrawal Day",
-    "2031-09-09": "Martyrs' Day",
     "2031-12-15": "First Day of Ramadan (estimated)",
     "2032-01-14": "Eid al-Fitr (estimated)",
     "2032-01-15": "Eid al-Fitr (estimated)",
@@ -1154,12 +1142,11 @@
     "2032-03-22": "Eid al-Adha (estimated)",
     "2032-03-23": "Eid al-Adha (estimated)",
     "2032-03-24": "Eid al-Adha (estimated)",
-    "2032-04-20": "Ashura (estimated)",
     "2032-04-28": "Mojahedin's Victory Day",
     "2032-06-20": "Prophet's Birthday (estimated)",
+    "2032-08-14": "Islamic Emirate Victory Day",
     "2032-08-19": "Afghanistan Independence Day",
     "2032-08-31": "American Withdrawal Day",
-    "2032-09-09": "Martyrs' Day",
     "2032-12-04": "First Day of Ramadan (estimated)",
     "2033-01-02": "Eid al-Fitr (estimated)",
     "2033-01-03": "Eid al-Fitr (estimated)",
@@ -1169,12 +1156,11 @@
     "2033-03-11": "Eid al-Adha (estimated)",
     "2033-03-12": "Eid al-Adha (estimated)",
     "2033-03-13": "Eid al-Adha (estimated)",
-    "2033-04-10": "Ashura (estimated)",
     "2033-04-28": "Mojahedin's Victory Day",
     "2033-06-09": "Prophet's Birthday (estimated)",
+    "2033-08-14": "Islamic Emirate Victory Day",
     "2033-08-19": "Afghanistan Independence Day",
     "2033-08-31": "American Withdrawal Day",
-    "2033-09-09": "Martyrs' Day",
     "2033-11-23": "First Day of Ramadan (estimated)",
     "2033-12-23": "Eid al-Fitr (estimated)",
     "2033-12-24": "Eid al-Fitr (estimated)",
@@ -1184,12 +1170,11 @@
     "2034-03-01": "Eid al-Adha (estimated)",
     "2034-03-02": "Eid al-Adha (estimated)",
     "2034-03-03": "Eid al-Adha (estimated)",
-    "2034-03-30": "Ashura (estimated)",
     "2034-04-28": "Mojahedin's Victory Day",
     "2034-05-30": "Prophet's Birthday (estimated)",
+    "2034-08-15": "Islamic Emirate Victory Day",
     "2034-08-19": "Afghanistan Independence Day",
     "2034-08-31": "American Withdrawal Day",
-    "2034-09-09": "Martyrs' Day",
     "2034-11-12": "First Day of Ramadan (estimated)",
     "2034-12-12": "Eid al-Fitr (estimated)",
     "2034-12-13": "Eid al-Fitr (estimated)",
@@ -1199,12 +1184,11 @@
     "2035-02-18": "Eid al-Adha (estimated)",
     "2035-02-19": "Eid al-Adha (estimated)",
     "2035-02-20": "Eid al-Adha (estimated)",
-    "2035-03-20": "Ashura (estimated)",
     "2035-04-28": "Mojahedin's Victory Day",
     "2035-05-20": "Prophet's Birthday (estimated)",
+    "2035-08-15": "Islamic Emirate Victory Day",
     "2035-08-19": "Afghanistan Independence Day",
     "2035-08-31": "American Withdrawal Day",
-    "2035-09-09": "Martyrs' Day",
     "2035-11-01": "First Day of Ramadan (estimated)",
     "2035-12-01": "Eid al-Fitr (estimated)",
     "2035-12-02": "Eid al-Fitr (estimated)",
@@ -1214,12 +1198,11 @@
     "2036-02-08": "Eid al-Adha (estimated)",
     "2036-02-09": "Eid al-Adha (estimated)",
     "2036-02-15": "Liberation Day",
-    "2036-03-08": "Ashura (estimated)",
     "2036-04-28": "Mojahedin's Victory Day",
     "2036-05-08": "Prophet's Birthday (estimated)",
+    "2036-08-14": "Islamic Emirate Victory Day",
     "2036-08-19": "Afghanistan Independence Day",
     "2036-08-31": "American Withdrawal Day",
-    "2036-09-09": "Martyrs' Day",
     "2036-10-20": "First Day of Ramadan (estimated)",
     "2036-11-19": "Eid al-Fitr (estimated)",
     "2036-11-20": "Eid al-Fitr (estimated)",
@@ -1229,11 +1212,10 @@
     "2037-01-27": "Eid al-Adha (estimated)",
     "2037-01-28": "Eid al-Adha (estimated)",
     "2037-02-15": "Liberation Day",
-    "2037-02-25": "Ashura (estimated)",
     "2037-04-28": "Mojahedin's Victory Day; Prophet's Birthday (estimated)",
+    "2037-08-14": "Islamic Emirate Victory Day",
     "2037-08-19": "Afghanistan Independence Day",
     "2037-08-31": "American Withdrawal Day",
-    "2037-09-09": "Martyrs' Day",
     "2037-10-10": "First Day of Ramadan (estimated)",
     "2037-11-08": "Eid al-Fitr (estimated)",
     "2037-11-09": "Eid al-Fitr (estimated)",
@@ -1242,13 +1224,12 @@
     "2038-01-16": "Eid al-Adha (estimated)",
     "2038-01-17": "Eid al-Adha (estimated)",
     "2038-01-18": "Eid al-Adha (estimated)",
-    "2038-02-14": "Ashura (estimated)",
     "2038-02-15": "Liberation Day",
     "2038-04-17": "Prophet's Birthday (estimated)",
     "2038-04-28": "Mojahedin's Victory Day",
+    "2038-08-15": "Islamic Emirate Victory Day",
     "2038-08-19": "Afghanistan Independence Day",
     "2038-08-31": "American Withdrawal Day",
-    "2038-09-09": "Martyrs' Day",
     "2038-09-30": "First Day of Ramadan (estimated)",
     "2038-10-29": "Eid al-Fitr (estimated)",
     "2038-10-30": "Eid al-Fitr (estimated)",
@@ -1257,13 +1238,12 @@
     "2039-01-05": "Eid al-Adha (estimated)",
     "2039-01-06": "Eid al-Adha (estimated)",
     "2039-01-07": "Eid al-Adha (estimated)",
-    "2039-02-04": "Ashura (estimated)",
     "2039-02-15": "Liberation Day",
     "2039-04-06": "Prophet's Birthday (estimated)",
     "2039-04-28": "Mojahedin's Victory Day",
+    "2039-08-15": "Islamic Emirate Victory Day",
     "2039-08-19": "Afghanistan Independence Day",
     "2039-08-31": "American Withdrawal Day",
-    "2039-09-09": "Martyrs' Day",
     "2039-09-19": "First Day of Ramadan (estimated)",
     "2039-10-19": "Eid al-Fitr (estimated)",
     "2039-10-20": "Eid al-Fitr (estimated)",
@@ -1272,14 +1252,13 @@
     "2039-12-26": "Eid al-Adha (estimated)",
     "2039-12-27": "Eid al-Adha (estimated)",
     "2039-12-28": "Eid al-Adha (estimated)",
-    "2040-01-24": "Ashura (estimated)",
     "2040-02-15": "Liberation Day",
     "2040-03-25": "Prophet's Birthday (estimated)",
     "2040-04-28": "Mojahedin's Victory Day",
+    "2040-08-14": "Islamic Emirate Victory Day",
     "2040-08-19": "Afghanistan Independence Day",
     "2040-08-31": "American Withdrawal Day",
     "2040-09-07": "First Day of Ramadan (estimated)",
-    "2040-09-09": "Martyrs' Day",
     "2040-10-07": "Eid al-Fitr (estimated)",
     "2040-10-08": "Eid al-Fitr (estimated)",
     "2040-10-09": "Eid al-Fitr (estimated)",
@@ -1287,14 +1266,13 @@
     "2040-12-14": "Eid al-Adha (estimated)",
     "2040-12-15": "Eid al-Adha (estimated)",
     "2040-12-16": "Eid al-Adha (estimated)",
-    "2041-01-13": "Ashura (estimated)",
     "2041-02-15": "Liberation Day",
     "2041-03-15": "Prophet's Birthday (estimated)",
     "2041-04-28": "Mojahedin's Victory Day",
+    "2041-08-14": "Islamic Emirate Victory Day",
     "2041-08-19": "Afghanistan Independence Day",
     "2041-08-28": "First Day of Ramadan (estimated)",
     "2041-08-31": "American Withdrawal Day",
-    "2041-09-09": "Martyrs' Day",
     "2041-09-26": "Eid al-Fitr (estimated)",
     "2041-09-27": "Eid al-Fitr (estimated)",
     "2041-09-28": "Eid al-Fitr (estimated)",
@@ -1302,14 +1280,13 @@
     "2041-12-04": "Eid al-Adha (estimated)",
     "2041-12-05": "Eid al-Adha (estimated)",
     "2041-12-06": "Eid al-Adha (estimated)",
-    "2042-01-02": "Ashura (estimated)",
     "2042-02-15": "Liberation Day",
     "2042-03-04": "Prophet's Birthday (estimated)",
     "2042-04-28": "Mojahedin's Victory Day",
+    "2042-08-15": "Islamic Emirate Victory Day",
     "2042-08-17": "First Day of Ramadan (estimated)",
     "2042-08-19": "Afghanistan Independence Day",
     "2042-08-31": "American Withdrawal Day",
-    "2042-09-09": "Martyrs' Day",
     "2042-09-15": "Eid al-Fitr (estimated)",
     "2042-09-16": "Eid al-Fitr (estimated)",
     "2042-09-17": "Eid al-Fitr (estimated)",
@@ -1317,52 +1294,47 @@
     "2042-11-23": "Eid al-Adha (estimated)",
     "2042-11-24": "Eid al-Adha (estimated)",
     "2042-11-25": "Eid al-Adha (estimated)",
-    "2042-12-23": "Ashura (estimated)",
     "2043-02-15": "Liberation Day",
     "2043-02-22": "Prophet's Birthday (estimated)",
     "2043-04-28": "Mojahedin's Victory Day",
     "2043-08-06": "First Day of Ramadan (estimated)",
+    "2043-08-15": "Islamic Emirate Victory Day",
     "2043-08-19": "Afghanistan Independence Day",
     "2043-08-31": "American Withdrawal Day",
     "2043-09-04": "Eid al-Fitr (estimated)",
     "2043-09-05": "Eid al-Fitr (estimated)",
     "2043-09-06": "Eid al-Fitr (estimated)",
-    "2043-09-09": "Martyrs' Day",
     "2043-11-11": "Day of Arafah (estimated)",
     "2043-11-12": "Eid al-Adha (estimated)",
     "2043-11-13": "Eid al-Adha (estimated)",
     "2043-11-14": "Eid al-Adha (estimated)",
-    "2043-12-12": "Ashura (estimated)",
     "2044-02-11": "Prophet's Birthday (estimated)",
     "2044-02-15": "Liberation Day",
     "2044-04-28": "Mojahedin's Victory Day",
     "2044-07-26": "First Day of Ramadan (estimated)",
+    "2044-08-14": "Islamic Emirate Victory Day",
     "2044-08-19": "Afghanistan Independence Day",
     "2044-08-24": "Eid al-Fitr (estimated)",
     "2044-08-25": "Eid al-Fitr (estimated)",
     "2044-08-26": "Eid al-Fitr (estimated)",
     "2044-08-31": "American Withdrawal Day",
-    "2044-09-09": "Martyrs' Day",
     "2044-10-30": "Day of Arafah (estimated)",
     "2044-10-31": "Eid al-Adha (estimated)",
     "2044-11-01": "Eid al-Adha (estimated)",
     "2044-11-02": "Eid al-Adha (estimated)",
-    "2044-11-30": "Ashura (estimated)",
     "2045-01-30": "Prophet's Birthday (estimated)",
     "2045-02-15": "Liberation Day",
     "2045-04-28": "Mojahedin's Victory Day",
     "2045-07-15": "First Day of Ramadan (estimated)",
-    "2045-08-14": "Eid al-Fitr (estimated)",
+    "2045-08-14": "Eid al-Fitr (estimated); Islamic Emirate Victory Day",
     "2045-08-15": "Eid al-Fitr (estimated)",
     "2045-08-16": "Eid al-Fitr (estimated)",
     "2045-08-19": "Afghanistan Independence Day",
     "2045-08-31": "American Withdrawal Day",
-    "2045-09-09": "Martyrs' Day",
     "2045-10-20": "Day of Arafah (estimated)",
     "2045-10-21": "Eid al-Adha (estimated)",
     "2045-10-22": "Eid al-Adha (estimated)",
     "2045-10-23": "Eid al-Adha (estimated)",
-    "2045-11-19": "Ashura (estimated)",
     "2046-01-19": "Prophet's Birthday (estimated)",
     "2046-02-15": "Liberation Day",
     "2046-04-28": "Mojahedin's Victory Day",
@@ -1370,14 +1342,13 @@
     "2046-08-03": "Eid al-Fitr (estimated)",
     "2046-08-04": "Eid al-Fitr (estimated)",
     "2046-08-05": "Eid al-Fitr (estimated)",
+    "2046-08-15": "Islamic Emirate Victory Day",
     "2046-08-19": "Afghanistan Independence Day",
     "2046-08-31": "American Withdrawal Day",
-    "2046-09-09": "Martyrs' Day",
     "2046-10-09": "Day of Arafah (estimated)",
     "2046-10-10": "Eid al-Adha (estimated)",
     "2046-10-11": "Eid al-Adha (estimated)",
     "2046-10-12": "Eid al-Adha (estimated)",
-    "2046-11-09": "Ashura (estimated)",
     "2047-01-08": "Prophet's Birthday (estimated)",
     "2047-02-15": "Liberation Day",
     "2047-04-28": "Mojahedin's Victory Day",
@@ -1385,14 +1356,13 @@
     "2047-07-24": "Eid al-Fitr (estimated)",
     "2047-07-25": "Eid al-Fitr (estimated)",
     "2047-07-26": "Eid al-Fitr (estimated)",
+    "2047-08-15": "Islamic Emirate Victory Day",
     "2047-08-19": "Afghanistan Independence Day",
     "2047-08-31": "American Withdrawal Day",
-    "2047-09-09": "Martyrs' Day",
     "2047-09-29": "Day of Arafah (estimated)",
     "2047-09-30": "Eid al-Adha (estimated)",
     "2047-10-01": "Eid al-Adha (estimated)",
     "2047-10-02": "Eid al-Adha (estimated)",
-    "2047-10-29": "Ashura (estimated)",
     "2047-12-29": "Prophet's Birthday (estimated)",
     "2048-02-15": "Liberation Day",
     "2048-04-28": "Mojahedin's Victory Day",
@@ -1400,14 +1370,13 @@
     "2048-07-12": "Eid al-Fitr (estimated)",
     "2048-07-13": "Eid al-Fitr (estimated)",
     "2048-07-14": "Eid al-Fitr (estimated)",
+    "2048-08-14": "Islamic Emirate Victory Day",
     "2048-08-19": "Afghanistan Independence Day",
     "2048-08-31": "American Withdrawal Day",
-    "2048-09-09": "Martyrs' Day",
     "2048-09-18": "Day of Arafah (estimated)",
     "2048-09-19": "Eid al-Adha (estimated)",
     "2048-09-20": "Eid al-Adha (estimated)",
     "2048-09-21": "Eid al-Adha (estimated)",
-    "2048-10-18": "Ashura (estimated)",
     "2048-12-18": "Prophet's Birthday (estimated)",
     "2049-02-15": "Liberation Day",
     "2049-04-28": "Mojahedin's Victory Day",
@@ -1415,13 +1384,13 @@
     "2049-07-01": "Eid al-Fitr (estimated)",
     "2049-07-02": "Eid al-Fitr (estimated)",
     "2049-07-03": "Eid al-Fitr (estimated)",
+    "2049-08-14": "Islamic Emirate Victory Day",
     "2049-08-19": "Afghanistan Independence Day",
     "2049-08-31": "American Withdrawal Day",
     "2049-09-07": "Day of Arafah (estimated)",
     "2049-09-08": "Eid al-Adha (estimated)",
-    "2049-09-09": "Eid al-Adha (estimated); Martyrs' Day",
+    "2049-09-09": "Eid al-Adha (estimated)",
     "2049-09-10": "Eid al-Adha (estimated)",
-    "2049-10-07": "Ashura (estimated)",
     "2049-12-07": "Prophet's Birthday (estimated)",
     "2050-02-15": "Liberation Day",
     "2050-04-28": "Mojahedin's Victory Day",
@@ -1429,13 +1398,12 @@
     "2050-06-20": "Eid al-Fitr (estimated)",
     "2050-06-21": "Eid al-Fitr (estimated)",
     "2050-06-22": "Eid al-Fitr (estimated)",
+    "2050-08-15": "Islamic Emirate Victory Day",
     "2050-08-19": "Afghanistan Independence Day",
     "2050-08-27": "Day of Arafah (estimated)",
     "2050-08-28": "Eid al-Adha (estimated)",
     "2050-08-29": "Eid al-Adha (estimated)",
     "2050-08-30": "Eid al-Adha (estimated)",
     "2050-08-31": "American Withdrawal Day",
-    "2050-09-09": "Martyrs' Day",
-    "2050-09-26": "Ashura (estimated)",
     "2050-11-26": "Prophet's Birthday (estimated)"
 }
diff --git a/snapshots/countries/KR_COMMON.json b/snapshots/countries/KR_COMMON.json
index b59fee69..e95e007e 100644
--- a/snapshots/countries/KR_COMMON.json
+++ b/snapshots/countries/KR_COMMON.json
@@ -1293,6 +1293,7 @@
     "2024-10-09": "Hangul Day",
     "2024-12-25": "Christmas Day",
     "2025-01-01": "New Year's Day",
+    "2025-01-27": "Temporary Public Holiday",
     "2025-01-28": "The day preceding Korean New Year",
     "2025-01-29": "Korean New Year",
     "2025-01-30": "The second day of Korean New Year",


Test patch:
diff --git a/tests/countries/test_afghanistan.py b/tests/countries/test_afghanistan.py
index 01d67151..0ca501e6 100644
--- a/tests/countries/test_afghanistan.py
+++ b/tests/countries/test_afghanistan.py
@@ -29,26 +29,6 @@ class TestAfghanistan(CommonCountryTests, TestCase):
     def test_no_holidays(self):
         self.assertNoHolidays(Afghanistan(years=1918))
 
-    def test_2021(self):
-        self.assertHolidays(
-            Afghanistan(years=2021),
-            ("2021-02-15", "روز آزادی"),
-            ("2021-04-13", "اول رمضان (برآورد شده)"),
-            ("2021-04-28", "روز پیروزی مجاهدین"),
-            ("2021-05-01", "روز جهانی کارگر"),
-            ("2021-05-13", "عید فطر (برآورد شده)"),
-            ("2021-05-14", "عید فطر (برآورد شده)"),
-            ("2021-05-15", "عید فطر (برآورد شده)"),
-            ("2021-07-19", "روز عرفه (برآورد شده)"),
-            ("2021-07-20", "عید قربانی (برآورد شده)"),
-            ("2021-07-21", "عید قربانی (برآورد شده)"),
-            ("2021-07-22", "عید قربانی (برآورد شده)"),
-            ("2021-08-18", "عاشورا (برآورد شده)"),
-            ("2021-08-19", "روز استقلال افغانستان"),
-            ("2021-09-09", "روز شهیدان"),
-            ("2021-10-18", "میلاد پیامبر (برآورد شده)"),
-        )
-
     def test_liberation_day(self):
         name = "روز آزادی"
         self.assertHolidayName(name, (f"{year}-02-15" for year in range(1989, 2050)))
@@ -57,8 +37,19 @@ class TestAfghanistan(CommonCountryTests, TestCase):
     def test_nowruz(self):
         name = "نوروز"
         self.assertHolidayName(
-            name, (f"{year}-03-21" for year in (*range(1919, 1997), *range(2001, 2021)))
+            name,
+            "2011-03-21",
+            "2012-03-20",
+            "2013-03-21",
+            "2014-03-21",
+            "2015-03-21",
+            "2016-03-20",
+            "2017-03-21",
+            "2018-03-21",
+            "2019-03-21",
+            "2020-03-20",
         )
+        self.assertHolidayName(name, range(1919, 1997), range(2001, 2021))
         self.assertNoHolidayName(name, range(1997, 2001), range(2021, 2050))
 
     def test_victory_of_mujahideen_day(self):
@@ -78,6 +69,17 @@ class TestAfghanistan(CommonCountryTests, TestCase):
         self.assertHolidayName(name, (f"{year}-05-09" for year in range(1978, 1989)))
         self.assertNoHolidayName(name, range(1919, 1978), (1989, 2050))
 
+    def test_islamic_emirat_victory_day(self):
+        name = "روز پیروزی امارت اسلامی"
+        self.assertHolidayName(
+            name,
+            "2022-08-15",
+            "2023-08-15",
+            "2024-08-14",
+        )
+        self.assertHolidayName(name, range(2022, 2050))
+        self.assertNoHolidayName(name, range(1919, 2022))
+
     def test_american_withdrawal_day(self):
         name = "روز خروج آمریکایی ها"
         self.assertHolidayName(name, (f"{year}-08-31" for year in range(2022, 2050)))
@@ -89,64 +91,235 @@ class TestAfghanistan(CommonCountryTests, TestCase):
 
     def test_martyrs_day(self):
         name = "روز شهیدان"
-        self.assertHolidayName(name, (f"{year}-09-09" for year in range(2012, 2050)))
-        self.assertNoHolidayName(name, range(1919, 2012))
+        self.assertHolidayName(name, (f"{year}-09-09" for year in range(2012, 2021)))
+        self.assertNoHolidayName(name, range(1919, 2012), (2021, 2050))
+
+    def test_ashura(self):
+        name = "عاشورا"
+        self.assertHolidayName(
+            name,
+            "2014-11-03",
+            "2015-10-24",
+            "2016-10-12",
+            "2017-10-01",
+            "2018-09-21",
+            "2019-09-10",
+            "2020-08-30",
+            "2021-08-19",
+        )
+        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
+        self.assertEqual(set(range(1924, 2022)), years_found)
+
+    def test_prophets_birthday(self):
+        name = "میلاد پیامبر"
+        self.assertHolidayName(
+            name,
+            "2014-01-14",
+            "2015-01-03",
+            "2015-12-24",
+            "2016-12-12",
+            "2017-12-01",
+            "2018-11-21",
+            "2019-11-10",
+            "2020-10-29",
+            "2021-10-19",
+            "2022-10-08",
+            "2023-09-27",
+            "2024-09-16",
+        )
+        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
+        self.assertEqual(set(range(1924, 2050)), years_found)
+
+    def test_first_day_of_ramadan(self):
+        name = "اول رمضان"
+        self.assertHolidayName(
+            name,
+            "2014-06-29",
+            "2015-06-18",
+            "2016-06-07",
+            "2017-05-27",
+            "2018-05-16",
+            "2019-05-06",
+            "2020-04-24",
+            "2021-04-13",
+            "2022-04-02",
+            "2023-03-23",
+            "2024-03-11",
+        )
+        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
+        self.assertEqual(set(range(1925, 2050)), years_found)
+
+    def test_eid_al_fitr(self):
+        name = "عید فطر"
+        self.assertHolidayName(
+            name,
+            "2014-07-29",
+            "2014-07-30",
+            "2014-07-31",
+            "2015-07-18",
+            "2015-07-19",
+            "2015-07-20",
+            "2016-07-07",
+            "2016-07-08",
+            "2016-07-09",
+            "2017-06-26",
+            "2017-06-27",
+            "2017-06-28",
+            "2018-06-15",
+            "2018-06-16",
+            "2018-06-17",
+            "2019-06-04",
+            "2019-06-05",
+            "2019-06-06",
+            "2020-05-24",
+            "2020-05-25",
+            "2020-05-26",
+            "2021-05-13",
+            "2021-05-14",
+            "2021-05-15",
+            "2022-05-01",
+            "2022-05-02",
+            "2022-05-03",
+            "2023-04-22",
+            "2023-04-23",
+            "2023-04-24",
+            "2024-04-10",
+            "2024-04-11",
+            "2024-04-12",
+        )
+        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
+        self.assertEqual(set(range(1925, 2050)), years_found)
+
+    def test_arafah_day(self):
+        name = "روز عرفه"
+        self.assertHolidayName(
+            name,
+            "2014-10-04",
+            "2015-09-22",
+            "2016-09-12",
+            "2017-09-01",
+            "2018-08-21",
+            "2019-08-10",
+            "2020-07-30",
+            "2021-07-19",
+            "2022-07-08",
+            "2023-06-27",
+            "2024-06-16",
+        )
+        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
+        self.assertEqual(set(range(1925, 2050)), years_found)
+
+    def test_eid_al_adha(self):
+        name = "عید قربانی"
+        self.assertHolidayName(
+            name,
+            "2014-10-05",
+            "2014-10-06",
+            "2014-10-07",
+            "2015-09-23",
+            "2015-09-24",
+            "2015-09-25",
+            "2016-09-13",
+            "2016-09-14",
+            "2016-09-15",
+            "2017-09-02",
+            "2017-09-03",
+            "2017-09-04",
+            "2018-08-22",
+            "2018-08-23",
+            "2018-08-24",
+            "2019-08-11",
+            "2019-08-12",
+            "2019-08-13",
+            "2020-07-31",
+            "2020-08-01",
+            "2020-08-02",
+            "2021-07-20",
+            "2021-07-21",
+            "2021-07-22",
+            "2022-07-09",
+            "2022-07-10",
+            "2022-07-11",
+            "2023-06-28",
+            "2023-06-29",
+            "2023-06-30",
+            "2024-06-17",
+            "2024-06-18",
+            "2024-06-19",
+        )
+        years_found = {dt.year for dt in self.holidays.get_named(name, lookup="startswith")}
+        self.assertEqual(set(range(1925, 2050)), years_found)
+
+    def test_2021(self):
+        self.assertHolidays(
+            Afghanistan(years=2021),
+            ("2021-02-15", "روز آزادی"),
+            ("2021-04-13", "اول رمضان"),
+            ("2021-04-28", "روز پیروزی مجاهدین"),
+            ("2021-05-01", "روز جهانی کارگر"),
+            ("2021-05-13", "عید فطر"),
+            ("2021-05-14", "عید فطر"),
+            ("2021-05-15", "عید فطر"),
+            ("2021-07-19", "روز عرفه"),
+            ("2021-07-20", "عید قربانی"),
+            ("2021-07-21", "عید قربانی"),
+            ("2021-07-22", "عید قربانی"),
+            ("2021-08-19", "روز استقلال افغانستان; عاشورا"),
+            ("2021-10-19", "میلاد پیامبر"),
+        )
 
     def test_l10_default(self):
         self.assertLocalizedHolidays(
             ("2022-02-15", "روز آزادی"),
-            ("2022-04-02", "اول رمضان (برآورد شده)"),
+            ("2022-04-02", "اول رمضان"),
             ("2022-04-28", "روز پیروزی مجاهدین"),
-            ("2022-05-02", "عید فطر (برآورد شده)"),
-            ("2022-05-03", "عید فطر (برآورد شده)"),
-            ("2022-05-04", "عید فطر (برآورد شده)"),
-            ("2022-07-08", "روز عرفه (برآورد شده)"),
-            ("2022-07-09", "عید قربانی (برآورد شده)"),
-            ("2022-07-10", "عید قربانی (برآورد شده)"),
-            ("2022-07-11", "عید قربانی (برآورد شده)"),
-            ("2022-08-08", "عاشورا (برآورد شده)"),
+            ("2022-05-01", "عید فطر"),
+            ("2022-05-02", "عید فطر"),
+            ("2022-05-03", "عید فطر"),
+            ("2022-07-08", "روز عرفه"),
+            ("2022-07-09", "عید قربانی"),
+            ("2022-07-10", "عید قربانی"),
+            ("2022-07-11", "عید قربانی"),
+            ("2022-08-15", "روز پیروزی امارت اسلامی"),
             ("2022-08-19", "روز استقلال افغانستان"),
             ("2022-08-31", "روز خروج آمریکایی ها"),
-            ("2022-09-09", "روز شهیدان"),
-            ("2022-10-08", "میلاد پیامبر (برآورد شده)"),
-        )
-
-    def test_l10n_ps_af(self):
-        self.assertLocalizedHolidays(
-            "ps_AF",
-            ("2022-02-15", "د ازادۍ ورځ"),
-            ("2022-04-02", "د روژې لومړۍ نیټه (اټکل)"),
-            ("2022-04-28", "مجاهدو د بریا ورځ"),
-            ("2022-05-02", "عید فطر (اټکل)"),
-            ("2022-05-03", "عید فطر (اټکل)"),
-            ("2022-05-04", "عید فطر (اټکل)"),
-            ("2022-07-08", "د عرفه ورځ (اټکل)"),
-            ("2022-07-09", "عید قربانی (اټکل)"),
-            ("2022-07-10", "عید قربانی (اټکل)"),
-            ("2022-07-11", "عید قربانی (اټکل)"),
-            ("2022-08-08", "عاشورا (اټکل)"),
-            ("2022-08-19", "د افغانستان د استقلال ورځ"),
-            ("2022-08-31", "د امریکا د وتلو ورځ"),
-            ("2022-09-09", "د شهیدانو ورځ"),
-            ("2022-10-08", "د پیغمبر الله صلی الله علیه وسلم د میلاد ورځ (اټکل)"),
+            ("2022-10-08", "میلاد پیامبر"),
         )
 
     def test_l10n_en_us(self):
         self.assertLocalizedHolidays(
             "en_US",
             ("2022-02-15", "Liberation Day"),
-            ("2022-04-02", "First Day of Ramadan (estimated)"),
+            ("2022-04-02", "First Day of Ramadan"),
             ("2022-04-28", "Mojahedin's Victory Day"),
-            ("2022-05-02", "Eid al-Fitr (estimated)"),
-            ("2022-05-03", "Eid al-Fitr (estimated)"),
-            ("2022-05-04", "Eid al-Fitr (estimated)"),
-            ("2022-07-08", "Day of Arafah (estimated)"),
-            ("2022-07-09", "Eid al-Adha (estimated)"),
-            ("2022-07-10", "Eid al-Adha (estimated)"),
-            ("2022-07-11", "Eid al-Adha (estimated)"),
-            ("2022-08-08", "Ashura (estimated)"),
+            ("2022-05-01", "Eid al-Fitr"),
+            ("2022-05-02", "Eid al-Fitr"),
+            ("2022-05-03", "Eid al-Fitr"),
+            ("2022-07-08", "Day of Arafah"),
+            ("2022-07-09", "Eid al-Adha"),
+            ("2022-07-10", "Eid al-Adha"),
+            ("2022-07-11", "Eid al-Adha"),
+            ("2022-08-15", "Islamic Emirate Victory Day"),
             ("2022-08-19", "Afghanistan Independence Day"),
             ("2022-08-31", "American Withdrawal Day"),
-            ("2022-09-09", "Martyrs' Day"),
-            ("2022-10-08", "Prophet's Birthday (estimated)"),
+            ("2022-10-08", "Prophet's Birthday"),
+        )
+
+    def test_l10n_ps_af(self):
+        self.assertLocalizedHolidays(
+            "ps_AF",
+            ("2022-02-15", "د ازادۍ ورځ"),
+            ("2022-04-02", "د روژې لومړۍ نیټه"),
+            ("2022-04-28", "مجاهدو د بریا ورځ"),
+            ("2022-05-01", "عید فطر"),
+            ("2022-05-02", "عید فطر"),
+            ("2022-05-03", "عید فطر"),
+            ("2022-07-08", "د عرفه ورځ"),
+            ("2022-07-09", "عید قربانی"),
+            ("2022-07-10", "عید قربانی"),
+            ("2022-07-11", "عید قربانی"),
+            ("2022-08-15", "د اسلامي امارت د بریا ورځ"),
+            ("2022-08-19", "د افغانستان د استقلال ورځ"),
+            ("2022-08-31", "د امریکا د وتلو ورځ"),
+            ("2022-10-08", "د پیغمبر الله صلی الله علیه وسلم د میلاد ورځ"),
         )
diff --git a/tests/countries/test_argentina.py b/tests/countries/test_argentina.py
index 8c874045..e4fc1a12 100644
--- a/tests/countries/test_argentina.py
+++ b/tests/countries/test_argentina.py
@@ -139,8 +139,7 @@ class TestArgentina(CommonCountryTests, TestCase):
 
     def test_sovereignty_over_malvinas_day(self):
         name = (
-            "Día de los Derechos Argentinos sobre las Islas Malvinas, "
-            "Sandwich y del Atlántico Sur"
+            "Día de los Derechos Argentinos sobre las Islas Malvinas, Sandwich y del Atlántico Sur"
         )
 
         self.assertNoHolidayName(name, 1982, range(2001, 2050))
diff --git a/tests/countries/test_germany.py b/tests/countries/test_germany.py
index 7fdcb6fa..fd417d5e 100644
--- a/tests/countries/test_germany.py
+++ b/tests/countries/test_germany.py
@@ -97,7 +97,7 @@ class TestDE(CommonCountryTests, TestCase):
         self.assertEqual(
             all_h,
             y_2015,
-            f"missing: {all_h - y_2015 or 'no'}," f" extra: {y_2015 - all_h or 'no'}",
+            f"missing: {all_h - y_2015 or 'no'}, extra: {y_2015 - all_h or 'no'}",
         )
 
     def test_fixed_holidays(self):
diff --git a/tests/countries/test_laos.py b/tests/countries/test_laos.py
index a9aaf45c..d0b47a37 100644
--- a/tests/countries/test_laos.py
+++ b/tests/countries/test_laos.py
@@ -380,10 +380,7 @@ class TestLaos(CommonCountryTests, TestCase):
             ("2022-06-01", "ວັນປູກຕົ້ນໄມ້ແຫ່ງຊາດ; ວັນເດັກສາກົນ"),
             (
                 "2022-07-13",
-                (
-                    "ວັນຄ້າຍວັນເກີດ ທ່ານ ປະທານ ສຸພານຸວົງ; ວັນບຸນເຂົ້າພັນສາ; "
-                    "ວັນປ່ອຍປາ ແລະ ວັນອະນຸລັກສັດນ້ຳ-ສັດປ່າແຫ່ງຊາດ"
-                ),
+                ("ວັນຄ້າຍວັນເກີດ ທ່ານ ປະທານ ສຸພານຸວົງ; ວັນບຸນເຂົ້າພັນສາ; ວັນປ່ອຍປາ ແລະ ວັນອະນຸລັກສັດນ້ຳ-ສັດປ່າແຫ່ງຊາດ"),
             ),
             ("2022-07-20", "ວັນສ້າງຕັ້ງສະຫະພັນແມ່ຍິງລາວ"),
             ("2022-08-13", "ວັນສື່ມວນຊົນແຫ່ງຊາດ ແລະ ວັນພິມຈໍາໜ່າຍ"),
@@ -466,10 +463,7 @@ class TestLaos(CommonCountryTests, TestCase):
             ("2022-06-01", "วันปลูกต้นไม้แห่งชาติ; วันเด็กสากล"),
             (
                 "2022-07-13",
-                (
-                    "วันคล้ายวันเกิดท่านประธานสุภานุวงศ์; วันอนุรักษ์สัตว์น้ำ สัตว์ป่า "
-                    "และวันปล่อยปลาแห่งชาติ; วันเข้าพรรษา"
-                ),
+                ("วันคล้ายวันเกิดท่านประธานสุภานุวงศ์; วันอนุรักษ์สัตว์น้ำ สัตว์ป่า และวันปล่อยปลาแห่งชาติ; วันเข้าพรรษา"),
             ),
             ("2022-07-20", "วันก่อตั้งสหภาพแม่หญิงลาว"),
             ("2022-08-13", "วันสื่อสารมวลชนและการพิมพ์แห่งชาติ"),
diff --git a/tests/countries/test_south_korea.py b/tests/countries/test_south_korea.py
index 5c161462..68ffc1e3 100644
--- a/tests/countries/test_south_korea.py
+++ b/tests/countries/test_south_korea.py
@@ -78,6 +78,7 @@ class TestSouthKorea(CommonCountryTests, TestCase):
             "2020-08-17",
             "2023-10-02",
             "2024-10-01",
+            "2025-01-27",
         )
         # Pre-2014 Observance sans "1960-12-26"
         self.assertNoNonObservedHoliday(
diff --git a/tests/countries/test_spain.py b/tests/countries/test_spain.py
index af33bc1c..22ace437 100644
--- a/tests/countries/test_spain.py
+++ b/tests/countries/test_spain.py
@@ -33,8 +33,7 @@ class TestSpain(CommonCountryTests, TestCase):
                 self.assertEqual(
                     dt in prov_holidays,
                     subdiv in hol_provs,
-                    f"Failed date `{dt:%Y-%m-%d}`, "
-                    f"province `{subdiv}`: {', '.join(hol_provs)}",
+                    f"Failed date `{dt:%Y-%m-%d}`, province `{subdiv}`: {', '.join(hol_provs)}",
                 )
 
     def test_country_aliases(self):