+
    ‚V@i€  ã                   ó
  € ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIH	t	 ^ RI
Ht ^ RIHtHt ^ RIHt ^ RIHtHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHtHt ^ RIHtHtH t H!t! ^ RI"H#t#H$t$  ^ RI%t
^ RI&H't' ^ RI%H*t*H+t+H,t,H-t-  ^ RI
H.t.  ! R R]*4      t/ ! R R]/4      t0 ! R R]/4      t1 ! R R]/4      t2 ! R R]/4      t3 ! R R]$4      t4 ! R R]$4      t5 ! R R]/4      t6 ! R  R!]/4      t7 ! R" R#]/4      t8 ! R$ R%]/4      t9 ! R& R']/4      t: ! R( R)]/4      t; ! R* R+]/4      t< ! R, R-]/4      t= ! R. R/]/4      t> ! R0 R1]/4      t? ! R2 R3]4      t@ ! R4 R5]@4      tA ! R6 R7]/4      tB ! R8 R9]@4      tC] ! R: R;]@4      4       tD] ! R< R=]D4      4       tE ! R> R?]E4      tF ! R@ RA]E4      tG ! RB RC]E4      tH ! RD RE]D4      tI] ! RF RG]P”                  4      4       tK ! RH RI]K4      tL]Pš                  ! ].RJ RJ4       ! RK RL]K4      4       tN ! RM RN]@4      tO ! RO RP]@4      tP ! RQ RR]@4      tQ ! RS RT]P”                  4      tR ! RU RV]@4      tS ! RW RX]@4      tTR#   ]( d    ]PR                  ! 4        h i ; i  ]( d    Rt. ELòi ; i)Yé    N)ÚFuture)Úgen)Ú	HTTPErrorÚHTTPRequest)ÚEvent)Úgen_logÚapp_log)ÚResolver©ÚSimpleAsyncHTTPClient)Ú
DictLoader)Úabstract_base_testÚignore_deprecation)ÚAsyncHTTPTestCaseÚgen_testÚbind_unused_portÚ	ExpectLog)ÚApplicationÚRequestHandler©Ú_websocket_mask_python)ÚWebSocketHandlerÚwebsocket_connectÚWebSocketErrorÚWebSocketClosedError)Úspeedupsc                   ó:   a € ] tR t^.t o RtRR ltR tR tRtV t	R# )ÚTestWebSocketHandlerzŽBase class for testing handlers that exposes the on_close event.

This allows for tests to see the close code and reason on the
server side.

Nc                ó   € Wn         W n        R # ©N©Úclose_futureÚcompression_options)Úselfr"   r#   s   &&&Ú=/usr/lib/python3/dist-packages/tornado/test/websocket_test.pyÚ
initializeÚTestWebSocketHandler.initialize6   s   € Ø(ÔØ#6Ö ó    c                ó   € V P                   # r    ©r#   ©r$   s   &r%   Úget_compression_optionsÚ,TestWebSocketHandler.get_compression_options:   s   € Ø×'Ñ'Ð'r(   c                óˆ   € V P                   e4   V P                   P                  V P                  V P                  34       R # R # r    )r"   Ú
set_resultÚ
close_codeÚclose_reasonr+   s   &r%   Úon_closeÚTestWebSocketHandler.on_close=   s6   € Ø×ÑÒ(Ø×Ñ×(Ñ(¨$¯/©/¸4×;LÑ;LÐ)MÖNñ )r(   r!   ©NN)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r&   r,   r2   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r%   r   r   .   s    ø‡ € ñô7ò(÷Oð Or(   r   c                   óD   a € ] tR t^Bt o ]P
                  R 4       tRtV tR# )ÚEchoHandlerc              #  ó¦   "  €  V P                  V\        V\        4      4      x € R #   \        P                   d     R # \
         d     R # i ; i5ir    )Úwrite_messageÚ
isinstanceÚbytesÚasyncioÚCancelledErrorr   ©r$   Úmessages   &&r%   Ú
on_messageÚEchoHandler.on_messageC   sF   é € ð	Ø×$Ñ$ W¬j¸Ä%Ó.HÓIÔIøÜ×%Ñ%ô 	ÚÜ#ô 	Úð	üs6   ‚A„"( ¦A¨A½AÁ AÁ	AÁ
AÁAÁA© N)	r5   r6   r7   r8   r   Ú	coroutinerH   r:   r;   r<   s   @r%   r?   r?   B   s   ø‡ € Ø‡]�]ñó ör(   r?   c                   ó&   a € ] tR t^Mt o R tRtV tR# )ÚErrorInOnMessageHandlerc                ó   € ^^ ,           R# )é   NrJ   rF   s   &&r%   rH   Ú"ErrorInOnMessageHandler.on_messageN   s   € Ø	ˆA�ˆr(   rJ   N©r5   r6   r7   r8   rH   r:   r;   r<   s   @r%   rM   rM   M   s   ø‡ € ÷ð r(   rM   c                   ó&   a € ] tR t^Rt o R tRtV tR# )ÚHeaderHandlerc                ó<  € \         P                  ! V P                  R 4      \         P                  ! V P                  R4      \         P                  ! V P                  RR4      \         P                  ! V P
                  RR4      \         P                  ! V P                  R4      V P                  V P                  .pV F  p V! 4        \        R4      h	  V P                  V P                  P                  P                  RR4      4       R#   \         d     K]  i ; i)	zThis should not workzhttp://localhost/elsewhereúX-TestÚ Ú	ChocolateÚChipi÷  zdid not get expected exceptionN)Ú	functoolsÚpartialÚwriteÚredirectÚ
