§
    éŽ’j8  ã                  óV  — d Z ddlmZ ddlZddlZddlZddl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 ddlmZ ddlmZ  G d	„ d
ej        ej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Ze                     ¦   «          dS )uŒ  Base interfaces for connections in the Google Antigravity SDK.

A Connection is the SDK's public interface for interacting with an agent
backend, regardless of where the agent runs. Layer 2 APIs (Conversation,
AgentConfig) depend ONLY on this interface â€” never on transport details.

A ConnectionStrategy knows how to establish a Connection for a specific
backend type and how to tear it down.
é    )ÚannotationsN)ÚAnyÚAsyncIteratorÚCallableÚMappingÚSequence)Útypes)Úhooks)Úpolicy)Útriggersc                  óö  ‡ — e Zd ZU dZ ej        d¬¦  «        ZdZded<    ej	        d„ ¬¦  «        Z
d	ed
<    ej	        e¬¦  «        Zded<    ej	        e¬¦  «        Zded<    ej	        e¬¦  «        Zded<    ej	        e¬¦  «        Zded<    ej	        e¬¦  «        Zded<    ej	        e¬¦  «        Zded<   dZded<   dZded<   dZded<   dZded<   dZded<    ej	        e¬¦  «        Zded<    ej	        e¬¦  «        Zd ed!<   dZd"ed#<   dZd$ed%<   dZd&ed'<    ej        d#d(¬)¦  «        edBd-„¦   «         ¦   «         Z ej        d.¬)¦  «        dCd0„¦   «         Z  ej        d¦  «        edDd1„¦   «         ¦   «         Z! ej        d.¬)¦  «        dCd2„¦   «         Z" ej        d¦  «        d3„ ¦   «         Z# ej        dd(¬)¦  «        ed4„ ¦   «         ¦   «         Z$dd5d6œdEˆ fd;„Z%dFd=„Z&e'j(        dGdA„¦   «         Z)ˆ xZ*S )HÚAgentConfigzßAbstract base class for agent configuration.

  Each ConnectionStrategy defines a concrete subclass with the
  config fields it needs. Agent introspects the config type to
  auto-dispatch to the correct strategy factory.
  T©Úarbitrary_types_allowedNz%str | types.SystemInstructions | NoneÚsystem_instructionsc                 ód   — t          j        t           j                             ¦   «         ¬¦  «        S )N)Úenabled_tools)r	   ÚCapabilitiesConfigÚBuiltinToolsÚ	read_only© ó    úWC:\Projects\DSCons\.venv\Lib\site-packages\google\antigravity\connections\connection.pyú<lambda>zAgentConfig.<lambda>5   s*   € �eÔ6ÝÔ*×4Ò4Ñ6Ô6ðñ ô € r   )Údefault_factoryztypes.CapabilitiesConfigÚcapabilitieszlist[Callable[..., Any] | str]Útoolszlist[policy.Policy]Úpolicieszlist[hooks_mod.Hook]r
   zlist[triggers_mod.Trigger]r   zlist[types.McpServerConfig]Úmcp_serversz	list[str]Ú
