Ë
    tPêj¸œ  ã                   ó`  — U d Z ddlZddl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mZmZmZmZ dd	lmZmZ dd
lmZ ddl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$m%Z%m&Z&m'Z' ddl(m)Z)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0m1Z1m2Z2 ddl3m4Z4m5Z5 ddl6m7Z7 e
rddl8m9Z9 ddl:m;Z;  e«       Z<ee=d<    edddœ«      Z>eee?e?f      e=d<   ddddd d!d"d#d$d%d&d'œZ@eee?e?f      e=d(<   d)eAd*e?fd+„ZBd,eAd*eAfd-„ZCd.eDe?ef   d*d/fd0„ZEdad1d2d3ed4e?dz  d*e#fd5„ZFd6e?d*dfd7„ZGd8e!d*eDe?e?f   fd9„ZHd8e!d:ee?eAf   d;ee?e?f   dz  d*ee?e?f   dz  fd<„ZI	 dbd=eAd>eJd?e?d@eJd*ef
dA„ZKdBe?d*dCfdD„ZLd1d2d3ed*dfdE„ZM	 dadFe?dGeDe?eAf   dHee?e?f   dz  d*eDe?ef   fdI„ZN	 	 	 dcdFe?dGee?eAf   d=e?eJz  dz  dHee?e?f   dz  dKe#d*eee?eAf   df   fdL„ZOdMee?df   d*efdN„ZP	 	 	 	 	 	 dddFe?dGee?eAf   d=e?eJz  dz  dHee?e?f   dz  dOe4dz  d8e!dz  d:eDe?eAf   dz  dKe#d*efdP„ZQ	 	 	 	 dedddddJdQœdRe?dz  d=e?eJz  d.eDe?eAf   dSeDe?eAf   dz  dBe?dz  dTeDe?eAf   dz  dUeDe?eAf   dz  d;eDe?e?f   dz  d8e!dz  d:eDe?eAf   dz  dOe4dz  dKe#d*efdV„ZRe<j§                  dWdXg ee.«      g¬Y«      e<j§                  dZdXg ee.«      g¬Y«       ee.«      fdBe?d3ed8e!fd[„«       «       ZTe<j«                  d\dXg ee.«      g¬Y«      e<j«                  d]dXg ee.«      g¬Y«      e<j«                  d^dXg ee.«      g¬Y«       ee.«      fdBe?d3ed_ed8e!fd`„«       «       «       ZVy)fzÆ
A2A Protocol endpoints for LiteLLM Proxy.

Allows clients to invoke agents through LiteLLM using the A2A protocol.
The A2A SDK can point to LiteLLM's URL and invoke agents registered with LiteLLM.
é    N)ÚAsyncGeneratorÚMapping)Údeepcopy)ÚMappingProxyType)ÚTYPE_CHECKINGÚAnyÚFinal)Úurlparse)Ú	APIRouterÚDependsÚHTTPExceptionÚRequestÚResponse)ÚJSONResponseÚStreamingResponse)ÚValidationError)Úverbose_proxy_logger)Ú	SSRFErrorÚvalidate_url)ÚUserAPIKeyAuth)Ú
A2AVersionÚnormalize_agent_cardÚnormalize_jsonrpc_responseÚnormalize_request_paramsÚnormalize_stream_event)ÚDATABRICKS_OAUTH_PARAMÚ"resolve_databricks_app_auth_header)Úmerge_agent_headers)Úuser_api_key_auth)ÚSSE_COMMENT_PINGÚcoerce_keepalive_intervalÚ$wrap_sse_stream_with_keepalive_pings)ÚProxyLoggingÚget_custom_url)Úall_litellm_params©ÚMessageSendParams)ÚAgentResponseÚrouterzno-cacheÚno)zCache-ControlzX-Accel-BufferingÚ_SSE_KEEPALIVE_HEADERSúmessage/sendúmessage/streamú	tasks/getú
tasks/listútasks/cancelútasks/resubscribeú tasks/pushNotificationConfig/setú tasks/pushNotificationConfig/getú!tasks/pushNotificationConfig/listú#tasks/pushNotificationConfig/deleteú"agent/getAuthenticatedExtendedCard)ÚSendMessageÚSendStreamingMessageÚGetTaskÚ	ListTasksÚ
CancelTaskÚSubscribeToTaskÚ CreateTaskPushNotificationConfigÚGetTaskPushNotificationConfigÚListTaskPushNotificationConfigsÚ DeleteTaskPushNotificationConfigÚGetExtendedAgentCardÚ_PASCAL_TO_WIREÚpayloadÚreturnc                 ó4   — dt        j                  | «      › d�S )zIFrame a JSON-RPC object as a single A2A SSE event (``data: <json>\n\n``).údata: ú

©ÚjsonÚdumps)rC   s    úp/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/agent_endpoints/a2a_endpoints.pyÚ
_sse_eventrL   P   s   € à”D—J‘J˜wÓ'Ð(¨Ð-Ð-ó    Úchunkc                 óè   — t        | t        t        t        f«      r	 t	        j
                  | «      S t        | d«      r| j                  dd¬«      S | S # t        j                  t        f$ r | cY S w xY w)zÆCoerce a streamed chunk to the JSON-RPC object it carries.

    Chunks arrive as SDK models, plain dicts, or, when a guardrail terminates a
    stream, as an already serialized JSON-RPC object.
    Ú
