Ë
    Eü´j?k  ã                   óÀ  — U d dl Z d dlZd dl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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 dd	lmZ dd
lmZmZmZmZ ddl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6m7Z7 ddl8m9Z9m:Z: ddl;m<Z< ddl=m>Z> ej~                  dk\  rd dl	m@Z@ nd dlAm@Z@ ej~                  dk\  rd dlmBZB nd dl	mCZC eCeDeEddf   ZBej~                  dk\  rd dl ZFd dl	mGZG n
d dlFZFd dlAmGZG dZHdZIeeJ   eKd<    e@deLd ed    ¬!«      ZM ejœ                  d d d ¬"«       G d#„ d$«      «       ZO G d%„ d&e>eeM   «      ZPy)'é    N)ÚCallableÚIterable)ÚAnyÚFinalÚGenericÚLiteralÚcastÚoverload)ÚCIMultiDicté   )Úhdrs)ÚWebSocketDataQueue)ÚAbstractStreamWriter)ÚWSMessageTypeError)ÚDEFAULT_CHUNK_SIZEÚcalculate_timeout_whenÚset_exceptionÚ
set_result)ÚWS_CLOSED_MESSAGEÚWS_CLOSING_MESSAGEÚWS_KEYÚWebSocketErrorÚWebSocketReaderÚWebSocketWriterÚWSCloseCodeÚ	WSMessageÚWSMessageDecodeTextÚWSMessageNoDecodeTextÚ	WSMsgTypeÚ
ws_ext_genÚws_ext_parse)Ú_INTERNAL_RECEIVE_TYPES)Ú	ws_logger)Ú	EofStream)ÚJSONBytesEncoderÚJSONDecoderÚJSONEncoder)ÚHTTPBadRequestÚHTTPException)ÚBaseRequest)ÚStreamResponse)é   é   )ÚTypeVar©r,   é   )ÚBuffer)ÚUnionzmemoryview[int]zmemoryview[bytes])r,   é   )ÚSelf)ÚWebSocketResponseÚWebSocketReadyr   é   ÚTHRESHOLD_CONNLOST_ACCESSÚ_DecodeTextT)ÚboundÚ	covariantÚdefault)Úauto_attribsÚfrozenÚslotsc                   ó4   — e Zd ZU eed<   edz  ed<   defd„Zy)r6   ÚokNÚprotocolÚreturnc                 ó   — | j                   S ©N)rA   ©Úselfs    úL/root/workspace/ytshorts/venv/lib/python3.12/site-packages/aiohttp/web_ws.pyÚ__bool__zWebSocketReady.__bool__R   s   € Ø�w‰wˆó    )Ú__name__Ú
__module__Ú__qualname__ÚboolÚ__annotations__ÚstrrI   © rJ   rH   r6   r6   M   s   … àƒHØ�D‰jÓð˜$ô rJ   r6   c                   óê  ‡ — e Zd ZU dZeed<   dZedz  ed<   dZe	dz  ed<   dZ
edz  ed<   dZeed<   dZeed<   d	Zeed
<   dZedz  ed<   dZej&                  dz  ed<   dZeed<   dZej,                  d   dz  ed<   dZedz  ed<   dZeed<   dZej8                  dz  ed<   dZej8                  dz  ed<   dZej>                  d   dz  ed<   dZ eed<   dZ!ejD                  dz  ed<   dddddddde#ddœ
dededz  deded edz  d!e$e   d"ed#ed$ed%ed&dfˆ fd'„Z%dvd(„Z&dvd)„Z'dvd*„Z(dvd+„Z)dvd,„Z*dvd-„Z+dwd.„Z,dvd/„Z-d0ed&dfd1„Z.dvd2„Z/d3e0d&e1fˆ fd4„Z2d3e0d&e3d5edz  eef   fd6„Z4d3e0d&e3edz  e	f   fd7„Z5d3e0d8edz  d9e	d&dfd:„Z6d3e0d&e7fd;„Z8e9d&efd<„«       Z:e9d&efd=„«       Z;e9d&edz  fd>„«       Z<e9d&edz  fd?„«       Z=e9d&eez  fd@„«       Z>dxdAedBe?d&e?fdC„Z@d&edz  fdD„ZAdydFeBd&dfdG„ZCdydFeBd&dfdH„ZD	 dxdFeBdIeEd"edz  d&dfdJ„ZFdxdKed"edz  d&dfdL„ZGdxdKeBd"edz  d&dfdM„ZH	 dxeIj”                  dNœdKe?d"edz  dOeKd&dfdP„ZL	 dxdKe?d"edz  dOeMd&dfdQ„ZNdvdR„ZOePj¢                  dEddSœdTedFeBdUed&efdV„ZRdTePd&dfdW„ZSdTePd&dfdX„ZTdvdY„ZUeV	 dxdZd[dedz  d&eWfd\„«       ZXeV	 dxdZd]dedz  d&eYfd^„«       ZXeV	 dxdZd_dedz  d&eWeYz  fd`„«       ZX	 dxdedz  d&eWeYz  fda„ZXeVddbœdZd[dedz  d&efdc„«       ZZeVddbœdZd]dedz  d&eBfdd„«       ZZeVddbœdZd_dedz  d&eeBz  fde„«       ZZddbœdedz  d&eeBz  fdf„ZZddbœdedz  d&eBfdg„Z[eVdhddiœdZd[dje\dedz  d&e?fdk„«       Z]eVdhddiœdZd]dje^eBge?f   dedz  d&e?fdl„«       Z]eVdhddiœdZd_dje\e^eBge?f   z  dedz  d&e?fdm„«       Z]eIj¾                  ddiœdje\e^eBge?f   z  dedz  d&e?fdn„Z]dKe`d&dfdo„Zad&ebfdp„ZceVdZd[d&eWfdq„«       ZdeVdZd]d&eYfdr„«       ZdeVdZd_d&eWeYz  fds„«       Zdd&eWeYz  fdt„Zdd0ed&dfdu„Zeˆ xZfS )zr5   FÚ_length_checkNÚ_ws_protocolÚ_writerÚ_readerÚ_closedÚ_closingr   Ú
_conn_lostÚ_close_codeÚ_loopÚ_waitingÚ_close_waitÚ
_exceptiong        Ú_heartbeat_whenÚ_heartbeat_cbÚ_pong_response_cbÚ
_ping_taskÚ_need_heartbeat_resetÚ_heartbeat_reset_handleg      $@TrQ   i  @ )
ÚtimeoutÚreceive_timeoutÚ	autocloseÚautopingÚ	heartbeatÚ	protocolsÚcompressÚmax_msg_sizeÚwriter_limitÚdecode_textre   rf   rg   rh   ri   rj   rk   rl   rm   rn   rC   c       
         óæ   •— t         ‰| �  d¬«       || _        || _        || _        || _        || _        || _        |�
|dz  | _        || _	        || _
        |	| _        |
| _        d| _        d | _        y )Née   )Ústatusg       @F)ÚsuperÚ__init__Ú
_protocolsÚ_timeoutÚ_receive_timeoutÚ
_autocloseÚ	_autopingÚ
_heartbeatÚ_pong_heartbeatÚ	_compressÚ_max_msg_sizeÚ_writer_limitÚ_decode_textrc   rd   )rG   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   Ú	__class__s              €rH   rs   zWebSocketResponse.__init__k   s�   ø€ ô 	‰Ñ ÐÔ$Ø#ˆŒØˆŒØ /ˆÔØ#ˆŒØ!ˆŒØ#ˆŒØÐ Ø#,¨s¡?ˆDÔ Ø%-ˆŒØ)ˆÔØ)ˆÔØ'ˆÔØ%*ˆÔ"Ø'+ˆÕ$rJ   c                 óB  — | j                  «        | j                  �!| j                  j                  «        d | _        d| _        | j                  �!| j                  j                  «        d | _        | j
                  �"| j
                  j                  «        d | _        y y ©NF)Ú_cancel_pong_response_cbrd   Úcancelrc   r`   rb   rF   s    rH   Ú_cancel_heartbeatz#WebSocketResponse._cancel_heartbeat‰   sˆ   € Ø×%Ñ%Ô'Ø×'Ñ'Ð3Ø×(Ñ(×/Ñ/Ô1Ø+/ˆDÔ(Ø%*ˆÔ"Ø×ÑÐ)Ø×Ñ×%Ñ%Ô'Ø!%ˆDÔØ�?‰?Ð&Ø�O‰O×"Ñ"Ô$Ø"ˆD�Oð 'rJ   c                 ó`   — | j                   �"| j                   j                  «        d | _         y y rE   )ra   rƒ   rF   s    rH   r‚   z*WebSocketResponse._cancel_pong_response_cb–   s-   € Ø×!Ñ!Ð-Ø×"Ñ"×)Ñ)Ô+Ø%)ˆDÕ"ð .rJ   c                 ó¤   — | j                   �| j                  ry | j                  }|€J ‚d| _        |j                  | j                  «      | _        y ©NT)ry   rc   r[   Ú	call_soonÚ_flush_heartbeat_resetrd   )rG   Úloops     rH   Ú_on_data_receivedz#WebSocketResponse._on_data_received›   sM   € Ø�?‰?Ð" d×&@Ò&@ØØ�z‰zˆØÐÐÐð &*ˆÔ"Ø'+§~¡~°d×6QÑ6QÓ'RˆÕ$rJ   c                 óZ   — d | _         | j                  sy | j                  «        d| _        y r�   )rd   rc   Ú_reset_heartbeatrF   s    rH   r‰   z(WebSocketResponse._flush_heartbeat_reset¥   s*   € Ø'+ˆÔ$Ø×)Ò)ØØ×ÑÔØ%*ˆÕ"rJ   c                 ób  — | j                   €y | j                  «        | j                  }|�|j                  j                  nd}| j
                  }|€J ‚|j                  «       }t        || j                   |«      }|| _        | j                  €"|j                  || j                  «      | _	        y y )Nr7   )ry   r‚   Ú_reqÚ	_protocolÚ_timeout_ceil_thresholdr[   Útimer   r_   r`   Úcall_atÚ_send_heartbeat)rG   ÚreqÚtimeout_ceil_thresholdrŠ   ÚnowÚwhens         rH   r�   z"WebSocketResponse._reset_heartbeat¬   s¥   € Ø�?‰?Ð"ØØ×%Ñ%Ô'Ø�i‰iˆà58°_ˆC�M‰M×1Ò1È!ð 	ð �z‰zˆØÐÐÐØ�i‰i‹kˆÜ% c¨4¯?©?Ð<RÓSˆØ#ˆÔØ×ÑÐ%ð "&§¡¨d°D×4HÑ4HÓ!IˆDÕð &rJ   c                 ó,  — d | _         | j                  ry | j                  }|�| j                  €J ‚|j	                  «       }|| j
                  k  r,|j                  | j
                  | j                  «      | _         y | j                  }|�|j                  j                  nd}t        || j                  |«      }| j                  «        |j                  || j                  «      | _        | j                  j!                  dt"        j$                  «      }t&        j(                  dk\  rt+        j,                  ||d¬«      }n|j/                  |«      }|j1                  «       s#|| _        |j5                  | j6                  «       y | j7                  |«       y )Nr7   rJ   r/   T)rŠ   Úeager_start)r`   rc   r[   rU   r’   r_   r“   r”   r�   r�   r‘   r   rz   r‚   Ú_pong_not_receivedra   Ú
