<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
a
    XC?hg¼  ã                   @   sê  d Z g d¢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ZdZG dd„ dejƒZG d	d
„ d
ejeƒZG dd„ dejƒZG dd„ deƒZdd„ Z da!dd„ Z"dd„ Z#G dd„ deƒZ$dd„ Z%eedddfdd„Z&e'dkræddl(Z(ddl)Z)e( *¡ Z+e+j,ddd d! e+j,d"d#d$d%d& e+j,d'd(e -¡ d)d* e+j,d+d,de.d-d.d/ e+ /¡ Z0e0j1r¾e$Z2neZ2G d0d1„ d1eƒZ3e&e2e3e0j4e0j5d2 dS )3z0.6)Ú
HTTPServerÚThreadingHTTPServerÚBaseHTTPRequestHandlerÚSimpleHTTPRequestHandlerÚCGIHTTPRequestHandleré    N)Ú
HTTPStatusa¹  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
        <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                   @   s   e Zd ZdZdd„ ZdS )r   é   c                 C   s4   t j | ¡ | jd d… \}}t |¡| _|| _d S )Né   )ÚsocketserverÚ	TCPServerÚserver_bindZserver_addressÚsocketZgetfqdnÚserver_nameÚserver_port)ÚselfÚhostÚport© r   ú0/opt/alt/python39/lib64/python3.9/http/server.pyr   ‡   s    zHTTPServer.server_bindN)Ú__name__Ú
__module__Ú__qualname__Zallow_reuse_addressr   r   r   r   r   r   ƒ   s   r   c                   @   s   e Zd ZdZdS )r   TN)r   r   r   Zdaemon_threadsr   r   r   r   r      s   r   c                	   @   s&  e Zd Zdej ¡ d  Zde Ze	Z
eZdZdd„ Zdd„ Zd	d
„ Zdd„ Zd4dd„Zd5dd„Zd6dd„Zdd„ Zdd„ Zdd„ Zd7dd„Zdd„ Ze dd „ e ed!ƒed"d#ƒ¡D ƒ¡Zd$ee d%ƒ< d&d'„ Z!d(d)„ Z"d8d*d+„Z#d,d-„ Z$g d.¢Z%g d/¢Z&d0d1„ Z'd2Z(e)j*j+Z,d3d „ e-j. /¡ D ƒZ0dS )9r   zPython/r   z	BaseHTTP/úHTTP/0.9c              
   C   sê  d | _ | j | _}d| _t| jdƒ}| d¡}|| _| ¡ }t	|ƒdkrLdS t	|ƒdkr |d }zT| 
d¡srt‚| d	d
¡d
 }| d¡}t	|ƒdkrœt‚t|d ƒt|d
 ƒf}W n* ttfyà   |  tjd| ¡ Y dS 0 |dkrú| jdkrúd| _|dkr|  tjd| ¡ dS || _dt	|ƒ  kr<dksTn |  tjd| ¡ dS |d d… \}}t	|ƒdkr˜d| _|dkr˜|  tjd| ¡ dS || | _ | _| j 
d¡rÆd	| j d	¡ | _ztjj| j| jd| _W n~ tjjy  } z"|  tjdt|ƒ¡ W Y d }~dS d }~0  tjjy^ } z"|  tjdt|ƒ¡ W Y d }~dS d }~0 0 | j dd¡}	|	 ¡ dkr„d| _n |	 ¡ dkr¤| jdkr¤d| _| j dd¡}
|
 ¡ dkræ| jdkræ| jdkræ|   ¡ sædS dS )NTz