model_dumprI   T©ÚmodeÚexclude_none)
Ú
isinstanceÚstrÚbytesÚ	bytearrayrI   ÚloadsÚJSONDecodeErrorÚUnicodeDecodeErrorÚhasattrrP   ©rN   s    rK   Ú_to_jsonrpc_objectr]   U   sr   € ô �%œ#œu¤iÐ0Ô1ð	Ü—:‘:˜eÓ$Ð$ô ˆu�lÔ#Ø×Ñ V¸$ÐÓ?Ð?Ø€Løô	 ×$Ñ$Ô&8Ð9ò 	ØŠLð	ús   �A ÁA1Á0A1Úparamsr'   c                 óö   — ddl m} 	  |d
i | ¤ŽS # t        $ r_ ddlm}m} ddlm}m} |j                  «       }	  || |d¬«       n# |$ r}t        d|› �«      |‚d}~ww xY w ||d	«      j                  cY S w xY w)zCBuild MessageSendParams from wire (0.3) or A2A 1.0 JSON-RPC params.r   r&   )Úpb2_v10Úto_compat_send_message_request)Ú	ParseDictÚ
ParseErrorT)Úignore_unknown_fieldszInvalid message/send params: NÚ © )Úa2a.compat.v0_3.typesr'   r   Úa2a.compat.v0_3.conversionsr`   ra   Úgoogle.protobuf.json_formatrb   rc   ÚSendMessageRequestÚ
ValueErrorr^   )r^   r'   r`   ra   rb   rc   ÚpbÚes           rK   Ú_build_message_send_paramsrn   e   s‡   € å7ð=Ù Ñ* 6Ñ*Ð*øÜò 	=ßWßEà×.Ñ.Ó0ˆð	IÙ�f˜b¸Ö=øØò 	IÜÐ<¸Q¸CÐ@ÓAÀqÐHûð	Iúá-¨b°"Ó5×<Ñ<Ò<ð	=ús2   ˆ �)A8ºAÁA8ÁAÁAÁAÁA8Á7A8Úagentr(   ÚrequestÚoriginal_methodc                 ó¼   — | j                   xs i j                  d«      }|dv r|S |t        v ry|j                  j                  dd«      j	                  d«      rdS dS )a  Protocol version LiteLLM serves for this agent.

    The agent's configured version governs. For agents that pin no version, fall back
    to the client's signal: PascalCase JSON-RPC methods and an ``a2a-version: 1.x``
    header both mark a 1.0 caller; otherwise default to 0.3.
    ÚprotocolVersion)ú0.3ú1.0ru   za2a-versionre   z1.rt   )Úagent_card_paramsÚgetrB   ÚheadersÚ
startswith)ro   rp   rq   Ú
configureds       rK   Ú_served_versionr{   w   sc   € ð ×0Ñ0Ò6°B×;Ñ;Ð<MÓN€JØ�^Ñ#ØÐØœ/Ñ)ØØ—O‘O×'Ñ'¨°rÓ:×EÑEÀdÔKˆ5ÐVÐQVÐVrM   Úurlc                 óÆ   — t        | «      }|j                  dk7  rt        dd¬«      ‚	 t        | «       y # t        t
        f$ r}t        dt        |«      ¬«      |‚d }~ww xY w)NÚhttpsé�  z$Push notification URL must use HTTPS©Ústatus_codeÚdetail)r
   Úschemer   r   r   rk   rU   )r|   Úparsedrm   s      rK   Ú_validate_push_notification_urlr…   †   sb   € Ü˜S“M€FØ‡}�}˜ÒÜØØ9ô
ð 	
ðCÜ�SÕøÜ”zÐ"ò CÜ¨´C¸³FÔ;ÀÐBûðCús   ©5 µA ÁAÁA Úuser_api_key_dictc                 óv   — i }| j                   r| j                   |d<   | j                  r| j                  |d<   |S )NzX-LiteLLM-User-IdzX-LiteLLM-Team-Id)Úuser_idÚteam_id)r†   rx   s     rK   Ú_caller_identity_headersrŠ   “   s@   € Ø%'€GØ× Ò Ø'8×'@Ñ'@ˆÐ#Ñ$Ø× Ò Ø'8×'@Ñ'@ˆÐ#Ñ$Ø€NrM   Úrequest_dataÚagent_extra_headersc                 óF  — |rD|j                  «       D ��ci c](  \  }}|j                  «       j                  d«      rŒ&||“Œ* c}}nd }t        |d ¬«      xs i }t	        | «      }|j                  d«      }|rt        |«      |d<   |j                  |«       |xs d S c c}}w )Nz
x-litellm-©Údynamic_headersÚstatic_headersÚlitellm_trace_idzX-LiteLLM-Trace-Id)ÚitemsÚlowerry   r   rŠ   rw   rU   Úupdate)	r†   r‹   rŒ   ÚkÚvÚ	sanitizedÚmergedÚidentityÚtrace_ids	            rK   Ú_forwarding_headersr›   œ   s£   € ñ ð .×3Ñ3Ó5×`‘$�!�Q¸Q¿W¹W»Y×=QÑ=QÐR^Õ=_ˆˆA‰Ô`àð ô
 (¸	ÐRVÔWÒ]Ð[]€FÜ.Ð/@ÓA€HØ"×&Ñ&Ð'9Ó:€HÙÜ),¨X«ˆÐ%Ñ&Ø
‡M�M�(ÔØŠ>�TÐùó 	as
   –'B¾BÚ
request_idÚcodeÚmessager�   c                 ó*   — t        d| ||dœdœ|¬«      S )z%Create a JSON-RPC 2.0 error response.ú2.0©r�   rž   ©ÚjsonrpcÚidÚerror)Úcontentr�   )r   )rœ   r�   rž   r�   s       rK   Ú_jsonrpc_errorr§   ¯   s)   € ô àØØ"¨wÑ7ñ
ð
  ôð rM   Úagent_idzAgentResponse | Nonec              ƒ   ó:   K  — ddl m}  || «      ƒ d{  –—† S 7 Œ­w)z:Look up an agent by ID or name. Returns None if not found.r   )Úget_agent_with_read_throughN)Ú0litellm.proxy.common_utils.registry_read_throughrª   )r¨   rª   s     rK   Ú
_get_agentr¬   À   s   è ø€ õñ -¨XÓ6×6Ð6Ð6ús   ‚”•c                 óÈ   — | j                   xs i }|j                  d«      syddlm} t	        |j
                  «      } ||«      }|st        dd| j                  › d�¬«      ‚y)	zRRaise 400 if agent requires x-litellm-trace-id on inbound calls and it is missing.Ú"require_trace_id_on_calls_to_agentNr   )Úget_chain_id_from_headersr   úAgent 'z=' requires x-litellm-trace-id header on all inbound requests.r€   )Úlitellm_paramsrw   Ú$litellm.proxy.litellm_pre_call_utilsr¯   Údictrx   r   r¨   )ro   rp   Úagent_litellm_paramsr¯   Úheaders_dictrš   s         rK   Ú_enforce_inbound_trace_idr¶   É   sj   € à"'×"6Ñ"6Ò"<¸"ÐØ×#Ñ#Ð$HÔIØåNä˜wŸ™Ó/€LÙ/°Ó=€HÙÜØØ˜eŸn™nÐ-Ð-jÐkô
