
    hڝ                       d dl mZm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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Zd dlZd dlZd dlZd dlmZ d dlm Z m!Z!m"Z"m#Z# d dl$m%Z% 	 d dl&m'Z( d dl&m&Z) e(ejT                  d<   d	d
l+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 d	dl5m6Z6m7Z7 d	dl8m9Z9 	 d dl:m:Z:m;Z; e;jx                  Z=e/reBZCej                  dk\  se0r ej                         dk(  reFZGnd dlmHZG d ZI eId      ZJ eId      ZK eId      ZL eId      ZM eId      ZN eId      ZOdZP	 d dlQZQdZR	 d dlSZSd dlTZT	 ej                  j                  d      r eW       dZXd dlYZY eZeYd      sJ 	 	 d dl[Z\ e]e\j                  j                  d             Z`	 ej                  j                  d!      r eW       dZad dlbZb	 ej                  j                  d"      se,r"ej                  j                  d#      s eW       d dlcZce1rd	d$ldmeZe d	d%lfmgZg d	d&lhmiZi dZj	 ej                  j                  d'      r ek       d dllZme/sd d(lnmoZo nd d)lpmpZo 	 ej                  j                  d*      r eW        ej                  ej                  d+       dZs	  ej                  d-d.       ej                  Zvej                  Zw	  ej                  d1      d2z  Zy ej                  d4      Z{ ej                  d5      Z| ej                  d6ej                        Z~ ej                  d7ej                        Z ej                  d8ej                        Z ej                  d9ej                        Z ej                  d:      Z ej                  d;      Zej                  j                  d<      Z e9j                          e3re/rd=Zn ej                         Ze0xr ej                  ej                  v Zd>Zd?Zd@ZdAZedBz   Zi dCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdn	Zdodpgdpdqgdrdsgdsdtgdtdqgdudvgdwdvgdvdqgdxdygdydzgd{d|gd}d~gdd~gddgddgdd~gddgddgddgddgddgddgddgddgddgddggZe,rej)                  ddgg       ddggZg dZ ee      ZdddZd Z e        ej7                         D  ci c]  \  } }|| 
 c}} Zded<   ddiZdZdZdZdjC                         jE                  d      D ci c]D  }|jC                         jE                  d      d	d D ]  }|r||jE                  dd	      d     F c}}Zej7                         D  ci c]  \  } }| jI                         | c}} ZdZ eej                  d=      jE                               Z eejE                               ZdZ ej                  e      ZdZd	dddddddZdddddZ eg d      Zd Z e       \  ZZejd                  xs dZe-r9dZdjE                         D ]#  Z	 e,redz  Z ejj                  e      ZereZ n% d Zd Zd Z	  e       Z	 d dlm5Z 	 d dlmZ 	 d dlm5Z  e       Zdj                  e7e6eeeee      Z	 eĐj                  dd      ZeĐj                  dd      Zd Zd Zd Zd ZdZ ej                  e̫      Ze ee̫      k7  se eeΫ      k7  r eWd      	  G d deW      Zd Z G dÄ dej                        Z G dń deث      Z G dǄ deث      Z G dɄ dej                        Z G d˄ deث      Z G d̈́ deޫ      Z G dτ deث      ZeZ G dф deث      Z G dӄ deث      Z G dՄ deث      Z G dׄ dej                        Z G dل deث      Z G dۄ deث      Z G d݄ deث      Z G d߄ deث      Ze3r&ej                  dk  rej                  Zd Zee_        d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdzdZd Z G d deث      Zd Zd Zd Zd Zd Z e,re neZd ZdjE                         ZdjE                         ZdZd{dZ	 d|dZd}dZd Z	d{d Z
d}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d Zd~dZd~dZd Zd Ze/sdZ eCd      D ci c](  }||evrd|fz  n e|      j                  d=      * c}Z de d<   d Z!e!Z"dZ#e#D ci c]2  }e#D ]*  }||z   j                         eĐjI                  ||z         , 4 c}}Z%d Z&d dl'm(Z) nd dl*m)Z) d dl*m&Z& eZ"d Z+d  Z,d! Z-d" Z.d# Z/d$ Z0d% Z1d& Z2d' Z3d( Z4d) Z5d* Z6d+ Z7d, Z8d- Z9d. Z:e/se5ne3Z;e/se6ne4Z<d/ Z=d0 Z>e/se3re<Z?e8Z@e:ZAe7ZBe9ZCn3e/re3se<xZAxZ@Z?e;ZBeDZCnd1 ZEd2 ZFeExZAxZ@Z?eFZBeDZCd3 ZGd4 ZHd5 ZId6 ZJd7 ZKd8 ZLd9 ZMd: ZNd; ZOe,se.sd< ZPnd= ZPdd>ZQd? ZRd@ ZS	 d{dAZTdB ZUd}dCZV	 d}dDZWdE ZXdF ZYdG ZZdH Z[dI Z\dJ Z]dK Z^dL Z_dM Z`dN ZadO Zb	 ddPZcdQ ZddR ZedS Zf ef       Zgegj                  d=      Zh	 d{dTZidU ZjddVZk	 	 	 ddWZldX ZmdY Zni ZodZd[d\d]Zpd^ Zqd_ Zrd` Zsda Ztdb Zudc Zvdd Zwde Zxdf Zydg Zzdh Z{i Z|di Z}dj Z~dk Zej                  j                  dl      re}Zne,reZneRre~Zne}Z	 ej                  dmk  sej                  j                  dn      r ek       d dlmZ 	 ej                  dmkD  r ek       d dlZdo Zdp Zdq Zi Zdr Zds ZddtZ G du dveW      Z G dw dxe      Ze(eme)eoe)e&eeeef
Zg dyZy#  d dl(Z(d dl)Z)Y GxY w#  d dl:m:Z:m>Z>m?Z?  e>d       Z@ G d de?      ZA eA       Z=Y :xY w#  dZRY xY w#  Y xY w#  dZXY xY w#  dZ`Y xY w#  dZaY oxY w#  Y 3xY w# ek$ r dZmY w xY w#  d, Zqeqe_q        dZsY 
xY w#  d/ Zvd0 ZwY 
xY w#   ej                  d3      d2z  ZyY 
xY wc c}} w c c}}w c c}} w #  Y UxY w#  dZY (xY w#  dZY +xY w#  dZY .xY w#  dZY 1xY w# eW$ rLZej                  Zej                  Zej                  Zej                  Ze0s edeϛ       Y dZ[ϐdZ[ww xY wc c}w c c}}w # ek$ r 	 d dlZn# ek$ r dZY nw xY wY w xY w# ek$ r dZY w xY w(      )print_functionunicode_literalsN)Counter)IPv4AddressIPv4NetworkIPv6AddressIPv6Network)Queue)gzip_ng)zlib_nggzip   )	ANYWINEXEMACOSPY2PY36TYPE_CHECKINGVT100WINDOWS	EnvParams)
S_BUILD_DT	S_VERSION)surrogateescape)datetimetimezone)r   	timedeltatzinfoc                       e Zd Zd Zd Zd Zy)_UTCc                     t         S NTD_ZEROselfdts     C/jellyfin/media/venv/lib/python3.12/site-packages/copyparty/util.py	utcoffsetz_UTC.utcoffsetE       N    c                      y)NUTC r%   s     r(   tznamez_UTC.tznameH   s    r+   c                     t         S r"   r#   r%   s     r(   dstz_UTC.dstK   r*   r+   N)__name__
__module____qualname__r)   r/   r1   r.   r+   r(   r    r    D   s    			r+   r    )      CPython)OrderedDictc                     g }| j                         D ]"  }	 |j                  t        t        |             $ t	        |      S #  Y 4xY wr"   )splitappendgetattrerrnotuple)wantretvs      r(   _ensrB   ]   sJ    CZZ\ 	JJwua() :	s   AAz0ENOTCONN EUNATCH EBADF WSAENOTSOCK WSAECONNRESETzEPIPE ESHUTDOWN EBADFDzEADDRNOTAVAIL WSAEADDRNOTAVAILzEADDRINUSE WSAEADDRINUSEzEACCES WSAEACCESz7EHOSTUNREACH WSAEHOSTUNREACH ENETUNREACH WSAENETUNREACHz0:0:0:0:0:0:0:0TFPRTY_NO_SQLITEconnectzmqPRTY_NO_PSUTILPRTY_NO_MAGICPRTY_FORCE_MAGIC)VFS)	BrokerCli)Up2k
PRTY_NO_MP)BytesIO)StringIOPRTY_NO_IPV6::1c                 ,    t        j                  |      S r"   )socket	inet_aton)famips     r(   	inet_ptonrV      s    ##r+   s   >is   idgic                 L    t        j                  | j                  d      g| S Nascii)structpackdecodefmtas     r(   spackr`      s    {{3::g.333r+   c                 L    t        j                  | j                  d      |      S rX   )rZ   unpackr\   r]   s     r(   sunpackrc      s    }}SZZ0!44r+      P   Pz\[[^mK]*[mK]z[<>&$?`\"';]z^content-type: *([^; ]+)z^content-disposition: *([^; ]+)z/^content-disposition:(?: *|.*; *)name="([^"]+)"z0^content-disposition:(?: *|.*; *)filename="(.*)"z^MemTotal:.* kBz^MemAvailable:.* kBrY   utf-8z1<meta name="robots" content="noindex, nofollow">
zaBarkrowler|bingbot|BLEXBot|Googlebot|GoogleOther|GPTBot|PetalBot|SeekportBot|SemrushBot|YandexBotz5https://www.gyan.dev/ffmpeg/builds/ffmpeg-git-full.7zz!https://github.com/9001/copypartyz-/issues/new?labels=bug&template=bug_report.md   OK   Created   Accepted   z
No Content   zPartial Content   zMulti-Statusi-  zMoved Permanentlyi.  Foundi0  zNot Modified  zBad Requesti  Unauthorizedi  	Forbidden  z	Not Foundi  zMethod Not Allowedi  Conflicti  zLength Requiredi  zPrecondition FailedzPayload Too LargezRequested Range Not SatisfiablezUnprocessable EntityLockedzToo Many RequestszInternal Server ErrorzNot ImplementedzService Unavailable	MissingNo)	i  i    i  i  i  i  i    e2dsae2dse2de2tsre2tse2te2vue2ve2vphardlink_onlyhardlinkdeduptftpvvtftpvsmbwsmbsmb1smbvvvsmbvvsmbvzvzmvzsvzzmzszmvvzm4zm6zmsno_davdaw)contentclasscreationdatedefaultdocumentdisplaynamegetcontentlanguagegetcontentlengthgetcontenttypegetlastmodifiedhrefiscollectionishidden
isreadonlyisrootisstructureddocumentlastaccessedname
parentnameresourcetypesupportedlockzaudio/ogg; codecs=opuszaudio/webm; codecs=opus)opusowac                     dj                         D ]S  } | j                  dd      \  }}|j                         j                         D ]  }dj                  ||      t        |<    U dj                         D ]g  } | j                  dd      \  }}|j                         j                         D ]/  }|j                  d      \  }}dj                  ||      t        |<   1 i y )Nztext css html csv
application json wasm xml pdf rtf zip jar fits wasm
image webp jpeg png gif bmp jxl jp2 jxs jxr tiff bpg heic heif avif
audio aac ogg wav flac ape amr
video webm mp4 mpeg
font woff woff2 otf ttf
 r   z{}/{}a  text md=plain txt=plain js=javascript
application 7z=x-7z-compressed tar=x-tar bz2=x-bzip2 gz=gzip rar=x-rar-compressed zst=zstd xz=x-xz lz=lzip cpio=x-cpio
application msi=x-ms-installer cab=vnd.ms-cab-compressed rpm=x-rpm crx=x-chrome-extension
application epub=epub+zip mobi=x-mobipocket-ebook lit=x-ms-reader rss=rss+xml atom=atom+xml torrent=x-bittorrent
application p7s=pkcs7-signature dcm=dicom shx=vnd.shx shp=vnd.shp dbf=x-dbf gml=gml+xml gpx=gpx+xml amf=x-amf
application swf=x-shockwave-flash m3u=vnd.apple.mpegurl db3=vnd.sqlite3 sqlite=vnd.sqlite3
text ass=plain ssa=plain
image jpg=jpeg xpm=x-xpixmap psd=vnd.adobe.photoshop jpf=jpx tif=tiff ico=x-icon djvu=vnd.djvu
image heic=heic-sequence heif=heif-sequence hdr=vnd.radiance svg=svg+xml
audio caf=x-caf mp3=mpeg m4a=mp4 mid=midi mpc=musepack aif=aiff au=basic qcp=qcelp
video mkv=x-matroska mov=quicktime avi=x-msvideo m4v=x-m4v ts=mp2t
video asf=x-ms-asf flv=x-flv 3gp=3gpp 3g2=3gpp2 rmvb=vnd.rn-realmedia-vbr
font ttc=collection
=)
splitlinesr:   stripformatMIMES)lnkvsrA   emsemextmimes           r(   
_add_mimesr   e  s     JL	, a 2!!# 	,A~~a+E!H	,	, JL1 #q!3))+##% 	1BIC 40E#J	11r+   pngzvnd.mozilla.apngjpegjpgzoself.ip self.ua self.uname self.host cfg.name cfg.logout vf.scan vf.thsize hdr.cf_ipcountry srv.itime srv.htimez\.files,circle,album,.tn,artist,title,.bpm,key,.dur,.q,.vq,.aq,vc,ac,fmt,res,.fps,ahash,vhashz.vq,.aq,vc,ac,fmt,res,.fpsa  
1B 6d B
2B 7d Gb F#
3B 8d Db C#
4B 9d Ab G#
5B 10d Eb D#
6B 11d Bb A#
7B 12d F
8B 1d C
9B 2d G
10B 3d D
11B 4d A
12B 5d E
1A 6m Abm G#m
2A 7m Ebm D#m
3A 8m Bbm A#m
4A 9m Fm
5A 10m Cm
6A 11m Gm
7A 12m Dm
8A 1m Am
9A 2m Em
10A 3m Bm
11A 4m Gbm F#m
12A 5m Dbm C#m

r   z<python3 python ffmpeg ffprobe cfssl cfssljson cfssl-certinfoz/(__MACOS|Icon\r\r)|/\.(_|DS_Store|AppleDouble|LSOverride|DocumentRevisions-|fseventsd|Spotlight-|TemporaryItems|Trashes|VolumeIcon\.icns|com\.apple\.timemachine\.donotpresent|AppleDB|AppleDesktop|apdisk))BKiBMiBGiBTiBPiBEiB      i   @l        l           l            )br   mgtpe   皙?)mv_re_trm_re_tmv_re_rrm_re_r)z.prologue.htmlz.epilogue.htmlz	readme.mdz
preadme.mdc                     dx} }	 t        ddd      5 }|j                  d      j                  dd      j                  d      }d d d        t        t        fdD              }t        t        |j                         d	         d
z  dz        dz  } t        t        fd|D              }t        t        |j                         d	         d
z  dz        dz  }| |fS # 1 sw Y   xY w#  Y | |fS xY w)Nr   z/proc/meminforbi   rY   replacer   c              3   F   K   | ]  }j                  |      s|  y wr"   match.0xr   s     r(   	<genexpr>zread_ram.<locals>.<genexpr>       0QWWQZ10   !!r   r   d   c              3   F   K   | ]  }j                  |      s|  y wr"   r   r   s     r(   r   zread_ram.<locals>.<genexpr>  r   r   )openreadr\   r:   RE_MEMTOTALnextintRE_MEMAVAIL)r_   r   fzslr   r   s        @r(   read_ramr     s     IA/41 	IQ&&/(()<BB4HC	I 0c01RXXZ]#h.#56<0c01RXXZ]#h.#56< a4K	I 	Ia4Ks#   C- 1C!BC- !C*&C- -C4 zpython3 python.exec                     t        j                         } dj                  t        j                  D cg c]  }t        |       c}      }|j                  d      }|dkD  r|d | }t        j                         }t        j                         j                  d      d   }t        j                  dt        j                               }|r|j                  d      nd}dj                  | ||t        ||      S c c}w )	N.z.final.r   httpz([0-9]+\.[0-9\.]+)r   r   z{:>9} v{} on {}{} {} [{}])platformpython_implementationjoinsysversion_infostrfindsystempython_compilerr:   researchversiongroupr   BITNESS)interpr   py_verofshost_oscompilerr   os_vers           r(   py_descr     s    ++-FXXs'7'78!s1v89F
++i
 C
