
    z%i                     P   	 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 g dZdZdZdZdZdZd	Z e       j+                  ej,                  j.                         ej,                  j.                  j1                         D  ci c]  } | | j2                   c} Zd
ZdZ ej:                  d      j<                  Z ej:                  d      j@                  Z! ej:                  d      Z" ej:                  d      Z#h dZ$d:dZ% G d dejL                  jN                        Z(d Z)e(fdZ*e(fdZ+ G d dejX                        Z-d Z. G d d      Z/	 d dl0Z0 G d de/      Z1eje                  d        G d de4      Z5 G d  d!e5      Z6 G d" d#e5      Z7 G d$ d%e5      Z8 G d& d'e5      Z9 G d( d)e5      Z: G d* d+e5      Z; G d, d-e5      Z< G d. d/e<      Z= G d0 d1e<      Z> G d2 d3e<      Z? G d4 d5e5      Z@ G d6 d7e5      ZA G d8 d9eBe@      ZCe5ZDyc c} w # e3$ r Y w xY w);    N)urlsplit)HTTPResponseHTTPConnectionHTTPExceptionNotConnectedUnknownProtocolUnknownTransferEncodingUnimplementedFileModeIncompleteRead
InvalidURLImproperConnectionStateCannotSendRequestCannotSendHeaderResponseNotReadyBadStatusLineLineTooLongRemoteDisconnectederror	responsesP   i  UNKNOWNIdlezRequest-startedzRequest-senti   d   s   [^:\s][^:\r\n]*s   \n(?![ \t])|\r(?![ \t\n])z[ - ]z[ -]>   PUTPOSTPATCHc                    	 	 | j                  d      S # t        $ rl}t        |j                  |j                  |j                  |j
                  |j                         d| |j                  |j
                   dd|d      d d }~ww xY w)Nlatin-1z (z.20z) is not valid Latin-1. Use z9.encode('utf-8') if you want to send it encoded in UTF-8.)encodeUnicodeEncodeErrorencodingobjectstartendtitle)datanameerrs      ?/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/http/client.py_encoder*      s    F
E{{9%% E LLJJIIGG ZZ\4		#''2D:; AE	EEs    	B	A'BB	c                       e Zd Zd Zy)HTTPMessagec                     	 |j                         dz   }t        |      }g }d}| j                         D ]D  }|d | j                         |k(  rd}n|d d j                         sd}|s4|j	                  |       F |S )N:r      )lowerlenkeysisspaceappend)selfr'   nlsthitlines         r)   getallmatchingheadersz!HTTPMessage.getallmatchingheaders   s    	 zz|c!IIIK 	!DBQx~~4'"1X%%'

4 	! 
    N)__name__
__module____qualname__r:    r;   r)   r,   r,      s    r;   r,   c                     	 g }	 | j                  t        dz         }t        |      t        kD  rt        d      |j	                  |       t        |      t
        kD  rt        dt
        z        |dv r	 |S r)Nr/   zheader linezgot more than %d headers   
   
r;   )readline_MAXLINEr1   r   r4   _MAXHEADERSr   )fpheadersr9   s      r)   _read_headersrI      sy    
 G
{{8a<(t9xm,,tw<+% :[ HII((N r;   c                     	 dj                  |       j                  d      }t        j                  j	                  |      j                  |      S )Nr;   
iso-8859-1)_class)joindecodeemailparserParserparsestr)header_linesrL   hstrings      r)   _parse_header_linesrU      sE    	 hh|$++L9G<<f-66w??r;   c                 2    	 t        |       }t        ||      S N)rI   rU   )rG   rL   rH   s      r)   parse_headersrX      s    :BGw//r;   c                        e Zd ZddZd Zd Zd Zd Z fdZ fdZ	d Z
d	 Zd d
Zd Zd Zd Zd Zd dZd Zd Zd Zd!dZd!dZd! fd	Zd Zd Zd Zd dZd Zd Zd Zd Zd Z  xZ!S )"r   c                    |j                  d      | _        || _        || _        d x| _        | _        t        | _        t        | _        t        | _	        t        | _
        t        | _        t        | _        t        | _        y )Nrb)makefilerG   
