§
    Þ˜ºhi  ã                   ó¬  — d dl 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
 d dlmZmZmZmZmZ d dlZd dlmZ ddlmZmZmZmZ d	d
lmZmZmZ erddlmZ ddlm Z  ddl!m"Z" ddl#m$Z$  e¦   «         rd dl%m&Z&  ej'        e(¦  «        Z)dZ*dZ+ej,         G d„ d¦  «        ¦   «         Z- G d„ de¦  «        Z. G d„ de.e¦  «        Z/ G d„ de/¦  «        Z0dS )é    N)ÚABCÚabstractmethod)ÚOrderedDict)ÚIterableÚMapping)ÚTYPE_CHECKINGÚAnyÚCallableÚOptionalÚUnion)Úversioné   )Ú
TensorTypeÚis_torch_availableÚis_vision_availableÚloggingé   )ÚParameterFormatÚ compute_effective_axis_dimensionÚ"compute_serialized_parameters_size)ÚPretrainedConfig©ÚFeatureExtractionMixin©ÚImageProcessingMixin©ÚPreTrainedTokenizerBase)ÚImageé   l        c                   óf   — e Zd ZU dZeed<   eed<   eed<   dZe	e         ed<   dZ
e	e         ed<   dS )ÚPatchingSpeca½  
    Data class that holds patching specifications.

    Args:
        o: Module / object where the op to patch is located
        name: Name of the op to monkey patch
        custom_op: Custom op that patches the original op
        orig_op: Original op that is being patched
        op_wrapper: Wrapper (optional) that wraps both the original and custom ops.
            It is useful for ops that are class or static methods for instance.
    ÚoÚnameÚ	custom_opNÚorig_opÚ
