Ë
    "´˜jÄv  ã                   ó¶  — d Z dZdZdZdZdZdZdZdZdd	l	Z	dd	l
Z
dd	lZdd	lZdd
l­ g d¢Zd„ Z	 ddlmZmZmZ d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zej<                  j                   e_         d„ Zd„ Z  e!e	jD                  d«      rd„ Z#nd„ Z#d„ Z$	 ddl%m&Z& d„ Z'd„ Z(dZ)d	a*d	a+d „ Z,	 dd!l%m-Z. 	 dd#l%m/Z/ d$„ Z0	 dd&l%m1Z1m2Z3 e4fd'„Z5e4fd(„Z6d)d*œd+„Z7d-Z8d7d.„Z9d/„ Z:	 dd0l%m;Z< dd1l%m=Z> dd2l%m?Z@ dd3l%mAZB 	 dd4l%mCZC d5„ ZDy	# e$ r d„ ZY ŒÇw xY w# e$ r d	Z&Y Œ}w xY w# e$ r d"„ Z.Y Œuw xY w# e$ r d%„ Z0Y Œyw xY w# e$ r	 d)d*œd,„Z7Y Œqw xY w# e$ r Y ŒZw xY w# e$ r d6„ ZDY y	w xY w)8z�Common pathname manipulations, WindowsNT/95 version.

