
    iI~              #       
   d Z ddlZddlZddlZddlZddlZddlZddlZddl	m
Z
mZmZmZmZ ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZ ddlmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' 	 ddl(Z(n# e)$ r	 ddl*m+Z( Y nw xY we&rddl,Z,ej-        j.        Z/d Z0dHdZ1	 dHdej2        j3        d	ej4        j5        e6z  d
e
de7dz  dee8e7f         f
dZ9	 	 	 	 	 	 	 	 	 	 dIdej2        j3        d
e
dz  de7dz  de:de:deej;        j<        ej=        j>        f         dz  de6dz  de:de:de:dej4        j5        dz  de
fdZ?	 	 	 	 	 	 	 	 	 	 	 dJdej4        j5        de@de7dz  de8de@dz  de8de:de:de:de:dej2        j3        dz  d ej2        jA        dz  de:dej4        j5        fd!ZB	 	 	 	 	 	 	 	 	 	 	 dKdej4        j5        de@de7dz  de8de@dz  de8de:de:de:d"ej2        j3        dz  d#ej2        jC        dz  d ej2        jA        dz  de:deej4        j5        e:f         fd$ZD	 dHdej2        jC        d	ej4        j5        e6z  de7dz  dee8e7f         fd%ZEd& ZF	 	 	 	 	 dLdej2        jC        de7dz  de:deej;        j<        ej=        j>        f         dz  de6dz  de:deej4        j5        e7f         fd'ZG	 	 	 	 	 	 	 	 dMdej4        j5        de@de7dz  de8de@dz  de8de:de:dej2        jC        dz  d ej2        jA        dz  dej4        j5        fd(ZH	 	 	 	 	 	 	 	 	 	 	 dNdej4        j5        de@de7dz  de8de@dz  de8de:de:dej2        jC        dz  d ej2        jA        dz  d+e(jI        dz  d,e@dz  d-e:e@z  dej4        j5        fd.ZJd/ed0         dd0fd1ZKdd2dddddd3d*d*ddejL        ejM        fdej4        j5        de@de7dz  de8de@dz  de8de:de:d4ed5         d6e@d7e:d-e:e@z  e(jI        z  d8e@dz  d/ed0         d9e8d:edej4        j5        f"d;ZN	 	 	 	 	 	 	 	 	 	 dOdej4        j5        de@d<e@de7dz  de8de@dz  de8de:de:d-e:e@z  e(jI        z  d ej2        jA        dz  d7e:d=ejO        jP        dz  dej4        j5        fd>ZQ	 	 	 	 	 	 	 	 	 	 	 dPdej4        j5        de@de7dz  de8de@dz  de8de:de:d=ejO        jP        dz  d-e:e@z  d ej2        jA        dz  d?e@dz  d,e@dz  dej4        j5        fd@ZOdAejR        jS        dBej2        jT        dej4        j5        dCe8dz  de7dz  de7de
fdDZUdddddde!jV        dfde@dAejR        jS        dej4        j5        dz  de8de7dz  dEe7dz  de@dz  de8dFe!d ej2        jA        dz  ddfdGZWdS )QzTalk to a DNS server.    N)AnyDictOptionalTuplecast)NullContext)BadResponseHTTPVersionNoDOHNoDOQUDPMode_check_status_compute_times_matches_destination
_remaininghave_dohmake_ssl_contextc                     |s|r>|8| t           j        k    rd}n%| t           j        k    rd}nt          d|            ||fS d S )Nz0.0.0.0z::zunknown address family )socketAF_INETAF_INET6NotImplementedError)afaddressports      ^/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/dns/asyncquery.py_source_tupler   B   sf      
$ 
?V^###v&&)*HB*H*HIIIt    c                 Z    | (|st          j                     }t          | |z
  d          S d S Nr   )timemax)
expirationnows     r   _timeoutr%   R   s5     	)++C:#Q'''tr   sockwhatdestinationr#   returnc                    K   t          |t          j        j                  r|                                }t          j                    }|                     ||t          ||                     d{V }||fS )a  Send a DNS message to the specified UDP socket.

    *sock*, a ``dns.asyncbackend.DatagramSocket``.

    *what*, a ``bytes`` or ``dns.message.Message``, the message to send.

    *destination*, a destination tuple appropriate for the address family
    of the socket, specifying where to send the query.

    *expiration*, a ``float`` or ``None``, the absolute time at which
    a timeout exception should be raised.  If ``None``, no timeout will
    occur.  The expiration value is meaningless for the asyncio backend, as
    asyncio's transport sendto() never blocks.

    Returns an ``(int, float)`` tuple of bytes sent and the sent time.
    N)
