Ë
    òT•jÞ^  ã                   ó�  — d dl Zd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlmZ dZdj                  e ej                   «       «      Zedz   Zej$                  dk(  rd dlZ ej(                  de«      ZdZej,                  dk(  re ej.                  «       j$                  d	k\  rwed
z   Z	 ej1                   ej2                  «       «        ede›d ej2                  «       ›d�«       dZn0ej$                  dvr"	 dj9                   ej2                  «       «       	 dZdD ].  Z	  ej@                   ejB                  e«      «      ek7  re"‚	 eZ n  ejF                  «       Z$dZ%dD ]#  Z	 ej9                   ej2                  «       «       Œ% ereez   Z'ndZ'e'xs eZ(d„ Z)da*d„ Z+d„ Z,da-d„ Z.d„ Z/da0d„ Z1d„ Z2da3d„ Z4d„ Z5d„ Z6d„ Z7ej$                  jq                  d «      rd?d!„Z9d"„ Z:d#„ Z;d$„ Z<d%„ Z=nejn                  Z:ej|                  Z;d&„ Z<d'„ Z=d(„ Z>d)„ Z?ej€                  d@d*„«       ZAej€                  d?d+„«       ZBej€                  dAd,„«       ZCd-„ ZDej€                  d.„ «       ZEd/„ ZF G d0„ d1«      ZGd2„ ZH eIed3«      rej€                  d4„ «       ZJnej€                  d5„ «       ZJ G d6„ d7ej–                  j˜                  «      ZM	 ejœ                  r!d dlOZO eOj                   d8d9¬:«      ZQd	ZRd	ZSd;ZTd<ZUneV‚	 ej€                  d=„ «       ZWy# e$ r Y �Œðw xY w# e$ r( edj9                   ej2                  «       d«      z   ZY �Œ w xY w# e"$ r Y �Œ(w xY w# e$ rY 	 ej9                   ej2                  «        ejL                  «       «       n# e$ r Y Y �Œ&w xY w ejB                  e«      ez   Z%Y  �Œw xY w# eXeVf$ r d>„ ZWY yw xY w)Bé    N)Úsupportz@testz	{}_{}_tmpu   -Ã Ã²É˜Å�ÄŸÚdarwinÚNFDÚnté   u   -å…±Å�â™¡Í£í²€zWARNING: The filename z, CAN be encoded by the filesystem encoding (z.). Unicode filename tests may not be effective>   Úwasir   Ú
emscriptenó   ÿs   -ÿÚsurrogateescapeÚ )õ   Ã¦u   Ä°u   Å�u   Ï†u   Ðšu   ×�u   ØŒu   Øªu   à¸�õ   Â u   â‚¬)s   çwðr
   s   ®Õí²€s   í´€s   �˜c                  óÊ   — t        t        d«      } 	 | j                  «       | j                  «        t	        t        «       S # | j                  «        t	        t        «       w xY w)z`
    Create an invalid file descriptor by opening and closing a file and return
    its fd.
    Úwb)ÚopenÚTESTFNÚfilenoÚcloseÚunlink©Úfiles    ú-/usr/lib/python3.12/test/support/os_helper.pyÚmake_bad_fdr   ž   sB   € ô
 ”˜Ó€DðØ�{‰{‹}à�
‰
ŒÜŒv�øð 	�
‰
ŒÜŒv�ús   ’A Á!A"c                  ó  — t         �t         S t        j                  j                  t        «      } | dz   }	 t        j
                  | |«       d}t        j                  |«       |a |S # t        t        t        f$ r d}Y |a |S w xY w)NÚcan_symlinkTF)
