hyb
2026-01-09 4cb426cb3ae31e772a09d4ade5b2f0242aaeefa0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
Ë
Yñúh‡õãóØ—dZddlZddlZddlZddlZddlZddlZddlZddlm    Z    ddl
Z
ddl
m Z ddl m Z ddlmZmZddlmZmZdd    lmZdd
lmZmZdd lmZ    dd lmZmZdd lmZej<d«Zejddddd«Z e jC«Z"e
jFe«Gd„dejH««Z%e%«Z&e
jFe«Gd„dejH««Z'Gd„de«Z(Gd„de)«Z*Gd„de)«Z+Gd„de«Z,Gd„de«Z-e
jFe«Gd„de-««Z.Gd„d e)«Z/Gd!„d"e«Z0Gd#„d$e)«Z1ejdd%k7r    d&d'gZ3gd(¢Z4ngZ3gZ4d)„Z5e5«Z6[5d4d*„Z7d4d+„Z8d,„Z9d-„Z:ejvd.k\rd/„Z<nd0„Z<    dd1l=m>Z?y#e$rdxZZYŒpwxYw#e$rGd2„d3e)«Z?YywxYw)5a
This module offers timezone implementations subclassing the abstract
:py:class:`datetime.tzinfo` type. There are classes to handle tzfile format
files (usually are in :file:`/etc/localtime`, :file:`/usr/share/zoneinfo`,
etc), TZ environment string (in all known formats), given ranges (with help
from relative deltas), local machine timezone, fixed offset timezone, and UTC
timezone.
éN)Ú OrderedDict)Ú string_types)Ú_threadé)Útzname_in_python2Ú_tzinfo)Ú tzrangebaseÚenfold)Ú_validate_fromutc_inputs)Ú _TzSingletonÚ_TzOffsetFactory)Ú _TzStrFactory)ÚtzwinÚ
tzwinlocal)Úwarni²cóp—eZdZdZd„Zd„Zed„«Zd„Ze    d„«Z
d„Z dZ d    „Z d
„Zej Zy) Útzutcaî
    This is a tzinfo object that represents the UTC time zone.
 
    **Examples:**
 
    .. doctest::
 
        >>> from datetime import *
        >>> from dateutil.tz import *
 
        >>> datetime.now()
        datetime.datetime(2003, 9, 27, 9, 40, 1, 521290)
 
        >>> datetime.now(tzutc())
        datetime.datetime(2003, 9, 27, 12, 40, 12, 156379, tzinfo=tzutc())
 
        >>> datetime.now(tzutc()).tzname()
        'UTC'
 
    .. versionchanged:: 2.7.0
        ``tzutc()`` is now a singleton, so the result of ``tzutc()`` will
        always return the same object.
 
        .. doctest::
 
            >>> from dateutil.tz import tzutc, UTC
            >>> tzutc() is tzutc()
            True
            >>> tzutc() is UTC
            True
    có—tS©N©ÚZERO©ÚselfÚdts  úAH:\Change_password\venv_build\Lib\site-packages\dateutil/tz/tz.pyÚ    utcoffsetztzutc.utcoffsetJó€Üˆ ócó—tSrrrs  rÚdstz    tzutc.dstMrrcó—y)NÚUTC©rs  rÚtznamez tzutc.tznamePs€àrcó—y)á6
        Whether or not the "wall time" of a given datetime is ambiguous in this
        zone.
 
        :param dt:
            A :py:class:`datetime.datetime`, naive or time zone aware.
 
 
        :return:
            Returns ``True`` if ambiguous, ``False`` otherwise.
 
        .. versionadded:: 2.6.0
        Fr#rs  rÚ is_ambiguousztzutc.is_ambiguousTs€ðrcó—|S)z
        Fast track version of fromutc() returns the original ``dt`` object for
        any valid :py:class:`datetime.datetime` object.
        r#rs  rÚfromutcz tzutc.fromutcds    €ð ˆ    rcó¨—t|ttf«stSt|t«xs%t|t«xr|jt
k(Sr)Ú
isinstancerÚtzoffsetÚNotImplementedÚ_offsetr©rÚothers  rÚ__eq__z tzutc.__eq__lsE€Ü˜%¤%¬Ð!2Ô3Ü!Ð !ä˜5¤%Ó(òHܘE¤8Ó,ÒF°·±Ä$Ñ1Fð    IrNcó—||k( Srr#r/s  rÚ__ne__z tzutc.__ne__uó€Ø˜E‘MÐ"Ð"rcó4—d|jjzS©Nz%s()©Ú    __class__Ú__name__©rs rÚ__repr__ztzutc.__repr__xó€Ø˜Ÿ™×/Ñ/Ñ/Ð/r)r9Ú
__module__Ú __qualname__Ú__doc__rr rr$r'r r)r1Ú__hash__r3r;ÚobjectÚ
__reduce__r#rrrr)sb„ñò>òðñóðòð ñóðòIð€Hò#ò0ð×"Ñ"Jrrcóv—eZdZdZd„Zd„Zd„Zed„«Ze    d„«Z
d„Z d„Z d    Z d
„Zd „Zej"Zy    ) r,a1
    A simple class for representing a fixed offset from UTC.
 
    :param name:
        The timezone name, to be returned when ``tzname()`` is called.
    :param offset:
        The time zone offset in seconds, or (since version 2.6.0, represented
        as a :py:class:`datetime.timedelta` object).
    có¦—||_    |j«}t    j
t |«¬«|_y#ttf$rYŒ6wxYw©N©Úseconds)Ú_nameÚ total_secondsÚ    TypeErrorÚAttributeErrorÚdatetimeÚ    timedeltaÚ_get_supported_offsetr.)rÚnameÚoffsets   rÚ__init__ztzoffset.__init__sO€ØˆŒ
ð    à×)Ñ)Ó+ˆFô ×)Ñ)Ô2GÈÓ2OÔPˆ øôœ>Ð*ò    Ù ð    ús‰>¾AÁAcó—|jSr©r.rs  rrztzoffset.utcoffsetšs €Ø|‰|Ðrcó—tSrrrs  rr z tzoffset.dstrrcó—|jSr)rHrs  rr$ztzoffset.tzname s €àz‰zÐrcó —||jzSrrSrs  rr)ztzoffset.fromutc¤s€àD—L‘LѠРrcó—y)a4
        Whether or not the "wall time" of a given datetime is ambiguous in this
        zone.
 
        :param dt:
            A :py:class:`datetime.datetime`, naive or time zone aware.
        :return:
            Returns ``True`` if ambiguous, ``False`` otherwise.
 
        .. versionadded:: 2.6.0
        Fr#rs  rr'ztzoffset.is_ambiguous¨s€ðrcó`—t|t«stS|j|jk(Sr)r+r,r-r.r/s  rr1ztzoffset.__eq__¶s%€Ü˜%¤Ô*Ü!Ð !à|‰|˜uŸ}™}Ñ,Ð,rNcó—||k( Srr#r/s  rr3ztzoffset.__ne__¾r4rcó¨—|jj›dt|j«›dt    |j
j ««›dS)Nú(ú, ú))r8r9ÚreprrHÚintr.rIr:s rr;ztzoffset.__repr__Ás<€Ø#Ÿ~™~×6Ó6Ü# D§J¡JÕ/Ü" 4§<¡<×#=Ñ#=Ó#?Õ@ðBð    Br)r9r=r>r?rQrr rr$r r)r'r1r@r3r;rArBr#rrr,r,„sh„ñò    Qòòðñóððñ!óð!ò ò-ð €Hò#òBð
×"Ñ"Jrr,c󀇗eZdZdZˆfd„Zd„Zd„Zed„«Zd„Z    d„Z
d d„Z d    „Z d
Z d „Zd „Zej"ZˆxZS)ÚtzlocalzR
    A :class:`tzinfo` subclass built around the ``time`` timezone functions.
    có•—tt| «tjt