set_headerÚ
set_cookieÚ
set_statusÚflushÚfinishÚ	ExceptionÚRuntimeErrorrA   ÚrequestÚheadersÚget)r$   Úmethods_to_testÚmethods   &  r%   ÚopenÚHeaderHandler.openS   sà   € ä×Ò˜dŸj™jÐ*@ÓAÜ×Ò˜dŸm™mÐ-IÓJÜ×Ò˜dŸo™o¨x¸Ó<Ü×Ò˜dŸo™o¨{¸FÓCÜ×Ò˜dŸo™o¨sÓ3Ø�J‰JØ�K‰Kð
ˆó &ˆFðñ ”ÜÐ @ÓAÐAñ &ð 	×Ñ˜4Ÿ<™<×/Ñ/×3Ñ3°H¸bÓAÖBøô  ô Úðús   ÃDÄDÄDrJ   N©r5   r6   r7   r8   ri   r:   r;   r<   s   @r%   rS   rS   R   s   ø‡ € ÷Cð Cr(   rS   c                   ó,   a € ] tR t^ht o R tR tRtV tR# )ÚHeaderEchoHandlerc                ó*   € V P                  R R4       R# )úX-Extra-Response-HeaderúExtra-Response-ValueN)r]   r+   s   &r%   Úset_default_headersÚ%HeaderEchoHandler.set_default_headersi   s   € Ø�‰Ð1Ð3IÖJr(   c                óÐ   € V P                   P                  P                  4        F=  w  rVP                  4       P	                  R 4      '       g   K,  V P                  W4       K?  	  R# )zx-testN)rd   re   Úget_allÚlowerÚ
startswithr]   )r$   ÚkÚvs   &  r%   ÚprepareÚHeaderEchoHandler.preparel   sD   € Ø—L‘L×(Ñ(×0Ñ0Ö2‰DˆAØ�w‰w‹y×#Ñ# H×-Ô-Ø—‘ Ö%ó 3r(   rJ   N)r5   r6   r7   r8   rq   ry   r:   r;   r<   s   @r%   rm   rm   h   s   ø‡ € òK÷&ð &r(   rm   c                   ó&   a € ] tR t^rt o R tRtV tR# )ÚNonWebSocketHandlerc                ó(   € V P                  R 4       R# )ÚokN)r[   r+   s   &r%   rf   ÚNonWebSocketHandler.gets   s   € Ø�
‰
�4Ör(   rJ   N©r5   r6   r7   r8   rf   r:   r;   r<   s   @r%   r|   r|   r   s   ø‡ € ÷ð r(   r|   c                   ó&   a € ] tR t^wt o R tRtV tR# )ÚRedirectHandlerc                ó(   € V P                  R 4       R# )ú/echoN)r\   r+   s   &r%   rf   ÚRedirectHandler.getx   s   € Ø�‰�gÖr(   rJ   Nr€   r<   s   @r%   r‚   r‚   w   s   ø‡ € ÷ð r(   r‚   c                   ó&   a € ] tR t^|t o R tRtV tR# )ÚCloseReasonHandlerc                ó8   € R V n         V P                  RR4       R# )Féé  ÚgoodbyeN)Úon_close_calledÚcloser+   s   &r%   ri   ÚCloseReasonHandler.open}   s   € Ø$ˆÔØ�
‰
�4˜Ö#r(   )r‹   Nrk   r<   s   @r%   r‡   r‡   |   ó   ø‡ € ÷$ð $r(   r‡   c                   óJ   a € ] tR t^‚t o ]P
                  R 4       tR tRtV t	R# )ÚAsyncPrepareHandlerc              #  ó2   "  € \         P                  x € R # 5ir    )r   Úmomentr+   s   &r%   ry   ÚAsyncPrepareHandler.prepareƒ   s   é € ä�j‰jÔùs   ‚c                ó(   € V P                  V4       R # r    ©rA   rF   s   &&r%   rH   ÚAsyncPrepareHandler.on_message‡   s   € Ø×Ñ˜7Ö#r(   rJ   N)
r5   r6   r7   r8   r   rK   ry   rH   r:   r;   r<   s   @r%   r�   r�   ‚   s%   ø‡ € Ø‡]�]ñó ð÷$ð $r(   r�   c                   ó&   a € ] tR t^‹t o R tRtV tR# )ÚPathArgsHandlerc                ó(   € V P                  V4       R # r    r•   )r$   Úargs   &&r%   ri   ÚPathArgsHandler.openŒ   s   € Ø×Ñ˜3Ör(   rJ   Nrk   r<   s   @r%   r˜   r˜   ‹   ó   ø‡ € ÷ ð  r(   r˜   c                   óV   a a€ ] tR t^�t oV 3R lt]P                  R 4       tRtVt	V ;t
# )ÚCoroutineOnMessageHandlerc                ó6   <€ \         SV `  ! R/ VB  ^ V n        R# ©r   NrJ   ©Úsuperr&   Úsleeping©r$   ÚkwargsÚ	__class__s   &,€r%   r&   Ú$CoroutineOnMessageHandler.initialize‘   ó   ø€ Ü‰ÒÑ$˜VÒ$ØˆŽr(   c              #  ó  "  € V P                   ^ 8”  d   V P                  R4       V ;P                   ^,          un         \        P                  ! R4      x € V ;P                   ^,          un         V P                  V4       R# 5i©r   z%another coroutine is already sleepingç{®Gáz„?N©r£   rA   r   ÚsleeprF   s   &&r%   rH   Ú$CoroutineOnMessageHandler.on_message•   sX   é € à�=‰=˜1ÔØ×ÑÐFÔGØ�Š˜Õ�Ü�iŠi˜‹oÒØ�Š˜Õ�Ø×Ñ˜7Ö#ùs   ‚B B©r£   )r5   r6   r7   r8   r&   r   rK   rH   r:   r;   Ú__classcell__©r¦   r=   s   @@r%   rž   rž   �   s'   ù‡ € õð 	‡]�]ñ$ó ÷$ð $r(   rž   c                   ó&   a € ] tR t^Ÿt o R tRtV tR# )ÚRenderMessageHandlerc                óJ   € V P                  V P                  R VR7      4       R# )úmessage.html)rG   N)rA   Úrender_stringrF   s   &&r%   rH   ÚRenderMessageHandler.on_message    s    € Ø×Ñ˜4×-Ñ-¨nÀgÐ-ÓNÖOr(   rJ   NrQ   r<   s   @r%   r³   r³   Ÿ   s   ø‡ € ÷Pð Pr(   r³   c                   ó>   a a€ ] tR t^¤t oV 3R ltR tR tRtVtV ;t	# )ÚSubprotocolHandlerc                ó6   <€ \         SV `  ! R/ VB  R V n        R# ©FNrJ   )r¢   r&   Úselect_subprotocol_calledr¤   s   &,€r%   r&   ÚSubprotocolHandler.initialize¥   s   ø€ Ü‰ÒÑ$˜VÒ$Ø).ˆÖ&r(   c                ó`   € V P                   '       d   \        R 4      hRV n         RV9   d   R# R# )zselect_subprotocol called twiceTÚ	goodprotoN)r¼   rb   )r$   Úsubprotocolss   &&r%   Úselect_subprotocolÚ%SubprotocolHandler.select_subprotocol©   s0   € Ø×)×)Ð)ÜÐ=Ó>Ð>Ø)-ˆÔ&Ø˜,Ô&ÙÙr(   c                ó„   € V P                   '       g   \        R 4      hV P                  RV P                  ,          4       R# )zselect_subprotocol not calledzsubprotocol=%sN)r¼   rb   rA   Úselected_subprotocolr+   s   &r%   ri   ÚSubprotocolHandler.open±   s4   € Ø×-×-Ð-ÜÐ;Ó<Ð<Ø×ÑÐ+¨d×.GÑ.GÕGÖHr(   )r¼   )
r5   r6   r7   r8   r&   rÁ   ri   r:   r;   r°   r±   s   @@r%   r¹   r¹   ¤   s   ù‡ € õ/ò÷Iò Ir(   r¹   c                   ó\   a a€ ] tR t^·t oV 3R lt]P                  R 4       tR tRt	Vt
V ;t# )ÚOpenCoroutineHandlerc                óB   <€ \         SV `  ! R/ VB  Wn        R V n        R# r»   )r¢   r&   ÚtestÚopen_finished)r$   rÉ   r¥   r¦   s   &&,€r%   r&   ÚOpenCoroutineHandler.initialize¸   s    ø€ Ü‰ÒÑ$˜VÒ$ØŒ	Ø"ˆÖr(   c              #  ó˜   "  € V P                   P                  P                  4       x € \        P                  ! R 4      x € RV n        R# 5i)r«   TN)rÉ   Úmessage_sentÚwaitr   r­   rÊ   r+   s   &r%   ri   ÚOpenCoroutineHandler.open½   s5   é € à�i‰i×$Ñ$×)Ñ)Ó+Ò+Ü�iŠi˜ÓÒØ!ˆÖùs   ‚AA
c                ób   € V P                   '       g   \        R 4      hV P                  R4       R# )z&on_message called before open finishedr~   N)rÊ   rb   rA   rF   s   &&r%   rH   ÚOpenCoroutineHandler.on_messageÃ   s(   € Ø×!×!Ð!ÜÐDÓEÐEØ×Ñ˜4Ö r(   )rÊ   rÉ   )r5   r6   r7   r8   r&   r   rK   ri   rH   r:   r;   r°   r±   s   @@r%   rÇ   rÇ   ·   s,   ù‡ € õ#ð
 	‡]�]ñ"ó ð"÷
!ò !r(   rÇ   c                   ó&   a € ] tR t^Ét o R tRtV tR# )ÚErrorInOpenHandlerc                ó   € \        R 4      h)Úboom)rb   r+   s   &r%   ri   ÚErrorInOpenHandler.openÊ   s   € Ü˜ÓÐr(   rJ   Nrk   r<   s   @r%   rÓ   rÓ   É   rœ   r(   rÓ   c                   ó&   a € ] tR t^Ît o R tRtV tR# )ÚErrorInAsyncOpenHandlerc              ƒ  ó`   "  € \         P                  ! ^ 4      G Rj  x€L
  \        R4      h L5i)r   NrÕ   )rD   r­   rb   r+   s   &r%   ri   ÚErrorInAsyncOpenHandler.openÏ   s'   é € Ü�mŠm˜AÓ×ÐÜ˜ÓÐñ 	ùs   ‚.œ,�.rJ   Nrk   r<   s   @r%   rØ   rØ   Î   s   ø‡ € ÷ ð  r(   rØ   c                   ó&   a € ] tR t^Ôt o R tRtV tR# )ÚNoDelayHandlerc                óJ   € V P                  R 4       V P                  R4       R# )TÚhelloN)Úset_nodelayrA   r+   s   &r%   ri   ÚNoDelayHandler.openÕ   s   € Ø×Ñ˜ÔØ×Ñ˜7Ö#r(   rJ   Nrk   r<   s   @r%   rÜ   rÜ   Ô   rŽ   r(   rÜ   c                   ób   a a€ ] tR t^Út oV 3R ltV 3R lt]P                  R 4       tRt	Vt
V ;t# )ÚWebSocketBaseTestCasec                ó2   <€ \         SV `  4        . V n        R # r    )r¢   ÚsetUpÚconns_to_close©r$   r¦   s   &€r%   rä   ÚWebSocketBaseTestCase.setUpÛ   s   ø€ Ü‰‰ŒØ ˆÖr(   c                ój   <€ V P                    F  pVP                  4        K  	  \        SV `  4        R # r    )rå   rŒ   r¢   ÚtearDown)r$   Úconnr¦   s   & €r%   ré   ÚWebSocketBaseTestCase.tearDownß   s'   ø€ Ø×'Ô'ˆDØ�J‰JŽLñ (ä‰ÑÖr(   c              +  ó¶   "  € \        R V P                  4       V3,          3/ VB x €pV P                  P                  V4       \        P
                  ! V4      h5i)zws://127.0.0.1:%d%s)r   Úget_http_portrå   Úappendr   ÚReturn)r$   Úpathr¥   Úwss   &&, r%   Ú
ws_connectÚ WebSocketBaseTestCase.ws_connectä   sV   é € ä$Ø! T×%7Ñ%7Ó%9¸4Ð$@Õ@ñ
ØDJñ
ñ 
ˆð 	×Ñ×"Ñ" 2Ô&Ü�jŠj˜‹nÐùs   ‚AA)rå   )r5   r6   r7   r8   rä   ré   r   rK   rò   r:   r;   r°   r±   s   @@r%   râ   râ   Ú   s,   ù‡ € õ!õð
 	‡]�]ñó ÷ð r(   râ   c                   ó6  a a€ ] tR t^ít oR tR tV 3R ltR tR tR t	]
R 4       tR t]
R	 4       t]
R
 4       t]
