§
    ƒcRG  ã            
       ó  — d dl mZ d dlmZ d dlmZmZ ddlmZm	Z	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  G d„ d¦  «        Z G d	„ d
e¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z  G d„ de¦  «        Z! G d„ de¦  «        Z" G d„ de¦  «        Z# G d„ de¦  «        Z$ ed¬¦  «        dee%         dee%         de&fd„¦   «         Z' ed¬¦  «        	 d'd"e%d#e(d$e&de(fd%„¦   «         Z)d&S )(é    )Ú	lru_cache)Ú	getLogger)ÚListÚOptionalé   )ÚCOMMON_SAFE_ASCII_CHARACTERSÚTRACEÚUNICODE_SECONDARY_RANGE_KEYWORD)Úis_accentuatedÚis_asciiÚis_case_variableÚis_cjkÚis_emoticonÚ	is_hangulÚis_hiraganaÚis_katakanaÚis_latinÚis_punctuationÚis_separatorÚ	is_symbolÚis_thaiÚis_unprintableÚremove_accentÚunicode_rangec                   óV   — e Zd ZdZdedefd„Zdeddfd„Zd	d„Ze	de
fd„¦   «         ZdS )
ÚMessDetectorPluginzy
    Base abstract class used for mess detection plugins.
    All detectors MUST extend and implement given methods.
    Ú	characterÚreturnc                 ó   — t           ‚)z@
        Determine if given character should be fed in.
        ©ÚNotImplementedError©Úselfr   s     ú7/usr/lib/python3/dist-packages/charset_normalizer/md.pyÚeligiblezMessDetectorPlugin.eligible$   ó
   € õ "Ð!ó    Nc                 ó   — t           ‚)z‰
        The main routine to be executed upon character.
        Insert the logic in witch the text would be considered chaotic.
        r    r"   s     r$   ÚfeedzMessDetectorPlugin.feed*   s
   € õ
 "Ð!r'   c                 ó   — t           ‚)zB
        Permit to reset the plugin to the initial state.
        r    ©r#   s    r$   ÚresetzMessDetectorPlugin.reset1   r&   r'   c                 ó   — t           ‚)z…
        Compute the chaos ratio based on what your feed() has seen.
        Must NOT be lower than 0.; No restriction gt 0.
        r    r+   s    r$   ÚratiozMessDetectorPlugin.ratio7   s
   € õ "Ð!r'   ©r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚboolr%   r)   r,   ÚpropertyÚfloatr.   © r'   r$   r   r      s�   € € € € € ðð ð
" #ð "¨$ð "ð "ð "ð "ð"˜cð " dð "ð "ð "ð "ð"ð "ð "ð "ð ð"�uð "ð "ð "ñ „Xð"ð "ð "r'   r   c                   óZ   — e Zd Zd	d„Zdedefd„Zdeddfd„Zd	d„Ze	de
fd„¦   «         ZdS )
Ú TooManySymbolOrPunctuationPluginr   Nc                 óL   — d| _         d| _        d| _        d | _        d| _        d S )Nr   F)Ú_punctuation_countÚ_symbol_countÚ_character_countÚ_last_printable_charÚ_frenzy_symbol_in_wordr+   s    r$   Ú__init__z)TooManySymbolOrPunctuationPlugin.__init__A   s0   € Ø'(ˆÔØ"#ˆÔØ%&ˆÔà37ˆÔ!Ø,1ˆÔ#Ð#Ð#r'   r   c                 ó*   — |                      ¦   «         S ©N©Úisprintabler"   s     r$   r%   z)TooManySymbolOrPunctuationPlugin.eligibleI   ó   € Ø×$Ò$Ñ&Ô&Ð&r'   c                 ó(  — | xj         dz  c_         || j        k    ro|t          vrft          |¦  «        r| xj        dz  c_        nF|                     ¦   «         du r0t          |¦  «        r!t          |¦  «        du r| xj        dz  c_        || _        d S )Nr   Fé   )	r>   r?   r   r   r<   Úisdigitr   r   r=   r"   s     r$   r)   z%TooManySymbolOrPunctuationPlugin.feedL   sµ   € ØÐÔ Ñ"ÐÔð ˜Ô2Ò2Ð2ØÕ!=Ð=Ð=å˜iÑ(Ô(ð (ØÐ'Ô'¨1Ñ,Ð'Ô'Ð'à×!Ò!Ñ#Ô# uÐ,Ð,Ý˜iÑ(Ô(ð -å 	Ñ*Ô*¨eÐ3Ð3àÐ"Ô" aÑ'Ð"Ô"à$-ˆÔ!Ð!Ð!r'   c                 ó0   — d| _         d| _        d| _        d S ©Nr   )r<   r>   r=   r+   s    r$   r,   z&TooManySymbolOrPunctuationPlugin.reset^   s    € Ø"#ˆÔØ !ˆÔØˆÔÐÐr'   c                 ó^   — | j         dk    rdS | j        | j        z   | j         z  }|dk    r|ndS )Nr   ç        g333333Ó?)r>   r<   r=   )r#   Úratio_of_punctuations     r$   r.   z&TooManySymbolOrPunctuationPlugin.ratioc   sK   € àÔ  AÒ%Ð%Ø�3ð Ô# dÔ&8Ñ8ØÔ!ñ'"Ðð (<¸sÒ'BÐ'BÐ#Ð#ÈÐKr'   r/   ©r0   r1   r2   rA   r4   r5   r%   r)   r,   r6   r7   r.   r8   r'   r$   r:   r:   @   s®   € € € € € ð2ð 2ð 2ð 2ð' #ð '¨$ð 'ð 'ð 'ð 'ð.˜cð . dð .ð .ð .ð .ð$ð ð ð ð
 ðL�uð Lð Lð Lñ „XðLð Lð Lr'   r:   c                   óZ   — e Zd Zd	d„Zdedefd„Zdeddfd„Zd	d„Ze	de
