+
   P+ny                      R t . RGOt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ R	IHt R
tRtRHt ! R R]P4                  4      t ! R R]P8                  ]4      t ! R R]4      t ! R R]P8                  ]4      t ! R R]P@                  4      t! ! R R]!4      t"R t#Rs$R t%R t& ! R R]"4      t'R t(]!]RRRRRR3R lt)]*R8X  Ed%   ^ RI+t+^ RI,t,]+PZ                  ! RR7      t.].P_                  RRRR 7       ].P_                  R!R"R#R$R%7       ].P_                  R&R']P`                  ! 4       R(R)7       ].P_                  R*R+R,RR-R.7       ].P_                  R/R0R1R%7       ].P_                  R2R0R3R%7       ].P_                  R4R0R5R%7       ].P_                  R6R]1R7R8R97       ].Pe                  4       t3]3Ph                  '       g$   ]3Pj                  '       d   ].Pm                  R:4       Rt7]3Pp                  '       di   ]3Ph                  '       g   ].Pm                  R;4        ]9! ]3Pp                  R<R=R>7      ;_uu_ 4       t:]:Pw                  4       Py                  4       t7RRR4       ]3P~                  '       d   ]'t@M]"t@ ! R@ RA4      tA ! RB RC]A]4      tB ! RD RE]A]4      tC]3Ph                  '       d   ]CM]BtD])! ]@]D]3P                  ]3P                  ]3P                  ]3Ph                  ]3Pj                  ]7RF7       R# R#   + '       g   i     L; i  ]= d   t>].Pm                  R?]> 24        Rt>A>LRt>A>ii ; i)Iz0.6
HTTPServerThreadingHTTPServerHTTPSServerThreadingHTTPSServerBaseHTTPRequestHandlerSimpleHTTPRequestHandlerCGIHTTPRequestHandlerN)
HTTPStatusa  <!DOCTYPE HTML>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <style type="text/css">
            :root {
                color-scheme: light dark;
            }
        </style>
        <title>Error response</title>
    </head>
    <body>
        <h1>Error response</h1>
        <p>Error code: %(code)d</p>
        <p>Message: %(message)s.</p>
        <p>Error code explanation: %(code)s - %(explain)s.</p>
    </body>
</html>
ztext/html;charset=utf-8c                   .   a  ] tR t^t o RtRtR tRtV tR# )r   TFc                    \         P                  P                  V 4       V P                  R ,          w  r\        P
                  ! V4      V n        W n        R# )N   NN)socketserver	TCPServerserver_bindserver_addresssocketgetfqdnserver_nameserver_port)selfhostports   &  "/usr/lib/python3.14/http/server.pyr   HTTPServer.server_bind   s?    **40((,
!>>$/    )r   r   N)	__name__
__module____qualname____firstlineno__allow_reuse_addressallow_reuse_portr   __static_attributes____classdictcell__)__classdict__s   @r   r   r      s        r   c                       ] tR t^tRtRtR# )r   T Nr   r   r   r   daemon_threadsr"   r&   r   r   r   r          Nr   c                   X   a a ] tR t^t oR	RRRRRR/V 3R llltV 3R ltR tRtVtV ;t	# )
r   keyfileNpasswordalpn_protocolsc                  <  ^ RI pYn         Y@n        YPn        Y`n        Tf   R.MTT n        \        S	T `!  TTT4       R#   \         d    \        R4      hi ; i)    Nz3SSL module is missing; HTTPS support is unavailablezhttp/1.1)	sslImportErrorRuntimeErrorcertfiler+   r,   r-   super__init__)
r   r   RequestHandlerClassbind_and_activater3   r+   r,   r-   r0   	__class__s
   &&&&$$$$ r   r5   HTTPSServer.__init__   sq    	?
    +2ZL 	 	,*	,  	?  > ? ?	?s   A   Ac                   < \         SV `  4        V P                  4       pVP                  V P                  R R7      V n        R# )T)server_sideN)r4   server_activate_create_contextwrap_socketr   )r   contextr8   s   & r   r<   HTTPSServer.server_activate   s7    !&&())$++4)Hr   c                   V P                   P                  V P                   P                  P                  4      pVP	                  V P
                  V P                  V P                  4       VP                  V P                  4       V# N)
r0   create_default_contextPurposeCLIENT_AUTHload_cert_chainr3   r+   r,   set_alpn_protocolsr-   )r   r?   s   & r   r=   HTTPSServer._create_context   s]    ((11$((2B2B2N2NOt||T]]K""4#6#67r   )r-   r3   r+   r,   r   r0   T)
r   r   r   r   r5   r<   r=   r"   r#   __classcell__r8   r$   s   @@r   r   r      s7     ,>B,,/3, ,,I r   c                       ] tR t^tRtRtR# )r   Tr&   Nr'   r&   r   r   r   r      r)   r   c            	       x  a ] tR t^t oR]P
                  P                  4       ^ ,          ,           tR],           t	]
