+
    4i6                     B   R t ^ RIt^ RIHtHt ^ RIHtHt ^ RI	H
t
HtHtHt ^ RIHt R/ R/ R/ R	/ /t ! R
 R]P"                  4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      tR tRR ltR tR t]! 4        R# )a  
Routines for accessing data published by IANA (Internet Assigned Numbers
Authority).

More details can be found at the following URLs :-

    - IANA Home Page - http://www.iana.org/
    - IEEE Protocols Information Home Page - http://www.iana.org/protocols/
N)make_parserhandler)	Publisher
Subscriber)	IPAddress	IPNetworkIPRangecidr_abbrev_to_verbose)_open_binaryIPv4IPv6IPv6_unicast	multicastc                   <   a  ] tR t^1t o RR ltR tR tR tRtV t	R# )SaxRecordParserNc                f    ^ V n         RV n        RV n        RV n        RV n        RV n        Wn        R# )    FN)_level
_is_active_record
_tag_level_tag_payload_tag_feeding	_callback)selfcallbacks   &&1/usr/lib/python3/dist-packages/netaddr/ip/iana.py__init__SaxRecordParser.__init__2   s3      !    c                   V ;P                   ^,          un         V P                  RJ dJ   VR8X  dA   RV n        V P                   V n        / V n        RV9   d   VR,          V P                  R&   R# R# R# V P                   V P                  ^,           8X  dg   VR8X  dP   RV9   dG   RV9   d>   V P                  P	                  VR,          . 4      pVP                  VR,          4       R# R# R# . V n        RV n        R# RV n        R# )	   FrecordTdatexreftypedataN)r   r   r   r   
setdefaultappendr   r   )r   nameattrsls   &&& r   startElementSaxRecordParser.startElement;   s    q??e#x"&"&++!U?+0=DLL( #	   [[DOOa//v~U?v//frBAHHU6]+ (7? %'!$(! %Dr   c                   V P                   R J d   VR8X  di   V P                  V P                  8X  dN   RV n         RV n        \        V P                  R4      '       d   V P	                  V P
                  4       RV n        M_V P                  V P                  ^,           8X  d>   VR8w  d7   RP                  V P                  4      V P
                  V&   RV n        RV n        V ;P                  ^,          un        R# )Tr"   FN__call__r$    )	r   r   r   hasattrr   r   joinr   r   )r   r)   s   &&r   
endElementSaxRecordParser.endElementP   s    ??d"xDOOt{{$B"'"&4>>:66NN4<<0#! 336>)+1B1B)CDLL&(,D%(-D%qr   c                `    V P                   R J d   V P                  P                  V4       R# R# )TN)r   r   r(   )r   contents   &&r   
charactersSaxRecordParser.characters`   s)    $$$W- %r   )r   r   r   r   r   r   r   N)
__name__
__module____qualname____firstlineno__r   r,   r3   r7   __static_attributes____classdictcell____classdict__s   @r   r   r   1   s     "&* . .r   r   c                   H   a a ] tR t^et oRtV 3R ltR tR tR tRt	Vt
V ;t# )XMLRecordParserzH
A configurable Parser that understands how to parse XML based records.
c                   < \         \        V `  4        \        4       V n        V P                  P                  \        V P                  4      4       Wn        V P                  P                  V4       R# )zH
Constructor.

fh - a valid, open file handle to XML based record data.
N)superrC   r   r   	xmlparsersetContentHandlerr   consume_recordfh__dict__updater   rI   kwargs	__class__s   &&,r   r   XMLRecordParser.__init__j   sO     	ot-/$((9L9L)MNV$r   c                    V# )z
This is the callback method invoked for every record. It is usually
over-ridden by base classes to provide specific record-based logic.

Any record can be vetoed (not passed to registered Subscriber objects)
by simply returning None.
 )r   recs   &&r   process_recordXMLRecordParser.process_recordy   s	     
r   c                V    V P                  V4      pVe   V P                  V4       R # R # r9   )rS   notifyr   rR   r"   s   && r   rH   XMLRecordParser.consume_record   s)    $$S)KK r   c                P    V P                   P                  V P                  4       R# )zg
Parse and normalises records, notifying registered subscribers with
record data as it is encountered.
N)rF   parserI   )r   s   &r   rZ   XMLRecordParser.parse   s    
 	TWW%r   )rI   rF   )r:   r;   r<   r=   __doc__r   rS   rH   rZ   r>   r?   __classcell__rN   rA   s   @@r   rC   rC   e   s#     % 
& &r   rC   c                   <   a a ] tR t^t oRtV 3R ltR tRtVtV ;t	# )
IPv4Parserz
A XMLRecordParser that understands how to parse and retrieve data records
from the IANA IPv4 address space file.

It can be found online here :-

    - http://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.xml
