§
    öŽ’jc¿  ã                   óH  — U d Z ddlZddlZddlZddlmZ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 ddlmZ dd	lmZm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 ddl m!Z! ddl"m#Z#m$Z$m%Z% ddl&m'Z'm(Z( ddl)m*Z*m+Z+ ddl,m-Z- ddl.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9  ej:        e;¦  «        Z<dZ=dZ>dZ?dZ@dZAdZBdZCeeDd<    ejE        d¦  «        ZFeGZHeGZIeJeGef         ZKe G d„ d¦  «        ¦   «         ZLe
eLge	d         f         ZM G d„ d e¦  «        ZN G d!„ d"¦  «        ZOdS )#zø
StreamableHTTP Server Transport Module

This module implements an HTTP transport layer with Streamable HTTP.

The transport handles bidirectional communication using HTTP requests and
responses, with streaming support for long-running operations.
é    N)ÚABCÚabstractmethod)ÚAsyncGeneratorÚ	AwaitableÚCallable)Úasynccontextmanager)Ú	dataclass)Úpartial)Ú
HTTPStatus)ÚAnyÚFinal)ÚMemoryObjectReceiveStreamÚMemoryObjectSendStream)ÚValidationError)ÚEventSourceResponse)ÚRequest)ÚResponse)ÚReceiveÚScopeÚSend)ÚTransportSecurityMiddlewareÚTransportSecuritySettings)ÚServerMessageMetadataÚSessionMessage)ÚSUPPORTED_PROTOCOL_VERSIONS)ÚDEFAULT_NEGOTIATED_VERSIONÚINTERNAL_ERRORÚINVALID_PARAMSÚINVALID_REQUESTÚPARSE_ERRORÚ	ErrorDataÚJSONRPCErrorÚJSONRPCMessageÚJSONRPCRequestÚJSONRPCResponseÚ	RequestIdzmcp-session-idzmcp-protocol-versionzlast-event-idzapplication/jsonztext/event-streamÚ_GET_streamé   ÚREQUEST_STREAM_BUFFER_SIZEz^[\x21-\x7E]+$c                   ó2   — e Zd ZU dZeed<   dZedz  ed<   dS )ÚEventMessagezM
    A JSONRPCMessage with an optional event ID for stream resumability.
    ÚmessageNÚevent_id)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r#   Ú__annotations__r-   Ústr© ó    úHC:\Projects\DSCons\.venv\Lib\site-packages\mcp\server\streamable_http.pyr+   r+   P   s>   € € € € € € ðð ð ÐÐÑØ€Hˆc�D‰jÐÐÑÐÐr5   r+   c                   óf   — e Zd ZdZedededz  defd„¦   «         Zedede	dedz  fd	„¦   «         Z
dS )
Ú
EventStorez?
    Interface for resumability support via event storage.
    Ú	stream_idr,   NÚreturnc              ƒ   ó
   K  — dS )a  
        Stores an event for later retrieval.

        Args:
            stream_id: ID of the stream the event belongs to
            message: The JSON-RPC message to store, or None for priming events

        Returns:
            The generated event ID for the stored event
        Nr4   )Úselfr9   r,   s      r6   Ústore_eventzEventStore.store_eventb   s   è è € ð 	ˆr5   Úlast_event_idÚsend_callbackc              ƒ   ó
   K  — dS )a2  
        Replays events that occurred after the specified event ID.

        Args:
            last_event_id: The ID of the last event the client received
            send_callback: A callback function to send events to the client

        Returns:
            The stream ID of the replayed events
        Nr4   )r<   r>   r?   s      r6   Úreplay_events_afterzEventStore.replay_events_afterp   s   è è € ð  	ˆr5   )r.   r/   r0   r1   r   ÚStreamIdr#   ÚEventIdr=   ÚEventCallbackrA   r4   r5   r6   r8   r8   ]   s™   € € € € € ðð ð ð¨8ð ¸nÈtÑ>Sð ÐX_ð ð ð ñ „^ðð ðàðð %ðð 
�D‰ð	ð ð ñ „^ðð ð r5   r8   c                   ó°  — e Zd ZU dZdZeeez           dz  ed<   dZ	e
eez           dz  ed<   dZee         dz  ed<   dZe
e         dz  ed<   eed<   	 	 	 	 d;d	edz  d
ededz  dedz  dedz  ddfd„Zedefd„¦   «         Zdeddfd„Zd<d„Zdededededef
d„Zdedededz  fd„Zdedee         de
e         dedz  ddf
d„Z e!dfdede"d ed!e#eef         dz  de$f
d"„Z%e"j&        dfd#edz  de"d!e#eef         dz  de$fd$„Z'dededz  fd%„Z(d&edefd'„Z)deddfd(„Z*d)e+d*e,d+e-ddfd,„Z.dede/eef         fd-„Z0dedefd.„Z1ded)e+d+e-defd/„Z2d)e+ded*e,d+e-ddf
d0„Z3ded+e-ddfd1„Z4ded+e-ddfd2„Z5d<d3„Z6ded+e-ddfd4„Z7ded+e-defd5„Z8ded+e-defd6„Z9ded+e-defd7„Z:d8eded+e-ddfd9„Z;e<de=e/e
eez           ee         f         df         fd:„¦   «         Z>dS )=ÚStreamableHTTPServerTransportzË
    HTTP server transport with event streaming support for MCP.

    Handles JSON-RPC messages in HTTP POST requests with SSE streaming.
    Supports optional JSON responses and session management.
    NÚ_read_stream_writerÚ_read_streamÚ_write_streamÚ_write_stream_readerÚ	_securityFÚmcp_session_idÚis_json_response_enabledÚevent_storeÚsecurity_settingsÚretry_intervalr:   c                 óô   — |�)t                                |¦  «        st          d¦  «        ‚|| _        || _        || _        t          |¦  «        | _        || _        i | _	        i | _
        d| _        d| _        dS )am  
        Initialize a new StreamableHTTP server transport.

        Args:
            mcp_session_id: Optional session identifier for this connection.
                            Must contain only visible ASCII characters (0x21-0x7E).
            is_json_response_enabled: If True, return JSON responses for requests
                                    instead of SSE streams. Default is False.
            event_store: Event store for resumability support. If provided,
                        resumability will be enabled, allowing clients to
                        reconnect and resume messages.
            security_settings: Optional security settings for DNS rebinding protection.
            retry_interval: Retry interval in milliseconds to suggest to clients in SSE
                           retry field. When set, the server will send a retry field in
                           SSE priming events to control client reconnection timing for
                           polling behavior. Only used when event_store is provided.

        Raises:
            ValueError: If the session ID contains invalid characters.
        NzASession ID must only contain visible ASCII characters (0x21-0x7E)F)ÚSESSION_ID_PATTERNÚ	fullmatchÚ
