§
    ‚ŠtjÄC  ã                   ó8  — d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ dd	lmZmZmZ dd
lmZ ddlmZ ddlmZmZmZ ddlmZ ddlmZ ddlmZmZm Z m!Z!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z(  G d„ de"¦  «        Z)e G d„ de¦  «        ¦   «         Z* G d„ de ¦  «        Z+ G d„ de¦  «        Z,e G d„ de*¦  «        ¦   «         Z- ed¬ ¦  «         G d!„ d"e*e¦  «        ¦   «         Z. G d#„ d$e¦  «        Z/ G d%„ d&e$¦  «        Z0 G d'„ d(e!¦  «        Z1g d)¢Z2dS )*zPyTorch PLBART model.é    N)Únn)ÚCrossEntropyLossé   )Úinitialization)ÚCache)ÚGenerationMixin)ÚBaseModelOutputÚSeq2SeqLMOutputÚSeq2SeqModelOutput)ÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tuple)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚBartClassificationHeadÚBartDecoderÚBartEncoderÚBartForCausalLMÚBartScaledWordEmbedding)Ú'BigBirdPegasusForSequenceClassification)Úshift_tokens_righté   )ÚPLBartConfigc                   ó   — e Zd ZdS )ÚPLBartScaledWordEmbeddingN©Ú__name__Ú
__module__Ú__qualname__© ó    úg/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/plbart/modular_plbart.pyr   r   /   ó   € € € € € Ø€Dr$   r   c                   óF   ‡ — e Zd ZU eed<   dZdZddgZdZdZ	dZ
ˆ fd„Zˆ xZS )ÚPLBartPreTrainedModelÚconfigÚmodelTÚPLBartDecoderLayerÚPLBartEncoderLayerc                 óª   •— t          ¦   «                              |¦  «         t          |t          ¦  «        rt	          j        |j        ¦  «         d S d S ©N)ÚsuperÚ_init_weightsÚ
isinstanceÚPLBartForConditionalGenerationÚinitÚzeros_Úfinal_logits_bias)ÚselfÚmoduleÚ	__class__s     €r%   r0   z#PLBartPreTrainedModel._init_weights=   sQ   ø€ Ý‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕ<Ñ=Ô=ð 	2ÝŒK˜Ô0Ñ1Ô1Ð1Ð1Ð1ð	2ð 	2r$   )r    r!   r"   r   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnr0   Ú__classcell__©r8   s   @r%   r(   r(   3   so   ø€ € € € € € àÐÐÑØÐØ&*Ð#Ø-Ð/CÐDÐØÐØ€NØÐð2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2r$   r(   c                   ó   — e Zd ZdS )ÚPLBartEncoderNr   r#   r$   r%   rC   rC   C   r&   r$   rC   c                   ó   — e Zd ZdS )ÚPLBartDecoderNr   r#   r$   r%   rE   rE   G   r&   r$   rE   c                   ób  ‡ — e Zd ZdddœZdefˆ fd„Zd„ Zd„ Zee	e
	 	 	 	 	 	 	 	 	 ddej        dz  d	ej        dz  d