c                .   < \         \        V `  V4       R# )zw
Constructor.

fh - a valid, open file handle to an IANA IPv4 address space file.

kwargs - additional parser options.
N)rE   r`   r   rL   s   &&,r   r   IPv4Parser.__init__        	j$(,r   c                6   / pR F.  p\        VP                  VR4      4      P                  4       W#&   K0  	  RVR,          9   d;   VR,          P                  R4      w  rER\	        V4      \	        V4      3,          VR&   VR,          P                  4       VR&   V# )T
Callback method invoked for every record.

See base class method for more details.
prefixstatusr0   /z%d/%d)rf   designationr#   whoisrg   )strgetstripsplitint
capitalize)r   rR   r"   keyoctetrf   s   &&    r   rS   IPv4Parser.process_record   s     GCcggc2./557FK H &""$X.44S9OU&#e*c&k)BBF8!(+668xr   rQ   
r:   r;   r<   r=   r\   r   rS   r>   r?   r]   r^   s   @@r   r`   r`      s     - r   r`   c                   <   a a ] tR t^t oRtV 3R ltR tRtVtV ;t	# )
IPv6Parserz
A XMLRecordParser that understands how to parse and retrieve data records
from the IANA IPv6 address space file.

It can be found online here :-

    - http://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xml
c                .   < \         \        V `  V4       R# zw
Constructor.

fh - a valid, open file handle to an IANA IPv6 address space file.

kwargs - additional parser options.
N)rE   rv   r   rL   s   &&,r   r   IPv6Parser.__init__   rc   r   c                   R\        VP                  RR4      4      P                  4       R\        VP                  RR4      4      P                  4       R\        VP                  RR.4      R,          4      P                  4       /pV# )re   rf   r0   
allocationdescription	referencerfcrk   rl   rm   rW   s   && r   rS   IPv6Parser.process_record   su     c#''(B/0668#cggmR89??A SWWURD1"56<<>

 r   rQ   rt   r^   s   @@r   rv   rv      s     - r   rv   c                   <   a a ] tR t^t oRtV 3R ltR tRtVtV ;t	# )IPv6UnicastParsera  
A XMLRecordParser that understands how to parse and retrieve data records
from the IANA IPv6 unicast address assignments file.

It can be found online here :-

    - http://www.iana.org/assignments/ipv6-unicast-address-assignments/ipv6-unicast-address-assignments.xml
c                .   < \         \        V `  V4       R# rx   )rE   r   r   rL   s   &&,r   r   IPv6UnicastParser.__init__   s     	/3r   c                   R\        VP                  RR4      4      P                  4       R\        VP                  RR4      4      P                  4       R\        VP                  RR4      4      P                  4       R\        VP                  RR4      4      P                  4       R\        VP                  RR4      4      P                  4       /pV# )re   rg   r0   r|   rf   r#   rj   r   rW   s   && r   rS    IPv6UnicastParser.process_record   s     c#''(B/06683sww}b9:@@Bc#''(B/0668C+,224S"-.446
 r   rQ   rt   r^   s   @@r   r   r      s     4 r   r   c                   B   a a ] tR tRt oRtV 3R ltR tR tRtVt	V ;t
# )MulticastParseri  z
A XMLRecordParser that knows how to process the IANA IPv4 multicast address
allocation file.

It can be found online here :-

    - http://www.iana.org/assignments/multicast-addresses/multicast-addresses.xml
c                .   < \         \        V `  V4       R# )z
Constructor.

fh - a valid, open file handle to an IANA IPv4 multicast address
     allocation file.

kwargs - additional parser options.
N)rE   r   r   rL   s   &&,r   r   MulticastParser.__init__  s     	ot-b1r   c                J   RV9   d   VP                  R4      w  r#VP                  4       P                  R4      pVP                  4       P                  R4      pRP                  V Uu. uF  p\        \	        V4      4      NK  	  up4      : RRP                  V Uu. uF  p\        \	        V4      4      NK  	  up4      : 2# VP                  4       P                  R4      pRP                  V Uu. uF  p\        \	        V4      4      NK  	  up4      # u upi u upi u upi )zH
Removes variations from address entries found in this particular file.
-.)rn   rm   r2   rk   ro   )r   addra1a2o1o2is   &&     r   normalise_addrMulticastParser.normalise_addr  s     $;zz#HR!!#&B!!#&Br2r!#c!f+r23r2r!#c!f+r23 
 ##C(B88"5"QSQ["566 32 6s   (DD2D c           	         RV9   dA   RV P                  \        VR,          4      4      R\        VP                  RR4      4      /pV# R# )re   r   addressdescrr|   r0   N)r   rk   rl   rW   s   && r   rS   MulticastParser.process_record-  sL     S=4..s3v;/?@SWW]B78F M r   rQ   )r:   r;   r<   r=   r\   r   r   rS   r>   r?   r]   r^   s   @@r   r   r     s     	27  r   r   c                   0   a  ] tR tRt o RtR tR tRtV tR# )DictUpdateri<  zW
