+
    i
= c                   sH   R t ^ RIt^ t^t ! R R]4      t ! R R]4      tR tR.R ltR t	R	 t
R
 tR tR tR tR tR tR tR t ! R R4      tRs]P*                   ! R R]4      4       t]P*                   ! R R]4      4       t ! R R4      t]]n         ! R R4      t ! R R]]4      t ! R R]4      t ! R  R!]]4      t ! R" R#4      t]]n        ]]n         ! R$ R%4      t ! R& R']]4      t  ! R( R)] 4      t! ! R* R+]]4      t" ! R, R-4      t#]#] n        ]#]"n        R# )/z1.0Nc                   s    ] tR t^tRtR# )AddressValueError N__name__
__module____qualname____firstlineno____static_attributes__r       "/usr/lib64/python3.14/ipaddress.pyr    r           r   r    c                   s    ] tR t^tRtR# )NetmaskValueErrorr   Nr   r   r   r	   r   r      r
   r   r   c                      \        V 4      #   \        \        3 d     Mi ; i \        T 4      #   \        \        3 d     Mi ; i\	        T : R 24      h)z. does not appear to be an IPv4 or IPv6 address)IPv4Addressr    r   IPv6Address
ValueErroraddress   &r	   
ip_addressr      sg     7##01 7##01  {"PQ
RR   
 !!
0 AAc                 s     \        W4      #   \        \        3 d     Mi ; i \        Y4      #   \        \        3 d     Mi ; i\	        T : R 24      h)z. does not appear to be an IPv4 or IPv6 network)IPv4Networkr    r   IPv6Networkr   )r   strict   &&r	   
ip_networkr   9   sg     7++01 7++01  {"PQ
RRr   c                 r   )z0 does not appear to be an IPv4 or IPv6 interface)IPv4Interfacer    r   IPv6Interfacer   r   r   r	   ip_interfacer   V   sg    *W%%01 W%%01  {"RS
TTr   c                 sZ     V P                  ^4      #   \         d    \        R4      hi ; i)i   z&Address negative or too large for IPv4to_bytesZOverflowErrorr   r   r   r	   v4_int_to_packedr   x   s6    C"" CABBC    *c                 sZ     V P                  ^4      #   \         d    \        R4      hi ; i)i   z&Address negative or too large for IPv6r   r   r   r	   v6_int_to_packedr!      s6    C## CABBCr    c                 sx    \        V 4      P                  R 4      p\        V4      ^8  d   \        RV : 24      hV# )/zOnly one '/' permitted in )strsplitlenr    )r   addr   & r	   _split_optional_netmaskr(      s9    w<c"D
4y1}"<WK HIIKr   c              #   s   "   \        V 4      p\        V4      ;r#V F.  pVP                  VP                  ^,           8w  d   W#3x  TpTpK0  	  W#3x  R# 5i   N)iterZnext_ip)	addressesZitfirstlastips   &    r	   _find_address_ranger1      sV      
iB8E66TXX\!+E	 
 +s   AAc                 sd    V ^ 8X  d   V# \        W( V ^,
          ,          P                  4       4      #     )min
bit_length)ZnumberZbitsr   r	   _count_righthand_zero_bitsr6      s/     {tg*66899r   c              #   s  "   \        V \        4      '       d   \        V\        4      '       g   \        R 4      hV P                  VP                  8w  d   \        V : RV: R24      hW8  d   \	        R4      hV P                  ^8X  d   \
        pM#V P                  ^8X  d   \        pM\	        R4      hV P                  pV P                  pVP                  pWE8:  dx   \        \        WC4      WT,
          ^,           P                  4       ^,
          4      pV! WCV,
          34      pVx  V^V,          ,          pV^,
          VP                  8X  g   K{  R# R# 5i)z1first and last must be IP addresses, not networks and  are not of the same versionz*last IP address must be greater than firstzunknown IP versionN)
isinstance_BaseAddress	TypeErrorversionr   r   r   max_prefixlenr,   r4   r6   r5   	_ALL_ONES)r.   r/   r0   Zip_bitsZ	first_intZlast_intZnbitsnets   &&      r	   summarize_address_ranger@      s    4 |,,l++KLL}}$& ' 	'|EFF}}	!	-..!!G		IxxH

.yB)A-99;a?A)u_-.	Q%Z	q=BLL(  s   EEEc              #   sz  "   \        V 4      p/ pV'       dY   VP                  4       pVP                  4       pVP                  V4      pVf   W2V&   KC  WS8w  g   KK  W$ VP	                  V4       K`  R p\        VP                  4       4       F*  pVe   VP                  VP                  8  d   K$  Vx  TpK,  	  R # 5iN)ZlistpopsupernetZgetappendsortedZvaluesbroadcast_address)r-   Zto_mergesubnetsr?   rC   Zexistingr/      &      r	   _collapse_addresses_internalrI      s     2 IHG
lln<<>;;x( #H_!OOH%Dgnn&' %%)>)>>	 (s   B;>B;A B;c                 s   . p. p. pV  EFC  p\        V\        4      '       dX   V'       d=   VR,          P                  VP                  8w  d   \        V: RVR,          : R24      hVP	                  V4       Kq  VP
                  VP                  8X  dc   V'       d=   VR,          P                  VP                  8w  d   \        V: RVR,          : R24      h VP	                  VP                  4       K  V'       d=   VR,          P                  VP                  8w  d   \        V: RVR,          : R24      hVP	                  V4       EKF  	  \        \        V4      4      pV'       d/   \        V4       F  w  rVVP                  \        WV4      4       K!  	  \        W,           4      #   \         d!    TP	                  TP                  4        EK  i ; i)r*   r7   r8   )r9   r:   r<   r;   rD   
_prefixlenr=   r0   AttributeErrornetwork_addressrE   Zsetr1   Zextendr@   rI   )r-   ZaddrsZipsZnetsr0   r.   r/   rH   r	   collapse_addressesrN   0  ss   $ E
CD b,''s2w"**4!#SWW!. / /JJrN]]b...s2w"**4!#SWW!. / //

255! R((BJJ6!#T"XX!/ 0 0KKO% * S
C .s3KELL0=> 4 (55! " /

2--../s   F,,&GGc                 s    \        V \        4      '       d   V P                  4       # \        V \        4      '       d   V P	                  4       # \
        # rA   )r9   _BaseNetwork_get_networks_keyr:   _get_address_keyNotImplemented)Zobjr   r	   get_mixed_type_keyrS   f  sB    $ #|$$$$&&	C	&	&##%%r   c                   s   a  ] tR tRt o Rt]R 4       t]R 4       t]R 4       tR t	R t
]R 4       t]R 4       t]R	 4       t]R
 4       t]R 4       t]R 4       tR tRtV tR# )_IPAddressBasei  c                "    V P                  4       # rA   )_explode_shorthand_ip_stringselfr   r	   explodedZ_IPAddressBase.exploded  s     0022r   c                    \        V 4      # rA   r#   rW   r   r	   