j ¬«|_t
jr+tjt
j ¬«|_
n|j|_
|j|jz
|_ t|j«|_ tt
j«|_yrE)ÚsuperrarQrLrMÚtimeÚtimezoneÚ _std_offsetÚdaylightÚaltzoneÚ _dst_offsetÚ
_dst_savedÚboolÚ_hasdstÚtupler$Ú_tznames)rr8s €rrQztzlocal.__init__Ísø€Ü ŒgtÑ%Ô'ä#×-Ñ-´t·}±}°nÔEˆÔÜ =Š=Ü'×1Ñ1¼4¿<¹<¸-ÔHˆDÕ à#×/Ñ/ˆDÔ à×*Ñ*¨T×-=Ñ-=Ñ=ˆŒÜ˜DŸO™OÓ,ˆŒ ÜœdŸk™kÓ*ˆ rcór—|€ |jry|j|«r |jS|jSr)rlÚ_isdstrirfrs  rrztzlocal.utcoffsetÚs3€Ø ˆ:˜$Ÿ,š,Øà ;‰;rŒ?Ø×#Ñ#Ð #à×#Ñ#Ð #rcó€—|€ |jry|j|«r|j|jz
StSr)rlrprirfrrs  rr z tzlocal.dstãs7€Ø ˆ:˜$Ÿ,š,Øà ;‰;rŒ?Ø×#Ñ# d×&6Ñ&6Ñ6Ð 6äˆKrcó>—|j|j|«Sr)rnrprs  rr$ztzlocal.tznameìs€à}‰}˜TŸ[™[¨›_Ñ-Ð-rcóp—|j|«}| xr!||j||jz
«k7S)r&)Ú _naive_is_dstrj)rrÚ    naive_dsts   rr'ztzlocal.is_ambiguousðsA€ð×&Ñ& rÓ*ˆ    Ø òHؘd×0Ñ0°°d·o±oÑ1EÓFÑFð    Ircóx—t|«}tj|tjz«jSr)Ú_datetime_to_timestamprdÚ    localtimereÚtm_isdst)rrÚ    timestamps   rrtztzlocal._naive_is_dsts*€Ü*¨2Ó.ˆ    Ü~‰~˜i¬$¯-©-Ñ7Ó8×AÑAÐArcó¨—|jsy|j|«}t|dd«}|j|«r||j    |« Sy|S)NFÚfoldT)rlrtÚgetattrr'Ú_fold)rrÚ
fold_naiveÚdstvalr|s     rrpztzlocal._isdsts[€ð2|Š|Øð×#Ñ# BÓ'ˆÜr˜6 4Ó(ˆà × Ñ ˜RÔ  ØÐØŸ:™: b›>Ð)Ð)ààˆ rcóÌ—t|t«r4|j|jk(xr|j|jk(St|t«r5|j
xr&|j ddvxr|jtk(St|t«rF|j
xr7|j d|jk(xr|j|jk(StS)Nr>ÚGMTr") r+rarfrirrlrnrr,rHr.r-r/s  rr1ztzlocal.__eq__.sÔ€Ü eœWÔ %Ø×$Ñ$¨×(9Ñ(9Ñ9ò:Ø×$Ñ$¨×(9Ñ(9Ñ9ð ;ä ˜œuÔ %ØŸ ™ Ð$ò-Ø—M‘M !Ñ$¨Ð6ò-à×$Ñ$¬Ñ,ð .ô˜œxÔ (ØŸ ™ Ð$ò6Ø—M‘M !Ñ$¨¯ © Ñ3ò6à×$Ñ$¨¯ © Ñ5ð 7ô"Ð !rNcó—||k( Srr#r/s  rr3ztzlocal.__ne__?r4rcó4—d|jjzSr6r7r:s rr;ztzlocal.__repr__Br<r)T)r9r=r>r?rQrr rr$r'rtrpr1r@r3r;rArBÚ __classcell__©r8s@rraraÉs`ø„ñô +ò$òðñ.óð.òIò$Bó&òP "ð€Hò#ò0ð×"Ñ"„Jrracó<—eZdZgd¢Zd„Zd„Zd„ZdZd„Zd„Z    d„Z
y)    Ú_ttinfo)rPÚdeltaÚisdstÚabbrÚisstdÚisgmtÚ    dstoffsetcó@—|jD]}t||d«Œyr©Ú    __slots__Úsetattr)rÚattrs  rrQz_ttinfo.__init__Ls!€Ø—N‘Nò    &ˆDÜ D˜$ Õ %ñ    &rcóڗg}|jD]0}t||«}|€Œ|j|›dt|«›«Œ2|jj
›ddj |«›dS)Nú=r[r\r])r‘r}Úappendr^r8r9Újoin)rÚlr“Úvalues    rr;z_ttinfo.__repr__Ps`€Ø ˆØ—N‘Nò    8ˆDܘD $Ó'ˆEØÑ Ø—‘¢D¬$¨u¬+Ð6Õ7ð    8ð Ÿ>™>×2Ó2°D·I±I¸aµLÐAÐArcó¤—t|t«stS|j|jk(xr |j|jk(xr…|j
|j
k(xrj|j |j k(xrO|j|jk(xr4|j|jk(xr|j|jk(Sr)
r+rˆr-rPr‰rŠr‹rŒrrŽr/s  rr1z_ttinfo.__eq__Xs­€Ü˜%¤Ô)Ü!Ð !à— ‘ ˜uŸ|™|Ñ+ò2Ø—
‘
˜eŸk™kÑ)ò2à—
‘
˜eŸk™kÑ)ò2ð—    ‘    ˜UŸZ™ZÑ'ò2ð—
‘
˜eŸk™kÑ)ò    2ð
—
‘
˜eŸk™kÑ)ò 2ð —‘ %§/¡/Ñ1ð     3rNcó—||k( Srr#r/s  rr3z_ttinfo.__ne__fr4rcóL—i}|jD]}t||d«||<Œ|Sr)r‘r}©rÚstaterOs   rÚ __getstate__z_ttinfo.__getstate__is1€ØˆØ—N‘Nò    4ˆDÜ! $¨¨dÓ3ˆE$ŠKð    4àˆ rcóP—|jD]}||vsŒt||||«Œyrrrs   rÚ __setstate__z_ttinfo.__setstate__os,€Ø—N‘Nò    1ˆDؐuŠ}ܘ˜d E¨$¡KÕ0ñ    1r) r9r=r>r‘rQr;r1r@r3rŸr¡r#rrrˆrˆHs/„ò0€Iò&òBò
3ð€Hò#òó 1rrˆcó—eZdZdZgd¢Zd„Zy)Ú_tzfilezw
    Lightweight class for holding the relevant transition and time zone
    information read from binary tzfiles.
    )Ú
trans_listÚtrans_list_utcÚ    trans_idxÚ ttinfo_listÚ
ttinfo_stdÚ
ttinfo_dstÚ ttinfo_beforeÚ ttinfo_firstc     ó`—|jD]}t|||j|d««Œ!yr)Úattrsr’Úget)rÚkwargsr“s   rrQz_tzfile.__init__}s,€Ø—J‘Jò    8ˆDÜ D˜$ §
¡
¨4°Ó 6Õ 7ñ    8rN)r9r=r>r?r­rQr#rrr£r£us„ñò J€Eó8rr£c󖇗eZdZdZdˆfd„    Zd„Zd„Zdd„Zd„Zd„Z    d    „Z
dd
„Z d „Z d „Z d „Zed„«Zd„ZdZd„Zd„Zd„Zd„ZˆxZS)Útzfileaè    
    This is a ``tzinfo`` subclass that allows one to use the ``tzfile(5)``
    format timezone files to extract current and historical zone information.
 
    :param fileobj:
        This can be an opened file stream or a file name that the time zone
        information can be read from.
 
    :param filename:
        This is an optional parameter specifying the source of the time zone
        information in the event that ``fileobj`` is a file object. If omitted
        and ``fileobj`` is a file stream, this parameter will be set either to
        ``fileobj``'s ``name`` attribute or to ``repr(fileobj)``.
 
    See `Sources for Time Zone and Daylight Saving Time Data
    <https://data.iana.org/time-zones/tz-link.html>`_ for more information.
    Time zone files can be compiled from the `IANA Time Zone database files
    <https://www.iana.org/time-zones>`_ with the `zic time zone compiler
    <https://www.freebsd.org/cgi/man.cgi?query=zic&sektion=8>`_
 
    .. note::
 
        Only construct a ``tzfile`` directly if you have a specific timezone
        file on disk that you want to read into a Python ``tzinfo`` object.
        If you want to get a ``tzfile`` representing a specific IANA zone,
        (e.g. ``'America/New_York'``), you should call
        :func:`dateutil.tz.gettz` with the zone identifier.
 
 
    **Examples:**
 
    Using the US Eastern time zone as an example, we can see that a ``tzfile``
    provides time zone information for the standard Daylight Saving offsets:
 
    .. testsetup:: tzfile
 
        from dateutil.tz import gettz
        from datetime import datetime
 
    .. doctest:: tzfile
 
        >>> NYC = gettz('America/New_York')
        >>> NYC
        tzfile('/usr/share/zoneinfo/America/New_York')
 
        >>> print(datetime(2016, 1, 3, tzinfo=NYC))     # EST
        2016-01-03 00:00:00-05:00
 
        >>> print(datetime(2016, 7, 7, tzinfo=NYC))     # EDT
        2016-07-07 00:00:00-04:00
 
 
    The ``tzfile`` structure contains a fully history of the time zone,
    so historical dates will also have the right offsets. For example, before
    the adoption of the UTC standards, New York used local solar  mean time:
 
    .. doctest:: tzfile
 
       >>> print(datetime(1901, 4, 12, tzinfo=NYC))    # LMT
       1901-04-12 00:00:00-04:56
 
    And during World War II, New York was on "Eastern War Time", which was a
    state of permanent daylight saving time:
 
    .. doctest:: tzfile
 
        >>> print(datetime(1944, 2, 7, tzinfo=NYC))    # EWT
        1944-02-07 00:00:00-04:00
 
    Ncó|•—tt| «d}t|t«r||_t |d«}d}n8|||_n.t|d«r|j|_nt|«|_|;|s t|«}|5}|j|«}ddd«|j«yy#1swYŒxYw)NFÚrbTrO) rcr±rQr+rÚ    _filenameÚopenÚhasattrrOr^Ú _nullcontextÚ _read_tzfileÚ _set_tzdata)rÚfileobjÚfilenameÚfile_opened_hereÚ file_streamÚtzobjr8s      €rrQztzfile.__init__Ês¸ø€Ü ŒfdÑ$Ô&à ÐÜ gœ|Ô ,Ø$ˆDŒNܘ7 DÓ)ˆGØ#Ñ Ø Ð !Ø%ˆDNÜ W˜fÔ %Ø$Ÿ\™\ˆDNä! '›]ˆDŒNà Ð Ù#Ü& wÓ/àð 7˜KØ×)Ñ)¨+Ó6÷ 7ð × Ñ ˜UÕ #ð ÷ 7ð 7ús ÂB2Â2B;c    ób—tjD]}t|d|zt||««Œy)z= Set the time zone data of this object from a _tzfile object Ú_N)r£r­r’r})rr¾r“s   rr¹ztzfile._set_tzdataâs.€ô—M‘Mò    <ˆDÜ D˜# ™*¤g¨e°TÓ&:Õ ;ñ    <rc    ó4
