§
    ¤	ÊjM5  ã                  óð   — d Z ddlmZ ddlZddlmZ ddlmZ 	 ddlZn# e	$ r dZY nw xY wddl
mZ erddlmZ ddlmZ d	Zd
ZdZdZdZdZdZdZdZdZe G d„ d¦  «        ¦   «         Z G d„ d¦  «        ZdS )z(Decoder for the MaxMind DB data section.é    )ÚannotationsN)Ú	dataclass)ÚTYPE_CHECKING)ÚInvalidDatabaseError)Ú
FileBuffer)ÚRecordi   i   i    é   é   )r   r   i   i  zGThe MaxMind DB file's data section exceeds the maximum number of valuesz<The MaxMind DB file's data section exceeds the maximum depthzCThe MaxMind DB file's data section exceeds the maximum payload sizezXThe MaxMind DB file's data section contains bad data (unknown data type or corrupt data)c                  ó2   — e Zd ZU dZded<   ded<   ded<   dS )Ú_DecodeBudgetz2Shared counters for one record or metadata decode.ÚintÚvalues_leftÚdepthÚpayload_leftN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© ó    úAC:\Projects\Muse2API\.venv\Lib\site-packages\maxminddb/decoder.pyr   r   6   s9   € € € € € € à<Ð<àÐÐÑØ€J€J�JØÐÐÑÐÐr   r   c                  ó    — e Zd ZdZ	 	 d+d,d„Zd-d„Zd.d„Zd/d„Zd0d„Zd0d„Z	d1d„Z
d2d„Zd3d „Zd1d!„Zd4d"„Zd5d$„Zd6d%„Zed7d(„¦   «         Zd8d)„Zd*S )9ÚDecoderz/Decoder for the data section of the MaxMind DB.r   FÚdatabase_bufferúFileBuffer | mmap.mmap | bytesÚpointer_baser   Úpointer_testÚboolÚreturnÚNonec                ó0   — || _         || _        || _        dS )a
  Create a Decoder for a MaxMind DB.

        Arguments:
            database_buffer: an mmap'd MaxMind DB file.
            pointer_base: the base number to use when decoding a pointer
            pointer_test: used for internal unit testing of pointer code

        N)Ú_pointer_testÚ_bufferÚ_pointer_base)Úselfr   r   r   s       r   Ú__init__zDecoder.__init__B   s!   € ð *ˆÔØ&ˆŒØ)ˆÔÐÐr   ÚsizeÚoffsetÚbudgetr   útuple[list[Record], int]c                ó`  — |j         |z
  }|dk     rt          t          ¦  «        ‚||_         |j        dz   }|t          k    rt          t
          ¦  «        ‚||_        g }| j        }t          |¦  «        D ]'} |||d¦  «        \  }	}|                     |	¦  «         Œ(|xj        dz  c_        ||fS )Nr   é   F)	r   r   Ú_TOO_MANY_VALUESr   Ú
_MAX_DEPTHÚ	_TOO_DEEPÚ_decodeÚrangeÚappend)
r&   r(   r)   r*   Ú	remainingr   ÚarrayÚdecodeÚ_Úvalues
             r   Ú_decode_arrayzDecoder._decode_arrayT   sÄ   € ð Ô&¨Ñ-ˆ	Ø�qŠ=ˆ=Ý&Õ'7Ñ8Ô8Ð8Ø&ˆÔØ”˜qÑ ˆØ•:ÒÐÝ&¥yÑ1Ô1Ð1ØˆŒØˆØ”ˆÝ�t‘”ð 	 ð 	 ˆAØ$˜f V¨V°UÑ;Ô;‰OˆU�FØ�LŠL˜ÑÔÐÐØˆŒ˜ÑˆŒØ�fˆ}Ðr   Ú_budgetútuple[bool, int]c                ó   — |dk    |fS ©Nr   r   )r&   r(   r)   r:   s       r   Ú_decode_booleanzDecoder._decode_booleanj   s   € ð �qŠy˜&Ð Ð r   útuple[bytes, int]c                ó„   — |j         |z
  }|dk     rt          t          ¦  «        ‚||_         ||z   }| j        ||…         |fS r=   )r   r   Ú
_TOO_LARGEr$   )r&   r(   r)   r*   r4   Ú
new_offsets         r   Ú_decode_byteszDecoder._decode_bytesr   sP   € ð Ô'¨$Ñ.ˆ	Ø�qŠ=ˆ=Ý&¥zÑ2Ô2Ð2Ø'ˆÔØ˜d‘]ˆ
ØŒ|˜F :Ð-Ô.°
Ð:Ð:r   útuple[float, int]c                óŒ   — |                       |d¦  «         ||z   }| j        ||…         }t          j        d|¦  «        \  }||fS )Né   s   !d©Ú_verify_sizer$   ÚstructÚunpack©r&   r(   r)   r:   rB   Úpacked_bytesr8   s          r   Ú_decode_doublezDecoder._decode_double�   óR   € ð 	×Ò˜$ Ñ"Ô"Ð"Ø˜d‘]ˆ
Ø”| F¨:Ð$5Ô6ˆÝ”= ¨Ñ5Ô5‰ˆØ�jÐ Ð r   c                óŒ   — |                       |d¦  «         ||z   }| j        ||…         }t          j        d|¦  «        \  }||fS )Nr
   s   !frG   rK   s          r   Ú_decode_floatzDecoder._decode_float�   rN   r   útuple[int, int]c                óê   — |t           k    rt          t          ¦  «        ‚|dk    rd|fS ||z   }| j        ||…         }|dk    r|                     dd¦  «        }t          j        d|¦  «        \  }||fS )Nr   r
   ó    s   !i)Ú_MAX_INT32_BYTESr   Ú	_BAD_DATAr$   ÚrjustrI   rJ   rK   s          r   Ú_decode_int32zDecoder._decode_int32™   s‡   € ð Õ"Ò"Ð"Ý&¥yÑ1Ô1Ð1Ø�1Š9ˆ9Ø�f�9ÐØ˜d‘]ˆ
Ø”| F¨:Ð$5Ô6ˆà�1Š9ˆ9Ø'×-Ò-¨a°Ñ9Ô9ˆLÝ”= ¨Ñ5Ô5‰ˆØ�jÐ Ð r   útuple[dict[str, Record], int]c                óf  — |j         |dz  z
  }|dk     rt          t          ¦  «        ‚||_         |j        dz   }|t          k    rt          t
          ¦  «        ‚||_        i }| j        }t          |¦  «        D ]'} |||d¦  «        \  }	} |||d¦  «        \  }
}|
||	<   Œ(|xj        dz  c_        ||fS )Né   r   r-   F)r   r   r.   r   r/   r0   r1   r2   )r&   r(   r)   r*   r4   r   Ú	containerr6   r7   Úkeyr8   s              r   Ú_decode_mapzDecoder._decode_map«   sÖ   € ð Ô&¨°©Ñ1ˆ	Ø�qŠ=ˆ=Ý&Õ'7Ñ8Ô8Ð8Ø&ˆÔØ”˜qÑ ˆØ•:ÒÐÝ&¥yÑ1Ô1Ð1ØˆŒØ')ˆ	Ø”ˆÝ�t‘”ð 	#ð 	#ˆAØ"˜F 6¨6°5Ñ9Ô9‰MˆS�&Ø$˜f V¨V°UÑ;Ô;‰OˆU�FØ"ˆI�c‰NˆNØˆŒ˜ÑˆŒØ˜&Ð Ð r   útuple[Record, int]c                óì  — |dz	  dz   }||z   }| j         ||…         }t          |¦  «        |k    rt          t          ¦  «        ‚t                               |d¦  «        }|dk     r||dz  |dz  z  z  }|t          |         z  }|| j        z  }| j        r||fS |j	        dz   }|t          k    rt          t          ¦  «        ‚||_	        |                      ||d¦  «        \  }	}
|xj	        dz  c_	        |	|fS )Né   r-   Úbigr
   é   T)r$   Úlenr   rU   r   Ú
from_bytesÚ_POINTER_VALUE_OFFSETSr%   r#   r   r/   r0   r1   )r&   r(   r)   r*   Úpointer_sizerB   Úpointer_bytesÚpointerr   r8   r7   s              r   Ú_decode_pointerzDecoder._decode_pointerÃ   s  € ð  ™	 Q‘ˆØ˜lÑ*ˆ
Øœ V¨JÐ%6Ô7ˆÝˆ}ÑÔ Ò-Ð-Ý&¥yÑ1Ô1Ð1Ý—.’. °Ñ6Ô6ˆØ˜!ÒÐð ˜˜s™
¨¸Ñ(9Ñ:Ñ:ˆGØÕ-¨lÔ;Ñ;ˆGØ�4Ô%Ñ%ˆàÔð 	'Ø˜JÐ&Ð&ð ”˜qÑ ˆØ•:ÒÐÝ&¥yÑ1Ô1Ð1ØˆŒØ—\’\ '¨6°4Ñ8Ô8‰
ˆ�ØˆŒ˜ÑˆŒØ�jÐ Ð r   c                ó¢   — |t           k    rt          t          ¦  «        ‚||z   }| j        ||…         }t                               |d¦  «        |fS )Nra   )Ú_MAX_UINT_BYTESr   rU   r$   r   rd   )r&   r(   r)   r:   rB   Ú
uint_bytess         r   Ú_decode_uintzDecoder._decode_uintã   sP   € ð •/Ò!Ð!Ý&¥yÑ1Ô1Ð1Ø˜d‘]ˆ
Ø”\ &¨Ð"3Ô4ˆ
Ý�~Š~˜j¨%Ñ0Ô0°*Ð<Ð<r   c                ó  — 	 |                       |t          t          dz
  dt          ¦  «        d¦  «        S # t          $ r}t          t          ¦  «        |‚d}~wt          t          j	        f$ r}t          t          ¦  «        |‚d}~ww xY w)z—Decode a section of the data section starting at offset.

        Arguments:
            offset: the location of the data structure to decode

        r-   r   FN)r1   r   Ú_MAX_VALUESÚ_MAX_PAYLOAD_BYTESÚRecursionErrorr   r0   Ú
IndexErrorrI   ÚerrorrU   )r&   r)   Úexs      r   r6   zDecoder.decodeñ   s•   € ð
	:Ø—<’<ØÝ�k¨A™o¨qÕ2DÑEÔEØñô ð øõ
 ð 	:ð 	:ð 	:Ý&¥yÑ1Ô1°rÐ9øøøøÝ�FœLÐ)ð 	:ð 	:ð 	:å&¥yÑ1Ô1°rÐ9øøøøð	:øøøs    ‚25 µ
B¿AÁBÁ-BÂBÚpointer_targetc                ó  — |dz   }| j         |         }|dz	  }|s|                      |¦  «        \  }}|dz  }|dk    r|dk    r|                      ||¦  «        \  }}|xdk    rU |j        |z
  }|dk     rt	          t
          ¦  «        ‚||_        ||z   }	| j         ||	…                              d¦  «        |	fS xdk    r. |rt	          t          ¦  «        ‚|                      |||¦  «        S xdk    r |  	                    |||¦  «        S xxd	k    rnxdk    rnxd
k    rn	xdk    rn n  |  
                    |||¦  «        S xdk    r |                      |||¦  «        S xdk    r |                      |||¦  «        S xdk    r |                      |||¦  «        S xdk    r |                      |||¦  «        S xdk    r |                      |||¦  «        S dk    r|                      |||¦  «        S 	 d|› d�}
t	          |
¦  «        ‚)Nr-   é   é   é   rZ   r   zutf-8rb   é   é	   é
   é   r`   r
   rF   é   é   zUnexpected type number (z) encountered)r$   Ú_read_extendedÚ_size_from_ctrl_byter   r   rA   r6   rU   ri   r]   rm   r9   rM   rC   rW   r>   rP   )r&   r)   r*   ru   rB   Ú	ctrl_byteÚtype_numr(   r4   ÚendÚmsgs              r   r1   zDecoder._decode
  sz  € ð ˜a‘Zˆ
Ø”L Ô(ˆ	Ø ‘>ˆàð 	EØ%)×%8Ò%8¸Ñ%DÔ%DÑ"ˆX�zà˜4Ñˆð �2Š:ˆ:˜( aš-˜-Ø!%×!:Ò!:¸4ÀÑ!LÔ!LÑˆT�:àØ�’��ð
 #Ô/°$Ñ6�	Ø˜q’=�=Ý.­zÑ:Ô:Ð:Ø&/�Ô#Ø  4Ñ'�Ø”| J¨s NÔ3×:Ò:¸7ÑCÔCÀSÐHÐHØ�’��Ø!ð :Ý.­yÑ9Ô9Ð9Ø×+Ò+¨D°*¸fÑEÔEÐEØ�’��Ø×'Ò'¨¨j¸&ÑAÔAÐAØ��’���Q�Q’Q�Q�Q˜˜š˜˜˜R˜RšR˜R˜R˜R˜R˜R˜RØ×(Ò(¨¨z¸6ÑBÔBÐBØ�’��Ø×)Ò)¨$°
¸FÑCÔCÐCØ�’��Ø×*Ò*¨4°¸VÑDÔDÐDØ�’��Ø×)Ò)¨$°
¸FÑCÔCÐCØ�’��Ø×)Ò)¨$°
¸FÑCÔCÐCØ�’��Ø×+Ò+¨D°*¸fÑEÔEÐEØ’�Ø×)Ò)¨$°
¸FÑCÔCÐCØØH°ÐHÐHÐH�Ý*¨3Ñ/Ô/Ð/r   c                ój   — | j         |         }|dz   }|dk     rd|› d�}t          |¦  «        ‚||dz   fS )Nrb   z^Something went horribly wrong in the decoder. An extended type resolved to a type number < 8 (ú)r-   )r$   r   )r&   r)   Ú	next_byterƒ   r…   s        r   r€   zDecoder._read_extendedA  sh   € Ø”L Ô(ˆ	Ø˜q‘=ˆØ�aŠ<ˆ<ðLØ@HðLð Lð Lð õ 'Øñô ð ð ˜ !™Ð#Ð#r   ÚexpectedÚactualc                ó:   — | |k    rt          t          ¦  «        ‚d S )N)r   rU   )r‰   rŠ   s     r   rH   zDecoder._verify_sizeN  s#   € à�vÒÐÝ&¥yÑ1Ô1Ð1ð Ðr   c                ó&  — |dk    rd| j         |         z   }||dz   fS |dk    r6|dz   }| j         ||…         }dt          j        d|¦  «        d         z   }||fS |dz   }| j         ||…         }t          j        d	d
|z   ¦  «        d         dz   }||fS )Nry   r-   é   rZ   i  s   !Hr   r`   s   !IrS   i )r$   rI   rJ   )r&   r(   r)   rB   Ú
size_bytess        r   r�   zDecoder._size_from_ctrl_byteS  s»   € à�2Š:ˆ:Ø˜œ VÔ,Ñ,ˆDØ˜ !™Ð#Ð#ð �2Š:ˆ:Ø !™ˆJØœ f¨ZÐ&7Ô8ˆJØ�œ u¨jÑ9Ô9¸!Ô<Ñ<ˆDØ˜Ð#Ð#à˜a‘Zˆ
Ø”\ &¨Ð"3Ô4ˆ
ÝŒ}˜U G¨jÑ$8Ñ9Ô9¸!Ô<¸uÑDˆØ�ZÐÐr   N)r   F)r   r   r   r   r   r   r    r!   )r(   r   r)   r   r*   r   r    r+   )r(   r   r)   r   r:   r   r    r;   )r(   r   r)   r   r*   r   r    r?   )r(   r   r)   r   r:   r   r    rD   )r(   r   r)   r   r:   r   r    rQ   )r(   r   r)   r   r*   r   r    rX   )r(   r   r)   r   r*   r   r    r^   )r)   r   r    r^   )r)   r   r*   r   ru   r   r    r^   )r)   r   r    rQ   )r‰   r   rŠ   r   r    r!   )r(   r   r)   r   r    rQ   )r   r   r   r   r'   r9   r>   rC   rM   rP   rW   r]   ri   rm   r6   r1   r€   ÚstaticmethodrH   r�   r   r   r   r   r   ?   sa  € € € € € Ø9Ð9ð
 Ø"ð	*ð *ð *ð *ð *ð$ð ð ð ð,!ð !ð !ð !ð;ð ;ð ;ð ;ð
!ð 
!ð 
!ð 
!ð
!ð 
!ð 
!ð 
!ð!ð !ð !ð !ð$!ð !ð !ð !ð0!ð !ð !ð !ð@=ð =ð =ð =ð:ð :ð :ð :ð250ð 50ð 50ð 50ðn$ð $ð $ð $ð ð2ð 2ð 2ñ „\ð2ð ð  ð  ð  ð  ð  r   r   )r   Ú
__future__r   rI   Údataclassesr   Útypingr   ÚmmapÚImportErrorÚmaxminddb.errorsr   Úmaxminddb.filer   Úmaxminddb.typesr   ro   r/   rp   rk   rT   re   r.   r0   rA   rU   r   r   r   r   r   ú<module>r˜      st  ðØ .Ð .à "Ð "Ð "Ð "Ð "Ð "à €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø  Ð  Ð  Ð  Ð  Ð  ðØ€K€K€K€KøØð ð ð Ø€D€D€Dðøøøð 2Ð 1Ð 1Ð 1Ð 1Ð 1àð 'Ø)Ð)Ð)Ð)Ð)Ð)Ø&Ð&Ð&Ð&Ð&Ð&ð €Ø€
ð Ð ð €ØÐ à-Ð àMð ð K€	ØR€
ð*ð 
ð ðð ð ð ð ñ ô ñ „ððe ð e ð e ð e ð e ñ e ô e ð e ð e ð e s   š Ÿ)¨)