Ë
    zñ�jEe  ã                   óÐ   — d dl Z d dlZd dlmZ d dlmZ d dl mZ d dlmZm	Z	m
Z
mZmZmZ 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 ddlmZ  G d„ de«      Z G d„ de«      Zy)é    N)Úcontextmanager)Úcycle)ÚPathLike)ÚAnyÚ	GeneratorÚIteratorÚListÚOptionalÚUnion)ÚMocké   )ÚConfigÚ	DataProxy)ÚAuthFailureÚFailureÚResponseNotAccepted)ÚResultÚRunner)ÚFailingResponderc                   óh  — e Zd ZU dZee   ed<   ee   ed<   eed<   	 	 ddee   deddfd„Z	e
defd	„«       Zej                  d
eddfd„«       Zdededefd„Zdddededefd„Zdededefd„Zdddededefd„Zdedefd„Zededed   fd„«       Ze
defd„«       Zedeeef   ded   fd„«       Zy)ÚContexta  
    Context-aware API wrapper & state-passing object.

    `.Context` objects are created during command-line parsing (or, if desired,
    by hand) and used to share parser and configuration state with executed
    tasks (see :ref:`why-context`).

    Specifically, the class offers wrappers for core API calls (such as `.run`)
    which take into account CLI parser flags, configuration files, and/or
    changes made at runtime. It also acts as a proxy for its `~.Context.config`
    attribute - see that attribute's documentation for details.

    Instances of `.Context` may be shared between tasks when executing
    sub-tasks - either the same context the caller was given, or an altered
    copy thereof (or, theoretically, a brand new one).

    .. versionadded:: 1.0
    Úcommand_prefixesÚcommand_cwdsÚ	remainderNÚconfigÚreturnc                 óJ   — |�|n	t        «       }| j                  |g g |¬«       y)a+  
        :param config:
            `.Config` object to use as the base configuration.

            Defaults to an anonymous/default `.Config` instance.

        :param remainder:
            The invoking program's :ref:`parser remainder <remainder>` value,
            if any was obtained.
        N)Ú_configr   r   r   )r   Ú_set)Úselfr   r   s      úO/var/www/api.ozpay.ru/ozpay/venv/lib/python3.12/site-packages/invoke/context.pyÚ__init__zContext.__init__;   s/   € ð "Ð-‘´6³8ˆØ�	‰	ØØØØð	 	õ 	