iso-8859-1z
r   Fé   éÿÿÿÿzHTTP/ú/r   Ú.r	   zBad request version (%r))r   r   zHTTP/1.1)r	   r   zInvalid HTTP version (%s)zBad request syntax (%r)ZGETzBad HTTP/0.9 request type (%r)z//)Z_classzLine too longzToo many headersÚ
ConnectionÚ Úcloseú
keep-aliveZExpectz100-continue)!ÚcommandÚdefault_request_versionÚrequest_versionÚclose_connectionÚstrÚraw_requestlineÚrstripÚrequestlineÚsplitÚlenÚ
startswithÚ
ValueErrorÚintÚ
IndexErrorÚ
send_errorr   ZBAD_REQUESTÚprotocol_versionZHTTP_VERSION_NOT_SUPPORTEDÚpathÚlstripÚhttpÚclientZparse_headersÚrfileÚMessageClassÚheadersZLineTooLongZREQUEST_HEADER_FIELDS_TOO_LARGEZHTTPExceptionÚgetÚlowerÚhandle_expect_100)r   Úversionr(   ÚwordsZbase_version_numberZversion_numberr!   r1   ÚerrZconntypeZexpectr   r   r   Úparse_request  s¬    


þ
þþ
þ
ÿýýÿÿþ
z$BaseHTTPRequestHandler.parse_requestc                 C   s   |   tj¡ |  ¡  dS ©NT)Úsend_response_onlyr   ZCONTINUEÚend_headers©r   r   r   r   r:   v  s    z(BaseHTTPRequestHandler.handle_expect_100c              
   C   sì   z¬| j  d¡| _t| jƒdkrBd| _d| _d| _|  tj	¡ W d S | jsTd| _
W d S |  ¡ sbW d S d| j }t| |ƒs|  tjd| j ¡ W d S t| |ƒ}|ƒ  | j ¡  W n: tjyæ } z |  d|¡ d| _
W Y d }~d S d }~0 0 d S )Ni  i   r   TZdo_zUnsupported method (%r)zRequest timed out: %r)r5   Úreadliner&   r*   r(   r#   r!   r/   r   ZREQUEST_URI_TOO_LONGr$   r>   ÚhasattrÚNOT_IMPLEMENTEDÚgetattrÚwfileÚflushr   ZtimeoutÚ	log_error)r   ZmnameÚmethodÚer   r   r   Úhandle_one_requestˆ  s6    

þ
z)BaseHTTPRequestHandler.handle_one_requestc                 C   s"   d| _ |  ¡  | j s|  ¡  qd S r?   )r$   rL   rB   r   r   r   Úhandle­  s    zBaseHTTPRequestHandler.handleNc                 C   s
  z| j | \}}W n ty,   d\}}Y n0 |d u r:|}|d u rF|}|  d||¡ |  ||¡ |  dd¡ d }|dkrà|tjtjtjfvrà| j	|t