fd„¦   «         ZdS )
ÚTooManyAccentuatedPluginr   Nc                 ó"   — d| _         d| _        d S rK   ©r>   Ú_accentuated_countr+   s    r$   rA   z!TooManyAccentuatedPlugin.__init__p   s   € Ø%&ˆÔØ'(ˆÔÐÐr'   r   c                 ó*   — |                      ¦   «         S rC   )Úisalphar"   s     r$   r%   z!TooManyAccentuatedPlugin.eligiblet   s   € Ø× Ò Ñ"Ô"Ð"r'   c                 óh   — | xj         dz  c_         t          |¦  «        r| xj        dz  c_        d S d S ©Nr   )r>   r   rT   r"   s     r$   r)   zTooManyAccentuatedPlugin.feedw   sJ   € ØÐÔ Ñ"ÐÔå˜)Ñ$Ô$ð 	)ØÐ#Ô# qÑ(Ð#Ô#Ð#Ð#ð	)ð 	)r'   c                 ó"   — d| _         d| _        d S rK   rS   r+   s    r$   r,   zTooManyAccentuatedPlugin.reset}   s   € Ø !ˆÔØ"#ˆÔÐÐr'   c                 ód   — | j         dk    s| j         dk     rdS | j        | j         z  }|dk    r|ndS )Nr   é   rM   gffffffÖ?rS   )r#   Úratio_of_accentuations     r$   r.   zTooManyAccentuatedPlugin.ratio�   sI   € àÔ  AÒ%Ð%¨Ô)>ÀÒ)BÐ)BØ�3Ø'+Ô'>ÀÔAVÑ'VÐØ(=ÀÒ(EÐ(EÐ$Ð$È3ÐNr'   r/   rO   r8   r'   r$   rQ   rQ   o   s®   € € € € € ð)ð )ð )ð )ð# #ð #¨$ð #ð #ð #ð #ð)˜cð ) dð )ð )ð )ð )ð$ð $ð $ð $ð ðO�uð Oð Oð Oñ „XðOð Oð Or'   rQ   c                   óZ   — e Zd Zd	d„Zdedefd„Zdeddfd„Zd	d„Ze	de
fd„¦   «         ZdS )
ÚUnprintablePluginr   Nc                 ó"   — d| _         d| _        d S rK   )Ú_unprintable_countr>   r+   s    r$   rA   zUnprintablePlugin.__init__Š   s   € Ø'(ˆÔØ%&ˆÔÐÐr'   r   c                 ó   — dS ©NTr8   r"   s     r$   r%   zUnprintablePlugin.eligibleŽ   ó   € Øˆtr'   c                 ód   — t          |¦  «        r| xj        dz  c_        | xj        dz  c_        d S rX   )r   r`   r>   r"   s     r$   r)   zUnprintablePlugin.feed‘   s@   € Ý˜)Ñ$Ô$ð 	)ØÐ#Ô# qÑ(Ð#Ô#ØÐÔ Ñ"ÐÔÐÐr'   c                 ó   — d| _         d S rK   )r`   r+   s    r$   r,   zUnprintablePlugin.reset–   s   € Ø"#ˆÔÐÐr'   c                 ó@   — | j         dk    rdS | j        dz  | j         z  S )Nr   rM   r[   )r>   r`   r+   s    r$   r.   zUnprintablePlugin.ratio™   s+   € àÔ  AÒ%Ð%Ø�3àÔ'¨!Ñ+¨tÔ/DÑDÐDr'   r/   rO   r8   r'   r$   r^   r^   ‰   s®   € € € € € ð'ð 'ð 'ð 'ð #ð ¨$ð ð ð ð ð#˜cð # dð #ð #ð #ð #ð
$ð $ð $ð $ð ðE�uð Eð Eð Eñ „XðEð Eð Er'   r^   c                   óZ   — e Zd Zd	d„Zdedefd„Zdeddfd„Zd	d„Ze	de
fd„¦   «         ZdS )
ÚSuspiciousDuplicateAccentPluginr   Nc                 ó0   — d| _         d| _        d | _        d S rK   ©Ú_successive_countr>   Ú_last_latin_characterr+   s    r$   rA   z(SuspiciousDuplicateAccentPlugin.__init__¢   s    € Ø&'ˆÔØ%&ˆÔà48ˆÔ"Ð"Ð"r'   r   c                 óH   — |                      ¦   «         ot          |¦  «        S rC   )rV   r   r"   s     r$   r%   z(SuspiciousDuplicateAccentPlugin.eligible¨   s!   € Ø× Ò Ñ"Ô"Ð:¥x°	Ñ':Ô':Ð:r'   c                 ól  — | xj         dz  c_         | j        �•t          |¦  «        r†t          | j        ¦  «        rr|                     ¦   «         r)| j                             ¦   «         r| xj        dz  c_        t          |¦  «        t          | j        ¦  «        k    r| xj        dz  c_        || _        d S rX   )r>   rl   r   Úisupperrk   r   r"   s     r$   r)   z$SuspiciousDuplicateAccentPlugin.feed«   sÂ   € ØÐÔ Ñ"ÐÔàÔ&Ð2Ý˜yÑ)Ô)ð 3å˜tÔ9Ñ:Ô:ð 3ð × Ò Ñ"Ô"ð , tÔ'A×'IÒ'IÑ'KÔ'Kð ,ØÐ&Ô&¨!Ñ+Ð&Ô&å˜YÑ'Ô'­=¸Ô9SÑ+TÔ+TÒTÐTØÐ&Ô&¨!Ñ+Ð&Ô&Ø%.ˆÔ"Ð"Ð"r'   c                 ó0   — d| _         d| _        d | _        d S rK   rj   r+   s    r$   r,   z%SuspiciousDuplicateAccentPlugin.reset¹   s    € Ø!"ˆÔØ !ˆÔØ%)ˆÔ"Ð"Ð"r'   c                 ó@   — | j         dk    rdS | j        dz  | j         z  S )Nr   rM   rH   )r>   rk   r+   s    r$   r.   z%SuspiciousDuplicateAccentPlugin.ratio¾   s+   € àÔ  AÒ%Ð%Ø�3àÔ&¨Ñ*¨dÔ.CÑCÐCr'   r/   rO   r8   r'   r$   rh   rh   ¡   s®   € € € € € ð9ð 9ð 9ð 9ð; #ð ;¨$ð ;ð ;ð ;ð ;ð/˜cð / dð /ð /ð /ð /ð*ð *ð *ð *ð
 ðD�uð Dð Dð Dñ „XðDð Dð Dr'   rh   c                   óZ   — e Zd Zd	d„Zdedefd„Zdeddfd„Zd	d„Ze	de
