a
    ñ»jny  ã                	   @   sr  d dl mZ zd dlmZ W n ey:   d dlmZ Y n0 d dlmZmZm	Z	 d dl
Z
d dlmZ d dlZd dlZd dlmZ d dlZd dlZd dlZdZejdkrØejd	k rØzd dlZW n eyÖ   ed
ƒ‚Y n0 e e¡Zd ZZd ZZd ZZeeedœZ e!e"e  #¡ e  $¡ ƒƒZ%ej Z&Z'dd„ Z(G dd„ de)ƒZ*G dd„ de*ƒZ+G dd„ de*ƒZ,G dd„ de*ƒZ-G dd„ de*ƒZ.G dd„ de*ƒZ/G dd„ de*ƒZ0dd d!d"œZ1d#d$d%d&d'd(d)d*d+œZ2ed,ed,ed-iZ3d@d/d0„Z4d1d2„ Z5d3d4„ Z6e6Z7d5d6„ Z8e8Z9dAd7d8„Z:G d9d:„ d:ejƒZ;d;d<„ Z<d=D ]:Ze=e;edƒZ>e?e>eƒ�s"e;j@ Ae¡ eBe;ee<eƒƒ �q"G d>d?„ d?e;ƒZCdS )Bé    )Ú	b64encode)ÚCallable)Ú
EOPNOTSUPPÚEINVALÚEAGAINN)ÚBytesIO)ÚSEEK_CURz1.7.1Únt)é   r   z8To run PySocks on Windows you must install win_inet_ptoné   é   r
   )ÚSOCKS4ÚSOCKS5ÚHTTPc                    s   t  ˆ ¡‡ fdd„ƒ}|S )Nc               
      sž   | d }z|z>|  ¡ }|dkr&| d¡ ˆ | i |¤ŽW W |dkrH| d¡ S  tyn } z‚ W Y d }~n
d }~0 0 W |dkrš| d¡ n|dkr˜| d¡ 0 d S )Nr   TF)Ú
gettimeoutÚsetblockingÚ	Exception)ÚargsÚkwargsÚselfZ_is_blockingÚe©Úfunction© ú+E:\soccer\ml_env\Lib\site-packages\socks.pyÚwrapper(   s    

úÿz"set_self_blocking.<locals>.wrapper)Ú	functoolsÚwraps)r   r   r   r   r   Úset_self_blocking&   s    r   c                   @   s"   e Zd ZdZddd„Zdd„ ZdS )Ú
ProxyErrorz4Socket_err contains original socket.error exception.Nc                 C   s(   || _ || _|r$|  j d |¡7  _ d S )Nz: {})ÚmsgÚ
socket_errÚformat)r   r    r!   r   r   r   Ú__init__;   s    zProxyError.__init__c                 C   s   | j S ©N)r    ©r   r   r   r   Ú__str__B   s    zProxyError.__str__)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r#   r&   r   r   r   r   r   9   s   
r   c                   @   s   e Zd ZdS )ÚGeneralProxyErrorN©r'   r(   r)   r   r   r   r   r+   F   s   r+   c                   @   s   e Zd ZdS )ÚProxyConnectionErrorNr,   r   r   r   r   r-   J   s   r-   c                   @   s   e Zd ZdS )ÚSOCKS5AuthErrorNr,   r   r   r   r   r.   N   s   r.   c                   @   s   e Zd ZdS )ÚSOCKS5ErrorNr,   r   r   r   r   r/   R   s   r/   c                   @   s   e Zd ZdS )ÚSOCKS4ErrorNr,   r   r   r   r   r0   V   s   r0   c                   @   s   e Zd ZdS )Ú	HTTPErrorNr,   r   r   r   r   r1   Z   s   r1   zRequest rejected or failedzLRequest rejected because SOCKS server cannot connect to identd on the clientzPRequest rejected because the client program and identd report different user-ids)é[   é\   é]   zGeneral SOCKS server failurez!Connection not allowed by rulesetzNetwork unreachablezHost unreachablezConnection refusedzTTL expiredz(Command not supported, or protocol errorzAddress type not supported)r   r   r
   é   é   é   é   é   i8  i�  Tc                 C   s.   | ||||r|  ¡ nd|r"|  ¡ ndft_dS )z›Sets a default proxy.

    All further socksocket objects will use the default unless explicitly
    changed. All parameters are as for socket.set_proxy().N)ÚencodeÚ
