§
    Öu•c€f  ã                   óÂ  — d Z ddlZddlZddlZddlZddlZddlmZ ddlZddl	m
Z
mZ ddlmZ dZi ZdZdadZdaej        d         dk    Zd„ Zd5d	„Z G d
„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ d¦  «        Z G d„ de¦  «        Z G d„ d¦  «        Z  G d„ de¦  «        Z! edd¦  «        Z" edd¦  «        Z# edd¦  «        Z$ edd¦  «        Z% edd¦  «        Z& edd ¦  «        Z' edd!¦  «        Z( edd"¦  «        Z) edd#¦  «        Z* edd$¦  «        Z+d%a,d&„ Z-d'„ Z.d(„ Z/d6d*„Z0d6d+„Z1d,„ Z2d7d.„Z3d8d/„Z4d0„ Z5erd1„ Z6nd2„ Z6da7d%a8d3„ Z9d4„ Z:dS )9a¡  
This module is based on a rox module (LGPL):

http://cvs.sourceforge.net/viewcvs.py/rox/ROX-Lib2/python/rox/mime.py?rev=1.21&view=log

This module provides access to the shared MIME database.

types is a dictionary of all known MIME types, indexed by the type name, e.g.
types['application/x-python']

Applications can install information about MIME types by storing an
XML file as <MIME>/packages/<application>.xml and running the
update-mime-database command, which is provided by the freedesktop.org
shared mime database package.

See http://www.freedesktop.org/standards/shared-mime-info-spec/ for
information about the format of these files.

(based on version 0.13)
é    N)ÚBaseDirectory)ÚminidomÚXML_NAMESPACE)Údefaultdictz5http://www.freedesktop.org/standards/shared-mime-infoé   c                 ón   — d                      d„ | j        D ¦   «         ¦  «                             ¦   «         S )zGet text of XML nodeÚ c                 ó   — g | ]	}|j         ‘Œ
S © )Ú	nodeValue)Ú.0Úns     ú*/usr/lib/python3/dist-packages/xdg/Mime.pyú
<listcomp>z"_get_node_data.<locals>.<listcomp>/   s   € Ð9Ð9Ð9 A�A”KÐ9Ð9Ð9ó    )ÚjoinÚ
childNodesÚstrip)Únodes    r   Ú_get_node_datar   -   s1   € à�7Š7Ð9Ð9¨¬Ð9Ñ9Ô9Ñ:Ô:×@Ò@ÑBÔBÐBr   c                 ó"   — t          | |¦  «        S )zõGet the MIMEtype object for the given type.
    
    This remains for backwards compatibility; calling MIMEtype now does
    the same thing.
    
    The name can either be passed as one part ('text/plain'), or as two
    ('text', 'plain').
    )ÚMIMEtype©ÚmediaÚsubtypes     r   Úlookupr   1   s   € õ �E˜7Ñ#Ô#Ð#r   c                   óT   ‡ — e Zd ZdZdˆ fd„	Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zˆ xZS )r   zöClass holding data about a MIME type.
    
    Calling the class will return a cached instance, so there is only one 
    instance for each MIME type. The name can either be passed as one part
    ('text/plain'), or as two ('text', 'plain').
    Nc                 óv  •— |€d|v r|                      dd¦  «        \  }}d|vsJ ‚|                     ¦   «         }|                     ¦   «         }	 t          ||f         S # t          $ rO t	          t
          | ¦  «                             | ¦  «        }|                     ||¦  «         |t          ||f<   |cY S w xY w)Nú/é   )ÚsplitÚlowerÚtypesÚKeyErrorÚsuperr   Ú__new__Ú_init)Úclsr   r   ÚmtypeÚ	__class__s       €r   r&   zMIMEtype.__new__C   sË   ø€ Øˆ?˜s e˜|˜|Ø"Ÿ[š[¨¨aÑ0Ô0‰NˆE�7Ø˜'Ð!Ð!Ð!Ð!Ø—’‘”ˆØ—-’-‘/”/ˆð	Ý˜% Ð)Ô*Ð*øÝð 	ð 	ð 	Ý�( CÑ(Ô(×0Ò0°Ñ5Ô5ˆEØ�KŠK˜˜wÑ'Ô'Ð'Ø&+�E�5˜'Ð"Ñ#ØˆLˆLˆLð		øøøs   ÁA ÁAB8Â7B8c                 ó0   — || _         || _        d | _        d S ©N)r   r   Ú_comment)Úselfr   r   s      r   r'   zMIMEtype._initU   s   € ØˆŒ
ØˆŒØˆŒˆˆr   c                 óÌ  — t           j                             d| j        | j        dz   ¦  «        }t          j        |¦  «        D ] }t          j        |¦  «        }|€Œ|j	         
                    t          d¦  «        D ]f}|                     t          d¦  «        pd}d|t          j        j        v z   }|| j        d         k    r|t%          |¦  «        f| _        |d	k    r  dS ŒgŒ¡dS )
