§
    2?Äj59  ã                   óÒ   — d 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  G d„ d	e¦  «        Z G d
„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        ZdS )ag  Read/Write images using FreeImage.

Backend Library: `FreeImage <https://freeimage.sourceforge.io/>`_

.. note::
    To use this plugin you have to install its backend::

        imageio_download_bin freeimage

    or you can download the backend using the function::

        imageio.plugins.freeimage.download()

Each Freeimage format has the ``flags`` keyword argument. See the `Freeimage
documentation <https://freeimage.sourceforge.io/>`_ for more information.

Parameters
----------
flags : int
    A freeimage-specific option. In most cases we provide explicit
    parameters for influencing image reading.

é    Né   )ÚFormatÚimage_as_uint)ÚRETURN_BYTESé   )ÚFNAME_PER_PLATFORMÚIO_FLAGSÚdownloadÚfic                   óœ   ‡ — e Zd ZdZdZdddœˆ fd„Zed„ ¦   «         Zd„ Zd„ Z	 G d	„ d
e
j        ¦  «        Z G d„ de
j        ¦  «        Zˆ xZS )ÚFreeimageFormatz$See :mod:`imageio.plugins.freeimage`ÚiN)Úfifc                ó`   •— t          ¦   «                              ||||¬¦  «         || _        d S )N)Ú
extensionsÚmodes)ÚsuperÚ__init__Ú_fif)ÚselfÚnameÚdescriptionr   r   r   Ú	__class__s         €úJC:\Projects\Historical\venv\Lib\site-packages\imageio/plugins/freeimage.pyr   zFreeimageFormat.__init__*   s/   ø€ Ý‰Œ×Ò˜˜{°zÈÐÑOÔOÐOØˆŒ	ˆ	ˆ	ó    c                 ó   — | j         S ©N)r   ©r   s    r   r   zFreeimageFormat.fif.   s
   € àŒyÐr   c                 ó$  — t          j        ¦   «         rxt          |d¦  «        s>	 t          j        |j        d|j        ¦  «        |_        n# t          $ r
 d|_        Y nw xY w|j        | j        k    rdS |j        dk    r| j        dk    rdS d S d S d S )Nr   ÚréÿÿÿÿTé   é   )	r   Úhas_libÚhasattrÚgetFIFÚfilenameÚ
firstbytesr   Ú	Exceptionr   ©r   Úrequests     r   Ú	_can_readzFreeimageFormat._can_read2   s²   € åŒ:‰<Œ<ð 	Ý˜7 FÑ+Ô+ð &ð&Ý#%¤9¨WÔ-=¸sÀGÔDVÑ#WÔ#W�G”L�LøÝ ð &ð &ð &Ø#%�G”L�L�Lð&øøøàŒ|˜tœxÒ'Ð'Ø�tØ” Ò"Ð" t¤x°2¢~ ~ð �tð	ð 	ð #Ð" ~ ~s   ¥%A ÁAÁAc                 ó  — t          j        ¦   «         rut          |d¦  «        sU	 t          j        |j        d¦  «        |_        n4# t          $ r' |j        t          k    r| j	        |_        nd|_        Y nw xY w|j        | j	        u rdS d S d S )Nr   Úwr!   T)
r   r$   r%   r&   r'   r   Ú
ValueErrorÚraw_urir   r   r*   s     r   Ú
_can_writezFreeimageFormat._can_writeA   s£   € åŒ:‰<Œ<ð 
	Ý˜7 FÑ+Ô+ð *ð*Ý#%¤9¨WÔ-=¸sÑ#CÔ#C�G”L�LøÝ!ð *ð *ð *Ø”­,Ò6Ð6Ø'+¤x˜œ˜à')˜œøøð	*øøøð
 Œ|˜tœxÐ'Ð'Ø�tð
	ð 
	ð (Ð's   ¥A Á.A6Á5A6c                   ó.   — e Zd Zd„ Zdd„Zd„ Zd„ Zd„ ZdS )	úFreeimageFormat.Readerc                 ó   — dS )Nr   © r   s    r   Ú_get_lengthz"FreeimageFormat.Reader._get_lengthR   s   € Ø�1r   r   c                 óÆ   — t          j        | j        j        | j        j        |¦  «        | _        | j                             | j                             ¦   «         ¦  «         d S r   )	r   Úcreate_bitmapr+   r'   Úformatr   Ú_bmÚload_from_filenameÚget_local_filename©r   Úflagss     r   Ú_openzFreeimageFormat.Reader._openU   sL   € ÝÔ'¨¬Ô(=¸t¼{¼ÐPUÑVÔVˆDŒHØŒH×'Ò'¨¬×(GÒ(GÑ(IÔ(IÑJÔJÐJÐJÐJr   c                 ó8   — | j                              ¦   «          d S r   )r:   Úcloser   s    r   Ú_closezFreeimageFormat.Reader._closeY   s   € ØŒH�NŠNÑÔÐÐÐr   c                 ó�   — |dk    rt          d¦  «        ‚| j                             ¦   «         | j                             ¦   «         fS )Nr   z+This format only supports singleton images.)Ú
IndexErrorr:   Úget_image_dataÚget_meta_data©r   Úindexs     r   Ú	_get_dataz FreeimageFormat.Reader._get_data\   sA   € Ø˜ŠzˆzÝ Ð!NÑOÔOÐOØ”8×*Ò*Ñ,Ô,¨d¬h×.DÒ.DÑ.FÔ.FÐFÐFr   c                 ó`   — |�|dk    st          ¦   «         ‚| j                             ¦   «         S )Nr   )rD   r:   rF   rG   s     r   Ú_get_meta_dataz%FreeimageFormat.Reader._get_meta_dataa   s-   € Ø�M U¨a¢Z ZÝ ‘l”lÐ"Ø”8×)Ò)Ñ+Ô+Ð+r   N©r   )Ú__name__Ú
__module__Ú__qualname__r6   r?   rB   rI   rK   r5   r   r   ÚReaderr3   Q   sk   € € € € € ð	ð 	ð 	ð	Kð 	Kð 	Kð 	Kð	ð 	ð 	ð	Gð 	Gð 	Gð
	,ð 	,ð 	,ð 	,ð 	,r   rP   c                   ó(   — e Zd Zdd„Zd„ Zd„ Zd„ ZdS )úFreeimageFormat.Writerr   c                 ó>   — || _         d | _        d| _        i | _        d S )NF)Ú_flagsr:   Ú_is_setÚ_metar=   s     r   r?   zFreeimageFormat.Writer._openi   s"   € ØˆDŒKØˆDŒHØ ˆDŒLØˆDŒJˆJˆJr   c                 óØ   — | j                              | j        ¦  «         | j                              | j                             ¦   «         ¦  «         | j                              ¦   «          d S r   )r:   Úset_meta_datarV   Úsave_to_filenamer+   r<   rA   r   s    r   rB   zFreeimageFormat.Writer._closeo   sV   € àŒH×"Ò" 4¤:Ñ.Ô.Ð.àŒH×%Ò% d¤l×&EÒ&EÑ&GÔ&GÑHÔHÐHØŒH�NŠNÑÔÐÐÐr   c                 ó„  — | j         sd| _         nt          d¦  «        ‚|j        dk    r |j        d         dk    r|d d …d d …df         }| j        €Nt          j        | j        j        | j	        j
        | j        ¦  «        | _        | j                             |¦  «         | j                             |¦  «         || _        d S )NTz1Singleton image; can only append image data once.é   r!   r   r   )rU   ÚRuntimeErrorÚndimÚshaper:   r   r8   r+   r'   r9   r   rT   ÚallocateÚset_image_datarV   ©r   ÚimÚmetas      r   Ú_append_dataz#FreeimageFormat.Writer._append_datav   sÇ   € à”<ð Ø#�”�å"ØJñô ð ð Œw˜!Š|ˆ| ¤¨¤°Ò 1Ð 1Ø˜˜˜˜1˜1˜1˜a˜”[�àŒxÐÝÔ+Ø”LÔ)¨4¬;¬?¸D¼Kñô �”ð ”×!Ò! "Ñ%Ô%Ð%àŒH×#Ò# BÑ'Ô'Ð'ð ˆDŒJˆJˆJr   c                 ó   — || _         d S r   )rV   )r   rc   s     r   Ú_set_meta_dataz%FreeimageFormat.Writer._set_meta_data�   s   € ØˆDŒJˆJˆJr   NrL   )rM   rN   rO   r?   rB   rd   rf   r5   r   r   ÚWriterrR   h   sU   € € € € € ð	ð 	ð 	ð 	ð	ð 	ð 	ð	ð 	ð 	ð.	ð 	ð 	ð 	ð 	r   rg   )NN)rM   rN   rO   Ú__doc__Ú_modesr   Úpropertyr   r,   r1   r   rP   rg   Ú__classcell__)r   s   @r   r   r   %   så   ø€ € € € € Ø.Ð.à€FðÈdð ð ð ð ð ð ð ð ðð ñ „Xððð ð ðð ð ð ,ð ,ð ,ð ,ð ,�”ñ ,ô ,ð ,ð.&ð &ð &ð &ð &�”ñ &ô &ð &ð &ð &ð &ð &r   r   c                   ó8   — e Zd ZdZ G d„ dej        ¦  «        ZdS )ÚFreeimageBmpFormata®  A BMP format based on the Freeimage library.

    This format supports grayscale, RGB and RGBA images.

    The freeimage plugin requires a `freeimage` binary. If this binary
    not available on the system, it can be downloaded manually from
    <https://github.com/imageio/imageio-binaries> by either

    - the command line script ``imageio_download_bin freeimage``
    - the Python method ``imageio.plugins.freeimage.download()``

    Parameters for saving
    ---------------------
    compression : bool
        Whether to compress the bitmap using RLE when saving. Default False.
        It seems this does not always work, but who cares, you should use
        PNG anyway.

    c                   ó   — e Zd Zdd„Zd„ ZdS )úFreeimageBmpFormat.Writerr   Fc                 ó¢   — t          |¦  «        }|r|t          j        z  }n|t          j        z  }t          j                             | |¦  «        S r   )Úintr	   ÚBMP_SAVE_RLEÚBMP_DEFAULTr   rg   r?   )r   r>   Úcompressions      r   r?   zFreeimageBmpFormat.Writer._open­   sJ   € å˜‘J”JˆEØð .Ø�Ô.Ñ.��à�Ô-Ñ-�å"Ô)×/Ò/°°eÑ<Ô<Ð<r   c                 óf   — t          |d¬¦  «        }t          j                             | ||¦  «        S )Né   ©Úbitdepth)r   r   rg   rd   ra   s      r   rd   z&FreeimageBmpFormat.Writer._append_data·   s/   € Ý˜r¨AÐ.Ñ.Ô.ˆBÝ"Ô)×6Ò6°t¸RÀÑFÔFÐFr   N)r   F©rM   rN   rO   r?   rd   r5   r   r   rg   ro   ¬   s<   € € € € € ð	=ð 	=ð 	=ð 	=ð	Gð 	Gð 	Gð 	Gð 	Gr   rg   N©rM   rN   rO   rh   r   rg   r5   r   r   rm   rm   —   sU   € € € € € ðð ð(Gð Gð Gð Gð G�Ô'ñ Gô Gð Gð Gð Gr   rm   c                   ó^   — e Zd ZdZ G d„ dej        ¦  «        Z G d„ dej        ¦  «        ZdS )ÚFreeimagePngFormataY  A PNG format based on the Freeimage library.

    This format supports grayscale, RGB and RGBA images.

    The freeimage plugin requires a `freeimage` binary. If this binary
    not available on the system, it can be downloaded manually from
    <https://github.com/imageio/imageio-binaries> by either

    - the command line script ``imageio_download_bin freeimage``
    - the Python method ``imageio.plugins.freeimage.download()``

    Parameters for reading
    ----------------------
    ignoregamma : bool
        Avoid gamma correction. Default True.

    Parameters for saving
    ---------------------
    compression : {0, 1, 6, 9}
        The compression factor. Higher factors result in more
        compression at the cost of speed. Note that PNG compression is
        always lossless. Default 9.
    quantize : int
        If specified, turn the given RGB or RGBA image in a paletted image
        for more efficient storage. The value should be between 2 and 256.
        If the value of 0 the image is not quantized.
    interlaced : bool
        Save using Adam7 interlacing. Default False.
    c                   ó   — e Zd Zdd„ZdS )úFreeimagePngFormat.Readerr   Tc                 ó‚   — t          |¦  «        }|r|t          j        z  }t          j                             | |¦  «        S r   )rq   r	   ÚPNG_IGNOREGAMMAr   rP   r?   )r   r>   Úignoregammas      r   r?   zFreeimagePngFormat.Reader._openÜ   s;   € å˜‘J”JˆEØð 2Ø�Ô1Ñ1�å"Ô)×/Ò/°°eÑ<Ô<Ð<r   N©r   T©rM   rN   rO   r?   r5   r   r   rP   r~   Û   ó(   € € € € € ð	=ð 	=ð 	=ð 	=ð 	=ð 	=r   rP   c                   ó   — e Zd Zdd„Zd„ ZdS )úFreeimagePngFormat.Writerr   é	   Fc                 ó4  — t           j        t           j        t           j        t           j        dœ}t          |¦  «        }|r|t           j        z  }	 |||         z  }n# t          $ r t          d¦  «        ‚w xY wt          j
                             | |¦  «        S )N)r   r   é   r‡   z&Png compression must be 0, 1, 6, or 9.)r	   ÚPNG_Z_NO_COMPRESSIONÚPNG_Z_BEST_SPEEDÚPNG_Z_DEFAULT_COMPRESSIONÚPNG_Z_BEST_COMPRESSIONrq   ÚPNG_INTERLACEDÚKeyErrorr/   r   rg   r?   )r   r>   rt   ÚquantizeÚ