—t«}|jd«j«dk7r td«‚|jd«t    j
d|jd««\}}}}}}|r:t t    j
d|z|j|dz«««|_ng|_|r.t    j
d|z|j|««|_ng|_g}    t|«D]6}
|    jt    j
d    |jd
«««Œ8|j|«j«} |r#|j|d ztj«|r(t    j
d |z|j|««} |r(t    j
d |z|j|««} g|_t|«D]À}
|    |
\}}}t|«}t!«}||_t%j&d «|_t%j&|¬«|_||_| || j/d|«|_||
kDxr |
d k7|_||
kDxr |
d k7|_|jj|«ŒÂ|jDcgc]}|j|‘Œc}|_d|_d|_d|_|jr    |js|jd x|_|_nát|dz
dd«D]k}
|j|
}|j6s|j,s||_n|j8s|j,r||_|j6sŒ^|j8sŒkn*|j8r|j6s|j8|_|jD]}|j,rŒ||_n|jd |_d}d}d}d}g|_tA|j«D]¥\}
}|j"}d }|6|j,r*|s||z
}|s|r|}t%j&|¬«|_|}||z
}|}|||k7r|j,|k7r|}|j,}|}|}|j>j|j|
|z«Œ§tC|j«|_tC|j>«|_tC|j«|_|Scc}w)NéÚTZifzmagic not foundéz>6léz>%dlz>%dBz>lbbééz>%dbrrFúréÿÿÿÿ)"r£ÚreadÚdecodeÚ
ValueErrorÚstructÚunpackÚlistr¥r¦Úranger–ÚseekÚosÚSEEK_CURr§rNrˆrPrLrMrŽr‰rŠÚfindr‹rŒrr¨r©rªr«r¤Ú    enumeraterm)rrºÚoutÚ
ttisgmtcntÚ
ttisstdcntÚleapcntÚtimecntÚtypecntÚcharcntÚttinfoÚir‹rŒrÚgmtoffrŠÚabbrindÚttiÚidxÚlastdstÚ
lastoffsetÚ lastdstoffsetÚlastbaseoffsetrPrŽÚ
baseoffsetÚ
adjustments                           rr¸ztzfile._read_tzfileès¬€Ü‹iˆð <‰<˜‹?× !Ñ !Ó # vÒ -ÜÐ.Ó/Ð /à ‰ RÔô2 M‰M˜% §¡¨bÓ!1Ó 2ñ/    
à ð ð ð ð ð ñ Ü!%¤f§m¡m°F¸WÑ4DØ4;·L±LÀÈÁÓ4Kó'Mó"NˆCÕ ð"$ˆCÔ ñ Ü"ŸM™M¨&°7Ñ*:Ø*1¯,©,°wÓ*?óAˆCMðˆCŒMðˆäw“ò    BˆAØ M‰Mœ&Ÿ-™-¨°· ± ¸Q³Ó@Õ Að    Bð|‰|˜GÓ$×+Ñ+Ó-ˆñ Ø L‰L˜ 1™¤b§k¡kÔ 2ñ Ü—M‘M &¨:Ñ"5Ø")§,¡,¨zÓ":ó<ˆEñ Ü—M‘M &¨:Ñ"5Ø")§,¡,¨zÓ":ó<ˆEðˆŒÜw“ò     (ˆAØ%+¨A¡YÑ "ˆFE˜7Ü*¨6Ó2ˆFÜ“)ˆC؈CŒJÜ$×.Ñ.¨qÓ1ˆCŒMÜ ×*Ñ*°6Ô:ˆCŒI؈CŒIؘG D§I¡I¨f°gÓ$>Ð?ˆCŒHØ# a™Ò9¨E°!©H¸©MˆCŒIØ# a™Ò9¨E°!©H¸©MˆCŒIØ O‰O× "Ñ " 3Õ 'ð     (ð:=¿¹ÖG°#˜Ÿ™¨Ó-ÒGˆŒ 𠈌؈ŒØ ˆÔØ ?‹?Ø×%Ò%Ø47·O±OÀAÑ4FÐF” Õ!1ä˜w q™y¨"¨bÓ1ò 8AØŸ-™-¨Ñ*CØŸ>š>°#·)²)Ø),˜Ø Ÿ^š^°·    ²    Ø),˜œà—~“~¨#¯.«.Ùð 8ð—~’~¨c¯nªnØ),¯©˜œàŸ?™?ò;CØŸ9›9Ø,/˜Ô)Ùð;ð
),¯©¸Ñ(:CÔ%ðˆØˆ
؈ ؈؈Œä § ¡ Ó.ò    F‰FˆAˆsØ—Z‘ZˆF؈IàÐ"Ø—9’9Ù"Ø$*¨ZÑ$7˜    á$©Ø$1˜    ä$,×$6Ñ$6¸yÔ$IC”MØ$-Mð  )Ñ+ˆJØ#ˆJØÐ*¨z¸^Ò/KØŸ    ™     WÒ,à+
à—i‘iˆG؈JØ'ˆNà N‰N× !Ñ ! #×"4Ñ"4°QÑ"7¸*Ñ"DÕ Eð?    FôB˜cŸm™mÓ,ˆŒ ܘsŸ~™~Ó.ˆŒÜ" 3×#5Ñ#5Ó6ˆÔàˆ
ùògHsÊ0Tcóœ—|jsyt|«}|r |jn |j}tj||«}|dz
S)Nr)Ú _trans_listrwÚ_trans_list_utcÚbisectÚ bisect_right)rrÚin_utcrzr¤râs      rÚ_find_last_transitionztzfile._find_last_transitionÈsL€à×ÒØä*¨2Ó.ˆ    ñ.4T×)Ò)¸×9IÑ9Iˆ
Ü×!Ñ! *¨iÓ8ˆðQ‰wˆrcó”—||dzt|j«k\r |jS|dkr |jS|j|S)Nrr)ÚlenrêÚ _ttinfo_stdÚ_ttinfo_beforeÚ
_trans_idx)rrâs  rÚ _get_ttinfoztzfile._get_ttinfo×sM€à ˆ;˜3 ™7¤s¨4×+;Ñ+;Ó'<Ò<Ø×#Ñ#Ð #𠐊7Ø×&Ñ&Ð &à‰˜sÑ#Ð#rcóF—|j|«}|j|«Sr)Ú_resolve_ambiguous_timerõ)rrrâs   rÚ _find_ttinfoztzfile._find_ttinfoâs#€Ø×*Ñ*¨2Ó.ˆà×Ñ Ó$Ð$rcó^—t|tj«s td«‚|j|ur t    d«‚|j |d¬«}|j |«}|tj|j¬«z}|j||¬«}t|t|«¬«S)a
        The ``tzfile`` implementation of :py:func:`datetime.tzinfo.fromutc`.
 
        :param dt:
            A :py:class:`datetime.datetime` object.
 
        :raises TypeError:
            Raised if ``dt`` is not a :py:class:`datetime.datetime` object.
 
        :raises ValueError:
            Raised if this is called with a ``dt`` which does not have this
            ``tzinfo`` attached.
 
        :return:
            Returns a :py:class:`datetime.datetime` object representing the
            wall time in ``self``'s time zone.
        z&fromutc() requires a datetime argumentzdt.tzinfo is not selfT)rîrF)râ©r|) r+rLrJÚtzinforÌrïrõrMrPr'r