ó    c                 ó   — | j                   S )aÖ  
        The fully merged `.Config` object appropriate for this context.

        `.Config` settings (see their documentation for details) may be
        accessed like dictionary keys (``c.config['foo']``) or object
        attributes (``c.config.foo``).

        As a convenience shorthand, the `.Context` object proxies to its
        ``config`` attribute in the same way - e.g. ``c['foo']`` or
        ``c.foo`` returns the same value as ``c.config['foo']``.
        ©r   )r    s    r!   r   zContext.configR   s   € ð �|‰|Ðr#   Úvaluec                 ó(   — | j                  |¬«       y )Nr%   )r   )r    r&   s     r!   r   zContext.configc   s   € ð 	�	‰	˜%ˆ	Õ r#   ÚcommandÚkwargsc                 ót   — | j                   j                  j                  | «      } | j                  ||fi |¤ŽS )a   
        Execute a local shell command, honoring config options.

        Specifically, this method instantiates a `.Runner` subclass (according
        to the ``runner`` config option; default is `.Local`) and calls its
        ``.run`` method with ``command`` and ``kwargs``.

        See `.Runner.run` for details on ``command`` and the available keyword
        arguments.

        .. versionadded:: 1.0
        )r   ÚrunnersÚlocalÚ_run©r    r(   r)   Úrunners       r!   ÚrunzContext.runl   s6   € ð —‘×$Ñ$×*Ñ*¨4Ó0ˆØˆt�y‰y˜ Ñ3¨FÑ3Ð3r#   r/   r   c                 óJ   — | j                  |«      } |j                  |fi |¤ŽS ©N)Ú_prefix_commandsr0   )r    r/   r(   r)   s       r!   r-   zContext._run   s(   € Ø×'Ñ'¨Ó0ˆØˆv�z‰z˜'Ñ, VÑ,Ð,r#   c                 ót   — | j                   j                  j                  | «      } | j                  ||fi |¤ŽS )a¥  
        Execute a shell command via ``sudo`` with password auto-response.

        **Basics**

        This method is identical to `run` but adds a handful of
        convenient behaviors around invoking the ``sudo`` program. It doesn't
        do anything users could not do themselves by wrapping `run`, but the
        use case is too common to make users reinvent these wheels themselves.

        .. note::
            If you intend to respond to sudo's password prompt by hand, just
            use ``run("sudo command")`` instead! The autoresponding features in
            this method will just get in your way.

        Specifically, `sudo`:

        * Places a `.FailingResponder` into the ``watchers`` kwarg (see
          :doc:`/concepts/watchers`) which:

            * searches for the configured ``sudo`` password prompt;
            * responds with the configured sudo password (``sudo.password``
              from the :doc:`configuration </concepts/configuration>`);
            * can tell when that response causes an authentication failure
              (e.g. if the system requires a password and one was not
              configured), and raises `.AuthFailure` if so.

        * Builds a ``sudo`` command string using the supplied ``command``
          argument, prefixed by various flags (see below);
        * Executes that command via a call to `run`, returning the result.

        **Flags used**

        ``sudo`` flags used under the hood include:

        - ``-S`` to allow auto-responding of password via stdin;
        - ``-p <prompt>`` to explicitly state the prompt to use, so we can be
          sure our auto-responder knows what to look for;
        - ``-u <user>`` if ``user`` is not ``None``, to execute the command as
          a user other than ``root``;
        - When ``-u`` is present, ``-H`` is also added, to ensure the
          subprocess has the requested user's ``$HOME`` set properly.

        **Configuring behavior**

        There are a couple of ways to change how this method behaves:

        - Because it wraps `run`, it honors all `run` config parameters and
          keyword arguments, in the same way that `run` does.

            - Thus, invocations such as ``c.sudo('command', echo=True)`` are
              possible, and if a config layer (such as a config file or env
              var) specifies that e.g. ``run.warn = True``, that too will take
              effect under `sudo`.

        - `sudo` has its own set of keyword arguments (see below) and they are
          also all controllable via the configuration system, under the
          ``sudo.*`` tree.

            - Thus you could, for example, pre-set a sudo user in a config
              file; such as an ``invoke.json`` containing ``{"sudo": {"user":
              "someuser"}}``.

        :param str password: Runtime override for ``sudo.password``.
        :param str user: Runtime override for ``sudo.user``.

        .. versionadded:: 1.0
        )r   r+   r,   Ú_sudor.   s       r!   ÚsudozContext.sudoƒ   s7   € ðJ —‘×$Ñ$×*Ñ*¨4Ó0ˆØˆt�z‰z˜& 'Ñ4¨VÑ4Ð4r#   c                 ó¨  — | j                   j                  j                  }|j                  d| j                   j                  j                  «      }|j                  d| j                   j                  j
                  «      }|j                  di «      }d}|�dj                  |«      }d}	|r.dj                  dj                  |j                  «       «      «      }	| j                  |«      }dj                  ||	||«      }