op_wrapper)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   Ú__annotations__Ústrr
   r%   r   r&   © ó    ú`/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/transformers/onnx/config.pyr!   r!   0   sf   € € € € € € ð
ð 
ð €F€F�FØ
€I€I�IØÐÐÑØ"&€GˆX�hÔÐ&Ð&Ñ&Ø%)€J�˜Ô"Ð)Ð)Ñ)Ð)Ð)r.   r!   c                   óF  — e Zd ZdZdZdZdZ ej        d¦  «        Z	 e
dddd	œi¦  «         e
d
ddd	œi¦  «         e
dddd	œi¦  «         e
ddd	œddd	œddd	œdœ¦  «         e
dddd	œi¦  «         e
dddd	œi¦  «         e
dddii¦  «         e
ddd	œddd	œdœ¦  «         e
ddd	œddd	œdœ¦  «         e
ddddddœi¦  «         e
dddd	œi¦  «         e
dddii¦  «         e
dddd	œi¦  «         e
dddd	œi¦  «         e
dddd	œi¦  «        dœZ	 dIdddedeee                  fd„ZedJdddedd fd„¦   «         Zeedeeeeef         f         fd„¦   «         ¦   «         Zedeeeeef         f         fd„¦   «         Zedeeeef                  fd „¦   «         Zedefd!„¦   «         Zedefd"„¦   «         Zedefd#„¦   «         Zedefd$„¦   «         Zedefd%„¦   «         Z ede!fd&„¦   «         Z"e#d'ede!fd(„¦   «         Z$	 dKd+ed,ed-ed.efd/„Z%	 dLd+ed3ed4ed5efd6„Z&	 	 	 	 	 	 	 	 	 	 	 	 dMd9e'd:         d+ed;ed<ed=e!d>ee(         d,ed.ed-ed3ed4ed5ed?ed@         deeef         fdA„Z)dBeeef         deeef         fdC„Z*dD„ Z+dE„ Z,edFedGe-e         de.eef         fdH„¦   «         Z/dS )NÚ
OnnxConfigzv
    Base class for ONNX exportable model describing metadata on how to export the model through the ONNX format.
    r   é   é   z1.8ÚlogitsÚbatchÚsequence©r   r   Úlast_hidden_state)r4   Ú
pred_boxesÚ
pred_masksr   )r4   r9   )Ústart_logitsÚ
end_logitsÚ
num_labelsÚheightÚwidth)r   r   r   é   Údecoder_sequence)z	causal-lmÚdefaultzimage-classificationzimage-segmentationz	masked-imz	masked-lmúmultiple-choicezobject-detectionzquestion-answeringzsemantic-segmentationz
seq2seq-lmzsequence-classificationztoken-classificationzvision2seq-lmzspeech2seq-lmrB   NÚconfigr   ÚtaskÚpatching_specsc                 óL  — || _         || j        vr+t          |› d| j                             ¦   «         › �¦  «        ‚|| _        g | _        |�|ng D ]S}|}|j        €.t          j        |t          |j
        |j        ¦  «        ¬¦  «        }| j                             |¦  «         ŒTd S )Nz+ is not a supported task, supported tasks: )r%   )Ú_configÚ_tasks_to_common_outputsÚ
ValueErrorÚkeysrE   Ú_patching_specsr%   ÚdataclassesÚreplaceÚgetattrr"   r#   Úappend)ÚselfrD   rE   rF   ÚspecÚ
final_specs         r/   Ú__init__zOnnxConfig.__init__p   sÈ   € ð ˆŒà�tÔ4Ð4Ð4ÝØÐjÐjÀDÔDa×DfÒDfÑDhÔDhÐjÐjñô ð ð ˆŒ	à!ˆÔØ&4Ð&@�N�NÀbð 	4ð 	4ˆDØˆJØŒ|Ð#Ý(Ô0°½wÀtÄvÈtÌyÑ?YÔ?YÐZÑZÔZ�
ØÔ ×'Ò'¨
Ñ3Ô3Ð3Ð3ð		4ð 	4r.   Úreturnc                 ó   —  | ||¬¦  «        S )zÒ
        Instantiate a OnnxConfig for a specific model

        Args:
            config: The model's configuration to use when exporting to ONNX

        Returns:
            OnnxConfig for this model
        )rE   r-   ©ÚclsrD   rE   s      r/   Úfrom_model_configzOnnxConfig.from_model_config‚   s   € ð ˆs�6 Ð%Ñ%Ô%Ð%r.   c                 ó   — t          ¦   «         ‚)zé
        Mapping containing the axis definition of the input tensors to provide to the model

        Returns:
            For each input: its name associated to the axes symbolic name and the axis position within the tensor
        )ÚNotImplementedError©rQ   s    r/   ÚinputszOnnxConfig.inputs�   s   € õ "Ñ#Ô#Ð#r.   c                 óN   — | j         | j                 }t          j        |¦  «        S )zë
        Mapping containing the axis definition of the output tensors to provide to the model

        Returns:
            For each output: its name associated to the axes symbolic name and the axis position within the tensor
        )rI   rE   ÚcopyÚdeepcopy)rQ   Úcommon_outputss     r/   ÚoutputszOnnxConfig.outputsš   s#   € ð Ô6°t´yÔAˆÝŒ}˜^Ñ,Ô,Ð,r.   c                 ó8   — t          | j        d¦  «        rddiS dS )z»
        Dictionary of keys to override in the model's config before exporting

        Returns:
            Dictionary with the keys (and their corresponding values) to override
        Ú	use_cacheFN)ÚhasattrrH   r\   s    r/   Úvalues_overridezOnnxConfig.values_override¥   s(   € õ �4”< Ñ-Ô-ð 	(Ø Ð'Ð'àˆtr.   c                 ó   — t           j        S )zp
        The default batch size to use if no other indication

        Returns:
            Integer > 0
        )r1   Údefault_fixed_batchr\   s    r/   Údefault_batch_sizezOnnxConfig.default_batch_size²   s   € õ Ô-Ð-r.   c                 ó   — t           j        S )zu
        The default sequence length to use if no other indication

        Returns:
            Integer > 0
        )r1   Údefault_fixed_sequencer\   s    r/   Údefault_sequence_lengthz"OnnxConfig.default_sequence_length½   s   € õ Ô0Ð0r.   c                 ó   — t           j        S )zw
        The default number of choices to use if no other indication

        Returns:
            Integer > 0
        )r1   Údefault_fixed_num_choicesr\   s    r/   Údefault_num_choiceszOnnxConfig.default_num_choicesÇ   s   € õ Ô3Ð3r.   c                 ó   — t           S )z{
        Which onnx opset to use when exporting the model

        Returns:
            Integer ONNX Opset version
        )ÚDEFAULT_ONNX_OPSETr\   s    r/   Údefault_onnx_opsetzOnnxConfig.default_onnx_opsetÑ   s
   € õ "Ð!r.   c                 ó   — dS )z˜
        What absolute tolerance value to use during model conversion validation.

        Returns:
            Float absolute tolerance value.
        gñhãˆµøä>r-   r\   s    r/   Úatol_for_validationzOnnxConfig.atol_for_validationÛ   s	   € ð ˆtr.   c                 óx   — t          ¦   «         r+ddlm} t          j         |¦   «         ¦  «        | j        k    S dS )z¸
        The minimum PyTorch version required to export the model.

        Returns:
            `bool`: Whether the installed version of PyTorch is compatible with the model.
        r   )Úget_torch_versionF)r   Útransformers.utilsrv   r   ÚparseÚtorch_onnx_minimum_version)rQ   rv   s     r/   Úis_torch_support_availablez%OnnxConfig.is_torch_support_availableå   sK   € õ ÑÔð 	Ø<Ð<Ð<Ð<Ð<Ð<å”=Ð!2Ð!2Ñ!4Ô!4Ñ5Ô5¸Ô9XÒXÐXà�5r.   Únum_parametersc                 óH   — t          | t          j        ¦  «        t          k    S )a  
        Flag indicating if the model requires using external data format

        Args:
            num_parameters: Number of parameter on the model

        Returns:
            True if model.num_parameters() * size_of(float32) >= 2Gb False otherwise
        )r   r   ÚFloatÚEXTERNAL_DATA_FORMAT_SIZE_LIMIT)r{   s    r/   Úuse_external_data_formatz#OnnxConfig.use_external_data_formatô   s!   € õ /¨~½Ô?TÑUÔUÝ.ò/ð	
r.   r@   é(   Ú
batch_sizeÚnum_channelsÚimage_heightÚimage_widthc                 ó  — g }t          |¦  «        D ]s}t          j                             |||¦  «        dz  }|                     t          j        |                     d¦  «        ¦  «                             d¦  «        ¦  «         Œt|S )Néÿ   Úuint8ÚRGB)	ÚrangeÚnpÚrandomÚrandrP   r   Ú	fromarrayÚastypeÚconvert)rQ   r�   r‚   rƒ   r„   ÚimagesÚ_Údatas           r/   Ú_generate_dummy_imagesz!OnnxConfig._generate_dummy_images  s|   € ð ˆÝ�zÑ"Ô"ð 	Pð 	PˆAÝ”9—>’> ,°¸\ÑJÔJÈSÑPˆDØ�MŠM�%œ/¨$¯+ª+°gÑ*>Ô*>Ñ?Ô?×GÒGÈÑNÔNÑOÔOÐOÐOØˆr.   é"V  ç      @éÜ   Úsampling_rateÚtime_durationÚ	frequencyc           	      óø   — g }t          |¦  «        D ]g}t          j        d|t          ||z  ¦  «        d¬¦  «        }|                     dt          j        dt          j        z  |z  |z  ¦  «        z  ¦  «         Œh|S )Nr   F)Úendpointg      à?r   )r‰   rŠ   ÚlinspaceÚintrP   ÚsinÚpi)rQ   r�   r—   r˜   r™   Ú
audio_datar‘   Úts           r/   Ú_generate_dummy_audioz OnnxConfig._generate_dummy_audio  s†   € ð ˆ
Ý�zÑ"Ô"ð 	Gð 	GˆAå”˜A˜}­c°-À-Ñ2OÑ.PÔ.PÐ[`ÐaÑaÔaˆAð ×Ò˜c¥B¤F¨1­r¬u©9°yÑ+@À1Ñ+DÑ$EÔ$EÑEÑFÔFÐFÐFàÐr.   éÿÿÿÿFÚpreprocessor)r   r   r   Ú
seq_lengthÚnum_choicesÚis_pairÚ	frameworkÚ	tokenizerr   c                 ó¤  ‡‡— ddl m} ddlm} ddlm} t          ||¦  «        r|�t          d¦  «        ‚|�6t          j	        dt          ¦  «         t                               d¦  «         |}t          ||¦  «        �rPt          |t          j        d	¬
¦  «        }|                     |¦  «        }t          |t          j        |¬
¦  «        }|j        �t'          |j        ¦  «        d	k    r|j        nd}d                     |g¦  «        |z  g|z  }| j        dk    r™t          ‰t          j        d	¬
¦  «        Š|‰z  } |||¬¦  «        }|                     ¦   «         D ]3\  }Šˆˆfd„t1          d	t'          ‰¦  «        ‰¦  «        D ¦   «         ||<   Œ4t3          |                     |¬¦  «        ¦  «        S t3           |||¬¦  «        ¦  «        S t          ||¦  «        rˆ|j        d	         dk    r*t          d|j        j        › d|j        d	         › �¦  «        ‚t          |t          j        ¬¦  «        }|                      |||	|¦  «        }t3           |||¬¦  «        ¦  «        S t          ||¦  «        r^|j        d	         dk    rMt          |t          j        ¬¦  «        }|                      |||	|¦  «        }t3           |||¬¦  «        ¦  «        S t          ||¦  «        r^|j        d	         dk    rMt          |t          j        ¬¦  «        }|                      ||
||¦  «        }t3           |||¬¦  «        ¦  «        S t          d¦  «        ‚)am  
        Generate inputs to provide to the ONNX exporter for the specific framework

        Args:
            preprocessor: ([`PreTrainedTokenizerBase`], [`FeatureExtractionMixin`], or [`ImageProcessingMixin`]):
                The preprocessor associated with this model configuration.
            batch_size (`int`, *optional*, defaults to -1):
                The batch size to export the model for (-1 means dynamic axis).
            num_choices (`int`, *optional*, defaults to -1):
                The number of candidate answers provided for multiple choice task (-1 means dynamic axis).
            seq_length (`int`, *optional*, defaults to -1):
                The sequence length to export the model for (-1 means dynamic axis).
            is_pair (`bool`, *optional*, defaults to `False`):
                Indicate if the input is a pair (sentence 1, sentence 2)
            framework (`TensorType`, *optional*, defaults to `None`):
                The framework (PyTorch or TensorFlow) that the tokenizer will generate tensors for.
            num_channels (`int`, *optional*, defaults to 3):
                The number of channels of the generated images.
            image_width (`int`, *optional*, defaults to 40):
                The width of the generated images.
            image_height (`int`, *optional*, defaults to 40):
                The height of the generated images.
            sampling_rate (`int`, *optional* defaults to 22050)
                The sampling rate for audio data generation.
            time_duration (`float`, *optional* defaults to 5.0)
                Total seconds of sampling for audio data generation.
            frequency (`int`, *optional* defaults to 220)
                The desired natural frequency of generated audio.

        Returns:
            Mapping[str, Tensor] holding the kwargs to provide to the model's forward function
        r   r   r   r   NzPYou cannot provide both a tokenizer and a preprocessor to generate dummy inputs.ztThe `tokenizer` argument is deprecated and will be removed in version 5 of Transformers. Use `preprocessor` instead.zROverwriting the `preprocessor` argument with `tokenizer` to generate dummy inputs.r   )Úfixed_dimensionÚnum_token_to_addÚ0ú rC   )Ú	text_pairc                 ó*   •— g | ]}‰||‰z   …         ‘ŒS r-   r-   )Ú.0Úir¦   Úvs     €€r/   ú
