
    *pj
              	       P   S r SSKrSSKrSSKJr  S\\\\\4   \\\\4   -  \\\4   -  S-  S\\   S-  4S jr	 SS\\   S	\S-  SS4S
 jjr
S\\\4   \\\\\4   -  S\\R                  \4   \\R                  \\\4   -  4S jrS\\   S\\\4   \\\\\4   -  SS4S jrg)z'Utility functions for aiohappyeyeballs.    N   )AddrInfoTypeaddrreturnc                    U c  gU S   nU S   nSU;   nU(       a:  SnSn[        U 5      nUS:  a  U S   nUS:  a  U S   nXXE4n [        R                  nOX4n [        R                  nU[        R                  [        R
                  SU 4/$ )	z7Convert an address tuple to a list of addr_info tuples.Nr   r   :          )lensocketAF_INET6AF_INETSOCK_STREAMIPPROTO_TCP)r   hostportis_ipv6flowinfoscopeidaddr_lenfamilys           R/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/aiohappyeyeballs/utils.pyaddr_to_addr_infosr   	   s     |7D7DTkGt9q=1gGq=AwHH.|V''););RFGG    
addr_infos
interleavec                     Uc  Sn0 n/ nU  H7  nUS   nUR                  US5      nXa:  a  UR                  U5        US-   X%'   M9     X0SS& g)z
Pop addr_info from the list of addr_infos by family up to interleave times.

The interleave parameter is used to know how many addr_infos for
each family should be popped of the top of the list.
Nr   r   )getappend)r   r   seenkept	addr_infor   counts          r   pop_addr_infos_interleaver&   "   sb     
D!D	1#KK	"qy   qMr   c                 B    [         R                  " U S   5      /U SS Q7$ )z+Convert an address tuple to an IPv4Address.r   r   N)	ipaddress
ip_address)r   s    r   _addr_tuple_to_ip_addressr*   8   s'       a)5DH55r   c                 8   U  Vs/ s H  o"S   U:w  d  M  UPM     nn[        U5      [        U 5      :X  a1  [        U5      nU  Vs/ s H  n[        US   5      U:w  d  M  UPM     nn[        U5      [        U 5      :X  a  [        SU S35      eX0SS& gs  snf s  snf )zu
Remove an address from the list of addr_infos.

The addr value is typically the return value of
sock.getpeername().
zAddress z not found in addr_infosN)r   r*   
ValueError)r   r   air#   
match_addrs        r   remove_addr_infosr0   ?   s     $62"v~BD6
4yC
O#.t4
#
#2'@B'HJ'VB 	 
 4yC
O#8D6)ABCCqM 7
s   BBBB)N)__doc__r(   r   typesr   tuplestrintlistr   r&   IPv4AddressIPv6Addressr*   r0    r   r   <module>r:      s(   -   H
S#s"
#eCcM&:
:U38_
Lt
SH	,$H4 >B\"03d
	,6
S/E#sC"45
56
9  #%&y/D/Dc3PS/S)TT6\"
S/E#sC"45
5 
r   