__all__ = [
    "SolarEventType",
    "SolarEvent",
    "SOLAR_EVENTS"
]

from dataclasses import dataclass
from datetime import date, datetime, timezone, timedelta
from enum import Enum, auto


class SolarEventType(Enum):
    """Enumeration of the four solar event types (solstices and equinoxes)."""
    DECEMBER_SOLSTICE = auto()
    MARCH_EQUINOX = auto()
    JUNE_SOLSTICE = auto()
    SEPTEMBER_EQUINOX = auto()


@dataclass(frozen=True)
class SolarEvent:
    """Represents a single solar event (a solstice or an equinox).

    Attributes:
        type: The type of solar event.
        time: The datetime of the solar event.
    """
    type: SolarEventType
    time: datetime

    def localize(self, timezone):
        """Return this solar event converted to a given timezone.

        Args:
            timezone: A tzinfo or ZoneInfo to convert the event time into.

        Returns:
            SolarEvent: A new SolarEvent instance with `time` adjusted to the
            provided timezone.
        """
        return SolarEvent(self.type, self.time.astimezone(timezone))


SOLAR_EVENTS = [
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2024,  9, 22, 12, 43, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2024, 12, 21,  9, 20, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2025,  3, 20,  9,  1, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2025,  6, 21,  2, 42, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2025,  9, 22, 18, 19, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2025, 12, 21, 15,  3, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2026,  3, 20, 14, 46, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2026,  6, 21,  8, 24, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2026,  9, 23,  0,  5, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2026, 12, 21, 20, 50, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2027,  3, 20, 20, 24, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2027,  6, 21, 14, 10, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2027,  9, 23,  6,  1, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2027, 12, 22,  2, 42, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2028,  3, 20,  2, 17, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2028,  6, 20, 20,  2, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2028,  9, 22, 11, 45, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2028, 12, 21,  8, 19, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2029,  3, 20,  8,  2, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2029,  6, 21,  1, 48, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2029,  9, 22, 17, 38, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2029, 12, 21, 14, 14, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2030,  3, 20, 13, 51, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2030,  6, 21,  7, 31, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2030,  9, 22, 23, 26, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2030, 12, 21, 20,  9, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2031,  3, 20, 19, 41, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2031,  6, 21, 13, 17, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2031,  9, 23,  5, 15, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2031, 12, 22,  1, 55, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2032,  3, 20,  1, 21, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2032,  6, 20, 19,  8, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2032,  9, 22, 11, 10, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2032, 12, 21,  7, 55, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2033,  3, 20,  7, 22, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2033,  6, 21,  1,  1, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2033,  9, 22, 16, 51, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2033, 12, 21, 13, 45, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2034,  3, 20, 13, 17, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2034,  6, 21,  6, 44, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2034,  9, 22, 22, 39, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2034, 12, 21, 19, 33, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2035,  3, 20, 19,  2, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2035,  6, 21, 12, 33, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2035,  9, 23,  4, 39, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2035, 12, 22,  1, 30, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2036,  3, 20,  1,  2, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2036,  6, 20, 18, 32, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2036,  9, 22, 10, 23, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2036, 12, 21,  7, 12, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2037,  3, 20,  6, 50, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2037,  6, 21,  0, 22, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2037,  9, 22, 16, 13, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2037, 12, 21, 13,  7, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2038,  3, 20, 12, 40, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2038,  6, 21,  6,  9, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2038,  9, 22, 22,  2, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2038, 12, 21, 19,  2, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2039,  3, 20, 18, 31, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2039,  6, 21, 11, 57, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2039,  9, 23,  3, 49, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2039, 12, 22,  0, 40, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2040,  3, 20,  0, 11, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2040,  6, 20, 17, 46, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2040,  9, 22,  9, 44, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2040, 12, 21,  6, 32, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2041,  3, 20,  6,  6, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2041,  6, 20, 23, 35, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2041,  9, 22, 15, 26, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2041, 12, 21, 12, 18, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2042,  3, 20, 11, 53, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2042,  6, 21,  5, 15, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2042,  9, 22, 21, 11, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2042, 12, 21, 18,  4, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2043,  3, 20, 17, 27, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2043,  6, 21, 10, 58, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2043,  9, 23,  3,  6, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2043, 12, 22,  0,  1, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2044,  3, 19, 23, 20, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2044,  6, 20, 16, 51, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2044,  9, 22,  8, 47, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2044, 12, 21,  5, 43, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2045,  3, 20,  5,  7, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2045,  6, 20, 22, 33, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2045,  9, 22, 14, 32, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2045, 12, 21, 11, 35, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2046,  3, 20, 10, 57, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2046,  6, 21,  4, 14, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2046,  9, 22, 20, 21, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2046, 12, 21, 17, 28, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2047,  3, 20, 16, 52, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2047,  6, 21, 10,  3, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2047,  9, 23,  2,  8, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2047, 12, 21, 23,  7, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2048,  3, 19, 22, 33, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2048,  6, 20, 15, 53, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2048,  9, 22,  8,  0, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2048, 12, 21,  5,  2, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2049,  3, 20,  4, 28, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2049,  6, 20, 21, 47, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2049,  9, 22, 13, 42, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2049, 12, 21, 10, 52, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2050,  3, 20, 10, 19, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2050,  6, 21,  3, 33, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2050,  9, 22, 19, 28, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2050, 12, 21, 16, 38, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2051,  3, 20, 15, 59, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2051,  6, 21,  9, 18, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2051,  9, 23,  1, 27, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2051, 12, 21, 22, 34, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2052,  3, 19, 21, 56, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2052,  6, 20, 15, 16, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2052,  9, 22,  7, 15, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2052, 12, 21,  4, 17, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2053,  3, 20,  3, 47, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2053,  6, 20, 21,  4, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2053,  9, 22, 13,  6, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2053, 12, 21, 10, 10, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2054,  3, 20,  9, 34, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2054,  6, 21,  2, 47, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2054,  9, 22, 18, 59, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2054, 12, 21, 16, 10, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2055,  3, 20, 15, 28, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2055,  6, 21,  8, 40, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2055,  9, 23,  0, 48, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2055, 12, 21, 21, 55, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2056,  3, 19, 21, 11, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2056,  6, 20, 14, 28, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2056,  9, 22,  6, 39, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2056, 12, 21,  3, 51, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2057,  3, 20,  3,  8, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2057,  6, 20, 20, 19, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2057,  9, 22, 12, 23, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2057, 12, 21,  9, 43, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2058,  3, 20,  9,  5, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2058,  6, 21,  2,  4, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2058,  9, 22, 18,  8, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2058, 12, 21, 15, 25, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2059,  3, 20, 14, 44, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2059,  6, 21,  7, 47, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2059,  9, 23,  0,  3, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2059, 12, 21, 21, 18, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2060,  3, 19, 20, 38, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2060,  6, 20, 13, 45, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2060,  9, 22,  5, 48, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2060, 12, 21,  3,  1, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2061,  3, 20,  2, 26, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2061,  6, 20, 19, 32, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2061,  9, 22, 11, 31, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2061, 12, 21,  8, 49, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2062,  3, 20,  8,  7, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2062,  6, 21,  1, 11, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2062,  9, 22, 17, 20, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2062, 12, 21, 14, 43, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2063,  3, 20, 13, 59, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2063,  6, 21,  7,  2, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2063,  9, 22, 23,  8, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2063, 12, 21, 20, 21, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2064,  3, 19, 19, 39, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2064,  6, 20, 12, 46, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2064,  9, 22,  4, 57, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2064, 12, 21,  2,  9, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2065,  3, 20,  1, 28, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2065,  6, 20, 18, 32, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2065,  9, 22, 10, 42, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2065, 12, 21,  8,  1, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2066,  3, 20,  7, 20, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2066,  6, 21,  0, 16, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2066,  9, 22, 16, 27, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2066, 12, 21, 13, 46, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2067,  3, 20, 12, 54, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2067,  6, 21,  5, 56, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2067,  9, 22, 22, 20, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2067, 12, 21, 19, 43, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2068,  3, 19, 18, 49, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2068,  6, 20, 11, 54, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2068,  9, 22,  4,  7, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2068, 12, 21,  1, 33, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2069,  3, 20,  0, 45, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2069,  6, 20, 17, 41, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2069,  9, 22,  9, 52, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2069, 12, 21,  7, 22, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2070,  3, 20,  6, 35, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2070,  6, 20, 23, 23, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2070,  9, 22, 15, 45, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2070, 12, 21, 13, 19, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2071,  3, 20, 12, 35, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2071,  6, 21,  5, 21, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2071,  9, 22, 21, 38, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2071, 12, 21, 19,  4, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2072,  3, 19, 18, 21, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2072,  6, 20, 11, 14, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2072,  9, 22,  3, 28, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2072, 12, 21,  0, 56, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2073,  3, 20,  0, 13, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2073,  6, 20, 17,  7, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2073,  9, 22,  9, 16, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2073, 12, 21,  6, 51, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2074,  3, 20,  6,  9, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2074,  6, 20, 22, 59, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2074,  9, 22, 15,  4, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2074, 12, 21, 12, 35, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2075,  3, 20, 11, 47, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2075,  6, 21,  4, 41, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2075,  9, 22, 20, 59, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2075, 12, 21, 18, 27, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2076,  3, 19, 17, 39, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2076,  6, 20, 10, 37, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2076,  9, 22,  2, 50, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2076, 12, 21,  0, 14, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2077,  3, 19, 23, 31, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2077,  6, 20, 16, 24, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2077,  9, 22,  8, 36, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2077, 12, 21,  6,  1, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2078,  3, 20,  5, 11, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2078,  6, 20, 21, 58, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2078,  9, 22, 14, 25, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2078, 12, 21, 11, 58, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2079,  3, 20, 11,  1, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2079,  6, 21,  3, 50, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2079,  9, 22, 20, 13, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2079, 12, 21, 17, 44, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2080,  3, 19, 16, 44, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2080,  6, 20,  9, 34, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2080,  9, 22,  1, 57, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2080, 12, 20, 23, 33, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2081,  3, 19, 22, 35, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2081,  6, 20, 15, 17, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2081,  9, 22,  7, 38, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2081, 12, 21,  5, 23, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2082,  3, 20,  4, 31, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2082,  6, 20, 21,  4, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2082,  9, 22, 13, 23, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2082, 12, 21, 11,  5, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2083,  3, 20, 10, 11, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2083,  6, 21,  2, 44, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2083,  9, 22, 19, 12, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2083, 12, 21, 16, 54, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2084,  3, 19, 16,  0, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2084,  6, 20,  8, 41, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2084,  9, 22,  1,  0, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2084, 12, 20, 22, 42, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2085,  3, 19, 21, 54, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2085,  6, 20, 14, 33, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2085,  9, 22,  6, 44, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2085, 12, 21,  4, 29, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2086,  3, 20,  3, 36, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2086,  6, 20, 20, 10, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2086,  9, 22, 12, 33, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2086, 12, 21, 10, 23, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2087,  3, 20,  9, 29, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2087,  6, 21,  2,  7, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2087,  9, 22, 18, 29, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2087, 12, 21, 16,  9, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2088,  3, 19, 15, 18, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2088,  6, 20,  7, 57, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2088,  9, 22,  0, 19, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2088, 12, 20, 21, 57, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2089,  3, 19, 21,  7, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2089,  6, 20, 13, 44, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2089,  9, 22,  6,  8, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2089, 12, 21,  3, 53, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2090,  3, 20,  3,  3, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2090,  6, 20, 19, 37, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2090,  9, 22, 12,  0, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2090, 12, 21,  9, 44, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2091,  3, 20,  8, 43, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2091,  6, 21,  1, 20, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2091,  9, 22, 17, 52, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2091, 12, 21, 15, 39, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2092,  3, 19, 14, 34, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2092,  6, 20,  7, 16, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2092,  9, 21, 23, 43, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2092, 12, 20, 21, 33, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2093,  3, 19, 20, 36, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2093,  6, 20, 13,  8, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2093,  9, 22,  5, 30, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2093, 12, 21,  3, 22, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2094,  3, 20,  2, 22, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2094,  6, 20, 18, 43, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2094,  9, 22, 11, 18, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2094, 12, 21,  9, 14, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2095,  3, 20,  8, 16, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2095,  6, 21,  0, 40, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2095,  9, 22, 17, 12, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2095, 12, 21, 15,  2, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2096,  3, 19, 14,  4, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2096,  6, 20,  6, 32, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2096,  9, 21, 22, 56, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2096, 12, 20, 20, 47, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2097,  3, 19, 19, 49, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2097,  6, 20, 12, 14, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2097,  9, 22,  4, 37, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2097, 12, 21,  2, 38, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2098,  3, 20,  1, 41, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2098,  6, 20, 18,  4, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2098,  9, 22, 10, 25, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2098, 12, 21,  8, 22, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.MARCH_EQUINOX,     datetime(2099,  3, 20,  7, 19, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.JUNE_SOLSTICE,     datetime(2099,  6, 20, 23, 43, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.SEPTEMBER_EQUINOX, datetime(2099,  9, 22, 16, 12, tzinfo=timezone.utc)),
    SolarEvent(SolarEventType.DECEMBER_SOLSTICE, datetime(2099, 12, 21, 14,  5, tzinfo=timezone.utc)),
]
