Ë
    S^(h`;  ã                   óÜ  — d dl Z d dlZd dlmZ ddlmZ ddlmZmZmZm	Z	m
Z
 ddlmZ ddlmZmZ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 d
dlmZ dZdZ dZ!g d¢Z"dZ#dZ$ G d„ dejJ                  «      Z& G d„ de«      Z' G d„ dejJ                  «      Z( G d„ dejJ                  «      Z) G d„ deejJ                  «      Z* G d„ de«      Z+ G d„ de«      Z, G d„ d e«      Z- G d!„ d"ee«      Z.d#Z/d$Z0e	Z1 ed%e/«       G d&„ d'e.e«      «       Z2 ed(e/«       G d)„ d*e.e«      «       Z3 ed+e/«       G d,„ d-e«      «       Z4 ed.e/«       G d/„ d0e«      «       Z5 ed1e/«       G d2„ d3e«      «       Z6g d4¢Z7y)5é    N)Únné   )ÚACT2FN)ÚCausalLMOutputÚSequenceClassifierOutputÚTokenClassifierOutputÚWav2Vec2BaseModelOutputÚXVectorOutput)ÚPreTrainedModel)Úadd_code_sample_docstringsÚadd_start_docstringsÚ%add_start_docstrings_to_model_forwardé   )ÚWav2Vec2AdapterÚWav2Vec2EncoderÚWav2Vec2FeatureEncoderÚWav2Vec2FeatureProjectionÚ#Wav2Vec2ForAudioFrameClassificationÚWav2Vec2ForCTCÚ!Wav2Vec2ForSequenceClassificationÚWav2Vec2ForXVectorÚWav2Vec2ModelÚWav2Vec2PreTrainedModelÚWav2Vec2SamePadLayeré   )ÚData2VecAudioConfigr   z!facebook/data2vec-audio-base-960h)r   i$  i   z['MISTER QUILTER IS THE APOSTLE OF THE MIDDLE CLASSES AND WE ARE GLAD TO WELCOME HIS GOSPEL'gÍÌÌÌÌ¼P@c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚData2VecAudioConvLayerc                 ó°  •— t         ‰| �  «        |dkD  r|j                  |dz
     nd| _        |j                  |   | _        t        j                  | j                  | j                  |j                  |   |j                  |   |j                  ¬«      | _
        t        j                  | j                  d¬«      | _        t        |j                     | _        y )Nr   r   )Úkernel_sizeÚstrideÚbiasT©Úelementwise_affine)ÚsuperÚ__init__Úconv_dimÚin_conv_dimÚout_conv_dimr   ÚConv1dÚconv_kernelÚconv_strideÚ	conv_biasÚconvÚ	LayerNormÚ
layer_normr   Úfeat_extract_activationÚ
activation)ÚselfÚconfigÚlayer_idÚ	__class__s      €úq/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/data2vec/modular_data2vec_audio.pyr&   zData2VecAudioConvLayer.__init__3   s¯   ø€ Ü‰ÑÔØ<DÀqºL˜6Ÿ?™?¨8°a©<Ò8ÈaˆÔØ"ŸO™O¨HÑ5ˆÔä—I‘IØ×ÑØ×ÑØ×*Ñ*¨8Ñ4Ø×%Ñ% hÑ/Ø×!Ñ!ô
ˆŒ	ô Ÿ,™, t×'8Ñ'8ÈTÔRˆŒÜ  ×!?Ñ!?Ñ@ˆ�ó    c                 ó´   — | j                  |«      }|j                  dd«      }| j                  |«      }|j                  dd«      }| j                  |«      }|S )Néþÿÿÿéÿÿÿÿ)r.   Ú	transposer0   r2   ©r3   Úhidden_statess     r7   ÚforwardzData2VecAudioConvLayer.forwardB   sV   € ØŸ	™	 -Ó0ˆà%×/Ñ/°°BÓ7ˆØŸ™¨Ó6ˆØ%×/Ñ/°°BÓ7ˆàŸ™¨Ó6ˆØÐr8   )r   ©Ú__name__Ú
__module__Ú__qualname__r&   r?   Ú__classcell__©r6   s   @r7   r   r   2   s   ø„ õAör8   r   c                   ó   — e Zd Zy)ÚData2VecAudioPadLayerN©rA   rB   rC   © r8   r7   rG   rG   M   ó   „ Ør8   rG   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )Ú Data2VecAudioPositionalConvLayerc                 óz  •— t         ‰| �  «        t        j                  |j                  |j                  |j
                  |j
                  dz  |j                  ¬«      | _        t        |j
                  «      | _	        t        |j                     | _        t        j                  |j                  d¬«      | _        y )Nr   )r    ÚpaddingÚgroupsFr#   )r%   r&   r   r*   Úhidden_sizeÚconv_pos_kernel_sizeÚnum_conv_pos_embedding_groupsr.   rG   rN   r   r1   r2   r/   r0   )r3   r4   r6   s     €r7   r&   z)Data2VecAudioPositionalConvLayer.__init__R   sŽ   ø€ Ü‰ÑÔÜ—I‘IØ×ÑØ×ÑØ×3Ñ3Ø×/Ñ/°1Ñ4Ø×7Ñ7ô
ˆŒ	ô -¨V×-HÑ-HÓIˆŒÜ  ×!?Ñ!?Ñ@ˆŒäŸ,™, v×'9Ñ'9ÈeÔTˆ�r8   c                 óÖ   — | j                  |«      }| j                  |«      }|j                  dd«      }| j                  |«      }|j                  dd«      }| j	                  |«      }|S ©Nr   r   )r.   rN   r<   r0   r2   r=   s     r7   r?   z(Data2VecAudioPositionalConvLayer.forwarda   sd   € ØŸ	™	 -Ó0ˆØŸ™ ]Ó3ˆà%×/Ñ/°°1Ó5ˆØŸ™¨Ó6ˆØ%×/Ñ/°°1Ó5ˆØŸ™¨Ó6ˆØÐr8   r@   rE   s   @r7   rL   rL   Q   s   ø„ ôUör8   rL   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )Ú$Data2VecAudioPositionalConvEmbeddingc                 ó´   •— t         ‰| �  «        t        j                  t	        |j
                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        y c c}w )N)r%   r&   r   Ú
ModuleListÚrangeÚnum_conv_pos_embeddingsrL   Úlayers)r3   r4   Ú_r6   s      €r7   r&   z-Data2VecAudioPositionalConvEmbedding.__init__m   s@   ø€ Ü‰ÑÔÜ—m‘mÜ?DÀV×EcÑEcÓ?dÖe¸!Ô-¨fÕ5Òeó
ˆ�ùÚes   ¶Ac                 ó€   — |j                  dd«      }| j                  D ]
  } ||«      }Œ |j                  dd«      }|S rT   )r<   r[   )r3   r>   Úlayers      r7   r?   z,Data2VecAudioPositionalConvEmbedding.forwards   sI   € Ø%×/Ñ/°°1Ó5ˆØ—[‘[ò 	1ˆEÙ! -Ó0‰Mð	1à%×/Ñ/°°1Ó5ˆØÐr8   r@   rE   s   @r7   rV   rV   l   s   ø„ ô
ör8   rV   c                   ó   — e Zd Zd„ Zy)ÚData2VecAudioFeatureEncoderc           	      óò   — t         j                  j                  «        t        j                  t	        |j
                  «      D �cg c]  }t        ||¬«      ‘Œ c}«      | _        d| _        d| _	        y c c}w )N)r5   FT)
r   ÚModuler&   rX   rY   Únum_feat_extract_layersr   Úconv_layersÚgradient_checkpointingÚ_requires_grad)r3   r4   Úis      r7   r&   z$Data2VecAudioFeatureEncoder.__init__|   s\   € Ü
�	‰	×ÑÔÜŸ=™=ÜAFÀv×GeÑGeÓAfÖg¸AÔ# F°QÖ7Ògó
ˆÔð ',ˆÔ#Ø"ˆÕùò hs   ÁA4N)rA   rB   rC   r&   rI   r8   r7   r`   r`   {   s   „ ó#r8   r`   c                   ó   — e Zd Zy)ÚData2VecAudioFeatureProjectionNrH   rI   r8   r7   ri   ri   …   rJ   r8   ri   c                   ó   — e Zd Zy)ÚData2VecAudioEncoderNrH   rI   r8   r7   rk   rk   ‰   rJ   r8   rk   c                   ó   — e Zd Zy)ÚData2VecAudioAdapterNrH   rI   r8   r7   rm   rm   �   rJ   r8   rm   c                   ó@   — e Zd ZdZeZdZdZdZdZ	dZ
d„ Zd„ Zd„ Zd„ Zy	)
ÚData2VecAudioPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    Údata2vec_audioÚinput_valuesTc                 ó€  — t        |t        «      r›t        j                  d|j                  j
                  z  «      }t        j                  j                  |j                  j                  | |¬«       t        j                  j                  |j                  j                  | |¬«       yt        |t        «      r5t        j                  j                  |j                  j                  d«       yt        |t        j                  «      rm|j                  j                  j!                  d| j"                  j$                  ¬«       |j                  �%|j                  j                  j'                  «        yyt        |t        j(                  t        j*                  f«      rc|j                  �$|j                  j                  j'                  «        |j                  �&|j                  j                  j-                  d«       yyt        |t        j.                  «      r t        j                  j1                  |j                  «       |j                  �jt        j                  |j2                  |j4                  |j6                  d   z  z  «      }t        j                  j                  |j                  | |¬«       yyy)zInitialize the weightsr   )ÚaÚbr   ç        )ÚmeanÚstdNg      ð?)Ú
