§
    ‚Štj¬/  ã                   óž   — d dl Z d dlmc mZ ddlmZ ddlmZm	Z	m
Z
 ddlmZ  e¦   «         rd dlmZ  G d„ d	e¦  «        Z	 	 	 	 	 	 	 dd
„ZdS )é    Né   )Úis_vision_availableé   )Ú	DFineLossÚ_set_aux_lossÚ_set_aux_loss2)Úbox_iou)Úcenter_to_corners_formatc                   ó:   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zˆ fd„Zˆ xZS )Ú
Deimv2Lossc                 óØ   •— t          ¦   «                              |¦  «         |j        |j        |j        |j        |j        dœ| _        g d¢| _        |j	        | _	        |j
        | _
        d S )N)Úloss_malÚ	loss_bboxÚ	loss_giouÚloss_fglÚloss_ddf)ÚmalÚboxesÚlocal)ÚsuperÚ__init__Úweight_loss_malÚweight_loss_bboxÚweight_loss_giouÚweight_loss_fglÚweight_loss_ddfÚweight_dictÚlossesÚ	mal_alphaÚuse_dense_one_to_one)ÚselfÚconfigÚ	__class__s     €ú[/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/loss/loss_deimv2.pyr   zDeimv2Loss.__init__   sr   ø€ Ý‰Œ×Ò˜Ñ Ô Ð àÔ.ØÔ0ØÔ0ØÔ.ØÔ.ð
ð 
ˆÔð 0Ð/Ð/ˆŒØÔ)ˆŒØ$*Ô$?ˆÔ!Ð!Ð!ó    c                 óò  — |                       |¦  «        }|d         |         }t          j        d„ t          ||¦  «        D ¦   «         d¬¦  «        }t	          t          |¦  «        t          |¦  «        ¦  «        \  }}	t          j        |¦  «                             ¦   «         }|d         }
t          j        d„ t          ||¦  «        D ¦   «         ¦  «        }t          j        |
j	        dd…         | j
        t          j        |
j        ¬	¦  «        }|||<   t          j        || j
        d
z   ¬¦  «        ddd…f         }t          j        ||
j        ¬¦  «        }|                     |j        ¦  «        ||<   |                     d¦  «        |z  }t          j        |
¦  «                             ¦   «         }|                     | j        ¦  «        }| j        �,| j        |                     | j        ¦  «        z  d
|z
  z  |z   }n#|                     | j        ¦  «        d
|z
  z  |z   }t          j        |
||d¬¦  «        }|                     d
¦  «                             ¦   «         |
j	        d
         z  |z  }d|iS )z²Compute the Matching Aware Loss (MAL), which uses IoU-weighted soft labels
        instead of hard one-hot targets, with focal-style weighting controlled by `mal_alpha`.
        Ú
pred_boxesc                 ó6   — g | ]\  }\  }}|d          |         ‘ŒS )r   © ©Ú.0ÚtÚ_Úis       r$   ú
<listcomp>z.Deimv2Loss.loss_labels_mal.<locals>.<listcomp>1   s(   € Ð!WÐ!WÐ!W±I°A±v¸¸1 ! G¤*¨Q¤-Ð!WÐ!WÐ!Wr%   r   ©ÚdimÚlogitsc                 ó6   — g | ]\  }\  }}|d          |         ‘ŒS )Úclass_labelsr)   r*   s       r$   r/   z.Deimv2Loss.loss_labels_mal.<locals>.<listcomp>6   s*   € Ð,iÐ,iÐ,iÁiÀaÉÈ!ÈQ¨Q¨~Ô->¸qÔ-AÐ,iÐ,iÐ,ir%   Nr   ©ÚdtypeÚdevicer   )Únum_classes.éÿÿÿÿ)r6   Únone)ÚweightÚ	reductionr   )Ú_get_source_permutation_idxÚtorchÚcatÚzipr	   r
   ÚdiagÚdetachÚfullÚshaper8   Úint64r7   ÚFÚone_hotÚ