z>Loads comment for current language. Use get_comment() instead.Úmimeú.xmlNÚcommentÚlangÚenr    r   é   )ÚosÚpathr   r   r   r   Úload_data_pathsr   ÚparseÚdocumentElementÚgetElementsByTagNameNSÚFREE_NSÚgetAttributeNSr   ÚxdgÚLocaleÚlangsr-   r   )r.   Úresourcer7   Údocr2   r3   Úgoodnesss          r   Ú_loadzMIMEtype._loadZ   së   € å”7—<’< ¨¬
°D´LÀ6Ñ4IÑJÔJˆÝ!Ô1°(Ñ;Ô;ð 		)ð 		)ˆDÝ”- Ñ%Ô%ˆCØˆ{ØØÔ.×EÒEÅgÈyÑYÔYð )ð )�Ø×-Ò-­m¸VÑDÔDÐLÈ�Ø ­¬
Ô(8Ð 8Ñ9�Ø˜dœm¨AÔ.Ò.Ð.Ø%-­~¸gÑ/FÔ/FÐ$G�D”MØ˜q’=�= & & & &�=ð)ð			)ð 		)r   c                 ó~   — | j         €*dt          | ¦  «        f| _         |                      ¦   «          | j         d         S )z;Returns comment for current language, loading it if needed.Nr   r    )r-   ÚstrrD   ©r.   s    r   Úget_commentzMIMEtype.get_commenti   s7   € ð Œ=Ð Ø¥ D¡	¤	˜NˆDŒMØ�JŠJ‰LŒLˆLØŒ}˜QÔÐr   c                 ó†   — t          ¦   «          t          | ¦  «        }|t          v rt          t          |         ¦  «        S | S )z:Returns the canonical MimeType object if this is an alias.)Úupdate_cacherF   Úaliasesr   )r.   Úss     r   Ú	canonicalzMIMEtype.canonicalq   s6   € å‰ŒˆÝ�‰IŒIˆØ•ˆ<ˆ<Ý�' !œ*Ñ%Ô%Ð%Øˆr   c                 ó€   — t          ¦   «          t          d„ t          t          | ¦  «                 D ¦   «         ¦  «        S )z5Returns a set of Mime types which this inherits from.c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r,   )r   )r   Úts     r   ú	<genexpr>z)MIMEtype.inherits_from.<locals>.<genexpr>|   s(   è è € Ð=Ð= •6˜!‘9”9Ð=Ð=Ð=Ð=Ð=Ð=r   )rJ   ÚsetÚinheritancerF   rG   s    r   Úinherits_fromzMIMEtype.inherits_fromy   s3   € å‰ŒˆÝÐ=Ð=¥kµ#°d±)´)Ô&<Ð=Ñ=Ô=Ñ=Ô=Ð=r   c                 ó&   — | j         dz   | j        z   S )Nr   r   rG   s    r   Ú__str__zMIMEtype.__str__~   s   € ØŒz˜CÑ $¤,Ñ.Ð.r   c                 ó(   — d| j         ›d| j        ›d�S )Nz	MIMEtype(z, ú)r   rG   s    r   Ú__repr__zMIMEtype.__repr__�   s   € € Ø%)¤Z Z Z°´°°Ð>Ð>r   c                 óT   — t          | j        ¦  «        t          | j        ¦  «        z  S r,   )Úhashr   r   rG   s    r   Ú__hash__zMIMEtype.__hash__„   s!   € Ý�D”JÑÔ¥$ t¤|Ñ"4Ô"4Ñ4Ð4r   r,   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&   r'   rD   rH   rM   rT   rV   rY   r\   Ú__classcell__)r*   s   @r   r   r   <   s¿   ø€ € € € € ðð ðð ð ð ð ð ð$ð ð ð
)ð )ð )ð ð  ð  ðð ð ð>ð >ð >ð
/ð /ð /ð?ð ?ð ?ð5ð 5ð 5ð 5ð 5ð 5ð 5r   r   c                   ó   — e Zd ZdS )ÚUnknownMagicRuleFormatN)r]   r^   r_   r   r   r   rc   rc   ‡   s   € € € € € Ø€Dr   rc   c                   ó   — e Zd ZdZdS )ÚDiscardMagicRuleszGRaised when __NOMAGIC__ is found, and caught to discard previous rules.N)r]   r^   r_   r`   r   r   r   re   re   Š   s   € € € € € ØMÐMØ€Dr   re   c                   óf   — e Zd ZdZd„ Z ej        d¦  «        Zed„ ¦   «         Z	d„ Z
d„ Zd„ Zd„ ZdS )	Ú	MagicRuleNc                 óL   — || _         || _        || _        || _        || _        d S r,   ©ÚstartÚvalueÚmaskÚwordÚrange)r.   rj   rk   rl   rm   rn   s         r   Ú__init__zMagicRule.__init__‘   s)   € ØˆŒ
ØˆŒ
ØˆŒ	ØˆŒ	ØˆŒ
ˆ
ˆ
r   s   (?:~(\d+))?(?:\+(\d+))?\n$c                 ó^  — |                      ¦   «         }|                     dd¦  «        \  }}|rt          |¦  «        nd}|                     dd¦  «        \  }}t          |¦  «        }|dk    rt          ‚t          j        d         dk    r%t                               |dd…         d	¬
¦  «        }n.t          |d         ¦  «        dz  t          |d         ¦  «        z   }|dd…         }t          |¦  «        |k    r*||                      ¦   «         z  }t          |¦  «        |k    °*|d|…         ||d…         }}| 	                    d¦  «        rXt          |¦  «        |k    r*||                      ¦   «         z  }t          |¦  «        |k    °*|d|dz   …         ||dz   d…         }}nd}| j
                             |¦  «        }|st          t          |¦  «        ¦  «        ‚|                     ¦   «         \  }	}
|	�t          |	¦  «        nd}	|
�t          |
¦  «        nd}
| | ||||	|
¦  «        fS )zjRead a rule from the binary magics file. Returns a 2-tuple of
        the nesting depth and the MagicRule.ó   >r    r   ó   =s   __NOMAGIC__
r   Nr5   Úbig)Ú	byteorderé   ó   &)Úreadliner!   Úintre   ÚsysÚversion_infoÚ
from_bytesÚordÚlenÚ
startswithÚrule_ending_reÚmatchrc   ÚreprÚgroups)r(   ÚfÚlineÚ
nest_depthrj   Úlenvaluerk   rl   Úendingrm   rn   s              r   Ú	from_filezMagicRule.from_fileš   s+  € ð �zŠz‰|Œ|ˆð  Ÿ:š: d¨AÑ.Ô.Ñˆ
�DØ(2Ð9•S˜‘_”_�_¸ˆ
ð —j’j  qÑ)Ô)‰ˆˆtÝ�E‘
”
ˆàÐ#Ò#Ð#Ý#Ð#õ Ô˜AÔ !Ò#Ð#Ý—~’~ d¨2¨A¨2¤h¸%�~Ñ@Ô@ˆHˆHå˜D œG™œ a™­¨T°!¬W©¬Ñ5ˆHØ�A�B�BŒxˆõ �$‰iŒi˜8Ò#Ð#Ø�A—J’J‘L”LÑ ˆDõ �$‰iŒi˜8Ò#Ð#à˜9˜H˜9”o t¨H¨I¨I¤ˆtˆð �?Š?˜4Ñ Ô ð 	å�d‘)”)˜xÒ'Ð'Ø˜Ÿ
š
™œÑ$�õ �d‘)”)˜xÒ'Ð'à˜a ¨¡
˜lÔ+¨T°(¸1±*°+°+Ô->�$ˆDˆDàˆDð Ô#×)Ò)¨$Ñ/Ô/ˆØð 	5õ )­¨d©¬Ñ4Ô4Ð4à—m’m‘o”o‰ˆˆeØ!Ð-�s�4‰yŒyˆy°AˆØ$Ð0•�E‘
”
�
°qˆà˜3˜3˜u e¨T°4¸Ñ?Ô?Ð?Ð?r   c                 óª   — | j         t          | j        ¦  «        z   | j        z   }| j        r't          || j                             ¦   «         ¦  «        S |S r,   )rj   r}   rk   rn   ÚalsoÚmaxÚmaxlen)r.   Úls     r   rŒ   zMagicRule.maxlenÏ   sJ   € ØŒJ�˜TœZ™œÑ(¨4¬:Ñ5ˆØŒ9ð 	.Ý�q˜$œ)×*Ò*Ñ,Ô,Ñ-Ô-Ð-Øˆr   c                 óv   — |                       |¦  «        r#| j        r| j                             |¦  «        S dS d S )NT)Úmatch0rŠ   r€   ©r.   Úbuffers     r   r€   zMagicRule.matchÕ   sC   € Ø�;Š;�vÑÔð 	ØŒyð /Ø”y—’ vÑ.Ô.Ð.Ø�4ð	ð 	r   c                 óÞ  — t          |¦  «        }t          | j        ¦  «        }t          | j        ¦  «        D ]´}| j        |z   }||z   }||k     r dS | j        r{d}t          |¦  «        D ]h}t
          r|||z            | j        |         z  }	n3t          |||z            ¦  «        t          | j        |         ¦  «        z  }	|t          |	¦  «        z  }Œin
|||…         }|| j        k    r dS Œµd S )NFr	   T)r}   rk   rn   rj   rl   ÚPY3r|   Úchr)
r.   r‘   r�   r†   ÚorL   ÚeÚtestÚiÚcs
             r   r�   zMagicRule.match0Û   s  € Ý
ˆf‰+Œ+ˆÝ�t”z‘?”?ˆÝ�t”zÑ"Ô"ð 	ð 	ˆAØŒj˜‰lˆAØ�‰jˆAØ�ŠsˆsØ�u�uØŒyð 	#Ø�Ý˜x™œð #ð #�AÝð AØ" 1 Q¡3œK¨$¬)°A¬,Ñ6˜˜å  q¨¡s¤Ñ,Ô,­s°4´9¸Q´<Ñ/@Ô/@Ñ@˜Ø�C ™FœF‘N�D�Dð#ð ˜a ˜c”{�à�T”ZÒÐØ�t�tð  ð!	ð 	r   c                 óX   — d| j         ›d| j        ›d| j        ›d| j        ›d| j        ›d�S )NzMagicRule(start=z, value=z, mask=z, word=z, range=rX   ri   rG   s    r   rY   zMagicRule.__repr__ñ   s;   € € à"&¤* * *Ø"&¤* * *Ø"&¤) ) )Ø"&¤) ) )Ø"&¤* * *ð.ð 	.r   )r]   r^   r_   rŠ   ro   ÚreÚcompiler   Úclassmethodrˆ   rŒ   r€   r�   rY   r   r   r   rg   rg   Ž   s•   € € € € € Ø€Dðð ð ð  �R”ZÐ >Ñ?Ô?€Nàð2@ð 2@ñ „[ð2@ðhð ð ðð ð ðð ð ð,.ð .ð .ð .ð .r   rg   c                   óP   — e Zd ZdZd„ Zd„ Zd„ Zed„ ¦   «         Zed„ ¦   «         Z	dS )ÚMagicMatchAnyz©Match any of a set of magic rules.
    
    This has a similar interface to MagicRule objects (i.e. its match() and
    maxlen() methods), to allow for duck typing.
    c                 ó   — || _         d S r,   )Úrules)r.   r¡   s     r   ro   zMagicMatchAny.__init__   s   € ØˆŒ
ˆ
ˆ
r   c                 óD   ‡— t          ˆfd„| j        D ¦   «         ¦  «        S )Nc              3   óB   •K  — | ]}|                      ‰¦  «        V — Œd S r,   )r€   )r   Úrr‘   s     €r   rQ   z&MagicMatchAny.match.<locals>.<genexpr>  s-   øè è € Ð7Ð7 q�1—7’7˜6‘?”?Ð7Ð7Ð7Ð7Ð7Ð7r   )Úanyr¡   r�   s    `r   r€   zMagicMatchAny.match  s(   ø€ ÝÐ7Ð7Ð7Ð7¨D¬JÐ7Ñ7Ô7Ñ7Ô7Ð7r   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó>   K  — | ]}|                      ¦   «         V — Œd S r,   )rŒ   )r   r¤   s     r   rQ   z'MagicMatchAny.maxlen.<locals>.<genexpr>  s*   è è € Ð2Ð2 !�1—8’8‘:”:Ð2Ð2Ð2Ð2Ð2Ð2r   )r‹   r¡   rG   s    r   rŒ   zMagicMatchAny.maxlen  s!   € ÝÐ2Ð2 t¤zÐ2Ñ2Ô2Ñ2Ô2Ð2r   c                 óè  — |                      d¦  «        }|                     dd¦  «         g }|rz|dk    rt	 |                     t                               |¦  «        ¦  «         n# t
          $ r Y nw xY w|                      d¦  «        }|r|                     dd¦  «         |r|dk    °tg }d|i}|D ],\  }}g }||                              ||f¦  «         |||dz   <   Œ-|                      |¦  «        S )z/Read a set of rules from the binary magic file.r    éÿÿÿÿó   [r   )ÚreadÚseekÚappendrg   rˆ   rc   Úfrom_rule_tree)	r(   rƒ   r™   Údepths_rulesÚtreeÚinsert_pointsÚdepthÚruleÚsubruless	            r   rˆ   zMagicMatchAny.from_file	  s*  € ð �&Š&�‰)Œ)ˆØ	�Šˆr�1‰ŒˆØˆØð 	�A˜’I�IðØ×#Ò#¥I×$7Ò$7¸Ñ$:Ô$:Ñ;Ô;Ð;Ð;øÝ)ð ð ð à�ðøøøð �fŠf�Q‰iŒiˆAØð Ø—’�r˜1‘”�ð ð 	�A˜’I�Ið ˆØ˜4˜ˆØ'ð 	.ð 	.‰KˆE�4ØˆHØ˜%Ô ×'Ò'¨¨xÐ(8Ñ9Ô9Ð9Ø%-ˆM˜% ™'Ñ"Ð"à×!Ò! $Ñ'Ô'Ð's   ·-A% Á%
