
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
ct„j}Ÿ  ã            A   @   s¸  d dl Z d dlZd dlZd dlZd dlZd dlZyd dlZ[dZW n ek
rZ   dZY nX yd dl	Z	[	dZ
W n ek
r†   dZ
Y nX yd dlZ[dZW n ek
r²   dZY nX yd dlmZ W n ek
rÜ   dZY nX yd dlmZ W n ek
�r   dZY nX dddd	d
ddddddddddddddddddddgZG dd„ deƒZG d d„ deƒZG d!d„ deƒZG d"d„ deƒZG d#d$„ d$eƒZG d%d&„ d&eƒZd…d)d„Zd*d+„ Zdd,œd-d„Zdd,œd.d„Zee d/ƒ�rêdd,œd0d1„Znd2d1„ Zdd,œd3d	„Z dd,œd4d
„Z!dd,œd5d„Z"d6d„ Z#dde"dfd7d„Z$d8d9„ Z%d:d;„ Z&e j'e je j(e j)he j*k�oze j+e j,k�oze je j-kZ.d†d<d„Z/e.e/_0d=d>„ Z1e"fd?d„Z2d@dA„ Z3dBdC„ Z4dDdE„ Z5d‡dGdH„Z6dˆdIdJ„Z7dKe6d‰gdMfiZ8e�r e6dŠgdNfe8dO< e7g dPfe8dQ< e
�re6d‹gdSfe8dT< e�r,e6dŒgdVfe8dW< dXd„ Z9d�dZd„Z:d[d„ Z;dŽd\d„Z<d]d„ Z=d^d_„ Z>d�d`d„Z?dad„ Z@dbdc„ ZAddde„ ZBddfœdgdh„ZCdigeCg dMfdjgeBg dPfdkœZDe�rÈdldmgeCg dNfeDdO< e
�râdndogeCg dSfeDdT< e�rüdpdqgeCg dVfeDdW< drds„ ZEd�ddfœdtd„ZFee duƒ�rXejGdvƒ ejHdwdxƒZIdyeIjJ_KdzeIjL_Kd{eIjM_Kd|dv„ ZNn2e jOd}k�rŠd dlPZPejGdvƒ ejHdwdxƒZId~dv„ ZNd‘dd„ZQd“d‚d„ZRe jSe jTB dfdƒd„ZUdS )”é    NTF)Úgetpwnam)ÚgetgrnamÚcopyfileobjÚcopyfileÚcopymodeÚcopystatÚcopyÚcopy2ÚcopytreeÚmoveÚrmtreeÚErrorÚSpecialFileErrorÚ	ExecErrorÚmake_archiveÚget_archive_formatsÚregister_archive_formatÚunregister_archive_formatÚget_unpack_formatsÚregister_unpack_formatÚunregister_unpack_formatÚunpack_archiveÚignore_patternsÚchownÚwhichÚget_terminal_sizeÚSameFileErrorc               @   s   e Zd ZdS )r   N)Ú__name__Ú
__module__Ú__qualname__© r    r    ú/usr/lib64/python3.6/shutil.pyr   7   s   c               @   s   e Zd ZdS )r   N)r   r   r   r    r    r    r!   r   :   s   c               @   s   e Zd ZdS )r   N)r   r   r   r    r    r    r!   r   =   s   c               @   s   e Zd ZdS )r   N)r   r   r   r    r    r    r!   r   A   s   c               @   s   e Zd ZdS )Ú	ReadErrorN)r   r   r   r    r    r    r!   r"   D   s   r"   c               @   s   e Zd ZdS )ÚRegistryErrorN)r   r   r   r    r    r    r!   r#   G   s   r#   é   i   c             C   s$   x| j |ƒ}|sP |j|ƒ qW d S )N)ÚreadÚwrite)ÚfsrcÚfdstZlengthZbufr    r    r!   r   L   s
    
c             C   sX   t tjdƒr0ytjj| |ƒS  tk
r.   dS X tjjtjj| ƒƒtjjtjj|ƒƒkS )NÚsamefileF)ÚhasattrÚosÚpathr)   ÚOSErrorÚnormcaseÚabspath)ÚsrcÚdstr    r    r!   Ú	_samefileT   s    r2   )Úfollow_symlinksc            C   sÈ   t | |ƒrtdj| |ƒƒ‚xL| |gD ]@}ytj|ƒ}W n tk
rJ   Y q$X tj|jƒr$td| ƒ‚q$W | rŽtj	j
| ƒrŽtjtj| ƒ|ƒ n6t| dƒ�&}t|dƒ�}t||ƒ W d Q R X W d Q R X |S )Nz{!r} and {!r} are the same filez`%s` is a named pipeÚrbÚwb)r2   r   Úformatr+   Ústatr-   ÚS_ISFIFOÚst_moder   r,   ÚislinkÚsymlinkÚreadlinkÚopenr   )r0   r1   r3   ÚfnÚstr'   r(   r    r    r!   r   `   s    
c            C   sz   | r>t jj| ƒr>t jj|ƒr>tt dƒr8t jt j }}q\d S ntt dƒrXt jt j }}nd S || ƒ}||tj|j	ƒƒ d S )NÚlchmodÚchmod)
r+   r,   r:   r*   Úlstatr@   r7   rA   ÚS_IMODEr9   )r0   r1   r3   Z	stat_funcZ
chmod_funcr?   r    r    r!   r   }   s    