QwooG'')//7:H
		')9)9);<AQWWQZ"F&--&(  9s   C7c                      	 dd l } dj                  | j                  D cg c]  }t        |       c}      S c c}w #  Y yxY w)Nr   r   ?)pyexpatr   r   r   )r  r   s     r(   	expat_verr    s;    xx)=)=>AQ>??>s   = 8= = Ac                     	 t        j                  d      } | j                         }	 |j                  d      j	                         }t        d |D              }|j                          | j                          dj                  t         j                  |      S #  |j                  d      j	                         }Y uxY w#  d}Y LxY w)Nz:memory:z$select * from pragma_compile_optionszpragma compile_optionsc              3   t   K   | ]0  }|d    j                  d      s|d    j                  d      d    2 yw)r   zTHREADSAFE=r   r   N)
startswithr:   r   r   s     r(   r   z_sqlite_ver.<locals>.<genexpr>$  s0     R1Q4??=3Q1C#Rs   88Wz{}*{})	sqlite3rD   cursorexecutefetchallr   closer   sqlite_version)cocurr   rA   s       r(   _sqlite_verr    s    __Z(iik	BCDMMOB RRRR		

 >>'00!44	B56??AB
s"   %B? B 2B? !B<:B? ?Cz(None))__version__)__ver__zCcopyparty v{} ({})
{}
   sqlite {} | jinja {} | pyftpd {} | tftp {}s   +/s   -_c                 Z    t        j                  | d      }|j                  t              S NF)newline)binascii
b2a_base64	translate_b64_enc_tl)bsr   s     r(   ub64encr%  O  s#    E2{{;''r+   c                 V    | j                  t              } t        j                  |       S r"   )r"  _b64_dec_tlr   
a2b_base64r$  s    r(   ub64decr*  S  s!    \\+&""2&&r+   c                 0    t        j                  | d      S r  )r   r!  r)  s    r(   b64encr,  W  s    ""2u55r+   c                 ,    t        j                  |       S r"   )r   r(  r)  s    r(   b64decr.  Z  s    ""2&&r+   s   >>>????z	bad smokez#using fallback base64 codec due to c                       e Zd Zy)NotUTF8Nr2   r3   r4   r.   r+   r(   r0  r0  k      r+   r0  c                    t        |d      5 }|j                         }d d d        	 j                  dd      S # 1 sw Y   xY w# t        $ r}|j                  }||dz    }Y d }~nd }~ww xY w|s3d}||||fz  }| r
 | |d       nt        |       |j                  dd      S d}||||fz  }| r | |d       t        |      t        |       t        |      )	Nr   rg   strictr   a  WARNING: The file [%s] is not using the UTF-8 character encoding; some characters in the file will be skipped/ignored. The first unreadable character was byte %r at offset %d. Please convert this file to UTF-8 by opening the file in your text-editor and saving it as UTF-8.r5   r   zERROR: The file [%s] is not using the UTF-8 character encoding, and cannot be loaded. The first unreadable character was byte %r at offset %d. Please convert this file to UTF-8 by opening the file in your text-editor and saving it as UTF-8.)r   r   r\   UnicodeDecodeErrorstartprintr0  )	logapr4  r   bufexeoebr   s	            r(   	read_utf8r>  o  s    	b$ 1ffhzz'8,,	 
  XXb1f  `R1I!Hzz'9-- 	{A	RRLA
Aq	 !* 	a
!*s    9A A	A,A''A,c                   "    e Zd Z	 	 	 	 ddZd Zy)DaemonNc                     t         j                  j                  | |       |xs d| _        |xs i | _        || _        d| _        |r| j                          y y )Nr   r.   T)	threadingThread__init__r_   kafundaemonr6  )r&   targetr   r_   rrF  s         r(   rE  zDaemon.__init__  sR     	!!$T!2b(JJL r+   c                 
   t         sWt        sQt        j                  t        j                  t        j
                  t        j                  t        j                  g        | j                  | j                  i | j                   y r"   )r   r   signalpthread_sigmask	SIG_BLOCKSIGINTSIGTERMSIGUSR1rG  r_   rF  r&   s    r(   runz
Daemon.run  sP    c""  6==&..&.."Q 	$&&$DGG$r+   )NNTN)r2   r3   r4   rE  rS  r.   r+   r(   r@  r@    s      %r+   r@  c                   *    e Zd Zd Zd Zd Zd Zd Zy)Netdevc                 <    || _         || _        || _        || _        y r"   )rU   idxr   desc)r&   rU   rW  r   rX  s        r(   rE  zNetdev.__init__  s    		r+   c                 d    dj                  | j                  | j                  | j                        S )Nz{}-{}{})r   rW  r   rX  rR  s    r(   __str__zNetdev.__str__  s#    $))TYY??r+   c                 N    dj                  | j                  | j                        S )Nz'{}-{}')r   rW  r   rR  s    r(   __repr__zNetdev.__repr__  s    $))44r+   c                 0    t        |       t        |      k  S r"   r   r&   rhss     r(   __lt__zNetdev.__lt__  s    4y3s8##r+   c                 0    t        |       t        |      k(  S r"   r^  r_  s     r(   __eq__zNetdev.__eq__  s    4yCH$$r+   N)r2   r3   r4   rE  rZ  r\  ra  rc  r.   r+   r(   rU  rU    s    @5$%r+   rU  c                       e Zd Zd Zd Zy)Cooldownc                 `    || _         t        j                         | _        i | _        d| _        y N        )maxagerC  Lockmutexhistoldestr&   ri  s     r(   rE  zCooldown.__init__  s%    ^^%
	r+   c                     | j                   5  t        j                         }d}| j                  j                  |d      }||z
  | j                  kD  r|| j                  |<   d}| j
                  |z
  | j                  dz  kD  rq| j                  j                         D ci c]  \  }}||z
  | j                  k  s|| c}}| _        t        | j                  j                               d   | _        |cd d d        S c c}}w # 1 sw Y   y xY w)NFr   T   )	rk  timerl  getri  rm  itemssortedvalues)r&   keynowr@   pvr   rA   s          r(   pokezCooldown.poke  s    ZZ 	))+CC))--Q'BRx$++%!$		#{{S 4;;?2%)YY__%6!Q#'DKK:OAqD	 %TYY%5%5%78;	 		 	s$   BDC>:C>?5D>DDN)r2   r3   r4   rE  ry  r.   r+   r(   re  re    s    r+   re  c                   $    e Zd Zd Zd Zd Zd Zy)HLogc                     t         j                  j                  |        || _        t	        j
                  d      | _        t	        j
                  d      | _        y )Nz^([0-9a-f:\.]+:[0-9]{1,5})-\[z$^(Callback added|Config file parsed))loggingHandlerrE  log_funcr   compileptn_ftpptn_smb_ign)r&   r  s     r(   rE  zHLog.__init__  s>      & zz"BC::&MNr+   c                 z    t        j                  | j                        }d| j                  j                  d|dS )N<z cpp(z)>)r}  getLevelNamelevel	__class__r2   )r&   r  s     r(   r\  zHLog.__repr__  s+    $$TZZ0!%!8!8%@@r+   c                      y r"   r.   rR  s    r(   flushz
HLog.flush  s    r+   c                    | j                  |      }|j                  }|t        j                  k  rd}n.|t        j                  k  rd}n|t        j
                  k  rd}nd}|j                  dk(  rc| j                  j                  |      }|r|j                  d      }|t        |      dz   d  }|j                  d      r|dd  |_        nn||_        nf|j                  j                  d      r| j                  j                  |      r0y |j                  j                  d	      r|j                  d
d  |_        | j                  |j                  dd  ||       y )N   r   r5   r   	pyftpdlib::ffff:r6   impacketz	partftpy.	   i)r   levelnor}  INFOWARNINGERRORr   r  r   r   lenr  r  r  )r&   recordmsglvcr   rU   s          r(   emitz	HLog.emit  s   kk&!^^A'//!A'--AA;;+%""3'AWWQZ#b'A+-(==+"$QR&FK"$FK[[##J/%%c*[[##K0 ++ab/FKfkk#$'a0r+   N)r2   r3   r4   rE  r\  r  r  r.   r+   r(   r{  r{    s    OA1r+   r{  c                   &    e Zd Z	 	 	 ddZd Zd Zy)NetMapc           	         |rdnt        j                         | _        d|v rX|D cg c]
  }|dk7  s	| c}t        |D cg c]  }d|v s|j	                  d      d    c}      z   }|j                  d       d|v rG|D cg c]
  }|dk7  s	| c}t        |D cg c]  }d|vs|j	                  d      d    c}      z   }|s|D cg c]	  }|dvs| }}t        ||      }i | _        i | _        i | _	        g | _
        |D ]  }d|v }|rt        j                  nt        j                  }	t        j                  |	|j	                  d      d         }
| j                  j                  |
       |j	                  d      d   | j                  |
<    |rt        nt         ||      | j                  |
<    | j                  j#                  d	       yc c}w c c}w c c}w c c}w c c}w )
zq
        ips: list of plain ipv4/ipv6 IPs, not cidr
        cidrs: list of cidr-notation IPs (ip/prefix)
        N:::/r   z0.0.0.0)rP   z	127.0.0.1T)reverse)rC  rj  rk  listr:   r;   find_prefixcacheb2sipb2netbiprR   AF_INET6AF_INETrV   r	   r   sort)r&   ipscidrskeep_lostrict_cidrdefer_mutexr   rU   v6rT   r  s              r(   rE  zNetMap.__init__   s    *dy~~/?
3;!/Q$Y1/$*/<Q3!8a<3 C JJy!!4Q)^14t*/@Q3a<a@8 C !CQ.B%B1CCC#u%


 	TBB%'&//V^^C""3a(89CHHOOC  hhsmA.DJJsOAb{k2{SDJJsO	T 	d#7 0<
 5@ Ds:   
GG 	G

G

GG	G"
&G"
	G'G'c                     |j                  d      r|dd  }	 | j                  |   S #  | j                  5  | j                  |      cd d d        cY S # 1 sw Y   Y y xY wxY w)Nr  r6   )r  r  rk  _map)r&   rU   s     r(   mapz
NetMap.map.  s[    ==#ABB	%::b>!	%  %yy}% % %s&   ' AA
AA	AAc                     d|v }|rt        |      n
t        |      t         fd j                  D        d       }|r j                  |   nd}t         j                        dkD  ri  _        | j                  |<   |S )Nr  c              3   F   K   | ]  }j                   |   v s|  y wr"   )r  )r   r   cir&   s     r(   r   zNetMap._map.<locals>.<genexpr>=  s      ?!2A+>A?r   r   (#  )r   r   r   r  r  r  r  )r&   rU   r  r  r@   r  s   `    @r(   r  zNetMap._map:  sm    BY "[_B?txx?F!$djjo"tzz?T!DJ

2
r+   N)FFF)r2   r3   r4   rE  r  r  r.   r+   r(   r  r    s    
 ,$\
%r+   r  c                       e Zd Zy)	UnrecvEOFNr1  r.   r+   r(   r  r  E  r2  r+   r  c                   ,    e Zd ZdZd ZddZddZd Zy)	_Unrecvz,
    undo any number of socket recv ops
    c                 .    || _         || _        d| _        y Nr+   )sr8  r:  )r&   r  r8  s      r(   rE  z_Unrecv.__init__N  s    r+   c                    | j                   r%| j                   d | }| j                   |d  | _         |S 	 	 | j                  j                  |      }	 |st        d      |S # t        j                  $ r |dz  }|dk  rd}Y 0Y P d}Y 7xY w)Nr   r   r+   zclient stopped sending data)r:  r  recvrR   timeoutr  )r&   nbytesspinsr@   s       r(   r  z_Unrecv.recvS  s    88((7F#Cxx(DHJffkk&) 9::
 >> 
A:Cs   A BBc                 j   d}	 |t        |      kD  r/|| j                  |t        |      z
        z  }|t        |      kD  r/|S # t        $ rf d}|s||fz  }n+|dz  }||t        |      fz  }t        |      dk  r|d|z  }|rt        d|      | j                  r| j	                  |d       Y |S w xY w)zread an exact number of bytesr+   z<client stopped sending data; expected at least %d more bytesz, only got %d   z; r   r5   )r  r  OSErrorr  r8  )r&   r  raise_on_truncr@   r   s        r(   recv_exz_Unrecv.recv_exl  s    	3s8#tyy#c(!233 3s8#" 
  	NA	M_$S**s8r>3(A1o%A
	s   <A A+B21B2c                 ,    || j                   z   | _         y r"   )r:  )r&   r:  s     r(   unrecvz_Unrecv.unrecv  s    >r+   N)r   T)r2   r3   r4   __doc__rE  r  r  r  r.   r+   r(   r  r  I  s    
2."r+   r  c                       e Zd Zd Zd Zd Zy)	CachedSetc                 .    i | _         || _        d| _        y rg  r  ri  rm  rn  s     r(   rE  zCachedSet.__init__  s    r+   c                 F    t        j                          | j                  |<   y r"   )rq  r  )r&   rA   s     r(   addzCachedSet.add  s    IIKq	r+   c                 ^   t        j                          }|| j                  z
  | j                  k  ry | j                  j	                         D ci c]  \  }}||z
  | j                  k  s|| c}}x}| _        	 |t        ||j                           | _        y c c}}w #  || _        Y y xY w)N)rv  )rq  rm  ri  r  rs  minrr  )r&   rw  r   rA   r  s        r(   clnzCachedSet.cln  s    iikt{{*'+vv||~Otq!q4;;9NadOODF	Cquu-.DK P	DKs   B*B;B! !	B,N)r2   r3   r4   rE  r  r  r.   r+   r(   r  r    s    
 	r+   r  c                       e Zd Zd Zd Zd Zy)
CachedDictc                 .    i | _         || _        d| _        y rg  r  rn  s     r(   rE  zCachedDict.__init__  s    r+   c                    t        j                          }||f| j                  |<   || j                  z
  | j                  k  ry | j                  j	                         D ci c]  \  }}||d   z
  | j                  k  s||  c}}x}| _        	 t        |j                         D cg c]  }|d   	 c}      | _        y c c}}w c c}w #  || _        Y y xY wNr   )rq  r  rm  ri  rs  r  ru  )r&   r   rA   rw  r  r   s         r(   setzCachedDict.set  s    iik!Hq	t{{*'+vv||~Rtq!qtdkk9QadRRDF	QXXZ8qt89DK S8	DKs*    B?>B?C
 &C2C
 C
 
	Cc                     	 | j                   |   \  }}t        j                         }||z
  | j                  kD  r| j                   |= y |S #  Y y xY wr"   )r  rq  ri  )r&   r   tsr@   rw  s        r(   rr  zCachedDict.get  sP    	ffQiGB))+CRx$++%FF1IJ	s   AA
 A
 
AN)r2   r3   r4   rE  r  rr  r.   r+   r(   r  r    s    

	r+   r  c                   @    e Zd Z G d de      Zd Zd Zd Zd Zd Z	y)	FHCc                       e Zd Zd Zy)FHC.CEc                 D    d| _         |g| _        t        |g      | _        y r  )r  fhsr  all_fhs)r&   fhs     r(   rE  zFHC.CE.__init__  s    DGtDHt9DLr+   N)r2   r3   r4   rE  r.   r+   r(   CEr    s    	%r+   r  c                      i | _         i | _        y r"   )r  apsrR  s    r(   rE  zFHC.__init__  s    
r+   c                     	 | j                   |   }|j                  D ]  }|j                           | j                   |= | j                  |= y #  Y y xY wr"   )r  r  r  r  )r&   pathcer  s       r(   r  z	FHC.close  sV    	D!B && 	BHHJ	 JJtHHTN	s   A Ac                    | j                   sy i }t        j                         }| j                   j                         D ]>  \  }}||j                  dz   k  r|||<   |j                  D ]  }|j                           @ || _         y )Nr   )r  rq  rs  r  r  r  )r&   keeprw  r  r  r  s         r(   cleanz	FHC.clean  sy    zziik