t        t        j                  |«      d	j                  |«      d
¬«      }|j                  dt        | j                   j                  j                   «      «      }|j#                  |«       	  |j                  |
fd|i|¤ŽS # t$        $ r9}t'        |j(                  t*        «      rt-        |j.                  |¬«      }|‚‚ d }~ww xY w)NÚpasswordÚuserÚenvÚ z	-H -u {} z--preserve-env='{}' ú,zsudo -S -p '{}' {}{}{}z{}
zSorry, try again.
)ÚpatternÚresponseÚsentinelÚwatchers)ÚresultÚprompt)r   r6   rB   Úpopr8   r9   ÚgetÚformatÚjoinÚkeysr3   r   ÚreÚescapeÚlistr0   r@   Úappendr   Ú
isinstanceÚreasonr   r   rA   )r    r/   r(   r)   rB   r8   r9   r:   Ú
user_flagsÚ	env_flagsÚcmd_strÚwatcherr@   ÚfailureÚerrors                  r!   r5   zContext._sudoÌ   s‡  € Ø—‘×!Ñ!×(Ñ(ˆØ—:‘:˜j¨$¯+©+×*:Ñ*:×*CÑ*CÓDˆØ�z‰z˜& $§+¡+×"2Ñ"2×"7Ñ"7Ó8ˆØ�j‰j˜ Ó#ˆð ˆ
ØÐØ$×+Ñ+¨DÓ1ˆJØˆ	ÙØ.×5Ñ5°c·h±h¸s¿x¹x»zÓ6JÓKˆIØ×'Ñ'¨Ó0ˆØ*×1Ñ1Ø�I˜z¨7ó
ˆô #Ü—I‘I˜fÓ%Ø—]‘] 8Ó,Ø*ô
ˆð —:‘:˜j¬$¨t¯{©{¯©×/GÑ/GÓ*HÓIˆØ�‰˜Ô ð	Ø�6—:‘:˜gÑC°ÐC¸FÑCÐCøÜò 	ô ˜'Ÿ.™.Ô*=Ô>ä#¨7¯>©>À&ÔI�Ø�ð ûð	ús   Å:F Æ	GÆ4GÇGc                 ó´   — t        | j                  «      }| j                  }|r!|j                  ddj	                  |«      «       dj                  ||gz   «      S )zÅ
        Prefixes ``command`` with all prefixes found in ``command_prefixes``.

        ``command_prefixes`` is a list of strings which is modified by the
        `prefix` context manager.
        r   zcd {}z && )rJ   r   ÚcwdÚinsertrE   rF   )r    r(   ÚprefixesÚcurrent_directorys       r!   r3   zContext._prefix_commands
  sO   € ô ˜×-Ñ-Ó.ˆØ ŸH™HÐÙØ�O‰O˜A˜wŸ~™~Ð.?Ó@ÔAà�{‰{˜8 w iÑ/Ó0Ð0r#   )NNNc              #   ó¾   K  — | j                   j                  |«       	 d–— | j                   j                  «        y# | j                   j                  «        w xY w­w)a¦  
        Prefix all nested `run`/`sudo` commands with given command plus ``&&``.

        Most of the time, you'll want to be using this alongside a shell script
        which alters shell state, such as ones which export or alter shell
        environment variables.

        For example, one of the most common uses of this tool is with the
        ``workon`` command from `virtualenvwrapper
        <https://virtualenvwrapper.readthedocs.io/en/latest/>`_::

            with c.prefix('workon myvenv'):
                c.run('./manage.py migrate')

        In the above snippet, the actual shell command run would be this::

            $ workon myvenv && ./manage.py migrate

        This context manager is compatible with `cd`, so if your virtualenv
        doesn't ``cd`` in its ``postactivate`` script, you could do the
        following::

            with c.cd('/path/to/app'):
                with c.prefix('workon myvenv'):
                    c.run('./manage.py migrate')
                    c.run('./manage.py loaddata fixture')

        Which would result in executions like so::

            $ cd /path/to/app && workon myvenv && ./manage.py migrate
            $ cd /path/to/app && workon myvenv && ./manage.py loaddata fixture

        Finally, as alluded to above, `prefix` may be nested if desired, e.g.::

            with c.prefix('workon myenv'):
                c.run('ls')
                with c.prefix('source /some/script'):
                    c.run('touch a_file')

        The result::

            $ workon myenv && ls
            $ workon myenv && source /some/script && touch a_file

        Contrived, but hopefully illustrative.

        .. versionadded:: 1.0
        N)r   rK   rC   )r    r(   s     r!   ÚprefixzContext.prefix  sI   è ø€ ðd 	×Ñ×$Ñ$ WÔ-ð	(Ûà×!Ñ!×%Ñ%Õ'øˆD×!Ñ!×%Ñ%Õ'üs   ‚AŸ> £A¾AÁAc                 ón  — | j                   syt        t        t        | j                   «      «      «      D ])  \  }}|j	                  d«      s|j	                  d«      sŒ) n | j                   d D �cg c]  }|j                  dd«      ‘Œ }}t        t        j                  j                  |Ž «      S c c}w )zs
        Return the current working directory, accounting for uses of `cd`.

        .. versionadded:: 1.0
        r;   ú~ú/Nú z\ )