ValueErrorrL   rM   Ú_event_storer   rK   Ú_retry_intervalÚ_request_streamsÚ_sse_stream_writersÚ_terminatedÚ
idle_scope)r<   rL   rM   rN   rO   rP   s         r6   Ú__init__z&StreamableHTTPServerTransport.__init__’   s‰   € ð8 Ð%Õ.@×.JÒ.JÈ>Ñ.ZÔ.ZÐ%ÝÐ`ÑaÔaÐaà,ˆÔØ(@ˆÔ%Ø'ˆÔÝ4Ð5FÑGÔGˆŒØ-ˆÔð ð 	Ôð WYˆÔ Ø ˆÔà48ˆŒˆˆr5   c                 ó   — | j         S )z7Check if this transport has been explicitly terminated.)rY   ©r<   s    r6   Úis_terminatedz+StreamableHTTPServerTransport.is_terminatedÂ   s   € ð ÔÐr5   Ú
request_idc                 ó  — | j                              |d¦  «        }|r|                     ¦   «          || j        v rG| j                             |¦  «        \  }}|                     ¦   «          |                     ¦   «          dS dS )a  Close SSE connection for a specific request without terminating the stream.

        This method closes the HTTP connection for the specified request, triggering
        client reconnection. Events continue to be stored in the event store and will
        be replayed when the client reconnects with Last-Event-ID.

        Use this to implement polling behavior during long-running operations -
        client will reconnect after the retry interval specified in the priming event.

        Args:
            request_id: The request ID whose SSE stream should be closed.

        Note:
            This is a no-op if there is no active stream for the request ID.
            Requires event_store to be configured for events to be stored during
            the disconnect.
        N)rX   ÚpopÚcloserW   )r<   r_   ÚwriterÚsend_streamÚreceive_streams        r6   Úclose_sse_streamz.StreamableHTTPServerTransport.close_sse_streamÇ   sŽ   € ð$ Ô)×-Ò-¨j¸$Ñ?Ô?ˆØð 	Ø�LŠL‰NŒNˆNð ˜Ô.Ð.Ð.Ø*.Ô*?×*CÒ*CÀJÑ*OÔ*OÑ'ˆK˜Ø×ÒÑÔÐØ× Ò Ñ"Ô"Ð"Ð"Ð"ð /Ð.r5   c                 ó:   — |                       t          ¦  «         dS )aF  Close the standalone GET SSE stream, triggering client reconnection.

        This method closes the HTTP connection for the standalone GET stream used
        for unsolicited server-to-client notifications. The client SHOULD reconnect
        with Last-Event-ID to resume receiving notifications.

        Use this to implement polling behavior for the notification stream -
        client will reconnect after the retry interval specified in the priming event.

        Note:
            This is a no-op if there is no active standalone SSE stream.
            Requires event_store to be configured for events to be stored during
            the disconnect.
            Currently, client reconnection for standalone GET streams is NOT
            implemented - this is a known gap (see test_standalone_get_stream_reconnection).
        N)rf   ÚGET_STREAM_KEYr]   s    r6   Úclose_standalone_sse_streamz9StreamableHTTPServerTransport.close_standalone_sse_streamã   s   € ð" 	×Ò�nÑ-Ô-Ð-Ð-Ð-r5   r,   ÚrequestÚprotocol_versionc                 ó¢   ‡ ‡— ‰ j         r&|dk    r d	ˆˆ fd„}d	ˆ fd„}t          |||¬¦  «        }nt          |¬¦  «        }t          ||¬¦  «        S )
aJ  Create a session message with metadata including close_sse_stream callback.

        The close_sse_stream callbacks are only provided when the client supports
        resumability (protocol version >= 2025-11-25). Old clients can't resume if
        the stream is closed early because they didn't receive a priming event.
        ú
2025-11-25r:   Nc               “   ó6   •K  — ‰                      ‰ ¦  «         d S ©N)rf   )r_   r<   s   €€r6   Úclose_stream_callbackzTStreamableHTTPServerTransport._create_session_message.<locals>.close_stream_callback  s!   øè è € Ø×%Ò% jÑ1Ô1Ð1Ð1Ð1r5   c               “   ó4   •K  — ‰                       ¦   «          d S ro   )ri   r]   s   €r6   Ú close_standalone_stream_callbackz_StreamableHTTPServerTransport._create_session_message.<locals>.close_standalone_stream_callback	  s   øè è € Ø×0Ò0Ñ2Ô2Ð2Ð2Ð2r5   )Úrequest_contextrf   ri   ©rs   ©Úmetadata©r:   N)rU   r   r   )r<   r,   rj   r_   rk   rp   rr   rv   s   `  `    r6   Ú_create_session_messagez5StreamableHTTPServerTransport._create_session_messageö   s¤   øø€ ð Ôð 	FÐ!1°\Ò!AÐ!Að2ð 2ð 2ð 2ð 2ð 2ð 2ð3ð 3ð 3ð 3ð 3ð 3õ -Ø 'Ø!6Ø,Lðñ ô ˆHˆHõ -¸WÐEÑEÔEˆHå˜g°Ð9Ñ9Ô9Ð9r5   r9   c              ƒ   óš   K  — | j         sdS |dk     rdS | j                              |d¦  «        ƒ d{V —†}|ddœ}| j        �
| j        |d<   |S )ao  Store the priming cursor for `stream_id` and return its SSE wire form.

        Called before the request is dispatched so the priming row precedes
        anything `message_router` can store for this stream. Returns `None`
        when no event store is configured or the client predates 2025-11-25
        (older clients cannot parse the empty-data event).
        Nrm   Ú )ÚidÚdataÚretry)rU   r=   rV   )r<   r9   rk   Úpriming_event_idÚpriming_events        r6   Ú_mint_priming_eventz1StreamableHTTPServerTransport._mint_priming_event  s|   è è € ð Ô ð 	Ø�4Ø˜lÒ*Ð*Ø�4Ø!%Ô!2×!>Ò!>¸yÈ$Ñ!OÔ!OÐOÐOÐOÐOÐOÐOÐØ)9À2Ð"FÐ"FˆØÔÐ+Ø%)Ô%9ˆM˜'Ñ"ØÐr5   Ússe_stream_writerÚrequest_stream_readerr   c              ƒ   ó°  K  — 	 |4 ƒd{V —† |4 ƒd{V —† |�|                      |¦  «        ƒ d{V —† |2 3 d{V —†}|                      |                      |¦  «        ¦  «        ƒ d{V —† t          |j        j        t
          t          z  ¦  «        r nŒ_6 	 ddd¦  «        ƒd{V —† n# 1 ƒd{V —†swxY w Y   ddd¦  «        ƒd{V —† n# 1 ƒd{V —†swxY w Y   nT# t          j        $ r t           
                    d¦  «         Y n)t          $ r t                               d¦  «         Y nw xY wt           
                    d¦  «         | j                             |d¦  «         |                      |¦  «        ƒ d{V —† dS # t           
                    d¦  «         | j                             |d¦  «         |                      |¦  «        ƒ d{V —† w xY w)zFForward `_request_streams[request_id]` onto the SSE wire for one POST.Nz'SSE stream closed by close_sse_stream()zError in SSE writerzClosing SSE writer)ÚsendÚ_create_event_dataÚ
isinstancer,   Úrootr%   r"   ÚanyioÚClosedResourceErrorÚloggerÚdebugÚ	ExceptionÚ	exceptionrX   ra   Ú_clean_up_memory_streams)r<   r_   r�   r‚   r   Úevent_messages         r6   Ú_run_sse_writerz-StreamableHTTPServerTransport._run_sse_writer(  sM  è è € ð	<Ø(ð ð ð ð ð ð ð ð Ð*?ð ð ð ð ð ð ð ð Ø Ð,Ø+×0Ò0°Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ø+@ð ð ð ð ð ð ð ˜-Ø+×0Ò0°×1HÒ1HÈÑ1WÔ1WÑXÔXÐXÐXÐXÐXÐXÐXÐXÝ! -Ô"7Ô"<½oÕP\Ñ>\Ñ]Ô]ð Ø˜ðð ,AÐ+@ðð ð ñ ô ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð øøøð ð ð ð ð ð ð ñ ô ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð øøøð ð ð ð øøõ Ô(ð 	Dð 	Dð 	DÝ�LŠLÐBÑCÔCÐCÐCÐCÝð 	4ð 	4ð 	4Ý×ÒÐ2Ñ3Ô3Ð3Ð3Ð3ð	4øøøõ �LŠLÐ-Ñ.Ô.Ð.ØÔ$×(Ò(¨°TÑ:Ô:Ð:Ø×/Ò/°
Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;øõ �LŠLÐ-Ñ.Ô.Ð.ØÔ$×(Ò(¨°TÑ:Ô:Ð:Ø×/Ò/°
Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;øøøs‡   „C Œ	C• B(µB»AB(ÂCÂ(
B2	Â2CÂ5B2	Â6CÂ9C Ã
CÃC ÃCÃC ÃF Ã)D.ÄF Ä#D.Ä+F Ä-D.Ä.F ÆAGÚerror_messageÚstatus_codeÚ
error_codeÚheadersc                 óþ   — dt           i}|r|                     |¦  «         | j        r| j        |t          <   t	          ddt          ||¬¦  «        ¬¦  «        }t          |                     dd¬¦  «        ||¬¦  «        S )	z6Create an error response with a simple string message.úContent-Typez2.0zserver-error)Úcoder,   )Újsonrpcr{   ÚerrorT©Úby_aliasÚexclude_none©r’   r”   )ÚCONTENT_TYPE_JSONÚupdaterL   ÚMCP_SESSION_ID_HEADERr"   r!   r   Úmodel_dump_json)r<   r‘   r’   r“   r”   Úresponse_headersÚerror_responses          r6   Ú_create_error_responsez4StreamableHTTPServerTransport._create_error_responseA  s°   € ð +Õ,=Ð>ÐØð 	-Ø×#Ò# GÑ,Ô,Ð,àÔð 	JØ6:Ô6IÐÕ2Ñ3õ &ØØÝØØ%ðñ ô ð
ñ 
ô 
ˆõ Ø×*Ò*°DÀtÐ*ÑLÔLØ#Ø$ð
ñ 
ô 
ð 	
r5   Úresponse_messagec                 óÄ   — dt           i}|r|                     |¦  «         | j        r| j        |t          <   t	          |r|                     dd¬¦  «        nd||¬¦  «        S )z,Create a JSON response from a JSONRPCMessager–   Trš   Nr�   )rž   rŸ   rL   r    r   r¡   )r<   r¥   r’   r”   r¢   s        r6   Ú_create_json_responsez3StreamableHTTPServerTransport._create_json_response`  s†   € ð +Õ,=Ð>ÐØð 	-Ø×#Ò# GÑ,Ô,Ð,àÔð 	JØ6:Ô6IÐÕ2Ñ3åØRbÐlÐ×,Ò,°dÈÐ,ÑNÔNÐNÐhlØ#Ø$ð
ñ 
ô 
ð 	
r5   c                 ó@   — |j                              t          ¦  «        S )z,Extract the session ID from request headers.)r”   Úgetr    )r<   rj   s     r6   Ú_get_session_idz-StreamableHTTPServerTransport._get_session_idt  s   € àŒ×"Ò"Õ#8Ñ9Ô9Ð9r5   r�   c                 óf   — d|j                              dd¬¦  «        dœ}|j        r
|j        |d<   |S )z2Create event data dictionary from an EventMessage.r,   Trš   )Úeventr|   r{   )r,   r¡   r-   )r<   r�   Ú
event_datas      r6   r…   z0StreamableHTTPServerTransport._create_event_datax  sM   € ð Ø!Ô)×9Ò9À4ÐVZÐ9Ñ[Ô[ð
ð 
ˆ
ð Ô!ð 	6Ø,Ô5ˆJ�tÑàÐr5   c              ƒ   óš  K  — || j         v r¿	 | j         |         d                              ¦   «         ƒ d{V —† | j         |         d                              ¦   «         ƒ d{V —† n*# t          $ r t                               d¦  «         Y nw xY w| j                              |d¦  «         dS # | j                              |d¦  «         w xY wdS )z/Clean up memory streams for a given request ID.r   Né   z4Error closing memory streams - may already be closed)rW   ÚacloserŒ   rŠ   r‹   ra   )r<   r_   s     r6   rŽ   z6StreamableHTTPServerTransport._clean_up_memory_streams…  sþ   è è € à˜Ô.Ð.Ð.ð	<àÔ+¨JÔ7¸Ô:×AÒAÑCÔCÐCÐCÐCÐCÐCÐCÐCØÔ+¨JÔ7¸Ô:×AÒAÑCÔCÐCÐCÐCÐCÐCÐCÐCÐCøÝð Uð Uð Uå—’ÐSÑTÔTÐTÐTÐTðUøøøð
 Ô%×)Ò)¨*°dÑ;Ô;Ð;Ð;Ð;ø�Ô%×)Ò)¨*°dÑ;Ô;Ð;Ð;øøøð /Ð.s*   �AA$ Á#B+ Á$$BÂB+ Â