compressedZ_IPAddressBase.compressed  s     4yr   c                rU   rA   )_reverse_pointerrW   r   r	   reverse_pointerZ_IPAddressBase.reverse_pointer  s     $$&&r   c                s    V^ 8  d    Rp\        W!V P                  3,          4      hWP                  8  d+   Rp\        W!V P                  V P                  3,          4      hR# )r3   z-%d (< 0) is not permitted as an IPv%d addressz2%d (>= 2**%d) is not permitted as an IPv%d addressN)r    r<   r>   r=   )rX   r   msg   && r	   _check_int_addressZ!_IPAddressBase._check_int_address  sa    Q;AC#CDLL*A$ABB^^#FC#CD4F4F+/<<+9 %9 : : $r   c                sh    \        V4      pW28w  d!   R p\        WAVW P                  3,          4      hR# )z6%r (len %d != %d) is not permitted as an IPv%d addressN)r%   r    r<   )rX   r   Zexpected_lenZaddress_lenr_   s   &&&  r	   _check_packed_addressZ$_IPAddressBase._check_packed_address  sA    'l&JC#CK+7+G %G H H 'r   c                sJ    V P                   V P                   V,	          ,          # rA   )r>   )cls	prefixlenr   r	   _ip_int_from_prefixZ"_IPAddressBase._ip_int_from_prefix  s     }} :;;r   c                s   \        VV P                  4      pV P                  V,
          pW,	          p^V,          ^,
          pWE8w  d9   V P                  ^,          pVP                  VR4      pRp\        W,          4      hV# )r*   bigz&Netmask pattern %r mixes zeroes & ones)r6   r=   r   r   )	rc   ip_intZtrailing_zeroesrd   Zleading_onesZall_onesZbyteslenZdetailsr_   	   &&       r	   _prefix_from_ip_intZ"_IPAddressBase._prefix_from_ip_int  s~     5V585F5FH%%7	0Na'#((A-Hooh6G:CS]++r   c                s,    R V,          p\        V4      Rh)z%r is not a valid netmaskN)r   )rc   Znetmask_strr_   r`   r	   _report_invalid_netmaskZ&_IPAddressBase._report_invalid_netmask  s    )K7$$.r   c                s4   VP                  4       '       d   VP                  4       '       g   V P                  V4        \        V4      p^ Xu;8:  d   V P
                  8:  g   M V P                  V4       V#   \         d    T P                  T4        LLi ; ir2   )isasciiisdigitrj   intr   r=   )rc   Zprefixlen_strrd   r`   r	   _prefix_from_prefix_stringZ)_IPAddressBase._prefix_from_prefix_string  s     %%''M,A,A,C,C''6	7M*I Y3#"3"33''6	  	7''6	7s   A8 8BBc                s@    V P                  V4      p V P                  X4      #   \         d    T P                  T4        L0i ; i  \         d     Mi ; iXT P
                  ,          p T P                  T4      #   \         d    T P                  T4        R # i ; irA   )_ip_int_from_stringr    rj   ri   r   r>   )rc   ip_strrg   r`   r	   _prefix_from_ip_stringZ%_IPAddressBase._prefix_from_ip_string  s    	0,,V4F	**622 ! 	0''/	0  		 	#--	0**622 	0''/	0s2   % A AAAA,A= =BBc                s    \        V\        \        34      '       d   WP                  3# \        V\        4      '       g   \        V4      p\        V4      ^8  d   V# V^ ,          V P                  3# r*   )r9   bytesrm   r=   Ztupler(   r%   )rc   r   r   r	   _split_addr_prefixZ!_IPAddressBase._split_addr_prefix  se     gs|,,----'5)) .g6G w<!Nqz3,,,,r   c                2    V P                   \        V 4      33# rA   	__class__r#   rW   r   r	   
__reduce__Z_IPAddressBase.__reduce__(  s    ~~D	|++r   r   N)r   r   r   r   	__slots__propertyrY   r\   r^   ra   rb   classmethodre   ri   rj   rn   rq   rt   rx   r   __classdictcell____classdict__   @r	   rT   rT     s      I3 3   ' ':H 
< 
<  0 / /  0 0 0B - -., ,r   rT   c                   sr   a a ] tR tRt oRtR tR tR tR tR t	R t
R tR	 tR
 tR tV 3R ltRtVtV ;t# )r:   i.  c                    V P                   # rA   r,   rW   r   r	   __int__Z_BaseAddress.__int__9  s    xxr   c                s     V P                   VP                   8H  ;'       d    V P                  VP                  8H  #   \         d
    \        u # i ; irA   )r,   r<   rL   rR   rX   otherr   r	   __eq__Z_BaseAddress.__eq__<  sK    	"HH		) 6 657 	"!!	"s   < < AAc                s   \        V\        4      '       g   \        # V P                  VP                  8w  d   \	        V : R V: R24      hV P
                  VP
                  8w  d   V P
                  VP
                  8  # R# r7   r8   F)r9   r:   rR   r<   r;   r,   r   r   r	   __lt__Z_BaseAddress.__lt__C  sb    %..!!<<5==(!5* + +88uyy 88eii''r   c                s|    \        V\        4      '       g   \        # V P                  \        V 4      V,           4      # rA   r9   rm   rR   rw   r   r   r	   __add__Z_BaseAddress.__add__O  -    %%%!!~~c$i%/00r   c                s|    \        V\        4      '       g   \        # V P                  \        V 4      V,
          4      # rA   r   r   r   r	   __sub__Z_BaseAddress.__sub__T  r   r   c                P    V P                   P                  : R \        V 4      : R2# (Z)rw   r   r#   rW   r   r	   __repr__Z_BaseAddress.__repr__Y      >>22CI>>r   c                sJ    \        V P                  V P                  4      4      # rA   )r#   _string_from_ip_intr,   rW   r   r	   __str__Z_BaseAddress.__str__\  s    4++DHH566r   c                sP    \        \        \        V P                  4      4      4      # rA   )hashZhexrm   r,   rW   r   r	   __hash__Z_BaseAddress.__hash___  s    CDHH&''r   c                s    V P                   V 3# rA   )r<   rW   r   r	   rQ   Z_BaseAddress._get_address_keyb  s    d##r   c                s4    V P                   V P                  33# rA   )rw   r,   rW   r   r	   rx   Z_BaseAddress.__reduce__e  s    ~~{**r   c                s4  < V'       d   VR,          R8X  d   \        \        V 4      V4      # \        f   ^ RIpVP	                  R4      s\        P                  V4      pV'       g   \        SV `  V4      # VP                  4       w  rEpVR8X  d   V P                  ^8X  d   RpMRpVR8X  d   V P                  pMV P                  ^,          pV'       d   Ww^,          ^,
          ,          pV'       d
   V^,          p\        \        V 4      V RV V V 24      # )	r*   ZsNz(#?)(_?)([xbnX])nbx0rJ   )Zformatr#   _address_fmt_rereZcompileZ	fullmatchsuper