ð 	
ð rM   Ú	agent_urlÚbodyÚextra_headersc              ƒ   ó@  K  — ddl m} ddlm} ddi|xs i ¥} ||j                  ddi¬«      }|j                  | ||¬	«      ƒ d {  –—† }	 |j                  «       }|j                  sd
|vr|j                  «        |S 7 Œ7# t        $ r |j                  «        ‚ w xY w­w)Nr   ©Úget_async_httpx_client©ÚhttpxSpecialProviderúContent-Typeúapplication/jsonÚtimeoutg      N@©Úllm_providerr^   ©rI   rx   r¥   )
Ú&litellm.llms.custom_httpx.http_handlerr¼   Úlitellm.types.llms.custom_httpr¾   ÚA2AÚpostrI   Ú	ExceptionÚraise_for_statusÚ
is_success)	r·   r¸   r¹   r¼   r¾   rx   ÚhandlerÚrespÚresults	            rK   Ú_forward_jsonrpcrÏ   Ú   s®   è ø€ õ
 NÝCà$Ð&8ÐR¸]Ò=PÈbÐR€GÙ+Ø)×-Ñ-Ø˜4Ð ô€Gð  Ÿ™ Y°TÀ7˜ÓK×K€DðØŸ	™	›ˆð �?Š?˜w¨fÑ4Ø×ÑÔØ€Mð Lùô ò Ø×ÑÔØðüs*   ‚ABÁA>ÁBÁB  Á#BÂ BÂBrt   Úserved_versionc                óö  K  — ddl m} ddlm} ddlm} dddœ|xs i ¥} ||j                  dd	i¬
«      }	|	j                  }
|
j                  d| ||¬«      }|
j                  |d¬«      ƒ d	{  –—† }	 |j                  s‚|j                  «       ƒ d	{  –—† }d	}	 t        j                  |«      }t        |t        «      rd|v r
 |||¬«      }|xs d|d|j"                  dœdœ­–— 	 |j%                  «       ƒ d	{  –—†  y	|j'                  «       2 3 d	{  –—† }|j)                  «       }|j+                  d«      sŒ+|t-        d«      d	 j)                  «       }|sŒJ	 t        j                  |«      }t        |t        «      rt/        |||¬«      }|­–— Œ„7 �Œ(7 �Œ# t         $ r d	}Y ŒÛw xY w7 Œ°7 Œ˜# t         $ r Y Œªw xY w6 	 |j%                  «       ƒ d	{  –—†7   y	# |j%                  «       ƒ d	{  –—†7   w xY w­w)zÚStream an upstream A2A SSE response as parsed JSON-RPC event dicts.

    Upstream HTTP/JSON-RPC errors are surfaced as a single JSON-RPC error event
    so the caller can relay them instead of breaking the stream.
    r   r»   )Ú_normalize_a2a_jsonrpc_responser½   rÀ   útext/event-stream)r¿   ÚAcceptrÁ   NrÂ   ÚPOSTrÄ   T)Ústreamr¥   ©rœ   r    é¥€ÿÿr¡   r¢   zdata:)rÅ   r¼   Úlitellm.types.agentsrÒ   rÆ   r¾   rÇ   ÚclientÚbuild_requestÚsendrË   ÚareadrI   rX   rT   r³   rÉ   Úreason_phraseÚacloseÚaiter_linesÚstripry   Úlenr   )r·   r¸   rœ   r¹   rÐ   r¼   rÒ   r¾   rx   rÌ   Úasync_clientÚreqrÍ   Ú
error_bodyÚerror_eventr„   ÚlineÚstrippedrC   Úevents                       rK   Ú_a2a_sse_event_sourcerê   ò   s  è ø€ õ NÝDÝCð +Ø%ñð Ò˜Bð€Gñ
 ,Ø)×-Ñ-Ø˜4Ð ô€Gð "Ÿ.™.€LØ×+Ñ+¨F°IÀDÐRYÐ+ÓZ€CØ$×)Ñ)¨#°dÐ)Ó;×;€DðØ�ŠØ&*§j¡j£l× 2ˆJØ7;ˆKð#Ü $§
¡
¨:Ó 6�Ü˜f¤dÔ+°¸6Ñ0AÙ"AÀ&ÐU_Ô"`�Kð ò Ø Ø Ø"(°T×5GÑ5GÑHñ"ó ð
 ð  �k‰k‹m×Ñð ×*Ñ*Ó,÷ 	ð 	�$Ø—z‘z“|ˆHØ×&Ñ& wÔ/ØØœs 7›|˜~Ð.×4Ñ4Ó6ˆGÙØðÜŸ
™
 7Ó+�ô ˜%¤Ô&Ü.¨u°nÐQ[Ô\�ØŒKð= <ùð !3úô ò #Ø"’ð#úð. 	øð	ùô ò Ùðúñ -ð �k‰k‹m×Òøˆd�k‰k‹m×Òüsß   ‚A+G9Á-FÁ.G9Á3G ÂFÂG Â3F ÃG Ã(G9Ã;F,Ã<G9ÄG ÄF?ÄF.ÄF?ÄAG ÅF0Å1$G ÆG9ÆG ÆF)Æ&G Æ(F)Æ)G Æ,G9Æ.F?Æ0	F<Æ9G Æ;F<Æ<G ÇG9ÇGÇG9ÇG6Ç/G2Ç0G6Ç6G9Ú	generatorc                 ó–   — t        t        j                  «      }|€t        | d¬«      S t        t	        | |t
        ¬«      dt        ¬«      S )NrÓ   ©Ú
media_type)Ú
ping_chunk)rî   rx   )r!   ÚlitellmÚ#sse_keepalive_ping_interval_secondsr   r"   r    r+   )rë   Úkeepalive_intervals     rK   Ú_sse_streaming_responseró   0  sJ   € ô !:¼'×:eÑ:eÓ fÐØÐ!Ü  Ð7JÔKÐKÜÜ,¨YÐ8JÔWgÔhØ&Ü&ôð rM   Úproxy_logging_objc              ƒ   ó   ‡‡‡K  — t        | |‰||¬«      Šdt        dt        fd„Šdt        dt        fˆfd„}|�,|�*|�(ddlm}	 |	j                  ‰|||‰|¬	«      }
t        |
«      S dt        t        d f   fˆˆfd
„} |«       }
t        |
«      S ­w)N)rœ   r¹   rÐ   rN   rD   c                 ó4   — dt        j                  | «      › d�S )NrF   rG   rH   r\   s    rK   Ú_serialize_chunkz._forward_jsonrpc_sse.<locals>._serialize_chunkR  s   € ØœŸ
™
 5Ó)Ð*¨$Ð/Ð/rM   Ú	proxy_excc                 óp   •— dt        j                  d‰dt        | dt        | «      «      dœdœ«      z   dz   S )NrF   r    rØ   rž   r¡   r¢   rG   )rI   rJ   ÚgetattrrU   ©rø   rœ   s    €rK   Ú_serialize_errorz._forward_jsonrpc_sse.<locals>._serialize_errorU  sI   ø€ àÜ�j‰jà$Ø$à &Ü#*¨9°iÄÀYÃÓ#Pññó	ñ
ð ñð	
rM   r   ©ÚProxyBaseLLMRequestProcessing©Úresponser†   r‹   rô   Úserialize_chunkÚserialize_errorc                 óB   •K  — ‰2 3 d {  –—† }  ‰| «      ­–— Œ7 Œ6 y ­w©Nrf   )rN   r÷   Úevent_sources    €€rK   Ú_passthroughz*_forward_jsonrpc_sse.<locals>._passthroughw  s)   øè ø€ Ø+÷ .ð .�eÙ& uÓ-Ô-ð.ø™|ùs   ƒ†Š‹Ž›�)rê   ÚobjectrU   Ú'litellm.proxy.common_request_processingrþ   Úasync_streaming_data_generatorr   ró   )r·   r¸   rœ   r¹   rô   r†   r‹   rÐ   rü   rþ   rë   r  r÷   r  s     `         @@rK   Ú_forward_jsonrpc_sser
  @  sÁ   úè ø€ ô 0ØØØØ#Ø%ô€Lð0¤ð 0¬3ó 0ð