workspacesú
str | NoneÚconversation_idz$types.SessionContinuationMode | NoneÚsession_continuation_modeÚsave_dirÚapp_data_dirz6dict[str, Any] | type[pydantic.BaseModel] | str | NoneÚresponse_schemaÚskills_pathszlist[types.SubagentConfig]Ú	subagentsúDebugConfig | NoneÚdebug_configztypes.RetryConfig | NoneÚretry_configztypes.BudgetConfig | NoneÚbudget_configÚbefore)ÚmodeÚvr   Úreturnc                ó–   — t          |t          ¦  «        r|rt          ¦   «         nd S t          |t          ¦  «        rt          di |¤ŽS |S )Nr   )Ú
isinstanceÚboolÚDebugConfigÚdict©Úclsr/   s     r   Ú_validate_debug_configz"AgentConfig._validate_debug_configN   sT   € õ �!•TÑÔð *ØÐ)�[‰]Œ]ˆ] TÐ)Ý�!•TÑÔð ÝÐÐ˜1ÐÐÐØ€Hr   Úafterú'AgentConfig'c                óz   — | j         �3t          | j         t          ¦  «        r| j                              ¦   «          | S ©N)r*   r2   r4   Úapply_logging©Úselfs    r   Ú_apply_debug_settingsz!AgentConfig._apply_debug_settingsW   s>   € àÔÐ$­ØÔ�;ñ*ô *Ð$ð Ô×%Ò%Ñ'Ô'Ð'Ø€Kr   c                ó¼   — |rYt          |¦  «        dk     rt          dt          |¦  «        › �¦  «        ‚t          j        d|¦  «        st          d|›�¦  «        ‚|S )Né    z9conversation_id must be at least 32 characters long, got z^[a-zA-Z0-9-]+$z-conversation_id must match [a-zA-Z0-9-], got )ÚlenÚ
ValueErrorÚreÚmatchr6   s     r   Ú_validate_conversation_idz%AgentConfig._validate_conversation_id_   sy   € ð 	ð 
Ý	ˆQ‰Œ�"ŠˆÝØPÍÈAÉÌÐPÐPñ
ô 
ð 	
õ ŒXÐ(¨!Ñ,Ô,ð 
ÝØA¸AÐAÐAñ
ô 
ð 	
ð €Hr   c                óf   — | j         t          j        j        k    r| j        st          d¦  «        ‚| S )NzJconversation_id must be specified when session_continuation_mode is RESUME)r#   r	   ÚSessionContinuationModeÚRESUMEr"   rD   r>   s    r   Ú_validate_session_continuationz*AgentConfig._validate_session_continuationm   sD   € ð 	Ô&­%Ô*GÔ*NÒNÐNØÔ$ð 	Oõ ð0ñô ð ð €Kr   c                óö  — |€d S t          |t          ¦  «        r>	 t          j        |¦  «         |S # t          j        $ r}t          d¦  «        |‚d }~ww xY wt          |t          ¦  «        rt          j        |¦  «        S t          |t          ¦  «        r@t          |t          j        ¦  «        r&t          j        |                     ¦   «         ¦  «        S t          dt          |¦  «        j        › d�¦  «        ‚)Nz)response_schema string is not valid JSON.z$Unsupported response_schema format: z?. Expected a JSON string, dict, or pydantic.BaseModel subclass.)r2   ÚstrÚjsonÚloadsÚJSONDecodeErrorrD   r5   ÚdumpsÚtypeÚ
issubclassÚpydanticÚ	BaseModelÚmodel_json_schemaÚ__name__)r7   r/   Úexcs      r   Ú_validate_schemazAgentConfig._validate_schemay   s  € à€yØˆTÝ�!•SÑÔð OðOÝŒ
�1‰ŒˆØˆøÝÔ!ð Oð Oð OÝÐDÑEÔEÈ3ÐNøøøøðOøøøå�!•TÑÔð ÝŒZ˜‰]Œ]ÐÝ�!•TÑÔð /�z¨!­XÔ-?Ñ@Ô@ð /ÝŒZ˜×+Ò+Ñ-Ô-Ñ.Ô.Ð.Ý
ð	H­t°A©w¬wÔ/?ð 	Hð 	Hð 	Hñô ð s   ›1 ±AÁ AÁAc                óº   ‡‡— |€g S t          |t          t          t          f¦  «        rt          |t          t
          f¦  «        r|g}g Šˆˆfd„Š ‰|¦  «         ‰S )Nc                óÒ   •— t          | t          t          t          f¦  «        r.t          | t          t
          f¦  «        s| D ]} ‰|¦  «         Œd S ‰                     | ¦  «         d S r<   )r2   ÚlistÚtupler   rM   ÚbytesÚappend)ÚitemÚsub_itemÚflat_policiesÚflattens     €€r   rc   z/AgentConfig._validate_policies.<locals>.flatten—   s€   ø€ Ý	�D�4¥­Ð1Ñ	2Ô	2ð #½:Ø