Instead of importing this module directly, import os and refer to this
module as os.path.
Ú.ú..Ú\Ú;Ú/z.;C:\binÚnulé    N)Ú*))ÚnormcaseÚisabsÚjoinÚ
splitdriveÚ	splitrootÚsplitÚsplitextÚbasenameÚdirnameÚcommonprefixÚgetsizeÚgetmtimeÚgetatimeÚgetctimeÚislinkÚexistsÚlexistsÚisdirÚisfileÚismountÚ
expanduserÚ
expandvarsÚnormpathÚabspathÚcurdirÚpardirÚsepÚpathsepÚdefpathÚaltsepÚextsepÚdevnullÚrealpathÚsupports_unicode_filenamesÚrelpathÚsamefileÚsameopenfileÚsamestatÚ
commonpathÚ
isjunctionÚALLOW_MISSINGc                 ó&   — t        | t        «      ryy)Nó   \/ú\/)Ú
isinstanceÚbytes©Úpaths    úlib/python3.12/ntpath.pyÚ_get_bothsepsr;   $   s   € Ü�$œÔØàó    )ÚLCMapStringExÚLOCALE_NAME_INVARIANTÚLCMAP_LOWERCASEc                 óX  — t        j                  | «      } | s| S t        | t        «      r]t	        j
                  «       }| j                  |d«      j                  dd«      } t        t        t        | «      } | j                  |d«      S t        t        t        | j                  dd«      «      S )únNormalize case of pathname.

        Makes all characters lowercase and all slashes into backslashes.
        Úsurrogateescaper   r   )ÚosÚfspathr6   r7   ÚsysÚgetfilesystemencodingÚdecodeÚreplaceÚ_LCMapStringExÚ_LOCALE_NAME_INVARIANTÚ_LCMAP_LOWERCASEÚencode)ÚsÚencodings     r:   r
   r
   4   s”   € ô
 �I‰I�a‹LˆÙØˆHÜ�aœÔÜ×0Ñ0Ó2ˆHØ—‘˜Ð#4Ó5×=Ñ=¸cÀ4ÓHˆAÜÔ5Ü/°ó4ˆAà—8‘8˜HÐ&7Ó8Ð8ä!Ô"8Ü"2Ø"#§)¡)¨C°Ó"6ó8ð 8r<   c                 ó  — t        j                  | «      } t        | t        «      rFt        j                  t        j
                  | «      j                  dd«      j                  «       «      S | j                  dd«      j                  «       S )rA   r   r   )rC   rD   r6   r7   ÚfsencodeÚfsdecoderH   Úlower)rM   s    r:   r
   r
   G   sb   € ô
 �I‰I�a‹LˆÜ�aœÔÜ—;‘;œrŸ{™{¨1›~×5Ñ5°c¸4Ó@×FÑFÓHÓIÐIØ�y‰y˜˜dÓ#×)Ñ)Ó+Ð+r<   c                 óÚ   — t        j                  | «      } t        | t        «      rd}d}d}nd}d}d}| dd j	                  ||«      } | j                  |«      s| j                  |d	«      ry
y)zTest whether a path is absoluteó   \ó   /s   :\r   r   z:\Né   é   TF)rC   rD   r6   r7   rH   Ú
startswith)rM   r$   r'   Ú	colon_seps       r:   r   r   X   sn   € ä
�	‰	�!‹€AÜ�!”UÔØˆØˆØ‰	àˆØˆØˆ	Ø	ˆ"ˆ1ˆ�‰�f˜cÓ"€Að 	‡|�|�CÔ˜AŸL™L¨°AÔ6ØØr<   c                 ó8  — t        j                  | «      } t        | t        «      rd}d}d}nd}d}d}	 |s| d d |z    t	        | «      \  }}}t        t         j                  |«      D ]b  }t	        |«      \  }	}
}|
r|	s|s|	}|
}|}Œ|	r/|	|k7  r*|	j                  «       |j                  «       k7  r|	}|
}|}ŒN|	}|r|d   |vr||z   }||z   }Œd |r|s|r|dd  ||z   vr||z   |z   S ||z   |z   S # t        t        t        f$ r t        j                  d	| g|¢­Ž  ‚ w xY w)
NrT   r4   ó   :r   r5   Ú:r   éÿÿÿÿr   )rC   rD   r6   r7   r   ÚmaprR   Ú	TypeErrorÚAttributeErrorÚBytesWarningÚgenericpathÚ_check_arg_types)r9   Úpathsr$   ÚsepsÚcolonÚresult_driveÚresult_rootÚresult_pathÚpÚp_driveÚp_rootÚp_paths               r:   r   r   l   s_  € Ü�9‰9�T‹?€DÜ�$œÔØˆØˆØ‰àˆØˆØˆð!ÙØ��!ˆH�sŠNÜ1:¸4³Ñ.ˆ�k ;Ü”R—Y‘Y Ö&ˆAÜ&/°£lÑ#ˆG�V˜VÙá¡,Ø#*�LØ$�Ø$�ØÙ˜W¨Ò4Ø—=‘=“? l×&8Ñ&8Ó&:Ò:à#*�LØ"(�KØ"(�KØà&�á˜{¨2™°dÑ:Ø)¨CÑ/�Ø%¨Ñ.‰Kð+ 'ñ. ¡Ù˜\¨"¨#Ð.°e¸d±lÑBØ #Ñ%¨Ñ3Ð3Ø˜kÑ)¨KÑ7Ð7øÜ”~¤|Ð4ò Ü×$Ñ$ V¨TÐ:°EÓ:Øðús   ´B/C, Ã$C, Ã,-Dc                 ó.   — t        | «      \  }}}|||z   fS )aÚ  Split a pathname into drive/UNC sharepoint and relative path specifiers.
    Returns a 2-tuple (drive_or_unc, path); either part may be empty.

    If you assign
        result = splitdrive(p)
    It is always true that:
        result[0] + result[1] == p

    If the path contained a drive letter, drive_or_unc will contain everything
    up to and including the colon.  e.g. splitdrive("c:/dir") returns ("c:", "/dir")

    If the path contained a UNC path, the drive_or_unc will contain the host name
    and share up to but not including the fourth directory separator character.
    e.g. splitdrive("//host/computer/dir") returns ("//host/computer", "/dir")

    Paths cannot contain both a drive letter and a UNC path.

    )r   )rj   ÚdriveÚrootÚtails       r:   r   r   �   s#   € ô& " !›Ñ€Eˆ4�Ø�$˜‘+ÐÐr<   c                 óþ  — t        j                  | «      } t        | t        «      rd}d}d}d}d}n