¤Fð 
¬sõ 
ð  Ð$Ð):Ð)FÈ<ÐKcõ	
ð 0M×/kÑ/kØ!Ø/Ø%Ø/Ø,Ø,ð 0ló 0
ˆ	ô  # 9Ó-Ð-ð	.¤N´3¸°9Ñ$=ö 	.ñ !“Nˆ	ä" 9Ó-Ð-ùs   …B	B)rŒ   r†   r‹   rô   rÐ   Úapi_baser±   ÚmetadataÚproxy_server_requestc             ƒ   ó˜  ‡ ‡‡‡‡‡‡‡‡	‡
‡‡‡‡‡‡‡K  — ddl mŠ ddlm} |sˆfd„}t	         |«       d¬«      S ddlmŠ ‰duxr
 ‰	duxr ‰
duŠ	 t        |«      Šdt        dt        fˆˆfd„Šˆˆˆˆˆ ˆˆˆˆˆ
ˆˆ	ˆˆˆfd„}t         |«       «      S # t        t        f$ r'}d	|› �Šˆˆfd
„}t	         |«       d¬«      cY d}~S d}~ww xY w­w)aÜ  Handle message/stream method via SDK functions.

    The A2A JSON-RPC binding streams responses as SSE (text/event-stream) with
    each JSON-RPC object framed as ``data: <json>

``, matching the official
    a2a-sdk client which rejects any other Content-Type. When user_api_key_dict,
    request_data, and proxy_logging_obj are provided, events are routed through
    common_request_processing.async_streaming_data_generator so proxy hooks and
    cost injection apply.
    r   )Úasend_message_streaming©ÚA2A_SDK_AVAILABLEc                 ó8   •K  — t        d‰ dddœdœ«      ­–— y ­w)Nr    rØ   z)Server error: 'a2a' package not installedr¡   r¢   ©rL   r×   s   €rK   Ú_error_streamz-_handle_stream_message.<locals>._error_stream�  s*   øè ø€ Üà$Ø$à &Ø#Nññó	ô 	ùó   ƒrÓ   rí   )ÚSendStreamingMessageRequestNúInvalid params: c                 ó8   •K  — t        d‰d‰ dœdœ«      ­–— y ­w)Nr    é¦€ÿÿr¡   r¢   r  )Úinvalid_params_messagerœ   s   €€rK   Ú_invalid_params_streamz6_handle_stream_message.<locals>._invalid_params_stream´  s(   øè ø€ Üà$Ø$Ø&,Ð9OÑPñóô ùr  rN   rD   c                 ól   •— t        | «      }t        |t        «      rt        |‰‰¬«      }t	        |«      S )Nr×   )r]   rT   r³   r   rL   )rN   Úobjrœ   rÐ   s     €€rK   Ú
_sse_chunkz*_handle_stream_message.<locals>._sse_chunk¿  s/   ø€ Ü  Ó'ˆÜ�cœ4Ô Ü(¨¨nÈÔTˆCÜ˜#‹ÐrM   c            	     ó  •K  — 	  ‰‰‰¬«      }  ‰| ‰‰‰‰‰‰
¬«      }‰rD‰�B‰�@‰�>ddl m} dt        dt        fˆfd„}|j	                  |‰‰‰‰	|¬«      2 3 d {  –—† }|­–— Œ|2 3 d {  –—† } ‰	|«      ­–— Œ7 Œ!6 y 7 Œ6 y # t
        $ rr}t        j                  d	|«       ‰r'‰�%‰�#‰�!‰j                  ‰|‰¬
«      ƒ d {  –—†7  }|�|}t        |t        «      r‚ t        d‰dd|› �dœdœ«      ­–— Y d }~y d }~ww xY w­w)N©r¤   r^   )rp   r  r±   r¨   r  r  rŒ   r   rý   rø   rD   c                 óD   •— t        d‰dt        | dd| › �«      dœdœ«      S )Nr    rØ   rž   úStreaming error: r¡   r¢   )rL   rú   rû   s    €rK   Ú
_sse_errorzC_handle_stream_message.<locals>.stream_response.<locals>._sse_errorß  s;   ø€ Ü%à',Ø",à(.Ü+2Ø$-Ø$-Ø&7¸	°{Ð$Có,"ñ&ñóð rM   rÿ   z Error streaming A2A response: %s©r†   Úoriginal_exceptionr‹   r    rØ   r"  r¡   r¢   )r  rþ   r  rU   r	  rÉ   r   Ú	exceptionÚpost_call_failure_hookrT   r   rL   )Úa2a_requestÚ
a2a_streamrþ   r#  rç   rN   rm   Útransformed_exceptionr  r  rŒ   r¨   r  r  r±   Úmessage_send_paramsr  rô   r  r‹   rœ   Úuse_proxy_hooksr†   s           €€€€€€€€€€€€€€€rK   Ústream_responsez/_handle_stream_message.<locals>.stream_responseÅ  s~  øè ø€ ðO	Ù!<ØØ*ô"ˆKñ !8Ø#Ø!Ø-Ø!Ø!Ø%9Ø$7ô!ˆJñ  Ø%Ð1Ø Ð,Ø%Ð1õð¬&ð ´Sõ ð  #@×"^Ñ"^Ø'Ø&7Ø!-Ø&7Ø$.Ø$.ð #_ó #÷ ð ˜$ð ”Jà#-÷ ,ð ,˜%Ù$ UÓ+Ô+ðøñ #ð,ø¡:øäò 	Ü ×*Ñ*Ð+MÈqÔQáØ%Ð1Ø%Ð1Ø Ð,à5F×5]Ñ5]Ø&7Ø'(Ø!-ð 6^ó 6÷ 0ð 0Ð%ð
 )Ð4Ø-�AÜ˜!œ]Ô+ØÜà$Ø$à &Ø%6°q°cÐ#:ññó	÷ 	ð 	ûð#	üs‰   ƒD…AB ÁA=ÁA;ÁA=Á	B Á&BÁ*A?Á+BÁ.B Á;A=Á=B Á>DÁ?BÂB ÂDÂ	C>Â5C9ÃCÃ2C9Ã4DÃ9C>Ã>D)Úlitellm.a2a_protocolr  Úlitellm.a2a_protocol.mainr  r   rg   r  rn   r   rk   r  rU   ró   )r  rœ   r^   r±   r¨   r  r  rŒ   r†   r‹   rô   rÐ   r  r  rm   r  r-  r  r  r  r  r+  r,  s   `` `````````     @@@@@@rK   Ú_handle_stream_messager0  €  sÔ   ÿÿøè ø€ õ0 =Ý;áô
	ô !¡£Ð=PÔQÐQåAà'¨tÐ3Òr¸ÈDÐ8PÒrÐUfÐnrÐUr€Oð[Ü%?ÀÓ%GÐðœ&ð ¤Sö ÷P÷ Pò Pôd #¡?Ó#4Ó5Ð5øôM œZÐ(ò [Ø*:¸1¸#Ð(>Ðõ	ô !Ñ!7Ó!9ÐFYÔZÕZûð[üs5   “<C