ej        dz  dej        dz  deej                 dz  dedz  dej        dz  dej        dz  dedz  dee         deej                 ez  fd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚPLBartModelzshared.weight)zencoder.embed_tokens.weightzdecoder.embed_tokens.weightr)   c                 ó\  •— t          ¦   «                              |¦  «         |j        |j        }}|j        rt          j        |j        ¦  «        nd}t          ||j        ||¬¦  «        | _	        t          |¦  «        | _        t          |¦  «        | _        |                      ¦   «          d S )Ng      ð?)Úembed_scale)r/   Ú__init__Úpad_token_idÚ
vocab_sizeÚscale_embeddingÚmathÚsqrtÚd_modelr   ÚsharedrC   ÚencoderrE   ÚdecoderÚ	post_init)r6   r)   Úpadding_idxrL   rI   r8   s        €r%   rJ   zPLBartModel.__init__R   s—   ø€ Ý‰Œ×Ò˜Ñ Ô Ð à"(Ô"5°vÔ7H�ZˆØ39Ô3IÐR•d”i ¤Ñ/Ô/Ð/ÈsˆÝ/°
¸F¼NÈKÐepÐqÑqÔqˆŒå$ VÑ,Ô,ˆŒÝ$ VÑ,Ô,ˆŒà�ŠÑÔÐÐÐr$   c                 ó   — | j         S r.   )rQ   )r6   s    r%   Úget_input_embeddingsz PLBartModel.get_input_embeddings^   s
   € ØŒ{Ðr$   c                 óX   — || _         | j         | j        _        | j         | j        _        d S r.   )rQ   rR   Úembed_tokensrS   )r6   Úvalues     r%   Úset_input_embeddingsz PLBartModel.set_input_embeddingsa   s'   € ØˆŒØ$(¤KˆŒÔ!Ø$(¤KˆŒÔ!Ð!Ð!r$   NÚ	input_idsÚattention_maskÚdecoder_input_idsÚdecoder_attention_maskÚencoder_outputsÚpast_key_valuesÚinputs_embedsÚdecoder_inputs_embedsÚ	use_cacheÚkwargsÚreturnc
                 óà  — |€|€t          || j        j        ¦  «        }|€ | j        d	|||dœ|
¤Ž}nct	          |t
          ¦  «        sNt          |d         t          |¦  «        dk    r|d         ndt          |¦  «        dk    r|d         nd¬¦  «        } | j        d	|||d         ||||	dœ|
¤Ž}t          |j	        |j
        |j        |j        |j        |j	        |j        |j        ¬¦  «        S )
a  
        decoder_input_ids (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Indices of decoder input sequence tokens in the vocabulary.

            Indices can be obtained using [`AutoTokenizer`] or [`PLBartMultiTokenizer`] depending on the checkpoint.
            See [`PreTrainedTokenizer.encode`] and [`PreTrainedTokenizer.__call__`] for details.

            [What are decoder input IDs?](../glossary#decoder-input-ids)

            PLBart uses a specific language id token as the starting token for `decoder_input_ids` generation that
            varies according to source and target language, *e.g.* 50003 for *en_XX*, and 50001 for *java*. If
            `past_key_values` is used, optionally only the last `decoder_input_ids` have to be input (see
            `past_key_values`).

            For translation and summarization training, `decoder_input_ids` should be provided. If no
            `decoder_input_ids` is provided, the model will create this tensor by shifting the `input_ids` to the right
            for denoising pre-training following the paper.
        decoder_attention_mask (:
            obj:*torch.LongTensor* of shape `(batch_size, target_sequence_length)`, *optional*):
            Default behavior:
            generate a tensor that ignores pad tokens in `decoder_input_ids`. Causal mask will also be used by default.
        N)r\   r]   rb   r   r   r   )Úlast_hidden_stateÚhidden_statesÚ