debuglevel_methodrH   msg_UNKNOWNversionstatusreasonchunked
chunk_leftlength
will_close)r5   sockr]   methodurls        r)   __init__zHTTPResponse.__init__   se     --%$ #'&tx  ""r;   c                 l   t        | j                  j                  t        dz         d      }t	        |      t        kD  rt        d      | j                  dkD  rt        dt        |             |st        d      	 |j                  d d      \  }}}|j                  d	      s| j                          t        |      	 t              }|d
k  s|dkD  rt        |      	 ||fS # t        $ r- 	 |j                  d d      \  }}d}n# t        $ r d}Y nw xY wY w xY w# t        $ r t        |      w xY w)Nr/   rK   zstatus liner   zreply:z-Remote end closed connection without response    zHTTP/r   i  )strrG   rD   rE   r1   r   r]   printreprr   split
ValueError
startswith_close_connr   int)r5   r9   ra   rb   rc   s        r)   _read_statuszHTTPResponse._read_status  sD   477##HqL1<@t9xm,,??Q(DJ' % &1 2 2	&*jjq&9#GVV !!'*%%	&[F|v|#D))  , &&%  	"&**T1"5 		   	&%%	&sB   <C% ? D %	D/DDDDDDDD3c                    | j                   y 	 | j                         \  }}}|t        k7  rn2t        | j                        }| j
                  dkD  rt        d|       ~P|x| _        | _        |j                         | _
        |dv rd| _        n$|j                  d      rd| _        nt        |      t        | j                        x| _         | _        | j
                  dkD  r2| j                   j!                         D ]  \  }}t        d|d	z   |        | j                   j#                  d
      }|r"|j%                         dk(  rd| _        d | _        nd| _        | j+                         | _        d | _        | j                   j#                  d      }|r4| j&                  s(	 t1        |      | _        | j.                  dk  rd | _        nd | _        |t4        k(  s%|t6        k(  sd|cxk  rdk  sn | j8                  dk(  rd| _        | j,                  s"| j&                  s| j.                  d| _        y y y y # t2        $ r
 d | _        Y vw xY w)NTr   zheaders:)zHTTP/1.0zHTTP/0.9
   zHTTP/1.   header:r.   transfer-encodingrd   Fcontent-lengthr      HEAD)rH   rw   CONTINUErI   rG   r]   rp   coderb   striprc   ra   rt   r   rX   r_   itemsgetr0   rd   re   _check_closerg   rf   rv   rs   
NO_CONTENTNOT_MODIFIEDr^   )	r5   ra   rb   rc   skipped_headershdrvaltr_encrf   s	            r)   beginzHTTPResponse.begin=  s   <<# &*&7&7&9#GVV!+DGG4O"j/2  #)(	DKlln..DL	*DL!'**"/"88tx??Q LL..0 1SisC01 !!"56flln	1DL"DO DL ++- !!"23$,,'!&k ;;?"&DKDK j Fl$:6CLLF"DK
 KK"DO     #  #"#s    H2 2IIc                 F   | j                   j                  d      }| j                  dk(  r|rd|j                         v ryy| j                   j                  d      ry|rd|j                         v ry| j                   j                  d      }|rd|j                         v ryy)N
connectionrz   closeTFz
keep-alivezproxy-connection)rH   r   ra   r0   )r5   connpconns      r)   r   zHTTPResponse._check_close  s    ||-<<2 4::</ <<L) LDJJL0   !34\U[[]2 r;   c                 J    | j                   }d | _         |j                          y rW   )rG   r   )r5   rG   s     r)   ru   zHTTPResponse._close_conn  s    WW

r;   c                     	 t         |           | j                  r| j                          y y # | j                  r| j                          w w xY wrW   )superr   rG   ru   r5   	__class__s    r)   r   zHTTPResponse.close  sB    	#GMOww  " tww  " s	   / Ac                 p    t         |           | j                  r| j                  j                          y y rW   )r   flushrG   r   s    r)   r   zHTTPResponse.flush  s%    77GGMMO r;   c                      	 y)NTr?   r5   s    r)   readablezHTTPResponse.readable  s    !r;   c                      	 | j                   d u S rW   )rG   r   s    r)   isclosedzHTTPResponse.isclosed  s    / ww$r;   c                    	 | j                   y| j                  dk(  r| j                          y| j                  r| j	                  |      S || j
                  || j
                  kD  r| j
                  }| j                   j                  |      }|s|r| j                          |S | j
                  :| xj
                  t        |      z  c_        | j
                  s| j                          |S | j
                  | j                   j                         }n#	 | j                  | j
                        }d| _        | j                          |S # t        $ r | j                           w xY w)Nr;   r   r   )