((* 	HD"RUUQYT
&& BHHJ		 
r+   c                 P    | j                   |   j                  j                         S r"   )r  r  pop)r&   r  s     r(   r  zFHC.pop  s     zz$##''))r+   c                 J   || j                   vrd| j                   |<   	 | j                  |   }|j                  j                  |       |j                  j                  |       t        j                         |_        y #  | j                  |      }|| j                  |<   Y >xY wr  )	r  r  r  r  r  r;   r  rq  r  )r&   r  r  r  s       r(   putzFHC.put  s    txxDHHTN	"D!BJJNN2FFMM"
 				"B!DJJts   AA> >"B"N)
r2   r3   r4   objectr  rE  r  r  r  r  r.   r+   r(   r  r    s'    %V %
*r+   r  c                       e Zd ZdZd Zd Zy)ProgressPrinterz<
    periodically print progress info without linefeeds
    c                     t         j                  j                  | d       d| _        || _        || _        d| _        d| _        d| _        y )NpprB  Tr   F)	rC  rD  rE  rH  r8  argsr  endn)r&   r8  r  s      r(   rE  zProgressPrinter.__init__  sE    !!$T!2	r+   c                 |   t                d}d }| j                  j                  }t        rdnd}| j                  st        j                  d       || j                  k(  s| j                  r=| j                  }t        j
                         }|r||z
  dkD  r|}| j                  d|d       |rt        |j                  |             t        rt        j                  j                          | j                  s|ry t        rt        dd	
       n|rt        d       t        j                  j                          y )Nr   z {}[Kz {} $r   
   z
progress: r  z[Kr   r  z------------------------)sigblockr  qr   r  rq  sleepr  r8  uprintr   r   r   stdoutr  r7  )r&   tpr  	no_stdoutr^   rw  s         r(   rS  zProgressPrinter.run  s    
IIKK	$m)((JJsOdhh$((((C))+CsRx"}30!43::c?#

  "! (($ (#,-

r+   N)r2   r3   r4   r  rE  rS  r.   r+   r(   r  r    s     r+   r  c                   ,    e Zd Zd Z	 	 	 ddZd Zd Zy)MTHashc                    d | _         d | _        d| _        d| _        d| _        dt
        xs ddk  rdndz  | _        t        j                         | _	        t        j                         | _
        t               | _        t               | _        g | _        t        |      D ]?  }t!        | j"                  dt%        |      z         }| j                  j'                  |       A y )Nr   Fr   rp  r      zmth-)r  r   szcszstop	RAM_AVAILreadszrC  rj  omuteximutexr
   work_qdone_qthrsranger@  workerr   r;   )r&   coresr  r   s       r(   rE  zMTHash.__init__)  s    	!9>Q*>QBGnn&nn&w'	u 	 At{{FSVO4AIIQ	 r+   Nc                    | j                   5  || _        || _        || _        i }t	        t        j                  ||z              }t        |      D ]  }	| j                  j                  |	        d}
t        |      D ]P  }	| j                  j                         }	 |\  }	}}}|||f||	<   |s0||	|z  z
  dz  }|t        |      z   |z   |_        R |
rt        |
      g }t        |      D ]  }|j                  ||           d | _        d| _        d| _        |cd d d        S #  |
xs t        |      }
Y xY w# 1 sw Y   y xY w)Nr   r   r   )r  r   r	  r
  r   mathceilr  r  r  r  rr  r   r  	Exceptionr;   )r&   r   fszchunkszr  prefixsuffixchunksnchunksnchr;  qedigr  r
  mbr@   r  s                     r(   hashzMTHash.hash9  sX    [[ !	DFDGDHF$))C'M23GW~ %$% BW~ 
7[[__&')+&Cc3#&S/F3K g-;?B#c"g-6BF
7 m#C7^ &

6!9%& DFDHDGC!	 !	 's2wB#!	 !	s+   BD:D$+D:.A,D:$D75D::Ec                     	 | j                   j                         }	 | j                  |      }| j
                  j                  |       H# t        $ r}t	        |      }Y d }~5d }~ww xY wr"   )r  rr  hash_atr  r   r  r  )r&   r  rA   r;  s       r(   r  zMTHash.workere  sZ    ++//#CLL% KKOOA   Gs   A
 
	A(A##A(c                    | j                   }|| j                  z  x}}t        | j                  | j                  |z
        x}}| j                  r|d||fS t        j                         }|dkD  r| j                  5  |j                  |       |j                  t        || j                              }d d d        st        dt        |      z         |j                  |       |t        |      z  }|t        |      z  }|dkD  r|j                         d d }	t!        |	      j#                  d      }
||
||fS # 1 sw Y   xY w)Nr   r   zEOF at !   rY   )r   r
  r  r	  r  hashlibsha512r  seekr   r  r  r   updater  digestr%  r\   )r&   r   r   r  ofs0chunk_sz	chunk_remhashobjr:  bdigudigs              r(   r&  zMTHash.hash_ato  s$   FF488^#d"488TWWs];;999D(**.."!m :sffSDKK89: 	CH 455NN3S!I3s8OC !m ~~$t}##G,D$((: :s   :7D88E)Nr   r   )r2   r3   r4   rE  r$  r  r&  r.   r+   r(   r  r  (  s"     * *X)r+   r  c                       e Zd Zd Zd Zd Zy)HMaccasc                    || _         i | _        	 t        |d      5 }|j                         | _        t        | j                        dk7  r
t               	 d d d        y # 1 sw Y   y xY w#  t        j                  d      | _        t        |d      5 }|j                  | j                         d d d        Y y # 1 sw Y   Y y xY wxY w)Nr   @   wb)
retlenr  r   r   rv  r  r  osurandomwrite)r&   keypathr9  r   s       r(   rE  zHMaccas.__init__  s    
	"gt$ &668txx=B&#+% '& & &	"zz"~DHgt$ "!" " "sF   A* 8AA* A'#A* 'A* *(CB8.C8C	=CCc                 X   	 | j                   |   S #  t        | j                         dkD  ri | _         t        j                  | j                  |t
        j                        j                         }t        |      d | j                   j                  d      }|| j                   |<   |cY S xY w)Nr  rY   )r  r  hmacnewrv  r)  r*  r-  r%  r9  r\   )r&   r  zbr   s       r(   r   z	HMaccas.b  s    		::c?"	4::%
$((C8??AB]t{{+227;B DJJsOIs
    BB)c                 D    | j                  |j                  dd            S )Nrg   r   )r   encode)r&   r  s     r(   r  z	HMaccas.s  s    vvcjj)455r+   N)r2   r3   r4   rE  r   r  r.   r+   r(   r5  r5    s    "
6r+   r5  c                       e Zd Zd Zd Zy)Magicianc                 R    d| _         t        j                         | _        d | _        y NF)	bad_magicrC  rj  rk  magicrR  s    r(   rE  zMagician.__init__  s    ^^%

r+   c                    	 | j                   r
t               | j                  s>	 | j                  5  | j                  st        j                  dd      | _        d d d        | j                  5  | j                  j                  |      }d d d        j                  d      d   }t        j                  ||      }d|vr|S t        j
                  |d      }t        j                  d|d	
      d   }	 t        |   S # 1 sw Y   xY w#  d| _          xY w# 1 sw Y   xY w#  d}Y xY w#  Y nxY wt        j                  |      }|r|d	d  S t               )NFT)
uncompress	extensionr
  r  r   r   z[; ]r   )maxsplit)rH  r  rI  rk  Magic	from_filer:   	MAGIC_MAPrr  r   EXTS	mimetypesguess_extension)r&   fpathr@   r   mgs        r(   r   zMagician.ext  s>   	~~k!:: W#zz).QU)VDJW  2jj**512
 iinQmmC%c>Ju40xxq1!4	:)W W%)DN2 2	C	&&t,ab6M+s]   "D# D
 )C>D
 "D# .D
D# 5D, >DD
 