<listcomp>z4OnnxConfig.generate_dummy_inputs.<locals>.<listcomp>u  s'   ø€ Ð)hÐ)hÐ)hÀQ¨!¨A°°K±Ð,?Ô*@Ð)hÐ)hÐ)hr.   )Útensor_type)Úreturn_tensorsÚpixel_valuesz*The `preprocessor` is an image processor (zC) and expects `model_input_names[0]` to be "pixel_values", but got )r«   )r�   r¶   Úinput_featuresz\Unable to generate dummy inputs for the model. Please provide a tokenizer or a preprocessor.) Úfeature_extraction_utilsr   Úimage_processing_utilsr   Útokenization_utils_baser   Ú
isinstancerJ   ÚwarningsÚwarnÚFutureWarningÚloggerÚwarningr   r1   rh   Únum_special_tokens_to_addrk   Ú	unk_tokenÚlenÚjoinrE   rn   Úitemsr‰   ÚdictÚconvert_to_tensorsÚmodel_input_namesÚ	__class__r'   r“   r¢   )rQ   r¤   r�   r¥   r¦   r§   r¨   r‚   r„   rƒ   r—   r˜   r™   r©   r   r   r   Útoken_to_addÚinput_tokenÚdummy_inputÚtokenized_inputÚkr³   s       `                 @r/   Úgenerate_dummy_inputsz OnnxConfig.generate_dummy_inputs  s  øø€ ð` 	FÐEÐEÐEÐEÐEØAÐAÐAÐAÐAÐAØEÐEÐEÐEÐEÐEå�lÐ$;Ñ<Ô<ð 	qÀÐAVÝÐoÑpÔpÐpØÐ ÝŒMð+åñô ð õ
 �NŠNÐoÑpÔpÐpØ$ˆLÝ�lÐ$;Ñ<Ô<ñ 8	å9Ø­JÔ,JÐ]^ðñ ô ˆJð (×AÒAÀ'ÑJÔJˆLÝ9Ø­JÔ,MÐ`lðñ ô ˆJð !Ô*Ð6½3¸|Ô?UÑ;VÔ;VÐYZÒ;ZÐ;Zð Ô&Ð&àð ð
 Ÿ8š8 [ MÑ2Ô2°ZÑ?Ð@À:ÑMˆKØŒyÐ-Ò-Ð-õ ?ØµÔ1UÐhiðñ ô �ð *¨KÑ7�à". ,¨{ÀkÐ"RÑ"RÔ"R�à+×1Ò1Ñ3Ô3ð ið i‘D�A�qØ)hÐ)hÐ)hÐ)hÐ)hÍ%ÐPQÕSVÐWXÑSYÔSYÐ[fÑJgÔJgÐ)hÑ)hÔ)h�O AÑ&Ð&Ý˜O×>Ò>È9Ð>ÑUÔUÑVÔVÐVÝ˜˜ [ÀÐKÑKÔKÑLÔLÐLÝ˜Ð&:Ñ;Ô;ð 	ØÔ-¨aÔ0°NÒBÐBÝ ðqÀÔAWÔA`ð qð qØMYÔMkÐlmÔMnðqð qñô ð õ
 :¸*ÕV`ÔVtÐuÑuÔuˆJØ×5Ò5°jÀ,ÐP\Ð^iÑjÔjˆKÝ˜˜¨KÈ	ÐRÑRÔRÑSÔSÐSÝ˜Ð&<Ñ=Ô=ð 	À,ÔB`ÐabÔBcÐguÒBuÐBuå9¸*ÕV`ÔVtÐuÑuÔuˆJØ×5Ò5°jÀ,ÐP\Ð^iÑjÔjˆKÝ˜˜¨KÈ	ÐRÑRÔRÑSÔSÐSå�|Ð%;Ñ<Ô<ð
	ØAMÔA_Ð`aÔAbÐfvÒAvÐAvõ :¸*ÕV`ÔVtÐuÑuÔuˆJØ×4Ò4°ZÀÐP]Ð_hÑiÔiˆKÝ˜˜ [ÀÐKÑKÔKÑLÔLÐLåØnñô ð r.   Úreference_model_inputsc                 ó   — |S )aÐ  
        Generate inputs for ONNX Runtime using the reference model inputs. Override this to run inference with seq2seq
        models which have the encoder and decoder exported as separate ONNX files.

        Args:
            reference_model_inputs ([`Mapping[str, Tensor]`):
                Reference inputs for the model.

        Returns:
            `Mapping[str, Tensor]`: The mapping holding the kwargs to provide to the model's forward function
        r-   )rQ   rÑ   s     r/   Ú!generate_dummy_inputs_onnxruntimez,OnnxConfig.generate_dummy_inputs_onnxruntime“  s
   € ð &Ð%r.   c                 ó    — | j         D ]E}|j        €|j        n|                     |j        ¦  «        }t          |j        |j        |¦  «         ŒFd S ©N)rL   r&   r$   Úsetattrr"   r#   )rQ   rR   r$   s      r/   Ú	patch_opszOnnxConfig.patch_ops¡  sY   € ØÔ(ð 	2ð 	2ˆDØ*.¬/Ð*A˜œ˜ÀtÇÂÐW[ÔWeÑGfÔGfˆIÝ�D”F˜DœI yÑ1Ô1Ð1Ð1ð	2ð 	2r.   c                 ó    — | j         D ]E}|j        €|j        n|                     |j        ¦  «        }t          |j        |j        |¦  «         ŒFd S rÕ   )rL   r&   r%   rÖ   r"   r#   )rQ   rR   r%   s      r/   Úrestore_opszOnnxConfig.restore_ops¦  sY   € ØÔ(ð 	0ð 	0ˆDØ&*¤oÐ&=�d”l�lÀ4Ç?Â?ÐSWÔS_ÑC`ÔC`ˆGÝ�D”F˜DœI wÑ/Ô/Ð/Ð/ð	0ð 	0r.   r#   Úfieldc                 ól   ‡— ddl m} ˆfd„t          |                     |¦  «        ¦  «        D ¦   «         S )a‹  
        Flatten any potential nested structure expanding the name of the field with the index of the element within the
        structure.

        Args:
            name: The name of the nested structure
            field: The structure to, potentially, be flattened

        Returns:
            (dict[str, Any]): Outputs with flattened structure and key mapping this new structure.

        r   )Úchainc                 ó&   •— i | ]\  }}‰› d |› �|“ŒS )ú.r-   )r±   ÚidxÚitemr#   s      €r/   ú