isinstanceri   ÚmathÚsqrtÚ
projectionÚin_featuresr   ÚinitÚuniform_Úweightr"   rL   Ú	constant_r.   ÚLinearÚdataÚnormal_r4   Úinitializer_rangeÚzero_r/   Ú	GroupNormÚfill_r*   Úkaiming_normal_rO   Úin_channelsr    )r3   ÚmoduleÚks      r7   Ú_init_weightsz*Data2VecAudioPreTrainedModel._init_weightsž   sà  € ä�fÔ<Ô=Ü—	‘	˜!˜f×/Ñ/×;Ñ;Ñ;Ó<ˆAÜ�G‰G×Ñ˜V×.Ñ.×5Ñ5¸!¸¸qÐÔAÜ�G‰G×Ñ˜V×.Ñ.×3Ñ3¸°r¸QÐÕ?Ü˜Ô @ÔAÜ�G‰G×Ñ˜fŸk™k×.Ñ.°Õ2Ü˜¤§	¡	Ô*Ø�M‰M×Ñ×&Ñ&¨C°T·[±[×5RÑ5RÐ&ÔSà�{‰{Ð&Ø—‘× Ñ ×&Ñ&Õ(ð 'ä˜¤§¡¬r¯|©|Ð <Ô=Ø�{‰{Ð&Ø—‘× Ñ ×&Ñ&Ô(Ø�}‰}Ð(Ø—‘×"Ñ"×(Ñ(¨Õ-ð )ä˜¤§	¡	Ô*Ü�G‰G×#Ñ# F§M¡MÔ2à�{‰{Ð&Ü—I‘I˜fŸm™m¨v×/AÑ/AÀF×DVÑDVÐWXÑDYÑ/YÑZÓ[�Ü—‘× Ñ  §¡°°°aÐ Õ8ð 'ð +r8   c                 ó   — t        d«      ‚©NzNot needed for Data2VecAudio©ÚAttributeError©r3   s    r7   Ú_get_adaptersz*Data2VecAudioPreTrainedModel._get_adapters·   ó   € ÜÐ;Ó<Ð<r8   c                 ó   — t        d«      ‚rŽ   r�   r‘   s    r7   Úinit_adapter_layersz0Data2VecAudioPreTrainedModel.init_adapter_layersº   r“   r8   c                 ó   — t        d«      ‚rŽ   r�   r‘   s    r7   Úload_adapterz)Data2VecAudioPreTrainedModel.load_adapter½   r“   r8   N)rA   rB   rC   Ú__doc__r   Úconfig_classÚbase_model_prefixÚmain_input_nameÚsupports_gradient_checkpointingÚ_supports_flash_attn_2Ú_supports_sdparŒ   r’   r•   r—   rI   r8   r7   ro   ro   ‘   s>   „ ñð
 '€LØ(ÐØ$€OØ&*Ð#Ø!ÐØ€Nò9ò2=ò=ó=r8   ro   a  
    Data2VecAudio was proposed in [data2vec: A General Framework for Self-supervised Learning in Speech, Vision and
    Language](https://arxiv.org/pdf/2202.03555) by Alexei Baevski, Wei-Ning Hsu, Qiantong Xu, Arun Babu, Jiatao Gu and
    Michael Auli.

    This model inherits from [`PreTrainedModel`]. Check the superclass documentation for the generic methods the
    library implements for all its model (such as downloading or saving etc.).

    This model is a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) sub-class. Use
    it as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage and
    behavior.

    Parameters:
        config ([`Data2VecAudioConfig`]): Model configuration class with all the parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.