DD# D D# #D),D0N)r2   r3   r4   rE  r   r.   r+   r(   rE  rE    s    
#r+   rE  c                   *    e Zd ZdZddZd Zd Zd Zy)Gardaz!ban clients for repeated offensesc                 (   || _         	 |j                         j                  d      \  }}}t        |      | _        t        |      dz  | _        t        |      dz  | _        i | _        i | _        d| _	        y #  dx| _        x| _        | _        Y /xY w)N,<   r   )
uniqr   r:   r   limwinpenctprevlast_cln)r&   cfgr\  r_   r   r  s         r(   rE  zGarda.__init__  s    		/iik'',GAq!1vDH1v{DH1v{DH 		/-..DH.tx$(s   AA8 8Bc                 .   d}t        t        j                         | j                  z
        }| j                  |   D ]  }||k  r|dz  } n |r@| j                  |   |d  }|r|| j                  |<   y | j                  |= 	 | j                  |= y y #  Y y xY w)Nr   r   )r   rq  r^  r`  ra  )r&   rU   r  okrA   tes         r(   r  z	Garda.cln  s    txx'( 	A2vQ		
 QRB GGBK		" s   B Bc                     t        | j                        D ]  }| j                  |        t        t	        j                               | _        y r"   )r  r`  r  r   rq  rb  )r&   r   s     r(   allclnzGarda.allcln  s8    dgg 	AHHQK	 DIIK(r+   c                 Z   | j                   sd|fS d|v rt        |      j                  d d }|r=| j                  r1| j                  j                  |      |k(  rd|fS || j                  |<   t        t        j                               }	 | j                  |   j                  |       || j                  z
  dkD  r| j                          n| j                  |       t        | j                  |         | j                   k\  r|| j                  z   |fS d|fS #  |g| j                  |<   Y xY w)Nr   r  ,  )r]  r   explodedr\  ra  rr  r   rq  r`  r;   rb  rh  r  r  r_  )r&   rU   ra  rw  s       r(   bonkz
Garda.bonk  s    xxb5L"9R))$3/BDIIyy}}R D("u DIIbM$))+	 GGBKs# $KKMHHRLtwwr{txx'>2%%b5L	 %DGGBKs   
D D*Nr  )r2   r3   r4   r  rE  r  rh  rm  r.   r+   r(   rX  rX    s    +&)r+   rX  )r5   re   c                     t        j                         }| D cg c]"  }t        |d      r|j                  |d      n|$ } }t	        | g|i |S c c}w )Nr\   r   )r   getfilesystemencodinghasattrr\   _popen)r  r_   rF  encr   s        r(   _spopenrs    sW    '')NOPH)=QXXc9%1DPPa"!"r"" Qs   'Ac                     	 t        | d       y # t        $ rb 	 t        | j                  dd      j                         d       Y y #  t        | j                  dd      j                         d       Y Y y xY ww xY w)Nr   r  rg   r   rY   )r7  UnicodeEncodeErrorrC  r\   r  s    r(   r  r  &  sp    Ccr C	C#**Wi0779rB	C#**Wi0779rBB	Cs     	A;+A-A74A;7A;c                      t        | d       y )Nr   )r  rv  s    r(   nuprintrx  0  s    
S?r+   c                    d}| j                  dd      j                  d      }|D ]4  }|j                         }t        |      t        |      z
  }|s-||kD  s3|}6 dj	                  |D cg c]  }||d  	 c}      S c c}w )Nr7  r   r   )r   r:   lstripr  r   )txtpadlnsr   r   pad2s         r(   dedentr  4  s    
C
++dB

%
%d
+C YY[2wR #*C	
 99-2bh-..-s   ,A?c                      t        j                         j                  } t        dt	        d|       dd        }dj                  d |D              dz   S )Ns   BBBBBs   >Qr   c              3   >   K   | ]  }d j                  |        yw)z[1;37;48;5;{0}m{0:02x}N)r   r  s     r(   r   zrice_tid.<locals>.<genexpr>B  s     Ea/66q9Es   z[0m)rC  current_threadidentrc   r`   r   )tidr  s     r(   rice_tidr  ?  sJ    

"
"
$
*
*C%s+BC01A77E1EE	QQr+   c                  P   t        j                          }dj                  d t        j                         dd D              }d|fz  t	               |g}| r|j                  t        |              |r|j                  t        |             dj                  |      }t        |       y )Nr   c              3   ~   K   | ]5  }d |d   j                  t        j                        d   dd d|d    7 yw)z[36mr   r  N[33mr   )r:   r:  sepr  s     r(   r   ztrace.<locals>.<genexpr>G  s>       #$A$**RVV"4R"8""=qtDs   ;=r5   r  z%.6fz[0m )rq  r   	tracebackextract_stackr  r;   reprrx  )r  kwargsr   stackpartsr  s         r(   tracer  E  s    		AGG ((*1R0 E qd]HJ.ET$Z T&\"
//%
 CCLr+   c            	      j   i } t        t        j                         D cg c]  }|j                  |j                  f c}      }t        j                         j                         D ]   \  }}d|j                  |      |fz  }|| |<   " g }g }t        | j                               D ]  \  }}d|g}d }	t        j                  |      D ]  \  }
}}}t        j                  j                  |
j                  t        j                        dd        }
|j!                  d|
||fz         |sa|j!                  dt#        |j%                               z          d|v sd}	 |	r!||d   g|d	d  D cg c]  }|	|z   	 c}z   z  }|j'                  |        d
j                  ||z         d
z   S c c}w c c}w )Nz%s (%x)z

# r  zFile: "%s", line %d, in %sz  zself.not_empty.wait()z    r   r   r   )dictrC  	enumerater  r   r   _current_framesrs  rr  rt  r  r  r:  r  r   r:   r;   r   r   extend)threadsr   namesr  r  r   rretbretr@   r}  fnlnoliner   s                 r(   alltracer  X  s   GY-@-@-BC177AFF#CDE))+113 
UEIIcNC00 DDgmmo. e!#$#,#:#:5#A 	"BT4RXXbff-bc23BJJ3r3oEF

4#djjl"334*d2!C	" SVHQR9Aa999DKK  99TD[!D((/ D&  :s   F+-F0
c                     |rdj                  |      nd}| j                  dd      \  }}t        |      }t        t        d|z   |||f       y )Nz-{}r   rZ  r   stackmon)r   rsplitr   r@  r  )arg_strnidr  fpr   zis         r(   start_stackmonr  t  sI    "%U\\#2FNN3"EB	QB
8Z&(2r6*:;r+   c                    d}| }	 |dz  }|} t        j                  |       dj                  |t        j                          t                     }|j	                  dd      }| j                  d      rt        j                  |d      }n(| j                  d	      rdd l}|j                  |d
      }d| v rKt        j                  t              }dD ]-  }	d|	z   }	|	| v s| j                  |	|j                  |	            } / d| v r)	 t        j                  | j!                  dd      d          t#        | |z   d      5 }
|
j%                  |       d d d        S#  Y /xY w# 1 sw Y   xY w)Nr   r   z	{}, {}
{}rg   r   z.gzr  )compresslevelz.xz)preset%YmdHMSr  r8  )rq  r   r   r  rC  endswithr   compresslzmar   rw  r-   r   strftimer:  makedirsr  r   r<  )r  ivalr  ctrfp0str:  r  r'   fsr   s              r(   r  r  {  sN   
C
C
q

4  diik8:>ii+;;u --15C[[ --A-.C"9c"B 92X8BB8B9
 "9BIIc1-a01 "v+t$ 	GGCL	A :	 	s   (E =E E E)c                     t        |      }dx}}|r)dj                  |t        j                               }|dd  }t	        t
        || ||f       y )Nzlog-thrszlogthr-n{}-i{:x}r5   )floatr   r:  getpidr@  log_thrs)loggerr  r  tnamelnames        r(   start_log_thrsr    sP     ;DEE
"))#ryy{;ab	
8UVT512r+   c                     	 t        j                  |       t        j                         D cg c]  }|j                   }}|D cg c]E  }|j                  d      s2|j                  d      d   dv r|j                  d      d   nd|v rdn|G }}t        t        |      j                               D cg c]  \  }}dj                  ||       }}} | |dj                  |      d	       c c}w c c}w c c}}w )
Nzpydevd.-r   )httpconnthumbtaggerz-listen-listenz	{}[36m{}z
[0m [33mr5   )rq  r   rC  r  r   r  r:   rt  r   rs  r   r   )r8  r  r   r   tvr   rA   s          r(   r  r    s    


4'1134aff44 
 <<	* wws|A"AA GGCLO Q 	
 
 7=WR[=N=N=P6QRdan##Aq)RRD$))"-q1 4
 Ss   C0A
C57C:c                      t         st        ry t        j                  t        j                  t        j
                  t        j                  t        j                  g       y r"   )r   r   rL  rM  rN  rO  rP  rQ  r.   r+   r(   r  r    s6    
6==&..&..Ir+   c                    |}| D ]5  }|j                   j                  d      }|j                  j                  d      }|j                  j                  d      }d|z   dz   }|j	                  ||      }|j	                  ||      }|j	                  |j	                  dd      |      }|j	                  |j	                  dd      |      }|j                  |j
                  k7  s|j
                  j                  d      }d|z   dz   }	|j	                  ||	      }|j	                  |j	                  dd      |	      }8 ||k7  r|dz  }|S )Nrg   s   $hist(/   )   \   \\s   $db(/s=   
NOTE: filepaths sanitized; see serverlog for correct values)realpathrC  histpathvpathr   dbpath)
volsr|  txt0volbapbhpbvpbvphbdpbdphs
             r(   vol_sanr    s/   D All!!'*ll!!'*iiw'C$&kk#s#kk#t$kk#++eW5s;kk#++eW5t<<<3::%**##G,Cc>D(D++c4(C++ckk%94@CA" d{QQJr+   c                    t        j                         \  }}}|rt        j                  |      nt        j                         d d }d}|D 	
cg c]0  \  }}}	}
||j                  t        j                        d   ||	|
fz  2 }}	}}}
|s|s|r%|j                  d|r|j                  ndd|       dj                  ||  d  d d |r	d         S d         S c c}
}	}}w )Nr  z%s:%d <%s>: %s[z(anonymous)z] r   r   )r   exc_infor  
extract_tbr  r:   r:  r  r;   r2   r   )	max_linesr  etevtbstbr^   r  r   rG  r|  r;  s               r(   min_exr    s    JBB&()

r
"i.E.E.G.LC
CMP	Q	Q9IRc#"&&!"%r34
4	QB	Q	R2
		br{{mCRHI99R
_%<g%<=>>1%<=>> 
Rs   5C
c                    |j                  dt              }|j                  dd       }|j                  dd       }|j                  dd       }|xr d|v }| t        j                  k(  r || g|i || fS |r*| j	                  d      d   }t        |      dk  r|d|z   z  }| }	| }
d	}	 |
j                  d      }|dk  s|t        |
      dz
  k  rn|
|d  |z   }|
d | }
6d}d	}	 d }	 |r!t        j                  j                  ||       }n| }|r7t        j                  j                  t        |            r||z  }| |z  } ||z  } |t        |      g|i |}|rrd|d}t        j                  j                  ||      }t        t        |      d      5 }|j                  |	j                  d             |rt        ||       d d d        |rt        ||       || fS # 1 sw Y   xY w# t        $ r}|}|r|j                          |j                   t         j"                  t         j$                  fv rc|sad
}g }|
| fD ]K  }|j                  dd      j'                  d      }t)        j*                  dd|      }|j-                  |       M |\  }
} Y d }~|j                   t         j.                  t         j0                  t         j2                  fvr$t4        r|j                   t         j"                  k7  r Y d }~nd }~ww xY w|sU|	d|j                  dd      }t7        t9        j:                  |      j=                         d d       j'                  d      }t        |       }t        |       |k\  rkt        |
      dk  r|t        |
      t        |      kD  r|
d d }
n&	 |j	                  dd      \  }}n#  d|dd  z   }Y nxY w|
d||} t        |       |k\  rk)NrG  fdirr  vffpermsr   r  r6   r   Tr   Fz	fn-trunc.z.txtr8  rg   rY   r   z[^][a-zA-Z0-9(){}.,+=!-]_r   r  re   r   rp  ~)r  r   r:  devnullr:   r  rfindr  r   lexistsfsencr<  rC  
set_fpermsr  r  r=   EINVALEPERMr\   r   subr;   ENAMETOOLONGENOSRENOTSUPr   r%  r)  r*  r-  )fnamer  r  rG  r  r  r  r  r   	orig_namebnamer  	asciifiedb64r   rU  fp2f2ex_r;  r   r   badlenr  s                           r(   ren_openr    s   
**UD
!C::fd#DZZ$'F	D$	B"HNF

5*4*6*E11kk#r"s8a<cCiFIE
C
kk#7cCJN*CDkCds  I
C
-	T51"''//%,7vE%L24262A+.0ggll4-%*d+ +rHHY--g67"2r*+
 1b!e8O+ +  	B	 xxELL%++66y 	 %. #B7I6==gFB ;S"EBJJrN#  #u xx 2 2EKKOOrxx5<<7)	, '088)LB'..,335cr:;BB7KCU%jF"5zA~5zCH$cr
( YYsA.FAs(AB-C!&S1E %jF"m sE   'B0G, /G G,  G)%G, ,
L6BK=AK==L#N9 9
Oc                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
MultipartParserc                     || _         || _        || _        || _        t        | _        t        | _        t        | _	        t        | _        d| _        d | _        y r  )srr8  r  headersRE_CTYPEre_ctypeRE_CDISPre_cdispRE_CDISP_FIELDre_cdisp_fieldRE_CDISP_FILEre_cdisp_fileboundarygen)r&   r  r  r  http_headerss        r(   rE  zMultipartParser.__init__Q  sL     	#  ,*JNr+   c                 F   t        | j                  dd      D ]  }| j                  t        |             | j                  j                  |      }|r/|j                  d      j                         dk(  rt        dd      j| j                  j                  |      }|s|j                  d      j                         dk7  rt        ddj                  |            	 | j                  j                  |      j                  d      }	 | j                  j                  |      j                  d      }	 d| j                  d   j                         v }|r||j                  d      d   fc S |j                  d      d   j                  d      s||j                  d      d   fc S d}d}|D ])  }|rd}|dvr|dz  }||z  }|dk(  rd}|dk(  r n||z  }+ ||fc S  t        dd      #  t        dd	j                  |            xY w#  |d
fcY c S xY w#  d}Y xY w)a1  
        returns [fieldname, filename] after eating a block of multipart headers
        while doing a decent job at dealing with the absolute mess that is
        rfc1341/rfc1521/rfc2047/rfc2231/rfc2388/rfc6266/the-real-world
        (only the fallback non-js uploader relies on these filenames)
        rp  i ' r   zmultipart/mixedrr   z;you can't use that browser to upload multiple files at oncez	form-dataznot form-data: {}zmissing field name: {}Napplewebkitz
user-agentF"r   \r   )r  r  Tz9server expected a multipart header but you never sent one)read_headerr  r8  r  r  r   r   lowerPebkacr  r   r	  r  r  r:   r  )	r&   r   r   fieldr  	is_webkitr@   escchs	            r(   _read_headerzMultipartParser._read_headeri  sD    dggq'2 C	BHHT"X##B'A771:##%):: !U 
  ##B'Awwqz![0S"5"<"<R"@AAG++11"5;;A>#''--b177:
")T\\,-G-M-M-OO	
  bhhsmA... 88C=#,,T2bhhsmA...
 CC C,t2IC4ZC3Y2IC #:GC	J SUVVYGS":"A"A""EFF#d{""!	s$   *G-	*H4H-H
HH c              #     K   t        | j                        }| j                  j                  }	 	 | j                  j                  |      }	 |j                  | j                        }|dk7  r)| j                  j                  |||z   d         |d |  y t        |      |z
  }|dkD  r|d |  ||d  }d}t        dt        |      dz         D ]  }|| d  | j                  vs|dz  } n |dk(  s| j                  j                  || d        sn.||k(  r	|d |   y 	 || j                  j                  |      z  }| #  t        dd      xY w#  t        dd      xY ww)Nrr   z client d/c during multipart postr  r   r   )r  r  r  s_rd_szr  r  r  r   r  r  r  )r&   blenbufszr:  r  dr  s          r(   
_read_datazMultipartParser._read_data  s    4==!		!!Fggll5)
 hht}}-"9GGNN3sTz|#45ds)OHtOq5 bq'Mab'C q#c(Q,/ Ars8t}}4Q
 6!9!9#qbc(!C19cr(NJ477<<..C? H IW FS"DEEDJ &HIIs;   -E'E BE'$;E' E >E'EE'E$$E'c              #   .  K   d}|r| j                         \  }}||| j                         f | j                  j                  dd      }|dk(  r| j                  j                  dd      }d}|dk7  rd}t	        d|j                  |            |ryyw)	zu
        yields [fieldname, unsanitized_filename, fieldvalue]
        where fieldvalue yields chunks of data
        Trp  F   --   
z8protocol error after field value: want b'\r\n', got {!r}rr   N)r  r   r  r  r  r   )r&   rS  	fieldnamefilenametailr   s         r(   _run_genzMultipartParser._run_gen  s      "&"3"3"5Ixh(9::77??1e,Du}wwq%0wPS!((4.11 s   BBBc                 V    d}|D ]!  }||z  }t        |      |kD  st        dd       |S )Nr+   ry   zfield length is too long)r  r  )r&   iterablemax_lenr@   r:  s        r(   _read_valuezMultipartParser._read_value  s@     	>C3JC3x'!S"<==	>
 
r+   c                 l   t        | j                        }| j                  d|       d|j                  d      z   | _        | j                         D ]6  }|s|j                  dd      }| j                  dt        |      |fz         8 d| j                  z   | _        | j                         | _	        y )Nz	boundary=r"  rg   r   zdiscarding preamble |%d| %rr#  )
get_boundaryr  r8  rC  r  r   r\   r  r'  r  )r&   r  junkjtxts       r(   parsezMultipartParser.parse  s    -(,-  88 OO% 	HD;;w	2DHH2c$i5FFG	H  $--/==?r+   c                     t        | j                        \  }}}||k7  rt        ||||      | j                  ||      j	                  dd      S )z
        returns the value of the next field in the multipart body,
        raises if the field name is not as expected
        rg   r   )r   r  WrongPostKeyr+  r\   )r&   
field_namer*  p_fieldp_fnamep_datas         r(   requirezMultipartParser.require  sR    
 $(> &j z7GVDD077ARSSr+   c                 <    | j                   D ]  \  }}}|D ]  }  y)z%discards the remaining multipart bodyN)r  )r&   r  datas      r(   dropzMultipartParser.drop&  s-    (( 	JAq$ 	r+   N)r2   r3   r4   rE  r  r   r'  r+  r0  r7  r:  r.   r+   r(   r   r   P  s0    O0LW\.`2.#(	Tr+   r   c                     d}| d   }t        j                  ||t         j                        }|st        ddj	                  |            |j                  d      S )Nz1^multipart/form-data *; *(.*; *)?boundary=([^;]+)zcontent-typerr   z-invalid content-type for a multipart post: {}rp  )r   r   
IGNORECASEr  r   r   )r  ptnr`  r   s       r(   r-  r-  -  sT     ?C		 B
b"--(ASIPPQSTUU771:r+   c           	         t        j                          }d}	 t        j                          |z
  |k\  rg S 	 || j                  d|dz        z  }|j	                  d	      }|d
k  rt        |      dkD  rt        dd      gt        |      |dz   kD  r| j                  ||dz   d         |d | j                  dd      j                  d      j                  d      S #  |sg cY S t        dd|j                  dd            xY w)Nr+   r   rp  rr   z$protocol error while reading headersrg   r   )r8  s   

r      zheader 2big   r   z
)	rq  r  r  r\   r   r  r  r{  r:   )r  t_idlet_tott0r@   r  s         r(   r  r  9  s   	B
C
99;u$I
	27741--C hh{#73x)#S-00s8cAgIIc#')n%4Cy):;BB6JPPQWXX)		6JJw	2 s   C C?!C?c           
         d}	 d|j                  dd      d   z   }t        d      D ]  }t        d      D ]  }|r ||z   }dd|z  z   dz  }t        t        j                  |            }	|	d | j                  d      |z   }t        j                  j                  t        t        j                  j                  | |                   }  |S #  d}Y xY w)	NFr   r   r   r  r  re   rY   )
r  r  r%  r:  r;  r\   r  existsr  r   )
r  r  rndre  r   extrar  ncnbrA  s
             r(   	rand_namerJ  Y  s    	BBIIc1%a(( r 	Cr 	CAuBa"f*"BB(BCR(3.BWW^^E"'',,tR*@$ABBB	C	C Is   C Cc                     | dk(  r|d|d|d|}n|d|}|j                  dd      }t        t        j                  |      j	                               j                  d      S )Nr   r   rg   r   rY   )rC  r%  r)  r*  r-  r\   )algsaltfspathfsizeinoder   rA  s          r(   _gen_filekeyrQ  n  sY    
ax"FE59f%	7I	&B7>>"%,,./66w??r+   c                 @    t        | ||j                  dd      ||      S )Nr  r  )rQ  r   )rL  rM  rN  rO  rP  s        r(   _gen_filekey_wrS  x  s     T6>>#t#<eUKKr+   c           	      D   t        | ||||      }|j                  |      r^	 dd ldj                  fdt	        dd      D              }d}		 t        |      }	|	|k7  r
t               	 d
}
 ||
|d d |||||fz  d       |S #  d}Y =xY w#  d}
 ||
||	fz  d	       Y 6xY w)Nr   rZ  c              3   X   K   | ]!  }j                         |   j                   # y wr"   )r  function)r   r  inspects     r(   r   z"gen_filekey_dbg.<locals>.<genexpr>  s"     L17==?1-66Ls   '*rp  r   r   r_   z2maybe wrong abspath for filekey;
orig: %r
real: %rr   z4fk(%s) salt(%s) size(%d) inode(%d) fspath(%r) at(%s)re   )gen_filekeyr   rW  r   r  absrealr  )rL  rM  rN  rO  rP  r8  log_ptnr@   ctxp2r   rW  s              @r(   gen_filekey_dbgr]    s     c4
6C~~f	((LaLLC 	%BV|k!  CARa$ufc::A>J	C	%FAVRL !$s   (B B BBzMon Tue Wed Thu Fri Sat Sunz/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Decz#%s, %02d %s %04d %02d:%02d:%02d GMTc           	          t        j                  |       \	  }}}}}}}}}t        t        |   |t        |dz
     ||||fz  S Nr   )rq  gmtimeRFC2822WKDAYSMONTHS)	r  ymor  hmir  wdr  s	            r(   
formatdateri    sH    #';;r? Ar1aQAqfRj!VBF^Q2qAAAr+   c                     |j                  dd      j                  dd      }|r!t        t        j                         |z         }nd}d}|| ||||rdnd||rd	fz  S d
fz  S )Nr  z%25;z%3BzFri, 15 Aug 1997 01:00:00 GMTz,%s=%s; Path=/%s; Expires=%s%s%s; SameSite=%sz; Securer   LaxStrict)r   ri  rq  )	r   rA   rJ  laxtlsdurr|  expr   s	            r(   	gencookierr    s     	
		#u%%c51A
s*+-6A			
r   #  r+   c                     t         D ]  }| dk  r n| dz  }  |r$t        |       d d j                  d      d d S t        |       d d j                  d      dS )Nr   g      @r@  r   r   r   )HUMANSIZE_UNITSr   rstrip)r	  terseunits      r(   	humansizerx    so     9
f	 R!++C0$r(;;b'"1+,,S1488r+   c                     	 t        |       S #  Y nxY w| dd  j                         }t        j                  |d      }t        t	        | d d       |z        S )Nr  r   )r   r  UNHUMANIZE_UNITSrr  r  )r	  mcrg  s      r(   
unhumanizer|    sW    2w	BCB			b!	$BuRW~"##s   
 c                    |t        j                          }| ||z
  xs dz  }t        |       j                  dd      j                  dd      }t        |      j                  dd      j                  dd      }|d|dS )	NMbP?r   r  iBr   z[35mz [0mz/s[0m)rq  rx  r   )nbyterC  r   bpss1s2s         r(   get_spdr    sw    yIIK
AF$u
%C	5		!	!#z	2	:	:4	DB	3		Z	0	8	8r	BB&("--r+   c                 z    t        |       } t        | d      \  }} t        | d      \  }} |s	|rd|| fz  S d||| fz  S )N  r[  z%d:%02dz%d:%02d:%02d)r   divmod)r  
optional_hrf  r   s       r(   s2hmsr    sN    AA!T?DAq!R=DAqAq6!!Q1I%%r+   c                  f    t        j                  j                  | D cg c]  }|s|	 c} S c c}w )z3joins without adding a trailing slash on blank args)r:  r  r   )pathsr   s     r(   djoinr    s%    77<<U0a!0110s   ..c                     t        |       dk  s| j                  d      s| S t        |       dkD  r
| d   dk7  r| S | d   d| dd  S )Nrp  r  r   z:\r5   )r  r  )r  s    r(   uncygr    sL    
4y1}DOOC0
4y1}aCQab**r+   c                     g }| j                  d      D ]3  }|dk(  s|s|dk(  r|r|j                          #|j                  |       5 dj                  |      S )Nr  r   z..)r:   r  r;   r   )r  r@   nodes      r(   undotr    s\    C

3 	3;d4<	

4	 88C=r+   c           
         d|vr$| j                  dd      j                  d      d   } t        rddgddgdd	gd
dgddgddgddgddgddgg	}|D cg c]  }|d   |vs| c}D ]  \  }}| j                  ||      }  g d}t        dd      D ]  }|d|d|j                  d      z  } | j	                         j                  d      d   |v rd| z   } | j                         S c c}w )Nr  r  r  r  u   ＜>u   ＞r  u   ：r  u   ＂u   ／u   ＼|u   ｜r
  u   ？*u   ＊r   )conprnauxnulr   r  comz lptr   r   r  )r   r:   r   r  r  r   )r  re  remapr   r_   r   badr  s           r(   sanitize_fnr    s   
"}ZZc"((-b1%L%L%L%L%L5M%L%L%L

 !&811RQ8 	"DAqAq!B	" +q" 	7AQ*11#66C	7 88:C #s*rB88: 9s   C&C&c                     | j                  t        j                  d      j                  d      }|D cg c]  }t	        ||       }}dj                  |      S c c}w Nr  )r   r:  r  r:   r  r   )vpre  r  r   r@   s        r(   sanitize_vpathr  )  sN    JJrvvs#))#.E',
-!;q"
-C
-88C= .s   Ac                     d| v ryt         r6d| v sd| v ryt        j                  dd|       }|| k7  rdj                  |      S y)	N z[nul]r   rz  zx
xz[\\:*?"<>|]r   z[{}])r   r   r  r   )rpr   s     r(   relchkr  /  sJ    |2:FF>2r*7==##r+   c           	      4   	 t        t        j                  j                  t        j                  j	                  t        |                         S #  t        s t        j                  j                  t        j                  j	                  |             cY S xY wr"   )fsdecr:  r  abspathr  afsencr   )rU  s    r(   rY  rY  >  sc    	8RWW__RWW%5%5fUm%DEFF8
 wwrww//677s   AA ABc                     	 | j                  dd      j                  dd      S #  | j                  dd      j                  dd      cY S xY w)Nrg   xmlcharrefreplacer   )rC  r\   r|  s    r(   u8safer  K  sM    Izz'#67>>w	RRIzz'9-44WiHHs	   !$ $A
c                 t    | D cg c](  }|j                  d      d   j                  d      r'|* c}S c c}w )Nr  r  r   )r:   r  )	filepathsr   s     r(   exclude_dotfilesr  R  s0     I!R(8(C(CC(HAIIIs   (55c                 r   |j                  d      D cg c]  }|s|	 }}|dd  j                  d      D cg c]  }|s|	 }}| j                         }|j                  d      r|D ]  }d||<   	 |S |d d dv r|D ]  }|j                  |d         |S t	        j
                  |d      }|S c c}w c c}w )NrZ  r   +T)r  r  )r:   copyr  r  ODictfromkeys)baseothr   words0words1r@   r   s          r(   odfusionr  V  s     3-A1a-F-QRs+1Aqa1F1
))+C
~~c 	ACF	 J 
RaJ	 	AGGAt	
 J nnVT*J .1s   B/B/B4 B4c                 >    d| v rt        |       j                  d d S | S )Nr  rj  )r   rl  )rU   s    r(   ipnormr  j  s%    
by2''--Ir+   c                 l    g }| D ]+  t        fd|D        d       }|s|j                  |       - |S )Nc              3   V   K   | ]   }|j                  d z         s|k(  s| " yw)r  N)r  )r   r   rU   s     r(   r   zfind_prefix.<locals>.<genexpr>u  s&     J!R#X(>"'AJs   )))r   r;   )r  r  r@   hitrU   s       @r(   r  r  r  s>    
C JuJDQJJsO Jr+   c                     t        j                  t        d|       j                  dd      } | j                  dd      j                  dd      } | S )Nr  r   z%20rz  r   )r   r  
RE_HTML_SHr   r  s    r(   html_sh_escr  {  sC    
z3"**36A			$$$T3/AHr+   c                 f    | j                  dd      j                  dd      j                  dd      S )Nr  z\u003cr  z\u003e&z\u0026r   r  s    r(   	json_hescr    s-    99S)$,,S)<DDS)TTr+   c                     | j                  dd      j                  dd      j                  dd      } |r"| j                  dd      j                  d	d
      } |r"| j                  dd      j                  dd      } | S )zhtml.escape but also newlinesr  z&amp;r  z&lt;r  z&gt;r  z&quot;'z&#x27;rz  z&#13;r   z&#10;r  r  quotcrlfs      r(   html_escaper    sq    			#w''V4<<S&IAIIc8$,,S(;IIdG$,,T7;Hr+   c                     | j                  dd      j                  dd      j                  dd      } |r"| j                  dd      j                  d	d
      } |r"| j                  dd      j                  dd      } | S )zhtml.escape but bytestrings   &s   &amp;   <s   &lt;   >s   &gt;   "s   &quot;   's   &#x27;   s   &#13;   
s   &#10;r  r  s      r(   html_bescaper    sq    			$!))$8@@wOAIIdI&..tY?IIeX&..uh?Hr+   c                 n    | syt        |       }t        |d      }t        |j                  dd            S )+url quoter which deals with bytes correctlyr      /safe       +)w8encquotew8decr   r|  btxtr  s      r(   _quotep2r    s3    :DD!DdD)**r+   c                     | syt        |       }t        |d      j                  d      }t        |j	                  dd            S )r  r   r  r  rg   r  r  )r  r  rC  r  r   r  s      r(   _quotep3r    s>    :DD!((1DdD)**r+   sC   ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.-~/   z%%%02Xr  r  c                     | syt        |       }|j                  t              r(t        }dj	                  |D cg c]  }||   	 c}      }t        |      S c c}w )r  r   r+   )r  ru  _uqsb_uqtlr   r  )r|  r  lutr  s       r(   	_quotep3br    sN    Sz;;uC88t4SW45DT{ 5s   A0123456789ABCDEFabcdefc                 F   t         }t        | j                  d            }t        |      g}|D ]`  }|j	                  |d d       }|#|j                  d       |j                  |       <|j                  |       |j                  |dd         b dj                  |      S )N   %rp  r+   )_hex2biterr:   r   rr  r;   r   )r  h2br  r@   itemr  s         r(   unquoter    s    TZZ%&E{m 	%DRa!Ay

