Ë
    ùmxi±Š  ã                   óÆ  — U d Z ddg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ZddlZddlmZ ddlZddlZddlmZ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$ dd
l%m&Z&m'Z'm(Z(m)Z)m*Z* e rddl	m+Z+ ddl,m-Z-  e"dd¬«      Z. e"de/e0e1e2e3«      Z4ejj                  dd dk  r	ddl6m7Z7 e7Z8nddlm7Z7 e7e/ee4   f   Z8 ejr                  e:«      Z;dZ<e'e=d<   	  ej|                  d«      Z?	  G d„ dej€                  «      ZAdede*f   dede*f   fd„ZBdede*f   dede*f   fd„ZC G d„ dee.   «      ZD G d„ d e8«      ZEd!e&de/fd"„ZF G d#„ dejŽ                  eA¬$«      ZHy)%z3Parser for reading and writing configuration files.ÚGitConfigParserÚSectionConstrainté    N)Úwraps)ÚBufferedReaderÚIOBase)ÚdefencÚ
force_text)ÚLockFile)ÚAnyÚCallableÚGenericÚIOÚListÚDictÚSequenceÚTYPE_CHECKINGÚTupleÚTypeVarÚUnionÚcast)ÚLit_config_levelsÚConfigLevels_TupÚPathLikeÚassert_neverÚ_T)ÚBytesIO)ÚRepoÚT_ConfigParser)ÚboundÚT_OMD_valueé   )r!   é   é   )ÚOrderedDict)ÚsystemÚuserÚglobalÚ
repositoryÚCONFIG_LEVELSzL(?<=includeIf )\"(gitdir|gitdir/i|onbranch|hasconfig:remote\.\*\.url):(.+)\"c                   ó>   ‡ — e Zd ZdZdededeeef   dd fˆ fd„Zˆ xZ	S )ÚMetaParserBuilderz_Utility class wrapping base-class methods into decorators that assure read-only
    properties.ÚnameÚbasesÚclsdictÚreturnc                 ó  •— d}||v re||   }|D ][  }d„ t        j                  |t         j                  «      D «       }|D ])  \  }}	||v rŒt        |	«      }
||v rt	        |
«      }
|
||<   Œ+ Œ] t
        ‰| �  | |||«      }|S )z¸Equip all base-class methods with a needs_values decorator, and all non-const
        methods with a :func:`set_dirty_and_flush_changes` decorator in addition to
        that.
        Ú_mutating_methods_c              3   óJ   K  — | ]  }|d    j                  d«      rŒ|–— Œ y­w)r   Ú_N©Ú
startswith)Ú.0Úts     úA/home/htdocs/ttos/venv/lib/python3.12/site-packages/git/config.pyú	<genexpr>z,MetaParserBuilder.__new__.<locals>.<genexpr>Y   s%   è ø€ Òn ÐYZÐ[\ÑY]×YhÑYhÐilÕYmœ1Ñnùs   ‚#œ#)ÚinspectÚ
getmembersÚ	isroutineÚneeds_valuesÚset_dirty_and_flush_changesÚsuperÚ__new__)Úclsr,   r-   r.   ÚkmmÚmutating_methodsÚbaseÚmethodsÚmethod_nameÚmethodÚmethod_with_valuesÚnew_typeÚ	__class__s               €r8   r@   zMetaParserBuilder.__new__P   s­   ø€ ð
 #ˆØ�'‰>Ø& s™|ÐØò 
>�Ùn¤g×&8Ñ&8¸¼w×?PÑ?PÓ&QÔn�Ø+2ò >Ñ'�K Ø" gÑ-Ø Ü)5°fÓ)=Ð&Ø"Ð&6Ñ6Ü-HÐI[Ó-\Ð*ð ,>�G˜KÒ(ñ>ð
>ô ‘7‘? 3¨¨e°WÓ=ˆØˆó    )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   r   r   r@   Ú__classcell__©rJ   s   @r8   r+   r+   L   s7   ø„ ñð˜3ð  uð °t¸CÀ¸H±~ð ÐJ]÷ ñ rK   r+   Úfunc.r/   c           	      óX   ‡ — t        ‰ «      dddt        dt        dt        fˆ fd„«       }|S )zYReturn a method for ensuring we read values (on demand) before we try to access
    them.Úselfr   ÚargsÚkwargsr/   c                 ó<   •— | j                  «         ‰| g|¢­i |¤ŽS ©N)Úread)rU   rV   rW   rS   s      €r8   Úassure_data_presentz)needs_values.<locals>.assure_data_presento   s!   ø€ à�	‰	ŒÙ�DÐ*˜4Ò* 6Ñ*Ð*rK   )r   r   r   )rS   r[   s   ` r8   r=   r=   k   sA   ø€ ô ˆ4ƒ[ð+Ð"3ð +¼Cð +Ì3ð +ÔSUô +ó ð+ð
 ÐrK   Únon_const_funcc                 ó^   ‡ — dddt         dt         dt        fˆ fd„}‰ j                  |_        |S )zµReturn a method that checks whether given non constant function may be called.

    If so, the instance will be set dirty. Additionally, we flush the changes right to
    disk.
    rU   r   rV   rW   r/   c                 óN   •—  ‰| g|¢­i |¤Ž}d| _         | j                  «        |S )NT)Ú_dirtyÚwrite)rU   rV   rW   Úrvalr\   s       €r8   Úflush_changesz2set_dirty_and_flush_changes.<locals>.flush_changes   s,   ø€ Ù˜dÐ4 TÒ4¨VÑ4ˆØˆŒØ�
‰
ŒØˆrK   )r   r   rL   )r\   rb   s   ` r8   r>   r>   x   s;   ø€ ðÐ-ð ´cð ÄSð ÌRõ ð ,×4Ñ4€MÔØÐrK   c                   ó¦   ‡ — e Zd ZdZdZdZdededdfd„Zdd	„Z	d
ede
fˆ fd„Zdede
de
de
fd„Zedefd„«       Zdd„Zdd„Zdedededdfd„Zˆ xZS )r   a'  Constrains a ConfigParser to only option commands which are constrained to
    always use the section we have been initialized with.

    It supports all ConfigParser methods that operate on an option.

    :note:
        If used as a context manager, will release the wrapped ConfigParser.
    ©Ú_configÚ_section_name)Ú	get_valueÚ	set_valueÚgetÚsetÚgetintÚgetfloatÚ