socksocketÚdefault_proxy)Ú
proxy_typeÚaddrÚportÚrdnsÚusernameÚpasswordr   r   r   Úset_default_proxys   s    þrC   c                  O   s$   d|v r|  d¡|d< t| i |¤ŽS ©NZ	proxytyper=   )ÚpoprC   )r   r   r   r   r   Úsetdefaultproxy~   s    rF   c                   C   s   t jS )z4Returns the default proxy, set by set_default_proxy.)r;   r<   r   r   r   r   Úget_default_proxy„   s    rG   c                 C   s   t jrt | j_ntdƒ‚dS )a  Attempts to replace a module's socket library with a SOCKS socket.

    Must set a default proxy using set_default_proxy(...) first. This will
    only work on modules that import socket directly into the namespace;
    most of the Python Standard Library falls into this category.zNo default proxy specifiedN)r;   r<   Úsocketr+   )Úmoduler   r   r   Úwrap_module‹   s    
rJ   c
                 C   s8  | \}
}|
  d¡r|
 d¡}
|r4|  d¡r4| d¡}d}t ||dtj¡D ]Ô}|\}}}}}d}zzt|||ƒ}|	r†|	D ]}|j|Ž  qvt|tt	fƒrž| 
|¡ |r¶| ||||||¡ |rÄ| |¡ | |
|f¡ |W   S  tjtf�y } z"|}|�r| ¡  d}W Y d}~qJd}~0 0 qJ|�r*|‚t d¡‚dS )aí  create_connection(dest_pair, *[, timeout], **proxy_args) -> socket object

    Like socket.create_connection(), but connects to proxy
    before returning the socket object.

    dest_pair - 2-tuple of (IP/hostname, port).
    **proxy_args - Same args passed to socksocket.set_proxy() if present.
    timeout - Optional socket timeout value, in seconds.
    source_address - tuple (host, port) for the socket to bind to as its source
    address before connecting (only for compatibility)
    ú[z[]Nr   zgai returned empty list.)Ú
startswithÚstriprH   ÚgetaddrinfoÚSOCK_STREAMr;   Ú
setsockoptÚ
isinstanceÚintÚfloatÚ
settimeoutÚ	set_proxyÚbindÚconnectÚerrorr   Úclose)Ú	dest_pairÚtimeoutÚsource_addressr=   Ú
proxy_addrÚ
proxy_portZ
proxy_rdnsZproxy_usernameZproxy_passwordÚsocket_optionsZremote_hostZremote_portÚerrÚrÚfamilyÚsocket_typeÚprotoÚ	canonnameÚsaÚsockÚoptr   r   r   r   Úcreate_connection™   s@    



ÿ

ri   c                   @   s   e Zd ZdZdd„ Zeƒ ZdS )Ú_BaseSocketzBAllows Python 2 delegated methods such as send() to be overridden.c                 O   sJ   t j| g|¢R i |¤Ž tƒ | _| jD ]}t| |ƒ| j|< t| |ƒ q&d S r$   )Ú_orig_socketr#   ÚdictÚ_savedmethodsÚ
_savenamesÚgetattrÚdelattr)r   ÚposÚkwÚnamer   r   r   r#   Ø   s
    