R 4       t]
R 4       t]
R 4       t]
R 4       t]
R 4       t]
R 4       t]
R 4       t]
R 4       t]
R 4       t]
R 4       t]
R 4       t]
R 4       t]
R 4       t]
R 4       t]
R 4       t]
R 4       t]
R 4       t]
R 4       t ]
R 4       t!]
R 4       t"]
R 4       t#]
R  4       t$]
R! 4       t%]
R" 4       t&]
R# 4       t']
R$ 4       t(]
R% 4       t)R&t*Vt+V ;t,# )'ÚWebSocketTestc                ó   € \        4       V n        \        R \        \	        V P                  R7      3R\
        3R\        3R\        \	        V P                  R7      3R\        \	        V P                  R7      3R\        \	        V P                  R7      3R\        \	        V P                  R7      3R\        \	        V P                  R7      3R	\        \	        V P                  R7      3R
\        \	        V P                  R7      3R\        \	        V P                  R7      3R\        \	        V P                  R7      3R\         \	        V P                  V R7      3R\"        3R\$        3R\&        3.\)        RR/4      R7      # )r„   )r"   ú/non_wsú	/redirectz/headerz/header_echoú/close_reasonú/error_in_on_messageú/async_preparez/path_args/(.*)ú
/coroutineú/renderú/subprotocolú/open_coroutine)r"   rÉ   ú/error_in_openú/error_in_async_openú/nodelayrµ   z<b>{{ message }}</b>)Útemplate_loader)r   r"   r   r?   Údictr|   r‚   rS   rm   r‡   rM   r�   r˜   rž   r³   r¹   rÇ   rÓ   rØ   rÜ   r   r+   s   &r%   Úget_appÚWebSocketTest.get_appî   sv  € Ü"›HˆÔÜàœ+¤t¸×9JÑ9JÔ'KÐLØÔ/Ð0ØœoÐ.ØœM¬4¸T×=NÑ=NÔ+OÐPà"Ü%Ü d×&7Ñ&7Ô8ðð $Ü&Ü d×&7Ñ&7Ô8ðð +Ü+Ü d×&7Ñ&7Ô8ðð %Ü'Ü d×&7Ñ&7Ô8ðð &Ü#Ü d×&7Ñ&7Ô8ðð !Ü-Ü d×&7Ñ&7Ô8ðð
 Ô0´$ÀD×DUÑDUÔ2VÐWà"Ü&Ü d×&7Ñ&7Ô8ðð &Ü(Ü d×&7Ñ&7¸dÔCðð
 "Ô#5Ð6Ø'Ô)@ÐAØœ^Ð,ða1ôd '¨Ð8NÐ'OÓPôg4