getbooleanÚ
has_optionÚremove_sectionÚremove_optionÚoptionsÚconfigÚsectionr/   Nc                 ó    — || _         || _        y rY   rd   )rU   rr   rs   s      r8   Ú__init__zSectionConstraint.__init__¤   s   € ØˆŒØ$ˆÕrK   c                 ó8   — | j                   j                  «        y rY   ©re   Úrelease©rU   s    r8   Ú__del__zSectionConstraint.__del__¨   s   € ð 	�‰×ÑÕrK   Úattrc                 óN   •‡ ‡— ‰‰ j                   v rˆˆ fd„S t        ‰‰ �	  ‰«      S )Nc                  ó0   •—  ‰j                   ‰g| ¢­i |¤ŽS rY   )Ú_call_config)rV   rW   r{   rU   s     €€r8   ú<lambda>z/SectionConstraint.__getattr__.<locals>.<lambda>°   s   ø€ Ð+<¨4×+<Ñ+<¸TÐ+SÀDÒ+SÈFÑ+S€ rK   )Ú_valid_attrs_r?   Ú__getattribute__)rU   r{   rJ   s   ``€r8   Ú__getattr__zSectionConstraint.__getattr__®   s'   ú€ Ø�4×%Ñ%Ñ%ÜSÐSÜ‰wÑ'¨Ó-Ð-rK   rG   rV   rW   c                 óV   —  t        | j                  |«      | j                  g|¢­i |¤ŽS )zdCall the configuration at the given method which must take a section name as
        first argument.)Úgetattrre   rf   )rU   rG   rV   rW   s       r8   r~   zSectionConstraint._call_config³   s,   € ð -Œw�t—|‘| VÓ,¨T×-?Ñ-?ÐQÀ$ÒQÈ&ÑQÐQrK   c                 ó   — | j                   S )z*return: ConfigParser instance we constrain)re   ry   s    r8   rr   zSectionConstraint.config¸   s   € ð �|‰|ÐrK   c                 ó6   — | j                   j                  «       S )ziEquivalent to :meth:`GitConfigParser.release`, which is called on our
        underlying parser instance.rw   ry   s    r8   rx   zSectionConstraint.release½   s   € ð �|‰|×#Ñ#Ó%Ð%rK   c                 ó:   — | j                   j                  «        | S rY   )re   Ú	__enter__ry   s    r8   rˆ   zSectionConstraint.__enter__Â   s   € Ø�‰×ÑÔ ØˆrK   Úexception_typeÚexception_valueÚ	tracebackc                 ó>   — | j                   j                  |||«       y rY   )re   Ú__exit__)rU   r‰   rŠ   r‹   s       r8   r�   zSectionConstraint.__exit__Æ   s   € Ø�‰×Ñ˜n¨o¸yÕIrK   ©r/   N)r/   z!SectionConstraint[T_ConfigParser])rL   rM   rN   rO   Ú	__slots__r€   r   rP   ru   rz   r   r‚   r~   Úpropertyrr   rx   rˆ   r�   rQ   rR   s   @r8   r   r   Š   sº   ø„ ñð -€Ið€Mð%˜~ð %¸ð %Àó %óð. ð .¨õ .ð
R 3ð R¨sð R¸cð RÀcó Rð
 ð˜ò ó ðó&ó