rG   r^   ru   rd   _read_chunkedrf   readr1   
_safe_readr   )r5   amtss      r)   r   zHTTPResponse.read  s5   M77?<<6!<<%%c**?{{&3+<kkS!A   "
 H	 (s1v%{{$$&H {{"GGLLN4A  H & $$&s   E
 
E%c                    	 | j                   y| j                  dk(  r| j                          y| j                  r| j	                  |      S | j
                  0t        |      | j
                  kD  rt        |      d| j
                   }| j                   j                  |      }|s|r| j                          |S | j
                  1| xj
                  |z  c_        | j
                  s| j                          |S )Nr   r   )	rG   r^   ru   rd   _readinto_chunkedrf   r1   
memoryviewreadinto)r5   br6   s      r)   r   zHTTPResponse.readinto  s    	 77?<<6!<<))!,,;;"1v#qM!DKK0
 GGQQ 
 	 [[$KK1K;;  "r;   c                    | j                   j                  t        dz         }t        |      t        kD  rt	        d      |j                  d      }|dk\  r|d | }	 t        |d      S # t        $ r | j                           w xY w)Nr/   z
chunk size   ;r      )	rG   rD   rE   r1   r   findrv   rs   ru   )r5   r9   is      r)   _read_next_chunk_sizez"HTTPResponse._read_next_chunk_size  s    ww1-t9xl++IIdO68D	tR=  	 		s   A( (Bc                     	 | j                   j                  t        dz         }t        |      t        kD  rt	        d      |sy |dv ry H)Nr/   ztrailer linerA   )rG   rD   rE   r1   r   r5   r9   s     r)   _read_and_discard_trailerz&HTTPResponse._read_and_discard_trailer"  sO     77##HqL1D4y8#!.11 ,, r;   c                     | j                   }|sR|| j                  d       	 | j                         }|dk(  r"| j                          | j                          d }|| _         |S # t        $ r t	        d      w xY w)Nrm   r;   r   )re   r   r   rs   r   r   ru   )r5   re   s     r)   _get_chunk_leftzHTTPResponse._get_chunk_left0  s     __
%"*!779
 Q..0  "!
(DO  *$S))*s   A# #A8c                    g }	 | j                         x}s|0||k  r+|j                  | j                  |             ||z
  | _        nA|j                  | j                  |             |||z  }d| _        | j                         x}sdj	                  |      S # t
        $ r }t        dj	                  |            |d }~ww xY wNr   r;   )r   r4   r   re   rM   r   )r5   r   valuere   excs        r)   r   zHTTPResponse._read_chunkedH  s    	;!%!5!5!77:D?sj'8LL!56&03&6DOT__Z89?:%C"# "&!5!5!77:D 88E?" 	; %1s:	;s   BB 	B 	C#B>>Cc                 <   d}t        |      }	 	 | j                         }||S t        |      |k  r | j                  |      }||z
  | _        ||z   S |d | }| j                  |      }||d  }||z  }d| _        j# t
        $ r t        t        |d|             w xY w)Nr   )r   r   r1   _safe_readintore   r   bytes)r5   r   total_bytesmvbre   r6   temp_mvbs          r)   r   zHTTPResponse._readinto_chunkedZ  s    m	:!113
%&&s8z)++C0A&01nDO&?*{
+''1!"gq "#    	: q;'7!899	:s   A: -A: (A: :!Bc                     	 | j                   j                  |      }t        |      |k  rt        ||t        |      z
        |S rW   )rG   r   r1   r   )r5   r   r&   s      r)   r   zHTTPResponse._safe_readr  s@    	 ww||C t9s? s3t9}55r;   c                     	 t        |      }| j                  j                  |      }||k  rt        t	        |d |       ||z
        |S rW   )r1   rG   r   r   r   )r5   r   r   r6   s       r)   r   zHTTPResponse._safe_readinto~  sI    @!fGGQs7 q!us1u55r;   c                    	 | j                   | j                  dk(  ry| j                  r| j                  |      S | j                   |dk  s|| j                  kD  r| j                  }| j                   j                  |      }|s|r| j                          |S | j                  | xj                  t        |      z  c_        |S Nr   r;   r   )rG   r^   rd   _read1_chunkedrf   read1ru   r1   )r5   r6   results      r)   r   zHTTPResponse.read1  s    	 77?dllf4<<&&q));;"AT[[Aq!!  [[$KK3v;&Kr;   c                     | j                   | j                  dk(  ry| j                  r| j                  |      S | j                   j	                  |      S )Nr   r;   )rG   r^   rd   _peek_chunkedpeek)r5   r6   s     r)   r   zHTTPResponse.peek  sE     77?dllf4<<%%a((ww||Ar;   c                    | j                   | j                  dk(  ry| j                  rt        |   |      S | j
                   |dk  s|| j
                  kD  r| j
                  }| j                   j	                  |      }|s|r| j                          |S | j
                  | xj
                  t        |      z  c_        |S r   )rG   r^   rd   r   rD   rf   ru   r1   )r5   limitr   r   s      r)   rD   zHTTPResponse.readline  s    77?dllf4<<7#E**;;"	UT[[5HKKE!!%(%  [[$KK3v;&Kr;   c                     | j                         }||dk(  ryd|cxk  r|k  sn |}| j                  j                  |      }| xj                  t	        |      z  c_        |st        d      |S r   )r   rG   r   re   r1   r   )r5   r6   re   r   s       r)   r   zHTTPResponse._read1_chunked  sj     ))+
