§
    Hºiöð  ã            #       ó¨  — U d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZ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Zddl Zddl!Z	 ddl"Z"n# e#$ r	 ddl$m%Z" Y nw xY wd„ Z&d„ Z'ej(         )                    d¦  «        Z*e*rBddl+Z,ddl-Z-e,j.        Z/e,j0        j1        j2        Z3 G d„ de/¦  «        Z4 G d	„ d
e-j5        ¦  «        Z6n G d„ d
¦  «        Z6e*Z7dej8        e9z  dej:        de9dej        fd„Z;e;Z<eej8        e9z  ej:        e9gej        f         e=d<    G d„ dej>        j?        ¦  «        Z@ G d„ dej>        jA        ¦  «        ZB G d„ dej>        j?        ¦  «        ZC G d„ dej>        j?        ¦  «        ZDejE        jF        ZFd„ ZGd„ ZHd„ ZId„ ZJd„ ZKd„ ZL	 d}d!„ZM	 d~dej8        e9z  d"ej:        d#edz  dej        fd$„ZN	 	 ddej8        e9z  d"ej:        d%e"jO        d&ejP        jQ        eRz  dz  d#edz  de"jS        fd'„ZTd(„ ZUd)ed*         dd*fd+„ZV G d,„ d-ejW        ¦  «        ZXdd.ddd/d/dd0d dd dejY        eXjZ        fd1ej[        j\        d2eRd3e]dz  d4e9d#eRdz  d5e9d6e^d7e^d8edz  d9eRd:e^d;eRdz  d<e^eRz  e"jO        z  d)ed*         d=e9d>eXdej[        j\        f"d?„Z_d@ej`        ja        dAebdebfdB„Zcd@ej`        ja        dCeRdDebddfdE„Zd	 	 	 	 	 	 	 	 	 d€d1ej[        j\        d2eRdFeRd3e]dz  d4e9d#eRdz  d5e9d6e^d7e^d<e^eRz  e"jO        z  d:e^dGej`        je        dz  dej[        j\        fdH„ZfdI„ ZgdJ„ Zh	 d~dKedLej[        j\        ebz  dMedNe]dz  dee9e]f         f
dO„Zi	 	 	 	 	 	 	 	 	 	 d�dKedMedz  dNe]dz  dQe^d6e^dReejP        jQ        ejj        jk        f         dz  dSebdz  d7e^dTe^dUe^dVej[        j\        dz  defdW„Zl	 	 	 	 	 	 	 	 	 	 d‚d1ej[        j\        d2eRd3e]dz  d4e9d#eRdz  d5e9dQe^d6e^d7e^dTe^dKedz  dUe^dej[        j\        fdY„Zm	 	 	 	 	 	 	 	 	 	 dƒd1ej[        j\        d2eRd3e]dz  d4e9d#eRdz  d5e9dQe^d6e^d7e^dZedz  d[edz  dUe^deej[        j\        e^f         fd\„Znd]„ Zod^„ Zp	 d~dKedLej[        j\        ebz  dNe]dz  dee9e]f         fd_„Zq	 	 	 	 	 d„dKedNe]dz  d6e^dReejP        jQ        ejj        jk        f         dz  dSebdz  d7e^deej[        j\        e]f         fd`„Zrda„ Zs	 	 	 	 	 	 	 d…d1ej[        j\        d2eRd3e]dz  d4e9d#eRdz  d5e9d6e^d7e^dKedz  dej[        j\        fdb„Ztdc„ Zu	 	 	 d†d<e^eRz  dde^deeveR         dz  de"jO        fdf„Zwd&eRdz  d<e^eRz  de"jO        fdg„Zx	 	 	 	 	 	 	 	 	 	 d‡d1ej[        j\        d2eRd3e]dz  d4e9d#eRdz  d5e9d6e^d7e^dKe"jS        dz  d%e"jO        dz  d&eRdz  d<e^eRz  dej[        j\        fdi„Zy	 	 	 	 	 	 	 	 	 	 dˆd1ej[        j\        d2eRd3e]dz  d4e9d#eRdz  d5e9d6e^d7e^dGej`        je        dz  d<e^eRz  djeRdz  d&eRdz  dej[        j\        fdk„Z` G dl„ dmejW        ¦  «        Zzdnej{        j|        doej        e"jS        z  dVej[        j\        dpe9dz  d3e]dz  dNe]dz  defdq„Z}ej~        j        ej€        j�        ddXddd ddddd/ejj        j‚        fd2eRdrejP        jQ        eRz  dsej~        jƒ        eRz  dtej€        j„        eRz  d3e]dz  d4e9dReejP        jQ        ejj        jk        f         dz  duejP        jQ        eRz  dz  dve^dwe]dz  d#eRdz  d5e9dpe9dxe^dyejP        jQ        eRz  def dz„ZEddXddddezj…        fd2eRdnej{        j|        dVej[        j\        dz  d4e9d3e]dz  dwe]dz  d#eRdz  d5e9d{ezddfd|„Z†dS )‰zTalk to a DNS server.é    N)ÚAnyÚCallableÚDictÚOptionalÚTupleÚcastc                 óh   — | €d S | t          j         ¦   «         z
  }|dk    rt          j        j        ‚|S )Nç        )ÚtimeÚdnsÚ	exceptionÚTimeout)Ú
expirationÚtimeouts     úN/home/mmwave/public_html/mmwave/venv/lib/python3.11/site-packages/dns/query.pyÚ
_remainingr   5   s6   € ØÐØˆtØ�4œ9™;œ;Ñ&€GØ�#‚~€~ÝŒmÔ#Ð#Ø€Nó    c                 óR   — |€d S t          t          j        ¦   «         | z   |¦  «        S ©N)Úminr   )r   r   s     r   Ú_expiration_for_this_attemptr   >   s(   € ØÐØˆtÝ�tŒy‰{Œ{˜WÑ$ jÑ1Ô1Ð1r   Údohc                   ó2   ‡ — e Zd Zˆ fd„Z	 dd„Z	 dd„Zˆ xZS )Ú_NetworkBackendc                 ó€   •— t          ¦   «                              ¦   «          || _        || _        || _        || _        d S r   )ÚsuperÚ__init__Ú_local_portÚ	_resolverÚ_bootstrap_addressÚ_family)ÚselfÚresolverÚ
local_portÚbootstrap_addressÚfamilyÚ	__class__s        €r   r   z_NetworkBackend.__init__M   s;   ø€ Ý‰GŒG×ÒÑÔÐØ)ˆDÔØ%ˆDŒNØ&7ˆDÔ#Ø!ˆDŒLˆLˆLr   Nc                 óx  — g }t          |¦  «        \  }}t          j                             |¦  «        r|                     |¦  «         nŠ| j        �|                     | j        ¦  «         nht          |¦  «        }| j        }	|rt          j                             |¦  «        }	| j	         
                    ||	|¬¦  «        }
|
                     ¦   «         }|D ]Ù}t          j                             |¦  «        }|€| j        dk    r,|€d}t          j                             || j        f|¦  «        }nd }	 t          |t          j        |¦  «        }t#          d|¦  «        }t%          |t          j                             ||f|¦  «        |¦  «         t'          |¦  «        c S # t(          $ r Y ŒÖw xY wt*          j        ‚)N)r&   Úlifetimer   z0.0.0.0g       @)Ú_compute_timesr   ÚinetÚ
is_addressÚappendr    r   r!   Úaf_for_addressr   Úresolve_nameÚ	addressesr   Úlow_level_address_tupleÚmake_socketÚsocketÚSOCK_STREAMr   Ú_connectÚ_CoreSyncStreamÚ	ExceptionÚhttpcoreÚConnectError)r"   ÚhostÚportr   Úlocal_addressÚsocket_optionsr0   Ú_r   r&   ÚanswersÚaddressÚafÚsourceÚsockÚattempt_expirations                   r   Úconnect_tcpz_NetworkBackend.connect_tcpT   sÜ  € ð ˆIÝ*¨7Ñ3Ô3‰MˆAˆzÝŒx×"Ò" 4Ñ(Ô(ð 0Ø× Ò  Ñ&Ô&Ð&Ð&ØÔ(Ð4Ø× Ò  Ô!8Ñ9Ô9Ð9Ð9å$ ZÑ0Ô0�Øœ�Ø ð DÝ œX×4Ò4°]ÑCÔC�FØœ.×5Ò5Ø °'ð 6ñ ô �ð $×-Ò-Ñ/Ô/�	Ø$ð ð �Ý”X×,Ò,¨WÑ5Ô5�Ø Ð,°Ô0@ÀAÒ0EÐ0EØ$Ð,Ø(1˜Ý œX×=Ò=Ø&¨Ô(8Ð9¸2ñô �F�Fð "�Fð
Ý& r­6Ô+=¸vÑFÔF�DÝ)EÀcÈ:Ñ)VÔ)VÐ&ÝØÝœ×8Ò8¸'À4¸È"ÑMÔMØ*ñô ð õ
 +¨4Ñ0Ô0Ð0Ð0Ð0øÝ ð ð ð Ø�DðøøøåÔ'Ð's   Ä3A*F Æ 
F-Æ,F-c                 ó   — t           ‚r   ©ÚNotImplementedError)r"   Úpathr   r=   s       r   Úconnect_unix_socketz#_NetworkBackend.connect_unix_socket}   s
   € õ &Ð%r   )NNN©NN)Ú__name__Ú
__module__Ú__qualname__r   rE   rJ   Ú__classcell__©r'   s   @r   r   r   L   sm   ø€ € € € € ð	"ð 	"ð 	"ð 	"ð 	"ð PTð'	(ð '	(ð '	(ð '	(ðT 6:ð	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&r   r   c                   ó4   ‡ — e Zd Zdddej        dœˆ fd„
Zˆ xZS )Ú_HTTPTransportr   N©r$   r%   r#   r&   c                ó´   •— |€|€dd l }|j                             ¦   «         } t          ¦   «         j        |i |¤Ž t          ||||¦  «        | j        _        d S ©Nr   )Údns.resolverr#   ÚResolverr   r   r   Ú_poolÚ_network_backend)	r"   r$   r%   r#   r&   ÚargsÚkwargsr   r'   s	           €r   r   z_HTTPTransport.__init__ƒ   sp   ø€ ð ÐÐ$5Ð$=à#Ð#Ð#Ð#àœ<×0Ò0Ñ2Ô2�Ø�E‰GŒGÔ˜dÐ- fÐ-Ð-Ð-Ý*9Ø˜*Ð&7¸ñ+ô +ˆDŒJÔ'Ð'Ð'r   )rL   rM   rN   r3   Ú	AF_UNSPECr   rO   rP   s   @r   rR   rR   ‚   sS   ø€ € € € € ð Ø"ØØÔ#ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	r   rR   c                   ó0   — e Zd Zdddej        dœd„Zd„ ZdS )rR   r   NrS   c                ó   — d S r   © )r"   r$   r%   r#   r&   rZ   r[   s          r   r   z_HTTPTransport.__init__™   s	   € ð ˆDr   c                 ó   — t           ‚r   rG   )r"   r:   r;   r   r<   s        r   rE   z_HTTPTransport.connect_tcp¤   ó   € Ý%Ð%r   )rL   rM   rN   r3   r\   r   rE   r_   r   r   rR   rR   ˜   sM   € € € € € ð Ø"ØØÔ#ð		ð 		ð 		ð 		ð 		ð	&ð 	&ð 	&ð 	&ð 	&r   rA   ÚkindÚprotoÚreturnc                 ó.   — t          j         | ||¦  «        S r   )r3   )rA   rb   rc   s      r   Údefault_socket_factoryrf   «   s   € õ
 Œ=˜˜T 5Ñ)Ô)Ð)r   Úsocket_factoryc                   ó   — e Zd ZdZdS )ÚUnexpectedSourcez=A DNS query response came from an unexpected address or port.N©rL   rM   rN   Ú__doc__r_   r   r   ri   ri   º   s   € € € € € ØGÐGÐGÐGr   ri   c                   ó   — e Zd ZdZdS )ÚBadResponsez<A DNS query response does not respond to the question asked.Nrj   r_   r   r   rm   rm   ¾   s   € € € € € ØFÐFÐFÐFr   rm   c                   ó   — e Zd ZdZdS )ÚNoDOHzMDNS over HTTPS (DOH) was requested but the httpx module is not
    available.Nrj   r_   r   r   ro   ro   Â   ó   € € € € € ðð ð ð r   ro   c                   ó   — e Zd ZdZdS )ÚNoDOQzNDNS over QUIC (DOQ) was requested but the aioquic module is not
    available.Nrj   r_   r   r   rr   rr   Ç   rp   r   rr   c                 óB   — t          j         ¦   «         }| €|d fS ||| z   fS r   )r   )r   Únows     r   r*   r*   Ð   s+   € Ý