4 

4 

1

48$	% xx}r+   )quote_from_bytes)r  )r  c                 D    t        |       }t        |      }t        |      S )z-url unquoter which deals with bytes correctly)r  r  r  )r|  r  unq2s      r(   unquotepr    s    :D4=D;r+   c                     | rQ|rOd| v r| j                  dd      nd| f}d|v r|j                  dd      nd|f}|d   |d   k7  rn|d   } |d   }| r|rO| rd| dnd|rd|dfS dfS )z@
    input("q/w/e/r","a/s/d/e/r") output("/q/w/","/a/s/d/")
    r  r   r   r   r  )vp1vp2zt1zt2s       r(   vrootsr    s     #$'3Jcjja RI$'3Jcjja RIq6SV!f!f # #C# $' r+   c                 6    d| vrd| fS | j                  dd      S )Nr  r   r   r  r  s    r(   vsplitr    s%    
%5y<<Qr+   c                 &    | r
|r| dz   |z   S | xs |S r  r.   rdr  s     r(   vjoinr    s    	bCx"}xRr+   c                 b    | r(|r&| j                  d      dz   |j                  d      z   S | xs |S r  )ru  r{  r  s     r(   ujoinr  	  s0    	byy~#biin44xRr+   c                     | sy| j                         } | j                  d      }| j                  d      }|s|sd| fS d| dd  fS |sd| d d fS d| dd fS )	Nr   r   ^$r   rp  r5   r  r@  )r  r  r  )r|  r_   r   s      r(   
str_anchorr  		  sq    
))+CsASAc6M#ab'z#cr({c!Bi<r+   c                 t    |\  }}	}
\  }}d} | |||||
||	|
||
|j                   |j                   ||fz         y )Nzreloc %s:
old ap %r
new ap %r[36m/%r[0m
old vp %r
new vp %r[36m/%r[0m
old fn %r
new fn %r
old vfs %r
new vfs %r
old rem %r
new rem %rr   )r8  r   pmr9  r  r  vnremnapnvpnfnnvnnremr   s                 r(   	log_relocr  	  sO     "$Cc;C 	jARS#r3Rbhh		3PTUUVr+   c                    d}t         j                  j                  |      }t        |      \  }}|j	                  d      r|d   }|}|df|dffD ]>  \  }}||vr||   j                  t         j                  d      }|j                  d      r|}	nX|dk(  rt        t        ||            }	n=t         j                  j                  t         j                  j                  ||            }	|dk(  r|	j                  d      }|	j                  dt         j                        }	| j                  D ]^  \  }
}|	j                  |
      s|	t        |
      d  j                  t         j                  d      }t        |d   j                  |      } > A |dk(  ry | j	                  |ddd      \  }}|j                   st#        d	      |j%                  |      }|||||ffS )
Nr   r  r9  r  r  r   r  Fzunmapped vfs)r:  r  dirnamer  rr  r   r  r  r  r  r  r   r{  all_apsr  r  r  r  	canonical)vfsr9  r  modr  r  refr   msnpvn_apvnsr   r  r  s                  r(   pathmodr"  '	  s    C		BBZFB
wwt}Y:Dz* QC<V^^BFFC(==B$YuS"~&Bc2!67B9))C.C ZZRVV$++ 	JE3=='CJL!))"&&#6BAb)C	%2 d{ggc3u-GB;;''	c	BsBS	!!r+   c                 ,    t        j                  |       S ) decodes filesystem-bytes to wtf8)r   decodefilenamer  s    r(   _w8dec2r&  Z	      ))#..r+   c                 ,    t        j                  |       S ) encodes wtf8 to filesystem-bytes)r   encodefilenamer  s    r(   _w8enc2r+  _	  r'  r+   c                 .    | j                  t        d      S )r$  r   )r\   FS_ENCODINGr  s    r(   _w8dec3r.  d	      ::k#455r+   c                 .    | j                  t        d      S )r)  r   )rC  r-  r  s    r(   _w8enc3r1  i	  r/  r+   c                 ^    | j                  t        d      }|j                  d      r|dd  S |S )Nr   \\?\r@  )r\   r-  r  r|  r@   s     r(   _msdecr5  n	  s/    
**["3
4CnnY/3qr78S8r+   c                 N    | j                  dd      j                  t        d      S )Nr  r  r   )r   rC  r-  r  s    r(   _msaencr7  s	  s!    ;;sD!((6GHHr+   c                     | j                  dd      } d| vr| j                  d      st        |       } | j                  d      r| S d| z   S )Nr  r  r  \\r3  )r   r  rY  r  s    r(   _uncifyr:  w	  sG    
++c4
 C
#~cnnV4cl..(3=i#o=r+   c                     | j                  dd      } d| vr| j                  d      st        |       } | j                  t        d      }|j                  d      r|S d|z   S )Nr  r  r  r9  r   r  s   \\?\)r   r  rY  rC  r-  r4  s     r(   _msencr<  	  sY    
++c4
 C
#~cnnV4cl
**["3
4C..)3?zC/??r+   c                 H    t        t        | j                  d                  S )z(decodes base64(filesystem-bytes) to wtf8rY   )r  r*  rC  r  s    r(   w8b64decr>  	  s    G,-..r+   c                 H    t        t        |             j                  d      S )z(encodes wtf8 to base64(filesystem-bytes)rY   )r%  r  r\   r  s    r(   w8b64encr@  	  s    5:%%g..r+   c                     | S r"   r.   r  s    r(   _not_actually_mbcs_encrB  	      
r+   c                     | S r"   r.   r  s    r(   _not_actually_mbcs_decrE  	  rC  r+   c                     g }||fD ]'  }	 | j                  d|f       |j                  |       ) |d   |d   fS #  |j                  dt        |      z          Y UxY w)Nzselect * from a where b = ?//r   r   )r  r;   r@  )mem_curr  r  r@   rA   s        r(   s3encrI  	  sk    C"X +	+OO9A4@JJqM+ q63q6>		+JJthqk)*s	   $;Ac                     | j                  d      rt        | dd        n| |j                  d      rt        |dd        fS |fS )NrG  rp  )r  r>  r  s     r(   s3decrK  	  sM    MM$/ABRMM$/AB 57 r+   c                 H    t        |      dk7  ryt        t        d| |f       y)Nzdatabase is lockedFdbexT)r   r@  lsof)r8  r;  db_paths      r(   	db_ex_chkrP  	  s%    
2w&&
4#w(r+   c                     	 t        ddt        |      gd      \  }}}|j                         dz   |j                         z   j                         } | d|d|d|d       y #   | d	t               z   d       Y y xY w)
Ns   lsofs   -R-   r  r   zlsof z = r5   zlsof failed; )runcmdr  r   r  )r8  r  rcsoser   s         r(   rN  rN  	  sq    +WeU7^<bI
Bhhj4"((*,335'2r2A6+Ofh&*s   A!A$ $A<c                     | j                         }d|v rt        j                  ||d          d|v rt        j                  ||d   |d          y y )Nchmod_fchownuidgid)filenor:  fchmodfchown)r   r  fnos      r(   r  r  	  sJ    
((*CB
		#r)}%"}
		#r%y"U), r+   c           	         t        |      }t        |      }|rd}d}t        j                  }	||g}
n2|rd}d}t        j                  }	||g}
nd}d}t        j                  }	|g}
|j                  |dz   d      }|j                  |dz   d      }|d	k  rd
}d}t        j                         x}}t        d      D ]  }	 |r4t        j                  |      j                  |k7  rd} | |||fz  d        y|r3|s1t        j                  j                  |      rd} | |||fz  d        y |	|
  |r+t        j                         }d} | ||||z
  |dz   |fz          y y# t        $ r}t        j                         }|j                  t        j                  k(  rY d }~ y|sM|j                  t        j                  k(  r0d} | ||j                   ||fz         t"        j$                  }	Y d }~4||z
  |kD  s|dk(  r |sCt&        st        j                  |      j                  }d} | |||j                  |dz   |fz         Y d }~nd }~ww xY wt        j(                  |       )Nmv_re_zatomic-renamerenamerm_re_deleter   rh  rJ  r~  r   r   ib` z!src inode changed; aborting %s %rr   Fz4something appeared at dst; aborting rename %r ==> %rz%sd in %.2f sec, attempt %d: %rTz using copy+delete (%s)
  %s
  %sia` z+%s failed (err.%d); retrying for %d sec: %rgGz?)r  r:  r   rc  unlinkrr  rq  r  statst_inor  rE  r  r=   ENOENTEXDEVstrerrorshutilmover   r   )r8  srcr1   atomicflagsbsrcbdstr   actosfunr  maxtimechillinorC  rw  attemptr   r;  s                      r(   _fs_mvrmry  	  s<    :D:D

d|			d|		viiC%GIIa#gs#Eu}
Cyy{B< !	>rwwt}++s27Ac
NA&Ft(<JAc
NA&4Liik5AcBh!S99:!F '  	>))+Cxx5<<'rxx5;;68Ac3//0Rx'!W%5''$-..CAAbhh$<<=	>" 	

5s2   <4E23E'2E	I	&1IA	I,AII	c                 ,   t        |      }t        |      }t        r>t        j                  j	                  |      rt        | |dd|       t        | ||d|       y |j                  d      rt        | ||d|       y 	 t        j                  ||       y # t        $ rv}|j                  t        j                  k7  r d} | ||j                  ||fz         	 t        j                  |       n#  Y nxY wt        j                  ||       Y d }~y d }~ww xY w)Nr   Fr   Tz!using copy+delete (%s);
  %s
  %s)r  r   r:  r  rE  ry  rr  r   r  r=   rj  rk  rf  rl  rm  )r8  rn  r1   rp  rq  rr  r;  r   s           r(   atomic_mover{  
  s    :D:D
77>>$S#r5%0c3u-	9	c3e,	$JJtT" 		$xx5;;&5AR[[#s++,		$KKd##		$s0   =B 	D8DC,+D,C0.DDc                     |j                  d      st        j                  t        |             yt	        | |dd|      S )Nr   Tr   F)rr  r:  rf  r  ry  )r8  r  rp  s      r(   wunlinkr}  6
  s4    99Y
		%.!C"eU33r+   c                    	 t        |       }|rjt        j                  j                  |      sKt        |v rC|j                  t        d      d   }|r(t        j                  j                  |      s	t        |v rCt        rt        |      } t        j                  d      }t        j                  d      }t        j                  d      }t        j                  j                  j                  t        j                  |       t        j                  |      t        j                  |      t        j                  |             |j                  |j                  dfS t        j                   |      }|j"                  |j$                  z  }|j"                  |j&                  z  }||dfS # t(        $ r}	ddt+        |	      fcY d }	~	S d }	~	ww xY w)Nr   r   r   )r  r:  r  isdirBOS_SEPr  r   r  ctypesc_ulonglongwindllkernel32GetDiskFreeSpaceExW	c_wchar_ppointervaluestatvfsf_frsizef_bavailf_blocksr  r  )
r  pruner9  bfreebtotalbavailsvfreetotalr;  s
             r(   get_dfr  >
  sU    7^BGGMM"-'R-7A&q)B BGGMM"-'R- BiG&&q)E''*F''*FMM""66  )v&v&u%	 LL&,,33BB;;,DKK"++-E%$$  1d2h s,   A6F& 9C F& AF& &	G/G<GGc                     	 t        j                  | j                         t        j                  d      }t        d|      d   S #  Y yxY w)N   AAAA   Ir   r   )fcntlioctlr]  termiosTIOCOUTQrc   )sckrA  s     r(   siocoutqr  \
  sA    	SZZ\7+;+;WEB4$Q''	s   AA Ac                      yr_  r.   )r  s    r(   r  r  h
  s    r+   c                 J   t        j                          }|j                         }|dk(  r|j                          y 	 |j                  |       |j	                  t
        j                         	 t        j                          |z
  |k  r9t        |      sn-|j                  d      snt        j                          |z
  |k  r9|j	                  t
        j                         t        j                          |z
  }|dk\  r | dj                  ||      d       |j                          y #  Y JxY w# t        $ r#} | dj                  ||      d       Y d }~td }~ww xY w# t        j                          |z
  }|dk\  r | dj                  ||      d       |j                          w xY w)Nr  r?  zshut({}): {}90r   zshut({}) in {:.3f} sec)rq  r]  r  