aQ$*$Aww}}Q3t9$ %%r;   c                     	 | j                         }|y| j                  j                  |      d | S # t        $ r Y yw xY w)Nr;   )r   r   rG   r   )r5   r6   re   s      r)   r   zHTTPResponse._peek_chunked  sP    	--/J  ww||J'44  		s   3 	??c                 6    | j                   j                         S rW   )rG   filenor   s    r)   r   zHTTPResponse.fileno  s    ww~~r;   c                     	 | j                   
t               | j                   j                  |      xs |}t        |t              st        |d      s|S dj                  |      S )N__iter__z, )rH   r   get_all
isinstancero   hasattrrM   )r5   r'   defaultrH   s       r)   	getheaderzHTTPResponse.getheader  s\    
	 <<"$$,,&&t,7gs#77J+GN99W%%r;   c                 v    	 | j                   
t               t        | j                   j                               S rW   )rH   r   listr   r   s    r)   
getheaderszHTTPResponse.getheaders  s0    4<<"$$DLL&&())r;   c                     | S rW   r?   r   s    r)   r   zHTTPResponse.__iter__  s    r;   c                     	 | j                   S rW   )rH   r   s    r)   infozHTTPResponse.info  s    	( ||r;   c                     	 | j                   S rW   )rj   r   s    r)   geturlzHTTPResponse.geturl  s    	 xxr;   c                     	 | j                   S rW   )rb   r   s    r)   getcodezHTTPResponse.getcode  s    	 {{r;   )r   NNrW   ))"r<   r=   r>   rk   rw   r   r   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rD   r   r   r   r   r   r   r   r   r   __classcell__r   s   @r)   r   r      s    #<'BF#P:
#
&P D 0;$:0
"5 &(*
.
r;   r   c                     t        j                         }| dk(  r|j                  dg       |j                  d|_        |S )Nrz   zhttp/1.1T)ssl_create_default_https_contextset_alpn_protocolspost_handshake_auth)http_versioncontexts     r)   _create_https_contextr     sC     //1Gr""J<0"".&*#Nr;   c                      e Zd ZdZdZeZeZdZ	dZ
ed        Zed        Zdej                  ddfd	Zd!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d Zd Z d Z!d$dddZ"di fdddZ#d Z$d  Z%y)%r   rz   zHTTP/1.1r/   r   c                 8    	 t        | t        j                        S rW   )r   io
TextIOBase)streams    r)   
_is_textIOzHTTPConnection._is_textIO0  s    	&"--00r;   c                     	 | |j                         t        v ryy t        | d      ry 	 t        |       }|j                  S # t
        $ r Y nw xY wt        | t              rt        |       S y )Nr   r   )	upper_METHODS_EXPECTING_BODYr   r   nbytes	TypeErrorr   ro   r1   )bodyri   mvs      r)   _get_content_lengthz"HTTPConnection._get_content_length6  sv    	 < ||~!884 	D!B99 		 dC t9s   A 	AAN    c                 R   || _         || _        || _        d | _        g | _        d | _        t        | _        d | _        d | _	        d | _
        i | _        d | _        | j                  ||      \  | _        | _        | j!                  | j                         t"        j$                  | _        y rW   )timeoutsource_address	blocksizerh   _buffer_HTTPConnection__response_CS_IDLE_HTTPConnection__stater^   _tunnel_host_tunnel_port_tunnel_headers_raw_proxy_headers_get_hostporthostport_validate_hostsocketcreate_connection_create_connection)r5   r  r  r   r   r   s         r)   rk   zHTTPConnection.__init__V  s    ,"	  !"&!%!3!3D$!?DIDII& #)":":r;   c                    	 | j                   rt        d      | j                  ||      \  | _        | _        |r|j                         | _        n| j                  j                          t        d | j                  D              sI| j                  j                  d      j                  d      }d|| j                  fz  | j                  d<   y y )Nz.Can't set up tunnel for established connectionc              3   B   K   | ]  }|j                         d k(    yw)r  Nr0   ).0headers     r)   	<genexpr>z,HTTPConnection.set_tunnel.<locals>.<genexpr>  s     O6<<>V+Os   idnaasciiz%s:%dHost)rh   RuntimeErrorr  r  r  copyr  clearanyr   rN   )r5   r  r  rH   encoded_hosts        r)   