send_framer   ÚPINGÚsysÚversion_infoÚasyncioÚTaskÚcreate_taskÚdonerb   Úadd_done_callbackÚ_ping_task_done)rG   rŠ   r—   r•   r–   r˜   ÚcoroÚ	ping_tasks           rH   r”   z!WebSocketResponse._send_heartbeatÁ   sR  € Ø!ˆÔð ×%Ò%Øà�z‰zˆØÐ D§L¡LÐ$<Ð<Ð<Ø�i‰i‹kˆØ�×%Ñ%Ò%à!%§¡Ø×$Ñ$ d×&:Ñ&:ó"ˆDÔð à�i‰iˆà58°_ˆC�M‰M×1Ò1È!ð 	ô & c¨4×+?Ñ+?ÐAWÓXˆØ×%Ñ%Ô'Ø!%§¡¨d°D×4KÑ4KÓ!LˆÔà�|‰|×&Ñ& s¬I¯N©NÓ;ˆÜ×Ñ˜wÒ&ô  Ÿ™ T°À$ÔG‰Ià×(Ñ(¨Ó.ˆIà�~‰~ÔØ'ˆDŒOØ×'Ñ'¨×(<Ñ(<Õ=à× Ñ  Õ+rJ   c                 óx   — |j                  «       s#|j                  «       x}r| j                  |«       d| _        y)z*Callback for when the ping task completes.N)Ú	cancelledÚ	exceptionÚ_handle_ping_pong_exceptionrb   )rG   ÚtaskÚexcs      rH   r¥   z!WebSocketResponse._ping_task_doneê   s2   € à�~‰~Ô¨D¯N©NÓ,<Ð%< SÐ%<Ø×,Ñ,¨SÔ1Øˆ�rJ   c                 ó°   — | j                   �J| j                   j                  �3| j                  t        j                  d| j
                  › d�«      «       y y y )NzNo PONG received after z seconds)r�   Ú	transportr«   r    ÚTimeoutErrorrz   rF   s    rH   r›   z$WebSocketResponse._pong_not_receivedð   sS   € Ø�9‰9Ð  T§Y¡Y×%8Ñ%8Ð%DØ×,Ñ,Ü×$Ñ$Ø-¨d×.BÑ.BÐ-CÀ8ÐLóõð &EÐ rJ   r­   c                 óB  — | j                   ry| j                  «        | j                  t        j                  «       || _        | j                  rP| j                  sC| j                  �6| j                  j                  t        t        j                  |d«      d«       yyyy)z5Handle exceptions raised during ping/pong processing.Nr   )rW   Ú_set_closedÚ_set_code_close_transportr   ÚABNORMAL_CLOSUREr^   r\   rX   rV   Ú	feed_datar   r   ÚERROR©rG   r­   s     rH   r«   z-WebSocketResponse._handle_ping_pong_exceptionø   st   € à�<Š<ØØ×ÑÔØ×&Ñ&¤{×'CÑ'CÔDØˆŒØ�=Š= §¢°4·<±<Ð3KØ�L‰L×"Ñ"¤9¬Y¯_©_¸cÀ4Ó#HÈ!ÕLð 4L ˆ=rJ   c                 ó2   — d| _         | j                  «        y)zdSet the connection to closed.

        Cancel any heartbeat timers and set the closed flag.
        TN)rW   r„   rF   s    rH   r²   zWebSocketResponse._set_closed  s   € ð
 ˆŒØ×ÑÕ rJ   Úrequestc              ƒ   óü   •K  — | j                   �| j                   S | j                  |«      \  }}t        ‰| �  |«      ƒ d {  –—† }|€J ‚| j	                  |||«       |j                  «       ƒ d {  –—†  |S 7 Œ57 Œ­wrE   )Ú_payload_writerÚ
_pre_startrr   ÚprepareÚ_post_startÚdrain)rG   r¹   rB   ÚwriterÚpayload_writerr   s        €rH   r½   zWebSocketResponse.prepare
  s„   øè ø€ à×ÑÐ+Ø×'Ñ'Ð'àŸ?™?¨7Ó3Ñˆ�&Ü$™w™¨wÓ7×7ˆØÐ)Ð)Ð)Ø×Ñ˜ (¨FÔ3Ø×"Ñ"Ó$×$Ð$ØÐð	 8øð 	%ús#   ƒ?A<ÁA8Á.A<Á1A:Á2A<Á:A<zCIMultiDict[str]c                 ó:  — |j                   }d|j                  t        j                  d«      j	                  «       j                  «       k7  r-t        d|j                  t        j                  «      › d�¬«      ‚|j                  j                  s,t        d|j                  t        j                  «      › �¬«      ‚d }t        j                  |v r‹|t        j                     j                  d«      D �cg c]  }t        |j                  «       «      ‘Œ }}|D ]  }|| j                  v sŒ|} n- t        j                  d|j                   || j                  «       |j                  t        j"                  d«      }|d	vrt        d