fd„¦   «         ZdS )
ÚSuspiciousRanger   Nc                 ó0   — d| _         d| _        d | _        d S rK   )Ú"_suspicious_successive_range_countr>   Ú_last_printable_seenr+   s    r$   rA   zSuspiciousRange.__init__Ç   s    € Ø78ˆÔ/Ø%&ˆÔØ37ˆÔ!Ð!Ð!r'   r   c                 ó*   — |                      ¦   «         S rC   rD   r"   s     r$   r%   zSuspiciousRange.eligibleÌ   rF   r'   c                 óD  — | xj         dz  c_         |                     ¦   «         st          |¦  «        s	|t          v r	d | _        d S | j        €	|| _        d S t          | j        ¦  «        }t          |¦  «        }t          ||¦  «        r| xj        dz  c_        || _        d S rX   )r>   Úisspacer   r   rv   r   Ú is_suspiciously_successive_rangeru   )r#   r   Úunicode_range_aÚunicode_range_bs       r$   r)   zSuspiciousRange.feedÏ   s¾   € ØÐÔ Ñ"ÐÔð ×ÒÑÔð	å˜iÑ(Ô(ð	ð Õ8Ð8Ð8à(,ˆDÔ%ØˆFàÔ$Ð,Ø(1ˆDÔ%ØˆFå)6°tÔ7PÑ)QÔ)QˆÝ)6°yÑ)AÔ)Aˆå+¨O¸_ÑMÔMð 	9ØÐ3Ô3°qÑ8Ð3Ô3à$-ˆÔ!Ð!Ð!r'   c                 ó0   — d| _         d| _        d | _        d S rK   )r>   ru   rv   r+   s    r$   r,   zSuspiciousRange.resetæ   s    € Ø !ˆÔØ23ˆÔ/Ø$(ˆÔ!Ð!Ð!r'   c                 óT   — | j         dk    rdS | j        dz  | j         z  }|dk     rdS |S )Nr   rM   rH   gš™™™™™¹?)r>   ru   )r#   Úratio_of_suspicious_range_usages     r$   r.   zSuspiciousRange.ratioë   sH   € àÔ  AÒ%Ð%Ø�3ð Ô3°aÑ7ØÔ!ñ2"Ð'ð +¨SÒ0Ð0Ø�3à.Ð.r'   r/   rO   r8   r'   r$   rs   rs   Æ   s§   € € € € € ð8ð 8ð 8ð 8ð
' #ð '¨$ð 'ð 'ð 'ð 'ð.˜cð . dð .ð .ð .ð .ð.)ð )ð )ð )ð
 ð/�uð /ð /ð /ñ „Xð/ð /ð /r'   rs   c                   óZ   — e Zd Zd	d„Zdedefd„Zdeddfd„Zd	d„Ze	de