ðJ sð J¸Sð JÈSð JÐUY÷ JrK   c            	       ó,  ‡ — e Zd ZdZdededdfˆ fd„Zdededdfˆ fd„Zdede	e   ddfˆ fd	„Z
dedefˆ fd
„Zdedefˆ fd„Zdededdfˆ fd„Zddedeedf   deedf   fˆ fd„Zdede	e   fˆ fd„Zde	eeef      fd„Zde	eee	e   f      fd„Zˆ xZS )Ú_OMDzOrdered multi-dict.ÚkeyÚvaluer/   Nc                 ó(   •— t         ‰| �  ||g«       y rY   ©r?   Ú__setitem__©rU   r“   r”   rJ   s      €r8   r—   z_OMD.__setitem__Í   s   ø€ Ü‰Ñ˜C % Õ)rK   c                 ón   •— || vrt         ‰| �  ||g«       y t         ‰| �	  |«      j                  |«       y rY   )r?   r—   Ú__getitem__Úappendr˜   s      €r8   Úaddz_OMD.addÐ   s6   ø€ Ø�d‰?Ü‰GÑ  e WÔ-Øä‰Ñ˜CÓ ×'Ñ'¨Õ.rK   Úvaluesc                 ó&   •— t         ‰| �  ||«       y rY   r–   )rU   r“   r�   rJ   s      €r8   Úsetallz_OMD.setall×   s   ø€ Ü‰Ñ˜C Õ(rK   c                 ó(   •— t         ‰| �  |«      d   S ©Néÿÿÿÿ©r?   rš   ©rU   r“   rJ   s     €r8   rš   z_OMD.__getitem__Ú   ó   ø€ Ü‰wÑ" 3Ó'¨Ñ+Ð+rK   c                 ó(   •— t         ‰| �  |«      d   S r¡   r£   r¤   s     €r8   Úgetlastz_OMD.getlastÝ   r¥   rK   c                 óZ   •— || vrt         ‰| �  ||g«       y t         ‰| �	  |«      }||d<   y r¡   )r?   r—   rš   )rU   r“   r”   ÚpriorrJ   s       €r8   Úsetlastz_OMD.setlastà   s6   ø€ Ø�d‰?Ü‰GÑ  e WÔ-Øä‘Ñ# CÓ(ˆØˆˆbŠ	rK   Údefaultc                 ó,   •— t         ‰| �  ||g«      d   S r¡   )r?   ri   )rU   r“   r«   rJ   s      €r8   ri   z_OMD.getè   s   ø€ Ü‰w‰{˜3  	Ó*¨2Ñ.Ð.rK   c                 ó"   •— t         ‰| �  |«      S rY   r£   r¤   s     €r8   Úgetallz_OMD.getallë   s   ø€ Ü‰wÑ" 3Ó'Ð'rK   c                 ó6   — | D �cg c]	  }|| |   f‘Œ c}S c c}w )z"List of (key, last value for key).© ©rU   Úks     r8   Úitemsz
_OMD.itemsî   s   € à&*Ö+ ��D˜‘G’Ò+Ð+ùÒ+s   …c                 óN   — | D �cg c]  }|| j                  |«      f‘Œ c}S c c}w )z&List of (key, list of values for key).)r®   r±   s     r8   Ú	items_allz_OMD.items_allò   s#   € à-1Ö2¨��D—K‘K “NÒ#Ò2Ð2ùÒ2s   …"rY   )rL   rM   rN   rO   rP   r   r—   r   rœ   r   rŸ   rš   r§   rª   r   ri   r®   r   r³   rµ   rQ   rR   s   @r8   r’   r’   Ê   s  ø„ Ùð*˜sð *¨2ð *°$õ *ð/�sð / 3ð /¨4õ /ð)˜#ð ) t¨B¡xð )°Dõ )ð,˜sð , sõ ,ð,˜3ð , 3õ ,ð˜3ð  sð ¨tõ ñ/�sð / U¨2¨t¨8¡_ð /ÀÀbÈ$ÀhÁõ /ð(˜#ð ( $ r¡(õ (ð,�t˜E # r '™NÑ+ó ,ð3˜4  c¨4°©8 mÑ 4Ñ5÷ 3rK   r’   Úconfig_levelc           	      ó  — t         j                  dk(  r| dk(  rd} | dk(  ry| dk(  r’t        j                  j	                  d«      xs4 t        j                  t        j                  j	                  dd«      d	«      }t        j                  t        j                  t        j                  |d
d«      «      «      S | dk(  r(t        j                  t        j                  d«      «      S | dk(  rt        d«      ‚t        | t        d| ›�«      «       y )NÚwin32r%   r'   z/etc/gitconfigr&   ÚXDG_CONFIG_HOMEÚHOMEú~z.configÚgitrr   z~/.gitconfigr(   zGNo repo to get repository configuration from. Use Repo._get_config_pathzInvalid configuration level: )ÚsysÚplatformÚosÚenvironri   ÚospÚjoinÚnormpathÚ
expanduserÚ
ValueErrorr   )r¶   Úconfig_homes     r8   Úget_config_pathrÇ   ÷   sÛ   € ô ‡|�|�wÒ <°8Ò#;Øˆà�xÒØØ	˜Ò	Ü—j‘j—n‘nÐ%6Ó7Òk¼3¿8¹8ÄBÇJÁJÇNÁNÐSYÐ[^ÓD_ÐajÓ;kˆÜ�|‰|œCŸN™N¬3¯8©8°KÀÈÓ+QÓRÓSÐSØ	˜Ò	!Ü�|‰|œCŸN™N¨>Ó:Ó;Ð;Ø	˜Ò	%ÜÐbÓcÐcô 	ØÜÐ6°|Ð6FÐGÓHõ	
rK   c                   ó€  ‡ — e Zd ZdZeZ	  ej                  d«      ZdZ	 ej                  e	«      Z
 ej                  e	dz   dz   «      Z[	dZ	 	 	 	 	 	 d5deded	eeed	f      f   d
ededeedf   ded   ddfd„Zd6d„Zd6d„Zd7d„Zdeddfd„Zd6d„Zdedefd„Zdeeee   f   deddfd„Zdeeef   fd„Z de!e"eef      fd„Z#d6d„Z$deddfd„Z%d ede!e"eef      fˆ fd!„Z&d ede!e"ee!e   f      fd"„Z'e(d6d#„«       Z)d$eddfd%„Z*d8ˆ fd'„Z+e,defd(„«       Z-	 d9d&ed)ed*eee.eedf   deee.eef   fd+„Z/	 d9d&ed)ed*eee.eedf   de!eee.eef      fd,„Z0d-edeee.eef   fd.„Z1d/eeeee.ef   defd0„Z2e(e3d&ed)ed/eeeee.ef   dd fd1„«       «       Z4e(e3d&ed)ed/eeeee.ef   dd fd2„«       «       Z5d&ed3edd fˆ fd4„Z6ˆ xZ7S ):r   aØ  Implements specifics required to read git style configuration files.

    This variation behaves much like the :manpage:`git-config(1)` command, such that the
    configuration will be read on demand based on the filepath given during
    initialization.

    The changes will automatically be written once the instance goes out of scope, but
    can be triggered manually as well.

    The configuration file will be locked if you intend to change values preventing
    other instances to write concurrently.

    :note:
        The config is case-sensitive even when queried, hence section and option names
        must match perfectly.

    :note:
        If used as a context manager, this will release the locked file.
    z^\s*[#;]z\s*(?P<option>[^:=\s][^:=]*)z\s*(?P<vi>[:=])\s*z(?P<value>.*)$)Úadd_sectionro   rp   rj   NÚfile_or_filesr   Ú	read_onlyÚmerge_includesr¶   Úrepo)r   Nr/   c           	      óÜ  — t         j                  j                  | t        ¬«       |  |  |  t	        | d«      s| j                  «       | _        |�|| _        nW|€D|r7t        D �cg c]!  }|dk7  sŒ	t        t        t        |«      «      ‘Œ# c}| _        nt        d«      ‚t        |«      g| _        || _        d| _        d| _        || _        || _        d| _        | j'                  «        yc c}w )a¦  Initialize a configuration reader to read the given `file_or_files` and to
        possibly allow changes to it by setting `read_only` False.

        :param file_or_files:
            A file path or file object, or a sequence of possibly more than one of them.

        :param read_only:
            If ``True``, the ConfigParser may only read the data, but not change it.
            If ``False``, only a single file path or file object may be given. We will
            write back the changes when they happen, or when the ConfigParser is
            released. This will not happen if other configuration files have been
            included.

        :param merge_includes:
            If ``True``, we will read files mentioned in ``[include]`` sections and
            merge their contents into ours. This makes it impossible to write back an
            individual configuration file. Thus, if you want to modify a single
            configuration file, turn this off to leave the original dataset unaltered
            when reading it.

        :param repo:
            Reference to repository to use if ``[includeIf]`` sections are found in
            configuration files.
        )Ú	dict_typeÚ_proxiesNr(   z7No configuration level or configuration files specifiedF)ÚcpÚRawConfigParserru   r’   ÚhasattrÚ_dictrÐ   Ú_file_or_filesr)   rÇ   r   r   rÅ   Ú
