
    6h_                       % S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SK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Jr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JrJ r J!r!  \RD                  " S5      r#\!RH                  r%\!RL                  r&\!RN                  r'\!RP                  r(\!RR                  r)\!RT                  r*\!RV                  r+\!RX                  r,\!RZ                  r-\!R\                  r.\!R^                  r/\R`                  Rb                  r1\!Rd                  r2\!Rf                  r3\
Rh                  (       a  SES jr1S	r5S
\6S'    " S S5      r7 " S S5      r8SFS jr9\#Rt                  r:SGS jr; " S S\ Rx                  5      r=SHS jr>SIS jr?          SJS jr@SKS jrA  SL         SMS jjrBSNS jrCSNS jrDSOS jrESPS jrFSPS jrGSPS jrHSPS  jrI\R                  " S!5      rKS"\6S#'   \R                  " S$5      rLS%\6S&'   SQS' jrM\R                  R                  rPS
\6S('   \R                  rRSRS) jrSSSS* jrTSqUS+\6S,'   SqVSTS- jrWSTS. jrXSUS/ jrYSVS0 jrZSWS1 jr[\R                  \R                  1r^SXS2 jr_SYSZS3 jjr`SYS[S4 jjraSPS5 jrbS\S6 jrcS]S7 jrdS^S8 jreS_S9 jrfS`S: jrg " S; S<5      rh  Sa       SbS= jjriS>rjS\6S?'   ScS@ jrkScSA jrlSdSB jrmSGSC jrnSeSD jrog)f    )annotationsN)AnyAnyStrBinaryIOIterableIteratorListMappingNoReturnOptionalPatternSequenceTupleUnion   )_)encodingerrorpolicypycompattypelibwin32osutilc                    [         eNNotImplementedError)ps    3/usr/lib/python3/dist-packages/mercurial/windows.pysplitr    C   s    !!       intumaskc                  l    \ rS rSrSrSrSrSrS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rSrg)mixedfilemodewrapperJ   a	  Wraps a file handle when it is opened in read/write mode.

fopen() and fdopen() on Windows have a specific-to-Windows requirement
that files opened with mode r+, w+, or a+ make a call to a file positioning
function when switching between reads and writes. Without this extra call,
Python will raise a not very intuitive "IOError: [Errno 0] Error."

This class wraps posixfile instances when the file is opened in read/write
mode and automatically adds checks or inserts appropriate file positioning
calls when necessary.
r   r      c                `    [         R                  U SU5        [         R                  U SS5        g )N_fp_lastopr   )object__setattr__selffps     r   __init__mixedfilemodewrapper.__init__[   s&    4+4A.r!   c                :    U R                   R                  5         U $ r   r*   	__enter__r/   s    r   r5   mixedfilemodewrapper.__enter___   s    r!   c                <    U R                   R                  XU5        g r   r*   __exit__)r/   exc_typeexc_valexc_tbs       r   r:   mixedfilemodewrapper.__exit__c   s    (V4r!   c                .    [        U R                  U5      $ r   getattrr*   r/   names     r   __getattr__ mixedfilemodewrapper.__getattr__f       txx&&r!   c                8    U R                   R                  X5      $ r   )r*   r-   )r/   rC   values      r   r-    mixedfilemodewrapper.__setattr__i   s    xx##D00r!   c                X    U R                   R                  S[        R                  5        g )Nr   )r*   seekosSEEK_CURr6   s    r   	_noopseekmixedfilemodewrapper._noopseekl   s    a%r!   c                |    [         R                  U SU R                  5        U R                  R                  " U0 UD6$ Nr+   )r,   r-   OPNONEr*   rK   r/   argskwargss      r   rK   mixedfilemodewrapper.seeko   s0    4DKK8xx}}d-f--r!   c                    U R                   U R                  :X  a  U R                  5         [        R	                  U SU R
                  5        U R                  R                  U5      $ rQ   )r+   OPREADrN   r,   r-   OPWRITEr*   write)r/   ds     r   rZ   mixedfilemodewrapper.writes   sE    <<4;;&NN4DLL9xx~~a  r!   c                    U R                   U R                  :X  a  U R                  5         [        R	                  U SU R
                  5        U R                  R                  " U0 UD6$ rQ   )r+   rX   
_noopeseekr,   r-   rY   r*   
writelinesrS   s      r   r_   mixedfilemodewrapper.writelinesz   sL    <<4;;&OO4DLL9xx""D3F33r!   c                    U R                   U R                  :X  a  U R                  5         [        R	                  U SU R
                  5        U R                  R                  " U0 UD6$ rQ   )r+   rY   rN   r,   r-   rX   r*   readrS   s      r   rb   mixedfilemodewrapper.read   sJ    <<4<<'NN4DKK8xx}}d-f--r!   c                    U R                   U R                  :X  a  U R                  5         [        R	                  U SU R
                  5        U R                  R                  " U0 UD6$ rQ   )r+   rY   rN   r,   r-   rX   r*   readlinerS   s      r   re   mixedfilemodewrapper.readline   sL    <<4<<'NN4DKK8xx  $1&11r!   c                    U R                   U R                  :X  a  U R                  5         [        R	                  U SU R
                  5        U R                  R                  " U0 UD6$ rQ   )r+   rY   rN   r,   r-   rX   r*   	readlinesrS   s      r   rh   mixedfilemodewrapper.readlines   sL    <<4<<'NN4DKK8xx!!42622r!    N)__name__
__module____qualname____firstlineno____doc__rR   rX   rY   r1   r5   r:   rD   r-   rN   rK   rZ   r_   rb   re   rh   __static_attributes__rj   r!   r   r&   r&   J   sT    
 FFG/5'1&.!4.23r!   r&   c                  6    \ rS rSrSrS rS rS rS rS r	Sr
g	)
fdproxy   z]Wraps osutil.posixfile() to override the name attribute to reflect the
underlying file name.
c                    Xl         X l        g r   )rC   r*   )r/   rC   r0   s      r   r1   fdproxy.__init__   s    	r!   c                :    U R                   R                  5         U $ r   r4   r6   s    r   r5   fdproxy.__enter__   s     r!   c                <    U R                   R                  XU5        g r   r9   )r/   r;   	exc_value	tracebacks       r   r:   fdproxy.__exit__   s    (y9r!   c                ,    [        U R                  5      $ r   )iterr*   r6   s    r   __iter__fdproxy.__iter__   s    DHH~r!   c                .    [        U R                  U5      $ r   r@   rB   s     r   rD   fdproxy.__getattr__   rF   r!   )r*   rC   N)rk   rl   rm   rn   ro   r1   r5   r:   r~   rD   rp   rj   r!   r   rr   rr      s     :'r!   rr   c                R    [         R                  XU5      n[        X5      nSU;   a   UR                  S[        R
                  5        SU;   a  [        U5      $ U$ ! [         a@  n[        UR                  [        R                  " U 5      < SUR                  < 35      eSnAff = f)z/Open a file with even more POSIX-like semantics   ar      +z: N)r   	posixfilerr   rK   rL   SEEK_ENDr&   OSErrorerrnor   strfromlocalstrerror)rC   mode	bufferingr0   errs        r   r   r      s    
d)4 T 4<GGAr{{#4<'++	 
II8#8#8#>M
 	

s   AA A 
B&&;B!!B&c                    Sn  [         R                  " 5       nUS:X  d  US:X  a  OUS:X  a  [        eUS:X  a  U SS n OX-   n M@  [         R                  " S5        [         R                  " S5        [        R
                  " U 5      $ )zPrompt for password with echo off, using Windows getch().

This shouldn't be called directly- use ``ui.getpass()`` instead, which
checks if the session is interactive first.
 
N)msvcrtgetwchKeyboardInterruptputwchr   
unitolocal)pwcs     r   get_passwordr      s}     
B
MMO9T	;##9CRBB  MM$
MM$r""r!   c                  :    \ rS rSrSrS
S jrS rS rS rS r	Sr
g	)	winstdout   zSome files on Windows misbehave.

When writing to a broken pipe, EINVAL instead of EPIPE may be raised.

When writing too many bytes to a console at the same, a "Not enough space"
error may happen. Python 3 already works around that.
c                    Xl         g r   r0   r.   s     r   r1   winstdout.__init__   s    r!   c                .    [        U R                  U5      $ r   )rA   r0   )r/   keys     r   rD   winstdout.__getattr__   s    tww$$r!   c                Z     U R                   R                  5         g ! [         a     g f = fr   )r0   closer   r6   s    r   r   winstdout.close   s&    	GGMMO 		s    
**c                
    U R                   R                  U5      $ ! [         a[  nUR                  S:w  a  [        R
                  " U5      (       d  e U R                  5         [        [        R                  S5      eS nAff = f)Nr   Broken pipe)r0   rZ   r   r   r   lasterrorwaspipeerrorr   EPIPE)r/   sinsts      r   rZ   winstdout.write   sb    	677==## 	6zzQu'B'B4'H'HJJL%++}55		6s    
BAA==Bc                     U R                   R                  5       $ ! [         a;  n[        R                  " U5      (       d  e [        [
        R                  S5      eS nAff = f)Nr   )r0   flushr   r   r   r   r   )r/   r   s     r   r   winstdout.flush  sL    	677==?" 	6..t44%++}55	6s    
A!6AA!r   N)r0   r   )rk   rl   rm   rn   ro   r1   rD   r   rZ   r   rp   rj   r!   r   r   r      s     %66r!   r   boolc                     gNTrj   rj   r!   r   openhardlinksr   
      r!   c                ,    U SS nUS   S:X  a  USS nU$ )z<parses the output produced by patch and returns the filename   Nr      `r   r   rj   )output_linepfs     r   parsepatchoutputr     s)    	RS	B	!u}"XIr!   c                b   SU R                  5       ;   =(       a    S=(       d    SnU=(       a    SX!4-  =(       d    UnUR                  S5      (       d  UR                  S5      (       a"  [        R                  " [	        S5      U-  5      e[        U5      nU(       a  SU[        U5      U4-  nU$ )	z$Build argument list for ssh or Plinks   plinks   -Ps   -ps   %s@%s   -   /s9   illegal ssh hostname or username starting with - or /: %ss   %s %s %s)lower
startswithr   Abortr   
shellquote)sshcmdhostuserportpflagrT   s         r   sshargsr     s     &059EE-X,5Dt 5 5kkJK
 	
 dDeZ%5t<<Kr!   c                    g r   rj   )flxs      r   setflagsr   '  s    r!   c                    g r   rj   )srcdstr   enforcewritables       r   copymoder   +  s     	r!   c                    gNFrj   paths    r   	checkexecr   4      r!   c                    gr   rj   r   s    r   	checklinkr   8  r   r!   c                    [        U SS 5      nUb7  U" 5       S:  a+  [        R                  " U" 5       [        R                  5        g g g )Nfilenor   )rA   r   setmoderL   O_BINARY)fdfnos     r   	setbinaryr   <  s:     "h