t]tRtR tR tR tR tRR	 ltRR
 ltRR ltR tR tR tRR ltR t]P9                  ]P<                  ! ]! ^ 4      ]! ^^4      4       U u/ uF	  q RV R 2bK  	  up 4      t R] ]!! R4      &   R t"R t#RR lt$R t%. ROt&. R Ot'R t(Rt)]*PV                  PX                  t-].P^                  Pa                  4        Uu/ uF  pWPb                  VPd                  3bK  	  upt3Rt4Vt5R# u up i u upi )!r   zPython/z	BaseHTTP/HTTP/0.9c                	   R pRV n         V P                  ;V n        pRV n        \	        V P
                  R4      pVP                  R4      pW0n        VP                  4       p\        V4      ^ 8X  d   R # \        V4      ^8  Edk   VR,          p VP                  R4      '       g   \        hVP                  R^4      ^,          pVP                  R4      p\        V4      ^8w  d   \        h\        ;QJ d    R V 4       F  '       g   K   RM	  R M! R V 4       4      '       d   \        R	4      h\        ;QJ d    R
 V 4       F  '       g   K   RM	  R M! R
 V 4       4      '       d   \        R4      h\        V^ ,          4      \        V^,          4      3pY n        TR8  d   T P$                  R8  d   R T n        TR8  d*   T P                  \         P&                  RT,          4       R # ^\        V4      u;8:  d   ^8:  g3   M RV n        V P                  \         P"                  RV,          4       R # VR,          w  rx\        V4      ^8X  dA   RV n        VR8w  d1   RV n        V P                  \         P"                  RV,          4       R # RpWxuV n         V n        V P(                  P                  R4      '       d(   RV P(                  P+                  R4      ,           V n        V'       d
   / V n        R#  \.        P0                  P3                  V P4                  V P6                  R7      V n        T P,                  P?                  RR4      p
T
PA                  4       R8X  d	   RT n        M-T
PA                  4       R8X  d   T P$                  R8  d   R T n        T P,                  P?                  RR4      pTPA                  4       R8X  d;   T P$                  R8  d*   T P                  R8  d   T PC                  4       '       g   R # R#   \        \        3 d3    RT n        T P                  \         P"                  RT,          4        R # i ; i  \.        P0                  P8                   d6   p	T P                  \         P:                  R\	        T	4      4        Rp	?	R # Rp	?	i\.        P0                  P<                   d6   p	T P                  \         P:                  R\	        T	4      4        Rp	?	R # Rp	?	ii ; i) FNTz
iso-8859-1
zHTTP//.c              3   J   "   T F  qP                  4       '       * x  K  	  R # 5irB   )isdigit.0	components   & r   	<genexpr>7BaseHTTPRequestHandler.parse_request.<locals>.<genexpr>e  s     O9,,...s   !#znon digit in http versionc              3   >   "   T F  p\        V4      ^
8  x  K  	  R# 5i)
   N)lenrU   s   & r   rX   rY   g  s     KNys9~*Ns   z unreasonable length http version zBad request version (%r)zHTTP/1.1zInvalid HTTP version (%s)zBad request syntax (%r)r   GETzBad HTTP/0.9 request type (%r)z//)_classzLine too longzToo many headers
Connectionclose
keep-aliveExpectz100-continue)   re   )r   r/   )"commanddefault_request_versionrequest_versionclose_connectionstrraw_requestlinerstriprequestlinesplitr\   
startswith
ValueErroranyint
IndexError
send_errorr	   BAD_REQUESTprotocol_versionHTTP_VERSION_NOT_SUPPORTEDpathlstripheadershttpclientparse_headersrfileMessageClassLineTooLongREQUEST_HEADER_FIELDS_TOO_LARGEHTTPExceptiongetlowerhandle_expect_100)r   is_http_0_9versionrm   wordsbase_version_numberversion_numberrf   rx   errconntypeexpects   &           r   parse_request$BaseHTTPRequestHandler.parse_request@  s    )-)E)EEw $$..=!((0&!!#u:?u:?BiG))'22$$&-mmC&;A&>#!4!:!:3!? ~&!+$$3OO333OOOO$%@AA3KNK333KNKKK$%GHH!$^A%6!7^A=N9O!O $+ 'D,A,AZ,O(-%'99/2EEG CJ#!##%D OO&&)K79 b	u:?$(D!%')$**4w>@ K")di 99%%dii..s33DI DL	;;44TZZ<@<M<M 5 ODL  <<##L"5>>w&$(D!nn,.##z1$)D!!!(B/LLNn,%%3$$
2))++[ 
+ ')$**.8: d {{&& 	OO::C {{(( 	OO::"C
 	sa   A'P 6P 
P %P ;P P */P ;:Q ?Q
QS4-*R S4>S4?*S//S4c                d    V P                  \        P                  4       V P                  4        R # rI   )send_response_onlyr	   CONTINUEend_headersr   s   &r   r   (BaseHTTPRequestHandler.handle_expect_100  s'     	
 3 34r   c                    V P                   P                  R 4      V n        \        V P                  4      R8  d7   RV n        RV n        RV n        V P                  \        P                  4       R# V P                  '       g
   RV n
        R# V P                  4       '       g   R# RV P                  ,           p\        W4      '       g4   V P                  \        P                  RV P                  ,          4       R# \        W4      pV! 4        V P                  P!                  4        R#   \"         d%   pT P%                  RT4       RT n
         Rp?R# Rp?ii ; i)i  i   r]   NTdo_zUnsupported method (%r)zRequest timed out: %r)r~   readlinerk   r\   rm   rh   rf   rt   r	   REQUEST_URI_TOO_LONGri   r   hasattrNOT_IMPLEMENTEDgetattrwfileflushTimeoutError	log_error)r   mnamemethodes   &   r   handle_one_request)BaseHTTPRequestHandler.handle_one_request  s   	#'::#6#6u#=D 4''(50#% ')$!
 ? ?@'''(,%%%''DLL(E4''..-<> T)FHJJ 	NN2A6$(D!		s7   A.D* 2D* D* D* %AD* <,D* *E5EEc                |    R V n         V P                  4        V P                   '       g   V P                  4        K$  R# )TN)ri   r   r   s   &r   handleBaseHTTPRequestHandler.handle  s3     $!'''##% (r   Nc                    V P                   V,          w  rEVf   TpVf   TpV P                  RW4       V P                  W4       V P	                  RR4       RpV^8  d   V\
        P                  \
        P                  \
        P                  39  d   V P                  RVR\        P                  ! VRR7      R	\        P                  ! VRR7      /,          pVP                  R
R4      pV P	                  RV P                  4       V P	                  R\        \        V4      4      4       V P!                  4        V P"                  R8w  d(   V'       d   V P$                  P'                  V4       R# R# R#   \         d    R R rT ELpi ; i)z???Nzcode %d, message %sr`   ra   codemessageFquoteexplainzUTF-8replacezContent-TypeContent-LengthHEAD)	responsesKeyErrorr   send_responsesend_headerr	   
NO_CONTENTRESET_CONTENTNOT_MODIFIEDerror_message_formathtmlescapeencodeerror_content_typerj   r\   r   rf   r   write)r   r   r   r   shortmsglongmsgbodycontents   &&&&    r   rt   !BaseHTTPRequestHandler.send_error  sY   $	- $t 4H ?G?G,d<4)w/
 CK..#11#002 2
 004;;we<4;;we<4 G
 >>'95D^T-D-DE-s3t9~><<6!dJJT" '+!=  	- %ug	-s   E6 6FFc                    V P                  V4       V P                  W4       V P                  R V P                  4       4       V P                  RV P	                  4       4       R# )ServerDateN)log_requestr   r   version_stringdate_time_stringr   r   r   s   &&&r   r   $BaseHTTPRequestHandler.send_response-  sR     	.4#6#6#89!6!6!89r   c                <   V P                   R 8w  d   Vf.   WP                  9   d   V P                  V,          ^ ,          pMRp\        V R4      '       g   . V n        V P                  P	                  RV P
                  W3,          P                  RR4      4       R# R# )rN   Nr]   _headers_bufferz
