Ë
    ÓŠð^Ÿ  ã            
       óä  — d Z ddlZddlZddlmZ ej                  dv r	ddl	m
ZmZ nddlm
ZmZ ddlmZmZmZ ddlmZmZmZmZmZmZmZ ddl m!Z! d	Z"d
Z#dZ$dZ%eZ&dZ'dZ(dZ)de"z  dz
  Z*e"e#z  Z+de#z  dz
  Z, e- e.de"dz   «      D � cg c]  } | e*de"| z
  z  dz
  z  f‘Œ c} «      Z/ e- e.de"dz   «      D � cg c]  } e*de"| z
  z  dz
  z  | f‘Œ c} «      Z0 e- e.de"dz   «      D � cg c]  } | de"| z
  z  dz
  f‘Œ c} «      Z1 e- e.de"dz   «      D � cg c]  } de"| z
  z  dz
  | f‘Œ c} «      Z2d"d„Z3d"d„Z4d#d„Z5d„ Z6d„ Z7d„ Z8d„ Zd„ Z9d„ Z:d„ Zd„ Zd#d„Zd„ Zd„ Zd „ Zd!„ Z;yc c} w c c} w c c} w c c} w )$zIPv4 address logic.é    N)Ú	inet_aton)Úwin32Úcygwin)Ú	inet_ptonÚAF_INET)ÚAddrFormatErrorÚZEROFILLÚ	INET_PTON)Úvalid_wordsÚ
valid_bitsÚbits_to_intÚint_to_bitsÚ	valid_binÚ
int_to_binÚ
bin_to_int)Ú	_str_typeé    é   ú%dú.ÚIPv4é   é
   é   é   c           	      ó.  — | dk(  rt        d«      ‚d}|t        z  r:dj                  | j                  d«      D �cg c]  }dt	        |«      z  ‘Œ c}«      } 	 |t
        z  rt        t        | «       |S t        | «       	 |S c c}w # t        $ r d}Y |S w xY w)aP  
    :param addr: An IPv4 address in presentation (string) format.

    :param flags: decides which rules are applied to the interpretation of the
        addr value. Supported constants are INET_PTON and ZEROFILL. See the
        netaddr.core docs for details.

    :return: ``True`` if IPv4 address is valid, ``False`` otherwise.
    Ú z Empty strings are not supported!Tr   r   F)
r   r	   ÚjoinÚsplitÚintr
   Ú
_inet_ptonr   Ú
_inet_atonÚ	Exception)ÚaddrÚflagsÚvalidityÚis       ú7/usr/lib/python3/dist-packages/netaddr/strategy/ipv4.pyÚ	valid_strr)   Q   s�   € ð ˆr‚zÜÐ@ÓAÐAà€HàŒxÒØ�x‰x°·
±
¸3³Ö@¨1˜¤ A£›Ò@ÓAˆðØ”9ÒÜ”w Ô%ð €Oô	 �tÕð €Oùò Aøô ò Ø‰à€Oðús   ºB ÁB Á2B ÂBÂBc           	      ón  — |t         z  r:dj                  | j                  d«      D �cg c]  }dt        |«      z  ‘Œ c}«      } 	 |t        z  r't        j                  dt        t        | «      «      d   S t        j                  dt        | «      «      d   S c c}w # t        $ r t        | ›d�«      ‚w xY w)aP  
    :param addr: An IPv4 dotted decimal address in string form.

    :param flags: decides which rules are applied to the interpretation of the
        addr value. Supported constants are INET_PTON and ZEROFILL. See the
        netaddr.core docs for details.

    :return: The equivalent unsigned integer for a given IPv4 address.
    r   r   ú>Ir   z$ is not a valid IPv4 address string!)r	   r   r   r    r
   Ú_structÚunpackr!   r   r"   r#   r   )r$   r%   r'   s      r(   Ú
