Ë
    õ�DjÅ<  ã                   óR  — d dl m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mZ d dlmZ d d	lmZmZ d d
lmZ erd dlmZmZmZmZmZmZmZ d dlmZ 	 d dlmZmZ d dl m!Z!m"Z" erd dl#m$Z$m%Z%  G d„ de«      Z'd„ Z(d„ Z)d„ Z*d„ Z+d„ Z,d„ Z-d„ Z.d„ Z/y# e&$ r	  ed«      ‚w xY w)é    ©ÚwrapsN)Úconsts)Úrecord_token_usage)Úset_data_normalized)ÚSPANDATA)ÚDidNotEnableÚIntegration)Úshould_send_default_pii)Úcapture_internal_exceptionsÚevent_from_exception)ÚTYPE_CHECKING)ÚAnyÚIterableÚListÚOptionalÚCallableÚAsyncIteratorÚIterator)ÚSpan)ÚCompletionsÚAsyncCompletions)Ú
EmbeddingsÚAsyncEmbeddings)ÚChatCompletionMessageParamÚChatCompletionChunkzOpenAI not installedc                   ó8   — e Zd ZdZde› �Zdd„Zed„ «       Zd„ Zy)ÚOpenAIIntegrationÚopenaizauto.ai.Nc                 óZ   — || _         d | _        |�dd l}|j                  |«      | _        y y ©Nr   )Úinclude_promptsÚtiktoken_encodingÚtiktokenÚget_encoding)Úselfr"   Útiktoken_encoding_namer$   s       úbC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\sentry_sdk/integrations/openai.pyÚ__init__zOpenAIIntegration.__init__#   s4   € à.ˆÔà!%ˆÔØ!Ð-Ûà%-×%:Ñ%:Ð;QÓ%RˆDÕ"ð .ó    c                  ó  — t        t        j                  «      t        _        t        t        j                  «      t        _        t        t        j                  «      t        _        t        t        j                  «      t        _        y ©N)	Ú_wrap_chat_completion_creater   ÚcreateÚ_wrap_embeddings_creater   Ú"_wrap_async_chat_completion_creater   Ú_wrap_async_embeddings_creater   © r*   r(   Ú
setup_oncezOpenAIIntegration.setup_once-   sV   € ô :¼+×:LÑ:LÓMŒÔÜ3´J×4EÑ4EÓFŒ
Ôä"DÜ×#Ñ#ó#
ÔÔô "?¼×?UÑ?UÓ!VŒÕr*   c                 ód   — | j                   �$t        | j                   j                  |«      «      S yr!   )r#   ÚlenÚencode_ordinary)r&   Úss     r(   Úcount_tokenszOpenAIIntegration.count_tokens8   s-   € à×!Ñ!Ð-Ü�t×-Ñ-×=Ñ=¸aÓ@ÓAÐAØr*   )TN)	Ú__name__Ú
__module__Ú__qualname__Ú
identifierÚoriginr)   Ústaticmethodr3   r8   r2   r*   r(   r   r      s4   „ Ø€JØ˜
�|Ð$€FóSð ñWó ðWór*   r   c                 ó’   — t        | t        j                  «       j                  dddœ¬«      \  }}t        j                  ||¬«       y )Nr   F)ÚtypeÚhandled)Úclient_optionsÚ	mechanism)Úhint)r   Ú
sentry_sdkÚ
get_clientÚoptionsÚcapture_event)ÚexcÚeventrD   s      r(   Ú_capture_exceptionrK   ?   s?   € ä&ØÜ!×,Ñ,Ó.×6Ñ6Ø#°Ñ6ô�K€Eˆ4ô
 ×Ñ˜U¨Ö.r*   c                 ó>  — d}d}d}t        |d«      rðt        |j                  d«      r:t        |j                  j                  t        «      r|j                  j                  }t        |j                  d«      r:t        |j                  j
                  t        «      r|j                  j
                  }t        |j                  d«      r:t        |j                  j                  t        «      r|j                  j                  }|dk(  r| D ]  }d|v sŒ| ||d   «      z  }Œ |dk(  rT|�|D ]  }| ||«      z  }Œ n?t        |d«      r3|j                  D ]$  }	t        |	d«      sŒ| ||	j                  «      z  }Œ& |dk(  rd }|dk(  rd }|dk(  rd }t        ||||«       y )	Nr   ÚusageÚcompletion_tokensÚprompt_tokensÚtotal_tokensÚcontentÚchoicesÚmessage)