%s %d %s
latin-1strict)rh   r   r   r   appendrv   r   r   s   &&&r   r   )BaseHTTPRequestHandler.send_response_only:  s    :->>)"nnT215G G4!233')$  ''**D:*;<BF!8=-. .r   c                f   V P                   R 8w  dM   \        V R4      '       g   . V n        V P                  P                  V: RV: R2P	                  RR4      4       VP                  4       R8X  d?   VP                  4       R8X  d
   RV n        R# VP                  4       R	8X  d
   R
V n        R# R# R# )rN   r   z: rP   r   r   
connectionra   Trb   FN)rh   r   r   r   r   r   ri   )r   keywordvalues   &&&r   r   "BaseHTTPRequestHandler.send_headerH  s    :-4!233')$  ''!(%088HMO ==?l*{{}'(,%,.(-% / +r   c                    V P                   R 8w  d.   V P                  P                  R4       V P                  4        R# R# )rN   s   
N)rh   r   r   flush_headersr   s   &r   r   "BaseHTTPRequestHandler.end_headersV  s5    :-  ''0  .r   c                    \        V R 4      '       d>   V P                  P                  RP                  V P                  4      4       . V n        R# R# )r   r   N)r   r   r   joinr   r   s   &r   r   $BaseHTTPRequestHandler.flush_headers\  s>    4*++JJSXXd&:&:;<#%D  ,r   c                    \        V\        4      '       d   VP                  pV P                  R V P                  \        V4      \        V4      4       R# )z
"%s" %s %sN)
isinstancer	   r   log_messagerm   rj   )r   r   sizes   &&&r   r   "BaseHTTPRequestHandler.log_requesta  s@     dJ''::D))3t9c$i	Ar   c                .    V P                   ! V.VO5!   R # rB   )r   )r   formatargss   &&*r   r    BaseHTTPRequestHandler.log_errorl  s     	'$'r   z\x02xz\\\c           	         W,          p\         P                  P                  V P                  4       : R V P	                  4       : RVP                  V P                  4      : R24       R# )z - - [z] 
N)sysstderrr   address_stringlog_date_time_string	translate_control_char_table)r   r   r   r   s   &&* r   r   "BaseHTTPRequestHandler.log_message  sP    ( -