isinstancednsmessageMessageto_wirer!   sendtor%   )r&   r'   r(   r#   	sent_timens         r   send_udpr3   [   sr      . $+,, ||~~	Ikk$Xj)-L-LMMMMMMMMAy>r   Fr   ignore_unexpectedone_rr_per_rrsetkeyringrequest_macignore_trailingraise_on_truncationignore_errorsqueryc                   K   d}	 |                      dt          |                     d{V \  }}t          | j        |||          sEt	          j                    }	 t
          j                            ||||||          }n[# t
          j        j        $ r6}|	r.|
,|
	                    |                                          sY d}~Â d}~wt          $ r |	rY Ղ w xY w|	r|
|
	                    |          s|||fS )aj  Read a DNS message from a UDP socket.

    *sock*, a ``dns.asyncbackend.DatagramSocket``.

    See :py:func:`dns.query.receive_udp()` for the documentation of the other
    parameters, and exceptions.

    Returns a ``(dns.message.Message, float, tuple)`` tuple of the received message, the
    received time, and the address where the message arrived from.
    r   T  N)r6   r7   r5   r8   r9   )recvfromr%   r   familyr!   r,   r-   	from_wire	Truncatedis_response	Exception)r&   r(   r#   r4   r5   r6   r7   r8   r9   r:   r;   wirefrom_addressreceived_timeres                   r   receive_udprI   y   s_     0 D!0%)]]5(::N:N%O%OOOOOOO|#K{4E
 
 	 		%%'!1 /$7 &  AA {$ 		 		 		 %))!))++66 &  	 	 	 		
  	U.u7H7H7K7K.=,//s$   %B C+C	C		CC5   qwheretimeoutr   sourcesource_portbackendc                   K   |                                  }t          |          \  }}t          j                            |          }t          ||f|          }|
rt          |
          }nu|st          j                                        }t          |||          }|
                                r||f}nd}|                    |t          j        d||           d{V }|4 d{V }t          ||||           d{V  t          |||||| j        | j        ||	||            d{V \  }}}||z
  |_        |s|                     |          st(          |cddd          d{V  S # 1 d{V swxY w Y   dS )aF  Return the response obtained after sending a query via UDP.

    *sock*, a ``dns.asyncbackend.DatagramSocket``, or ``None``,
    the socket to use for the query.  If ``None``, the default, a
    socket is created.  Note that if a socket is provided, the
    *source*, *source_port*, and *backend* are ignored.

    *backend*, a ``dns.asyncbackend.Backend``, or ``None``.  If ``None``,
    the default, then dnspython will use the default backend.

    See :py:func:`dns.query.udp()` for the documentation of the other
    parameters, exceptions, and return type of this method.
    Nr   )r/   r   r,   inetaf_for_address_lltupler   asyncbackendget_default_backendr   datagram_connection_requiredmake_socketr   
SOCK_DGRAMr3   rI   r6   macr!   rB   r	   )rK   rL   rM   r   rN   rO   r4   r5   r8   r9   r&   rP   r:   rD   
begin_timer#   r   r(   cmstupledtuplesrG   rF   _s                            r   udpra      s\     8 99;;D-g66Z		 	 	'	'BE4="--K 
Q5@5F5F 	=&::<<Gr6;77//11 	T]FFF&&r6+<aPPPPPPPP       Qq$Z888888888&1IE'
 '
 !
 !
 !
 !
 !
 !