••e�ñ<ô <ð #ð ð 	ð 	ˆHØ
ˆ'�(Ñ
Ô
Ð
Ð
ð	ð 	ð 	×Ò˜TÑ"Ô"Ð"Ð"Ð"r   )r2   r\   r]   r   rM   r^   )r7   r/   rb   rc   s     @@r   Ú_validate_policieszAgentConfig._validate_policiesŒ   s„   øø€ ð 	€yØ€iÝ�a�$¥¥xÐ0Ñ1Ô1ð µZØ	�C•ˆ<ñ6ô 6ð ð ˆ#€aØ€Mð#ð #ð #ð #ð #ð #ð €GˆA�J„J€JØÐr   F©ÚupdateÚdeeprf   úMapping[str, Any] | Nonerg   r3   c               ó  •— t          ¦   «                              ||¬¦  «        }|rdt          | j        ¦  «        |_        t          | j        ¦  «        |_        t          | j        ¦  «        |_        t          | j        ¦  «        |_        |S )Nre   )ÚsuperÚ
model_copyr\   r   r
   r   r   )r?   rf   rg   ÚcopiedÚ	__class__s       €r   rk   zAgentConfig.model_copy£   sr   ø€ õ ‰WŒW×Ò v°DÐÑ9Ô9€FØð ,Ý˜$œ*Ñ%Ô%€f„lÝ˜$œ*Ñ%Ô%€f„lÝ˜Tœ]Ñ+Ô+€f„oÝ˜Tœ]Ñ+Ô+€f„oØ€Mr   úlist[Callable[..., Any]]c           	     ó.  — g }i }| j         pg D ]t}t          |¦  «        rct          |dd¦  «        pt          |¦  «        j        }||v r ||         |k    rt          d|› d�¦  «        ‚ŒZ|||<   |                     |¦  «         Œu| j        pg D ]ˆ}|j         pg D ]|}t          |¦  «        rkt          |dd¦  «        pt          |¦  «        j        }||v r(||         |k    rt          d|› d|j        › d�¦  «        ‚Œb|||<   |                     |¦  «         Œ}Œ‰|S )zFReturns all callable custom tools across the main agent and subagents.rW   NzDuplicate custom tool name 'z4' detected across agent and subagent configurations.z&' detected across agent and subagent 'z' configurations.)	r   ÚcallableÚgetattrrR   rW   rD   r_   r(   Úname)r?   r   Ú
seen_namesÚtrr   ÚsubÚtools          r   Ú_get_all_custom_toolsz!AgentConfig._get_all_custom_tools´   s“  € à&(€EØ02€JØŒZÐ˜2ð ð ˆÝ	�!‰Œð 
Ý�q˜* dÑ+Ô+Ð?­t°A©w¬wÔ/?ˆØ�:ÐÐØ˜Ô Ò"Ð"Ýð0¨tð 0ð 0ð 0ñô ð ð #ð ˆ*�TÑ
Ø
�,Š,�q‰/Œ/ˆ/øØŒ~Ð# ð ð ˆØ”)�/˜rð ð ˆ$Ý�D‰>Œ>ð 
	Ý˜˜z¨4Ñ0Ô0ÐGµD¸±J´JÔ4Gˆ$Ø�ZÐÐØ˜$Ô 4Ò'Ð'Ýð@°ð @ð @Ø$'¤Hð@ð @ð @ñô ð ð (ð  $ˆJ�tÑØ�LŠL˜ÑÔÐøðð €Lr   Útool_runnerÚhook_runnerú'ConnectionStrategy'c               ó   — dS )az  Creates the ConnectionStrategy for this config.

    The Agent calls this after setting up ToolRunner, HookRunner,
    and policies. The strategy receives the fully-wired runners.

    Args:
      tool_runner: The fully-wired ToolRunner.
      hook_runner: The fully-wired HookRunner.

    Returns:
      A ConnectionStrategy instance configured with the specified runners.
    Nr   )r?   rx   ry   s      r   Úcreate_strategyzAgentConfig.create_strategyÓ   s	   € ð, €Cr   )r/   r   r0   r)   )r0   r:   )r/   r!   r0   r!   )rf   rh   rg   r3   r0   r:   )r0   rn   )rx   r   ry   r   r0   rz   )+rW   Ú