--/335!++D,D,DEG 	Hr   c                J    V P                   R ,           V P                  ,           # ) )server_versionsys_versionr   s   &r   r   %BaseHTTPRequestHandler.version_string  s    ""S(4+;+;;;r   c                v    Vf   \         P                   ! 4       p\        P                  P                  VRR7      # )NT)usegmt)timeemailutils
formatdate)r   	timestamps   &&r   r   'BaseHTTPRequestHandler.date_time_string  s-    		I{{%%i%==r   c           	         \         P                   ! 4       p\         P                  ! V4      w	  r#rErgrp
R W@P                  V,          W%Wg3,          pV# )z%02d/%3s/%04d %02d:%02d:%02d)r   	localtime	monthname)r   nowyearmonthdayhhmmssxyzss   &           r   r   +BaseHTTPRequestHandler.log_date_time_string  sJ    iik04s0C-SbaA*^^E*Db.> >r   c                (    V P                   ^ ,          # )r/   )client_addressr   s   &r   r   %BaseHTTPRequestHandler.address_string  s     ""1%%r   HTTP/1.0)r   ri   rf   rz   rx   rk   rh   rm   )NNrB   )-r  )MonTueWedThuFriSatSun)NJanFebMarAprMayJunJulAugSepOctNovDec)6r   r   r   r   r   r   rn   r   __version__r   DEFAULT_ERROR_MESSAGEr   DEFAULT_ERROR_CONTENT_TYPEr   rg   r   r   r   r   rt   r   r   r   r   r   r   r   rj   	maketrans	itertoolschainranger   ordr   r   r   r   weekdaynamer   r   rv   r{   r|   HTTPMessager   r	   __members__valuesphrasedescriptionr   r"   r#   )cvr$   s   00@r   r   r      sh    R ckk//1!44K
 !;.N03 )wr$#J&3#j:..!&
	A( --'0uT{E$tDT'UV'U!2aW'UVX%*D	"H4<> DK;I& " ;;**L
 ''..00A 	
HHamm$$0II WHs   D2!D7c                      a a ] tR tRt oR],           tRtRRRRRRR	R
/;ttRR/V 3R llt	R t
R tR tR tR tR tR tRtVtV ;t# )r   i  zSimpleHTTP/z.gzzapplication/gzipz.Zapplication/octet-streamz.bz2zapplication/x-bzip2z.xzzapplication/x-xz	directoryNc                  < Vf   \         P                  ! 4       p\         P                  ! V4      V n        \        SV `  ! V/ VB  R # rB   )osgetcwdfspathr7  r4   r5   )r   r7  r   kwargsr8   s   &$*,r   r5   !SimpleHTTPRequestHandler.__init__  s6    		I9-$)&)r   c                    V P                  4       pV'       d/    V P                  WP                  4       VP                  4        R # R #   TP                  4        i ; irB   )	send_headcopyfiler   ra   r   fs   & r   do_GETSimpleHTTPRequestHandler.do_GET  sA    NNa,		  	s   A	 	Ac                Z    V P                  4       pV'       d   VP                  4        R # R # rB   )r?  ra   rA  s   & r   do_HEAD SimpleHTTPRequestHandler.do_HEAD  s    NNGGI r   c                   V P                  V P                  4      pR p\        P                  P                  V4      '       Ed\   \        P
                  P                  V P                  4      pVP                  P                  R4      '       g   V P                  \        P                  4       V^ ,          V^,          V^,          R,           V^,          V^,          3p\        P
                  P                  V4      pV P                  RV4       V P                  RR4       V P                  4        R # V P                   FK  p\        P                  P                  W4      p\        P                  P!                  V4      '       g   KI  Tp M	  V P#                  V4      # V P%                  V4      pVP                  R4      '       d#   V P'                  \        P(                  R4       R #  \+        VR4      p \        P.                  ! TP1                  4       4      pRT P2                  9   Ed?   RT P2                  9  Ed-    \4        P6                  P9                  T P2                  R,          4      p	T	P:                  f+   T	P=                  \>        P@                  PB                  R	7      p	T	P:                  \>        P@                  PB                  J d   \>        P>                  PE                  TPF                  \>        P@                  PB                  4      p