attentions)r\   r]   Úencoder_hidden_statesÚencoder_attention_maskra   rb   rd   )rh   ra   Údecoder_hidden_statesÚdecoder_attentionsÚcross_attentionsÚencoder_last_hidden_staterk   Úencoder_attentionsr#   )r   r)   rK   rR   r1   r	   ÚlenrS   r   rh   ra   ri   rj   ro   )r6   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   Údecoder_outputss               r%   ÚforwardzPLBartModel.forwardf   sY  € ðP Ð$Ð)>Ð)FÝ 2°9¸d¼kÔ>VÑ WÔ WÐàÐ"Ø/;¨t¬|ð 0Ø#Ø-Ø+ð0ð 0ð ð	0ð 0ˆOˆOõ ˜O­_Ñ=Ô=ð 	Ý-Ø"1°!Ô"4Ý47¸Ñ4HÔ4HÈ1Ò4LÐ4L˜o¨aÔ0Ð0ÐRVÝ14°_Ñ1EÔ1EÈÒ1IÐ1I˜?¨1Ô-Ð-Ètðñ ô ˆOð '˜$œ,ð 	
Ø'Ø1Ø"1°!Ô"4Ø#1Ø+Ø/Øð	
ð 	
ð ð	
ð 	
ˆõ "Ø-Ô?Ø+Ô;Ø"1Ô"?Ø.Ô9Ø,Ô=Ø&5Ô&GØ"1Ô"?Ø.Ô9ð	
ñ 	
ô 	
ð 		
r$   )	NNNNNNNNN)r    r!   r"   Ú_tied_weights_keysr   rJ   rW   r[   r   r   r   ÚtorchÚ
LongTensorÚTensorÚlistÚFloatTensorr   Úboolr   r   Útupler   rt   r@   rA   s   @r%   rG   rG   K   s¥  ø€ € € € € ð (7Ø'6ðð Ðð

˜|ð 
ð 
ð 
ð 
ð 
ð 
ðð ð ð0ð 0ð 0ð
  ØØð .2Ø26Ø59Ø6:Ø:>Ø(,Ø26Ø:>Ø!%ðJ
ð J
àÔ# dÑ*ðJ
ð Ô(¨4Ñ/ðJ
ð !Ô+¨dÑ2ð	J
ð
 !&¤¨tÑ 3ðJ
ð ˜eÔ/Ô0°4Ñ7ðJ
ð  ™ðJ
ð Ô(¨4Ñ/ðJ
ð  %Ô0°4Ñ7ðJ
ð ˜$‘;ðJ
ð Ð+Ô,ðJ
ð 
ˆuŒ|Ô	Ð1Ñ	1ðJ
ð J
ð J
ñ „^ñ „_ñ  ÔðJ
ð J
ð J
ð J
ð J
r$   rG   zv
    The PLBART Model with a language modeling head. Can be used for code-to-text, text-to-code and code-to-code.
    )Úcustom_introc                   óÊ  ‡ — e Zd ZdZdgZddiZdefˆ fd„Z	 dd	ed
edz  de	de
j        fˆ fd„Zd	eddfd„Zeee	 	 	 	 	 	 	 	 	 	 ddej        dz  dej        dz  dej        dz  dej        dz  deej                 dz  dedz  dej        dz  dej        dz  dej        dz  de	dz  dee         deej                 ez  fd„¦   «         ¦   «         ¦   «         Zdej        fd„Zˆ xZS )r2   r*   r5   zlm_head.weightzmodel.shared.weightr)   c                 ól  •— t          ¦   «                              |¦  «         t          |¦  «        | _        |                      dt          j        d| j        j        j        f¦  «        ¦  «         t          j
        |j        | j        j        j        d¬¦  «        | _        |                      ¦   «          d S )Nr5   r   F)Úbias)r/   rJ   rG   r*   Úregister_bufferrv   ÚzerosrQ   Únum_embeddingsr   ÚLinearrP   Úlm_headrT   )r6   r)   r8   s     €r%   rJ   z'PLBartForConditionalGeneration.__init__Â   s‘   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý  Ñ(Ô(ˆŒ
Ø×ÒÐ0µ%´+¸qÀ$Ä*ÔBSÔBbÐ>cÑ2dÔ2dÑeÔeÐeÝ”y ¤°´Ô1BÔ1QÐX]Ð^Ñ^Ô^ˆŒà�ŠÑÔÐÐÐr$   NTÚnew_num_tokensÚpad_to_multiple_ofÚmean_resizingrf   c                 ó˜   •— t          ¦   «                              |||¦  «        }|                      |j        j        d         ¦  «         |S )Nr   )r/   Úresize_token_embeddingsÚ_resize_final_logits_biasÚweightÚshape)r6   r†   r‡   rˆ   Únew_embeddingsr8   s        €r%   rŠ   z6PLBartForConditionalGeneration.resize_token_embeddingsÊ   sG   ø€ õ ™œ×8Ò8¸ÐI[Ð]jÑkÔkˆØ×&Ò& ~Ô'<Ô'BÀ1Ô'EÑFÔFÐFØÐr$   c                 ó  — | j         j        d         }||k    r| j         d d …d |…f         }nBt          j        d||z
  f| j         j        ¬¦  «        }t          j        | j         |gd¬¦  «        }|                      d|¦  «         d S )Néÿÿÿÿr   )Údevice)Údimr5   )r5   r�   rv   r‚   r‘   Úcatr�   )r6   r†   Úold_num_tokensÚnew_biasÚ