ÚhasattrrM   Ú
isinstancerN   ÚintrO   rP   rR   rS   r   )
ÚmessagesÚresponseÚspanÚstreaming_message_responsesr8   rN   rO   rP   rS   Úchoices
             r(   Ú _calculate_chat_completion_usager\   I   s›  € ð ÐØ€MØ€LÜˆx˜Ô!Ü�8—>‘>Ð#6Ô7¼JØ�N‰N×,Ñ,¬cô=
ð !)§¡× @Ñ @ÐÜ�8—>‘> ?Ô3¼
Ø�N‰N×(Ñ(¬#ô9
ð %ŸN™N×8Ñ8ˆMÜ�8—>‘> >Ô2´zØ�N‰N×'Ñ'¬ô8
ð $Ÿ>™>×6Ñ6ˆLà˜ÒØò 	BˆGØ˜GÒ#Ø¡¨g°iÑ.@Ó!AÑA‘ð	Bð ˜AÒØ&Ð2Ø6ò ;�Ø!¡\°'Ó%:Ñ:Ñ!ñ;ä�X˜yÔ)Ø"×*Ñ*ò F�Ü˜6 9Õ-Ø%©°f·n±nÓ)EÑEÑ%ðFð ˜ÒØˆØ˜AÒØ ÐØ�qÒØˆÜ�t˜]Ð,=¸|ÕLr*   c              /   ó  ‡‡‡	‡
‡‡K  — t        j                  «       j                  t        «      Š‰€ | |i |¤ŽS d|vr | |i |¤ŽS 	 t	        |d   «       t        |d   «      |d<   |d   Š	|j                  d«      }|j                  d«      }t        j                  t        j                  j                  dt        j                  ¬«      Š‰j                  «        | ||f–—Št        «       5  t        «       r'‰j                   rt#        ‰t$        j&                  ‰	«       t#        ‰t$        j(                  |«       t#        ‰t$        j*                  |«       t-        ‰d«      rnt        «       r7‰j                   r+t#        ‰dt        t/        d„ ‰j0                  «      «      «       t3        ‰	‰‰d ‰j4                  «       ‰j7                  d d d «       n‰t-        ‰d	«      r]g Š‰j8                  Š
ˆˆˆ	ˆ
ˆˆfd
„}ˆˆˆ	ˆ
ˆˆfd„}t;        t=        ‰j8                  «      «      dk(  r |«       ‰_        n- |«       ‰_        n t#        ‰dd«       ‰j7                  d d d «       d d d «       ‰S # t
        $ r  | |i |¤ŽcY S w xY w# 1 sw Y   ‰S xY w­w)NrW   ÚmodelÚstreamzChat Completion)ÚopÚnamer=   rR   zai.responsesc                 ó   — | j                   S r,   )rS   )Úxs    r(   ú<lambda>z-_new_chat_completion_common.<locals>.<lambda>Ÿ   s
   €  q§y¡y€ r*   Ú	_iteratorc               3   óŠ  •K  — t        «       5  ‰D ]™  } t        | d«      r‡d}| j                  D ]v  }t        |d«      rct        |j                  d«      rM|j                  j                  }t        ‰«      |k  r‰j                  g «       ‰|   j                  |xs d«       |dz  }Œx | –— Œ› t        ‰«      dkD  r`t        t        d„ ‰«      «      }t        «       r'‰j                  rt        ‰
t        j                  |«       t        ‰‰	‰
|‰j                  «       d d d «       ‰
j!                  d d d «       y # 1 sw Y   ŒxY w­w)NrR   r   ÚdeltarQ   Ú é   c                 ó$   — dj                  | «      S ©Nrh   ©Újoin©Úchunks    r(   rd   zC_new_chat_completion_common.<locals>.new_iterator.<locals>.<lambda>¼   ó   € ¨b¯g©g°e«n€ r*   ©r   rT   rR   rg   rQ   r5   ÚappendÚlistÚmapr   r"   r   r   ÚAI_RESPONSESr\   r8   Ú__exit__©rc   Úchoice_indexr[   rQ   Úall_responsesÚdata_bufÚintegrationrW   Úold_iteratorÚresrY   s        €€€€€€r(   Únew_iteratorz1_new_chat_completion_common.<locals>.new_iteratorª   s7  øè ø€ ä0Ó2ñ Ø)ò  ˜Ü" 1 iÔ0Ø+,˜LØ*+¯)©)ò 2 Ü#*¨6°7Ô#;ÄØ$*§L¡L°)ôA"ð /5¯l©l×.BÑ.B GÜ'*¨8£}¸Ò'DØ(0¯©¸Ô(;Ø$,¨\Ñ$:×$AÑ$AÀ'Â-ÈRÔ$PØ ,°Ñ 1¡ð2ð  ›ð ô ˜8“} qÒ(Ü(,ÜÑ <¸hÓGó)˜ô 3Ô4¸×9TÒ9TÜ/Ø $¤h×&;Ñ&;¸]ôô 9Ø$ØØ Ø)Ø'×4Ñ4ô÷-ð: —‘˜d D¨$Õ/÷;ð üs   ƒEŽDD7ÄEÄ7E Ä<Ec                 óž  •K  — t        «       5  ‰2 3 d {  –—† } t        | d«      r‡d}| j                  D ]v  }t        |d«      rct        |j                  d«      rM|j                  j                  }t        ‰«      |k  r‰j                  g «       ‰|   j                  |xs d«       |dz  }Œx | ­–— Œ¢7 Œ�6 t        ‰«      dkD  r`t        t        d„ ‰«      «      }t        «       r'‰j                  rt        ‰
t        j                  |«       t        ‰‰	‰
|‰j                  «       d d d «       n# 1 sw Y   nxY w‰
j!                  d d d «       y ­w)NrR   r   rg   rQ   rh   ri   c                 ó$   — dj                  | «      S rk   rl   rn   s    r(   rd   zI_new_chat_completion_common.<locals>.new_iterator_async.<locals>.<lambda>Ý   rp   r*   rq   rw   s        €€€€€€r(   Únew_iterator_asyncz7_new_chat_completion_common.<locals>.new_iterator_asyncË   s@  øè ø€ ä0Ó2ñ Ø#/÷  ð  ˜aÜ" 1 iÔ0Ø+,˜LØ*+¯)©)ò 2 Ü#*¨6°7Ô#;ÄØ$*§L¡L°)ôA"ð /5¯l©l×.BÑ.B GÜ'*¨8£}¸Ò'DØ(0¯©¸Ô(;Ø$,¨\Ñ$:×$AÑ$AÀ'Â-ÈRÔ$PØ ,°Ñ 1¡ð2ð  œð ø <ô ˜8“} qÒ(Ü(,ÜÑ <¸hÓGó)˜ô 3Ô4¸×9TÒ9TÜ/Ø $¤h×&;Ñ&;¸]ôô 9Ø$ØØ Ø)Ø'×4Ñ4ô÷-÷ ñ úð: —‘˜d D¨$Õ/ùs>   ƒEŽD-‘B5•B3–B5™BD-Â3B5Â5A/D-Ä$	EÄ-D6Ä2Ez<class 'async_generator'>Úunknown_responseT)rE   rF   Úget_integrationr   ÚiterÚ	TypeErrorrs   ÚgetÚ
start_spanr   ÚOPÚOPENAI_CHAT_COMPLETIONS_CREATEr=   Ú	__enter__r   r   r"   r   r   ÚAI_INPUT_MESSAGESÚAI_MODEL_IDÚAI_STREAMINGrT   rt   rR   r\   r8   rv   re   Ústrr@   )ÚfÚargsÚkwargsr^   Ú	streamingr~   r�   rz   r{   rW   r|   r}   rY   s          @@@@@@r(   Ú_new_chat_completion_commonr“   u   sO  ýè ø€ ä×'Ñ'Ó)×9Ñ9Ô:KÓL€KØÐÙ�$Ð!˜&Ñ!Ð!à˜Ñá�$Ð!˜&Ñ!Ð!ð"ÜˆV�JÑÔ ô
 ˜f ZÑ0Ó1€Fˆ:ÑØ�jÑ!€HØ�J‰J�wÓ€EØ—
‘
˜8Ó$€Iä× Ñ Ü�9‰9×3Ñ3ØÜ ×'Ñ'ô€Dð
 	‡N�NÔà�4˜�Ñ
€Cä	$Ó	&ñ `,Ü"Ô$¨×)DÒ)DÜ ¤h×&@Ñ&@À(ÔKä˜D¤(×"6Ñ"6¸Ô>Ü˜D¤(×"7Ñ"7¸ÔCä�3˜	Ô"Ü&Ô(¨[×-HÒ-HÜ#ØØ"ÜœÑ0°#·+±+Ó>Ó?ôô
 -Ø˜#˜t T¨;×+CÑ+Côð �M‰M˜$  dÕ+Ü�S˜+Ô&Ø(*ˆHàŸ=™=ˆL÷0ñ 0÷B0ñ 0ôB ”4˜Ÿ™Ó&Ó'Ð+FÒFÙ 2Ó 4�•á ,£�•ô   Ð&8¸$Ô?Ø�M‰M˜$  dÔ+÷A`,ðB €Jøôg ò "á�$Ð!˜&Ñ!Ò!ð"ú÷$`,ðB €JüsC   ˆ>JÁI! ÁBJÃ,E+I8É
JÉ!I5É2JÉ4I5É5JÉ8JÉ=Jc                 ó8   ‡ ‡— d„ Št        ‰ «      ˆˆ fd„«       }|S )Nc                 ó<  — t        | g|¢­i |¤Ž}	 t        |«      \  } }}	 	  | |i |¤Ž}|j                  |«      S # t        $ r}|j                  cY d }~S d }~ww xY w# t        $ r}t        |«       |d ‚d }~ww xY w# t        $ r}|j                  cY d }~S d }~ww xY wr,   ©r“   ÚnextÚStopIterationÚvalueÚ	ExceptionrK   Úsend©r�   r�   r‘   ÚgenÚeÚresults         r(   Ú_execute_syncz3_wrap_chat_completion_create.<locals>._execute_syncù   sª   € ä)¨!Ð=¨dÒ=°fÑ=ˆð	Ü" 3›i‰OˆAˆt�Vð		ð"Ù˜DÐ+ FÑ+�ð
 —8‘8˜FÓ#Ð#øô ò 	Ø—7‘7�Nûð	ûô ò "Ü" 1Ô%Ø˜TÐ!ûð"ûô
 ò 	Ø—7‘7�Nûð	úóU   ‘; ¢A ªA< »	AÁAÁAÁAÁ	A9Á&A4Á4A9Á9A< Á<	BÂBÂBÂBc                  ó†   •— t        j                  «       j                  t        «      }|�d|vr ‰| i |¤ŽS  ‰‰g| ¢­i |¤ŽS ©NrW   ©rE   rF   rƒ   r   ©r�   r‘   r{   r    r�   s      €€r(   Ú_sentry_patched_create_synczA_wrap_chat_completion_create.<locals>._sentry_patched_create_sync  sQ   ø€ ô !×+Ñ+Ó-×=Ñ=Ô>OÓPˆØÐ *°FÑ":á�dÐ%˜fÑ%Ð%á˜QÐ0 Ò0¨Ñ0Ð0r*   r   ©r�   r¦   r    s   ` @r(   r-   r-   ÷   s(   ù€ òô( ˆ1ƒXô1ó ð1ð 'Ð&r*   c                 ó8   ‡ ‡— d„ Št        ‰ «      ˆˆ fd„«       }|S )Nc              Ÿ   ój  K  — t        | g|¢­i |¤Ž}	 t        |«      \  } }}	 	  | |i |¤Žƒ d {  –—† }|j                  |«      S # t        $ r}|j                  ƒ d {  –—†7  cY d }~S d }~ww xY w7 Œ@# t        $ r}t        |«       |d ‚d }~ww xY w# t        $ r}|j                  cY d }~S d }~ww xY w­wr,   r–   rœ   s         r(   Ú_execute_asyncz:_wrap_async_chat_completion_create.<locals>._execute_async  s¹   è ø€ ä)¨!Ð=¨dÒ=°fÑ=ˆð	!Ü" 3›i‰OˆAˆt�Vð		ð"Ù  $Ð1¨&Ñ1×1�ð
 —8‘8˜FÓ#Ð#øô ò 	!ØŸ™—=�=Õ ûð	!úð
 2ùÜò "Ü" 1Ô%Ø˜TÐ!ûð"ûô
 ò 	Ø—7‘7�Nûð	üó–   ‚B3“A ¤A2 ¯A0°A2 ´B ÁB3Á	A-ÁA(ÁA ÁA(Á"A-Á#B3Á(A-Á-B3Á0A2 Á2	BÁ;B	Â	BÂB Â	B0ÂB+Â%B0Â&B3Â+B0Â0B3c               Ÿ   ó¶   •K  — t        j                  «       j                  t        «      }|�d|vr ‰| i |¤Žƒ d {  –—† S  ‰‰g| ¢­i |¤Žƒ d {  –—† S 7 Œ7 Œ­wr£   r¤   ©r�   r‘   r{   rª   r�   s      €€r(   Ú_sentry_patched_create_asynczH_wrap_async_chat_completion_create.<locals>._sentry_patched_create_async0  sd   øè ø€ ô !×+Ñ+Ó-×=Ñ=Ô>OÓPˆØÐ *°FÑ":á˜DÐ+ FÑ+×+Ð+á# AÐ7¨Ò7°Ñ7×7Ð7ð ,øà7ús!   ƒ9A¼A½AÁAÁAÁAr   ©r�   r®   rª   s   ` @r(   r0   r0     s(   ù€ òô( ˆ1ƒXô8ó ð8ð (Ð'r*   c              /   ó  K  — t        j                  «       j                  t        «      }|€ | |i |¤ŽS t        j                  t
        j                  j                  dt        j                  ¬«      5 }d|v r…t        «       r{|j                  rot        |d   t        «      rt        |d|d   g«       nJt        |d   t        «      r7t        |d   «      dkD  r&t        |d   d   t        «      rt        |d|d   «       d|v rt        |d|d   «       | ||f–—}d}d}t!        |d«      r t!        |j"                  d	«      r:t        |j"                  j$                  t&        «      r|j"                  j$                  }t!        |j"                  d
«      r:t        |j"                  j(                  t&        «      r|j"                  j(                  }|dk(  r|j+                  |d   xs d«      }t-        ||d |xs |«       |cd d d «       S # 1 sw Y   y xY w­w)NzOpenAI Embedding Creation)r`   Údescriptionr=   Úinputzai.input_messagesr   r^   zai.model_idrM   rO   rP   rh   )rE   rF   rƒ   r   r‡   r   rˆ   ÚOPENAI_EMBEDDINGS_CREATEr=   r   r"   rU   rŽ   r   rs   r5   rT   rM   rO   rV   rP   r8   r   )r�   r�   r‘   r{   rY   rX   rO   rP   s           r(   Ú_new_embeddings_create_commonr´   =  sÍ  è ø€ ä×'Ñ'Ó)×9Ñ9Ô:KÓL€KØÐÙ�$Ð!˜&Ñ!Ð!ä	×	Ñ	Ü�9‰9×-Ñ-Ø/Ü ×'Ñ'ô
ð &ð 
Ø�fÑÜ#Ô%¨+×*EÒ*Eä˜& ™/¬3Ô/Ü# DÐ*=ÀÀwÁÐ?PÕQä˜6 '™?¬DÔ1Ü˜˜w™Ó(¨1Ò,Ü˜v g™¨qÑ1´3Ô7ä# DÐ*=¸vÀg¹ÔOØ�fÑÜ  m°V¸G±_ÔEà˜D &˜Ñ(ˆàˆØˆÜ�8˜WÔ%Ü�x—~‘~ Ô7¼JØ—‘×,Ñ,¬cô=ð !)§¡× <Ñ <�Ü�x—~‘~ ~Ô6¼:Ø—‘×+Ñ+¬Sô<ð  (Ÿ~™~×:Ñ:�à˜AÒØ'×4Ñ4°V¸G±_Ò5JÈÓKˆMä˜4 °°lÒ6SÀmÔTà÷M&÷ &ò &üs   ‚A0HÁ2FHÇ7
HÈH
ÈHc                 ó8   ‡ ‡— d„ Št        ‰ «      ˆˆ fd„«       }|S )Nc                 ó<  — t        | g|¢­i |¤Ž}	 t        |«      \  } }}	 	  | |i |¤Ž}|j                  |«      S # t        $ r}|j                  cY d }~S d }~ww xY w# t        $ r}t        |«       |d ‚d }~ww xY w# t        $ r}|j                  cY d }~S d }~ww xY wr,   ©r´   r—   r˜   r™   rš   rK   r›   rœ   s         r(   r    z._wrap_embeddings_create.<locals>._execute_syncn  sª   € ä+¨AÐ?°Ò?¸Ñ?ˆð	Ü" 3›i‰OˆAˆt�Vð		ð"Ù˜DÐ+ FÑ+�ð
 —8‘8˜FÓ#Ð#øô ò 	Ø—7‘7�Nûð	ûô ò "Ü" 1Ô%Ø˜TÐ!ûð"ûô
 ò 	Ø—7‘7�Nûð	úr¡   c                  ó~   •— t        j                  «       j                  t        «      }|€ ‰| i |¤ŽS  ‰‰g| ¢­i |¤ŽS r,   r¤   r¥   s      €€r(   r¦   z<_wrap_embeddings_create.<locals>._sentry_patched_create_sync‚  sJ   ø€ ô !×+Ñ+Ó-×=Ñ=Ô>OÓPˆØÐÙ�dÐ%˜fÑ%Ð%á˜QÐ0 Ò0¨Ñ0Ð0r*   r   r§   s   ` @r(   r/   r/   l  s(   ù€ òô( ˆ1ƒXô1ó ð1ð 'Ð&r*   c                 ó8   ‡ ‡— d„ Št        ‰ «      ˆˆ fd„«       }|S )Nc              Ÿ   ój  K  — t        | g|¢­i |¤Ž}	 t        |«      \  } }}	 	  | |i |¤Žƒ d {  –—† }|j                  |«      S # t        $ r}|j                  ƒ d {  –—†7  cY d }~S d }~ww xY w7 Œ@# t        $ r}t        |«       |d ‚d }~ww xY w# t        $ r}|j                  cY d }~S d }~ww xY w­wr,   r·   rœ   s         r(   rª   z5_wrap_async_embeddings_create.<locals>._execute_async�  s¹   è ø€ ä+¨AÐ?°Ò?¸Ñ?ˆð	!Ü" 3›i‰OˆAˆt�Vð		ð"Ù  $Ð1¨&Ñ1×1�ð
 —8‘8˜FÓ#Ð#øô ò 	!ØŸ™—=�=Õ ûð	!úð
 2ùÜò "Ü" 1Ô%Ø˜TÐ!ûð"ûô
 ò 	Ø—7‘7�Nûð	ür«   c               Ÿ   ó®   •K  — t        j                  «       j                  t        «      }|€ ‰| i |¤Žƒ d {  –—† S  ‰‰g| ¢­i |¤Žƒ d {  –—† S 7 Œ7 Œ­wr,   r¤   r­   s      €€r(   r®   zC_wrap_async_embeddings_create.<locals>._sentry_patched_create_async¤  s]   øè ø€ ô !×+Ñ+Ó-×=Ñ=Ô>OÓPˆØÐÙ˜DÐ+ FÑ+×+Ð+á# AÐ7¨Ò7°Ñ7×7Ð7ð ,øà7ús!   ƒ5A¸A¹AÁAÁAÁAr   r¯   s   ` @r(   r1   r1   Ž  s(   ù€ òô( ˆ1ƒXô8ó ð8ð (Ð'r*   )0Ú	functoolsr   rE   r   Úsentry_sdk.ai.monitoringr   Úsentry_sdk.ai.utilsr   Úsentry_sdk.constsr   Úsentry_sdk.integrationsr	   r
   Úsentry_sdk.scoper   Úsentry_sdk.utilsr   r   Útypingr   r   r   r   r   r   r   r   Úsentry_sdk.tracingr   Ú!openai.resources.chat.completionsr   r   Úopenai.resourcesr   r   Úopenai.types.chatr   r   ÚImportErrorr   rK   r\   r“   r-   r0   r´   r/   r1   r2   r*   r(   ú<module>rÉ      s¢   ðÝ ã Ý Ý 7Ý 3Ý &ß =Ý 4÷õ
 !áßW×WÑWÝ'ð/ßOß<áßUô
˜ô ò@/ò)MòXòD 'òF (òF,ò^'óD(øðg ò /Ù
Ð-Ó
.Ð.ð/ús   ÁB ÂB&