BÂB+ Â+CÚscopeÚreceiver„   c              ƒ   ó\  K  — t          ||¦  «        }|j        dk    }| j                             ||¬¦  «        ƒ d{V —†}|r ||||¦  «        ƒ d{V —† dS | j        r5|                      dt          j        ¦  «        } ||||¦  «        ƒ d{V —† dS |j        dk    r |                      ||||¦  «        ƒ d{V —† dS |j        dk    r|  	                    ||¦  «        ƒ d{V —† dS |j        dk    r|  
                    ||¦  «        ƒ d{V —† dS |                      ||¦  «        ƒ d{V —† dS )z6Application entry point that handles all HTTP requestsÚPOST)Úis_postNz&Not Found: Session has been terminatedÚGETÚDELETE)r   ÚmethodrK   Úvalidate_requestrY   r¤   r   Ú	NOT_FOUNDÚ_handle_post_requestÚ_handle_get_requestÚ_handle_delete_requestÚ_handle_unsupported_request)r<   r±   r²   r„   rj   rµ   r£   Úresponses           r6   Úhandle_requestz,StreamableHTTPServerTransport.handle_request“  s¼  è è € å˜% Ñ)Ô)ˆð ”. FÒ*ˆØ#œ~×>Ò>¸wÐPWÐ>ÑXÔXÐXÐXÐXÐXÐXÐXˆØð 	Ø �. ¨°Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6ØˆFàÔð 	à×2Ò2Ø8ÝÔ$ñô ˆHð �(˜5 '¨4Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0ØˆFàŒ>˜VÒ#Ð#Ø×+Ò+¨E°7¸GÀTÑJÔJÐJÐJÐJÐJÐJÐJÐJÐJÐJØŒ^˜uÒ$Ð$Ø×*Ò*¨7°DÑ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9ØŒ^˜xÒ'Ð'Ø×-Ò-¨g°tÑ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<à×2Ò2°7¸DÑAÔAÐAÐAÐAÐAÐAÐAÐAÐAÐAr5   c                 óâ   — |j                              dd¦  «        }d„ |                     d¦  «        D ¦   «         }t          d„ |D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        }||fS )z6Check if the request accepts the required media types.Úacceptrz   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r4   ©Ústrip©Ú.0Ú
media_types     r6   ú
<listcomp>zGStreamableHTTPServerTransport._check_accept_headers.<locals>.<listcomp>³  s$   € ÐVÐVÐV¨z˜
×(Ò(Ñ*Ô*ÐVÐVÐVr5   ú,c              3   óJ   K  — | ]}|                      t          ¦  «        V — Œd S ro   )Ú
startswithrž   rÆ   s     r6   ú	<genexpr>zFStreamableHTTPServerTransport._check_accept_headers.<locals>.<genexpr>µ  s1   è è € Ð_Ð_ÀJ�z×,Ò,Õ->Ñ?Ô?Ð_Ð_Ð_Ð_Ð_Ð_r5   c              3   óJ   K  — | ]}|                      t          ¦  «        V — Œd S ro   )rÌ   ÚCONTENT_TYPE_SSErÆ   s     r6   rÍ   zFStreamableHTTPServerTransport._check_accept_headers.<locals>.<genexpr>¶  s1   è è € Ð]Ð]À*�j×+Ò+Õ,<Ñ=Ô=Ð]Ð]Ð]Ð]Ð]Ð]r5   ©r”   r©   ÚsplitÚany)r<   rj   Úaccept_headerÚaccept_typesÚhas_jsonÚhas_sses         r6   Ú_check_accept_headersz3StreamableHTTPServerTransport._check_accept_headers°  s€   € àœ×+Ò+¨H°bÑ9Ô9ˆØVÐV¸]×=PÒ=PÐQTÑ=UÔ=UÐVÑVÔVˆåÐ_Ð_ÐR^Ð_Ñ_Ô_Ñ_Ô_ˆÝÐ]Ð]ÐP\Ð]Ñ]Ô]Ñ]Ô]ˆà˜Ð Ð r5   c                 óÚ   — |j                              dd¦  «        }d„ |                     d¦  «        d                              d¦  «        D ¦   «         }t          d„ |D ¦   «         ¦  «        S )z2Check if the request has the correct Content-Type.zcontent-typerz   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r4   rÄ   ©rÇ   Úparts     r6   rÉ   zEStreamableHTTPServerTransport._check_content_type.<locals>.<listcomp>½  s    € Ð]Ð]Ð]¨t˜dŸjšj™lœlÐ]Ð]Ð]r5   ú;r   rÊ   c              3   ó,   K  — | ]}|t           k    V — Œd S ro   )rž   rÚ   s     r6   rÍ   zDStreamableHTTPServerTransport._check_content_type.<locals>.<genexpr>¿  s(   è è € ÐLÐL°�4Õ,Ò,ÐLÐLÐLÐLÐLÐLr5   rÐ   )r<   rj   Úcontent_typeÚcontent_type_partss       r6   Ú_check_content_typez1StreamableHTTPServerTransport._check_content_typeº  sm   € à”×*Ò*¨>¸2Ñ>Ô>ˆØ]Ð]°|×7IÒ7IÈ#Ñ7NÔ7NÈqÔ7Q×7WÒ7WÐX[Ñ7\Ô7\Ð]Ñ]Ô]ÐåÐLÐLÐ9KÐLÑLÔLÑLÔLÐLr5   c              ƒ   ó>  K  — |                       |¦  «        \  }}| j        r=|s:|                      dt          j        ¦  «        } |||j        |¦  «        ƒ d{V —† dS n>|r|s:|                      dt          j        ¦  «        } |||j        |¦  «        ƒ d{V —† dS dS )zEValidate Accept header based on response mode. Returns True if valid.z3Not Acceptable: Client must accept application/jsonNFzNNot Acceptable: Client must accept both application/json and text/event-streamT)r×   rM   r¤   r   ÚNOT_ACCEPTABLEr²   )r<   rj   r±   r„   rÕ   rÖ   r¿   s          r6   Ú_validate_accept_headerz5StreamableHTTPServerTransport._validate_accept_headerÁ  sæ   è è € à ×6Ò6°wÑ?Ô?Ñˆ�'ØÔ(ð 	àð Ø×6Ò6ØIÝÔ-ñô �ð �h˜u g¤o°tÑ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ø�uðð ð 	˜wð 	Ø×2Ò2Ø`ÝÔ)ñô ˆHð �(˜5 '¤/°4Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ø�5Øˆtr5   c           
   ƒ   ój  K  — | j         }|€t          d¦  «        ‚	 |                      |||¦  «        ƒ d{V —†sdS |                      |¦  «        s5|                      dt
          j        ¦  «        } ||||¦  «        ƒ d{V —† dS |                     ¦   «         ƒ d{V —†}	 t          j	        |¦  «        }nf# t          j
        $ rT}	|                      dt          |	¦  «        › �t
          j        t          ¦  «        } ||||¦  «        ƒ d{V —† Y d}	~	dS d}	~	ww xY w	 t          j        |¦  «        }