Ú_can_symlinkÚosÚpathÚabspathr   ÚsymlinkÚremoveÚOSErrorÚNotImplementedErrorÚAttributeError)ÚsrcÚsymlink_pathÚcans      r   r   r   ®   s†   € äÐÜÐô �'‰'�/‰/œ&Ó
!€CØ˜Ñ&€Lð Ü
�
‰
�3˜Ô%Øˆô 	�	‰	�,ÔØ€LØ€Jøô Ô(¬.Ð9ò Ø‰ð €LØ€Jðús   ¶A' Á'BÂBc                 óX   — t        «       }d}|r| S  t        j                  |«      | «      S )z8Skip decorator for tests that require functional symlinkz*Requires functional symlink implementation)r   ÚunittestÚskip©ÚtestÚokÚmsgs      r   Úskip_unless_symlinkr/   Â   s,   € ä	‹€BØ
6€CÙˆ4Ð3Ð-œ8Ÿ=™=¨Ó-¨dÓ3Ð3ó    c                  óî  — dd l } t        �t        S t        t        d«      sd}|a|S dd l}| j                  «       }| j                  |¬«      \  }}	 t        t        d«      5 }	 t        j                  |dd«       t        j                  |dd	«       t        j                  |j                  «       dd«       |j                  «       }t        j                  d
|«      }|d u xs t        |j                  d«      «      dk\  }d d d «       t#        t        «       t#        |«       t%        |«       a|S # t         $ r d}Y Œ>w xY w# 1 sw Y   ŒCxY w# t#        t        «       t#        |«       t%        |«       w xY w)Nr   ÚsetxattrF©Údirr   s	   user.testr0   s   trusted.foos   42z2.6.(\d{1,2})é   é'   )ÚtempfileÚ
_can_xattrÚhasattrr   ÚplatformÚmkdtempÚmkstempr   r   r2   r   ÚreleaseÚreÚmatchÚintÚgroupr"   r   Úrmdir)	r7   r'   r:   Útmp_dirÚtmp_fpÚtmp_nameÚfpÚkernel_versionÚms	            r   Ú	can_xattrrI   Ì   sI  € ÛäÐÜÐÜ”2�zÔ"Øˆð. €JØ€Jó- 	Ø×"Ñ"Ó$ˆØ#×+Ñ+°Ð+Ó8Ñˆ�ð	Ü”f˜dÓ#ð   rð ô —K‘K ¨°cÔ:Ü—K‘K ¨.¸%Ô@Ü—K‘K §	¡	£¨\¸3Ô?à%-×%5Ñ%5Ó%7�NÜŸ™Ð!1°>ÓB�AØ˜t˜)Ò<¤s¨1¯7©7°1«:£¸"Ñ'<�C÷ ô ”6ŒNÜ�8ÔÜ�'ŒNØ€JØ€Jøô ò  Ø’Cð ú÷ ð  ûô ”6ŒNÜ�8ÔÜ�'�NúsC   ÁE Á!EÁ#BD0Ã?E Ä0D>Ä;EÄ=D>Ä>EÅE
ÅE Å'E4c                 óX   — t        «       }d}|r| S  t        j                  |«      | «      S )zDSkip decorator for tests that require functional extended attributesz(no non-broken extended attribute support)rI   r)   r*   r+   s      r   Úskip_unless_xattrrK   í   s,   € ä	‹€BØ
4€CÙˆ4Ð3Ð-œ8Ÿ=™=¨Ó-¨dÓ3Ð3r0   c                  ó`  — t         �t         S t        t        d«      sda t         S 	 t        t        d«      5 } 	 t        j
                  t        d«       t        j                  t        «      j                  }t        j
                  t        d«       t        j                  t        «      j                  }t        j                  |«      t        j                  |«      k7  }d d d «       t        t        «       a |S # t        $ r}d}Y d }~Œ+d }~ww xY w# 1 sw Y   Œ4xY w# t        t        «       w xY w)NÚchmodFr   im  iÿ  )Ú
_can_chmodr9   r   r   r   rM   ÚstatÚst_modeÚS_IMODEr"   r   )ÚfÚmode1Úmode2r'   Úes        r   Ú	can_chmodrV   ö   sç   € äÐÜÐÜ”2�wÔØˆ
ÜÐðÜ”&˜$Óð 		A 1ðAÜ—‘œ Ô'ÜŸ™¤›×/Ñ/�Ü—‘œ Ô'ÜŸ™¤›×/Ñ/�ô —l‘l 5Ó)¬T¯\©\¸%Ó-@Ñ@�÷		Aô 	ŒvŒØ€JØ€Jøô ò Ø•ûðú÷		Að 		Aûô 	Œv�úsL   ¦D ¶D¸A:C8Â2+DÃD Ã8	DÄDÄDÄDÄDÄDÄD ÄD-c                 óX   — t        «       }d}|r| S  t        j                  |«      | «      S )z`Skip tests that require working os.chmod()

    WASI SDK 15.0 cannot change file mode bits.
    zrequires working os.chmod())rV   r)   r*   r+   s      r   Úskip_unless_working_chmodrX     s.   € ô
 