set_tunnelzHTTPConnection.set_tunnelm  s    	* 99OPP/3/A/A$/M,4,#*<<>D   &&(O$:N:NOO,,33F;BB7KL+2d//61 ,1D  ( Pr;   c                 H   |b|j                  d      }|j                  d      }||kD  r	 t        ||dz   d        }|d | }n| j                  }|r|d   dk(  r|d   dk(  r|dd }||fS # t        $ r/ ||dz   d  dk(  r| j                  }nt	        d||dz   d  z        Y dw xY w)	Nr.   ]r/   rn   znonnumeric port: '%s'r   [r   )rfindrv   rs   default_portr   )r5   r  r  r   js        r)   r  zHTTPConnection._get_hostport  s    <

3A

3A1uOtAaCDz?D BQx((Q348s?Abzd| " OAaCDzR'#00()@4!:)MNN Os   A) )5B! B!c                     || _         y rW   )r]   )r5   levels     r)   set_debuglevelzHTTPConnection.set_debuglevel  s	    r;   c                    d| j                   j                  d      | j                  | j                  j                  d      fz  }|g}| j                  j                         D ]+  \  }}|j                  | d| dj                  d             - |j                  d       | j                  dj                  |             ~| j                  | j                  | j                  	      }	 |j                         \  }}}t        |j                        | _        | j                   d
kD  r+| j                  D ]  }t#        d|j%                                 |t&        j(                  j*                  k7  r/| j-                          t/        d| d|j1                                	 |j-                          y # |j-                          w xY w)Ns   CONNECT %s:%d %s
r  r  z: 
r   rB   r;   ri   r   r{   zTunnel connection failed:  )r  r   r  _http_vsn_strr  r   r4   sendrM   response_classrh   r^   rw   rI   rG   r  r]   rp   rN   http
HTTPStatusOKr   OSErrorr   )	r5   connectrH   r  r   responsera   r   messages	            r)   _tunnelzHTTPConnection._tunnel  s   )$$V,d.?.?%%g.-0 0 )!11779 	GMFENNfXRwd3::9EF	Gw 			#((7#$&&tyy&F	'/'<'<'>$WdG&3HKK&@D#""55 6F)V]]_56 t)))

 :4&'--/ARSTT *
 NNHNNs   *B4F0 0Gc                 J    	 | j                   t        | j                         S d S rW   )r  rU   r   s    r)   get_proxy_response_headersz)HTTPConnection.get_proxy_response_headers  s4    	 &&2   7 78	
 	
r;   c                    	 t        j                  d| | j                  | j                         | j	                  | j                  | j                  f| j
                  | j                        | _        	 | j                  j                  t        j                  t        j                  d       | j                  r| j!                          y y # t        $ r(}|j                  t        j                  k7  r Y d }~Jd }~ww xY w)Nzhttp.client.connectr/   )sysauditr  r  r  r   r   rh   
setsockoptr	  IPPROTO_TCPTCP_NODELAYr.  errnoENOPROTOOPTr  r2  r5   es     r)   r/  zHTTPConnection.connect  s    A		'tyy$))D++YYtyy!4<<1D1DF		II  !3!3V5G5GK
 LLN 	  	ww%+++ ,	s   19C 	C9C44C9c                 
   	 t         | _        	 | j                  }|rd | _        |j                          | j                  }|rd | _        |j                          y y # | j                  }|rd | _        |j                          w w xY wrW   )r   r   rh   r   r   )r5   rh   r0  s      r)   r   zHTTPConnection.close  su    6		!99D 	