%C
35A:subkk* &r!   c                B    U R                  [        R                  S5      $ )Nr   )replacer   ossepr   s    r   pconvertr   D  s    <<--r!   c                &    U R                  SS5      $ )Nr      \)r   r   s    r   	localpathr   H  s    <<e$$r!   c                R    [        [        R                  R                  U 5      5      $ r   )r   rL   r   normpathr   s    r   r   r   L  s    BGG$$T*++r!   c                .    [         R                  " U 5      $ r   )r   upperr   s    r   normcaser   P  s    >>$r!   s   ^[a-z]:zPattern[bytes]
DRIVE_RE_Bz^[a-z]:zPattern[str]
DRIVE_RE_Sc                >   [         R                  R                  U 5      n[        U[        5      (       a5  [
        R                  U5      (       a  USS R                  5       USS  -   nU$ [        R                  U5      (       a  USS R                  5       USS  -   nU$ )Nr   r   )	rL   r   abspath
isinstancebytesr   matchr   r   )r   abs_paths     r   r   r   Y  s    wwt$H (E""H%%!}**,x|;H O 
		(	#	#Aa=&&(8AB<7Or!   normcasespecc                    gr   rj   )s1s2s     r   samestatr   m  r   r!   c                  ^  [        U 4S jS 5       5      (       d  T $ [        R                  " [        R                  [        R
                  -   5      S-   nSnSn[        T 5      nXE:  Ga  T XDS-    nUS:X  a5  T US-   S m [        T 5      n T R                  S5      nUS	T SU -   S	-   -  nGOpUS
:X  a7  T US-   S m [        T 5      n T R                  S
5      nT SU nUS
U-   S
-   -  nGO3US:X  a  T US-   US-    S:X  aX  T US-   S m [        T 5      n T R                  S5      nT SU nUR                  US5      S:w  a  US
U-   S
-   -  nOUSU-   S-   -  nOSnUS-  nT XDS-    nUS:w  a"  Xb;   a  Xv-  nUS-  nT XDS-    nUS:w  a  Xb;   a  M  UR                  US5      S:w  a  US
U-   S
-   -  nOUSU-   -  nUS:w  a  US-  nOZUS:X  a  US-   U:  a  T US-   US-    S;   a  US-  nO6US:X  a,  US-   U:  a#  T US-   US-    S;   a  UT US-   US-    -  nUS-  nOX6-  nUS-  nXE:  a  GM  U$ ! [         a    X6T -   -  nUS-
  n N'f = f! [         a    US
T -   -  nUS-
  n NDf = f! [         a    UST -   -  nUS-
  n Naf = f)a=  Convert shell variables in the form $var and ${var} inside ``path``
to %var% form.  Existing Windows style variables are left unchanged.

The variables are limited to the given environment.  Unknown variables are
left unchanged.

>>> e = {b'var1': b'v1', b'var2': b'v2', b'var3': b'v3'}
>>> # Only valid values are expanded
>>> shelltocmdexe(b'cmd $var1 ${var2} %var3% $missing ${missing} %missing%',
...               e)
'cmd %var1% %var2% %var3% $missing ${missing} %missing%'
>>> # Single quote prevents expansion, as does \$ escaping
>>> shelltocmdexe(b"cmd '$var1 ${var2} %var3%' \$var1 \${var2} \\", e)
'cmd "$var1 ${var2} %var3%" $var1 ${var2} \\'
>>> # $$ is not special. %% is not special either, but can be the end and
>>> # start of consecutive variables
>>> shelltocmdexe(b"cmd $$ %% %var1%%var2%", e)
'cmd $$ %% %var1%%var2%'
>>> # No double substitution
>>> shelltocmdexe(b"$var1 %var1%", {b'var1': b'%var2%', b'var2': b'boom'})
'%var1% %var1%'
>>> # Tilde expansion
>>> shelltocmdexe(b"~/dir ~\dir2 ~tmpfile \~/", {})
'%USERPROFILE%/dir %USERPROFILE%\\dir2 ~tmpfile ~/'
c              3  ,   >#    U  H	  oT;   v   M     g 7fr   rj   ).0r   r   s     r   	<genexpr> shelltocmdexe.<locals>.<genexpr>  s     )&QDy&s   s   $'~s   _-r!   r   r      'N   "   %   $r(      {   }s   ${   ~)r   r   s   %USERPROFILE%r   )r  r  )
anyr   sysbytesstringascii_lettersdigitslenindex
ValueErrorget)r   envvarcharsresr  pathlenr   vars   `       r   shelltocmdexer  q  sI   4 )&)))  !5!5!EFNH
CE$iG
/#:	$D$iG$

5)td6El*T11 $Y	$D$iG)

4(
 6EltczD(($YEAI	*d2EAIK(d)( JJt,Ev,C wwsC(C/tczD00us{T11
 
+3h1=HCQJEUQY/A 3h1= 773$+4#:,,C4#:%C8QJEI	G#UQY+}<##CJ	G#UQY+|; 4	EAI..CQJEHC
Y /Z JK  $4x!$  $td{"!$& " (54<'C#aKE(s<   H, I 7I% I% ,III"!I"%I?>I?zOptional[Pattern[bytes]]_quoterec                "   [         c  [        R                  " S5      q [        c   [        R                  " S5      R                  qU (       a,  [        U 5      (       d  [         R	                  U 5      (       d  U $ S[         R                  SU 5      -  $ )aX  
>>> shellquote(br'C:\Users\xyz')
'"C:\\Users\\xyz"'
>>> shellquote(br'C:\Users\xyz/mixed')
'"C:\\Users\\xyz/mixed"'
>>> # Would be safe not to quote too, since it is all double backslashes
>>> shellquote(br'C:\\Users\\xyz')
'"C:\\\\Users\\\\xyz"'
>>> # But this must be quoted
>>> shellquote(br'C:\\Users\\xyz/abc')
'"C:\\\\Users\\\\xyz/abc"'
s   (\\*)("|\\$)s   [^a-zA-Z0-9._:/-]s   "%s"s   \1\1\\\2)r  recompile_needsshellquotesearchsubr   s    r   r   r     sn     ::./ ::&;<CC!!$$X__Q-?-?X\\,222r!   c                h    U R                  S5      (       a  U R                  S5      (       a  U SS $ U $ )Nr  r   r   )r   endswithr  s    r   _unquoter"    s/    ||Dajj..2wHr!   c                ^    [         R                  " [        [         R                  " U SS95      $ )z3Parse a command string in cmd.exe way (best-effort)F)posix)r   maplistr"  
shlexsplitr  s    r   
shellsplitr'    s"    Hh&9&9!5&IJJr!   c                    gr   rj   sts    r   isownerr+    r   r!   c                  ^ [         R                  R                  SS5      nUR                  5       R	                  [
        R                  5       Vs/ s H  o"PM     snm[        R                  R                  U 5      S   R                  5       T;   a  S/mSU4S jjn[
        R                  U ;   a  U" U 5      $ [         R                  R                  SS5      R	                  [
        R                  5       H/  nU" [        R                  R                  X@5      5      nUc  M-  Us  $    U" [        R                  R                  [        R                  R                  U 5      5      5      $ s  snf )a  Find executable for command searching like cmd.exe does.
If command is a basename then PATH is searched for command.
PATH isn't searched if command is an absolute or relative path.
An extension from PATHEXT is found and added if not present.
If command isn't found None is returned.s   PATHEXTs   .COM;.EXE;.BAT;.CMDr   r!   c                p   > T H/  nX-   n[         R                  R                  U5      (       d  M-  Us  $    g)z:Will append extension (if needed) and return existing fileN)rL   r   exists)pathcommandext
executablepathextss      r   findexistingfindexe.<locals>.findexisting,  s3    C$*Jww~~j))!!  r!   s   PATH)r/  r   returnOptional[bytes])r   environr  r   r    r   	ospathseprL   r   splitextr   join
expanduser
expandvars)commandpathextr0  r3  r   r1  r2  s         @r   findexer?  !  s    "":/EFG&}}44X5G5GHIHHIH	ww #))+x75 ~~ G$$  $$Wc2889K9KL!"'',,t"=>
! M **277+=+=g+FGHH' Js   E,c           	   #    #    0 n[         R                  nU  H  n[        U5      n[        R                  R                  U5      u  pEU(       d  SnUR                  US5      nUc[   [        US5       VVV	s0 s H.  u  pxn	U" U	R                  5      [        ;   d  M"  [        U5      U	_M0     n
nnn	UR                  XJ5      nUR                  US5      v   M     gs  sn	nnf ! [        [        4 a    0 n
 NEf = f7f)zStat each file in files. Yield each stat, or None if a file
does not exist or has a type we don't care about.

Cluster and cache stat per directory to minimize number of OS stat calls.   .NT)statS_IFMTr   rL   r   r    r  listdirst_mode_wantedkindsFileNotFoundErrorNotADirectoryError
setdefault)filesdircachegetkindnfdirbasecachenkr   dmaps              r   	statfilesrT  A  s     
 HkkGb\GGMM"%	CS$'= $+3#5#5aqyy)\9 #HQKN#5   ''2Eiid##! 
 &'9: sB   A"C7%C5!C
C
*C.*C7CC41C73C44C7c                    U (       d*   [         R                  " [        R                  " 5       5      $ g! [         a     gf = f)zeReturn the name of the user with the given uid.

If uid is None, return the name of the current user.N)r   fsencodegetpassgetuserModuleNotFoundError)uids    r   usernamer[  [  sB     	$$W__%677  # 	 	s   (3 
A A c                    g)zgReturn the name of the group with the given gid.

If gid is None, return the name of the current group.Nrj   )gids    r   	groupnamer^  j  s     r!   c                    [         R                  " U 5      n [        R                  " U5      n[         R                  " U5      $ ! [         a  n[        U5      eS nAff = fr   )r   fsdecoderL   readlinkr  AttributeErrorrV  )r   path_strlinkes       r   ra  ra  q  sW      &H {{8$ T""   
 Q s   A 
AAAc                   [        U 5      (       a  g[        R                  " U 5        [        R                  R	                  U 5      u  pU(       d!  [        R                  R	                  U5      u  pU(       ac  U(       a[   [        U5      (       a  g[        R                  " U5        [        R                  R	                  U5      u  pU(       a
  U(       a  MY  gggg! [
        [        4 a     gf = f)z}special version of os.removedirs that does not remove symlinked
directories or junction points if they actually contain filesN)rD  rL   rmdirr   r    r  r   )rC   headtails      r   
removedirsrj  ~  s     t}}HHTNt$JDWW]]4(

4	t}}HHTN WW]]4(
 44$4$
 G$ 		s    C C C/.C/c                     [         R                  " X5        g! [         a$    [        U5        [         R                  " X5         gf = f)z=atomically rename file src to dst, replacing dst if it existsN)rL   renameFileExistsErrorunlink)r   r   s     r   rl  rl    s5    
		# s
		#s    +AAc                     [         R                  /[         R                  S S -    V s/ s H  n [        R                  " U 5      PM     sn $ s  sn f )Nr   )sysr1  argvr   
strtolocal)args    r   gethgcmdrt    s=    140@388BQ<0OP0OH$0OPPPs    Ac                    [         er   )KeyError)rC   s    r   groupmembersrw    s    
Nr!   c                    gr   rj   )r   s    r   isexecry    r   r!   c                  `    \ rS rSr% S\S'   S
S jrSS jr\R                  rSS jr	SS jr
Srg	)	cachestati  os.stat_resultrB  c                :    [         R                  " U5      U l        g r   )rL   rB  )r/   r   s     r   r1   cachestat.__init__  s    GGDM	r!   c                @    [        U R                  R                  5      $ r   )r   rB  st_inor6   s    r   	cacheablecachestat.cacheable  s    DII$$%%r!   c                    U R                   R                  UR                   R                  :H  =(       Ga    U R                   R                  UR                   R                  :H  =(       GaN    U R                   R                  UR                   R                  :H  =(       Ga    U R                   R                  UR                   R                  :H  =(       a    U R                   R
                  UR                   R
                  :H  =(       a    U R                   R                  UR                   R                  :H  =(       a}    U R                   [         R                     UR                   [         R                     :H  =(       a;    U R                   [         R                     UR                   [         R                     :H  $ ! [         a     gf = fr   )
rB  r  st_devst_nlinkst_uidst_gidst_sizeST_MTIMEST_CTIMErb  r/   others     r   __eq__cachestat.__eq__  sT   	 		  EJJ$5$55 J JII$$

(9(99J JII&&%***=*==J J II$$

(9(99J II$$

(9(99	J
 II%%););;J IIdmm,

4==0IIJ IIdmm,

4==0II	  		s   F7F: :
GGc                    X:X  + $ r   rj   r  s     r   __ne__cachestat.__ne__  s      r!   )rB  N)r   r   r5  Noner5  r   )r  r   r5  r   )rk   rl   rm   rn   __annotations__r1   r  r,   __hash__r  r  rp   rj   r!   r   r{  r{    s'    
"& H(!r!   r{  c                   Uc!  [         R                  [         R                  4nO[        U[        [
        45      (       d  U4nU H  n [         R                  " U[        R                  " U 5      5       nSnUb  [        R                  " U5      n[         R                  " XE5      S   n[        R                  " U5      sSSS5        s  $    g! , (       d  f       M  = f! [         a     M  f = f)a  Look up a key/value name in the Windows registry.

valname: value name. If unspecified, the default value for the key
is used.
scope: optionally specify scope for registry lookup, this can be
a sequence of scopes to look up in order. Default (CURRENT_USER,
LOCAL_MACHINE).
Nr   )winregHKEY_CURRENT_USERHKEY_LOCAL_MACHINEr   listtupleOpenKeyr   r   QueryValueExr   r   )r   valnamescoper   hkeyrC   vals          r   	lookupregr    s     }))6+D+DEe}--	8#8#8#=>$&#009D))$5a8  **3/ ?>  ?>  		s1   	+C4A
C>	C
C	CC
C-,C-Texpandglobsc                    g)z(check whether a stat result is a symlinkFrj   r)  s    r   
statislinkr        r!   c                    g)z1check whether a stat result is an executable fileFrj   r)  s    r   
statisexecr    r  r!   c                    [        5       er   r   )fdss    r   pollr    s    

r!   c                    / n [         R                  " U 5      nU(       d  O,U R                  U5      nU(       d  OUR                  U5        MJ  SR	                  U5      $ )z$Read all available data from a pipe.r!   )r   peekpiperb   appendr:  )pipechunkssizer   s       r   readpiper    sS    F
~~d#IIdOa  88Fr!   c                    [        S5      e)Nzunsupported platformr   )sockr   s     r   bindunixsocketr    s    
4
55r!   )r   r   r5  zTuple[bytes, bytes])   rr   )r5  r   r  )r   r   r5  r   )
r   r   r   r   r   r6  r   r6  r5  r   )r   r   r   r   r   r   r5  r  r   )
r   r   r   r   r   Optional[int]r   r   r5  r  )r   r   r5  r   )r5  r  )r   r   r5  r   )r   r   r5  r   )r   r|  r   r|  r5  r   )r   r   r  zMapping[bytes, bytes]r5  r   )r   r   r5  r   )r   r   r5  List[bytes])r*  r|  r5  r   )r=  r   r5  r6  )rJ  zSequence[bytes]r5  z"Iterator[Optional[os.stat_result]]r   )rZ  r  r5  r6  )r]  r  r5  r6  )rC   r   r5  r  )r   r   r   r   r5  r  )r5  r  )rC   r   r5  r  )r   r   r5  r   )NN)r   r   r  r6  r  z#Optional[Union[int, Iterable[int]]]r5  r6  )r*  zOptional[os.stat_result]r5  r   )r5  r	   )r   r   r5  r   )p
__future__r   r   rW  r   rL   r  rB  r  rp  typingr  r   r   r   r   r   r	   r
   r   r   r   r   r   r   i18nr   r   r   r   r   r   r   r   	importmodr   getvolumenamegetfsmountpoint	getfstyperX  
hidewindowmakedirnlinksoslink
samedevicesamefilesetsignalhandlerspawndetachedr   r    testpidrn  TYPE_CHECKINGr$   r  r&   rr   r   rD  r   BinaryIO_Proxyr   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   normcasespecsr   r   upperfallbacknormcasefallbackr   r  r  r  r   r"  r'  r+  r?  S_IFREGS_IFLNKrF  rT  r[  r^  ra  rj  rl  rt  rw  ry  r{  r  r  r  r  r  r  r  rj   r!   r   <module>r     s   #    	 	   
         
		(	#%%OO	
--

--		
>>)) ##

--		" s J3 J3Z' '2
4 ..#,$6&& $6N&5=L
"	 !						 	 		
 
	+.%,   ZZ
3
N 3::i0
L 0  **00c 0)) oz &*
" ) 3<KI: dll+$4
#)&Q
 !  !J  $15"	"" /" 	"J T 

 
 6r!   