aJ  
    Args:
        input_values (`torch.FloatTensor` of shape `(batch_size, sequence_length)`):
            Float values of input raw speech waveform. Values can be obtained by loading a *.flac* or *.wav* audio file
            into an array of type *List[float]* or a *numpy.ndarray*, *e.g.* via the soundfile library (*pip install
            soundfile*). To prepare the array into *input_values*, the [`AutoProcessor`] should be used for padding and
            conversion into a tensor of type *torch.FloatTensor*. See [`Wav2Vec2Processor.__call__`] for details.
        attention_mask (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Mask to avoid performing convolution and attention on padding token indices. Mask values selected in `[0,
            1]`:

            - 1 for tokens that are **not masked**,
            - 0 for tokens that are **masked**.

            [What are attention masks?](../glossary#attention-mask)

            <Tip warning={true}>

            `attention_mask` should be passed if the corresponding processor has `config.return_attention_mask ==
            True`, which is the case for all pre-trained Data2Vec Audio models. Be aware that that even with
            `attention_mask`, zero-padded inputs will have slightly different outputs compared to non-padded inputs
            because there are more than one convolutional layer in the positional encodings. For a more detailed
            explanation, see [here](https://github.com/huggingface/transformers/issues/25621#issuecomment-1713759349).

            </Tip>

        output_attentions (`bool`, *optional*):
            Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned
            tensors for more detail.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
zgThe bare Data2VecAudio Model transformer outputting raw hidden-states without any specific head on top.c                   ól   ‡ — e Zd Zdefd„Zd„ Zd„ Z ee«       e	e
eede¬«      ˆ fd„«       «       Zˆ xZS )ÚData2VecAudioModelr4   c                 ó¾  — t         j                  |«       || _        t        |«      | _        t        |«      | _        |j                  dkD  s|j                  dkD  rEt        j                  t        j                  |j                  «      j                  «       «      | _        t!        |«      | _        |j$                  rt'        |«      nd | _        | j+                  «        y )Nru   )ro   r&   r4   r`   Úfeature_extractorri   Úfeature_projectionÚmask_time_probÚmask_feature_probr   Ú	ParameterÚtorchÚTensorrP   r~   Úmasked_spec_embedrk   ÚencoderÚadd_adapterrm   ÚadapterÚ	post_init)r3   r4   s     r7   r&   zData2VecAudioModel.__init__ÿ   s¦   € Ü$×-Ñ-¨fÔ5ØˆŒÜ!<¸VÓ!DˆÔÜ"@ÀÓ"HˆÔð × Ñ  3Ò&¨&×*BÑ*BÀSÒ*HÜ%'§\¡\´%·,±,¸v×?QÑ?QÓ2R×2[Ñ2[Ó2]Ó%^ˆDÔ"ä+¨FÓ3ˆŒà7=×7IÒ7IÔ+¨FÔ3ÈtˆŒð 	�‰Õr8   c                 ó   — t        d«      ‚rŽ   r�   r‘   s    r7   Úfreeze_feature_extractorz+Data2VecAudioModel.freeze_feature_extractor  r“   r8   c                 ó8   — | j                   j                  «        y)z¨
        Calling this function will disable the gradient computation for the feature encoder so that its parameter will
        not be updated during training.
        N)r¢   Ú_freeze_parametersr‘   s    r7   Úfreeze_feature_encoderz)Data2VecAudioModel.freeze_feature_encoder  s   € ð
 	×Ñ×1Ñ1Õ3r8   Úaudio)Ú