<dictcomp>zAOnnxConfig.flatten_output_collection_property.<locals>.<dictcomp>»  s)   ø€ Ð]Ð]Ð]©)¨#¨t�4��˜#�� Ð]Ð]Ð]r.   )Ú	itertoolsrÜ   Ú	enumerateÚfrom_iterable)rX   r#   rÚ   rÜ   s    `  r/   Ú"flatten_output_collection_propertyz-OnnxConfig.flatten_output_collection_property«  sH   ø€ ð 	$Ð#Ð#Ð#Ð#Ð#à]Ð]Ð]Ð]µyÀ×ATÒATÐUZÑA[ÔA[Ñ7\Ô7\Ð]Ñ]Ô]Ð]r.   )rB   N©rB   )r   r@   r€   r€   )r   r”   r•   r–   )r£   r£   r£   FNr@   r€   r€   r”   r•   r–   N)0r'   r(   r)   r*   rh   rk   rn   r   rx   ry   r   rI   r,   r   Úlistr!   rT   ÚclassmethodrY   Úpropertyr   r   r�   r]   rb   r	   rf   ri   rl   ro   rr   Úfloatrt   Úboolrz   Ústaticmethodr   r“   r¢   r   r   rÐ   rÓ   r×   rÙ   r   rÇ   rå   r-   r.   r/   r1   r1   E   s’  € € € € € ðð ð ÐØÐØ !ÐØ!. ¤¨uÑ!5Ô!5Ðà �[ (°¸JÐ,GÐ,GÐ!HÑIÔIØ�;Ð 3¸ÀZÐ5PÐ5PÐQÑRÔRØ + ¨X¸7ÀzÐ7RÐ7RÐ,SÑ TÔ TØ)˜kà%¨*Ð5Ð5Ø")¨jÐ9Ð9Ø")¨jÐ9Ð9ðð ñ
ô 
ð !�[ (°¸JÐ,GÐ,GÐ!HÑIÔIØ �[ (°¸JÐ,GÐ,GÐ!HÑIÔIØ&˜;¨°1°g°,Ð'?Ñ@Ô@Ø'˜Kà%¨*Ð5Ð5Ø")¨jÐ9Ð9ðð ñ
ô 
ð *˜kà$+°
Ð ;Ð ;Ø")¨jÐ9Ð9ðð ñ
ô 
ð "- ¨h¸GÈÐYaÐfmÐ8nÐ8nÐ-oÑ!pÔ!pØ!�k 8°Ð=OÐ-PÐ-PÐ"QÑRÔRØ#. ;°¸1¸g¸,Ð/GÑ#HÔ#HØ + ¨X¸7ÀzÐ7RÐ7RÐ,SÑ TÔ TØ$˜ h°GÀ
Ð0KÐ0KÐ%LÑMÔMØ$˜ h°GÀ
Ð0KÐ0KÐ%LÑMÔMð?  ð   ÐðF quð4ð 4Ø(ð4Ø03ð4ØQYÐZ^Ð_kÔZlÔQmð4ð 4ð 4ð 4ð$ ð
&ð 
&Ð'9ð 
&Àð 
&ÐUað 
&ð 
&ð 
&ñ „[ð
&ð Øð$˜  W¨S°#¨XÔ%6Ð 6Ô7ð $ð $ð $ñ „^ñ „Xð$ð ð-˜  g¨c°3¨hÔ&7Ð!7Ô8ð -ð -ð -ñ „Xð-ð ð
 ¨'°#°s°(Ô*;Ô!<ð 
ð 
ð 
ñ „Xð
ð ð. Cð .ð .ð .ñ „Xð.ð ð1¨ð 1ð 1ð 1ñ „Xð1ð ð4 Sð 4ð 4ð 4ñ „Xð4ð ð" Cð "ð "ð "ñ „Xð"ð ð Uð ð ð ñ „Xðð ð¨Dð ð ð ñ „Xðð ð
°ð 
¸ð 
ð 
ð 
ñ „\ð
ð" fhðð ØðØ14ðØHKðØ_bðð ð ð ð mpðð ØðØ25ðØNSðØfiðð ð ð ð  ØØØØ*.ØØØØ"Ø"ØØ9=ðvð vàÐgÔhðvð ðvð ð	vð
 ðvð ðvð ˜JÔ'ðvð ðvð ðvð ðvð ðvð ðvð ðvð Ð5Ô6ðvð 
��c�Ô	ðvð vð vð vðp&ÈÐPSÐUXÐPXÔHYð &Ð^eÐfiÐknÐfnÔ^oð &ð &ð &ð &ð2ð 2ð 2ð
0ð 0ð 0ð
 ð^°cð ^À(È3Ä-ð ^ÐTXÐY\Ð^aÐYaÔTbð ^ð ^ð ^ñ „[ð^ð ^ð ^r.   r1   c                   óâ  ‡ — e Zd Z	 	 	 d dddedeee                  defˆ fd	„Ze	d!ddded
d fd„¦   «         Z
ed
eeeeef         f         fˆ fd„¦   «         Zed
eeeef                  fd„¦   «         Zed
efd„¦   «         Zed
efd„¦   «         Z	 	 	 	 d"dddedededee         d
eeef         fˆ fd„Z	 d#deeeeef         f         dedefd„Zd„ Zdedee         d
eeef         fˆ fd„Zˆ xZS )$ÚOnnxConfigWithPastrB   NFrD   r   rE   rF   Úuse_pastc                 ó^   •— t          ¦   «                              |||¬¦  «         || _        d S )N)rE   rF   )ÚsuperrT   rï   )rQ   rD   rE   rF   rï   rÊ   s        €r/   rT   zOnnxConfigWithPast.__init__¿  s/   ø€ õ 	‰Œ×Ò˜ d¸>ÐÑJÔJÐJØ ˆŒˆˆr.   rU   c                 ó   —  | ||d¬¦  «        S )zð
        Instantiate a OnnxConfig with `use_past` attribute set to True

        Args:
            config: The underlying model's config to use when exporting to ONNX

        Returns:
            OnnxConfig with `.use_past = True`
        T)rE   rï   r-   rW   s      r/   Ú	with_pastzOnnxConfigWithPast.with_pastÉ  s   € ð ˆs�6 ¨tÐ4Ñ4Ô4Ð4r.   c                 ój   •— t          ¦   «         j        }| j        r|                      |d¬¦  «         |S )Nrb   ©Ú	direction)rñ   rb   rï   Úfill_with_past_key_values_)rQ   ra   rÊ   s     €r/   rb   zOnnxConfigWithPast.outputsÖ  s8   ø€ å™œœˆØŒ=ð 	QØ×+Ò+¨NÀiÐ+ÑPÔPÐPàÐr.   c                 óB   — t          | j        d¦  «        r	d| j        iS d S )Nrd   )re   rH   rï   r\   s    r/   rf   z"OnnxConfigWithPast.values_overrideÞ  s(   € å�4”< Ñ-Ô-ð 	0Ø ¤Ð/Ð/àˆtr.   c                 ób   — t          | j        d¦  «        st          d¦  «        ‚| j        j        S )zº
        The number of layers attribute retrieved from the model config. Override this for model configs where the
        number of layers attribute is not called `num_layers`.
        Ú