j|ddt
j|dddœ }| d	d
¡}|  d| j¡ |  dtt|ƒƒ¡ |  ¡  | jdkr|r| j |¡ d S )N)ú???rN   zcode %d, message %sr   r   éÈ   F©Úquote)ÚcodeÚmessageÚexplainzUTF-8ÚreplacezContent-TypeúContent-LengthZHEAD)Ú	responsesÚKeyErrorrI   Úsend_responseÚsend_headerr   Z
NO_CONTENTZRESET_CONTENTÚNOT_MODIFIEDÚerror_message_formatÚhtmlÚescapeÚencodeÚerror_content_typer%   r*   rA   r!   rG   Úwrite)r   rR   rS   rT   ZshortmsgZlongmsgÚbodyZcontentr   r   r   r/   µ  s:    þÿýz!BaseHTTPRequestHandler.send_errorc                 C   s:   |   |¡ |  ||¡ |  d|  ¡ ¡ |  d|  ¡ ¡ d S )NZServerZDate)Úlog_requestr@   rZ   Úversion_stringÚdate_time_string©r   rR   rS   r   r   r   rY   ê  s    
z$BaseHTTPRequestHandler.send_responsec                 C   sd   | j dkr`|d u r0|| jv r,| j| d }nd}t| dƒs@g | _| j d| j||f  dd¡¡ d S )Nr   r   r   Ú_headers_bufferz
%s %d %s
úlatin-1Ústrict)r#   rW   rD   rg   Úappendr0   r_   rf   r   r   r   r@   ÷  s    



ÿþz)BaseHTTPRequestHandler.send_response_onlyc                 C   sl   | j dkr6t| dƒsg | _| j d||f  dd¡¡ | ¡ dkrh| ¡ dkrVd| _n| ¡ d	krhd
| _d S )Nr   rg   z%s: %s
rh   ri   Z
connectionr   Tr    F)r#   rD   rg   rj   r_   r9   r$   )r   ÚkeywordÚvaluer   r   r   rZ     s    

ÿz"BaseHTTPRequestHandler.send_headerc                 C   s"   | j dkr| j d¡ |  ¡  d S )Nr   s   
)r#   rg   rj   Úflush_headersrB   r   r   r   rA     s    
z"BaseHTTPRequestHandler.end_headersc                 C   s(   t | dƒr$| j d | j¡¡ g | _d S )Nrg   ó    )rD   rG   ra   Újoinrg   rB   r   r   r   rm     s    
z$BaseHTTPRequestHandler.flush_headersú-c                 C   s.   t |tƒr|j}|  d| jt|ƒt|ƒ¡ d S )Nz
"%s" %s %s)Ú
isinstancer   rl   Úlog_messager(   r%   )r   rR   Úsizer   r   r   rc     s
    
ÿz"BaseHTTPRequestHandler.log_requestc                 G   s   | j |g|¢R Ž  d S ©N)rr   )r   ÚformatÚargsr   r   r   rI   )  s    z BaseHTTPRequestHandler.log_errorc                 C   s   i | ]}|d |d›“qS )z\xZ02xr   )Ú.0Úcr   r   r   Ú
<dictcomp>9  rn   z!BaseHTTPRequestHandler.<dictcomp>é    é   é    z\\ú\c                 G   s2   || }t j d|  ¡ |  ¡ | | j¡f ¡ d S )Nz%s - - [%s] %s
)ÚsysÚstderrra   Úaddress_stringÚlog_date_time_stringÚ	translateÚ_control_char_table)r   ru   rv   rS   r   r   r   rr   <  s    
þÿz"BaseHTTPRequestHandler.log_messagec                 C   s   | j d | j S )Nú )Úserver_versionÚsys_versionrB   r   r   r   rd   V  s    z%BaseHTTPRequestHandler.version_stringc                 C   s    |d u rt   ¡ }tjj|ddS )NT)Zusegmt)ÚtimeÚemailÚutilsZ
formatdate)r   Z	timestampr   r   r   re   Z  s    z'BaseHTTPRequestHandler.date_time_stringc              	   C   sB   t   ¡ }t  |¡\	}}}}}}}}	}
d|| j| ||||f }|S )Nz%02d/%3s/%04d %02d:%02d:%02d)r‡   Ú	localtimeÚ	monthname)r   ZnowZyearZmonthZdayZhhZmmZssÚxÚyÚzÚsr   r   r   r   `  s    ÿz+BaseHTTPRequestHandler.log_date_time_string)ZMonZTueZWedZThuZFriZSatZSun)NZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDecc                 C   s
   | j d S ©Nr   )Úclient_addressrB   r   r   r   r€   n  s    z%BaseHTTPRequestHandler.address_stringúHTTP/1.0c                 C   s   i | ]}||j |jf“qS r   )ÚphraseZdescription)rw   Úvr   r   r   ry   }  s   ÿ)NN)N)N)rp   rp   )N)1r   r   r   r~   r;   r)   r†   Ú__version__r…   ÚDEFAULT_ERROR_MESSAGEr\   ÚDEFAULT_ERROR_CONTENT_TYPEr`   r"   r>   r:   rL   rM   r/   rY   r@   rZ   rA   rm   rc   rI   r%   Ú	maketransÚ	itertoolsÚchainÚrangerƒ   Úordrr   rd   re   r   Zweekdaynamer‹   r€   r0   r3   r4   ZHTTPMessager6   r   Ú__members__ÚvaluesrW   r   r   r   r   r   “   sB   ij%
5


ÿ
	þr   c                       st   e Zd Zde Zdddddœ ZZddœ‡ fd	d
„
Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )r   zSimpleHTTP/zapplication/gzipúapplication/octet-streamzapplication/x-bzip2zapplication/x-xz)z.gzz.Zz.bz2z.xzN©Ú	directoryc                   s2   |d u rt  ¡ }t  |¡| _tƒ j|i |¤Ž d S rt   )ÚosÚgetcwdÚfspathr¡   ÚsuperÚ__init__)r   r¡   rv   Úkwargs©Ú	__class__r   r   r¦   ˜  s    z!SimpleHTTPRequestHandler.__init__c                 C   s6   |   ¡ }|r2z|  || j¡ W | ¡  n
| ¡  0 d S rt   )Ú	send_headÚcopyfilerG   r   ©r   Úfr   r   r   Údo_GETž  s
    zSimpleHTTPRequestHandler.do_GETc                 C   s   |   ¡ }|r| ¡  d S rt   )rª   r   r¬   r   r   r   Údo_HEAD§  s    z SimpleHTTPRequestHandler.do_HEADc                 C   sf  |   | j¡}d }tj |¡rÎtj | j¡}|j d¡s˜|  t	j
¡ |d |d |d d |d |d f}tj |¡}|  d|¡ |  dd	¡ |  ¡  d S d
D ]&}tj ||¡}tj |¡rœ|} qÎqœ|  |¡S |  |¡}| d¡rô|  t	jd¡ d S zt|dƒ}W n$ ty&   |  t	jd¡ Y d S 0 z t | ¡ ¡}d| jv rþd| jvrþztj | jd ¡}	W n ttttfy„   Y nz0 |	j d u r¢|	j!t"j#j$d}	|	j t"j#j$u rþt"j" %|j&t"j#j$¡}
|
j!dd}
|
|	krþ|  t	j'¡ |  ¡  | (¡  W d S |  t	j)¡ |  d|¡ |  dt*|d ƒ¡ |  d|  +|j&¡¡ |  ¡  |W S    | (¡  ‚ Y n0 d S )Nr   r   r   r	   r   é   ZLocationrV   Ú0)z
index.htmlz	index.htmzFile not foundÚrbzIf-Modified-SincezIf-None-Match)Útzinfo)ZmicrosecondúContent-typeé   zLast-Modified),Útranslate_pathr1   r¢   ÚisdirÚurllibÚparseZurlsplitÚendswithrY   r   ZMOVED_PERMANENTLYZ
urlunsplitrZ   rA   ro   ÚexistsÚlist_directoryÚ
guess_typer/   Ú	NOT_FOUNDÚopenÚOSErrorÚfstatÚfilenor7   rˆ   r‰   Zparsedate_to_datetimeÚ	TypeErrorr.   ÚOverflowErrorr,   r³   rU   ÚdatetimeÚtimezoneZutcZfromtimestampÚst_mtimer[   r   ÚOKr%   re   )r   r1   r­   ÚpartsZ	new_partsZnew_urlÚindexZctypeZfsZimsZ
last_modifr   r   r   rª   ­  s~    ÿ


ÿÿ
ÿ

ÿz"SimpleHTTPRequestHandler.send_headc              	   C   sÔ  zt  |¡}W n" ty0   |  tjd¡ Y d S 0 |jdd„ d g }ztjj	| j
dd}W n  ty|   tj 	| j
¡}Y n0 tj|dd}t ¡ }d	| }| d
¡ | d¡ | d| ¡ | d| ¡ | d| ¡ | d¡ |D ]v}t j
 ||¡}| }	}
t j
 |¡r |d }	|d }
t j
 |¡r6|d }	| dtjj|
ddtj|	ddf ¡ qè| d¡ d |¡ |d¡}t ¡ }| |¡ | d¡ |  tj¡ |  dd| ¡ |  dtt|ƒƒ¡ |  ¡  |S )NzNo permission to list directoryc                 S   s   |   ¡ S rt   )r9   )Úar   r   r   Ú<lambda>  rn   z9SimpleHTTPRequestHandler.list_directory.<locals>.<lambda>)ÚkeyÚsurrogatepass©ÚerrorsFrP   zDirectory listing for %szZ<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">z<html>
<head>z@<meta http-equiv="Content-Type" content="text/html; charset=%s">z<title>%s</title>
</head>z<body>
<h1>%s</h1>z	<hr>
<ul>r   ú@z<li><a href="%s">%s</a></li>z</ul>
<hr>
</body>
</html>
Ú
Úsurrogateescaper   r´   ztext/html; charset=%srV   ) r¢   ÚlistdirrÀ   r/   r   r¾   Úsortr¸   r¹   Úunquoter1   ÚUnicodeDecodeErrorr]   r^   r~   Úgetfilesystemencodingrj   ro   r·   ÚislinkrQ   r_   ÚioÚBytesIOra   ÚseekrY   rÈ   rZ   r%   r*   rA   )r   r1   ÚlistÚrZdisplaypathÚencÚtitleÚnameÚfullnameZdisplaynameZlinknameZencodedr­   r   r   r   r¼     sh    þ
ÿ


ÿ
ÿþÿ


z'SimpleHTTPRequestHandler.list_directoryc                 C   sÌ   |  dd¡d }|  dd¡d }| ¡  d¡}ztjj|dd}W n ty`   tj |¡}Y n0 t |¡}|  d¡}t	d |ƒ}| j
}|D ]0}tj |¡sŠ|tjtjfv r¬qŠtj ||¡}qŠ|rÈ|d7 }|S )Nú?r   r   ú#r   rÎ   rÏ   )r)   r'   rº   r¸   r¹   rÖ   r×   Ú	posixpathÚnormpathÚfilterr¡   r¢   r1   ÚdirnameÚcurdirÚpardirro   )r   r1   Ztrailing_slashr<   Zwordr   r   r   r¶   ?  s$    	