d}d}d}d	}d
}| j	                  ||«      }|dd |k(  r||dd |k(  ri|dd j                  «       |k(  rdnd}|j                  ||«      }|dk(  r| ||fS |j                  ||dz   «      }	|	dk(  r| ||fS | d|	 | |	|	dz    | |	dz   d fS || dd | dd fS |dd |k(  r!|dd |k(  r| dd | dd | dd fS | dd || dd fS ||| fS )aþ  Split a pathname into drive, root and tail. The drive is defined
    exactly as in splitdrive(). On Windows, the root may be a single path
    separator or an empty string. The tail contains anything after the root.
    For example:

        splitroot('//server/share/') == ('//server/share', '/', '')
        splitroot('C:/Users/Barney') == ('C:', '/', 'Users/Barney')
        splitroot('C:///spam///ham') == ('C:', '/', '//spam///ham')
        splitroot('Windows/notepad') == ('', '', 'Windows/notepad')
    rT   rU   r[   ó   \\?\UNC\r<   r   r   r\   ú\\?\UNC\Ú NrW   é   é   r]   rV   )rC   rD   r6   r7   rH   ÚupperÚfind)
rj   r$   r'   rf   Ú
unc_prefixÚemptyÚnormpÚstartÚindexÚindex2s
             r:   r   r   ´   s‡  € ô 	�	‰	�!‹€AÜ�!”UÔØˆØˆØˆØ$ˆ
Ø‰àˆØˆØˆØ#ˆ
ØˆØ�I‰I�f˜cÓ"€EØˆRˆa€y�CÒØ��1ˆ:˜Òð ˜r ˜Ÿ™Ó*¨jÒ8‘A¸aˆEØ—J‘J˜s EÓ*ˆEØ˜Š{Ø˜% �Ð&Ø—Z‘Z  U¨Q¡YÓ/ˆFØ˜Š|Ø˜% �Ð&Ø�W�f�:˜q ¨°©
Ð3°Q°vÀ±z°{°^ÐCÐCð ˜!˜B˜Q˜%  1 2 Ð&Ð&Ø	ˆq�ˆ�uÒ	Ø��1ˆ:˜Òà�R�a�5˜!˜A˜a˜& ! A B %Ð'Ð'ð �R�a�5˜%  1 2 Ð&Ð&ð �e˜QˆÐr<   c                 óø   — t        j                  | «      } t        | «      }t        | «      \  }}} t	        | «      }|r| |dz
     |vr|dz  }|r| |dz
     |vrŒ| d| | |d }}||z   |j                  |«      z   |fS )z~Split a pathname.

    Return tuple (head, tail) where tail is everything after the final slash.
    Either part may be empty.rW   N)rC   rD   r;   r   ÚlenÚrstrip)rj   re   ÚdÚrÚiÚheadrq   s          r:   r   r   í   s”   € ô
 	�	‰	�!‹€AÜ˜Ó€DÜ˜‹l�G€A€qˆ!äˆA‹€AÙ
��!�A‘#‘˜dÑ"Ø	ˆQ‰ˆñ ��!�A‘#‘˜dÒ"à�2�A�˜˜!˜"˜ˆ$€DØˆq‰5�4—;‘;˜tÓ$Ñ$ dÐ*Ð*r<   c                 ó¬   — t        j                  | «      } t        | t        «      rt	        j
                  | ddd«      S t	        j
                  | ddd«      S )NrT   rU   ó   .r   r   r   )rC   rD   r6   r7   rb   Ú	_splitext©rj   s    r:   r   r     sG   € Ü