A2Á1A2c                 óî   — g }|D ]6\  }}|r|                       |¦  «        |_        |                     |¦  «         Œ7t          |¦  «        dk    rdS t          |¦  «        dk    r|d         S  | |¦  «        S )a  From a nested list of (rule, subrules) pairs, build a MagicMatchAny
        instance, recursing down the tree.
        
        Where there's only one top-level rule, this is returned directly,
        to simplify the nested structure. Returns None if no rules were read.
        r   Nr    )r®   rŠ   r­   r}   )r(   r°   r¡   r³   r´   s        r   r®   zMagicMatchAny.from_rule_tree#  sˆ   € ð ˆØ"ð 	ð 	‰NˆD�(Øð 9Ø×.Ò.¨xÑ8Ô8�”	Ø�LŠL˜ÑÔÐÐåˆu‰:Œ:�qŠ=ˆ=Ø�4Ýˆu‰:Œ:�qŠ=ˆ=Ø˜”8ˆOØˆs�5‰zŒzÐr   N)
r]   r^   r_   r`   ro   r€   rŒ   r�   rˆ   r®   r   r   r   rŸ   rŸ   ú   s�   € € € € € ðð ð
ð ð ð8ð 8ð 8ð3ð 3ð 3ð ð(ð (ñ „[ð(ð2 ðð ñ „[ðð ð r   rŸ   c                   ó6   — e Zd Zd„ Zd„ Zd„ Zd
d„Zd
d„Zd	„ ZdS )ÚMagicDBc                 ó8   — t          t          ¦  «        | _        d S r,   )r   ÚlistÚbytyperG   s    r   ro   zMagicDB.__init__8  s   € Ý#¥DÑ)Ô)ˆŒˆˆr   c                 óâ  — t          |d¦  «        5 }|                     ¦   «         }|dk    rt          d¦  «        ‚	 |                     ¦   «                              d¦  «        }|snð|d         dk    s|dd	…         d
k    rt	          d|¦  «        ‚|dd…                              d¦  «        \  }}t          |¦  «        }t          |¦  «        }	 t           	                    |¦  «        }nE# t          $ r8 | j                             |d	¦  «         t           	                    |¦  «        }Y nw xY w|€Œ÷| j        |                              ||f¦  «         �Œ	 d	d	d	¦  «         d	S # 1 swxY w Y   d	S )z<Read a magic binary file, and add its rules to this MagicDB.Úrbs   MIME-Magic 
zNot a MIME magic fileTÚasciir   ú[éþÿÿÿNz]
zMalformed section headingr    ú:)Úopenrw   ÚIOErrorÚdecodeÚ
ValueErrorr!   rx   r   rŸ   rˆ   re   rº   Úpopr­   )	r.   Úfnamerƒ   r„   ÚsheadÚpriÚtnamer)   r³   s	            r   Ú
merge_filezMagicDB.merge_file;  sÂ  € å�%˜ÑÔð 	7 !Ø—:’:‘<”<ˆDØÐ(Ò(Ð(ÝÐ5Ñ6Ô6Ð6ð7ØŸ
š
™œ×+Ò+¨GÑ4Ô4�àð ØØ˜”8˜s’?�? e¨B¨C¨C¤j°EÒ&9Ð&9Ý$Ð%@À%ÑHÔHÐHØ" 1 R 4œ[×.Ò.¨sÑ3Ô3‘
��Uå˜#‘h”h�Ý˜u™œ�ð6Ý(×2Ò2°1Ñ5Ô5�D�DøÝ(ð 6ð 6ð 6Ø”K—O’O E¨4Ñ0Ô0Ð0Ý(×2Ò2°1Ñ5Ô5�D�D�Dð6øøøð �<Øð ”˜EÔ"×)Ò)¨3°¨+Ñ6Ô6Ð6ñ)7ð ð	7ð 	7ð 	7ñ 	7ô 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7øøøð 	7ð 	7ð 	7ð 	7ð 	7ð 	7s6   ‘B=E$ÃC*Ã)E$Ã*?D,Ä)E$Ä+D,Ä,*E$Å$E(Å+E(c                 ó,  — d}g | _         | j                             ¦   «         D ]L\  }}|D ]D\  }}| j                              |||f¦  «         t	          ||                     ¦   «         ¦  «        }ŒEŒM|| _        | j                              d„ d¬¦  «         dS )z{Prepare the MagicDB for matching.
        
        This should be called after all rules have been merged into it.
        r   c                 ó   — | d         S ©Nr   r   ©Úxs    r   ú<lambda>z"MagicDB.finalise.<locals>.<lambda>f  s
   € ¨¨1¬€ r   T©ÚkeyÚreverseN)Úalltypesrº   Úitemsr­   r‹   rŒ   Úsort)r.   rŒ   r)   r¡   rÈ   r³   s         r   ÚfinalisezMagicDB.finaliseX  s«   € ð
 ˆØˆŒà œK×-Ò-Ñ/Ô/ð 	4ð 	4‰LˆE�5Ø"ð 4ð 4‘	��TØ”×$Ò$ c¨5°$Ð%7Ñ8Ô8Ð8Ý˜V T§[¢[¡]¤]Ñ3Ô3��ð4ð ˆŒØŒ×Ò˜~˜~°tÐÑ<Ô<Ð<Ð<Ð<r   éd   r   Nc                 ó  — |�Jg }|D ]-}| j         |         D ]\  }}|                     |||f¦  «         ŒŒ.|                     d„ ¬¦  «         n| j        }|D ]/\  }	}
}|	|k    rŒ|	|k     r dS |                     |¦  «        r|
c S Œ0dS )a]  Do magic sniffing on some bytes.
        
        max_pri & min_pri can be used to specify the maximum & minimum priority
        rules to look for. possible can be a list of mimetypes to check, or None
        (the default) to check all mimetypes until one matches.
        
        Returns the MIMEtype found, or None if no entries match.
        Nc                 ó   — | d         S rÍ   r   rÎ   s    r   rÐ   z$MagicDB.match_data.<locals>.<lambda>v  s
   €  Q q¤T€ r   )rÒ   )rº   r­   rÖ   rÔ   r€   )r.   ÚdataÚmax_priÚmin_priÚpossibler#   ÚmtrÈ   r³   ÚpriorityÚmimetypes              r   Ú
match_datazMagicDB.match_datah  sÙ   € ð ÐØˆEØð 2ð 2�Ø!%¤¨R¤ð 2ð 2‘I�C˜Ø—L’L # r¨4 Ñ1Ô1Ð1Ð1ð2à�JŠJ˜>˜>ˆJÑ*Ô*Ð*Ð*à”MˆEà(-ð 	 ð 	 Ñ$ˆH�h à˜'Ò!Ð!ØØ˜'Ò!Ð!Ø��à�zŠz˜$ÑÔð  Ø���ð ð	 ð 	 r   c                 ó¶   — t          |d¦  «        5 }|                     | j        ¦  «        }ddd¦  «         n# 1 swxY w Y   |                      ||||¦  «        S )a¥  Read data from the file and do magic sniffing on it.
        
        max_pri & min_pri can be used to specify the maximum & minimum priority
        rules to look for. possible can be a list of mimetypes to check, or None
        (the default) to check all mimetypes until one matches.
        
        Returns the MIMEtype found, or None if no entries match. Raises IOError
        if the file can't be opened.
        r¼   N)rÁ   r«   rŒ   râ   )r.   r7   rÜ   rÝ   rÞ   rƒ   Úbufs          r   r€   zMagicDB.match„  s‘   € õ �$˜ÑÔð 	& Ø—&’&˜œÑ%Ô%ˆCð	&ð 	&ð 	&ñ 	&ô 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&øøøð 	&ð 	&ð 	&ð 	&à�Š˜s G¨W°hÑ?Ô?Ð?s   ‘8¸<¿<c                 ó0   — dt          | j        ¦  «        z  S )Nz<MagicDB (%d types)>)r}   rÔ   rG   s    r   rY   zMagicDB.__repr__’  s   € Ø%­¨D¬MÑ(:Ô(:Ñ:Ð:r   )rØ   r   N)	r]   r^   r_   ro   rÊ   r×   râ   r€   rY   r   r   r   r·   r·   7  s|   € € € € € ð*ð *ð *ð7ð 7ð 7ð:=ð =ð =ð  ð  ð  ð  ð8@ð @ð @ð @ð;ð ;ð ;ð ;ð ;r   r·   c                   ó2   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚGlobDBc                 ó8   — t          t          ¦  «        | _        dS )z‘Prepare the GlobDB. It can't actually be used until .finalise() is
        called, but merge_file() can be used to add data before that.
        N)r   rR   ÚallglobsrG   s    r   ro   zGlobDB.__init__–  s   € õ
 $¥CÑ(Ô(ˆŒˆˆr   c           	      ó   — | j         }t          |¦  «        5 }|D ]Ú}|                     d¦  «        rŒ|dd…                              d¦  «        }|dd…         \  }}}t	          |¦  «        }t          |¦  «        }	t          |¦  «        dk    r|d                              d¦  «        }
nd}
|dk    r|                     |	d¦  «         Œ¯||	                              ||t          |
¦  «        f¦  «         ŒÛ	 ddd¦  «         dS # 1 swxY w Y   dS )	z3Loads name matching information from a globs2 file.ú#Nr©   rÀ   r   ú,r   Ú__NOGLOBS__)
ré   rÁ   r~   r!   rx   r   r}   rÅ   ÚaddÚtuple)r.   r7   ré   rƒ   r„   ÚfieldsÚweightÚ	type_nameÚpatternr)   Úflagss              r   rÊ   zGlobDB.merge_file�  sn  € à”=ˆÝ�$‰ZŒZð 	E˜1Øð Eð E�Ø—?’? 3Ñ'Ô'Ð1¨à˜c˜r˜cœŸš¨Ñ-Ô-�Ø-3°B°Q°B¬ZÑ*�˜	 7Ý˜V™œ�Ý˜yÑ)Ô)�Ý�v‘;”; ’?�?Ø" 1œIŸOšO¨CÑ0Ô0�E�Eà�Eà˜mÒ+Ð+à—L’L ¨Ñ-Ô-Ð-Øà˜”×#Ò# V¨Wµe¸E±l´lÐ$CÑDÔDÐDÐDð#Eð	Eð 	Eð 	Eñ 	Eô 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eøøøð 	Eð 	Eð 	Eð 	Eð 	Eð 	Es   —CDÄDÄ
Dc                 ó€  — t          t          ¦  «        | _        t          t          ¦  «        | _        g | _        i | _        i | _        | j                             ¦   «         D �]>\  }}| 	                    ¦   «         }|D �] \  }}}d|v }| 
                    d¦  «        rp|dd…         }d|v sbd|v s^d|v sZ|r#| j        |                              ||f¦  «         n4| j        |                     ¦   «                                       ||f¦  «         Œ�d|v sd|v sd|v rV|rdnt          j        }t          j        t!          j        |¦  «        |¬	¦  «        }| j                             |||f¦  «         Œò|r||f| j        |<   �Œ||f| j        |                     ¦   «         <   �Œ"�Œ@| j                             d
d„ ¬¦  «         dS )zzPrepare the GlobDB for matching.
        
        This should be called after all files have been merged into it.
        Úcsz*.r5   NÚ*r¾   ú?r   )rô   Tc                 óF   — | d         t          | d         j        ¦  «        fS )Nr5   r   )r}   ró   rÎ   s    r   rÐ   z!GlobDB.finalise.<locals>.<lambda>Ü  s   € °Q°q´T½3¸qÀ¼t¼|Ñ;LÔ;LÐ4M€ r   )rÓ   rÒ   )r   r¹   ÚextsÚ
cased_extsÚglobsÚliteralsÚcased_literalsré   rÕ   rM   r~   r­   r"   r›   ÚIrœ   ÚfnmatchÚ	translaterÖ   )	r.   r)   rü   rñ   ró   rô   ÚcasedÚrestÚre_flagss	            r   r×   zGlobDB.finalise´  sè  € õ
  ¥Ñ%Ô%ˆŒ	Ý%¥dÑ+Ô+ˆŒØˆŒ
ØˆŒØ ˆÔà œM×/Ò/Ñ1Ô1ð 	Eñ 	E‰LˆE�5Ø—/’/Ñ#Ô#ˆ%Ø(-ð Eñ EÑ$ˆf�g˜uà˜E�MˆEà×!Ò! $Ñ'Ô'ð à˜q˜r˜r”{�Ø˜t˜˜ s¨d { {°c¸T°k°kØð HØœ¨Ô-×4Ò4°e¸V°_ÑEÔEÐEÐEàœ	 $§*¢*¡,¤,Ô/×6Ò6¸¸v°ÑGÔGÐGØà�w�� #¨ . .°C¸7°N°Nà %Ð/˜1˜1­2¬4�Ýœ*¥WÔ%6°wÑ%?Ô%?ÀxÐPÑPÔP�Ø”
×!Ò! 7¨E°6Ð":Ñ;Ô;Ð;Ð;ð ð EØ49¸6°?�DÔ'¨Ñ0Ñ0à6;¸V°_�D”M '§-¢-¡/¤/Ñ2Ñ2ñ1Eð6 	Œ
�Š Ð*MÐ*MˆÑOÔOÐOÐOÐOr   c                 óv   — 	 t          |                      |¦  «        ¦  «        d         S # t          $ r Y dS w xY w)zTReturn the first match found for a given path, or None if no match
        is found.r   N)ÚnextÚ_match_pathÚStopIteration©r.   r7   s     r   Úfirst_matchzGlobDB.first_matchÞ  sJ   € ð	Ý˜×(Ò(¨Ñ.Ô.Ñ/Ô/°Ô2Ð2øÝð 	ð 	ð 	Ø�4�4ð	øøøs   ‚'* ª
8·8c                 óF   — t          |                      |¦  «        ¦  «        S )z<Return a list of (MIMEtype, glob weight) pairs for the path.)r¹   r  r	  s     r   Úall_matcheszGlobDB.all_matchesæ  s   € å�D×$Ò$ TÑ*Ô*Ñ+Ô+Ð+r   c              #   óJ  K  — t           j                             |¦  «        }|| j        v r| j        |         V — |                     ¦   «         }|| j        v r| j        |         V — |}	 |                     d¦  «        }|dk     rn+||dz   d…         }|| j        v r| j        |         D ]}|V — ŒŒG|}	 |                     d¦  «        }|dk     rn+||dz   d…         }|| j        v r| j        |         D ]}|V — ŒŒG| j	        D ]!\  }}}	| 
                    |¦  «        r||	fV — Œ"dS )z(Yields pairs of (mimetype, glob weight).r    ú.r   N)r6   r7   Úbasenamerþ   r"   rý   Úfindrû   rú   rü   r€   )
r.   r7   ÚleafÚlleafÚextÚpÚresÚregexÚ	mime_typerñ   s
             r   r  zGlobDB._match_pathê  s‰  è è € åŒw×Ò Ñ%Ô%ˆð �4Ô&Ð&Ð&ØÔ% dÔ+Ð+Ð+Ð+à—
’
‘”ˆØ�D”MÐ!Ð!Ø”- Ô&Ð&Ð&Ð&ð ˆð	Ø—’˜‘”ˆAØ�1Šuˆu�eØ�a˜!‘e�f�f”+ˆCØ�d”oÐ%Ð%Øœ?¨3Ô/ð ð �CØ�I�I�I�Ið	ð ˆð	Ø—’˜‘”ˆAØ�1Šuˆu�eØ�a˜‘c�d�d”)ˆCØ�d”iÐÐØœ9 Sœ>ð ð �CØ�I�I�I�Ið	ð +/¬*ð 	*ð 	*Ñ&ˆU�I˜vØ�{Š{˜4Ñ Ô ð *Ø  &Ð)Ð)Ð)Ð)øð	*ð 	*r   N)	r]   r^   r_   ro   rÊ   r×   r
  r  r  r   r   r   rç   rç   •  su   € € € € € ð)ð )ð )ðEð Eð Eð.(Pð (Pð (PðTð ð ð,ð ,ð ,ð!*ð !*ð !*ð !*ð !*r   rç   ÚtextÚplainÚapplicationzoctet-streamÚinodeÚblockdeviceÚ
chardeviceÚ	directoryÚfifoÚsocketÚsymlinkÚdoorÚ
executableFc                  óš  — da i at          t          ¦  «        at          j        t          j         	                    dd¦  «        ¦  «        D ]e} t          | d¦  «        5 }|D ]7}|                     ¦   «                              d d¦  «        \  }}|t          |<   Œ8	 d d d ¦  «         n# 1 swxY w Y   Œft          ¦   «         at          j        t          j         	                    dd¦  «        ¦  «        D ]} t                               | ¦  «         Œt                               ¦   «          t#          ¦   «         at          j        t          j         	                    dd¦  «        ¦  «        D ]} t$                               | ¦  «         Œt$                               ¦   «          t          j        t          j         	                    dd¦  «        ¦  «        D ]{} t          | d¦  «        5 }|D ]M}|                     ¦   «                              d d¦  «        \  }}t          |                              |¦  «         ŒN	 d d d ¦  «         n# 1 swxY w Y   Œ|d S )	NTr0   rK   r¤   r    Úglobs2ÚmagicÚ
subclasses)Ú_cache_uptodaterK   r   rR   rS   r   r8   r6   r7   r   rÁ   r   r!   rç   rü   rÊ   r×   r·   r&  rî   )r7   rƒ   r„   ÚaliasrM   ÚsubÚparents          r   Ú_cache_databaser,    s‰  € ð €Oà€GÝ�cÑ"Ô"€Kõ Ô-­b¬g¯lªl¸6À9Ñ.MÔ.MÑNÔNð +ð +ˆÝ�$˜‰_Œ_ð 	+ Øð +ð +�Ø#'§:¢:¡<¤<×#5Ò#5°d¸AÑ#>Ô#>Ñ ��yØ!*•˜‘�ð+ð	+ð 	+ð 	+ñ 	+ô 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+øøøð 	+ð 	+ð 	+ð 	+øõ ‰HŒH€EÝÔ-­b¬g¯lªl¸6À8Ñ.LÔ.LÑMÔMð ð ˆÝ×Ò˜ÑÔÐÐÝ	‡N‚NÑÔÐõ ‰IŒI€EÝÔ-­b¬g¯lªl¸6À7Ñ.KÔ.KÑLÔLð ð ˆÝ×Ò˜ÑÔÐÐÝ	‡N‚NÑÔÐõ Ô-­b¬g¯lªl¸6À<Ñ.PÔ.PÑQÔQð -ð -ˆÝ�$˜‰_Œ_ð 	- Øð -ð -�Ø"Ÿjšj™lœl×0Ò0°°qÑ9Ô9‘��VÝ˜CÔ ×$Ò$ VÑ,Ô,Ð,Ð,ð-ð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-øð-ð -s%   Á;B%Â%B)	Â,B)	Ç!AH?È?I	ÉI	c                  ó4   — t           st          ¦   «          d S d S r,   )r(  r,  r   r   r   rJ   rJ   =  s&   € Ýð ÝÑÔÐÐÐðð r   c                 óR   — t          ¦   «          t                               | ¦  «        S )z6Returns type of file by its name, or None if not known)rJ   rü   r
  )r7   s    r   Úget_type_by_namer/  A  s   € å�N„N€NÝ×Ò˜TÑ"Ô"Ð"r   rØ   c                 óV   — t          ¦   «          t                               | ||¦  «        S )z:Returns type of file by its contents, or None if not known)rJ   r&  r€   )r7   rÜ   rÝ   s      r   Úget_type_by_contentsr1  F  s!   € å�N„N€Nå�;Š;�t˜W gÑ.Ô.Ð.r   c                 óV   — t          ¦   «          t                               | ||¦  «        S )z0Returns type of the data, which should be bytes.)rJ   r&  râ   )rÛ   rÜ   rÝ   s      r   Úget_type_by_datar3  L  s#   € å�N„N€Nå×Ò˜D '¨7Ñ3Ô3Ð3r   c                 óT  — t          j        | ¦  «        rt          S t          j        | ¦  «        rt          S t          j        | ¦  «        rt          S t          j        | ¦  «        rt          S t          j	        | ¦  «        rt          S t          j        | ¦  «        rt          S t          S )z.Match special filesystem objects to Mimetypes.)ÚstatÚS_ISDIRÚ	inode_dirÚS_ISCHRÚ
inode_charÚS_ISBLKÚinode_blockÚS_ISFIFOÚ
inode_fifoÚS_ISLNKÚinode_symlinkÚS_ISSOCKÚinode_socketÚ
inode_door)Úst_modes    r   Ú_get_type_by_statrD  R  s�   € å„|�GÑÔð 5¥YÐ.Ý	Œ�gÑ	Ô	ð 5¥zÐ 1Ý	Œ�gÑ	Ô	ð 5¥{Ð 2Ý	Œ�wÑ	Ô	ð 5­
Ð!2Ý	Œ�gÑ	Ô	ð 5¥}Ð 4Ý	Œ�wÑ	Ô	Ð4­Ð!4ÝÐr   Tc                 óÖ  — t          ¦   «          	 |rt          j        | ¦  «        }nt          j        | ¦  «        }n#  t	          | ¦  «        }|pt
          cY S xY wt          j        |j        ¦  «        rct          | |¬¦  «        }|st	          | ¦  «        }|st          | |¬¦  «        }|€*t          j	        |j        ¦  «        dz  rt          S t
          S |S t          |j        ¦  «        S )aÔ  Returns type of file indicated by path.
    
    This function is *deprecated* - :func:`get_type2` is more accurate.
    
    :param path: pathname to check (need not exist)
    :param follow: when reading file, follow symbolic links
    :param name_pri: Priority to do name matches. 100=override magic
    
    This tries to use the contents of the file, and falls back to the name. It
    can also handle special filesystem objects like directories and sockets.
    )rÝ   )rÜ   NéI   )rJ   r6   r5  Úlstatr/  r  ÚS_ISREGrC  r1  ÚS_IMODEÚapp_exerD  )r7   ÚfollowÚname_priÚstrP   s        r   Úget_typerN  \  së   € õ �N„N€NðØð 	 Ý”˜‘”ˆBˆBå”˜$‘”ˆBøøðÝ˜TÑ"Ô"ˆØˆy•DÐÐÐøøøå„|�B”JÑÔð -å  ¨xÐ8Ñ8Ô8ˆØÐ,Õ& tÑ,Ô,�!ØÐBÕ*¨4¸ÐBÑBÔB�!Øˆ9ÝŒ|˜BœJÑ'Ô'¨%Ñ/ð Ý�å�Øˆå  ¤Ñ,Ô,Ð,s	   �+< ¼Ac                 óL  — t          ¦   «          	 |rt          j        | ¦  «        nt          j        | ¦  «        }n&# t          $ r t          | ¦  «        pt          cY S w xY wt          j        |j        ¦  «        st          |j        ¦  «        S t          t                               | ¦  «        d„ d¬¦  «        }|re|d         d         }d}|dd…         D ]\  }}||k     r n|dz  }Œ|d|…         }t          |¦  «        dk    r|d         d         S d„ |D ¦   «         }nd}	 t                               | |¬¦  «        }	n# t           $ r d}	Y nw xY w|	r|	S |r|d         d         S t          j        |j        ¦  «        d	z  rt$          S t'          | ¦  «        rt(          nt          S )
a½  Find the MIMEtype of a file using the XDG recommended checking order.
    
    This first checks the filename, then uses file contents if the name doesn't
    give an unambiguous MIMEtype. It can also handle special filesystem objects
    like directories and sockets.
    
    :param path: file path to examine (need not exist)
    :param follow: whether to follow symlinks
    
    :rtype: :class:`MIMEtype`
    
    .. versionadded:: 1.0
    c                 ó   — | d         S )Nr    r   rÎ   s    r   rÐ   zget_type2.<locals>.<lambda>š  s
   € ¸A¸a¼D€ r   TrÑ   r   r    Nc                 ó   — g | ]\  }}|‘ŒS r   r   )r   rß   Úws      r   r   zget_type2.<locals>.<listcomp>¦  s   € Ð*Ð*Ð*™4˜2˜a�BÐ*Ð*Ð*r   )rÞ   rF  )rJ   r6   r5  rG  ÚOSErrorr/  Úoctet_streamrH  rC  rD  Úsortedrü   r  r}   r&  r€   rÂ   rI  rJ  Úis_text_filer  )
r7   rK  rM  ÚmtypesÚ
max_weightr˜   rß   rR  rÞ   rP   s
             r   Ú	get_type2rY  �  sÞ  € õ �N„N€Nð6Ø$Ð8�RŒW�T‰]Œ]ˆ]­"¬(°4©.¬.ˆˆøÝð 6ð 6ð 6Ý Ñ%Ô%Ð5­Ð5Ð5Ð5ð6øøøõ Œ<˜œ
Ñ#Ô#ð -å  ¤Ñ,Ô,Ð,å•E×%Ò% dÑ+Ô+°.°.È4ÐPÑPÔP€FØð Ø˜A”Y˜q”\ˆ
ØˆØ˜A˜B˜B”Zð 	ð 	‰EˆB�Ø�:Š~ˆ~Ø�Ø�‰FˆAˆAØ˜˜˜”ˆÝˆv‰;Œ;˜!ÒÐØ˜!”9˜Q”<Ðà*Ð* 6Ð*Ñ*Ô*ˆˆàˆðÝ�KŠK˜ xˆKÑ0Ô0ˆˆøÝð ð ð Øˆˆˆðøøøð 	ð <ØˆØ	ð <Ø�aŒy˜Œ|ÐÝ	Œ�b”jÑ	!Ô	! EÑ	)ð <Ýˆå# DÑ)Ô)Ð;�tˆt­|Ð;s!   �*; » AÁAÄ#E  Å EÅEc                 óÄ   — 	 t          | d¦  «        }n# t          $ r Y dS w xY w|5  t          |                     d¦  «        ¦  «        cddd¦  «         S # 1 swxY w Y   dS )zÖGuess whether a file contains text or binary data.
    
    Heuristic: binary if the first 32 bytes include ASCII control characters.
    This rule may change in future versions.
    
    .. versionadded:: 1.0
    r¼   Fé    N)rÁ   rÂ   Ú_is_textr«   )r7   rƒ   s     r   rV  rV  ¸  s»   € ðÝ��tÑÔˆˆøÝð ð ð Øˆuˆuðøøøð 
ð $ð $Ý˜Ÿš˜r™
œ
Ñ#Ô#ð$ð $ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð $ð $s   ‚ “
! !¦"AÁAÁAc                 ó6   — t          d„ | D ¦   «         ¦  «         S )Nc              3   óN   K  — | ] }|d k    pd|cxk    odk     nc p|dk    V — Œ!dS )ru   é   r[  é   Nr   ©r   Úbs     r   rQ   z_is_text.<locals>.<genexpr>Ê  sH   è è € ÐNÐNÀA�q˜C’xÐ? 3¨! ? ?¢? ?¨d¢? ? ? ?Ð?°a¸4²iÐNÐNÐNÐNÐNÐNr   ©r¥   ©rÛ   s    r   r\  r\  É  s"   € ÝÐNÐNÈÐNÑNÔNÑNÔNÐNÐNr   c                 ó6   — t          d„ | D ¦   «         ¦  «         S )Nc              3   óN   K  — | ] }|d k    pd|cxk    odk     nc p|dk    V — Œ!dS )úúú úNr   ra  s     r   rQ   z_is_text.<locals>.<genexpr>Í  sd   è è € ð +ð +Ø !ð ˜F’{ÐI f°Ð&:Ð&:Ò&:Ð&:°FÒ&:Ð&:Ð&:Ð&:ÐI¸aÀ6ºkð +ð +ð +ð +ð +ð +r   rc  rd  s    r   r\  r\  Ì  s5   € Ýð +ð +Ø%)ð+ñ +ô +ñ +ô +ð +ð 	+r   c                 ó
  — t          ¦   «          t          sbt          t          ¦  «        at
          j                             ¦   «         D ]-\  }}|D ]%\  }}t          |                              |¦  «         Œ&Œ.dat          |          S )aB  Retrieve the set of filename extensions matching a given MIMEtype.
    
    Extensions are returned without a leading dot, e.g. 'py'. If no extensions
    are registered for the MIMEtype, returns an empty set.
    
    The extensions are stored in a cache the first time this is called.
    
    .. versionadded:: 1.0
    T)	rJ   Ú_mime2ext_cache_uptodater   rR   Ú_mime2ext_cacherü   rú   rÕ   rî   )rá   r  rW  r)   Úprios        r   Úget_extensionsro  Ó  sˆ   € õ �N„N€NÝ#ð (Ý%¥cÑ*Ô*ˆÝ œ:×+Ò+Ñ-Ô-ð 	0ð 	0‰KˆC�Ø%ð 0ð 0‘��tÝ Ô&×*Ò*¨3Ñ/Ô/Ð/Ð/ð0à#'Ð å˜8Ô$Ð$r   c                 óf  — | dz  } t          |¦  «        5 }|                     ¦   «         }ddd¦  «         n# 1 swxY w Y   t          j                             dd¦  «        }t          j                             || ¦  «        }t          j        |¦  «        D ]O}	 t          |¦  «        5 }|                     ¦   «         }ddd¦  «         n# 1 swxY w Y   n#  Y ŒCxY w||k    r dS ŒPdat          j                             t          j        |¦  «        | ¦  «        }t          |d¦  «        5 }| 	                    |¦  «         ddd¦  «         n# 1 swxY w Y   d}	t          j
        t          j        |	|	t          j        d¦  «        ¦  «        r&t          j        |¦  «         t          d|	z  ¦  «        ‚dS )	a  Copy 'package_file' as ``~/.local/share/mime/packages/<application>.xml.``
    If package_file is None, install ``<app_dir>/<application>.xml``.
    If already installed, does nothing. May overwrite an existing
    file with the same name (if the contents are different)r1   Nr0   ÚpackagesFrR  zupdate-mime-databasez—The '%s' command returned an error code!
Make sure you have the freedesktop.org shared MIME package:
http://standards.freedesktop.org/shared-mime-info/)rÁ   r«   r6   r7   r   r   r8   r(  Úsave_data_pathÚwriteÚspawnlpÚP_WAITÚunlinkÚ	Exception)
r  Úpackage_filerƒ   Únew_dataÚpackage_dirrA   rÏ   Úold_dataÚnew_fileÚcommands
             r   Úinstall_mime_infor~  é  sc  € ð
 �6Ñ€Kå	ˆlÑ	Ô	ð ˜qØ—6’6‘8”8ˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ ”'—,’,˜v zÑ2Ô2€KÝŒw�|Š|˜K¨Ñ5Ô5€HÝÔ*¨8Ñ4Ô4ð ð ˆð	Ý�a‘”ð $˜AØŸ6š6™8œ8�ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $øøð	ØˆHøøøØ�xÒÐØˆFˆFð  ð €Oõ Œw�|Š|�MÔ8¸ÑEÔEÀ{ÑSÔS€Hõ 
ˆh˜Ñ	Ô	ð  Ø	�Š�ÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð %€GÝ	„z•"”)˜W g­}Ô/KÈFÑ/SÔ/SÑTÔTð RÝ
Œ	�(ÑÔÐÝð GàIPñQñ Rô Rð 	RðRð RsN   •6¶:½:ÂCÂ'CÂ<CÃC	ÃCÃC	ÃCÃCÄ)EÅEÅEr,   )rØ   r   )TrØ   )T);r`   r6   r›   r5  ry   r   r>   r   Ú
xdg.LocaleÚxml.domr   r   Úcollectionsr   r<   r#   rú   rü   rý   r&  rz   r“   r   r   Úobjectr   rÄ   rc   rw  re   rg   rŸ   r·   rç   r  rT  r;  r9  r7  r=  rA  r?  rB  rJ  r(  r,  rJ   r/  r1  r3  rD  rN  rY  rV  r\  rm  rl  ro  r~  r   r   r   ú<module>rƒ     sÝ  ððð ð* 
€	€	€	Ø 	€	€	€	Ø €€€Ø 
€
€
€
Ø €€€à Ð Ð Ð Ð Ð Ø Ð Ð Ð à *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø #Ð #Ð #Ð #Ð #Ð #à
A€à
€à€Ø€Ø€Ø€à
Ô˜Ô˜aÒ€ðCð Cð Cð	$ð 	$ð 	$ð 	$ðI5ð I5ð I5ð I5ð I5ˆvñ I5ô I5ð I5ðV	ð 	ð 	ð 	ð 	˜Zñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	˜	ñ 	ô 	ð 	ði.ð i.ð i.ð i.ð i.ñ i.ô i.ð i.ðX;ð ;ð ;ð ;ð ;�Fñ ;ô ;ð ;ðz\;ð \;ð \;ð \;ð \;ñ \;ô \;ð \;ð|v*ð v*ð v*ð v*ð v*ˆVñ v*ô v*ð v*ðr €vˆf�gÑÔ€Øˆv�m ^Ñ4Ô4€Øˆf�W˜mÑ,Ô,€ØˆV�G˜\Ñ*Ô*€
ØˆF�7˜KÑ(Ô(€	ØˆV�G˜VÑ$Ô$€
Øˆv�g˜xÑ(Ô(€Ø��w 	Ñ*Ô*€ØˆV�G˜VÑ$Ô$€
Ø
ˆ&� Ñ
-Ô
-€à€ð -ð  -ð  -ðDð ð ð#ð #ð #ð
/ð /ð /ð /ð4ð 4ð 4ð 4ðð ð ð#-ð #-ð #-ð #-ðJ5<ð 5<ð 5<ð 5<ðn$ð $ð $ð  ð +ðOð Oð Oð Oð+ð +ð +ð €Ø Ð ð%ð %ð %ð,'Rð 'Rð 'Rð 'Rð 'Rr   