
    $g                      X   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mZ ddlmZmZmZmZmZmZ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,d  e-de!dz             D                       Z. e,d  e-de!dz             D                       Z/ e,d  e-de!dz             D                       Z0 e,d  e-de!dz             D                       Z1d%dZ2d%dZ3d&dZ4d Z5d Z6d Z7d Zd Z8d Z9d Zd Zd&d Zd! Zd" Zd# Zd$ Z:dS )'zIPv4 address logic.    N)	inet_aton)win32cygwin)	inet_ptonAF_INET)AddrFormatErrorZEROFILL	INET_ATON	INET_PTON)valid_words
valid_bitsbits_to_intint_to_bits	valid_bin
int_to_bin
bin_to_int       %d.IPv4   
         c                 B    g | ]}|t           d t          |z
  z  dz
  z  fS r   r   max_intwidth.0is     U/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/netaddr/strategy/ipv4.py
<listcomp>r%   E   s0    ]]]A1guqy)9A)=>?]]]    c                 B    g | ]}t           d t          |z
  z  dz
  z  |fS r   r   r!   s     r$   r%   r%   H   s0    ]]]A7aEAI&6&:;Q?]]]r&   c                 2    g | ]}|d t           |z
  z  dz
  fS r   r    r!   s     r$   r%   r%   K   s+    TTT1Aeai 01 46TTTr&   c                 2    g | ]}d t           |z
  z  dz
  |fS r   r)   r!   s     r$   r%   r%   N   s+    TTT1Q519-1A6TTTr&   c                     t          | t                    st          dt          |           z            	 t	          | |           n# t
          $ r Y dS w xY wdS )ah  
    :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
        :class:`IPAddress` documentation for details.

    .. versionchanged:: 0.10.1
        ``flags`` is scheduled to default to :data:`INET_PTON` instead of :data:`INET_ATON`
        in the future.

    :return: ``True`` if IPv4 address is valid, ``False`` otherwise.

    .. versionchanged:: 1.0.0
        Returns ``False`` instead of raising :exc:`AddrFormatError` for empty strings.
    zInvalid type: %sFT)
isinstancestr	TypeErrortype
str_to_intr   )addrflagss     r$   	valid_strr3   Q   so    " dC   9*T$ZZ78884   uu4s   A 
AAc                    t          | d          }d| v r||t          z  p
|t          z   }|t          z  r3d                    d |                     d          D                       } n0|r.t          d |                     d          D                       r|	 |rt          t          |           }nt          |           }n# t          $ r |w xY wt          j        d|          d         S )a_  
    :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
        :class:`IPAddress` documentation for details.

    :return: The equivalent unsigned integer for a given IPv4 address.
    z$ is not a valid IPv4 address string!:r   c                 2    g | ]}d t          |          z  S r   intr!   s     r$   r%   zstr_to_int.<locals>.<listcomp>z   s"    @@@1A@@@r&   c              3   f   K   | ],}t          |          d k    o|                    d          V  -dS )r   0N)len
startswith)r"   ps     r$   	<genexpr>zstr_to_int.<locals>.<genexpr>{   s=      UU3q66A:;!,,s*;*;UUUUUUr&   >Ir   )r   r   r
   r	   joinsplitany
_inet_ptonr   
_inet_atonOSError_structunpack)r1   r2   error	pton_modepackeds        r$   r0   r0   k   s    NOOE
d{{	!:):%:Ix xx@@

3@@@AA	 sUUTZZPS__UUUUU  	&..FF%%F   >$''**s   'C Cc                     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!r   
ValueError)int_valdialects     r$   
int_to_strrT      su     	GwrM]d"\T!dN	 
 
 	
 RSSSr&   c                     d t          |           D             }|                                 |                    g d           d                    |          S )z
    :param int_val: An unsigned integer.

    :return: The reverse DNS lookup for an IPv4 address in network byte
        order integer form.
    c                     g | ]}d |z  S r7    r!   s     r$   r%   zint_to_arpa.<locals>.<listcomp>   s    555!TAX555r&   )zin-addrarpa r   )int_to_wordsreverseextendrA   )rR   wordss     r$   int_to_arpar^      sU     65|G44555E	MMOOO	LL((()))88E??r&   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@   )rG   packrR   s    r$   int_to_packedrb      s     <g&&&r&   c                 8    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   )rG   rH   )