na# t           $ rT}	|                      dt          |	¦  «        › �t
          j        t"          ¦  «        } ||||¦  «        ƒ d{V —† Y d}	~	dS d}	~	ww xY wt%          |
j        t(          ¦  «        o|
j        j        dk    }|r_| j        rW|                      |¦  «        }|r@|| j        k    r5|                      dt
          j        ¦  «        } ||||¦  «        ƒ d{V —† dS n|                      ||¦  «        ƒ d{V —†sdS t%          |
j        t(          ¦  «        sq|                      dt
          j        ¦  «        } ||||¦  «        ƒ d{V —† t9          |¬¦  «        }t;          |
|¬	¦  «        }|                     |¦  «        ƒ d{V —† dS |r>|
j        j        r2t          |
j        j                              d
tB          ¦  «        ¦  «        n$|j"                              tF          tB          ¦  «        }t          |
j        j$        ¦  «        }| j%        �rþtM          j'        tP                   tR          ¦  «        | j*        |<   | j*        |         d         }t9          |¬¦  «        }t;          |
|¬	¦  «        }|                     |¦  «        ƒ d{V —† 	 d}|2 3 d{V —†}t%          |j+        j        tX          tZ          z  ¦  «        r	|j+        } n.t\           /                    d|j+        j        j        › �¦  «         Œd6 |r)|                      |¦  «        } ||||¦  «        ƒ d{V —† nMt\           0                    d¦  «         |                      dt
          j1        ¦  «        } ||||¦  «        ƒ d{V —† nc# td          $ rV t\           3                    d¦  «         |                      dt
          j1        th          ¦  «        } ||||¦  «        ƒ d{V —† Y nw xY w|  5                    |¦  «        ƒ d{V —† dS # |  5                    |¦  «        ƒ d{V —† w xY w|  6                    ||¦  «        ƒ d{V —†}tM          j'        tn                   d¦  «        \  }}|| j8        |<   tM          j'        tP                   tR          ¦  «        | j*        |<   | j*        |         d         }ddtr          dœ| j        rtt          | j        ini ¥}tw          |ty          | j=        ||||¦  «        |¬¦  «        }	 tM          j>        ¦   «         4 ƒd{V —†}| ?                    ||||¦  «         |  @                    |
|||¦  «        }|                     |¦  «        ƒ d{V —† ddd¦  «        ƒd{V —† n# 1 ƒd{V —†swxY w Y   dS dS # td          $ rm t\           3                    d¦  «         | A                    ¦   «         ƒ d{V —† | A                    ¦   «         ƒ d{V —† |  5                    |¦  «        ƒ d{V —† Y dS w xY w# td          $ r†}t\           3                    d¦  «         |                      dt
          j1        th          ¦  «        } ||||¦  «        ƒ d{V —† |                     te          |¦  «        ¦  «        ƒ d{V —† Y d}~dS d}~ww xY w)z2Handle POST requests containing JSON-RPC messages.NúBNo read stream writer available. Ensure connect() is called first.z=Unsupported Media Type: Content-Type must be application/jsonzParse error: zValidation error: Ú
initializeú(Not Found: Invalid or expired session IDrt   ru   ÚprotocolVersionr¯   z
received: z1No response message received before stream closedz.Error processing request: No response receivedzError processing JSON responsezError processing requestr   úno-cache, no-transformú
keep-alive©zCache-ControlÚ
Connectionr–   ©ÚcontentÚdata_sender_callabler”   zSSE response errorzError handling POST request)BrG   rT   rã   rà   r¤   r   ÚUNSUPPORTED_MEDIA_TYPEÚbodyÚjsonÚloadsÚJSONDecodeErrorr3   ÚBAD_REQUESTr    r#   Úmodel_validater   r   r†   r‡   r$   r¸   rL   rª   rº   Ú_validate_request_headersr§   ÚACCEPTEDr   r   r„   Úparamsr©   r   r”   ÚMCP_PROTOCOL_VERSION_HEADERr{   rM   rˆ   Úcreate_memory_object_streamr+   r)   rW   r,   r%   r"   rŠ   r‹   r™   ÚINTERNAL_SERVER_ERRORrŒ   r�   r   rŽ   r€   ÚSSEEventrX   rÏ   r    r   r
   r�   Úcreate_task_groupÚ
start_soonrx   r°   )r<   r±   rj   r²   r„   rc   r¿   rñ   Úraw_messageÚer,   Úis_initialization_requestÚrequest_session_idrv   Úsession_messagerk   r_   r‚   r¥   r�   r   r�   Ússe_stream_readerr”   ÚtgÚerrs                             r6   r»   z2StreamableHTTPServerTransport._handle_post_request×  s:
  è è € àÔ)ˆØˆ>ÝÐaÑbÔbÐbðv	à×5Ò5°g¸uÀdÑKÔKÐKÐKÐKÐKÐKÐKð Ø�ð ×+Ò+¨GÑ4Ô4ð Ø×6Ò6ØSÝÔ5ñô �ð �h˜u g¨tÑ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ø�ð !Ÿš™œÐ'Ð'Ð'Ð'Ð'Ð'ˆDðÝ"œj¨Ñ.Ô.��øÝÔ'ð ð ð Ø×6Ò6Ð7OÅsÈ1ÁvÄvÐ7OÐ7OÕQ[ÔQgÕitÑuÔu�Ø�h˜u g¨tÑ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ø�����øøøøðøøøð
	Ý(Ô7¸ÑDÔD��øÝ"ð ð ð Ø×6Ò6Ø1­¨Q©¬Ð1Ð1ÝÔ*Ý"ñô �ð
 �h˜u g¨tÑ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ø�����øøøøðøøøõ ˜7œ<­Ñ8Ô8Ð`¸W¼\Ô=PÐT`Ò=`ð &ð )ð àÔ&ð à)-×)=Ò)=¸gÑ)FÔ)FÐ&ð *ð Ð.@ÀDÔDWÒ.WÐ.WØ#'×#>Ò#>ØFÝ&Ô0ñ$ô $˜ð '˜h u¨g°tÑ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ø˜øØ×9Ò9¸'À4ÑHÔHÐHÐHÐHÐHÐHÐHð Ø�õ ˜gœl­NÑ;Ô;ð à×5Ò5ØÝÔ'ñô �ð �h˜u g¨tÑ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4õ 1ÀÐIÑIÔI�Ý"0°À8Ð"LÑ"LÔ"L�Ø—k’k /Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2à�ð -ðbØ18´Ô1Dðb•�G”LÔ'×+Ò+Ð,=Õ?YÑZÔZÑ[Ô[Ð[à”_×(Ò(Õ)DÕF`ÑaÔað õ ˜Wœ\œ_Ñ-Ô-ˆJàÔ,ñ WDÝ49Ô4UÕVbÔ4cÝ.ñ5ô 5�Ô% jÑ1ð )-Ô(=¸jÔ(IÈ!Ô(LÐ%å0ÀÐIÑIÔI�Ý"0°À8Ð"LÑ"LÔ"L�Ø—k’k /Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2ð%Dð (,Ð$ð 0Eð [ð [ð [ð [ð [ð [ð [˜må% mÔ&;Ô&@Å/ÕT`ÑB`ÑaÔað [Ø/<Ô/DÐ,Ø!˜Eõ #ŸLšLÐ)Y°mÔ6KÔ6PÔ6WÐ)YÐ)YÑZÔZÐZÐZð 0Eð (ð =à#'×#=Ò#=Ð>NÑ#OÔ#O˜Ø&˜h u¨g°tÑ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<õ ŸšÐ%XÑYÔYÐYØ#'×#>Ò#>ØLÝ&Ô<ñ$ô $˜ð '˜h u¨g°tÑ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<øøÝ ð 9ð 9ð 9Ý×$Ò$Ð%EÑFÔFÐFØ#×:Ò:Ø2Ý"Ô8Ý&ñ ô  �Hð
 #˜( 5¨'°4Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ð9øøøð ×7Ò7¸
ÑCÔCÐCÐCÐCÐCÐCÐCÐCÐCÐCø˜$×7Ò7¸
ÑCÔCÐCÐCÐCÐCÐCÐCÐCÐCøøøð '+×&>Ò&>¸zÐK[Ñ&\Ô&\Ð \Ð \Ð \Ð \Ð \Ð \�å7<Ô7XÕYaÔ7bÐcdÑ7eÔ7eÑ4Ð!Ð#4Ø7H�Ô(¨Ñ4Ý49Ô4UÕVbÔ4cÝ.ñ5ô 5�Ô% jÑ1ð )-Ô(=¸jÔ(IÈ!Ô(LÐ%ð &>Ø".Ý$4ðð ð HLÔGZÐbÕ-¨tÔ/BÐCÐCÐ`bð	�õ /Ø-Ý)0ØÔ,¨jÐ:KÐMbÐdqñ*ô *ð $ðñ ô �ðDå$Ô6Ñ8Ô8ð ;ð ;ð ;ð ;ð ;ð ;ð ;¸BØŸš h°°wÀÑEÔEÐEà*.×*FÒ*FÀwÐPWÐYcÐeuÑ*vÔ*v˜Ø$Ÿkšk¨/Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:ð	;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;øøøð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;øõ
 !ð Dð Dð DÝ×$Ò$Ð%9Ñ:Ô:Ð:Ø+×2Ò2Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ø+×2Ò2Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ø×7Ò7¸
ÑCÔCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCð	Døøøøõ ð 		ð 		ð 		Ý×ÒÐ:Ñ;Ô;Ð;Ø×2Ò2Ø-ÝÔ0Ýñô ˆHð
 �(˜5 '¨4Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ø—+’+�i¨™nœnÑ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ØˆFˆFˆFˆFˆFøøøøð		øøøs  œ\" »A\" Â\" Â B5 Â4\" Â5DÃA	DÄ\" ÄDÄ\" ÄD1 Ä0\" Ä1
FÄ;A	F
Æ\" Æ
FÆB\" È\" È;B	\" ËD\" ÏR* ÏP0ÏCR* Ò)T* Ò*AT
ÔT* Ô	T
Ô
T* Ô\" Ô*UÕC\" ØZ( Ø5AZÚZ( Ú
ZÚZ( Ú ZÚ!Z( Ú(A3\Ü\" Ü\Ü\" Ü"
^2Ü,A;^-Þ-^2c              ƒ   ó6  ‡ ‡K  — ‰ j         }|€t          d¦  «        ‚‰                      |¦  «        \  }}|s?‰                      dt          j        ¦  «        } ||j        |j        |¦  «        ƒ d{V —† dS ‰                      ||¦  «        ƒ d{V —†sdS |j	         
                    t          ¦  «        x}r‰                      |||¦  «        ƒ d{V —† dS ddt          dœ}‰ j        r‰ j        |t          <   t           ‰ j        v r?‰                      dt          j        ¦  «        } ||j        |j        |¦  «        ƒ d{V —† dS t'          j        t*                   d¦  «        \  Š}	ˆ ˆfd	„}
t-          |	|
|¬
¦  «        }	  ||j        |j        |¦  «        ƒ d{V —† dS # t.          $ rr t0                               d¦  «         ‰                     ¦   «         ƒ d{V —† |	                     ¦   «         ƒ d{V —† ‰                      t           ¦  «        ƒ d{V —† Y dS w xY w)a   
        Handle GET request to establish SSE.

        This allows the server to communicate to the client without the client
        first sending data via HTTP POST. The server can send JSON-RPC requests
        and notifications on this stream.
        Nrå   z4Not Acceptable: Client must accept text/event-streamré   rê   rë   z4Conflict: Only one SSE stream is allowed per sessionr   c               “   ó  •K  — 	 t          j        t                   t          ¦  «        ‰j        t
          <   ‰j        t
                   d         } ‰4 ƒd {V —† | 4 ƒd {V —† | 2 3 d {V —†}‰                     |¦  «        }‰                     |¦  «        ƒ d {V —† Œ86 	 d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   n*# t          $ r t           
                    d¦  «         Y nw xY wt                               d¦  «         ‰                     t
          ¦  «        ƒ d {V —† d S # t                               d¦  «         ‰                     t
          ¦  «        ƒ d {V —† w xY w)Nr¯   zError in standalone SSE writerzClosing standalone SSE writer)rˆ   rû   r+   r)   rW   rh   r…   r„   rŒ   rŠ   r�   r‹   rŽ   )Ústandalone_stream_readerr�   r­   r<   r�   s      €€r6   Ústandalone_sse_writerzPStreamableHTTPServerTransport._handle_get_request.<locals>.standalone_sse_writerÈ  s.  øè è € ðDõ 9>Ô8YÕZfÔ8gÝ.ñ9ô 9�Ô%¥nÑ5ð ,0Ô+@ÅÔ+PÐQRÔ+SÐ(à,ð 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
AÐ.Fð 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Aà/Gð Að Að Að Að Að Að A˜mð &*×%<Ò%<¸]Ñ%KÔ%K˜
Ø/×4Ò4°ZÑ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@ð 0HÐ/Gð
Að 
Að 
Añ 
Aô 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Aøøøð 
Að 
Að 
Að 
Að 
Að 
Að 
Añ 
Aô 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Aøøøð 
Að 
Að 
Að 
Aøøõ ð Cð Cð CÝ× Ò Ð!AÑBÔBÐBÐBÐBðCøøøõ —’Ð<Ñ=Ô=Ð=Ø×3Ò3µNÑCÔCÐCÐCÐCÐCÐCÐCÐCÐCÐCøõ —’Ð<Ñ=Ô=Ð=Ø×3Ò3µNÑCÔCÐCÐCÐCÐCÐCÐCÐCÐCøøøs~   …AC# Á	CÁB.Á"BÁ(3B.ÂCÂ.
B8	Â8CÂ;B8	Â<CÂ?C# Ã
CÃC# ÃCÃC# Ã"E	 Ã#$D
ÄE	 Ä	D
Ä
E	 Å	<Frí   z Error in standalone SSE response)rG   rT   r×   r¤   r   râ   r±   r²   r÷   r”   r©   ÚLAST_EVENT_ID_HEADERÚ_replay_eventsrÏ   rL   r    rh   rW   ÚCONFLICTrˆ   rû   rý   r   rŒ   rŠ   r�   r°   rŽ   )r<   rj   r„   rc   Ú_rÖ   r¿   r>   r”   r  r  r�   s   `          @r6   r¼   z1StreamableHTTPServerTransport._handle_get_request”  sê  øøè è € ð Ô)ˆØˆ>ÝÐaÑbÔbÐbð ×/Ò/°Ñ8Ô8‰
ˆˆ7àð 	Ø×2Ò2ØFÝÔ)ñô ˆHð �(˜7œ=¨'¬/¸4Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@ØˆFà×3Ò3°G¸TÑBÔBÐBÐBÐBÐBÐBÐBð 	ØˆFð $œO×/Ò/Õ0DÑEÔEÐEˆ=ð 	Ø×%Ò% m°W¸dÑCÔCÐCÐCÐCÐCÐCÐCÐCØˆFð 6Ø&Ý,ð
ð 
ˆð Ôð 	AØ-1Ô-@ˆGÕ)Ñ*õ ˜TÔ2Ð2Ð2Ø×2Ò2ØFÝÔ#ñô ˆHð �(˜7œ=¨'¬/¸4Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@ØˆFõ 05Ô/PÕQYÔ/ZÐ[\Ñ/]Ô/]Ñ,ÐÐ,ð	Dð 	Dð 	Dð 	Dð 	Dð 	Dõ6 'Ø%Ø!6Øð
ñ 
ô 
ˆð	@à�(˜7œ=¨'¬/¸4Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@øÝð 	@ð 	@ð 	@Ý×ÒÐ?Ñ@Ô@Ð@Ø#×*Ò*Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ø#×*Ò*Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ø×/Ò/µÑ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?ð		@øøøs   Å=F ÆA8HÈHc              ƒ   ó€  K  — | j         s?|                      dt          j        ¦  «        } ||j        |j        |¦  «        ƒ d{V —† dS |                      ||¦  «        ƒ d{V —†sdS |                      ¦   «         ƒ d{V —† |                      dt          j	        ¦  «        } ||j        |j        |¦  «        ƒ d{V —† dS )z8Handle DELETE requests for explicit session termination.z5Method Not Allowed: Session termination not supportedN)
rL   r¤   r   ÚMETHOD_NOT_ALLOWEDr±   r²   r÷   Ú	terminater§   ÚOK)r<   rj   r„   r¿   s       r6   r½   z4StreamableHTTPServerTransport._handle_delete_requestò  s  è è € ð Ô"ð 	à×2Ò2ØGÝÔ-ñô ˆHð �(˜7œ=¨'¬/¸4Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@ØˆFà×3Ò3°G¸TÑBÔBÐBÐBÐBÐBÐBÐBð 	ØˆFà�nŠnÑÔÐÐÐÐÐÐÐà×-Ò-ØÝŒMñ
ô 
ˆð ˆh�w”} g¤o°tÑ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<r5   c              ƒ   óÌ  K  — | j         rdS d| _         t                               d| j        › �¦  «         t	          | j                             ¦   «         ¦  «        }|D ]}|                      |¦  «        ƒ d{V —† Œ| j                             ¦   «          	 | j	        �| j	         
                    ¦   «         ƒ d{V —† | j        �| j         
                    ¦   «         ƒ d{V —† | j        �| j         
                    ¦   «         ƒ d{V —† | j        �!| j         
                    ¦   «         ƒ d{V —† dS dS # t          $ r(}t                               d|› �¦  «         Y d}~dS d}~ww xY w)zÕTerminate the current session, closing all streams.

        Once terminated, all requests with this session ID will receive 404 Not Found.
        Calling this method multiple times is safe (idempotent).
        NTzTerminating session: úError closing streams: )rY   rŠ   ÚinforL   ÚlistrW   ÚkeysrŽ   ÚclearrG   r°   rH   rJ   rI   rŒ   r‹   )r<   Úrequest_stream_keysÚkeyr  s       r6   r  z'StreamableHTTPServerTransport.terminate	  sÍ  è è € ð Ôð 	ØˆFàˆÔÝ�ŠÐA¨DÔ,?ÐAÐAÑBÔBÐBõ # 4Ô#8×#=Ò#=Ñ#?Ô#?Ñ@Ô@Ðð 'ð 	5ð 	5ˆCØ×/Ò/°Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4ð 	Ô×#Ò#Ñ%Ô%Ð%ð	8ØÔ'Ð3ØÔ.×5Ò5Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7ØÔ Ð,ØÔ'×.Ò.Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0ØÔ(Ð4ØÔ/×6Ò6Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ØÔ!Ð-ØÔ(×/Ò/Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1ð .Ð-øåð 	8ð 	8ð 	8å�LŠLÐ6°1Ð6Ð6Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7øøøøð	8øøøs   ÂBD1 Ä1
E#Ä;EÅE#c              ƒ   óÈ   K  — t           ddœ}| j        r| j        |t          <   |                      dt          j        |¬¦  «        } ||j        |j        |¦  «        ƒ d{V —† dS )z Handle unsupported HTTP methods.zGET, POST, DELETE)r–   ÚAllowzMethod Not Allowed)r”   N)rž   rL   r    r¤   r   r  r±   r²   )r<   rj   r„   r”   r¿   s        r6   r¾   z9StreamableHTTPServerTransport._handle_unsupported_request,  sŽ   è è € õ .Ø(ð
ð 
ˆð Ôð 	AØ-1Ô-@ˆGÕ)Ñ*à×.Ò.Ø ÝÔ)Øð /ñ 
ô 
ˆð
 ˆh�w”} g¤o°tÑ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<r5   c              ƒ   ó‚   K  — |                       ||¦  «        ƒ d {V —†sdS |                      ||¦  «        ƒ d {V —†sdS dS )NFT)Ú_validate_sessionÚ_validate_protocol_version)r<   rj   r„   s      r6   r÷   z7StreamableHTTPServerTransport._validate_request_headers<  si   è è € Ø×+Ò+¨G°TÑ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:ð 	Ø�5Ø×4Ò4°W¸dÑCÔCÐCÐCÐCÐCÐCÐCð 	Ø�5Øˆtr5   c              ƒ   ó\  K  — | j         sdS |                      |¦  «        }|s?|                      dt          j        ¦  «        } ||j        |j        |¦  «        ƒ d{V —† dS || j         k    r?|                      dt          j        ¦  «        } ||j        |j        |¦  «        ƒ d{V —† dS dS )z'Validate the session ID in the request.TzBad Request: Missing session IDNFrç   )rL   rª   r¤   r   rõ   r±   r²   rº   )r<   rj   r„   r  r¿   s        r6   r  z/StreamableHTTPServerTransport._validate_sessionC  sé   è è € àÔ"ð 	à�4ð "×1Ò1°'Ñ:Ô:Ðð "ð 	Ø×2Ò2Ø1ÝÔ&ñô ˆHð �(˜7œ=¨'¬/¸4Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ø�5ð  Ô!4Ò4Ð4Ø×2Ò2Ø:ÝÔ$ñô ˆHð �(˜7œ=¨'¬/¸4Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ø�5àˆtr5   c              ƒ   ó2  K  — |j                              t          ¦  «        }|€t          }|t          vrcd                     t          ¦  «        }|                      d|› d�d|› �z   t          j        ¦  «        } ||j	        |j
        |¦  «        ƒ d{V —† dS dS )z4Validate the protocol version header in the request.Nz, z+Bad Request: Unsupported protocol version: z. zSupported versions: FT)r”   r©   rú   r   r   Újoinr¤   r   rõ   r±   r²   )r<   rj   r„   rk   Úsupported_versionsr¿   s         r6   r   z8StreamableHTTPServerTransport._validate_protocol_version`  s¿   è è € ð #œ?×.Ò.Õ/JÑKÔKÐð Ð#Ý9Ðð Õ#>Ð>Ð>Ø!%§¢Õ+FÑ!GÔ!GÐØ×2Ò2ØRÐ>NÐRÐRÐRØ=Ð);Ð=Ð=ñ>åÔ&ñô ˆHð
 �(˜7œ=¨'¬/¸4Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ø�5àˆtr5   r>   c              ƒ   óz  ‡ ‡‡‡	‡
K  — ‰ j         Š‰sdS 	 ddt          dœ}‰ j        r‰ j        |t          <   |j                             t          t          ¦  «        Š	t          j	        t                   d¦  «        \  Š
}ˆˆˆ	ˆ ˆ
fd„}t          |||¬¦  «        }	  ||j        |j        |¦  «        ƒ d{V —† n*# t          $ r t                               d¦  «         Y nw xY w‰
                     ¦   «         ƒ d{V —† |                     ¦   «         ƒ d{V —† dS # ‰
                     ¦   «         ƒ d{V —† |                     ¦   «         ƒ d{V —† w xY w# t          $ ra t                               d	¦  «         ‰                      d	t&          j        t*          ¦  «        } ||j        |j        |¦  «        ƒ d{V —† Y dS w xY w)
zˆ
        Replays events that would have been sent after the specified event ID.
        Only used when resumability is enabled.
        Nré   rê   rë   r   c               “   ó@  •K  — 	 ‰
4 ƒd {V —† dt           dd fˆ	ˆ
fd„} ‰                     ‰| ¦  «        ƒ d {V —†}|�rg|‰	j        v�r]	 ‰
‰	j        |<   ‰	                     |‰¦  «        ƒ d {V —†}|�‰
                     |¦  «        ƒ d {V —† t          j        t                    t          ¦  «        ‰	j        |<   ‰	j        |         d         }|4 ƒd {V —† |2 3 d {V —†}‰	 	                    |¦  «        }‰
                     |¦  «        ƒ d {V —† Œ86 	 d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   ‰	j         
                    |d ¦  «         ‰	                     |¦  «        ƒ d {V —† n;# ‰	j         
                    |d ¦  «         ‰	                     |¦  «        ƒ d {V —† w xY wd d d ¦  «        ƒd {V —† d S # 1 ƒd {V —†swxY w Y   d S # t          j        $ r t                               d¦  «         Y d S t          $ r t                               d¦  «         Y d S w xY w)Nr�   r:   c              “   ól   •K  — ‰                      | ¦  «        }‰                     |¦  «        ƒ d {V —† d S ro   )r…   r„   )r�   r­   r<   r�   s     €€r6   Ú
send_eventzWStreamableHTTPServerTransport._replay_events.<locals>.replay_sender.<locals>.send_event“  sF   øè è € Ø)-×)@Ò)@ÀÑ)OÔ)O˜JØ"3×"8Ò"8¸Ñ"DÔ"DÐDÐDÐDÐDÐDÐDÐDÐDÐDr5   r¯   z.Replay SSE stream closed by close_sse_stream()zError in replay sender)r+   rA   rW   rX   r€   r„   rˆ   rû   r)   r…   ra   rŽ   r‰   rŠ   r‹   rŒ   r�   )r(  r9   r   Ú
msg_readerr�   r­   rN   r>   Úreplay_protocol_versionr<   r�   s         €€€€€r6   Úreplay_senderzCStreamableHTTPServerTransport._replay_events.<locals>.replay_sender�  sc  øè è € ð*?Ø0ð $Oð $Oð $Oð $Oð $Oð $Oð $Oð $OðE½Lð EÈTð Eð Eð Eð Eð Eð Eð Eð
 +6×*IÒ*IÈ-ÐYcÑ*dÔ*dÐ$dÐ$dÐ$dÐ$dÐ$dÐ$d˜	ð %ñ O¨¸$Ô:OÐ)OÑ)OðOàFW Ô 8¸Ñ Cð
 7;×6NÒ6NÈyÐZqÑ6rÔ6rÐ0rÐ0rÐ0rÐ0rÐ0rÐ0r Ø#0Ð#<Ø*;×*@Ò*@ÀÑ*OÔ*OÐ$OÐ$OÐ$OÐ$OÐ$OÐ$OÐ$Oõ DIÔCdÕeqÔCrÝ$>ñD"ô D" Ô 5°iÑ @ð .2Ô-BÀ9Ô-MÈaÔ-P 
ð ,6ð !Qð !Qð !Qð !Qð !Qð !Qð !Qð !QØ?Ið %Qð %Qð %Qð %Qð %Qð %Qð %Q¨mØ59×5LÒ5LÈ]Ñ5[Ô5[¨
à.?×.DÒ.DÀZÑ.PÔ.PÐ(PÐ(PÐ(PÐ(PÐ(PÐ(PÐ(PÐ(Pð @J¸zð!Qð !Qð !Qñ !Qô !Qð !Qð !Qð !Qð !Qð !Qð !Qð !Qð !Qð !Qð !Qð !Qð !Qð !Qð !Qð !Qð !Qð !Qð !Qøøøð !Qð !Qð !Qð !Qð !%Ô 8× <Ò <¸YÈÑ MÔ MÐ MØ&*×&CÒ&CÀIÑ&NÔ&NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ Nøð !%Ô 8× <Ò <¸YÈÑ MÔ MÐ MØ&*×&CÒ&CÀIÑ&NÔ&NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NøøøðI$Oð $Oð $Oñ $Oô $Oð $Oð $Oð $Oð $Oð $Oð $Oð $Oð $Oð $Oð $Oð $Oð $Oð $Oð $Oð $Oð $Oð $Oð $Oð $Oøøøð $Oð $Oð $Oð $Oð $Oð $OøõJ Ô0ð Sð Sð Så—L’LÐ!QÑRÔRÐRÐRÐRÐRÝ ð ?ð ?ð ?Ý×$Ò$Ð%=Ñ>Ô>Ð>Ð>Ð>Ð>ð?øøøsƒ   …G
 �:F7ÁB
E)ÃD!ÃDÃ3D!ÄE)Ä!
D+	Ä+E)Ä.D+	Ä/E)Ä27F7Å)8F!Æ!F7Æ$G
 Æ7
GÇG
 ÇGÇG
 Ç
)HÇ6#HÈHrí   zError in replay responsezError replaying events)rU   rÏ   rL   r    r”   r©   rú   r   rˆ   rû   rý   r   r±   r²   rŒ   rŠ   r�   r°   r¤   r   rü   r   )r<   r>   rj   r„   r”   r  r+  r¿   rN   r*  r�   s   ``      @@@r6   r  z,StreamableHTTPServerTransport._replay_eventsv  sv  øøøøøè è € ð
 Ô'ˆØð 	ØˆFðS	Aà!9Ø*Ý 0ðð ˆGð Ô"ð EØ15Ô1D�Õ-Ñ.ð '.¤o×&9Ò&9Õ:UÕWqÑ&rÔ&rÐ#õ 49Ô3TÕU]Ô3^Ð_`Ñ3aÔ3aÑ0ÐÐ0ð+?ð +?ð +?ð +?ð +?ð +?ð +?ð +?ð +?õ\ +Ø)Ø%2Øðñ ô ˆHð1Ø�h˜wœ}¨g¬o¸tÑDÔDÐDÐDÐDÐDÐDÐDÐDÐDøÝð =ð =ð =Ý× Ò Ð!;Ñ<Ô<Ð<Ð<Ð<ð=øøøð (×.Ò.Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ø'×.Ò.Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0øð (×.Ò.Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ø'×.Ò.Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0øøøøåð 	Að 	Að 	AÝ×ÒÐ5Ñ6Ô6Ð6Ø×2Ò2Ø(ÝÔ0Ýñô ˆHð
 �(˜7œ=¨'¬/¸4Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@ð	AøøøsI   ”BE ÂB6 Â5D Â6$CÃD ÃCÃD Ã 4E Ä6EÅE ÅA'F:Æ9F:c                ó˜  ‡ ‡K  — t          j        t          t          z           d¦  «        \  }}t          j        t                   d¦  «        \  }Š|‰ _        |‰ _        ‰‰ _        |‰ _        t          j        ¦   «         4 ƒd{V —†}ˆ ˆfd„}| 	                    |¦  «         	 ||fW V — t          ‰ j                             ¦   «         ¦  «        D ]}‰                      |¦  «        ƒ d{V —† Œ‰ j                             ¦   «          	 |                     ¦   «         ƒ d{V —† |                     ¦   «         ƒ d{V —† ‰                     ¦   «         ƒ d{V —† |                     ¦   «         ƒ d{V —† �n4# t          $ r(}t                                d|› �¦  «         Y d}~�nd}~ww xY w# t          ‰ j                             ¦   «         ¦  «        D ]}‰                      |¦  «        ƒ d{V —† Œ‰ j                             ¦   «          	 |                     ¦   «         ƒ d{V —† |                     ¦   «         ƒ d{V —† ‰                     ¦   «         ƒ d{V —† |                     ¦   «         ƒ d{V —† w # t          $ r'}t                                d|› �¦  «         Y d}~w d}~ww xY wxY wddd¦  «        ƒd{V —† dS # 1 ƒd{V —†swxY w Y   dS )z±Context manager that provides read and write streams for a connection.

        Yields:
            Tuple of (read_stream, write_stream) for bidirectional communication
        r   Nc               “   ó   •K  — 	 ‰2 3 d {V —†} | j         }d }t          |j        t          t          z  ¦  «        rt          |j        j        ¦  «        }|}nF| j        �?t          | j        t          ¦  «        r%| j        j	        �t          | j        j	        ¦  «        }|�|nt          }d }‰j        rA‰j                             ||¦  «        ƒ d {V —†}t                               d|› d|› �¦  «         |‰j        v rz	 ‰j        |         d                              t#          ||¦  «        ¦  «        ƒ d {V —† �Œ/# t$          j        t$          j        f$ r ‰j                             |d ¦  «         Y �Œhw xY wt                               d|› d�¦  «         �ŒŒ6 d S # t$          j        $ rB ‰j        rt                               d¦  «         Y d S t                               d¦  «         Y d S t0          $ r t                               d¦  «         Y d S w xY w)	NzStored z from r   zRequest stream z› not found 
                                for message. Still processing message as the client
                                might reconnect and replay.zRead stream closed by clientz3Unexpected closure of read stream in message routerzError in message router)r,   r†   r‡   r%   r"   r3   r{   rv   r   Úrelated_request_idrh   rU   r=   rŠ   r‹   rW   r„   r+   rˆ   ÚBrokenResourceErrorr‰   ra   rY   r�   rŒ   )r  r,   Útarget_request_idÚresponse_idÚrequest_stream_idr-   r<   Úwrite_stream_readers         €€r6   Úmessage_routerz=StreamableHTTPServerTransport.connect.<locals>.message_routerò  s½  øè è € ð6@Ø1Dð .ð .ð .ð .ð .ð .ð .˜oà"1Ô"9˜Ø,0Ð)å% g¤lµOÅlÑ4RÑSÔSð aÝ*-¨g¬l¬oÑ*>Ô*>˜Kð 1<Ð-Ð-ð ,Ô4Ð@Ý *Ø /Ô 8Ý 5ñ!ô !ð Að
 !0Ô 8Ô KÐ Wå03°OÔ4LÔ4_Ñ0`Ô0`Ð-àARÐA^Ð,=Ð,=ÕdrÐ)ð
 $(˜ØÔ,ð XØ-1Ô->×-JÒ-JÐK\Ð^eÑ-fÔ-fÐ'fÐ'fÐ'fÐ'fÐ'fÐ'f˜HÝ"ŸLšLÐ)V°8Ð)VÐ)VÐCTÐ)VÐ)VÑWÔWÐWà,°Ô0EÐEÐEðSà&*Ô&;Ð<MÔ&NÈqÔ&Q×&VÒ&VÕWcÐdkÐmuÑWvÔWvÑ&wÔ&wÐ wÐ wÐ wÐ wÐ wÐ wÐ wÑ wøå %Ô 9Ý %Ô 9ð$ð Sð Sð Sð
 !%Ô 5× 9Ò 9Ð:KÈTÑ RÔ RÐ RÐ RÑ RðSøøøõ #ŸLšLð!?Ð4Eð !?ð !?ð !?ñô ð ñ ðU 2EÐ1DÐ1Døõ^ Ô0ð `ð `ð `ØÔ'ð `ÝŸšÐ%CÑDÔDÐDÐDÐDÐDå×(Ò(Ð)^Ñ_Ô_Ð_Ð_Ð_Ð_Ý ð @ð @ð @Ý×$Ò$Ð%>Ñ?Ô?Ð?Ð?Ð?Ð?ð@øøøsL   …F ‡F�C,F Ã::D6Ä4F Ä66E0Å,F Å/E0Å0$F Æ0HÇ	HÇ&#HÈHr  )rˆ   rû   r   rŒ   rG   rH   rJ   rI   rþ   rÿ   r  rW   r  rŽ   r  r°   rŠ   r‹   )	r<   Úread_stream_writerÚread_streamÚwrite_streamr  r4  r9   r  r3  s	   `       @r6   Úconnectz%StreamableHTTPServerTransport.connectÔ  sr  øøè è € õ$ +0Ô*KÍNÕ]fÑLfÔ*gÐhiÑ*jÔ*jÑ'Ð˜KÝ,1Ô,MÍnÔ,]Ð^_Ñ,`Ô,`Ñ)ˆÐ)ð $6ˆÔ Ø'ˆÔØ$7ˆÔ!Ø)ˆÔõ Ô*Ñ,Ô,ð N	@ð N	@ð N	@ð N	@ð N	@ð N	@ð N	@°ð7@ð 7@ð 7@ð 7@ð 7@ð 7@ðt �MŠM˜.Ñ)Ô)Ð)ð@à! <Ð/Ð/Ð/Ð/Ð/å!% dÔ&;×&@Ò&@Ñ&BÔ&BÑ!CÔ!Cð Cð C�IØ×7Ò7¸	ÑBÔBÐBÐBÐBÐBÐBÐBÐBÐBØÔ%×+Ò+Ñ-Ô-Ð-ð@Ø,×3Ò3Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ø%×,Ò,Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ø-×4Ò4Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ø&×-Ò-Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ñ/øÝ ð @ð @ð @å—L’LÐ!>¸1Ð!>Ð!>Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ñ?øøøøð@øøøøõ "& dÔ&;×&@Ò&@Ñ&BÔ&BÑ!CÔ!Cð Cð C�IØ×7Ò7¸	ÑBÔBÐBÐBÐBÐBÐBÐBÐBÐBØÔ%×+Ò+Ñ-Ô-Ð-ð@Ø,×3Ò3Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ø%×,Ò,Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ø-×4Ò4Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ø&×-Ò-Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/øÝ ð @ð @ð @å—L’LÐ!>¸1Ð!>Ð!>Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?øøøøð@øøøøøøðYN	@ð N	@ð N	@ñ N	@ô N	@ð N	@ð N	@ð N	@ð N	@ð N	@ð N	@ð N	@ð N	@ð N	@ð N	@ð N	@ð N	@ð N	@ð N	@ð N	@ð N	@ð N	@ð N	@ð N	@øøøð N	@ð N	@ð N	@ð N	@ð N	@ð N	@s‚   ÂJ9Â#F'Â*AJ9ÄA(E2Å0J9Å2
F$Å<FÆJ9ÆF$Æ$J9Æ'AJ#ÈA(I/É.J#É/
J 	É9J	ÊJ#ÊJ 	Ê J#Ê#J9Ê9
KËK)FNNNrw   )?r.   r/   r0   r1   rG   r   r   rŒ   r2   rH   r   rI   rJ   r   r3   Úboolr8   r   Úintr[   Úpropertyr^   r&   rf   ri   r#   r   rx   rB   rý   r€   r+   r�   r   r   Údictr   r¤   r  r§   rª   r…   rŽ   r   r   r   rÀ   Útupler×   rà   rã   r»   r¼   r½   r  r¾   r÷   r  r   r  r   r   r8  r4   r5   r6   rF   rF   ƒ   s,  € € € € € € ðð ð VZÐÐ/°ÀÑ0JÔKÈdÑRÐYÐYÑYØQU€LÐ+¨N¸YÑ,FÔGÈ$ÑNÐUÐUÑUØCG€MÐ)¨.Ô9¸DÑ@ÐGÐGÑGØMQÐÐ3°NÔCÀdÑJÐQÐQÑQØ*Ð*Ð*Ñ*ð
 */Ø)-Ø>BØ%)ð.9ð .9à˜d™