�	‰	�!‹€AÜ�!”UÔÜ×$Ñ$ Q¨¨t°TÓ:Ð:ä×$Ñ$ Q¨¨c°3Ó7Ð7r<   c                 ó   — t        | «      d   S )z)Returns the final component of a pathnamerW   ©r   rŠ   s    r:   r   r     ó   € ä�‹8�A‰;Ðr<   c                 ó   — t        | «      d   S )z-Returns the directory component of a pathnamer   rŒ   rŠ   s    r:   r   r     r�   r<   Úst_reparse_tagc                 ó®   — 	 t        j                  | «      }t        |j                  t        j                  k(  «      S # t        t        t        f$ r Y yw xY w©z!Test whether a path is a junctionF)	rC   ÚlstatÚOSErrorÚ
ValueErrorr`   Úboolr�   ÚstatÚIO_REPARSE_TAG_MOUNT_POINT©r9   Ústs     r:   r1   r1     sM   € ð	Ü—‘˜$“ˆBô �B×%Ñ%¬×)HÑ)HÑHÓIÐIøô œ¤^Ð4ò 	Ùð	ús   ‚= ½AÁAc                 ó.   — t        j                  | «       yr‘   )rC   rD   r8   s    r:   r1   r1   $  s   € ä
�	‰	�$ŒØr<   c                 óZ   — 	 t        j                  | «      }y# t        t        f$ r Y yw xY w)zCTest whether a path exists.  Returns True for broken symbolic linksFT)rC   r’   r“   r”   r˜   s     r:   r   r   ,  s2   € ðÜ�X‰X�d‹^ˆð øô ”ZÐ ò Ùðús   ‚ ˜*©*)Ú_getvolumepathnamec                 ó>  — t        j                  | «      } t        | «      }t        | «      } t	        | «      \  }}}|r
|d   |v r| S |r|syt
        rL| j                  |«      }t        | «      j                  |«      }|j                  «       |j                  «       k(  S y)zaTest whether a path is a mount point (a drive root, the root of a
    share, or a mounted volume)r   TF)rC   rD   r;   r!   r   rœ   r‚   Úcasefold)r9   re   ro   rp   ÚrestÚxÚys          r:   r   r   B  s‘   € ô �9‰9�T‹?€DÜ˜Ó€DÜ�4‹=€DÜ! $›Ñ€Eˆ4�Ù��q‘˜TÑ!ØˆxˆÙ‘DØåØ�K‰K˜ÓˆÜ˜dÓ#×*Ñ*¨4Ó0ˆØ�z‰z‹|˜qŸz™z›|Ñ+Ð+àr<   c                 ó8  — t        j                  | «      } t        | t        «      rd}nd}| j	                  |«      s| S dt        | «      }}||k  r+| |   t        | «      vr|dz  }||k  r| |   t        | «      vrŒdt         j                  v rt         j                  d   }nEdt         j                  vr| S 	 t         j                  d   }t        |t         j                  d   «      }|dk7  rs| d| }t        |t        «      rt        j                  |«      }t         j                  j                  d«      }||k7  r%|t        |«      k7  r| S t        t        |«      |«      }t        | t        «      rt        j                  |«      }|| |d	 z   S # t        $ r d}Y ŒÏw xY w)
zLExpand ~ and ~user constructs.

    If user or $HOME is unknown, do nothing.ó   ~Ú~rW   ÚUSERPROFILEÚHOMEPATHÚ	HOMEDRIVEru   ÚUSERNAMEN)rC   rD   r6   r7   rX   r�   r;   ÚenvironÚKeyErrorr   rQ   Úgetr   r   rP   )r9   Útilder…   ÚnÚuserhomero   Útarget_userÚcurrent_users           r:   r   r   _  s{  € ô �9‰9�T‹?€DÜ�$œÔØ‰àˆØ�?‰?˜5Ô!ØˆØŒc�$‹i€q€AØ
ˆaŠ%�D˜‘G¤=°Ó#6Ñ6Ø	ˆQ‰ˆð ˆaŠ%�D˜‘G¤=°Ó#6Ò6ð œŸ
™
Ñ"Ü—:‘:˜mÑ,‰Øœ2Ÿ:™:Ñ%Øˆð	Ü—J‘J˜{Ñ+ˆEô ˜œrŸz™z¨*Ñ5Ó6ˆàˆA‚vØ˜1˜Q�iˆÜ�k¤5Ô)ÜŸ+™+ kÓ2ˆKÜ—z‘z—~‘~ jÓ1ˆà˜,Ò&ð œx¨Ó1Ò1Ø�ÜœG HÓ-¨{Ó;ˆHä�$œÔÜ—;‘;˜xÓ(ˆà�d˜1˜2�hÑÐøô/ ò 	ØŠEð	ús   Â6F ÆFÆFz.'[^']*'?|%(%|[^%]*%?)|\$(\$|[-\w]+|\{[^}]*\}?)c                 ó
  ‡‡‡‡‡— t        j                  | «      } t        | t        «      rld| vrd| vr| S t        s<ddl}|j                  t        j                  «       |j                  «      j                  at        }dŠdŠdŠdŠt        t         dd«      Šn\d| vrd	| vr| S t        s.ddl}|j                  t        |j                  «      j                  at        }d	Šd
ŠdŠdŠt         j                  Šˆˆˆˆˆfd„} ||| «      S )zfExpand shell variables of the forms $var, ${var} and %var%.

    Unknown variables are left unchanged.ó   $ó   %r   Nó   {ó   }ÚenvironbÚ$Ú%Ú{Ú}c                 ó”  •— | j                   }|€| d   S | |   }|dk(  r#|‰k(  r|S |j                  ‰«      s| d   S |d d }n3|‰k(  r|S |j                  ‰«      r|j                  ‰«      s| d   S |dd }	 ‰€9t        j                  t        j
                  t        j                  |«         «      S ‰|   S # t        $ r | d   cY S w xY w)Nr   rW   r]   )Ú	lastindexÚendswithrX   rC   rP   r©   rQ   rª   )Úmr¼   ÚnameÚbraceÚdollarr©   ÚpercentÚrbraces      €€€€€r:   Úreplzexpandvars.<locals>.repl¿  sÜ   ø€ Ø—K‘Kˆ	ØÐØ�Q‘4ˆKØ�‰|ˆØ˜Š>Ø�wŠØ�Ø—=‘= Ô)Ø˜‘t�Ø˜˜�9‰Dà�vŠ~Ø�Ø�‰˜uÔ%Ø—}‘} VÔ,Ø˜Q™4�KØ˜A˜b�z�ð	ØˆÜ—{‘{¤2§:¡:¬b¯k©k¸$Ó.?Ñ#@ÓAÐAà˜t‘}Ð$øÜò 	Ø�Q‘4ŠKð	ús   Á6:B6 Â1B6 Â6CÃC)rC   rD   r6   r7   Ú_varsubbÚreÚcompileÚ_varpatternrL   ÚASCIIÚsubÚgetattrÚ_varsubr©   )	r9   rÆ   rÊ   rÄ   rÀ   rÁ   r©   rÂ   rÃ   s	       @@@@@r:   r   r      sì   ü€ ô �9‰9�T‹?€Dä�$œÔØ�tÑ ¨DÑ 0ØˆKÝÛØ—z‘z¤+×"4Ñ"4Ó"6¸¿¹ÓA×EÑEˆHÜˆØˆØˆØˆØˆÜœ"˜j¨$Ó/‰à�d‰?˜s¨$™ØˆKÝÛØ—j‘j¤¨b¯h©hÓ7×;Ñ;ˆGÜˆØˆØˆØˆØˆÜ—*‘*ˆ÷ð ñ6 ˆt�T‹?Ðr<   )Ú_path_normpathc                 ó  — t        j                  | «      } t        | t        «      r	d}d}d}d}nd}d}d}d}| j	                  ||«      } t        | «      \  }}} ||z   }| j                  |«      }d	}	|	t        |«      k  r_||	   r||	   |k(  r||	= n?||	   |k(  r2|	d	kD  r||	d
z
     |k7  r||	d
z
  |	d
z   …= |	d
z  }	n|	d	k(  r|r||	= n|	d
z  }	n|	d
z  }	|	t        |«      k  rŒ_|s|s|j                  |«       ||j                  |«      z   S )z0Normalize path, eliminating double slashes, etc.rT   rU   rˆ   ó   ..r   r   r   r   r   rW   )
rC   rD   r6   r7   rH   r   r   r�   Úappendr   )
r9   r$   r'   r"   r#   ro   rp   ÚprefixÚcompsr…   s
             r:   r    r    ä  s3  € ä�y‰y˜‹ˆÜ�dœEÔ"ØˆCØˆFØˆFØ‰FàˆCØˆFØˆFØˆFØ�|‰|˜F CÓ(ˆÜ% d›OÑˆˆt�TØ˜‘ˆØ—
‘
˜3“ˆØˆØ”#�e“*ŠnØ˜’8˜u Q™x¨6Ò1Ø˜!‘HØ�q‘˜VÒ#Ø�q’5˜U 1 Q¡3™Z¨6Ò1Ø˜a ™c ! A¡#˜g˜Ø˜‘F‘AØ˜!’V¡Ø˜a™à˜‘F‘Aà�Q‘�ð ”#�e“*‹nñ ™eØ�L‰L˜Ô Ø˜Ÿ™ ›Ñ'Ð'r<   )Ú_getfullpathnamec                 óô  — 	 t        t        | «      «      S # t        t        f$ r Y nw xY wt	        j
                  | «      } t        | «      s¤t        | t        «      rd}t        j                  }nd}t        j                  }t        | «      \  }}} |s|rK	 t        t        ||z   «      | «      } t        | «      S # t        t        f$ r ||z   | z   } Y t        | «      S w xY wt         |«       | «      } t        | «      S )ú&Return the absolute version of a path.rT   r   )rÓ   r    r“   r”   rC   rD   r   r6   r7   ÚgetcwdbÚgetcwdr   r   )r9   r$   r×   ro   rp   s        r:   r!   r!     sï   € ð	Ü#¤H¨T£NÓ3Ð3øÜœÐ$ò 	áð	úô �y‰y˜‹ˆÜ�TŒ{Ü˜$¤Ô&Ø�ÜŸ™‘à�ÜŸ™�Ü )¨$£ÑˆE�4˜á™ð.ÜÔ 0°¸±Ó >ÀÓE�Dô ˜‹~Ðøô  ¤Ð,ò .à  3™;¨Ñ-‘Dô ˜‹~Ðð.úô ™F›H dÓ+�Ü˜‹~Ðs   ‚ –(§(ÂB7 Â7CÃCc                 óâ   — t        j                  | «      } t        | «      sEt        | t        «      rt        j
                  «       }nt        j                  «       }t        || «      } t        | «      S )rÕ   )	rC   rD   r   r6   r7   rÖ   r×   r   r    )r9   Úcwds     r:   r!   r!     sK   € ä�y‰y˜‹ˆÜ�TŒ{Ü˜$¤Ô&Ü—j‘j“l‘ä—i‘i“k�Ü˜˜T“?ˆDÜ˜‹~Ðr<   )Ú_getfinalpathnameÚreadlinkc                 óp  — d}t        «       }t        | «      |vro|j                  t        | «      «       	 | }t        | «      } t	        | «      s.t        |«      s|} 	 | S t        t        t        |«      | «      «      } t        | «      |vrŒo| S # |$ r}|j                  |v rY d }~| S ‚ d }~wt        $ r Y | S w xY w)N)rW   rv   rV   é   é   é    é2   éC   éW   i&  i(  i)  )Úsetr
   ÚaddÚ_nt_readlinkr   r   r    r   r   Úwinerrorr”   )r9   Úignored_errorÚallowed_winerrorÚseenÚold_pathÚexs         r:   Ú_readlink_deeprì   <  sÏ   € ð LÐä‹uˆÜ�t‹n DÑ(Ø�H‰H”X˜d“^Ô$ðØ�Ü# DÓ)�ô ˜T”{ô " (Ô+Ø'˜Øð ˆô $¤D¬°Ó):¸DÓ$AÓB�Dô �t‹n DÒ(ð, ˆøð !ò Ø—;‘;Ð"2Ñ2Ûð
 ˆð	 ûÜò àØˆðús)   µ%B ÁB ÂB5ÂB%Â$B%Â%B5Â4B5c                 óZ  — d}| d d }| r	 t        | «      } |rt        | |«      S | S |S # |$ ry}|j                  |vr‚ 	 t        | |¬«      }|| k7  r|rt        ||«      n|cY d }~S n# |$ r Y nw xY wt	        | «      \  } }| r|s
| |z   cY d }~S |rt        ||«      n|}Y d }~nd }~ww xY w| rŒ¢Œ‡)N)rW   rv   rV   rÝ   rÞ   rß   rà   é5   éA   rá   râ   é{   é¡   i€  i�  r   ©rç   )rÚ   r   ræ   rì   r   )r9   rç   rè   rq   rë   Únew_pathr¿   s          r:   Ú_getfinalpathname_nonstrictrô   f  sä   € ð$ XÐð �B�QˆxˆÙð:Ü(¨Ó.�Ù+/”t˜D $Ó'Ð9°TÐ9ð, ˆøð+ !ò :Ø—;‘;Ð&6Ñ6Øð
ô  .¨dØ<Iô K�Hà 4Ò'Ù7;œt H¨dÔ3ÀÕIð (øà$ò áðúô # 4›[‘
��dñ ¡Ø $™;Õ&Ù+/”t˜D $Ô'°T•ûð):úò	 øsM   ‹( ¤( ¨B&­B!½!A%ÁB&Á$B!Á%A-Á*B!Á,A-Á-B!ÂB&ÂB!Â!B&F)Ústrictc                óÀ  — t        | «      } t        | t        «      rId}d}d}t        j                  «       }t        | «      t        t        j                  t        «      «      k(  r7yd}d}d}t        j                  «       }t        | «      t        t        «      k(  ry| j                  |«      }|t        u r	t        }d	}n|rd
}nt        }|st        | «      st        || «      } 	 t        | «      } d}|sU| j                  |«      rD| j                  |«      r|| t)        |«      d  z   }
n| t)        |«      d  }
	 t        |
«      | k(  r|
} | S | S # t         $ r,}	|rt        t#        |	«      «      d ‚t        | «      } Y d }	~	Œ‰d }	~	w|$ r#}	|	j$                  }t'        | |¬«      } Y d }	~	Œ¯d }	~	ww xY w# t         $ r}	Y d }	~	| S d }	~	wt        $ r}	|	j$                  k(  r|
} Y d }	~	| S d }	~	ww xY w)Ns   \\?\rs   s   \\s   \\.\NULz\\?\rt   z\\z\\.\NULT© r   rò   )r    r6   r7   rC   rÖ   r
   rP   r)   r×   rX   r2   ÚFileNotFoundErrorr“   r   r   rÚ   r”   Ústrræ   rô   r�   )r9   rõ   rÑ   rz   Únew_unc_prefixrÙ   Ú
had_prefixrç   Úinitial_winerrorrë   Úspaths              r:   r*   r*   ˜  sÐ  € Ü˜‹~ˆÜ�dœEÔ"ØˆFØ(ˆJØ$ˆNÜ—*‘*“,ˆCä˜‹~¤¬"¯+©+´gÓ*>Ó!?Ò?Ø$àˆFØ'ˆJØ#ˆNÜ—)‘)“+ˆCä˜‹~¤¬'Ó!2Ò2Ø#Ø—_‘_ VÓ,ˆ
à”]Ñ"Ü-ˆMØ‰FÙØ‰Mä#ˆMá¤%¨¤+Ü˜˜T“?ˆDð	LÜ$ TÓ*ˆDØ Ðñ  ˜dŸo™o¨fÔ5ð �‰˜zÔ*Ø&¨¬c°*«oÐ.>Ð)?Ñ?‘àœS ›[˜\Ð*�ð!Ü$ UÓ+¨tÒ3Ø �Dð ˆˆtˆøôG ò 	"ñ
 Üœc "›gÓ&¨DÐ0Ü˜D“>�DûØò 	LØ!Ÿ{™{ÐÜ.¨tØ=JôL�Dûð	Lûô$ ò ó ð ˆûô ò !ð —;‘;Ð"2Ò2Ø �DûØˆûð!úsB   Ã"E Ä4F& Å	F#Å"E8Å8F#Æ FÆF#Æ&	GÆ5GÇGÇGc                ó   — t        | «      S ©N)r!   )r9   rõ   s     r:   r*   r*   9  s   € Ü�t‹}Ðr<   Tc                 óL  — t        j                  | «      } t        | t        «      rd}d}d}nd}d}d}|€|}| st	        d«      ‚t        j                  |«      }	 t        t        |«      «      }t        t        | «      «      }t        |«      \  }}}	t        |«      \  }
}}t        |«      t        |
«      k7  rt	        d	|
›d
|›�«      ‚|	j                  |«      D �cg c]  }|sŒ|‘Œ	 }}|j                  |«      D �cg c]  }|sŒ|‘Œ	 }}d}t        ||«      D ]#  \  }}t        |«      t        |«      k7  r n|dz  }Œ% |gt        |«      |z
  z  ||d z   }|s|S t        |Ž S c c}w c c}w # t        t        t        t        t         f$ r t#        j$                  d| |«       ‚ w xY w)z#Return a relative version of a pathrT   rˆ   rÏ   r   r   r   Nzno path specifiedzpath is on mount z, start on mount r   rW   r,   )rC   rD   r6   r7   r”   r!   r    r   r
   r   Úzipr�   r   r_   r`   ra   ÚDeprecationWarningrb   rc   )r9   r}   r$   r"   r#   Ú	start_absÚpath_absÚstart_driveÚ_Ú