z_BaseSocket.__init__N)r'   r(   r)   r*   r#   Úlistrn   r   r   r   r   rj   Ö   s   rj   c                    s   ‡ fdd„S )Nc                    s   | j ˆ  |i |¤ŽS r$   )rm   )r   rq   rr   ©rs   r   r   Ú<lambda>ä   ó    z_makemethod.<locals>.<lambda>r   ru   r   ru   r   Ú_makemethodã   s    rx   )ÚsendtoÚsendÚrecvfromÚrecvc                       s<  e Zd ZdZdZejejdf‡ fdd„	Zdd„ Z	‡ fdd	„Z
d
d„ Zdd„ Zd7dd„Zdd„ Z‡ fdd„Z‡ fdd„Zd8‡ fdd„	Zd9‡ fdd„	Zdd„ Z‡ fdd„Zdd „ ZeZd!d"„ ZeZd#d$„ ZeZd%d&„ Z‡ fd'd(„Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Z e!ee"ee#e iZ$e%d:‡ fd1d2„	ƒZ&e%d3d4„ ƒZ'd5d6„ Z(‡  Z)S );r;   a2  socksocket([family[, type[, proto]]]) -> socket object

    Open a SOCKS enabled socket. The parameters are the same as
    those of the standard socket init. In order for SOCKS to work,
    you must specify family=AF_INET and proto=0.
    The "type" argument must be either SOCK_STREAM or SOCK_DGRAM.
    Nr   c                    sv   |t jt jfvr"d}t| |¡ƒ‚tt| ƒj|||g|¢R i |¤Ž d | _| j	rZ| j	| _
nd| _
d | _d | _d | _d S )Nz0Socket type must be stream or datagram, not {!r})NNNNNN)rH   rO   Ú
SOCK_DGRAMÚ
ValueErrorr"   Úsuperr;   r#   Ú
_proxyconnr<   ÚproxyÚproxy_socknameÚproxy_peernameÚ_timeout)r   rb   Útyperd   r   r   r    ©Ú	__class__r   r   r#   ü   s    "
zsocksocket.__init__c                 C   s<   d}t |ƒ|k r8| |t |ƒ ¡}|s.tdƒ‚||7 }q|S )zŠReceive EXACTLY the number of bytes requested from the file object.

        Blocks until the required number of bytes have been received.rw   úConnection closed unexpectedly)ÚlenÚreadr+   )r   ÚfileÚcountÚdataÚdr   r   r   Ú_readall  s    
zsocksocket._readallc                    s>   || _ z|  ¡ }tt| ƒ | j ¡ W n tjy8   Y n0 d S r$   )r„   Úget_proxy_peernamer   r;   rT   rH   rX   )r   r[   Zpeerr†   r   r   rT     s    zsocksocket.settimeoutc                 C   s   | j S r$   )r„   r%   r   r   r   r   #  s    zsocksocket.gettimeoutc                 C   s   |r|   d ¡ n
|   d¡ d S )Ng        )rT   )r   Úvr   r   r   r   &  s    zsocksocket.setblockingTc                 C   s.   |||||r|  ¡ nd|r"|  ¡ ndf| _dS )a�   Sets the proxy to be used.

        proxy_type -  The type of the proxy to be used. Three types
                        are supported: PROXY_TYPE_SOCKS4 (including socks4a),
                        PROXY_TYPE_SOCKS5 and PROXY_TYPE_HTTP
        addr -        The address of the server (IP or DNS).
        port -        The port of the server. Defaults to 1080 for SOCKS
                        servers and 8080 for HTTP proxy servers.
        rdns -        Should DNS queries be performed on the remote side
                       (rather than the local side). The default is True.
                       Note: This has no effect with SOCKS4 servers.
        username -    Username to authenticate with to the server.
                       The default is no authentication.
        password -    Password to authenticate with to the server.
                       Only relevant when username is also provided.N)r:   r�   )r   r=   r>   r?   r@   rA   rB   r   r   r   rU   ,  s    þzsocksocket.set_proxyc                 O   s&   d|v r|  d¡|d< | j|i |¤ŽS rD   )rE   rU   )r   r   r   r   r   r   ÚsetproxyA  s    zsocksocket.setproxyc                    s  | j \}}}}}}|r"| jtjkr:tj| g|¢R i |¤ŽS | jrLt td¡‚|t	krdd}	t t