_read_onlyr_   Ú_is_initializedÚ_merge_includesÚ_repoÚ_lockÚ_acquire_lock)rU   rÊ   rË   rÌ   r¶   rÍ   Úfs          r8   ru   zGitConfigParser.__init__;  sà   € ô@ 	×Ñ×#Ñ# D´DÐ#Ô9ÙÙÙô �t˜ZÔ(Ø ŸJ™J›LˆDŒMàÐ$ØdqˆDÕàÐ#ÙäMZö+ØHIÐ^_ÐcoÓ^oœ¬Ô->ÀÓ(BÕCò+�DÕ'ô %Ð%^Ó_Ð_ä'6°|Ó'DÐ&E�Ô#à#ˆŒØˆŒØ$ˆÔØ-ˆÔØˆŒ
Ø.2ˆŒ
Ø×ÑÕùò+s   Á#
C)Á.C)c                 ó�  — | j                   sº| j                  s“t        | j                  t        t
        j                  f«      r| j                  }nFt        | j                  t        t        t        f«      rt        d«      ‚| j                  j                  }| j                  |«      | _        | j                  j                  «        y y )NzVWrite-ConfigParsers can operate on a single file only, multiple files have been passed)rÖ   rÚ   Ú
isinstancerÕ   rP   r¿   r   ÚtupleÚlistr   rÅ   r,   Út_lockÚ_obtain_lock)rU   rÊ   s     r8   rÛ   zGitConfigParser._acquire_lockz  s—   € Ø�ŠØ—:’:Ü˜d×1Ñ1´C¼¿¹Ð3EÔFØ$(×$7Ñ$7‘MÜ × 3Ñ 3´e¼TÄ8Ð5LÔMÜ$Øpóð ð %)×$7Ñ$7×$<Ñ$<�Mð "Ÿ[™[¨Ó7�”
ð �J‰J×#Ñ#Õ%ð! rK   c                 ó$   — | j                  «        y)z4Write pending changes if required and release locks.N©rx   ry   s    r8   rz   zGitConfigParser.__del__Ž  s   € ð 	�‰�rK   c                 ó&   — | j                  «        | S rY   )rÛ   ry   s    r8   rˆ   zGitConfigParser.__enter__“  s   € Ø×ÑÔØˆrK   rV   c                 ó$   — | j                  «        y rY   rä   )rU   rV   s     r8   r�   zGitConfigParser.__exit__—  s   € Ø�‰�rK   c                 ó’  — | j                   s&| j                  r| j                  j                  «       sy	 | j                  «        | j                  �| j                  j                  «        yy# t        $ r t
        j                  dd¬«       Y ŒJt        $ r Y ŒTw xY w# | j                  �| j                  j                  «        w w xY w)a  Flush changes and release the configuration write lock. This instance must
        not be used anymore afterwards.

        In Python 3, it's required to explicitly release locks and flush changes, as
        ``__del__`` is not called deterministically anymore.
        Nz/Exception during destruction of GitConfigParserT)Úexc_info)	rË   rÚ   Ú	_has_lockr`   ÚIOErrorÚ_loggerÚerrorÚReferenceErrorÚ_release_lockry   s    r8   rx   zGitConfigParser.releaseš  s¥   € ð �>Š>˜dŸjšj°·±×1EÑ1EÔ1GØð	+Ø�J‰JŒLð �z‰zÐ%Ø—
‘
×(Ñ(Õ*ð &øô ò 	\Ü�M‰MÐKÐVZˆMÖ[Üò 	ñ ð		ûð �z‰zÐ%Ø—
‘
×(Ñ(Õ*ð &ús/   µA- Á- BÂB ÂBÂB ÂBÂB Â)CÚ	optionstrc                 ó   — |S )z1Do not transform options in any way when writing.r°   )rU   rï   s     r8   ÚoptionxformzGitConfigParser.optionxform³  s   € àÐrK   ÚfpÚfpnamec                 ó°  — d}d}d}d}d}dt         dt         fd„}	 |j                  «       j                  t        «      }	|	s�n|dz   }|	j	                  «       d	k(  s| j
                  j                  |	«      rŒ\|	j                  dd«      d   j                  «       d
k(  r|	d   dv rŒŠ| j                  j                  |	j	                  «       «      }
|s•|
r“|
j                  d«      j	                  «       }|| j                  v r| j                  |   }nR|t        j                  k(  r| j                  }n2| j                  d|ff«      }|| j                  |<   d| j                   |<   d}�nì|€t        j"                  |||	«      ‚|�s|| j$                  j                  |	«      }
|
�r|
j                  ddd«      \  }}}| j'                  |j)                  «       «      }|dv rTd|v rP|j	                  «       j+                  d«      s1|j-                  d«      }|dk7  r||dz
     j/                  «       r|d| }|j	                  «       }t1        |«      dk  s|d   dk7  rnG|d   dk7  rd} ||dd «      }n1|j-                  ddd«      dk(  r|j-                  ddd«      dk(  r|dd }|j3                  ||«       n£| j4                  j                  |	«      s2|st        j6                  |«      }|j9                  |t;        |	«      «       �Œâ|	j)                  «       }	|	j=                  d«      rd}|	dd }	|j?                  |«      }|jA                  || ||	«      z   «       �Œ7|r|‚y)a·  Originally a direct copy of the Python 2.4 version of
        :meth:`RawConfigParser._read <configparser.RawConfigParser._read>`, to ensure it
        uses ordered dicts.

        The ordering bug was fixed in Python 2.4, and dict itself keeps ordering since
        Python 3.7. This has some other changes, especially that it ignores initial
        whitespace, since git uses tabs. (Big comments are removed to be more compact.)
        Nr   FÚvr/   c                 óz   — | r| j                  d«      r| d d } | j                  t        «      j                  d«      S )Nú\r¢   Úunicode_escape)ÚendswithÚencoder   Údecode)rõ   s    r8   Ústring_decodez,GitConfigParser._read.<locals>.string_decodeÆ  s8   € Ù�Q—Z‘Z Ô%Ø�c�r�F�ð —8‘8œFÓ#×*Ñ*Ð+;Ó<Ð<rK   Té   Ú ÚremÚrRÚheaderrL   ÚoptionÚvir”   )ú=ú:ú;ú"r¢   r#   r÷   )!rP   Úreadlinerû   r   ÚstripÚ
re_commentÚmatchÚsplitÚlowerÚSECTCREÚgroupÚ	_sectionsrÑ   ÚDEFAULTSECTÚ	_defaultsrÔ   rÐ   ÚMissingSectionHeaderErrorÚOPTCRErñ   Úrstripr5   ÚfindÚisspaceÚlenrœ   ÚOPTVALUEONLYÚParsingErrorr›   Úreprrù   r§   rª   )rU   rò   ró   ÚcursectÚoptnameÚlinenoÚis_multi_lineÚerü   ÚlineÚmoÚsectnamer  ÚoptvalÚposs                  r8   Ú_readzGitConfigParser._read·  s+  € ð ˆØˆØˆØˆØˆð	=œSð 	=¤Só 	=ð à—;‘;“=×'Ñ'¬Ó/ˆDÙÙØ˜a‘ZˆFà�z‰z‹|˜rÒ! T§_¡_×%:Ñ%:¸4Ô%@ØØ�z‰z˜$ Ó" 1Ñ%×+Ñ+Ó-°Ò6¸4À¹7Àd¹?àð —‘×#Ñ# D§J¡J£LÓ1ˆBÙ ¡RØ "§¡¨Ó 2× 8Ñ 8Ó :�Ø˜tŸ~™~Ñ-Ø"Ÿn™n¨XÑ6‘GØ¤§¡Ò/Ø"Ÿn™n‘Gà"Ÿj™j¨:°xÐ*@Ð)BÓC�GØ/6�D—N‘N 8Ñ,Ø.2�D—M‘M (Ñ+à’à�Ü×2Ñ2°6¸6À4ÓHÐHâ"Ø—[‘[×&Ñ& tÓ,�Úà*,¯(©(°8¸TÀ7Ó*KÑ'�G˜R Ø"×.Ñ.¨w¯~©~Ó/?Ó@�Gà˜ZÑ'¨C°6©MÀ&Ç,Á,Ã.×B[ÑB[Ð\_ÔB`Ø$Ÿk™k¨#Ó.˜Ø "š9¨°°a±©×)@Ñ)@Ô)BØ%+¨D¨S \˜FØ#Ÿ\™\›^�Fä˜6“{ Q’¨&°©)°sÒ*:àØ ™ sÒ*à(,˜Ù!.¨v°a°b¨zÓ!:™ØŸ™ T¨1¨bÓ1°RÒ7¸F¿K¹KÈÈQÐPRÓ<SÐWYÒ<Yà!'¨¨" ˜ð —K‘K ¨Õ0ð  ×,Ñ,×2Ñ2°4Ô8Ù Ü "§¡°Ó 7˜AØŸ™ ¬¨d«Ô4Ùà—{‘{“}�Ø—=‘= Ô%Ø$)�MØ  ˜9�Dà Ÿ™¨Ó1�Ø—‘ ¨±-ÀÓ2EÑ)EÔFñQ ñZ ØˆGð rK   c                 óP   — | j                   xr t        | j                  «       «      S rY   )rØ   r  Ú_included_pathsry   s    r8   Ú_has_includeszGitConfigParser._has_includes  s!   € Ø×#Ñ#ÒC¬¨D×,@Ñ,@Ó,BÓ(CÐCrK   c                 óH  ‡— g }| j                  «       D �]ú  }|dk(  r|| j                  |«      z  }t        j                  |«      }|�| j                  €ŒA|j                  d«      }|j                  d«      j                  «       Š|dv rÙt        j                  ‰«      Št        ˆfd„dD «       «      sd‰z   Š‰j                  d«      r‰d	z  Š|j                  d
«      rt        j                  dd„ ‰«      Š| j                  j                  sŒùt        j                  t!        j"                  | j                  j                  «      ‰«      s�Œ8|| j                  |«      z  }�ŒN|dk(  rO	 | j                  j$                  j&                  }t        j                  |‰«      s�ŒŒ|| j                  |«      z  }�Œ¢|dk(  s�Œ©| j                  j*                  D ]9  }t        j                  |j,                  ‰«      sŒ$|| j                  |«      z  } �Œú �Œý |S # t(        $ r Y �Œw xY w)zŸList all paths that must be included to configuration.

        :return:
            The list of paths, where each path is a tuple of (option, value).
        Úincluderý   r#   )Úgitdirzgitdir/ic              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrY   r4   )r6   Úsr”   s     €r8   r9   z2GitConfigParser._included_paths.<locals>.<genexpr>8  s   øè ø€ ÒD°1˜5×+Ñ+¨A×.ÑDùs   ƒ)z./ú/z**/r/  z**z/iz[a-zA-Z]c                 ó‚   — d| j                  «       j                  «       ›| j                  «       j                  «       ›d�S )Nú[ú])r  r  Úupper)Úms    r8   r   z1GitConfigParser._included_paths.<locals>.<lambda>A  s/   €  A a§g¡g£i§o¡oÓ&7Ð%:¸1¿7¹7»9¿?¹?Ó;LÐ:OÈqÐ"Q€ rK   Úonbranchzhasconfig:remote.*.url)Úsectionsr³   ÚCONDITIONAL_INCLUDE_REGEXPÚsearchrÙ   r  r	  rÁ   rÄ   Úanyrù   ÚreÚsubÚgit_dirÚfnmatchÚfnmatchcaser¿   ÚfspathÚactive_branchr,   Ú	TypeErrorÚremotesÚurl)rU   Úpathsrs   r  ÚkeywordÚbranch_nameÚremoter”   s          @r8   r(  zGitConfigParser._included_paths"  sÝ  ø€ ð ˆà—}‘}“ó +	ˆGØ˜)Ò#Ø˜Ÿ™ GÓ,Ñ,�ä.×5Ñ5°gÓ>ˆEØˆ} §