M1 +  	q!1!1 	)                             s   )A/E++
E58E5udp_socktcp_sockc                    K   	 t          | ||||||||d|	||           d{V }|dfS # t          j        j        $ r% t	          | ||||||||
|
  
         d{V }|dfcY S w xY w)a  Return the response to the query, trying UDP first and falling back
    to TCP if UDP results in a truncated response.

    *udp_sock*, a ``dns.asyncbackend.DatagramSocket``, or ``None``,
    the socket to use for the UDP query.  If ``None``, the default, a
    socket is created.  Note that if a socket is provided the *source*,
    *source_port*, and *backend* are ignored for the UDP query.

    *tcp_sock*, a ``dns.asyncbackend.StreamSocket``, or ``None``, the
    socket to use for the TCP query.  If ``None``, the default, a
    socket is created.  Note that if a socket is provided *where*,
    *source*, *source_port*, and *backend*  are ignored for the TCP query.

    *backend*, a ``dns.asyncbackend.Backend``, or ``None``.  If ``None``,
    the default, then dnspython will use the default backend.

    See :py:func:`dns.query.udp_with_fallback()` for the documentation
    of the other parameters, exceptions, and return type of this
    method.
    TNF)ra   r,   r-   rA   tcp)rK   rL   rM   r   rN   rO   r4   r5   r8   rb   rc   rP   r:   responses                 r   udp_with_fallbackrg      s      F 
 
 
 
 
 
 
 
 %  ;       
 
 
 
 
 
 
 
 $ s   $) 6A"!A"c                 Z  K   t          |t          j        j                  r|                    d          }n&t          |                              dd          |z   }t          j                    }|                     |t          ||                     d{V  t          |          |fS )zSend a DNS message to the specified TCP socket.

    *sock*, a ``dns.asyncbackend.StreamSocket``.

    See :py:func:`dns.query.send_tcp()` for the documentation of the other
    parameters, exceptions, and return type of this method.
    T)prepend_length   bigN)
r+   r,   r-   r.   r/   lento_bytesr!   sendallr%   )r&   r'   r#   tcpmsgr1   s        r   send_tcprp   <  s       $+,, 5T22
 T##Au--4	I
,,vx
I>>
?
????????KK##r   c                    K   d}|dk    r[|                      |t          |                     d{V }|dk    rt          d          |t          |          z
  }||z   }|dk    [|S )z|Read the specified number of bytes from stream.  Keep trying until we
    either get the desired amount, or we hit EOF.
    r   r   NEOF)recvr%   EOFErrorrl   )r&   countr#   r_   r2   s        r   _read_exactlyrv   U  s       	A
!))))E8J#7#788888888885//!AE !)) Hr   c                   K   t          | d|           d{V }t          j        d|          \  }t          | ||           d{V }t          j                    }	t          j                            |||||          }
|
|	fS )zRead a DNS message from a TCP socket.

    *sock*, a ``dns.asyncbackend.StreamSocket``.

    See :py:func:`dns.query.receive_tcp()` for the documentation of the other
    parameters, exceptions, and return type of this method.
    rj   N!Hr6   r7   r5   r8   )rv   structunpackr!   r,   r-   r@   )r&   r#   r5   r6   r7   r8   ldatalrD   rF   rG   s              r   receive_tcpr~   c  s         a44444444E=u%%DQtQ
33333333DIKKM)' 	 	 	A }r   c
           	        K   |                                  }
t          |          \  }}|r*|                                 d{V  t          |          }n~t          j                            |          }t          |||          }||f}|	st          j        	                                }	|	
                    |t          j        d|||           d{V }|4 d{V }t          ||