r   ÚreversedrJ   Ú	enumerateÚ
startswithÚreplaceÚstrÚosÚpathrF   )r    Úire   Úpathss       r!   rU   zContext.cwdP  s¡   € ð × Ò ð ô  ¤¤Y¨t×/@Ñ/@Ó%AÓ BÓCò 	‰GˆAˆtØ�‰˜sÔ# t§¡°sÕ';Ùð	ð 7;×6GÑ6GÈÈÐ6KÖL¨d�—‘˜c 5Õ)ÐLˆÐLÜ”2—7‘7—<‘< Ð'Ó(Ð(ùò Ms   Á2B2re   c              #   óÔ   K  — t        |«      }| j                  j                  |«       	 d–— | j                  j                  «        y# | j                  j                  «        w xY w­w)aq  
        Context manager that keeps directory state when executing commands.

        Any calls to `run`, `sudo`, within the wrapped block will implicitly
        have a string similar to ``"cd <path> && "`` prefixed in order to give
        the sense that there is actually statefulness involved.

        Because use of `cd` affects all such invocations, any code making use
        of the `cwd` property will also be affected by use of `cd`.

        Like the actual 'cd' shell builtin, `cd` may be called with relative
        paths (keep in mind that your default starting directory is your user's
        ``$HOME``) and may be nested as well.

        Below is a "normal" attempt at using the shell 'cd', which doesn't work
        since all commands are executed in individual subprocesses -- state is
        **not** kept between invocations of `run` or `sudo`::

            c.run('cd /var/www')
            c.run('ls')

        The above snippet will list the contents of the user's ``$HOME``
        instead of ``/var/www``. With `cd`, however, it will work as expected::

            with c.cd('/var/www'):
                c.run('ls')  # Turns into "cd /var/www && ls"

        Finally, a demonstration (see inline comments) of nesting::

            with c.cd('/var/www'):
                c.run('ls') # cd /var/www && ls
                with c.cd('website1'):
                    c.run('ls')  # cd /var/www/website1 && ls

        .. note::
            Space characters will be escaped automatically to make dealing with
            such directory names easier.

        .. versionadded:: 1.0
        .. versionchanged:: 1.5
            Explicitly cast the ``path`` argument (the only argument) to a
            string; this allows any object defining ``__str__`` to be handed in
            (such as the various ``Path`` objects out there), and not just
            string literals.
        N)rc   r   rK   rC   )r    re   s     r!   Úcdz
Context.cdg  sR   è ø€ ô^ �4‹yˆØ×Ñ× Ñ  Ô&ð	$Ûà×Ñ×!Ñ!Õ#øˆD×Ñ×!Ñ!Õ#üs   ‚'A(ªA	 ®A(Á	A%Á%A()Nr;   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   rc   Ú__annotations__r
   r   r"   Úpropertyr   Úsetterr   r   r0   r-   r6   r5   r3   r   r   rZ   rU   r   r   ri   © r#   r!   r   r      s™  … ñð6 ˜3‘iÓð �s‘)Óð ƒNð $(Øñ