__format__Zgroupsr<   r=   rm   )	rX   Zfmtr   ZmZ	alternateZgroupingZfmt_baseZpadlenrw   s	   &&      r	   r   Z_BaseAddress.__format__h  s     c"gn#d)S)) " jj);<O%%c*7%c**()
%	X s?||q s?''F''1,FkAo%FaKFc$iI;axz(!LMMr   r   )r   r   r   r   ry   r   r   r   r   r   r   r   r   rQ   rx   r   r   r|   __classcell__rw   r~      @@r	   r:   r:   .  sJ      I"1
1
?7($+/N /Nr   r:   c                   s  a  ] tR tRt o R tR tR tR tR tR t	R t
R	 tR
 tR t]P                  R 4       t]P                  R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       tR tR tR tR%R ltR%R lt]R 4       t]R 4       t R t!R t"]R 4       t#]R 4       t$]R  4       t%]R! 4       t&]R" 4       t']R# 4       t(R$t)V t*R# )&rO   i  c                r   r   r   rW   r   r	   r   Z_BaseNetwork.__repr__  r   r   c                @    R V P                   V P                  3,          # %s/%d)rM   rd   rW   r   r	   r   Z_BaseNetwork.__str__  s    $..???r   c              #  s   "   \        V P                  4      p\        V P                  4      p\        V^,           V4       F  pV P	                  V4      x  K  	  R# 5ir)   rm   rM   rF   range_address_classrX   network	broadcastr      &   r	   hostsZ_BaseNetwork.hosts  sM      d**+../	w{I.A%%a(( /s   AAc              #  s   "   \        V P                  4      p\        V P                  4      p\        W^,           4       F  pV P	                  V4      x  K  	  R# 5ir)   r   r   r   r	   __iter__Z_BaseNetwork.__iter__  sI     d**+../	wA.A%%a(( /s   AAc                s2   \        V P                  4      p\        V P                  4      pV^ 8  d0   W!,           V8  d   \        R4      hV P	                  W!,           4      # V^,          pW1,           V8  d   \        R4      hV P	                  W1,           4      # )r3   zaddress out of range)rm   rM   rF   Z
IndexErrorr   )rX   r   r   r      &&  r	   __getitem__Z_BaseNetwork.__getitem__  s    d**+../	6{Y& !788&&w{33FA}w& !788&&y}55r   c                sj   \        V\        4      '       g   \        # V P                  VP                  8w  d   \	        V : R V: R24      hV P
                  VP
                  8w  d   V P
                  VP
                  8  # V P                  VP                  8w  d   V P                  VP                  8  # R# r   )r9   rO   rR   r<   r;   rM   netmaskr   r   r	   r   Z_BaseNetwork.__lt__  s    %..!!<<5==(!5* + +5#8#88''%*?*???<<5==(<<%--//r   c                s    V P                   VP                   8H  ;'       dM    V P                  VP                  8H  ;'       d,    \        V P                  4      \        VP                  4      8H  #   \         d
    \
        u # i ; irA   )r<   rM   rm   r   rL   rR   r   r   r	   r   Z_BaseNetwork.__eq__  su    	"LLEMM1 < <((E,A,AA< <%U]]);;=  	"!!	"s   A/  A/ +A/ /BBc                sh    \        \        V P                  4      \        V P                  4      34      # rA   )r   rm   rM   r   rW   r   r	   r   Z_BaseNetwork.__hash__  s&    S--.DLL0ABCCr   c                s    V P                   VP                   8w  d   R # \        V\        4      '       d   R # VP                  V P                  P                  ,          V P
                  P                  8H  # F)r<   r9   rO   r,   r   rM   r   r   r	   __contains__Z_BaseNetwork.__contains__  sQ    <<5==(e\** 99t||///43G3G3K3KKKr   c                s    V P                   V9   ;'       g>    V P                  V9   ;'       g'    VP                   V 9   ;'       g    VP                  V 9   # rA   rM   rF   r   r   r	   overlapsZ_BaseNetwork.overlaps  s]    ##u, 7 7""e+ 6 6%%- 5 5++t3	7r   c                s~    V P                  \        V P                  4      \        V P                  4      ,          4      # rA   )r   rm   rM   hostmaskrW   r   r	   rF   Z_BaseNetwork.broadcast_address  s3    ""3t';';#<#&t}}#5$6 7 	7r   c                sl    V P                  \        V P                  4      V P                  ,          4      # rA   )r   rm   r   r>   rW   r   r	   r   Z_BaseNetwork.hostmask  s%    ""3t||#4t~~#EFFr   c                r   r   )rM   rK   rW   r   r	   with_prefixlenZ_BaseNetwork.with_prefixlen  s    $..@@@r   c                <    V P                   : R V P                  : 2# r"   )rM   r   rW   r   r	   with_netmaskZ_BaseNetwork.with_netmask  s    ..==r   c                r   r   )rM   r   rW   r   r	   with_hostmaskZ_BaseNetwork.with_hostmask  s    ..>>r   c                sn    \        V P                  4      \        V P                  4      ,
          ^,           # rr   )rm   rF   rM   rW   r   r	   num_addressesZ_BaseNetwork.num_addresses  s*     4))*S1E1E-FFJJr   c                s>    R \        V 4      3,          p\        V4      h)z%%200s has no associated address class)ZtypeZNotImplementedError)rX   r_   r'   r	   r   Z_BaseNetwork._address_class  s    
 6dE!#&&r   c                r   rA   )rK   rW   r   r	   rd   Z_BaseNetwork.prefixlen  s    r   c              #  s  "   V P                   VP                   8X  g   \        V : R V: R24      h\        V\        4      '       g   \        RV,          4      hVP	                  V 4      '       g   \        V: RV : 24      hW8X  d   R# VP                  VP                  : RVP                  : 24      pV P                  4       w  r#W!8w  d|   W18w  dv   VP	                  V4      '       d   Vx  VP                  4       w  r#K;  VP	                  V4      '       d   Vx  VP                  4       w  r#Kj  \        RV: RV: RV: 24      hW!8X  d   Vx  R# W18X  d   Vx  R# \        RV: RV: RV: 24      h5i)	r7   r8   z%s is not a network objectz not contained in Nr"   z Error performing exclusion: s1: z s2: z other: )r<   r;   r9   rO   	subnet_ofr   rw   rM   rd   rG   ZAssertionError)rX   r   Zs1Zs2r   r	   address_excludeZ_BaseNetwork.address_exclude  sD    H ||u}},!5* + + %..85@AAt$$EFF= 5+@+@+0??!< = kbkr""B$$B %&("e&5 6 6 ;H[H !"$b%"1 2 2s   A-E80A:E8+.E8AE8c                sJ   V P                   VP                   8w  d   \        V : R V: R24      hV P                  VP                  8  d   R# V P                  VP                  8  d   ^# V P                  VP                  8  d   R# V P                  VP                  8  d   ^# ^ # )r7   z are not of the same typerJ   )r<   r;   rM   r   r   r   r	   compare_networksZ_BaseNetwork.compare_networksb  s    B <<5==(!5* + + %"7"77I%"7"77<<%--'I<<%--'r   c                sH    V P                   V P                  V P                  3# rA   )r<   rM   r   rW   r   r	   rP   Z_BaseNetwork._get_networks_key  s     d22DLLAAr   Nc              #  s`  "   V P                   V P                  8X  d   V x  R # Ve@   W P                   8  d   \        R4      hV^8w  d   \        R4      hW P                   ,
          pV^ 8  d   \        R4      hV P                   V,           pW0P                  8  d   \        RW03,          4      h\        V P                  4      p\        V P
                  4      ^,           p\        V P                  4      ^,           V,	          p\        WEV4       F  pV P                  Ws34      pVx  K  	  R # 5i)Nznew prefix must be longer(cannot set prefixlen_diff and new_prefixzprefix length diff must be > 0z0prefix length diff %d is invalid for netblock %s)	rK   r=   r   rm   rM   rF   r   r   rw   )	rX   prefixlen_diff