r_)rrrâráÚdt_outr|s      rr)ztzfile.fromutcçsž€ô(˜"œh×/Ñ/Ô0ÜÐDÓEÐ Eà 9‰9˜DÑ  ÜÐ4Ó5Ð 5ð×(Ñ(¨°DÐ(Ó9ˆØ×јsÓ#ˆà”h×(Ñ(°·±Ô<Ñ<ˆà× Ñ  ¨SРÓ1ˆäf¤3 t£9Ô-Ð-rcóô—|€|j|«}t|«}|j|«}||dkry|j|dz
«j|jz
}|j|}|||zkS)r&rFr)rïrwrõrPrê)rrrârzráÚodÚtts       rr'ztzfile.is_ambiguous s…€ð ˆ;Ø×,Ñ,¨RÓ0ˆCô+¨2Ó.ˆ    Ø×јsÓ#ˆà ˆ;˜# š(Øà × Ñ ˜c A™gÓ &× -Ñ -°·
±
Ñ :ˆØ × Ñ ˜cÑ "ˆà˜2 ™7Ñ"Ð"rcó¢—|j|«}|j|«}||dk(r|St| xr|j||««}||z
S)Nr)rïr~r_r')rrrâr~Ú
idx_offsets     rr÷ztzfile._resolve_ambiguous_time(s\€Ø×(Ñ(¨Ó,ˆð—
‘
˜2“ˆØ ˆ;˜# š(؈Jô˜U˜ÒA t×'8Ñ'8¸¸SÓ'AÓBˆ
àZÑÐrcób—|€y|jstS|j|«jSr)ròrrør‰rs  rrztzfile.utcoffset5s/€Ø ˆ:Øà×Ò܈Kà× Ñ  Ó$×*Ñ*Ð*rcóŠ—|€y|jstS|j|«}|jstS|jSr)Ú _ttinfo_dstrrørŠrŽ)rrrás   rr z
tzfile.dst>s@€Ø ˆ:Øà×Ò܈Kà×Ñ Ó#ˆàyŠy܈Kð}‰}ÐrcóV—|jr|€y|j|«jSr)ròrør‹rs  rr$z tzfile.tznameNs)€à×Ò 2 :ØØ× Ñ  Ó$×)Ñ)Ð)rcó̗t|t«stS|j|jk(xr4|j|jk(xr|j
|j
k(Sr)r+r±r-rêrôÚ _ttinfo_listr/s  rr1z tzfile.__eq__Ts[€Ü˜%¤Ô(Ü!Ð !Ø× Ñ  E×$5Ñ$5Ñ5ò8Ø—‘ 5×#3Ñ#3Ñ3ò8à×!Ñ! U×%7Ñ%7Ñ7ð    9rcó—||k( Srr#r/s  rr3z tzfile.__ne__]r4rcó`—|jj›dt|j«›dS©Nr[r])r8r9r^r´r:s rr;ztzfile.__repr__`s €ØŸ>™>×2Ó2´D¸¿¹Õ4HÐIÐIrcó$—|jd«Sr)Ú __reduce_ex__r:s rrBztzfile.__reduce__cs€Ø×!Ñ! $Ó'Ð'rcóL—|jd|jf|jfSr)r8r´Ú__dict__)rÚprotocols  rr ztzfile.__reduce_ex__fs €Ø—‘  t§~¡~Р6¸¿ ¹ ÐFÐFrr©F)r9r=r>r?rQr¹r¸rïrõrør)r'r÷rr rr$r1r@r3r;rBr r…r†s@rr±r±‚szø„ñEõN$ò0<ò ^ó@ ò    $ò%ò
".óH#ò:  ò+òð ñ*óð*ò
9ð€Hò#òJò(öGrr±có:—eZdZdZ            dd„Zd„Zd„Zed„«Zy)Útzrangea[
    The ``tzrange`` object is a time zone specified by a set of offsets and
    abbreviations, equivalent to the way the ``TZ`` variable can be specified
    in POSIX-like systems, but using Python delta objects to specify DST
    start, end and offsets.
 
    :param stdabbr:
        The abbreviation for standard time (e.g. ``'EST'``).
 
    :param stdoffset:
        An integer or :class:`datetime.timedelta` object or equivalent
        specifying the base offset from UTC.
 
        If unspecified, +00:00 is used.
 
    :param dstabbr:
        The abbreviation for DST / "Summer" time (e.g. ``'EDT'``).
 
        If specified, with no other DST information, DST is assumed to occur
        and the default behavior or ``dstoffset``, ``start`` and ``end`` is
        used. If unspecified and no other DST information is specified, it
        is assumed that this zone has no DST.
 
        If this is unspecified and other DST information is *is* specified,
        DST occurs in the zone but the time zone abbreviation is left
        unchanged.
 
    :param dstoffset:
        A an integer or :class:`datetime.timedelta` object or equivalent
        specifying the UTC offset during DST. If unspecified and any other DST
        information is specified, it is assumed to be the STD offset +1 hour.
 
    :param start:
        A :class:`relativedelta.relativedelta` object or equivalent specifying
        the time and time of year that daylight savings time starts. To
        specify, for example, that DST starts at 2AM on the 2nd Sunday in
        March, pass:
 
            ``relativedelta(hours=2, month=3, day=1, weekday=SU(+2))``
 
        If unspecified and any other DST information is specified, the default
        value is 2 AM on the first Sunday in April.
 
    :param end:
        A :class:`relativedelta.relativedelta` object or equivalent
        representing the time and time of year that daylight savings time
        ends, with the same specification method as in ``start``. One note is
        that this should point to the first time in the *standard* zone, so if
        a transition occurs at 2AM in the DST zone and the clocks are set back
        1 hour to 1AM, set the ``hours`` parameter to +1.
 
 
    **Examples:**
 
    .. testsetup:: tzrange
 
        from dateutil.tz import tzrange, tzstr
 
    .. doctest:: tzrange
 
        >>> tzstr('EST5EDT') == tzrange("EST", -18000, "EDT")
        True
 
        >>> from dateutil.relativedelta import *
        >>> range1 = tzrange("EST", -18000, "EDT")
        >>> range2 = tzrange("EST", -18000, "EDT", -14400,
        ...                  relativedelta(hours=+2, month=4, day=1,
        ...                                weekday=SU(+1)),
        ...                  relativedelta(hours=+1, month=10, day=31,
        ...                                weekday=SU(-1)))
        >>> tzstr('EST5EDT') == range1 == range2
        True
 
    Ncó*—ddlma||_||_    |j    «}    |j    «}|tj|¬«|_    n t|_    |tj|¬«|_ n8|r+|)|jtjd¬«z|_ n t|_ |r4|€2tjdddtjd«¬«|_ n||_ |r4|€2tjdd    d
tjd «¬«|_n||_|j|jz
|_t!|j«|_y#t
t f$rYŒUwxYw#t
t f$rYŒZwxYw) Nr©Ú relativedeltarFr©ÚhoursérÂ)rÚmonthÚdayÚweekdayé
érÉ)ÚdateutilrÚ    _std_abbrÚ    _dst_abbrrIrJrKrLrMrfrriÚSUÚ _start_deltaÚ
_end_deltaÚ_dst_base_offset_rkÚhasdst)rÚstdabbrÚ    stdoffsetÚdstabbrrŽÚstartÚends       rrQztzrange.__init__µs|€õ
    +à ˆŒØ ˆŒð    Ø!×/Ñ/Ó1ˆIð    Ø!×/Ñ/Ó1ˆIð Ð  Ü'×1Ñ1¸)ÔDˆDÕ ä#ˆDÔ à Ð  Ü'×1Ñ1¸)ÔDˆDÕ Ù ˜Ð.Ø#×/Ñ/´(×2DÑ2DÈ2Ô2NÑNˆDÕ ä#ˆDÔ á u}Ü -× ;Ñ ;Ø  q´-×2BÑ2BÀ2Ó2Fð!<ó!HˆDÕ ð!&ˆDÔ á s{Ü+×9Ñ9Ø ¨´M×4DÑ4DÀRÓ4Hð:óJˆDOð"ˆDŒOà!%×!1Ñ!1°D×4DÑ4DÑ!DˆÔܘ4×,Ñ,Ó-ˆ øôCœ>Ð*ò    Ú ð    ûô
œ>Ð*ò    Ú ð    ús"–E)§E?Å)E<Å;E<Å?FÆFcóŽ—|jsytj|dd«}||jz}||jz}||fS)aô
        For a given year, get the DST on and off transition times, expressed
        always on the standard time side. For zones with no transitions, this
        function returns ``None``.
 
        :param year:
            The year whose transitions you would like to query.
 
        :return:
            Returns a :class:`tuple` of :class:`datetime.datetime` objects,
            ``(dston, dstoff)`` for zones with an annual DST transition, or
            ``None`` for fixed offset zones.
        Nr)r%rLr"r#)rÚyearÚ    base_yearr)r*s     rÚ transitionsztzrange.transitionsäsJ€ð{Š{Øä×%Ñ% d¨A¨qÓ1ˆ    à˜D×-Ñ-Ñ-ˆØ˜$Ÿ/™/Ñ)ˆàsˆ|Ðrcón—t|t«stS|j|jk(xr…|j|jk(xrj|j