checkpointÚoutput_typer™   ÚmodalityÚexpected_outputc                 ó"   •— t        ‰| �  di |¤ŽS ©NrI   ©r%   r?   ©r3   Úsuper_kwargsr6   s     €r7   r?   zData2VecAudioModel.forward  ó   ø€ ô ‰w‰Ñ. Ñ.Ð.r8   )rA   rB   rC   r   r&   r¯   r²   r   ÚDATA2VEC_AUDIO_INPUTS_DOCSTRINGr   Ú_CHECKPOINT_FOR_DOCÚData2VecAudioBaseModelOutputÚ_CONFIG_FOR_DOCÚ_EXPECTED_OUTPUT_SHAPEr?   rD   rE   s   @r7   r    r    ú   sQ   ø„ ð
Ð2ó ò"=ò4ñ +Ð+JÓKÙØ&Ø0Ø$ØØ.ôó/óó Lô/r8   r    zkData2VecAudio Model with a `language modeling` head on top for Connectionist Temporal Classification (CTC).c                   óf   ‡ — e Zd Zd„ Zd„ Zd„ Z ee«       ee	e
eee¬«      ˆ fd„«       «       Zˆ xZS )ÚData2VecAudioForCTCc                 óª  — t         j                  |«       t        |«      | _        t	        j
                  |j                  «      | _        |j                  €t        d| j                  › d�«      ‚t        |d«      r|j                  r|j                  n|j                  }t	        j                  ||j                  «      | _        | j#                  «        y )NzYou are trying to instantiate zü with a configuration that does not define the vocabulary size of the language model head. Please instantiate the model as follows: `Data2VecAudioForCTC.from_pretrained(..., vocab_size=vocab_size)`. or define `vocab_size` of your model's configuration.r«   )ro   r&   r    rp   r   ÚDropoutÚfinal_dropoutÚdropoutÚ