‹€BØ
'€CÙˆ4Ð3Ð-œ8Ÿ=™=¨Ó-¨dÓ3Ð3r0   c                  ó"  — t        «       sdat        �t        S 	 t        t        d«      5 } t	        j
                  t        d«       	 t        t        d«      5  	 d d d «       dad d d «       	 t	        j
                  t        d«       t        t        «       t        S # 1 sw Y   ŒCxY w# t        $ r daY ŒQw xY w# 1 sw Y   ŒVxY w# t        $ r Y ŒIw xY w# 	 t	        j
                  t        d«       n# t        $ r Y nw xY wt        t        «       w xY w)NFr   é   TiÀ  )rV   Ú_can_dac_overrider   r   r   rM   r"   r   )rR   s    r   Úcan_dac_overrider\     sô   € ô Œ;Ø!ÐÜÐ$Ü Ð ðÜ”&˜$Óð 	) 1Ü�H‰H”V˜UÔ#ð)Üœ& $Ó'ñ Ø÷ð
 %)Ð!÷	)ð	Ü�H‰H”V˜UÔ#ô 	ŒvŒäÐ÷ð ûäò *Ø$)Ò!ð*ú÷	)ð 	)ûô ò 	Ùð	ûð	Ü�H‰H”V˜UÕ#øÜò 	Ùð	úäŒv�ús”   šC ªB7ÁB&ÁBÁB&Á B7Á"C Á+C ÂB#	ÂB&Â&B4Â1B7Â3B4Â4B7Â7C Â<C Ã	CÃCÃDÃC/Ã.DÃ/	C;Ã8DÃ:C;Ã;Dc                 óZ   — t        «        }d}|r| S  t        j                  |«      | «      S )Nz"incompatible with CAP_DAC_OVERRIDE©r\   r)   r*   r+   s      r   Úskip_if_dac_overrider_   :  s0   € ÜÓÐ	€BØ
.€CÙˆ4Ð3Ð-œ8Ÿ=™=¨Ó-¨dÓ3Ð3r0   c                 óX   — t        «       }d}|r| S  t        j                  |«      | «      S )Nzrequires CAP_DAC_OVERRIDEr^   r+   s      r   Úskip_unless_dac_overridera   @  s-   € Ü	Ó	€BØ
%€CÙˆ4Ð3Ð-œ8Ÿ=™=¨Ó-¨dÓ3Ð3r0   c                 óF   — 	 t        | «       y # t        t        f$ r Y y w xY w©N)Ú_unlinkÚFileNotFoundErrorÚNotADirectoryError©Úfilenames    r   r   r   F  s'   € ðÜ�ÕøÜÔ1Ð2ò Ùðús   ‚ Ž Ÿ Úwinc                 ó8  —  | |«       |r|}n(t         j                  j                  |«      \  }}|xs d}d}|dk  r?t        j                  |«      }|r|sy |v sy t	        j
                  |«       |dz  }|dk  rŒ?t        j                  d|z   t        d¬«       y )Nú.gü©ñÒMbP?g      ð?r   z)tests may fail, delete still pending for é   ©Ú
stacklevel)	r   r   ÚsplitÚlistdirÚtimeÚsleepÚwarningsÚwarnÚRuntimeWarning)ÚfuncÚpathnameÚwaitallÚdirnameÚnameÚtimeoutÚLs          r   Ú_waitforr}   N  s›   € áˆXŒáØ‰GäŸG™GŸM™M¨(Ó3‰MˆG�TØ’n ˆGð ˆØ˜Šmô —
‘
˜7Ó#ˆAÙ ‘AØð '+¨a¡iØä�J‰J�wÔØ�q‰LˆGð ˜‹mô 	�‰ÐAÀHÑLÜ$°ö	4r0   c                 ó8   — t        t        j                  | «       y rc   )r}   r   r   rg   s    r   rd   rd   o  s   € Ü”—‘˜HÕ%r0   c                 ó8   — t        t        j                  | «       y rc   )r}   r   rB   ©ry   s    r   Ú_rmdirr�   r  s   € Ü”—‘˜7Õ#r0   c                 óZ   ‡‡— ddl mŠ ˆˆfd„Št        ‰| d¬«       t        ˆfd„| «       y )Nr   ©Ú
_force_runc                 óÚ  •—  ‰| t         j                  | «      D ]–  }t         j                  j                  | |«      }	 t        j                  |«      j
                  }t        j                  |«      r't        ‰|d¬«        ‰|t         j                  |«       Œ ‰|t         j                  |«       Œ˜ y # t        $ r-}t        d|›d|›�t        j                  ¬«       d}Y d }~Œˆd }~ww xY w)Nzsupport.rmtree(): os.lstat(z) failed with r   r   T©rx   )r   rp   r   ÚjoinÚlstatrP   r"   ÚprintÚsysÚ