¡
Ð 2Øà—k‘k !“nˆGØ—K‘K “N×(Ñ(Ó*ˆEàÐ0Ñ0ÜŸ™ uÓ-�äÓD¸ÔDÔDØ! E™M�EØ—>‘> #Ô&Ø˜T‘M�Eð ×#Ñ# DÔ)ÜŸF™FØ#ÙQØó�Eð
 —:‘:×%Ó%Ü×*Ñ*¬2¯9©9°T·Z±Z×5GÑ5GÓ+HÈ%ÖPØ §¡¨GÓ!4Ñ4šà˜JÒ&ðØ"&§*¡*×":Ñ":×"?Ñ"?�Kô
 ×&Ñ& {°EÖ:Ø˜TŸZ™Z¨Ó0Ñ0’EØÐ4Ô4Ø"Ÿj™j×0Ñ0ò �FÜ×*Ñ*¨6¯:©:°uÕ=Ø §¡¨GÓ!4Ñ4˜ÚòðQ+	ðX ˆøô !ò âðús   Å( HÈ	H!È H!c                 ó  — | j                   ryd| _         dg}t        | j                  t        t        j
                  f«      r| j                  g}nHt        | j                  t        t        t        f«      s| j                  g}nt        | j                  «      }t        |«      }d}|�r®|j                  d«      }d}t        |d«      r4t        t        t           |«      }| j                  ||j                   «       n4	 t#        |d«      5 }d}| j                  ||j                   «       ddd«       | j'                  «       �r| j)                  «       D ]ÿ  \  }}|j+                  d«      rt-        j.                  |«      }t-        j0                  |«      sX|sŒDt        t
        |«      }t-        j0                  |«      sJ d	«       ‚t-        j2                  t-        j4                  |«      |«      }t-        j6                  |«      }||v s$t	        j8                  |t        j:                  «      sŒ×|j=                  |«       |j?                  d|«       |d