à˜Ñ ð
ð ð
ð 
ó	
ð. ð˜ò ó ðð  ‡]�]ð!˜Fð ! tò !ó ð!ð4˜3ð 4¨#ð 4°&ó 4ð&-˜8ð -¨cð -¸Sð -ÀVó -ðF5˜Cð F5¨3ð F5°6ó F5ðR9˜Hð 9¨sð 9¸cð 9Àfó 9ð|1¨ð 1°ó 1ð ð5(˜cð 5( iÐ0@Ñ&Aò 5(ó ð5(ðn ð)�Sò )ó ð)ð, ð3$�u˜X s˜]Ñ+ð 3$°	Ð:JÑ0Kò 3$ó ñ3$r#   r   c                   óª   ‡ — e Zd ZdZddee   deddfˆ fd„Zdedee   fd„Z	d	e
d
e
defd„Zd
e
dededefd„Zd
e
dededefd„Zd	e
d
e
deddfd„Zˆ xZS )ÚMockContextaÇ  
    A `.Context` whose methods' return values can be predetermined.

    Primarily useful for testing Invoke-using codebases.

    .. note::
        This class wraps its ``run``, etc methods in `unittest.mock.Mock`
        objects. This allows you to easily assert that the methods (still
        returning the values you prepare them with) were actually called.

    .. note::
        Methods not given `Results <.Result>` to yield will raise
        ``NotImplementedError`` if called (since the alternative is to call the
        real underlying method - typically undesirable when mocking.)

    .. versionadded:: 1.0
    .. versionchanged:: 1.5
        Added ``Mock`` wrapping of ``run`` and ``sudo``.
    Nr   r)   r   c           
      ó`  •— t         ‰	| �  |«       | j                  d|j                  dd«      «       |j	                  «       D ]é  \  }}t
        t        t        f}t        |t        «      r-|j	                  «       D ]  \  }}| j                  |«      ||<   Œ nOt        ||«      st        |d«      r| j                  |«      }n%d}t        |j                  t        |«      «      «      ‚| j                  dj                  |«      |«       | j                  |t        t!        | |«      ¬«      «       Œë y)	aì  
        Create a ``Context``-like object whose methods yield `.Result` objects.

        :param config:
            A Configuration object to use. Identical in behavior to `.Context`.

        :param run:
            A data structure indicating what `.Result` objects to return from
            calls to the instantiated object's `~.Context.run` method (instead
            of actually executing the requested shell command).

            Specifically, this kwarg accepts:

            - A single `.Result` object.
            - A boolean; if True, yields a `.Result` whose ``exited`` is ``0``,
              and if False, ``1``.
            - An iterable of the above values, which will be returned on each
              subsequent call to ``.run`` (the first item on the first call,
              the second on the second call, etc).
            - A dict mapping command strings or compiled regexen to the above
              values (including an iterable), allowing specific
              call-and-response semantics instead of assuming a call order.

        :param sudo:
            Identical to ``run``, but whose values are yielded from calls to
            `~.Context.sudo`.

        :param bool repeat:
            A flag determining whether results yielded by this class' methods
            repeat or are consumed.

            For example, when a single result is indicated, it will normally
            only be returned once, causing ``NotImplementedError`` afterwards.
            But when ``repeat=True`` is given, that result is returned on
            every call, forever.

            Similarly, iterable results are normally exhausted once, but when
            this setting is enabled, they are wrapped in `itertools.cycle`.

            Default: ``True``.

        :raises:
            ``TypeError``, if the values given to ``run`` or other kwargs
            aren't of the expected types.

        .. versionchanged:: 1.5
            Added support for boolean and string result values.
        .. versionchanged:: 1.5
            Added support for regex dict keys.
        .. versionchanged:: 1.5
            Added the ``repeat`` keyword argument.
        .. versionchanged:: 2.0
            Changed ``repeat`` default value from ``False`` to ``True``.
        Ú__repeatÚrepeatTÚ__iter__z)Not sure how to yield results from a {!r}ú__{})ÚwrapsN)Úsuperr"   r   rC   Úitemsr   Úboolrc   rL   ÚdictÚ
_normalizeÚhasattrÚ	TypeErrorrE   Útyper   Úgetattr)
r    r   r)   ÚmethodÚresultsÚ
singletonsÚkeyr&   ÚerrÚ	__class__s
            €r!   r"   zMockContext.__init__³  s  ø€ ôp 	‰Ñ˜Ô à�	‰	�*˜fŸj™j¨°4Ó8Ô9à%Ÿ|™|›~ò 	A‰OˆF�Gô !¤$¬Ð,ˆJÜ˜'¤4Ô(Ø")§-¡-£/ò :‘J�C˜Ø#'§?¡?°5Ó#9�G˜C’Lñ:ä˜G ZÔ0´GØ˜ô5ð Ÿ/™/¨'Ó2‘ð B�Ü §
¡
¬4°«=Ó 9Ó:Ð:à�I‰I�f—m‘m FÓ+¨WÔ5à�I‰I�fœd¬°°vÓ)>Ô?Õ@ñ%	Ar#   r&   c                 ó0  — t        |d«      rt        |t        «      r|g}g }|D ]O  }t        |t        «      rt	        |rdnd¬«      }nt        |t        «      rt	        |«      }|j                  |«       ŒQ t        | d«      rt        |«      S t        |«      S )Nrw   r   r   )Úexitedru   )	r   rL   rc   r|   r   rK   r‚   r   Úiter)r    r&   r„   Úobjs       r!   r~   zMockContext._normalize  s…   € ä�u˜jÔ)¬Z¸¼sÔ-CØ�GˆEàˆØò 	 ˆCÜ˜#œtÔ$Ü©¡A°!Ô4‘Ü˜C¤Ô%Ü˜S“k�Ø�N‰N˜3Õð	 ô ")¨¨zÔ!:Œu�W‹~ÐMÄÀWÃÐMr#   Úattnamer(   c                 óv  — 	 t        | |«      }t        |t        «      r	 ||   }t        |«      }|j                  s||_        |S # t        $ rC |j	                  «       D ]'  \  }}t        |d«      sŒ|j                  |«      sŒ%|} n t        ‚Y Œkw xY w# t        t        t        t        f$ r t        |«      ‚w xY w)NÚmatch)r‚   rL   r}   ÚKeyErrorr{   r   r�   Únextr(   ÚAttributeErrorÚ
IndexErrorÚStopIterationÚNotImplementedError)r    r�   r(   rŒ   r†   r&   rA   s          r!   Ú_yield_resultzMockContext._yield_result  sÄ   € ð	/Ü˜$ Ó(ˆCä˜#œtÔ$ð'Ø˜g™,�Cô " #›YˆFð —>’>Ø!(�”ØˆMøô%  ò 	'ð '*§i¡i£kò '™
˜˜UÜ" 3¨Õ0°S·Y±Y¸wÕ5GØ"'˜CÙ!ð'ô '˜ñ "ð	'ûô& ¤
¬H´mÐDò 	/ä% gÓ.Ð.ð	/ús9   ‚B ŸA ¤B Á+BÁ0BÂBÂB ÂBÂB Â%B8Úargsc                 ó&   — | j                  d|«      S )NÚ__run©r–   ©r    r(   r—   r)   s       r!   r0   zMockContext.run5  s   € ð
 ×!Ñ! '¨7Ó3Ð3r#   c                 ó&   — | j                  d|«      S )NÚ__sudorš   r›   s       r!   r6   zMockContext.sudo<  s   € ð
 ×!Ñ! (¨GÓ4Ð4r#   rA   c                 óÀ   — dj                  |«      }t        d«      }	 t        | |«      }t	        |t
        «      s|‚| j                  |«      ||<   y# t        $ r |‚w xY w)aå  
        Modify the stored mock results for given ``attname`` (e.g. ``run``).

        This is similar to how one instantiates `MockContext` with a ``run`` or
        ``sudo`` dict kwarg. For example, this::

            mc = MockContext(run={'mycommand': Result("mystdout")})
            assert mc.run('mycommand').stdout == "mystdout"

        is functionally equivalent to this::

            mc = MockContext()
            mc.set_result_for('run', 'mycommand', Result("mystdout"))
            assert mc.run('mycommand').stdout == "mystdout"

        `set_result_for` is mostly useful for modifying an already-instantiated
        `MockContext`, such as one created by test setup or helper methods.

        .. versionadded:: 1.0
        rx   z>Can't update results for non-dict or nonexistent mock results!N)rE   r€   r‚   r’   rL   r}   r~   )r    r�   r(   rA   Úheckr&   s         r!   Úset_result_forzMockContext.set_result_forC  si   € ð. —-‘- Ó(ˆÜØLó
ˆð	Ü˜D 'Ó*ˆEô ˜%¤Ô&ØˆJàŸ™¨Ó0ˆˆgŠøô ò 	ØˆJð	ús   žA ÁAr2   )rj   rk   rl   rm   r
   r   r   r"   r   r~   rc   r   r–   r0   r6   r    Ú__classcell__)rˆ   s   @r!   rs   rs   ž  sË   ø„ ññ(NA˜x¨Ñ/ð NAÀ#ð NAÈ$õ NAð`N ð N¨°©ó Nð(/ Sð /°3ð /¸6ó /ð<4˜3ð 4 sð 4°cð 4¸fó 4ð5˜Cð 5¨ð 5°sð 5¸vó 5ð%1Øð%1Ø%(ð%1Ø28ð%1à	÷%1r#   rs   )rd   rH   Ú
contextlibr   Ú	itertoolsr   r   Útypingr   r   r   r	   r
   r   Úunittest.mockr   r   r   r   Ú
exceptionsr   r   r   r+   r   r   r@   r   r   rs   rq   r#   r!   ú<module>r§      sO   ðÛ 	Û 	Ý %Ý Ý ÷÷ õ ç %ß AÑ Aß #Ý &ôE$ˆiô E$ôPJ1�'õ J1r#   