
    5iO                     (   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 dej                  Z G d dej                  Z	 G d dej                  Z
 G d	 d
ej                  Z G d de          Z G d de          Z G d d          Z G d d          Z G d d          Z G d d          Z G d d          Z G d d          Z G d d          Z G d d          Z G d d           Z G d! d"          Z G d# d$          ZdS )%    N)SOCKS5Methodc                       e Zd ZdZdZdZdZdS )SOCKS5ServerStater            N)__name__
__module____qualname__NEGOTIATIONNOT_AUTHENTICATEDREQUESTRELAYING     N/home/kali/Ninja/venv/lib/python3.11/site-packages/asysocks/protocol/socks5.pyr   r      s#        r   r   c                       e Zd ZdZdZdZdS )SOCKS5Commandr      r   N)r	   r
   r   CONNECTBINDUDP_ASSOCIATEr   r   r   r   r      s        r   r   c                       e Zd ZdZdZdZdS )SOCKS5AddressTyper   r   r   N)r	   r
   r   IP_V4
DOMAINNAMEIP_V6r   r   r   r   r      s        		r   r   c                   2    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
S )SOCKS5ReplyTyper   r   r   r   r               N)r	   r
   r   	SUCCEEDEDFAILURECONN_NOT_ALLOWEDNETWORK_UNREACHABLEHOST_UNREACHABLECONN_REFUSEDTTL_EXPIREDCOMMAND_NOT_SUPPORTEDADDRESS_TYPE_NOT_SUPPORTEDr   r   r   r   r   !   sB        "r   r   c                       e Zd Zd Zd ZdS )SOCKS5ServerErrorReplyc                     || _         d S N)reply)selfr1   s     r   __init__zSOCKS5ServerErrorReply.__init__.   s    $***r   c                     | j         j        S r0   )r1   namer2   s    r   __str__zSOCKS5ServerErrorReply.__str__0   s    	r   N)r	   r
   r   r3   r7   r   r   r   r.   r.   -   s2              r   r.   c                       e Zd ZdS )SOCKS5AuthFailedN)r	   r
   r   r   r   r   r9   r9   3   s        r   r9   c                   .    e Zd Zej        fdZd Zd ZdS )SOCKS5SocketParserc                     || _         d S r0   protocolr2   r>   s     r   r3   zSOCKS5SocketParser.__init__7       $---r   c                 ^    |                     |                     ||j                            S r0   )
from_bytesread_socsize)r2   socpacket_types      r   parsezSOCKS5SocketParser.parse:   s'    			c;3C D D	E	EEr   c                 x    d}	 |                     d          }|dk    rn||z  }t          |          |k    rn6|S )Nr   Ti    )recvlen)r2   rE   rD   datatemps        r   rC   zSOCKS5SocketParser.read_soc=   sP    	$

((4..4
bjj	4<4	$ii4	
 
+r   N)r	   r
   r   socketSOCK_STREAMr3   rG   rC   r   r   r   r;   r;   6   sO        %1    F F F	 	 	 	 	r   r;   c                   @    e Zd Zej        fdZd Zedd            ZdS )SOCKS5CommandParserc                     || _         d S r0   r=   r?   s     r   r3   zSOCKS5CommandParser.__init__L   r@   r   c                 h   |j         t          j        k    rt                              |          S |j         t          j        k    r>|j        t          j        k    rt                              |          S t          d          |j         t          j        k    rt                              |          S d S )NNot implemented!)current_stater   r   
SOCKS5Negofrom_bufferr   mutual_auth_typer   PLAINSOCKS5PlainAuth	Exceptionr   SOCKS5Request)r2   buffsessions      r   rG   zSOCKS5CommandParser.parseO   s    /;;;

 
 
&
&&/AAA,"444&&t,,,
&
'
''/777