z  }�Œ |r�Œ®|dk(  rd| _         yy# 1 sw Y   �Œ?xY w# t$        $ r Y �ŒØw xY w)zñRead the data stored in the files we have been initialized with.

        This will ignore files that cannot be read, possibly leaving an empty
        configuration.

        :raise IOError:
            If a file cannot be handled.
        NTrþ   r   FÚseekÚrbr»   z9Need absolute paths to be sure our cycle checks will workrý   )!r×   rÞ   rÕ   rP   r¿   r   rß   rà   r   rj   ÚpoprÓ   r   r   Úbytesr&  r,   Úopenrê   r)  r(  r5   rÁ   rÄ   ÚisabsrÂ   ÚdirnamerÃ   ÚaccessÚR_OKrœ   ÚinsertrØ   )	rU   Úfiles_to_readÚseenÚnum_read_include_filesÚ	file_pathÚfile_okrò   r3   Úinclude_paths	            r8   rZ   zGitConfigParser.readX  s'  € ð ×ÒØØ#ˆÔà46°4ˆÜ�d×)Ñ)¬C´·±Ð+=Ô>à!×0Ñ0Ð1‰MÜ˜D×/Ñ/´%¼¼xÐ1HÔIà!×0Ñ0Ð1‰Mä  ×!4Ñ!4Ó5ˆMô �=Ó!ˆØ!"ÐÚØ%×)Ñ)¨!Ó,ˆIØˆGä�y &Ô)ô !¤¤E¡¨IÓ6�	Ø—