|	¡‚tt| ƒj|i |¤Ž |  ¡ \}
}d|f}tƒ | _|  ¡ }| j |¡ d}|  | j||¡\}
}|\}}
|\}
}tt| ƒ ||f¡ tt| ƒ | j¡ d| _dS )zVImplements proxy connection for UDP sockets.

        Happens during the bind() phase.z"Socket already bound to an addressz'UDP only supported by SOCKS5 proxy typeÚ0ó   )ú0.0.0.0r   N)r�   r…   rH   r}   rk   rV   r€   rX   r   r   r   r   r;   ÚgetsocknameÚ_proxy_addrrW   Ú_SOCKS5_requestrT   r„   r‚   )r   rq   rr   r=   r]   r^   r@   rA   rB   r    Ú_r?   Údstr�   ZUDP_ASSOCIATEZrelayÚhostr†   r   r   rV   F  s.    ÿzsocksocket.bindc           
         s®   | j tjkr*tt| ƒj|g|¢R i |¤ŽS | js:|  d¡ |d }|d d… }tƒ }d}| 	|¡ d}| 	|¡ |  
||¡ tt| ƒj| ¡ | g|¢R i |¤Ž}	|	| ¡  S )N©Ú r   éÿÿÿÿs     ó    )r…   rH   r}   r   r;   ry   r€   rV   r   ÚwriteÚ_write_SOCKS5_addressrz   ÚgetvalueÚtell)
r   Úbytesr   r   ÚaddressÚflagsÚheaderZRSVZ
STANDALONEÚsentr†   r   r   ry   k  s     


ÿzsocksocket.sendtoc                    sB   | j tjkr$| j||| jfi |¤ŽS tt| ƒj||fi |¤ŽS d S r$   )r…   rH   r}   ry   rƒ   r   r;   rz   )r   r¤   r¦   r   r†   r   r   rz     s    zsocksocket.sendc           	         s¾   | j tjkrtt| ƒ ||¡S | js.|  d¡ ttt| ƒ 	|d |¡ƒ}| 
dt¡ | d¡}t|ƒrntdƒ‚|  |¡\}}| jr¬| j\}}||ks |d|fvr¬t td¡‚| |¡||ffS )Nrœ   i   r   r   zReceived UDP packet fragmentr   zPacket filtered)r…   rH   r}   r   r;   r{   r€   rV   r   r|   Úseekr   rŠ   ÚordÚNotImplementedErrorÚ_read_SOCKS5_addressrƒ   rX   r   )	r   Úbufsizer¦   ÚbufÚfragZfromhostZfromportZpeerhostZpeerportr†   r   r   r{   …  s    


zsocksocket.recvfromc                 O   s   | j |i |¤Ž\}}|S r$   )r{   )r   rq   rr   r¤   r™   r   r   r   r|   ™  s    zsocksocket.recvc                    s   | j r| j  ¡  tt| ƒ ¡ S r$   )r€   rY   r   r;   r%   r†   r   r   rY   �  s    
zsocksocket.closec                 C   s   | j S )z:Returns the bound IP address and port number at the proxy.)r‚   r%   r   r   r   Úget_proxy_sockname¢  s    zsocksocket.get_proxy_socknamec                 C   s   |   ¡ S )z>
        Returns the IP and port number of the proxy.
        )Úgetpeernamer%   r   r   r   r�   ¨  s    zsocksocket.get_proxy_peernamec                 C   s   | j S )zwReturns the IP address and port number of the destination machine.

        Note: get_proxy_peername returns the proxy.)rƒ   r%   r   r   r   Úget_peername°  s    zsocksocket.get_peernamec                 G   s   d}|   | ||¡\| _| _dS )z7Negotiates a stream connection through a SOCKS5 server.ó   N)r˜   rƒ   r‚   )r   Ú	dest_addrZCONNECTr   r   r   Ú_negotiate_SOCKS5¸  s    ÿzsocksocket._negotiate_SOCKS5c                    s  | j \}}}}}}	| d¡}