ð 4	
r(   c                ó   € \        4       # r    r   r+   s   &r%   Úget_http_clientÚWebSocketTest.get_http_client&  s   € ä$Ó&Ð&r(   c                ó`   <€ \         SV `  4        \        P                  P	                  4        R # r    )r¢   ré   r   Ú_template_loadersÚclearræ   s   &€r%   ré   ÚWebSocketTest.tearDown*  s    ø€ Ü‰ÑÔÜ×(Ñ(×.Ñ.Ö0r(   c                ó`   € V P                  R 4      pV P                  VP                  R4       R# )r„   é�  N©ÚfetchÚassertEqualÚcode©r$   Úresponses   & r%   Útest_http_requestÚWebSocketTest.test_http_request.  s$   € à—:‘:˜gÓ&ˆØ×Ñ˜Ÿ™¨Ö,r(   c           	     óp   € V P                  R RRRRRR/R7      pV P                  VP                  R4       R# )	r„   Ú
ConnectionÚUpgradeÚ	WebSocketúSec-WebSocket-VersionÚ13©re   r  Nr  r  s   & r%   Útest_missing_websocket_keyÚ(WebSocketTest.test_missing_websocket_key3  óB   € Ø—:‘:Øà˜iØ˜;Ø'¨ðð ó 
ˆð 	×Ñ˜Ÿ™¨Ö,r(   c           	     óp   € V P                  R RRRRRR/R7      pV P                  VP                  R4       R# )	r„   r  r  r  r  Ú12r  iª  Nr  r  s   & r%   Útest_bad_websocket_versionÚ(WebSocketTest.test_bad_websocket_version>  r!  r(   c              #  ó¢   "  € V P                  R 4      x €pVP                  R4      x € VP                  4       x €pV P                  VR4       R# 5i)r„   rÞ   N©rò   rA   Úread_messager  ©r$   rñ   r  s   &  r%   Útest_websocket_genÚ WebSocketTest.test_websocket_genI  sF   é € à—?‘? 7Ó+Ñ+ˆØ×Ñ˜wÓ'Ò'ØŸ™Ó*Ñ*ˆØ×Ñ˜ 7Ö+ùó   ‚AAc                ó.  a € \        4       ;_uu_ 4        \        R S P                  4       ,          S P                  R7       RRR4       S P	                  4       P                  4       pVP                  R4       VP                  S P                  4       S P	                  4       P                  4       pS P                  VR4       S P                  P                  V 3R l4       VP                  4        S P	                  4        R#   + '       g   i     LË; i)úws://127.0.0.1:%d/echo)ÚcallbackNrÞ   c                 ó$   <€ SP                  4       # r    )Ústop)Úfr$   s   &€r%   Ú<lambda>Ú8WebSocketTest.test_websocket_callbacks.<locals>.<lambda>Z  s   ø€ °d·i±i´kr(   )r   r   rí   r1  rÎ   ÚresultrA   r(  r  r"   Úadd_done_callbackrŒ   r)  s   f  r%   Útest_websocket_callbacksÚ&WebSocketTest.test_websocket_callbacksP  s¸   ø€ Ü×!Õ!ÜØ(¨4×+=Ñ+=Ó+?Õ?È$Ï)É)õ÷ "ð �Y‰Y‹[×ÑÓ!ˆØ
×Ñ˜Ô!Ø
�‰˜Ÿ	™	Ô"Ø—9‘9“;×%Ñ%Ó'ˆØ×Ñ˜ 7Ô+Ø×Ñ×+Ñ+Ô,AÔBØ
�‰Œ
Ø�	‰	Ž÷ "×!ús   ”-DÄD	c              #  ó¢   "  € V P                  R 4      x €pVP                  RRR7       VP                  4       x €pV P                  VR4       R# 5i)r„   s   hello éT©ÚbinaryNr'  r)  s   &  r%   Útest_binary_messageÚ!WebSocketTest.test_binary_message^  sH   é € à—?‘? 7Ó+Ñ+ˆØ
×Ñ˜¨tÐÔ4ØŸ™Ó*Ñ*ˆØ×Ñ˜ =Ö1ùr,  c              #  óž   "  € V P                  R 4      x €pVP                  R4       VP                  4       x €pV P                  VR4       R# 5i©r„   u   hello Ã©Nr'  r)  s   &  r%   Útest_unicode_messageÚ"WebSocketTest.test_unicode_messagee  sC   é € à—?‘? 7Ó+Ñ+ˆØ
×Ñ˜Ô(ØŸ™Ó*Ñ*ˆØ×Ñ˜ >Ö2ùó   ‚AAc              #  óê   "  € V P                  R 4      x €pVP                  4        V P                  \        4      ;_uu_ 4        VP	                  R4       RRR4       R#   + '       g   i     R# ; i5ir?  )rò   rŒ   ÚassertRaisesr   rA   ©r$   rñ   s   & r%   Ú)test_error_in_closed_client_write_messageÚ7WebSocketTest.test_error_in_closed_client_write_messagel  sM   é € à—?‘? 7Ó+Ñ+ˆØ
�‰Œ
Ø×ÑÔ3×4Õ4Ø×Ñ˜^Ô,÷ 5×4×4Ò4üs   ‚AA3ÁAÁ
A3ÁA0	Á*	A3c              #  óž   "  € V P                  R 4      x €pVP                  R4       VP                  4       x €pV P                  VR4       R# 5i)rý   rÞ   z<b>hello</b>Nr'  r)  s   &  r%   Útest_render_messageÚ!WebSocketTest.test_render_messages  sC   é € à—?‘? 9Ó-Ñ-ˆØ
×Ñ˜Ô!ØŸ™Ó*Ñ*ˆØ×Ñ˜ >Ö2ùrB  c              #  ó  "  € V P                  R 4      x €pVP                  R4       \        \        R4      ;_uu_ 4        VP	                  4       x €pRRR4       V P                  X4       R#   + '       g   i     L#; i5i)rú   rÞ   úUncaught exceptionN)rò   rA   r   r	   r(  ÚassertIsNoner)  s   &  r%   Útest_error_in_on_messageÚ&WebSocketTest.test_error_in_on_messagez  s]   é € à—?‘?Ð#9Ó:Ñ:ˆØ
×Ñ˜Ô!Ü”wÐ 4×5Õ5ØŸ_™_Ó.Ñ.ˆH÷ 6à×Ñ˜(Ö#÷ 6×5üs   ‚=B ¿A-ÁB Á-A=	Á8B c              #  óò   "  € V P                  \        4      ;_uu_ 4       pV P                  R 4      x € RRR4       V P                  XP                  P
                  R4       R#   + '       g   i     L8; i5i)z	/notfoundNi”  )rD  r   rò   r  Ú	exceptionr  )r$   Úcms   & r%   Útest_websocket_http_failÚ&WebSocketTest.test_websocket_http_fail‚  sN   é € à×Ñœy×)Ô)¨RØ—/‘/ +Ó.Ò.÷ *à×Ñ˜Ÿ™×*Ñ*¨CÖ0÷ *×)üs   ‚A7 A$´0A7Á$A4	Á/A7c              #  ó¨   "  € V P                  \        4      ;_uu_ 4        V P                  R 4      x € RRR4       R#   + '       g   i     R# ; i5i)r÷   N)rD  r   rò   r+   s   &r%   Útest_websocket_http_successÚ)WebSocketTest.test_websocket_http_successˆ  s3   é € à×Ñœ~×.Õ.Ø—/‘/ )Ó,Ò,÷ /×.×.Ò.üó   ‚A >´
A¾A	Á		Ac              #  ó¨   "  € V P                  \        4      ;_uu_ 4        V P                  R 4      x € RRR4       R#   + '       g   i     R# ; i5i)rø   N)rD  r   rò   r+   s   &r%   Útest_websocket_http_redirectÚ*WebSocketTest.test_websocket_http_redirect�  s3   é € à×Ñœy×)Õ)Ø—/‘/ +Ó.Ò.÷ *×)×)Ò)ürX  c           	   #  óR  "  € \        4       w  rVP                  4        V P                  \        4      ;_uu_ 4        \	        \
        R RR7      ;_uu_ 4        \        RV,          RR7      x € RRR4       RRR4       R#   + '       g   i     L; i  + '       g   i     R# ; i5i)z.*F)Úrequiredzws://127.0.0.1:%d/i  )Úconnect_timeoutN)r   rŒ   rD  ÚIOErrorr   r   r   )r$   ÚsockÚports   &  r%   Útest_websocket_network_failÚ)WebSocketTest.test_websocket_network_fail’  sn   é € ä%Ó'‰
ˆØ�
‰
ŒØ×Ñœw×'Õ'Üœ7 D°5×9Ö9Ü'Ø(¨4Õ/Àôò ÷ :÷ (Ñ'ß9×9ú÷ (×'Ð'üs4   ‚:B'¼BÁB 	Á.BÁ6
B'Â BÂBÂB$	Â	B'c              #  ó<  "  € \         P                  ! \        R V P                  4       ,          4      x €4      ;_uu_ 4       pVP	                  R4       VP	                  R4       VP
                  P                  4        RRR4       R#   + '       g   i     R# ; i5i)r.  rÞ   ÚworldN)Ú
contextlibÚclosingr   rí   rA   ÚstreamrŒ   rE  s   & r%   Ú"test_websocket_close_buffered_dataÚ0WebSocketTest.test_websocket_close_buffered_dataœ  ss   é € ä×ÒÜ$Ð%=À×@RÑ@RÓ@TÕ%TÓUÑU÷
ô 
àØ×Ñ˜WÔ%Ø×Ñ˜WÔ%à�I‰I�O‰OÔ÷
÷ 
÷ 
ò 
üs   ‚?BÁ=BÁ>
BÂB	Â	Bc           	   #  ó&  "  € \         P                  ! \        \        R V P	                  4       ,          RR/R7      4      x €4      ;_uu_ 4       pVP                  4       x €pV P                  VR4       RRR4       R#   + '       g   i     R# ; i5i)zws://127.0.0.1:%d/headerrU   rÞ   r  N)rf  rg  r   r   rí   r(  r  r)  s   &  r%   Útest_websocket_headersÚ$WebSocketTest.test_websocket_headers¦  s€   é € ô ×Òä'ÜØ2°T×5GÑ5GÓ5IÕIØ!)¨7Ð 3ôóñ ÷	
ô 	
ð ØŸ_™_Ó.Ñ.ˆHØ×Ñ˜X wÔ/÷	
÷ 	
÷ 	
ò 	
üs   ‚ABÁ%A=Á3
BÁ=B	Â	Bc           	   #  óŠ  "  € \         P                  ! \        \        R V P	                  4       ,          RR/R7      4      x €4      ;_uu_ 4       pV P                  VP                  P                  R4      R4       V P                  VP                  P                  R4      R4       RRR4       R#   + '       g   i     R# ; i5i)zws://127.0.0.1:%d/header_echozX-Test-HellorÞ   r  ro   rp   N)rf  rg  r   r   rí   r  re   rf   rE  s   & r%   Útest_websocket_header_echoÚ(WebSocketTest.test_websocket_header_echo¶  s    é € ô
 ×Òä'ÜØ7¸$×:LÑ:LÓ:NÕNØ!/°Ð 9ôóñ ÷	
ô 	
ð Ø×Ñ˜RŸZ™ZŸ^™^¨NÓ;¸WÔEØ×ÑØ—
‘
—‘Ð8Ó9Ð;Qô÷	
÷ 	
÷ 	
ò 	
üs   ‚ACÁAB/Â%
CÂ/C 	Â:	Cc              #  ó0  "  € V P                  R 4      x €pVP                  4       x €pV P                  VR4       V P                  VP                  R4       V P                  VP
                  R4       V P                  x €w  r4V P                  VR4       R# 5i)rù   Nr‰   rŠ   )rò   r(  ÚassertIsr  r0   r1   r"   )r$   rñ   Úmsgr  Úreasons   &    r%   Útest_server_close_reasonÚ&WebSocketTest.test_server_close_reasonÊ  s}   é € à—?‘? ?Ó3Ñ3ˆØ—O‘OÓ%Ñ%ˆà�‰�c˜4Ô Ø×Ñ˜Ÿ™¨Ô-Ø×Ñ˜Ÿ™¨)Ô4à!×.Ñ.Ñ.‰ˆð 	×Ñ˜˜tÖ$ùs   ‚BBc              #  óÀ   "  € V P                  R 4      x €pVP                  RR4       V P                  x €w  r#V P                  VR4       V P                  VR4       R# 5i)r„   r‰   rŠ   N)rò   rŒ   r"   r  )r$   rñ   r  rt  s   &   r%   Útest_client_close_reasonÚ&WebSocketTest.test_client_close_reasonÙ  sT   é € à—?‘? 7Ó+Ñ+ˆØ
�‰��yÔ!Ø!×.Ñ.Ñ.‰ˆØ×Ñ˜˜tÔ$Ø×Ñ˜ Ö+ùs   ‚AAc              #  ó  "  € V P                  R 4      x €pVP                  4       x €pV P                  VR4       V P                  \        4      ;_uu_ 4        VP                  R4       RRR4       R#   + '       g   i     R# ; i5i)rù   NrÞ   )rò   r(  rr  rD  r   rA   )r$   rñ   rs  s   &  r%   Útest_write_after_closeÚ$WebSocketTest.test_write_after_closeá  sa   é € à—?‘? ?Ó3Ñ3ˆØ—O‘OÓ%Ñ%ˆØ�‰�c˜4Ô Ø×ÑÔ3×4Õ4Ø×Ñ˜WÔ%÷ 5×4×4Ò4üs   ‚ABÁA3Á)
BÁ3B	Á>	Bc              #  óž   "  € V P                  R 4      x €pVP                  R4       VP                  4       x €pV P                  VR4       R# 5i)rû   rÞ   Nr'  ©r$   rñ   Úress   &  r%   Útest_async_prepareÚ WebSocketTest.test_async_prepareé  sF   é € ð —?‘?Ð#3Ó4Ñ4ˆØ
×Ñ˜Ô!Ø—O‘OÓ%Ñ%ˆØ×Ñ˜˜gÖ&ùrB  c              #  ó|   "  € V P                  R 4      x €pVP                  4       x €pV P                  VR4       R# 5i)z/path_args/hellorÞ   N©rò   r(  r  r~  s   &  r%   Útest_path_argsÚWebSocketTest.test_path_argsò  s6   é € à—?‘?Ð#5Ó6Ñ6ˆØ—O‘OÓ%Ñ%ˆØ×Ñ˜˜gÖ&ùó   ‚:<c              #  ó  "  € V P                  R 4      x €pVP                  R4      x € VP                  R4      x € VP                  4       x €pV P                  VR4       VP                  4       x €pV P                  VR4       R# 5i)rü   Úhello1Úhello2Nr'  r~  s   &  r%   Útest_coroutineÚWebSocketTest.test_coroutineø  sv   é € à—?‘? <Ó0Ñ0ˆà×Ñ˜xÓ(Ò(Ø×Ñ˜xÓ(Ò(Ø—O‘OÓ%Ñ%ˆØ×Ñ˜˜hÔ'Ø—O‘OÓ%Ñ%ˆØ×Ñ˜˜hÖ'ùó   ‚BBc           	   #  ó`  "  € V P                  4       pR V,          pRRV,          /p\        P                  ! \        \	        W#R7      4      x €4      ;_uu_ 4       pVP                  R4       VP                  4       x €pV P                  VR4       RRR4       R#   + '       g   i     R# ; i5i)r.  ÚOriginzhttp://127.0.0.1:%dr  rÞ   N©rí   rf  rg  r   r   rA   r(  r  ©r$   ra  Úurlre   rñ   r  s   &     r%   Útest_check_origin_valid_no_pathÚ-WebSocketTest.test_check_origin_valid_no_path  s”   é € à×!Ñ!Ó#ˆà&¨Õ-ˆØÐ2°TÕ9Ð:ˆä×ÒÜ$¤[°Ô%FÓGÑG÷
ô 
àØ×Ñ˜WÔ%ØŸ_™_Ó.Ñ.ˆHØ×Ñ˜X wÔ/÷
÷ 
÷ 
ò 
üó   ‚AB.Á6BÂ
B.ÂB+	Â%	B.c           	   #  ó`  "  € V P                  4       pR V,          pRRV,          /p\        P                  ! \        \	        W#R7      4      x €4      ;_uu_ 4       pVP                  R4       VP                  4       x €pV P                  VR4       RRR4       R#   + '       g   i     R# ; i5i)r.  rŽ  zhttp://127.0.0.1:%d/somethingr  rÞ   Nr�  r�  s   &     r%   Ú!test_check_origin_valid_with_pathÚ/WebSocketTest.test_check_origin_valid_with_path  s”   é € à×!Ñ!Ó#ˆà&¨Õ-ˆØÐ<¸tÕCÐDˆä×ÒÜ$¤[°Ô%FÓGÑG÷
ô 
àØ×Ñ˜WÔ%ØŸ_™_Ó.Ñ.ˆHØ×Ñ˜X wÔ/÷
÷ 
÷ 
ò 
ür”  c           	   #  óB  "  € V P                  4       pR V,          pRRV,          /pV P                  \        4      ;_uu_ 4       p\        \	        W#R7      4      x € RRR4       V P                  XP                  P                  R4       R#   + '       g   i     L8; i5i)r.  rŽ  z127.0.0.1:%dr  Né“  ©rí   rD  r   r   r   r  rQ  r  ©r$   ra  r‘  re   rR  s   &    r%   Ú%test_check_origin_invalid_partial_urlÚ3WebSocketTest.test_check_origin_invalid_partial_url  sv   é € à×!Ñ!Ó#ˆà&¨Õ-ˆØ˜^¨dÕ2Ð3ˆà×Ñœy×)Ô)¨RÜ#¤K°Ô$EÓFÒF÷ *à×Ñ˜Ÿ™×*Ñ*¨CÖ0÷ *×)üs   ‚ABÁBÁ0BÂB	ÂBc           	   #  ó4  "  € V P                  4       pR V,          pRR/pV P                  \        4      ;_uu_ 4       p\        \	        W#R7      4      x € RRR4       V P                  XP                  P                  R4       R#   + '       g   i     L8; i5i)r.  rŽ  zhttp://somewhereelse.comr  Nr™  rš  r›  s   &    r%   Útest_check_origin_invalidÚ'WebSocketTest.test_check_origin_invalid*  sv   é € à×!Ñ!Ó#ˆà&¨Õ-ˆð Ð7Ð8ˆà×Ñœy×)Ô)¨RÜ#¤K°Ô$EÓFÒF÷ *ð 	×Ñ˜Ÿ™×*Ñ*¨CÖ0÷ *×)üs   ‚;B½BÁ0BÂB	ÂBc           	   #  óô  "  € V P                  4       p\        4       P                  R V4      x €pV Uu0 uF  q3^ ,          kK  	  pp\        P                  V9  d   V P                  R4       R# RV,          pRR/pV P                  \        4      ;_uu_ 4       p\        \        WVR7      4      x € RRR4       V P                  XP                  P                  R4       R# u upi   + '       g   i     L=; i5i)Ú	localhostz"localhost does not resolve to ipv4Nzws://localhost:%d/echorŽ  zhttp://subtenant.localhostr  r™  )rí   r
   ÚresolveÚsocketÚAF_INETÚskipTestrD  r   r   r   r  rQ  r  )r$   ra  ÚaddrinfoÚaddrÚfamiliesr‘  re   rR  s   &       r%   Ú$test_check_origin_invalid_subdomainsÚ2WebSocketTest.test_check_origin_invalid_subdomains8  sÈ   é € à×!Ñ!Ó#ˆô
 "›×+Ñ+¨K¸Ó>Ñ>ˆÙ(0Ó1© ˜—G�G©ˆÐ1Ü�>‰> Ô)Ø�M‰MÐ>Ô?Ùà&¨Õ-ˆð Ð9Ð:ˆà×Ñœy×)Ô)¨RÜ#¤K°Ô$EÓFÒF÷ *ð 	×Ñ˜Ÿ™×*Ñ*¨CÖ0ùò 2÷ *×)üs)   ‚1C8³C ÁAC8ÂC%Â05C8Ã%C5	Ã0C8c              #  ó¼   "  € V P                  R RR.R7      x €pV P                  VP                  R4       VP                  4       x €pV P                  VR4       R# 5i)rþ   Úbadprotor¿   )rÀ   zsubprotocol=goodprotoN)rò   r  rÄ   r(  r~  s   &  r%   Útest_subprotocolsÚWebSocketTest.test_subprotocolsO  s_   é € à—?‘?Ø¨*°kÐ)Bð #ó 
ñ 
ˆð 	×Ñ˜×0Ñ0°+Ô>Ø—O‘OÓ%Ñ%ˆØ×Ñ˜Ð5Ö6ùs   ‚AAc              #  ó´   "  € V P                  R 4      x €pV P                  VP                  R4       VP                  4       x €pV P	                  VR4       R# 5i)rþ   Nzsubprotocol=None)rò   rr  rÄ   r(  r  r~  s   &  r%   Útest_subprotocols_not_offeredÚ+WebSocketTest.test_subprotocols_not_offeredX  sJ   é € à—?‘? >Ó2Ñ2ˆØ�‰�b×-Ñ-¨tÔ4Ø—O‘OÓ%Ñ%ˆØ×Ñ˜Ð0Ö1ùs   ‚AAc              #  óô   "  € \        4       V n        V P                  R 4      x €pVP                  R4      x € V P                  P	                  4        VP                  4       x €pV P                  VR4       R# 5i)rÿ   rÞ   r~   N)r   rÍ   rò   rA   Úsetr(  r  r~  s   &  r%   Útest_open_coroutineÚ!WebSocketTest.test_open_coroutine_  sc   é € ä!›GˆÔØ—?‘?Ð#4Ó5Ñ5ˆØ×Ñ˜wÓ'Ò'Ø×Ñ×ÑÔØ—O‘OÓ%Ñ%ˆØ×Ñ˜˜dÖ#ùs   ‚A6A8c              #  óâ   "  € \        \        R 4      ;_uu_ 4        V P                  R4      x €pVP                  4       x €pRRR4       V P	                  X4       R#   + '       g   i     L#; i5i)rL  r   N©r   r	   rò   r(  rM  r~  s   &  r%   Útest_error_in_openÚ WebSocketTest.test_error_in_openh  sQ   é € ä”wÐ 4×5Õ5Ø—‘Ð'7Ó8Ñ8ˆBØŸ™Ó)Ñ)ˆC÷ 6ð 	×Ñ˜#Ö÷ 6×5üó   ‚A/›&AÁA/ÁA,	Á'A/c              #  óâ   "  € \        \        R 4      ;_uu_ 4        V P                  R4      x €pVP                  4       x €pRRR4       V P	                  X4       R#   + '       g   i     L#; i5i)rL  r  Nr¸  r~  s   &  r%   Útest_error_in_async_openÚ&WebSocketTest.test_error_in_async_openo  sQ   é € ä”wÐ 4×5Õ5Ø—‘Ð'=Ó>Ñ>ˆBØŸ™Ó)Ñ)ˆC÷ 6ð 	×Ñ˜#Ö÷ 6×5ür»  c              #  ó|   "  € V P                  R 4      x €pVP                  4       x €pV P                  VR4       R# 5i)r  rÞ   Nrƒ  r~  s   &  r%   Útest_nodelayÚWebSocketTest.test_nodelayv  s5   é € à—?‘? :Ó.Ñ.ˆØ—O‘OÓ%Ñ%ˆØ×Ñ˜˜gÖ&ùr†  )r"   rÍ   )-r5   r6   r7   r8   r  r  ré   r  r  r$  r   r*  r7  r<  r@  rF  rI  rN  rS  rV  rZ  rb  ri  rl  ro  ru  rx  r{  r€  r„  rŠ  r’  r–  rœ  rŸ  rª  r®  r±  rµ  r¹  r½  rÀ  r:   r;   r°   r±   s   @@r%   rõ   rõ   í   s†  ù‡ € ò6
òp'õ1ò-ò
	-ò	-ð ñ,ó ð,òð ñ2ó ð2ð ñ3ó ð3ð ñ-ó ð-ð ñ3ó ð3ð ñ$ó ð$ð ñ1ó ð1ð
 ñ-ó ð-ð ñ/ó ð/ð ñó ðð ñó ðð ñ0ó ð0ð ñó ðð& ñ%ó ð%ð ñ,ó ð,ð ñ&ó ð&ð ñ'ó ð'ð ñ'ó ð'ð
 ñ(ó ð(ð ñ0ó ð0ð ñ0ó ð0ð ñ1ó ð1ð ñ1ó ð1ð ñ1ó ð1ð, ñ7ó ð7ð ñ2ó ð2ð ñ$ó ð$ð ñó ðð ñó ðð ñ'ó ÷'ð 'r(   rõ   c                   ó8   a a€ ] tR tRt oV 3R ltR tRtVtV ;t# )ÚNativeCoroutineOnMessageHandleri}  c                ó6   <€ \         SV `  ! R/ VB  ^ V n        R# r    r¡   r¤   s   &,€r%   r&   Ú*NativeCoroutineOnMessageHandler.initialize~  r¨   r(   c              ƒ  ó  "  € V P                   ^ 8”  d   V P                  R4       V ;P                   ^,          un         \        P                  ! R4      G Rj  x€L
  V ;P                   ^,          un         V P                  V4       R#  L05irª   r¬   rF   s   &&r%   rH   Ú*NativeCoroutineOnMessageHandler.on_message‚  s`   é € Ø�=‰=˜1ÔØ×ÑÐFÔGØ�Š˜Õ�Ü�iŠi˜‹o×ÐØ�Š˜Õ�Ø×Ñ˜7Ö#ñ 	ùs   ‚AB
ÁBÁ1B
r¯   )	r5   r6   r7   r8   r&   rH   r:   r;   r°   r±   s   @@r%   rÃ  rÃ  }  s   ù‡ € õ÷$ò $r(   rÃ  c                   ó6   a € ] tR tRt o R t]R 4       tRtV tR# )ÚWebSocketNativeCoroutineTesti‹  c                ó&   € \        R \        3.4      # )ú/native)r   rÃ  r+   s   &r%   r  Ú$WebSocketNativeCoroutineTest.get_appŒ  s   € Ü˜YÔ(GÐHÐIÓJÐJr(   c              #  ó  "  € V P                  R 4      x €pVP                  R4      x € VP                  R4      x € VP                  4       x €pV P                  VR4       VP                  4       x €pV P                  VR4       R# 5i)rË  rˆ  r‰  Nr'  r~  s   &  r%   Útest_native_coroutineÚ2WebSocketNativeCoroutineTest.test_native_coroutine�  sv   é € à—?‘? 9Ó-Ñ-ˆà×Ñ˜xÓ(Ò(Ø×Ñ˜xÓ(Ò(Ø—O‘OÓ%Ñ%ˆØ×Ñ˜˜hÔ'Ø—O‘OÓ%Ñ%ˆØ×Ñ˜˜hÖ'ùrŒ  rJ   N)	r5   r6   r7   r8   r  r   rÎ  r:   r;   r<   s   @r%   rÉ  rÉ  ‹  s   ø‡ € òKð ñ(ó ö(r(   rÉ  c                   óh   a € ] tR tRt o RtR tR tR tV 3R lR lt]	R 4       t
]	R	 4       tR
tV tR# )ÚCompressionTestMixini›  zHello world. Testing 123 123c           	     ó®   €  ! R  R\         4      p\        R\        \        V P	                  4       R7      3RV\        V P	                  4       R7      3.4      # )c                   ó6   a € ] tR tRt o ]R 4       tR tRtV tR# )Ú4CompressionTestMixin.get_app.<locals>.LimitedHandleri   c                ó   € R # )é   rJ   r+   s   &r%   Úmax_message_sizeÚECompressionTestMixin.get_app.<locals>.LimitedHandler.max_message_size¡  s   € ár(   c                óL   € V P                  \        \        V4      4      4       R # r    )rA   ÚstrÚlenrF   s   &&r%   rH   Ú?CompressionTestMixin.get_app.<locals>.LimitedHandler.on_message¥  s   € Ø×"Ñ"¤3¤s¨7£|Ó#4Ö5r(   rJ   N)	r5   r6   r7   r8   Úpropertyr×  rH   r:   r;   r<   s   @r%   ÚLimitedHandlerrÔ     s!   ø‡ € Øñó ð÷6ð 6r(   rÞ  r„   r*   ú/limited)r   r   r?   r  Úget_server_compression_options)r$   rÞ  s   & r%   r  ÚCompressionTestMixin.get_appŸ  s_   € ô	6Ô1ô 	6ô ð ÜÜ¨T×-PÑ-PÓ-RÔSðð Ø"Ü¨T×-PÑ-PÓ-RÔSððó
ð 	
r(   c                ó   € R # r    rJ   r+   s   &r%   rà  Ú3CompressionTestMixin.get_server_compression_options·  ó   € Ùr(   c                ó   € R # r    rJ   r+   s   &r%   Úget_client_compression_optionsÚ3CompressionTestMixin.get_client_compression_optionsº  rä  r(   c                ó*   <€ V ^8„  d   QhRS[ RS[ RR/# )é   Úbytes_inÚ	bytes_outÚreturnN)Úint)Úformatr=   s   "€r%   Ú__annotate__Ú!CompressionTestMixin.__annotate__½  s"   ø€ ÷ $ñ $©#ð $¹#ð $À$ñ $r(   c                ó   € \        4       hr    ©ÚNotImplementedError©r$   rê  rë  s   &&&r%   Úverify_wire_bytesÚ&CompressionTestMixin.verify_wire_bytes½  ó   € Ü!Ó#Ð#r(   c              #  ó|  "  € V P                  R V P                  4       R7      x €p\        ^4       FK  pVP                  V P                  4       VP                  4       x €pV P                  W0P                  4       KM  	  V P                  VP                  P                  \        V P                  4      ^,          4       V P                  VP                  P                  \        V P                  4      ^,          4       V P                  VP                  P                  VP                  P                  4       R# 5i)r„   r*   N)rò   ræ  ÚrangerA   ÚMESSAGEr(  r  ÚprotocolÚ_message_bytes_outrÛ  Ú_message_bytes_inrõ  Ú_wire_bytes_inÚ_wire_bytes_out©r$   rñ   Úir  s   &   r%   Útest_message_sizesÚ'CompressionTestMixin.test_message_sizesÀ  sä   é € à—?‘?Ø¨×)LÑ)LÓ)Nð #ó 
ñ 
ˆô
 �q–ˆAØ×Ñ˜TŸ\™\Ô*ØŸ_™_Ó.Ñ.ˆHØ×Ñ˜X§|¡|Ö4ñ ð 	×Ñ˜Ÿ™×7Ñ7¼¸T¿\¹\Ó9JÈQÕ9NÔOØ×Ñ˜Ÿ™×6Ñ6¼¸D¿L¹LÓ8IÈAÕ8MÔNØ×Ñ˜rŸ{™{×9Ñ9¸2¿;¹;×;VÑ;VÖWùs   ‚D:D<c              #  ó&  "  € V P                  R V P                  4       R7      x €pVP                  R4       VP                  4       x €pV P	                  VR4       VP                  R4       VP                  4       x €pV P                  V4       R# 5i)rß  r*   Ú128NÚ€aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaÁ   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)rò   ræ  rA   r(  r  rM  r)  s   &  r%   Útest_size_limitÚ$CompressionTestMixin.test_size_limitÏ  s‡   é € à—?‘?Ø¨D×,OÑ,OÓ,Qð #ó 
ñ 
ˆð 	×Ñ˜Ô#ØŸ™Ó*Ñ*ˆØ×Ñ˜ 5Ô)ð 	×Ñ˜Ô$ØŸ™Ó*Ñ*ˆØ×Ñ˜(Ö#ùs   ‚BBrJ   N)r5   r6   r7   r8   rú  r  rà  ræ  rõ  r   r  r  r:   r;   r<   s   @r%   rÑ  rÑ  ›  sM   ø‡ € à,€Gò
ò0ò÷$ð $ð ñXó ðXð ñ$ó ö$r(   rÑ  c                   ó*   a € ] tR tRt o RtR tRtV tR# )ÚUncompressedTestMixiniß  zESpecialization of CompressionTestMixin when we expect no compression.c                óÒ   € V P                  V^\        V P                  4      ^,           ,          4       V P                  V^\        V P                  4      ^,           ,          4       R# ©é   N)r  rÛ  rú  rô  s   &&&r%   rõ  Ú'UncompressedTestMixin.verify_wire_bytesã  sH   € à×Ñ˜ A¬¨T¯\©\Ó):¸QÕ)>Õ$?Ô@Ø×Ñ˜ 1¬¨D¯L©LÓ(9¸AÕ(=Õ#>Ö?r(   rJ   N)r5   r6   r7   r8   r9   rõ  r:   r;   r<   s   @r%   r  r  ß  s   ø‡ € áO÷@ð @r(   r  c                   ó   € ] tR tRtRtR# )ÚNoCompressionTestié  rJ   N)r5   r6   r7   r8   r:   rJ   r(   r%   r  r  é  s   † Ûr(   r  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚServerOnlyCompressionTestiî  c                ó   € / # r    rJ   r+   s   &r%   rà  Ú8ServerOnlyCompressionTest.get_server_compression_optionsï  ó   € Øˆ	r(   rJ   N)r5   r6   r7   r8   rà  r:   r;   r<   s   @r%   r  r  î  ó   ø‡ € ÷ð r(   r  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚClientOnlyCompressionTestió  c                ó   € / # r    rJ   r+   s   &r%   ræ  Ú8ClientOnlyCompressionTest.get_client_compression_optionsô  r  r(   rJ   N)r5   r6   r7   r8   ræ  r:   r;   r<   s   @r%   r  r  ó  r  r(   r  c                   ó2   a € ] tR tRt o R tR tR tRtV tR# )ÚDefaultCompressionTestiø  c                ó   € / # r    rJ   r+   s   &r%   rà  Ú5DefaultCompressionTest.get_server_compression_optionsù  r  r(   c                ó   € / # r    rJ   r+   s   &r%   ræ  Ú5DefaultCompressionTest.get_client_compression_optionsü  r  r(   c                ó  € V P                  V^\        V P                  4      ^,           ,          4       V P                  V^\        V P                  4      ^,           ,          4       V P                  W!^,           4       R# r  )Ú
assertLessrÛ  rú  r  rô  s   &&&r%   rõ  Ú(DefaultCompressionTest.verify_wire_bytesÿ  sV   € Ø�‰˜	 1¬¨D¯L©LÓ(9¸AÕ(=Õ#>Ô?Ø�‰˜ !¤s¨4¯<©<Ó'8¸1Õ'<Õ"=Ô>à×Ñ˜¨r¥MÖ2r(   rJ   N)	r5   r6   r7   r8   rà  ræ  rõ  r:   r;   r<   s   @r%   r  r  ø  s   ø‡ € òò÷3ð 3r(   r  c                   óD   a € ] tR tRt o V 3R lR ltV 3R lR ltRtV tR# )ÚMaskFunctionMixini  c                ó,   <€ V ^8„  d   QhRS[ RS[ RS[ /# )ré  ÚmaskÚdatarì  )rC   )rî  r=   s   "€r%   rï  ÚMaskFunctionMixin.__annotate__	  s"   ø€ ÷ $ñ $™ð $¡eð $±ñ $r(   c                ó   € \        4       hr    rò  ©r$   r(  r)  s   &&&r%   r(  ÚMaskFunctionMixin.mask	  r÷  r(   c                ó4   <€ V ^8„  d   QhRS[ P                  /# )ré  r$   )ÚtypingÚAny)rî  r=   s   "€r%   rï  r*    s   ø€ ÷ 
ñ 
™Ÿ
™
ñ 
r(   c                óž  € V P                  V P                  R R4      R4       V P                  V P                  R R4      R4       V P                  V P                  R R4      R4       V P                  V P                  RR4      R4       V P                  V P                  R	R
4      R4       V P                  V P                  RR4      R4       R# )s   abcdr(   ó   bó   s   54321s   TVPVPs   ZXCVs   98765432s   c`t`olpds    s   ÿûýüþús   ÿúÿÿþûs   ÿûýüs    s   ÿúÿÿûþN)r  r(  r+   s   &r%   Ú	test_maskÚMaskFunctionMixin.test_mask  s´   € Ø×Ñ˜Ÿ™ 7¨CÓ0°#Ô6Ø×Ñ˜Ÿ™ 7¨DÓ1°7Ô;Ø×Ñ˜Ÿ™ 7¨HÓ5°xÔ@Ø×Ñ˜Ÿ™ 7¨KÓ8¸+ÔFð 	×ÑØ�I‰IÐ)Ð+FÓGØ'ô	
ð 	×ÑØ�I‰IÐ)Ð+FÓGØ'ö	
r(   rJ   N)r5   r6   r7   r8   r(  r4  r:   r;   r<   s   @r%   r&  r&    s   ø‡ € ÷$ð $÷
ö 
r(   r&  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚPythonMaskFunctionTesti  c                ó   € \        W4      # r    r   r,  s   &&&r%   r(  ÚPythonMaskFunctionTest.mask  s   € Ü% dÓ1Ð1r(   rJ   N©r5   r6   r7   r8   r(  r:   r;   r<   s   @r%   r7  r7    s   ø‡ € ÷2ð 2r(   r7  z#tornado.speedups module not presentc                   ó&   a € ] tR tRt o R tRtV tR# )ÚCythonMaskFunctionTesti#  c                ó.   € \         P                  ! W4      # r    )r   Úwebsocket_maskr,  s   &&&r%   r(  ÚCythonMaskFunctionTest.mask%  s   € Ü×&Ò& tÓ2Ð2r(   rJ   Nr:  r<   s   @r%   r<  r<  #  s   ø‡ € ÷3ð 3r(   r<  c                   ó6   a € ] tR tRt o R t]R 4       tRtV tR# )ÚServerPeriodicPingTesti)  c                óB   €  ! R  R\         4      p\        RV3.R^ R7      # )c                   ó&   a € ] tR tRt o R tRtV tR# )Ú3ServerPeriodicPingTest.get_app.<locals>.PingHandleri+  c                ó(   € V P                  R 4       R# )úgot pongNr•   ©r$   r)  s   &&r%   Úon_pongÚ;ServerPeriodicPingTest.get_app.<locals>.PingHandler.on_pong,  ó   € Ø×"Ñ" :Ö.r(   rJ   N)r5   r6   r7   r8   rH  r:   r;   r<   s   @r%   ÚPingHandlerrD  +  ó   ø‡ € ÷/ð /r(   rK  Ú/r«   )Úwebsocket_ping_intervalÚwebsocket_ping_timeout©r   r   ©r$   rK  s   & r%   r  ÚServerPeriodicPingTest.get_app*  s/   € ô	/Ô.ô 	/ô Ø�;ÐÐ Ø$(Ø#$ô
ð 	
r(   c              #  ó    "  € V P                  R 4      x €p\        ^4       F'  pVP                  4       x €pV P                  VR4       K)  	  R# 5i)rM  rF  N)rò   rù  r(  r  r   s   &   r%   Útest_server_pingÚ'ServerPeriodicPingTest.test_server_ping5  sC   é € à—?‘? 3Ó'Ñ'ˆÜ�q–ˆAØŸ_™_Ó.Ñ.ˆHØ×Ñ˜X zÖ2ó ùs   ‚AArJ   N)	r5   r6   r7   r8   r  r   rT  r:   r;   r<   s   @r%   rA  rA  )  s   ø‡ € ò	
ð ñ3ó ö3r(   rA  c                   ó6   a € ] tR tRt o R t]R 4       tRtV tR# )ÚClientPeriodicPingTesti>  c                ó<   €  ! R  R\         4      p\        RV3.4      # )c                   ó&   a € ] tR tRt o R tRtV tR# )Ú3ClientPeriodicPingTest.get_app.<locals>.PingHandleri@  c                ó(   € V P                  R 4       R# )úgot pingNr•   rG  s   &&r%   Úon_pingÚ;ClientPeriodicPingTest.get_app.<locals>.PingHandler.on_pingA  rJ  r(   rJ   N©r5   r6   r7   r8   r]  r:   r;   r<   s   @r%   rK  rZ  @  rL  r(   rK  rM  rP  rQ  s   & r%   r  ÚClientPeriodicPingTest.get_app?  s$   € ô	/Ô.ô 	/ô ˜S +Ð.Ð/Ó0Ð0r(   c              #  óÆ   "  € V P                  R R^ R7      x €p\        ^4       F'  pVP                  4       x €pV P                  VR4       K)  	  VP	                  4        R# 5i)rM  r«   ©Úping_intervalÚping_timeoutr\  N)rò   rù  r(  r  rŒ   r   s   &   r%   Útest_client_pingÚ'ClientPeriodicPingTest.test_client_pingF  sT   é € à—?‘? 3°dÈ�?ÓKÑKˆÜ�q–ˆAØŸ_™_Ó.Ñ.ˆHØ×Ñ˜X zÖ2ñ ð 	�‰Ž
ùs   ‚AA!rJ   N)	r5   r6   r7   r8   r  r   re  r:   r;   r<   s   @r%   rW  rW  >  s   ø‡ € ò1ð ñó ör(   rW  c                   óF   a € ] tR tRt o R t]R 4       t]R 4       tRt	V t
R# )ÚServerPingTimeoutTestiO  c                óZ   a€ . V n         V o ! V3R  lR\        4      p\        RV3.4      pV# )c                   ó:   <a a€ ] tR tRt oRV V3R lltRtVtV ;t# )Ú2ServerPingTimeoutTest.get_app.<locals>.PingHandleriT  c                ó|   <€ SP                   V n         V P                   P                  V 4       \        SV `  WR 7      # )r!   )Úhandlersrî   r¢   r&   )r$   r"   r#   r¦   rÉ   s   &&&€€r%   r&   Ú=ServerPingTimeoutTest.get_app.<locals>.PingHandler.initializeU  s:   ø€ Ø $§¡�”à—‘×$Ñ$ TÔ*Ü‘wÑ)Ø!-ð *ó ð r(   ©rm  r4   )r5   r6   r7   r8   r&   r:   r;   r°   )r¦   r=   rÉ   s   @@€r%   rK  rk  T  s   ú‡ € ÷÷ ð r(   rK  rM  )rm  r   r   )r$   rK  ÚapprÉ   s   &  @r%   r  ÚServerPingTimeoutTest.get_appP  s5   ø€ Ø02ˆŒØˆ÷	Ô.ô 	ô ˜C Ð-Ð.Ó/ˆØˆ
r(   c                ó†   a € RS n         ^ S n        V 3R lpV! S P                  P                  4      S P                  n        R# )z1Optionally suppress the client's "pong" response.Fc                 ó   <a € R  V V3R llpV# )c                ó0   € V ^8„  d   QhR\         R\        /# )ré  Úopcoder)  )rí  rC   )rî  s   "r%   rï  ÚIServerPingTimeoutTest.install_hook.<locals>.wrapper.<locals>.__annotate__h  s   € ÷ )ñ )œsð )¬%ñ )r(   c                 ó|   <€ V ^
8X  d.   S;P                   ^,          un         SP                  '       d   R# S! W4      # )é
   N)Úpongs_receivedÚ
drop_pongs)ru  r)  Úfcnrñ   s   &&€€r%   Ú_innerÚCServerPingTimeoutTest.install_hook.<locals>.wrapper.<locals>._innerh  s2   ø€ Ø˜S”=Ø×%Ò%¨Õ*Õ%Ø—}—}�}áá˜6Ó(Ð(r(   rJ   )r{  r|  rñ   s   f €r%   ÚwrapperÚ3ServerPingTimeoutTest.install_hook.<locals>.wrapperg  s   ù€ ÷)ñ )ð ˆMr(   N)rz  ry  rû  Ú_handle_message)rñ   r~  s   f r%   Úinstall_hookÚ"ServerPingTimeoutTest.install_hook`  s6   ø€ ð ˆŒØˆÔõ
	ñ '.¨b¯k©k×.IÑ.IÓ&Jˆ�‰Ö#r(   c              #  óÆ  "  € R pV P                  RW^,          R7      x €pV P                  V4       V P                  ^ ,          p\        ^4       Fk  p\        P
                  ! V4      x € V P                  VP                  4       V P                  VP                  4       VP                  P                  f   Kk  Q h	  V P                  VP                  ^4       RVn        \        P
                  ! VR,          4      x € V P                  VP                  R4       V P                  VP                  R4       V P                  VP                  P                  R4       R# 5i)gš™™™™™É?rM  rb  NTg      ø?iè  zping timed out)rò   r�  rm  rù  r   r­   rM  r0   r1   rû  ÚassertGreaterEqualry  rz  r  )r$   Úintervalrñ   ÚhandlerÚ_s   &    r%   Útest_client_ping_timeoutÚ.ServerPingTimeoutTest.test_client_ping_timeoutu  s-  é € ð ˆØ—?‘?Ø˜xÀµlð #ó 
ñ 
ˆð 	×Ñ˜"Ôð —-‘- Õ"ˆä�q–ˆAä—)’)˜HÓ%Ò%ð ×Ñ˜g×0Ñ0Ô1Ø×Ñ˜g×2Ñ2Ô3ð —;‘;×)Ñ)Ô1Ð1Ð1ñ ð 	×Ñ × 1Ñ 1°1Ô5ð ˆŒô �iŠi˜ 3�Ó'Ò'ð 	×Ñ˜×+Ñ+¨TÔ2Ø×Ñ˜×-Ñ-Ð/?Ô@ð 	×Ñ˜Ÿ™×/Ñ/°Ö6ùs   ‚B4E!Â;B&E!ro  N)r5   r6   r7   r8   r  Ústaticmethodr�  r   rˆ  r:   r;   r<   s   @r%   rh  rh  O  s4   ø‡ € òð  ñKó ðKð( ñ%7ó ö%7r(   rh  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚPingCalculationTestiž  c           
     ón  € ^ RI Hp \        P                  ! R^^^^ ^ \        P                  P                  R7      p^
p\        P                  ! R^^^^;^6\        P                  P                  R7      pVP                  VP                  4       VVP                  4       R7      pV P                  V^4       R# )r   )ÚWebSocketProtocol13ié  )Útzinfo)Úlast_ping_timer…  ÚnowN)Útornado.websocketrŽ  ÚdatetimeÚtimezoneÚutcÚping_sleep_timeÚ	timestampr  )r$   rŽ  r‘  r…  r�  Ú
sleep_times   &     r%   Útest_ping_sleep_timeÚ(PingCalculationTest.test_ping_sleep_timeŸ  sž   € Ý9ä×Ò  a¨¨B°°1¼X×=NÑ=N×=RÑ=RÔSˆØˆÜ!×*Ò*Ø�!�Q˜˜B ¬8×+<Ñ+<×+@Ñ+@ô
ˆð )×8Ñ8Ø)×3Ñ3Ó5ØØ—‘“ð 9ó 
ˆ
ð
 	×Ñ˜ QÖ'r(   rJ   N)r5   r6   r7   r8   r™  r:   r;   r<   s   @r%   rŒ  rŒ  ž  s   ø‡ € ÷(ð (r(   rŒ  c                   ó6   a € ] tR tRt o R t]R 4       tRtV tR# )ÚManualPingTesti¯  c                ó<   €  ! R  R\         4      p\        RV3.4      # )c                   ó&   a € ] tR tRt o R tRtV tR# )Ú+ManualPingTest.get_app.<locals>.PingHandleri±  c                óH   € V P                  V\        V\        4      R 7       R# )r:  N)rA   rB   rC   rG  s   &&r%   r]  Ú3ManualPingTest.get_app.<locals>.PingHandler.on_ping²  s   € Ø×"Ñ" 4´
¸4ÄÓ0GÐ"ÖHr(   rJ   Nr_  r<   s   @r%   rK  rŸ  ±  s   ø‡ € ÷Ið Ir(   rK  rM  rP  rQ  s   & r%   r  ÚManualPingTest.get_app°  s&   € ô	IÔ.ô 	Iô ˜S +Ð.Ð/Ó0Ð0r(   c              #  óJ  "  € V P                  R 4      x €pV P                  \        VP                  R4       VP                  R4       VP	                  4       x €pV P                  VR4       VP                  R4       VP	                  4       x €pV P                  VR4       R# 5i)rM  rÞ   s   hellos   binary helloNÚ~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)rò   rD  Ú
ValueErrorÚpingr(  r  )r$   rñ   Úresps   &  r%   Útest_manual_pingÚManualPingTest.test_manual_ping·  s‚   é € à—?‘? 3Ó'Ñ'ˆà×Ñœ* b§g¡g¨yÔ9à
�‰�ÔØ—_‘_Ó&Ñ&ˆà×Ñ˜˜xÔ(à
�‰�Ô Ø—_‘_Ó&Ñ&ˆØ×Ñ˜˜Ö/ùs   ‚B!B#rJ   N)	r5   r6   r7   r8   r  r   r¨  r:   r;   r<   s   @r%   rœ  rœ  ¯  s   ø‡ € ò1ð ñ0ó ö0r(   rœ  c                   ó6   a € ] tR tRt o R t]R 4       tRtV tR# )ÚMaxMessageSizeTestiÇ  c                ó*   € \        R \        3.RR7      # )rM  rÖ  )Úwebsocket_max_message_size)r   r?   r+   s   &r%   r  ÚMaxMessageSizeTest.get_appÈ  s   € Ü˜S¤+Ð.Ð/ÈDÔQÐQr(   c              #  óˆ  "  € V P                  R 4      x €pRpVP                  V4       VP                  4       x €pV P                  W24       VP                  VR,           4       VP                  4       x €pV P	                  VR4       V P                  VP
                  R4       V P                  VP                  R4       R# 5i)rM  ÚbNiñ  zmessage too bigÁ   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)rò   rA   r(  r  rr  r0   r1   )r$   rñ   rs  r§  s   &   r%   Útest_large_messageÚ%MaxMessageSizeTest.test_large_messageË  s¢   é € à—?‘? 3Ó'Ñ'ˆð ˆØ
×Ñ˜ÔØ—_‘_Ó&Ñ&ˆØ×Ñ˜Ô#ð 	×Ñ˜˜s�Ô#Ø—_‘_Ó&Ñ&ˆà�‰�d˜DÔ!Ø×Ñ˜Ÿ™¨Ô-Ø×Ñ˜Ÿ™Ð*;Ö<ùs   ‚C CrJ   N)	r5   r6   r7   r8   r  r   r²  r:   r;   r<   s   @r%   r«  r«  Ç  s   ø‡ € òRð ñ=ó ö=r(   r«  )UrD   rf  r“  rY   r¤  Ú	tracebackr/  ÚunittestÚtornado.concurrentr   Útornador   Útornado.httpclientr   r   Útornado.locksr   Útornado.logr   r	   Útornado.netutilr
   Útornado.simple_httpclientr   Útornado.templater   Útornado.test.utilr   r   Útornado.testingr   r   r   r   Útornado.webr   r   r’  Útornado.utilr   ÚImportErrorÚ	print_excr   r   r   r   r   r   r?   rM   rS   rm   r|   r‚   r‡   r�   r˜   rž   r³   r¹   rÇ   rÓ   rØ   rÜ   râ   rõ   rÃ  rÉ  rÑ  r  r  r  r  r  ÚTestCaser&  r7  ÚskipIfr<  rA  rW  rh  rŒ  rœ  r«  rJ   r(   r%   Ú<module>rÆ     sÕ  ðÛ Û Û Û Û Û Û Û å %Ý ß 5Ý ß (Ý $Ý ;Ý 'ß Dß TÓ Tß 3ð	
ÛÝ3÷ó ðÝ ô
OÐ+ô Oô(Ð&ô ôÐ2ô ô
CÐ(ô Cô,&Ð,ô &ô˜.ô ô
�nô ô
$Ð-ô $ô$Ð.ô $ô Ð*ô  ô
$Ð 4ô $ôPÐ/ô Pô
IÐ-ô Iô&!Ð/ô !ô$ Ð-ô  ô
 Ð2ô  ô$Ð)ô $ôÐ-ô ô&M'Ð)ô M'ô`$Ð&:ô $ô(Ð#8ô (ð  ô@$Ð0ó @$ó ð@$ðF ô@Ð0ó @ó ð@ô	Ð-ô 	ô
Ð 5ô ô
Ð 5ô ô
3Ð1ô 3ð ô
˜×)Ñ)ó 
ó ð
ô.2Ð.ô 2ð
 
‡‚�˜TÐ!Ð#HÓIô3Ð.ó 3ó Jð3ô
3Ð2ô 3ô*Ð2ô ô"L7Ð1ô L7ô^(˜(×+Ñ+ô (ô"0Ð*ô 0ô0=Ð.ö =øð] ô 
ð
 ×ÒÔØ	ð
ûð" ô ØƒHðús   Á2
I Â	I5 ÉI2É5	JÊJ