z'SimpleHTTPRequestHandler.translate_pathc                 C   s   t  ||¡ d S rt   )ÚshutilZcopyfileobj)r   ÚsourceZ
outputfiler   r   r   r«   ]  s    z!SimpleHTTPRequestHandler.copyfilec                 C   sX   t  |¡\}}|| jv r"| j| S | ¡ }|| jv r>| j| S t |¡\}}|rT|S dS )NrŸ   )rå   ÚsplitextÚextensions_mapr9   Ú	mimetypesr½   )r   r1   ÚbaseZextZguessÚ_r   r   r   r½   m  s    



z#SimpleHTTPRequestHandler.guess_type)r   r   r   r•   r…   rî   Z_encodings_map_defaultr¦   r®   r¯   rª   r¼   r¶   r«   r½   Ú__classcell__r   r   r¨   r   r   ƒ  s   ü
	X:r   c           	      C   sÎ   |   d¡\} }}tj | ¡} |  d¡}g }|d d… D ],}|dkrL| ¡  q6|r6|dkr6| |¡ q6|r˜| ¡ }|rœ|dkrŠ| ¡  d}qœ|dkrœd}nd}|r®d ||f¡}dd |¡ |f}d |¡}|S )Nrã   r   r   z..r   r   )Ú	partitionr¸   r¹   rÖ   r)   Úpoprj   ro   )	r1   rñ   ÚqueryÚ