#
#D
)
)) 87r   Nc                 "   K   t                      r0   )NotImplementedError)readerr^   timeouts      r   from_streamreaderz%SOCKS5CommandParser.from_streamreader\   s      r   r0   )	r	   r
   r   rN   rO   r3   rG   staticmethodrc   r   r   r   rQ   rQ   I   s_          &1    * * *    ,  r   rQ   c                       e Zd ZddZd ZdS )SOCKS5AuthHandlerNc                 "    || _         || _        d S r0   )authtypecreds)r2   rh   ri   s      r   r3   zSOCKS5AuthHandler.__init__p   s    $-$***r   c                    | j         t          j        k    rt          |t                    st          d          | j        dt          |j        |j	                  fS |j        | j        v r7|j	        | j        |j                 k    rdt          |j        |j	                  fS dt          |j        |j	                  fS | j         t          j
        k    rt          d          t          d          )NzWrong message/auth type!TFzNot implemented! yetrT   )rh   r   rY   
isinstancerZ   r[   ri   SOCKS5PlainCredentialsUNAMEPASSWDGSSAPI)r2   msgs     r   do_AUTHzSOCKS5AuthHandler.do_AUTHt   s    	]l(((
S/
*
* 0
.
/
//
j'	3:>>>>
yDJ
dj+++)#)SZ@@@@(CJ????}+++	)	*	** 
%	&	&&r   r0   )r	   r
   r   r3   rq   r   r   r   rf   rf   o   s7           ' ' ' ' 'r   rf   c                       e Zd Zd ZdS )rl   c                 "    || _         || _        d S r0   )usernamepassword)r2   rt   ru   s      r   r3   zSOCKS5PlainCredentials.__init__   s    $-$---r   N)r	   r
   r   r3   r   r   r   rl   rl      s#            r   rl   c                   V    e Zd Zd Zed             Zed             Zed             ZdS )SOCKS5PlainAuthReplyc                 "    d | _         d | _        d S r0   )VERSTATUSr6   s    r   r3   zSOCKS5PlainAuthReply.__init__   s    $($+++r   c                 4  K   t                      }|                     d           d {V }t                              |dd          |_        |                     d           d {V }t          t                              |dd                    |_        |S Nr   bigF	byteordersigned)rw   readintrB   ry   r   rz   ra   repts      r   rc   z&SOCKS5PlainAuthReply.from_streamreader   s      #KKNN!NN1%%N@@#'KKNN!s~~aUU~SSTT#*	*r   c                 Z    t                               t          j        |                     S r0   )rw   rW   ioBytesIO)rL   s    r   rB   zSOCKS5PlainAuthReply.from_bytes   s     		)	)"*T*:*:	;	;;r   c                    t                      }t                              |                     d          dd          |_        t          t                              |                     d          dd                    |_        |S r|   )rw   r   rB   r   ry   r   rz   r]   r   s     r   rW   z SOCKS5PlainAuthReply.from_buffer   sa    #NN499Q<<UUNKK#'s~~diillX]~^^__#*	*r   N)r	   r
   r   r3   rd   rc   rB   rW   r   r   r   rw   rw      st             , < < ,<   ,  r   rw   c                   r    e Zd Zd Zed             Zed             Zed             Zed             Zd Z	dS )rZ   c                 L    d | _         d | _        d | _        d | _        d | _        d S r0   )ry   ULENrm   PLENrn   r6   s    r   r3   zSOCKS5PlainAuth.__init__   s)    $($)$*$)$+++r   c                 x  K   t                      }|                     d           d {V }t                              |dd          |_        |                     d           d {V }t                              |dd          |_        |                     |j                   d {V }|                                |_        |                     d           d {V }t                              |dd          |_        |                     |j                   d {V }|                                |_	        |S r|   )
rZ   r   r   rB   ry   r   decoderm   r   rn   )ra   authr   s      r   rc   z!SOCKS5PlainAuth.from_streamreader   s,     			$KKNN!^^A55^AA$(KKNN!nnQEEnBB$)KK	""""""""!xxzz$*KKNN!nnQEEnBB$)KK	""""""""!