num_layersz�could not find the number of layers attribute in the model configuration, override the num_layers property of the model OnnxConfig to solve this)re   rH   ÚAttributeErrorrú   r\   s    r/   rú   zOnnxConfigWithPast.num_layerså  s=   € õ �t”| \Ñ2Ô2ð 	Ý ðBñô ð ð Œ|Ô&Ð&r.   c                 ób   — t          | j        d¦  «        st          d¦  «        ‚| j        j        S )zÕ
        The number of attention heads attribute retrieved from the model config. Override this for model configs where
        the number of attention heads attribute is not called `num_attention_heads`.
        Únum_attention_headsz¢could not find the number of attention heads attribute in the model configuration, override the num_attention_heads property of the model OnnxConfig to solve this)re   rH   rû   rý   r\   s    r/   rý   z&OnnxConfigWithPast.num_attention_headsò  s>   € õ �t”|Ð%:Ñ;Ô;ð 	Ý ðVñô ð ð Œ|Ô/Ð/r.   r£   r©   r   r�   r¥   r§   r¨   c                 óX  •— t          ¦   «                              |||||¬¦  «        }| j        rût          ¦   «         st	          d¦  «        ‚dd l}|d         j        \  }}	|	dz   }
|| j        |
| j        j	        | j        z  f}d|v rE|d         j
        }|                     |d         |                     ||
|¬¦  «        gd¬	¦  «        |d<   g |d
<   t          | j        ¦  «        D ]E}|d
                              |                     |¦  «        |                     |¦  «        f¦  «         ŒF|S )N©r�   r¥   r§   r¨   úACannot generate dummy past_keys inputs without PyTorch installed.r   Ú	input_idsr   Úattention_mask)Údtyper   )ÚdimÚpast_key_values)rñ   rÐ   rï   r   rJ   ÚtorchÚshaperý   rH   Úhidden_sizer  ÚcatÚonesr‰   rú   rP   Úzeros)rQ   r©   r�   r¥   r§   r¨   Úcommon_inputsr  r5   ÚseqlenÚpast_key_values_lengthr  Ú