T
P=                  ^ R
7      p
Y8:  dB   T P                  \        PH                  4       T P                  4        TPK                  4        R # T P                  \        PT                  4       T P                  RT4       T P                  R\W        T^,          4      4       T P                  RT PY                  TPF                  4      4       T P                  4        T#   \,         d%    T P'                  \        P(                  R4        R # i ; i  \L        \N        \P        \R        3 d     Li ; i   TPK                  4        h ; i)NrQ   Locationr   0zFile not foundrbzIf-Modified-SincezIf-None-Match)tzinfo)microsecondContent-typezLast-Modified)rQ   z%2fz%2F)-translate_pathrx   r9  isdirurllibparseurlsplitendswithr   r	   MOVED_PERMANENTLY
urlunsplitr   r   index_pagesr   isfilelist_directory
guess_typert   	NOT_FOUNDopenOSErrorfstatfilenorz   r   r   parsedate_to_datetimerL  r   datetimetimezoneutcfromtimestampst_mtimer   ra   	TypeErrorrs   OverflowErrorrp   OKrj   r   )r   rx   rB  parts	new_partsnew_urlindexctypefsims
last_modifs   &          r   r?  "SimpleHTTPRequestHandler.send_head  sK    ""499-77==LL))$))4E::&&':;;"":#?#?@"1XuQxqC"1XuQx1	 ,,11)<  W5  !137  "))T177>>%(( D	 * **400% ==OOJ002BC	T4 A
'	!((*%B#t||3't||;(++;;%89;C zz) "kk1B1B1F1FkGzzX%6%6%:%::%-%6%6%D%DKK):):)>)>&@
 &0%7%7A%7%F
%, ..z/F/FG ,,.GGI#'z}}-^U3-s2a5z:_%%bkk24HQ  	OOJ002BC	 ":}jI 8	GGIsK   *O; 7AQ  0P- 0C9Q +BQ ;+P*)P*-QQ 
QQ Q!c                    \         P                  ! V4      pTP                  R R7       . pT P                  pTP                  R^4      ^ ,          pTP                  R^4      ^ ,          p \        P                  P                  TRR7      p\        P                  ! TRR	7      p\        P                   ! 4       pR
T 2pTP#                  R4       TP#                  R4       TP#                  R4       TP#                  RT R24       TP#                  R4       TP#                  RT R24       TP#                  RT R24       TP#                  R4       T F  p\         P                  P%                  Y4      pT;r\         P                  P'                  T4      '       d   TR,           p	TR,           p
\         P                  P)                  T4      '       d
   TR,           p	TP#                  R\        P                  P+                  T
RR7      : R\        P                  ! T	RR	7      : R24       K  	  TP#                  R4       RP%                  T4      P-                  TR4      p\.        P0                  ! 4       pTP3                  T4       TP5                  ^ 4       T P7                  \        P8                  4       T P;                  RRT,          4       T P;                  R\=        \?        T4      4      4       T PA                  4        T#   \         d%    T P                  \        P
                  R 4        R# i ; i  \         d$    \        P                  P                  T4      p ELi ; i) zNo permission to list directoryNc                 "    V P                  4       # rB   )r   )as   &r   <lambda>9SimpleHTTPRequestHandler.list_directory.<locals>.<lambda>X  s
    	r   )key#?surrogatepasserrorsFr   zDirectory listing for z<!DOCTYPE HTML>z<html lang="en">z<head>z<meta charset="z">zD<style type="text/css">
:root {
color-scheme: light dark;
}
</style>z<title>z</title>
</head>z<body>
<h1>z</h1>z	<hr>
<ul>rQ   @z<li><a href="z	</a></li>z</ul>
<hr>
</body>
</html>
r   surrogateescaperN  ztext/html; charset=%sr   )!r9  listdirr]  rt   r	   r[  sortrx   rn   rQ  rR  unquoteUnicodeDecodeErrorr   r   r   getfilesystemencodingr   r   rP  islinkr   r   ioBytesIOr   seekr   rh  r   rj   r\   r   )r   rx   listrdisplaypathenctitlenamefullnamedisplaynamelinknameencodedrB  s   &&           r   rY  'SimpleHTTPRequestHandler.list_directoryI  s   	::d#D 			)	*ii!''Q/2!''Q/2	< ,,..{6E / GK kk+U;'')(6	"#	#$		?3%r*+	[\	75'!234	<we,-	Dww||D/H%))Kww}}X&&"Sj#:ww~~h''"SjHH||))(1@ * B{{;e<> ?  	
23))A,%%c+<=JJL		q	:==))@3)FG)3s7|+<=c  	OO$$13 		 " 	< ,,..{;K	<s#   L	 ,!L; 	+L87L8;*M)(M)c                   VP                  R ^4      ^ ,          pVP                  R^4      ^ ,          p \        P                  P                  VRR7      pVP                  R4      p\        P                  ! V4      pVP                  R4      p\        RV4      pV P                  pV Fn  p\        P                  P                  V4      '       g&   V\        P                  \        P                  39   d   KO  \        P                  P                  W4      pKp  	  V'       d
   VR,          pV#   \         d$    \        P                  P                  T4      p ELi ; i)rx  ry  rz  r{  rQ   N)rn   rQ  rR  r  r  rT  	posixpathnormpathfilterr7  r9  rx   dirnamecurdirpardirr   )r   rx   trailing_slashr   words   &&   r   rO  'SimpleHTTPRequestHandler.translate_path  s    zz#q!!$zz#q!!$	.<<''_'ED s+!!$'

3tU#~~Dwwt$$BII0F(F77<<+D	 
 CKD " 	.<<''-D	.s   !D, ,*EEc                2    \         P                  ! W4       R # rB   )shutilcopyfileobj)r   source
outputfiles   &&&r   r@  !SimpleHTTPRequestHandler.copyfile  s     	6.r   c                &   \         P                  ! V4      w  r#W0P                  9   d   V P                  V,          # VP                  4       pW0P                  9   d   V P                  V,          # \        P
                  ! V4      w  rEV'       d   V# R # )r6  )r  splitextextensions_mapr   	mimetypesguess_file_type)r   rx   baseextguess_s   &&    r   rZ  #SimpleHTTPRequestHandler.guess_type  sx     &&t,	%%%&&s++iik%%%&&s++,,T2L)r   r7  )z
