
    ,hh>                    F   S r SSKrSrSr " S S\5      r " S S\5      rS	 rS1S
 jrS r	S r
S rS rS rS rS rS rS rS r " S S5      rSq\R*                   " S S\5      5       r\R*                   " S S\5      5       r " S S5      r\\l         " S S5      r " S S \\5      r " S! S"\5      r " S# S$\\5      r " S% S&5      r\\l        \\l         " S' S(5      r " S) S*\\5      r  " S+ S,\ 5      r! " S- S.\\5      r" " S/ S05      r#\#\ l        \#\"l        g)2z1.0    N       c                       \ rS rSrSrg)AddressValueError    N__name__
__module____qualname____firstlineno____static_attributes__r       2/opt/python-3.13.8/usr/lib/python3.13/ipaddress.pyr   r           r   r   c                       \ rS rSrSrg)NetmaskValueError   r   Nr	   r   r   r   r   r      r   r   r   c                      [        U 5      $ ! [        [        4 a     Of = f [        U 5      $ ! [        [        4 a     Of = f[	        U < S35      e)Nz. does not appear to be an IPv4 or IPv6 address)IPv4Addressr   r   IPv6Address
ValueErroraddresss    r   
ip_addressr      sg     7##01 7##01  {"PQ
RR   
   
/ AAc                      [        X5      $ ! [        [        4 a     Of = f [        X5      $ ! [        [        4 a     Of = f[	        U < S35      e)Nz. does not appear to be an IPv4 or IPv6 network)IPv4Networkr   r   IPv6Networkr   )r   stricts     r   
ip_networkr!   9   sg     7++01 7++01  {"PQ
RRr   c                      [        U 5      $ ! [        [        4 a     Of = f [        U 5      $ ! [        [        4 a     Of = f[	        U < S35      e)Nz0 does not appear to be an IPv4 or IPv6 interface)IPv4Interfacer   r   IPv6Interfacer   r   s    r   ip_interfacer%   V   sg    *W%%01 W%%01  {"RS
TTr   c                 X     U R                  S5      $ ! [         a    [        S5      ef = f)N   z&Address negative or too large for IPv4to_bytesOverflowErrorr   r   s    r   v4_int_to_packedr+   x   s6    C"" CABBC    )c                 X     U R                  S5      $ ! [         a    [        S5      ef = f)N   z&Address negative or too large for IPv6r(   r   s    r   v6_int_to_packedr/      s6    C## CABBCr,   c                 v    [        U 5      R                  S5      n[        U5      S:  a  [        SU < 35      eU$ )N/   zOnly one '/' permitted in )strsplitlenr   )r   addrs     r   _split_optional_netmaskr7      s9    w<c"D
4y1}"<WK HIIKr   c              #      #    [        U 5      n[        U5      =p#U H)  nUR                  UR                  S-   :w  a  X#4v   UnUnM+     X#4v   g 7fN   )iternext_ip)	addressesitfirstlastips        r   _find_address_rangerC      sV      
iB8E66TXX\!+E	 
 +s   AAc                 R    U S:X  a  U$ [        X) U S-
  -  R                  5       5      $ )Nr   r:   )min
bit_length)numberbitss     r   _count_righthand_zero_bitsrI      s/     {tg*66899r   c              #   r  #    [        U [        5      (       a  [        U[        5      (       d  [        S5      eU R                  UR                  :w  a  [        U < SU< S35      eX:  a  [	        S5      eU R                  S:X  a  [
        nO"U R                  S:X  a  [        nO[	        S5      eU R                  nU R                  nUR                  nXE::  a_  [        [        XC5      XT-
  S-   R                  5       S-
  5      nU" XCU-
  45      nUv   USU-  -  nUS-
  UR                  :X  a  g XE::  a  M^  g g 7f)	Nz1first and last must be IP addresses, not networks and  are not of the same versionz*last IP address must be greater than firstr'      zunknown IP versionr:   )
isinstance_BaseAddress	TypeErrorversionr   r   r   _max_prefixlenr=   rE   rI   rF   	_ALL_ONES)r@   rA   rB   ip_bits	first_intlast_intnbitsnets           r   summarize_address_rangerY      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   D1D75D7c              #   v  #    [        U 5      n0 nU(       aZ  UR                  5       nUR                  5       nUR                  U5      nUc  X2U'   OXS:w  a  X$	 UR	                  U5        U(       a  MZ  S n[        UR                  5       5       H(  nUb  UR                  UR                  :  a  M"  Uv   UnM*     g 7fN)listpopsupernetgetappendsortedvaluesbroadcast_address)r>   to_mergesubnetsrX   r^   existingrA   s          r   _collapse_addresses_internalrg      s     2 IHG
lln<<>;;x( #H_!OOH% ( Dgnn&' %%)>)>>	 (s   A-B91AB9c                 h   / n/ n/ nU  GH#  n[        U[        5      (       aM  U(       a3  US   R                  UR                  :w  a  [        U< SUS   < S35      eUR	                  U5        Mf  UR
                  UR                  :X  aX  U(       a3  US   R                  UR                  :w  a  [        U< SUS   < S35      e UR	                  UR                  5        M  U(       a3  US   R                  UR                  :w  a  [        U< SUS   < S35      eUR	                  U5        GM&     [        [        U5      5      nU(       a.  [        U5       H  u  pVUR                  [        XV5      5        M!     [        X-   5      $ ! [         a     UR	                  UR                  5         GM  f = f)NrK   rL   )rN   rO   _versionrP   r`   
_prefixlenrR   rB   AttributeErrornetwork_addressra   setrC   extendrY   rg   )r>   addrsipsnetsrB   r@   rA   s          r   collapse_addressesrs   0  sq   $ E
CD b,''s2w''2;;6!#SW!. / /JJrN]]b///s2w''2;;6!#SW!. / //

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

2--../s   F%F10F1c                     [        U [        5      (       a  U R                  5       $ [        U [        5      (       a  U R	                  5       $ [
        $ r[   )rN   _BaseNetwork_get_networks_keyrO   _get_address_keyNotImplemented)objs    r   get_mixed_type_keyrz   f  sB    $ #|$$$$&&	C	&	&##%%r   c                       \ rS rSrSr\S 5       r\S 5       r\S 5       r\S 5       r	S r
S r\S	 5       r\S
 5       r\S 5       r\S 5       r\S 5       r\S 5       rS rSrg)_IPAddressBasei  r   c                 "    U R                  5       $ r[   )_explode_shorthand_ip_stringselfs    r   exploded_IPAddressBase.exploded  s     0022r   c                     [        U 5      $ r[   r3   r   s    r   
compressed_IPAddressBase.compressed  s     4yr   c                 "    U R                  5       $ r[   )_reverse_pointerr   s    r   reverse_pointer_IPAddressBase.reverse_pointer  s     $$&&r   c                 6    S[        U 5      4-  n[        U5      e)Nz%200s has no version specifiedtypeNotImplementedErrorr   msgs     r   rQ   _IPAddressBase.version  s    .$t*>!#&&r   c                     US:  a  Sn[        X!U R                  4-  5      eXR                  :  a&  Sn[        X!U R                  U R                  4-  5      eg )Nr   z-%d (< 0) is not permitted as an IPv%d addressz2%d (>= 2**%d) is not permitted as an IPv%d address)r   rj   rS   rR   )r   r   r   s      r   _check_int_address!_IPAddressBase._check_int_address  sa    Q;AC#CDMM*B$BCC^^#FC#CD4G4G+/==+: %: ; ; $r   c                 \    [        U5      nX2:w  a  Sn[        XAUX R                  4-  5      eg )Nz6%r (len %d != %d) is not permitted as an IPv%d address)r5   r   rj   )r   r   expected_lenaddress_lenr   s        r   _check_packed_address$_IPAddressBase._check_packed_address  sA    'l&JC#CK+7+H %H I I 'r   c                 :    U R                   U R                   U-	  -  $ r[   )rS   )cls	prefixlens     r   _ip_int_from_prefix"_IPAddressBase._ip_int_from_prefix  s     }} :;;r   c                     [        UU R                  5      nU R                  U-
  nX-	  nSU-  S-
  nXE:w  a0  U R                  S-  nUR                  US5      nSn[        X-  5      eU$ )Nr:      bigz&Netmask pattern %r mixes zeroes & ones)rI   rR   r)   r   )	r   ip_inttrailing_zeroesr   leading_onesall_onesbyteslendetailsr   s	            r   _prefix_from_ip_int"_IPAddressBase._prefix_from_ip_int  s~     5V585G5GI&&8	0Na'#))Q.Hooh6G:CS]++r   c                 $    SU-  n[        U5      S e)Nz%r is not a valid netmask)r   )r   netmask_strr   s      r   _report_invalid_netmask&_IPAddressBase._report_invalid_netmask  s    )K7$$.r   c                 *   UR                  5       (       a  UR                  5       (       d  U R                  U5         [        U5      nSWs=::  a  U R
                  ::  d  O  U R                  U5        U$ ! [         a    U R                  U5         NIf = fNr   )isasciiisdigitr   intr   rR   )r   prefixlen_strr   s      r   _prefix_from_prefix_string)_IPAddressBase._prefix_from_prefix_string  s     %%''M,A,A,C,C''6	7M*I Y4#"4"44''6	  	7''6	7s   A4 4BBc                 0    U R                  U5      n U R                  W5      $ ! [         a    U R                  U5         N/f = f! [         a     Of = fWU R
                  -  n U R                  U5      $ ! [         a    U R                  U5         g f = fr[   )_ip_int_from_stringr   r   r   r   rS   )r   ip_strr   s      r   _prefix_from_ip_string%_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&A7 7BBc                     [        U[        [        45      (       a  XR                  4$ [        U[        5      (       d  [        U5      n[        U5      S:  a  U$ US   U R                  4$ )Nr:   r   )rN   bytesr   rR   tupler7   r5   )r   r   s     r   _split_addr_prefix!_IPAddressBase._split_addr_prefix  se     gs|,,....'5)) .g6G w<!Nqz3----r   c                 2    U R                   [        U 5      44$ r[   	__class__r3   r   s    r   
__reduce___IPAddressBase.__reduce__-  s    ~~D	|++r   N)r
   r   r   r   	__slots__propertyr   r   r   rQ   r   r   classmethodr   r   r   r   r   r   r   r   r   r   r   r|   r|     s     I3 3   ' ' ' ';I 
< 
<  0 / /  0 0 0B . ..,r   r|   c                   h   ^  \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rU 4S jrSrU =r$ )rO   i3  r   c                     U R                   $ r[   r=   r   s    r   __int___BaseAddress.__int__>  s    xxr   c                      U R                   UR                   :H  =(       a    U R                  UR                  :H  $ ! [         a	    [        s $ f = fr[   )r=   rj   rl   rx   r   others     r   __eq___BaseAddress.__eq__A  sF    	"HH		) 879 	"!!	"s   8; AAc                     [        U[        5      (       d  [        $ U R                  UR                  :w  a  [	        U < SU< S35      eU R
                  UR
                  :w  a  U R
                  UR
                  :  $ gNrK   rL   F)rN   rO   rx   rj   rP   r=   r   s     r   __lt___BaseAddress.__lt__H  sb    %..!!==ENN*!5* + +88uyy 88eii''r   c                 r    [        U[        5      (       d  [        $ U R                  [        U 5      U-   5      $ r[   rN   r   rx   r   r   s     r   __add___BaseAddress.__add__T  -    %%%!!~~c$i%/00r   c                 r    [        U[        5      (       d  [        $ U R                  [        U 5      U-
  5      $ r[   r   r   s     r   __sub___BaseAddress.__sub__Y  r   r   c                 P    U R                   R                  < S[        U 5      < S3$ N()r   r
   r3   r   s    r   __repr___BaseAddress.__repr__^      >>22CI>>r   c                 J    [        U R                  U R                  5      5      $ r[   )r3   _string_from_ip_intr=   r   s    r   __str___BaseAddress.__str__a  s    4++DHH566r   c                 P    [        [        [        U R                  5      5      5      $ r[   )hashhexr   r=   r   s    r   __hash___BaseAddress.__hash__d  s    CDHH&''r   c                     U R                   U 4$ r[   rj   r   s    r   rw   _BaseAddress._get_address_keyg  s    t$$r   c                 4    U R                   U R                  44$ r[   )r   r=   r   s    r   r   _BaseAddress.__reduce__j  s    ~~{**r   c                   > U(       a	  US   S:X  a  [        [        U 5      U5      $ [        c  SS KnUR	                  S5      q[        R                  U5      nU(       d  [        TU ]  U5      $ UR                  5       u  pEnUS:X  a  U R                  S:X  a  SnOSnUS:X  a  U R                  nOU R                  S-  nU(       a
  XwS-  S	-
  -  nU(       a  US
-  n[        [        U 5      U SU U U 35      $ )Nri   sr   z(#?)(_?)([xbnX])nr'   bxr:   r2   0)formatr3   _address_fmt_rerecompile	fullmatchsuper
__format__groupsrj   rR   r   )	r   fmtr   m	alternategroupingfmt_basepadlenr   s	           r   r   _BaseAddress.__format__m  s     c"gn#d)S)) " jj);<O%%c*7%c**()
%	X s?}}!s?((F((A-FkAo%FaKFc$iI;axz(!LMMr   )r
   r   r   r   r   r   r   r   r   r   r   r   r   rw   r   r   r   __classcell__r   s   @r   rO   rO   3  sH     I"1
1
?7(%+/N /Nr   rO   c                      \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS r\R                  S 5       r\R                  S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       rS rS rS rS%S jrS%S jr\S 5       r\S 5       r S r!S r"\S 5       r#\S 5       r$\S  5       r%\S! 5       r&\S" 5       r'\S# 5       r(S$r)g)&ru   i  c                 P    U R                   R                  < S[        U 5      < S3$ r   r   r   s    r   r   _BaseNetwork.__repr__  r   r   c                 8    SU R                   U R                  4-  $ N%s/%d)rm   r   r   s    r   r   _BaseNetwork.__str__  s    $..???r   c              #      #    [        U R                  5      n[        U R                  5      n[        US-   U5       H  nU R	                  U5      v   M     g 7fr9   r   rm   rc   range_address_classr   network	broadcastr   s       r   hosts_BaseNetwork.hosts  sM      d**+../	w{I.A%%a(( /s   AAc              #      #    [        U R                  5      n[        U R                  5      n[        XS-   5       H  nU R	                  U5      v   M     g 7fr9   r  r  s       r   __iter___BaseNetwork.__iter__  sI     d**+../	wA.A%%a(( /s   AAc                    [        U R                  5      n[        U R                  5      nUS:  a&  X!-   U:  a  [        S5      eU R	                  X!-   5      $ US-  nX1-   U:  a  [        S5      eU R	                  X1-   5      $ )Nr   zaddress out of ranger:   )r   rm   rc   
IndexErrorr  )r   r   r  r  s       r   __getitem___BaseNetwork.__getitem__  s    d**+../	6{Y& !788&&w{33FA}w& !788&&y}55r   c                 `   [        U[        5      (       d  [        $ U R                  UR                  :w  a  [	        U < SU< S35      eU R
                  UR
                  :w  a  U R
                  UR
                  :  $ U R                  UR                  :w  a  U R                  UR                  :  $ gr   )rN   ru   rx   rj   rP   rm   netmaskr   s     r   r   _BaseNetwork.__lt__  s    %..!!==ENN*!5* + +5#8#88''%*?*???<<5==(<<%--//r   c                     U R                   UR                   :H  =(       aK    U R                  UR                  :H  =(       a+    [        U R                  5      [        UR                  5      :H  $ ! [         a	    [
        s $ f = fr[   )rj   rm   r   r#  rl   rx   r   s     r   r   _BaseNetwork.__eq__  sk    	"MMU^^3 <((E,A,AA<%U]]);;=  	"!!	"s   A*A- -B ?B c                 h    [        [        U R                  5      [        U R                  5      45      $ r[   )r   r   rm   r#  r   s    r   r   _BaseNetwork.__hash__  s&    S--.DLL0ABCCr   c                     U R                   UR                   :w  a  g[        U[        5      (       a  gUR                  U R                  R                  -  U R
                  R                  :H  $ NF)rj   rN   ru   r=   r#  rm   r   s     r   __contains___BaseNetwork.__contains__  sQ    ==ENN*e\** 99t||///43G3G3K3KKKr   c                     U R                   U;   =(       d;    U R                  U;   =(       d%    UR                   U ;   =(       d    UR                  U ;   $ r[   rm   rc   r   s     r   overlaps_BaseNetwork.overlaps  sN    ##u, 7""e+ 6%%- 5++t3	7r   c                 v    U R                  [        U R                  5      [        U R                  5      -  5      $ r[   )r  r   rm   hostmaskr   s    r   rc   _BaseNetwork.broadcast_address  s3    ""3t';';#<#&t}}#5$6 7 	7r   c                 d    U R                  [        U R                  5      U R                  -  5      $ r[   )r  r   r#  rS   r   s    r   r2  _BaseNetwork.hostmask  s%    ""3t||#4t~~#EFFr   c                 8    SU R                   U R                  4-  $ r  )rm   rk   r   s    r   with_prefixlen_BaseNetwork.with_prefixlen  s    $..@@@r   c                 <    U R                   < SU R                  < 3$ Nr1   )rm   r#  r   s    r   with_netmask_BaseNetwork.with_netmask  s    ..==r   c                 <    U R                   < SU R                  < 3$ r:  )rm   r2  r   s    r   with_hostmask_BaseNetwork.with_hostmask  s    ..>>r   c                 ^    [        U R                  5      [        U R                  5      -
  S-   $ r9   )r   rc   rm   r   s    r   num_addresses_BaseNetwork.num_addresses  s*     4))*S1E1E-FFJJr   c                 6    S[        U 5      4-  n[        U5      e)Nz%%200s has no associated address classr   r   s     r   r  _BaseNetwork._address_class  s    
 6dE!#&&r   c                     U R                   $ r[   )rk   r   s    r   r   _BaseNetwork.prefixlen  s    r   c              #     #    U R                   UR                   :X  d  [        U < SU< S35      e[        U[        5      (       d  [        SU-  5      eUR	                  U 5      (       d  [        U< SU < 35      eX:X  a  g UR                  UR                  < SUR                  < 35      nU R                  5       u  p#X!:w  a  X1:w  a}  UR	                  U5      (       a  Uv   UR                  5       u  p#ODUR	                  U5      (       a  Uv   UR                  5       u  p#O[        SU< SU< SU< 35      eX!:w  a  X1:w  a  M}  X!:X  a  Uv   g X1:X  a  Uv   g [        SU< SU< SU< 35      e7f)	NrK   rL   z%s is not a network objectz not contained in r1   z Error performing exclusion: s1: z s2: z other: )rj   rP   rN   ru   	subnet_ofr   r   rm   r   re   AssertionError)r   r   s1s2s       r   address_exclude_BaseNetwork.address_exclude  sO    H }}.!5* + + %..85@AAt$$EFF= 5+@+@+0??!< = kbkr""B$$B %&("e&5 6 6 kbk ;H[H !"$b%"1 2 2s   EE1+E1c                 6   U R                   UR                   :w  a  [        U < SU< S35      eU R                  UR                  :  a  gU R                  UR                  :  a  gU R                  UR                  :  a  gU R                  UR                  :  a  gg)NrK   z are not of the same typeri   r:   r   )rj   rP   rm   r#  r   s     r   compare_networks_BaseNetwork.compare_networksg  s    B ==ENN*!5* + + %"7"77%"7"77<<%--'<<%--'r   c                 H    U R                   U R                  U R                  4$ r[   )rj   rm   r#  r   s    r   rv   _BaseNetwork._get_networks_key  s     t33T\\BBr   Nc              #      #    U R                   U R                  :X  a  U v   g Ub9  X R                   :  a  [        S5      eUS:w  a  [        S5      eX R                   -
  nUS:  a  [        S5      eU R                   U-   nX0R                  :  a  [        SX04-  5      e[        U R                  5      n[        U R
                  5      S-   n[        U R                  5      S-   U-	  n[        XEU5       H  nU R                  Xs45      nUv   M     g 7f)Nznew prefix must be longerr:   (cannot set prefixlen_diff and new_prefixr   zprefix length diff must be > 0z0prefix length diff %d is invalid for netblock %s)	rk   rR   r   r   rm   rc   r2  r  r   )	r   prefixlen_diff
new_prefixnew_prefixlenstartendstepnew_addrcurrents	            r   re   _BaseNetwork.subnets  s    4 ??d111J!OO+ !<==" !KLL'//9NA=>>.8...B!F) )* * D(()$(()A-DMM"Q&>9e$/Hnnh%>?GM 0s   DDc                 |   U R                   S:X  a  U $ Ub:  X R                   :  a  [        S5      eUS:w  a  [        S5      eU R                   U-
  nU R                  U-
  nUS:  a  [        SU R                  U4-  5      eU R                  [	        U R
                  5      [	        U R                  5      U-  -  U45      $ )Nr   znew prefix must be shorterr:   rT  z;current prefixlen is %d, cannot have a prefixlen_diff of %d)rk   r   r   r   r   rm   r#  )r   rU  rV  rW  s       r   r^   _BaseNetwork.supernet  s    * ??aK!OO+ !=>>" !KLL!__z9N71M012 2 ~~$$%T\\):n)LM  	r   c                 h    U R                   R                  =(       a    U R                  R                  $ r[   )rm   is_multicastrc   r   s    r   ra  _BaseNetwork.is_multicast  s,     $$11 4&&33	5r   c                 
    U R                   UR                   :w  a  [        U  SU S35      eUR                  U R                  :*  =(       a    UR                  U R                  :  $ ! [         a    [        SU  SU 35      ef = f)NrK   rL   z*Unable to test subnet containment between )rj   rP   rm   rc   rl   )ar   s     r   _is_subnet_of_BaseNetwork._is_subnet_of  s    	4zzQZZ'1#U1#-I JKK%%):):: ?''1+>+>>@ 	4 ''(cqc3 4 4	4s   A#A& &Bc                 $    U R                  X5      $ r[   re  r   s     r   rH  _BaseNetwork.subnet_of  s    !!$..r   c                 $    U R                  X5      $ r[   rh  r   s     r   supernet_of_BaseNetwork.supernet_of  s    !!%..r   c                 h    U R                   R                  =(       a    U R                  R                  $ r[   )rm   is_reservedrc   r   s    r   rn  _BaseNetwork.is_reserved  ,     $$00 3&&22	4r   c                 h    U R                   R                  =(       a    U R                  R                  $ r[   )rm   is_link_localrc   r   s    r   rr  _BaseNetwork.is_link_local+  s,     $$22 5&&44	6r   c                    ^  [        U 4S jT R                  R                   5       5      =(       a)    [        U 4S jT R                  R                   5       5      $ )Nc              3   n   >#    U  H*  nTR                   U;   =(       a    TR                  U;   v   M,     g 7fr[   r.  ).0priv_networkr   s     r   	<genexpr>*_BaseNetwork.is_private.<locals>.<genexpr>?  s<      J'H| ''<7 :))\9:'H   25c              3   n   >#    U  H*  nTR                   U;  =(       a    TR                  U;  v   M,     g 7fr[   r.  )rv  r  r   s     r   rx  ry  A  s?      R $P ((7 :**'9:#Orz  any
_constants_private_networksall_private_networks_exceptionsr   s   `r   
is_private_BaseNetwork.is_private6  sU      J'+'H'HJ J NQ R $(??#O#OR O	r   c                 $    U R                   (       + $ r[   )r  r   s    r   	is_global_BaseNetwork.is_globalG  s     ??""r   c                 h    U R                   R                  =(       a    U R                  R                  $ r[   )rm   is_unspecifiedrc   r   s    r   r  _BaseNetwork.is_unspecifiedR  s,     $$33 6&&55	7r   c                 h    U R                   R                  =(       a    U R                  R                  $ r[   )rm   is_loopbackrc   r   s    r   r  _BaseNetwork.is_loopback^  rp  r   r   )r:   N)*r
   r   r   r   r   r   r  r  r   r   r   r   r+  r/  	functoolscached_propertyrc   r2  r   r7  r;  r>  rA  r  r   rL  rO  rv   re   r^   ra  staticmethodre  rH  rk  rn  rr  r  r  r  r  r   r   r   r   ru   ru     s   ?@
))6
"D
L7 7 7 G G A A > > ? ? K K ' '  I2V.`C3j'R 	5 	5 	4 	4// 	4 	4 6 6    # # 	7 	7 	4 	4r   ru   c                       \ rS rSr/ rSrg)_BaseConstantsik  r   N)r
   r   r   r   r  r   r   r   r   r  r  k  s    r   r  c                       \ rS rSrSrSrS\-  S-
  r\r0 r	S r
\S 5       r\S 5       r\S	 5       r\S
 5       rS r\S 5       r\S 5       rSrg)_BaseV4is  r   r'   r2   r:   c                     [        U 5      $ r[   r   r   s    r   r~   $_BaseV4._explode_shorthand_ip_string  s    4yr   c                 |   XR                   ;  a~  [        U[        5      (       a-  UnSUs=::  a  U R                  ::  d  O  U R	                  U5        O U R                  U5      n[        U R                  U5      5      nX24U R                   U'   U R                   U   $ ! [         a    U R                  U5      n NVf = fr   )
_netmask_cacherN   r   rR   r   r   r   r   r   r   r   argr   r#  s       r   _make_netmask_BaseV4._make_netmask  s     (((#s##	Y<#*<*<<//	:@ # > >s CI
 "#"9"9)"DEG&-&8Cs#!!#&& ) @ !$ : :3 ?I@s   B B;:B;c                 "   U(       d  [        S5      eUR                  S5      n[        U5      S:w  a  [        SU-  5      e [        R	                  [        U R                  U5      S5      $ ! [         a  n[        U< SU< 35      S eS nAff = f)NAddress cannot be empty.r'   zExpected 4 octets in %rr    in )r   r4   r5   r   
from_bytesmap_parse_octetr   )r   r   octetsexcs       r   r   _BaseV4._ip_int_from_string  s     #$=>>c"v;!#$=$FGG	J>>#c&6&6"?GG 	J##v$>?TI	Js   )A, ,
B6B		Bc                 T   U(       d  [        S5      eUR                  5       (       a  UR                  5       (       d  Sn[        X!-  5      e[        U5      S:  a  Sn[        X!-  5      eUS:w  a  US   S:X  a  Sn[        X!-  5      e[	        US5      nUS	:  a  [        S
U-  5      eU$ )NzEmpty octet not permittedz#Only decimal digits permitted in %r   z$At most 3 characters permitted in %rr   r   z%Leading zeros are not permitted in %r
      zOctet %d (> 255) not permitted)r   r   r   r5   r   )r   	octet_strr   	octet_ints       r   r  _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                  [        [        UR                  SS5      5      5      $ )Nr  r'   r   )joinr  r3   r)   )r   r   s     r   r   _BaseV4._string_from_ip_int  s%     xxCE!:;<<r   c                 j    [        U 5      R                  S5      S S S2   nSR                  U5      S-   $ )Nr  ri   z.in-addr.arpa)r3   r4   r  )r   reverse_octetss     r   r   _BaseV4._reverse_pointer  s3     T-dd3xx'/99r   c                     U R                   $ r[   rR   r   s    r   max_prefixlen_BaseV4.max_prefixlen      """r   c                     U R                   $ r[   r   r   s    r   rQ   _BaseV4.version      }}r   N)r
   r   r   r   r   rj   
IPV4LENGTHrS   rR   r  r~   r   r  r   r  r   r   r   r  rQ   r   r   r   r   r  r  s  s     IHJ!#IN N ' '2 J J2 ! !F 
= 
=: # #  r   r  c                       \ rS rSrSrS r\S 5       r\S 5       r\\	R                  " 5       S 5       5       r\\	R                  " 5       S 5       5       r\S 5       r\S	 5       r\S
 5       r\S 5       r\S 5       rSrg)r   i   )r=   __weakref__c                 N   [        U[        5      (       a  U R                  U5        Xl        g [        U[        5      (       a-  U R                  US5        [        R                  U5      U l        g [        U5      nSU;   a  [        SU< 35      eU R                  U5      U l        g )Nr'   r1   Unexpected '/' in )
rN   r   r   r=   r   r   r  r3   r   r   r   r   addr_strs      r   __init__IPv4Address.__init__  s    " gs####G,H gu%%&&w2~~g.DH w<(?#&8$DEE++H5r   c                 ,    [        U R                  5      $ r[   )r+   r=   r   s    r   packedIPv4Address.packed)        ))r   c                 2    X R                   R                  ;   $ r[   )r~  _reserved_networkr   s    r   rn  IPv4Address.is_reserved.  s     8888r   c                    ^  [        U 4S jT R                  R                   5       5      =(       a)    [        U 4S jT R                  R                   5       5      $ )Nc              3   .   >#    U  H
  nTU;   v   M     g 7fr[   r   rv  rX   r   s     r   rx  )IPv4Address.is_private.<locals>.<genexpr>K       I'H'H   c              3   .   >#    U  H
  nTU;  v   M     g 7fr[   r   r  s     r   rx  r  L       \/[DO/[r  r|  r   s   `r   r  IPv4Address.is_private9  s@    $ It'H'HII ]\t/[/[\\	
r   c                 b    X R                   R                  ;  =(       a    U R                  (       + $ r[   )r~  _public_networkr  r   s    r   r  IPv4Address.is_globalO  s#      ??:::R4???RRr   c                 2    X R                   R                  ;   $ r[   )r~  _multicast_networkr   s    r   ra  IPv4Address.is_multicasta  s     9999r   c                 2    X R                   R                  :H  $ r[   )r~  _unspecified_addressr   s    r   r  IPv4Address.is_unspecifiedl  s     ;;;;r   c                 2    X R                   R                  ;   $ r[   )r~  _loopback_networkr   s    r   r  IPv4Address.is_loopbackw  s     8888r   c                 2    X R                   R                  ;   $ r[   )r~  _linklocal_networkr   s    r   rr  IPv4Address.is_link_local  s     9999r   c                     [        SU  35      $ )Nz::ffff:r   r   s    r   ipv6_mappedIPv4Address.ipv6_mapped  s     WTF+,,r   r   N)r
   r   r   r   r   r  r   r  rn  r  	lru_cacher  r  ra  r  r  rr  r  r   r   r   r   r   r      s     'I!6F * * 9 9 
  
( S  S  : : < < 9 9 : : - -r   r   c                       \ rS rSrS r\R                  S 5       rS rS r	S r
S r\R                  r\S 5       r\S	 5       r\S
 5       r\S 5       rSrg)r#   i  c                     U R                  U5      u  p#[        R                  X5        [        X#4SS9U l        U R                  R
                  U l        U R                  R                  U l        g NF)r    )r   r   r  r   r  r#  rk   r   r   r6   masks       r   r  IPv4Interface.__init__  T    ,,W5
T("D<>||++,,11r   c                 .    U R                   R                  $ r[   r  r2  r   s    r   r2  IPv4Interface.hostmask      ||$$$r   c                 V    SU R                  U R                  5      U R                  4-  $ r  r   r=   rk   r   s    r   r   IPv4Interface.__str__  s,    $22488<//+ + 	+r   c                     [         R                  X5      nU[        L d  U(       d  U$  U R                  UR                  :H  $ ! [         a     gf = fr*  )r   r   rx   r  rl   r   r   address_equals      r   r   IPv4Interface.__eq__  N    #**47N*-  	<<5==00 	 		   A 
AAc                     [         R                  X5      nU[        L a  [        $  U R                  UR                  :  =(       d"    U R                  UR                  :H  =(       a    U$ ! [         a     gf = fr*  )r   r   rx   r  rl   r   r   address_lesss      r   r   IPv4Interface.__lt__  sj    "))$6>)!!	LL5==0 CLLEMM1BlD 	 	s   AA( (
A54A5c                     [        U R                  U R                  [        U R                  R
                  5      45      $ r[   r   r=   rk   r   r  rm   r   s    r   r   IPv4Interface.__hash__  +    TXXtDLL4P4P0QRSSr   c                 ,    [        U R                  5      $ r[   )r   r=   r   s    r   rB   IPv4Interface.ip      488$$r   c                 Z    U R                  U R                  5      < SU R                  < 3$ r:  r  r   s    r   r7  IPv4Interface.with_prefixlen  %    22488<//+ 	+r   c                 Z    U R                  U R                  5      < SU R                  < 3$ r:  r   r=   r#  r   s    r   r;  IPv4Interface.with_netmask  %    22488<,,( 	(r   c                 Z    U R                  U R                  5      < SU R                  < 3$ r:  r   r=   r2  r   s    r   r>  IPv4Interface.with_hostmask  %    22488<--) 	)r   rk   r#  r  N)r
   r   r   r   r  r  r  r2  r   r   r   r   r|   r   r   rB   r7  r;  r>  r   r   r   r   r#   r#     s    2 % %+

T  **J% % + + ( ( ) )r   r#   c                   Z    \ rS rSr\rSS jr\\R                  " 5       S 5       5       r
Srg)r   i  c                   ^ U R                  U5      u  mn[        T5      U l        U R                  U5      u  U l        U l        [        U R                  5      nU[        U R                  5      -  U:w  a;  U(       a  [        SU -  5      e[        U[        U R                  5      -  5      U l        U R
                  U R                  S-
  :X  a  U R                  U l
        g U R
                  U R                  :X  a  U4S jU l
        g g )N%s has host bits setr:   c                     > [        T 5      /$ r[   )r   r6   s   r   <lambda>&IPv4Network.__init__.<locals>.<lambda>      +d"3!4r   )r   r   rm   r  r#  rk   r   r   rR   r  r  r   r   r    r  r  r6   s        @r   r  IPv4Network.__init__  s    F ,,W5
d*40(,(:(:4(@%doT))*C%%/ !7$!>??'2636t||3D4E (F$ ??t22Q67DJ__!4!454DJ 6r   c                     U R                   [        S5      ;   =(       a    U R                  [        S5      ;   (       + =(       a    U R                  (       + $ )N100.64.0.0/10)rm   r   rc   r  r   s    r   r  IPv4Network.is_global  sJ     ))[-II K**k/.JJL $OO#	%r   rk   r  r#  rm   NT)r
   r   r   r   r   r  r  r   r  r  r  r   r   r   r   r   r     s4     !N25h 
%  
%r   r   c                   \   \ rS rSr\" S5      r\" S5      r\" S5      r\" S5      r\" S5      \" S5      \" S5      \" S5      \" S5      \" S	5      \" S
5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      /r	\" S5      \" S5      /r
\" S5      r\" S5      rSrg)_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                       \ rS rSrSrSrS\-  S-
  rSr\	" S5      r
\r0 r\S 5       r\S	 5       r\S
 5       r\S 5       r\SS j5       rS rS r\S 5       r\S 5       r\S 5       rSrg)_BaseV6iU  r   rM   r2   r:   r   0123456789ABCDEFabcdefc                 8   XR                   ;  a}  [        U[        5      (       a-  UnSUs=::  a  U R                  ::  d  O  U R	                  U5        OU R                  U5      n[        U R                  U5      5      nX24U R                   U'   U R                   U   $ r   )r  rN   r   rR   r   r   r   r   r  s       r   r  _BaseV6._make_netmaski  s     (((#s##	Y<#*<*<<//	:::3?	!#"9"9)"DEG&-&8Cs#!!#&&r   c                 <   U(       d  [        S5      e[        U5      S:  a<  Un[        U5      S:  a  US S  S[        U5      S-
   SUSS   3n[        SU< 35      eU R                  S	-   nUR                  S
US9nSn[        U5      U:  a  SXQ4-  n[        U5      eSUS   ;   aU   [	        UR                  5       5      R                  nUR                  SUS-	  S-  -  5        UR                  SUS-  -  5        [        U5      U:  a  SUS	-
  U4-  n[        U5      eS n	[        S	[        U5      S	-
  5       H#  n
XJ   (       a  M  U	b  SU-  n[        U5      eU
n	M%     U	b  U	n[        U5      U	-
  S	-
  nUS   (       d  US	-  nU(       a  Sn[        Xa-  5      eUS   (       d  US	-  nU(       a  Sn[        Xa-  5      eU R                  X-   -
  nUS	:  a  Sn[        X`R                  S	-
  U4-  5      eOu[        U5      U R                  :w  a  Sn[        X`R                  U4-  5      eUS   (       d  Sn[        Xa-  5      eUS   (       d  Sn[        Xa-  5      e[        U5      nSnSn Sn[        U5       H  n
US-  nXR                  XJ   5      -  nM     USU-  -  n[        U* S5       H  n
US-  nXR                  XJ   5      -  nM     U$ ! [          a  n[        U< SU< 35      S eS nAff = f! [         a  n[        U< SU< 35      S eS nAff = f)Nr  -   d   r   Z   z chars elided)iz"At most 45 characters expected in r:   :)maxsplitr  z At least %d parts expected in %rr  ri   r  %xr.     z!At most %d colons permitted in %rz At most one '::' permitted in %rr   z0Leading ':' 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 %r)r   r5   _HEXTET_COUNTr4   r   r]   r=   r`   r  _parse_hextetr   )r   r   shorten
_max_partsparts
_min_partsr   ipv4_intr  
skip_indexiparts_hiparts_loparts_skippedr   s                  r   r   _BaseV6._ip_int_from_string}  s    #$=>>v;G7|c!#CR[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8ALC+CL999AMC+CL99--1DEMq G'/@/@/BF.K(KLL ! 5zS...D'/@/@&.I(IJJ8H'559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   )#K .A%K9 
K6K11K69
LLLc                     U R                   R                  U5      (       d  [        SU-  5      e[        U5      S:  a  Sn[        X!-  5      e[	        US5      $ )NzOnly hex digits permitted in %rr'   z$At most 4 characters permitted in %rr.   )_HEX_DIGITS
issupersetr   r5   r   )r   
hextet_strr   s      r   r2  _BaseV6._parse_hextet  sX      ))*55>KLL z?Q8CS-..:r""r   c                     SnSnSnSn[        U5       H)  u  pgUS:X  a  US-  nUS:X  a  UnXS:  a  UnUnM#  M%  SnSnM+     US:  a+  UU-   nU[        U5      :X  a  US/-  nS/XU& US:X  a  S/U-   nU$ )Nri   r   r   r:    )	enumerater5   )	r   hextetsbest_doublecolon_startbest_doublecolon_lendoublecolon_startdoublecolon_lenindexhextetbest_doublecolon_ends	            r   _compress_hextets_BaseV6._compress_hextets  s    " "$ &w/ME}1$$*(-%"9+:(->* :
 #$$&! 0  !#$:$8%9  $s7|3B4DF4G+?@%*$.r   Nc           
         Uc  [        U R                  5      nXR                  :  a  [        S5      eSU-  n[	        SSS5       Vs/ s H  nS[        X#US-    S5      -  PM     nnU R                  U5      nSR                  U5      $ s  snf )	NzIPv6 address is too large%032xr   r   r'   r/  r.   r-  )r   r=   rS   r   r  rN  r  )r   r   hex_strr   rF  s        r   r   _BaseV6._string_from_ip_int8  s     >\FMM!899F";@B?K?a4#g!nb11?K''0xx   Ls   B	c                    [        U [        5      (       a  [        U R                  5      nO6[        U [        5      (       a  [        U R
                  5      nO[        U 5      nU R                  U5      nSU-  n[        SSS5       Vs/ s H	  oCXDS-    PM     nn[        U [        [        45      (       a   SSR                  U5      U R                  4-  $ SR                  U5      $ s  snf )NrQ  r   r   r'   r  r-  )rN   r   r3   rm   r$   rB   r   r  ru   r  rk   )r   r   r   rR  r   r5  s         r   r~   $_BaseV6._explode_shorthand_ip_stringR  s     dK((--.Fm,,\FYF))&1F").q"a9AQ39d\=9::chhuot???xx :s   C%c                 n    U R                   S S S2   R                  SS5      nSR                  U5      S-   $ )Nri   r-  rD  r  	.ip6.arpa)r   replacer  )r   reverse_charss     r   r   _BaseV6._reverse_pointerg  s7     dd+33C<xx&44r   c                 ~    U R                  S5      u  pnU(       d  S nX4$ U(       a  SU;   a  [        SU -  5      eX4$ )N%zInvalid IPv6 address: "%r")	partitionr   )r   r6   sepscope_ids       r   _split_scope_id_BaseV6._split_scope_idp  sO     %..s38H ~ SH_#$@6$IJJ~r   c                     U R                   $ r[   r  r   s    r   r  _BaseV6.max_prefixlen  r  r   c                     U R                   $ r[   r   r   s    r   rQ   _BaseV6.version  r  r   r[   )r
   r   r   r   r   rj   
IPV6LENGTHrS   r1  	frozensetr?  rR   r  r   r  r   r2  rN  r   r~   r   r  r`  r   r  rQ   r   r   r   r   r%  r%  U  s     IHJ!#IM45KN N' '& nJ nJ` # #2 - -^ ! !2*5  & # #  r   r%  c                   `  ^  \ rS rSrSrS rU 4S jrU 4S jrS rU 4S jr	S r
U 4S	 jrS
 r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\\R*                  " 5       S 5       5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       rSrU =r$ )r   i  )r=   	_scope_idr  c                    [        U[        5      (       a  U R                  U5        Xl        S U l        g [        U[
        5      (       a5  U R                  US5        [        R                  US5      U l        S U l        g [        U5      nSU;   a  [        SU< 35      eU R                  U5      u  o l        U R                  U5      U l        g )Nr.   r   r1   r  )rN   r   r   r=   ri  r   r   r  r3   r   r`  r   r  s      r   r  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                 r   > U R                   nUc  [        TU ]	  5       $ Sn[        TU ]	  5       nUS U  U< 3$ )N   )ipv4_mappedr   r~   )r   rn  
prefix_lenraw_exploded_strr   s       r   r~   (IPv6Address._explode_shorthand_ip_string  sL    &&7799
 7?A";J/0@@r   c                    > U R                   nUc  [        TU ]	  5       $ Sn[        TU ]  5       S U nUR                  nU US 3S S S2   R                  SS5      nSR                  U5      S-   $ )Nrm  008xri   r-  rD  r  rW  )rn  r   r   r~   r=   rX  r  )r   rn  ro  rp  r7  rY  r   s         r   r   IPv6Address._reverse_pointer  s    &&7+--
 7?A+:N??+,XdO<TrTBJJ3PRSxx&44r   c                     U R                   nUc  [        S[        U 5      -  5      eU R                  S-	  nU R	                  U5      < S[        U5      < 3$ )Nz0Can not apply to non-IPv4-mapped IPv6 address %sr   r-  )rn  r   r3   r=   r   )r   rn  high_order_bitss      r   _ipv4_mapped_ipv6_to_str$IPv6Address._ipv4_mapped_ipv6_to_str  sU     &&#$VY\]aYb$bcc((b.22?CSEUVVr   c                    > U R                   nUc  [        TU ]	  5       nOU R                  5       nU R                  (       a  US-   U R                  -   $ U$ )Nr\  )rn  r   r   rw  ri  )r   rn  r   r   s      r   r   IPv6Address.__str__  sL    &&W_&F224F04v|dnn,JFJr   c                 D    [        U R                  U R                  45      $ r[   )r   r=   ri  r   s    r   r   IPv6Address.__hash__  s    TXXt~~.//r   c                    > [         TU ]  U5      nU[        L a  [        $ U(       d  gU R                  [	        USS 5      :H  $ )NFri  )r   r   rx   ri  getattr)r   r   r  r   s      r   r   IPv6Address.__eq__  s=    u-N*!!~~T!BBBr   c                 2    U R                   [        U 5      44$ r[   r   r   s    r   r   IPv6Address.__reduce__  s    T--r   c                     U R                   $ r[   )ri  r   s    r   r_  IPv6Address.scope_id  s     ~~r   c                 ,    [        U R                  5      $ r[   )r/   r=   r   s    r   r  IPv6Address.packed  r  r   c                 h    U R                   nUb  UR                  $ X R                  R                  ;   $ r[   )rn  ra  r~  r  r   rn  s     r   ra  IPv6Address.is_multicast  s4     &&"+++9999r   c                    ^  T R                   nUb  UR                  $ [        U 4S jT R                  R                   5       5      $ )Nc              3   .   >#    U  H
  nTU;   v   M     g 7fr[   r   )rv  r   r   s     r   rx  *IPv6Address.is_reserved.<locals>.<genexpr>!  s     I&H419&Hr  )rn  rn  r}  r~  _reserved_networksr  s   ` r   rn  IPv6Address.is_reserved  s=     &&"***Idoo&H&HIIIr   c                 h    U R                   nUb  UR                  $ X R                  R                  ;   $ r[   )rn  rr  r~  r  r  s     r   rr  IPv6Address.is_link_local#  s4     &&",,,9999r   c                 2    X R                   R                  ;   $ r[   )r~  _sitelocal_networkr   s    r   is_site_localIPv6Address.is_site_local0  s     9999r   c                    ^  T R                   nUb  UR                  $ [        U 4S jT R                  R                   5       5      =(       a)    [        U 4S jT R                  R                   5       5      $ )Nc              3   .   >#    U  H
  nTU;   v   M     g 7fr[   r   r  s     r   rx  )IPv6Address.is_private.<locals>.<genexpr>S  r  r  c              3   .   >#    U  H
  nTU;  v   M     g 7fr[   r   r  s     r   rx  r  T  r  r  )rn  r  r}  r~  r  r  r  r  s   ` r   r  IPv6Address.is_private>  s]    " &&")))It'H'HII ]\t/[/[\\	
r   c                 Z    U R                   nUb  UR                  $ U R                  (       + $ r[   )rn  r  r  r  s     r   r  IPv6Address.is_globalW  s.     &&"(((??""r   c                 V    U R                   nUb  UR                  $ U R                  S:H  $ r   )rn  r  r=   r  s     r   r  IPv6Address.is_unspecifiedk  s/     &&"---xx1}r   c                 V    U R                   nUb  UR                  $ U R                  S:H  $ r9   )rn  r  r=   r  s     r   r  IPv6Address.is_loopbacky  s/     &&"***xx1}r   c                 Z    U R                   S-	  S:w  a  g [        U R                   S-  5      $ )Nr   r0      r=   r   r   s    r   rn  IPv6Address.ipv4_mapped  s+     HHNv%488j011r   c                     U R                   S-	  S:w  a  g [        U R                   S-	  S-  5      [        U R                   ) S-  5      4$ )N`   i   @   r  r  r   s    r   teredoIPv6Address.teredo  sI     HHNz)TXX^z9:TXXI
235 	5r   c                 `    U R                   S-	  S:w  a  g [        U R                   S-	  S-  5      $ )Np   i   P   r  r  r   s    r   	sixtofourIPv6Address.sixtofour  s/     HHO&DHHNj899r   )r=   ri  )r
   r   r   r   r   r  r~   r   rw  r   r   r   r   r   r_  r  ra  rn  rr  r  r  r  r  r  r  r  rn  r  r  r   r	  r
  s   @r   r   r     sN    4I&6PA	5W$K0C. 	 	 * * : : J J 
: 
: : : 
  
. # #&     
2 
2 5 5 
: 
:r   r   c                      ^  \ rS rSrS r\R                  S 5       rU 4S jrS r	S r
S r\R                  r\S 5       r\S	 5       r\S
 5       r\S 5       r\S 5       r\U 4S j5       rSrU =r$ )r$   i  c                     U R                  U5      u  p#[        R                  X5        [        X#4SS9U l        U R                  R
                  U l        U R                  R                  U l        g r  )r   r   r  r   r  r#  rk   r  s       r   r  IPv6Interface.__init__  r  r   c                 .    U R                   R                  $ r[   r  r   s    r   r2  IPv6Interface.hostmask  r  r   c                 >   > S[         TU ]  5       U R                  4-  $ r  )r   r   rk   r   r   s    r   r   IPv6Interface.__str__  s%    %'/+//+ + 	+r   c                     [         R                  X5      nU[        L d  U(       d  U$  U R                  UR                  :H  $ ! [         a     gf = fr*  )r   r   rx   r  rl   r  s      r   r   IPv6Interface.__eq__  r  r  c                     [         R                  X5      nU[        L a  U$  U R                  UR                  :  =(       d"    U R                  UR                  :H  =(       a    U$ ! [         a     gf = fr*  )r   r   rx   r  rl   r  s      r   r   IPv6Interface.__lt__  sj    "))$6>)	LL5==0 CLLEMM1BlD 	 	s   AA$ $
A10A1c                     [        U R                  U R                  [        U R                  R
                  5      45      $ r[   r  r   s    r   r   IPv6Interface.__hash__  r  r   c                 ,    [        U R                  5      $ r[   )r   r=   r   s    r   rB   IPv6Interface.ip  r  r   c                 Z    U R                  U R                  5      < SU R                  < 3$ r:  r  r   s    r   r7  IPv6Interface.with_prefixlen  r	  r   c                 Z    U R                  U R                  5      < SU R                  < 3$ r:  r  r   s    r   r;  IPv6Interface.with_netmask  r  r   c                 Z    U R                  U R                  5      < SU R                  < 3$ r:  r  r   s    r   r>  IPv6Interface.with_hostmask  r  r   c                 Z    U R                   S:H  =(       a    U R                  R                  $ r   )r=   r  r  r   s    r   r  IPv6Interface.is_unspecified  s    xx1}<!<!<<r   c                 R   > [         TU ]  =(       a    U R                  R                  $ r[   )r   r  r  r  s    r   r  IPv6Interface.is_loopback  s    w"?t||'?'??r   r  )r
   r   r   r   r  r  r  r2  r   r   r   r   r|   r   r   rB   r7  r;  r>  r  r  r   r	  r
  s   @r   r$   r$     s    2 % %+

T  **J% % + + ( ( ) ) = = @ @r   r$   c                   8    \ rS rSr\rSS jrS r\S 5       r	Sr
g)r   i  c                   ^ U R                  U5      u  mn[        T5      U l        U R                  U5      u  U l        U l        [        U R                  5      nU[        U R                  5      -  U:w  a;  U(       a  [        SU -  5      e[        U[        U R                  5      -  5      U l        U R
                  U R                  S-
  :X  a  U R                  U l
        g U R
                  U R                  :X  a  U4S jU l
        g g )Nr  r:   c                     > [        T 5      /$ r[   r  r  s   r   r  &IPv6Network.__init__.<locals>.<lambda>:	  r  r   )r   r   rm   r  r#  rk   r   r   rR   r  r  r  s        @r   r  IPv6Network.__init__	  s    > ,,W5
d*40(,(:(:4(@%doT))*C%%/ !7$!>??'2636t||3D4E (F$ ??t22Q67DJ__ 3 334DJ 4r   c              #      #    [        U R                  5      n[        U R                  5      n[        US-   US-   5       H  nU R	                  U5      v   M     g 7fr9   r  r  s       r   r  IPv6Network.hosts<	  sQ      d**+../	w{IM2A%%a(( 3s   AAc                 h    U R                   R                  =(       a    U R                  R                  $ r[   )rm   r  rc   r   s    r   r  IPv6Network.is_site_localH	  s,     $$22 5&&44	6r   r   Nr!  )r
   r   r   r   r   r  r  r  r   r  r   r   r   r   r   r     s(     !N.5`
) 6 6r   r   c                      \ rS rSr\" S5      r\" S5      r\" S5      \" S5      \" S5      \" S5      \" S5      \" S	5      \" S
5      \" S5      \" S5      \" S5      \" S5      /r\" S5      \" S5      \" S5      \" S5      \" S5      \" S5      /r\" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S 5      \" S!5      \" S"5      /r	\" S#5      r
S$rg%)&_IPv6ConstantsiX	  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  r  r  r   r   r   r   r  r  X	  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   r  r!  )$__version__r  r  rf  r   r   r   r   r!   r%   r+   r/   r7   rC   rI   rY   rg   rs   rz   r|   r   total_orderingrO   ru   r  r~  r  r   r#   r   r#  r%  r   r$   r   r  r   r   r   <module>r     s    

0
 00
 0S:S:UDC(C (: 4n.b36l2o, o,d 
hN> hN hNV H4> H4 H4V 
 ) J JZS-'< S-l@)K @)FO%'< O%d#2 #2L ( ' u up	a:'< a:H	H@K H@VY6'< Y6x,2 ,2^ ( ' r   