path_partsZ
head_partsÚpartZ	tail_partZ	splitpathÚcollapsed_pathr   r   r   Ú_url_collapse_path‰  s.    


rù   c                  C   sn   t rt S zdd l} W n ty(   Y dS 0 z|  d¡d a W n, tyh   dtdd„ |  ¡ D ƒƒ a Y n0 t S )Nr   r   Únobodyr	   r   c                 s   s   | ]}|d  V  qdS )r	   Nr   )rw   rŒ   r   r   r   Ú	<genexpr>Ç  rn   znobody_uid.<locals>.<genexpr>)rú   ÚpwdÚImportErrorÚgetpwnamrX   ÚmaxZgetpwall)rü   r   r   r   Ú
nobody_uid»  s     r   c                 C   s   t  | t j¡S rt   )r¢   ÚaccessÚX_OK)r1   r   r   r   Ú
executableË  s    r  c                   @   sR   e Zd ZeedƒZdZdd„ Zdd„ Zdd„ Z	d	d
gZ
dd„ Zdd„ Zdd„ ZdS )r   Úforkr   c                 C   s$   |   ¡ r|  ¡  n|  tjd¡ d S )NzCan only POST to CGI scripts)Úis_cgiÚrun_cgir/   r   rE   rB   r   r   r   Údo_POSTá  s    
þzCGIHTTPRequestHandler.do_POSTc                 C   s   |   ¡ r|  ¡ S t | ¡S d S rt   )r  r  r   rª   rB   r   r   r   rª   ï  s    zCGIHTTPRequestHandler.send_headc                 C   sz   t | jƒ}| dd¡}|dkrB|d |… | jvrB| d|d ¡}q|dkrv|d |… ||d d …  }}||f| _dS dS )Nr   r   r   TF)rù   r1   ÚfindÚcgi_directoriesÚcgi_info)r   rø   Zdir_sepÚheadÚtailr   r   r   r  ö  s    