Œ)‰+Œ+€CØ€Ø�Tˆ{Ðà�S˜7‘]Ð#Ð#r   c                 óô  — |r4t          | t          j        ¦  «        r|                      ¦   «         dk    rdS t	          j        ¦   «         5 }d}|r|t          j        z  }|r|t          j        z  }|r|                     | |¦  «         |€d }n-|t          j	        ¦   «         z
  }|dk    rt          j        j        ‚|                     |¦  «        st          j        j        ‚	 d d d ¦  «         d S # 1 swxY w Y   d S )Nr   Tr
   )Ú
isinstanceÚsslÚ	SSLSocketÚpendingÚ	selectorsÚDefaultSelectorÚ
EVENT_READÚEVENT_WRITEÚregisterr   r   r   r   Úselect)ÚfdÚreadableÚwritabler>   r   ÚselÚeventsr   s           r   Ú	_wait_forr…   Ø   sF  € ð ð •J˜r¥3¤=Ñ1Ô1ð °b·j²j±l´lÀQÒ6FÐ6FØˆtÝ	Ô	"Ñ	$Ô	$ð (¨ØˆØð 	+Ø•iÔ*Ñ*ˆFØð 	,Ø•iÔ+Ñ+ˆFØð 	%Ø�LŠL˜˜VÑ$Ô$Ð$ØÐØˆGˆGà ¥4¤9¡;¤;Ñ.ˆGØ˜#Š~ˆ~Ý”mÔ+Ð+Ø�zŠz˜'Ñ"Ô"ð 	(Ý”-Ô'Ð'ð	(ð(ð (ð (ñ (ô (ð (ð (ð (ð (ð (ð (ð (øøøð (ð (ð (ð (ð (ð (s   Á
BC-Ã-C1Ã4C1c                 ó,   — t          | ddd|¦  «         d S )NTF©r…   ©Úsr   s     r   Ú_wait_for_readablerŠ   ô   s   € Ýˆa��u˜d JÑ/Ô/Ð/Ð/Ð/r   c                 ó,   — t          | ddd|¦  «         d S )NFTr‡   rˆ   s     r   Ú_wait_for_writablerŒ   ø   s   € Ýˆa�˜˜d JÑ/Ô/Ð/Ð/Ð/r   c                 ó  — 	 t           j                             | |d         ¦  «        }t           j                             | |d         ¦  «        }n# t           j        j        $ r Y dS w xY w||k    o|dd …         |dd …         k    S )Nr   Fé   )r   r+   Ú	inet_ptonr   ÚSyntaxError)rA   Úa1Úa2Ún1Ún2s        r   Ú_addresses_equalr•   ü   sŠ   € ðÝŒX×Ò  B q¤EÑ*Ô*ˆÝŒX×Ò  B q¤EÑ*Ô*ˆˆøÝŒ=Ô$ð ð ð Øˆuˆuðøøøà�Š8Ð(˜˜1˜2˜2œ " Q R R¤&Ò(Ð(s   ‚AA ÁA'Á&A'c                 óØ   — |sdS t          | ||¦  «        s;t          j                             |d         ¦  «        r|dd …         |dd …         k    rdS |rdS t	          d|› d|› �¦  «        ‚)NTr   rŽ   Fzgot a response from z instead of )r•   r   r+   Úis_multicastri   )rA   Úfrom_addressÚdestinationÚignore_unexpecteds       r   Ú_matches_destinationr›     s—   € ð ð ØˆtÝ˜˜L¨+Ñ6Ô6ð ÝŒ×Ò˜k¨!œnÑ-Ô-ðØ2>¸q¸r¸rÔ2BÀkÐRSÐRTÐRTÄoÒ2UÐ2UàˆtØ	ð ØˆuÝ
ØJ˜|ÐJÐJ¸[ÐJÐJñô ð r   Tc                 ó
  — d }d }	 t           j                             | ¦  «        }| }n# t          $ r |r‚ Y nw xY w|r9t           j                             |¦  «        }|r||k    rt	          d¦  «        ‚n|}|r@|s>	 t           j                             |¦  «        }n# t          $ r t	          d¦  «        ‚w xY w|r"t           j                             ||f|¦  «        }|r"t           j                             ||f|¦  «        }|||fS )Nz5different address families for source and destinationz3source_port specified but address family is unknown)r   r+   r.   r7   Ú
ValueErrorÚ
any_for_afr1   )Úwherer;   rB   Úsource_portÚwhere_must_be_addressrA   r™   Úsafs           r   Ú_destination_and_sourcer£     se  € ð
 
€BØ€KðÝŒX×$Ò$ UÑ+Ô+ˆØˆˆøÝð ð ð Ø ð 	Øð	ð 	ðøøøð ð ÝŒh×%Ò% fÑ-Ô-ˆØð 		à�bŠyˆyÝ ØKñô ð ð ð ˆBØð T˜6ð Tð	TÝ”X×(Ò(¨Ñ,Ô,ˆFˆFøÝð 	Tð 	Tð 	TåÐRÑSÔSÐSð	Tøøøð
 ð PÝ”h×6Ò6¸ÀTÐ7JÈBÑOÔOˆØð MÝ”×1Ò1°6¸;Ð2GÈÑLÔLˆØ�˜VÐ$Ð$s   †!( ¨8·8Á;B ÂB5ÚtyperB   c                 óÈ   — t          | |d¦  «        }	 |                     d¦  «         |�|                     |¦  «         |S # t          $ r |                     ¦   «          ‚ w xY w)aQ  Make a socket.

    This function uses the module's ``socket_factory`` to make a socket of the
    specified address family and type.

    *af*, a ``socket.AddressFamily`` or ``int`` is the address family, either
    ``socket.AF_INET`` or ``socket.AF_INET6``.

    *type*, a ``socket.SocketKind`` is the type of socket, e.g. ``socket.SOCK_DGRAM``,
    a datagram socket, or ``socket.SOCK_STREAM``, a stream socket.  Note that the
    ``proto`` attribute of a socket is always zero with this API, so a datagram socket
    will always be a UDP socket, and a stream socket will always be a TCP socket.

    *source* is the source address and port to bind to, if any.  The default is
    ``None`` which will bind to the wildcard address and a randomly chosen port.
    If not ``None``, it should be a (low-level) address tuple appropriate for *af*.
    r   F)rg   ÚsetblockingÚbindr7   Úclose)rA   r¤   rB   r‰   s       r   r2   r2   D  sq   € õ, 	�r˜4 Ñ#Ô#€AðØ	�Š�eÑÔÐØÐØ�FŠF�6‰NŒNˆNØˆøÝð ð ð Ø	�Š‰	Œ	ˆ	Øðøøøs   “-A Á A!Ússl_contextÚserver_hostnamec                 óº   — t          | ||¦  «        }t          |t          j        j        ¦  «        r|                     ¦   «         }|                     |d|¬¦  «        S )aš  Make a socket.

    This function uses the module's ``socket_factory`` to make a socket of the
    specified address family and type.

    *af*, a ``socket.AddressFamily`` or ``int`` is the address family, either
    ``socket.AF_INET`` or ``socket.AF_INET6``.

    *type*, a ``socket.SocketKind`` is the type of socket, e.g. ``socket.SOCK_DGRAM``,
    a datagram socket, or ``socket.SOCK_STREAM``, a stream socket.  Note that the
    ``proto`` attribute of a socket is always zero with this API, so a datagram socket
    will always be a UDP socket, and a stream socket will always be a TCP socket.

    If *ssl_context* is not ``None``, then it specifies the SSL context to use,
    typically created with ``make_ssl_context()``.

    If *server_hostname* is not ``None``, then it is the hostname to use for server
    certificate validation.  A valid hostname must be supplied if *ssl_context*
    requires hostname checking.

    *source* is the source address and port to bind to, if any.  The default is
    ``None`` which will bind to the wildcard address and a randomly chosen port.
    If not ``None``, it should be a (low-level) address tuple appropriate for *af*.
    F)Údo_handshake_on_connectrª   )r2   rv   r   ÚnameÚNameÚto_textÚwrap_socket)rA   r¤   r©   rª   rB   rC   s         r   Úmake_ssl_socketr±   e  sb   € õ> �r˜4 Ñ(Ô(€DÝ�/¥3¤8¤=Ñ1Ô1ð 4Ø)×1Ò1Ñ3Ô3ˆà×"Ò"ØØ %Ø'ð #ñ ô ð r   c                 óN   — |�t          | ||||¦  «        S t          | ||¦  «        S r   )r±   r2   )rA   r¤   rB   r©   rª   s        r   Ú_make_socketr³   �  s2   € ð ÐÝ˜r 4¨°oÀvÑNÔNÐNå˜2˜t VÑ,Ô,Ð,r   r#   zdns.resolver.Resolverc                 óD   — | €dd l }|j                             ¦   «         } | S rU   )rV   r#   rW   )r#   r   s     r   Ú_maybe_get_resolverrµ   �  s.   € ð ÐàÐÐÐà”<×(Ò(Ñ*Ô*ˆØ€Or   c                   ó.   — e Zd ZdZdZdZdZdZdZdZ	dZ
dS )ÚHTTPVersionz†Which version of HTTP should be used?

    DEFAULT will select the first version from the list [2, 1.1, 3] that
    is available.
    r   rŽ   é   é   N)rL   rM   rN   rk   ÚDEFAULTÚHTTP_1ÚH1ÚHTTP_2ÚH2ÚHTTP_3ÚH3r_   r   r   r·   r·   «  s=   € € € € € ðð ð €GØ€FØ	