|           d{V  t          |||| j        | j        |           d{V \  }}||z
  |_        |                     |          st&          |cddd          d{V  S # 1 d{V swxY w Y   dS )aO  Return the response obtained after sending a query via TCP.

    *sock*, a ``dns.asyncbacket.StreamSocket``, or ``None``, the
    socket to use for the query.  If ``None``, the default, a socket
    is created.  Note that if a socket is provided
    *where*, *port*, *source*, *source_port*, and *backend* are ignored.

    *backend*, a ``dns.asyncbackend.Backend``, or ``None``.  If ``None``,
    the default, then dnspython will use the default backend.

    See :py:func:`dns.query.tcp()` for the documentation of the other
    parameters, exceptions, and return type of this method.
    Nr   )r/   r   getpeernamer   r,   rR   rS   r   rU   rV   rX   r   SOCK_STREAMrp   r~   r6   rZ   r!   rB   r	   )rK   rL   rM   r   rN   rO   r5   r8   r&   rP   rD   r[   r#   r\   r   r]   r^   r_   rG   rF   s                       r   re   re     sN     4 99;;D-g66Z 
          5@5F5F X$$U++r6;77 	=&::<<G&&"Avvw
 
 
 
 
 
 
 
        Qq$
+++++++++#.IE$
 $
 
 
 
 
 
 
M +}}Q 	                             s   A&E
E!EU  Tssl_contextserver_hostnameverifyc                 n  K   t          |          \  }}|rt          |          }n|
t          ||dudg          }
t          j                            |          }t          |||          }||f}|	st          j                                        }	|		                    |t          j        d||||
|           d{V }|4 d{V }t          |          }t          | |||||||||	
  
         d{V }t          j                    }||z
  |_        |cddd          d{V  S # 1 d{V swxY w Y   dS )a  Return the response obtained after sending a query via TLS.

    *sock*, an ``asyncbackend.StreamSocket``, or ``None``, the socket
    to use for the query.  If ``None``, the default, a socket is
    created.  Note that if a socket is provided, it must be a
    connected SSL stream socket, and *where*, *port*,
    *source*, *source_port*, *backend*, *ssl_context*, and *server_hostname*
    are ignored.

    *backend*, a ``dns.asyncbackend.Backend``, or ``None``.  If ``None``,
    the default, then dnspython will use the default backend.

    See :py:func:`dns.query.tls()` for the documentation of the other
    parameters, exceptions, and return type of this method.
    Ndotr   )r   r   r   r,   rR   rS   r   rU   rV   rX   r   r   r%   re   r!   )rK   rL   rM   r   rN   rO   r5   r8   r&   rP   r   r   r   r[   r#   r\   r   r]   r^   r_   rf   end_times                         r   tlsr     s!     <  .g66Z 
5@5F5F*6?$3NQVPWXXKX$$U++r6;77 	=&::<<G&&	
 	
 	
 	
 	
 	
 	
 	
        Q:&&
 
 
 
 
 
 
 
 9;; :-!                             s   AD$$
D.1D.resolverzdns.asyncresolver.Resolverc                 D    | dd l }|j                                        } | S r    )dns.asyncresolverasyncresolverResolver)r   r,   s     r   _maybe_get_resolverr     s/         $--//Or     z
/dns-queryclientz.httpx.AsyncClient|dns.quic.AsyncQuicConnectionpathpostbootstrap_addressr?   http_versionc                 v	  K   	 t           j                            |          }n# t          $ r d}Y nw xY w|}|Tt           j                            |          r5|t
          j        k    rd| d| |	 }n|t
          j        k    r
d| d| |	 }i }|xt          j	        
                    |          }|j        t          d          t           j                            |j                  r|j        }|j        |d<   |j        |j        }|t          j        k    s|t          j        k    rt           s|lt#          |          }|j        J |                    |j        |           d{V }t'          j        t+          |                                                    }|r.t/          |t           j        j                  st          d          |!t/          |t           j        j                  sJ t5          | ||||||||||
|	           d{V S t           st6          |r)t/          |t8          j                  st          d
          |                                 }ddi}|t          j        t          j        fv }|t          j         t          j        fv }t           j!        "                                }|d}d}n|}|}|rtG          |          }n= |$                                ||||||||          }t9          j        ||||          }|4 d{V }|