|j
k(xrO|j |j k(xr4|j|jk(xr|j|jk(Sr)    r+rr-rr rfrir"r#r/s  rr1ztzrange.__eq__üs¤€Ü˜%¤Ô)Ü!Ð !à—‘ %§/¡/Ñ1ò4Ø—‘ %§/¡/Ñ1ò4à× Ñ  E×$5Ñ$5Ñ5ò4ð× Ñ  E×$5Ñ$5Ñ5ò4ð×!Ñ! U×%7Ñ%7Ñ7ò    4ð
—‘ 5×#3Ñ#3Ñ3ð     5rcó—|jSr)r$r:s rÚ_dst_base_offsetztzrange._dst_base_offsets€à×%Ñ%Ð%r)NNNNN)    r9r=r>r?rQr.r1Úpropertyr1r#rrrrjs8„ñIðT+/Ø)-Ø!%ó-.ò^ò0    5ðñ&óñ&rrcó&—eZdZdZdd„Zdd„Zd„Zy)Útzstraº
    ``tzstr`` objects are time zone objects specified by a time-zone string as
    it would be passed to a ``TZ`` variable on POSIX-style systems (see
    the `GNU C Library: TZ Variable`_ for more details).
 
    There is one notable exception, which is that POSIX-style time zones use an
    inverted offset format, so normally ``GMT+3`` would be parsed as an offset
    3 hours *behind* GMT. The ``tzstr`` time zone object will parse this as an
    offset 3 hours *ahead* of GMT. If you would like to maintain the POSIX
    behavior, pass a ``True`` value to ``posix_offset``.
 
    The :class:`tzrange` object provides the same functionality, but is
    specified using :class:`relativedelta.relativedelta` objects. rather than
    strings.
 
    :param s:
        A time zone string in ``TZ`` variable format. This can be a
        :class:`bytes` (2.x: :class:`str`), :class:`str` (2.x:
        :class:`unicode`) or a stream emitting unicode characters
        (e.g. :class:`StringIO`).
 
    :param posix_offset:
        Optional. If set to ``True``, interpret strings such as ``GMT+3`` or
        ``UTC+3`` as being 3 hours *behind* UTC rather than ahead, per the
        POSIX standard.
 
    .. caution::
 
        Prior to version 2.7.0, this function also supported time zones
        in the format:
 
            * ``EST5EDT,4,0,6,7200,10,0,26,7200,3600``
            * ``EST5EDT,4,1,0,7200,10,-1,0,7200,3600``
 
        This format is non-standard and has been deprecated; this function
        will raise a :class:`DeprecatedTZFormatWarning` until
        support is removed in a future version.
 
    .. _`GNU C Library: TZ Variable`:
        https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html
    c    óR—ddlma||_tj    |«}| |j
r t d«‚|jdvr|s|xjdzc_tj||j|j|j|jdd¬«|jsd|_ d|_nN|j|j «|_ |jr"|j|j"d¬    «|_t%|j«|_y)
Nr)Ú_parserzunknown string format©r‚r"rÉF)r)r*r)Úisend)Údateutil.parserr6ÚparserÚ_sÚ_parsetzÚany_unused_tokensrÌr&r'rrQr(rŽr"r#Ú_deltar)r*rkr%)rÚsÚ posix_offsetÚress    rrQztzstr.__init__7sæ€å5àˆŒäo‰o˜aÓ ˆØ ˆ;˜#×/Ò/ÜÐ4Ó5Ð 5ð ;‰;˜.Ñ (±Ø MŠM˜RÑ Mô
    ×ј˜sŸ{™{¨C¯M©MØŸ™ c§m¡mØ$¨%ð    ô    1ð{Š{Ø $ˆDÔ Ø"ˆDOà $§ ¡ ¨C¯I©IÓ 6ˆDÔ Ø× Ò Ø"&§+¡+¨c¯g©g¸Q +Ó"?”ä˜4×,Ñ,Ó-ˆ rcóú—ddlm}i}|j{|j|d<|jD|j|j|j«|d<|jdkDrd|d<nYd|d<nS|j
rG|j
|d<n7|j |j |d<n|j|j|d    <|s?|sd
|d<d|d<|jd«|d<nd |d<d|d<|jd «|d<|j|j|d <nd|d <|r@|j|jz
}|d xx|j|jdzzzcc<|jdi|¤ŽS)NrrrrrrrÚyeardayÚ    nlyeardayrÂrrÉrGi i€Qr#)rrrrÚweekrÚydayÚjydayr!rdrirfrGÚdays)rÚxr8rr¯r‰s      rr>z tzstr._deltaWsx€Ý*ØˆØ 7‰7Ð ØŸg™gˆF7‰O؏y‰yÐ$Ø$1×$9Ñ$9¸!¿)¹)ÀQÇVÁVÓ$LyÑ!Ø—6‘6˜A’:Ø$%F˜5’Mà$&F˜5’MØ—’Ø !§¡u’ Ø V‰VÐ Ø !§¡ˆF9Ò Ø W‰WÐ  Ø"#§'¡'ˆF;Ñ ÙñØ"#w‘Ø !u‘ Ø$1×$4Ñ$4°RÓ$8yÒ!à"$w‘Ø "u‘ Ø$1×$4Ñ$4°RÓ$8yÑ!Ø 6‰6Ð Ø !§¡ˆF9Ò ð!%ˆF9Ñ Ù ð×$Ñ$ t×'7Ñ'7Ñ7ˆEØ 9Ó  §¡°·±¸eÑ1CÑ!CÑ CÓ Ø*ˆ}×*Ñ*Ñ4¨VÑ4Ð4rcó`—|jj›dt|j«›dSr
©r8r9r^r;r:s rr;ztzstr.__repr__€ó€ØŸ>™>×2Ó2´D¸¿¹µMÐBÐBrNr)r)r9r=r>r?rQr>r;r#rrr4r4 s„ñ(óR.ó@'5óRCrr4có—eZdZ    dd„Zy)Ú_tzicalvtzcompNcó֗tj|¬«|_tj|¬«|_|j|jz
|_||_||_||_yrE)rLrMÚ tzoffsetfromÚ
tzoffsettoÚ tzoffsetdiffrŠr$Úrrule)rrPrQrŠr$rSs      rrQz_tzicalvtzcomp.__init__…sS€ä$×.Ñ.°|ÔDˆÔÜ"×,Ñ,°ZÔ@ˆŒØ ŸO™O¨d×.?Ñ.?Ñ?ˆÔ؈Œ
؈Œ ؈
r)NN)r9r=r>rQr#rrrNrN„s
„à$(ôrrNcóh‡—eZdZgfˆfd„    Zd„Zd„Zd„Zd„Zed„«Z    d„Z
e jZ ˆxZ S)Ú
_tzicalvtzcó”•—tt| «||_||_g|_g|_tj«|_    yr)
rcrUrQÚ_tzidÚ_compsÚ
_cachedateÚ
_cachecomprÚ allocate_lockÚ _cache_lock)rÚtzidÚcompsr8s   €rrQz_tzicalvtz.__init__s=ø€Ü Œj˜$Ñ(Ô*àˆŒ
؈Œ ؈ŒØˆŒÜ"×0Ñ0Ó2ˆÕrcóz—t|j«dk(r|jdS|jd¬«}    |j5|j|j
j ||j|«f«cddd«S#1swYnxYwn#t$rYnwxYwd}d}|jD]#}|j||«}|sŒ|r||ksŒ |}|}Œ%|s&|jD]}|jrŒ|}nd}|j5|j
jd||j|«f«|jjd|«t|j
«dkDr4|j
j«|jj«ddd«|S#1swY|SxYw)Nrr©rûr) rñrXÚreplacer\rZrYÚindexr~rÌÚ _find_compdtrŠÚinsertÚpop)rrÚ
lastcompdtÚlastcompÚcompÚcompdts      rÚ
_find_compz_tzicalvtz._find_comp™s¢€Ü ˆt{‰{Ó ˜qÒ  Ø—;‘;˜q‘>Ð !à Z‰Z˜tˆZÓ $ˆð    Ø×!Ñ!ñ +Ø—‘ t§¡×'<Ñ'<ؘŸ™ B›Ð(ó(*ñ+÷ +÷ +ò +úð +øôò    Ù ð    úðˆ
؈à—K‘Kò     ˆDØ×&Ñ& t¨RÓ0ˆFâ™z¨Z¸&Ó-@Ø#
ؑ𠠠   ñð
Ÿ ™ ò #Ø—z“zØ#HÙð #ð
  ™7à × Ñ ñ    &Ø O‰O× "Ñ " 1 r¨4¯:©:°b«>Ð&:Ô ;Ø O‰O× "Ñ " 1 hÔ /ä4—?‘?Ó# bÒ(Ø—‘×#Ñ#Ô%Ø—‘×#Ñ#Ô%÷     &ðˆ÷    &ðˆús6» BÁ9B
    BÂ
BÂB    B#Â"B#ÄBF0Æ0F:có¦—|jtkr |j|«r||jz}|jj    |d¬«}|S)NT)Úinc)rRrr~rSÚbefore)rrhrris    rrcz_tzicalvtz._find_compdtÆsH€Ø × Ñ œtÒ #¨¯
©
°2¬Ø $×#Ñ#Ñ #ˆBà—‘×"Ñ" 2¨4Ð"Ó0ˆàˆ rcó>—|€y|j|«jSr)rjrQrs  rrz_tzicalvtz.utcoffsetÎs€Ø ˆ:Øà‰˜rÓ"×-Ñ-Ð-rcó`—|j|«}|jr |jStSr)rjrŠrRr)rrrhs   rr z_tzicalvtz.dstÔs(€Ø‰˜rÓ"ˆØ :Š:Ø×$Ñ$Ð $äˆKrcó8—|j|«jSr)rjr$rs  rr$z_tzicalvtz.tznameÛs€à‰˜rÓ"×)Ñ)Ð)rcó2—dt|j«zS)Nz<tzicalvtz %s>)r^rWr:s rr;z_tzicalvtz.__repr__ßs€Ø¤$ t§z¡zÓ"2Ñ2Ð2r)r9r=r>rQrjrcrr rr$r;rArBr…r†s@rrUrUsFø„Ø#%õ3ò+òZò.ò ðñ*óð*ò3ð×"Ñ"„JrrUcó6—eZdZdZd„Zd„Zd    d„Zd„Zd„Zd„Z    y)
Útzicala[
    This object is designed to parse an iCalendar-style ``VTIMEZONE`` structure
    as set out in `RFC 5545`_ Section 4.6.5 into one or more `tzinfo` objects.
 
    :param `fileobj`:
        A file or stream in iCalendar format, which should be UTF-8 encoded
        with CRLF endings.
 
    .. _`RFC 5545`: https://tools.ietf.org/html/rfc5545
    có—ddlmat|t«r||_t |d«}n&t |dt|««|_t|«}i|_    |5}|j|j««ddd«y#1swYyxYw)Nr)rSÚrrO) rrSr+rr;rµr}r^r·Ú_vtzÚ
_parse_rfcrÊ)rrºÚfobjs   rrQztzical.__init__ðss€å"ä gœ|Ô ,؈DŒGä˜7 CÓ(‰Gä˜g v¬t°G«}Ó=ˆDŒGÜ" 7Ó+ˆGàˆŒ    à ð    )˜Ø O‰O˜DŸI™I›KÔ (÷    )÷    )ñ    )ús Á BÂB cóH—t|jj««S)z?
        Retrieves the available time zones as a list.
        )rÏrvÚkeysr:s rrzz tzical.keyss€ôD—I‘I—N‘NÓ$Ó%Ð%rNcó—|€dt|j«dk(r td«‚t|j«dkDr td«‚tt    |j««}|jj |«S)a˜
        Retrieve a :py:class:`datetime.tzinfo` object by its ``tzid``.
 
        :param tzid:
            If there is exactly one time zone available, omitting ``tzid``
            or passing :py:const:`None` value returns it. Otherwise a valid
            key (which can be retrieved from :func:`keys`) is required.
 
        :raises ValueError:
            Raised if ``tzid`` is not specified but there are either more
            or fewer than 1 zone defined.
 
        :returns:
            Returns either a :py:class:`datetime.tzinfo` object representing
            the relevant time zone or :py:const:`None` if the ``tzid`` was
            not found.
        rzno timezones definedrz more than one timezone available)rñrvrÌÚnextÚiterr®)rr]s  rr®z
