o
    ßý°j§‰  ã                   @  sÒ  U d dl mZ d dlmZ d dlmZ ddlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZmZmZm Z m!Z!m"Z"m#Z# eeB eB eB eB Z$de%d< G d	d
„ d
ƒZ&edd�d;dd„ƒZ'dd„ e(dƒD ƒZ)de%d< G dd„ dƒZ*G dd„ de*ƒZ+G dd„ de*ƒZ,G dd„ de*ƒZ-G dd „ d e*ƒZ.G d!d"„ d"e*ƒZ/G d#d$„ d$e*ƒZ0G d%d&„ d&e*ƒZ1G d'd(„ d(e*ƒZ2G d)d*„ d*e*ƒZ3G d+d,„ d,e*ƒZ4edd�d<d1d2„ƒZ5	4d=d>d9d:„Z6dS )?é    )Úannotations)Ú	lru_cache)Ú	getLoggeré   )ÚCOMMON_CJK_CHARACTERSÚCOMMON_SAFE_ASCII_CHARACTERSÚTRACEÚCompatibleFamillyRangeÚ_ACCENTUATEDÚ_ARABICÚ_ARABIC_ISOLATED_FORMÚ&_BASIC_LATIN_COMPATIBLE_RANGE_FAMILIESÚ_CJKÚ_COMPATIBLE_RANGE_FAMILIESÚ#_COMPATIBLE_WITH_ANY_RANGE_FAMILIESÚ_HANGULÚ_HALFWIDTH_KATAKANAÚ	_HIRAGANAÚ	_KATAKANAÚ_LATINÚ	_LIGATUREÚ_RANGE_FAMILIESÚ_SENTENCE_OPEN_PUNCTUATIONÚ_SUPERSCRIPTÚ_THAI)Ú_character_flagsÚis_emoticonÚis_punctuationÚis_separatorÚ	is_symbolÚremove_accentÚunicode_rangeÚintÚ_GLYPH_MASKc                   @  s   e Zd ZU dZdZded< ded< ded< ded< ded	< ded
< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded < ded!< ded"< d(d%d&„Zd'S ))ÚCharInfoz>Pre-computed character properties shared across all detectors.)Ú	characterÚ	printableÚalphaÚupperÚlowerÚspaceÚdigitÚis_asciiÚcase_variableÚflagsÚaccentuatedÚlatinÚis_cjkÚis_katakanaÚis_halfwidth_katakanaÚ	is_arabicÚis_ligatureÚis_superscriptÚis_sentence_open_punctuationÚis_glyphÚpunctÚsymÚrangeÚsepÚemoticonÚsafeÚ
common_cjkÚ
unaccentedÚstrr%   Úboolr&   r'   r(   r)   r*   r+   r,   r-   r"   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   ú
str | Noner;   r<   r=   r>   r?   r@   ÚreturnÚNonec                 C  sÚ  || _ t|ƒ}|dk �r-d| _d| _|| _d| _d| _|tv | _d| _	d| _
d| _d| _d| _d| _d| _d| _d|  krBdkrgn n#d| _d| _d| _d| _d| _d| _d| _t| _d| _d| _d| _�nzd|  krqdkr–n n#d| _d| _d| _d| _d| _d| _d| _t| _d| _d| _d| _�nKd|  kr d	krÅn n#d| _d| _d| _d| _d| _d| _d| _d
| _d| _d| _d| _�n|dksÕd|  krÓdkrùn n$d| _d| _d| _d| _d| _|dk| _d| _d
| _d| _d| _d| _nè| ¡ | _d| _d| _d| _d| _d| _d| _d
| _d| _| j�rt|ƒnd| _| j�r)t|ƒnd| _n´d| _d| _| ¡ | _|  ¡ | _| !¡ | _| "¡ | _| #¡ | _| $¡ | _| j| jk| _t%|ƒ}| j�rdd| _nt&|ƒ| _|| _t'|t(@ ƒ| _t'|t@ ƒ| _t'|t)@ ƒ| _	t'|t*@ ƒ| _
t'|t+@ ƒ| _t'|t,@ ƒ| _t'|t-@ ƒ| _t'|t.@ ƒ| _t'|t/@ ƒ| _t'|t0@ ƒ| _| j�rÀ| j�rÀt1|ƒ| _n|| _| j	�oÊ|t2v | _| j�rÛt|ƒ| _t|ƒ| _nd| _d| _t3|ƒ| _4t5|ƒ| _6dS )zkCompute all properties for *character* (built once per codepoint,
        every branch assigns every slot).é€   TFéA   éZ   éa   éz   é0   é9   r   é    é	   é   N)7r%   Úordr,   r/   r@   r=   r?   r   r>   r1   r2   r3   r4   r5   r6   r7   r8   r'   r(   r)   r*   r+   r&   r-   r   r.   r0   r9   r:   Úisprintabler   r   ÚisalphaÚisupperÚislowerÚisspaceÚisdigitr   r   rB   r
   r   r   r   r   r   r   r   r#   r    r   r!   r;   r   r<   )Úselfr%   Úor.   © rY   úˆ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/charset_normalizer/md.pyÚ__init__k   sÞ   




 