Ú	listxattrc            C   s¼   yt j| |d�}W n4 tk
rF } z|jtjtjfkr8‚ d S d }~X nX xn|D ]f}y&t j| ||d�}t j||||d� W qN tk
r² } z|jtjtjtjfkr¢‚ W Y d d }~X qNX qNW d S )N)r3   )	r+   rD   r-   ÚerrnoÚENOTSUPZENODATAÚgetxattrÚsetxattrZEPERM)r0   r1   r3   ÚnamesÚeÚnameÚvaluer    r    r!   Ú
_copyxattr“   s    	
rM   c              O   s   d S )Nr    )ÚargsÚkwargsr    r    r!   rM   ª   s    c      	         s6  d d dœdd„‰ |p,t jj| ƒo*t jj|ƒ }|r@‡ fdd„}n‡ fdd„}|dƒ| |d�}tj|jƒ}|d	ƒ||j|jf|d� y|d
ƒ|||d� W n tk
r¬   Y nX t	|dƒ�r$y|dƒ||j
|d� W nP tk
�r" } z2x*dD ] }t	t|ƒrì|jtt|ƒkrìP qìW ‚ W Y d d }~X nX t| ||d� d S )N)Únsr3   c             W   s   d S )Nr    )rP   r3   rN   r    r    r!   Ú_nop¸   s    zcopystat.<locals>._nopc                s   t t| ˆ ƒS )N)Úgetattrr+   )rK   )rQ   r    r!   Úlookup¿   s    zcopystat.<locals>.lookupc                s   t t| ˆ ƒ}|tjkr|S ˆ S )N)rR   r+   Úsupports_follow_symlinks)rK   r>   )rQ   r    r!   rS   Ä   s    
r7   )r3   ÚutimerA   Úst_flagsZchflagsÚ
EOPNOTSUPPrF   )rW   rF   )r+   r,   r:   r7   rC   r9   Úst_atime_nsÚst_mtime_nsÚNotImplementedErrorr*   rV   r-   rE   rR   rM   )	r0   r1   r3   ZfollowrS   r?   ÚmodeÚwhyÚerrr    )rQ   r!   r   ­   s,    
c            C   sB   t jj|ƒr"t jj|t jj| ƒƒ}t| ||d� t| ||d� |S )N)r3   )r+   r,   ÚisdirÚjoinÚbasenamer   r   )r0   r1   r3   r    r    r!   r   ç   s
    c            C   sB   t jj|ƒr"t jj|t jj| ƒƒ}t| ||d� t| ||d� |S )N)r3   )r+   r,   r^   r_   r`   r   r   )r0   r1   r3   r    r    r!   r	   ù   s
    c                 s   ‡ fdd„}|S )Nc                s,   g }xˆ D ]}|j tj||ƒƒ q