tzical.getsf€ð$ ˆ<ܐ4—9‘9‹~ Ò"Ü Ð!7Ó8Ð8ܐT—Y‘Y“ !Ò#Ü Ð!CÓDÐDÜœ˜TŸY™Y›Ó(ˆDày‰y}‰}˜TÓ"Ð"rcóz—|j«}|s td«‚|ddvrd|ddk(}|dd}nd}t|«dk(r&t|dd«d    zt|dd«d
zz|zSt|«d k(r5t|dd«d    zt|dd«d
zzt|dd«z|zStd |z«‚) Nz empty offsetr)ú+ú-)rÉrrrrÂrié<rÆzinvalid offset: )ÚstriprÌrñr_)rr?Úsignals   rÚ _parse_offsetztzical._parse_offset"sÚ€Ø G‰G‹IˆÙܘ^Ó,Ð ,Ø ˆQ‰4:Ñ Ø˜a ™d c™kÑ*ˆFؐ!"‰AàˆFÜ ˆq‹6QŠ;ܘ˜"˜1˜“J Ñ%¬¨A¨a¨b¨E«
°R©Ñ7¸6ÑAÐ AÜ ‹VqŠ[ܘ˜"˜1˜“J Ñ%¬¨A¨a°¨F« °bÑ(8Ñ8¼3¸qÀÀ¸u»:ÑEÈÑOÐ OäÐ/°!Ñ3Ó4Ð 4rcó—|j«}|s td«‚d}|t|«krQ||j«}|s||=n)|dkDr|ddk(r||dz
xx|ddz cc<||=n|dz }|t|«krŒQd}g}d}d}|D]t}|sŒ|j    dd«\}    }
|    j    d«} | s td«‚| dj «}    | dd} |r |    d    k(r |
d
vrntd |
z«‚|
}d} d} d}g}d}Œz|    d k(rØ|
d k(rF|rtd|z«‚|s td«‚|s td«‚t ||«|j|<d}ŒÊ|
|k(rz s td«‚ € td«‚€ td«‚d}r(tjdj|«ddd¬«}t| ||dk(|«}|j|«d}ŒItd|
z«‚|rØ|    dk(r1| D]}|dk7sŒ    d|z}t|«‚j|«d} Œ|    dvrj|«Œ¦|    dk(r*| rtd|    ›d| d›d«‚|j|
«} ŒÕ|    dk(r&| rtd | dz«‚|j|
«}Œ|    d!k(r| rtd"| dz«‚|
}Œ|    d#k(rŒ#td$|    z«‚|    d%k(r| rtd&| dz«‚|
}ŒM|    d'vrŒStd$|    z«‚|    d    k(sŒh|
d k(sŒod}g}d}Œwy)(Nz empty stringrú rFú:ú;zempty property nameÚBEGIN)ÚSTANDARDÚDAYLIGHTzunknown component: ÚENDÚ    VTIMEZONEzcomponent not closed: zmandatory TZID not foundz at least one component is neededzmandatory DTSTART not foundz mandatory TZOFFSETFROM not foundú
T)Ú
compatibleÚignoretzÚcacher‹zinvalid component end: ÚDTSTARTzVALUE=DATE-TIMEz(Unsupported DTSTART param in VTIMEZONE: )ÚRRULEÚRDATEÚEXRULEÚEXDATEÚ TZOFFSETFROMz unsupported z parm: Ú
TZOFFSETTOzunsupported TZOFFSETTO parm: ÚTZNAMEzunsupported TZNAME parm: ÚCOMMENTzunsupported property: ÚTZIDzunsupported TZID parm: )ÚTZURLz LAST-MODIFIEDrš)Ú
splitlinesrÌrñÚrstripÚsplitÚupperrUrvrSÚrrulestrr—rNr–r„)rr?ÚlinesrÞÚliner]r^ÚinvtzÚcomptyperOr™ÚparmsÚ founddtstartrPrQÚ
rrulelinesr$ÚrrrhÚparmÚmsgs                     rrwztzical._parse_rfc2sç€Ø— ‘ “ˆÙܘ^Ó,Ð ,ð ˆØ”#e“*Šnؘ‘8—?‘?Ó$ˆDÙØ˜!‘HؐQ’˜4 ™7 cš>ؐa˜‘c“
˜d 1 2˜hÑ&“
ؘ!‘HàQ‘ð”#e“*‹nðˆØˆØˆØˆØóf    ˆDÙØØŸ*™* S¨!Ó,‰KˆD%Ø—J‘J˜s“OˆEÙÜ Ð!6Ó7Ð7ؘ‘8—>‘>Ó#ˆDؘ!˜"IˆEÚØ˜7’?ØР8Ñ8àä(Ð)>¸uÑ)DÓEÐEØ$HØ#(LØ#'LØ!%JØ!#JØ!‘FؘU’]Ø  Ò+Ù#Ü",Ð-EÀhÑ-NÓ"OÐOÙ#Ü",Ð-GÓ"HÐHÙ$Ü",Ø Bó#DðDô+5°T¸5Ó*A˜Ÿ    ™     $™Ø %™Ø (Ò*Ù+Ü",Ð-JÓ"KÐKØ'Ð/Ü",Ø Bó#DðDà%Ð-Ü",Ø Bó#DðDð"˜Ù%Ü!&§¡°·    ±    ¸*Ó0EØ;?Ø9=Ø6:ð"0ó"<˜Bô .¨l¸JØ/7¸:Ñ/EØ.4°bó :˜ðŸ ™  TÔ*Ø#'šä(Ð)BÀ5Ñ)HÓIÐIÙØ˜yÒ(ð%*ò6˜DØ#Ð'8Ó8ð(5Ø7;ñ(< ä&0°£oР5ð    6ð
#×)Ñ)¨$Ô/Ø'+š ØÐ!GÑGØ"×)Ñ)¨$Ö/Ø Ò/Ù Ý",Ú>BÀEÈ!ÃHРMó#OðOà'+×'9Ñ'9¸%Ó'@š Ø Ò-Ù Ü",Ø ?ÀÀaÁÑ Hó#JðJà%)×%7Ñ%7¸Ó%>š
Ø Ò)Ù Ü",Ø ;¸EÀ!¹HÑ Dó#FðFà!&šØ Ò*Ùä(Ð)AÀ$Ñ)FÓGÐGà˜v’~Ù Ü",Ø 9¸%À¹(Ñ Bó#DðDà$šØÐ!FÑFÙä(Ð)AÀ$Ñ)FÓGÐGؘ” U¨kÔ%9ؐؐؒñMf    rcó`—|jj›dt|j«›dSr
rKr:s rr;ztzical.__repr__¯rLrr)
r9r=r>r?rQrzr®r„rwr;r#rrrsrsås(„ñ    ò)ò"&ó #ò65ò {ózCrrsÚwin32z/etc/localtimerx)z/usr/share/zoneinfoz/usr/lib/zoneinfoz/usr/share/lib/zoneinfoz /etc/zoneinfocób‡—tfŠt
‰tfz ŠGˆfd„dt«}|«S)NcóB•—eZdZdZd„Zdˆfd„    Zd„Zd„Zedd„«Z    y)    ú__get_gettz.<locals>.GettzFunca     
        Retrieve a time zone object from a string representation
 
        This function is intended to retrieve the :py:class:`tzinfo` subclass
        that best represents the time zone that would be used if a POSIX
        `TZ variable`_ were set to the same value.
 
        If no argument or an empty string is passed to ``gettz``, local time
        is returned:
 
        .. code-block:: python3
 
            >>> gettz()
            tzfile('/etc/localtime')
 
        This function is also the preferred way to map IANA tz database keys
        to :class:`tzfile` objects:
 
        .. code-block:: python3
 
            >>> gettz('Pacific/Kiritimati')
            tzfile('/usr/share/zoneinfo/Pacific/Kiritimati')
 
        On Windows, the standard is extended to include the Windows-specific
        zone names provided by the operating system:
 
        .. code-block:: python3
 
            >>> gettz('Egypt Standard Time')
            tzwin('Egypt Standard Time')
 
        Passing a GNU ``TZ`` style string time zone specification returns a
        :class:`tzstr` object:
 
        .. code-block:: python3
 
            >>> gettz('AEST-10AEDT-11,M10.1.0/2,M4.1.0/3')
            tzstr('AEST-10AEDT-11,M10.1.0/2,M4.1.0/3')
 
        :param name:
            A time zone name (IANA, or, on Windows, Windows keys), location of
            a ``tzfile(5)`` zoneinfo file or ``TZ`` variable style time zone
            specifier. An empty string, no argument or ``None`` is interpreted
            as local time.
 
        :return:
            Returns an instance of one of ``dateutil``'s :py:class:`tzinfo`
            subclasses.
 
        .. versionchanged:: 2.7.0
 
            After version 2.7.0, any two calls to ``gettz`` using the same
            input strings will return the same object:
 
            .. code-block:: python3
 
                >>> tz.gettz('America/Chicago') is tz.gettz('America/Chicago')
                True
 
            In addition to improving performance, this ensures that
            `"same zone" semantics`_ are used for datetimes in the same zone.
 
 
        .. _`TZ variable`:
            https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html
 
        .. _`"same zone" semantics`:
            https://blog.ganssle.io/articles/2018/02/aware-datetime-arithmetic.html
        có”—tj«|_d|_t    «|_t j«|_y)NrÇ)    ÚweakrefÚWeakValueDictionaryÚ_GettzFunc__instancesÚ_GettzFunc__strong_cache_sizerÚ_GettzFunc__strong_cacherr[r\r:s rrQz'__get_gettz.<locals>.GettzFunc.__init__    s6€ä&×:Ñ:Ó<ˆDÔ Ø'(ˆDÔ $Ü"-£-ˆDÔ Ü&×4Ñ4Ó6ˆDÕ rNcóЕ—|j5|jj|d«}|€=|j|¬«}|t    |‰«s|||j|<n |cddd«S|j
j ||«|j
|<t|j
«|jkDr|j
jd¬«ddd«|S#1swYSxYw)N)rOF©Úlast)
r\r´r®Únocacher+r¶rerñrµÚpopitem)rrOÚrvÚtzlocal_classess   €rÚ__call__z'__get_gettz.<locals>.GettzFunc.__call__sáø€Ø×!Ñ!ñ <Ø×%Ñ%×)Ñ)¨$°Ó5à:ØŸ™¨4˜Ó0BØ ˜LÜ)¨"¨oÔ>Ø!˜zð24˜×(Ñ(¨Ò.ð "÷# <ñ <ð&-1×,?Ñ,?×,CÑ,CÀDÈ"Ó,M×#Ñ# DÑ)ät×*Ñ*Ó+¨d×.FÑ.FÒFØ×'Ñ'×/Ñ/°UÐ/Ô;÷- <ð0ˆI÷1 <ð0ˆIúsŽACÁ*A'CÃC%cóî—|j5||_t|j«|kDr5|jj    d¬«t|j«|kDrŒ5ddd«y#1swYyxYw)NFr¸)r\rµrñr¶r»)rÚsizes  rÚset_cache_sizez-__get_gettz.<locals>.GettzFunc.set_cache_size+sg€Ø×!Ñ!ñ <Ø+/Ô(ܘ$×-Ñ-Ó.°Ò5Ø×'Ñ'×/Ñ/°UÐ/Ô;ô˜$×-Ñ-Ó.°Ó5÷ <÷ <ñ <ús AA+Á+A4có¬—|j5tj«|_|jj «ddd«y#1swYyxYwr)r\r²r³r´r¶Úclearr:s rÚ cache_clearz*__get_gettz.<locals>.GettzFunc.cache_clear1sC€Ø×!Ñ!ñ ,Ü#*×#>Ñ#>Ó#@Ô Ø×#Ñ#×)Ñ)Ô+÷ ,÷ ,ñ ,ús 4A
Acóæ—d}|s    tjd}||dvr³tD]ž}tjj |«sO|}t D]C}tjj||«}tjj|«sŒCnŒqtjj|«sŒ‘    t|«}|St«}|S    |jd«r|dd}tjj |«r0tjj|«r t|«}|Sd}|St D]}tjj||«}tjj|«s2|j)dd«}tjj|«sŒt    t|«}|Sd}t*     t+|«}|sd    d
lm}|«j5|«}|sB|D]}|d vsŒ    t7|«}|S|d vrt8}|S|t:j<vr
t«}|S#t$rYŒ-wxYw#tttf$rYŒ<wxYw#t$r>}t!|t"«r"d}t%j&t|«|«n‚Yd}~Œ¾d}~wwxYw#tttf$rYŒˆwxYw#t,t.f$rd}YŒwxYw#t$rY|SwxYw) zA non-cached version of gettzNÚTZ)Úr‡r‡rz'gettz argument should be str, not bytesr†rÀr)Úget_zonefile_instanceÚ
0123456789r7)rÒÚenvironÚKeyErrorÚTZFILESÚpathÚisabsÚTZPATHSr—Úisfiler±ÚIOErrorÚOSErrorrÌraÚ
startswithrJr+ÚbytesÚsixÚ
raise_fromrarÚ WindowsErrorÚUnicodeEncodeErrorÚdateutil.zoneinforÈr®r4r"rdr$)    rOÚtzÚfilepathr»rÍÚeÚnew_msgrÈÚcs             rrºz&__get_gettz.<locals>.GettzFunc.nocache6sö€ðˆBÙðÜŸ:™: dÑ+Dðˆ|˜t yÑ0Ü 'ò#HÜŸ7™7Ÿ=™=¨Ô2Ø#+˜Ü$+ò%˜DÜ')§w¡w§|¡|°D¸(Ó'C˜HÜ!Ÿw™wŸ~™~¨hÕ7Ù %ð%ð
%Ü—w‘w—~‘~ hÕ/ð!Ü!'¨Ó!1˜BØ!ð|ˆIðU#ô !›BðtˆIðqØ—‘ sÔ+Ø# A B˜x˜ô—7‘7—=‘= Ô&Ü—w‘w—~‘~ dÔ+Ü# D›\˜ðZˆIðW"˜ðVˆIôS!(ò(3˜Ü#%§7¡7§<¡<°°dÓ#;˜Ü!Ÿw™wŸ~™~¨hÔ7Ø'/×'7Ñ'7¸¸SÓ'A˜HÜ#%§7¡7§>¡>°(Ô#;Ø (ð!Ü!'¨Ó!1˜BØ!ðBˆIðS(3ð"˜Ü Ð,ð*Ü%*¨4£[ ñ
 "ÝOÙ!6Ó!8×!<Ñ!<¸TÓ!B˜Bá!Ø%)ò3 ð
$%¨ Ò#4ð%-Ü-2°4«[¨ð%*ð ˆIð!3ð$(¨>Ñ#9Ü), BðˆIð&*¬T¯[©[Ñ%8Ü)0« B؈Iøô[ òÚðûô !(¬´*Ð=ò!Ú ð!ûô!òÜ! $¬Ô.Ø"K˜ÜŸ™¤y°Ó'9¸1Õ=àõ>ûðûô*!(¬´*Ð=ò!Ú ð!ûô%1Ô2DÐ#Eò*à%)£ð*ûô",6ò%-Ø(,Ø$)ð ˆIð%-úsq†H:Â7 I
ÃI%Æ3 J/Ç K
È K"È:    IÉIÉ
I"É!I"É%    J,É.3J'Ê'J,Ê/KËKË
KËKË"    K0Ë/K0r)
r9r=r>r?rQr¾rÁrÄÚ staticmethodrº)r½s€rÚ    GettzFuncr°Ãs4ø„ñD     òJ    7õ    ò6    <ò     ,ð
 