__module__Ú__qualname__Ú__doc__rT   Ú
ConfigDictÚmodel_configr   Ú__annotations__ÚFieldr   r\   r   r   r
   r   r   r    r"   r#   r$   r%   r&   r'   r(   r*   r+   r,   Úfield_validatorÚclassmethodr8   Úmodel_validatorr@   rG   rK   rY   rd   rk   rw   ÚabcÚabstractmethodr|   Ú__classcell__)rm   s   @r   r   r   )   sÇ  ø€ € € € € € ðð ð %�Ô$¸TÐBÑBÔB€,à?CÐÐCÐCÐCÑCØ+9¨8¬>ðð ð,ñ ,ô ,€,ð ð ð ñ ð
 +9¨(¬.ÈÐ*NÑ*NÔ*N€%ÐNÐNÐNÑNØ"0 (¤.ÀÐ"FÑ"FÔ"F€(ÐFÐFÐFÑFØ . ¤¸tÐ DÑ DÔ D€%ÐDÐDÐDÑDØ)7¨¬ÈÐ)MÑ)MÔ)M€(ÐMÐMÐMÑMØ-;¨X¬^Øð.ñ .ô .€+ð ð ð ñ ð )˜(œ.¸Ð>Ñ>Ô>€*Ð>Ð>Ð>Ñ>Ø $€/Ð$Ð$Ð$Ñ$ØDHÐÐHÐHÐHÑHØ€(ÐÐÐÑØ!€,Ð!Ð!Ð!Ñ!ØLP€/ÐPÐPÐPÑPØ*˜HœN¸4Ð@Ñ@Ô@€,Ð@Ð@Ð@Ñ@Ø*8¨(¬.ÈÐ*NÑ*NÔ*N€)ÐNÐNÐNÑNØ%)€,Ð)Ð)Ð)Ñ)ð ,0€,Ð/Ð/Ð/Ñ/Ø-1€-Ð1Ð1Ð1Ñ1à€8Ô˜N°Ð:Ñ:Ô:Øðð ð ñ „;ñ ;Ô:ðð €8Ô Ð)Ñ)Ô)ðð ð ñ *Ô)ðð €8ÔÐ-Ñ.Ô.Øð
ð 
ð 
ñ „;ñ /Ô.ð
ð €8Ô Ð)Ñ)Ô)ð	ð 	ð 	ñ *Ô)ð	ð €8ÔÐ-Ñ.Ô.ðð ñ /Ô.ðð$ €8Ô˜J¨XÐ6Ñ6Ô6Øðð ñ „;ñ 7Ô6ðð, 37ÀUðð ð ð ð ð ð ð ð"ð ð ð ð> Ôðð ð ñ Ôðð ð ð ð r   r   c                  óJ  — e Zd ZdZed&d„¦   «         Zed'd„¦   «         Zed(d„¦   «         Zed)d
„¦   «         Zed*d„¦   «         Z	ed+d„¦   «         Z
ed,d„¦   «         Zej        d-d„¦   «         Zej        d.d„¦   «         Zd/d„Zd/d„Zd/d„Zd0d1d„Zd2d"„Zej        d3d$„¦   «         Zd%S )4Ú
ConnectionzšA live session with an agent backend.

  This is the common contract that all connection types implement.
  Layer 2 APIs depend only on this interface.
  r0   r3   c                ó   — dS )z;Returns True if the connection is idle and ready for input.Tr   r>   s    r   Úis_idlezConnection.is_idleó   ó	   € ð ˆ4r   úSequence[types.Step]c                ó   — g S )zAReturns the pre-existing session steps restored during handshake.r   r>   s    r   Ú_initial_historyzConnection._initial_historyø   s	   € ð €Ir   rM   c                ó   — dS )z>Returns the conversation identifier, or empty string if unset.Ú r   r>   s    r   r"   zConnection.conversation_idý   s	   € ð ˆ2r   r)   c                ó   — dS )zIReturns the debug configuration for this connection, or None if disabled.Nr   r>   s    r   r*   zConnection.debug_config  rŽ   r   útypes.UsageMetadatac                ó(   — t          j        ¦   «         S )zÏReturns total cumulative token usage from the backend.

    Subclasses override to provide live usage data. Default returns
    an empty UsageMetadata instance (all fields None, indicating no tracking).
    )r	   ÚUsageMetadatar>   s    r   Úcumulative_usagezConnection.cumulative_usage  s   € õ ÔÑ Ô Ð r   údict[str, types.UsageMetadata]c                ó   — i S )z°Returns per-trajectory cumulative token usage from the backend.

    Subclasses override to provide live usage data. Default returns
    an empty dictionary (no tracking).
    r   r>   s    r   Útrajectory_usageszConnection.trajectory_usages  s	   € ð €Ir   útypes.StopReasonc                ó$   — t           j        j        S )z‘Returns the stop reason of the most recent turn.

    Subclasses override to provide live stop reason data. Default returns
    UNSPECIFIED.
    )r	   Ú