zCharInfo.__init__N)r%   rA   rD   rE   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__Ú__annotations__r[   rY   rY   rY   rZ   r$   ,   s@   
 r$   N)Úmaxsizer%   rA   rD   c                 C  s   t | ƒS )zBBuild (once per codepoint) and cache the CharInfo for *character*.)r$   )r%   rY   rY   rZ   Ú
_char_infoø   s   rc   c                 C  s   g | ]}t t|ƒƒ‘qS rY   )r$   Úchr)Ú.0Ú
_codepointrY   rY   rZ   Ú
<listcomp>ÿ   s    ÿrg   rF   zlist[CharInfo]Ú_ASCII_CHAR_INFOc                   @  s6   e Zd ZdZdZdd	d
„Zddd„Zeddd„ƒZdS )ÚMessDetectorPluginzy
    Base abstract class used for mess detection plugins.
    All detectors MUST extend and implement given methods.
    rY   r%   rA   Úinfor$   rD   rE   c                 C  ó   t ‚)z‰
        The main routine to be executed upon character.
        Insert the logic in witch the text would be considered chaotic.
        ©ÚNotImplementedError©rW   r%   rj   rY   rY   rZ   Ú	feed_info  s   zMessDetectorPlugin.feed_infoc                 C  rk   )zB
        Permit to reset the plugin to the initial state.
        rl   ©rW   rY   rY   rZ   Úreset  s   zMessDetectorPlugin.resetÚfloatc                 C  rk   )z…
        Compute the chaos ratio based on what your feed() has seen.
        Must NOT be lower than 0.; No restriction gt 0.
        rl   rp   rY   rY   rZ   Úratio  s   zMessDetectorPlugin.ratioN©r%   rA   rj   r$   rD   rE   ©rD   rE   ©rD   rr   )	r\   r]   r^   r_   r`   ro   rq   Úpropertyrs   rY   rY   rY   rZ   ri     s    

ri   c                   @  ó<   e Zd ZdZddd„Zdd
d„Zddd„Zeddd„ƒZdS )Ú TooManySymbolOrPunctuationPlugin©Ú_punctuation_countÚ_symbol_countÚ_character_countÚ_last_printable_charrD   rE   c                 C  s   d| _ d| _d| _d | _d S ©Nr   rz   rp   rY   rY   rZ   r[   *  s   
z)TooManySymbolOrPunctuationPlugin.__init__r%   rA   rj   r$   c                 C  s^   |  j d7  _ || jkr*|js*|jr|  jd7  _n|js*|jr*|js*|  jd7  _|| _dS )ú1Optimized feed using pre-computed character info.r   é   N)	r}   r~   r>   r9   r{   r+   r:   r=   r|   rn   rY   rY   rZ   ro   1  s   
z*TooManySymbolOrPunctuationPlugin.feed_infoc                 C  s   d| _ d| _d| _d S r   )r{   r}   r|   rp   rY   rY   rZ   rq   =  ó   
z&TooManySymbolOrPunctuationPlugin.resetrr   c                 C  s0   | j dkrdS | j| j | j  }|dkr|S dS )Nr   ç        ç333333Ó?)r}   r{   r|   )rW   Úratio_of_punctuationrY   rY   rZ   rs   B  s   

þz&TooManySymbolOrPunctuationPlugin.ratioNru   rt   rv   ©	r\   r]   r^   r`   r[   ro   rq   rw   rs   rY   rY   rY   rZ   ry   "  s    


ry   c                   @  rx   )ÚTooManyAccentuatedPlugin©r}   Ú_accentuated_countrD   rE   c                 C  ó   d| _ d| _d S r   rˆ   rp   rY   rY   rZ   r[   Q  ó   
z!TooManyAccentuatedPlugin.__init__r%   rA   rj   r$   c                 C  s*   |  j d7  _ |jr|  jd7  _dS dS ©r€   r   N)r}   r/   r‰   rn   rY   rY   rZ   ro   U  ó   ÿz"TooManyAccentuatedPlugin.feed_infoc                 C  rŠ   r   rˆ   rp   rY   rY   rZ   rq   \  r‹   zTooManyAccentuatedPlugin.resetrr   c                 C  s*   | j dk rdS | j| j  }|dkr|S dS )Né   rƒ   gffffffÖ?rˆ   )rW   Úratio_of_accentuationrY   rY   rZ   rs   `  s   
zTooManyAccentuatedPlugin.ratioNru   rt   rv   r†   rY   rY   rY   rZ   r‡   N  s    