H"&   H"&  s   %A (Bc                    	 | j                   '| j                  r| j                          n
t               | j                  dkD  rt        dt        |             t        |d      r| j                  dkD  rt        d       | j                  |      }|r| j                  dkD  rt        d       |j                  | j                        x}rc|r|j                  d      }t        j                  d| |       | j                   j                  |       |j                  | j                        x}rcy t        j                  d| |       	 | j                   j                  |       y # t        $ r` t!        |t"        j$                  j&                        r$|D ]  }| j                   j                  |        Y y t        dt)        |      z        w xY w)	Nr   zsend:r   zsending a readableencoding file using iso-8859-1rK   zhttp.client.sendz9data should be a bytes-like object or an iterable, got %r)rh   	auto_openr/  r   r]   rp   rq   r   r   r   r   r   r6  r7  sendallr   r   collectionsabcIterabletype)r5   r&   r   	datablockds        r)   r)  zHTTPConnection.send  s   	
 99~~"n$??Q'4:&4 "*+__T*F$//A-67#yy88)8 ) 0 0 >I		,dI>		!!),	  $yy88)8
 		$dD1	GIId# 	G$ 8 89 )AII%%a()   !9;?:!F G G	Gs   E! !AG
2G
c                 <    	 | j                   j                  |       y rW   )r   r4   )r5   r   s     r)   _outputzHTTPConnection._output  s    	 	Ar;   c              #   @  K   | j                   dkD  rt        d       | j                  |      }|r| j                   dkD  rt        d       |j                  | j                        x}r6|r|j                  d      }| |j                  | j                        x}r5y y w)Nr   zreading a readablerA  rK   )r]   rp   r   r   r   r   )r5   r   r   rH  s       r)   _read_readablezHTTPConnection._read_readable  s     ??Q&'*doo)23#==88i8%,,\:	O $==88i8s   BBBFc                    	 | j                   j                  d       dj                  | j                         }| j                   d d = | j                  |       |t	        |d      r| j                  |      }n	 t        |       |f}|D ]e  }|s| j                  dkD  rt        d        |r3| j                  dk(  r$t        |      dd	j                  d
      |z   dz   }| j                  |       g |r"| j                  dk(  r| j                  d       y y y y # t        $ r4 	 t        |      }n$# t        $ r t        dt        |      z        w xY wY w xY w)N)r;   r;   rB   r   zAmessage_body should be a bytes-like object or an iterable, got %rr   zZero length chunk ignoredrz   Xr%  r  s   0

)r   extendrM   r)  r   rM  r   r   iterrG  r]   rp   	_http_vsnr1   r   )r5   message_bodyencode_chunkedr_   chunkschunks         r)   _send_outputzHTTPConnection._send_output)  sj   	
 	J'll4<<(LLO		## |V, ,,\:-
 |, +_F 
!*9:!dnn&:"5z!nD188AEI!"E		% 
! $..B"6		,' #7~O $ ! >>!%l!3$ >' )H*.|*<)= > >> >s*   9D 	E!D-,E-!EEEc                 `   	 | j                   r!| j                   j                         rd | _         | j                  t        k(  rt        | _        nt        | j                        | j                  |       || _        |xs d}| j                  |       |d|d| j                  }| j                  | j                  |             | j                  dk(  r|s d}|j                  d      rt        |      \  }}}}}|r%	 |j                  d      }| j#                  d|       n| j$                  r| j$                  }	| j&                  }
n| j(                  }	| j*                  }
	 |	j                  d      }|	j-                  d	      d
k\  rd|z   dz   }|
| j.                  k(  r| j#                  d|       n(|j1                  d      }| j#                  d|d	|
       |s| j#                  dd       y y y # t         $ r |j                  d      }Y w xY w# t         $ r |	j                  d      }Y w xY w)N/r'  rz   rn   r+  r  r  r  r.   r      [   ]zAccept-Encodingidentity)r   r   r   r   _CS_REQ_STARTEDr   _validate_methodr^   _validate_pathr(  rK  _encode_requestrR  rt   r   r   r    	putheaderr  r  r  r  r   r  rN   )r5   ri   rj   	skip_hostskip_accept_encodingrequestnetlocnil
netloc_encr  r  host_encs               r)   
putrequestzHTTPConnection.putrequest_  s   	 ??t779"DO* <<8#*DL#DLL11f% jSC  &T-?-?@T))'23>>R  >>&)19#.Cc3;%+]]7%;
 NN6:6((#00#00#yy#yy7#';;w#7 yy~*#'(?T#9t000vx8#+??7#;v(D/IJ (0*= ( c . ;%+]]6%:
; . 7#';;v#67s$    G0 "H 0HHH-,H-c                 $    |j                  d      S )Nr  )r   )r5   rd  s     r)   r`  zHTTPConnection._encode_request  s    ~~g&&r;   c                 t    	 t         j                  |      }|r t        d|d|j                         d      y )Nz)method can't contain control characters.  (found at least ))$_contains_disallowed_method_pchar_researchrs   group)r5   ri   matchs      r)   r^  zHTTPConnection._validate_method  sJ    44;;FC?z J'',{{}&7q:; ; r;   c                 t    	 t         j                  |      }|r t        d|d|j                         d      y Nz&URL can't contain control characters. rl  rm  !_contains_disallowed_url_pchar_rero  r   rp  )r5   rj   rq  s      r)   r_  zHTTPConnection._validate_path  sM    ,188=EcW M005/@C D D r;   c                 t    	 t         j                  |      }|r t        d|d|j                         d      y rs  rt  )r5   r  rq  s      r)   r  zHTTPConnection._validate_host  sM    G188>EdX N005/@C D D r;   c                    	 | j                   t        k7  r
t               t        |d      r|j	                  d      }t        |      st        d|      t        |      }t        |      D ]r  \  }}t        |d      r|j	                  d      ||<   n-t        |t              rt        |      j	                  d      ||<   t        ||         sct        d||          dj                  |      }|dz   |z   }| j                  |       y )Nr   r  zInvalid header name r   zInvalid header value s   
	s   : )r   r]  r   r   r   _is_legal_header_namers   r   	enumerater   rv   ro   _is_illegal_header_valuerM   rK  )r5   r  valuesr   	one_valuer   s         r)   ra  zHTTPConnection.putheader  s    	 <<?*"$$68$]]7+F$V,ABBf%f- 	KLAyy(+%,,Y7q	Is+	N11':q	'q	2 fQi!IJJ	K v&%%'Vr;   rT  c                ~    	 | j                   t        k(  rt        | _         n