settimeoutshutdownrR   SHUT_WRr  r  	SHUT_RDWRr  r   )r8  r  r  rC  fdr;  tds          r(   shut_socketr  l
  sP   	B	B	Rx		wV^^$	))+"W,} xx	* ))+"W, LL))* YY[27(//B7>			 1N!!"b)4001 YY[27(//B7>		sC   0D, -AD%  D% %D)'D, ,	E5EE EE AF"c              #      K   |}|dkD  r2||kD  r|}	 | j                  |      }|t	        |      z  }| |dkD  r1y y # t        $ r" d}t        d|j                  ||z
  |            w xY ww)Nr   z@client d/c during binary post after {} bytes, {} bytes remainingrr   )r  r  r  r   r  )r  r  
total_sizeremainsr:  r   s         r(   read_socketr  
  s      G
A+7?E	G''%.C
 	3s8	 A+  	GRAahhzG';WEFF	Gs   A+= A+A++A((A+c              #   D   K   	 	 | j                  |       #  Y y xY wwr"   )r  )r  r  s     r(   read_socket_unboundedr  
  s*     ''%.  s      c              #     K   d}	 d}d|vr3	 || j                  d      z  }t        |      dkD  r
t               	 d|vr3|j                  d	      s| j                  d
       	 t        |j                  d      d      }|dk(  r5| j                  dd      }|dk(  ry d}t        d|j                  |            |r |d|fz         t        | ||      D ]  }|  | j                  dd      }|dk7  rd}t        d|j                  |            #  |j                  |j	                  dd      t        |            }t        d|      xY w#  |j                  |j	                  dd      t        |            }t        d|      xY ww)Nz<upload aborted: expected chunk length, got [{}] |{}| insteadr+   r  rp  r  rg   r   rr   r  r   r#  r   Fz8protocol error after final chunk: want b'\r\n', got {!r}zreceiving %d byte chunkz9protocol error in chunk separator: want b'\r\n', got {!r})r  r  r  r   r\   r  r  r   ru  r  r  )	r  r  r8  errr:  chunklenr   r   chunks	            r(   read_socket_chunkedr  
  s     IC
3'rwwqz!s8b=#+% ! 3 ||E"GGAJ	#3::g.3H
 q=

1e$AG|LAahhqk**)XK78 UH5 	EK	 JJq% <MAahhqk**K 'jjGY!?SJS#&&	#**SZZ;SXFCc""s9   
F	,D F	"F	"E =BF	9E

F	9FF	c                     ddl m}  t               } |        D ]e  }|j                  D ]T  }t	        |j
                        dk  r|j                  |j
                  d          :|j                  |j
                         V g t        |      S )Nr   )get_adaptersr6   r   )stolen.ifaddrr  r  r  r  rU   r  r  )r  r@   nicipos       r(   list_ipsr  
  sn    +5C~  77 	 C366{Qq	"		   9r+   c                    | j                         j                         } | dv ry | j                  d      D cg c]#  }|j                         s|j                         % }}d}dD ]#  }||v s|s	|g dz  }d}|j                  |       % t        s|D cg c]	  }d|vs| }}g }|D ]  }|j                  d      s|j                  |       &t        |j                  d      j                  d            }|d	k(  r|d
z  }n%|dk(  r|dz  }n|dk(  r|dz  }nt        d|d      |j                  |        |D cg c]  }|j                  d      d    }	}t        |	|dd|      S c c}w c c}w c c}w )N)anyallnorZ  r   rZ  F)lanlocalprivateprvt)z
10.0.0.0/8z172.16.0.0/12z192.168.0.0/16zfd00::/8z169.254.0.0/16z	fe80::/10z127.0.0.0/8z::1/128Tr  r   r   z0.0.0/8rp  z0.0/16r5   z0/24zinvalid config value []r  r   )r  r   r:   remove	HAVE_IPV6r  r;   r  ru  r  r  )
csvr  r   srcsexpanded_shorthands	shorthandr  r   wordsr  s
             r(   build_netmapr  
  s   
))+


C
++"yy~;!AGGI;D;8 #	&   '+#KK	"%#( 0a3a<00E {{3LL BIIcN((-.A:)OBaZ(NBaZ&LB2?@@R!$ %*
*q1773<?
*C
*#udE;77] <0 1* +s   E+E+	E0E0?E5c                    ddi}i }|D ][  }	 |j                  d      \  }}|j                  d      \  }}	|j                  |      }|d}
t        |
|||fz        |||<   |||<   ] 	 t        dgt	        |j                               dd|      }||fS #  d}
t        |
|fz        xY w# t        $ r}d	}
 | d
|
|fz  d        d }~ww xY w)Nr   r  r   r  zR
  invalid value %r for argument --ipu; must be CIDR=UNAME (192.168.0.0/16=amelia)zD
  invalid value %r for argument --ipu; cidr %s already mapped to %rr  TzIfailed to translate --ipu into netmap, probably due to invalid config: %rrootr   )r:   r  rr  r  r  keys)r8  ipusr  ip_ucidr_uipucidrunamecipr
  r   uname2nmr;  s                 r(   load_ipur    s    9DF 	())C.KD%zz#HC D!WAAdF 3344tS	TFD/t[I
 8O	(eAAJ''  WFAIq!s#   (B('B) B&)	C2CCc              #      K   t        |d      }t        t        |       d|      5 }	 |j                  |      }|sn| 	 d d d        y # 1 sw Y   y xY ww)Ni   r   )r  r   r  r   )r  r  r  r   r:  s        r(   	yieldfiler  3  s]     
#F	eBiu	% &&.CI  	  s   #AA
	A
AAc                     d}| D ]A  }|t        |      z  }|r||kD  r|j                  |       |s-t        j                  |       C |ddfS )Nr   zchecksum-disabled)r  r<  rq  r   )finfoutr1  max_szslptlenr:  s          r(   justcopyr  >  s\     D CdVm

3JJsO $&999r+   c              #      K   |j                         dk(  }| D ],  }|j                  dd      }|r|j                  dd      }| . y w)Nr  r  r+   r  r#  )r  r   )r  convr  r:  s       r(   eol_convr  R  sO      ::<6!D kk%%++eW-C		s   AAc                 \   |st        j                         }d}| D ]R  }|t        |      z  }|r||kD  r|j                  |       |j	                  |       |s>t        j                  |       T t        |j                         d d       j                  d      }||j                         |fS )Nr   r(  rY   )r)  r*  r  r,  r<  rq  r   r%  r-  r\   	hexdigest)r  r  r1  r  r  r  r:  
digest_b64s           r(   hashcopyr  ]  s     .."D CdVms

3JJsO )#2./66w?J""$j00r+   c
                 Z   d}
||z
  }|j                  |       |dkD  r|rt        j                  |       |j                  t	        ||            }|s|S 	 |j                  |       |t        |      z  }|	r'|
t        |      z  }
t        j                         |
f||	<   |dkD  ry#  |cY S xY wr  )r+  rq  r   r   r  sendallr  )r8  r  upperr   r  r  r  use_polldlsdl_idsentr  r:  s                r(   sendfile_pyr  v  s     DemGFF5M
A+JJsOffS()N	IIcNs3xG CHD))+t,CJ! A+$ 	Ns   B$ $B*c
                 b   |j                         }
|j                         }|}d}|r4t        j                         }|j                  |
t        j                         ||k  r|xs t        j
                         }	 t        d||z
        }|rj                  d       nt        j                  g |
gg d       t        j                  |
|||      }d}|dk  r||z
  S ||z  }|	rt        j
                         ||z
  f||	<   ||k  ry# t        $ r`}t        j
                         |z
  }|dk  r8|j                  t        j                  k(  rt        j                  d       Y d }~d}Y d }~d }~wt        $ r;}d}t        j
                         |z
  } | dj                  ||             Y d }~d }~ww xY w)	Nrh  i   i'  r  r   r  g{Gz?z&sendfile failed after {:.3f} sec: {!r})r]  selectpollregisterPOLLOUTrq  r  r:  sendfiler  r=   EWOULDBLOCKr   r  r   )r8  r  r  r   r  r  r  r  r  r  out_fdin_fdr  stuckr  reqr  r;  r  s                      r(   sendfile_kernr    sz    XXZFHHJE
CE{{}ffnn-
+$	Hi-C		% b6(B3FE34AE 63;q))+sU{3CJ9 +@ -  			e#A4xBHH(9(99

4 A 	HA		e#A8??2FGG	Hs,   9AD 	F.AE' E''F.31F))F.c              #     K   |rt         rd}|r(t        s t        j                  t        j                  vrd}d}	 t        |      }|rdt        t        d      rTd}t        j                  |      5 }|D ]-  }	 t        |j                        |j                  |       f / 	 d d d        y d}|rt        j                  nt        j                  }
t        j                  |      D ]8  }t        j                  j!                  ||      }	 t        |       |
|      f : y # t        $ rG}	| sY d }	~	 | |dj                  t        |	      t        |j                              d       Y d }	~	d }	~	ww xY w# 1 sw Y   y xY w# t        $ r=}	| sY d }	~	 | |dj                  t        |	      t        |            d       Y d }	~	d }	~	ww xY w# t        $ rz}	|r6t#        |	dd	      }|t$        j&                  k(  rt)        d
t+        |	             dj                  t        |	      |      }| r | ||d       nt-        |       Y d }	~	y Y d }	~	y d }	~	ww xY ww)NFstatdirscandir)follow_symlinksz[s] {} @ {}r  listdirr=   r   ru   z{} @ {}r   )r   r   r:  rg  supports_follow_symlinksr  rp  r  r  r   r  r   r  r  lstatr  r   r<   r=   ri  r  r   r7  )r  r  r  topthrowrn  btopdhr  r;  rG  r   r  r  r   s                  r(   r  r    s	     #(C(CC
C%Szwr9-CD! WR WBW$RWW~rww5yw/QRRWW W C$288"''C

4( S'',,tT2S ;G55S % W%$sM$8$8b5>$RTUVV	W	W W  ! S! 3 4 4T"XuW~ NPQRR	S  Wa(BU\\!S#b'**T"Xs+31!HH s   7I4G .E35*D E3"G *I+AG E?G I 	E0)E++E306E+&E3+E00E33E<8G ;I<G ?	GG 
G ,G ;G  GG 	IA+I<
IIIc                 .    t        | |d|d      D ]  } y y)NFT)r  )r  r  r  r  s       r(   dir_is_emptyr    s$    VWeS%8 r+   c           	         t         j                  j                  t        |            s$t         j                  j	                  |      }|dz  }t        | |||d      }|D cg c]*  }t        j                  |d   j                        s&|d   , }}|D cg c]"  }t         j                  j                  ||      $ }}g }g }	t        |      D ]!  }
t        | |||
|dz         \  }}||z  }|	|z  }	# |r4	 t        j                  t        |             |j                  |       ||	fS ||	fS c c}w c c}w #  |	j                  |       Y ||	fS xY w)z rmdir all descendants, then selfr   Fr   )r:  r  r  r  r  r  rg  S_ISDIRst_moder   reversedrmdirsrmdirr;   )r  r  r  r  depthstatsr   dirsre  ngr  r_   r   s                r(   r  r  	  s5    77==s$ggooc"
FGUC7E>Q4<<!#=AaD>D>*./QBGGLLa /D/	B	Bd^ fgua;1
a
a
 	HHU3Z IIcN r6M2r6M! ?/	IIcNr6Ms    'D+D+'D04/D5 5Ec                     | |k(  rg | gfS 	 t        j                  t        |              t         j                  j	                  |       }|r||k(  r| gg fS t        ||      \  }}| g|z   |fS #  g | gfcY S xY w)zrmdir on self, then all parents)r:  r  r  r  r  	rmdirs_up)r  r  parre  r  s        r(   r  r  %  s    
d{C5y
s ''//#
C#+ubysD!FB52:r>C5ys   A, ,A5c           
      j   g }d}| D ]o  }|dk(  r|r|j                  |       |}|r?||z  }t        |      dk(  s4	 |j                  t        t        |dd  d                   d}_|j                  |       q |r|j                  |       dj	                  |      S #  |j                  |       Y OxY w)Nr   r  r5   r   r  )r;   r  chrr   r   )origr@   r  r  s       r(   unescape_cookier  7  s    
C
C 9

3C2IC3x1}$JJs3s12w#345  JJrN!$ 

