ó
    6°h2  ã                  ó,  • S SK Jr  S SKrS SKrS SKrS SKJrJrJrJ	r	J
r
Jr  SSKJr  SSKJrJrJr  \\\\	\
\/(       d   e\
\\4   rSr\S-   rSSS	 jjr  S     SS
 jjrSSS jjrSS jr S       SS jjr  S       SS jjrSS jrg)é    )ÚannotationsN)ÚCallableÚDictÚIterableÚOptionalÚTupleÚUnioné   )Ú_)ÚencodingÚerrorÚpycompat)s   %Y-%m-%dT%H:%M:%Ss   %Y-%m-%dT%H:%Ms   %Y-%m-%dT%H%M%Ss   %Y-%m-%dT%H%Ms   %Y-%m-%d %H:%M:%Só   %Y-%m-%d %H:%Ms   %Y-%m-%d %H%M%Ss   %Y-%m-%d %H%Ms   %Y-%m-%d %I:%M:%S%pr   s   %Y-%m-%d %I:%M%pó   %Y-%m-%ds   %m-%ds   %m/%ds   %m/%d/%ys   %m/%d/%Ys   %a %b %d %H:%M:%S %Ys   %a %b %d %I:%M:%S%p %Ys   %a, %d %b %Y %H:%M:%Ss   %b %d %H:%M:%S %Ys   %b %d %I:%M:%S%p %Ys   %b %d %H:%M:%Ss   %b %d %I:%M:%S%ps   %b %d %H:%Ms   %b %d %I:%M%ps   %b %d %Ys   %b %ds   %H:%M:%Ss
   %I:%M:%S%ps   %H:%Ms   %I:%M%p)s   %Ys   %Y-%ms   %bs   %b %Yc                óX  • U c  [         R                   " 5       n U S:  a,  [        S5      n[        R                  " [        S5      U -  US9e[	        U [
        R
                  R                  U 5      R                  [
        R                  R                  S9R                  5       -
  5      nX4$ )aõ  Return a unix timestamp (or the current time) as a (unixtime,
offset) tuple based off the local timezone.

>>> import os, time
>>> os.environ['TZ'] = 'Asia/Novokuznetsk'
>>> time.tzset()

>>> def dtu(*a):
...    return datetime.datetime(*a, tzinfo=datetime.timezone.utc)

# Old winter timezone, +7
>>> makedate(dtu(2010,  1,  1,  5,  0,  0).timestamp())
(1262322000.0, -25200)

# Same timezone in summer, +7, so no DST
>>> makedate(dtu(2010,  7,  1,  5,  0,  0).timestamp())
(1277960400.0, -25200)

# Changing to new winter timezone, from +7 to +6 (ae04af1ce78d testcase)
>>> makedate(dtu(2010, 10, 30, 20,  0,  0).timestamp() - 1)
(1288468799.0, -25200)
>>> makedate(dtu(2010, 10, 30, 20,  0,  0).timestamp())
(1288468800.0, -21600)
>>> makedate(dtu(2011,  1,  1,  5,  0,  0).timestamp())
(1293858000.0, -21600)

# Introducing DST, changing +6 to +7
>>> makedate(dtu(2011,  3, 26, 20,  0,  0).timestamp() - 1)
(1301169599.0, -21600)
>>> makedate(dtu(2011,  3, 26, 20,  0,  0).timestamp())
(1301169600.0, -25200)
r   s   check your clocks   negative timestamp: %d)Úhint)Útzinfo)Útimer   r   Ú
InputErrorÚroundÚdatetimeÚfromtimestampÚreplaceÚtimezoneÚutcÚ	timestamp)r   r   Útzs      Ú:/usr/lib/python3/dist-packages/mercurial/utils/dateutil.pyÚmakedater   U   s¡   € ðB ÑÜ—I’I“Kˆ	Ø�1ƒ}ÜÐ$Ó%ˆÜ×ÒÜÐ'Ó(¨9Ñ4¸4ñ
ð 	
ô 
ØÜ
×
Ñ
×
)Ñ
)Øó
÷ 
‰œ×)Ñ)×-Ñ-ˆÐ	.ß	‰‹ñ	ó
€Bð ˆ=Ðó    c                ó*  • U =(       d
    [        5       u  p#SU;   d  SU;   d  SU;   ap  US:„  =(       a    S=(       d    Sn[        U5      S-  n[        US5      u  pgUR                  SS5      nUR                  SS	XF4-  5      nUR                  SS
U-  5      nX#-
  nUS:”  a  SnOUS:  a  Sn[        R                  " SSS5      [        R
                  " US9-   n[        R                  " UR                  [        R                  " U5      5      5      n	U	$ )a¾  represent a (unixtime, offset) tuple as a localized time.
unixtime is seconds since the epoch, and offset is the time zone's
number of seconds away from UTC.

>>> datestr((0, 0))
'Thu Jan 01 00:00:00 1970 +0000'
>>> datestr((42, 0))
'Thu Jan 01 00:00:42 1970 +0000'
>>> datestr((-42, 0))
'Wed Dec 31 23:59:18 1969 +0000'
>>> datestr((0x7fffffff, 0))
'Tue Jan 19 03:14:07 2038 +0000'
>>> datestr((-0x80000000, 0))
'Fri Dec 13 20:45:52 1901 +0000'
s   %1s   %2s   %zr   ó   -ó   +é<   s   %1%2s   %c%02ds   %02déÿÿÿé   €i²  é   )Úseconds)
r   ÚabsÚdivmodr   r   Ú	timedeltar   Ú
strtolocalÚstrftimeÚstrfromlocal)
ÚdateÚformatÚtr   ÚsignÚminutesÚqÚrÚdÚss
             r   Údatestrr8   ˆ   sü   € ð& ×”H“J�E€AØ�ƒ˜% 6›/¨U°f«_Ø�Q‘× ˜D×( DˆÜ�b“'˜R‘-ˆÜ�g˜rÓ"‰ˆØ—‘  wÓ/ˆØ—‘  y°D°9Ñ'<Ó=ˆØ—‘  w°¡{Ó3ˆØ	‰€AØˆ:ƒ~Ø‰Ø	
ˆ[‹Øˆô 	×Ò˜$  1Ó%¬×(:Ò(:À1Ñ(EÑE€AÜ×Ò˜AŸJ™J¤x×'<Ò'<¸VÓ'DÓEÓF€AØ€Hr    c                ó   • [        U SS9$ )z1turn (timestamp, tzoff) tuple into iso 8631 date.r   )r0   )r8   )r/   s    r   Ú	shortdater:   °   s   € ä�4 Ñ,Ð,r    c                óh  • [         R                  " U 5      n U R                  S5      (       d  U R                  S5      (       a  SU SS R                  5       4$ [	        U 5      S:¼  ay  U S   S;   ap  U S	S R                  5       (       aX  U S   S
:H  =(       a    S=(       d    Sn[        U S	S 5      n[        U SS 5      nU* US-  U-   -  S-  U SS R                  5       4$ U R                  S5      (       a  U SS R                  5       (       a  SU SS 4$ [	        U 5      S:¼  aŒ  U S   S;   aƒ  U S   S:X  az  U SS R                  5       (       ab  U SS R                  5       (       aJ  U S   S
:H  =(       a    S=(       d    Sn[        U SS 5      n[        U SS 5      nU* US-  U-   -  S-  U SS 4$ SU 4$ )zRfind a trailing timezone, if any, in string, and return a
(offset, remainder) pairs   GMTs   UTCr   Néýÿÿÿé   éûÿÿÿs   +-éüÿÿÿr#   r'   éÿÿÿÿéþÿÿÿr$   ó   Zé   iúÿÿÿó   :)r   ÚbytestrÚendswithÚrstripÚlenÚisdigitÚint)r7   r2   Úhoursr3   s       r   ÚparsetimezonerL   µ   s¶  € ô 	×Ò˜Ó€Aà‡z�z�&×Ñ˜QŸZ™Z¨×/Ñ/Ø�!�C�R�&—-‘-“/Ð!Ð!ô ˆ1ƒv�ƒ{�q˜‘u “~¨!¨B¨C¨&¯.©.×*:Ñ*:Ø�"‘˜‘×$ 1×*¨ˆÜ�A�b˜�H“ˆÜ�a˜˜�f“+ˆØˆu˜ ™
 WÑ,Ñ-°Ñ2°A°c°r°F·M±M³OÐCÐCð 	‡z�z�$×Ñ˜A˜b ˜H×,Ñ,×.Ñ.Ø�!�C�R�&ˆyÐô 	ˆA‹�!‹Øˆb‰E�U‹NØˆb‰E�T‹MØˆb�ˆH×Ñ×ÑØˆbˆcˆF�N‰N×Ñà�"‘˜‘×$ 1×*¨ˆÜ�A�b˜�H“ˆÜ�a˜˜�f“+ˆØˆu˜ ™
 WÑ,Ñ-°Ñ2°A°c°r°FÐ:Ð:à�ˆ7€Nr    c                ó  • Uc  0 n[        U 5      u  p4SnS HY  n[        R                  " U5      nU Vs/ s H  nSU-   U;   d  M  SPM     nnU(       d  USX&   U   -   -  nUSUS   -   -  nMW  SnM[     [        R                  " [
        R                  " U5      [
        R                  " U5      5      n	[        [        R                  " U	5      5      n
Uc&  [        [        R                  " U	5      5      nXº-
  nX³4$ X£-   nX³4$ s  snf )zzparse a localized time string and return a (unixtime, offset) tuple.
if the string cannot be parsed, ValueError is raised.F)ó   Só   Mó   HIó   dó   mbó   yYó   %Tó   @s   @%r   )rL   r   rE   r   Ústrptimer   r.   rJ   ÚcalendarÚtimegmÚmktime)Ústringr0   ÚdefaultsÚoffsetr/   ÚusenowÚpartÚpÚfoundÚ	timetupleÚlocalunixtimeÚunixtimes               r   Ústrdaterd   Ø   s  € ð ÑØˆô ! Ó(�L€Fð €Fóˆô ×Ò Ó%ˆÙ#Ó<št˜!¨¨q©°VÑ';—™tˆÐ<ÞØ�D˜8™>¨&Ñ1Ñ1Ñ1ˆDØ�e˜d 1™g‘oÑ%ŠFð ŠFñ!ô$ —’Ü×Ò˜dÓ#¤X×%:Ò%:¸6Ó%Bó€Iô œŸš¨	Ó2Ó3€MØ�~ä”t—{’{ 9Ó-Ó.ˆØÑ)ˆð ÐÐð !Ñ)ˆØÐÐùò' =s   ´DÁDc           	     ó   • Uc  0 nU (       d  g[        U [        5      (       a'  [        U 5      S:X  a  U $ [        R                  " S5      eU(       d  [
        nU R                  5       n U S:X  d  U [        S5      :X  a
  [        5       $ U S:X  d  U [        S5      :X  aD  [        R                  R                  5       R                  S5      n [        R                  " U 5      n OmU S:X  d  U [        S5      :X  aX  [        R                  R                  5       [        R                  " SS	9-
  R                  S5      n [        R                  " U 5      n  [!        ["        U R%                  S
5      5      u  p4US:  d  US:”  a"  [        R0                  " [        S5      U-  5      eUS:  d  US:”  a"  [        R0                  " [        S5      U-  5      eX44$ ! [&         a¶    [        5       n0 nS H<  nUR)                  U5      nUc  USS S;   a  SnOSn[+        USUSS -   5      n	X‰4Xg'   M>     U H+  n
 [-        X
U5      u  p4   MÏ  ! [&        [.        4 a     M)  f = f   [        R0                  " [        S5      [2        R4                  " U 5      -  5      ef = f)a–  parse a localized date/time and return a (unixtime, offset) tuple.

The date may be a "unixtime offset" string or in one of the specified
formats. If the date already is a (unixtime, offset) tuple, it is returned.

>>> parsedate(b' today ') == parsedate(
...     datetime.date.today().strftime('%b %d').encode('ascii'))
True
>>> parsedate(b'yesterday ') == parsedate(
...     (datetime.date.today() - datetime.timedelta(days=1)
...      ).strftime('%b %d').encode('ascii'))
True
>>> now, tz = makedate()
>>> strnow, strtz = parsedate(b'now')
>>> (strnow - now) < 1
True
>>> tz == strtz
True
>>> parsedate(b'2000 UTC', formats=extendeddateformats)
(946684800, 0)
)r   r   r
   s   invalid date formats   nows   todayz%b %ds	   yesterdayr'   )Údaysó    )rQ   rR   rS   rP   rO   rN   r   s   HMSs   00ó   1rT   s   invalid date: %rr&   r%   s   date exceeds 32 bits: %di ;ÿÿiÀ¨  s   impossible time zone offset: %d)Ú
isinstanceÚtuplerH   r   ÚProgrammingErrorÚdefaultdateformatsÚstripr   r   r   r/   Útodayr-   r   r,   r+   ÚmaprJ   ÚsplitÚ
ValueErrorÚgetr8   rd   ÚOverflowErrorÚ
ParseErrorr   rE   )r/   ÚformatsÚbiasÚwhenr\   Únowr[   r^   ÚbÚnr0   s              r   Ú	parsedater{     sa  € ð4 �|ØˆÞØÜ�$œ×ÑÜˆt‹9˜‹>ØˆKä×(Ò(Ð)?Ó@Ð@ÞÜ$ˆØ�:‰:‹<€Dàˆvƒ~˜¤ 6£Ó*Ü‹zÐØˆxÓ˜4¤1 X£;Ó.Ü�}‰}×"Ñ"Ó$×-Ñ-¨gÓ6ˆÜ×"Ò" 4Ó(‰Ø	�Ó	 ¬¨<«Ó!8Ü—‘×#Ñ#Ó%¬×(:Ò(:ÀÑ(BÑB×LÑLØó
ˆô ×"Ò" 4Ó(ˆðÜœ3 §
¡
¨4Ó 0Ó1‰ˆðF ˆkÓ˜T JÓ.Ü×ÒœqÐ!<Ó=ÀÑDÓEÐEØ�ƒ˜& 5›.Ü×ÒœqÐ!CÓDÀvÑMÓNÐNØˆ<ÐøôM ó ä‹jˆØˆÛ;ˆDà—‘˜“ˆAØ‰yØ˜˜!�9 Ó&Ø‘Að �Aô ˜˜T D¨¨1 IÑ-Ó.ˆAà˜VˆH‹Nñ <ó ˆFðÜ& t°XÓ>‘�ó øô ¤Ð.ó Úðúñ ô ×"Ò"ÜÐ%Ó&¬×)9Ò)9¸$Ó)?Ñ?óð ð7ús1   Å!G ÇAJÈ+H=È9JÈ=IÉJÉIÉ<Jc                óJ  ^^^• SS jnSS jnU R                  5       n U (       d  [        R                  " [        S5      5      eU SS S:X  a:  U SS (       d  [        R                  " [        S5      5      eU" U SS 5      mU4S	 j$ U SS S
:X  a:  U SS (       d  [        R                  " [        S5      5      eU" U SS 5      mU4S j$ U SS S:X  aV   [	        U SS 5      nUS:  a%  [        R                  " [        S5      U SS -  5      e[        5       S   US-  S-  -
  mU4S j$ SU ;   a+  U R                  S5      u  pEU" U5      U" U5      smmUU4S j$ U" U 5      U" U 5      smmUU4S j$ ! [
         a&    [        R                  " [        S5      U SS -  5      ef = f)aó  Return a function that matches a given date match specifier

Formats include:

'{date}' match a given date to the accuracy provided

'<{date}' on or before a given date

'>{date}' on or after a given date

>>> p1 = parsedate(b"10:29:59")
>>> p2 = parsedate(b"10:30:00")
>>> p3 = parsedate(b"10:30:59")
>>> p4 = parsedate(b"10:31:00")
>>> p5 = parsedate(b"Sep 15 10:30:00 1999")
>>> f = matchdate(b"10:30")
>>> f(p1[0])
False
>>> f(p2[0])
True
>>> f(p3[0])
True
>>> f(p4[0])
False
>>> f(p5[0])
False
c                ó4   • SSS.n[        U [        U5      S   $ )Nrh   )rR   rQ   r   )r{   Úextendeddateformats)r/   r6   s     r   ÚlowerÚmatchdate.<locals>.lower€  s!   € Ø Ñ%ˆÜ˜Ô2°AÓ6°qÑ9Ð9r    c                ó¼   • SSSSS.nS H  n X!S'   [        U [        U5      S   s  $    SUS'   [        U [        U5      S   $ ! [        R                   a     MP  f = f)	Ns   12s   23s   59)rR   rP   rO   rN   )s   31s   30s   29rQ   r   s   28)r{   r~   r   rt   )r/   r6   rf   s      r   ÚupperÚmatchdate.<locals>.upper„  su   € Ø %¨u¸EÑBˆÛ)ˆDðØ�$‘Ü  Ô':¸AÓ>¸qÑAÒAñ *ð ˆˆ$‰Ü˜Ô2°AÓ6°qÑ9Ð9øô ×#Ñ#ó Úðús   ŽAÁAÁAs+   dates cannot consist entirely of whitespacer   r'   ó   <Ns   invalid day spec, use '<DATE'c                ó   >• U T:*  $ ©N© ©Úxrw   s    €r   Ú<lambda>Úmatchdate.<locals>.<lambda>™  ó	   ø€ ˜˜dšr    ó   >s   invalid day spec, use '>DATE'c                ó   >• U T:¬  $ r†   r‡   rˆ   s    €r   rŠ   r‹   ž  rŒ   r    r"   s   invalid day spec: %ss,   %s must be nonnegative (see 'hg help dates')i  é   c                ó   >• U T:¬  $ r†   r‡   rˆ   s    €r   rŠ   r‹   ©  rŒ   r    s    to c                ó&   >• U T:¬  =(       a    U T:*  $ r†   r‡   ©r‰   ÚstartÚstops    €€r   rŠ   r‹   ­  ó   ø€ ˜˜e™×1¨¨T©	Ð1r    c                ó&   >• U T:¬  =(       a    U T:*  $ r†   r‡   r’   s    €€r   rŠ   r‹   °  r•   r    )r/   ÚbytesÚreturnÚfloat)rm   r   r   r   rJ   rq   r   rp   )	r/   r   r‚   rf   Úary   r“   r”   rw   s	         @@@r   Ú	matchdater›   c  s³  ú€ ô::ô	:ð �:‰:‹<€DæÜ×ÒÜÐ<Ó=ó
ð 	
ð 
ˆa�ˆ�dÓ	Ø�A�BŽxÜ×"Ò"¤1Ð%EÓ#FÓGÐGÙ�T˜!˜"�X‹ˆÜ"Ð"Ø	ˆa�ˆ�dÓ	Ø�A�BŽxÜ×"Ò"¤1Ð%EÓ#FÓGÐGÙ�T˜!˜"�X‹ˆÜ"Ð"Ø	ˆa�ˆ�dÓ	ð	JÜ�t˜A˜B�x“=ˆDð �!‹8Ü×"Ò"ÜÐAÓBÀTÈ!È"ÀXÑMóð ô ‹z˜!‰}˜t d™{¨RÑ/Ñ/ˆÜ"Ð"Ø	�D‹Ø�z‰z˜'Ó"‰ˆÙ˜A“h¡ a£ˆˆˆtÝ1Ð1á˜D“k¡5¨£;ˆˆˆtÝ1Ð1øô ó 	JÜ×"Ò"¤1Ð%<Ó#=ÀÀQÀRÀÑ#HÓIÐIð	Jús   ÃE2 Å20F"r†   )r   zOptional[float]r˜   Úhgdate)Ns   %a %b %d %H:%M:%S %Y %1%2)r/   úOptional[hgdate]r0   r—   r˜   r—   )r/   r�   r˜   r—   )r7   r—   r˜   zTuple[Optional[int], bytes])rZ   r—   r0   r—   r[   z*Optional[Dict[bytes, Tuple[bytes, bytes]]]r˜   rœ   )NN)r/   zUnion[bytes, hgdate]ru   zOptional[Iterable[bytes]]rv   zOptional[Dict[bytes, bytes]]r˜   rœ   )r/   r—   r˜   zCallable[[float], bool])Ú
__future__r   rW   r   r   Útypingr   r   r   r   r   r	   Úi18nr   Ú r   r   r   r™   rJ   rœ   rl   r~   r   r8   r:   rL   rd   r{   r›   r‡   r    r   Ú<module>r¢      s   ðõ #ã Û Û ÷÷ õ ÷ñ ð ØØØØ	Ø	öð ð ð 
ˆu�cˆzÑ	€ð Ð ðD )ð ,ñ Ð ö0ðh "Ø0ð%Ø
ð%àð%ð õ%öP-ô
 ðL <@ð+Øð+àð+ð 9ð+ð õ	+ð` *.Ø)-ðZØ
ðZà&ðZð 'ðZð õ	ZõzM2r    