$+	+r   c                 Z    t                               t          j        |                     S r0   )rZ   rW   r   r   bbuffs    r   rB   zSOCKS5PlainAuth.from_bytes        		$	$RZ%6%6	7	77r   c                 $   t                      }t                              |                     d          dd          |_        t                              |                     d          dd          |_        |                     |j                                                  |_        t                              |                     d          dd          |_        |                     |j                                                  |_	        |S r|   )
rZ   r   rB   r   ry   r   r   rm   r   rn   )r]   r   s     r   rW   zSOCKS5PlainAuth.from_buffer   s    			$^^DIIaLLee^LL$(nnTYYq\\uunMM$)yy##**,,$*nnTYYq\\uunMM$)		$)$$++--$+	+r   c                     t                      }d|_        t          |           |_        | |_        t          |          |_        ||_        |S )Nr   )rZ   ry   rK   r   rm   r   rn   )rt   ru   r   s      r   	constructzSOCKS5PlainAuth.construct   sA    			$$(H$)$*H$)$+	+r   c                 0   | j                             ddd          }|| j                            ddd          z  }|| j                                        z  }|| j                            ddd          z  }|| j                                        z  }|S r|   )ry   to_bytesr   rm   encoder   rn   r2   r   s     r   r   zSOCKS5PlainAuth.to_bytes   s    x>>!ty!???!tz!ty!???!t{!	
(r   N
r	   r
   r   r3   rd   rc   rB   rW   r   r   r   r   r   rZ   rZ      s             , 8 8 ,8   ,   ,    r   rZ   c                   r    e Zd Zd Zed             Zed             Zed             Zed             Zd Z	dS )rV   c                 0    d| _         d | _        d | _        d S Nr    )ry   NMETHODSMETHODSr6   s    r   r3   zSOCKS5Nego.__init__   s    $($-$,,,r   c           
        K   t                      }|                     d           d {V }t                              |dd          |_        |                     d           d {V }t                              |dd          |_        g |_        t          |j                  D ]_}|                     d           d {V }|j                            t          t                              |dd                               `|S r|   )
rV   readexactlyr   rB   ry   r   r   rangeappendr   )ra   negor   _s       r   rc   zSOCKS5Nego.from_streamreader   s     	$q!!!!!!!!!^^A55^AA$(q!!!!!!!!!...FF$-$, [ [a""""""""1<|CNN1%RWN$X$XYYZZZZ	+r   c                 Z    t                               t          j        |                     S r0   )rV   rW   r   r   r   s    r   rB   zSOCKS5Nego.from_bytes   s     			
5 1 1	2	22r   c           
         t                      }t                              |                     d          dd          |_        t                              |                     d          dd          |_        g |_        t          |j                  D ]W}|j                            t          t                              |                     d          dd                               X|S r|   )
rV   r   rB   r   ry   r   r   r   r   r   )r]   r   r   s      r   rW   zSOCKS5Nego.from_buffer   s    	$^^DIIaLLee^LL$(..155.QQ$-$, f fa<|CNN499Q<<U]bN$c$cddeeee	+r   c                     t          | t                    s| g} t                      }t          |           |_        | |_        |S r0   )rk   listrV   rK   r   r   )methodsr   s     r   from_methodszSOCKS5Nego.from_methods  s=    	GT	"	" Y7	$g,,$-$,	+r   c                     | j                             ddd          }|| j                            ddd          z  }| j        D ]"}||j                            ddd          z  }#|S r|   )ry   r   r   r   value)r2   r   methods      r   r   zSOCKS5Nego.to_bytes  sz    x>>!t}aUUCCC! D DfaUUCCC11	
(r   N)
r	   r
   r   r3   rd   rc   rB   rW   r   r   r   r   r   rV   rV      s          
   , 3 3 ,3   ,   ,    r   rV   c                       e Zd Zd Zd Zed             Zed             Zed             Zed             Z	ed             Z
edd	            Zd
 ZdS )SOCKS5NegoReplyc                 "    d| _         d | _        d S r   ry   METHODr6   s    r   r3   zSOCKS5NegoReply.__init__  s    $($+++r   c                 >    d}|d| j         z  z  }|d| j        z  z  }|S )Nz== SOCKS5NegoReply ==
z	VER: %s
zMETHOD: %s
r   r   s     r   __repr__zSOCKS5NegoReply.__repr__  s/    "!}tx!$+%%!	
(r   c                     d}d}	 |                      d          }|dk    rn||z  }t          |          |k    rn6t                              |          S )Nr   r   T   )rJ   rK   r   rB   )rE   rL   
total_sizerM   s       r   from_socketzSOCKS5NegoReply.from_socket   sd    	$*

((4..4
ckk	4<4	$ii:	
 
	#	#D	)	))r   c                 4  K   t                      }|                     d           d {V }t                              |dd          |_        |                     d           d {V }t          t                              |dd                    |_        |S r|   )r   r   r   rB   ry   r   r   r   s      r   rc   z!SOCKS5NegoReply.from_streamreader.  s      #q!!!!!!!!!NN1%%N@@#'q!!!!!!!!!CNN1%%NPPQQ#*	*r   c                 Z    t                               t          j        |                     S r0   )r   rW   r   r   r   s    r   rB   zSOCKS5NegoReply.from_bytes8  r   r   c                    t                      }t                              |                     d          dd          |_        t          t                              |                     d          dd                    |_        |S r|   )r   r   rB   r   ry   r   r   r   s     r   rW   zSOCKS5NegoReply.from_buffer<  sa    #NN499Q<<UUNKK#'CNN499Q<<UUZN[[\\#*	*r   c                 >    t                      }d|_        | |_        |S r   r   ry   r   )r   r   s     r   r   zSOCKS5NegoReply.constructC  s     ##'#*	*r   r   c                 >    t                      }||_        | |_        |S r0   r   )r   verr   s      r   construct_authzSOCKS5NegoReply.construct_authJ  s     ##'#*	*r   c                     | j                             ddd          }|| j        j                            ddd          z  }|S r|   )ry   r   r   r   r   s     r   r   zSOCKS5NegoReply.to_bytesR  sG    x>>!t{!!!!GGG!	
(r   N)r   )r	   r
   r   r3   r   rd   r   rc   rB   rW   r   r   r   r   r   r   r   r     s             * * ,*   , 8 8 ,8   ,   ,    ,    r   r   c                       e Zd Zd Zed             Zed             Zed             Zed             Zed             Z	d Z
dS )	r\   c                 n    d| _         t          j        | _        d| _        d | _        d | _        d | _        d S Nr    r   )ry   r   r   CMDRSVATYPDST_ADDRDST_PORTr6   s    r   r3   zSOCKS5Request.__init__Y  s3    $("$($($)$-$---r   c                   K   t                      }|                     d           d {V }t                              |dd          |_        |                     d           d {V }t          t                              |dd                    |_        |                     d           d {V }t                              |dd          |_        |                     d           d {V }t          t                              |dd                    |_	        |j	        t          j
        k    r5|                     d           d {V }t          j        |          |_        n|j	        t          j        k    r5|                     d           d {V }t          j        |          |_        n|j	        t          j        k    rl|                     d           d {V }t                              |dd          }|                     |           d {V }|                                |_        |                     d           d {V }t                              |dd          |_        |S Nr   r}   Fr~   r      r   )r\   r   r   rB   ry   r   r   r   r   r   r   	ipaddressIPv4Addressr   r   IPv6Addressr   r   r   )ra   reqr   lengths       r   rc   zSOCKS5Request.from_streamreadera  so     #q!!!!!!!!!NN1%%N@@#'q!!!!!!!!!#...NNOO#'q!!!!!!!!!NN1%%N@@#'q!!!!!!!!!s~~aUU~SSTT#(X"(((""""""""1'**3<<
x$***########1'**3<<
x$///""""""""1NN1%%N@@6''''''''1((**3<q!!!!!!!!!uuEE#,	*r   c                 Z    t                               t          j        |                     S r0   )r\   rW   r   r   r   s    r   rB   zSOCKS5Request.from_bytes~  s     		"	"2:e#4#4	5	55r   c                 R   t                      }t                              |                     d          dd          |_        t          t                              |                     d          dd                    |_        t                              |                     d          dd          |_        t          t                              |                     d          dd                    |_	        |j	        t          j
        k    r-t          j        |                     d                    |_        n|j	        t          j        k    r-t          j        |                     d                    |_        nq|j	        t          j        k    r\t                              |                     d          dd          }|                     |                                          |_        t                              |                     d          dd          |_        |S r   )r\   r   rB   r   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r]   r   r   s      r   rW   zSOCKS5Request.from_buffer  s   #NN499Q<<UUNKK#'#..15SX.YYZZ#'NN499Q<<UUNKK#'s~~diillX]~^^__#(X"((('		!553<<
x$***'		"663<<
x$///NN499Q<<UUNKK6))F##**,,3<		!%%PP#,	*r   c                    t                      }t          j        |_        | j        du rt          j        |_        t          | j        t          j	                  rt          j        |_        | j        |_        ntt          | j        t          j                  rt          j        |_        | j        |_        n7t          | j        t                     rt          j        |_        | j        |_        | j        |_        |S )NT)r\   r   r   r   is_bindr   rk   endpoint_ipr   r   r   r   r   r   r   r   strr   endpoint_portr   )targetr   s     r   from_targetzSOCKS5Request.from_target  s    #!#'^t37"I$9:: %%38$3<<&$i&;<< %%38$3<<&$c** %*38$3<%#,	*r   c                    t                      }d|_        | |_        d|_        t	          |t
          j                  rt          j        |_	        ||_
        n`t	          |t
          j                  rt          j        |_	        ||_
        n-t	          |t                    rt          j        |_	        ||_
        ||_        |S r   )r\   ry   r   r   rk   r   r   r   r   r   r   r   r   r   r   r   )cmdaddressportr   s       r   r   zSOCKS5Request.construct  s    ##'#'#'.// %383<<'9011 %383<<'3 *383<#,	*r   c                 0   | j                             ddd          }|| j        j                            ddd          z  }|| j                            ddd          z  }|| j        j                            ddd          z  }| j        t          j        k    rJ|t          | j	                                      ddd          z  }|| j	        
                                z  }n|| j	        j        z  }|| j                            ddd          z  }|S Nr   r}   Fr~   r   )ry   r   r   r   r   r   r   r   rK   r   r   packedr   r   s     r   r   zSOCKS5Request.to_bytes     x>>!tx~qeeDDD!tx>>>!tyuuEEE!	Y#...DM##A55#III1111t}aUUCCC!	