fd„¦   «         ZdS )
ÚSuperWeirdWordPluginr   Nc                 ó„   — d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d S )Nr   FÚ )	Ú_word_countÚ_bad_word_countÚ_foreign_long_countÚ_is_current_word_badÚ_foreign_long_watchr>   Ú_bad_character_countÚ_bufferÚ_buffer_accent_countr+   s    r$   rA   zSuperWeirdWordPlugin.__init__û   sO   € Ø !ˆÔØ$%ˆÔØ()ˆÔ à*/ˆÔ!Ø).ˆÔ à%&ˆÔØ)*ˆÔ!àˆŒØ)*ˆÔ!Ð!Ð!r'   r   c                 ó   — dS rb   r8   r"   s     r$   r%   zSuperWeirdWordPlugin.eligible	  rc   r'   c                 óâ  — |                      ¦   «         r¶| xj        |z  c_        t          |¦  «        r| xj        dz  c_        | j        du r|t          |¦  «        du st          |¦  «        r\t          |¦  «        du rKt          |¦  «        du r:t          |¦  «        du r)t          |¦  «        du rt          |¦  «        du rd| _        d S | j        sd S |                     ¦   «         st          |¦  «        st          |¦  «        �r"| j        �r| xj        dz  c_        t          | j        ¦  «        }| xj        |z  c_        |dk    re| j        |z  dk    rd| _        t          | j        d         ¦  «        r6| j        d                              ¦   «         r| xj        dz  c_        d| _        |dk    r| j        r| xj        dz  c_        d| _        | j        r9| xj        dz  c_        | xj        t          | j        ¦  «        z  c_        d| _        d| _        d| _        d	| _        d S |d
vr>|                     ¦   «         du r*t/          |¦  «        rd| _        | xj        |z  c_        d S d S d S d S )Nr   FTé   gÃõ(\�ÂÕ?éÿÿÿÿé   rƒ   r   >   Ú_ú-ú<ú=ú>ú|ú~)rV   rŠ   r   r‹   rˆ   r   r   r   r   r   r   ry   r   r   r„   Úlenr>   r‡   ro   r†   r…   r‰   rI   r   )r#   r   Úbuffer_lengths      r$   r)   zSuperWeirdWordPlugin.feed  sÖ  € Ø×ÒÑÔð 	ØˆLŒL˜IÑ%ˆLŒLÝ˜iÑ(Ô(ð /ØÐ)Ô)¨QÑ.Ð)Ô)àÔ(¨EÐ1Ð1Ý˜iÑ(Ô(¨EÐ1Ð1µ^ÀIÑ5NÔ5NÐ1Ý˜9Ñ%Ô%¨Ð.Ð.Ý˜iÑ(Ô(¨EÐ1Ð1Ý 	Ñ*Ô*¨eÐ3Ð3Ý 	Ñ*Ô*¨eÐ3Ð3Ý˜IÑ&Ô&¨%Ð/Ð/à+/�Ô(ØˆFØŒ|ð 	ØˆFà×ÒÑÔð"	&Ý#1°)Ñ#<Ô#<ð"	&Ý@LÈYÑ@WÔ@Wñ"	&àŒlñ"	&ð ÐÔ Ñ!ÐÔÝ!$ T¤\Ñ!2Ô!2ˆMàÐ!Ô! ]Ñ2Ð!Ô!à Ò!Ð!ØÔ,¨}Ñ<¸tÒCÐCØ04�DÔ-õ " $¤,¨rÔ"2Ñ3Ô3ð 5¸¼ÀRÔ8H×8PÒ8PÑ8RÔ8Rð 5ØÐ,Ô,°Ñ1Ð,Ô,Ø04�DÔ-Ø Ò"Ð" tÔ'?Ð"ØÐ(Ô(¨AÑ-Ð(Ô(Ø,0�Ô)àÔ(ð 2ØÐ$Ô$¨Ñ)Ð$Ô$ØÐ)Ô)­S°´Ñ->Ô->Ñ>Ð)Ô)Ø,1�Ô)à',ˆDÔ$ØˆDŒLØ()ˆDÔ%Ð%Ð%àÐ@Ð@Ð@Ø×!Ò!Ñ#Ô# uÐ,Ð,Ý˜)Ñ$Ô$ð -ð )-ˆDÔ%ØˆLŒL˜IÑ%ˆLŒLˆLˆLð AÐ@Ø,Ð,Ð,Ð,r'   c                 óv   — d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        d S )Nrƒ   Fr   )rŠ   r‡   rˆ   r…   r„   r>   r‰   r†   r+   s    r$   r,   zSuperWeirdWordPlugin.resetB  sG   € ØˆŒØ$)ˆÔ!Ø#(ˆÔ Ø ˆÔØˆÔØ !ˆÔØ$%ˆÔ!Ø#$ˆÔ Ð Ð r'   c                 óP   — | j         dk    r| j        dk    rdS | j        | j        z  S )Né
   r   rM   )r„   r†   r‰   r>   r+   s    r$   r.   zSuperWeirdWordPlugin.ratioL  s3   € àÔ˜rÒ!Ð! dÔ&>À!Ò&CÐ&CØ�3àÔ(¨4Ô+@Ñ@Ð@r'   r/   rO   r8   r'   r$   r�   r�   ú   s¯   € € € € € ð+ð +ð +ð +ð #ð ¨$ð ð ð ð ð4&˜cð 4& dð 4&ð 4&ð 4&ð 4&ðl%ð %ð %ð %ð ðA�uð Að Að Añ „XðAð Að Ar'   r�   c                   ó^   — e Zd ZdZd
d„Zdedefd„Zdeddfd„Zd
d„Z	e
defd	„¦   «         ZdS )ÚCjkInvalidStopPluginu²   
    GB(Chinese) based encoding often render the stop incorrectly when the content does not fit and
    can be easily detected. Searching for the overuse of 'ä¸…' and 'ä¸„'.
    r   Nc                 ó"   — d| _         d| _        d S rK   ©Ú_wrong_stop_countÚ_cjk_character_countr+   s    r$   rA   zCjkInvalidStopPlugin.__init__Z  s   € Ø&'ˆÔØ)*ˆÔ!Ð!Ð!r'   r   c                 ó   — dS rb   r8   r"   s     r$   r%   zCjkInvalidStopPlugin.eligible^  rc   r'   c                 ót   — |dv r| xj         dz  c_         d S t          |¦  «        r| xj        dz  c_        d S d S )N>   õ   ä¸„õ   ä¸…r   )r¡   r   r¢   r"   s     r$   r)   zCjkInvalidStopPlugin.feeda  sZ   € Ø˜Ð&Ð&ØÐ"Ô" aÑ'Ð"Ô"ØˆFÝ�)ÑÔð 	+ØÐ%Ô%¨Ñ*Ð%Ô%Ð%Ð%ð	+ð 	+r'   c                 ó"   — d| _         d| _        d S rK   r    r+   s    r$   r,   zCjkInvalidStopPlugin.reseth  s   € Ø!"ˆÔØ$%ˆÔ!Ð!Ð!r'   c                 ó:   — | j         dk     rdS | j        | j         z  S )Né   rM   )r¢   r¡   r+   s    r$   r.   zCjkInvalidStopPlugin.ratiol  s&   € àÔ$ rÒ)Ð)Ø�3ØÔ%¨Ô(AÑAÐAr'   r/   )r0   r1   r2   r3   rA   r4   r5   r%   r)   r,   r6   r7   r.   r8   r'   r$   rž   rž   T  s¸   € € € € € ðð ð
+ð +ð +ð +ð #ð ¨$ð ð ð ð ð+˜cð + dð +ð +ð +ð +ð&ð &ð &ð &ð ðB�uð Bð Bð Bñ „XðBð Bð Br'   rž   c                   óZ   — e Zd Zd	d„Zdedefd„Zdeddfd„Zd	d„Ze	de
fd„¦   «         ZdS )
ÚArchaicUpperLowerPluginr   Nc                 óh   — d| _         d| _        d| _        d| _        d| _        d | _        d| _        d S )NFr   T)Ú_bufÚ_character_count_since_last_sepÚ_successive_upper_lower_countÚ#_successive_upper_lower_count_finalr>   Ú_last_alpha_seenÚ_current_ascii_onlyr+   s    r$   rA   z ArchaicUpperLowerPlugin.__init__t  s?   € ØˆŒ	à45ˆÔ,à23ˆÔ*Ø89ˆÔ0à%&ˆÔà/3ˆÔØ)-ˆÔ Ð Ð r'   r   c                 ó   — dS rb   r8   r"   s     r$   r%   z ArchaicUpperLowerPlugin.eligible�  rc   r'   c                 ó  — |                      ¦   «         ot          |¦  «        }|du }|r| j        dk    rt| j        dk    r4|                     ¦   «         du r| j        du r| xj        | j        z  c_        d| _        d| _        d | _        d| _        | xj	        dz  c_	        d| _        d S | j        du rt          |¦  «        du rd| _        | j        �Š|                     ¦   «         r| j                             ¦   «         s-|                     ¦   «         rB| j                             ¦   «         r)| j        du r| xj        dz  c_        d| _        nd| _        nd| _        | xj	        dz  c_	        | xj        dz  c_        || _        d S )NFr   é@   r   TrH   )rV   r   r®   rI   r²   r°   r¯   r±   r­   r>   r   ro   Úislower)r#   r   Úis_concernedÚ	chunk_seps       r$   r)   zArchaicUpperLowerPlugin.feed„  sÇ  € Ø ×(Ò(Ñ*Ô*ÐJÕ/?À	Ñ/JÔ/JˆØ  EÐ)ˆ	àð 	˜Ô=ÀÒAÐAàÔ4¸Ò:Ð:Ø×%Ò%Ñ'Ô'¨5Ð0Ð0ØÔ,°Ð5Ð5àÐ8Ô8ØÔ6ñÐ8Ô8ð 23ˆDÔ.Ø34ˆDÔ0Ø$(ˆDÔ!ØˆDŒIØÐ!Ô! QÑ&Ð!Ô!Ø'+ˆDÔ$àˆFàÔ# tÐ+Ð+µ¸Ñ0CÔ0CÀuÐ0LÐ0LØ',ˆDÔ$àÔ Ð,Ø×!Ò!Ñ#Ô#ð 	"¨Ô(=×(EÒ(EÑ(GÔ(Gð 	"Ø×!Ò!Ñ#Ô#ð	"Ø(,Ô(=×(EÒ(EÑ(GÔ(Gð	"ð ”9 Ð$Ð$ØÐ6Ô6¸!Ñ;Ð6Ô6Ø %�D”I�Ià $�D”I�Ià!�”	àÐÔ Ñ"ÐÔØÐ,Ô,°Ñ1Ð,Ô,Ø )ˆÔÐÐr'   c                 óh   — d| _         d| _        d| _        d| _        d | _        d| _        d| _        d S )Nr   FT)r>   r®   r¯   r°   r±   r­   r²   r+   s    r$   r,   zArchaicUpperLowerPlugin.reset®  s?   € Ø !ˆÔØ/0ˆÔ,Ø-.ˆÔ*Ø34ˆÔ0Ø $ˆÔØˆŒ	Ø#'ˆÔ Ð Ð r'   c                 ó:   — | j         dk    rdS | j        | j         z  S )Nr   rM   )r>   r°   r+   s    r$   r.   zArchaicUpperLowerPlugin.ratio·  s&   € àÔ  AÒ%Ð%Ø�3àÔ7¸$Ô:OÑOÐOr'   r/   rO   r8   r'   r$   r«   r«   s  s¯   € € € € € ð.ð .ð .ð .ð #ð ¨$ð ð ð ð ð(*˜cð (* dð (*ð (*ð (*ð (*ðT(ð (ð (ð (ð ðP�uð Pð Pð Pñ „XðPð Pð Pr'   r«   é   )Úmaxsizer{   r|   r   c                 ó®  — | �|€dS | |k    rdS d| v rd|v rdS d| v sd|v rdS d| v sd|v r
d| v sd|v rdS |                       d¦  «        |                      d¦  «        }}|D ]}|t          v rŒ||v r dS Œ| dv |dv }}|s|r
d	| v sd	|v rdS |r|rdS d
| v sd
|v rd	| v sd	|v rdS | dk    s|dk    rdS d	| v sd	|v s| dv r|dv rd| v sd|v rdS d| v sd|v rdS dS )za
    Determine if two Unicode range seen next to each other can be considered as suspicious.
    NTFÚLatinÚ	EmoticonsÚ	Combiningú )ÚHiraganaÚKatakanaÚCJKÚHangulzBasic Latin)rÃ   rÂ   ÚPunctuationÚForms)Úsplitr
   )r{   r|   Úkeywords_range_aÚkeywords_range_bÚelÚrange_a_jp_charsÚrange_b_jp_charss          r$   rz   rz   ¿  s  € ð Ð /Ð"9Øˆtà˜/Ò)Ð)Øˆuà�/Ð!Ð! g°Ð&@Ð&@Øˆuà�oÐ%Ð%¨¸Ð)GÐ)GØˆuð 	�?Ð"Ð" g°Ð&@Ð&@Ø�Ð&Ð&¨+¸Ð*HÐ*Hàˆuà)8×)>Ò)>Øñ*ô *à×Ò˜SÑ!Ô!ð 'Ðð ð ð ˆØÕ0Ð0Ð0ØØÐ!Ð!Ð!Ø�5�5ð "ð
 	ð
ð	
ð
 	Ð3Ð3ð 'Ðð 	ð Ð,ð Ø�Ð Ð  E¨_Ð$<Ð$<àˆuØð Ð,ð Øˆuà�?Ð"Ð" h°/Ð&AÐ&AØ�OÐ#Ð# u°Ð'?Ð'?Ø�5Ø˜mÒ+Ð+¨À-Ò/OÐ/OØ�5ð 	�Ð Ð  E¨_Ð$<Ð$<ØÐ3Ð3Ð3ØÐ7Ð7Ð7à˜OÐ+Ð+¨}ÀÐ/OÐ/OØ�5Ø�oÐ%Ð%¨°OÐ)CÐ)CØ�5àˆ4r'   i   çš™™™™™É?FÚdecoded_sequenceÚmaximum_thresholdÚdebugc           	      óZ  — d„ t                                ¦   «         D ¦   «         }t          | ¦  «        dz   }d}|dk     rd}n|dk    rd}nd}t          | d	z   t	          |¦  «        ¦  «        D ]m\  }}|D ],}	|	                     |¦  «        r|	                     |¦  «         Œ-|d