ÁB Á6C
ÂCÂ CÂ<CÂ=C
ÃCÃC
z+/a2a/{agent_id}/.well-known/agent-card.jsonz[beta] A2A Agents)ÚtagsÚdependenciesz&/a2a/{agent_id}/.well-known/agent.jsonc              ƒ   óê  K  — ddl m} 	 t        | «      ƒ d{  –—† }|€t        dd| › d�¬«      ‚|j	                  |j
                  |¬«      ƒ d{  –—† }|st        d	d| › d
�¬«      ‚|j                  st        dd| › d�¬«      ‚t        t        |j                  «      d| › �¬«      }t        |j                  «      }||d<   |j                  d«      }t        |t        «      r
|r||d   d<   t        ||«      }	t        ||	«      }t!        j"                  d| |«       t%        |¬«      S 7 �Œ7 ŒÚ# t        $ r ‚ t&        $ r1}
t!        j(                  d|
«       t        dt        |
«      ¬«      ‚d}
~
ww xY w­w)aD  
    Get the agent card for an agent (A2A discovery endpoint).

    Supports both standard paths:
    - /.well-known/agent-card.json
    - /.well-known/agent.json

    The URL in the agent card is rewritten to point to the LiteLLM proxy,
    so all subsequent A2A calls go through LiteLLM for logging and cost tracking.
    r   ©ÚAgentRequestHandlerNé”  r°   ú' not foundr€   ©r¨   r   é“  úC' is not allowed for your key/team. Contact proxy admin for access.z' has no agent card configuredúa2a/©Úrouter|   ÚsupportedInterfacesz0Returning agent card for '%s' with proxy URL: %s©r¦   zError getting agent card: %séô  )Ú;litellm.proxy.agent_endpoints.auth.agent_permission_handlerr5  r¬   r   Úis_agent_allowedr¨   rv   r$   rU   Úbase_urlr   rw   rT   Úlistr{   r   r   Údebugr   rÉ   r&  )r¨   rp   r†   r5  ro   Ú
is_allowedÚ	proxy_urlÚ
agent_cardÚ
interfacesrÐ   rm   s              rK   Úget_agent_cardrJ    s�  è ø€ õ2ð&<Ü'¨Ó1×1ˆØˆ=Ü¨C¸'À(ÀÈ;Ð8WÔXÐXð #6×"FÑ"FØ—^‘^Ø/ð #Gó #
÷ 
ˆ
ñ ÜØØ   
Ð*mÐnôð ð
 ×&Ò&ÜØØ   
Ð*HÐIôð ô
 *¬#¨g×.>Ñ.>Ó*?ÈÈhÈZÐGXÔYˆ	Ü˜e×5Ñ5Ó6ˆ
Ø%ˆ
�5ÑØ&ŸN™NÐ+@ÓAˆ
Ü�j¤$Ô'©JØ#,ˆJ�q‰M˜%Ñ Ü /°°wÓ ?ˆÜ)¨*°nÓEˆ
ä×"Ñ"Ð#UÐW_ÐajÔkÜ JÔ/Ð/ð? 2ùð

ùô8 ò ØÜò <Ü×&Ñ&Ð'EÀqÔIÜ¨´C¸³FÔ;Ð;ûð<üsK   ‚E3ŠD- ˜D(™7D- ÁD+ÁCD- Ä'E3Ä(D- Ä+D- Ä-E0Ä?,E+Å+E0Å0E3z/a2a/{agent_id}z/a2a/{agent_id}/message/sendz/v1/a2a/{agent_id}/message/sendÚfastapi_responsec              ƒ   ó  K  — ddl m} ddlm}m}m}m} i }	|	}
	 |j                  «       ƒ d{  –—† }	|	}