str_to_intr.   n   s¢   € ð ŒxÒØ�x‰x°·
±
¸3³Ö@¨1˜¤ A£›Ò@ÓAˆðRØ”9ÒÜ—>‘> $¬
´7¸DÓ(AÓBÀ1ÑEÐEä—>‘> $¬
°4Ó(8Ó9¸!Ñ<Ð<ùò Aøô ò RÜÊ$ÐPÓQÐQðRús   ¨BÁ/B Á5!B ÂB4c                 óx   — d| cxk  r	t         k  rn nd| dz	  | dz	  dz  | dz	  dz  | dz  fz  S t        | ›d�«      ‚)zÝ
    :param int_val: An unsigned integer.

    :param dialect: (unused) Any value passed in is ignored.

    :return: The IPv4 presentation (string) format address equivalent to the
        unsigned integer provided.
    r   z%d.%d.%d.%dé   é   éÿ   r   z( is not a valid 32-bit unsigned integer!©Úmax_intÚ
ValueError)Úint_valÚdialects     r(   Ú
int_to_strr8   „   sY   € ð 	ˆGÔ”wÕØØ�r‰MØ˜‰]˜dÑ"Ø˜‰\˜TÑ!Ø�d‰Nð	 ñ ð 	ô ÊÐRÓSÐSó    c                 óª   — t        | «      D �cg c]  }d|z  ‘Œ	 }}|j                  «        |j                  g d¢«       dj                  |«      S c c}w )z“
    :param int_val: An unsigned integer.

    :return: The reverse DNS lookup for an IPv4 address in network byte
        order integer form.
    r   )zin-addrÚarpar   r   )Úint_to_wordsÚreverseÚextendr   )r6   r'   Úwordss      r(   Úint_to_arpar@   —   sI   € ô  ,¨GÓ4Ö5˜!ˆT�A‹XÐ5€EÐ5Ø	‡M�M„OØ	‡L�LÒ(Ô)Ø�8‰8�E‹?Ðùò 6s   ŽAc                 ó.   — t        j                  d| «      S )z•
    :param int_val: the integer to be packed.

    :return: a packed string that is equivalent to value represented by an
    unsigned integer.
    r+   )r,   Úpack©r6   s    r(   Úint_to_packedrD   ¤   s   € ô �<‰<˜˜gÓ&Ð&r9   c                 ó4   — t        j                  d| «      d   S )a  
    :param packed_int: a packed string containing an unsigned integer.
        It is assumed that string is packed in network byte order.

    :return: An unsigned integer equivalent to value of network address
        represented by packed binary string.
    r+   r   )r,   r-   )Ú
packed_ints    r(   Úpacked_to_intrG   ®   s   € ô �>‰>˜$ 
Ó+¨AÑ.Ð.r9   c                 ó,   — t        | t        t        «      S ©N)Ú_valid_wordsÚ	word_sizeÚ	num_words©r?   s    r(   r   r   ¹   s   € Ü˜œy¬)Ó4Ð4r9   c                 óp   — d| cxk  r	t         k  sn t        | ›d�«      ‚| dz	  | dz	  dz  | dz	  dz  | dz  fS )z¥
    :param int_val: An unsigned integer.

    :return: An integer word (octet) sequence that is equivalent to value
        represented by an unsigned integer.
    r   z< is not a valid integer value supported bythis address type!r0   r1   r2   r   r3   rC   s    r(   r<   r<   ½   sV   € ð �Ô"œ7Ô"ÜÚ18ð;ó <ð 	<à˜‰]Ø˜‰]˜dÑ"Ø˜‰]˜dÑ"Ø�t‰^ðð r9   c                 óŽ   — t        | «      st        | ›d�«      ‚t        j                  dt        j                  dg| ¢­Ž «      d   S )z®
    :param words: A list or tuple containing integer octets.

    :return: An unsigned integer that is equivalent to value represented
        by word (octet) sequence.
    z/ is not a valid octet list for an IPv4 address!r+   Ú4Br   )r   r5   r,   r-   rB   rM   s    r(   Úwords_to_intrQ   Í   s?   € ô �uÔÜÒPUÐWÓXÐXÜ�>‰>˜$¤§¡¨TÐ :°EÒ :Ó;¸AÑ>Ð>r9   c                 ó,   — t        | t        t        «      S rI   )Ú_valid_bitsÚwidthÚword_sep©Úbitss    r(   r   r   Ù   s   € Ü�tœU¤HÓ-Ð-r9   c                 ó,   — t        | t        t        «      S rI   )Ú_bits_to_intrT   rU   rV   s    r(   r   r   Ý   s   € Ü˜œe¤XÓ.Ð.r9   c                 óL   — |€t        «       d   }t        | t        t        |«      S )NrU   )ÚglobalsÚ_int_to_bitsrK   rL   )r6   rU   s     r(   r   r   á   s%   € ØÐÜ“9˜ZÑ(ˆÜ˜¤¬I°xÓ@Ð@r9   c                 ó"   — t        | t        «      S rI   )Ú
_valid_binrT   ©Úbin_vals    r(   r   r   ç   s   € Ü�gœuÓ%Ð%r9   c                 ó"   — t        | t        «      S rI   )Ú_int_to_binrT   rC   s    r(   r   r   ë   ó   € Ü�w¤Ó&Ð&r9   c                 ó"   — t        | t        «      S rI   )Ú_bin_to_intrT   r_   s    r(   r   r   ï   rc   r9   c                 ó¨  — g }t        d| z  «      }t        | t        «      r�d| v r|‚	 d| v r+| j                  d«      D �cg c]  }dt	        |«      z  ‘Œ }}ndt	        | «      z  g}dt        |«      cxk  rdk  r2n |‚t        dt        |«      z
  «      D ]  }|j                  d«       Œ n|‚|s|‚dt        |«      z  S c c}w # t
        $ r |‚w xY w)	zÅ
    Expands a partial IPv4 address into a full 4-octet version.

    :param addr: an partial or abbreviated IPv4 address

    :return: an expanded IP address in presentation format (x.x.x.x)

    z!invalid partial IPv4 address: %r!ú:r   r   r   r   Ú0z%s.%s.%s.%s)