3773<$JJsOs   'BB2c                 P   	 | j                  dd      d   j                         }t        j                  |      }|s3t	        j
                  |       }|d   rdj                  |d         n|d   }|s[|rY	 t        t        |      dd      5 }t        j                  |j                  d      d	      }|j                  d
      rd}d d d        |s|}d|vr'|j                  d      s|j                  d      r|dz  }|S #  d}Y xY w# 1 sw Y   CxY w# t        $ r
}Y d }~Td }~ww xY w)Nr   r   r   zapplication/{}r   r   i   TrM  ztext/htmz
text/plainrk  ztext/z/javascriptz; charset=utf-8)r  r  r   rr  rS  
guess_typer   r   r  rI  from_bufferr   r  r  r  )urlr  fallbackr   r@   r   r   r;  s           r(   
guess_mimer  S  s   jja #))+ ))C.C  %/0t%%ad+14	eDk4+ 'q''t4@>>*-&C	' 
#~>>'"cll=&A$$CJ5' '
  		s5   #C= 4D 
:DD =DDD 	D% D%c                     g }| D ]U  }	 |r*t        j                  |      |k(  r8|j                  |       n&t        j                  |       |j                  |       W |S #  Y ^xY wr"   )r:  getpgidr;   psutilProcess)pidspgidalivepids       r(   getaliver'  u  sf    E 
	::c?d*LL% s#S! L	s   AAA#c                    	 t        j                  t        j                               }t        rm| g}t	        j
                  |       }|j                  d      D ]-  }|j                  |j                         |j                          / |j                          d}n|rg }| g}|ru|d   }|dd }|j                  |       t        ddt        |      g      \  }}}||j                         j                  d      D 	cg c]  }	|	st        |	       c}	z  }|rut        ||      }|D ]&  }t        j                   |t"        j$                         ( n%t        j                   | t"        j$                         yt'        d	      D ]3  }
t)        j*                  d
       t        ||      }|r|
dkD  s,|| gk(  s3 n |D ]'  }	 t        j                   |t"        j,                         ) y#  d}Y xY wc c}	w #  Y >xY w)zstill racy but i triedr   T)	recursiveNr   pgrepz-Pr   r  r   r5   )r:  r   r  HAVE_PSUTILr!  r"  childrenr;   r&  	terminaterT  r   r   r:   r   r'  killrL  rP  r  rq  r   SIGKILL)r  r$  r#  parentchildchkr&  r  r   r   r  s              r(   killtreer3    s   zz"))+& v%__t_4 	EKK		"OO	 		fa&Cab'CKKgtSX67GAq!AGGIOOD$9?qQCF??C  d# 	)CGGC(	) 	fnn%2Y 

3d#q1u$	  	GGC(I& @&	s#   'G% =G/G/>$G4%G,4G8c                      t         ry	 t        j                  d      } | r| S 	 dD ]*  } | dz  } t        j                  j                  |       s(| c S  y#  Y 4xY w)Nr   nice)z/binz/sbinz/usr/binz	/usr/sbinz/nice)r   rl  whichr:  r  rE  )r   s    r(   
_find_nicer7    sf    \\&!I  9 
g77>>"I
 s   A Ac                    t        | d   t        t        f      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd       }|rt        j
                  |d<   |d	v rt        j
                  nd }|d
v rt        j
                  nd }	t        r3|r| d   t        v r&| dxx   dz  cc<   n| d   t        v r| dxx   dz  cc<   |j                  dd       r)t        rd|d<   nt        r|rt        g| z   } n
t        g| z   } t	        j                  | f||	d|}
|rTt        sNt        sH	 t        d|
j                  fz  d      5 }|j!                  d|fz  j#                  d             d d d        |rt$        r|
j'                  |      \  }}n	 |
j'                  ||      \  }}|r|j/                  dd      nd}|	r|j/                  dd      nd}|
j0                  }|d}|||fS # 1 sw Y   ~xY w#  Y xY w# t        j(                  $ rW |dk(  rY y|dk(  r|
j+                          nt-        |
j                         	 |
j'                  d      \  }}n#  d}d}Y nxY wY w xY w)Nr   oomr.  r   capturer5   sinstdin)r   r5   )rp  r5   s   .exer   r5  i @  creationflagsr  stderrz/proc/%d/oom_score_adjr8  z%d
rg   rS  r  )ir   r   r   r   r+   r   r   i)
isinstancebytes	bytearrayr  spPIPEr   CMD_EXEBCMD_EXESr   NICEBNICESPopenr   r   r&  r<  rC  r   communicateTimeoutExpiredr.  r3  r\   
returncode)argvr  rF  isbytesr9  r.  r:  r;  coutcerrr   r   boutberrr  r?  rU  s                    r(   rT  rT    s\    a5)"45G
&&
C66&#DffY"G66%C
gg7'277TD'277TD Aw("Q7"Aw("Q6!	vvfd"(Bw~w~
6d4626A
6%	.!%%94@ ;A3&009:;
 c]]3'
d	sG<JD$ 15T[[),"F04T[[),"F
,,B	zvv?; ;	    	s{"]]1]5
d	sT   ?H %G;>H $H ;H H HI8(+I8I*)I8*I20I87I8c                 d    t        | fi |\  }}}|dk7  rt        || |       t        |      ||fS r  )rT  retchkr  )rM  rF  re  soutserrs        r(   chkcmdrW    s>    D'B'NBd	Qwr4o:r+   c                 L   t         r<t        t        j                  d      5 }t	        j
                  | ||      }d d d        n5t	        j
                  | t        j                  t        j                  |      }rt	        j                  || d   d| d   f      y # 1 sw Y   +xY w)Nr8  r>  )r  r?  r  r   s   ...r  )r   r   r:  r  rC  callDEVNULLCalledProcessError)rM  r  r   rvs       r(   mchkcmdr]     s    
"**d# 	3qa2B	3 	3 WWT"**RZZQ	##Ba&$r((CDD 
	3 	3s   BB#c                    | dk  rd| z
  } | r| dk  r|sy d }| dkD  r#	 t        t        j                  | dz
              }n| dk(  rd}n| dk(  rd}n|rd}nd}|rd	j                  | |      }nt        |       }	 d
j	                  |D cg c]  }t        |       c}      }	dj                  ||	      }|r|d|z   z  }|r
 |||       y t        |      #  Y xY wc c}w #  t        |      }	Y NxY w)Nr      ~   zinvalid program   zprogram not foundunknownzinvalid retcodez{} <{}>r   zerror {} from [{}]r   )r   rL  Signalsr   r   r  r  )
rU  cmdrV  r  colorverboser  r   r   r  s
             r(   rT  rT  +  s    
Av2Xc'A	Cx	FNN28,-A 
s	s	R#GHH,1eAh,- 	##Aq)A	TD[q%l9	  -Hs)   !C 7C CC CC C-c                    d}d}d}d}d}d}d}d}	|}
d|d d v r|j                  dd      \  }}|d	k(  rd
}n|dk(  rd
}n|dk(  rd
}n|j                  d      rt        |dd        }n|j                  d      rt        |dd        }n|j                  d	      rt        |dd        }	ne|j                  d      r|dd  }nN|j                  d      r|dd  }n7|j                  d      rn%|sn*d} | xs t        |j                  ||
             d|d d v rt        j                  j                         }	 t        r
t               t        j                  j                  t        j                  j                  t        j                  j                  t                          }t        |      gt         j                  D cg c]  }|st        |       c}z   }t        t        j"                  j%                  |            }||d<   |d
d|||	d}d|v r|j                  d      n|g}t        j                  j'                  t        j                  j)                  |d               |d<   |||||||fS c c}w #  t        s Y |xY w)Nr   Frh  r   r   rZ  r  r   r  Tr   jwr   r_   izhook: invalid flag {} in {}
PYTHONPATHrk  )envr5  r9  r  r.  r:  )r:   r  r  r   r7  r   r:  environr  r   r  r  r  r  __file__r   r   pathsepr   
expandvars
expanduser)r8  rd  areqr2  forkr/  waittoutr.  capocmdargr   rl  pypathr   r   sp_karM  s                      r(   
_parsehookr{  \  sV    D
CDDDDD
CD
Ra.99S!$S#:CCZDCZD^^C QR>D^^C QR>D^^C c!"g,C^^C qr7D^^C qr7D^^C -AS\E188C./1 Ra.4 **//
C
+1J!KL6{msxx=!1s1v==RZZ__S)*"L E !CZ399S>cUDgg  !3!3DG!<=DGdD$t33) > s%   3B
I5 =I0I02I5 0I5 5	J c                    t        | |      \  }}}}}	}
}|D cg c]  }t        |       }}|d   j                  d      rt        t              g|z   }|D cg c]#  }t	        t        t        |d   |d                % }}|D cg c]  }t        |j                  |       }}|rnt        |||      D cg c]+  \  }}}t        |      ||d   d d |d   |d   |d   |d	   d
- }}}}t        j                  |      j                  dd      |
d<   ndj                  d |D              |
d<   |d   j                  d      rM	 |
d   j!                  dd      }t#        | |d|d   dd  j%                         ||	|
       |r| r | d|dd	       yt)        j(                         }|rt+        t,        |||
       n$t-        |fi |
\  }}}|r|rt/        |||| d       y|	r4|	t)        j(                         |z
  z  }	|	dkD  rt)        j0                  |	       yc c}w c c}w c c}w c c}}}w # t&        $ r}| r | d|       Y d }~yd }~ww xY w)Nr   .pyr5   r@  r  r   rp  r   r  )r9  r  warkmtr	  rU   atrg   r   r;  r  c              3   2   K   | ]  }t        |        y wr"   )r  r  s     r(   r   zrunihook.<locals>.<genexpr>  s     !8q%(!8s   zmq:xiuz
hook(xiu) z OKzzeromq failed: TrF  F)r{  sfsencr  pybinr  r  rK  r  r  zipuncifyjsondumpsrC  r   r  r\   	_zmq_hookr  r  rq  r@  rT  rT  r   )r8  rf  rd  r  upsr  r2  rs  r/  rt  rz  acmdr   bcmdvpsr  r  r9  jar  r;  rC  rU  rA   r  s                            r(   runihookr    s`    -7sC,@)AsD$eT#$!F1I$D$Awu%47
8q5$uQqT1Q4()*
8C
8+.
/a5q!
/C
/ !c3/
 
 2r Rj!Sb	dddd
 
 zz"~,,Wi@ezz!8C!88eAw&!	1,%%gy9Cc7E4712;+<+<+>T5Q3.2 	BvsDU+D*E*
As22tS#q)		b  !8JJtc % 9
/
,  	12/0	1s0   H(HH 80H%AH, ,	I5IIz0fire-and-forget to all/any connected SUB-clientsz4fire-and-forget to one of the connected PULL-clientsz7send messages to a REP-server and blocking-wait for ack)pubpushr  c           	         dd l }	 t        d   }d}	d}
t	        j                         }|r| r | d|d|dd       |5  	 t        |   \  }}}d d d        |r| r | d|d|dd       |5  |r| r | d||t/        |      fz  d       j1                  |       dk(  r{|r| r | d|d|dd       	 |j3                         j5                  dd      }	|	j7                  d      r5t9        j:                  d|	d d       }|rt%        |j=                  d
            }
d d d        |	r| r | d|d|d|	d       |r4|t	        j                         |z
  z  }|dkD  rt	        j
                  |       |
|	fS #  t        j                         t        d<   t	        j
                  d       t        d   }Y xY w#  |j                  d	d
      \  }}	 t        |   }| r)d} | ||j                         |j                  ||fz         n#  t        d      xY w	 t        d   }n #  |j                         x}t        d<   Y nxY w|d   }|dk(  r^|j                  |j                        }|j                  |j                  d       |j!                  |       t	        j
                  d
       n|dk(  r^|j                  |j"                        }|rt%        |dz        |_        |j                  |j                  d       |j!                  |       nm|dk(  r^|j                  |j(                        }|rt%        |dz        |_        |j                  |j                  d       |j-                  |       n
t               t        j                         }|||ft        |<   Y HxY w# 1 sw Y   MxY w#  |j?                          t        |= t        d      xY w# 1 sw Y   xY w)Nr   mtxr   r   hook() z entering zmq-main-lockr  r  r   z!libzmq(%s) pyzmq(%s) init(%s); %sz-the only supported ZMQ modes are REQ PUB PUSHr[  r  r  r  i  r  z entering socket-lockzhook(%s) %r sending |%d|z awaiting ack from reqrg   r   zreturn z^return ([0-9]+)r  zack timeout; zmq socket killedz ACK: ) rE   ZMQrC  rj  rq  r   r:   ZMQ_DESCzmq_versionr  r  ContextrR   PUB
setsockoptLINGERbindPUSHr   SNDTIMEOREQRCVTIMEOrD   r  send_stringr  r\   r  r   r   r   r  )r8  rf  rn  rd  r  rt  rz  rE   r  r@   nretrC  moder  urirX  r   r[  r  r   s                       r(   r  r    sj    %j CD	B3C=qA	 )((	( XND#s)(V 3#s;Q?	 Bs*c3C-AA1E5=33DaH	Bhhj'';>>),		"4c#2h?A"1771:B( sS#s3Q7		b  !8JJt9k^^%E


3%j&	(		#q)ID#Q~;AS__.dKKLQ OPP1%j1#&;;=0c%jI&Gu}jj)szz1-

1jj*#&w~#6CLszz1-jj)#&w~#6CLszz1-C k!.."Cc3'CHS)( )(zB		H @AA%B Bsx   	E0 NF1*AO2A&N$0;F.1N	4G>=N>HN	HNH64ENNN!$$OOOc                    ddi}t        | |      \  }}}}}}}|r"|D ]  }||vsd}| r | |||||fz         |c S  |r:|||	|
||xs t        j                         |||||d}t        j                  |      }n|xs |}|d   j	                  d      r>t        | |||d   dd  j                         |||      \  }}|rt        d|fz        d|dS ||gz  }|d   j                  d	      r
t        g|z   }|D cg c]  }||k(  rt        |      n
t        |       }}t        j                         }|rt        t        ||g|
       nRt        |fi |\  }} }!|r|r||d<   t        |||!| d       n)	 t        j                  |       }	 d|vr| |d<   d|vr||d<   |r4|t        j                         |z
  z  }|dkD  rt        j                   |       |S c c}w #  i }Y VxY w#  || d}Y OxY w)NrU  r   z:user %s not allowed to run hook %s; need perms %s, have %s)r9  r  r  r	  rU   r  hostuserpermsrn  r|  r  r@  zzmq says %d)rU  r  r}  r  r   r  )r{  rq  r  r  r  r  r  r  r  r  r  r  r@  rT  rT  loadsr   )"r8  rf  rn  rd  r9  r  r  r  r  r  r	  rU   r  r|  r@   rr  r2  rs  r/  rt  rz  r  r  r   r  rx  r  r   r   r  rC  rU  rA   r  s"                                     r(   _runhookr  H  s=     )C/9#s/C,D#tT4 	BPUCu556
	 #		
 jjniRAw&!3d1gabk.?.?.A3eTBMRE1222&&SEMDAww~8<=1RE!HVAY.=D=	BvsTFu-D*E*
As2CI2tS#q)jjm.3&$%CMs? "CI 		b  !8JJtJ; >.1-s   9"G2G G  G G)c                    |xs |j                   }|j                  }|j                  dd      }ddi}|D ]  }	 t        | ||||||||	|
||||      }|r| r | d|d|d|d       |si c S |j	                         D ]y  \  }}|d	v r8|r6|r|j                  d
|||       #|j                  j                  |||f       B|dk(  r|r||d<   O||v r"|dk(  r|r|||<   `|dk(  sf|si||   ro|||<   u|||<   {  |S # t        $ r;} | xs t        dj                  |             dd|z   v r	i cY d }~c S Y d }~ |S d }~ww xY w)Nr  r  rU  r   r  r  z	 => [32mr  )rW  delzup2k.hook_fxrelocr  zhook: {}z,c,rZ  )r  hook_vr   r  rs  say
fx_backlogr;   r  r7  r   )r8  brokerup2krn  cmdsr9  r  r  r  r  r  r	  rU   r  r|  r  rf  r@   rd  hrr   rA   r;  s                          r(   runhookr    sy   " Nd  DkkG	D#	B)C 	Wc3BeUBBPRTWB 33R@!D	
 1&1

>1a<..1bz:'\a#$CL#XDyQ!"Ah1SV!"ACF> J  	S\E:,,R01c	!	J	s6   1C=-A5C=#C=&C=,C==	E'D<-E<Ec                    t         j                  j                  t         j                  j                  |             } t         j                  j	                  t        |             \  }}|j                  dd      d   }t        j                  j                  d|       t        rt        |      }|r6t        |       n*ddl} |j                  |      }|r |j                  |       t        j                  j                  |       |S )z
    a nice can of worms capable of causing all sorts of bugs
    depending on what other inconveniently named files happen
    to be in the same folder
    r   r   r   N)r:  r  rp  rq  r:   rY  r  r   insertr   