new_prefixnew_prefixlenZstartZendZstepZnew_addrZcurrents	   &&&      r	   rG   Z_BaseNetwork.subnets  s    4 ??d000J!OO+ !<==" !KLL'//9NA=>>.8---B!F) )* * D(()$(()A-DMM"Q&>9e$/Hnnh%>?GM 0s   D,D.c                s   V P                   ^ 8X  d   V # VeA   W P                   8  d   \        R4      hV^8w  d   \        R4      hV P                   V,
          pV P                  V,
          pV^ 8  d   \        RV P                  V3,          4      hV P                  \	        V P
                  4      \	        V P                  4      V,          ,          V34      # )r3   znew prefix must be shorterr   z;current prefixlen is %d, cannot have a prefixlen_diff of %d)rK   r   rd   rw   rm   rM   r   )rX   r   r   r   s   &&& r	   rC   Z_BaseNetwork.supernet  s    * ??aK!OO+ !=>>" !KLL!__z9N71M012 2 ~~$$%T\\):n)LM  	r   c                j    V P                   P                  ;'       d    V P                  P                  # rA   )rM   is_multicastrF   rW   r   r	   r   Z_BaseNetwork.is_multicast  s1     $$11 4 4&&33	5r   c                s    V P                   VP                   8w  d   \        V  R V R24      hVP                  V P                  8*  ;'       d    VP                  V P                  8  #   \         d    \        RT  R T 24      hi ; i)r7   r8   z*Unable to test subnet containment between )r<   r;   rM   rF   rL   )Zar   r   r	   _is_subnet_ofZ_BaseNetwork._is_subnet_of  s    	4yyAII%1#U1#-I JKK%%):):: ? ?''1+>+>>@ 	4 ''(cqc3 4 4	4s   AA( A( (Bc                s$    V P                  W4      # rA   r   r   r   r	   r   Z_BaseNetwork.subnet_of  s    !!$..r   c                s$    V P                  W4      # rA   r   r   r   r	   supernet_ofZ_BaseNetwork.supernet_of  s    !!%..r   c                r   rA   )rM   is_reservedrF   rW   r   r	   r   Z_BaseNetwork.is_reserved  1     $$00 3 3&&22	4r   c                r   rA   )rM   is_link_localrF   rW   r   r	   r   Z_BaseNetwork.is_link_local&  s1     $$22 5 5&&44	6r   c                  a  \         ;QJ d3    V 3R  lS P                  P                   4       F  '       g   K   RM(	  RM$! V 3R  lS P                  P                   4       4      ;'       dc    \        ;QJ d3    V 3R lS P                  P                   4       F  '       d   K   R# 	  R# ! V 3R lS P                  P                   4       4      # )c              3   sp   <"   T F+  pSP                   V9   ;'       d    SP                  V9   x  K-  	  R # 5irA   r   ).0Zpriv_networkrX      & r	   	<genexpr>*_BaseNetwork.is_private.<locals>.<genexpr>:  sA      J'H| ''<7 : :))\9:'H   66TFc              3   sp   <"   T F+  pSP                   V9  ;'       d    SP                  V9  x  K-  	  R # 5irA   r   )r   r   rX   r   r	   r   r   <  sD      R $P ((7 : :**'9:#Or   any
_constants_private_networksall_private_networks_exceptionsrW      fr	   
is_privateZ_BaseNetwork.is_private1  s     s J'+'H'HJsss J'+'H'HJ J  NQc R $(??#O#ORcc	NQ	NQ R $(??#O#OR O	r   c                s$    V P                   '       * # rA   )r   rW   r   r	   	is_globalZ_BaseNetwork.is_globalB  s     ??""r   c                r   rA   )rM   is_unspecifiedrF   rW   r   r	   r   Z_BaseNetwork.is_unspecifiedM  s1     $$33 6 6&&55	7r   c                r   rA   )rM   is_loopbackrF   rW   r   r	   r   Z_BaseNetwork.is_loopbackY  r   r   r   r)   )+r   r   r   r   r   r   r   r   r   r   r   r   r   r   	functoolscached_propertyrF   r   rz   r   r   r   r   r   rd   r   r   rP   rG   rC   r   staticmethodr   r   r   r   r   r   r   r   r   r   r|   r}   r   r	   rO   rO     s    ?@
))6
"D
L7 7 7 G G A A > > ? ? K K ' '  I2V.`B3j'R 	5 	5 	4 	4// 	4 	4 6 6    # # 	7 	7 	4 	4r   rO   c                   s    ] tR tRt. tRtR# )_BaseConstantsif  r   N)r   r   r   r   r   r   r   r   r	   r   r   f  s    r   r   c                   s   a  ] tR tRt o Rt^t^],          ^,
          t]t/ t	R t
]R 4       t]R 4       t]R 4       t]R 4       tR tRtV tR	# )
_BaseV4in  c                rZ   rA   r[   rW   r   r	   rV   Z$_BaseV4._explode_shorthand_ip_string  s    4yr   c                s   WP                   9  d   \        V\        4      '       d0   Tp^ Tu;8:  d   V P                  8:  g   M V P	                  V4       M V P                  V4      p\        V P                  V4      4      pW23V P                   V&   V P                   V,          #   \         d    T P                  T4      p L[i ; ir2   )
_netmask_cacher9   rm   r=   rj   rn   r   rq   r   re   rc   Zargrd   r   r   r	   _make_netmaskZ_BaseV4._make_netmask  s     (((#s##	Y;#*;*;;//	:@ # > >s CI
 "#"9"9)"DEG&-&8Cs#!!#&& ) @ !$ : :3 ?I@s   B% %CCc                s0   V'       g   \        R 4      hVP                  R4      p\        V4      ^8w  d   \        RV,          4      h \        P	                  \        V P                  V4      R4      #   \         d   p\        T: RT: 24      RhRp?ii ; i)Address cannot be empty.zExpected 4 octets in %rrf    in N)r    r$   r%   rm   
from_bytesmap_parse_octetr   )rc   rp   Zoctetsexcr   r	   ro   Z_BaseV4._ip_int_from_string  s     #$=>>c"v;!#$=$FGG	J>>#c&6&6"?GG 	J##v$>?TI	Js   )A2 2B=BBc                s   V'       g   \        R 4      hVP                  4       '       d   VP                  4       '       g   Rp\        W!,          4      h\        V4      ^8  d   Rp\        W!,          4      hVR8w  d"   V^ ,          R8X  d   Rp\        W!,          4      h\	        V^
4      pV^8  d   \        RV,          4      hV# )zEmpty octet not permittedz#Only decimal digits permitted in %rz$At most 3 characters permitted in %rr   z%Leading zeros are not permitted in %rzOctet %d (> 255) not permitted)r   rk   rl   r%   rm   )rc   Z	octet_strr_   Z	octet_intr   r	   r   Z_BaseV4._parse_octet  s     899!!##	(9(9(;(;7CS_-- y>A8CS_-- 	! 39CS_--	2&	s?=	IJJr   c           	     s`    R P                  \        \        VP                  ^R4      4      4      # )r   rf   )joinr   r#   r   )rc   rg   r   r	   r   Z_BaseV4._string_from_ip_int  s%     xxCE!:;<<r   c                sz    \        V 4      P                  R 4      RRR1,          pR P                  V4      R,           # )r   Nz.in-addr.arparJ   )r#   r$   r   )rX   Zreverse_octetsr'   r	   r]   Z_BaseV4._reverse_pointer  s3     T-dd3xx'/99r   r   N)r   r   r   r   ry   r<   
IPV4LENGTHr>   r=   r   rV   r{   r   ro   r   r   r]   r   r|   r}   r   r	   r   r   n  s      IGJ!#IM N ' '2 J J2 ! !F 
= 
=: :r   r   c                   s
  a  ] tR tRt o RtR t]R 4       t]R 4       t]]	P                  ! 4       R 4       4       t]]	P                  ! 4       R 4       4       t]R 4       t]R 4       t]R	 4       t]R
 4       t]R 4       tRtV tR# )r   i  c                sZ   \        V\        4      '       d   V P                  V4       Wn        R # \        V\        4      '       d/   V P                  V^4       \        P                  V4      V n        R # \        V4      pRV9   d   \        RV: 24      hV P                  V4      V n        R # )Nr"   Unexpected '/' in )