W t|ƒS )N)ÚextendÚfnmatchÚfilterÚset)r,   rI   Úignored_namesÚpattern)Úpatternsr    r!   Ú_ignore_patterns  s    
z)ignore_patterns.<locals>._ignore_patternsr    )rg   rh   r    )rg   r!   r     s    c             C   sä  t j| ƒ}|d k	r|| |ƒ}ntƒ }t j|ƒ g }�xB|D �]8}	|	|krJq:t jj| |	ƒ}
t jj||	ƒ}y¢t jj|
ƒrÞt j|
ƒ}|r t j||ƒ t	|
|| d� n<t jj
|ƒ r´|r´w:t jj|
ƒrÒt|
||||ƒ n
||
|ƒ n(t jj|
ƒrüt|
||||ƒ n
||
|ƒ W q: tk
�r< } z|j|jd ƒ W Y d d }~X q: tk
�rr } z|j|
|t|ƒfƒ W Y d d }~X q:X q:W yt	| |ƒ W nJ tk
�rÐ } z,t|dd ƒd k�rÀ|j| |t|ƒfƒ W Y d d }~X nX |�ràt|ƒ‚|S )N)r3   r   Zwinerror)r+   Úlistdirrd   Úmakedirsr,   r_   r:   r<   r;   r   Úexistsr^   r
   r   ra   rN   r-   ÚappendÚstrrR   )r0   r1   ÚsymlinksÚignoreÚcopy_functionZignore_dangling_symlinksrI   re   ÚerrorsrK   ZsrcnameZdstnameÚlinktor]   r\   r    r    r!   r
     sL    $



 *&c          $   C   sL  yt jj| ƒrtdƒ‚W n( tk
r@   |t jj| tjƒ ƒ d S X g }yt j| ƒ}W n& tk
rz   |t j| tjƒ ƒ Y nX x’|D ]Š}t jj| |ƒ}yt j|ƒj	}W n tk
r¼   d}Y nX t
j|ƒrÔt||ƒ q‚yt j|ƒ W q‚ tk
�r
   |t j|tjƒ ƒ Y q‚X q‚W yt j| ƒ W n( tk
�rF   |t j| tjƒ ƒ Y nX d S )Nz%Cannot call rmtree on a symbolic linkr   )r+   r,   r:   r-   ÚsysÚexc_infori   r_   rB   r9   r7   ÚS_ISDIRÚ_rmtree_unsafeÚunlinkÚrmdir)r,   ÚonerrorrI   rK   Úfullnamer[   r    r    r!   rv   q  s6    


rv   c       
   0   C   sØ  g }yt j| ƒ}W n: tk
rL } z||_|t j|tjƒ ƒ W Y d d }~X nX �x‚|D �]x}t jj||ƒ}yt j|| dd�}|j	}W n tk
rœ   d}Y nX tj
|ƒ�r”yt j|t j| d�}	W n& tk
ræ   |t j|tjƒ ƒ Y n¬X zœt jj|t j|	ƒƒ�rJt|	||ƒ yt j|| d� W n( tk
�rF   |t j|tjƒ ƒ Y nX n8ytdƒ‚W n* tk
�r€   |t jj|tjƒ ƒ Y nX W d t j|	ƒ X qVyt j|| d� W qV tk
�rÎ   |t j|tjƒ ƒ Y qVX qVW d S )NF)Údir_fdr3   r   )r{   z%Cannot call rmtree on a symbolic link)r+   ri   r-   Úfilenamers   rt   r,   r_   r7   r9   ru   r=   ÚO_RDONLYÚsamestatÚfstatÚ_rmtree_safe_fdrx   r:   Úcloserw   )
Útopfdr,   ry   rI   r]   rK   rz   Úorig_str[   Údirfdr    r    r!   r€   ’  sD    $

r€   c          !   C   s^  |rdd„ }n|d krdd„ }t �rPt| tƒr8tj| ƒ} ytj| ƒ}W n& tk
rl   |tj| tjƒ ƒ d S X ytj	| tj
ƒ}W n& tk
r¦   |tj| tjƒ ƒ d S X z˜tjj|tj|ƒƒ�rt|| |ƒ ytj| ƒ W n( tk
�r   |tj| tjƒ ƒ Y nX n8ytdƒ‚W n* tk
�r<   |tjj| tjƒ ƒ Y nX W d tj|ƒ X n
t| |ƒS d S )Nc              W   s   d S )Nr    )rN   r    r    r!   ry   Ï  s    zrmtree.<locals>.onerrorc              W   s   ‚ d S )Nr    )rN   r    r    r!   ry   Ò  s    z%Cannot call rmtree on a symbolic link)Ú_use_fd_functionsÚ
isinstanceÚbytesr+   ÚfsdecoderB   Ú	Exceptionrs   rt   r=   r}   r,   r~   r   r€   rx   r-   r:   r�   rv   )r,   Úignore_errorsry   rƒ   Úfdr    r    r!   r   Ã  s<    