start_restÚ
path_driveÚ	path_restr    Ú
start_listÚ	path_listr…   Úe1Úe2Úrel_lists                      r:   r,   r,   â  s´  € ä�9‰9�T‹?€DÜ�$œÔØˆØˆØ‰àˆØˆØˆà€}ØˆáÜÐ,Ó-Ð-ä�I‰I�eÓ€EðÜœH U›OÓ,ˆ	Üœ8 D›>Ó*ˆÜ%.¨yÓ%9Ñ"ˆ�Q˜
Ü#,¨XÓ#6Ñ ˆ
�A�yÜ�KÓ ¤H¨ZÓ$8Ò8ÝÚ™Kð)ó *ð *ð ",×!1Ñ!1°#Ô!6Ó<Ñ!6˜Aº!’aÐ!6ˆ
Ð<Ø )§¡°Ô 4Ó:Ñ 4˜1º’QÐ 4ˆ	Ð:àˆÜ˜* iÖ0‰FˆB�Ü˜‹|œx¨›|Ò+ÙØ�‰F‰Að 1ð
 �8œs :›¨qÑ0Ñ1°I¸a¸b°MÑAˆÙØˆMÜ�XˆÐùò =ùÚ:øô ”z¤>´<ÔASÐTò Ü×$Ñ$ Y°°eÔ<Øðús>   ÁBE, ÃE"Ã#E"Ã'E, Ã<E'ÄE'ÄAE, ÅE, Å"