__import__reload	importlibimport_moduler  )r9  hotmdirmfilemnamer  r  s          r(   loadpyr    s     
		BGG..r2	3B''--,KD%LLa #EHHOOAt
3K%i%%e,IS!HHOODJr+   c                 n    t        t        |       d      5 }t        |      cd d d        S # 1 sw Y   y xY w)Nr   )r   r  gzip_file_orig_sz)r  r   s     r(   gzip_orig_szr    s/    	eBi	 $! #$ $ $s   +4c                     | j                         }| j                  dd       | j                  d      }| j                  |d       t        d|      d   S )Nrp  r@  r   r  )tellr+  r   rc   )r   r6  r\  s      r(   r  r    sG    FFHEFF2qM	
BFF5!4Qr+   c           
         g }d}| D ]I  }|j                  d      D cg c]  }|s|	 }}t        |t        |            }|j                  |       K dg|z  }|D ]0  }t	        |      D ]   \  }}t        ||   t        |            ||<   " 2 |D cg c]$  }dj                  d t        ||      D              & c}S c c}w c c}w )Nr   r   r   c              3   J   K   | ]  \  }}|j                  |d z           yw)rp  N)ljust)r   r   rd  s      r(   r   zalign_tab.<locals>.<genexpr>  s      >tq!AGGAEN>s   !#)r:   maxr  r;   r  r   r  )	linesrowsncolsr   r   rowlensr  cols	            r(   	align_tabr    s    DE ((3--Q1q--E3s8$C
 3;D -n 	-FAs$q'3s8,DG	-- KOO3BGG>s3~>>OO . Ps   B>B>)Cc                 6   d}d}d }d}| D ]  }|dk(  r|r|t        |      z  }d}d }|s||v s#d}&|r,||z  }|j                  d      rd}n|t        |      z  }d}d }T|dk(  r|}]t        |      }|dk  s|dk\  r|d	k  s
|d
k\  r|dk  r|dz  }|dz  } |S )N4abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZr   Tz[Fr  i %  i%  i (  i(  r   rp  )r  r  ord)r|  eocclenpendcountingr  r  s          r(   visual_lengthr    s    
@CDDH #" <DCIDHDSy
??7+$HCI%D#H<#%DRB U
&LR6\&LR6\	 	G#"H Kr+   c                 D   t        j                  dd| j                               j                  d      }||z
  }g }|D ]  }t	        |      dz  |k  st        |      |k  r|j                  |       4t        |      |k\  r1|j                  |d |dz
   dz          ||dz
  d  }t        |      |k\  r1|sv|j                  |        |}g }d}d}|D ]9  }t        |      }	||	z   |kD  r|j                  |       |}d}d	|z  }||z  }||	z  }; |r|j                  |       |S )
Nz([, ])z\1\nr   rp  r   r  r   r   r   )r   r  ru  r:   r  r  r;   )
r|  maxlenmaxlen2r  r}  r@   wordr   spentwls
             r(   wrapr  8  sD   FF9gszz|4::4@E
7
C
C !t9q=6!]4%86%AJJt%/

4&1*-34FQJL)  %/ 

4 ! E
C	BE 4 2:JJrNFEsB
d
 


2Jr+   c                  j   t         j                  } d } |d      xs  |d      xs  |d      }|sT	 t        j                  t        j                         t         j                        } ||      }t        j
                  |       	 |xs t        | d         t        | d         fS #  Y %xY w#  Y yxY w)Nc                     	 t        dt        j                  | t        j                  d            }|d d d   S #  Y y xY w)Ns   hhr  r  )rc   r  r  r  
TIOCGWINSZ)r  crs     r(   ioctl_GWINSZztermsize.<locals>.ioctl_GWINSZ^  s=    	B0B0BG LMBdd8O	s   69 =r   r   rp  COLUMNSLINES)P      )r:  rm  r   ctermidO_RDONLYr  r   )rl  r  r  r  s       r(   termsizer  Z  s    
**C 
a	>LO	>|AB	r{{3Bb!BHHRL=c#i.)3s7|+<==		s   AB' B. 'B+.B2c                     t         rC	 t        j                  d      }|j                  |       }|dk\  r|j	                  | |dz         y y y #  Y y xY w)Nr  r   rp  )r   r  WinDLLGetFileAttributesWSetFileAttributesW)dpk32attrss      r(   hidedirr  t  sW    	--
+C**2.Ez&&r5195 	 	s   A A Ac                      y)NTr.   )r9  s    r(   _lock_file_noopr    s    r+   c                 B   	 t         j                  |       }t        j                  |       t        j                  | t        j
                  t        j                  z  d      }	 t        j                  |t        j                  t        j                  z         |t         | <   y#  Y zxY w# t        $ rl}t        |dd      }	 t        j                  |       n#  Y nxY w|t        j                  t        j                  fv rY d }~yt!        d||fz         Y d }~yd }~ww xY w)N  Tr=   r  Fz1WARNING: unexpected errno %d from fcntl.lockf; %r)_flocksr  r:  r  r   O_RDWRO_CREATr  lockfLOCK_EXLOCK_NBr  r<   r=   EAGAINEACCESr7  )r9  r  r;  enos       r(   _lock_file_ioctlr    s    [[_
 
RYY+S	1B
B56  	b'2&	HHRL	5<<..AS"IMN	sA   *B" #>B) "B&)	D2D CDC'DDDc                    	 dd l }	 t        j                  |       }t        j                  |       t        j
                  | t        j                  t        j                  z  d      }|j                  ||j                  d       y#  Y XxY w# t        $ r?}t        |dd      }|t        j                  k(  rY d }~yt        d||fz         Y d }~yd }~ww xY w)	Nr   r  r   Tr=   r  Fz4WARNING: unexpected errno %d from msvcrt.locking; %r)msvcrtr  r  r:  r  r   r  r  lockingLK_NBLCKr  r<   r=   r  r7  )r9  r  r  r;  r  s        r(   _lock_file_windowsr    s    	RBHHRL WWRRZZ/5r6??A.	
  b'2&%,,DRyPQs4   B *B AB B	B 	C C:CCPRTY_NO_DB_LOCK)r5   r  PRTY_NO_IMPRESOc                 \    t         sy	 t        j                  | |      S # t        $ r Y yw xY wrG  )pkg_resourcesresource_existsNotImplementedError)pkgr   s     r(   _pkg_resource_existsr    s2    ,,S$77 s    	++c                     t         j                  j                  | j                  |      }t         j                  j	                  |      rt        j
                  t        |            S y r"   )r:  r  r   r  rE  rg  r  )Er   r  s      r(   stat_resourcer    s@    77<<t$D	ww~~dwwuT{##r+   c                 n    	 t        j                  |       }|j                  |      S # t        $ r Y y w xY wr"   )impresourcesfilesImportErrorjoinpath)r  r   r  s      r(   _find_impresourcer    s<    ""3' >>$  s   ( 	44c                 Z   	 t         |    S #  Y nxY wt        t               dkD  rt         j                          t        j                  t
           }t        r(t        ||       }|r|j                         r
dt         | <   yt        r t        |j                  |       r
dt         | <   ydt         | <   y)Nrz   TF)_rescache_hasr  clearr   modules__package__r  r  is_filer  r  r2   )r   r  ress      r(   _has_resourcer$    s    T""
=C
++k
"CT*3;;="&M$d3"&M$M$s    c                     t        |      xsG t        j                  j                  t        j                  j	                  | j
                  |            S r"   )r$  r:  r  rE  r   r  )r  r   s     r(   has_resourcer&  
  s2    K"''..aeeT1J"KKr+   c                 `   d|v rd nd}t         rYt        t        j                  t           |      }|r6|j                         r&|r|j                  ||      S |j                  |      S t        rlt        j                  t           }t        |j                  |      r?t        j                  |j                  |      }|r t        j                  |      |      }|S t        j                  j                  | j                   |      }t"        rt        j                  |d|      S t        |||      S )Nr   rg   )encodingrJ  )r  r  r   r   r!  r"  r   r  r  r2   resource_streamcodecs	getreaderr:  r  r   r  r   )r  r   r  rr  r#  r  streamr9  s           r(   load_resourcer-    s    +$7CK 8$?3;;=xxsx33 xx~%kk+&d3"223<<FF.))#.v6M	aeeT	"B
{{2sS11D3''r+   c                   (     e Zd Z	 d fd	Zd Z xZS )r  c                 ^    t         t        |   |xs	 t        |          || _        || _        y r"   )superr  rE  HTTPCODEcoder8  )r&   r2  r  r8  r  s       r(   rE  zPebkac.__init__+  s+     	fd$S%:HTN;	r+   c                 `    dj                  | j                  t        | j                              S )NzPebkac({}, {}))r   r2  r  r  rR  s    r(   r\  zPebkac.__repr__2  s!    &&tyy$tyy/BBr+   )NN)r2   r3   r4   rE  r\  __classcell__r  s   @r(   r  r  *  s    )-Cr+   r  c                        e Zd Z fdZ xZS )r2  c                     dj                  ||      }t        t        |   d|       || _        || _        || _        || _        y )Nzexpected field "{}", got "{}"ry   )r   r0  r2  rE  expectedgotr  datagen)r&   r8  r9  r  r:  r  r  s         r(   rE  zWrongPostKey.__init__7  sD     .44XsClD*34 
r+   )r2   r3   r4   rE  r4  r5  s   @r(   r2  r2  6  s     r+   r2  )
r   mpzlibrM   r  r  
SQLITE_VER	JINJA_VER
PYFTPD_VERPARTFTPY_VER)re   Fr"   r	  )F)FF)r5   )r   zapplication/octet-stream)r  )Nr   F)r   (  
__future__r   r   argparsebase64r   r*  r=   r)  r?  r  r}  r  rS  r:  r   r   r  rl  rL  rR   rg  rZ   
subprocessrC  r   rC  rq  r  collectionsr   	ipaddressr   r   r   r	   queuer
   r   r   r   r<  r   rE  r   r   r   r   r   r   r   r   r   r  r   r   stolenr   r   r   utcr-   r   r   r$   r    xranger  r   r   r  r  r8   rB   E_SCKE_SCK_WRE_ADDR_NOT_AVAILE_ADDR_IN_USEE_ACCESS	E_UNREACHIP6ALLr  
HAVE_FCNTLr  r  rm  rr  r  HAVE_SQLITE3r  rp  importlib.utilr  boolutil	find_specHAVE_ZMQr+  r!  rI  authsrvrI   broker_utilrJ   r  rK   FAKE_MPr  multiprocessingr;  iorM   rN   rV   r  r  rb   r[   r`   rc   calcsizer  r  RE_ANSIr  r<  r  r  r  r
  r   r   r  rC  r  register_surrogateescaper-  ro  utimer   SYMTIMEMETA_NOBOTSBAD_BOTS
FFMPEG_URLURL_PRJURL_BUGr1  IMPLICATIONSr  UNPLICATIONSDAV_ALLPROP_Lr  DAV_ALLPROPSr   r   rs  rR  rQ  DEF_EXPDEF_MTEDEF_MTHr   r:   
REKOBO_KEYr  REKOBO_LKEY_exestrrE  rF  APPLESAN_TXTAPPLESAN_RErt  rz  
VF_CAREFULFN_EMBr   	RAM_TOTALr  
executabler  zsgr6  r  r  r  r=  jinja2r>  pyftpdlib.__init__r  r?  partftpy.__init__r@  PY_DESCr   VERSIONSrA  	maketransr#  r'  r%  r*  r,  r.  rA  urlsafe_b64encodezb2r;  urlsafe_b64decode	b64encode	b64decoder7  r0  r>  rD  r@  r  rU  re  r~  r{  r  r  r  r  Unrecvr  r  r  r  r  r5  rE  rX  rI  rq  rs  r  rx  r  r  r  r  r  r  r  r  r  r  r  r  r   r-  r  rJ  rQ  rS  rX  r]  rb  rc  ra  ri  rr  rx  r|  r  r  r  r  r  r  r  r  rY  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  quotep_hexdfromhexr  r  urllib.parser  r  urllibr  r  r  r  r  r  r  r"  r&  r+  r.  r1  r5  r7  r:  r<  r  r  r>  r@  r  r  r  r  r  r   rB  rE  rI  rK  rP  rN  r  ry  r{  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r'  r3  r7  rH  rG  rT  rW  r]  rT  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  	lock_fileimportlib.resources	resourcesr  importlib_resourcesr  r  r  r  r  r$  r&  r-  r  r2  r  __all__)r   rA   r   r  r_   r   s   000000r(   <module>r     s   7            	  	        
     H H 	''CKK
 
 
 / #+
,,C& E v+X++-:E0 	?@()89 /0"#JK		J			zz~~&'kL7I&&&INN,,U34H	zz~~&'kK		zz~~o&rzz~~&89k &
		zz~~l#m  ,	zz~~n%kFV__e,I
5FMM%!KKEmmG'food#a'G
 "**(
)RZZ(
2::12==A2::8"--H6 

7 bjj*+bjj./ 66
#
#G
, ) ( ( *
sK+#++-K 
:288r:::B pD

-
C
C  	
 	  	       	   	!" 	#$ 
	*				 			5> fUOfUO
ENUOUO
ENj!wUOUOwfUO	5M	5M$K$KUO
DM
DM
DM
DM
DM58 
#u' 5!"* =! %$	 1F  !;;=	)41a!Q$	)  UO	 |
h
&
2 
EGEE7 
8 XXZc"12&= < 	
= rxxQ  
D )3(8(8(:;1qwwy!|; Iw~~g&,,./w}} _bjj& B 
				"	)	0  qSSI
	L	M(  z 	9 	"E%%' 
		v&,,s#C 
$5$J/8=
 ) LRR:w
Iz< 	?//%/K//%/K('6' 
B
"&
"
"2
&C
gbkR73</$$ 0	i 	8%Y %4%V %(v 4)17?? )1XCV CL	 	;"f ;"@ 
 * <5& 5p.i&& .b])V ])@6f 6<)v )XFF FR s&(XXF#
 BHC/R&)8<$N	32"2?b2JZf Zz	Y@*@L !'nLD 
'	,	,	.	:	@	@	B
/B .0*
9$.&2
+ :
8IJ(U++ RE s 	
q~HtO3q6AA'JJE E$K F$E>CSUSq1unna!e 44SSF 76F" W0"f/
/
6
6
9
I>@ /
/
 wFFEEF	G##E#FVEF 54E4FV"EF
+-?D$24 8 eB$ )+X48p !&6:(12!H4n/d8$: #=D$-`( 	W EPE .b@4F9x 	=BDbJRj4n4$
 P *ZD4 8* ::>>#$I"I II

'!RZZ^^4E%F m..
'!m
  4L(8	CY 	C6 $ 		UA(44lGv  &CVJ
	LHK	   	B $ !FI545'fooc"Q&GZ 
* D <B	dJIJLF  ?&&G&&GFF=>?Z2& TJ8  2   MsU  s s+ t 	t! 3t) %t3 -(t= Au 0&u &Au (+u1 u? 5v9A	v"v("v.v6 w  w
 $w 
A%w <-x27x7+<x= (y 
s(+&tt!t&)t03t:=uuuuu.1u<?v.v36v= w
wwx/#Ax**x/=yy
	y
yyyyyy+*y+