Concrete Subscriber that inserts records received from a Publisher into a
dictionary.
c                *    Wn         W n        W0n        R# )z
Constructor.

dct - lookup dict or dict like object to insert records into.

topic - high-level category name of data to be processed.

unique_key - key name in data dict that uniquely identifies it.
Ndcttopic
unique_key)r   r   r   r   s   &&&&r   r   DictUpdater.__init__B  s     
$r   c                P   WP                   ,          pV P                  R8X  d%   \        \        V4      4      pWP                  V&   R# V P                  R8X  d%   \        \        V4      4      pWP                  V&   R# V P                  R8X  d   \        V4      pWP                  V&   R# V P                  R8X  dm   RpRV9   dI   VP                  R4      w  rV\        WV4      pVP                  4       p\        V4      ^8X  d
   V^ ,          pM\        V4      pWP                  V&   R# R# )z
Callback function used by Publisher to notify this Subscriber about
an update. Stores topic based information into dictionary passed to
constructor.
r   r   r   r   Nr   )
r   r   r   r	   r   rn   r   cidrslenr   )r   r&   data_idcidriprangefirstlastr   s   &&      r   rK   DictUpdater.updateP  s     '::3G<=D!HHTNZZ6!3G<=D!HHTNZZ>)W%D!HHTNZZ;&Gg~ 'c 2!%.u:?#AhG#G, $HHW 'r   r   N)	r:   r;   r<   r=   r\   r   rK   r>   r?   r@   s   @r   r   r   <  s     
%% %r   r   c                    \        \        \        R4      4      p V P                  \	        \
        R,          RR4      4       V P                  4        \        \        \        R4      4      pVP                  \	        \
        R,          RR4      4       VP                  4        \        \        \        R4      4      pVP                  \	        \
        R,          RR4      4       VP                  4        \        \        \        R4      4      pVP                  \	        \
        R	,          R	R
4      4       VP                  4        R# )zX
Parse and load internal IANA data lookups with the latest information from
data files.
zipv4-address-space.xmlr   rf   zipv6-address-space.xmlr   z$ipv6-unicast-address-assignments.xmlr   zmulticast-addresses.xmlr   r   N)
r`   r
   __package__attachr   	IANA_INFOrZ   rv   r   r   )ipv4ipv6ipv6uamcasts       r   	load_infor   o  s    
 l;0HIJDKKIf-vx@AJJLl;0HIJDKKIf-vx@AJJL["HIF MM+i7RS
LLNL6OPQE	LLY{3[)LM	KKMr   c                   V f   \         P                  p \        \        4       F  pV P	                  R\        V4      ,          R,           4       V P	                  VR,           4       V P	                  R\        V4      ,          R,           4       \        V,          p\        V4       F1  pW#,          pV P	                  RV,          V,           R,           4       K3  	  K  	  R# )z/
Pretty prints IANA information to filehandle.
Nr   
z%-45r)_sysstdoutsortedr   writer   )rI   categoryiprangesr   detailss   &    r   pprint_infor     s     
z[[9%
s8}$t+,
D!
s8}$t+,X&h'G'GHHW(72T9: ( &r   c                 z    \        VR 4      '       d   W9   # \        VR4      '       d   W8H  # \        RV: R24      h)r   valuez!Unsupported IP range or address: !)r1   	Exception)ipip_ranges   &&r   _within_boundsr     s:    x!!~	7	#	#~
hH
IIr   c                   / pV P                   ^8X  d   \        R,          P                  4        FB  w  r#\        W4      '       g   K  VP	                  R. 4       VR,          P                  V4       KD  	  V P                  4       '       db   \        R,          P                  4        FB  w  rC\        W4      '       g   K  VP	                  R. 4       VR,          P                  V4       KD  	  V# V P                   ^8X  d   \        R,          P                  4        FB  w  r#\        W4      '       g   K  VP	                  R. 4       VR,          P                  V4       KD  	  \        R,          P                  4        FB  w  r#\        W4      '       g   K  VP	                  R. 4       VR,          P                  V4       KD  	  V# )z7Returns informational data specific to this IP address.r   r   	Multicastr   r   )versionr   itemsr   r'   r(   is_multicast)ip_addrinfor   r"   r   s   &    r   queryr     sY   D!%f-335LDg,,+V##F+ 6
 !!#,[#9#?#?#A!'33OOK4%,,V4 $B  K 
A	%f-335LDg,,+V##F+ 6
 &n5;;=LDg,,3^$++F3 >
 Kr   r9   )r\   sysr   xml.saxr   r   netaddr.corer   r   
netaddr.ipr   r   r   r	   netaddr.compatr
   r   ContentHandlerr   rC   r`   rv   r   r   r   r   r   r   r   rQ   r   r   <module>r      s   ,  ( . L L '
 B
BB		1.g,, 1.h(&i (&V& &R' 'T" "J1o 1h0%* 0%f0;"	J> 
r   