|› �¬«      ‚|j                  t        j$                  «      }	 |r!t'        t)        j*                  |«      «      dk7  rt        d|›�¬«      ‚	 t)        j0                  t3        j4                  |j7                  «       t8        z   «      j;                  «       «      j=                  «       }t?        t        j                  dt        j                  dt        j@                  |i«      }	d}
d}| jB                  rR|j                  t        jD                  «      }tG        |d¬«      \  }}
|r!tI        |d|
¬«      }||	t        jD                  <   |r||	t        j                  <   |	|||
fS c c}w # t,        j.                  $ r t        d|›�¬«      d ‚w xY w)NÚ	websocketÚ zNo WebSocket UPGRADE hdr: z$
 Can "Upgrade" only to "WebSocket".)ÚtextzNo CONNECTION upgrade hdr: ú,u<   %s: Client protocols %r donâ€™t overlap server-known ones %r)Ú13Ú8Ú7zUnsupported version: é   zHandshake error: ÚupgradeFr   T)Úisserver)rk   rÌ   Úserver_notakeover)%ÚheadersÚgetr   ÚUPGRADEÚlowerÚstripr(   Ú_messagerË   Ú
CONNECTIONÚSEC_WEBSOCKET_PROTOCOLÚsplitrP   rt   r#   ÚwarningÚremoteÚSEC_WEBSOCKET_VERSIONÚSEC_WEBSOCKET_KEYÚlenÚbase64Ú	b64decodeÚbinasciiÚErrorÚ	b64encodeÚhashlibÚsha1Úencoder   ÚdigestÚdecoder   ÚSEC_WEBSOCKET_ACCEPTr{   ÚSEC_WEBSOCKET_EXTENSIONSr!   r    )rG   r¹   rÎ   rB   ÚprotoÚreq_protocolsÚversionÚkeyÚ
accept_valÚresponse_headersÚ
notakeoverrk   Ú
extensionsÚ
enabledexts                 rH   Ú
_handshakezWebSocketResponse._handshake  sã  € ð —/‘/ˆØ˜'Ÿ+™+¤d§l¡l°BÓ7×=Ñ=Ó?×EÑEÓGÒGÜ à0°·±¼T¿\¹\Ó1JÐ0Kð L5ð 5ôð ð ×Ñ×'Ò'Ü Ø2°7·;±;¼t¿¹Ó3OÐ2PÐQôð ð
  $ˆÜ×&Ñ&¨'Ñ1ð %¤T×%@Ñ%@ÑA×GÑGÈÓLöàô �E—K‘K“MÕ"ðˆMð ð
 'ò �Ø˜DŸO™OÒ+Ø$�HÙðô ×!Ñ!ØRØ—N‘NØ!Ø—O‘Oô	ð —+‘+œd×8Ñ8¸"Ó=ˆØÐ*Ñ*Ü Ð(=¸g¸YÐ&GÔHÐHð �k‰kœ$×0Ñ0Ó1ˆð	MÙœ#œf×.Ñ.¨sÓ3Ó4¸Ò:Ü$Ð,=¸c¸WÐ*EÔFÐFð ;ô
 ×%Ñ%Ü�L‰L˜Ÿ™›¬Ñ.Ó/×6Ñ6Ó8ó
ç
‰&‹(ð 	ô 'ä—‘˜kÜ—‘ Ü×)Ñ)¨:ðó
Ðð ˆ
ØˆØ�>Š>Ø Ÿ™¤T×%BÑ%BÓCˆJô $0°
ÀTÔ#JÑ ˆH�jÙÜ'Ø%°È
ô�
ð CMÐ ¤×!>Ñ!>Ñ?áØ<DÐœT×8Ñ8Ñ9àØØØð	
ð 	
ùòsøô8 �~‰~ò 	MÜ Ð(9¸#¸Ð&AÔBÈÐLð	Mús   Ã3 K1Æ-2K6 Ë6$Lc                 ól  — |j                   | _         | j                  |«      \  }}}}| j                  d«       | j                  j	                  |«       | j                  «        || _        |j                  j                  }|€t        d«      ‚t        |j                  |||| j                  ¬«      }||fS )Nrp   zConnection lost)rk   rî   Úlimit)r[   rñ   Ú
set_statusrÎ   ÚupdateÚforce_closer{   r�   r¯   ÚConnectionResetErrorr   r}   )rG   r¹   rÎ   rB   rk   rî   r¯   rÀ   s           rH   r¼   zWebSocketResponse._pre_startj  sª   € Ø—]‘]ˆŒ
à26·/±/À'Ó2JÑ/ˆ�˜8 Zà�‰˜ÔØ�‰×Ñ˜GÔ$Ø×ÑÔØ!ˆŒØ×%Ñ%×/Ñ/ˆ	ØÐÜ&Ð'8Ó9Ð9Ü Ø×ÑØØØ!Ø×$Ñ$ô
ˆð ˜ÐÐrJ   rB   rÀ   c                 óÆ  — || _         || _        | j                  «        | j                  }|€J ‚t	        |j
                  t        |¬«      | _        t        | j                  | j                  t        | j                  «      | j                  ¬«      }| j                  €d n| j                  }|j                  j!                  ||¬«       |j                  j#                  d«       y )N)rŠ   )rk   rn   )Údata_received_cbF)rT   rU   r�   r[   r   r�   r   rV   r   r|   rN   r{   r~   ry   r‹   rB   Ú
set_parserÚ
keep_alive)rG   r¹   rB   rÀ   rŠ   ÚparserÚcbs          rH   r¾   zWebSocketResponse._post_start€  sÄ   € ð %ˆÔØˆŒà×ÑÔà�z‰zˆØÐÐÐÜ)Ø×ÑÔ1¸ô
ˆŒô !Ø�L‰LØ×ÑÜ˜$Ÿ.™.Ó)Ø×)Ñ)ô	
ˆð —_‘_Ð,‰T°$×2HÑ2HˆØ×Ñ×#Ñ# F¸RÐ#Ô@à×Ñ×#Ñ# EÕ*rJ   c                 ó¬   — | j                   �t        d«      ‚	 | j                  |«      \  }}}}t        d|«      S # t        $ r t        dd «      cY S w xY w)NzAlready startedTF)rU   ÚRuntimeErrorrñ   r6   r)   )rG   r¹   Ú_rB   s       rH   Úcan_preparezWebSocketResponse.can_prepare˜  sa   € Ø�<‰<Ð#ÜÐ0Ó1Ð1ð	2Ø $§¡°Ó 8ÑˆAˆx˜˜Aô " $¨Ó1Ð1øô ò 	/Ü! %¨Ó.Ò.ð	/ús   ™; »AÁAc                 ó   — | j                   d uS rE   )rU   rF   s    rH   ÚpreparedzWebSocketResponse.prepared¢  s   € à�|‰| 4Ð'Ð'rJ   c                 ó   — | j                   S rE   )rW   rF   s    rH   ÚclosedzWebSocketResponse.closed¦  s   € à�|‰|ÐrJ   c                 ó   — | j                   S rE   )rZ   rF   s    rH   Ú
close_codezWebSocketResponse.close_codeª  s   € à×ÑÐrJ   c                 ó   — | j                   S rE   )rT   rF   s    rH   Úws_protocolzWebSocketResponse.ws_protocol®  s   € à× Ñ Ð rJ   c                 ó   — | j                   S rE   )r{   rF   s    rH   rk   zWebSocketResponse.compress²  s   € à�~‰~ÐrJ   Únamer<   c                 óf   — | j                   }|€|S |j                  }|€|S |j                  ||«      S )z}Get optional transport information.

        If no value associated with ``name`` is found, ``default`` is returned.
        )rU   r¯   Úget_extra_info)rG   r  r<   rÀ   r¯   s        rH   r  z WebSocketResponse.get_extra_info¶  s@   € ð
 —‘ˆØˆ>ØˆNØ×$Ñ$ˆ	ØÐØˆNØ×'Ñ'¨¨gÓ6Ð6rJ   c                 ó   — | j                   S rE   )r^   rF   s    rH   rª   zWebSocketResponse.exceptionÃ  s   € Ø�‰ÐrJ   rJ   Úmessagec              ƒ   ó¢   K  — | j                   €t        d«      ‚| j                   j                  |t        j                  «      ƒ d {  –—†  y 7 Œ­w©NúCall .prepare() first)rU   rÿ   rœ   r   r�   ©rG   r  s     rH   ÚpingzWebSocketResponse.pingÆ  s:   è ø€ Ø�<‰<ÐÜÐ6Ó7Ð7Ø�l‰l×%Ñ% g¬y¯~©~Ó>×>Ò>úó   ‚AAÁAÁAc              ƒ   ó¢   K  — | j                   €t        d«      ‚| j                   j                  |t        j                  «      ƒ d {  –—†  y 7 Œ­wr  )rU   rÿ   rœ   r   ÚPONGr  s     rH   ÚpongzWebSocketResponse.pongË  s:   è ø€ à�<‰<ÐÜÐ6Ó7Ð7Ø�l‰l×%Ñ% g¬y¯~©~Ó>×>Ò>úr  Úopcodec              ƒ   óˆ   K  — | j                   €t        d«      ‚| j                   j                  |||«      ƒ d{  –—†  y7 Œ­w)z Send a frame over the websocket.Nr  )rU   rÿ   rœ   )rG   r  r  rk   s       rH   rœ   zWebSocketResponse.send_frameÑ  s:   è ø€ ð �<‰<ÐÜÐ6Ó7Ð7Ø�l‰l×%Ñ% g¨v°xÓ@×@Ò@ús   ‚8AºA »AÚdatac              ƒ   ó  K  — | j                   €t        d«      ‚t        |t        «      st	        dt        |«      z  «      ‚| j                   j                  |j                  d«      t        j                  |¬«      ƒ d {  –—†  y 7 Œ­w)Nr  zdata argument must be str (%r)zutf-8©rk   )