€BØ€FØ	
€BØ€FØ	
€B€B€Br   r·   é»  Fz
/dns-queryÚqrŸ   r   r;   r    Úone_rr_per_rrsetÚignore_trailingÚsessionrI   Úpostr%   Úverifyr&   Úhttp_versionc                 ó$  — t          ||||d¦  «        \  }}}|}|�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    rºt           s³|€ft#          |¦  «        }|j
        €J ‚|                     |j
        |¦  «        }t'          j        t+          |                     ¦   «         ¦  «        ¦  «        }|r.t/          |t          j        j        ¦  «        st          d	¦  «        ‚t5          | ||||||||||
|¬
¦  «        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 }|€d}d}n|d         }|d         }|rtC          j"        |¦  «        }n/tG          ||||||||¬¦  «        }t9          j        ||||¬¦  «        }|5 }|€J ‚|
rM| $                    dtK          tM          |¦  «        ¦  «        dœ¦  «         | '                    |||||¬¦  «        }nWtQ          j)        |¦  «         *                    d¦  «        }| +                    ¦   «         } | ,                    |||d| i|¬¦  «        }ddd¦  «         n# 1 swxY w Y   |j-        dk     s|j-        dk    r!t          |› d|j-        › d|j.        › �¦  «        ‚t          j/         0                    |j.        | j1        | j2        ||¬¦  «        }!|j3         4                    ¦   «         |!_5        |  6                    |!¦  «        stn          ‚|!S )a	  Return the response obtained after sending a query via DNS-over-HTTPS.

    *q*, a ``dns.message.Message``, the query to send.

    *where*, a ``str``, the nameserver IP address or the full URL. If an IP address is
    given, the URL will be constructed using the following schema:
    https://<IP-address>:<port>/<path>.

    *timeout*, a ``float`` or ``None``, the number of seconds to wait before the query
    times out. If ``None``, the default, wait forever.

    *port*, a ``int``, the port to send the query to. The default is 443.

    *source*, a ``str`` containing an IPv4 or IPv6 address, specifying the source
    address.  The default is the wildcard address.

    *source_port*, an ``int``, the port from which to send the message. The default is
    0.

    *one_rr_per_rrset*, a ``bool``. If ``True``, put each RR into its own RRset.

    *ignore_trailing*, a ``bool``. If ``True``, ignore trailing junk at end of the
    received message.

    *session*, an ``httpx.Client``.  If provided, the client session to use to send the
    queries.

    *path*, a ``str``. If *where* is an IP address, then *path* will be used to
    construct the URL to send the DNS query to.

    *post*, a ``bool``. If ``True``, the default, POST method will be used.

    *bootstrap_address*, a ``str``, the IP address to use to bypass resolution.

    *verify*, a ``bool`` or ``str``.  If a ``True``, then TLS certificate verification
    of the server is done using the default CA bundle; if ``False``, then no
    verification is done; if a `str` then it specifies the path to a certificate file or
    directory which will be used for verification.

    *resolver*, a ``dns.resolver.Resolver`` or ``None``, the resolver to use for
    resolution of hostnames in URLs.  If not specified, a new resolver with a default
    configuration will be used; note this is *not* the default resolver as that resolver
    might have been configured to use DoH causing a chicken-and-egg problem.  This
    parameter only has an effect if the HTTP library is httpx.

    *family*, an ``int``, the address family.  If socket.AF_UNSPEC (the default), both A
    and AAAA records will be retrieved.

    *http_version*, a ``dns.query.HTTPVersion``, indicating which HTTP version to use.

    Returns a ``dns.message.Message``.
    FNzhttps://ú:z	https://[z]:zno hostname in URLÚsni_hostnamez8session parameter must be a dns.quic.SyncQuicConnection.)rÇ   rÆ   Ú
connectionz)session parameter must be an httpx.ClientÚacceptzapplication/dns-messager   rŽ   )r<   Úhttp1Úhttp2rÇ   r$   r%   r#   r&   )rÎ   rÏ   rÇ   Ú	transport)zcontent-typezcontent-length)ÚheadersÚcontentr   Ú
extensionsó   =r   )rÑ   r   ÚparamsrÓ   éÈ   é+  ú responded with status code z
Response body: ©ÚkeyringÚrequest_macrÃ   rÄ   )8r£   r   r+   r,   r3   ÚAF_INETÚAF_INET6ÚurllibÚparseÚurlparseÚhostnamer�   r;   r·   rÀ   rº   Úhave_dohrµ   r/   ÚrandomÚchoiceÚlistr0   rv   ÚquicÚSyncQuicConnectionÚ_http3ro   ÚhttpxÚClientÚto_wirer¼   r¾   Ú
contextlibÚnullcontextrR   ÚupdateÚstrÚlenrÆ   Úbase64Úurlsafe_b64encodeÚrstripÚdecodeÚgetÚstatus_coderÒ   ÚmessageÚ	from_wirerÚ   rÛ   ÚelapsedÚtotal_secondsr   Úis_responserm   )"rÂ   rŸ   r   r;   rB   r    rÃ   rÄ   rÅ   rI   rÆ   r%   rÇ   r#   r&   rÈ   rA   r>   Ú
the_sourceÚurlrÓ   Úparsedr?   ÚwirerÑ   Úh1Úh2r<   r$   ÚcmrÐ   ÚresponseÚtwireÚrs"                                     r   Úhttpsr  »  sê  € õN 2Øˆt�V˜[¨%ñô Ñ€RˆˆJð €CØ	€~�#œ(×-Ò-¨eÑ4Ô4€~Ø•”ÒÐØ1˜UÐ1Ð1 TÐ1¨4Ð1Ð1ˆCˆCØ•6”?Ò"Ð"Ø3˜eÐ3Ð3 tÐ3¨TÐ3Ð3ˆCà€JØÐ å”×&Ò& sÑ+Ô+ˆØŒ?Ð"ÝÐ1Ñ2Ô2Ð2ÝŒ8×Ò˜vœÑ/Ô/ð 	9Ø &¤ÐØ)/¬ˆJ�~Ñ&ØŒ;Ð"Ø”;ˆDà•{”~Ò%Ð%Ø�Ô+Ò+Ð+µHÐ+àÐ$Ý*¨8Ñ4Ô4ˆHØ”?Ð.Ð.Ð.Ø×+Ò+¨F¬O¸VÑDÔDˆGÝ &¤­d°7×3DÒ3DÑ3FÔ3FÑ.GÔ.GÑ HÔ HÐØð 	Y�:Ø•S”XÔ0ñ
ô 
ð 	Yõ ÐWÑXÔXÐXÝØØØØØØØØØØØØð
ñ 
ô 
ð 	
õ ð ÝˆØð F•z '­5¬<Ñ8Ô8ð FÝÐDÑEÔEÐEà�9Š9‰;Œ;€DØÐ2Ð3€Gà	�+œ.­+Ô*=Ð>Ð	>€BØ	�+œ.­+Ô*=Ð>Ð	>€Bð ÐØˆØˆ
ˆ
à" 1œˆØ ”]ˆ
àð 
Ý0:Ô0FÀwÑ0OÔ0Oˆˆå"Ø'ØØØØ!Ø/ØØð	
ñ 	
ô 	
ˆ	õ Œ\Ø˜B v¸ð
ñ 
ô 
ˆð 
ð ˆwð Ð"Ð"Ð"Øð 	Ø�NŠNà$=Ý&)­#¨d©)¬)¡n¤nðð ñô ð ð —|’|ØØØØØ%ð $ñ ô ˆHˆHõ Ô+¨DÑ1Ô1×8Ò8¸Ñ>Ô>ˆDØ—K’K‘M”MˆEØ—{’{ØØØØ˜u�~Ø%ð #ñ ô ˆHð+ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð> Ô˜cÒ!Ð! XÔ%9¸CÒ%?Ð%?ÝØð 3ð 3°(Ô2Fð 3ð 3Ø (Ô 0ð3ð 3ñ
ô 
ð 	
õ 	Œ×ÒØÔØ”	Ø”MØ)Ø'ð 	ñ 	ô 	€Að Ô×+Ò+Ñ-Ô-€A„FØ�=Š=˜ÑÔð ÝÐØ€Hs   Ê*B+M!Í!M%Í(M%rÑ   r­   c                 óF   — | €t           ‚| D ]\  }}||k    r|c S Œt           ‚r   )ÚKeyError)rÑ   r­   ÚheaderÚvalues       r   Ú_find_headerr  Š  s;   € Ø€ÝˆØ ð ð ‰ˆ�Ø�TŠ>ˆ>ØˆLˆLˆLð å
€Nr   Úpeerrÿ   c                 óP  — t          | d¦  «        }|€t          d¦  «        ‚t          |¦  «        }|dk     rt          d¦  «        ‚|dk     s|dk    rTd}t          |¦  «        dk    r)	 d|                     ¦   «         z   }n# t
          $ r Y nw xY wt          |› d	|› |› �¦  «        ‚d S )
Ns   :statuszno :status header in responser   zstatus is negativerÖ   r×   Ú z: rØ   )r  r�   Úintrð   rô   r7   r�   )rÑ   r  rÿ   r
  ÚstatusÚerrors         r   Ú_check_statusr  “  sÎ   € Ý˜ *Ñ-Ô-€EØ€}ÝÐ9Ñ:Ô:Ð:Ý�‰ZŒZ€FØ�‚z€zÝÐ.Ñ/Ô/Ð/Ø�‚|€|�v ’|�|ØˆÝˆt‰9Œ9�qŠ=ˆ=ðØ˜tŸ{š{™}œ}Ñ,��øÝð ð ð Ø�ðøøøå˜DÐMÐM¸fÐMÀeÐMÐMÑNÔNÐNð $�|s   Á(B  Â 
BÂBrý   rÌ   c                 óð  — t           j        j        st          d¦  «        ‚t          j                             |¦  «        }|j        }|€J ‚|j        �|j        }d| _	        |  
                    ¦   «         }|rt          j        d ¦  «        }n$t           j                             |	|d¬¦  «        }|}|5  |r|}n|                     ||||¦  «        }t          |¦  «        \  }}|                     |¦  «        5 }|                     |||