òS    ó
ñS    rrà)rarrA)ràr½s @rÚ __get_gettzrá¾s5ø€Üj€OÜÐØœJ˜=Ñ(ˆöG”FôGñR ‹;Ðrcó—|€#|j€ td«‚|j}|jd¬«}|j|¬«jt«j|«}|jd¬«}||k(S)a
    Given a datetime and a time zone, determine whether or not a given datetime
    would fall in a gap.
 
    :param dt:
        A :class:`datetime.datetime` (whose time zone will be ignored if ``tz``
        is provided.)
 
    :param tz:
        A :class:`datetime.tzinfo` with support for the ``fold`` attribute. If
        ``None`` or not provided, the datetime's own time zone will be used.
 
    :return:
        Returns a boolean value whether or not the "wall time" exists in
        ``tz``.
 
    .. versionadded:: 2.7.0
    Nú,Datetime is naive and no time zone provided.r`)rûrÌraÚ
astimezoner")rrÚÚdt_rts   rÚdatetime_existsræ“sz€ð&
€zØ 9‰9Ð ÜÐKÓLÐ LØ Y‰Yˆà     ‰˜4ˆÓ     €Bð J‰J˜bˆJÓ !× ,Ñ ,¬SÓ 1× <Ñ <¸RÓ @€EØ M‰M ˆMÓ &€Eà ‰;Ðrcó–—|€#|j€ td«‚|j}t|dd«}|    |j|«S|j |¬«}t |d¬«}t |d¬«}|j«|j«k(}|j«|j«k(}|xr| S#t$rYŒ€wxYw)a\
    Given a datetime and a time zone, determine whether or not a given datetime
    is ambiguous (i.e if there are two times differentiated only by their DST
    status).
 
    :param dt:
        A :class:`datetime.datetime` (whose time zone will be ignored if ``tz``
        is provided.)
 
    :param tz:
        A :class:`datetime.tzinfo` with support for the ``fold`` attribute. If
        ``None`` or not provided, the datetime's own time zone will be used.
 
    :return:
        Returns a boolean value whether or not the "wall time" is ambiguous in
        ``tz``.
 
    .. versionadded:: 2.6.0
    Nrãr'r`rrúr)    rûrÌr}r'Ú    Exceptionrar