rU   rÿ   Ú
isinstancerP   Ú	TypeErrorÚtyperœ   rã   r   ÚTEXT©rG   r  rk   s      rH   Úsend_strzWebSocketResponse.send_strÙ  sp   è ø€ Ø�<‰<ÐÜÐ6Ó7Ð7Ü˜$¤Ô$ÜÐ<¼tÀD»zÑIÓJÐJØ�l‰l×%Ñ%Ø�K‰K˜Ó ¤)§.¡.¸8ð &ó 
÷ 	
ò 	
ús   ‚A=BÁ?BÂ Bc              ƒ   ó
  K  — | j                   €t        d«      ‚t        |t        t        t
        f«      st        dt        |«      z  «      ‚| j                   j                  |t        j                  |¬«      ƒ d {  –—†  y 7 Œ­w)Nr  z#data argument must be byte-ish (%r)r  )rU   rÿ   r  ÚbytesÚ	bytearrayÚ
memoryviewr  r   rœ   r   ÚBINARYr"  s      rH   Ú
send_byteszWebSocketResponse.send_bytesâ  sg   è ø€ Ø�<‰<ÐÜÐ6Ó7Ð7Ü˜$¤¬	´:Ð >Ô?ÜÐAÄDÈÃJÑNÓOÐOØ�l‰l×%Ñ% d¬I×,<Ñ,<ÀxÐ%ÓP×PÒPús   ‚A9BÁ;BÁ<B)Údumpsr*  c             ƒ   óR   K  — | j                   ||«      |¬«      ƒ d {  –—†  y 7 Œ­w)Nr  )r#  ©rG   r  rk   r*  s       rH   Ú	send_jsonzWebSocketResponse.send_jsoné  s"   è ø€ ð �m‰m™E $›K°(ˆmÓ;×;Ò;úó   ‚'Ÿ% 'c             ƒ   óR   K  — | j                   ||«      |¬«      ƒ d{  –—†  y7 Œ­w)zÌSend JSON data using a bytes-returning encoder as a binary frame.

        Use this when your JSON encoder (like orjson) returns bytes
        instead of str, avoiding the encode/decode overhead.
        r  N)r)  r,  s       rH   Úsend_json_bytesz!WebSocketResponse.send_json_bytesò  s"   è ø€ ð �o‰o™e D›k°HˆoÓ=×=Ò=úr.  c              ƒ   ó–   K  — | j                   ry | j                  €t        d«      ‚| j                  «       ƒ d {  –—†  d| _         y 7 Œ­w)NzResponse has not been startedT)Ú	_eof_sentr»   rÿ   ÚcloserF   s    rH   Ú	write_eofzWebSocketResponse.write_eof   sC   è ø€ Ø�>Š>ØØ×ÑÐ'ÜÐ>Ó?Ð?à�j‰j‹l×ÐØˆ�ð 	ús   ‚8A	ºA»A	)Úcoder  r¿   r5  r¿   c             ƒ   ó„  K  — | j                   €t        d«      ‚| j                  ry| j                  «        	 | j                   j	                  ||«      ƒ d{  –—†  | j
                  }|€J ‚|r|j                  «       ƒ d{  –—†  | j                  }|€J ‚| j                   re| j"                  €J ‚| j$                  �J ‚| j"                  j'                  «       | _        |j)                  t*        d«       | j$                  ƒ d{  –—†  | j,                  r| j/                  «        y	 t1        j2                  | j4                  «      4 ƒd{  –—†  	 |j7                  «       ƒ d{  –—† }|j8                  t:        j<                  u r-| j                  |j>                  «       	 ddd«      ƒd{  –—†  yŒb7 �ŒY7 �Œ2# t        j                  t        j                  f$ r! | j                  t        j                  «       ‚ t        $ r0}|| _        | j                  t        j                  «       Y d}~yd}~ww xY w7 �Œ27 Œî7 Œ×7 Œ‘# 1 ƒd{  –—†7  sw Y   yxY w# t        j                  $ r! | j                  t        j                  «       ‚ t        $ r0}|| _        | j                  t        j                  «       Y d}~yd}~ww xY w­w)zClose websocket connection.Nr  FTr   ) rU   rÿ   rW   r²   r3  r»   r¿   r    ÚCancelledErrorr°   r³   r   r´   Ú	Exceptionr^   rV   r\   r[   r]   Úcreate_futurerµ   r   rX   Ú_close_transportÚasync_timeoutre   ru   Úreadr   r   ÚCLOSEr  )rG   r5  r  r¿   rÀ   r­   ÚreaderÚmsgs           rH   r3  zWebSocketResponse.close	  sT  è ø€ ð �<‰<ÐÜÐ6Ó7Ð7à�<Š<ØØ×ÑÔð	Ø—,‘,×$Ñ$ T¨7Ó3×3Ð3Ø×)Ñ)ˆFØÐ%Ð%Ð%ÙØ—l‘l“n×$Ð$ð —‘ˆØÐ!Ð!Ð!ð �=Š=Ø—:‘:Ð)Ð)Ð)Ø×#Ñ#Ð+Ð+Ð+Ø#Ÿz™z×7Ñ7Ó9ˆDÔØ×ÑÔ/°Ô3Ø×"Ñ"×"Ð"à�=Š=Ø×!Ñ!Ô#Øð	Ü$×,Ñ,¨T¯]©]Ó;÷ $ñ $ØØ &§¡£×-�CØ—x‘x¤9§?¡?Ñ2Ø×6Ñ6°s·x±xÔ@Ø#÷$÷ $ð $Øð= 4ùð %úÜ×&Ñ&¬×(<Ñ(<Ð=ò 	Ø×*Ñ*¬;×+GÑ+GÔHØÜò 	Ø!ˆDŒOØ×*Ñ*¬;×+GÑ+GÔHÜûð	úð #ùð$øà-øð$ø÷ $÷ $ñ $ûô ×%Ñ%ò 	Ø×*Ñ*¬;×+GÑ+GÔHØÜò 	Ø!ˆDŒOØ×*Ñ*¬;×+GÑ+GÔHÜûð	üsö   ‚5K ¸F6 ÁF0Á)F6 ÂF3ÂF6 ÂA<K ÄH4Ä!K Ä%#I ÅH7Å	I ÅH=Å!H9Å"<H=ÆI Æ)H;Æ*I Æ.K Æ/H=Æ0F6 Æ3F6 Æ6AH1È&H,È'K È,H1È1K È7I È9H=È;I È=IÉIÉIÉI ÉK ÉI É;J=Ê&J8Ê3K Ê8J=Ê=K c                 ó@   — d| _         || _        | j                  «        y)z6Set the close code and mark the connection as closing.TN)rX   rZ   r„   ©rG   r5  s     rH   Ú_set_closingzWebSocketResponse._set_closing@  s   € àˆŒØˆÔØ×ÑÕ rJ   c                 ó2   — || _         | j                  «        y)z+Set the close code and close the transport.N)rZ   r:  rA  s     rH   r³   z+WebSocketResponse._set_code_close_transportF  s   € àˆÔØ×ÑÕrJ   c                 ó”   — | j                   �<| j                   j                  �%| j                   j                  j                  «        yyy)zClose the transport.N)r�   r¯   r3  rF   s    rH   r:  z"WebSocketResponse._close_transportK  s:   € à�9‰9Ð  T§Y¡Y×%8Ñ%8Ð%DØ�I‰I×Ñ×%Ñ%Õ'ð &EÐ rJ   rG   z WebSocketResponse[Literal[True]]c              ƒ   ó   K  — y ­wrE   rQ   ©rG   re   s     rH   ÚreceivezWebSocketResponse.receiveP  ó   è ø€ ð "ùó   ‚z!WebSocketResponse[Literal[False]]c              ƒ   ó   K  — y ­wrE   rQ   rF  s     rH   rG  zWebSocketResponse.receiveU  ó   è ø€ ð !$ùrI  zWebSocketResponse[_DecodeText]c              ƒ   ó   K  — y ­wrE   rQ   rF  s     rH   rG  zWebSocketResponse.receiveZ  ó   è ø€ ð 7:ùrI  c              ƒ   ó  K  — | j                   €t        d«      ‚|xs | j                  }	 | j                  rt        d«      ‚| j                  r9| xj
                  dz  c_        | j
                  t        k\  rt        d«      ‚t        S | j                  rt        S 	 d| _        	 |rQt        j                  |«      4 ƒd {  –—†  | j                   j                  «       ƒ d {  –—† }d d d «      ƒd {  –—†  n"| j                   j                  «       ƒ d {  –—† }d| _        | j                  rt        | j                  d «       	 j@                  tB        vr|S |j@                  t.        jD                  u rO| j=                  |jF                  «       | j                  s&| jH                  r| j+                  d¬«      ƒ d {  –—†  |S |j@                  t.        jJ                  u r!| j=                  t$        j&                  «       |S |j@                  t.        jL                  u r1| jN                  r%| jQ                  |jF                  «      ƒ d {  –—†  �Œ |j@                  t.        jR                  u r| jN                  r�ŒJ|S 7 �Œ¹7 �Œš7 �Œ�# 1 ƒd {  –—†7  sw Y   �Œ{xY w7 �Œƒ# d| _        | j                  rt        | j                  d «       w w xY w# t        j                   $ r ‚ t"        $ rL t$        j&                  | _        | j+                  «       ƒ d {  –—†7   t-        t.        j0                  d d «      cY S t2        $ r[}|j4                  | _        | j+                  |j4                  ¬«      ƒ d {  –—†7   t-        t.        j6                  |d «      cY d }~S d }~wt8        $ rd}|| _        | j=                  t$        j>                  «       | j+                  «       ƒ d {  –—†7   t-        t.        j6                  |d «      cY d }~S d }~ww xY w7 �ŒF7 �Œ¿­w)	Nr  Tz+Concurrent call to receive() is not allowedr   zWebSocket connection is closed.F)r5  )r¿   )*rV   rÿ   rv   r\   rW   rY   r8   r   rX   r   r;  re   r<  r]   r   r    r°   r$   r   ÚOKrZ   r3  r   r   ÚCLOSEDr   r5  r¶   r8  r^   rB  r´   r   r"   r=  r  rw   ÚCLOSINGr�   rx   r  r  )rG   re   rf   r?  r­   s        rH   rG  zWebSocketResponse.receive_  s  è ø€ ð �<‰<ÐÜÐ6Ó7Ð7à!Ò: T×%:Ñ%:ˆØØ�}Š}Ü"Ð#PÓQÐQà�|Š|Ø—’ 1Ñ$•Ø—?‘?Ô&?Ò?Ü&Ð'HÓIÐIÜ(Ð(Ø—’Ü)Ð)ð=Ø $�”ð;Ù&ô
 $1×#8Ñ#8¸Ó#I÷ <ñ <Ø(,¯©×(9Ñ(9Ó(;×";˜C÷<÷ <ð <ð %)§L¡L×$5Ñ$5Ó$7×7˜à$)�D”MØ×'Ò'Ü" 4×#3Ñ#3°TÕ:ð" �x‰xÔ6Ñ6ð �
à�x‰xœ9Ÿ?™?Ñ*Ø×!Ñ! #§(¡(Ô+à—|’|¨¯ªð
 Ÿ*™*¨5˜*Ó1×1Ð1ð ˆJð —‘œY×.Ñ.Ñ.Ø×!Ñ!¤+§.¡.Ô1ð ˆJð —‘œYŸ^™^Ñ+°·²Ø—i‘i §¡Ó)×)Ð)ÙØ—‘œYŸ^™^Ñ+°·²ÙàˆJð]<ùØ";ùð<ù÷ <÷ <ò <úð 8úà$)�D”MØ×'Ò'Ü" 4×#3Ñ#3°TÕ:ð (ûä×'Ñ'ò ØÜò ?Ü#.§>¡>�Ô Ø—j‘j“l×"Ñ"Ü ¤×!1Ñ!1°4¸Ó>Ò>Ü!ò =Ø#&§8¡8�Ô Ø—j‘j c§h¡h�jÓ/×/Ñ/Ü ¤§¡°#°tÓ<Õ<ûÜò =Ø"%�”Ø×!Ñ!¤+×">Ñ">Ô?Ø—j‘j“l×"Ñ"Ü ¤§¡°#°tÓ<Õ<ûð	=úð& 2ùð *ûs  ‚BPÂK Â"J Â=I6Â>J ÃI?ÃI9Ã I?Ã$J Ã/I<Ã0"J ÄJÄJ Ä*K ÅA8PÆ9O?Æ:B	PÉPÉ2PÉ6J É9I?É<J É?JÊJÊJÊ	J Ê,KËK ËAO<ÌLÌ O<Ì,PÌ.O<Ì60NÍ&M)Í'NÎO<ÎPÎO<Î9O7ÏOÏO7Ï1O<Ï2PÏ7O<Ï<PÐP©re   c             ƒ   ó   K  — y ­wrE   rQ   rF  s     rH   Úreceive_strzWebSocketResponse.receive_strª  s   è ø€ ð ùrI  c             ƒ   ó   K  — y ­wrE   rQ   rF  s     rH   rT  zWebSocketResponse.receive_str¯  s   è ø€ ð ùrI  c             ƒ   ó   K  — y ­wrE   rQ   rF  s     rH   rT  zWebSocketResponse.receive_str´  s   è ø€ ð ùrI  c             ƒ   óø   K  — | j                  |«      ƒ d{  –—† }|j                  t        j                  ur&t	        d|j                  › d|j
                  ›d�«      ‚t        t        |j
                  «      S 7 Œ`­w)zrReceive TEXT message.

        Returns str when decode_text=True (default), bytes when decode_text=False.
        NúReceived message ú:z is not WSMsgType.TEXT)rG  r   r   r!  r   r  r	   rP   ©rG   re   r?  s      rH   rT  zWebSocketResponse.receive_str¹  si   è ø€ ð
 —L‘L Ó)×)ˆØ�8‰8œ9Ÿ>™>Ñ)Ü$Ø# C§H¡H :¨Q¨s¯x©x¨lÐ:PÐQóð ô ”C˜Ÿ™Ó"Ð"ð *úó   ‚A:—A8˜A!A:c             ƒ   óø   K  — | j                  |«      ƒ d {  –—† }|j                  t        j                  ur&t	        d|j                  › d|j
                  ›d�«      ‚t        t        |j
                  «      S 7 Œ`­w)NrX  rY  z is not WSMsgType.BINARY)rG  r   r   r(  r   r  r	   r%  rZ  s      rH   Úreceive_byteszWebSocketResponse.receive_bytesÅ  si   è ø€ Ø—L‘L Ó)×)ˆØ�8‰8œ9×+Ñ+Ñ+Ü$Ø# C§H¡H :¨Q¨s¯x©x¨lÐ:RÐSóð ô ”E˜3Ÿ8™8Ó$Ð$ð *úr[  .)Úloadsre   r^  c             ƒ   ó   K  — y ­wrE   rQ   ©rG   r^  re   s      rH   Úreceive_jsonzWebSocketResponse.receive_jsonÍ  ó   è ø€ ð ùrI  c             ƒ   ó   K  — y ­wrE   rQ   r`  s      rH   ra  zWebSocketResponse.receive_jsonÕ  rb  rI  c             ƒ   ó   K  — y ­wrE   rQ   r`  s      rH   ra  zWebSocketResponse.receive_jsonÝ  rb  rI  c             ƒ   óR   K  — | j                  |¬«      ƒ d {  –—† } ||«      S 7 Œ­w)NrR  )rT  )rG   r^  re   r  s       rH   ra  zWebSocketResponse.receive_jsonå  s-   è ø€ ð ×%Ñ%¨gÐ%Ó6×6ˆÙ�T‹{Ðð 7ús   ‚'˜%™'c              ƒ   ó    K  — t        d«      ‚­w)Nz"Cannot call .write() for websocket)rÿ   )rG   r  s     rH   ÚwritezWebSocketResponse.writeî  s   è ø€ ÜÐ?Ó@Ð@ùs   ‚c                 ó   — | S rE   rQ   rF   s    rH   Ú	__aiter__zWebSocketResponse.__aiter__ñ  s   € ØˆrJ   c              ƒ   ó   K  — y ­wrE   rQ   rF   s    rH   Ú	__anext__zWebSocketResponse.__anext__ô  rH  rI  c              ƒ   ó   K  — y ­wrE   rQ   rF   s    rH   rk  zWebSocketResponse.__anext__ù  rK  rI  c              ƒ   ó   K  — y ­wrE   rQ   rF   s    rH   rk  zWebSocketResponse.__anext__þ  rM  rI  c              ƒ   óÄ   K  — | j                  «       ƒ d {  –—† }|j                  t        j                  t        j                  t        j
                  fv rt        ‚|S 7 ŒG­wrE   )rG  r   r   r=  rQ  rP  ÚStopAsyncIteration)rG   r?  s     rH   rk  zWebSocketResponse.__anext__  sG   è ø€ Ø—L‘L“N×"ˆØ�8‰8œ	Ÿ™¬×):Ñ):¼I×<LÑ<LÐMÑMÜ$Ð$Øˆ