¦  «         |                     t'          |¦  «        ¦  «        }t)          |                     ¦   «         ||¦  «         d d d ¦  «         n# 1 swxY w Y   t-          j        ¦   «         }d d d ¦  «         n# 1 swxY w Y   t           j                             || j        | j        ||¬¦  «        }t7          ||z
  d¦  «        |_        |                      |¦  «        st:          ‚|S )Nz DNS-over-HTTP3 is not available.r   T)Úverify_modeÚserver_nameÚh3rÙ   r
   )r   ræ   Ú	have_quicro   rÞ   rß   rà   rá   r;   Úidrë   rì   rí   ÚSyncQuicManagerÚconnectr*   Úmake_streamÚsend_h3Úreceiver   r  rÑ   r   r÷   rø   rÚ   rÛ   Úmaxrû   rm   )rÂ   rŸ   rý   r   r;   rB   r    rÃ   rÄ   rÇ   rÆ   rÌ   Ú	url_partsrá   rÿ   ÚmanagerÚthe_managerÚthe_connectionÚstartr   ÚstreamÚfinishr  s                          r   rè   rè   ¤  ss  € õ Œ8Ôð 8ÝÐ6Ñ7Ô7Ð7å”×%Ò% cÑ*Ô*€IØÔ!€HØÐÐÐØ„~Ð!ØŒ~ˆà€A„DØ�9Š9‰;Œ;€Dð ð Ý5?Ô5KÈDÑ5QÔ5Qˆˆå”(×*Ò*Ø¨H¸ð +ñ 
ô 
ˆð ˆà	ð ð Øð 	Ø'ˆNˆNà(×0Ò0Ø�t˜V [ñô ˆNõ -¨WÑ5Ô5Ñˆ�
Ø×'Ò'¨Ñ0Ô0ð 	9°FØ�NŠN˜3  dÑ+Ô+Ð+Ø—>’>¥*¨ZÑ"8Ô"8Ñ9Ô9ˆDÝ˜&Ÿ.š.Ñ*Ô*¨E°4Ñ8Ô8Ð8ð	9ð 	9ð 	9ñ 	9ô 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9øøøð 	9ð 	9ð 	9ð 	9õ ”‘”ˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ 	Œ×ÒØØ”	Ø”MØ)Ø'ð 	ñ 	ô 	€Aõ �˜%‘ Ñ%Ô%€A„FØ�=Š=˜ÑÔð ÝÐØ€Hs8   Â1AF	Ã6AEÅF	ÅE#	Å#F	Å&E#	Å'F	Æ	FÆFc                 ór   — 	 	 |                       |¦  «        S # t          $ r t          | |¦  «         Y nw xY wŒ7)z‹Reads a datagram from the socket.
    A Timeout exception will be raised if the operation is not completed
    by the expiration time.
    )ÚrecvfromÚBlockingIOErrorrŠ   )rC   Úmax_sizer   s      r   Ú	_udp_recvr*  á  sT   € ð
1ð	1Ø—=’= Ñ*Ô*Ð*øÝð 	1ð 	1ð 	1Ý˜t ZÑ0Ô0Ð0Ð0Ð0ð	1øøøð1s   ƒ ˜5´5c                 ó¢   — 	 	 |r|                       ||¦  «        S |                      |¦  «        S # t          $ r t          | |¦  «         Y nw xY wŒO)z¦Sends the specified datagram to destination over the socket.
    A Timeout exception will be raised if the operation is not completed
    by the expiration time.
    )ÚsendtoÚsendr(  rŒ   )rC   Údatar™   r   s       r   Ú	_udp_sendr/  í  sn   € ð
1ð	1Øð 'Ø—{’{ 4¨Ñ5Ô5Ð5à—y’y ‘”Ð&øÝð 	1ð 	1ð 	1Ý˜t ZÑ0Ô0Ð0Ð0Ð0ð	1øøøð1s   ƒ0 ›0 °AÁArC   Úwhatr™   r   c                 óº   — t          |t          j        j        ¦  «        r|                     ¦   «         }t          j        ¦   «         }t          | |||¦  «        }||fS )aý  Send a DNS message to the specified UDP socket.

    *sock*, a ``socket``.

    *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.

    Returns an ``(int, float)`` tuple of bytes sent and the sent time.
    )rv   r   r÷   ÚMessagerë   r   r/  )rC   r0  r™   r   Ú	sent_timeÚns         r   Úsend_udpr5  ü  sP   € õ, �$�œÔ+Ñ,Ô,ð Ø�|Š|‰~Œ~ˆÝ”	‘”€IÝ�$˜˜k¨:Ñ6Ô6€AØˆyˆ>Ðr   r   rš   rÚ   rÛ   Úraise_on_truncationÚignore_errorsÚqueryc                 óÔ  — d}	 t          | d|¦  «        \  }}t          | j        |||¦  «        sŒ-t          j        ¦   «         }	 t          j                             ||||||¬¦  «        }n[# t          j        j        $ r6}|	r.|
�,|
                     |                     ¦   «         ¦  «        sY d}~Œ«‚ d}~wt          $ r |	rY Œ½‚ w xY w|	r|
�|
                     |¦  «        sŒÜ|r||fS |||fS )a  Read a DNS message from a UDP socket.

    *sock*, a ``socket``.

    *destination*, a destination tuple appropriate for the address family
    of the socket, specifying where the message is expected to arrive from.
    When receiving a response, this would be where the associated query was
    sent.

    *expiration*, a ``float`` or ``None``, the absolute time at which
    a timeout exception should be raised.  If ``None``, no timeout will
    occur.

    *ignore_unexpected*, a ``bool``.  If ``True``, ignore responses from
    unexpected sources.

    *one_rr_per_rrset*, a ``bool``.  If ``True``, put each RR into its own
    RRset.

    *keyring*, a ``dict``, the keyring to use for TSIG.

    *request_mac*, a ``bytes`` or ``None``, the MAC of the request (for TSIG).

    *ignore_trailing*, a ``bool``.  If ``True``, ignore trailing
    junk at end of the received message.

    *raise_on_truncation*, a ``bool``.  If ``True``, raise an exception if
    the TC bit is set.

    Raises if the message is malformed, if network errors occur, of if
    there is a timeout.

    If *destination* is not ``None``, returns a ``(dns.message.Message, float)``
    tuple of the received message and the received time.

    If *destination* is ``None``, returns a
    ``(dns.message.Message, float, tuple)``
    tuple of the received message, the received time, and the address where
    the message arrived from.

    *ignore_errors*, a ``bool``.  If various format errors or response
    mismatches occur, ignore them and keep listening for a valid response.
    The default is ``False``.

    *query*, a ``dns.message.Message`` or ``None``.  If not ``None`` and
    *ignore_errors* is ``True``, check that the received message is a response
    to this query, and if not keep listening for a valid response.
    r   Téÿÿ  )rÚ   rÛ   rÃ   rÄ   r6  N)
r*  r›   r&   r   r   r÷   rø   Ú	Truncatedrû   r7   )rC   r™   r   rš   rÃ   rÚ   rÛ   rÄ   r6  r7  r8  rÿ   r˜   Úreceived_timer  Úes                   r   Úreceive_udpr>    sS  € ð| €Dð(4Ý(¨¨u°jÑAÔAÑˆˆ|Ý#ØŒK˜ {Ð4Eñ
ô 
ð 	ð Ýœ	™œˆð	Ý”×%Ò%ØØØ'Ø!1Ø /Ø$7ð &ñ ô ˆAˆAøõ Œ{Ô$ð 	ð 	ð 	ð ðàÐ%Ø×)Ò)¨!¯)ª)©+¬+Ñ6Ô6ð &ð ����àøøøøÝð 	ð 	ð 	Øð Ø�àð		øøøð
 ð 	˜UÐ.°u×7HÒ7HÈÑ7KÔ7KÐ.ØØð 	4Ø�}Ð%Ð%à�} lÐ3Ð3s$   Á%A* Á*CÁ>+B/Â.B/Â/CÃ Cé5   c                 óæ  — |                       ¦   «         }t          ||||d¦  «        \  }}}t          |¦  «        \  }}|
rt          j        |
¦  «        }n|€J ‚t          |t          j        |¦  «        }|5 }t          ||||¦  «         t          |||||| j
        | j        ||	|| ¦  «        \  }}||z
  |_        |s|                      |¦  «        st          ‚|cddd¦  «         S # 1 swxY w Y   	 J ‚)aý  Return the response obtained after sending a query via UDP.

    *q*, a ``dns.message.Message``, the query to send

    *where*, a ``str`` containing an IPv4 or IPv6 address,  where
    to send the message.

    *timeout*, a ``float`` or ``None``, the number of seconds to wait before the
    query times out.  If ``None``, the default, wait forever.

    *port*, an ``int``, the port send the message to.  The default is 53.

    *source*, a ``str`` containing an IPv4 or IPv6 address, specifying
    the source address.  The default is the wildcard address.

    *source_port*, an ``int``, the port from which to send the message.
    The default is 0.

    *ignore_unexpected*, a ``bool``.  If ``True``, ignore responses from
    unexpected sources.

    *one_rr_per_rrset*, a ``bool``.  If ``True``, put each RR into its own
    RRset.

    *ignore_trailing*, a ``bool``.  If ``True``, ignore trailing
    junk at end of the received message.

    *raise_on_truncation*, a ``bool``.  If ``True``, raise an exception if
    the TC bit is set.

    *sock*, a ``socket.socket``, 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 nonblocking datagram socket,
    and the *source* and *source_port* are ignored.

    *ignore_errors*, a ``bool``.  If various format errors or response
    mismatches occur, ignore them and keep listening for a valid response.
    The default is ``False``.

    Returns a ``dns.message.Message``.
    TN)rë   r£   r*   rì   rí   r2   r3   Ú
SOCK_DGRAMr5  r>  rÚ   Úmacr   rû   rm   )rÂ   rŸ   r   r;   rB   r    rš   rÃ   rÄ   r6  rC   r7  rÿ   rA   r™   Ú
begin_timer   r  r‰   r  r<  s                        r   ÚudprD  ƒ  sk  € ðp �9Š9‰;Œ;€DÝ 7Øˆt�V˜[¨$ñ!ô !Ñ€Rˆ�fõ  .¨gÑ6Ô6Ñ€Z�Øð 8Ý0:Ô0FÀtÑ0LÔ0Lˆˆàˆ~ˆ~ˆ~Ý˜�VÔ.°Ñ7Ô7ˆØ	ð ˆqÝ��D˜+ zÑ2Ô2Ð2Ý(ØØØØØØŒIØŒEØØØØñ
ô 
ÑˆˆMð  Ñ+ˆŒð ð 	 §¢¨qÑ!1Ô!1ð 	ÝÐØð)ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð, 	ðð s   Á6A"C%Ã%C)Ã,C)Úudp_sockÚtcp_sockc                 óª   — 	 t          | ||||||||d|	|¦  «        }|dfS # t          j        j        $ r t	          | ||||||||
¦	  «	        }|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.

    *q*, a ``dns.message.Message``, the query to send

    *where*, a ``str`` containing an IPv4 or IPv6 address,  where to send the message.

    *timeout*, a ``float`` or ``None``, the number of seconds to wait before the query
    times out.  If ``None``, the default, wait forever.

    *port*, an ``int``, the port send the message to.  The default is 53.

    *source*, a ``str`` containing an IPv4 or IPv6 address, specifying the source
    address.  The default is the wildcard address.

    *source_port*, an ``int``, the port from which to send the message. The default is
    0.

    *ignore_unexpected*, a ``bool``.  If ``True``, ignore responses from unexpected
    sources.

    *one_rr_per_rrset*, a ``bool``.  If ``True``, put each RR into its own RRset.

    *ignore_trailing*, a ``bool``.  If ``True``, ignore trailing junk at end of the
    received message.

    *udp_sock*, a ``socket.socket``, 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,
    it must be a nonblocking datagram socket, and the *source* and *source_port* are
    ignored for the UDP query.

    *tcp_sock*, a ``socket.socket``, or ``None``, the connected socket to use for the
    TCP query.  If ``None``, the default, a socket is created.  Note that if a socket is
    provided, it must be a nonblocking connected stream socket, and *where*, *source*
    and *source_port* are ignored for the TCP query.

    *ignore_errors*, a ``bool``.  If various format errors or response mismatches occur
    while listening for UDP, ignore them and keep listening for a valid response. The
    default is ``False``.

    Returns a (``dns.message.Message``, tcp) tuple where tcp is ``True`` if and only if
    TCP was used.
    TF)rD  r   r÷   r;  Útcp)rÂ   rŸ   r   r;   rB   r    rš   rÃ   rÄ   rE  rF  r7  r  s                r   Úudp_with_fallbackrI  ß  s¥   € ðr ÝØØØØØØØØØØØØñ