zCGIHTTPRequestHandler.is_cgiz/cgi-binz/htbinc                 C   s   t |ƒS rt   )r  )r   r1   r   r   r   Úis_executable  s    z#CGIHTTPRequestHandler.is_executablec                 C   s   t j |¡\}}| ¡ dv S )N)z.pyz.pyw)r¢   r1   rí   r9   )r   r1   r  r  r   r   r   Ú	is_python  s    zCGIHTTPRequestHandler.is_pythonc           )   	   C   sl  | j \}}|d | }| dt|ƒd ¡}|dkrˆ|d |… }||d d … }|  |¡}tj |¡rˆ|| }}| dt|ƒd ¡}q*qˆq*| d¡\}}}	| d¡}|dkrÆ|d |… ||d …  }
}n
|d }
}|d |
 }|  |¡}tj |¡s
|  	t
jd| ¡ d S tj |¡s.|  	t
jd| ¡ d S |  |¡}| jsF|sh|  |¡sh|  	t
jd| ¡ d S t tj¡}|  ¡ |d	< | jj|d
< d|d< | j|d< t| jjƒ|d< | j|d< tj |¡}||d< |  |¡|d< ||d< |	rð|	|d< | jd |d< | j  d¡}|r¶| !¡ }t|ƒdkr¶dd l"}dd l#}|d |d< |d  $¡ dkr¶z"|d  %d¡}| &|¡ 'd¡}W n |j(t)fy   Y n&0 | !d¡}t|ƒdkr¶|d |d< | j  d¡d u rØ| j *¡ |d< n| jd |d< | j  d¡}|r ||d< | j  d ¡}|r||d!< | j +d"d#¡}d$ ,|¡|d%< | j  d&¡}|rP||d'< t-d | j +d(g ¡ƒ}d) ,|¡}|r|||d*< d+D ]}| .|d¡ q€|  /t
j0d,¡ |  1¡  |	 2d-d.¡}| jræ|
g}d/|vrØ| 3|¡ t4ƒ }| j5 6¡  t 7¡ }|dkr^t 8|d¡\}}t9 9| j:gg g d¡d r:| j: ;d¡s
q:q
t <|¡}|rZ|  =d0|› ¡ d S zZzt >|¡ W n t?y‚   Y n0 t @| j: A¡ d¡ t @| j5 A¡ d¡ t B|||¡ W n(   | j C| jD| j¡ t Ed1¡ Y n0 n‚dd lF} |g}!|  |¡r:tGjH}"|" $¡  Id2¡r.|"d d3… |"d4d …  }"|"d5g|! }!d/|	vrN|! 3|	¡ |  Jd6|  K|!¡¡ ztL|ƒ}#W n tMtNfyˆ   d}#Y n0 | jO|!| jP| jP| jP|d7}$| j $¡ d8krÌ|#dkrÌ| j: ;|#¡}%nd }%t9 9| j:jQgg g d¡d r| j:jQ Rd¡sÐqqÐ|$ S|%¡\}&}'| j5 T|&¡ |'r0|  =d9|'¡ |$jU V¡  |$jW V¡  |$jX}(|(r^|  =d:|(¡ n
|  Jd;¡ d S )<Nr   r   r   rã   r   zNo such CGI script (%r)z#CGI script is not a plain file (%r)z!CGI script is not executable (%r)ZSERVER_SOFTWAREZSERVER_NAMEzCGI/1.1ZGATEWAY_INTERFACEZSERVER_PROTOCOLZSERVER_PORTZREQUEST_METHODZ	PATH_INFOZPATH_TRANSLATEDZSCRIPT_NAMEÚQUERY_STRINGZREMOTE_ADDRÚauthorizationr	   Z	AUTH_TYPEZbasicÚasciiú:ZREMOTE_USERzcontent-typeZCONTENT_TYPEzcontent-lengthÚCONTENT_LENGTHÚrefererÚHTTP_REFERERÚacceptr   ú,ZHTTP_ACCEPTz
user-agentÚHTTP_USER_AGENTZcookiez, ÚHTTP_COOKIE)r  ZREMOTE_HOSTr  r  r  r  zScript output followsú+r„   ú=zCGI script exit code r{   zw.exeéûÿÿÿéüÿÿÿz-uzcommand: %s)ÚstdinÚstdoutr   ÚenvZpostz%szCGI script exit status %#xzCGI script exited OK)Yr
  r  r*   r¶   r¢   r1   r·   ró   r»   r/   r   r¾   ÚisfileZ	FORBIDDENr  Ú	have_forkr  ÚcopyZdeepcopyÚenvironrd   Zserverr   r0   r%   r   r!   r¸   r¹   rÖ   r‘   r7   r8   r)   Úbase64Úbinasciir9   r_   ZdecodebytesÚdecodeÚErrorÚUnicodeErrorZget_content_typeZget_allro   rç   Ú