rf|%                    dtM          tO          |                    d           |(                    |)                    ||||          |           d{V }nptU          j+        |          ,                    d          }|-                                } |(                    |.                    ||d| i|          |           d{V }	 ddd          d{V  n# 1 d{V swxY w Y   |j/        dk     s|j/        dk    r!t          | d|j/         d|j0                  t           j1        2                    |j0        | j3        | j4        ||          }!|j5        6                                |!_7        | 8                    |!          str          |!S )a  Return the response obtained after sending a query via DNS-over-HTTPS.

    *client*, a ``httpx.AsyncClient``.  If provided, the client to use for
    the query.

    Unlike the other dnspython async functions, a backend cannot be provided
    in this function because httpx always auto-detects the async backend.

    See :py:func:`dns.query.https()` for the documentation of the other
    parameters, exceptions, and return type of this method.
    Nzhttps://:z	https://[z]:zno hostname in URLsni_hostnamez8client parameter must be a dns.quic.AsyncQuicConnection.)r   r   
connectionz-client parameter must be an httpx.AsyncClientacceptzapplication/dns-messager   )local_addresshttp1http2r   
local_portr   r   r?   )r   r   r   	transport)zcontent-typezcontent-length)headerscontent
extensions   =r,   )r   paramsr      i+  z responded with status code z
Response body: ry   ):r,   rR   rS   
ValueError
is_addressr   r   r   urllibparseurlparsehostnamer   r
   H3DEFAULTr   r   resolve_namerandomchoicelist	addressesr+   quicAsyncQuicConnection_http3r   httpxAsyncClientr/   H1H2rU   rV   r   get_transport_classupdatestrrl   wait_forr   base64urlsafe_b64encoderstripdecodegetstatus_coder   r-   r@   r6   r7   elapsedtotal_secondsr!   rB   r	   )"rK   rL   rM   r   rN   rO   r5   r8   r   r   r   r   r   r   r?   r   r   urlr   parsedanswersrD   r   h1h2rP   r   r   r\   r   
the_clientrf   twirerG   s"                                     r   httpsr     s;     <X$$U++    C	~#(--e44~1U11T1411CC6?""3e33t3T33CJ &&s++?"12228v// 	9 &)/J~&;";D{~%%+++H+$*844H?...$11       G !'d73D3D3F3F.G.G H H 	Y*CH0
 
 	Y WXXX~FCH4P!Q!Q~~~
 
 
 
 
 
 
 
 
 	
   Jj):;; JHIII 99;;D23G	+.+*=>	>B	+.+*=>	>B2244G~

 
 
5@5H5H1G//11'!/	
 	
 	
	 Bv
 
 
        Z  	NN$=&)#d))nn    %--# )	            HH +D1188>>DKKMME$--#!5>)	           H -                          D c!!X%9C%?%? 5 5(2F 5 5 ( 05 5
 
 	
 		M)' 	 	 	A ++--AF== Hs   $ 33CP
PPr   r   c                   K   t           j        j        st          d          t          j                            |          }|j        }|J |j        |j        }d| _	        | 
                                }|r#t           j        j        }t           j        j        }n"t           j                            |
          \  }} |            4 d {V } |||	|d          4 d {V 	 }|r|}n|                    ||||          }t          |          \  }}|                    |           d {V }|4 d {V  |                    |||           |                    t%          |                     d {V }t'          |                                ||           d d d           d {V  n# 1 d {V swxY w Y   t+          j                    }d d d           d {V  n# 1 d {V swxY w Y   t           j                            || j        | j        ||          }d d d           d {V  n# 1 d {V swxY w Y   t5          ||z
  d          |_        |                     |          st8          |S )Nz DNS-over-HTTP3 is not available.r   T)verify_modeserver_nameh3ry           )r,   r   	have_quicr   r   r   r   r   r   idr/   null_factoryfactories_for_backendconnectr   make_streamsend_h3receiver   r   r   r!   r-   r@   r6   r7   r"   rB   r	   )rK   rL   r   rM   r   rN   rO   r5   r8   r   rP   r   r   	url_partsr   rD   cfactorymfactorycontextthe_managerthe_connectionstartr#   streamfinishrG   s                             r   r   r     s      8 86777%%c**I!H~!~AD99;;D G8(8("x==gFF8xzz 
 
 
 
 
 
 