StopReasonÚUNSPECIFIEDr>   s    r   Ú_last_turn_stop_reasonz!Connection._last_turn_stop_reason  s   € õ ÔÔ'Ð'r   Úpromptútypes.Content | NoneÚkwargsr   ÚNonec              ‹  ó
   K  — dS )zžSends a prompt to the agent.

    Args:
      prompt: The user message to send.
      **kwargs: Strategy-specific options (model overrides, media, etc.).
    Nr   )r?   r¡   r£   s      r   ÚsendzConnection.send"  s   è è € ð €Cr   úAsyncIterator[types.Step]c                ó   — dS )z÷Receives steps as they complete from the agent.

    Yields Step objects representing agent actions. The exact fields populated
    depend on the backend, but all steps conform to the Step model.

    Yields:
      Step objects as they occur.
    Nr   r>   s    r   Úreceive_stepszConnection.receive_steps,  s	   € ð €Cr   c              ƒ  ó
   K  — dS )z/Disconnects the session and releases resources.Nr   r>   s    r   Ú
disconnectzConnection.disconnect8  ó   è è € à€Dr   c              ƒ  ó
   K  — dS )z%Cancels the current turn in progress.Nr   r>   s    r   ÚcancelzConnection.cancel<  r¬   r   c              ƒ  ó
   K  — dS )z)Blocks until the connection becomes idle.Nr   r>   s    r   Úwait_for_idlezConnection.wait_for_idle@  r¬   r   ç     Àr@ÚtimeoutÚfloatc              ƒ  ó
   K  — dS )z½Blocks until the connection wakes up or the timeout is reached.

    Args:
      timeout: Maximum seconds to wait.

    Returns:
      True if the connection woke up, False on timeout.
    Fr   )r?   r²   s     r   Úwait_for_wakeupzConnection.wait_for_wakeupD  s   è è € ð ˆ5r   Úresultsúlist[types.ToolResult]c              ƒ  ó
   K  — dS )zÃSends tool execution results back to the agent.

    Each connection strategy serializes the results into the backend
    wire format.

    Args:
      results: A list of ToolResult objects.
    Nr   )r?   r¶   s     r   Ú_send_tool_resultszConnection._send_tool_resultsO  s   è è € ð 	€Dr   Úcontentc              ƒ  ó
   K  — dS )zaSends a trigger message to the agent.

    Args:
      content: The trigger message content.
    Nr   )r?   rº   s     r   Úsend_trigger_notificationz$Connection.send_trigger_notificationZ  s   è è € ð €Cr   N)r0   r3   )r0   r�   )r0   rM   ©r0   r)   )r0   r•   )r0   r™   )r0   rœ   )r¡   r¢   r£   r   r0   r¤   )r0   r§   ©r0   r¤   )r±   )r²   r³   r0   r3   )r¶   r·   r0   r¤   )rº   rM   r0   r¤   )rW   r}   r~   r   Úpropertyr�   r‘   r"   r*   r˜   r›   r    r‡   rˆ   r¦   r©   r«   r®   r°   rµ   r¹   r¼   r   r   r   r‹   r‹   ì   sÓ  € € € € € ðð ð ðð ð ñ „8ðð ðð ð ñ „8ðð ðð ð ñ „8ðð ðð ð ñ „8ðð ð!ð !ð !ñ „8ð!ð ðð ð ñ „8ðð ð(ð (ð (ñ „8ð(ð Ôðð ð ñ Ôðð Ôð	ð 	ð 	ñ Ôð	ð	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð 	ð		ð 		ð 		ð 		ð Ôðð ð ñ Ôðð ð r   r‹   c                  ó�   — e Zd ZdZej        dd„¦   «         Zej        dd„¦   «         Zej        dd„¦   «         Ze	dd	„¦   «         Z