packed_ints    r$   packed_to_intre      s     >$
++A..r&   c                 8    t          | t          t                    S N)_valid_words	word_size	num_wordsr]   s    r$   r   r      s    y)444r&   c                 ~    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!rM   rN   rO   r   rP   ra   s    r$   rZ   rZ      sm     """"7""""SZSZSZ\
 
 	
 rMGrMT1GqLD3H'TX.YYr&   c                     t          |           st          | d          t          j        dt          j        dg| R            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   rQ   rG   rH   r`   rk   s    r$   words_to_intro      sV     u YPUPUPUWXXX>$T :E : : :;;A>>r&   c                 8    t          | t          t                    S rg   )_valid_bitsr    word_sepbitss    r$   r   r      s    tUH---r&   c                 8    t          | t          t                    S rg   )_bits_to_intr    rr   rs   s    r$   r   r      s    eX...r&   c                 f    |t                      d         }t          | t          t          |          S )Nrr   )globals_int_to_bitsri   rj   )rR   rr   s     r$   r   r      s*    99Z(Ix@@@r&   c                 ,    t          | t                    S rg   )
_valid_binr    bin_vals    r$   r   r      s    gu%%%r&   c                 ,    t          | t                    S rg   )_int_to_binr    ra   s    r$   r   r          w&&&r&   c                 ,    t          | t                    S rg   )_bin_to_intr    r|   s    r$   r   r      r   r&   c                    g }t          d| z            }t          | t                    rd| v r|	 d| v r d |                     d          D             }ndt	          |           z  g}n# t
          $ r |w xY wdt          |          cxk    rdk    r;n n8t          dt          |          z
            D ]}|                    d           n||s|d	t          |          z  S )
a  
    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)

    >>> expand_partial_address('1.2')
    '1.2.0.0'

    .. versionadded:: 1.1.0
    z!invalid partial IPv4 address: %r!r5   r   c                 2    g | ]}d t          |          z  S r7   r8   )r"   os     r$   r%   z*expand_partial_address.<locals>.<listcomp>  s"    AAAA$Q-AAAr&   r   r   r   r;   z%s.%s.%s.%s)
r   r,   r-   rB   r9   rQ   r<   rangeappendtuple)r1   tokensrI   r#   s       r$   expand_partial_addressr      s'    F?$FGGE$ $;;K	d{{AACAAAT*+ 	 	 	K	 F    q     1s6{{?++ # #c""""# K 5==((s   7A) )A6)r   rg   );__doc__sys_sysstructrG   socketr   rE   platformnetaddr.fbsocketr   rD   r   netaddr.corer   r	   r
   r   netaddr.strategyr   rh   r   rq   r   rv   r   ry   r   r{   r   r   r   r   r    ri   word_fmtrr   familyfamily_nameversion	word_baser   rj   max_worddictr   prefix_to_netmasknetmask_to_prefixprefix_to_hostmaskhostmask_to_prefixr3   r0   rT   r^   rb   re   rZ   ro   r   rW   r&   r$   <module>r      sE             * * * * * * =''' BAAAAAAAA 87777777 H H H H H H H H H H H H                  	 	   
   	 U(Q, Y	 i<! D]]qRWZ[R[I\I\]]]^^  D]]qRWZ[R[I\I\]]]^^  TTTaQR@S@STTTUU  TTTaQR@S@STTTUU    4+ + + +:T T T T(
 
 
' ' '/ / /5 5 5Z Z Z	? 	? 	?. . ./ / /A A A A& & &' ' '' ' '') ') ') ') ')r&   