ó
    &ÝNjEe  ã                   óÐ   • S SK r S SKrS SKJr  S SKJr  S SK Jr  S SKJrJ	r	J
r
JrJrJr  S SKJr  SSKJrJr  SS	KJrJrJr  SS
KJrJr  SSKJr   " S S\5      r " S S\5      rg)é    N)Úcontextmanager)Úcycle)ÚPathLike)ÚAnyÚ	GeneratorÚIteratorÚListÚOptionalÚUnion)ÚMocké   )ÚConfigÚ	DataProxy)ÚAuthFailureÚFailureÚResponseNotAccepted)ÚResultÚRunner)ÚFailingResponderc                   óˆ  • \ rS rSr% Sr\\   \S'   \\   \S'   \\S'     SS\\	   S\SS4S	 jjr
\S\	4S
 j5       r\R                  S\	SS4S j5       rS\S\S\4S jrSSS\S\S\4S jrS\S\S\4S jrSSS\S\S\4S jrS\S\4S jr\S\S\S   4S j5       r\S\4S j5       r\S\\\4   S\S   4S j5       rSrg)ÚContexté   aÙ  
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                 óF   • Ub  UO	[        5       nU R                  U/ / US9  g)zó
: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      ÚK/home/mande/repo/quber/.venv/lib/python3.13/site-packages/invoke/context.pyÚ__init__ÚContext.__init__;   s/   € ð "Ñ-‘´6³8ˆØ�	‰	ØØØØð	 	ò 	
ó    c                 ó   • U R                   $ )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   ÚContext.configR   s   € ð �|‰|Ðr%   Úvaluec                 ó"   • U R                  US9  g )Nr'   )r    )r!   r)   s     r"   r   r(   c   s   € ð 	�	‰	˜%ˆ	Ò r%   ÚcommandÚkwargsc                 ór   • U R                   R                  R                  U 5      nU R                  " X140 UD6$ )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"   ÚrunÚContext.runl   s2   € ð —‘×$Ñ$×*Ñ*¨4Ó0ˆØ�yŠy˜Ñ3¨FÑ3Ð3r%   r2   r   c                 óJ   • U R                  U5      nUR                  " U40 UD6$ ©N)Ú_prefix_commandsr3   )r!   r2   r+   r,   s       r"   r0   ÚContext._run   s&   € Ø×'Ñ'¨Ó0ˆØ�zŠz˜'Ñ, VÑ,Ð,r%   c                 ór   • U R                   R                  R                  U 5      nU R                  " X140 UD6$ )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/   Ú_sudor1   s       r"   ÚsudoÚContext.sudoƒ   s3   € ðJ —‘×$Ñ$×*Ñ*¨4Ó0ˆØ�zŠz˜&Ñ4¨VÑ4Ð4r%   c                 ó²  • U R                   R                  R                  nUR                  SU R                   R                  R                  5      nUR                  SU R                   R                  R
                  5      nUR                  S0 5      nSnUb  SR                  U5      nSn	U(       a.  SR                  SR                  UR                  5       5      5      n	U R                  U5      nSR                  XIX‚5      n
[        [        R                  " U5      S	R                  U5      S
S9nUR                  S[        U R                   R                  R                   5      5      nUR#                  U5         UR                  " U
4SU0UD6$ ! [$         a;  n['        UR(                  [*        5      (       a  [-        UR.                  US9nUee S nAff = f)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   r;   rH   Úpopr>   r?   ÚgetÚformatÚjoinÚkeysr7   r   ÚreÚescapeÚlistr3   rF   Úappendr   Ú
isinstanceÚreasonr   r   rG   )r!   r2   r+   r,   rH   r>   r?   r@   Ú
user_flagsÚ	env_flagsÚcmd_strÚwatcherrF   ÚfailureÚerrors                  r"   r:   Ú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Ø˜zó
ˆô #Ü—I’I˜fÓ%Ø—]‘] 8Ó,Ø*ñ
ˆð —:‘:˜j¬$¨t¯{©{¯©×/GÑ/GÓ*HÓIˆØ�‰˜Ô ð	Ø—:’:˜gÑC°ÐC¸FÑCÐCøÜó 	ô ˜'Ÿ.™.Ô*=×>Ñ>ä#¨7¯>©>À&ÑI�Ø�ð ûð	ús   Å<F Æ
GÆ6GÇGc                 ó¼   • [        U R                  5      nU R                  nU(       a!  UR                  SSR	                  U5      5        SR                  X!/-   5      $ )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 && )rP   r   ÚcwdÚinsertrK   rL   )r!   r+   ÚprefixesÚcurrent_directorys       r"   r7   ÚContext._prefix_commands
  sM   € ô ˜×-Ñ-Ó.ˆØ ŸH™HÐÞØ�O‰O˜A˜wŸ~™~Ð.?Ó@ÔAà�{‰{˜8 iÑ/Ó0Ð0r%   )NNNc              #   ó¾   #   • U R                   R                  U5         Sv •  U R                   R                  5         g! U R                   R                  5         f = f7f)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   rQ   rI   )r!   r+   s     r"   ÚprefixÚContext.prefix  sH   é € ðd 	×Ñ×$Ñ$ WÔ-ð	(Ûà×!Ñ!×%Ñ%Õ'øˆD×!Ñ!×%Ñ%Õ'üs   ‚AŸ> £A¾AÁAc                 ó”  • U R                   (       d  g[        [        [        U R                   5      5      5       H3  u  pUR	                  S5      (       d  UR	                  S5      (       d  M3    O   U R                   WS  Vs/ s H  o"R                  SS5      PM     nn[        [        R                  R                  " U6 5      $ s  snf )z[
Return the current working directory, accounting for uses of `cd`.

.. versionadded:: 1.0
rA   Ú~Ú/NÚ z\ )
r   ÚreversedrP   Ú	enumerateÚ
startswithÚreplaceÚstrÚosÚpathrL   )r!   Úirn   Úpathss       r"   r\   ÚContext.cwdP  s¢   € ð × × ð ô  ¤¤Y¨t×/@Ñ/@Ó%AÓ BÖC‰GˆAØ�‰˜s×#Ñ# t§¡°s×';Ó';Ùñ Dð 7;×6GÑ6GÈÈÑ6KÓLÒ6K¨d—‘˜c 5Ö)Ñ6KˆÐLÜ”2—7‘7—<’< Ð'Ó(Ð(ùò Ms   ÂCrn   c              #   óÔ   #   • [        U5      nU R                  R                  U5         Sv •  U R                  R                  5         g! U R                  R                  5         f = f7f)ai  
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)rl   r   rQ   rI   )r!   rn   s     r"   ÚcdÚ
Context.cdg  sQ   é € ô^ �4‹yˆØ×Ñ× Ñ  Ô&ð	$Ûà×Ñ×!Ñ!Õ#øˆD×Ñ×!Ñ!Õ#üs   ‚'A(ªA	 ®A(Á	A%Á%A(© )NrA   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r	   rl   Ú__annotations__r
   r   r#   Úpropertyr   Úsetterr   r   r3   r0   r;   r:   r7   r   r   rb   r\   r   r   rs   Ú__static_attributes__ru   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                   óÂ   ^ • \ rS rSrSrSS\\   S\SS4U 4S jjjrS\S\	\   4S	 jr
S
\S\S\4S jrS\S\S\S\4S jrS\S\S\S\4S jrS
\S\S\SS4S jrSrU =r$ )ÚMockContextiž  a�  
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           
      óv  >• [         T	U ]  U5        U R                  SUR                  SS5      5        UR	                  5        Hó  u  p4[
        [        [        4n[        U[        5      (       a-  UR	                  5        H  u  pgU R                  U5      XF'   M     OX[        XE5      (       d  [        US5      (       a  U R                  U5      nO%Sn[        UR                  [        U5      5      5      eU R                  SR                  U5      U5        U R                  U[        [!        X5      S95        Mõ     g)	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    rI   Úitemsr   Úboolrl   rR   ÚdictÚ
_normalizeÚhasattrÚ	TypeErrorrK   Útyper   Úgetattr)
r!   r   r,   ÚmethodÚresultsÚ
singletonsÚkeyr)   ÚerrÚ	__class__s
            €r"   r#   ÚMockContext.__init__³  sö   ø€ ôp 	‰Ñ˜Ô à�	‰	�*˜fŸj™j¨°4Ó8Ô9à%Ÿ|™|ž~‰OˆFô !¤$¬Ð,ˆJÜ˜'¤4×(Ñ(Ø")§-¡-¦/‘J�CØ#'§?¡?°5Ó#9�G“Lò #2ä˜G×0Ñ0´GØ˜÷5ñ 5ð Ÿ/™/¨'Ó2‘ð B�Ü §
¡
¬4°«=Ó 9Ó:Ð:à�I‰I�f—m‘m FÓ+¨WÔ5à�I‰I�fœd¬°Ó)>Ñ?Ö@ò%  .r%   r)   c                 ój  • [        US5      (       a  [        U[        5      (       a  U/n/ nU H\  n[        U[        5      (       a  [	        U(       a  SOSS9nO [        U[        5      (       a  [	        U5      nUR                  U5        M^     [        U S5      (       a  [        U5      $ [        U5      $ )Nr„   r   r   )Úexitedr‚   )	rŒ   rR   rl   r‰   r   rQ   r�   r   Úiter)r!   r)   r‘   Úobjs       r"   r‹   ÚMockContext._normalize  s�   € ä�u˜j×)Ñ)¬Z¸¼s×-CÑ-CØ�GˆEàˆÛˆCÜ˜#œt×$Ñ$Ü®¡A°!Ñ4‘Ü˜C¤×%Ñ%Ü˜S“k�Ø�N‰N˜3Öñ ô ")¨¨z×!:Ñ!:Œu�W‹~ÐMÄÀWÃÐMr%   Úattnamer+   c                 ó   •  [        X5      n[        U[        5      (       a   X2   n[        U5      nUR                  (       d  X&l        U$ ! [         aO    UR	                  5        H4  u  pE[        US5      (       d  M  UR                  U5      (       d  M0  Un   Mt     [        ef = f! [        [        [        [        4 a    [        U5      ef = f)NÚmatch)r�   rR   rŠ   ÚKeyErrorrˆ   rŒ   rž   Únextr+   ÚAttributeErrorÚ
IndexErrorÚStopIterationÚNotImplementedError)r!   rœ   r+   rš   r“   r)   rG   s          r"   Ú_yield_resultÚMockContext._yield_result  s»   € ð	/Ü˜$Ó(ˆCä˜#œt×$Ñ$ð'Ø™,�Cô " #›YˆFð —>—>Ø!(”ØˆMøô%  ó 	'ð '*§i¡i¦k™
˜Ü" 3¨×0Ó0°S·Y±Y¸w×5GÓ5GØ"'˜CÛ!ñ '2ô '˜ð	'ûô& ¤
¬H´mÐDó 	/ä% gÓ.Ð.ð	/ús9   ‚ B' £A §#B' Á.B$Á=B$ÂB$ÂB' Â	B$Â$B' Â'&CÚargsc                 ó&   • U R                  SU5      $ )NÚ__run©r¥   ©r!   r+   r§   r,   s       r"   r3   ÚMockContext.run5  s   € ð
 ×!Ñ! '¨7Ó3Ð3r%   c                 ó&   • U R                  SU5      $ )NÚ__sudorª   r«   s       r"   r;   ÚMockContext.sudo<  s   € ð
 ×!Ñ! (¨GÓ4Ð4r%   rG   c                 óÈ   • SR                  U5      n[        S5      n [        X5      n[	        U[
        5      (       d  UeU R                  U5      XR'   g! [         a    Uef = f)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
r…   z>Can't update results for non-dict or nonexistent mock results!N)rK   r�   r�   r¡   rR   rŠ   r‹   )r!   rœ   r+   rG   Úheckr)   s         r"   Úset_result_forÚMockContext.set_result_forC  sh   € ð. —-‘- Ó(ˆÜØLó
ˆð	Ü˜DÓ*ˆEô ˜%¤×&Ñ&ØˆJàŸ™¨Ó0ˆŠøô ó 	ØˆJð	ús   žA ÁA!ru   r6   )rv   rw   rx   ry   rz   r
   r   r   r#   r   r‹   rl   r   r¥   r3   r;   r²   r~   Ú__classcell__)r•   s   @r"   r€   r€   ž  s×   ø† ññ(NA˜x¨Ñ/ð NAÀ#ð 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à	÷%1ò %1r%   r€   )rm   rN   Ú
contextlibr   Ú	itertoolsr   r   Útypingr   r   r   r	   r
   r   Úunittest.mockr   r   r   r   Ú
exceptionsr   r   r   r.   r   r   rF   r   r   r€   ru   r%   r"   Ú<module>rº      sO   ðÛ 	Û 	Ý %Ý Ý ÷÷ õ ç %ß AÑ Aß #Ý &ôE$ˆiô E$ôPJ1�'õ J1r%   