W8X$
 
 
 	! 	! 	! 	! 	! 	! 	! 	! !+!,!4!44" " #1"9"9UJ)55g>>>>>>>>F = = = = = = = =sD$///#^^Jz,B,BCCCCCCCCfnn..t<<<	= = = = = = = = = = = = = = = = = = = = = = = = = = =
 Y[[F!	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!" K!!I-+ " 
 
%
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2 %%%AF== Hs\   H3$AG"7A#F,G",
F66G"9F6:G"H3"
G,	,H3/G,	01H33
H= H=r   c                 P  K   t           j        j        st          d          |||}d| _        |                                 }|r%t           j        j        }t           j        j        }|}n"t           j                            |
          \  }} |            4 d{V } |||	|          4 d{V 	 }|s|                    ||||          }t          |          \  }}|
                    |           d{V }|4 d{V  |                    |d           d{V  |                    t          |                     d{V }ddd          d{V  n# 1 d{V swxY w Y   t          j                    }ddd          d{V  n# 1 d{V swxY w Y   t           j                            || j        | j        ||          }ddd          d{V  n# 1 d{V swxY w Y   t'          ||z
  d          |_        |                     |          st*          |S )ai  Return the response obtained after sending an asynchronous query via
    DNS-over-QUIC.

    *backend*, a ``dns.asyncbackend.Backend``, or ``None``.  If ``None``,
    the default, then dnspython will use the default backend.

    See :py:func:`dns.query.quic()` for the documentation of the other
    parameters, exceptions, and return type of this method.
    zDNS-over-QUIC is not available.Nr   )r   r   Try   r   )r,   r   r   r   r   r/   r   r   r   r   r   sendr   r   r!   r-   r@   r6   r7   r"   rB   r	   )rK   rL   rM   r   rN   rO   r5   r8   r   r   rP   r   r   rD   r   r   r   r   r   r   r#   r   r   rG   s                           r   r   r     s     2 8 75666"x'7"AD99;;D G8(8(#"x==gFF8xzz 
 
 
 
 
 
 
W8'
 
 
 	! 	! 	! 	! 	! 	! 	! 	!  !,!4!44" " #1"9"9UJ)55g>>>>>>>>F D D D D D D D Dkk$---------#^^Jz,B,BCCCCCCCCD D D D D D D D D D D D D D D D D D D D D D D D D D D Y[[F	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! K!!I-+ " 
 
!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
. %%%AF== Hs\   G!3AFAEF
E$$F'E$(F>G!
F	G!F	1G!!
G+.G+txn_managerr_   serialc                  K   |j         d         j        }|t          j        j        k    }|                                 }|                                }	|j        t          j	        k    }
|
rJt          t          j        j        |          }|                    |	dt          |                     d{V  n`t          t          j        j        |          }t!          j        dt%          |	                    |	z   }|                    ||           d{V  t          j                            | |||
          5 }d}d}d}|st-          |          \  }}||||k    r|}|
r/t          |          }|                    d|           d{V \  }}nEt1          |d|           d{V }t!          j        d|          \  }t1          |||           d{V }t          j                            ||j        |j        d|||
 |          }|                    |          }|W V  |j        }||j        r(|&|j         st          j!        "                    d	          ddd           dS # 1 swxY w Y   dS )
z'Given a socket, does the zone transfer.r   Nrx   Fr=   rj   T)r6   r7   xfrorigintsig_ctxmultir5   zmissing TSIG)#questionrdtyper,   	rdatatypeIXFRfrom_wire_originr/   typer   rY   r   rU   DatagramSocketr0   r%   StreamSocketrz   packrl   rn   r   Inboundr   r>   rv   r{   r-   r@   r6   rZ   process_messager   had_tsig	exception	FormError)r   r_   r;   r   rM   r#   r   is_ixfrr   rD   is_udprb   rc   ro   inbounddoner   rG   r`   mexpirationrwirer|   r}   s                          r   _inbound_xfrr  H  s      ^A%F**G))++F==??DVv((F 3(7;;oodD(:*>*>??????????(5q99T3t99--4vz222222222	fff	=	= :(, 	"-g66Q"&;+C+C( F";//#+#4#4UG#D#DDDDDDD
+HaEEEEEEEE}T511+HaEEEEEEEE%%!I!!z!( & 	 	A **1--DGGGGzH3  	"4 = 	:Q]1:]-)).999?: : : : : : : : : : : : : : : : : :s   5D!I##I'*I'lifetimeudp_modec
           
      N  K   |#t           j                            |          \  }}
nt           j                            |          }
t           j                            |           }t          |||          }| |f}|	st           j                                        }	t          |          \  }}|j
        d         j        t           j        j        k    r|t          j        k    r|	                    |t"          j        d||t'          |                     d{V }|4 d{V  	 t)          ||||