ô 
ˆð ˜%Ð Ð øÝŒ;Ô ð  ð  ð  ÝØØØØØØØØØñ

ô 

ˆð ˜$ÐÐÐÐð øøøs   ‚   /AÁAc                 ó@  — d}|dk    r•	 |                       |¦  «        }|dk    rt          d¦  «        ‚|t          |¦  «        z  }||z  }nL# t          t          j        f$ r t          | |¦  «         Y n$t          j        $ r t          | |¦  «         Y nw xY w|dk    °•|S )zßRead the specified number of bytes from sock.  Keep trying until we
    either get the desired amount, or we hit EOF.
    A Timeout exception will be raised if the operation is not completed
    by the expiration time.
    r   r   ÚEOF)	ÚrecvÚEOFErrorrð   r(  rw   ÚSSLWantReadErrorrŠ   ÚSSLWantWriteErrorrŒ   )rC   Úcountr   r‰   r4  s        r   Ú	_net_readrQ  7  sÍ   € ð 	€AØ
�!Š)ˆ)ð		1Ø—	’	˜%Ñ Ô ˆAØ�CŠxˆxÝ˜u‘o”oÐ%Ø•S˜‘V”V‰OˆEØ�‰FˆAˆAøÝ¥Ô!5Ð6ð 	1ð 	1ð 	1Ý˜t ZÑ0Ô0Ð0Ð0Ð0ÝÔ$ð 	1ð 	1ð 	1Ý˜t ZÑ0Ô0Ð0Ð0Ð0ð	1øøøð �!Š)ˆ)ð €Hs   ŠAA Á&BÁ4BÂBc                 ó   — d}t          |¦  «        }||k     rv	 ||                      ||d…         ¦  «        z  }nL# t          t          j        f$ r t          | |¦  «         Y n$t          j        $ r t          | |¦  «         Y nw xY w||k     °tdS dS )z‘Write the specified data to the socket.
    A Timeout exception will be raised if the operation is not completed
    by the expiration time.
    r   N)rð   r-  r(  rw   rO  rŒ   rN  rŠ   )rC   r.  r   ÚcurrentÚls        r   Ú
_net_writerU  L  s¹   € ð
 €GÝˆD‰	Œ	€AØ
�AŠ+ˆ+ð	1Ø�t—y’y  g h h¤Ñ0Ô0Ñ0ˆGˆGøÝ¥Ô!6Ð7ð 	1ð 	1ð 	1Ý˜t ZÑ0Ô0Ð0Ð0Ð0ÝÔ#ð 	1ð 	1ð 	1Ý˜t ZÑ0Ô0Ð0Ð0Ð0ð	1øøøð �AŠ+ˆ+ˆ+ˆ+ˆ+ˆ+s   ™ : º&BÁ"BÂBc                 ó$  — t          |t          j        j        ¦  «        r|                     d¬¦  «        }n&t          |¦  «                             dd¦  «        |z   }t          j        ¦   «         }t          | ||¦  «         t          |¦  «        |fS )a{  Send a DNS message to the specified TCP socket.

    *sock*, a ``socket``.

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

    *expiration*, a ``float`` or ``None``, the absolute time at which
    a timeout exception should be raised.  If ``None``, no timeout will
    occur.

    Returns an ``(int, float)`` tuple of bytes sent and the sent time.
    T)Úprepend_lengthr¸   Úbig)	rv   r   r÷   r2  rë   rð   Úto_bytesr   rU  )rC   r0  r   Útcpmsgr3  s        r   Úsend_tcpr[  \  s€   € õ$ �$�œÔ+Ñ,Ô,ð 5Ø—’¨T�Ñ2Ô2ˆˆõ
 �T‘”×#Ò# A uÑ-Ô-°Ñ4ˆÝ”	‘”€IÝˆt�V˜ZÑ(Ô(Ð(Ý�‰KŒK˜Ð#Ð#r   c                 óê   — t          | d|¦  «        }t          j        d|¦  «        \  }t          | ||¦  «        }t          j        ¦   «         }	t          j                             |||||¬¦  «        }
|
|	fS )aó  Read a DNS message from a TCP socket.

    *sock*, a ``socket``.

    *expiration*, a ``float`` or ``None``, the absolute time at which
    a timeout exception should be raised.  If ``None``, no timeout will
    occur.

    *one_rr_per_rrset*, a ``bool``.  If ``True``, put each RR into its own
    RRset.

    *keyring*, a ``dict``, the keyring to use for TSIG.

    *request_mac*, a ``bytes`` or ``None``, the MAC of the request (for TSIG).

    *ignore_trailing*, a ``bool``.  If ``True``, ignore trailing
    junk at end of the received message.

    Raises if the message is malformed, if network errors occur, of if
    there is a timeout.

    Returns a ``(dns.message.Message, float)`` tuple of the received message
    and the received time.
    r¸   ú!HrÙ   )rQ  ÚstructÚunpackr   r   r÷   rø   )rC   r   rÃ   rÚ   rÛ   rÄ   ÚldatarT  rÿ   r<  r  s              r   Úreceive_tcpra  z  s}   € õB �d˜A˜zÑ*Ô*€EÝŒ=˜˜uÑ%Ô%�D€QÝ�T˜1˜jÑ)Ô)€DÝ”I‘K”K€MÝŒ×ÒØØØØ)Ø'ð 	ñ 	ô 	€Að ˆ}ÐÐr   c                 óN  — |                       |¦  «        }|dk    rd S |t          j        t          j        t          j        fv r:t          | |¦  «         |                      t          j        t          j	        ¦  «        }|dk    r"t          |t          j        |¦  «        ¦  «        ‚d S rU   )Ú
connect_exÚerrnoÚEINPROGRESSÚEWOULDBLOCKÚEALREADYrŒ   Ú
getsockoptr3   Ú
SOL_SOCKETÚSO_ERRORÚOSErrorÚosÚstrerror)r‰   r@   r   Úerrs       r   r5   r5   ©  s�   € Ø
�,Š,�wÑ
Ô
€CØ
ˆa‚x€xØˆØ
�uÔ ¥%Ô"3µU´^ÐDÐDÐDÝ˜1˜jÑ)Ô)Ð)Ø�lŠl�6Ô,­f¬oÑ>Ô>ˆØ
ˆa‚x€xÝ�c�2œ; sÑ+Ô+Ñ,Ô,Ð,ð €xr   c	           	      óü  — |                       ¦   «         }	t          |¦  «        \  }
}|rt          j        |¦  «        }n6t	          ||||d¦  «        \  }}}|€J ‚t          |t          j        |¦  «        }|5 }|st          |||¦  «         t          ||	|¦  «         t          |||| j        | j        |¦  «        \  }}||
z
  |_        |                      |¦  «        st          ‚|cddd¦  «         S # 1 swxY w Y   	 J ‚)a¥  Return the response obtained after sending a query via TCP.

    *q*, a ``dns.message.Message``, the query to send

    *where*, a ``str`` containing an IPv4 or IPv6 address, where
    to send the message.

    *timeout*, a ``float`` or ``None``, the number of seconds to wait before the
    query times out.  If ``None``, the default, wait forever.

    *port*, an ``int``, the port send the message to.  The default is 53.

    *source*, a ``str`` containing an IPv4 or IPv6 address, specifying
    the source address.  The default is the wildcard address.

    *source_port*, an ``int``, the port from which to send the message.
    The default is 0.

    *one_rr_per_rrset*, a ``bool``.  If ``True``, put each RR into its own
    RRset.

    *ignore_trailing*, a ``bool``.  If ``True``, ignore trailing
    junk at end of the received message.

    *sock*, a ``socket.socket``, or ``None``, the connected 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 nonblocking connected stream
    socket, and *where*, *port*, *source* and *source_port* are ignored.

    Returns a ``dns.message.Message``.
    TN)rë   r*   rì   rí   r£   r2   r3   r4   r5   r[  ra  rÚ   rB  r   rû   rm   )rÂ   rŸ   r   r;   rB   r    rÃ   rÄ   rC   rÿ   rC  r   r  rA   r™   r‰   r  r<  s                     r   rH  rH  ´  sg  € ðV �9Š9‰;Œ;€DÝ-¨gÑ6Ô6Ñ€Z�Øð 9Ý0:Ô0FÀtÑ0LÔ0Lˆˆå$;Ø�4˜ ¨dñ%
ô %
Ñ!ˆˆ[˜&ð ˆ~ˆ~ˆ~Ý˜�VÔ/°Ñ8Ô8ˆØ	ð ˆqØð 	1å�Q˜ ZÑ0Ô0Ð0Ý��D˜*Ñ%Ô%Ð%Ý(ØˆzÐ+¨Q¬Y¸¼¸ñ
ô 
ÑˆˆMð  Ñ+ˆŒØ�}Š}˜QÑÔð 	ÝÐØðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð 	ðð s   Á6A-C0Ã0C4Ã7C4c                 ó¾   — 	 	 |                       ¦   «          d S # t          j        $ r t          | |¦  «         Y n$t          j        $ r t          | |¦  «         Y nw xY wŒ]r   )Údo_handshakerw   rN  rŠ   rO  rŒ   rˆ   s     r   Ú_tls_handshakerr  ú  s…   € ð.ð	.Ø�NŠNÑÔÐØˆFøÝÔ#ð 	.ð 	.ð 	.Ý˜q *Ñ-Ô-Ð-Ð-Ð-ÝÔ$ð 	.ð 	.ð 	.Ý˜q *Ñ-Ô-Ð-Ð-Ð-ð	.øøøð.s   ƒ ™AºAÁAÚcheck_hostnameÚalpnsc                 ó  — t           j                             | ¦  «        \  }}t          j        ||¬¦  «        }t          j        j        |_        ||_        | du rt          j	        |_
        |�|                     |¦  «         |S )aQ  Make an SSL context

    If *verify* is ``True``, the default, then certificate verification will occur using
    the standard CA roots.  If *verify* is ``False``, then certificate verification will
    be disabled.  If *verify* is a string which is a valid pathname, then if the
    pathname is a regular file, the CA roots will be taken from the file, otherwise if
    the pathname is a directory roots will be taken from the directory.

    If *check_hostname* is ``True``, the default, then the hostname of the server must
    be specified when connecting and the server's certificate must authorize the
    hostname.  If ``False``, then hostname checking is disabled.

    *aplns* is ``None`` or a list of TLS ALPN (Application Layer Protocol Negotiation)
    strings to use in negotiation.  For DNS-over-TLS, the right value is `["dot"]`.
    )ÚcafileÚcapathF)r   Ú	_tls_utilÚ#convert_verify_to_cafile_and_capathrw   Úcreate_default_contextÚ