mask_dtyper‘   rÊ   s                 €r/   rÐ   z(OnnxConfigWithPast.generate_dummy_inputsÿ  sg  ø€ õ ™œ×5Ò5Ø *¸ÈWÐ`ið 6ñ 
ô 
ˆð Œ=ð 	bÝ%Ñ'Ô'ð Ý Ð!dÑeÔeÐeà���à)¨+Ô6Ô<‰MˆE�6à%+¨a¡ZÐ"àØÔ(Ø&Ø”Ô(¨DÔ,DÑDð	ˆEð   =Ð0Ð0Ø*Ð+;Ô<ÔB�
Ø27·)²)Ø"Ð#3Ô4°e·j²jÀÐH^Ðfp°jÑ6qÔ6qÐrØð 3<ñ 3ô 3�Ð.Ñ/ð
 02ˆMÐ+Ñ,Ý˜4œ?Ñ+Ô+ð bð b�ØÐ/Ô0×7Ò7¸¿ºÀUÑ9KÔ9KÈUÏ[Ê[ÐY^ÑM_ÔM_Ð8`ÑaÔaÐaÐaàÐr.   Úinputs_or_outputsrö   Úinverted_values_shapec                 óÐ   — |dvrt          d|› d�¦  «        ‚|dk    rdnd}t          | j        ¦  «        D ]/}ddd	œ||› d
|› d�<   |rdddœ||› d
|› d�<   Œ!ddd	œ||› d
|› d�<   Œ0dS )aÎ  
        Fill the input_or_outputs mapping with past_key_values dynamic axes considering.

        Args:
            inputs_or_outputs: The mapping to fill.
            direction: either "inputs" or "outputs", it specifies whether input_or_outputs is the input mapping or the
                output mapping, this is important for axes naming.
            inverted_values_shape:
                If `True`, store values on dynamic axis 1, else on axis 2.

        ©r]   rb   ú4direction must either be "inputs" or "outputs", but ú
 was givenr]   r  Úpresentr5   zpast_sequence + sequence©r   r   rÞ   ú.keyr7   ú.valueN)rJ   r‰   rú   )rQ   r  rö   r  r#   r²   s         r/   r÷   z-OnnxConfigWithPast.fill_with_past_key_values_)  så   € ð Ð1Ð1Ð1ÝÐiÐT]ÐiÐiÐiÑjÔjÐjà$-°Ò$9Ð$9Ð Ð ¸yˆÝ�t”Ñ'Ô'ð 	eð 	eˆAØ7>ÐC]Ð3^Ð3^Ð Ð/Ð/¨Ð/Ð/Ð/Ñ0Ø$ð eØ=DÐIcÐ9dÐ9dÐ! TÐ"5Ð"5¨AÐ"5Ð"5Ð"5Ñ6Ð6à=DÐIcÐ9dÐ9dÐ! TÐ"5Ð"5¨AÐ"5Ð"5Ð"5Ñ6Ð6ð	eð 	er.   c                 óJ   — |d         ||› d|› d�<   |d         ||› d|› d�<   d S )Nr   rÞ   r  r   r  r-   ©rQ   Úflattened_outputr#   rß   r¡   s        r/   Ú_flatten_past_key_values_z,OnnxConfigWithPast._flatten_past_key_values_B  sH   € Ø01°!´Ð˜DÐ,Ð, 3Ð,Ð,Ð,Ñ-Ø23°A´$Ð˜DÐ.Ð. 3Ð.Ð.Ð.Ñ/Ð/Ð/r.   r#   rÚ   c                 ó´   •— i }|dv r.t          |¦  «        D ]\  }}|                      ||||¦  «         Œn"t          ¦   «                              ||¦  «        }|S )N)r  r  )rã   r  rñ   rå   )rQ   r#   rÚ   r  rß   r¡   rÊ   s         €r/   rå   z5OnnxConfigWithPast.flatten_output_collection_propertyF  sy   ø€ ØÐØÐ1Ð1Ð1Ý# EÑ*Ô*ð Oð O‘��QØ×.Ò.Ð/?ÀÀsÈAÑNÔNÐNÐNðOõ  %™wœw×IÒIÈ$ÐPUÑVÔVÐàÐr.   )rB   NFræ   ©r£   r£   FN)F)r'   r(   r)   r,   r   rç   r!   rë   rT   rè   ró   ré   r   r�   rb   r	   rf   rú   rý   r   rÐ   r÷   r  r   rÇ   rå   Ú__classcell__©rÊ   s   @r/   rî   rî   ¾  s   ø€ € € € € ð Ø7;Øð!ð !à"ð!ð ð!ð !  lÔ!3Ô4ð	!ð
 ð!ð !ð !ð !ð !ð !ð ð