zeros_liker6   ÚtoÚ	unsqueezeÚsigmoidÚpowÚgammar   Ú binary_cross_entropy_with_logitsÚmeanÚsum)r!   ÚoutputsÚtargetsÚindicesÚ	num_boxesÚidxÚ	src_boxesÚtarget_boxesÚiousr-   Ú
src_logitsÚtarget_classes_originalÚtarget_classesÚtargetÚtarget_score_originalÚtarget_scoreÚ
pred_scorer;   Úlosss                      r$   Úloss_labels_malzDeimv2Loss.loss_labels_mal*   sY  € ð ×.Ò.¨wÑ7Ô7ˆà˜LÔ)¨#Ô.ˆ	Ý”yÐ!WÐ!WÅÀWÈgÑAVÔAVÐ!WÑ!WÔ!WÐ]^Ð_Ñ_Ô_ˆÝÕ2°9Ñ=Ô=Õ?WÐXdÑ?eÔ?eÑfÔf‰ˆˆaÝŒz˜$ÑÔ×&Ò&Ñ(Ô(ˆà˜XÔ&ˆ
Ý"'¤)Ð,iÐ,iÕSVÐW^Ð`gÑShÔShÐ,iÑ,iÔ,iÑ"jÔ"jÐÝœØÔ˜R˜a˜RÔ  $Ô"2½%¼+ÈjÔN_ð
ñ 
ô 
ˆð 6ˆ�sÑÝ”˜>°tÔ7GÈ!Ñ7KÐLÑLÔLÈSÐRUÐSUÐRUÈXÔVˆå %Ô 0°ÀzÔGWÐ XÑ XÔ XÐØ%)§W¢WÐ-BÔ-HÑ%IÔ%IÐ˜cÑ"Ø,×6Ò6°rÑ:Ô:¸VÑCˆå”Y˜zÑ*Ô*×1Ò1Ñ3Ô3ˆ
Ø#×'Ò'¨¬
Ñ3Ô3ˆØŒ>Ð%Ø”^ j§n¢n°T´ZÑ&@Ô&@Ñ@ÀAÈÁJÑOÐRXÑXˆFˆFà—^’^ D¤JÑ/Ô/°1°v±:Ñ>ÀÑGˆFåÔ1°*¸lÐSYÐekÐlÑlÔlˆØ�yŠy˜‰|Œ|×ÒÑ!Ô! JÔ$4°QÔ$7Ñ7¸)ÑCˆØ˜DÐ!Ð!r%   c                 ó  — g }|D ]@}d„ t          |                     ¦   «         |                     ¦   «         ¦  «        D ¦   «         }ŒAd„ |D ¦   «         D �].}t          j        |dd¬¦  «        \  }}t          j        |d¬¦  «        }||         }	i }
|	D ]?}|d                              ¦   «         |d                              ¦   «         }}||
vr||
|<   Œ@t          j        t          |
                     ¦   «         ¦  «        |j	        ¬¦  «        }t          j        t          |
 
                    ¦   «         ¦  «        |j	        ¬¦  «        }|                     |                     ¦   «         |                     ¦   «         f¦  «         �Œ0|S )	Nc                 óœ   — g | ]I\  }}t          j        |d          |d          g¦  «        t          j        |d         |d         g¦  «        f‘ŒJS )r   r   ©r>   r?   )r+   Úidx1Úidx2s      r$   r/   z5Deimv2Loss._get_dense_o2o_indices.<locals>.<listcomp>O   s_   € ð ð ð á�D˜$õ ”˜D œG T¨!¤WÐ-Ñ.Ô.µ´	¸4À¼7ÀDÈÄGÐ:LÑ0MÔ0MÐNðð ð r%   c                 ó|   — g | ]9}t          j        |d          dd…df         |d         dd…df         gd¦  «        ‘Œ:S )r   Nr   rd   )r+   rU   s     r$   r/   z5Deimv2Loss._get_dense_o2o_indices.<locals>.<listcomp>T   sI   € ÐZÐZÐZÈ3•e”i  Q¤¨¨¨¨4¨¤°#°a´&¸¸¸¸D¸´/Ð BÀAÑFÔFÐZÐZÐZr%   Tr   )Úreturn_countsr1   )Ú