r‡   c                   @  rx   )ÚUnprintablePlugin©Ú_unprintable_countr}   Ú_has_escaperD   rE   c                 C  s   d| _ d| _d| _d S ©Nr   Fr‘   rp   rY   rY   rZ   r[   l  r‚   zUnprintablePlugin.__init__r%   rA   rj   r$   c                 C  sJ   |dkrd| _ |js|js|dkr|dkr|  jd7  _|  jd7  _dS )r€   úTúu   ï»¿r   N)r“   r&   r*   r’   r}   rn   rY   rY   rZ   ro   q  s   ÿþzUnprintablePlugin.feed_infoc                 C  s   d| _ d| _d S r”   )r’   r“   rp   rY   rY   rZ   rq     r‹   zUnprintablePlugin.resetrr   c                 C  s(   | j dkrdS | jrdS | jd | j  S )Nr   rƒ   ç      ð?rŽ   )r}   r“   r’   rp   rY   rY   rZ   rs   ƒ  s
   
zUnprintablePlugin.ratioNru   rt   rv   r†   rY   rY   rY   rZ   r�   i  s    


r�   c                   @  rx   )ÚSuspiciousDuplicateAccentPlugin©Ú_successive_countr}   Ú_last_latin_characterÚ_last_was_accentuatedrD   rE   c                 C  ó   d| _ d| _d | _d| _d S r”   r™   rp   rY   rY   rZ   r[   –  s   
z(SuspiciousDuplicateAccentPlugin.__init__r%   rA   rj   r$   c                 C  sn   |  j d7  _ | jdur.|jr.| jr.|jr | jjr |  jd7  _|j| jjkr.|  jd7  _|| _|j| _dS rŒ   )r}   r›   r/   rœ   r(   rš   r@   rn   rY   rY   rZ   ro   �  s   
ÿþz)SuspiciousDuplicateAccentPlugin.feed_infoc                 C  r�   r”   r™   rp   rY   rY   rZ   rq   ¬  ó   
z%SuspiciousDuplicateAccentPlugin.resetrr   c                 C  s   | j dkrdS | jd | j  S )Nr   rƒ   r�   )r}   rš   rp   rY   rY   rZ   rs   ²  s   
z%SuspiciousDuplicateAccentPlugin.ratioNru   rt   rv   r†   rY   rY   rY   rZ   r˜   Ž  s    


r˜   c                   @  rx   )ÚSuspiciousRange©Ú"_suspicious_successive_range_countr}   Ú_last_printable_seenÚ_last_printable_rangerD   rE   c                 C  ó   d| _ d| _d | _d | _d S r   r    rp   rY   rY   rZ   r[   Â  rž   zSuspiciousRange.__init__r%   rA   rj   r$   c                 C  s�   |  j d7  _ |js|js|jrd| _d| _dS | jdu r&|| _|j| _dS | j}|j}||ks4|du r@t||ƒr@|  jd7  _|| _|| _dS rŒ   )	r}   r*   r9   r>   r¢   r£   r;   Ú is_suspiciously_successive_ranger¡   )rW   r%   rj   Úunicode_range_aÚunicode_range_brY   rY   rZ   ro   È  s    


zSuspiciousRange.feed_infoc                 C  r¤   r   )r}   r¡   r¢   r£   rp   rY   rY   rZ   rq   á  rž   zSuspiciousRange.resetrr   c                 C  s"   | j dkrdS | jd | j  }|S )NrO   rƒ   r�   )r}   r¡   )rW   Úratio_of_suspicious_range_usagerY   rY   rZ   rs   ç  s   
þzSuspiciousRange.ratioNru   rt   rv   r†   rY   rY   rY   rZ   rŸ   º  s    