| dd¡}�zÔ|r@|	r@|
 d¡ n
|
 d¡ |
 ¡  |  |d¡}|dd… dkrvtd	ƒ‚|dd… d
k�r|r�|	s˜tdƒ‚|
 dtt|ƒƒ 	¡  | tt|	ƒƒ 	¡  |	 ¡ |
 ¡  |  |d¡}|dd… dkrötd	ƒ‚|dd… dk�rHtdƒ‚n6|dd… dk�rH|dd… dk�r@tdƒ‚ntd	ƒ‚|
 d| d ¡ |  
||
¡}|
 ¡  |  |d¡}|dd… dk�r”td	ƒ‚t|dd… ƒ}|dk�rÊt |d¡}td ||¡ƒ‚|  |¡}tt| ƒ | j¡ ||fW | ¡  |
 ¡  S | ¡  |
 ¡  0 dS )z‘
        Send SOCKS5 request with given command (CMD field) and
        address (DST field). Returns resolved DST address that was used.
        ÚwbÚrbr   s    s    r   r   ó   ú%SOCKS5 proxy server sent invalid dataó   zPNo username/password supplied. Server requested username/password authenticationr³   rŸ   zSOCKS5 authentication failedó   ÿz7All offered SOCKS5 authentication methods were rejectedr
   úUnknown errorú{:#04x}: {}N)r�   Úmakefiler    Úflushr�   r+   r.   Úchrr‰   r:   r¡   rª   ÚSOCKS5_ERRORSÚgetr/   r"   r¬   r   r;   rT   r„   rY   )r   ÚconnÚcmdrš   r=   r>   r?   r@   rA   rB   ÚwriterÚreaderZchosen_authZauth_statusZresolvedÚrespÚstatusrX   Zbndr†   r   r   r˜   ¾  sz    

ÿÿþýÿ
ÿÿÿ

ý  ÿzsocksocket._SOCKS5_requestc              	   C   sJ  |\}}| j \}}}}}}	tjdtjdi}
tjtjfD ]h}zJt ||¡}| |
| | ¡ t ||¡}| t d|¡¡ ||fW   S  tj	yœ   Y q6Y q60 q6|rÎ| 
d¡}| dtt|ƒƒ 
¡  | ¡ nbt ||tjtjtjtj¡}|d }|d }|d d }t ||¡}| |
| | ¡ t ||¡}| t d|¡¡ ||fS )z~
        Return the host and port packed for the SOCKS5 protocol,
        and the resolved address as a tuple object.
        r³   ó   ú>HÚidnar”   r   r5   )r�   rH   ÚAF_INETÚAF_INET6Ú	inet_ptonr    Ú	inet_ntopÚstructÚpackrX   r:   rÀ   r‰   rN   Ú	AF_UNSPECrO   ÚIPPROTO_TCPÚAI_ADDRCONFIG)r   r>   r‹   r›   r?   r=   r™   r@   rA   rB   Zfamily_to_byterb   Ú
addr_bytesZ
host_bytesÚ	addressesZtarget_addrr   r   r   r¡      s8    
 ýz socksocket._write_SOCKS5_addressc                 C   s–   |   |d¡}|dkr(t |   |d¡¡}nN|dkrN|   |d¡}|   |t|ƒ¡}n(|dkrnt tj|   |d¡¡}ntdƒ‚t d|   |d	¡¡d
 }||fS )Nr   r³   r5   r”   rÉ   é   r¹   rÊ   r   r   )	r�   rH   Ú	inet_ntoarª   rÏ   rÍ   r+   rÐ   Úunpack)r   r‹   Zatypr>   Úlengthr?   r   r   r   r¬   M  s    zsocksocket._read_SOCKS5_addressc                 C   sœ  | j \}}}}}}|  d¡}	|  dd¡}