extra_biass        r%   r‹   z8PLBartForConditionalGeneration._resize_final_logits_biasÑ   s—   € ØÔ/Ô5°bÔ9ˆØ˜^Ò+Ð+ØÔ-¨a¨a¨a°°.°Ð.@ÔAˆHˆHåœ a¨¸.Ñ)HÐ%IÐRVÔRhÔRoÐpÑpÔpˆJÝ”y $Ô"8¸*Ð!EÈ1ÐMÑMÔMˆHØ×ÒÐ0°(Ñ;Ô;Ð;Ð;Ð;r$   r\   r]   r^   r_   r`   ra   rb   rc   Úlabelsrd   re   c                 óü  — |	�|€|€t          |	| j        j        ¦  «        } | j        |f||||||||
dœ|¤Ž}|                      |j        ¦  «        }|| j                             |j        ¦  «        z   }d}|	�Kt          ¦   «         } || 
                    d| j        j        ¦  «        |	 
                    d¦  «        ¦  «        }t          |||j        |j        |j        |j        |j        |j        |j        ¬¦	  «	        S )a 
  
        decoder_input_ids (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Indices of decoder input sequence tokens in the vocabulary.

            Indices can be obtained using [`AutoTokenizer`] or [`PLBartMultiTokenizer`] depending on the checkpoint.
            See [`PreTrainedTokenizer.encode`] and [`PreTrainedTokenizer.__call__`] for details.

            [What are decoder input IDs?](../glossary#decoder-input-ids)

            PLBart uses a specific language id token as the starting token for `decoder_input_ids` generation that
            varies according to source and target language, *e.g.* 50003 for *en_XX*, and 50001 for *java*. If
            `past_key_values` is used, optionally only the last `decoder_input_ids` have to be input (see
            `past_key_values`).

            For translation and summarization training, `decoder_input_ids` should be provided. If no
            `decoder_input_ids` is provided, the model will create this tensor by shifting the `input_ids` to the right
            for denoising pre-training following the paper.
        decoder_attention_mask (:
            obj:*torch.LongTensor* of shape `(batch_size, target_sequence_length)`, *optional*):
            Default behavior:
            generate a tensor that ignores pad tokens in `decoder_input_ids`. Causal mask will also be used by default.
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
            config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored
            (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`.

        Example Mask-filling:

        ```python
        >>> from transformers import AutoTokenizer, PLBartForConditionalGeneration

        >>> model = PLBartForConditionalGeneration.from_pretrained("uclanlp/plbart-base")
        >>> tokenizer = AutoTokenizer.from_pretrained("uclanlp/plbart-base")

        >>> # en_XX is the language symbol id <LID> for English
        >>> TXT = "<s> Is 0 the <mask> Fibonacci number ? </s> en_XX"
        >>> input_ids = tokenizer([TXT], add_special_tokens=False, return_tensors="pt").input_ids

        >>> logits = model(input_ids).logits
        >>> masked_index = (input_ids[0] == tokenizer.mask_token_id).nonzero().item()
        >>> probs = logits[0, masked_index].softmax(dim=0)
        >>> values, predictions = probs.topk(5)

        >>> tokenizer.decode(predictions).split()
        ['first', 'same', 'highest', 'result', 'number']
        ```
        N)r]   r^   r`   r_   ra   rb   rc   rd   r�   )	ÚlossÚlogitsra   rm   rn   ro   rp   rk   rq   )r   r)   rK   r*   r…   rh   r5   Útor‘   r   ÚviewrL   r
   ra   rm   rn   ro   rp   rk   rq   )r6   r\   r]   r^   r_   r`   ra   rb   rc   r—   rd   re   ÚoutputsÚ	lm_logitsÚmasked_lm_lossÚloss_fcts                   r%   rt   z&PLBartForConditionalGeneration.forwardÚ   s3  € ð@ ÐØ Ð(Ð-BÐ-JÝ$6°v¸t¼{Ô?WÑ$XÔ$XÐ!à&0 d¤jØð'
à)Ø/Ø+Ø#9Ø+Ø'Ø"7Øð'
ð '
ð ð'
ð '
ˆð —L’L Ô!:Ñ;Ô;ˆ	Ø Ô 6× 9Ò 9¸)Ô:JÑ KÔ KÑKˆ	àˆØÐÝ'Ñ)Ô)ˆHØ%˜X i§n¢n°R¸¼Ô9OÑ&PÔ&PÐRX×R]ÒR]Ð^`ÑRaÔRaÑbÔbˆNåØØØ#Ô3Ø")Ô"?Ø&Ô9Ø$Ô5Ø&-Ô&GØ")Ô"?Ø&Ô9ð