TLSVersionÚTLSv1_2Úminimum_versionrs  Ú	CERT_NONEr  Úset_alpn_protocols)rÇ   rs  rt  rv  rw  r©   s         r   Úmake_ssl_contextr€    s|   € õ( ”]×FÒFÀvÑNÔN�N€FˆFÝÔ,°FÀ6ÐJÑJÔJ€Kõ #&¤.Ô"8€KÔØ!/€KÔØ�€€Ý"%¤-ˆÔØÐØ×&Ò& uÑ-Ô-Ð-ØÐr   c                 ó*   — t          || d udg¦  «        S )NÚdot)r€  )rª   rÇ   s     r   Ú_make_dot_ssl_contextrƒ  '  s   € õ ˜F O¸4Ð$?À%ÀÑIÔIÐIr   éU  c                 óJ  — |rt          | ||||||||¦	  «	        S |                      ¦   «         }t          |¦  «        \  }}t          ||||d¦  «        \  }}}|€J ‚|	€t	          ||
dudg¦  «        }	t          |t          j        |	|
|¬¦  «        5 }t          |||¦  «         t          ||¦  «         t          |||¦  «         t          |||| j        | j        |¦  «        \  }}||z
  |_        |                      |¦  «        st           ‚|cddd¦  «         S # 1 swxY w Y   	 J ‚)ak  Return the response obtained after sending a query via TLS.

    *q*, a ``dns.message.Message``, the query to send

    *where*, a ``str`` containing an IPv4 or IPv6 address,  where
    to send the message.

    *timeout*, a ``float`` or ``None``, the number of seconds to wait before the
    query times out.  If ``None``, the default, wait forever.

    *port*, an ``int``, the port send the message to.  The default is 853.

    *source*, a ``str`` containing an IPv4 or IPv6 address, specifying
    the source address.  The default is the wildcard address.

    *source_port*, an ``int``, the port from which to send the message.
    The default is 0.

    *one_rr_per_rrset*, a ``bool``.  If ``True``, put each RR into its own
    RRset.

    *ignore_trailing*, a ``bool``.  If ``True``, ignore trailing
    junk at end of the received message.

    *sock*, an ``ssl.SSLSocket``, 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 nonblocking connected
    SSL stream socket, and *where*, *port*, *source*, *source_port*,
    and *ssl_context* are ignored.

    *ssl_context*, an ``ssl.SSLContext``, the context to use when establishing
    a TLS connection. If ``None``, the default, creates one with the default
    configuration.

    *server_hostname*, a ``str`` containing the server's hostname.  The
    default is ``None``, which means that no hostname is known, and if an
    SSL context is created, hostname checking will be disabled.

    *verify*, a ``bool`` or ``str``.  If a ``True``, then TLS certificate verification
    of the server is done using the default CA bundle; if ``False``, then no
    verification is done; if a `str` then it specifies the path to a certificate file or
    directory which will be used for verification.

    Returns a ``dns.message.Message``.

    TNr‚  )r©   rª   rB   )rH  rë   r*   r£   r€  r±   r3   r4   r5   rr  r[  ra  rÚ   rB  r   rû   rm   )rÂ   rŸ   r   r;   rB   r    rÃ   rÄ   rC   r©   rª   rÇ   rÿ   rC  r   rA   r™   r‰   r  r<  s                       r   Útlsr†  -  s¼  € ðz ð 
õ ØØØØØØØØØñ

ô 

ð 
	
ð �9Š9‰;Œ;€DÝ-¨gÑ6Ô6Ñ€Z�Ý 7Øˆt�V˜[¨$ñ!ô !Ñ€Rˆ�fð ˆ>ˆ>ˆ>ØÐÝ& v¨ÀdÐ/JÈUÈGÑTÔTˆå	Ø
ÝÔØØ'Øð
ñ 
ô 
ð ð 
Ý��K Ñ,Ô,Ð,Ý�q˜*Ñ%Ô%Ð%Ý��D˜*Ñ%Ô%Ð%Ý(ØˆzÐ+¨Q¬Y¸¼¸ñ
ô 
ÑˆˆMð  Ñ+ˆŒØ�}Š}˜QÑÔð 	ÝÐØð!ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð$ 	ðð s   ÂA;DÄDÄDrá   c                 ó@  — t           j        j        st          d¦  «        ‚|�|
€|}
d| _        |                      ¦   «         }|rt          j        d¦  «        }|}n#t           j                             |	|
¬¦  «        }|}|5  |s| 	                    ||||¦  «        }t          |¦  «        \  }}|                     |¦  «        5 }|                     |d¦  «         |                     t          |¦  «        ¦  «        }ddd¦  «         n# 1 swxY w Y   t          j        ¦   «         }ddd¦  «         n# 1 swxY w Y   t           j                             || j        | j        ||¬¦  «        }t)          ||z
  d¦  «        |_        |                      |¦  «        st,          ‚|S )a“  Return the response obtained after sending a query via DNS-over-QUIC.

    *q*, a ``dns.message.Message``, the query to send.

    *where*, a ``str``, the nameserver IP address.

    *timeout*, a ``float`` or ``None``, the number of seconds to wait before the query
    times out. If ``None``, the default, wait forever.

    *port*, a ``int``, the port to send the query to. The default is 853.

    *source*, a ``str`` containing an IPv4 or IPv6 address, specifying the source
    address.  The default is the wildcard address.

    *source_port*, an ``int``, the port from which to send the message. The default is
    0.

    *one_rr_per_rrset*, a ``bool``. If ``True``, put each RR into its own RRset.

    *ignore_trailing*, a ``bool``. If ``True``, ignore trailing junk at end of the
    received message.

    *connection*, a ``dns.quic.SyncQuicConnection``.  If provided, the connection to use
    to send the query.

    *verify*, a ``bool`` or ``str``.  If a ``True``, then TLS certificate verification
    of the server is done using the default CA bundle; if ``False``, then no
    verification is done; if a `str` then it specifies the path to a certificate file or
    directory which will be used for verification.

    *hostname*, a ``str`` containing the server's hostname or ``None``.  The default is
    ``None``, which means that no hostname is known, and if an SSL context is created,
    hostname checking will be disabled.  This value is ignored if *url* is not
    ``None``.

    *server_hostname*, a ``str`` or ``None``.  This item is for backwards compatibility
    only, and has the same meaning as *hostname*.

    Returns a ``dns.message.Message``.
    zDNS-over-QUIC is not available.Nr   )r  r  TrÙ   r
   )r   ræ   r  rr   r  rë   rì   rí   r  r  r*   r  r-  r  r   r   r÷   rø   rÚ   rÛ   r  rû   rm   )rÂ   rŸ   r   r;   rB   r    rÃ   rÄ   rÌ   rÇ   rá   rª   rÿ   r   r"  r!  r#  r   r$  r%  r  s                        r   ræ   ræ   ™  s*  € õn Œ8Ôð 7ÝÐ5Ñ6Ô6Ð6àÐ" xÐ'7Ø"ˆà€A„DØ�9Š9‰;Œ;€Dð ð Ý5?Ô5KÈDÑ5QÔ5QˆØ#ˆˆå”(×*Ò*Ø¨Hð +ñ 
ô 
ˆð ˆà	ð 	ð 	Øð 	Ø(×0Ò0Ø�t˜V [ñô ˆNõ -¨WÑ5Ô5Ñˆ�
Ø×'Ò'¨Ñ0Ô0ð 	:°FØ�KŠK˜˜dÑ#Ô#Ð#Ø—>’>¥*¨ZÑ"8Ô"8Ñ9Ô9ˆDð	:ð 	:ð 	:ñ 	:ô 	:ð 	:ð 	:ð 	:ð 	:ð 	:ð 	:øøøð 	:ð 	:ð 	:ð 	:õ ”‘”ˆð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ 	Œ×ÒØØ”	Ø”MØ)Ø'ð 	ñ 	ô 	€Aõ �˜%‘ Ñ%Ô%€A„FØ�=Š=˜ÑÔð ÝÐØ€Hs7   Â AD1Ã9DÃ;D1ÄD	ÄD1ÄD	ÄD1Ä1D5Ä8D5c                   ó   — e Zd ZdZdZdZdZdS )ÚUDPModea  How should UDP be used in an IXFR from :py:func:`inbound_xfr()`?

    NEVER means "never use UDP; always use TCP"
    TRY_FIRST means "try to use UDP but fall back to TCP if needed"
    ONLY means "raise ``dns.xfr.UseTCP`` if trying UDP does not succeed"
    r   rŽ   r¸   N)rL   rM   rN   rk   ÚNEVERÚ	TRY_FIRSTÚONLYr_   r   r   r‰  r‰  ú  s)   € € € € € ðð ð €EØ€IØ€D€D€Dr   r‰  Útxn_managerr‰   Úserialc              #   ó  K  — |j         d         j        }|t          j        j        k    }|                      ¦   «         }|                     ¦   «         }	t          |t          j        ¦  «        o|j	        t          j
        k    }