d
S )ÚConnectionStrategya  Strategy for establishing a Connection to an agent backend.

  Each backend type (local, Interactions API, cloud agent) provides its own
  ConnectionStrategy implementation that handles process management,
  transport setup, authentication, and health checking.
  r0   r‹   c                ó   — dS )z§Returns the established Connection.

    Returns:
      The active Connection object.

    Raises:
      RuntimeError: If the connection has not been established.
    Nr   r>   s    r   ÚconnectzConnectionStrategy.connectl  s	   € ð €Cr   r¤   c              ƒ  ó
   K  — dS )z0Starts the backend and prepares for connections.Nr   r>   s    r   Ú
__aenter__zConnectionStrategy.__aenter__{  s   è è € ð €Cr   c              ƒ  ó
   K  — dS )z¿Tears down the backend and releases all resources.

    Args:
      exc_type: The exception type, if any.
      exc_val: The exception value, if any.
      exc_tb: The traceback, if any.
    Nr   )r?   Úexc_typeÚexc_valÚexc_tbs       r   Ú	__aexit__zConnectionStrategy.__aexit__€  s   è è € ð €Cr   r)   c                ó   — dS )zGReturns the debug configuration for this strategy, or None if disabled.Nr   r>   s    r   r*   zConnectionStrategy.debug_config‹  rŽ   r   N)r0   r‹   r¾   r½   )rW   r}   r~   r   r‡   rˆ   rÃ   rÅ   rÊ   r¿   r*   r   r   r   rÁ   rÁ   d  sª   € € € € € ðð ð Ôðð ð ñ Ôðð Ôðð ð ñ Ôðð Ôðð ð ñ Ôðð ðð ð ñ „8ðð ð r   rÁ   c                  ód   — e Zd ZU dZ ej        d¬¦  «        ZdZded<   e	j
        Zded<   dd
„ZdS )r4   záConfiguration for client-side and server-side debugging and observability.

  When instantiated with default parameters (`DebugConfig()`), all debug
  features and detailed logging (`logging.DEBUG`) are enabled by default.
  Tr   r3   Úenable_server_side_tracingzint | str | NoneÚlogging_levelr0   r¤   c                óp   — | j         �.t          j        d¦  «                             | j         ¦  «         dS dS )z8Applies the configured logging level to the SDK loggers.Nzgoogle.antigravity)rÎ   ÚloggingÚ	getLoggerÚsetLevelr>   s    r   r=   zDebugConfig.apply_loggingŸ  s<   € àÔÐ%ÝÔÐ,Ñ-Ô-×6Ò6°tÔ7IÑJÔJÐJÐJÐJð &Ð%r   Nr¾   )rW   r}   r~   r   rT   r€   r�   rÍ   r‚   rÐ   ÚDEBUGrÎ   r=   r   r   r   r4   r4   ‘  sx   € € € € € € ðð ð %�Ô$¸TÐBÑBÔB€,ð &*ÐÐ)Ð)Ð)Ñ)à$+¤M€-Ð1Ð1Ð1Ñ1ðKð Kð Kð Kð Kð Kr   r4   )r   Ú
__future__r   r‡   rN   rÐ   rE   Útypingr   r   r   r   r   rT   Úgoogle.antigravityr	   Úgoogle.antigravity.hooksr
   Ú	hooks_modr   Úgoogle.antigravity.triggersr   Útriggers_modÚABCrU   r   r‹   rÁ   r4   Úmodel_rebuildr   r   r   ú<module>rÝ      s­  ððð ð #Ð "Ð "Ð "Ð "Ð "à 
€
€
€
Ø €€€Ø €€€Ø 	€	€	€	Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ Bà €€€à $Ð $Ð $Ð $Ð $Ð $Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø +Ð +Ð +Ð +Ð +Ð +Ø @Ð @Ð @Ð @Ð @Ð @ð@ð @ð @ð @ð @�#”'˜8Ô-ñ @ô @ð @ðFuð uð uð uð u�”ñ uô uð uðp*ð *ð *ð *ð *˜œñ *ô *ð *ðZKð Kð Kð Kð K�(Ô$ñ Kô Kð Kð( × Ò Ñ Ô Ð Ð Ð r   