setdefaultrY   rÈ   rm   rU   rj   r   rG   rH   r  ÚwaitpidÚselectr5   ÚreadÚwaitstatus_to_exitcoderI   ÚsetuidrÀ   Údup2rÂ   ÚexecveZhandle_errorÚrequestÚ_exitÚ
subprocessr~   r  rº   rr   Zlist2cmdliner-   rÃ   r,   ÚPopenÚPIPEZ_sockZrecvZcommunicatera   r   r   r  Ú
returncode))r   ÚdirÚrestr1   ÚiZnextdirZnextrestZ	scriptdirrñ   rõ   ZscriptZ
scriptnameZ
scriptfileZispyr   Zuqrestr  r%  r&  Zlengthr  r  ZuaÚcoZ
cookie_strÚkZdecoded_queryrv   rú   ÚpidÚstsZexitcoder4  ZcmdlineZinterpÚnbytesÚpÚdatar  r   Zstatusr   r   r   r    s6   





þþ
þ


ÿ









ü

zCGIHTTPRequestHandler.run_cgiN)r   r   r   rD   r¢   r"  Zrbufsizer  rª   r  r	  r  r  r  r   r   r   r   r   Ð  s   
r   c                  G   s4   t j| t jt jdœŽ}tt|ƒƒ\}}}}}||fS )N)ÚtypeÚflags)r   ZgetaddrinfoZSOCK_STREAMZ
AI_PASSIVEÚnextÚiter)ZaddressZinfosZfamilyrB  ÚprotoZ	canonnameZsockaddrr   r   r   Ú_get_best_family×  s    ýrG  r’   i@  c           	      C   sÆ   t ||ƒ\|_}|| _||| ƒ’}|j ¡ d d… \}}d|v rLd|› dn|}td|› d|› d|› d|› d	ƒ z| ¡  W n$ ty¢   td	ƒ t 	d
¡ Y n0 W d   ƒ n1 s¸0    Y  d S )Nr	   r  ú[ú]zServing HTTP on z port z	 (http://z/) ...z&
Keyboard interrupt received, exiting.r   )
rG  Zaddress_familyr0   r   ZgetsocknameÚprintZserve_foreverÚKeyboardInterruptr~   Úexit)	ÚHandlerClassÚServerClassZprotocolr   ÚbindZaddrZhttpdr   Zurl_hostr   r   r   Útestá  s"    ÿÿÿrP  Ú__main__z--cgiÚ
store_truezrun as CGI server)ÚactionÚhelpz--bindz-bZADDRESSz8specify alternate bind address (default: all interfaces))ÚmetavarrT  z--directoryz-dz8specify alternate directory (default: current directory))ÚdefaultrT  r   Zstorerã   z&specify alternate port (default: 8000))rS  rV  rB  ÚnargsrT  c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚDualStackServerc                    sH   t  t¡$ | j tjtjd¡ W d   ƒ n1 s40    Y  tƒ  ¡ S r   )	Ú
contextlibÚsuppressÚ	Exceptionr   Z
setsockoptZIPPROTO_IPV6ZIPV6_V6ONLYr¥   r   rB   r¨   r   r   r     s
    
ÿ"zDualStackServer.server_bindc                 C   s   | j ||| tjd d S )Nr    )ZRequestHandlerClassrv   r¡   )r   r2  r‘   r   r   r   Úfinish_request  s    
ÿzDualStackServer.finish_request)r   r   r   r   r\  rò   r   r   r¨   r   rX    s   rX  )rM  rN  r   rO  )6r•   Ú__all__r#  rÅ   Zemail.utilsrˆ   r]   Zhttp.clientr3   rÚ   r™   rï   r¢   rå   r,  rë   r   r
   r~   r‡   Zurllib.parser¸   r   r–   r—   r   r   ZThreadingMixInr   ZStreamRequestHandlerr   r   rù   rú   r   r  r   rG  rP  r   ÚargparserY  ÚArgumentParserÚparserÚadd_argumentr£   r-   Ú
parse_argsrv   ZcgiZhandler_classrX  r   rO  r   r   r   r   Ú<module>S   sŒ      s  0  	
þ

ÿ
ÿÿþü