rr )rrÚÚis_ambiguous_fnÚwall_0Úwall_1Ú same_offsetÚsame_dsts       rÚdatetime_ambiguousrîµsЀð(
€zØ 9‰9Ð ÜÐKÓLÐ Là Y‰Yˆô˜b .°$Ó7€OØÐ"ð    Ø—?‘? 2Ó&Ð &ð
‰˜2ˆÓ    €BÜ B˜QÔ €FÜ B˜QÔ €Fà×"Ñ"Ó$¨×(8Ñ(8Ó(:Ñ:€K؏z‰z‹|˜vŸz™z›|Ñ+€HàÒ( Ð )Ð)øôò    Ù ð    ús¶B<Â<    CÃCcóà—|jat|«sV|tjd¬«zj    «}|tjd¬«z
j    «}|||z
z }|S)aZ
    Given a datetime that may be imaginary, return an existing datetime.
 
    This function assumes that an imaginary datetime represents what the
    wall time would be in a zone had the offset transition not occurred, so
    it will always fall forward by the transition's change in offset.
 
    .. doctest::
 
        >>> from dateutil import tz
        >>> from datetime import datetime
        >>> NYC = tz.gettz('America/New_York')
        >>> print(tz.resolve_imaginary(datetime(2017, 3, 12, 2, 30, tzinfo=NYC)))
        2017-03-12 03:30:00-04:00
 
        >>> KIR = tz.gettz('Pacific/Kiritimati')
        >>> print(tz.resolve_imaginary(datetime(1995, 1, 1, 12, 30, tzinfo=KIR)))
        1995-01-02 12:30:00+14:00
 
    As a note, :func:`datetime.astimezone` is guaranteed to produce a valid,
    existing datetime, so a round-trip to and from UTC is sufficient to get
    an extant datetime, however, this generally "falls back" to an earlier time
    rather than falling forward to the STD side (though no guarantees are made
    about this behavior).
 
    :param dt:
        A :class:`datetime.datetime` which may or may not exist.
 
    :return:
        Returns an existing :class:`datetime.datetime`. If ``dt`` was not
        imaginary, the datetime returned is guaranteed to be the same object
        passed to the function.
 
    .. versionadded:: 2.7.0
    rÅr)rûrærLrMr)rÚ curr_offsetÚ
old_offsets   rÚresolve_imaginaryròãsf€ðH
‡yyФ_°RÔ%8àœH×.Ñ.°RÔ8Ñ8×CÑCÓEˆ Øœ8×-Ñ-°BÔ7Ñ7×BÑBÓDˆ
à
ˆk˜JÑ&Ñ&ˆà €IrcóP—|jd¬«tz
j«S)z‰
    Convert a :class:`datetime.datetime` object to an epoch timestamp in
    seconds since January 1, 1970, ignoring the time zone.
    Nr`)raÚEPOCHrI)rs rrwrws#€ð
J‰J˜dˆJÓ #¤eÑ +× :Ñ :Ó <Ð<r)érÆcó—|Srr#)Ú second_offsets rrNrNs€ØÐrcó —|}d|dzdzz}|S)Nrér#)r÷rñÚcalculated_offsets   rrNrNs$€ð
#ˆ
Ø =°2Ñ#5¸"Ñ"<Ñ=ÐØ Ð r)Ú nullcontextcó"—eZdZdZd„Zd„Zd„Zy)r·zj
        Class for wrapping contexts so that they are passed through in a
        with statement.
        có—||_yr©Úcontext)rrÿs  rrQz_nullcontext.__init__0s    €Ø"ˆDLrcó—|jSrrþr:s rÚ    __enter__z_nullcontext.__enter__3s €Ø—<‘<Ð rcó—yrr#)Úargsr¯s  rÚ__exit__z_nullcontext.__exit__6s€Ø rN)r9r=r>r?rQrrr#rrr·r·+s„ñ     ò    #ò     ó    rr·r)@r?rLrÍrdÚsysrÒrìr²Ú collectionsrrÕrÚ    six.movesrÚ_commonrrr    r
r Ú
_factoriesr r rÚwinrrÚ ImportErrorÚwarningsrrMrrôÚ    toordinalÚ EPOCHORDINALÚ add_metaclassrûrr"r,rarArˆr£r±rr4rNrUrsÚplatformrÌrÏráÚgettzrærîròrwÚ version_inforNÚ
contextlibrûr·r#rrú<module>rs>ðñóÛ Û Û
Û    Û ÛÝ#ã
ÝÝß/ß(Ý-ç6Ý%ðß&õ
à€x×ј!Ӏ؈×ј$  1 a¨Ó+€Ø‰Ó € ð€×ѐ<Ó ôQ#ˆHO‰OóQ#ó!ðQ#ñn ƒg€ð€×ÑÐ#Ó$ôA#ˆx‰óA#ó%ðA#ôH|#ˆgô|#ô~*1ˆfô*1ôZ
8ˆfô
8ôeGˆWôeGôP_&ˆkô_&ðD€×ѐ=Ó!ôtCˆGótCó"ðtCônVôôS#ôS#ôlKCˆVôKCð\‡<<7ÒØ Ð-€Gò Gð
€GØ€GòNñb    ‹ €ØóóD+*ò\+ò\=ð×ѐvÒóò!ðæ6øðW8òØÐ€E‹JðûðX8ò ô vö ð ús$ÁGÆ?GÇ    GÇGÇG)Ç(G)