vocab_sizeÚ
ValueErrorr6   Úhasattrr«   Úoutput_hidden_sizerP   r�   Úlm_headr­   )r3   r4   rÌ   s      r7   r&   zData2VecAudioForCTC.__init__+  s¶   € Ü$×-Ñ-¨fÔ5ä0°Ó8ˆÔÜ—z‘z &×"6Ñ"6Ó7ˆŒà×ÑÐ$ÜØ0°·±Ð0@ð AHð Hóð ô *1°¸Ô)GÈF×L^ÒL^ˆF×%Ò%Ðdj×dvÑdvð 	ô —y‘yÐ!3°V×5FÑ5FÓGˆŒð 	�‰Õr8   c                 ó   — t        d«      ‚rŽ   r�   r‘   s    r7   Úfreeze_base_modelz%Data2VecAudioForCTC.freeze_base_model@  r“   r8   c                 ó   — t        d«      ‚rŽ   r�   r‘   s    r7   Útie_weightszData2VecAudioForCTC.tie_weightsC  r“   r8   )r´   rµ   r™   r·   Úexpected_lossc                 ó"   •— t        ‰| �  di |¤ŽS r¹   rº   r»   s     €r7   r?   zData2VecAudioForCTC.forwardF  r½   r8   )rA   rB   rC   r&   rÏ   rÑ   r   r¾   r   r¿   r   rÁ   Ú_CTC_EXPECTED_OUTPUTÚ_CTC_EXPECTED_LOSSr?   rD   rE   s   @r7   rÄ   rÄ   &  sI   ø„ ò
ò*=ò=ñ +Ð+JÓKÙØ&Ø"Ø$Ø,Ø(ôó/óó Lô/r8   rÄ   zœ
    Data2VecAudio Model with a sequence classification head on top (a linear layer over the pooled output) for tasks
    like SUPERB Keyword Spotting.
    c                   óR   ‡ — e Zd Z ee«       eeeed¬«      ˆ fd„«       «       Z	ˆ xZ