descendingr   )r7   )r@   Úcopyr>   ÚuniqueÚargsortÚitemÚtensorÚlistÚkeysr7   ÚvaluesÚappendÚlong)r!   rS   Úindices_aux_listÚresultsÚindices_auxÚindexrk   ÚcountsÚcount_sort_indicesÚunique_sortedÚcolumn_to_rowÚidx_pairÚrow_idxÚcol_idxÚ
final_rowsÚ
final_colss                   r$   Ú_get_dense_o2o_indicesz!Deimv2Loss._get_dense_o2o_indicesL   s‹  € ØˆØ+ð 	ð 	ˆKðð å"% g§l¢l¡n¤n°k×6FÒ6FÑ6HÔ6HÑ"IÔ"Iðñ ô ˆGˆGð
 [ÐZÐRYÐZÑZÔZð 	Cñ 	CˆEÝ"œ\¨%¸tÈÐKÑKÔK‰NˆF�FÝ!&¤¨vÀ$Ð!GÑ!GÔ!GÐØ"Ð#5Ô6ˆMØˆMØ)ð 5ð 5�Ø#+¨A¤;×#3Ò#3Ñ#5Ô#5°xÀ´{×7GÒ7GÑ7IÔ7I˜�Ø -Ð/Ð/Ø-4�M 'Ñ*øÝœ¥d¨=×+=Ò+=Ñ+?Ô+?Ñ&@Ô&@ÈÌÐVÑVÔVˆJÝœ¥d¨=×+?Ò+?Ñ+AÔ+AÑ&BÔ&BÈ5Ì<ÐXÑXÔXˆJØ�NŠN˜JŸOšOÑ-Ô-¨z¯ªÑ/@Ô/@ÐAÑBÔBÐBÑBØˆr%   c                 ó¦   — | j         | j        | j        | j        | j        | j        dœ}||vrt          d|› d�¦  «        ‚ ||         ||||¦  «        S )N)Úcardinalityr   r   ÚfocalÚvflr   zLoss z not supported)Úloss_cardinalityÚ
loss_localÚ
loss_boxesÚloss_labels_focalÚloss_labels_vflra   Ú
ValueError)r!   r`   rQ   rR   rS   rT   Úloss_maps          r$   Úget_losszDeimv2Loss.get_lossb   sq   € àÔ0Ø”_Ø”_ØÔ+ØÔ'ØÔ'ð
ð 
ˆð �xÐÐÝÐ9 TÐ9Ð9Ð9Ñ:Ô:Ð:Øˆx˜Œ~˜g w°¸ÑCÔCÐCr%   c           
      ó`  •‡ ‡‡— ‰ j         s"t          ¦   «                              ||¦  «        S d„ |                     ¦   «         D ¦   «         }‰                      ||¦  «        }t          d„ |D ¦   «         ¦  «        }t          j        |gt          j        t          t          |                     ¦   «         ¦  «        ¦  «        j        ¬¦  «        }t          j        |d¬¦  «                             ¦   «         }g }g }d|v rK|d         D ]B}‰                      ||¦  «        }	|                     |	¦  «         |                     |	¦  «         ŒC‰                      ||¦  «        }