r9   rm   ra   r,   rs   rb   r   r#   r    ro   rX   r   Zaddr_strr`   r	   __init__ZIPv4Address.__init__  s    " gs####G,H gu%%&&w2~~g.DH w<(?#&8$DEE++H5r   c                ,    \        V P                  4      # rA   )r   r,   rW   r   r	   packedZIPv4Address.packed        ))r   c                2    W P                   P                  9   # rA   )r   _reserved_networkrW   r   r	   r   ZIPv4Address.is_reserved   s     8888r   c                r   )c              3   .   <"   T F
  pSV9   x  K  	  R # 5irA   r   r   r?   rX   r   r	   r   )IPv4Address.is_private.<locals>.<genexpr>=       I'H'H   TFc              3   .   <"   T F
  pSV9  x  K  	  R # 5irA   r   r   r   r	   r   r   >       \/[DO/[r   r   rW   r   r	   r   ZIPv4Address.is_private+  s    $ CIt'H'HICCCIt'H'HII ] ]\t/[/[\	
	
\t/[/[\\	
r   c                sd    W P                   P                  9  ;'       d    V P                  '       * # rA   )r   _public_networkr   rW   r   r	   r   ZIPv4Address.is_globalA  s&      ??:::RR4???RRr   c                r   rA   )r   _multicast_networkrW   r   r	   r   ZIPv4Address.is_multicastS  s     9999r   c                s2    W P                   P                  8H  # rA   )r   _unspecified_addressrW   r   r	   r   ZIPv4Address.is_unspecified^  s     ;;;;r   c                r   rA   )r   _loopback_networkrW   r   r	   r   ZIPv4Address.is_loopbacki  s     8888r   c                r   rA   )r   _linklocal_networkrW   r   r	   r   ZIPv4Address.is_link_locals  s     9999r   c                s    \        R V  24      # )z::ffff:)r   rW   r   r	   ipv6_mappedZIPv4Address.ipv6_mapped}  s     WTF+,,r   r   N)r,   __weakref__)r   r   r   r   ry   r   rz   r   r   r   	lru_cacher   r   r   r   r   r   r   r   r|   r}   r   r	   r   r     s      'I!6F * * 9 9 
  
( S  S  : : < < 9 9 : : - -r   r   c                   s   a  ] tR tRt o R t]P                  R 4       tR tR t	R t
R t]P                  t]R 4       t]R	 4       t]R
 4       t]R 4       tRtV tR# )r   i  c                    V P                  V4      w  r#\        P                  W4       \        W#3R R7      V n        V P                  P
                  V n        V P                  P                  V n        R# F)r   N)rt   r   r   r   r   r   rK   rX   r   r&   maskr   r	   r   ZIPv4Interface.__init__  T    ,,W5
T("D<>||++,,11r   c                .    V P                   P                  # rA   r   r   rW   r   r	   r   ZIPv4Interface.hostmask      ||$$$r   c                s^    R V P                  V P                  4      V P                  3,          # r   r   r,   rK   rW   r   r	   r   ZIPv4Interface.__str__  s,    $22488<//+ + 	+r   c                    \         P                  W4      pV\        J g	   V'       g   V#  V P                  VP                  8H  #   \         d     R # i ; ir   )r   r   rR   r   rL   rX   r   address_equalr`   r	   r   ZIPv4Interface.__eq__  N    #**47N*-  	<<5==00 	 		   A AAc                s    \         P                  W4      pV\        J d   \        #  V P                  VP                  8  ;'       g$    V P                  VP                  8H  ;'       d    T#   \         d     R # i ; ir   )r   r   rR   r   rL   rX   r   Zaddress_lessr`   r	   r   ZIPv4Interface.__lt__  ss    "))$6>)!!	LL5==0 C CLLEMM1BBlD 	 	s   A+  A+ (A+ +A:9A:c                    \        V P                  V P                  \        V P                  P
                  4      34      # rA   r   r,   rK   rm   r   rM   rW   r   r	   r   ZIPv4Interface.__hash__  +    TXXtDLL4P4P0QRSSr   c                r   rA   )r   r,   rW   r   r	   r0   ZIPv4Interface.ip      488$$r   c                Z    V P                  V P                  4      : R V P                  : 2# r   r  rW   r   r	   r   ZIPv4Interface.with_prefixlen  %    22488<//+ 	+r   c                r  r   r   r,   r   rW   r   r	   r   ZIPv4Interface.with_netmask  %    22488<,,( 	(r   c                r  r   r   r,   r   rW   r   r	   r   ZIPv4Interface.with_hostmask  %    22488<--) 	)r   rK   r   r   N)r   r   r   r   r   r   r   r   r   r   r   r   rT   rx   rz   r0   r   r   r   r   r|   r}   r   r	   r   r     s     2 % %+

T  **J% % + + ( ( ) )r   r   c                   sf   a  ] tR tRt o ]tRR lt]]P                  ! 4       R 4       4       t
RtV tR# )r   i  c                :  a V P                  V4      w  op\        S4      V n        V P                  V4      w  V n        V n        \        V P                  4      pV\        V P                  4      ,          V8w  dE   V'       d   \        R V ,          4      h\        V\        V P                  4      ,          4      V n        V P
                  V P                  ^,
          8X  d   V P                  V n
        R# V P
                  V P                  8X  d   V3R lV n
        R# R# )%s has host bits setc                  .   < \        \        S 4      34      # rA   )r+   r   r&      r	   <lambda>Z&IPv4Network.__init__.<locals>.<lambda>      {4'8&:!;r   N)rt   r   rM   r   r   rK   rm   r   r=   r   r   rX   r   r   r  r   r&      &&&  @r	   r   ZIPv4Network.__init__  s    F ,,W5