ð.9ð #'ð.9ð   $Ñ&ð	.9ð
 5°tÑ;ð.9ð ˜d™
ð.9ð 
ð.9ð .9ð .9ð .9ð` ð ˜tð  ð  ð  ñ „Xð ð#¨9ð #¸ð #ð #ð #ð #ð8.ð .ð .ð .ð&:àð:ð ð:ð ð	:ð
 ð:ð 
ð:ð :ð :ð :ð@°8ð Èsð ÐW_ÐbfÑWfð ð ð ð ð$<àð<ð 2°(Ô;ð<ð  9¸ÔFð	<ð
   $‘ð<ð 
ð<ð <ð <ð <ð: *Ø)-ð
ð 
àð
ð  ð
ð ð	
ð
 �c˜3�h” $Ñ&ð
ð 
ð
ð 
ð 
ð 
ðD #-¤-Ø)-ð	
ð 
à(¨4Ñ/ð
ð  ð
ð �c˜3�h” $Ñ&ð	
ð
 
ð
ð 
ð 
ð 
ð(: wð :°3¸±:ð :ð :ð :ð :ð°ð Àð ð ð ð ð<¸ð <Àtð <ð <ð <ð <ðB¨%ð B¸'ð BÈð BÐRVð Bð Bð Bð Bð:!¨Wð !¸¸tÀT¸zÔ9Jð !ð !ð !ð !ðM¨7ð M°tð Mð Mð Mð Mð°Wð ÀUð ÐRVð Ð[_ð ð ð ð ð,{°ð {Àð {ÐRYð {Ðaeð {Ðjnð {ð {ð {ð {ðz\@°ð \@Àð \@Èð \@ð \@ð \@ð \@ð|=°Gð =À4ð =ÈDð =ð =ð =ð =ð.!8ð !8ð !8ð !8ðF=¸ð =Èð =ÐQUð =ð =ð =ð =ð °wð Àdð Ètð ð ð ð ð¨wð ¸dð Àtð ð ð ð ð:¸ð Àtð ÐPTð ð ð ð ð,\A°#ð \AÀð \AÈtð \AÐX\ð \Að \Að \Að \Að| ði@à	ØØ% n°yÑ&@ÔAØ" >Ô2ð4ô	
ð 	ð		ô
ði@ð i@ð i@ñ Ôði@ð i@ð i@r5   rF   )Pr1   rò   ÚloggingÚreÚabcr   r   Úcollections.abcr   r   r   Ú
contextlibr   Údataclassesr	   Ú	functoolsr
   Úhttpr   Útypingr   r   rˆ   Úanyio.streams.memoryr   r   Úpydanticr   Ússe_starletter   Ústarlette.requestsr   Ústarlette.responsesr   Ústarlette.typesr   r   r   Úmcp.server.transport_securityr   r   Úmcp.shared.messager   r   Úmcp.shared.versionr   Ú	mcp.typesr   r   r   r   r    r!   r"   r#   r$   r%   r&   Ú	getLoggerr.   rŠ   r    rú   r  rž   rÏ   rh   r)   r2   ÚcompilerR   r3   rB   rC   r<  rý   r+   rD   r8   rF   r4   r5   r6   ú<module>rS     s_  ððð ð ð €€€Ø €€€Ø 	€	€	€	Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø *Ð *Ð *Ð *Ð *Ð *Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð à €€€Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ $Ð $Ð $Ð $Ð $Ð $Ø -Ð -Ð -Ð -Ð -Ð -Ø &Ð &Ð &Ð &Ð &Ð &Ø (Ð (Ð (Ð (Ð (Ð (Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0ðð ð ð ð ð ð ð ð EÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ :Ð :Ð :Ð :Ð :Ð :ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 
ˆÔ	˜8Ñ	$Ô	$€ð )Ð Ø4Ð Ø&Ð ð 'Ð Ø&Ð ð €ð
 %'Ð ˜EÐ &Ð &Ñ &ð  �R”ZÐ 1Ñ2Ô2Ð ð €Ø
€à��S�Œ>€ð ð ð  ð  ð  ð  ñ  ô  ñ „ð ð ˜,˜¨°4¬Ð8Ô9€ð#ð #ð #ð #ð #�ñ #ô #ð #ðL{@ð {@ð {@ð {@ð {@ñ {@ô {@ð {@ð {@ð {@r5   