t          d„ |
D ¦   «         ¦  «        }t          j        |gt          j        t          t          |                     ¦   «         ¦  «        ¦  «        j        ¬¦  «        }t          j        |d¬¦  «                             ¦   «         }i }‰ j        D ]O}|dv }|r|
n|}|r|n|}‰                      |||||¦  «        Šˆˆ fd	„‰D ¦   «         Š|                     ‰¦  «         ŒPd|v r˜t)          |d         ¦  «        D ]‚\  Š}‰ j        D ]u}|dv }|r|
n|‰         }|r|n|}‰                      |||||¦  «        Šˆˆ fd
„‰D ¦   «         Šˆfd„‰                     ¦   «         D ¦   «         Š|                     ‰¦  «         ŒvŒƒd|v rÂd|vrt+          d¦  «        ‚‰                      |d         |¦  «        }||d         d         z  }t)          |d         ¦  «        D ]l\  Š}‰ j        D ]_}‰                      |||||¦  «        Šˆˆ fd„‰D ¦   «         Šˆfd„‰                     ¦   «         D ¦   «         Š|                     ‰¦  «         Œ`Œm|S )aª  
        This performs the loss computation.

        Args:
             outputs (`dict`, *optional*):
                Dictionary of tensors, see the output specification of the model for the format.
             targets (`list[dict]`, *optional*):
                List of dicts, such that `len(targets) == batch_size`. The expected keys in each dict depends on the
                losses applied, see each loss' doc.
        c                 ó"   — i | ]\  }}d |v¯	||“ŒS )Úauxiliary_outputsr)   )r+   ÚkÚvs      r$   ú
<dictcomp>z&Deimv2Loss.forward.<locals>.<dictcomp>~   s*   € Ð`Ð`Ð`©¨¨1ÐCVÐ^_ÐC_ÐC_˜q !ÐC_ÐC_ÐC_r%   c              3   ó@   K  — | ]}t          |d          ¦  «        V — ŒdS )r4   N©Úlen)r+   r,   s     r$   ú	<genexpr>z%Deimv2Loss.forward.<locals>.<genexpr>‚   s/   è è € Ð@Ð@°1�˜A˜nÔ-Ñ.Ô.Ð@Ð@Ð@Ð@Ð@Ð@r%   r5   r   )Úminr�   c              3   ó@   K  — | ]}t          |d          ¦  «        V — ŒdS )r   Nr•   )r+   Úxs     r$   r—   z%Deimv2Loss.forward.<locals>.<genexpr>‘   s,   è è € Ð9Ð9¨�3˜q œt™9œ9Ð9Ð9Ð9Ð9Ð9Ð9r%   )r   r   c                 óP   •— i | ]"}|‰j         v ¯|‰|         ‰j         |         z  “Œ#S r)   ©r   ©r+   r‘   Úl_dictr!   s     €€r$   r“   z&Deimv2Loss.forward.<locals>.<dictcomp>œ   s:   ø€ ÐbÐbÐb¸QÈAÐQUÔQaÐLaÐLa�a˜ œ TÔ%5°aÔ%8Ñ8ÐLaÐLaÐLar%   c                 óP   •— i | ]"}|‰j         v ¯|‰|         ‰j         |         z  “Œ#S r)   rœ   r�   s     €€r$   r“   z&Deimv2Loss.forward.<locals>.<dictcomp>§   ó;   ø€ ÐjÐjÐjÀQÐTUÐY]ÔYiÐTiÐTi˜a ¨¤¨TÔ-=¸aÔ-@Ñ!@ÐTiÐTiÐTir%   c                 ó(   •— i | ]\  }}|d ‰› �z   |“ŒS )Ú_aux_r)   ©r+   r‘   r’   r.   s      €r$   r“   z&Deimv2Loss.forward.<locals>.<dictcomp>¨   s)   ø€ ÐLÐLÐL±T°Q¸˜a +¨! + +™o¨qÐLÐLÐLr%   Údn_auxiliary_outputsÚdenoising_meta_valuesz}The output must have the 'denoising_meta_values` key. Please, ensure that 'outputs' includes a 'denoising_meta_values' entry.Údn_num_groupc                 óP   •— i | ]"}|‰j         v ¯|‰|         ‰j         |         z  “Œ#S r)   rœ   r�   s     €€r$   r“   z&Deimv2Loss.forward.<locals>.<dictcomp>·   r    r%   c                 ó(   •— i | ]\  }}|d ‰› �z   |“ŒS )Ú_dn_r)   r£   s      €r$   r“   z&Deimv2Loss.forward.<locals>.<dictcomp>¸   s)   ø€ ÐKÐKÐK±D°A°q˜a *¨ * *™n¨aÐKÐKÐKr%   )r    r   ÚforwardÚitemsÚmatcherrP   r>   Ú	as_tensorÚfloatÚnextÚiterrq   r7   Úclamprm   rr   r�   r   r�   ÚupdateÚ	enumerater‹   Úget_cdn_matched_indices)r!   rQ   rR   Úoutputs_without_auxrS   rT   Úcached_indicesrt   r�   Úaux_indicesÚ
indices_goÚnum_boxes_gor   r`   Ú	use_unionÚ
indices_inÚnum_boxes_inÚ
dn_indicesÚdn_num_boxesr.   rž   r#   s   `                  @@€r$   rª   zDeimv2Loss.forwardo   sL  øøøø€ ð Ô(ð 	5Ý‘7”7—?’? 7¨GÑ4Ô4Ð4ð aÐ`°·²±´Ð`Ñ`Ô`ÐØ—,’,Ð2°GÑ<Ô<ˆõ Ð@Ð@¸Ð@Ñ@Ô@Ñ@Ô@ˆ	Ý”O Y Kµu´{Í4ÕPTÐU\×UcÒUcÑUeÔUeÑPfÔPfÑKgÔKgÔKnÐoÑoÔoˆ	Ý”K 	¨qÐ1Ñ1Ô1×6Ò6Ñ8Ô8ˆ	ð ˆØÐØ 'Ð)Ð)Ø%,Ð-@Ô%Að 5ð 5Ð!Ø"ŸlšlÐ+<¸gÑFÔF�Ø×%Ò% kÑ2Ô2Ð2Ø ×'Ò'¨Ñ4Ô4Ð4Ð4ð ×0Ò0°Ð:JÑKÔKˆ
ÝÐ9Ð9¨jÐ9Ñ9Ô9Ñ9Ô9ˆÝ”¨ ~½U¼[ÕQUÕVZÐ[b×[iÒ[iÑ[kÔ[kÑVlÔVlÑQmÔQmÔQtÐuÑuÔuˆÝ”{ <°QÐ7Ñ7Ô7×<Ò<Ñ>Ô>ˆð ˆØ”Kð 	"ð 	"ˆDØÐ 2Ð2ˆIØ'0Ð=˜˜°gˆJØ+4ÐC˜<˜<¸)ˆLØ—]’] 4¨°'¸:À|ÑTÔTˆFØbÐbÐbÐbÐbÀ&ÐbÑbÔbˆFØ�MŠM˜&Ñ!Ô!Ð!Ð!ð  'Ð)Ð)Ý(1°'Ð:MÔ2NÑ(OÔ(Oð *ð *Ñ$�Ð$Ø œKð *ð *�DØ $Ð(:Ð :�IØ/8Ð!O  ¸nÈQÔ>O�JØ3<Ð#K < <À)�LØ!Ÿ]š]¨4Ð1BÀGÈZÐYeÑfÔf�FØjÐjÐjÐjÐjÈ&ÐjÑjÔj�FØLÐLÐLÐL¸V¿\º\¹^¼^ÐLÑLÔL�FØ—M’M &Ñ)Ô)Ð)Ð)ð*ð " WÐ,Ð,Ø&¨gÐ5Ð5Ý ð^ñô ð ð ×5Ò5°gÐ>UÔ6VÐX_Ñ`Ô`ˆJØ$ wÐ/FÔ'GÈÔ'WÑWˆLÝ(1°'Ð:PÔ2QÑ(RÔ(Rð *ð *Ñ$�Ð$Ø œKð *ð *�DØ!Ÿ]š]¨4Ð1BÀGÈZÐYeÑfÔf�FØjÐjÐjÐjÐjÈ&ÐjÑjÔj�FØKÐKÐKÐK¸F¿LºL¹N¼NÐKÑKÔK�FØ—M’M &Ñ)Ô)Ð)Ð)ð	*ð ˆr%   )	Ú__name__Ú
__module__Ú__qualname__r   ra   r�   r�   rª   Ú__classcell__)r#   s   @r$   r   r      s�   ø€ € € € € ð@ð @ð @ð @ð @ð "ð  "ð  "ðDð ð ð,Dð Dð DðLð Lð Lð Lð Lð Lð Lð Lð Lr%   r   c           
      ó   — t          |¦  «        }|                     |¦  «         | |                     dd¬¦  «        dœ}d }|j        �r…|	�õt	          j        |                     dd¬¦  «        |	d         d¬¦  «        \  }}t	          j        ||	d         d¬¦  «        \  }}t	          j        | |	d         d¬¦  «        \  }}t	          j        ||	d         d¬¦  «        \  }}t	          j        |