ñ 

ô 

ð 
	
r$   c                 ó6   — t          || j        j        ¦  «        S r.   )r   r)   rK   )r6   r—   s     r%   Ú%prepare_decoder_input_ids_from_labelszDPLBartForConditionalGeneration.prepare_decoder_input_ids_from_labels>  s   € Ý! &¨$¬+Ô*BÑCÔCÐCr$   )NT)
NNNNNNNNNN)r    r!   r"   r:   Ú_keys_to_ignore_on_load_missingru   r   rJ   Úintr{   r   Ú	EmbeddingrŠ   r‹   r   r   r   rv   rw   rx   ry   rz   r   r   r   r|   r
   rt   r¢   r@   rA   s   @r%   r2   r2   ¶   s:  ø€ € € € € ð  ÐØ':Ð&;Ð#àÐ/ðÐð˜|ð ð ð ð ð ð ð aeðð Ø!ðØ7:¸T±zðØY]ðà	Œðð ð ð ð ð ð<¸ð <Àð <ð <ð <ð <ð  ØØð .2Ø26Ø59Ø6:Ø:>Ø(,Ø26Ø:>Ø&*Ø!%ð_
ð _
àÔ# dÑ*ð_
ð Ô(¨4Ñ/ð_
ð !Ô+¨dÑ2ð	_
ð
 !&¤¨tÑ 3ð_
ð ˜eÔ/Ô0°4Ñ7ð_
ð  ™ð_
ð Ô(¨4Ñ/ð_
ð  %Ô0°4Ñ7ð_
ð ”˜tÑ#ð_
ð ˜$‘;ð_
ð Ð+Ô,ð_
ð 
ˆuŒ|Ô	˜Ñ	.ð_
ð _
ð _
ñ „^ñ „_ñ  Ôð_
ðBD¸E¼Lð Dð Dð Dð Dð Dð Dð Dð Dr$   r2   c                   ó   — e Zd ZdS )ÚPLBartClassificationHeadNr   r#   r$   r%   r§   r§   B  r&   r$   r§   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )ÚPLBartForSequenceClassificationc                  ó:   •—  t          ¦   «         j        di | ¤Ž dS )a©  
        decoder_input_ids (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Indices of decoder input sequence tokens in the vocabulary.

            Indices can be obtained using [`AutoTokenizer`] or [`PLBartMultiTokenizer`] depending on the checkpoint.
            See [`PreTrainedTokenizer.encode`] and [`PreTrainedTokenizer.__call__`] for details.

            [What are decoder input IDs?](../glossary#decoder-input-ids)

            PLBart uses a specific language id token as the starting token for `decoder_input_ids` generation that
            varies according to source and target language, *e.g.* 50003 for *en_XX*, and 50001 for *java*. If
            `past_key_values` is used, optionally only the last `decoder_input_ids` have to be input (see
            `past_key_values`).

            For translation and summarization training, `decoder_input_ids` should be provided. If no
            `decoder_input_ids` is provided, the model will create this tensor by shifting the `input_ids` to the right
            for denoising pre-training following the paper.
        decoder_attention_mask (:
            obj:*torch.LongTensor* of shape `(batch_size, target_sequence_length)`, *optional*):
            Default behavior:
            generate a tensor that ignores pad tokens in `decoder_input_ids`. Causal mask will also be used by default.
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the sequence classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
        Nr#   ©r/   rt   ©Úsuper_kwargsr8   s    €r%   rt   z'PLBartForSequenceClassification.forwardG  s'   ø€ ð4 	�‰ŒŒÐ'Ð'˜,Ð'Ð'Ð'Ð'Ð'r$   )r    r!   r"   rt   r@   rA   s   @r%   r©   r©   F  s8   ø€ € € € € ð(ð (ð (ð (ð (ð (ð (ð (ð (r$   r©   c                   ó>   ‡ — e Zd Zeeˆ fd„¦   «         ¦   «         Zˆ xZS )ÚPLBartForCausalLMc                  ó:   •—  t          ¦   «         j        di | ¤Ž dS )aF  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
            config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored
            (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`.

        Example:

        ```python
        >>> from transformers import AutoTokenizer, PLBartForCausalLM

        >>> tokenizer = AutoTokenizer.from_pretrained("uclanlp/plbart-base")
        >>> model = PLBartForCausalLM.from_pretrained("uclanlp/plbart-base")
        >>> assert model.config.is_decoder, f"{model.__class__} has to be configured as a decoder."
        >>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
        >>> outputs = model(**inputs)

        >>> logits = outputs.logits
        >>> expected_shape = [1, inputs.input_ids.shape[-1], model.config.vocab_size]
        >>> list(logits.shape) == expected_shape
        True
        ```Nr#   r«   r¬   s    €r%   rt   zPLBartForCausalLM.forwarde  s'   ø€ ð2 	�‰ŒŒÐ'Ð'˜,Ð'Ð'Ð'Ð'Ð'r$   )r    r!   r"   r   r   rt   r@   rA   s   @r%   r¯   r¯   d  sM   ø€ € € € € ØØð(ð (ð (ð (ñ „^ñ Ôð(ð (ð (ð (ð (r$   r¯   )r¯   r2   r©   rG   r(   )3Ú__doc__rN   rv   r   Útorch.nnr   Ú r   r3   Úcache_utilsr   Ú
generationr   Úmodeling_outputsr	   r
   r   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   r   Úutils.genericr   Úutils.output_capturingr   Úbart.modeling_bartr   r   r   r   r   Ú(bigbird_pegasus.modeling_bigbird_pegasusr   Úmbart.modeling_mbartr   Úconfiguration_plbartr   r   r(   rC   rE   rG   r2   r§   r©   r¯   Ú__all__r#   r$   r%   ú<module>rÁ      s  ðð Ð à €€€à €€€Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %à &Ð &Ð &Ð &Ð &Ð &Ø  Ð  Ð  Ð  Ð  Ð  Ø )Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð ð ð ð ð
 .Ð -Ð -Ð -Ð -Ð -Ø &Ð &Ð &Ð &Ð &Ð &Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5ðð ð ð ð ð ð ð ð ð ð ð ð ð ð _Ð ^Ð ^Ð ^Ð ^Ð ^Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø .Ð .Ð .Ð .Ð .Ð .ð	ð 	ð 	ð 	ð 	Ð 7ñ 	ô 	ð 	ð ð2ð 2ð 2ð 2ð 2˜Oñ 2ô 2ñ „ð2ð	ð 	ð 	ð 	ð 	�Kñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�Kñ 	ô 	ð 	ð ðg
ð g
ð g
ð g
ð g
Ð'ñ g
ô g
ñ „ðg
ðT €ððñ ô ð
DDð DDð DDð DDð DDÐ%:¸Oñ DDô DDñô ð
DDðN	ð 	ð 	ð 	ð 	Ð5ñ 	ô 	ð 	ð(ð (ð (ð (ð (Ð&Mñ (ô (ð (ð<(ð (ð (ð (ð (˜ñ (ô (ð (ð:ð ð €€€r$   