|
rt          ||	d|¦  «         n6t          j        dt          |	¦  «        ¦  «        |	z   }t          |||¦  «         t          j                             | |||
¦  «        5 }d}d}d}|sÂt%          |¦  «        \  }}|�|�||k    r|}|
rt'          |d|¦  «        \  }}n9t)          |d|¦  «        }t          j        d|¦  «        \  }t)          |||¦  «        }t          j                             ||j        |j        d|||
 |¬¦  «        }|                     |¦  «        }|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   Nr]  Fr:  r¸   T)rÚ   rÛ   ÚxfrÚoriginÚtsig_ctxÚmultirÃ   zmissing TSIG)ÚquestionÚrdtyper   Ú	rdatatypeÚIXFRÚfrom_wire_originrë   rv   r3   r¤   rA  r/  r^  Úpackrð   rU  r�  ÚInboundr*   r*  rQ  r_  r÷   rø   rÚ   rB  Úprocess_messager’  Úhad_tsigr   Ú	FormError)r�  r‰   r8  rŽ  r   r   r•  Úis_ixfrr‘  rÿ   Úis_udprZ  ÚinboundÚdoner’  r  r>   ÚmexpirationÚrwirer`  rT  s                        r   Ú_inbound_xfrr¤    sY  è è € ð Œ^˜AÔÔ%€FØ�œÔ*Ò*€GØ×)Ò)Ñ+Ô+€FØ�=Š=‰?Œ?€DÝ˜�6œ=Ñ)Ô)ÐI¨a¬f½Ô8IÒ.I€FØð *Ý�!�T˜4 Ñ,Ô,Ð,Ð,å”˜T¥3 t¡9¤9Ñ-Ô-°Ñ4ˆÝ�1�f˜jÑ)Ô)Ð)Ý	Œ�Š˜ f¨f°fÑ	=Ô	=ð :ÀØˆØˆØ(,ˆØð 	"Ý-¨gÑ6Ô6ÑˆQ�ØÐ"ØÐ&¨;¸Ò+CÐ+Cà(�Øð 5Ý& q¨%°Ñ=Ô=‘
�˜˜å! ! Q¨Ñ4Ô4�Ý”} T¨5Ñ1Ô1‘�Ý! ! Q¨Ñ4Ô4�Ý”×%Ò%ØØœØ!œIØØØ!Ø!�zØ!(ð &ñ 	ô 	ˆAð ×*Ò*¨1Ñ-Ô-ˆDØˆGˆGˆGØ”zˆHð1 ð 	"ð2 Œ=ð 	:˜Q˜]°1´:˜]Ý”-×)Ò)¨.Ñ9Ô9Ð9ð=:ð :ð :ñ :ô :ð :ð :ð :ð :ð :ð :ð :øøøð :ð :ð :ð :ð :ð :s   Ã.C:G5Ç5G9Ç<G9Úzoner•  ÚrdclassÚkeynameÚ
relativizer)   Úuse_udpÚkeyalgorithmc           	   #   ó   K  —  G d„ dt           j        j        ¦  «        }t          |t          ¦  «        rt           j                             |¦  «        }t           j        j         	                    |¦  «        }t           j
                             |||¦  «        }|t           j        j        k    rx|                     |j        |t           j        j        t           j        j        d¬¦  «        }t           j                             ddd|› d�¦  «        }|                     |d	¦  «         |�|                     |||¬¦  «         t+          | ||
|d¦  «        \  }}}
|€J ‚t-          |	¦  «        \  }} |||¦  «        }|r$|t           j        j        k    rt/          d¦  «        ‚|rt0          j        nt0          j        }t7          |||
¦  «        5 }t9          |||¦  «         t;          ||||||¦  «        E d
{V —† d
d
d
¦  «         d
S # 1 swxY w Y   d
S )a³  Return a generator for the responses to a zone transfer.

    *where*, a ``str`` containing an IPv4 or IPv6 address,  where
    to send the message.

    *zone*, a ``dns.name.Name`` or ``str``, the name of the zone to transfer.

    *rdtype*, an ``int`` or ``str``, the type of zone transfer.  The
    default is ``dns.rdatatype.AXFR``.  ``dns.rdatatype.IXFR`` can be
    used to do an incremental transfer instead.

    *rdclass*, an ``int`` or ``str``, the class of the zone transfer.
    The default is ``dns.rdataclass.IN``.

    *timeout*, a ``float``, the number of seconds to wait for each
    response message.  If None, the default, wait forever.

    *port*, an ``int``, the port send the message to.  The default is 53.

    *keyring*, a ``dict``, the keyring to use for TSIG.

    *keyname*, a ``dns.name.Name`` or ``str``, the name of the TSIG
    key to use.

    *relativize*, a ``bool``.  If ``True``, all names in the zone will be
    relativized to the zone origin.  It is essential that the
    relativize setting matches the one specified to
    ``dns.zone.from_xfr()`` if using this generator to make a zone.

    *lifetime*, a ``float``, the total number of seconds to spend
    doing the transfer.  If ``None``, the default, then there is no
    limit on the time the transfer may take.

    *source*, a ``str`` containing an IPv4 or IPv6 address, specifying
    the source address.  The default is the wildcard address.

    *source_port*, an ``int``, the port from which to send the message.
    The default is 0.

    *serial*, an ``int``, the SOA serial number to use as the base for
    an IXFR diff sequence (only meaningful if *rdtype* is
    ``dns.rdatatype.IXFR``).

    *use_udp*, a ``bool``.  If ``True``, use UDP (only meaningful for IXFR).

    *keyalgorithm*, a ``dns.name.Name`` or ``str``, the TSIG algorithm to use.

    Raises on errors, and so does the generator.

    Returns a generator of ``dns.message.Message`` objects.
    c                   óf   — e Zd Zd„ Zd„ Zdej        j        fd„Zd„ Z	d
de
dej        j        fd„Zd	S )ú$xfr.<locals>.DummyTransactionManagerc                 ó@   — |||rt           j        j        n|f| _        d S r   )r   r­   ÚemptyÚinfo)r"   r‘  r¨  s      r   r   z-xfr.<locals>.DummyTransactionManager.__init__�  s!   € Ø ¸zÐ-U­S¬X¬^¨^ÈvÐVˆDŒIˆIˆIr   c                 ó   — | j         S r   )r°  ©r"   s    r   Úorigin_informationz7xfr.<locals>.DummyTransactionManager.origin_information„  s
   € Ø”9Ðr   rd   c                 ó   — t           ‚r   rG   r²  s    r   Ú	get_classz.xfr.<locals>.DummyTransactionManager.get_class‡  ra   r   c                 ó   — t           ‚r   rG   r²  s    r   Úreaderz+xfr.<locals>.DummyTransactionManager.readerŠ  ra   r   FÚreplacementc                 ój   —  G d„ d¦  «        }t          t          j        j         |¦   «         ¦  «        S )Nc                   ó   — e Zd Zd„ Zd„ ZdS )úExfr.<locals>.DummyTransactionManager.writer.<locals>.DummyTransactionc                 ó   — d S r   r_   )r"   rZ   Úkws      r   ÚnopzIxfr.<locals>.DummyTransactionManager.writer.<locals>.DummyTransaction.nop�  s   € Ø�Dr   c                 ó   — | j         S r   )r¾  )r"   r>   s     r   Ú__getattr__zQxfr.<locals>.DummyTransactionManager.writer.<locals>.DummyTransaction.__getattr__’  s	   € Øœ8�Or   N)rL   rM   rN   r¾  rÀ  r_   r   r   ÚDummyTransactionr»  Ž  s2   € € € € € ðð ð ð$ð $ð $ð $ð $r   rÁ  )r   r   ÚtransactionÚTransaction)r"   r¸  rÁ  s      r   Úwriterz+xfr.<locals>.DummyTransactionManager.writer�  sK   € ð$ð $ð $ð $ð $ñ $ô $ð $õ �œÔ3Ð5EÐ5EÑ5GÔ5GÑHÔHÐHr   N)F)rL   rM   rN   r   r³  r   Ú
rdataclassÚ
RdataClassrµ  r·  ÚboolrÂ  rÃ  rÄ  r_   r   r   ÚDummyTransactionManagerr­  €  s™   € € € € € ð	Wð 	Wð 	Wð	ð 	ð 	ð	&˜sœ~Ô8ð 	&ð 	&ð 	&ð 	&ð	&ð 	&ð 	&ð	Ið 	I dð 	I°s´Ô7Rð 	Ið 	Ið 	Ið 	Ið 	Ið 	Ir   rÈ  T)ÚcreateÚINÚSOAz. . z 0 0 0 0r   N)Ú	algorithmzcannot do a UDP AXFR)r   rÂ  ÚTransactionManagerrv   rï   r­   Ú	from_textr–  Ú	RdataTypeÚmaker÷   Ú
make_queryr—  Ú
find_rrsetÚ	authorityrÅ  rÊ  rË  ÚrdataÚaddÚuse_tsigr£   r*   r�   r3   rA  r4   r2   r5   r¤  )rŸ   r¥  r•  r¦  r   r;   rÚ   r§  r¨  r)   rB   r    rŽ  r©  rª  rÈ  rÂ   ÚrrsetÚsoarA   r™   r>   r   ÚtmÚ	sock_typer‰   s                             r   r�  r�  ;  s|  è è € ðJIð Ið Ið Ið I¥#¤/Ô"Dñ Iô Ið Iõ. �$�ÑÔð (ÝŒx×!Ò! $Ñ'Ô'ˆÝŒ]Ô$×)Ò)¨&Ñ1Ô1€FÝŒ×Ò˜t V¨WÑ5Ô5€AØ•”Ô#Ò#Ð#Ø—’ØŒK˜�sœ~Ô0µ#´-Ô2CÈDð ñ 
ô 
ˆõ Œi×!Ò! $¨Ð/F°fÐ/FÐ/FÐ/FÑGÔGˆØ�	Š	�#�qÑÔÐØÐØ	�
Š
�7˜G¨|ˆ
Ñ<Ô<Ð<Ý 7Øˆt�V˜[¨$ñ!ô !Ñ€Rˆ�fð ˆ>ˆ>ˆ>Ý$ XÑ.Ô.�O€Qˆ
Ø	 Ð	   zÑ	2Ô	2€BØð 1�6�Sœ]Ô/Ò/Ð/ÝÐ/Ñ0Ô0Ð0Ø%,ÐD•Ô!Ð!µ&Ô2D€IÝ	�R˜ FÑ	+Ô	+ð G¨qÝ��K Ñ,Ô,Ð,Ý  A q¨&°'¸:ÑFÔFÐFÐFÐFÐFÐFÐFÐFðGð Gð Gñ Gô Gð Gð Gð Gð Gð Gð Gð Gøøøð Gð Gð Gð Gð Gð Gs   Ç
,HÈHÈ
HÚudp_modec	           	      ó8  — |€#t           j                             |¦  «        \  }}	nt           j                             |¦  «        }	t	          | |||d¦  «        \  }
}}|
€J ‚t          |¦  «        \  }}|j        d         j        t           j        j	        k    r¦|t          j        k    r–t          |
t          j        |¦  «        5 }t          |||¦  «         	 t!          ||||	||¦  «        D ]}Œ	 ddd¦  «         dS # t           j        j        $ r |t          j        k    r‚ Y nw xY w	 ddd¦  «         n# 1 swxY w Y   t          |
t          j        |¦  «        5 }t          |||¦  «         t!          ||||	||¦  «        D ]}Œ	 ddd¦  «         dS # 1 swxY w Y   dS )a±  Conduct an inbound transfer and apply it via a transaction from the
    txn_manager.

    *where*, a ``str`` containing an IPv4 or IPv6 address,  where
    to send the message.

    *txn_manager*, a ``dns.transaction.TransactionManager``, the txn_manager
    for this transfer (typically a ``dns.zone.Zone``).

    *query*, the query to send.  If not supplied, a default query is
    constructed using information from the *txn_manager*.

    *port*, an ``int``, the port send the message to.  The default is 53.

    *timeout*, a ``float``, the number of seconds to wait for each
    response message.  If None, the default, wait forever.

    *lifetime*, a ``float``, the total number of seconds to spend
    doing the transfer.  If ``None``, the default, then there is no
    limit on the time the transfer may take.

    *source*, a ``str`` containing an IPv4 or IPv6 address, specifying
    the source address.  The default is the wildcard address.

    *source_port*, an ``int``, the port from which to send the message.
    The default is 0.

    *udp_mode*, a ``dns.query.UDPMode``, determines how UDP is used
    for IXFRs.  The default is ``dns.query.UDPMode.NEVER``, i.e. only use
    TCP.  Other possibilities are ``dns.query.UDPMode.TRY_FIRST``, which
    means "try UDP but fallback to TCP if needed", and
    ``dns.query.UDPMode.ONLY``, which means "try UDP and raise
    ``dns.xfr.UseTCP`` if it does not succeed.

    Raises on errors.
    NTr   )r   r�  rÑ  Úextract_serial_from_queryr£   r*   r”  r•  r–  r—  r‰  rŠ  r2   r3   rA  r5   r¤  ÚUseTCPrŒ  r4   )rŸ   r�  r8  r;   r   r)   rB   r    rÛ  rŽ  rA   r™   r>   r   r‰   s                  r   Úinbound_xfrrß  ±  s`  € ð^ €}Ýœ'×,Ò,¨[Ñ9Ô9‰ˆ��å”×2Ò2°5Ñ9Ô9ˆå 7Øˆt�V˜[¨$ñ!ô !Ñ€Rˆ�fð ˆ>ˆ>ˆ>Ý$ XÑ.Ô.�O€Qˆ