(r   N)r	   r
   r   r3   rd   rc   rB   rW   r   r   r   r   r   r   r\   r\   X  s             ,8 6 6 ,6   ,"   ,&   ,$    r   r\   c                       e Zd Zd Zed             Zed             Zed             Zed             Zed             Z	d Z
d Zd	S )
SOCKS5Replyc                 Z    d| _         d | _        d| _        d | _        d | _        d | _        d S r   )ry   REPr   r   	BIND_ADDR	BIND_PORTr6   s    r   r3   zSOCKS5Reply.__init__  s0    $($($($)$.$...r   c                 z   d}d}	 |                      d          }|dk    rn||z  }t          |          dk    rTt          |d                   }|t          j        k    rd}|t          j        k    rd}|t          j        k    rd|d         z   }t          |          |k    rnt                              |          S )	Nr   r   Tr   r   
      r!   )rJ   rK   r   r   r   r   r   rB   )rE   rL   r   rM   rts        r   r   zSOCKS5Reply.from_socket  s    	$*

((4..4
ckk	4<4	$ii!mm	47	#	#B	$$$Z	$$$Z	)))$q'/Z	$ii:	#
& 
			%	%%r   c                   K   t                      }|                     d           d {V }t                              |dd          |_        |                     d           d {V }t          t                              |dd                    |_        |                     d           d {V }t                              |dd          |_        |                     d           d {V }t          t                              |dd                    |_	        |j	        t          j
        k    r5|                     d           d {V }t          j        |          |_        n|j	        t          j        k    r5|                     d           d {V }t          j        |          |_        n|j	        t          j        k    rl|                     d           d {V }t                              |dd          }|                     |           d {V }|                                |_        |                     d           d {V }t                              |dd          |_        |S r   )r   r   r   rB   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   r   r   r   s       r   rc   zSOCKS5Reply.from_streamreader  so     #q!!!!!!!!!NN1%%N@@#'q!!!!!!!!!CNN1%%NPPQQ#'q!!!!!!!!!NN1%%N@@#'q!!!!!!!!!s~~aUU~SSTT#(X"(((""""""""1(++3==