t        j                  d| |	«       |	j                  d«      dk7  rt        |	j                  d«      d	d
«      S |	j                  d«      }|	j                  d«      }|}|	j                  di «      }|rt        j                  ||«      }t        |t        «      rVg }|j                  «       D ])  \  }}|t         v sŒ|dvsŒ|j#                  |«       ||	|<   Œ+ |D ]  }|j%                  |«       Œ t'        | «      ƒ d{  –—† }|€t        |dd| › d�d«      S t)        |||«      }|j+                  |j,                  |¬«      ƒ d{  –—† }|st/        dd| › d�¬«      ‚t1        ||«       |j2                  xs i }|j                  d«      }|j                  d| «      }|j4                  xs i }|j                  d«      }|r$|j6                  rddlm} i |¥||j6                  i¥}|s|st        |dd| › d�d«      S t        j<                  d| |xs d«       d|	vri |	d<   |j,                  |	d   d<   |j,                  |	d<   |	j?                  d |› �d!d"œ«       dd#l m!}  ||	¬$«      }|jE                  |||||d%|¬&«      ƒ d{  –—† \  }}|}
t        |jF                  xs i «      }t        |jH                  «      } | j                  «       D �!�"ci c]  \  }!}"|!jK                  «       |"“Œ }#}!}"i }$|jL                  rC|jL                  D ]4  }%tO        |%«      }&|#j                  |&jK                  «       «      }'|'€Œ0|'|$|&<   Œ6 |j,                  jK                  «       |jP                  jK                  «       fD ]H  }(d'|(› d(�})|#j                  «       D ]-  \  }}'|jS                  |)«      sŒ|tU        |)«      d }%|%sŒ)|'|$|%<   Œ/ ŒJ tW        |$xs d|xs d¬)«      }*|j                  tX        «      rt[        |«      ƒ d{  –—† }+|+r
i |*xs i ¥|+¥}*|j                  d*«      },|,rVt        |,t\        «      s|,g},|j                  d*«      xs g }-t        |-t\        «      s|-g}-|-|,D �.cg c]	  }.|.|-vsŒ|.‘Œ c}.z   |d*<   |d+k(  �r
dd,l/m0}/ dd-l1m2}0 |0st        |d.d/d«      S dd0l3m4}1 	 tk        |«      }2 |1|�|nd3|2¬4«      }4d5|_8         |/|4|||j,                  |j                  di «      |j                  d6«      ||*¬7«      ƒ d{  –—† }5	 |js                  |||5¬8«      ƒ d{  –—† }5tu        |d9d«      }6|6�d|_;         |6«        	 ty        |5d:«      r|5j{                  d;d5¬<«      nt        |5t        «      r|5ni }7t}        t        |7|d+¬=«      ¬>«      S |d?k(  rLt�        ||�|nd3|||j,                  |j                  di «      |j                  d6«      |*||||¬@«      ƒ d{  –—† S |dAv �r|st        |dd| › d�d«      S t        |t        «      rtƒ        |||¬=«      }|dBk(  r¢t        |t        «      st/        dCdD¬«      ‚|j                  dEi «      }8dE|v rt        |8t        «      st/        dCdF¬«      ‚|j                  d«      |8j                  d«      fD ]-  }9|9sŒt        |9tN        «      st/        dCdG¬«      ‚t…        |9«       Œ/ d|||dHœ}:t‡        |||*¬I«      };t‰        ||:|;¬J«      ƒ d{  –—† }<|dKk(  r‹t        |<j                  dL«      t        «      rz|<dL   }=t‹        tO        |jŒ                  «      dM| › �¬N«      }>d|=v r|>|=d<   |=j                  dO«      }?t        |?t\        «      r
|?r|>|?d   d<   t�        |=|«      |<dL<   nt        |<||¬=«      }<ddPlHmI}@ |@j•                  |<|¬Q«      }5|js                  |||5¬8«      ƒ d{  –—† }5t}        ty        |5d:«      r|5j{                  d;d5¬<«      ¬>«      S |5¬>«      S |dRk(  rb|st        |dd| › d�d«      S t        |t        «      rtƒ        |||¬=«      }d|||dHœ}:t‡        |||*¬I«      }At—        ||:||A||||¬S«      ƒ d{  –—† S t        |dTdU|› d�«      S 7 �Œ`7 �ŒS7 �Œ7 �ŒÙc c}"}!w 7 �Œqc c}.w # tl        tn        f$ r}3t        |d1d2|3› �«      cY d}3~3S d}3~3ww xY w7 �Œ¦7 �ŒŒ# tu        |d9d«      }6|6�d|_;         |6«        w w xY w7 �Œø7 �Œò7 �Œ"7 Œ�# t.        $ r ‚ t˜        $ rn}3t        jš                  dV|3«       	 |j�                  ||3|
¬W«      ƒ d{  –—†7   n# t˜        $ r Y nw xY wt        |	j                  d«      d.dX|3› �d«      cY d}3~3S d}3~3ww xY w­w)YzË
    Invoke an agent using the A2A protocol (JSON-RPC 2.0).

    Supported methods:
    - message/send: Send a message and get a response
    - message/stream: Send a message and stream the response
    r   r4  )Úgeneral_settingsÚproxy_configrô   ÚversionNzA2A request for agent '%s': %sr£   r    r¤   i¨€ÿÿz&Invalid Request: jsonrpc must be '2.0'Úmethodr^   >   r¤   r  i ƒÿÿr°   r7  r6  r8  r9  r:  r€   r|   ÚnameÚcustom_llm_provider)ÚA2A_USER_API_KEY_HASH_PARAMz' has no URL configuredr@  z(Proxying A2A request to agent '%s' at %szcompletion-bridger  r¨   z
a2a_agent/Ú	a2a_agent)ÚmodelrR  rý   )ÚdataÚasend_message)rp   rM  r†   rô   rN  Ú
route_typerO  zx-a2a-ú-rŽ   Ú
guardrailsr,   )rW  r  rØ   zDServer error: 'a2a' package not installed. Please install 'a2a-sdk'.)rj   r  r  re   r   Tr  )rp   r  r±   r¨   r  r  Úlitellm_logging_objrŒ   )r†   rV  r   Ú_enqueue_deferred_loggingrP   rI   rQ   )rP  r?  r-   )r  rœ   r^   r±   r¨   r  r  rŒ   r†   r‹   rô   rÐ   >   r.   r/   r0   r3   r2   r4   r6   r5   r2   r   zparams must be an objectÚpushNotificationConfigz(pushNotificationConfig must be an objectz&Push notification URL must be a string)r£   r¤   rP  r^   )r†   r‹   rŒ   )r¹   r6   rÎ   r;  r<  r>  )ÚLiteLLMSendMessageResponser×   r1   )rœ   r¹   rô   r†   r‹   rÐ   i§€ÿÿzMethod 'zError invoking agent: %sr$  zInternal error: )OrA  r5  Úlitellm.proxy.proxy_serverrM  rN  rô   rO  rI   r   rE  rw   r§   rB   rT   r³   r’   r%   ÚappendÚpopr¬   r{   rB  r¨   r   r¶   rv   r±   Úapi_keyÚ6litellm.a2a_protocol.litellm_completion_bridge.handlerrS  Úinfor”   r  rþ   Ú common_processing_pre_call_logicr�   rx   r“   r¹   rU   Ú
agent_namery   râ   r   r   r   rD  r.  rW  r/  r  rg   rj   rn   r   rk   Ú_defer_async_loggingÚpost_call_success_hookrú   r\  r[   rP   r   r   r0  r   r…   r›   rÏ   r$   rC  r   rÙ   r^  Ú	from_dictr
  rÉ   r&  r'  )Br¨   rp   rK  r†   r5  rM  rN  rô   rO  r¸   r‹   rœ   rq   rP  r^   Úparams_to_removeÚkeyÚvaluero   rÐ   rF  rv   r·   rf  r±   rR  rS  rþ   Ú	processorrV  Úlogging_objr�   Úraw_headersr•   r–   Ú
normalizedr�   Úheader_nameÚheader_name_strÚvalÚaliasÚprefixrŒ   Údatabricks_authÚ_agent_guardrailsÚ_existing_guardrailsÚgrW  r  rj   r+  rm   r(  r   Ú_enqueue_fnÚresponse_dictÚpush_configÚcallback_urlÚforward_bodyÚcaller_headersrÎ   ÚcardrG  rI  r^  Ússe_caller_headerssB                                                                     rK   Úinvoke_agent_a2ar‚  `  s  è ø€ õ8÷ó ð €DØ#'€LðmSØ—\‘\“^×#ˆØˆä×"Ñ"Ð#CÀXÈtÔTð �8‰8�IÓ %Ò'Ü! $§(¡(¨4£.°&Ð:bÓcÐcà(,¯©°«ˆ
Ø-1¯X©X°hÓ-?ˆØ,ˆØ—‘˜( BÓ'ˆáÜ$×(Ñ(¨°Ó8ˆFä�fœdÔ#ð ')ÐØ$Ÿl™l›nò &‘
��UØÔ,Ò,°Ð<NÒ1NØ$×+Ñ+¨CÔ0Ø %�D˜’Ið&ð (ò  �Ø—
‘
˜3•ð ô (¨Ó1×1ˆØˆ=Ü! *¨f¸À¸zÈÐ6UÐWZÓ[Ð[ä /°°wÀÓ Pˆà"5×"FÑ"FØ—^‘^Ø/ð #Gó #
÷ 
ˆ
ñ ÜØØ   
Ð*mÐnôð ô
 	" %¨Ô1ð $)×#:Ñ#:Ò#@¸bÐØ,×0Ñ0°Ó7ˆ	Ø-×1Ñ1°&¸(ÓCˆ
ð -2×,@Ñ,@Ò,FÀBˆØ%3×%7Ñ%7Ð8MÓ%NÐñ
 Ð#4×#<Ò#<õðØ ðà+Ð->×-FÑ-FñˆNñ Ñ!4Ü! *¨f¸À¸zÐI`Ð6aÐcfÓgÐgä×!Ñ!Ø6¸À)ÒBbÐObô	
ð
 ˜TÑ!Ø!ˆD�ÑØ',§~¡~ˆˆZÑ˜Ñ$Ø Ÿ>™>ˆˆZÑà�‰à% j \Ð2Ø'2ñô	
õ	
ñ 9¸dÔCˆ	Ø"+×"LÑ"LØØ-Ø/Ø/Ø%Ø&Øð #Mó #
÷ 
Ñˆˆkð ˆô 48¸×8LÑ8LÒ8RÐPRÓ3Sˆä! '§/¡/Ó2ˆØ6A×6GÑ6GÓ6I×J©d¨a°˜QŸW™W›Y¨™\ÐJˆ
ÑJà13ˆð ×ÒØ$×2Ñ2ò ;�Ü"% kÓ"2�Ø —n‘n _×%:Ñ%:Ó%<Ó=�Ø‘?Ø7:�O OÒ4ð	;ð —n‘n×*Ñ*Ó,¨e×.>Ñ.>×.DÑ.DÓ.FÐGò 	;ˆEØ˜e˜W AÐ&ˆFØ&×,Ñ,Ó.ò ;‘��SØ—>‘> &Õ)Ø"%¤c¨&£k mÐ"4�KÚ"Ø7:˜¨Ò4ñ	;ð	;ô 2Ø+Ò3¨tØ)Ò1¨Tô
Ðð ×ÑÔ4Ô5Ü+MÈnÓ+]×%]ˆOÙð'Ø*Ò0¨bð'à%ð'Ð#ð +×.Ñ.¨|Ó<ÐÙÜÐ/´Ô6Ø%6Ð$7Ð!Ø)-¯©°,Ó)?Ò)EÀ2Ð ÜÐ2´DÔ9Ø(<Ð'=Ð$Ø!5ÐDUÖ8w¸qÐYZÐbvÒYvºÒ8wÑ!wˆD�Ñð �^Ó#Ý:ÝCá$Ü%ØØØZØó	ð õ AðRÜ-GÈÓ-OÐ#ñ "4Ø!+Ð!7‘:¸RØ*ô"ˆKð 04ˆKÔ,Ù*Ø#Ø"Ø-ØŸ™ØŸ™ *¨bÓ1Ø%)§X¡XÐ.DÓ%EØ$/Ø$7ô	÷ 	ˆHð
"Ø!2×!IÑ!IØ&7ØØ%ð "Jó "÷ �ô &-¨[Ð:UÐW[Ó%\�ØÐ*Ø<@�KÔ9Ù•Mô ˜8 \Ô2ð ×#Ñ#¨¸dÐ#ÔCô ˜h¬Ô-ñ àð ô  Ü2Ø!Ø"Ø)ôôð ð Ð'Ò'Ü/Ø"Ø)3Ð)?™:ÀRØØ-ØŸ™ØŸ™ *¨bÓ1Ø%)§X¡XÐ.DÓ%EØ$7Ø"3Ø!Ø"3Ø-ô÷ ð ð ð 	
ò 	
ñ Ü% j°&¸GÀHÀ:ÐMdÐ:eÐgjÓkÐkÜ˜&¤$Ô'Ü1°&¸.ÐQWÔX�ØÐ;Ò;Ü! &¬$Ô/Ü'Ø$'Ø9ôð ð &,§Z¡ZÐ0HÈ"Ó%M�Ø+¨vÑ5¼jÈÔVZÔ>[Ü'Ø$'ØIôð ð &,§Z¡Z°Ó%6¸¿¹ÈÓ8NÐ$Oò B�LÙ'Ø Ü% l´CÔ8Ü+Ø(+Ø#Kôð ô 4°LÕAðBð !Ø Ø Ø ñ	/ˆLô %8Ø"3Ø!Ø$7ô%ˆNô
 ,¨I°|ÐSaÔb×bˆFØÐ=Ò=Ü˜fŸj™j¨Ó2´DÔ9Ø"(¨Ñ"2�DÜ'5´c¸'×:JÑ:JÓ6KÐUYÐZbÐYcÐSdÔ'e�Ið  ‘}Ø&/˜˜U™Ø(,¯©Ð1FÓ(G�JÜ! *¬dÔ3¹
Ø/8˜
 1™ eÑ,Ü';¸DÀ.Ó'Q�F˜8Ò$ä3°F¸NÐSYÔZ�ÝGà1×;Ñ;¸FÈzÐ;ÓZˆHØ.×EÑEØ"3ØØ!ð Fó ÷ ˆHô
  äKRÐS[Ð]iÔKj�H×'Ñ'¨VÀ$Ð'ÓGôð àpxôð ð Ð*Ò*ÙÜ% j°&¸GÀHÀ:ÐMdÐ:eÐgjÓkÐkÜ˜&¤$Ô'Ü1°&¸.ÐQWÔX�à Ø Ø Ø ñ	ˆLô )<Ø"3Ø!Ø$7ô)Ðô
 .ØØØ%Ø0Ø"3Ø"3Ø!Ø-ô	÷ 	ð 	ô " *¨f¸ÀÀÈÐ6TÓUÐUð}
 $ùðB 2ùð
ùð|
ûó Kð> &^ûò$ 9xøô$ $¤ZÐ0ò RÜ% j°&Ð<LÈQÈCÐ:PÓQÕQûðRúð	ùðúô &-¨[Ð:UÐW[Ó%\�ØÐ*Ø<@�KÔ9Ù•Mð +úð(ùðx cùð&ùð6	ùô ò ØÜò 
SÜ×&Ñ&Ð'AÀ1ÔEð	Ø#×:Ñ:Ø"3Ø#$Ø)ð ;ó ÷ ò øô
 ò 	Ùð	úä˜dŸh™h t›n¨fÐ8HÈÈÐ6LÈcÓRÕRûð
Süs?  ‚f
šd ­b®Ad Á:f
Á;A>d Ã:d Ã?>d Ä=bÄ>d Åf
Å-d ÆbÆB2d È6f
È7Bd Ê=bÊ>A
d ÌbÌ#Ad Í0A+d Ïd Ï-Ad Ð.bÐ/A#d Ò	b"Òb"Ò )d Ó	f
Ó
d Ób' ÓAd Ô-cÔ.d Ô3c Õ
cÕc ÕA(d Ö7f
Ö8Ad Øc<Ød Øf
Ø	d Ø!f
Ø"C+d Üc?ÜCd ß dß!,d àf
àd àf
àd à-f
à.A	d á7dá8d á;f
á<d âf
âd âd âd âd âd â"d â'câ6cãcãd ã
f
ãcãd ãc ã c9ã9d ã?d äd äd äfäfä0eåe
åeåfå	eåfåeå"få<få=f
æfæf
r  )r   )NNrt   )NNNNNrt   )NNNN)WÚ__doc__rI   Úcollections.abcr   r   Úcopyr   Útypesr   Útypingr   r   r	   Úurllib.parser
   Úfastapir   r   r   r   r   Úfastapi.responsesr   r   Úpydanticr   rð   Úlitellm._loggingr   Ú$litellm.litellm_core_utils.url_utilsr   r   Úlitellm.proxy._typesr   Ú!litellm.proxy.a2a.version_convertr   r   r   r   r   Ú.litellm.proxy.agent_endpoints.databricks_oauthr   r   Ú#litellm.proxy.agent_endpoints.utilsr   Ú$litellm.proxy.auth.user_api_key_authr   Ú(litellm.proxy.common_utils.sse_keepaliver    r!   r"   Úlitellm.proxy.utilsr#   r$   Úlitellm.types.utilsr%   rg   r'   rÙ   r(   r)   Ú__annotations__r+   rU   rB   r  rL   r]   r³   rn   r{   r…   rŠ   r›   Úintr§   r¬   r¶   rÏ   rê   ró   r
  r0  rw   rJ  rÈ   r‚  rf   rM   rK   ú<module>r˜     s7  ðòó ß 3Ý Ý "ß ,Ñ ,Ý !ç HÕ Hß =Ý $ã Ý 1ß HÝ /÷õ ÷õ DÝ B÷ñ ÷
 =Ý 2áÝ7å2á“€ˆÓ ñ 4Dà#Ø!ñó4Ð ˜˜g c¨3 hÑ/Ñ0ó ð "Ø,ØØØ Ø*Ø(JØ%GØ'JØ(MØ@ñ-€��w˜s C˜xÑ(Ñ)ó ð.˜ð . 3ó .ð