rŸ   c                   @  rx   )ÚSuperWeirdWordPlugin©Ú_word_countÚ_bad_word_countÚ_foreign_long_countÚ_is_current_word_badÚ_foreign_long_watchr}   Ú_bad_character_countÚ_buffer_lengthÚ_buffer_last_charÚ_buffer_last_char_accentuatedÚ_buffer_accent_countÚ_buffer_glyph_countÚ_buffer_upper_countÚ_buffer_first_lowerÚ_buffer_has_non_asciiÚ_buffer_last_char_ligatureÚ_buffer_has_internal_ligatureÚ_is_current_word_invalidÚ_invalid_word_countrD   rE   c                 C  sv   d| _ d| _d| _d| _d| _d| _d| _d| _d | _d| _	d| _
d| _d| _d| _d| _d| _d| _d| _d| _d S r”   rª   rp   rY   rY   rZ   r[   
  s&   
zSuperWeirdWordPlugin.__init__r%   rA   rj   r$   c                 C  s¾  |j rX| jr	d| _|j| _| jdkr|j| _|  jd7  _|| _|jr*|  j	d7  _	|j
s0d| _|j| _|jr>|  jd7  _|jrJ|  jd7  _dS | jsV|jrS|jrVd| _dS | js]dS |jsf|jrl| jrld| _d| _|jsv|jsv|j�r:|  jd7  _| j}|  j|7  _|dkrÕ| j| dkr–d| _n?| jr®| j ¡ r®| j	|kr®|  jd7  _d| _n'| jdkr¾d| _|  jd7  _n| jrÕ| jrÕ| j	|d krÕ|  jd7  _d| _|dkrô| jrô| j	dkoç| j	| dk}|sô|  jd7  _d| _| j�r	|  jd7  _|  j|7  _d	| _| j�r|  j d7  _ d	| _d	| _d| _d| _d	| _d| _d| _d| _	d	| _d	| _d	| _d	| _dS |d
v�rY|j!�s[|j"�r]d| _|  jd7  _|| _d	| _dS dS dS dS )r€   Tr   r   Né   ç      à?é   r„   F>   Ú_ú-ú<ú=ú>ú|ú~)#r'   r¹   rº   r5   r±   r)   r·   r²   r(   r¶   r,   r¸   r/   r³   r´   r8   rµ   r¯   r0   r7   r6   r®   r»   r*   r9   r<   r«   r}   rS   r­   r¬   r°   r¼   r+   r:   )rW   r%   rj   Úbuffer_lengthÚprobable_camel_casedrY   rY   rZ   ro   "  s²   
þÿÿÿþ

ÿþ
þ

ÿþ
ùzSuperWeirdWordPlugin.feed_infoc                 C  sv   d| _ d | _d| _d| _d| _d| _d| _d| _d| _d| _	d| _
d| _d| _d| _d| _d| _d| _d| _d| _d S r”   )r±   r²   r³   r®   r¯   r¬   r«   r}   r°   r­   r´   rµ   r¶   r·   r¸   r¹   rº   r»   r¼   rp   rY   rY   rZ   rq   †  s&   
zSuperWeirdWordPlugin.resetrr   c                 C  s.   | j rdS | jdkr| jdkrdS | j| j S )Nr—   é
   r   rƒ   )r¼   r«   r­   r°   r}   rp   rY   rY   rZ   rs   ›  s
   zSuperWeirdWordPlugin.ratioNru   rt   rv   r†   rY   rY   rY   rZ   r©   ó  s    


dr©   c                   @  ó@   e Zd ZdZdZddd„Zddd„Zddd„Zeddd„ƒZ	dS )ÚCjkUncommonPluginz<
    Detect messy CJK text that probably means nothing.
    ©r}   Ú_uncommon_countrD   rE   c                 C  rŠ   r   rÌ   rp   rY   rY   rZ   r[   ­  r‹   zCjkUncommonPlugin.__init__r%   rA   rj   r$   c                 C  s*   |  j d7  _ |js|  jd7  _dS dS rŒ   )r}   r?   rÍ   rn   rY   rY   rZ   ro   ±  r�   zCjkUncommonPlugin.feed_infoc                 C  rŠ   r   rÌ   rp   rY   rY   rZ   rq   ¸  r‹   zCjkUncommonPlugin.resetrr   c                 C  s.   | j dk rdS | j| j  }|dkr|d S dS )Nr½   rƒ   r¾   é   rÌ   )rW   Úuncommon_form_usagerY   rY   rZ   rs   ¼  s   