interlacedÚcompression_maps         r   r?   zFreeimagePngFormat.Writer._openç   s¨   € åÔ0ÝÔ,ÝÔ5ÝÔ2ð	ð ˆOõ ˜‘J”JˆEØð 1Ø�Ô0Ñ0�ðKØ˜¨Ô5Ñ5��øÝð Kð Kð KÝ Ð!IÑJÔJÐJðKøøøõ #Ô)×/Ò/°°eÑ<Ô<Ð<s   ÁA ÁA7c                 ó"  — t          |j        ¦  «        dk    rt          |d¬¦  «        }nt          |d¬¦  «        }t          j                             | ||¦  «         t          | j        j         	                    dd¦  «        ¦  «        }|sd S |j
        dk    r|j        d         dk    st          d	¦  «        ‚|d
k     s|dk    rt          d¦  «        ‚| j                             d|¦  «        }| j                             ¦   «          || _        d S )NÚuint16é   rw   rv   r�   Fr[   r!   zCan only quantize RGB imagesr   é   z!PNG quantize param must be 2..256r   )ÚstrÚdtyper   r   rg   rd   rq   r+   ÚkwargsÚgetr]   r^   r/   r:   r�   rA   )r   rb   rc   ÚqÚbms        r   rd   z&FreeimagePngFormat.Writer._append_dataù   s  € Ý�2”8‰}Œ} Ò(Ð(Ý" 2°Ð3Ñ3Ô3��å" 2°Ð2Ñ2Ô2�ÝÔ"×/Ò/°°b¸$Ñ?Ô?Ð?å�D”LÔ'×+Ò+¨J¸Ñ>Ô>Ñ?Ô?ˆAØð 	Ø�Ø”g ’l�l r¤x°¤|°qÒ'8Ð'8Ý Ð!?Ñ@Ô@Ð@Ø�Q’�˜!˜cš'˜'Ý Ð!DÑEÔEÐEà”X×&Ò& q¨!Ñ,Ô,�Ø”—’Ñ Ô Ð Ø�”��r   N)r   r‡   r   Fry   r5   r   r   rg   r†   æ   s7   € € € € € ð	=ð 	=ð 	=ð 	=ð$	ð 	ð 	ð 	ð 	r   rg   N©rM   rN   rO   rh   r   rP   rg   r5   r   r   r|   r|   ¼   sx   € € € € € ðð ð<=ð =ð =ð =ð =�Ô'ñ =ô =ð =ð$ð $ð $ð $ð $�Ô'ñ $ô $ð $ð $ð $r   r|   c                   ó^   — e Zd ZdZ G d„ dej        ¦  «        Z G d„ dej        ¦  «        ZdS )ÚFreeimageJpegFormataA  A JPEG format based on the Freeimage library.

    This format supports grayscale and RGB images.

    The freeimage plugin requires a `freeimage` binary. If this binary
    not available on the system, it can be downloaded manually from
    <https://github.com/imageio/imageio-binaries> by either

    - the command line script ``imageio_download_bin freeimage``
    - the Python method ``imageio.plugins.freeimage.download()``

    Parameters for reading
    ----------------------
    exifrotate : bool
        Automatically rotate the image according to the exif flag.
        Default True. If 2 is given, do the rotation in Python instead
        of freeimage.
    quickread : bool
        Read the image more quickly, at the expense of quality.
        Default False.

    Parameters for saving
    ---------------------
    quality : scalar
        The compression factor of the saved image (1..100), higher
        numbers result in higher quality but larger file size. Default 75.
    progressive : bool
        Save as a progressive JPEG file (e.g. for images on the web).
        Default False.
    optimize : bool
        On saving, compute optimal Huffman coding tables (can reduce a
        few percent of file size). Default False.
    baseline : bool
        Save basic JPEG, without metadata or any markers. Default False.

    c                   ó"   — e Zd Zdd„Zd„ Zd„ ZdS )	úFreeimageJpegFormat.Readerr   TFc                 ó°   — t          |¦  «        }|r|dk    r|t          j        z  }|s|t          j        z  }t          j                             | |¦  «        S )Nr   )rq   r	   ÚJPEG_EXIFROTATEÚJPEG_ACCURATEr   rP   r?   )r   r>   Ú
exifrotateÚ	quickreads       r   r?   z FreeimageJpegFormat.Reader._open4  sX   € å˜‘J”JˆEØð 2˜j¨Ašo˜oØ�Ô1Ñ1�Øð 0Ø�Ô/Ñ/�å"Ô)×/Ò/°°eÑ<Ô<Ð<r   c                 ó|   — t           j                             | |¦  «        \  }}|                      ||¦  «        }||fS r   )r   rP   rI   Ú_rotate)r   rH   rb   rc   s       r   rI   z$FreeimageJpegFormat.Reader._get_data>  s:   € Ý&Ô-×7Ò7¸¸eÑDÔD‰HˆB�Ø—’˜b $Ñ'Ô'ˆBØ�t�8ˆOr   c                 ó\  — | j         j                             dd¦  «        dk    r‡	 |d         d         }|dv r	 |dv rt          j        |d¦  «        }|dv rt          j        |d	¦  «        }|d
v rt          j        |¦  «        }|dv rt          j        |¦  «        }n# t          $ r Y nw xY w|S )aN  Use Orientation information from EXIF meta data to
            orient the image correctly. Freeimage is also supposed to
            support that, and I am pretty sure it once did, but now it
            does not, so let's just do it in Python.
            Edit: and now it works again, just leave in place as a fallback.
            r¥   Nr   Ú	EXIF_MAINÚOrientation)r   r   )r[   é   )é   r‰   r[   )r"   rv   )r   r¬   r­   r"   )r+   r™   rš   ÚnpÚrot90Úfliplrr�   )r   rb   rc   Úoris       r   r¨   z"FreeimageJpegFormat.Reader._rotateC  sÎ   € ð Œ|Ô"×&Ò& |°TÑ:Ô:¸aÒ?Ð?ð+Ø˜{Ô+¨MÔ:�Cð
 ˜f�}�}ØØ˜f�}�}ÝœX b¨!™_œ_˜Ø˜f�}�}ÝœX b¨!™_œ_˜Ø˜f�}�}ÝœX b™\œ\˜Ø˜lÐ*Ð*ÝœY r™]œ]˜øøõ  ð ð ð Ø�Dðøøøð ˆIs   ¦B Â