__stderr__rO   ÚS_ISDIRr}   rB   r   )r   rz   ÚfullnameÚmodeÚexcr„   Ú_rmtree_inners        €€r   r�   z_rmtree.<locals>._rmtree_innerx  s¸   ø€ Ù" 4¬¯©°TÓ:ò >�ÜŸ7™7Ÿ<™<¨¨dÓ3�ðÜŸ8™8 HÓ-×5Ñ5�Dô —<‘< Ô%Ü˜]¨H¸dÕCÙ˜x¬¯©°8Õ<á˜x¬¯©°HÕ=ñ>øô ò ÝÚ%¡sð,ä"Ÿ~™~õ/ð •Dûð	ús   ¾B4Â4	C*Â=#C%Ã%C*Tr†   c                 ó4   •—  ‰| t         j                  | «      S rc   )r   rB   )Úpr„   s    €r   ú<lambda>z_rmtree.<locals>.<lambda>ˆ  s   ø€ ™: a¬¯©°1Ó5€ r0   )Útest.supportr„   r}   )r   r„   r�   s    @@r   Ú_rmtreer•   u  s$   ù€ Ý+õ	>ô 	� ¨dÕ3ÜÓ5°tÕ<r0   c                 óÚ   — 	 dd l } |j                  t        | «      dz  «      }|j                  j                  j                  | |t        |«      «      }|r|d | S | S # t        $ r Y | S w xY w)Nr   r   )ÚctypesÚcreate_unicode_bufferÚlenÚwindllÚkernel32ÚGetLongPathNameWÚImportError)r   r—   ÚbufferÚlengths       r   Ú	_longpathr    Š  s{   € ð
	'Ûð
 2�V×1Ñ1´#°d³)¸a±-Ó@ˆFØ—]‘]×+Ñ+×<Ñ<¸TÀ6Ü=@À»[óJˆFáØ˜g˜v�Ð&Øˆøô ò 	àð ˆð	ús   ‚A Á	A*Á)A*c                 ó–   ‡— dd l }	 |j                  | «       y # t        $ r Y nw xY wˆfd„Š ‰| «       t        j                  | «       y )Nr   c                 óŠ  •— ddl m}  || t        j                  | «      D ]�  }t        j                  j                  | |«      }	 t        j                  |«      j                  }t        j                  |«      r! ‰|«        || t        j                  |«       Œy || t        j                  |«       Œ’ y # t        $ r d}Y Œ^w xY w)Nr   rƒ   )r”   r„   r   rp   r   r‡   rˆ   rP   r"   rO   rŒ   rB   r   )r   r„   rz   r�   rŽ   r�   s        €r   r�   z_rmtree.<locals>._rmtree_inner£  s›   ø€ Ý/Ù" 4¬¯©°TÓ:ò 
:�ÜŸ7™7Ÿ<™<¨¨dÓ3�ðÜŸ8™8 HÓ-×5Ñ5�Dô —<‘< Ô%Ù! (Ô+Ù˜t¤R§X¡X¨xÕ8á˜t¤R§Y¡Y°Õ9ñ
:øô ò Ø’Dðús   ÁB4Â4CÃC)ÚshutilÚrmtreer"   r   rB   )r   r£   r�   s     @r   r•   r•   ›  sF   ø€ Ûð	Ø�M‰M˜$ÔØøÜò 	Ùð	úô	:ñ 	�dÔÜ
�‰��s   ‡ ™	%¤%c                 ó   — | S rc   © ©r   s    r   r    r    ³  ó   € Øˆr0   c                 ó:   — 	 t        | «       y # t        $ r Y y w xY wrc   )r�   re   r€   s    r   rB   rB   ·  s    € ðÜˆw�øÜò Ùðúó   ‚ Ž	™c                 ó:   — 	 t        | «       y # t        $ r Y y w xY wrc   )r•   re   r§   s    r   r¤   r¤   ¾  s    € ðÜ��øÜò Ùðúrª   c              #   óþ  K  — ddl }d}| €2|j                  «       } d}t        j                  j	                  | «      } n	 t        j
                  | «       d}|rt        j                  «       }	 | –— |r$t        j                  «       k(  rt        | «       yyy# t        $ r/}|s‚ t        j                  d| ›d|› �t        d¬«       Y d}~Œud}~ww xY w# |r$t        j                  «       k(  rt        | «       w w w xY w­w)	a¢  Return a context manager that creates a temporary directory.

    Arguments:

      path: the directory to create temporarily.  If omitted or None,
        defaults to creating a temporary directory using tempfile.mkdtemp.

      quiet: if False (the default), the context manager raises an exception
        on error.  Otherwise, if the path is specified and cannot be
        created, only a warning is issued.

    r   NFTz5tests may fail, unable to create temporary directory ú: é   rm   )r7   r;   r   r   ÚrealpathÚmkdirr"   rs   rt   ru   Úgetpidr¤   )r   Úquietr7   Údir_createdr�   Úpids         r   Útemp_dirrµ   Å  sï   è ø€ ó Ø€KØ€|Ø×ÑÓ!ˆØˆÜ�w‰w×Ñ Ó%‰ð	8Ü�H‰H�TŒNØˆKñ Ü�i‰i‹kˆðØŠ