zCjkUncommonPlugin.ratioNru   rt   rv   ©
r\   r]   r^   r_   r`   r[   ro   rq   rw   rs   rY   rY   rY   rZ   rË   ¦  s    


rË   c                   @  rÊ   )ÚSuspiciousKatakanaPluginzDDetect implausible halfwidth Katakana and uncommon CJK combinations.©Ú_katakana_countÚ_halfwidth_katakana_countÚ
_cjk_countÚ_uncommon_cjk_countrD   rE   c                 C  ó   d| _ d| _d| _d| _d S r   rÒ   rp   rY   rY   rZ   r[   Ò  rž   z!SuspiciousKatakanaPlugin.__init__r%   rA   rj   r$   c                 C  sV   |j r|  jd7  _|jr|  jd7  _dS |  jd7  _|js)|  jd7  _dS dS rŒ   )r2   rÓ   r3   rÔ   rÕ   r?   rÖ   rn   rY   rY   rZ   ro   Ø  s   ÿz"SuspiciousKatakanaPlugin.feed_infoc                 C  r×   r   rÒ   rp   rY   rY   rZ   rq   ä  rž   zSuspiciousKatakanaPlugin.resetrr   c                 C  s:   | j dkr| j | jkrd| j  kr| jkrdS  dS dS )Nr½   é   r—   rƒ   )rÔ   rÓ   rÕ   rÖ   rp   rY   rY   rZ   rs   ê  s   
þzSuspiciousKatakanaPlugin.ratioNru   rt   rv   rÐ   rY   rY   rY   rZ   rÑ   È  s    


rÑ   c                   @  rx   )ÚArchaicUpperLowerPlugin©Ú_bufÚ_character_count_since_last_sepÚ_successive_upper_lower_countÚ#_successive_upper_lower_count_finalr}   Ú_last_alpha_seen_upperÚ_last_alpha_seen_lowerÚ_current_ascii_onlyrD   rE   c                 C  s4   d| _ d| _d| _d| _d| _d| _d| _d| _d S )NFr   TrÚ   rp   rY   rY   rZ   r[     s   
z ArchaicUpperLowerPlugin.__init__r%   rA   rj   r$   c                 C  sþ   |j o|j}| }|r8| jdkr8| jdkr#|js#| js#|  j| j7  _d| _d| _d| _|  jd7  _d| _dS | jrA|j	sAd| _| jdkrg|j
rL| jsR|jrd| jrd| jr`|  jd7  _d| _nd| _nd| _|  jd7  _|  jd7  _|j
| _|j| _dS )r€   r   é@   Fr   TNr�   )r'   r-   rÜ   r+   rá   rÞ   rÝ   rÛ   r}   r,   r(   rà   r)   rß   )rW   r%   rj   Úis_concernedÚ	chunk_seprY   rY   rZ   ro     sD   
ÿþÿ
ÿÿz!ArchaicUpperLowerPlugin.feed_infoc                 C  s4   d| _ d| _d| _d| _d| _d| _d| _d| _d S )Nr   FT)r}   rÜ   rÝ   rÞ   rß   rà   rÛ   rá   rp   rY   rY   rZ   rq   ;  s   
zArchaicUpperLowerPlugin.resetrr   c                 C  s   | j dkrdS | j| j  S )Nr   rƒ   )r}   rÞ   rp   rY   rY   rZ   rs   E  s   
zArchaicUpperLowerPlugin.ratioNru   rt   rv   r†   rY   rY   rY   rZ   rÙ   ö  s    