ð #ús   ‚A –A—AA c                 óx   — d| _         | j                  «        | j                  �t        | j                  |«       y y r‡   )rX   r„   rV   r   r·   s     rH   Ú_cancelzWebSocketResponse._cancel	  s4   € ð ˆŒØ×ÑÔ Ø�<‰<Ð#Ü˜$Ÿ,™,¨Õ,ð $rJ   )rC   N)r¬   zasyncio.Task[None]rC   NrE   )rJ   )grK   rL   rM   rS   rN   rO   rT   rP   rU   r   rV   r   rW   rX   rY   ÚintrZ   r[   r    ÚAbstractEventLoopr\   r]   ÚFuturer^   ÚBaseExceptionr_   Úfloatr`   ÚTimerHandlera   rb   r¡   rc   rd   ÚHandler   r   rs   r„   r‚   r‹   r‰   r�   r”   r¥   r›   r«   r²   r*   r   r½   Útuplerñ   r¼   r¾   r6   r  Úpropertyr  r  r  r	  rk   r   r  rª   r%  r  r  r   rœ   r#  r)  Újsonr*  r'   r-  r%   r0  r4  r   rO  r3  rB  r³   r:  r
   r   rG  r   rT  r]  r&   ra  r   r^  r1   rg  r4   ri  rk  rq  Ú__classcell__)r   s   @rH   r5   r5   V   sY  ø… à€M�4ÓØ#€L�#˜‘*Ó#Ø&*€Gˆ_˜tÑ#Ó*Ø)-€GÐ $Ñ&Ó-Ø€GˆTÓØ€HˆdÓØ€J�ÓØ"€K��t‘Ó"Ø.2€Eˆ7×$Ñ$ tÑ+Ó2Ø€HˆdÓØ/3€K�—‘ Ñ%¨Ñ,Ó3Ø'+€J� Ñ$Ó+Ø €O�UÓ Ø04€M�7×&Ñ&¨Ñ-Ó4Ø48Ð�w×*Ñ*¨TÑ1Ó8Ø,0€J�—‘˜TÑ" TÑ)Ó0Ø"'Ð˜4Ó'Ø59Ð˜WŸ^™^¨dÑ2Ó9ð
 Ø(,ØØØ"&Ø#%ØØ+Ø.Ø ò,ð ð,ð  ™ð	,ð
 ð,ð ð,ð ˜4‘<ð,ð ˜C‘=ð,ð ð,ð ð,ð ð,ð ð,ð 
õ,ó<#ó*ó
Só+óJó*',óRóðM¨}ð MÀó Mó!ð
 [ð 
Ð5Iõ 
ðR
Ø"ðR
à	Ð! 3¨¡:¨s°DÐ8Ñ	9óR
ðh  +ð  °%¸¸d¹
ÀOÐ8SÑ2Tó  ð,+Ø"ð+Ø.1°D©jð+ØBQð+à	ó+ð02 ;ð 2°>ó 2ð ð(˜$ò (ó ð(ð ð˜ò ó ðð ð ˜C $™Jò  ó ð ð ð!˜S 4™Zò !ó ð!ð ð˜# ™*ò ó ðñ7 3ð 7°ð 7Àó 7ð˜=¨4Ñ/ó ñ? %ð ?°$ó ?ñ
? %ð ?°$ó ?ð IMñAØðAØ&/ðAØ;>À¹:ðAà	óAñ
 3ð 
°#¸±*ð 
Èó 
ñQ Uð Q°c¸D±jð QÈDó Qð  $ð<ð
 "ŸZ™Zò<àð<ð ˜‘*ð<ð
 ð<ð 
ó<ð  $ñ>àð>ð ˜‘*ð>ð
  ð>ð 
ó>óð )Ÿ^™^¸cÐQUò5Øð5Ø6;ð5ØJNð5à	ó5ðn! ð !°ó !ð ¨kð  ¸dó  ó
(ð
 àJNñ"Ø0ð"Ø;@À4¹<ð"à	ò"ó ð"ð àKOñ$Ø1ð$Ø<AÀD¹Lð$à	ò$ó ð$ð àHLñ:Ø.ð:Ø9>À¹ð:à	Ð4Ñ	4ò:ó ð:ð
 '+ñIØ˜t‘|ðIà	Ð4Ñ	4óIðV àMQòØ0ðØ>CÀd¹lðà	òó ðð àNRòØ1ðØ?DÀt¹|ðà	òó ðð àKOòØ.ðØ<AÀD¹Lðà	ˆu‰òó ðð <@ò 
#¨E°D©Lð 
#ÀCÈ%ÁKó 
#ð >Bò %¨e°d©lð %Àeó %ð ð !Ø $ò	Ø0ðð ðð ˜‘ð	ð
 
òó ðð ð ),Ø $ò	Ø1ðð ˜˜ ˜Ñ%ðð ˜‘ð	ð
 
òó ðð ð 7:Ø $ò	Ø.ðð ˜X u g¨s lÑ3Ñ3ðð ˜‘ð	ð
 
òó ðð 7;·j±jØ $ò	ð ˜X u g¨s lÑ3Ñ3ðð ˜‘ð	ð
 
óðA ð A¨4ó Að˜4ó ð ð"Ø0ð"à	ò"ó ð"ð ð$Ø1ð$à	ò$ó ð$ð ð:Ø.ð:à	Ð4Ñ	4ò:ó ð:ðÐ!4Ð7LÑ!Ló ð-˜=ð -¨T÷ -rJ   r5   )Qr    rÜ   rÞ   rá   r{  rž   Úcollections.abcr   r   Útypingr   r   r   r   r	   r
   ÚattrÚ	multidictr   rÄ   r   Ú_websocket.readerr   Úabcr   Úclient_exceptionsr   Úhelpersr   r   r   r   Úhttpr   r   r   r   r   r   r   r   r   r   r   r    r!   Úhttp_websocketr"   Úlogr#   Ústreamsr$   Útypedefsr%   r&   r'   Úweb_exceptionsr(   r)   Úweb_requestr*   Úweb_responser+   rŸ   r.   Útyping_extensionsr1   r2   r%  r&  r;  r4   Ú__all__r8   rr  rO   rN   r9   Úsr6   r5   rQ   rJ   rH   ú<module>r�     s-  ðÜ Û Û Û Û Û 
ß .ß ?× ?ã Ý !å Ý 1Ý %Ý 1÷ó ÷÷ ÷ õ õ 4Ý Ý ß @Ñ @ß 9Ý $Ý (à×Ñ�wÒÞå)à×Ñ�wÒÞ&åà�5˜)Ð%6Ð8KÐKÑL€Fà×Ñ�wÒÛ#ÞãÝ&ð€ð )*Ð ˜5 ™:Ó )ñ �m¨4¸4ÈÐQUÉÔW€ð €‡��T $¨dÔ3÷ð ó 4ðôy
-˜¨°Ñ(<õ y
-rJ   