E, Å,7F#c           
      ó`  — | st        d«      ‚t        t        t        j                  | «      «      } t        | d   t        «      rd}d}d}nd}d}d}	 | D �cg c]+  }t        |j                  ||«      j                  «       «      ‘Œ- }}|D ���cg c]  \  }}}|j                  |«      ‘Œ }}}}t        |D ���ch c]  \  }}}|’Œ
 c}}}«      d	k7  rt        d
«      ‚t        |D ���ch c]  \  }}}|’Œ
 c}}}«      d	k7  rt        d«      ‚t        | d   j                  ||«      «      \  }	}
}|j                  |«      }|D �cg c]  }|sŒ||k7  sŒ|‘Œ }}|D ��cg c]  }|D �cg c]  }|sŒ||k7  sŒ|‘Œ c}‘Œ }}}t        |«      }t        |«      }t        |«      D ]  \  }}|||   k7  sŒ|d| } n |dt        |«       }|	|
z   |j                  |«      z   S c c}w c c}}}w c c}}}w c c}}}w c c}w c c}w c c}}w # t         t"        f$ r t%        j&                  dg| ¢­Ž  ‚ w xY w)zDGiven a sequence of path names, returns the longest common sub-path.z%commonpath() arg is an empty sequencer   rT   rU   rˆ   r   r   r   rW   z%Can't mix absolute and relative pathszPaths don't have the same driveNr0   )r”   Útupler^   rC   rD   r6   r7   r   rH   rR   r   r�   ÚminÚmaxÚ	enumerater   r_   r`   rb   rc   )rd   r$   r'   r"   rj   Údrivesplitsrƒ   r„   Úsplit_pathsro   rp   r9   ÚcommonÚcrM   Ús1Ús2r…   s                     r:   r0   r0     s-  € ñ ÜÐ@ÓAÐAä”#”b—i‘i Ó'Ó(€EÜ�%˜‘(œEÔ"ØˆØˆØ‰àˆØˆØˆðÙJOÓPÉ%ÀQ”y §¡¨6°3Ó!7×!=Ñ!=Ó!?Õ@È%ˆÐPÙ3>Õ?±;©¨¨1¨a�q—w‘w˜s•|°;ˆÒ?ä¡Õ-¡‘g�a˜˜A’ Ó-Ó.°!Ò3ÜÐDÓEÐEô
 ¡Õ-¡‘g�a˜˜A’ Ó-Ó.°!Ò3ÜÐ>Ó?Ð?ä% e¨A¡h×&6Ñ&6°v¸sÓ&CÓDÑˆˆt�TØ—‘˜C“ˆÙ#Ó9™V˜¢q¨Q°&«[’!˜VˆÐ9áDOÔPÁK¸q¡1Ó:¡1˜aª¨a°6«kš 1Ó:ÀKˆÑPÜ�ÓˆÜ�ÓˆÜ˜b–M‰DˆAˆqØ�B�q‘E‹zØ  ˜�Ùð "ð
 ˜HœS ›WÐ%ˆFà�t‰|˜cŸh™h vÓ.Ñ.Ð.ùò5 QùÜ?ùä-ùô .ùò
 :ùâ:ùÓPøô ”~Ð&ò Ü×$Ñ$ \Ð:°EÓ:Øðús‘   ÁH Á0GÂH ÂG!Â*H Â9G(Ã"H Ã(G/Ã5AH ÅG6ÅG6ÅG6ÅH Å	H Å%G;Å-G;Å3G;Å7H Å<2H Æ/,H ÇH Ç;H È H È'H-)Ú_path_isdir)Ú_path_isfile)Ú_path_islink)Ú_path_exists)Ú_path_isdevdrivec                 óJ   — 	 t        t        | «      «      S # t        $ r Y yw xY w©z@Determines whether the specified path is on a Windows Dev Drive.F)r  r!   r“   r8   s    r:   Ú
isdevdriver!  `  s(   € ð	Ü#¤G¨D£MÓ2Ð2øÜò 	Ùð	ús   ‚ –	"¡"c                  ó   — yr   r÷   r8   s    r:   r!  r!  [  s   € ð r<   rÿ   )EÚ__doc__r"   r#   r(   r$   r%   r'   r&   r)   rC   rE   r–   rb   Ú__all__r;   Ú_winapir=   rI   r>   rJ   r?   rK   r
   ÚImportErrorr   r   r   r   r   r   r‰   r   r   ÚhasattrÚstat_resultr1   r   Úntrœ   r   r   rÈ   rÌ   rÅ   r   rÍ   r    rÓ   r!   rÚ   rÛ   rå   r“   rì   rô   r*   r+   r,   r0   r  r   r  r   r  r   r  r   r  r!  r÷   r<   r:   Ú<module>r*     s  ðñð 
€Ø	€Ø	€Ø
€Ø
€Ø	€Ø
€Ø
€ã 	Û 
Û Û Ü ò€òð!,÷-ñ -ò
8òHò(+òbò.1òr+ò*8ð ×(Ñ(×0Ñ0€Ô ò
òñ ˆ2�>‰>Ð+Ô,óJòòð$Ý%òò:-ðz @€Ø
€Ø€ò:ð@&(Ý-ðR)Ý#òð6gß>ð ,3ó (ðT 9@ó 0ðd "'ô DðP "Ð ó+òp.ðb
	õ (Ý)Ý)Ý)ðÝ#óøðu ò 	,ô,ð	,ûðt ò ØÒðûðF ò #(ô"(ð#(ûðT ò 
ô	ð
ûðT ò à!&ö ðûðx ò 	áð	ûð ò ôðús}   °C: ÂD Â$D Â+D# Â5D1 ÃE Ã0E Ã:DÄDÄDÄDÄD ÄD Ä#D.Ä-D.Ä1D?Ä>D?ÅE
Å	E
ÅEÅE