S )Ú&Data2VecAudioForSequenceClassificationr³   ©r´   rµ   r™   r¶   c                 ó"   •— t        ‰| �  di |¤ŽS r¹   rº   r»   s     €r7   r?   z.Data2VecAudioForSequenceClassification.forwardZ  ó   ø€ ô ‰w‰Ñ. Ñ.Ð.r8   )rA   rB   rC   r   r¾   r   r¿   r   rÁ   r?   rD   rE   s   @r7   r×   r×   R  s7   ø„ ñ +Ð+JÓKÙØ&Ø,Ø$Øô	ó/óó Lô/r8   r×   zi
    Data2VecAudio Model with a frame classification head on top for tasks like Speaker Diarization.
    c                   óR   ‡ — e Zd Z ee«       eeeed¬«      ˆ fd„«       «       Z	ˆ xZ
S )Ú(Data2VecAudioForAudioFrameClassificationr³   rØ   c                 ó"   •— t        ‰| �  di |¤ŽS r¹   rº   r»   s     €r7   r?   z0Data2VecAudioForAudioFrameClassification.forwardl  rÚ   r8   )rA   rB   rC   r   r¾   r   r¿   r   rÁ   r?   rD   rE   s   @r7   rÜ   rÜ   e  s7   ø„ ñ +Ð+JÓKÙØ&Ø)Ø$Øô	ó/óó Lô/r8   rÜ   zq
    Data2VecAudio Model with an XVector feature extraction head on top for tasks like Speaker Verification.
    c                   óR   ‡ — e Zd Z ee«       eeeed¬«      ˆ fd„«       «       Z	ˆ xZ
S )ÚData2VecAudioForXVectorr³   rØ   c                 ó"   •— t        ‰| �  di |¤ŽS r¹   rº   r»   s     €r7   r?   zData2VecAudioForXVector.forward~  rÚ   r8   )rA   rB   rC   r   r¾   r   r¿   r
   rÁ   r?   rD   rE   s   @r7   rß   rß   w  s7   ø„ ñ +Ð+JÓKÙØ&Ø!Ø$Øô	ó/óó Lô/r8   rß   )rÜ   rÄ   r×   rß   r    ro   )8ry   r§   r   Úactivationsr   Úmodeling_outputsr   r   r   r	   r
   Úmodeling_utilsr   Úutilsr   r   r   Úwav2vec2.modeling_wav2vec2r   r   r   r   r   r   r   r   r   r   r   Úconfiguration_data2vec_audior   Ú_HIDDEN_STATES_START_POSITIONrÁ   r¿   rÂ   rÔ   rÕ   rb   r   rG   rL   rV   r`   ri   rk   rm   ro   ÚDATA2VEC_AUDIO_START_DOCSTRINGr¾   rÀ   r    rÄ   r×   rÜ   rß   Ú__all__rI   r8   r7   ú<module>rê      sé  ðÛ ã Ý å !÷õ õ .÷ñ ÷
÷ ÷ ñ õ >ð !"Ð ð (€ð :Ð Ú&Ð ð uÐ ØÐ ô˜RŸY™Yô ô6	Ð0ô 	ô r§y¡yô ô6¨2¯9©9ô ô#Ð"8¸"¿)¹)ô #ô	Ð%>ô 	ô	˜?ô 	ô	˜?ô 	ô-= ?Ð4Kô -=ð`"Ð ð$"#Ð ðH  7Ð ñ ØmØ"óô%/Ð5°}ó %/ó	ð%/ñP ØuØ"óô%/Ð6¸ó %/ó	ð%/ñP ðð #óô	/Ð-Nó 	/óð	/ñ ðð #ó	ô	/Ð/Ró 	/óð	/ñ ðð #ó	ô	/Ð0ó 	/óð	/ò�r8   