t               | j	                  ||       y )Nr}  )r   r]  _CS_REQ_SENTr   rW  )r5   rS  rT  s      r)   
endheaderszHTTPConnection.endheaders  s8    	 <<?*'DL"$$,~Fr;   c                0    	 | j                  |||||       y rW   )_send_request)r5   ri   rj   r   rH   rT  s         r)   rd  zHTTPConnection.request$  s    463g~Fr;   c                 
   t        d |D              }i }d|v rd|d<   d|v rd|d<    | j                  ||fi | d|vrjd|vrhd	}| j                  ||      }|4|P| j                  d
kD  rt	        d|z         d}| j                  dd       n| j                  dt        |             nd	}|j                         D ]  \  }	}
| j                  |	|
        t        |t              rt        |d      }| j                  ||       y )Nc              3   <   K   | ]  }|j                           y wrW   r  )r  ks     r)   r  z/HTTPConnection._send_request.<locals>.<genexpr>+  s      <q <s   r  r/   rb  zaccept-encodingrc  r}   r|   Fr   zUnable to determine size of %rTzTransfer-Encodingrd   zContent-Lengthr   r}  )	frozensetri  r   r]   rp   ra  ro   r   r   r*   r  )r5   ri   rj   r   rH   rT  header_namesskipscontent_lengthr   r   s              r)   r  zHTTPConnection._send_request)  s      <G <<\!!"E+,,-E()-u- </ #,6 "'!%!9!9$!G!)'??Q.!"BT"IJ)-':IFNN#3S5HI"N!--/ 	'JCNN3&	'dC  4(D^<r;   c                    	 | j                   r!| j                   j                         rd | _         | j                  t        k7  s| j                   rt	        | j                        | j
                  dkD  r3| j                  | j                  | j
                  | j                        }n'| j                  | j                  | j                        }	 	 |j                          t        | _        |j                  r| j                          |S || _         |S # t        $ r | j                           w xY w#  |j                           xY w)Nr   r&  )r   r   r   r  r   r]   r*  rh   r^   r   ConnectionErrorr   r   rg   )r5   r0  s     r)   getresponsezHTTPConnection.getresponseW  s   	 ??t779"DO" <<<'4??"4<<00??Q**499doo26,, + @H **499T\\*JH	 
 $DL""


 O #+O # 

	NNs$   D (D. D. D++D. .E)NN)NF)FFrW   )&r<   r=   r>   rR  r(  r   r*  	HTTP_PORTr  rB  r]   staticmethodr   r   r	  _GLOBAL_DEFAULT_TIMEOUTrk   r  r  r#  r2  r4  r/  r   r)  rK  rM  rW  ri  r`  r^  r_  r  ra  r  rd  r  r  r?   r;   r)   r   r   &  s    IM!NLIJ1 1
  > #'0N0N $;."1H( >