index.htmlz	index.htm)r   r   r   r   r%  r   rW  r  _encodings_map_defaultr5   rC  rF  r?  rY  rO  r@  rZ  r"   r#   rJ   rK   s   @@r   r   r     st      #[0N-K!(%!	/ N+* *Vp;z</ * *r   c                 :   V P                  R 4      w  rp\        P                  P                  V 4      p V P	                  R4      p. pVRR  F@  pVR8X  d   VP                  4        K  V'       g   K&  VR8w  g   K/  VP                  V4       KB  	  V'       d=   VP                  4       pV'       d$   VR8X  d   VP                  4        RpMVR8X  d   RpMRpV'       d   R P                  Wb34      pRRP                  V4      ,           V3pRP                  V4      pV# )ry  rQ   Nz..rR   r]   rd   )	partitionrQ  rR  r  rn   popr   r   )	rx   r  query
path_parts
head_partspart	tail_part	splitpathcollapsed_paths	   &        r   _url_collapse_pathr    s     ^^C(NDU<<%D CJJ3B4<NNTdckt%	  
 NN$	D  	c!		HHi/0	sxx
++Y7IXXi(Nr   c                     \         '       d   \         #  ^ RIp  T P                  R4      ^,          s \         #   \         d    Ru # i ; i  \         d0    ^\        R T P                  4        4       4      ,           s  \         # i ; i)r/   Nnobodyc              3   2   "   T F  q^,          x  K  	  R# 5i)r   Nr&   )rV   r  s   & r   rX   nobody_uid.<locals>.<genexpr>  s     6~!1~s   rd   )r  pwdr1   getpwnamr   maxgetpwall)r  s    r   
nobody_uidr    s{     v7h'* M  	  7S6s||~666M7s    7 A
 AA
2BBc                 L    \         P                  ! V \         P                  4      # rB   )r9  accessX_OK)rx   s   &r   
executabler    s    99T277##r   c                   t   a a ] tR tRt oV 3R lt]! ]R4      t^ tR t	R t
R tRR.tR	 tR
 tR tRtVtV ;t# )r   i  c                V   < ^ RI pVP                  RRR7       \        SV `  ! V/ VB  R# )r/   Nz!http.server.CGIHTTPRequestHandler)remove)      )warnings_deprecatedr4   r5   )r   r   r<  r  r8   s   &*, r   r5   CGIHTTPRequestHandler.__init__!  s1    @$+ 	 	-$)&)r   forkc                    V P                  4       '       d   V P                  4        R# V P                  \        P                  R 4       R# )zCan only POST to CGI scriptsN)is_cgirun_cgirt   r	   r   r   s   &r   do_POSTCGIHTTPRequestHandler.do_POST.  s0     ;;==LLNOO**.0r   c                x    V P                  4       '       d   V P                  4       # \        P                  V 4      # rB   )r  r  r   r?  r   s   &r   r?  CGIHTTPRequestHandler.send_head<  s*    ;;==<<>!+55d;;r   c                    \        V P                  4      pVP                  R ^4      pV^ 8  d0   VRV V P                  9   g   VP                  R V^,           4      pK6  V^ 8  d   VRV W^,           R rCW43V n        R# R# )rQ   NTF)r  rx   findcgi_directoriescgi_info)r   r  dir_sepheadtails   &    r   r  CGIHTTPRequestHandler.is_cgiC  s     ,DII6 %%c1-k.'":d>R>R"R$))#wqy9GQ;'1>!)*3M$ JDMr   z/cgi-binz/htbinc                    \        V4      # rB   )r  )r   rx   s   &&r   is_executable#CGIHTTPRequestHandler.is_executable_  s    $r   c                j    \         P                  P                  V4      w  r#VP                  4       R9   # ).py)r  z.pyw)r9  rx   r  r   )r   rx   r  r  s   &&  r   	is_pythonCGIHTTPRequestHandler.is_pythonc  s)    WW%%d+
zz|..r   c                   V P                   w  rVR ,           V,           pVP                  R \        V4      ^,           4      pV^ 8  dn   VRV pW4^,           R pV P                  V4      p\        P
                  P                  V4      '       d'   YVr!VP                  R \        V4      ^,           4      pKs   VP                  R4      w  r(p	VP                  R 4      pV^ 8  d
   VRV W$R r*MTRr*VR ,           V
,           pV P                  V4      p\        P
                  P                  V4      '       g*   V P                  \        P                  RV,          4       R# \        P
                  P                  V4      '       g*   V P                  \        P                  RV,          4       R# V P                  V4      pV P                  '       g	   V'       gA   V P!                  V4      '       g*   V P                  \        P                  RV,          4       R# \"        P$                  ! \        P&                  4      pV P)                  4       VR&   V P*                  P,                  VR&   R	VR
&   V P.                  VR&   \1        V P*                  P2                  4      VR&   V P4                  VR&   \6        P8                  P;                  V4      pWR&   V P                  V4      VR&   WR&   WR&   V P<                  ^ ,          VR&   V P>                  PA                  R4      pV'       d   VPC                  4       p\        V4      ^8X  d   ^ RI"p^ RI#pV^ ,          VR&   V^ ,          PI                  4       R8X  dg    V^,          PK                  R4      pVPM                  V4      PO                  R4      pVPC                  R4      p\        V4      ^8X  d   V^ ,          VR&   V P>                  PA                  R4      f   V P>                  PU                  4       VR&   MV P>                  R,          VR&   V P>                  PA                  R4      pV'       d   VVR&   V P>                  PA                  R4      pV'       d   VVR&   V P>                  PW                  RR44      pR PY                  V4      VR!&   V P>                  PA                  R"4      pV'       d   VVR#&   \[        RV P>                  PW                  R$. 4      4      pR%PY                  V4      pV'       d   VVR&&   R5 F  pVP]                  VR4       K  	  V P_                  \        P`                  R'4       V Pc                  4        V	Pe                  R(R)4      pV P                  '       Ed   V
.pR*V9  d   VPg                  V4       \i        4       pV Pj                  Pm                  4        \        Pn                  ! 4       pV^ 8w  d   \        Pp                  ! V^ 4      w  pp\r        Pr                  ! V Pt                  .. . ^ 4      ^ ,          '       d%   V Pt                  Pw                  ^4      '       d   KT   \        Px                  ! V4      pV'       d   V P{                  R+V 24       R#   \        P|                  ! V4       \        P                  ! V Pt                  P                  4       ^ 4       \        P                  ! V Pj                  P                  4       ^4       \        P                  ! VVV4       R# ^ RIFp V.p!V P                  V4      '       dP   \        P                  p"V"PI                  4       P                  R,4      '       d   V"RR6 V"R7R ,           p"V"R-.V!,           p!R*V	9  d   V!Pg                  V	4       V P                  R.V P                  V!4      4        \        V4      p#V P                  V!V P                  V P                  V P                  VR/7      p$V P4                  PI                  4       R08X  d   V#^ 8  d   ^ p%V Pt                  Pw                  \        V#\        4      4      p&\        V&4      V#8  dT   \        V&4      V%8w  dD   \        V&4      p%\        V%V#V%,
          4      p' V&V Pt                  Pw                  V'4      ,          p&Kc  MRp&\r        Pr                  ! V Pt                  P                  .. . ^ 4      ^ ,          '       d/   V Pt                  P                  P                  ^4      '       d   Kh   V$P                  V&4      w  p(p)V Pj                  P                  V(4       V)'       d   V P{                  R1V)4       V$P                  P                  4        V$P                  P                  4        V$P                  p*V*'       d   V P{                  R2V*4       R# V P                  R34       R#   TPP                  \R        3 d     ELi ; i  \~         d     ELbi ; i   T P*                  P                  T P                  T P<                  4       \        P                  ! ^4        R# ; i  \        \        3 d    ^ p# ELi ; i  \         d     EK  i ; i)8rQ   Nry  r]   zNo such CGI script (%r)z#CGI script is not a plain file (%r)z!CGI script is not executable (%r)SERVER_SOFTWARESERVER_NAMEzCGI/1.1GATEWAY_INTERFACESERVER_PROTOCOLSERVER_PORTREQUEST_METHOD	PATH_INFOPATH_TRANSLATEDSCRIPT_NAMEQUERY_STRINGREMOTE_ADDRauthorization	AUTH_TYPEbasicascii:REMOTE_USERzcontent-typeCONTENT_TYPEzcontent-lengthCONTENT_LENGTHrefererHTTP_REFERERaccept,HTTP_ACCEPTz
user-agentHTTP_USER_AGENTcookiez, HTTP_COOKIEzScript output follows+r   =zCGI script exit code zw.exez-uzcommand: %s)stdinstdoutr   envpostz%szCGI script exit status %#xzCGI script exited OKr&   )r  REMOTE_HOSTr  r  r  r  )\r  r  r\   rO  r9  rx   rP  r  existsrt   r	   r[  rX  	FORBIDDENr  	have_forkr  copydeepcopyenvironr   serverr   rv   rj   r   rf   rQ  rR  r  r  rz   r   rn   base64binasciir   r   decodebytesdecodeErrorUnicodeErrorget_content_typeget_allr   r  
setdefaultr   rh  r   r   r   r  r   r   r  waitpidselectr~   readwaitstatus_to_exitcoder   setuidr]  dup2r_  execvehandle_errorrequest_exit
subprocessr   r  rT  r   list2cmdlinerr   rf  rp   PopenPIPEmin_MIN_READ_BUF_SIZEr   _sockrecvcommunicater   r   ra   r  
returncode)+r   dirrestrx   inextdirnextrest	scriptdirr  r  script
scriptname
scriptfileispyr  uqrestr  r  r  lengthr  r  uaco
cookie_strkdecoded_queryr   r  pidstsexitcoder%  cmdlineinterpnbytespcursizedatadeltar  r   statuss+   &                                          r   r  CGIHTTPRequestHandler.run_cgih  sd   MM	Sy4IIc3s8A:&1f2AhGaCDzH++G4Iww}}Y''#TIIc3s8A:. , IIcN68T"XDD3Y'
((4
ww~~j))OO$$)J68 ww~~j))OO$$5
BD ~~j)>>>%%j11((7*DF  mmBJJ'!%!4!4!6![[44M#, !%!6!6 !8!89M $%%d+!K!%!4!4V!<'M#N!003M((9)//1M=!Q&'#0#3K  #))+w6	B(5a(8(?(?(H(.(:(:=(I(.w &
 )6(;(;C(@}-21>q1AC.<<N+3"&,,"?"?"AC"&,,~">C!!"23$*C !,,""9-")C%%h3 XXf-M\\l+%'C!"D$,,..x<=YYr]
!+CDANN1b!D 	:==*ABc3/>>>8D-'M*\FJJ'')Cax::c1-SmmTZZL"b!<Q??::??1--44S9NN%:8*#EF
IIf% 

))+Q/

))+Q/		*dC0 !lG~~j))<<>**733#CR[6"#;6F!4.72%u%]J,C,CG,LMV   '1(2(2'*	 ! #A ||!!#v-&1*zzs63E'FG$i&(SY'-A!$iG  ')9:E

 66 --!1!1 2BA>qAAzz'',,Q//]]40NFFJJV$tV,HHNNHHNN\\F;VD  !78u %NNL9 z  