k    r	||z  d
k    s	||dz
  k    r!t          d„ |D ¦   «         ¦  «        }||k    r nŒn|rÁt          d¦  «        }
|
 	                    t          d|› d|› d|› �¦  «         t          | ¦  «        dk    rL|
 	                    t          d| dd…         › �¦  «         |
 	                    t          d| dd…         › �¦  «         |D ],}|
 	                    t          |j        › d|j        › �¦  «         Œ-t          |d¦  «        S )zw
    Compute a mess ratio given a decoded bytes sequence. The maximum threshold does stop the computation earlier.
    c                 ó"   — g | ]} |¦   «         ‘ŒS r8   r8   )Ú.0Úmd_classs     r$   ú
<listcomp>zmess_ratio.<locals>.<listcomp>  s+   € ð +ð +ð +Øˆˆ‰
Œ
ð+ð +ð +r'   r   rM   i   é    r»   rµ   é€   ú
r   c              3   ó$   K  — | ]}|j         V — Œd S rC   )r.   )rÔ   Údts     r$   ú	<genexpr>zmess_ratio.<locals>.<genexpr>%  s$   è è € Ð!?Ð!?¨r "¤(Ð!?Ð!?Ð!?Ð!?Ð!?Ð!?r'   Úcharset_normalizerzIMess-detector extended-analysis start. intermediary_mean_mess_ratio_calc=z mean_mess_ratio=z maximum_threshold=r©   zStarting with: NzEnding with: iðÿÿÿz: é   )r   Ú__subclasses__r˜   ÚzipÚranger%   r)   Úsumr   Úlogr	   Ú	__class__r.   Úround)rÏ   rÐ   rÑ   Ú	detectorsÚlengthÚmean_mess_ratioÚ!intermediary_mean_mess_ratio_calcr   ÚindexÚdetectorÚloggerrÛ   s               r$   Ú
mess_ratiorí     s1  € ð+ð +Ý#5×#DÒ#DÑ#FÔ#Fð+ñ +ô +€Iõ Ð&Ñ'Ô'¨!Ñ+€Fà €Oà�‚|€|Ø13Ð)Ð)Ø	�4ŠˆØ,.Ð)Ð)à,/Ð)åÐ 0°4Ñ 7½¸v¹¼ÑGÔGð ð Ñˆ	�5Ø!ð 	)ð 	)ˆHØ× Ò  Ñ+Ô+ð )Ø—’˜iÑ(Ô(Ð(øð �AŠIˆI˜%Ð"CÑCÀqÒHÐHØ�f˜q‘jÒ Ð Ý!Ð!?Ð!?°YÐ!?Ñ!?Ô!?Ñ?Ô?ˆOàÐ"3Ò3Ð3Ø�øàð =ÝÐ/Ñ0Ô0ˆà�
Š
Ýð5Ø1Rð5ð 5Øetð5ð 5à!2ð5ð 5ñ	
ô 	
ð 	
õ ÐÑ Ô  2Ò%Ð%Ø�JŠJ•uÐGÐ0@ÀÀ"ÀÔ0EÐGÐGÑHÔHÐHØ�JŠJ•uÐGÐ.>¸s¸u¸uÔ.EÐGÐGÑHÔHÐHàð 	=ð 	=ˆBØ�JŠJ•u ¤Ð;Ð;°´Ð;Ð;Ñ<Ô<Ð<Ð<å� !Ñ$Ô$Ð$r'   N)rÎ   F)*Ú	functoolsr   Úloggingr   Útypingr   r   Úconstantr   r	   r
   Úutilsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r:   rQ   r^   rh   rs   r�   rž   r«   r4   r5   rz   r7   rí   r8   r'   r$   ú<module>ró      s«  ðØ Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ð !Ð !ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð("ð "ð "ð "ð "ñ "ô "ð "ðD,Lð ,Lð ,Lð ,Lð ,LÐ'9ñ ,Lô ,Lð ,Lð^Oð Oð Oð Oð OÐ1ñ Oô Oð Oð4Eð Eð Eð Eð EÐ*ñ Eô Eð Eð0"Dð "Dð "Dð "Dð "DÐ&8ñ "Dô "Dð "DðJ1/ð 1/ð 1/ð 1/ð 1/Ð(ñ 1/ô 1/ð 1/ðhWAð WAð WAð WAð WAÐ-ñ WAô WAð WAðtBð Bð Bð Bð BÐ-ñ Bô Bð Bð>IPð IPð IPð IPð IPÐ0ñ IPô IPð IPðX €�4ÐÑÔðCØ˜c”]ðCØ5=¸c´]ðCà	ðCð Cð Cñ ÔðCðL €�4ÐÑÔàINð4%ð 4%Øð4%Ø.3ð4%ØBFð4%à
ð4%ð 4%ð 4%ñ Ôð4%ð 4%ð 4%r'   