|	d         d¬¦  «        \  }}t	          j        ||	d         d¬¦  «        \  }}||d<   |                     dd¬¦  «        |d	<   n|                     dd¬¦  «        }|}|
}|}t          |d d …d d
…f                              dd¦  «        |d d …d d
…f                              dd¦  «        |d d …d d
…f                              dd¦  «        |d d …d d
…f                              dd¦  «        |d d …d
f         |d d …d
f         ¦  «        }||d<   |d                              t          |g|                     dd¬¦  «        g¦  «        ¦  «         |	�‚t          |                     dd¦  «        |                     dd¦  «        |                     dd¦  «        |                     dd¦  «        |d d …d
f         |d d …d
f         ¦  «        }||d<   |	|d<    |||¦  «        }t          |                     ¦   «         ¦  «        }|||fS )Nr   r   )r˜   Úmax)r2   r'   Údn_num_splitr   r0   r2   r'   r9   r�   r¤   r¥   )r   rI   r±   Úauxiliary_lossr>   Úsplitr   Ú	transposeÚextendr   rP   rq   )r2   Úlabelsr7   r'   r"   Úoutputs_classÚoutputs_coordÚenc_topk_logitsÚenc_topk_bboxesr¥   Úpredicted_cornersÚinitial_reference_pointsÚkwargsÚ	criterionÚoutputs_lossr�   Údn_out_coordÚnormal_out_coordÚdn_out_classÚnormal_out_classr-   Únormal_logitsÚnormal_pred_boxesÚdn_out_cornersÚout_cornersÚdn_out_refsÚout_refsr¤   Ú	loss_dictr`   s                                 r$   ÚDeimv2ForObjectDetectionLossrß   ¾   sˆ  € õ ˜6Ñ"Ô"€IØ‡L‚L�ÑÔÐà$°J×4DÒ4DÈÐPQÐ4DÑ4RÔ4RÐSÐS€LØÐàÔñ -JØ Ð,Ý-2¬[Ø×#Ò#¨¨qÐ#Ñ1Ô1Ð3HÈÔ3XÐ^_ð.ñ .ô .Ñ*ˆLÐ*õ .3¬[¸ÐH]Ð^lÔHmÐstÐ-uÑ-uÔ-uÑ*ˆLÐ*õ  %œ{¨6Ð3HÈÔ3XÐ^_Ð`Ñ`Ô`ÑˆAˆ}Ý#(¤;¨zÐ;PÐQ_Ô;`ÐfgÐ#hÑ#hÔ#hÑ ˆAÐ Ý*/¬+Ð6GÐI^Ð_mÔInÐtuÐ*vÑ*vÔ*vÑ'ˆN˜KÝ$)¤KÐ0HÐJ_Ð`nÔJoÐuvÐ$wÑ$wÔ$wÑ!ˆK˜à%2ˆL˜Ñ"Ø):×)@Ò)@ÀQÈAÐ)@Ñ)NÔ)NˆL˜Ñ&Ð&à,×2Ò2°q¸aÐ2Ñ@Ô@ÐØ,ÐØ+ˆKØ/ˆHå*Ø˜Q˜Q˜Q   ˜VÔ$×.Ò.¨q°!Ñ4Ô4Ø˜Q˜Q˜Q   ˜VÔ$×.Ò.¨q°!Ñ4Ô4Ø˜˜˜˜3˜B˜3˜Ô×)Ò)¨!¨QÑ/Ô/Ø�Q�Q�Q˜˜˜�VÔ×&Ò& q¨!Ñ,Ô,Ø˜˜˜˜2˜ÔØ˜Q˜Q˜Q ˜UÔ#ñ
ô 
Ðð ->ˆÐ(Ñ)ØÐ(Ô)×0Ò0Ý˜?Ð+¨o×.CÒ.CÈÈqÐ.CÑ.QÔ.QÐ-RÑSÔSñ	
ô 	
ð 	
ð !Ð,Ý#1Ø×&Ò& q¨!Ñ,Ô,Ø×&Ò& q¨!Ñ,Ô,Ø×(Ò(¨¨AÑ.Ô.Ø×%Ò% a¨Ñ+Ô+Ø˜q˜q˜q "˜uÔ%Ø˜Q˜Q˜Q ˜UÔ#ñ$ô $Ð ð 4HˆLÐ/Ñ0Ø4IˆLÐ0Ñ1à�	˜,¨Ñ/Ô/€Iåˆy×ÒÑ!Ô!Ñ"Ô"€DØ�Ð-Ð-Ð-r%   )NNNNNNN)r>   Útorch.nn.functionalÚnnÚ
functionalrF   Úutilsr   Úloss_d_finer   r   r   Úloss_for_object_detectionr	   Útransformers.image_transformsr
   r   rß   r)   r%   r$   ú<module>rç      s  ðð  €€€Ø Ð Ð Ð Ð Ð Ð Ð Ð à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ .Ð .Ð .Ð .Ð .Ð .ð ÐÑÔð GØFÐFÐFÐFÐFÐFð_ð _ð _ð _ð _�ñ _ô _ð _ðP ØØØØØØ!ðG.ð G.ð G.ð G.ð G.ð G.r%   