||          2 3 d{V }6 	 ddd          d{V  dS # t           j        j        $ r |t          j        k    r Y nw xY w	 ddd          d{V  n# 1 d{V swxY w Y   |	                    |t"          j        d||t'          |                     d{V }|4 d{V  t)          ||||
||          2 3 d{V }6 	 ddd          d{V  dS # 1 d{V swxY w Y   dS )am  Conduct an inbound transfer and apply it via a transaction from the
    txn_manager.

    *backend*, a ``dns.asyncbackend.Backend``, or ``None``.  If ``None``,
    the default, then dnspython will use the default backend.

    See :py:func:`dns.query.inbound_xfr()` for the documentation of
    the other parameters, exceptions, and return type of this method.
    Nr   )r,   r   
make_queryextract_serial_from_queryrR   rS   r   rU   rV   r   r   r   r   r   r   NEVERrX   r   rY   r%   r  UseTCPONLYr   )rL   r   r;   r   rM   r  rN   rO   r  rP   r   r   r]   r^   r`   r#   r_   s                    r   inbound_xfrr
    s     * }',,[9922599		 	 	'	'B2v{33FT]F 9"6688$X..OQ
~a3=#555(gm:S:S%%!1ffhz6J6J
 
 
 
 
 
 
 
  	 	 	 	 	 	 	 	+          !   	 	 	 	 	 	 	 	 	 	 	 	 	 	 7>   w|++ ,++	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  !!
F668J3G3G  	 	 	 	 	 	A         #E67J
 
 	 	 	 	 	 	 	! 
 
                             sZ   !F#E7D?=E%E<9F;E<<F
FF"H7G?=H
H!H)N)
NNFFNr   FFFN)NrJ   Nr   FFFFNNF)NrJ   Nr   FFFNNNF)NFNr   F)NrJ   Nr   FFNN)Nr   Nr   FFNNNNT)
Nr   Nr   FFTNTN)Nr   Nr   FFNTNNN)X__doc__r   
contextlibr   r   rz   r!   urllib.parser   typingr   r   r   r   r   dns.asyncbackendr,   dns.exceptiondns.inetdns.messagedns.namedns.quicdns.rdatatypedns.transactiondns.tsigdns.xfrdns._asyncbackendr   	dns.queryr	   r
   r   r   r   r   r   r   r   r   r   sslImportErrordns._no_ssl_no_sslr   rR   low_level_address_tuplerT   r   r%   rU   r   r-   r.   bytesfloatintr3   boolnameNametsigKeyrI   r   Backendra   r   rg   rp   rv   r~   re   
SSLContextr   r   	AF_UNSPECr   r   r   r   r   transactionTransactionManagerSocketr  r  r
   r   r   <module>r/     s  $                3 3 3 3 3 3 3 3 3 3 3 3 3 3                          ) ) ) ) ) )                         JJJJ     LLL 8+        $	 


)
+

%  	
 3:   @ ###"8< #! %(,:0 :0


):0t:0 :0 	:0
 :0 #(--.5:0 :0 :0 :0 :0 ;%:0 	:0 :0 :0 :0@ !#"! %37/3? ?
{?? T\? 	?
 $J? ? ? ? ? ? 

)D
0? %,? ? 	[? ? ? ?J !#"!7;59/3A  A 
{A A  T\A  	A 
 $JA  A  A  A  A  -4A  +d2A  %,A  A  3;$%A  A  A  A N  $$ $


'$
+

%$ $ 3:	$ $ $ $2     $"8< #! 


'  #(--.5	
   3;%&   B !"!15/3: :
{:: T\: 	:
 $J: : : : 

'$
.: %,: 	[: : : :@ !"!15/3)-"&C C
{CC T\C 	C
 $JC C C C 

'$
.C %,C $&C 4ZC 3JC 	[C C C CL34!   " !"!IM*.$(7;" + 3!m m
{mm T\m 	m
 $Jm m m m EFm m m 3J'm Tzm 34m m  !m" 	[#m m m mh !"!*./36:= =
{== 
= T\	=
 = $J= = = = 3J'= %,= = ,t3= 	[= = = =F !"!6:/3"&C C
{CC T\C 	C
 $JC C C C ,t3C 3JC %,C DjC 4ZC 	[C C C CL4:34:
4: ;4: $J	4:
 T\4: 4: 	4: 4: 4: 4:t )- !/3: ::3: ;%: 	:
 T\: dl: $J: : : %,: 
: : : : : :s   6A; ;B	B	