�zZd}zt |¡}W n2 tjyp   |r\d}d}nt t |¡¡}Y n0 |	 t ddd	|¡¡ |	 |¡ |r |	 |¡ |	 d
¡ |rÂ|	 | 	d¡d
 ¡ |	 
¡  |  |
d¡}|dd	… d
krîtdƒ‚t|d	d… ƒ}|dk�r$t |d¡}td ||¡ƒ‚t |dd… ¡t d|dd… ¡d f| _|�rht |¡|f| _n
||f| _W |
 ¡  |	 ¡  n|
 ¡  |	 ¡  0 dS )z0Negotiates a connection through a SOCKS4 server.r¶   r·   r   Fs      Tz>BBHr5   r   rŸ   rË   r9   z%SOCKS4 proxy server sent invalid datar   éZ   r¼   r½   NrÊ   )r�   r¾   rH   Ú	inet_atonrX   Úgethostbynamer    rÐ   rÑ   r:   r¿   r�   r+   rª   ÚSOCKS4_ERRORSrÂ   r0   r"   rØ   rÙ   r‚   rƒ   rY   )r   r´   Ú	dest_portr=   r>   r?   r@   rA   rB   rÅ   rÆ   Zremote_resolverÕ   rÇ   rÈ   rX   r   r   r   Ú_negotiate_SOCKS4\  sR    
ÿ



ÿ
ÿ
ÿzsocksocket._negotiate_SOCKS4c                 C   sf  | j \}}}}}}|r|nt |¡}d| d¡ d t|ƒ ¡  d d| d¡ g}	|rv|rv|	 dt|d | ƒ ¡ |	 d¡ |  d |	¡¡ |  	¡ }
|
 
¡ }|
 ¡  |s´tdƒ‚z| d	d
¡\}}}W n tyä   tdƒ‚Y n0 | d¡søtdƒ‚zt|ƒ}W n t�y    tdƒ‚Y n0 |dk�rRd ||¡}|dv �rJ|d7 }t|ƒ‚d| _||f| _dS )zwNegotiates a connection through an HTTP server.

        NOTE: This currently only supports HTTP CONNECT-style proxies.s   CONNECT rË   ó   :s	    HTTP/1.1s   Host: s   Proxy-Authorization: basic s   
rˆ   ú r   z'HTTP proxy server sent invalid responsezHTTP/z0Proxy server does not appear to be an HTTP proxyz4HTTP proxy server did not return a valid HTTP statuséÈ   z{}: {})i�  i“  i•  za
[*] Note: The HTTP proxy server may not be supported by PySocks (must be a CONNECT tunnel proxy))s   0.0.0.0r   N)r�   rH   rÝ   r:   ÚstrÚappendr   ÚsendallÚjoinr¾   ÚreadlinerY   r+   Úsplitr~   rL   rR   r1   r"   r‚   rƒ   )r   r´   rß   r=   r>   r?   r@   rA   rB   Zhttp_headersZfobjZstatus_linerd   Ústatus_codeZ
status_msgrX   r   r   r   Ú_negotiate_HTTP˜  sR    
ÿÿýÿ

ÿÿ


zsocksocket._negotiate_HTTPc              
      s&  t |ƒdks|d  d¡r,t dt|ƒ ¡‚|\}}| jtjkr|| jsP|  d¡ t 	|¡}|dkrn|snd| _