‘
˜9 i§n¡nÕ5ðÜ˜i¨Ó.ð 0°"Ø"&˜ØŸ
™
 2 r§w¡wÔ/÷0ð ×!Ñ!Õ#Ø'+×';Ñ';Ó'=ò 0‘O�A�|Ø#×.Ñ.¨sÔ3Ü'*§~¡~°lÓ'C˜ÜŸ9™9 \Ô2Ù&Ø$ä$(¬°9Ó$=˜	Ü"Ÿy™y¨Ô3ÐpÐ5pÓpÐ3Ü'*§x¡x´·±¸IÓ0FÈÓ'U˜ä#&§<¡<°Ó#=�LØ# tÑ+´2·9±9¸\Ì2Ï7É7Ô3SØ Ø—H‘H˜\Ô*à!×(Ñ(¨¨LÔ9Ø*¨aÑ/Ò*ð#0ó) ðX " QÒ&Ø#(ˆDÕ ð '÷C0ñ 0ûô ò Úðús*   Ã<I1 ÄI$Ä'I1 É$I.É)I1 É1	I>É=I>c                 óâ   ‡ ‡— dt         dt        ddfˆˆ fd„}‰ j                  r! |t        j                  ‰ j                  «       ‰ j
                  j                  «       D ]  \  }} |||«       Œ y)z`Write an .ini-format representation of the configuration state in
        git compatible format.r,   Úsection_dictr/   Nc                 ó2  •— ‰j                  d| z  j                  t        «      «       |j                  «       D ]\  \  }}|dk(  rŒ|D ]L  }‰j                  d|›d‰j	                  |«      j                  dd«      ›d�j                  t        «      «       ŒN Œ^ y )Nz[%s]
rL   ú	z = ú
z
	)r`   rú   r   rµ   Ú_value_to_stringÚreplace)r,   rZ  r“   r�   rõ   rò   rU   s        €€r8   Úwrite_sectionz-GitConfigParser._write.<locals>.write_section¥  s‘   ø€ Ø�H‰H�h ‘o×-Ñ-¬fÓ5Ô6ð  ,×5Ñ5Ó7ò u‘��VØ˜*Ò$Øàò u�AØ—H’Hªs°D×4IÑ4IÈ!Ó4L×4TÑ4TÐUYÐ[aÕ4bÐc×kÑkÔlrÓsÕtñuñ	urK   )rP   r’   r  rÑ   r  r  r³   )rU   rò   r`  r,   r”   s   ``   r8   Ú_writezGitConfigParser._write¡  sh   ù€ ð
	u¤ð 
	u´4ð 
	u¸Dö 
	uð �>Š>Ùœ"Ÿ.™.¨$¯.©.Ô9ð  Ÿ>™>×/Ñ/Ó1ò 	'‰KˆD�%Ù˜$ Õ&ñ	'rK   Úsection_namec                 ód   •— t         ‰| �  |«      D ��cg c]  \  }}|dk7  sŒ||f‘Œ c}}S c c}}w )zK:return: list((option, value), ...) pairs of all items in the given sectionrL   )r?   r³   )rU   rb  r²   rõ   rJ   s       €r8   r³   zGitConfigParser.items»  s.   ø€ ä#(¡7¡=°Ó#>×R™4˜1˜aÀ!ÀzÃ/��A’ÓRÐRùÓRs   ”,¢,c                 ó  — t        | j                  «      }| j                  |   j                  «       D ]=  \  }}|dk(  rŒ||v r|j	                  |«      |k(  rŒ%|D ]  }|j                  ||«       Œ Œ? |j                  «       S )zQ:return: list((option, [values...]), ...) pairs of all items in the given sectionrL   )r’   r  r  rµ   r®   rœ   )rU   rb  Úrvr²   Úvsrõ   s         r8   rµ   zGitConfigParser.items_all¿  s‚   € ä�$—.‘.Ó!ˆà—^‘^ LÑ1×;Ñ;Ó=ò 	‰EˆAˆrØ�JŠØà�B‰w˜2Ÿ9™9 Q›<¨2Ò-Øàò �Ø—‘�q˜!•ñð	ð �|‰|‹~ÐrK   c                 óò  — | j                  d«       | j                  syt        | j                  t        t
        f«      r!t        dt        | j                  «      z  «      ‚| j                  «       rt        j                  d«       y| j                  }t        |t        t        j                  t        f«      }|r&| j                  �| j                  j!                  «        t#        |d«      s7t%        t        |«      }t'        |d«      5 }| j)                  |«       ddd«       yt%        d|«      }|j+                  d«       t#        |d	«      r|j-                  «        | j)                  |«       y# 1 sw Y   yxY w)
z¿Write changes to our file, if there are changes at all.

        :raise IOError:
            If this is a read-only writer instance or if we could not obtain a file
            lock.
        r`   NzRCannot write back if there is not exactly a single file to write to, have %i fileszsSkipping write-back of configuration file as include files were merged in.Set merge_includes=False to prevent this.rI  Úwbr   r   Útruncate)Ú_assure_writabler_   rÞ   rÕ   rà   rß   ÚAssertionErrorr  r)  rë   ÚdebugrP   r¿   r   r   rÚ   râ   rÓ   r   rM  ra  rI  ri  )rU   rò   Úis_file_lockÚfp_opens       r8   r`   zGitConfigParser.writeÏ  s7  € ð 	×Ñ˜gÔ&Ø�{Š{Øä�d×)Ñ)¬D´%¨=Ô9Ü ØdÜ�d×)Ñ)Ó*ñ+óð ð ×ÑÔÜ�M‰Mð>ôð ð × Ñ ˆô " "¤s¬B¯K©K¼Ð&@ÓAˆÙ˜DŸJ™JÐ2Ø�J‰J×#Ñ#Ô%ä�r˜6Ô"Ü”h Ó#ˆBÜ�b˜$“ð % 7Ø—‘˜GÔ$÷%ð %ô �i Ó$ˆBØ�G‰G�AŒJä�r˜:Ô&Ø—‘”Ø�K‰K˜�O÷%ð %ús   ÄE-Å-E6rF   c                 ó>   — | j                   rt        d| ›d|›�«      ‚y )Nz#Cannot execute non-constant method ú.)rË   rê   )rU   rF   s     r8   rj  z GitConfigParser._assure_writableý  s   € Ø�>Š>ÝÊÉkÐZÓ[Ð[ð rK   rs   c                 ó"   •— t         ‰| �  |«      S )z)Assures added options will stay in order.)r?   rÉ   )rU   rs   rJ   s     €r8   rÉ   zGitConfigParser.add_section  s   ø€ ä‰wÑ" 7Ó+Ð+rK   c                 ó   — | j                   S )zD:return: ``True`` if this instance may change the configuration file)rÖ   ry   s    r8   rË   zGitConfigParser.read_only  s   € ð �‰ÐrK   r  r«   c                 ór   — 	 | j                  ||«      }| j                  |«      S # t        $ r |�|cY S ‚ w xY w)a  Get an option's value.

        If multiple values are specified for this option in the section, the last one
        specified is returned.

        :param default:
            If not ``None``, the given default value will be returned in case the option
            did not exist.

        :return:
            A properly typed value, either int, float or string

        :raise TypeError:
            In case the value could not be understood.
            Otherwise the exceptions known to the ConfigParser will be raised.
        )ri   Ú	ExceptionÚ_string_to_value)rU   rs   r  r«   Úvaluestrs        r8   rg   zGitConfigParser.get_value  sI   € ð,	Ø—x‘x ¨Ó0ˆHð ×$Ñ$ XÓ.Ð.øô ò 	ØÐ"Ø’Øð	ús   ‚% ¥6´6c                 óÒ   — 	 | j                  «        | j                  |   j                  |«      }|D �cg c]  }| j	                  |«      ‘Œ c}S # t        $ r	 |�|gcY S ‚ w xY wc c}w )a  Get an option's values.

        If multiple values are specified for this option in the section, all are
        returned.

        :param default:
            If not ``None``, a list containing the given default value will be returned
            in case the option did not exist.

        :return:
            A list of properly typed values, either int, float or string

        :raise TypeError:
            In case the value could not be understood.
            Otherwise the exceptions known to the ConfigParser will be raised.
        )r6  r  r®   rt  ru  )rU   rs   r  r«   Úlstrv  s         r8   Ú
get_valueszGitConfigParser.get_values*  sp   € ð,	Ø�M‰MŒOØ—.‘. Ñ)×0Ñ0°Ó8ˆCð ADÖD°H�×%Ñ% hÕ/ÒDÐDøô ò 	ØÐ"Ø�yÒ Øð	üò
 Es   ‚.A ´A$ÁA!ÁA!rv  c                 óü   — t         t        f}|D ]  }	  ||«      }|t        |«      k7  rŒ|c S  |j	                  «       }|dk(  ry|dk(  ryt        |t        «      st        d|«      ‚|S # t        t        f$ r Y Œkw xY w)NÚfalseFÚtrueTz=Invalid value type: only int, long, float and str are allowed)ÚintÚfloatrÅ   rA  r  rÞ   rP   )rU   rv  ÚtypesÚnumtypeÚvalÚvls         r8   ru  z GitConfigParser._string_to_valueJ  sœ   € Ü”e�ˆØò 	ˆGðÙ˜hÓ'�àœ% ›/Ò)ØØ’
ð	ð �^‰^ÓˆØ�Š=ØØ�Š<Øä˜(¤CÔ(ÜØOØóð ð
 ˆøô# ¤	Ð*ò Ùðús   “A)ªA)Á)A;Á:A;r”   c                 ód   — t        |t        t        t        f«      rt	        |«      S t        |«      S rY   )rÞ   r}  r~  ÚboolrP   r	   )rU   r”   s     r8   r^  z GitConfigParser._value_to_stringf  s(   € Ü�eœc¤5¬$Ð/Ô0Ü�u“:ÐÜ˜%Ó Ð rK   c                 óŽ   — | j                  |«      s| j                  |«       | j                  ||| j                  |«      «       | S )a  Set the given option in section to the given value.

        This will create the section if required, and will not throw as opposed to the
        default ConfigParser ``set`` method.

        :param section:
            Name of the section in which the option resides or should reside.

        :param option:
            Name of the options whose value to set.

        :param value:
            Value to set the option to. It must be a string or convertible to a string.

        :return:
            This instance
        )Úhas_sectionrÉ   rj   r^  ©rU   rs   r  r”   s       r8   rh   zGitConfigParser.set_valuek  s@   € ð( ×Ñ Ô(Ø×Ñ˜WÔ%Ø�‰�˜& $×"7Ñ"7¸Ó">Ô?ØˆrK   c                 ó¦   — | j                  |«      s| j                  |«       | j                  |   j                  || j	                  |«      «       | S )a’  Add a value for the given option in section.

        This will create the section if required, and will not throw as opposed to the
        default ConfigParser ``set`` method. The value becomes the new value of the
        option as returned by :meth:`get_value`, and appends to the list of values
        returned by :meth:`get_values`.

        :param section:
            Name of the section in which the option resides or should reside.

        :param option:
            Name of the option.

        :param value:
            Value to add to option. It must be a string or convertible to a string.

        :return:
            This instance
        )r†  rÉ   r  rœ   r^  r‡  s       r8   Ú	add_valuezGitConfigParser.add_value„  sI   € ð, ×Ñ Ô(Ø×Ñ˜WÔ%Ø�‰�wÑ×#Ñ# F¨D×,AÑ,AÀ%Ó,HÔIØˆrK   Únew_namec                 ó8  •— | j                  |«      st        d|z  «      ‚| j                  |«      rt        d|z  «      ‚t        ‰| �  |«       | j                  |   }| j                  |«      D ]  \  }}|j                  ||«       Œ | j                  |«       | S )zìRename the given section to `new_name`.

        :raise ValueError:
            If:

            * `section` doesn't exist.
            * A section with `new_name` does already exist.

        :return:
            This instance
        z!Source section '%s' doesn't existz'Destination section '%s' already exists)r†  rÅ   r?   rÉ   r  rµ   rŸ   ro   )rU   rs   rŠ  Únew_sectionr²   rf  rJ   s         €r8   Úrename_sectionzGitConfigParser.rename_sectionŸ  sŸ   ø€ ð ×Ñ Ô(ÜÐ@À7ÑJÓKÐKØ×Ñ˜HÔ%ÜÐFÈÑQÓRÐRä‰Ñ˜HÔ%Ø—n‘n XÑ.ˆØ—^‘^ GÓ,ò 	&‰EˆAˆrØ×Ñ˜q "Õ%ð	&ð 	×Ñ˜GÔ$ØˆrK   )NTTNNrŽ   )r/   r   )rs   zcp._SectionNamer/   NrY   )8rL   rM   rN   rO   r
   rá   r:  Úcompiler
  Úoptvalueonly_sourcer  r  r1   r   r   r   r„  r   ru   rÛ   rz   rˆ   r   r�   rx   rP   rñ   r   r   rL  r&  r}  r)  r   r   r(  rZ   ra  r³   rµ   r=   r`   rj  rÉ   r�   rË   r~  rg   ry  ru  r^  r>   rh   r‰  r�  rQ   rR   s   @r8   r   r     sÒ  ø„ ñð* €Fðð �—‘˜KÓ(€Jð :Ðà�2—:‘:Ð1Ó2€LàˆR�Z‰ZÐ+Ð.CÑCÐFWÑWÓX€FààRÐðð
 aeØØ#Ø7;Ø$(ñ=à˜T 8¨Y¸ÀÀxÐQZÐGZÑA[Ñ8\Ð\Ñ]ð=ð ð=ð ð	=ð
 Ð-¨tÐ3Ñ4ð=ð �LÑ!ð=ð 
ó=ó~&ó(ó
ð˜cð  dó ó+ð2 Sð ¨Só ðf˜˜n¨b°©iÐ7Ñ8ð fÀ#ð fÈ$ó fðPD˜u T¨3 YÑ/ó Dð4  e¨C°¨H¡oÑ!6ó 4ólG)ðR'˜ð ' ó 'ð4S #ð S¨$¨u°S¸#°X©Ñ*?õ Sð cð ¨d°5¸¸dÀ3¹i¸Ñ3HÑ.Ió ð  ò+ó ð+ðZ\¨Cð \°Dó \õ,ð ð˜4ò ó ðð 7;ñ	/àð/ð ð/ð �s˜E 3¨¨dÐ2Ñ3ð	/ð
 
ˆs�E˜3 Ð$Ñ	%ó/ðF 7;ñ	EàðEð ðEð �s˜E 3¨¨dÐ2Ñ3ð	Eð
 
ˆe�C˜  TÐ)Ñ*Ñ	+óEð@¨ð °°s¸EÀ3ÈÐ7LÑ1Mó ð8! e¨C°¸¸UÀDÐ,HÑ&Ið !Ècó !ð
 Ø ð ð ¨cð ¸%ÀÀUÈCÐQVÐX\Ð@\Ñ:]ð Ðbsò ó !ó ðð. Ø ð ð ¨cð ¸%ÀÀUÈCÐQVÐX\Ð@\Ñ:]ð Ðbsò ó !ó ðð2 cð °Sð Ð=N÷ ñ rK   )Ú	metaclass)IrO   Ú__all__ÚabcÚconfigparserrÑ   r=  Ú	functoolsr   r:   Úior   r   Úloggingr¿   Úos.pathÚpathrÁ   r:  r½   Ú