5ð 
5Ð1ð 
5¸ð 
5ÐMað 
5ð 
5ð 
5ñ „[ð
5ð ð˜  g¨c°3¨hÔ&7Ð!7Ô8ð ð ð ð ð ñ „Xðð ð ¨'°#°s°(Ô*;Ô!<ð ð ð ñ „Xðð ð
'˜Cð 
'ð 
'ð 
'ñ „Xð
'ð ð
0 Sð 
0ð 
0ð 
0ñ „Xð
0ð ØØØ*.ð(ð (à,ð(ð ð(ð ð	(ð
 ð(ð ˜JÔ'ð(ð 
��c�Ô	ð(ð (ð (ð (ð (ð (ðV qvðeð eØ!(¨¨g°c¸3°hÔ.?Ð)?Ô!@ðeØMPðeØimðeð eð eð eð27ð 7ð 7ð °sð  À8ÈCÄ=ð  ÐUYÐZ]Ð_bÐZbÔUcð  ð  ð  ð  ð  ð  ð  ð  ð  ð  r.   rî   c                   ó8  ‡ — e Zd Zedeeeeef         f         fˆ fd„¦   «         Zedee         fˆ fd„¦   «         Z	edee         fˆ fd„¦   «         Z
	 	 	 	 dded	         d
edededee         deeef         fˆ fd„Zdeeeeef         f         defd„Zd„ Zˆ xZS )ÚOnnxSeq2SeqConfigWithPastrU   c                 ó  •— t          t          | ¦  «        j        }|                     ¦   «         D ]6\  }}d|v rdnd}|                     ¦   «         D ]\  }}d|v r|||<   Œ|||<   ŒŒ7| j        r|                      |d¬¦  «         |S )NÚencoderÚencoder_sequencerA   r6   rb   rõ   )rñ   rî   rb   rÆ   rï   r÷   )rQ   ra   r#   Ú
axes_namesÚsequence_nameÚaxis_idxrÊ   s         €r/   rb   z!OnnxSeq2SeqConfigWithPast.outputsR  sÃ   ø€ åÕ1°4Ñ8Ô8Ô@ˆà .× 4Ò 4Ñ 6Ô 6ð 	0ð 	0ÑˆD�*Ø2;¸tÐ2CÐ2CÐ.Ð.ÐI[ˆMØ",×"2Ò"2Ñ"4Ô"4ð 0ð 0‘�˜$Ø Ð%Ð%Ø+8�J˜xÑ(Ð(ð ,0�J˜xÑ(Ð(ð0ð Œ=ð 	QØ×+Ò+¨NÀiÐ+ÑPÔPÐPàÐr.   c                 óþ   •— 	 t          ¦   «         j        }||f}nb# t          $ rU t          | j        d¦  «        r.t          | j        d¦  «        r| j        j        | j        j        f}nt          d¦  «        ‚Y nw xY w|S )NÚencoder_layersÚdecoder_layersz¥could not find the number of encoder and decoder layers attributes in the model configuration, override the num_layers property of the model OnnxConfig to solve this)rñ   rú   rû   re   rH   r+  r,  )rQ   rú   rÊ   s     €r/   rú   z$OnnxSeq2SeqConfigWithPast.num_layersc  s¡   ø€ ð
	Ý™œÔ+ˆJØ$ jÐ1ˆJˆJøÝð 	ð 	ð 	Ý�t”|Ð%5Ñ6Ô6ð ½7À4Ä<ÐQaÑ;bÔ;bð Ø"œlÔ9¸4¼<Ô;VÐW�
�
å$ð^ñô ð ð �
ð	øøøð Ðó   ƒ ›AA:Á9A:c                 óþ   •— 	 t          ¦   «         j        }||f}nb# t          $ rU t          | j        d¦  «        r.t          | j        d¦  «        r| j        j        | j        j        f}nt          d¦  «        ‚Y nw xY w|S )NÚencoder_attention_headsÚdecoder_attention_headszÃcould not find the number of attention heads for the encoder and the decoder attributes in the model configuration, override the num_attention_heads property of the model OnnxConfig to solve this)rñ   rý   rû   re   rH   r/  r0  )rQ   rý   rÊ   s     €r/   rý   z-OnnxSeq2SeqConfigWithPast.num_attention_headss  s§   ø€ ð	Ý"'¡'¤'Ô"=ÐØ#6Ð8KÐ"LÐÐøÝð 	ð 	ð 	Ý�t”|Ð%>Ñ?Ô?ð ÅGÈDÌLÐZsÑDtÔDtð Ø'+¤|Ô'KÈTÌ\ÔMqÐ&rÐ#Ð#å$ðñô ð ð $Ð#ð	øøøð #Ð"r-  r£   FNr©   r   r�   r¥   r§   r¨   c           	      ó†  •— t          t          | ¦  «                             |||||¬¦  «        }| j        s|nd}t          t          | ¦  «                             |||||¬¦  «        }d„ |                     ¦   «         D ¦   «         }t          di |¤|¤Ž}	| j        �r¦t          ¦   «         st          d¦  «        ‚dd l}
|	d         j	        d         }|	d         j	        d         }|	d         j	        d         }| j
        \  }}|||| j        j        |z  f}|||dz   | j        j        |z  f}g |	d	<   | j        \  }}t          ||¦  «        }t          ||¦  «        |z
  }||k    rd
nd}t!          |¦  «        D ]m}|	d	                              |
                     |¦  «        |
                     |¦  «        |
                     |¦  «        |
                     |¦  «        f¦  «         Œn|d
k    r|n|}t!          ||¦  «        D ]E}|	d	                              |
                     |¦  «        |
                     |¦  «        f¦  «         ŒF|	S )Nrÿ   r   c                 ó    — i | ]\  }}d |› �|“ŒS )Údecoder_r-   )r±   r#   Útensors      r/   rá   zCOnnxSeq2SeqConfigWithPast.generate_dummy_inputs.<locals>.<dictcomp>”  s'   € Ð_Ð_Ð_¹¸¸fÐ+ TÐ+Ð+¨VÐ_Ð_Ð_r.   r   r   r  Údecoder_input_idsr@   r  r%  Údecoderr-   )rñ   rî   rÐ   rï   rÆ   rÇ   r   rJ   r  r  rý   rH   r  rú   ÚminÚmaxr‰   rP   r  )rQ   r©   r�   r¥   r§   r¨   Úencoder_inputsÚdecoder_seq_lengthÚdecoder_inputsr  r  r5   Úencoder_seq_lengthÚnum_encoder_attention_headsÚnum_decoder_attention_headsÚencoder_shapeÚdecoder_shapeÚnum_encoder_layersÚnum_decoder_layersÚmin_num_layersÚmax_num_layersÚremaining_side_namer‘   r  rÊ   s                           €r/   rÐ   z/OnnxSeq2SeqConfigWithPast.generate_dummy_inputsƒ  sº  ø€ õ Õ1°4Ñ8Ô8×NÒNØ *¸ÈWÐ`ið Oñ 
ô 
ˆð
 04¬}ÐC˜Z˜ZÀ!ÐÝÕ1°4Ñ8Ô8×NÒNØ *Ð9KÐU\Ðhqð Oñ 