!#GJ	4(l 16(-}~';DD8Ge G )-b G$G
,=\=r;   r   c                   P     e Zd Z	 eZdej                  dddd fdZ fdZ xZ	S )HTTPSConnectionNr   )r   r   r   r   c                r    t         t        |   |||||       |t        | j                        }|| _        y )N)r   )r   r  rk   r   rR  _context)r5   r  r  r   r   r   r   r   s          r)   rk   zHTTPSConnection.__init__  sB     /41$g2@<E 2 G /?#DMr;   c                     	 t         |           | j                  r| j                  }n| j                  }| j                  j                  | j                  |      | _        y )N)server_hostname)r   r/  r  r  r  wrap_socketrh   )r5   r  r   s     r)   r/  zHTTPSConnection.connect  sR    6GO  "&"3"3"&))11$))BQ 2 SDIr;   rW   )
r<   r=   r>   
HTTPS_PORTr  r	  r  rk   r/  r   r   s   @r)   r  r    s1    2!	$ & > >$($$	$	S 	Sr;   r  c                       e Zd Zy)r   Nr<   r=   r>   r?   r;   r)   r   r     s     	r;   r   c                       e Zd Zy)r   Nr  r?   r;   r)   r   r         r;   r   c                       e Zd Zy)r   Nr  r?   r;   r)   r   r     r  r;   r   c                       e Zd Zd Zy)r   c                 "    |f| _         || _        y rW   )argsra   )r5   ra   s     r)   rk   zUnknownProtocol.__init__  s    H	r;   Nr<   r=   r>   rk   r?   r;   r)   r   r     s    r;   r   c                       e Zd Zy)r	   Nr  r?   r;   r)   r	   r	     r  r;   r	   c                       e Zd Zy)r
   Nr  r?   r;   r)   r
   r
     r  r;   r
   c                   2    e Zd ZddZd Zej                  Zy)r   Nc                 0    |f| _         || _        || _        y rW   )r  partialexpected)r5   r  r  s      r)   rk   zIncompleteRead.__init__  s    H	 r;   c                     | j                   d| j                   z  }nd}d| j                  j                  t        | j                        |fz  S )Nz, %i more expectedrn   z%s(%i bytes read%s))r  r   r<   r1   r  r=  s     r)   __repr__zIncompleteRead.__repr__  sK    ==$$t}}4AA$(?(?(+DLL(91(> > 	>r;   rW   )r<   r=   r>   rk   r  r"   __str__r?   r;   r)   r   r     s    !> nnGr;   r   c                       e Zd Zy)r   Nr  r?   r;   r)   r   r     r  r;   r   c                       e Zd Zy)r   Nr  r?   r;   r)   r   r     r  r;   r   c                       e Zd Zy)r   Nr  r?   r;   r)   r   r     r  r;   r   c                       e Zd Zy)r   Nr  r?   r;   r)   r   r     r  r;   r   c                       e Zd Zd Zy)r   c                 <    |st        |      }|f| _        || _        y rW   )rq   r  r9   r   s     r)   rk   zBadStatusLine.__init__  s    :DE		r;   Nr  r?   r;   r)   r   r     s    r;   r   c                       e Zd Zd Zy)r   c                 B    t         j                  | dt        |fz         y )Nz&got more than %d bytes when reading %s)r   rk   rE   )r5   	line_types     r)   rk   zLineTooLong.__init__  s"    t%M(0)'<&= 	>r;   Nr  r?   r;   r)   r   r     s    >r;   r   c                       e Zd Zd Zy)r   c                 b    t         j                  | d       t        j                  | g|i | y )Nrn   )r   rk   ConnectionResetError)r5   poskws      r)   rk   zRemoteDisconnected.__init__  s*    tR(%%d7S7B7r;   Nr  r?   r;   r)   r   r     s    8r;   r   )r&   )Eemail.parserrO   email.messager;  r+  r   rer	  r6  collections.abcrD  urllib.parser   __all__r  r  r`   r   r]  r  globalsupdater,  __members__r{  phraser   rE   rF   compile	fullmatchrx  ro  rz  ru  rn  r   r*   r1  Messager,   rI   rU   rX   BufferedIOBaser   r   r   r   r  r4   ImportError	Exceptionr   r   r   r   r	   r
   r   r   r   r   r   r   r   r  r   r   )vs   0r)   <module>r     s^  DL     	 	  
  ! 	
 # 	  ,, - #'//"="="D"D"FGQQ[G	 6 #

#67AA %2::&CDKK  %/BJJ/@$A ! (2rzz-'@ $ 3 E%--'' <$ .9 @ ) 0a2$$ aH
n	 n	`!&S. S8 NN$%	I 	
	= 		 	m 
	m 		M 	] 	m 		/ 		. 		. 	M >- >
8-} 8 	_, HX)  		s   HH H%$H%