git.compatr   r	   Úgit.utilr
   Útypingr   r   r   r   r   r   r   r   r   r   r   r   Ú	git.typesr   r   r   r   r   r   Úgit.repo.baser   r   rP   rL  r}  r~  r„  r    Úversion_infoÚcollectionsr$   ÚOrderedDict_OMDÚ	getLoggerrL   rë   r)   Ú__annotations__rŽ  r7  ÚABCMetar+   r=   r>   r   r’   rÇ   rÒ   r   r°   rK   r8   ú<module>r¤     s˜  ðò :àÐ1Ð
2€ã 
Û Û Ý Û ß %Û Û 	Ý Û 	Û 
ç )Ý ÷÷ ÷ ó ÷ VÕ UáÝå"áÐ)Ð1BÔC€Ù�m S¨%°°e¸TÓB€à×Ñ�B�QÐ˜)Ò#å'à!�Oå"à! # t¨KÑ'8Ð"8Ñ9€Oð ˆ'×
Ñ
˜HÓ
%€à"L€ÐÓ LØ 6à'˜RŸZ™ZÐ(wÓxÐ ðô˜Ÿ™ô ð>
�x  R Ñ(ð 
¨X°c¸2°gÑ->ó 
ð°¸¸b¸Ñ0Að ÀhÈsÐTVÈwÑFWó ô$=J˜ Ñ/ô =Jô@*3ˆ?ô *3ðZ
Ð"3ð 
¸ó 
ô0j
�b×(Ñ(Ð4Eö j
rK   