B)Â(B)N)r   TF)rM   rN   rO   r?   rI   r¨   r5   r   r   rP   r¡   3  sF   € € € € € ð	=ð 	=ð 	=ð 	=ð	ð 	ð 	ð
	ð 	ð 	ð 	ð 	r   rP   c                   ó   — e Zd Z	 dd„Zd„ ZdS )úFreeimageJpegFormat.Writerr   éK   Fc                 ó$  — t          |¦  «        }|dk     s|dk    rt          d¦  «        ‚t          |¦  «        }||z  }|r|t          j        z  }|r|t          j        z  }|r|t          j        z  }t          j                             | |¦  «        S )Nr   éd   z)JPEG quality should be between 1 and 100.)	rq   r/   r	   ÚJPEG_PROGRESSIVEÚJPEG_OPTIMIZEÚJPEG_BASELINEr   rg   r?   )r   r>   ÚqualityÚprogressiveÚoptimizeÚbaselines         r   r?   z FreeimageJpegFormat.Writer._open`  sœ   € õ ˜'‘l”lˆGØ˜Š{ˆ{˜g¨šm˜mÝ Ð!LÑMÔMÐMå˜‘J”JˆEØ�WÑˆEØð 3Ø�Ô2Ñ2�Øð 0Ø�Ô/Ñ/�Øð 0Ø�Ô/Ñ/�å"Ô)×/Ò/°°eÑ<Ô<Ð<r   c                 ó¼   — |j         dk    r |j        d         dk    rt          d¦  «        ‚t          |d¬¦  «        }t          j                             | ||¦  «        S )Nr[   r!   r¬   z$JPEG does not support alpha channel.rv   rw   )r]   r^   ÚIOErrorr   r   rg   rd   ra   s      r   rd   z'FreeimageJpegFormat.Writer._append_datas  sY   € ØŒw˜!Š|ˆ| ¤¨¤°Ò 1Ð 1ÝÐDÑEÔEÐEÝ˜r¨AÐ.Ñ.Ô.ˆBÝ"Ô)×6Ò6°t¸RÀÑFÔFÐFr   N)r   r´   FFFry   r5   r   r   rg   r³   _  s?   € € € € € àSXð	=ð 	=ð 	=ð 	=ð&	Gð 	Gð 	Gð 	Gð 	Gr   rg   Nr�   r5   r   r   rŸ   rŸ     s„   € € € € € ð#ð #ðJ(ð (ð (ð (ð (�Ô'ñ (ô (ð (ðXGð Gð Gð Gð G�Ô'ñ Gô Gð Gð Gð Gr   rŸ   c                   ó8   — e Zd ZdZ G d„ dej        ¦  «        ZdS )ÚFreeimagePnmFormatal  A PNM format based on the Freeimage library.

    This format supports single bit (PBM), grayscale (PGM) and RGB (PPM)
    images, even with ASCII or binary coding.

    The freeimage plugin requires a `freeimage` binary. If this binary
    not available on the system, it can be downloaded manually from
    <https://github.com/imageio/imageio-binaries> by either

    - the command line script ``imageio_download_bin freeimage``
    - the Python method ``imageio.plugins.freeimage.download()``

    Parameters for saving
    ---------------------
    use_ascii : bool
        Save with ASCII coding. Default True.
    c                   ó   — e Zd Zdd„ZdS )úFreeimagePnmFormat.Writerr   Tc                 ó‚   — t          |¦  «        }|r|t          j        z  }t          j                             | |¦  «        S r   )rq   r	   ÚPNM_SAVE_ASCIIr   rg   r?   )r   r>   Ú	use_asciis      r   r?   zFreeimagePnmFormat.Writer._openŽ  s;   € å˜‘J”JˆEØð 1Ø�Ô0Ñ0�å"Ô)×/Ò/°°eÑ<Ô<Ð<r   Nr‚   rƒ   r5   r   r   rg   rÃ   �  r„   r   rg   Nrz   r5   r   r   rÁ   rÁ   z  sK   € € € € € ðð ð$=ð =ð =ð =ð =�Ô'ñ =ô =ð =ð =ð =r   rÁ   )rh   Únumpyr®   Úcorer   r   Úcore.requestr   Ú
_freeimager   r	   r
   r   r   rm   r|   rŸ   rÁ   r5   r   r   ú<module>rË      ss  ððð ð0 Ð Ð Ð à (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ Bð
ið ið ið ið i�fñ iô ið iðd"Gð "Gð "Gð "Gð "G˜ñ "Gô "Gð "GðJNð Nð Nð Nð N˜ñ Nô Nð NðbjGð jGð jGð jGð jG˜/ñ jGô jGð jGðZ=ð =ð =ð =ð =˜ñ =ô =ð =ð =ð =r   