r   Ú
isinstancer   r   r    r5   ÚlenÚrangeÚappendÚtuple)r$   ÚtokensÚerrorÚor'   s        r(   Úexpand_partial_addressrq   ó   sí   € ð €FäÐ?À$ÑFÓG€Eä�$œ	Ô"Ø�$‰;àˆKð	Ø�d‰{Ø15·±¸C³ÖA¨A˜$¤ Q£›-ÐA�ÑAà¤ T£Ñ*Ð+�ð ”�F“Ô ˜qÔ ð ˆKô ˜1œs 6›{™?Ó+ò #�Ø—‘˜cÕ"ñ#ð ˆKáØˆàœ5 ›=Ñ(Ð(ùò Bøô ò 	ØˆKð	ús   ¨C ¿C ÁC Ã C ÃC)r   rI   )<Ú__doc__ÚsysÚ_sysÚstructr,   Úsocketr   r"   ÚplatformÚnetaddr.fbsocketr   r!   r   Únetaddr.corer   r	   r
   Únetaddr.strategyr   rJ   r   rS   r   rY   r   r\   r   r^   r   rb   r   re   Únetaddr.compatr   rT   rK   Úword_fmtrU   ÚfamilyÚfamily_nameÚversionÚ	word_baser4   rL   Úmax_wordÚdictrk   Úprefix_to_netmaskÚnetmask_to_prefixÚprefix_to_hostmaskÚhostmask_to_prefixr)   r.   r8   r@   rD   rG   r<   rQ   rq   )r'   s   0r(   ú<module>r‡      s  ðñ ã Û å *à‡=�=Ð'Ñ'÷ BÐA÷ 8ç =Ñ =÷÷ ñ õ %ð 	€ð €	ð €ð €ð 
€ð €ð €ð €	ð ˆu‰*�q‰.€ð �YÑ€	ð �	‰>˜AÑ€ñ Ù49¸!¸UÀQ¹YÓ4GÖH¨q€aˆ�A˜% !™)Ñ$ qÑ(Ñ	)Ò*ÒHóJÐ ñ Ù49¸!¸UÀQ¹YÓ4GÖH¨q€g��u˜q‘yÑ! AÑ%Ñ&¨Ò*ÒHóJÐ ñ Ù*/°°5¸1±9Ó*=Ö> Q€aˆ!�˜‘	Ñ
˜QÑ
Ò Ò>ó@Ð ñ Ù*/°°5¸1±9Ó*=Ö> Q€qˆU�Q‰YÑ˜!Ñ˜aÒ Ò>ó@Ð óó:Ró,Tò&
ò'ò/ò5òò 	?ò.ò/óAò&ò'ò'ó#)ùòc Iùò Iùò ?ùò ?s   ÂEÂ5E#Ã#E(ÄE-