x$***########1(++3==
x$///""""""""1NN1%%N@@6''''''''188::3=q!!!!!!!!!...FF#-	*r   c                 Z    t                               t          j        |                     S r0   )r   rW   r   r   r   s    r   rB   zSOCKS5Reply.from_bytes  s     		 	 E!2!2	3	33r   c                 R   t                      }t                              |                     d          dd          |_        t          t                              |                     d          dd                    |_        t                              |                     d          dd          |_        t          t                              |                     d          dd                    |_	        |j	        t          j
        k    r-t          j        |                     d                    |_        n|j	        t          j        k    r-t          j        |                     d                    |_        nq|j	        t          j        k    r\t                              |                     d          dd          }|                     |                                          |_        t                              |                     d          dd          |_        |S r   )r   r   rB   r   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r]   r   r   s      r   rW   zSOCKS5Reply.from_buffer
  s   #NN499Q<<UUNKK#'CNN499Q<<UUZN[[\\#'NN499Q<<UUNKK#'s~~diillX]~^^__#(X"((((1663==
x$***(2773==
x$///NN499Q<<UUNKK699V$$++--3=..155.QQ#-	*r   c                    t                      }d|_        | |_        d|_        t	          |t
          j                  rt          j        |_	        ||_
        n`t	          |t
          j                  rt          j        |_	        ||_
        n-t	          |t                    rt          j        |_	        ||_
        ||_        |S r   )r   ry   r   r   rk   r   r   r   r   r   r   r   r   r   r   r   )r1   r   r   r   s       r   r   zSOCKS5Reply.construct  s    ##'#'#'.// %383<<'9011 %383<<'3 *383<#,	*r   c                 0   | j                             ddd          }|| j        j                            ddd          z  }|| j                            ddd          z  }|| j        j                            ddd          z  }| j        t          j        k    rJ|t          | j	                                      ddd          z  }|| j	        
                                z  }n|| j	        j        z  }|| j                            ddd          z  }|S r   )ry   r   r   r   r   r   r   r   rK   r   r   r   r   r   s     r   r   zSOCKS5Reply.to_bytes1  r   r   c                     d}|dt          | j                  z  z  }|dt          | j                  z  z  }|dt          | j                  z  z  }|dt          | j                  z  z  }|S )Nz== SOCKS5Reply ==
z	REP: %s
z
ATYP: %s
zBIND_ADDR: %s
zBIND_PORT: %s
)reprr   r   r   r   r   s     r   r   zSOCKS5Reply.__repr__>  sn    !}tDH~~%%!~TY''!T$.1111!T$.1111!	
(r   N)r	   r
   r   r3   rd   r   rc   rB   rW   r   r   r   r   r   r   r   r     s           & & ,&0   ,4 4 4 ,4   ,&   ,$      r   r   c                   t    e Zd Zd Zed             Zed             Zed             Zed	d            Zd Z	dS )
	SOCKS5UDPc                 Z    d | _         d | _        d | _        d | _        d | _        d | _        d S r0   )r   FRAGr   r   r   DATAr6   s    r   r3   zSOCKS5UDP.__init__I  s0    $($)$)$-$-$)))r   c                 l  K   t                      }|                     d           d {V }t                              |dd          |_        |                     d           d {V }t          t                              |dd                    |_        |                     d           d {V }t          t                              |dd                    |_        |j        t          j	        k    r5|                     d           d {V }t          j        |          |_        n|j        t          j        k    r5|                     d           d {V }t          j        |          |_        n|j        t          j        k    rl|                     d           d {V }t                              |dd          }|                     |           d {V }|                                |_        |                     d           d {V }t                              |dd          |_        |S Nr   r}   Fr~   r   r   r   )r   r   r   rB   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s       r   rc   zSOCKS5UDP.from_streamreaderQ  s1     #q!!!!!!!!!NN1%%N@@#'q!!!!!!!!!S^^A55^QQRR#(q!!!!!!!!!s~~aUU~SSTT#(X"(((""""""""1'**3<<
x$***########1'**3<<
x$///""""""""1NN1%%N@@6''''''''1((**3<q!!!!!!!!!uuEE#,	*r   c                 Z    t                               t          j        |                     S r0   )r   rW   r   r   r   s    r   rB   zSOCKS5UDP.from_bytesk  s     			rz%00	1	11r   c                    t                      }t                              |                     d          dd          |_        t                              |                     d          dd          |_        t          |                     d          dd          |_        |j        t          j        k    r-t          j
        |                     d                    |_        n|j        t          j        k    r-t          j        |                     d                    |_        nq|j        t          j        k    r\t                              |                     d          dd          }|                     |                                          |_        t                              |                     d          dd          |_        |                                 |_        d S r   )r   r   rB   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s      r   rW   zSOCKS5UDP.from_buffero  sV   #NN499Q<<UUNKK#'^^DIIaLLee^LL#(tyy||OOO#(X"((('		!553<<
x$***'		"663<<
x$///NN499Q<<UUNKK6))F##**,,3<		!%%PP#,YY[[#(((r   r   c                    t                      }d|_        ||_        t          | t          j                  rt          j        |_        | |_	        n`t          | t          j
                  rt          j        |_        | |_	        n-t          | t                    rt          j        |_        | |_	        ||_        ||_        |S )Nr   )r\   r   r   rk   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   rL   fragr   s        r   r   zSOCKS5UDP.construct  s    ##'#(.// %383<<'9011 %383<<'3 *383<#,#(	*r   c                    | j                             ddd          }|| j        j                            ddd          z  }|| j        j                            ddd          z  }| j        t
          j        k    rJ|t          | j                                      ddd          z  }|| j        	                                z  }n|| j        j
        z  }|| j                            ddd          z  }|| j        z  }|S )Nr   r}   Fr~   r   )r   r   r   r   r   r   r   rK   r   r   r   r   r   r   s     r   r   zSOCKS5UDP.to_bytes  s    x>>!tyuuEEE!tyuuEEE!	Y#...DM##A55#III1111t}aUUCCC!ty.!	
(r   N)r   r   r   r   r   r   r   H  s             ,2 2 2 ,2   ,"    ,$    r   r   )r   enumr   rN   asyncioasysocks.common.constantsr   Enumr   r   r   r   r[   r.   r9   r;   rQ   rf   rl   rw   rZ   rV   r   r\   r   r   r   r   r   <module>r
     s7  
 
			        2 2 2 2 2 2    	       DI       	   	# 	# 	# 	# 	#di 	# 	# 	#    Y       y          &       L' ' ' ' ' ' ' '4       
       48 8 8 8 8 8 8 8v0 0 0 0 0 0 0 0d@ @ @ @ @ @ @ @Fn n n n n n n nb| | | | | | | |~W W W W W W W W W Wr   