˜fð ¨ó ð = t¨C°¨H¡~ð =Ð:Mó =ñ$W˜?ð W°Wð WÈsÐUYÉzð WÐeoó Wð
C¨ð 
C°ó 
Cð°ð À4ÈÈSÈÁ>ó ðØ%ðà˜#˜v˜+Ñ&ðð !  c Ñ*¨TÑ1ðð ˆS�#ˆXÑ˜Ñó	ð. ñ	Øðà
ðð ðð ð	ð
 óð"7˜sð 7Ð'=ó 7ð
 _ð 
¸wð 
È4ó 
ð( /3ñØðà
ˆs�Fˆ{Ñ
ðð ˜3 ˜8Ñ$ tÑ+ðð 
ˆ#ˆsˆ(�^ó	ð6 $(Ø.2Ø!&ñ;Øð;à
�#�v�+Ñ
ð;ð �c‘	˜DÑ ð;ð ˜3 ˜8Ñ$ tÑ+ð	;ð
 ð;ð �G˜C ˜KÑ(¨$Ð.Ñ/ó;ð| ~°c¸4°iÑ'@ð ÐEVó ð& $(Ø.2Ø-1Ø/3Ø-1Ø!&ñ=.Øð=.à
�#�v�+Ñ
ð=.ð �c‘	˜DÑ ð=.ð ˜3 ˜8Ñ$ tÑ+ð	=.ð
 $ dÑ*ð=.ð &¨Ñ,ð=.ð �s˜F�{Ñ# dÑ*ð=.ð ð=.ð ó=.ðH 04ØØ)-Ø59ðW6ð 26Ø/3Ø-1Ø-1Ø!&òW6Ø�D‰jðW6à�c‘	ðW6ð ��f�ÑðW6ð ˜˜f˜Ñ%¨Ñ,ð	W6ð
 �D‰jðW6ð �3˜�;Ñ $Ñ&ðW6ð ˜s F˜{Ñ+¨dÑ2ðW6ð ˜c 3˜h™¨$Ñ.ðW6ð &¨Ñ,ðW6ð �s˜F�{Ñ# dÑ*ðW6ð $ dÑ*ðW6ð ðW6ð óW6ðt ‡�Ø1Ø
Ð	ÙÐ+Ó,Ð-ð ó ð
 ‡�Ø,Ø
Ð	ÙÐ+Ó,Ð-ð ó ñ )0Ð0AÓ(Bñ9<Øð9<àð9<ð &ò9<óóð9<ðx ‡�ØØ
Ð	ÙÐ+Ó,Ð-ð ó ð
 ‡�Ø"Ø
Ð	ÙÐ+Ó,Ð-ð ó ð
 ‡�Ø%Ø
Ð	ÙÐ+Ó,Ð-ð ó ñ )0Ð0AÓ(Bñ	FSØðFSàðFSð ðFSð &ò	FSóóóñFSrM   