ñ ˜3¤"§)¡)£+Ò-Ü�4�Lð .ˆ;øô ò 	8ÙØÜ�M‰Mð 1Ø15°¸¸3¸%ðAä(°Q÷8ò 8ûð	8ûñ ˜3¤"§)¡)£+Ò-Ü�4�Lð .ˆ;üsF   ‚;C=¾B ÁC=Á,C Á0'C=Â	CÂ %C
ÃC=Ã
CÃC=Ã(C:Ã:C=c              #   óœ  K  — t        j                  «       }	 t        j                  t         j                  j	                  | «      «       	 t        j                  «       –— t        j                  |«       y# t
        $ r/}|s‚ t        j                  d| ›d|› �t        d¬«       Y d}~Œ`d}~ww xY w# t        j                  |«       w xY w­w)ag  Return a context manager that changes the current working directory.

    Arguments:

      path: the directory to use as the temporary current working directory.

      quiet: if False (the default), the context manager raises an exception
        on error.  Otherwise, it issues only a warning and keeps the current
        working directory the same.

    zBtests may fail, unable to change the current working directory to r­   r®   rm   N)	r   ÚgetcwdÚchdirr   r¯   r"   rs   rt   ru   )r   r²   Ú	saved_dirr�   s       r   Ú
change_cwdrº   î  s¡   è ø€ ô —	‘	“€Ið4Ü
�‰”—‘×!Ñ! $Ó'Ô(ðÜ�i‰i‹kÒä
�‰�Õøô ò 4ÙØÜ�‰ð &Ø&* X¨R°¨uð6ä$°÷	4ò 	4ûð4ûô 	�‰�Õüs@   ‚C˜2A7 ÁB2 Á!CÁ7	B/Â %B*Â%CÂ*B/Â/CÂ2C	Ã	Cc              #   óœ   K  — t        | |¬«      5 }t        ||¬«      5 }|–— ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w­w)aö  
    Context manager that temporarily creates and changes the CWD.

    The function temporarily changes the current working directory
    after creating a temporary directory in the current directory with
    name *name*.  If *name* is None, the temporary directory is
    created using tempfile.mkdtemp.

    If *quiet* is False (default) and it is not possible to
    create or change the CWD, an error is raised.  If *quiet* is True,
    only a warning is raised and the original CWD is used.

    )r   r²   )r²   N)rµ   rº   )rz   r²   Ú	temp_pathÚcwd_dirs       r   Útemp_cwdr¾   
  sS   è ø€ ô 
�t 5Ô	)ð ¨YÜ˜	¨Ô/ð 	°7ØŠM÷	÷ð ÷	ð 	ú÷ð üs-   ‚A�A ž4£A «	A´=	¹A Á A	ÁAc                 óº   — t        j                  | t         j                  t         j                  z  t         j                  z  «      }t        j
                  |«       y)z>Create an empty file. If the file already exists, truncate it.N)r   r   ÚO_WRONLYÚO_CREATÚO_TRUNCr   )rh   Úfds     r   Úcreate_empty_filerÄ     s3   € ä	�‰�œ2Ÿ;™;¬¯©Ñ3´b·j±jÑ@Ó	A€BÜ‡H�HˆR…Lr0   c              #   óH  K  — t         j                  j                  | «      sJ ‚t         j                  }t	        t         d«      r|t         j
                  z  }t        j                  | |«      }	 |–— t        j                  |«       y# t        j                  |«       w xY w­w)z&Open a file descriptor to a directory.ÚO_DIRECTORYN)r   r   ÚisdirÚO_RDONLYr9   rÆ   r   r   )r   ÚflagsÚdir_fds      r   Úopen_dir_fdrË   $  sq   è ø€ ô �7‰7�=‰=˜ÔÐÐÜ�K‰K€EÜŒr�=Ô!Ø”—‘ÑˆÜ�W‰W�T˜5Ó!€FðØŠä
�‰�ÕøŒ�‰�Õüs   ‚A+B"Á.B Á2B"ÂBÂB"c                 ó,  — ddl }|j                  | ¬«      5 }|j                  }|j                  «       }||k(  r|j	                  «       }	 t
        j                  j                  ||«      cddd«       S # t        $ r Y ddd«       yw xY w# 1 sw Y   yxY w)zODetects if the file system for the specified directory
    is case-insensitive.r   Nr3   F)	r7   ÚNamedTemporaryFilerz   ÚupperÚlowerr   r   Úsamefilere   )Ú	directoryr7   ÚbaseÚ	base_pathÚ	case_paths        r   Úfs_is_case_insensitiverÕ   2  s”   € ó Ø	×	$Ñ	$¨Ð	$Ó	3ð °tØ—I‘Iˆ	Ø—O‘OÓ%ˆ	Ø˜	Ò!Ø!Ÿ™Ó)ˆIð	Ü—7‘7×#Ñ# I¨yÓ9÷ñ øô !ò 	Ø÷ð ð	ú÷ð ús)   —2B
Á
A3Á3	BÁ<B
ÂBÂB
Â
Bc                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚFakePathz0Simple implementation of the path protocol.
    c                 ó   — || _         y rc   r§   )Úselfr   s     r   Ú__init__zFakePath.__init__D  s	   € Øˆ�	r0   c                 ó"   — d| j                   ›d�S )Nz
<FakePath ú>r§   ©rÙ   s    r   Ú__repr__zFakePath.__repr__G  s   € Ø˜DŸI™I˜=¨Ð*Ð*r0   c                 óÎ   — t        | j                  t        «      s4t        | j                  t        «      r&t	        | j                  t        «      r| j                  ‚| j                  S rc   )Ú
isinstancer   ÚBaseExceptionÚtypeÚ
issubclassrÝ   s    r   Ú
__fspath__zFakePath.__fspath__J  s?   € Ü�t—y‘y¤-Ô0Ü�t—y‘y¤$Ô'Ü˜4Ÿ9™9¤mÔ4Ø—)‘)ˆOà—9‘9Ðr0   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rÚ   rÞ   rä   r¦   r0   r   r×   r×   A  s   „ ñòò+ór0   r×   c                  óD  — t         j                  j                  d«      rd} nt         j                  dk(  rd} nd} | �$	 t        j                  | «      }t        |«      dz
  S d}t        t        d«      r	 t        j                  d	«      }d}t         j                  d
k(  rQ	 ddl
}|j                   i }|j                  |j                  |j                  fD ]  }|j                  |d«      ||<   Œ 	 	 d}t#        |«      D ]2  }	 t        j$                  |«      }t        j&                  |«       |dz  }Œ4 	 |�=j                  |j                  |j                  fD ]  }|j                  |||   «       Œ |S # t        $ r Y �Œw xY w# t        $ r Y �Œw xY w# t        t         f$ r Y Œ¶w xY w# t        $ r(}	|	j(                  t(        j*                  k7  r‚ Y d}	~	ŒØd}	~	ww xY w# |�>j                  |j                  |j                  fD ]  }|j                  |||   «       Œ w w xY w)z/Count the number of open file descriptors.
    )ÚlinuxÚfreebsdr	   z/proc/self/fdr   z/dev/fdNr5   rZ   ÚsysconfÚSC_OPEN_MAXÚwin32r   )rŠ   r:   Ú
startswithr   rp   r™   re   r9   rì   r"   ÚmsvcrtÚCrtSetReportModeÚCRT_WARNÚ	CRT_ERRORÚ
CRT_ASSERTr$   r�   ÚrangeÚdupr   ÚerrnoÚEBADF)
Úfd_pathÚnamesÚMAXFDÚ	old_modesrð   Úreport_typeÚcountrÃ   Úfd2rU   s
             r   Úfd_countr   S  sH  € ô ‡|�|×ÑÐAÔBØ!‰Ü	�‰˜Ò	!Ø‰àˆàÐð	Ü—J‘J˜wÓ'ˆEô �u“: ‘>Ð!ð €EÜŒr�9Ôð	Ü—J‘J˜}Ó-ˆEð €IÜ
‡|�|�wÒð	DÛØ×#Ò#ð
 ˆIØ &§¡Ø &× 0Ñ 0Ø &× 1Ñ 1ð 3ò D�ð *0×)@Ñ)@ÀØABó*D�	˜+Ò&ñDðMØˆÜ˜“,ò 
	ˆBð	ô —f‘f˜R“j�ô
 —‘˜”Ø˜‘
‘ñ
	ð Ð Ø &§¡Ø &× 0Ñ 0Ø &× 1Ñ 1ð 3ò M�ð ×'Ñ'¨°Y¸{Ñ5KÕLðMð
 €Løôa !ò 	Úð	ûô ò 	Úð	ûô ¤Ð,ò 	áð	ûô$ ò Ø—7‘7œeŸk™kÒ)Øô *ûðûð Ð Ø &§¡Ø &× 0Ñ 0Ø &× 1Ñ 1ð 3ò M�ð ×'Ñ'¨°Y¸{Ñ5KÕLñMð !úsl   ¾"E4 Á4F ÂF Ã0G ÄF)ÄG Å4	FÆ FÆ	FÆFÆF&Æ%F&Æ)	GÆ2GÇG ÇGÇG ÇAHÚumaskc              #   óž   K  — t        j                  | «      }	 d–— t        j                  |«       y# t        j                  |«       w xY w­w)z8Context manager that temporarily sets the process umask.N)r   r  )r  Úoldmasks     r   Ú
temp_umaskr  —  s5   è ø€ ô —(‘(˜5“/ˆð	Ûä�H‰H�WÕøŒB�H‰H�WÕüs   ‚A™3 �A³A
Á
Ac              #   ó   K  — d–— y­w)z"no-op on platforms without umask()Nr¦   )r  s    r   r  r     s   è ø€ ô 	ùs   ‚c                   óX   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zy)ÚEnvironmentVarGuardz_Class to help protect the environment variable properly.  Can be used as
    a context manager.c                 ó<   — t         j                  | _        i | _        y rc   )r   ÚenvironÚ_environÚ_changedrÝ   s    r   rÚ   zEnvironmentVarGuard.__init__«  s   € ÜŸ
™
ˆŒØˆ�r0   c                 ó    — | j                   |   S rc   )r
  ©rÙ   Úenvvars     r   Ú__getitem__zEnvironmentVarGuard.__getitem__¯  s   € Ø�}‰}˜VÑ$Ð$r0   c                 óŽ   — || j                   vr(| j                  j                  |«      | j                   |<   || j                  |<   y rc   ©r  r
  Úget©rÙ   r  Úvalues      r   Ú__setitem__zEnvironmentVarGuard.__setitem__²  s9   € à˜Ÿ™Ñ&Ø$(§M¡M×$5Ñ$5°fÓ$=ˆD�M‰M˜&Ñ!Ø %ˆ�‰�fÒr0   c                 ó¨   — || j                   vr(| j                  j                  |«      | j                   |<   || j                  v r| j                  |= y y rc   r  r  s     r   Ú__delitem__zEnvironmentVarGuard.__delitem__¸  sH   € à˜Ÿ™Ñ&Ø$(§M¡M×$5Ñ$5°fÓ$=ˆD�M‰M˜&Ñ!Ø�T—]‘]Ñ"Ø—‘˜fÑ%ð #r0   c                 ó6   — | j                   j                  «       S rc   )r
  ÚkeysrÝ   s    r   r  zEnvironmentVarGuard.keys¿  s   € Ø�}‰}×!Ñ!Ó#Ð#r0   c                 ó,   — t        | j                  «      S rc   )Úiterr
  rÝ   s    r   Ú__iter__zEnvironmentVarGuard.__iter__Â  s   € Ü�D—M‘MÓ"Ð"r0   c                 ó,   — t        | j                  «      S rc   )r™   r
  rÝ   s    r   Ú__len__zEnvironmentVarGuard.__len__Å  s   € Ü�4—=‘=Ó!Ð!r0   c                 ó   — || |<   y rc   r¦   r  s      r   ÚsetzEnvironmentVarGuard.setÈ  s   € ØˆˆVŠr0   c                 ó
   — | |= y rc   r¦   r  s     r   ÚunsetzEnvironmentVarGuard.unsetË  s	   € Ø�‰Lr0   c                 ó   — t        | «      S rc   )ÚdictrÝ   s    r   ÚcopyzEnvironmentVarGuard.copyÎ  s   € ä�D‹zÐr0   c                 ó   — | S rc   r¦   rÝ   s    r   Ú	__enter__zEnvironmentVarGuard.__enter__Ò  r¨   r0   c                 óÎ   — | j                   j                  «       D ]3  \  }}|€|| j                  v sŒ| j                  |= Œ%|| j                  |<   Œ5 | j                  t        _        y rc   )r  Úitemsr
  r   r	  )rÙ   Ú
ignore_excÚkÚvs       r   Ú__exit__zEnvironmentVarGuard.__exit__Õ  sZ   € Ø—m‘m×)Ñ)Ó+ò 	%‰FˆQ�ØˆyØ˜Ÿ™Ò%ØŸ™ aÑ(à#$�—‘˜aÒ ð	%ð —]‘]Œ�
r0   N)rå   ræ   rç   rè   rÚ   r  r  r  r  r  r  r   r"  r%  r'  r-  r¦   r0   r   r  r  ¦  sC   „ ñòò%ò&ò&ò$ò#ò"òòòòó#r0   r  r›   T)Úuse_last_errorrl   é   c              #   ó¢  K  — t        t        j                  «      D ]<  }|› d�}t        j	                  |dd«      rŒ t        j                  «       t        k(  sŒ< n t        j                  d«      ‚t        j                  t        || «      s't        j                  t        j                  «       «      ‚	 |–— t        j                  t        t        z  || «      s't        j                  t        j                  «       «      ‚y# t        j                  t        t        z  || «      s't        j                  t        j                  «       «      ‚w xY w­w)z6Temporarily yield a substitute drive for a given path.ú:Nr   zno available logical drive)ÚreversedÚstringÚascii_uppercaser›   ÚQueryDosDeviceWr—   Úget_last_errorÚERROR_FILE_NOT_FOUNDr)   ÚSkipTestÚDefineDosDeviceWÚDDD_NO_BROADCAST_SYSTEMÚWinErrorÚDDD_REMOVE_DEFINITIONÚDDD_EXACT_MATCH_ON_REMOVE)r   ÚcÚdrives      r   Úsubst_driver@  î  s  è ø€ ô œ&×0Ñ0Ó1ò 	BˆAØ�c˜�GˆEÜ×,Ñ,¨U°D¸!Õ<Ü×)Ñ)Ó+Ô/CÓCÙð		Bô ×#Ñ#Ð$@ÓAÐAÜ×(Ñ(Ü'¨°ô6ä—/‘/¤&×"7Ñ"7Ó"9Ó:Ð:ð	?ØŠKä×,Ñ,Ü)Ô,EÑEØ˜4ô!ô —o‘o¤f×&;Ñ&;Ó&=Ó>Ð>ð!ø”8×,Ñ,Ü)Ô,EÑEØ˜4ô!ô —o‘o¤f×&;Ñ&;Ó&=Ó>Ð>ð!üs+   ‚9E¼EÁAEÂ3D Â7A
EÄAEÅEc                 ó,   — t        j                  d«      ‚)Nz#ctypes or kernel32 is not available)r)   r8  r§   s    r   r@  r@  ë  s   € Ü×ÑÐ EÓFÐFr0   )F)NF)ÚtempcwdF)YÚcollections.abcÚcollectionsÚ
contextlibr÷   r   r>   rO   r3  rŠ   rq   r)   rs   r,   r   ÚTESTFN_ASCIIÚformatr±   ÚTESTFN_UNICODEr:   ÚunicodedataÚ	normalizeÚTESTFN_UNENCODABLErz   ÚgetwindowsversionÚencodeÚgetfilesystemencodingr‰   ÚUnicodeEncodeErrorÚdecodeÚUnicodeDecodeErrorÚFS_NONASCIIÚ	characterÚfsdecodeÚfsencodeÚUnicodeErrorr·   ÚSAVEDCWDÚTESTFN_UNDECODABLEÚgetfilesystemencodeerrorsÚTESTFN_NONASCIIr   r   r   r   r/   r8   rI   rK   rN   rV   rX   r[   r\   r_   ra   r   rï   r}   rd   r�   r•   r    rB   r¤   Úcontextmanagerrµ   rº   r¾   rÄ   rË   rÕ   r×   r   r9   r  ÚabcÚMutableMappingr  Ú
MS_WINDOWSr—   ÚWinDLLr›   r7  r<  r=  r:  r$   r@  r�   r¦   r0   r   ú<module>r`     sµ  ðÛ Û Û Û 	Û 	Û Û Û 
Û Û Û å ð €ð ×!Ñ! ,°	°·	±	³Ó<€ð Ð =Ñ=€Ø‡<�<�8Òó Ø*�[×*Ñ*¨5°.ÓA€Nð
 Ð Ø‡7�7ˆd‚?à€s×ÑÓ×'Ñ'¨1Ò,ð *Ð,MÑMÐð	&Ø×%Ñ%Ð&? c×&?Ñ&?Ó&AÔBò â'Ð)B¨×)BÑ)BÕ)DðFô Gð "&Ñà‡\�\Ð9Ñ9ð
à�‰Ð0�s×0Ñ0Ó2Ô3ð 	ð €ð ò +€IðB
ð ˆ2�;‰;�{�r—{‘{ 9Ó-Ó.°)Ò;ØÐð <ð
  ˆÙðW+ð\ ˆ2�9‰9‹;€ð Ð ðò €Dð"	Ø�‰Ð-�C×-Ñ-Ó/Õ0ð%ñ8 Ø" [Ñ0�Oà€OØ	Ò	(˜L€ò
ð €òò(4ð €
òòB4ð €
òò04ð Ð òò84ò4òð ‡<�<×Ñ˜5Ô!ó4òB&ò$ò=ó*ð �i‰i€GØ�X‰X€Fòò0òòð ×Ñò%ó ð%ðP ×Ñòó ðð6 ×Ñòó ðò&ð ×Ññ
ó ð
ò÷ñ ò$@ñF ˆ2ˆwÔØ×Ññó ñð ×Ññó ðô
6#˜+Ÿ/™/×8Ñ8ô 6#ðr"?Ø×ÒÛØ �6—=‘= ¸DÔAˆà ÐØ !ÐØ$%Ð!Ø"#ÑàÐð 	 ð ×Ññ?ó ñ?øðG "ò 	Úð	ûð ò Nà)Ø�o‰oÐ7˜c×7Ñ7Ó9Ð;LÓMñNÓðNûðf ò ÚðûðF ò ð	Ø�K‰KÐ1˜×1Ñ1Ó3Ø5˜×5Ñ5Ó7õ9øà!ò 	Ûð	úà(˜RŸ[™[¨Ó6¸Ñ=ÐÛðûðx 	�^Ð$ò GôGðGús~   Â6 L Ä L Ä/'MÅ5 MË/N8 ÌLÌLÌ)MÍMÍMÍMÍN5Í0NÎN5ÎNÎN5ÎNÎN5Î4N5Î8
OÏO