((t7J7JK" z* & ( sb   38g g/ A6h :i 	"i) g,+g,/g>:h =g>>h Aii&%i&)i98i9)r  )r   r   r   r   r5   r   r9  r  rbufsizer  r?  r  r  r  r  r  r"   r#   rJ   rK   s   @@r   r   r     sP     * F#I H0<4 "8,O /
C9 C9r   c                      \         P                  ! V R \         P                  R\         P                  / p\	        \        V4      4      w  r#rEpW&3# )typeflags)r   getaddrinfoSOCK_STREAM
AI_PASSIVEnextiter)addressinfosfamilyrN  proto	canonnamesockaddrs   *      r   _get_best_familyr[  .  sS    	 E
 04DK/@,F%Hr   r  i@  c                    \        WC4      w  Vn        pW n        V'       d   V! WVWgR 7      p	MV! W4      p	T	;_uu_ 4       p
V
P                  P	                  4       R,          w  rRV9   d   RV R2MTpV'       d   RMRp\        RV RV R	V R
VP                  4        RV RV R24        V
P                  4        RRR4       R#   \         d%    \        R4       \        P                  ! ^ 4        L8i ; i  + '       g   i     R# ; i))r3   r+   r,   r   r  []HTTPSHTTPzServing z on z port z (z://z/) ...z&
Keyboard interrupt received, exiting.N)r[  address_familyrv   r   getsocknameprintr   serve_foreverKeyboardInterruptr   exit)HandlerClassServerClassprotocolr   bindtls_certtls_keytls_passwordaddrr  httpdr   url_hosts   &&&&&&&&     r   testrq  8  s    (8'C$K$,!T(%,E T0	5\\--/3
"%+QtfA;4&7FxjTF& 7 !XJavV=	
	! 
 ! 	;<HHQK	 
s0    :C8;0C8,C,C52C84C55C88D		__main__T)colorz--cgi
store_truezrun as CGI server)actionhelpz-bz--bindADDRESSz.bind to this address (default: all interfaces))metavarrv  z-dz--directoryz1serve this directory (default: current directory))defaultrv  z-pz
--protocolVERSIONz3conform to this HTTP version (default: %(default)s))rx  ry  rv  z
--tls-certPATHz&path to the TLS certificate chain filez	--tls-keyzpath to the TLS key filez--tls-password-filez)path to the password file for the TLS keyr   ry  z(bind to this port (default: %(default)s))ry  rN  nargsrv  z'--tls-key requires --tls-cert to be setz1--tls-password-file requires --tls-cert to be setr  zutf-8)encodingz"Failed to read TLS password file: c                   8   a a ] tR tRt oV 3R ltR tRtVtV ;t# )DualStackServerMixini  c                  < \         P                  ! \        4      ;_uu_ 4        V P                  P	                  \        P
                  \        P                  ^ 4       RRR4       \        SV `!  4       #   + '       g   i     L; i)r/   N)	
contextlibsuppress	Exceptionr   
setsockoptIPPROTO_IPV6IPV6_V6ONLYr4   r   )r   r8   s   &r   r    DualStackServerMixin.server_bind  sX    $$Y//&&''););Q@ 0 7&(( 0/s   :A44B	c                J    V P                  WV \        P                  R 7       R# )r  N)r6   r   r7  )r   r#  r  s   &&&r   finish_request#DualStackServerMixin.finish_request  s     $$Wd/3~~ % ?r   r&   )	r   r   r   r   r   r  r"   r#   rJ   rK   s   @@r   r  r    s     	)	? 	?r   r  c                       ] tR tRtRtR# )HTTPDualStackServeri  r&   Nr   r   r   r   r"   r&   r   r   r  r        r   r  c                       ] tR tRtRtR# )HTTPSDualStackServeri  r&   Nr  r&   r   r   r  r    r  r   r  )rg  rh  r   rj  ri  rk  rl  rm  )r   r   r   r   r   r   r   i   )Hr%  __all__r  ra  email.utilsr   r   http.clientr{   r  r)  r  r9  r  r  r  r   r   r   r   urllib.parserQ  r	   r&  r'  r*  r   r   ThreadingMixInr   r   r   StreamRequestHandlerr   r   r  r  r  r  r   r[  rq  r   argparser  ArgumentParserparseradd_argumentr:  rr   
parse_argsr   rk  rl  errortls_key_passwordtls_password_filer\  rB  r  stripr]  r   cgihandler_classr  r  r  rh  r   rj  ri  r&   r   r   <module>r     sw  f       	   	      
    * 7   
 '' 
 ,55z "* "J<66 |\>> |~E*5 E*T,` 
 $
T94 T9n -(4d4@ z$$40F
0  2
h	9  : mRYY[<  = lI *6  7 fE  G
V7  9
-vH  J
3c6  7 D===T\\\>?}}}LLLM	Cd,,cGDD#$668>>#3  E
 xxx-0? ?24G 35I  +/---&=PK"YYYY%	I J ED 	CLL=aSABB	Cs6   >L* L:L* L'	"L* 'L* *M1M

M