c             C   s&   t jjt jjpd }t jj| j|ƒƒS )NÚ )r+   r,   ÚsepÚaltsepr`   Úrstrip)r,   r�   r    r    r!   Ú	_basenameú  s    r�   c             C   s   |}t jj|ƒrTt| |ƒr*t j| |ƒ d S t jj|t| ƒƒ}t jj|ƒrTtd| ƒ‚yt j| |ƒ W n– t	k
rú   t jj
| ƒr¢t j| ƒ}t j||ƒ t j| ƒ nTt jj| ƒrât| |ƒrÈtd| |f ƒ‚t| ||dd� t| ƒ n|| |ƒ t j| ƒ Y nX |S )Nz$Destination path '%s' already existsz.Cannot move a directory '%s' into itself '%s'.T)rp   rn   )r+   r,   r^   r2   Úrenamer_   r�   rk   r   r-   r:   r<   r;   rw   Ú
_destinsrcr
   r   )r0   r1   rp   Zreal_dstrr   r    r    r!   r      s2    




c             C   sV   t jj| ƒ} t jj|ƒ}| jt jjƒs2| t jj7 } |jt jjƒsL|t jj7 }|j| ƒS )N)r+   r,   r/   Úendswithr�   Ú
startswith)r0   r1   r    r    r!   r’   8  s    r’   c             C   sN   t d ks| d krd S yt | ƒ}W n tk
r8   d }Y nX |d k	rJ|d S d S )Né   )r   ÚKeyError)rK   Úresultr    r    r!   Ú_get_gidA  s    
r˜   c             C   sN   t d ks| d krd S yt | ƒ}W n tk
r8   d }Y nX |d k	rJ|d S d S )Nr•   )r   r–   )rK   r—   r    r    r!   Ú_get_uidM  s    
r™   Úgzipc          
      s"  |d krd}nDt r |dkr d}n2tr2|dkr2d}n trD|dkrDd}ntdj|ƒƒ‚dd l}	|rfd	| nd}
| d
 |
 }tjj|ƒ}|r¶tjj	|ƒ r¶|d k	r¨|j
d|ƒ |s¶tj|ƒ |d k	rÈ|j
dƒ tˆƒ‰tˆƒ‰ ‡ ‡‡‡fdd„}|�s|	j|d| ƒ}z|j||d� W d |jƒ  X |S )NrŒ   rš   ZgzÚbzip2Úbz2ÚxzzCbad value for 'compress', or compression format not supported : {0}r   Ú.z.tarzcreating %szCreating tar archivec                s,   ˆ d k	rˆ | _ ˆ| _ˆd k	r(ˆ| _ˆ| _| S )N)ÚgidZgnameÚuidÚuname)Ztarinfo)rŸ   ÚgroupÚownerr    r    r!   Ú_set_uid_gidˆ  s    z#_make_tarball.<locals>._set_uid_gidzw|%s)rc   )Ú_ZLIB_SUPPORTEDÚ_BZ2_SUPPORTEDÚ_LZMA_SUPPORTEDÚ
ValueErrorr6   Útarfiler+   r,   Údirnamerk   Úinforj   r™   r˜   r=   Úaddr�   )Ú	base_nameÚbase_dirÚcompressÚverboseÚdry_runr£   r¢   ÚloggerZtar_compressionr©   Zcompress_extZarchive_nameÚarchive_dirr¤   Útarr    )rŸ   r¢   r£   r    r!   Ú_make_tarballY  s<    

	
rµ   c             C   s|  dd l }| d }tjj| ƒ}|rPtjj|ƒ rP|d k	rB|jd|ƒ |sPtj|ƒ |d k	rf|jd||ƒ |�sx|j|d|jd��ô}tjj	|ƒ}	|	tj
kr¶|j|	|	ƒ |d k	r¶|jd|	ƒ x¶tj|ƒD ]¨\}
}}xFt|ƒD ]:}tjj	tjj|
|ƒƒ}	|j|	|	ƒ |d k	rÖ|jd|	ƒ qÖW xT|D ]L}tjj	tjj|
|ƒƒ}	tjj|	ƒ�r|j|	|	ƒ |d k	�r|jd|	ƒ �qW qÂW W d Q R X |S )Nr   z.zipzcreating %sz#creating '%s' and adding '%s' to itÚw)Zcompressionzadding '%s')Úzipfiler+   r,   rª   rk   r«   rj   ÚZipFileZZIP_DEFLATEDÚnormpathÚcurdirr&   ÚwalkÚsortedr_   Úisfile)r­   r®   r°   r±   r²   r·   Zzip_filenamer³   Zzfr,   ÚdirpathZdirnamesÚ	filenamesrK   r    r    r!   Ú_make_zipfileš  s@    



 rÀ   r´   r¯   zuncompressed tar filezgzip'ed tar-fileZgztarzZIP fileÚzipr›   zbzip2'ed tar-fileZbztarr�   zxz'ed tar-fileZxztarc              C   s   dd„ t jƒ D ƒ} | jƒ  | S )Nc             S   s   g | ]\}}||d  f‘qS )r•   r    )Ú.0rK   Úregistryr    r    r!   ú
<listcomp>Ü  s    z'get_archive_formats.<locals>.<listcomp>)Ú_ARCHIVE_FORMATSÚitemsÚsort)Úformatsr    r    r!   r   ×  s    rŒ   c             C   sz   |d krg }t |ƒs td| ƒ‚t|ttfƒs6tdƒ‚x0|D ](}t|ttfƒ s\t|ƒdkr<tdƒ‚q<W |||ft| < d S )NzThe %s object is not callablez!extra_args needs to be a sequencer•   z+extra_args elements are : (arg_name, value))ÚcallableÚ	TypeErrorr†   ÚtupleÚlistÚlenrÅ   )rK   ÚfunctionÚ
extra_argsÚdescriptionÚelementr    r    r!   r   á  s    	
c             C   s
   t | = d S )N)rÅ   )rK   r    r    r!   r   ö  s    c	             C   s  t jƒ }	|d k	r>|d k	r$|jd|ƒ t jj| ƒ} |s>t j|ƒ |d krLt j}||dœ}
yt| }W n  tk
r‚   t	d| ƒ‚Y nX |d }x|d D ]\}}||
|< q–W |dkrÂ||
d< ||
d< z|| |f|
Ž}W d |d k	rü|d k	rò|jd	|	ƒ t j|	ƒ X |S )
Nzchanging into '%s')r±   r²   zunknown archive format '%s'r   é   rÁ   r£   r¢   zchanging back to '%s')
r+   ÚgetcwdÚdebugr,   r/   Úchdirrº   rÅ   r–   r¨   )r­   r6   Zroot_dirr®   r°   r±   r£   r¢   r²   Zsave_cwdrO   Úformat_infoÚfuncÚargÚvalr|   r    r    r!   r   ù  s6    

c              C   s   dd„ t jƒ D ƒ} | jƒ  | S )Nc             S   s"   g | ]\}}||d  |d f‘qS )r   é   r    )rÂ   rK   r«   r    r    r!   rÄ   6  s    z&get_unpack_formats.<locals>.<listcomp>)Ú_UNPACK_FORMATSrÆ   rÇ   )rÈ   r    r    r!   r   0  s    c       	      C   sv   i }x.t jƒ D ]"\}}x|d D ]}|||< q W qW x,| D ]$}||kr:d}t|||| f ƒ‚q:W t|ƒsrtdƒ‚d S )Nr   z!%s is already registered for "%s"z*The registered function must be a callable)rÛ   rÆ   r#   rÉ   rÊ   )	Ú
extensionsrÎ   rÏ   Zexisting_extensionsrK   r«   ÚextÚ	extensionÚmsgr    r    r!   Ú_check_unpack_options;  s    
rà   c             C   s,   |d krg }t |||ƒ ||||ft| < d S )N)rà   rÛ   )rK   rÜ   rÎ   rÏ   rÐ   r    r    r!   r   M  s    c             C   s
   t | = d S )N)rÛ   )rK   r    r    r!   r   c  s    c             C   s&   t jj| ƒ}t jj|ƒs"t j|ƒ d S )N)r+   r,   rª   r^   rj   )r,   rª   r    r    r!   Ú_ensure_directoryg  s    rá   c       	      C   sÊ   dd l }|j| ƒstd|  ƒ‚|j| ƒ}z’xŒ|jƒ D ]€}|j}|jdƒs4d|krRq4tjj	|f|j
dƒžŽ }|spq4t|ƒ |jdƒs4|j|jƒ}t|dƒ}z|j|ƒ W d |jƒ  ~X q4W W d |jƒ  X d S )Nr   z%s is not a zip fileú/z..r5   )r·   Z
is_zipfiler"   r¸   Zinfolistr|   r”   r+   r,   r_   Úsplitrá   r“   r%   r=   r&   r�   )	r|   Úextract_dirr·   rÁ   r«   rK   ÚtargetÚdataÚfr    r    r!   Ú_unpack_zipfilem  s*    



rè   )rc   c            C   s\   dd l }y|j| ƒ}W n" |jk
r8   td|  ƒ‚Y nX z|j||d� W d |jƒ  X d S )Nr   z/%s is not a compressed or uncompressed tar file)rc   )r©   r=   ZTarErrorr"   Z
extractallr�   )r|   rä   rc   r©   Ztarobjr    r    r!   Ú_unpack_tarfile�  s    ré   z.tarz.zip)r´   rÁ   z.tar.gzz.tgzz.tar.bz2z.tbz2z.tar.xzz.txzc             C   s:   x4t jƒ D ](\}}x|d D ]}| j|ƒr|S qW q
W d S )Nr   )rÛ   rÆ   r“   )r|   rK   r«   rÞ   r    r    r!   Ú_find_unpack_format®  s
    
rê   c            C   sØ   |d krt jƒ }|d kri }nd|i}|d k	r‚yt| }W n" tk
r\   tdj|ƒƒ‚Y nX |d }|| |ft|d ƒ|—Ž nRt| ƒ}|d kr tdj| ƒƒ‚t| d }tt| d ƒ}|j	|ƒ || |f|Ž d S )Nrc   zUnknown unpack format '{0}'rÒ   r•   zUnknown archive format '{0}')
r+   rÓ   rÛ   r–   r¨   r6   Údictrê   r"   Úupdate)r|   rä   r6   rc   Zfilter_kwargsrÖ   r×   rO   r    r    r!   r   µ  s&    
ÚstatvfsÚ
disk_usageZusageztotal used freezTotal space in byteszUsed space in byteszFree space in bytesc             C   s@   t j| ƒ}|j|j }|j|j }|j|j |j }t|||ƒS )N)r+   rí   Úf_bavailÚf_frsizeÚf_blocksÚf_bfreeÚ_ntuple_diskusage)r,   r?   ÚfreeÚtotalÚusedr    r    r!   rî   ì  s
    
Úntc             C   s"   t j| ƒ\}}|| }t|||ƒS )N)r÷   Z_getdiskusageró   )r,   rõ   rô   rö   r    r    r!   rî   þ  s    c             C   sž   |d kr|d krt dƒ‚|}|}|d kr.d}n(t|tƒrVt|ƒ}|d krVtdj|ƒƒ‚|d krdd}n(t|tƒsŒt|ƒ}|d krŒtdj|ƒƒ‚tj	| ||ƒ d S )Nzuser and/or group must be setrÒ   zno such user: {!r}zno such group: {!r}éÿÿÿÿrø   )
r¨   r†   rm   r™   ÚLookupErrorr6   Úintr˜   r+   r   )r,   Úuserr¢   Z_userZ_groupr    r    r!   r   	  s"    

éP   é   c             C   sÔ   yt tjd ƒ}W n ttfk
r.   d}Y nX yt tjd ƒ}W n ttfk
r^   d}Y nX |dksp|dkrÆytjtjjƒ ƒ}W n$ t	tt
fk
r¨   tj| ƒ}Y nX |dkr¸|j}|dkrÆ|j}tj||fƒS )NZCOLUMNSr   ZLINES)rú   r+   Úenvironr–   r¨   r   rs   Ú
__stdout__ÚfilenoÚAttributeErrorr-   Úterminal_sizeÚcolumnsÚlines)Zfallbackr  r  Úsizer    r    r!   r   (  s$    

c                s"  dd„ }t jjˆ ƒr&|ˆ |ƒr"ˆ S d S |d kr>t jjdt jƒ}|sFd S |jt jƒ}tj	dkr¼t j
|krt|jdt j
ƒ t jjddƒjt jƒ}t‡ fdd	„|D ƒƒr¨ˆ g}qÂ‡ fd
d„|D ƒ}nˆ g}tƒ }xT|D ]L}t jj|ƒ}||krÎ|j|ƒ x(|D ] }	t jj||	ƒ}
||
|ƒrö|
S qöW qÎW d S )Nc             S   s&   t jj| ƒo$t j| |ƒo$t jj| ƒ S )N)r+   r,   rk   Úaccessr^   )r>   r[   r    r    r!   Ú_access_checkb  s    zwhich.<locals>._access_checkÚPATHZwin32r   ZPATHEXTrŒ   c             3   s    | ]}ˆ j ƒ j|j ƒ ƒV  qd S )N)Úlowerr“   )rÂ   rÝ   )Úcmdr    r!   ú	<genexpr>  s    zwhich.<locals>.<genexpr>c                s   g | ]}ˆ | ‘qS r    r    )rÂ   rÝ   )r
  r    r!   rÄ   ‚  s    zwhich.<locals>.<listcomp>)r+   r,   rª   rþ   ÚgetÚdefpathrã   Úpathseprs   Úplatformrº   ÚinsertÚanyrd   r.   r¬   r_   )r
  r[   r,   r  ZpathextÚfilesÚseenÚdirZnormdirZthefilerK   r    )r
  r!   r   U  s8    






é @  )r  )FN)rš   r   r   NNN)r   r   N)r¯   N)r¯   rš   )r¯   r›   )r¯   r�   )NrŒ   )NNr   r   NNN)NrŒ   )NN)NN©rü   rý   )r  )Vr+   rs   r7   rb   ÚcollectionsrE   Úzlibr¥   ÚImportErrorrœ   r¦   Zlzmar§   Úpwdr   Zgrpr   Ú__all__r-   r   r   r   r   r"   r‰   r#   r   r2   r   r   r*   rM   r   r   r	   r   r
   rv   r€   r=   rw   rx   Úsupports_dir_fdri   Úsupports_fdrT   r…   r   Zavoids_symlink_attacksr�   r   r’   r˜   r™   rµ   rÀ   rÅ   r   r   r   r   r   rà   r   r   rá   rè   ré   rÛ   rê   r   rl   Ú
namedtupleró   rõ   Ú__doc__rö   rô   rî   rK   r÷   r   r   ÚF_OKÚX_OKr   r    r    r    r!   Ú<module>   sü   






:Y!,

58	 
@
-




 
6 
"





/




-