+
rÙ   c                   @  s<   e Zd ZdZddd„Zddd„Zddd„Zeddd„ƒZdS )ÚArabicIsolatedFormPlugin©r}   Ú_isolated_form_countrD   rE   c                 C  rŠ   r   ræ   rp   rY   rY   rZ   r[   P  r‹   z!ArabicIsolatedFormPlugin.__init__c                 C  rŠ   r   ræ   rp   rY   rY   rZ   rq   T  r‹   zArabicIsolatedFormPlugin.resetr%   rA   rj   r$   c                 C  s.   |  j d7  _ |jt@ r|  jd7  _dS dS rŒ   )r}   r.   r   rç   rn   rY   rY   rZ   ro   X  s   
ÿz"ArabicIsolatedFormPlugin.feed_inforr   c                 C  s   | j dk rdS | j| j  }|S )NrŽ   rƒ   ræ   )rW   Úisolated_form_usagerY   rY   rZ   rs   _  s   
zArabicIsolatedFormPlugin.ratioNru   rt   rv   )	r\   r]   r^   r`   r[   rq   ro   rw   rs   rY   rY   rY   rZ   rå   M  s    


rå   r¦   rC   r§   rB   c                 C  sz   | du s|du r
dS t |  }t | }||krdS |tv s |tv r"dS t||ƒtv r+dS | dkr3|tvS |dkr;|tvS dS )z_
    Determine if two Unicode ranges seen next to each other can be considered suspicious.
    NTFzBasic Latin)r   r   r	   r   r   )r¦   r§   Ú	familly_aÚ	familly_brY   rY   rZ   r¥   i  s    r¥   çš™™™™™É?FÚdecoded_sequenceÚmaximum_thresholdrr   Údebugc           $   
   C  s  t | ƒ}|dk rd}n	|dk rd}nd}|  ¡ }t}t}tƒ }tƒ }	tƒ }
tƒ }tƒ }t	ƒ }t
ƒ }tƒ }tƒ }tƒ }|j}|	j}|
j}|j}|j}|j}|j}|j}|j}|j}td||ƒD ]—}| ||| … D ]h}t|ƒ}|dk rw|| }n||ƒ}|||ƒ |||ƒ |r�|jr�|||ƒ qh|||ƒ |jr¢|||ƒ |||ƒ |jrÐ|||ƒ |jr²|||ƒ |jrÀ|||ƒ |||ƒ n|jrÈ|||ƒ |jrÐ|||ƒ qh|j|	j |
j |j |j |j |j |j |j |j } | |krõ n5q^|d }!|d|!ƒ |�s|d|!ƒ |d|!ƒ |j|	j |
j |j |j |j |j |j |j |j } |�r|td	ƒ}"|" td
|› d| › d|› �¡ |dk�r_|" td| dd… › �¡ |" td| dd… › �¡ ||	|
|||||||f
D ]}#|" t|#j› d|#j› �¡ �qkt| dƒS )zw
    Compute a mess ratio given a decoded bytes sequence. The maximum threshold does stop the computation earlier.
    iÿ  rM   i   râ   rF   r   rÉ   Ú
Úcharset_normalizerzIMess-detector extended-analysis start. intermediary_mean_mess_ratio_calc=z mean_mess_ratio=z maximum_threshold=é   zStarting with: NzEnding with: iðÿÿÿz: rØ   )ÚlenÚisasciirh   rc   ry   r‡   r�   r˜   rŸ   r©   rË   rÑ   rÙ   rå   ro   r;   rP   r&   r'   r0   r1   r2   r4   rs   r   Úlogr   Ú	__class__Úround)$rì   rí   rî   Úseq_lenÚstepÚis_pure_asciiÚ
ascii_infoÚ	char_infoÚd_spÚd_taÚd_upÚd_sdaÚd_srÚd_swÚd_cuÚd_skÚd_auÚd_aiÚ	d_sp_feedÚ	d_ta_feedÚ	d_up_feedÚ
d_sda_feedÚ	d_sr_feedÚ	d_sw_feedÚ	d_cu_feedÚ	d_sk_feedÚ	d_au_feedÚ	d_ai_feedÚblock_startr%   Ú	codepointrj   Úmean_mess_ratioÚnl_infoÚloggerÚdtrY   rY   rZ   Ú
mess_ratio�  sö   	











€ÿþýüûúùø	÷ÿÿ


ÿþýüûúùø	÷ÿÿÿþþ

r  )r%   rA   rD   r$   )r¦   rC   r§   rC   rD   rB   )rë   F)rì   rA   rí   rr   rî   rB   rD   rr   )7Ú
__future__r   Ú	functoolsr   Úloggingr   Úconstantr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Úutilsr   r   r   r   r   r    r!   r#   ra   r$   rc   r;   rh   ri   ry   r‡   r�   r˜   rŸ   r©   rË   rÑ   rÙ   rå   r¥   r  rY   rY   rY   rZ   Ú<module>   s:    \$ Mÿ,%,9 4".W$ÿ