ô 
ˆð `Ð_È×H\ÒH\ÑH^ÔH^Ð_Ñ_Ô_ˆÝÐ@Ð@˜~Ð@°Ð@Ð@ˆàŒ=ñ -	bÝ%Ñ'Ô'ð Ý Ð!dÑeÔeÐeà���Ø! +Ô.Ô4°QÔ7ˆEØ!.¨{Ô!;Ô!AÀ!Ô!DÐØ!.Ð/BÔ!CÔ!IÈ!Ô!LÐØGKÔG_ÑDÐ'Ð)DàØ+Ø"Ø”Ô(Ð,GÑGð	ˆMð Ø+à" QÑ&Ø”Ô(Ð,GÑGðˆMð 02ˆMÐ+Ñ,à59´_Ñ2ÐÐ 2Ý Ð!3Ð5GÑHÔHˆNÝ Ð!3Ð5GÑHÔHÈ>ÑYˆNØ/AÐDVÒ/VÐ/V ) )Ð\eÐå˜>Ñ*Ô*ð 
ð 
�ð Ð/Ô0×7Ò7àŸš MÑ2Ô2ØŸš MÑ2Ô2ØŸš MÑ2Ô2ØŸš MÑ2Ô2ð	ñô ð ð ð &9¸IÒ%EÐ%E�M�MÈ=ˆEÝ˜>¨>Ñ:Ô:ð bð b�ØÐ/Ô0×7Ò7¸¿ºÀUÑ9KÔ9KÈUÏ[Ê[ÐY^ÑM_ÔM_Ð8`ÑaÔaÐaÐaàÐr.   r  rö   c           	      óÆ  — |dvrt          d|› d�¦  «        ‚|dk    rdnd}| j        \  }}t          ||¦  «        }t          ||¦  «        |z
  }||k    rdnd}d	}	|dk    rd
nd}
t	          |¦  «        D ]:}d|
dœ||› d|› d�<   d|
dœ||› d|› d�<   d|	dœ||› d|› d�<   d|	dœ||› d|› d�<   Œ;t	          ||¦  «        D ]!}|dk    rd|	dœ}nd|
dœ}|||› d|› d|› d�<   Œ"d S )Nr  r  r  r]   r  r  r%  r6  Úpast_encoder_sequenceÚpast_decoder_sequencez past_decoder_sequence + sequencer5   r  rÞ   ú.decoder.keyú.decoder.valueú.encoder.keyú.encoder.valuer  )rJ   rú   r7  r8  r‰   )rQ   r  rö   r#   rA  rB  rC  rD  rE  r&  rA   r²   Ú	axes_infos                r/   r÷   z4OnnxSeq2SeqConfigWithPast.fill_with_past_key_values_È  sÐ  € ØÐ1Ð1Ð1ÝÐiÐT]ÐiÐiÐiÑjÔjÐjà$-°Ò$9Ð$9Ð Ð ¸yˆð 26´Ñ.ÐÐ.ÝÐ/Ð1CÑDÔDˆÝÐ/Ð1CÑDÔDÀ~ÑUˆØ+=Ð@RÒ+RÐ+R˜i˜iÐXaÐà2ÐØ6?À8Ò6KÐ6KÐ2Ð2ÐQsÐå�~Ñ&Ô&ð 	_ð 	_ˆAØ?FÐK[Ð;\Ð;\Ð Ð7Ð7¨Ð7Ð7Ð7Ñ8ØAHÐM]Ð=^Ð=^Ð Ð9Ð9¨Ð9Ð9Ð9Ñ:Ø?FÐK[Ð;\Ð;\Ð Ð7Ð7¨Ð7Ð7Ð7Ñ8ØAHÐM]Ð=^Ð=^Ð Ð9Ð9¨Ð9Ð9Ð9Ñ:Ð:å�~ ~Ñ6Ô6ð 	Sð 	SˆAØ" iÒ/Ð/Ø 'Ð,<Ð=Ð=�	�	à 'Ð,<Ð=Ð=�	ØIRÐ ÐEÐE¨ÐEÐEÐ,?ÐEÐEÐEÑFÐFð	Sð 	Sr.   c                 óŽ   — |d         ||› d|› d�<   |d         ||› d|› d�<   |d         ||› d|› d�<   |d         ||› d|› d	�<   d S )
Nr   rÞ   rI  r   rJ  r   rK  r@   rL  r-   r  s        r/   r  z3OnnxSeq2SeqConfigWithPast._flatten_past_key_values_ä  sˆ   € Ø89¸!¼Ð˜DÐ4Ð4 3Ð4Ð4Ð4Ñ5Ø:;¸A¼$Ð˜DÐ6Ð6 3Ð6Ð6Ð6Ñ7Ø89¸!¼Ð˜DÐ4Ð4 3Ð4Ð4Ð4Ñ5Ø:;¸A¼$Ð˜DÐ6Ð6 3Ð6Ð6Ð6Ñ7Ð7Ð7r.   r  )r'   r(   r)   ré   r   r,   r�   rb   Útuplerú   rý   r   rë   r   r	   rÐ   r÷   r  r   r!  s   @r/   r#  r#  Q  s¦  ø€ € € € € Øð˜  g¨c°3¨hÔ&7Ð!7Ô8ð ð ð ð ð ñ „Xðð  ð˜E #œJð ð ð ð ð ñ „Xðð ð# U¨3¤Zð #ð #ð #ð #ð #ñ „Xð#ð$ ØØØ*.ðCð CàÐ5Ô6ðCð ðCð ð	Cð
 ðCð ˜JÔ'ðCð 
��c�Ô	ðCð Cð Cð Cð Cð CðJS¸GÀCÈÐQTÐVYÐQYÔIZÐDZÔ<[ð SÐhkð Sð Sð Sð Sð8?ð ?ð ?ð ?ð ?ð ?ð ?r.   r#  )1r_   rM   r½   Úabcr   r   Úcollectionsr   Úcollections.abcr   r   Útypingr   r	   r
   r   r   ÚnumpyrŠ   Ú	packagingr   Úutilsr   r   r   r   r   r   r   Úconfiguration_utilsr   r¹   r   rº   r   r»   r   ÚPILr   Ú
get_loggerr'   rÀ   rq   r~   Ú	dataclassr!   r1   rî   r#  r-   r.   r/   ú<module>r[     sr  ðð €€€Ø Ð Ð Ð Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø #Ð #Ð #Ð #Ð #Ð #Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @à Ð Ð Ð Ø Ð Ð Ð Ð Ð à PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PØ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hð ð BØ6Ð6Ð6Ð6Ð6Ð6ØAÐAÐAÐAÐAÐAØ=Ð=Ð=Ð=Ð=Ð=ØAÐAÐAÐAÐAÐAð ÐÑÔð ØÐÐÐÐÐà	ˆÔ	˜HÑ	%Ô	%€ð Ð ð #9Ð ð Ôð*ð *ð *ð *ð *ñ *ô *ñ Ôð*ð(v^ð v^ð v^ð v^ð v^�ñ v^ô v^ð v^ðrP ð P ð P ð P ð P ˜ Sñ P ô P ð P ðfW?ð W?ð W?ð W?ð W?Ð 2ñ W?ô W?ð W?ð W?ð W?r.   