n
||f| _
dS | j\}}}}}	}
t|ttfƒr¶t |ƒdks¶|r¶t|tƒs¾tdƒ‚tt| ƒ | j¡ |du �r
|| _
tt| ƒ | j¡ tt| ƒ ||f¡ dS |  ¡ }ztt| ƒ |¡ W n| tj�y¢ } z`|  ¡  |�sŠ|\}}d	 ||¡}t| }d
 ||¡}t d||¡ t||ƒ‚n|‚W Y d}~nˆd}~0 0 z| j| }|| ||ƒ W nb tj�y } z*|�sì|  ¡  td|ƒ‚n|‚W Y d}~n&d}~0  t�y    |  ¡  ‚ Y n0 dS )zã
        Connects to the specified destination through a proxy.
        Uses the same API as socket's connect().
        To select the proxy server, use set_proxy().

        dest_pair - 2-tuple of (IP/hostname, port).
        r   r   rK   z PySocks doesn't support IPv6: %srœ   r•   Nz0Invalid destination-connection (host, port) pairz{}:{}zError connecting to {} proxy {}z%s due to: %szSocket error)r‰   rL   rH   rX   rä   r…   r}   r€   rV   rÝ   rƒ   r�   rQ   rt   ÚtuplerR   r+   r   r;   rT   r„   rW   r—   rY   r"   ÚPRINTABLE_PROXY_TYPESÚlogÚdebugr-   Ú_proxy_negotiatorsr   )r   rZ   Úcatch_errorsr´   rß   r=   r]   r^   r@   rA   rB   rX   Zproxy_serverZprintable_typer    Z	negotiater†   r   r   rW   Ù  st    	ÿ


ÿ
ÿþýÿ
ÿ
zsocksocket.connectc              
   C   sX   z| j |dd� W dS  tyR } z&|jr<|jW  Y d}~S ‚ W Y d}~n
d}~0 0 dS )a&   https://docs.python.org/3/library/socket.html#socket.socket.connect_ex
        Like connect(address), but return an error indicator instead of raising an exception for errors returned by the C-level connect() call (other problems, such as "host not found" can still raise exceptions).
        T)rñ   r   N)rW   ÚOSErrorÚerrno)r   rZ   r   r   r   r   Ú
connect_ex6  s    zsocksocket.connect_exc                 C   s4   | j \}}}}}}|pt |¡}|s,tdƒ‚||fS )zD
        Return proxy address to connect to as tuple object
        zInvalid proxy type)r�   ÚDEFAULT_PORTSrÂ   r+   )r   r=   r]   r^   r@   rA   rB   r   r   r   r—   F  s    ÿzsocksocket._proxy_addr)NNNTNN)r   )r   )N)*r'   r(   r)   r*   r<   rH   rÌ   rO   r#   r�   rT   r   r   rU   r’   rV   ry   rz   r{   r|   rY   r°   Zgetproxysocknamer�   Zgetproxypeernamer²   r±   rµ   r˜   r¡   r¬   rà   rë   r   r   r   rð   r   rW   rô   r—   Ú__classcell__r   r   r†   r   r;   ñ   sP   ÿ	  ÿ
%b-<<ý\
r;   )NNNTNN)	NNNNNTNNN)DÚbase64r   Úcollections.abcr   ÚImportErrorÚcollectionsró   r   r   r   r   Úior   ÚloggingÚosr   rH   rÐ   ÚsysÚ__version__rs   Úversion_infoZwin_inet_ptonÚ	getLoggerr'   rî   ZPROXY_TYPE_SOCKS4r   ZPROXY_TYPE_SOCKS5r   ZPROXY_TYPE_HTTPr   ZPROXY_TYPESrl   ÚzipÚvaluesÚkeysrí   Z
_orgsocketrk   r   ÚIOErrorr   r+   r-   r.   r/   r0   r1   rÞ   rÁ   rõ   rC   rF   rG   ZgetdefaultproxyrJ   Z
wrapmoduleri   rj   rx   ro   ÚmethodrQ   rn   rå   Úsetattrr;   r   r   r   r   Ú<module>   s�   ÿ


ü	ø  ÿ
     û
=