Ø„~�aÔÔ¥3¤=Ô#5Ò5Ð5¸(ÅgÄmÒ:SÐ:SÝ˜�VÔ.°Ñ7Ô7ð 
	¸1Ý�Q˜ ZÑ0Ô0Ð0ðÝ%Ø  E¨6°7¸Jñô ð ð �Að Øð
	ð 
	ð 
	ñ 
	ô 
	ð 
	ð 
	ð 
	øõ ”7”>ð ð ð Ø�wœ|Ò+Ð+Øð ,Ð+ðøøøØ+ð
	ð 
	ð 
	ñ 
	ô 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	øøøð 
	ð 
	ð 
	ð 
	õ 
�R�Ô+¨VÑ	4Ô	4ð ¸Ý��K Ñ,Ô,Ð,Ý˜k¨1¨e°V¸WÀjÑQÔQð 	ð 	ˆAØð	ðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð sB   ÃD2ÃC:Ã:%D"ÄD2Ä!D"Ä"D2Ä2D6Ä9D6Å)FÆFÆF)Tr   rK   )	NrÁ   Nr   FFTTN)
NNFFNr   FFFN)
Nr?  Nr   FFFFNF)
Nr?  Nr   FFFNNF)NFNr   F)Nr?  Nr   FFN)TTN)
Nr„  Nr   FFNNNT)
Nr„  Nr   FFNTNN)‡rk   rñ   rì   Úenumrd  rl  rã   rz   r3   r^  r   Úurllib.parserÞ   Útypingr   r   r   r   r   r   Údns._featuresr   Údns._tls_utilÚdns.exceptionÚdns.inetÚdns.messageÚdns.nameÚdns.quicÚ	dns.rdataÚdns.rdataclassÚdns.rdatatypeÚdns.transactionÚdns.tsigÚdns.xfrrw   ÚImportErrorÚdns._no_sslÚ_no_sslr   r   Ú	_featuresÚhaveÚ_have_httpxÚhttpcore._backends.syncr8   ré   ÚNetworkBackendÚ_CoreNetworkBackendÚ	_backendsÚsyncÚ
SyncStreamr6   r   ÚHTTPTransportrR   râ   ÚAddressFamilyr  Ú
SocketKindrf   rg   Ú__annotations__r   ÚDNSExceptionri   r�  rm   ro   rr   r�  ÚTransferErrorr*   r…   rŠ   rŒ   r•   r›   r£   r2   Ú
SSLContextr­   r®   rï   rx   r±   r³   rµ   ÚIntEnumr·   r\   rº   r÷   r2  ÚfloatrÇ  r  ræ   ÚHeadersÚbytesr  r  rç   rè   r*  r/  r5  ÚtsigÚKeyr>  rD  rI  rQ  rU  r[  ra  r5   rH  rr  rå   r€  rƒ  r†  r‰  rÂ  rÍ  r¤  r–  ÚAXFRrÅ  rÊ  Údefault_algorithmrÏ  rÆ  rŠ  rß  r_   r   r   ú<module>r     sc  ðð$ Ð Ð à €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =à Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€ðØ€J€J€J€JøØð ð ð ØÐÐÐÐÐÐÐðøøøðð ð ð2ð 2ð 2ð Œm× Ò  Ñ'Ô'€Øð `&Ø"Ð"Ð"Ð"Ø€L€L€Là"Ô1ÐØÔ(Ô-Ô8€Oð4&ð 4&ð 4&ð 4&ð 4&Ð-ñ 4&ô 4&ð 4&ðlð ð ð ð ˜Ô,ñ ô ð ð ð,&ð &ð &ð &ð &ñ &ô &ð &ð  €ð*ØÔ˜sÑ"ð*à
Ô
ð*ð ð*ð „]ð	*ð *ð *ð *ð ð �ØÔ˜CÑ Ô!2°CÐ8¸&¼-ÐGôð ð ñ ð
Hð Hð Hð Hð H�s”}Ô1ñ Hô Hð HðGð Gð Gð Gð G�#”-Ô)ñ Gô Gð Gðð ð ð ð ˆCŒMÔ&ñ ô ð ð
ð ð ð ð ˆCŒMÔ&ñ ô ð ð ”Ô%€ð$ð $ð $ð(ð (ð (ð80ð 0ð 0ð0ð 0ð 0ð	)ð 	)ð 	)ðð ð ð" =Að)%ð )%ð )%ð )%ð^ ðð ØÔ˜sÑ"ðà
Ô
ðð �$‰Jðð „]ð	ð ð ð ðJ 37Øð'ð 'ØÔ˜sÑ"ð'à
Ô
ð'ð ”ð'ð ”X”] SÑ(¨4Ñ/ð	'ð
 �$‰Jð'ð 	„]ð'ð 'ð 'ð 'ðV
-ð 
-ð 
-ðØÐ.Ô/ðàðð ð ð ðð ð ð ð �$”,ñ ô ð ð& !ØØØØ"Ø!ØØØØ$(Ø*.Ø26ØÔ"Ø +Ô 3ð!Lð LØ
„{ÔðLàðLð �T‰\ðLð ð	Lð
 �$‰JðLð ðLð ðLð ðLð �4‰ZðLð ðLð ðLð ˜T‘zðLð �3‰J˜œÑ'ðLð Ð.Ô/ðLð ðLð  ð!Lð" 	„[Ôð#Lð Lð Lð Lð^˜#œ(Ô*ð °%ð ¸Eð ð ð ð ðO˜3œ8Ô+ð O°3ð O¸eð OÈð Oð Oð Oð Oð* !ØØØØ"Ø!Ø*.ØØ59ð:ð :Ø
„{Ôð:àð:ð 
ð:ð �T‰\ð	:ð
 ð:ð �$‰Jð:ð ð:ð ð:ð ð:ð �3‰J˜œÑ'ð:ð ð:ð ”Ô+¨dÑ2ð:ð 	„[Ôð:ð :ð :ð :ðz	1ð 	1ð 	1ð1ð 1ð 1ð&  $ð	ð Ø
ðà
Œ+Ô
 Ñ
%ðð ðð ˜‘ð	ð
 ˆ3�ˆ:Ôðð ð ð ð> #Ø#Ø#Ø"Ø8<Ø #Ø!Ø %ØØ(,ðg4ð g4Ø
ðg4à�t‘ðg4ð ˜‘ðg4ð ð	g4ð
 ðg4ð �#”(”- ¤¤Ð-Ô.°Ñ5ðg4ð ˜‘ðg4ð ðg4ð ðg4ð ðg4ð Œ;Ô Ñ%ðg4ð 	ðg4ð g4ð g4ð g4ðZ !ØØØØ#Ø"Ø!Ø %ØØðYð YØ
„{ÔðYàðYð �T‰\ðYð ð	Yð
 �$‰JðYð ðYð ðYð ðYð ðYð ðYð �‰*ðYð ðYð 	„[ÔðYð Yð Yð Yð~ !ØØØØ#Ø"Ø!ØØØðU ð U Ø
„{ÔðU àðU ð �T‰\ðU ð ð	U ð
 �$‰JðU ð ðU ð ðU ð ðU ð ðU ð �D‰jðU ð �D‰jðU ð ðU ð ˆ3Œ;Ô Ð$Ô%ðU ð U ð U ð U ðpð ð ð*1ð 1ð 1ð&  $ð$ð $Ø
ð$à
Œ+Ô
 Ñ
%ð$ð ˜‘ð$ð ˆ3�ˆ:Ôð	$ð $ð $ð $ð@  $Ø"Ø8<Ø #Ø!ð,ð ,Ø
ð,à˜‘ð,ð ð,ð �#”(”- ¤¤Ð-Ô.°Ñ5ð	,ð
 ˜‘ð,ð ð,ð ˆ3Œ;Ô Ð%Ô&ð,ð ,ð ,ð ,ð^-ð -ð -ð !ØØØØ"Ø!ØðCð CØ
„{ÔðCàðCð �T‰\ðCð ð	Cð
 �$‰JðCð ðCð ðCð ðCð �‰*ðCð 	„[ÔðCð Cð Cð CðL.ð .ð .ð ØØ"ðð Ø�3‰Jðàðð �Œ9�tÑðð 	„^ð	ð ð ð ðDJØ˜4‘ZðJØ)-°©ðJà„^ðJð Jð Jð Jð !ØØØØ"Ø!Ø!%Ø)-Ø"&Øðið iØ
„{Ôðiàðið �T‰\ðið ð	ið
 �$‰Jðið ðið ðið ðið Œ-˜$Ñ
ðið ” $Ñ&ðið ˜4‘Zðið �3‰Jðið 	„[Ôðið ið ið ið^ !ØØØØ"Ø!Ø59ØØØ"&ð^ð ^Ø
„{Ôð^àð^ð �T‰\ð^ð ð	^ð
 �$‰Jð^ð ð^ð ð^ð ð^ð ”Ô+¨dÑ2ð^ð �3‰Jð^ð �D‰jð^ð ˜4‘Zð^ð 	„[Ôð^ð ^ð ^ð ^ðB
ð 
ð 
ð 
ð 
ˆdŒlñ 
ô 
ð 
ð1:Ø”Ô3ð1:à„}�s”}Ñ$ð1:ð Œ;Ôð1:ð �$‰Jð	1:ð
 �T‰\ð1:ð ˜‘ð1:ð 	ð1:ð 1:ð 1:ð 1:ðn -0¬MÔ,>Ø/2¬~Ô/@Ø ØØ8<Ø*.ØØ!ØØØØØ(+¬Ô(BðsGð sGØðsGà
Œ(Œ-˜#Ñ
ðsGð ŒMÔ# cÑ)ðsGð Œ^Ô&¨Ñ,ð	sGð
 �T‰\ðsGð ðsGð �#”(”- ¤¤Ð-Ô.°Ñ5ðsGð ŒXŒ]˜SÑ  4Ñ'ðsGð ðsGð �d‰lðsGð �$‰JðsGð ðsGð ðsGð ðsGð ”(”- #Ñ%ðsGð  	ð!sGð sGð sGð sGðr )-ØØ Ø!ØØØœðIð IØðIà”Ô3ðIð Œ;Ô Ñ%ðIð ð	Ið
 �T‰\ðIð �d‰lðIð �$‰JðIð ðIð ðIð 
ðIð Ið Ið Ið Ið Is   Á5A: Á:BÂB