d*40(,(:(:4(@%doT))*C%%/ !7$!>??'2636t||3D4E (F$ ??t11A56DJ__!3!34;DJ 5r   c                s    V P                   \        R 4      9   ;'       d    V P                  \        R 4      9   '       * ;'       d    V P                  '       * # )100.64.0.0/10)rM   r   rF   r   rW   r   r	   r   ZIPv4Network.is_global  sU     ))[-II K K**k/.JJL $ $OO#	%r   rK   r   r   rM   NT)r   r   r   r   r   r   r   rz   r   r  r   r   r|   r}   r   r	   r   r     s7      !N2<h 
%  
%r   r   c                   s^   ] tR tRt]! R4      t]! R4      t]! R4      t]! R4      t]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R	4      ]! R
4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      .t	]! R4      ]! R4      .t
]! R4      t]! R4      tRtR# )_IPv4Constantsi  z169.254.0.0/16z127.0.0.0/8z224.0.0.0/4r&  z	0.0.0.0/8z
10.0.0.0/8z172.16.0.0/12z192.0.0.0/24z192.0.0.170/31z192.0.2.0/24z192.168.0.0/16z198.18.0.0/15z198.51.100.0/24z203.0.113.0/24z240.0.0.0/4z255.255.255.255/32z192.0.0.9/32z192.0.0.10/32z0.0.0.0r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r)  r)    s    $%56#M2$]3!/2O
 	K L!M"$%O$N#$%N#$%O$%&$%M"()
$ 	N#O$$ 
 $M2&y1r   r)  c                   s   a  ] tR tRt o Rt^t^],          ^,
          t^t]	! R4      t
]t/ t]R 4       t]R 4       t]R 4       t]R 4       t]RR l4       tR	 tR
 t]R 4       tRtV tR# )_BaseV6iG  Z0123456789ABCDEFabcdefc                sH   WP                   9  d   \        V\        4      '       d0   Tp^ Tu;8:  d   V P                  8:  g   M V P	                  V4       MV P                  V4      p\        V P                  V4      4      pW23V P                   V&   V P                   V,          # r2   )r   r9   rm   r=   rj   rn   r   re   r   r   r	   r   Z_BaseV6._make_netmask[  s     (((#s##	Y;#*;*;;//	:::3?	!#"9"9)"DEG&-&8Cs#!!#&&r   c                s   V'       g   \        R 4      h\        V4      ^-8  dF   Tp\        V4      ^d8  d%   VR,           R\        V4      ^Z,
           RVRR  2p\        RV: 24      hV P                  ^,           pVP                  RVR7      p^p\        V4      V8  d   RWQ3,          p\        V4      hR	VR,          9   dj    \	        VP                  4       4      P                  pTP                  RT^,	          R,          ,          4       TP                  RTR,          ,          4       \        V4      V8  d   RV^,
          V3,          p\        V4      hRp	\        ^\        V4      ^,
          4       F-  p
WJ,          '       d   K  V	e   RV,          p\        V4      hT
p	K/  	  V	e   T	p\        V4      V	,
          ^,
          pV^ ,          '       g%   V^,          pV'       d   Rp\        Wa,          4      hVR,          '       g%   V^,          pV'       d   Rp\        Wa,          4      hV P                  W,           ,
          pV^8  d'   Rp\        W`P                  ^,
          V3,          4      hM\        V4      V P                  8w  d    Rp\        W`P                  V3,          4      hV^ ,          '       g   Rp\        Wa,          4      hVR,          '       g   Rp\        Wa,          4      h\        V4      p^ p^ p ^ p\        V4       F)  p
V^,          pWP                  WJ,          4      ,          pK+  	  V^V,          ,          p\        V) ^ 4       F)  p
V^,          pWP                  WJ,          4      ,          pK+  	  V#   \          d   p\        T: R
T: 24      RhRp?ii ; i  \         d   p\        T: R
T: 24      RhRp?ii ; i)r   :Ni-   Nr   z chars elided)Nz"At most 45 characters expected in :)Zmaxsplitz At least %d parts expected in %rr   r   %x  z!At most %d colons permitted in %rz At most one '::' permitted in %rz0Leading ':' only permitted as part of '::' in %rz1Trailing ':' only permitted as part of '::' in %rz/Expected at most %d other parts with '::' in %rz,Exactly %d parts expected without '::' in %rirJ   )r    r%   _HEXTET_COUNTr$   r   rB   r,   rD   r   _parse_hextetr   )rc   rp   ZshortenZ
_max_partspartsZ
_min_partsr_   ipv4_intr   Z
skip_indexZiZparts_hiZparts_loZparts_skippedrg   s   &&             r	   ro   Z_BaseV6._ip_int_from_stringo  s    #$=>>v;G7|c!#C[M3v;r>*:.PSPTW#&H'.k%3 4 4 &&*
S:6 
u:
"4
7KKC#C(( %)N&uyy{377 LL(b.F!:;<LLF!234
 u:
"5Av8NNC#C(( 
q#e*q.)A88)<vEC+C00
 * !!H5zJ.2H88ALC+CL9999AMC+CL99--1DEMq G'/@/@/BF.K(KLL ! 5zS...D'/@/@&.I(IJJ88H'5599I'555zHHM	JF8_2++EH55 % rM))FH9a(2++EH55 ) MM % N'c6(BCMNN  	J##v$>?TI	Js1   #N BN. N+N&&N+.O9OOc                s    V P                   P                  V4      '       g   \        R V,          4      h\        V4      ^8  d   Rp\        W!,          4      h\	        V^4      # )zOnly hex digits permitted in %rz$At most 4 characters permitted in %r)_HEX_DIGITSZ
issupersetr   r%   rm   )rc   Z
hextet_strr_   r`   r	   r/  Z_BaseV6._parse_hextet  sX      ))*55>KLL z?Q8CS-..:r""r   c                s   Rp^ pRp^ p\        V4       F0  w  rgVR8X  d!   V^,          pVR8X  d   TpWS8  d   TpTpK*  K,  ^ pRpK2  	  V^8  d:   VV,           pV\        V4      8X  d   VR.,          pR.WV% V^ 8X  d   R.V,           pV# )r*   r    rJ   )Z	enumerater%   )	rc   hextetsZbest_doublecolon_startZbest_doublecolon_lenZdoublecolon_startZdoublecolon_lenZindexZhextetZbest_doublecolon_endrh   r	   _compress_hextetsZ_BaseV6._compress_hextets  s    " "$ &w/ME}1$$*(-%"9+:(->* :
 #$$&! 0  !#$:$8%9  $s7|3B4DF4G+?@%*$.r   Nc           
     s6   Vf   \        V P                  4      pWP                  8  d   \        R4      hRV,          p\	        ^ ^ ^4       Uu. uF  pR\        W#V^,            ^4      ,          NK!  	  ppV P                  V4      pRP                  V4      # u upi )NzIPv6 address is too large%032xr,  r+  )rm   r,   r>   r   r   r5  r   )rc   rg   hex_strr   r4  s   &&   r	   r   Z_BaseV6._string_from_ip_int*  s     >\FMM!899F";@B?K?a4#g!nb111?K''0xx   Ls   %Bc                s   \        V \        4      '       d   \        V P                  4      pM7\        V \        4      '       d   \        V P
                  4      pM\        V 4      pV P                  V4      pR V,          p\        ^ ^ ^4       Uu. uF  qCWD^,            NK  	  pp\        V \        \        34      '       d%   RRP                  V4      V P                  3,          # RP                  V4      # u upi )r6  r   r+  )r9   r   r#   rM   r   r0   ro   r   rO   r   rK   )rX   rp   rg   r7  r   r0  s   &     r	   rV   Z$_BaseV6._explode_shorthand_ip_stringD  s     dK((--.Fm,,\FYF))&1F").q"a9AQ39d\=9::chhuot???xx :s   C3c                s~    V P                   R R R1,          P                  RR4      pRP                  V4      R,           # )Nr+  r3  r   	.ip6.arparJ   )rY   replacer   )rX   reverse_charsr'   r	   r]   Z_BaseV6._reverse_pointerY  s7     dd+33C<xx&44r   c                s    V P                  R 4      w  rpV'       g   RpW3# V'       d   R V9   d   \        RV ,          4      hW3# )%NzInvalid IPv6 address: "%r")Z	partitionr    )rp   r&   Zsepscope_idr   r	   _split_scope_idZ_BaseV6._split_scope_idb  sO     %..s38H ~ SH_#$@6$IJJ~r   r   rA   )r   r   r   r   ry   r<   
IPV6LENGTHr>   r.  Z	frozensetr2  r=   r   r{   r   ro   r/  r5  r   rV   r]   r   r=  r   r|   r}   r   r	   r*  r*  G  s      IGJ!#IM45KM N' '& nJ nJ` # #2 - -^ ! !2*5  r   r*  c                   sj  a a ] tR tRt oRtR tV 3R ltV 3R ltR tV 3R lt	R t
V 3R ltR	 t]R
 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]]P*                  ! 4       R 4       4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       tRtVtV ;t# )r   iv  c                s   \        V\        4      '       d!   V P                  V4       Wn        R V n        R # \        V\
        4      '       d7   V P                  V^4       \        P                  VR4      V n        R V n        R # \        V4      pRV9   d   \        RV: 24      hV P                  V4      w  q n        V P                  V4      V n        R # )Nrf   r"   r   )r9   rm   ra   r,   	_scope_idrs   rb   r   r#   r    r=  ro   r   r`   r	   r   ZIPv6Address.__init__|  s    $ gs####G,H!DN gu%%&&w3~~gu5DH!DN w<(?#&8$DEE#'#7#7#A .++H5r   c                st   < V P                   pVf   \        SV `	  4       # ^p\        SV `	  4       pVR V  V: 2# rA   )ipv4_mappedr   rV   )rX   r@  
prefix_lenraw_exploded_strrw   s   &   r	   rV   Z(IPv6Address._explode_shorthand_ip_string  sL    &&7799
 7?A";J/0@@r   c                s   < V P                   pVf   \        SV `	  4       # ^p\        SV `  4       R V pVP                  pV VR 2R R R1,          P                  RR4      pRP                  V4      R,           # )NZ008xr+  r3  r   r8  rJ   )r@  r   r]   rV   r,   r9  r   )rX   r@  rA  rB  r1  r:  rw   s   &     r	   r]   ZIPv6Address._reverse_pointer  s    &&7+--
 7?A+:N??+,XdO<TrTBJJ3PRSxx&44r   c                s    V P                   pVf   \        R\        V 4      ,          4      hV P                  ^ ,	          pV P	                  V4      : R\        V4      : 2# )Nz0Can not apply to non-IPv4-mapped IPv6 address %sr+  )r@  r    r#   r,   r   )rX   r@  Zhigh_order_bitss   &  r	   _ipv4_mapped_ipv6_to_strZ$IPv6Address._ipv4_mapped_ipv6_to_str  sU     &&#$VY\]aYb$bcc((b.22?CSEUVVr   c                s   < V P                   pVf   \        SV `	  4       pMV P                  4       pV P                  '       d   VR,           V P                  ,           # T# )Nr;  )r@  r   r   rC  r?  )rX   r@  rp   rw   s   &  r	   r   ZIPv6Address.__str__  sN    &&W_&F224F04v|dnn,JFJr   c                sD    \        V P                  V P                  34      # rA   )r   r,   r?  rW   r   r	   r   ZIPv6Address.__hash__  s    TXXt~~.//r   c                s   < \         SV `  V4      pV\        J d   \        # V'       g   R # V P                  \	        VRR4      8H  # )Fr?  N)r   r   rR   r?  Zgetattr)rX   r   r  rw   s   && r	   r   ZIPv6Address.__eq__  s=    u-N*!!~~T!BBBr   c                ru   rA   rv   rW   r   r	   rx   ZIPv6Address.__reduce__  s    T--r   c                r   rA   )r?  rW   r   r	   r<  ZIPv6Address.scope_id  s     ~~r   c                r   rA   )r!   r,   rW   r   r	   r   ZIPv6Address.packed  r   r   c                j    V P                   pVe   VP                  # W P                  P                  9   # rA   )r@  r   r   r   rX   r@  r'   r	   r   ZIPv6Address.is_multicast  s4     &&"+++9999r   c                s   a  S P                   pVe   VP                  # \        ;QJ d3    V 3R lS P                  P                   4       F  '       g   K   R# 	  R# ! V 3R lS P                  P                   4       4      # )Nc              3   r   rA   r   )r   r   rX   r   r	   r   Z*IPv6Address.is_reserved.<locals>.<genexpr>
  s     I&H419&Hr   TF)r@  r   r   r   _reserved_networksrE     f r	   r   ZIPv6Address.is_reserved  s_     &&"***sIdoo&H&HIssIsIsIdoo&H&HIIIr   c                rD  rA   )r@  r   r   r   rE  r'   r	   r   ZIPv6Address.is_link_local  s4     &&",,,9999r   c                r   rA   )r   _sitelocal_networkrW   r   r	   is_site_localZIPv6Address.is_site_local  s     9999r   c                s  a  S P                   pVe   VP                  # \        ;QJ d3    V 3R lS P                  P                   4       F  '       g   K   RM(	  RM$! V 3R lS P                  P                   4       4      ;'       dc    \
        ;QJ d3    V 3R lS P                  P                   4       F  '       d   K   R# 	  R# ! V 3R lS P                  P                   4       4      # )Nc              3   r   rA   r   r   r   r	   r   )IPv6Address.is_private.<locals>.<genexpr><  r   r   TFc              3   r   rA   r   r   r   r	   r   rJ  =  r   r   )r@  r   r   r   r   r   r   rE  rG  r	   r   ZIPv6Address.is_private'  s    " &&")))CIt'H'HICCCIt'H'HII ] ]\t/[/[\	
	
\t/[/[\\	
r   c                s\    V P                   pVe   VP                  # V P                  '       * # rA   )r@  r   r   rE  r'   r	   r   ZIPv6Address.is_global@  s.     &&"(((??""r   c                sX    V P                   pVe   VP                  # V P                  ^ 8H  # rA   )r@  r   r,   rE  r'   r	   r   ZIPv6Address.is_unspecifiedT  s/     &&"---xx1}r   c                sX    V P                   pVe   VP                  # V P                  ^8H  # rA   )r@  r   r,   rE  r'   r	   r   ZIPv6Address.is_loopbackb  s/     &&"***xx1}r   c                sn    V P                   ^ ,	          R8w  d   R# \        V P                   R,          4      # )i    r-  N    r,   r   rW   r   r	   r@  ZIPv6Address.ipv4_mappedp  s+     HHNv%488j011r   c                s    V P                   ^`,	          R8w  d   R# \        V P                   ^@,	          R,          4      \        V P                   ( R,          4      3# )i`   i   NrK  rL  rW   r   r	   teredoZIPv6Address.teredo}  sI     HHNz)TXX^z9:TXXI
235 	5r   c                s|    V P                   ^p,	          R8w  d   R# \        V P                   ^P,	          R,          4      # )ip   i   NrK  rL  rW   r   r	   	sixtofourZIPv6Address.sixtofour  s/     HHO&DHHNj899r   )r,   r?  )r,   r?  r  ) r   r   r   r   ry   r   rV   r]   rC  r   r   r   rx   rz   r<  r   r   r   r   rI  r   r  r   r   r   r   r@  rM  rN  r   r|   r   r   r   r	   r   r   v  sU     4I&6PA	5W$K0C. 	 	 * * : : J J 
: 
: : : 
  
. # #&     
2 
2 5 5 
: 
: 
:r   r   c                   s   a a ] tR tRt oR t]P                  R 4       tV 3R ltR t	R t
R t]P                  t]R 4       t]R	 4       t]R
 4       t]R 4       t]R 4       t]V 3R l4       tRtVtV ;t# )r   i  c                r  r  )rt   r   r   r   r   r   rK   r  r   r	   r   ZIPv6Interface.__init__  r  r   c                r  rA   r	  rW   r   r	   r   ZIPv6Interface.hostmask  r
  r   c                sF   < R \         SV `  4       V P                  3,          # r   )r   r   rK   rX   rw      &r	   r   ZIPv6Interface.__str__  s%    %'/+//+ + 	+r   c                r  r   )r   r   rR   r   rL   r  r`   r	   r   ZIPv6Interface.__eq__  r  r  c                s    \         P                  W4      pV\        J d   V#  V P                  VP                  8  ;'       g$    V P                  VP                  8H  ;'       d    T#   \         d     R # i ; ir   )r   r   rR   r   rL   r  r`   r	   r   ZIPv6Interface.__lt__  ss    "))$6>)	LL5==0 C CLLEMM1BBlD 	 	s   A'  A' $A' 'A65A6c                r  rA   r  rW   r   r	   r   ZIPv6Interface.__hash__  r  r   c                r   rA   )r   r,   rW   r   r	   r0   ZIPv6Interface.ip  r  r   c                r  r   r  rW   r   r	   r   ZIPv6Interface.with_prefixlen  r  r   c                r  r   r  rW   r   r	   r   ZIPv6Interface.with_netmask  r  r   c                r  r   r  rW   r   r	   r   ZIPv6Interface.with_hostmask  r  r   c                s\    V P                   ^ 8H  ;'       d    V P                  P                  # r2   )r,   r   r   rW   r   r	   r   ZIPv6Interface.is_unspecified  s"    xx1}<<!<!<<r   c                sT   < \         SV `  ;'       d    V P                  P                  # rA   )r   r   r   rO  rP  r	   r   ZIPv6Interface.is_loopback  s     w"??t||'?'??r   r  )r   r   r   r   r   r   r   r   r   r   r   r   rT   rx   rz   r0   r   r   r   r   r   r   r|   r   r   r   r	   r   r     s     2 % %+

T  **J% % + + ( ( ) ) = = @ @ @r   r   c                   sD   a  ] tR tRt o ]tRR ltR t]R 4       t	Rt
V tR# )r   i  c                r  )r  c                  r  rA   )r+   r   r   r!  r	   r"  Z&IPv6Network.__init__.<locals>.<lambda>#	  r#  r   N)rt   r   rM   r   r   rK   rm   r   r=   r   r   r$  r%  r	   r   ZIPv6Network.__init__  s    > ,,W5
d*40(,(:(:4(@%doT))*C%%/ !7$!>??'2636t||3D4E (F$ ??t11A56DJ__ 2 22;DJ 3r   c              #  s   "   \        V P                  4      p\        V P                  4      p\        V^,           V^,           4       F  pV P	                  V4      x  K  	  R# 5ir)   r   r   r   r	   r   ZIPv6Network.hosts%	  sQ      d**+../	w{IM2A%%a(( 3s   A!A#c                r   rA   )rM   rI  rF   rW   r   r	   rI  ZIPv6Network.is_site_local1	  s1     $$22 5 5&&44	6r   r'  Nr(  )r   r   r   r   r   r   r   r   rz   rI  r   r|   r}   r   r	   r   r     s+      !N.<`
) 6 6r   r   c                   s   ] tR tRt]! R4      t]! R4      t]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R	4      ]! R
4      ]! R4      ]! R4      ]! R4      ]! R4      .t]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      .t]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R 4      ]! R!4      ]! R"4      .t	]! R#4      t
R$tR%# )&_IPv6ConstantsiA	  z	fe80::/10zff00::/8z::1/128z::/128z::ffff:0:0/96z64:ff9b:1::/48z100::/64z	2001::/23z2001:db8::/32z	2002::/16z	3fff::/20zfc00::/7z2001:1::1/128z2001:1::2/128z2001:3::/32z2001:4:112::/48z2001:20::/28z2001:30::/28z::/8z100::/8z200::/7z400::/6z800::/5z1000::/4z4000::/3z6000::/3z8000::/3zA000::/3zC000::/3zE000::/4zF000::/5zF800::/6zFE00::/9z	fec0::/10r   N)r   r   r   r   r   r   r   r   r   rF  rH  r   r   r   r	   rQ  rQ  A	  s>   $[1$Z0
 	IHO$$%JK O$K K JK 
" 	O$O$M"%&N#N#$  	F[3II 6IJ 7JZ!8JZ!8JZ!8JZ!8J	 %[1r   rQ  r(  )$Z__version__r   r   r>  r   r    r   r   r   r   r   r!   r(   r1   r6   r@   rI   rN   rS   rT   r   Ztotal_orderingr:   rO   r   r   r   r   r   r   r)  r*  r   r   r   rQ  r   r   r	   <module>rR     s    

0
 00
 0S:S:UDC(C (: 4n.b36l2j, j,Z 
hN> hN hNV H4> H4 H4V 
 ) B: B:HS-'< S-l@)K @)FO%'< O%d#2 #2L ( ' m m^	a:'< a:H	H@K H@VY6'< Y6x,2 ,2^ ( ' r   