+
    -IëjÚ ã                   ó:
  € ^ RI t ^ RIHt ^ RIHt ^ RIHtHtHtH	t	H
t
Ht ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHtHt ^ RIHt ^ RIHt ^ RIHtHtHtH t  ^ RI!H"t" ^ RI#H$t$H%t% ^ RI&H't'H(t(H)t)H*t+H,t,H-t-H.t.H/t/H0t0H1t1H2t2H3t3H4t4H5t5H6t6H7t7H8t8H9t9H:t: ^ RI;t;^ RI<t<^ RI=t=^ RI>t>^ RI?t@^ RIAtA^ RIBHCtC ^ RIDtD^ RIEtE^ RIFtF^ RIGtG^ RIHtH^ RIItI^ RIJtJ^ RIKtK^ RILtL^ RIMtNR tO ! R R]4      tP ! R R]P4      tQ ! R R](4      tR ! R R](4      tS ! R R]LP¨                  4      tU ! R R]LP¨                  4      tV ! R R ]P4      tW ! R! R"]P4      tX ! R# R$](4      tY ! R% R&]P4      tZ ! R' R(](4      t[ ! R) R*]P4      t\ ! R+ R,](4      t] ! R- R.]P4      t^ ! R/ R0](4      t_ ! R1 R2](4      t` ! R3 R4](4      ta ! R5 R6](4      tb ! R7 R8](4      tc ! R9 R:](4      td ! R; R<](4      t* ! R= R>](4      te ! R? R@](4      tf ! RA RB](4      tg ! RC RD](4      th ! RE RF](4      ti ! RG RH]P4      tj ! RI RJ]P4      tk ! RK RL]P4      tl ! RM RN]P4      tm]LPÜ                  ! ]FPÞ                  RO8g  RP4       ! RQ RR]P4      4       tp ! RS RT])4      tq]LPÜ                  ! ]FPÞ                  RO8g  RP4       ! RU RV]P4      4       tr ! RW RX]P4      ts ! RY RZ]P4      tt ! R[ R\]P4      tu ! R] R^]P4      tv ! R_ R`]P4      tw ! Ra Rb]P4      tx ! Rc Rd]P4      ty ! Re Rf]P4      tz ! Rg Rh]Q4      t{ ! Ri Rj]Q4      t| ! Rk Rl]Q4      t} ! Rm Rn]Q4      t~ ! Ro Rp]Q4      t ! Rq Rr]Q4      t€ ! Rs Rt]P4      t� ! Ru Rv]Q4      t‚ ! Rw Rx]P4      tƒ ! Ry Rz]Q4      t„ ! R{ R|]…4      t† ! R} R~]Q4      t‡ ! R R€]Q4      tˆ ! R� R‚]Q4      t‰ ! Rƒ R„]Q4      tŠ ! R… R†]Q4      t‹ ! R‡ Rˆ]P4      tŒ ! R‰ RŠ]Q4      t� ! R‹ RŒ]Q4      tŽ ! R� RŽ]Q4      t� ! R� R�]Q4      t� ! R‘ R’]Q4      t‘ ! R“ R”]P4      t’ ! R• R–]P4      t“ ! R— R˜]P4      t” ! R™ Rš]P4      t• ! R› Rœ]P4      t–]7 ! R� Rž](4      4       t— ! RŸ R 4      t˜ ! R¡ R¢]˜]P4      t™ ! R£ R¤]˜]P4      tš ! R¥ R¦]Q4      t› ! R§ R¨]Q4      tœ ! R© Rª]LP¨                  4      t� ! R« R¬]Q4      tž ! R­ R®]Q4      tŸ ! R¯ R°]Q4      t  ! R± R²]Q4      t¡ ! R³ R´]P4      t¢ ! Rµ R¶]P4      t£ ! R· R¸]Q4      t¤ ! R¹ Rº]LP¨                  4      t¥ ! R» R¼]4      t¦ ! R½ R¾]LP¨                  4      t§ ! R¿ RÀ]P4      t¨ ! RÁ RÂ]P4      t©R# )Ãé    N)ÚFuture)Úgen)Újson_decodeÚutf8Ú
to_unicodeÚrecursive_unicodeÚ
native_strÚto_basestring)ÚHTTPClientError)Úformat_timestamp)ÚIOStream)Úlocale)ÚEvent)Úapp_logÚgen_log©ÚSimpleAsyncHTTPClient©Ú
DictLoader)ÚAsyncHTTPTestCaseÚAsyncTestCaseÚ	ExpectLogÚgen_test)Úignore_deprecation)Ú
ObjectDictÚunicode_type)ÚApplicationÚRequestHandlerÚStaticFileHandlerÚRedirectHandlerÚ	HTTPErrorÚMissingArgumentErrorÚErrorHandlerÚauthenticatedÚurlÚ_create_signature_v1Úcreate_signed_valueÚdecode_signed_valueÚget_signature_key_versionÚUIModuleÚFinishÚstream_request_bodyÚremoveslashÚaddslashÚGZipContentEncoding)ÚBytesIOc                  óˆ   € \         P                  P                  ! \         P                  P                  \        4      .V O5!  # ©N)ÚosÚpathÚjoinÚdirnameÚ__file__)Úas   *Ú7/usr/lib/python3/dist-packages/tornado/test/web_test.pyÚrelpathr:   A   s'   € Ü�7‰7�<Š<œŸ™Ÿ™¬Ó1Ð6°AÓ6Ð6ó    c                   ó6   a € ] tR t^Et o RtR tR tR tRtV t	R# )ÚWebTestCasez¶Base class for web tests that also supports WSGI mode.

Override get_handlers and get_app_kwargs instead of get_app.
This class is deprecated since WSGI mode is no longer supported.
c                ót   € \        V P                  4       3/ V P                  4       B V n        V P                  # r2   )r   Úget_handlersÚget_app_kwargsÚapp©Úselfs   &r9   Úget_appÚWebTestCase.get_appL   s.   € Ü˜t×0Ñ0Ó2ÑL°d×6IÑ6IÓ6KÑLˆŒØ�x‰xˆr;   c                ó   € \        4       hr2   ©ÚNotImplementedErrorrB   s   &r9   r?   ÚWebTestCase.get_handlersP   s   € Ü!Ó#Ð#r;   c                ó   € / # r2   © rB   s   &r9   r@   ÚWebTestCase.get_app_kwargsS   ó   € Øˆ	r;   )rA   N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rD   r?   r@   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r9   r=   r=   E   s   ø‡ € ñòò$÷ð r;   r=   c                   ó.   a € ] tR t^Wt o RtRtR tRtV tR# )ÚSimpleHandlerTestCasezySimplified base class for tests that work with a single handler class.

To use, define a nested class named ``Handler``.
Nc                ó    € R V P                   3.# )Ú/©ÚHandlerrB   s   &r9   r?   Ú"SimpleHandlerTestCase.get_handlers_   s   € Ø�d—l‘lÐ#Ð$Ð$r;   rK   )	rN   rO   rP   rQ   rR   r\   r?   rS   rT   rU   s   @r9   rX   rX   W   s   ø‡ € ñð
 €G÷%ð %r;   rX   c                   ó&   a € ] tR t^ct o R tRtV tR# )ÚHelloHandlerc                ó(   € V P                  R 4       R# ©ÚhelloN©ÚwriterB   s   &r9   ÚgetÚHelloHandler.getd   s   € Ø�
‰
�7Ör;   rK   N©rN   rO   rP   rQ   re   rS   rT   rU   s   @r9   r_   r_   c   s   ø‡ € ÷ð r;   r_   c                   ó:   a € ] tR t^ht o RR ltR tRR ltRtV tR# )ÚCookieTestRequestHandlerNc                óŒ   € / V n         Vf   \        \        VR7      R7      V n        R # \        \        WR7      R7      V n        R # )N)Úcookie_secret)Úsettings©rk   Úkey_version)Ú_cookiesr   ÚdictÚapplication)rC   rk   rn   s   &&&r9   Ú__init__Ú!CookieTestRequestHandler.__init__j   s;   € àˆŒØÒÜ)Ü¨MÔ:ô ˆDÖô  *Ü¨MÔSô ˆDÖr;   c                ó8   € V P                   P                  V4      # r2   )ro   re   )rC   Únames   &&r9   Ú
get_cookieÚ#CookieTestRequestHandler.get_cookiev   s   € Ø�}‰}× Ñ  Ó&Ð&r;   c                ó"   € W P                   V&   R # r2   )ro   )rC   ru   ÚvalueÚexpires_dayss   &&&&r9   Ú
set_cookieÚ#CookieTestRequestHandler.set_cookiey   s   € Ø#�‰�dÓr;   )ro   rq   )Ú
0123456789Nr2   )	rN   rO   rP   rQ   rr   rv   r{   rS   rT   rU   s   @r9   ri   ri   h   s   ø‡ € ô
ò'÷$ò $r;   ri   c                   ó2   a € ] tR t^~t o R tR tR tRtV tR# )ÚSecureCookieV1Testc                óˆ   € \        4       pVP                  R R^R7       V P                  VP                  R ^R7      R4       R# ©Úfooó   bar©Úversion©Úmin_versionN©ri   Úset_signed_cookieÚassertEqualÚget_signed_cookie©rC   Úhandlers   & r9   Útest_round_tripÚ"SecureCookieV1Test.test_round_trip   ó?   € Ü*Ó,ˆØ×!Ñ! %¨¸Ð!Ô;Ø×Ñ˜×2Ñ2°5ÀaÐ2ÓHÈ&ÖQr;   c           	     ó0  € \        4       pVP                  R \        P                  ! R4      ^R7       VP                  R ,          p\
        P                  ! RV4      pV P                  V4       Vf   Q hVP                  ^4      pVP                  ^4      pV P                  \        VP                  P                  R,          R RV4      V4       V P                  \        VP                  P                  R,          R RRV,           4      V4       \        R	\        V4       R
\        V4       24      VP                  R &   \        \         R4      ;_uu_ 4        V P#                  VP%                  R ^R7      4       RRR4       R#   + '       g   i     R# ; i)r‚   s   d76df8e7aefcr„   s   12345678\|([0-9]+)\|([0-9a-f]+)Nrk   Ú12345678Ú1234s   5678z	1234|5678Ú|zCookie timestamp in futurer†   )ri   r‰   ÚbinasciiÚa2b_hexro   ÚreÚmatchÚassertIsNotNoneÚgrouprŠ   r&   rq   rl   r   r
   r   r   ÚassertIsNoner‹   )rC   r�   Úcookier˜   Ú	timestampÚsigs   &     r9   Ú&test_cookie_tampering_future_timestampÚ9SecureCookieV1Test.test_cookie_tampering_future_timestamp„   sg  € Ü*Ó,ˆà×!Ñ! %¬×)9Ò)9¸/Ó)JÐTUÐ!ÔVØ×!Ñ! %Õ(ˆÜ—’Ð<¸fÓEˆØ×Ñ˜UÔ#ØÒ Ð Ð Ø—K‘K “Nˆ	Ø�k‰k˜!‹nˆØ×ÑÜ Ø×#Ñ#×,Ñ,¨_Õ=ØØØó	ð ô	
ð 	×ÑÜ Ø×#Ñ#×,Ñ,¨_Õ=ØØØ˜)Õ#ó	ð ô	
ô #'Øœ iÓ0Ð1°´=ÀÓ3EÐ2FÐGó#
ˆ×Ñ˜Ñô ”wÐ <×=Õ=Ø×Ñ˜g×7Ñ7¸È1Ð7ÓMÔN÷ >×=×=Ò=ús   Å#FÆF	c                óˆ   € \        4       pVP                  R R^R7       V P                  VP                  R ^R7      R4       R# )r‚   ó   ér„   r†   Nrˆ   rŒ   s   & r9   Útest_arbitrary_bytesÚ'SecureCookieV1Test.test_arbitrary_bytes«   sA   € ô +Ó,ˆØ×!Ñ! %¨¸!Ð!Ô<Ø×Ñ˜×2Ñ2°5ÀaÐ2ÓHÈ'ÖRr;   rK   N)	rN   rO   rP   rQ   rŽ   rŸ   r£   rS   rT   rU   s   @r9   r   r   ~   s   ø‡ € òRò
%O÷NSð Sr;   r   c                   óJ   a € ] tR t^´t o ^ R^R/tR tR tR tR tR t	Rt
V tR	# )
ÚSecureCookieV2TestÚajklasdf0ojaisdfÚaslkjasaolwkjsdfc                óˆ   € \        4       pVP                  R R^R7       V P                  VP                  R ^R7      R4       R# r�   rˆ   rŒ   s   & r9   rŽ   Ú"SecureCookieV2Test.test_round_trip·   r�   r;   c                óš   € \        V P                  ^ R7      pVP                  RR4       V P                  VP	                  R4      R4       R# ©r   rm   r‚   rƒ   N©ri   ÚKEY_VERSIONSr‰   rŠ   r‹   rŒ   s   & r9   Útest_key_version_roundtripÚ-SecureCookieV2Test.test_key_version_roundtrip¼   óD   € Ü*Ø×+Ñ+¸ô
ˆð 	×!Ñ! %¨Ô0Ø×Ñ˜×2Ñ2°5Ó9¸6ÖBr;   c                óš   € \        V P                  ^R7      pVP                  RR4       V P                  VP	                  R4      R4       R# )é   rm   r‚   rƒ   Nr­   rŒ   s   & r9   Ú,test_key_version_roundtrip_differing_versionÚ?SecureCookieV2Test.test_key_version_roundtrip_differing_versionÃ   r±   r;   c                óê   € \        V P                  ^ R7      pVP                  RR4       \        V P                  ^R7      pVP                  Vn        V P	                  VP                  R4      R4       R# r¬   )ri   r®   r‰   ro   rŠ   r‹   )rC   r�   Únew_handlers   &  r9   Ú"test_key_version_increment_versionÚ5SecureCookieV2Test.test_key_version_increment_versionÊ   si   € Ü*Ø×+Ñ+¸ô
ˆð 	×!Ñ! %¨Ô0Ü.Ø×+Ñ+¸ô
ˆð  '×/Ñ/ˆÔØ×Ñ˜×6Ñ6°uÓ=¸vÖFr;   c                ó,  € \        V P                  ^ R7      pVP                  RR4       V P                  P                  4       pVP	                  ^ 4       \        V^R7      pVP
                  Vn        V P                  VP                  R4      R4       R# r¬   )ri   r®   r‰   ÚcopyÚpopro   rŠ   r‹   )rC   r�   Únew_key_versionsr·   s   &   r9   Ú#test_key_version_invalidate_versionÚ6SecureCookieV2Test.test_key_version_invalidate_versionÕ   s†   € Ü*Ø×+Ñ+¸ô
ˆð 	×!Ñ! %¨Ô0Ø×,Ñ,×1Ñ1Ó3ÐØ×Ñ˜QÔÜ.Ø*¸ô
ˆð  '×/Ñ/ˆÔØ×Ñ˜×6Ñ6°uÓ=¸tÖDr;   rK   N)rN   rO   rP   rQ   r®   rŽ   r¯   r´   r¸   r¾   rS   rT   rU   s   @r9   r¦   r¦   ´   s9   ø‡ € ØÐ)¨1Ð.@ÐA€LòRò
CòCò	G÷Eð Er;   r¦   c                   ó<   a € ] tR t^ãt o RtR tR tR tR tRt	V t
R# )ÚFinalReturnTestNc                ó`   a€ V o ! V3R  lR\         4      p ! V3R lR\         4      pRV3RV3.# )c                   óv   <a € ] tR t^ét o ]P
                  V3R l4       t]P
                  V3R l4       tRtV t	R# )Ú3FinalReturnTest.get_handlers.<locals>.FinishHandlerc              3  óV   <"  € V P                  4       Sn        SP                  x € R # 5ir2   )ÚfinishÚfinal_return©rC   Útests   &€r9   re   Ú7FinalReturnTest.get_handlers.<locals>.FinishHandler.getê   s    øé € à$(§K¡K£M�Ô!Ø×'Ñ'Ô'ùs   ƒ&)c              3  óž   <"  € V P                  R 4       V P                  4       x € V P                  R4      Sn        SP                  x € R# 5i)zhello,ÚworldN)rd   ÚflushrÆ   rÇ   rÈ   s   &€r9   ÚpostÚ8FinalReturnTest.get_handlers.<locals>.FinishHandler.postï   s;   øé € à—
‘
˜8Ô$Ø—j‘j“lÒ"Ø$(§K¡K°Ó$8�Ô!Ø×'Ñ'Ô'ùs   ƒA
ArK   N)
rN   rO   rP   rQ   r   Ú	coroutinere   rÎ   rS   rT   ©rV   rÉ   s   @€r9   ÚFinishHandlerrÄ   é   s3   ù‡ € Ø�]‰]ô(ó ð(ð �]‰]ô(ó ö(r;   rÒ   c                   óR   <a € ] tR t^öt o R t]P                  V3R l4       tRtV t	R# )Ú3FinalReturnTest.get_handlers.<locals>.RenderHandlerc                ó   € \        R R/4      # )úfoo.htmlÚhir   ©rC   r4   s   &&r9   Úcreate_template_loaderÚJFinalReturnTest.get_handlers.<locals>.RenderHandler.create_template_loader÷   s   € Ü! :¨tÐ"4Ó5Ð5r;   c                ó4   <€ V P                  R 4      Sn        R# ©rÖ   N)ÚrenderrÇ   rÈ   s   &€r9   re   Ú7FinalReturnTest.get_handlers.<locals>.RenderHandler.getú   s   ø€ à$(§K¡K°
Ó$;�Ö!r;   rK   N)
rN   rO   rP   rQ   rÙ   r   rÐ   re   rS   rT   rÑ   s   @€r9   ÚRenderHandlerrÔ   ö   s"   ù‡ € ò6ð �]‰]ô<ó ö<r;   rß   ú/finishú/render©r   )rC   rÒ   rß   rÉ   s   &  @r9   r?   ÚFinalReturnTest.get_handlersæ   s7   ø€ Øˆ÷	(œNô 	(÷	<œNô 	<ð ˜MÐ*¨Y¸Ð,FÐGÐGr;   c                ó   € \        R R7      # )rÁ   )Útemplate_path©rp   rB   s   &r9   r@   ÚFinalReturnTest.get_app_kwargs   s   € ÜÐ"3Ô4Ð4r;   c                ó   € V P                  V P                  R 4      4      pV P                  VP                  ^È4       V P	                  V P
                  \        4       V P                  V P
                  P                  4       4       V P                  V P                  R 4      RRR7      pV P                  VP                  ^È4       V P	                  V P
                  \        4       V P                  V P
                  P                  4       4       R# )rà   ÚPOSTr;   ©ÚmethodÚbodyN)	ÚfetchÚget_urlrŠ   ÚcodeÚassertIsInstancerÇ   r   Ú
assertTrueÚdone©rC   Úresponses   & r9   Ú test_finish_method_return_futureÚ0FinalReturnTest.test_finish_method_return_future  sÀ   € Ø—:‘:˜dŸl™l¨9Ó5Ó6ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜d×/Ñ/´Ô8Ø�‰˜×)Ñ)×.Ñ.Ó0Ô1à—:‘:˜dŸl™l¨9Ó5¸fÈ3�:ÓOˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜d×/Ñ/´Ô8Ø�‰˜×)Ñ)×.Ñ.Ó0Ö1r;   c                ó¾   € V P                  V P                  R 4      4      pV P                  VP                  ^È4       V P	                  V P
                  \        4       R# )rá   N)rí   rî   rŠ   rï   rð   rÇ   r   ró   s   & r9   Ú test_render_method_return_futureÚ0FinalReturnTest.test_render_method_return_future  sC   € Ø—:‘:˜dŸl™l¨9Ó5Ó6ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜d×/Ñ/´Ö8r;   rK   )rN   rO   rP   rQ   rÇ   r?   r@   rõ   rø   rS   rT   rU   s   @r9   rÁ   rÁ   ã   s$   ø‡ € Ø€LòHò45ò	2÷9ð 9r;   rÁ   c                   ób   a € ] tR tRt o R tR tR tR tR tR t	R t
R	 tR
 tR tR tRtV tR# )Ú
CookieTesti  c                ón  €  ! R  R\         4      p ! R R\         4      p ! R R\         4      p ! R R\         4      p ! R R	\         4      p ! R
 R\         4      p ! R R\         4      p ! R R\         4      p ! R R\         4      p	 ! R R\         4      p
RV3RV3RV3RV3RV3RV3RV3RV3RV	3RV
3.
# )c                   ó&   a € ] tR tRt o R tRtV tR# )Ú1CookieTest.get_handlers.<locals>.SetCookieHandleri  c                ór   € V P                  R R4       V P                  RR4       V P                  RR4       R# )ÚstrÚasdfÚunicodeÚqwerÚbytess   zxcvN©r{   rB   s   &r9   re   Ú5CookieTest.get_handlers.<locals>.SetCookieHandler.get  s.   € ð —‘  vÔ.Ø—‘ 	¨6Ô2Ø—‘ ¨Ö1r;   rK   Nrg   rU   s   @r9   ÚSetCookieHandlerrþ     s   ø‡ € ÷2ð 2r;   r  c                   ó&   a € ] tR tRt o R tRtV tR# )Ú1CookieTest.get_handlers.<locals>.GetCookieHandleri  c                óX   € V P                  R R4      pVf   Q hV P                  V4       R# )r‚   ÚdefaultN)rv   rd   )rC   rœ   s   & r9   re   Ú5CookieTest.get_handlers.<locals>.GetCookieHandler.get  s*   € ØŸ™¨°	Ó:�ØÒ)Ð)Ð)Ø—
‘
˜6Ö"r;   rK   Nrg   rU   s   @r9   ÚGetCookieHandlerr	    s   ø‡ € ÷#ð #r;   r  c                   ó&   a € ] tR tRt o R tRtV tR# )Ú7CookieTest.get_handlers.<locals>.SetCookieDomainHandleri$  c                ó0   € V P                  R RRRR7       R# )Úunicode_argsÚblahzfoo.comú/foo)Údomainr4   Nr  rB   s   &r9   re   Ú;CookieTest.get_handlers.<locals>.SetCookieDomainHandler.get%  s   € ð —‘ °¸yÈv�ÖVr;   rK   Nrg   rU   s   @r9   ÚSetCookieDomainHandlerr  $  s   ø‡ € ÷Wð Wr;   r  c                   ó&   a € ] tR tRt o R tRtV tR# )Ú<CookieTest.get_handlers.<locals>.SetCookieSpecialCharHandleri*  c                ór   € V P                  R R4       V P                  RR4       V P                  RR4       R# )Úequalsúa=bÚ	semicolonúa;bÚquoteúa"bNr  rB   s   &r9   re   Ú@CookieTest.get_handlers.<locals>.SetCookieSpecialCharHandler.get,  s,   € Ø—‘ ¨%Ô0Ø—‘ ¨UÔ3Ø—‘ ¨Ö/r;   rK   Nrg   rU   s   @r9   ÚSetCookieSpecialCharHandlerr  *  s   ø‡ € ÷0ð 0r;   r!  c                   ó&   a € ] tR tRt o R tRtV tR# )Ú>CookieTest.get_handlers.<locals>.SetCookieForbiddenCharHandleri1  c           	     óì  € \        \        \        \        ^ 4      4      4      \        ^4      R.,            FØ  p V P	                  RV,           R4       V P                  RV,          4        V P	                  RRR
V,           R,           R7       V P                  RV,          4        V P	                  RRRV,           R7       V P                  RV,          4        V P	                  RRRV,           R7       V P                  RV,          4       KÚ  	  R	#   \        P                  P                   d5   pR\        T4      9  d   T P                  RT: RT: R24        R	p?L÷R	p?ii ; i  \        P                  P                   d6   pR\        T4      9  d   T P                  RT: RT: R24        R	p?ELR	p?ii ; i  \        P                  P                   d6   pR\        T4      9  d   T P                  RT: RT: R24        R	p?EL6R	p?ii ; i  \        P                  P                   d>   pR\        T4      9  d"   T P                  RT: RT: R24        R	p?EK2   R	p?EK9  R	p?ii ; i)é    Ú;r‚   Úbarz2Didn't get expected exception for char %r in name
zInvalid cookie attribute namezunexpected exception for char z
 in name: Ú
NÚexamplez.com©r  z4Didn't get expected exception for char %r in domain
zInvalid cookie attribute domainz in domain: rZ   ©r4   z2Didn't get expected exception for char %r in path
zInvalid cookie attribute pathz
 in path: r8   )Úsamesitez6Didn't get expected exception for char %r in samesite
z!Invalid cookie attribute samesitez in samesite: )
ÚlistÚmapÚchrÚranger{   rd   ÚhttpÚcookiesÚCookieErrorr   )rC   ÚcharÚes   &  r9   re   ÚBCookieTest.get_handlers.<locals>.SetCookieForbiddenCharHandler.get2  sû  € ô !¤¤S¬%°«+Ó!6Ó7¼3¸t»9ÀcÐ:J×JÐJ�Dð
ØŸ™¨°­°eÔ<ØŸ
™
ØQÐTXÕXôðØŸ™¨¨u¸YÈÕ=MÐPVÕ=V˜ÔWØŸ
™
ØSØ"õ#ôð
ØŸ™¨¨u¸3À½:˜ÔFØŸ
™
ØQÐTXÕXôðØŸ™¨¨u¸sÀT½z˜ÔJØŸ
™
ØUØ"õ#öóQ Køô  Ÿ<™<×3Ñ3ô Ø:Ä#ÀaÃ&ÔHØ ŸJšJã#'«ð!,ôÿøðûô  Ÿ<™<×3Ñ3ô Ø<ÄCÈÃFÔJØ ŸJšJã#'«ð!,ôÿùðûô  Ÿ<™<×3Ñ3ô Ø:Ä#ÀaÃ&ÔHØ ŸJšJã#'«ð!,ôÿùðûô  Ÿ<™<×3Ñ3ô Ø>ÄcÈ!ÃfÔLØ ŸJšJã#'«ð!,÷ó ö Mûðús_   ¹1DÁ+:E)Â&3G Ã3HÄE&Ä2*E!Å!E&Å)F=Æ*F8Æ8F=Ç HÇ*HÈHÈI3È6*I.É.I3rK   Nrg   rU   s   @r9   ÚSetCookieForbiddenCharHandlerr#  1  s   ø‡ € ÷4ð 4r;   r7  c                   ó&   a € ] tR tRt o R tRtV tR# )Ú:CookieTest.get_handlers.<locals>.SetCookieOverwriteHandlerih  c                óz   € V P                  R RRR7       V P                  RRRR7       V P                  R R4       R# )r8   Úbzexample.comr*  ÚcÚdr5  Nr  rB   s   &r9   re   Ú>CookieTest.get_handlers.<locals>.SetCookieOverwriteHandler.geti  s6   € Ø—‘  S°�Ô?Ø—‘  S°�Ô?ð —‘  SÖ)r;   rK   Nrg   rU   s   @r9   ÚSetCookieOverwriteHandlerr9  h  s   ø‡ € ÷*ð *r;   r?  c                   ó&   a € ] tR tRt o R tRtV tR# )Ú7CookieTest.get_handlers.<locals>.SetCookieMaxAgeHandlerip  c                ó.   € V P                  R R^
R7       R# )r‚   r'  )Úmax_ageNr  rB   s   &r9   re   Ú;CookieTest.get_handlers.<locals>.SetCookieMaxAgeHandler.getq  s   € Ø—‘  u°b�Ö9r;   rK   Nrg   rU   s   @r9   ÚSetCookieMaxAgeHandlerrA  p  s   ø‡ € ÷:ð :r;   rE  c                   ó&   a € ] tR tRt o R tRtV tR# )Ú<CookieTest.get_handlers.<locals>.SetCookieExpiresDaysHandlerit  c                ó.   € V P                  R R^
R7       R# )r‚   r'  )rz   Nr  rB   s   &r9   re   Ú@CookieTest.get_handlers.<locals>.SetCookieExpiresDaysHandler.getu  s   € Ø—‘  u¸2�Ö>r;   rK   Nrg   rU   s   @r9   ÚSetCookieExpiresDaysHandlerrG  t  s   ø‡ € ÷?ð ?r;   rJ  c                   ó&   a € ] tR tRt o R tRtV tR# )Ú4CookieTest.get_handlers.<locals>.SetCookieFalsyFlagsix  c                ó¦   € V P                  R RRR7       V P                  RRRR7       V P                  RRRR7       V P                  RRRR7       R	# )
r8   Ú1T)Úsecurer;  Fr<  )Úhttponlyr=  Nr  rB   s   &r9   re   Ú8CookieTest.get_handlers.<locals>.SetCookieFalsyFlags.gety  sJ   € Ø—‘  S°�Ô6Ø—‘  S°�Ô7Ø—‘  S°4�Ô8Ø—‘  S°5�Ö9r;   rK   Nrg   rU   s   @r9   ÚSetCookieFalsyFlagsrL  x  s   ø‡ € ÷:ð :r;   rR  c                   ó&   a € ] tR tRt o R tRtV tR# )Ú8CookieTest.get_handlers.<locals>.SetCookieDeprecatedArgsi  c                ó0   € V P                  R RRRR7       R# )r8   r;  Tr  )ÚHttpOnlyÚpATHNr  rB   s   &r9   re   Ú<CookieTest.get_handlers.<locals>.SetCookieDeprecatedArgs.get€  s   € à—‘  S°4¸f�ÖEr;   rK   Nrg   rU   s   @r9   ÚSetCookieDeprecatedArgsrT    s   ø‡ € ÷Fð Fr;   rY  ú/setú/getú/set_domainú/special_charú/forbidden_charú/set_overwriteú/set_max_ageú/set_expires_daysú/set_falsy_flagsú/set_deprecatedrâ   )rC   r  r  r  r!  r7  r?  rE  rJ  rR  rY  s   &          r9   r?   ÚCookieTest.get_handlers  så   € ô	2œ~ô 	2ô	#œ~ô 	#ô	W¤^ô 	Wô	0¬.ô 	0ô5	¬Nô 5	ôn	*¬ô 	*ô	:¤^ô 	:ô	?¬.ô 	?ô	:¤.ô 	:ô	F¤nô 	Fð Ð%Ð&ØÐ%Ð&ØÐ2Ð3ØÐ9Ð:ØÐ =Ð>ØÐ8Ð9ØÐ3Ð4Ø Ð"=Ð>ØÐ!4Ð5ØÐ 7Ð8ð
ð 	
r;   c                ó”   € V P                  R 4      pV P                  \        VP                  P	                  R4      4      . RO4       R# )rZ  ú
Set-CookieN)zbytes=zxcv; Path=/zstr=asdf; Path=/zunicode=qwer; Path=/)rí   rŠ   ÚsortedÚheadersÚget_listró   s   & r9   Útest_set_cookieÚCookieTest.test_set_cookie‘  s:   € Ø—:‘:˜fÓ%ˆØ×ÑÜ�8×#Ñ#×,Ñ,¨\Ó:Ó;ÚNö	
r;   c                ó,  € V P                  R RR/R7      pV P                  VP                  R4       V P                  R RR/R7      pV P                  VP                  R4       V P                  R RR/R7      pV P                  VP                  R4       R# )	r[  ÚCookieúfoo=bar©rh  rƒ   z	foo="bar"z/=exception;ó   defaultN©rí   rŠ   rì   ró   s   & r9   Útest_get_cookieÚCookieTest.test_get_cookie˜  sƒ   € Ø—:‘:˜f¨x¸Ð.C�:ÓDˆØ×Ñ˜Ÿ™¨Ô/à—:‘:˜f¨x¸Ð.E�:ÓFˆØ×Ñ˜Ÿ™¨Ô/à—:‘:˜f¨x¸Ð.H�:ÓIˆØ×Ñ˜Ÿ™¨
Ö3r;   c                ó€   € V P                  R 4      pV P                  VP                  P                  R4      R.4       R# )r\  rf  z,unicode_args=blah; Domain=foo.com; Path=/fooN©rí   rŠ   rh  ri  ró   s   & r9   Útest_set_cookie_domainÚ!CookieTest.test_set_cookie_domain¢  s8   € Ø—:‘:˜mÓ,ˆØ×ÑØ×Ñ×%Ñ% lÓ3Ø;Ð<ö	
r;   c                ó  € V P                  R 4      p\        VP                  P                  R4      4      pV P	                  \        V4      ^4       V P	                  V^ ,          R4       V P	                  V^,          R4       V P                  V^,          R	V^,          4       . R
OpV FV  w  rE\        P                  ! RV4       V P                  RRV/R7      pV P	                  VP                  \        V4      4       KX  	  R# )r]  rf  zequals="a=b"; Path=/zquote="a\"b"; Path=/z	trying %rr[  rm  ro  N)zsemicolon="a;b"; Path=/zsemicolon="a\073b"; Path=/))zfoo=a=br  )z	foo="a=b"r  )z	foo="a;b"z"a)z
foo=a\073bza\073b)zfoo="a\073b"r  )z
foo="a\"b"r  )rí   rg  rh  ri  rŠ   ÚlenÚassertInÚloggingÚdebugrì   r   )rC   rô   rh  ÚdataÚheaderÚexpecteds   &     r9   Útest_cookie_special_charÚ#CookieTest.test_cookie_special_char©  sÙ   € Ø—:‘:˜oÓ.ˆÜ˜×)Ñ)×2Ñ2°<Ó@ÓAˆØ×Ñœ˜W› qÔ)Ø×Ñ˜ �Ð%;Ô<Ø×Ñ˜ �Ð%<Ô=à�‰Ø�A�JØFØ�A�Jô	
ò
ˆó !%ÑˆFÜ�MŠM˜+ vÔ.Ø—z‘z &°8¸VÐ2D�zÓEˆHØ×Ñ˜XŸ]™]¬D°«NÖ;ó !%r;   c                ó¸   € V P                  R 4      pV P                  VP                  ^È4       RV n        V P	                  \        VP                  4      R4       R# )r^  i'  Ú N)rí   rŠ   rï   ÚmaxDiffÚassertMultiLineEqualr   rì   ró   s   & r9   Útest_set_cookie_forbidden_charÚ)CookieTest.test_set_cookie_forbidden_charÃ  sE   € Ø—:‘:Ð/Ó0ˆØ×Ñ˜Ÿ™¨Ô,ØˆŒØ×!Ñ!¤*¨X¯]©]Ó";¸RÖ@r;   c                ó˜   € V P                  R 4      pVP                  P                  R4      pV P                  \	        V4      RR.4       R# )r_  rf  za=e; Path=/zc=d; Domain=example.com; Path=/N©rí   rh  ri  rŠ   rg  ©rC   rô   rh  s   &  r9   Útest_set_cookie_overwriteÚ$CookieTest.test_set_cookie_overwriteÉ  sD   € Ø—:‘:Ð.Ó/ˆØ×"Ñ"×+Ñ+¨LÓ9ˆØ×ÑÜ�7‹O˜mÐ-NÐOö	
r;   c                ó–   € V P                  R 4      pVP                  P                  R4      pV P                  \	        V4      R.4       R# )r`  rf  zfoo=bar; Max-Age=10; Path=/Nr‰  rŠ  s   &  r9   Útest_set_cookie_max_ageÚ"CookieTest.test_set_cookie_max_ageÐ  s>   € Ø—:‘:˜nÓ-ˆØ×"Ñ"×+Ñ+¨LÓ9ˆØ×Ñœ ›Ð+HÐ*IÖJr;   c                óT  € V P                  R 4      pVP                  P                  R4      pV P                  V4       Vf   Q h\        P
                  ! RV4      pV P                  V4       Vf   Q h\        P                  P                  \        P                  P                  4      \        P                  ! ^
R7      ,           p\        P                  P                  VP                  4       R,          4      pV P                  \!        WE,
          P#                  4       4      ^
4       R# )ra  rf  Nz(foo=bar; expires=(?P<expires>.+); Path=/©ÚdaysÚexpires)rí   rh  re   r™   r—   r˜   ÚdatetimeÚnowÚtimezoneÚutcÚ	timedeltaÚemailÚutilsÚparsedate_to_datetimeÚ	groupdictÚ
assertLessÚabsÚtotal_seconds©rC   rô   r~  r˜   r“  Úheader_expiress   &     r9   Útest_set_cookie_expires_daysÚ'CookieTest.test_set_cookie_expires_daysÕ  så   € Ø—:‘:Ð1Ó2ˆØ×!Ñ!×%Ñ% lÓ3ˆØ×Ñ˜VÔ$ØÒ!Ð!Ð!Ü—’ÐCÀVÓLˆØ×Ñ˜UÔ#ØÒ Ð Ð ä×#Ñ#×'Ñ'¬×(9Ñ(9×(=Ñ(=Ó>Ä×ASÒASØôB
õ 
ˆô Ÿ™×:Ñ:¸5¿?¹?Ó;LÈYÕ;WÓXˆØ�‰œ˜WÕ5×DÑDÓFÓGÈÖLr;   c                ó8  € V P                  R 4      p\        VP                  P                  R4      4      pV P	                  V^ ,          R4       V P	                  V^,          R4       V P	                  V^,          R4       V P	                  V^,          R4       R# )rb  rf  za=1; Path=/; Securezb=1; Path=/zc=1; HttpOnly; Path=/zd=1; Path=/N)rí   rg  rh  ri  rŠ   rŠ  s   &  r9   Útest_set_cookie_false_flagsÚ&CookieTest.test_set_cookie_false_flagsä  s~   € Ø—:‘:Ð0Ó1ˆÜ˜×)Ñ)×2Ñ2°<Ó@ÓAˆØ×Ñ˜ �Ð%:Ô;Ø×Ñ˜ � ]Ô3Ø×Ñ˜ �Ð%<Ô=Ø×Ñ˜ � ]Ö3r;   c                óÞ   € \        4       ;_uu_ 4        V P                  R 4      pRRR4       XP                  P                  R4      pV P	                  VR4       R#   + '       g   i     L?; i)rc  Nrf  za=b; HttpOnly; Path=/foo)r   rí   rh  re   rŠ   )rC   rô   r~  s   &  r9   Útest_set_cookie_deprecatedÚ%CookieTest.test_set_cookie_deprecatedì  sO   € Ü×!Õ!Ø—z‘zÐ"3Ó4ˆH÷ "à×!Ñ!×%Ñ% lÓ3ˆØ×Ñ˜Ð!;Ö<÷ "×!ús   “AÁA,	)r„  N)rN   rO   rP   rQ   r?   rj  rr  rv  r€  r†  r‹  rŽ  r¢  r¥  r¨  rS   rT   rU   s   @r9   rû   rû     sF   ø‡ € òz
òx
ò4ò
ò<ò4Aò
òKò
Mò4÷=ð =r;   rû   c                   ó<   a € ] tR tRt o R tR t]R 4       tRtV t	R# )ÚAuthRedirectRequestHandlerió  c                ó   € Wn         R # r2   ©Ú	login_url)rC   r®  s   &&r9   Ú
initializeÚ%AuthRedirectRequestHandler.initializeô  s   € Ø"Žr;   c                ó   € V P                   # r2   r­  rB   s   &r9   Úget_login_urlÚ(AuthRedirectRequestHandler.get_login_url÷  s   € Ø�~‰~Ðr;   c                ó(   € V P                  R 4       R# )éô  N)Ú
send_errorrB   s   &r9   re   ÚAuthRedirectRequestHandler.getú  s   € ð 	�‰˜Ör;   r­  N)
rN   rO   rP   rQ   r¯  r²  r$   re   rS   rT   rU   s   @r9   r«  r«  ó  s#   ø‡ € ò#òð ñó ör;   r«  c                   ó2   a € ] tR tRt o R tR tR tRtV tR# )ÚAuthRedirectTesti   c                óN   € R \         \        RR7      3R\         \        RR7      3.# )ú	/relativez/loginr­  ú	/absolutezhttp://example.com/login)r«  rp   rB   s   &r9   r?   ÚAuthRedirectTest.get_handlers  s0   € àÔ4´dÀXÔ6NÐOàÜ*ÜÐ9Ô:ðð
ð 	
r;   c                óÈ   € V P                  V P                  R 4      RR7      pV P                  VP                  R4       V P                  VP                  R,          R4       R# )r»  F©Úfollow_redirectsé.  ÚLocationz/login?next=%2FrelativeN)rí   rî   rŠ   rï   rh  ró   s   & r9   Útest_relative_auth_redirectÚ,AuthRedirectTest.test_relative_auth_redirect  sM   € Ø—:‘:˜dŸl™l¨;Ó7È%�:ÓPˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Õ5Ð7PÖQr;   c                ó  € V P                  V P                  R 4      RR7      pV P                  VP                  R4       V P	                  \
        P                  ! RVP                  R,          4      VP                  R,          4       R# )r¼  Fr¿  rÁ  zIhttp://example.com/login\?next=http%3A%2F%2F127.0.0.1%3A[0-9]+%2FabsoluterÂ  N)rí   rî   rŠ   rï   rñ   r—   r˜   rh  ró   s   & r9   Útest_absolute_auth_redirectÚ,AuthRedirectTest.test_absolute_auth_redirect  sj   € Ø—:‘:˜dŸl™l¨;Ó7È%�:ÓPˆØ×Ñ˜Ÿ™¨Ô,Ø�‰Ü�HŠHØ\Ø× Ñ  Õ,óð ×Ñ˜ZÕ(ö	
r;   rK   N)	rN   rO   rP   rQ   r?   rÃ  rÆ  rS   rT   rU   s   @r9   r¹  r¹     s   ø‡ € ò
òR÷
	
ð 	
r;   r¹  c                   óP   a € ] tR tRt o R t]P                  R 4       tR tRt	V t
R# )ÚConnectionCloseHandleri  c                ó   € Wn         R # r2   ©rÉ   rÈ   s   &&r9   r¯  Ú!ConnectionCloseHandler.initialize  s   € ØŽ	r;   c              #  óŽ   "  € V P                   P                  4        V P                   P                  P                  4       x € R # 5ir2   )rÉ   Úon_handler_waitingÚcleanup_eventÚwaitrB   s   &r9   re   ÚConnectionCloseHandler.get   s.   é € à�	‰	×$Ñ$Ô&Ø�i‰i×%Ñ%×*Ñ*Ó,Ô,ùó   ‚AAc                ó:   € V P                   P                  4        R # r2   )rÉ   Úon_connection_closerB   s   &r9   rÔ  Ú*ConnectionCloseHandler.on_connection_close%  s   € Ø�	‰	×%Ñ%Ö'r;   rË  N)rN   rO   rP   rQ   r¯  r   rÐ   re   rÔ  rS   rT   rU   s   @r9   rÉ  rÉ    s,   ø‡ € òð 	‡]�]ñ-ó ð-÷(ð (r;   rÉ  c                   ó8   a € ] tR tRt o R tR tR tR tRtV t	R# )ÚConnectionCloseTesti)  c                óH   € \        4       V n        R \        \        V R7      3.# )rZ   rË  )r   rÏ  rÉ  rp   rB   s   &r9   r?   Ú ConnectionCloseTest.get_handlers*  s!   € Ü"›WˆÔØÔ,¬d¸¬oÐ>Ð?Ð?r;   c                ó’  € \         P                   ! \         P                  \         P                  ^ 4      pVP                  RV P	                  4       34       \        V4      V n        V P                  P                  R4       V P                  4        V P                  P                  4        V P                  P                  R 4       R# )r   ú	127.0.0.1s   GET / HTTP/1.0

c                  ó.   € \         P                  ! ^ 4      # ©r   )r   ÚsleeprK   r;   r9   Ú<lambda>Ú;ConnectionCloseTest.test_connection_close.<locals>.<lambda>6  s   € ¤c§i¢i°¤lr;   N)ÚsocketÚAF_INETÚSOCK_STREAMÚconnectÚget_http_portr   Ústreamrd   rÐ  rÏ  ÚsetÚio_loopÚrun_sync)rC   Úss   & r9   Útest_connection_closeÚ)ConnectionCloseTest.test_connection_close.  s„   € Ü�MŠMœ&Ÿ.™.¬&×*<Ñ*<¸aÓ@ˆØ	�	‰	�; × 2Ñ 2Ó 4Ð5Ô6Ü˜q“kˆŒØ�‰×ÑÐ3Ô4Ø�	‰	Œà×Ñ×ÑÔ Ø�‰×ÑÑ2Ö3r;   c                óf   € \         P                  ! R 4       V P                  P                  4        R# )zhandler waitingN)r{  r|  ræ  ÚcloserB   s   &r9   rÎ  Ú&ConnectionCloseTest.on_handler_waiting8  s   € Ü�ŠÐ'Ô(Ø�‰×ÑÖr;   c                óR   € \         P                  ! R 4       V P                  4        R# )zconnection closedN)r{  r|  ÚstoprB   s   &r9   rÔ  Ú'ConnectionCloseTest.on_connection_close<  s   € Ü�ŠÐ)Ô*Ø�	‰	Žr;   )rÏ  ræ  N)
rN   rO   rP   rQ   r?   rë  rÎ  rÔ  rS   rT   rU   s   @r9   r×  r×  )  s   ø‡ € ò@ò4ò÷ð r;   r×  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚEchoHandleriA  c           	     óÖ  € V P                   P                   FÉ  p\        V4      \        Jd   \	        R \        V4      ,          4      hV P                   P                  V,           F1  p\        V4      \
        Jg   K  \	        R\        V4      ,          4      h	  V P                  V4       F1  p\        V4      \        Jg   K  \	        R\        V4      ,          4      h	  KË  	  V F1  p\        V4      \        Jg   K  \	        R\        V4      ,          4      h	  V P                  \        V P                   P                  V\        V P                   P                  4      R7      4       R# )zincorrect type for key: %rzincorrect type for value: %rzincorrect type for path arg: %r©r4   Ú	path_argsÚargsN)ÚrequestÚ	argumentsÚtyper   Ú	Exceptionr  Úget_argumentsr   rd   rp   r4   r   )rC   r÷  ÚkeyÚbvalueÚsvalueÚargs   &*    r9   re   ÚEchoHandler.getB  s  € ð
 —<‘<×)Ô)ˆCÜ�C‹y¤Ó#ÜÐ <¼tÀC»yÕ HÓIÐIØŸ,™,×0Ñ0°×5Ð5�Ü˜“<¤uÕ,Ü#Ð$BÄTÈ&Ã\Õ$QÓRÐRñ 6ð ×,Ñ,¨SÖ1�Ü˜“<¤|Õ3Ü#Ð$BÄTÈ&Ã\Õ$QÓRÐRó 2ñ *ó ˆCÜ�C‹y¤Õ,ÜÐ AÄDÈÃIÕ MÓNÐNñ ð 	�
‰
ÜØ—\‘\×&Ñ&Ø#Ü& t§|¡|×'=Ñ'=Ó>ôö	
r;   rK   Nrg   rU   s   @r9   rô  rô  A  s   ø‡ € ÷
ð 
r;   rô  c                   óD   a € ] tR tRt o R tR tR tR tR tR t	Rt
V tR	# )
ÚRequestEncodingTesti\  c                ó"   € R \         3R\         3.# )z/group/(.*)z/slashes/([^/]*)/([^/]*))rô  rB   s   &r9   r?   Ú RequestEncodingTest.get_handlers]  s   € Ø¤Ð,Ð/IÌ;Ð.WÐXÐXr;   c                óJ   € \        V P                  V4      P                  4      # r2   )r   rí   rì   rØ   s   &&r9   Ú
fetch_jsonÚRequestEncodingTest.fetch_json`  s   € Ü˜4Ÿ:™: dÓ+×0Ñ0Ó1Ð1r;   c           	     óÄ   € V P                  V P                  R 4      \        R R./ R7      4       V P                  V P                  R4      \        R R.RR./R7      4       R# )z
/group/%3FÚ?rö  z/group/%3F?%3F=%3FN©rŠ   r  rp   rB   s   &r9   Útest_group_question_markÚ,RequestEncodingTest.test_group_question_markc  s[   € à×ÑØ�O‰O˜LÓ)Ü�l¨s¨e¸"Ô=ô	
ð 	×ÑØ�O‰OÐ0Ó1Ü�l¨s¨e¸3ÀÀ¸,ÔGö	
r;   c           
     ó\   € V P                  V P                  R 4      RRRR.RRR.//4       R# )z/group/%C3%A9?arg=%C3%A9r4   z/group/%C3%A9r÷  ô   Ã©rø  r  N©rŠ   r  rB   s   &r9   Útest_group_encodingÚ'RequestEncodingTest.test_group_encodingn  s:   € à×ÑØ�O‰OÐ6Ó7à˜Ø˜h˜ZØ˜  
Ð+ðö	
r;   c           	     óÂ   € V P                  V P                  R 4      \        R RR./ R7      4       V P                  V P                  R4      \        RRR./ R7      4       R# )z/slashes/foo/barr‚   r'  rö  z/slashes/a%2Fb/c%2Fdza/bzc/dNr  rB   s   &r9   Útest_slashesÚ RequestEncodingTest.test_slashesy  s^   € ð 	×ÑØ�O‰OÐ.Ó/ÜÐ(°U¸E°NÈÔLô	
ð 	×ÑØ�O‰OÐ2Ó3ÜÐ,¸À¸ÈRÔPö	
r;   c                ó’   € \        \        R 4      ;_uu_ 4        V P                  R4       RRR4       R#   + '       g   i     R# ; i)z.*Invalid unicodez/group/?arg=%25%e9N)r   r   rí   rB   s   &r9   Ú
test_errorÚRequestEncodingTest.test_error…  s.   € ô ”wÐ 3×4Õ4Ø�J‰JÐ+Ô,÷ 5×4×4Ò4úó	   ™5µA	rK   N)rN   rO   rP   rQ   r?   r  r  r  r  r  rS   rT   rU   s   @r9   r  r  \  s)   ø‡ € òYò2ò	
ò	
ò

÷-ð -r;   r  c                   ó8   a € ] tR tRt o R tR tR tR tRtV t	R# )ÚTypeCheckHandleriŒ  c                ó  € / V n         V P                  R V P                  4       \        4       V P                  RV P	                  R4      \
        4       V P                  R\        V P                  P                  4       4      ^ ,          \        4       V P                  R\        V P                  P                  4       4      ^ ,          P                  \        4       \        V P                  P                  4       4      R.8w  d+   \        RV P                  P                  4       ,          4      hV P                  RV P                  R4      \        4       V P                  RV P                  R4      \        4       V P                  R	V P                   \        4       V P                  R
V P#                  4       \        4       V P                  RV P%                  RR4      \        4       V P                  RV P'                  4       \        4       R# )ÚstatusÚargumentr‚   Ú
cookie_keyÚcookie_valuer  z%unexpected values for cookie keys: %rr‹   rv   Ú
xsrf_tokenÚxsrf_form_htmlÚreverse_urlÚ	typecheckÚrequest_summaryN)ÚerrorsÚ
check_typeÚ
get_statusÚintÚget_argumentr   r-  r2  Úkeysr   Úvaluesry   rü  r‹   r  rv   r"  r#  r$  Ú_request_summaryrB   s   &r9   ÚprepareÚTypeCheckHandler.prepare�  sm  € ØˆŒà�‰˜ $§/¡/Ó"3´SÔ9ð 	�‰˜
 D×$5Ñ$5°eÓ$<¼lÔKØ�‰˜¤d¨4¯<©<×+<Ñ+<Ó+>Ó&?ÀÕ&BÄCÔHØ�‰˜¬¨T¯\©\×-@Ñ-@Ó-BÓ(CÀAÕ(F×(LÑ(LÌcÔRô �—‘×!Ñ!Ó#Ó$¨¨Ô0ÜØ7¸$¿,¹,×:KÑ:KÓ:MÕMóð ð 	�‰Ð+¨T×-CÑ-CÀFÓ-KÌUÔSØ�‰˜ d§o¡o°fÓ&=¼sÔCà�‰˜ d§o¡o´uÔ=Ø�‰Ð(¨$×*=Ñ*=Ó*?ÄÔEà�‰˜ t×'7Ñ'7¸ÀUÓ'KÌSÔQà�‰Ð)¨4×+@Ñ+@Ó+BÄCÖHr;   c                ój   € V P                  R V\        4       V P                  V P                  4       R# ©Úpath_componentN©r(  r   rd   r'  ©rC   r3  s   &&r9   re   ÚTypeCheckHandler.get¨  s%   € ð 	�‰Ð(¨.¼,ÔGØ�
‰
�4—;‘;Ör;   c                ój   € V P                  R V\        4       V P                  V P                  4       R# r2  r4  r5  s   &&r9   rÎ   ÚTypeCheckHandler.post®  s#   € Ø�‰Ð(¨.¼,ÔGØ�
‰
�4—;‘;Ör;   c                óV   € \        V4      pW48w  d   R V RV 2V P                  V&   R# R# )z	expected z, got N)rû  r'  )rC   ru   ÚobjÚexpected_typeÚactual_types   &&&& r9   r(  ÚTypeCheckHandler.check_type²  s1   € Ü˜3“iˆØÔ'Ø"+¨M¨?¸&ÀÀÐ NˆD�K‰K˜Óñ (r;   )r'  N)
rN   rO   rP   rQ   r/  re   rÎ   r(  rS   rT   rU   s   @r9   r  r  Œ  s!   ø‡ € òIò6 ò ÷Oð Or;   r  c                   ó0   a € ] tR tRt o RR ltR tRtV tR# )ÚDecodeArgHandleri¸  Nc                ó  € \        V4      \        Jd   \        R \        V4      ,          4      hRV P                  P                  9   d=   VP                  \        V P                  P                  R,          ^ ,          4      4      # V# )zunexpected type for value: %rÚencoding)rû  r  rü  rù  rú  Údecoder   )rC   ry   ru   s   &&&r9   Údecode_argumentÚ DecodeArgHandler.decode_argument¹  sb   € Ü�‹;œeÓ#ÜÐ;¼dÀ5»kÕIÓJÐJà˜Ÿ™×/Ñ/Ô/Ø—<‘<¤
¨4¯<©<×+AÑ+AÀ*Õ+MÈaÕ+PÓ QÓRÐRàˆLr;   c           
     ól   € R  pV P                  RV! V4      RV! V P                  R4      4      /4       R# )c                 ó®   € \        V 4      \        J d"   R \        \        P                  ! V 4      4      .# \        V 4      \
        J d   RV .# \        R4      h)r  r  zunknown type)rû  r  r	   r•   Úb2a_hexr   rü  )rê  s   &r9   ÚdescribeÚ&DecodeArgHandler.get.<locals>.describeÃ  sJ   € Ü�A‹wœ%ÓØ¤¬H×,<Ò,<¸QÓ,?Ó!@ÐAÐAÜ�a“œLÓ(Ø! 1�~Ð%Ü˜NÓ+Ð+r;   r4   Úqueryr‚   N)rd   r+  )rC   r  rH  s   && r9   re   ÚDecodeArgHandler.getÂ  s2   € ò	,ð 	�
‰
�F™H S›M¨7±H¸T×=NÑ=NÈuÓ=UÓ4VÐWÖXr;   rK   r2   )rN   rO   rP   rQ   rC  re   rS   rT   rU   s   @r9   r?  r?  ¸  s   ø‡ € ô÷Yð Yr;   r?  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚLinkifyHandleriÍ  c                ó,   € V P                  R RR7       R# )úlinkify.htmlzhttp://example.com)ÚmessageN©rÝ   rB   s   &r9   re   ÚLinkifyHandler.getÎ  s   € Ø�‰�NÐ,@ˆÖAr;   rK   Nrg   rU   s   @r9   rM  rM  Í  s   ø‡ € ÷Bð Br;   rM  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚUIModuleResourceHandleriÒ  c                ó0   € V P                  R ^^.R7       R# )ú	page.html)ÚentriesNrQ  rB   s   &r9   re   ÚUIModuleResourceHandler.getÓ  s   € Ø�‰�K¨!¨Q¨ˆÖ0r;   rK   Nrg   rU   s   @r9   rT  rT  Ò  s   ø‡ € ÷1ð 1r;   rT  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚOptionalPathHandleri×  c                ó,   € V P                  R V/4       R# )r4   Nrc   rØ   s   &&r9   re   ÚOptionalPathHandler.getØ  s   € Ø�
‰
�F˜D�>Ö"r;   rK   Nrg   rU   s   @r9   rZ  rZ  ×  s   ø‡ € ÷#ð #r;   rZ  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚMultiHeaderHandleriÜ  c                ó–   € V P                  R R4       V P                  R^4       V P                  R^4       V P                  RR4       R# )úx-overwriterN  zX-Overwriteúx-multizX-MultiÚ4N)Ú
set_headerÚ
add_headerrB   s   &r9   re   ÚMultiHeaderHandler.getÝ  s:   € Ø�‰˜ sÔ+Ø�‰˜ qÔ)Ø�‰˜	 1Ô%Ø�‰˜	 3Ö'r;   rK   Nrg   rU   s   @r9   r^  r^  Ü  s   ø‡ € ÷(ð (r;   r^  c                   ó&   a € ] tR tRt o R tRtV tR# )r    iä  c           
     ó.  € V P                  R R4      e7   V P                  R\        \        V P                  R 4      4      4      R7       R# V P                  RR4      e.   V P                  R\        V P                  R4      4      R7       R# \	        R4      h)Ú	permanentNrZ   )rh  r  )r  z(didn't get permanent or status arguments)r+  ÚredirectÚboolr*  rü  rB   s   &r9   re   ÚRedirectHandler.getå  sy   € Ø×Ñ˜[¨$Ó/Ò;Ø�M‰M˜#¬¬c°$×2CÑ2CÀKÓ2PÓ.QÓ)RˆMÖSØ×Ñ˜x¨Ó.Ò:Ø�M‰M˜#¤c¨$×*;Ñ*;¸HÓ*EÓ&FˆMÖGäÐFÓGÐGr;   rK   Nrg   rU   s   @r9   r    r    ä  s   ø‡ € ÷Hð Hr;   r    c                   óD   a € ] tR tRt o ]P
                  R 4       tRtV tR# )ÚEmptyFlushCallbackHandleriî  c              #  óâ   "  € V P                  4       x € V P                  4       x € V P                  R 4       V P                  4       x € V P                  4       x € V P                  R4       R# 5i)ÚoÚkN)rÍ   rd   rÆ   rB   s   &r9   re   ÚEmptyFlushCallbackHandler.getï  sN   é € ð
 �j‰j‹lÒØ�j‰j‹lÒØ�
‰
�3ŒØ�j‰j‹lÒØ�j‰j‹lÒØ�‰�CÖùs   ‚A-A/rK   N)	rN   rO   rP   rQ   r   rÐ   re   rS   rT   rU   s   @r9   rm  rm  î  s   ø‡ € Ø‡]�]ñ	ó ö	r;   rm  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚHeaderInjectionHandleriü  c                ó´   €  V P                  R R4       \        R4      h  \         d.   pR\        T4      9   d   T P	                  R4        Rp?R# h Rp?ii ; i)úX-Foozfoo
X-Bar: bazúDidn't get expected exceptionúUnsafe header valueó   okN)rc  rü  Ú
ValueErrorr   rÆ   ©rC   r5  s   & r9   re   ÚHeaderInjectionHandler.getý  sP   € ð	Ø�O‰O˜GÐ%8Ô9ÜÐ;Ó<Ð<øÜô 	Ø$¬¨A«Ô.Ø—‘˜E×"Ò"àûð		ús   ‚ ŸAª!AÁAÁArK   Nrg   rU   s   @r9   rs  rs  ü  s   ø‡ € ÷ð r;   rs  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚSetHeaderHandleri  c                ó®  € \        ^ ^ 4       Uu. uF  p\        V4      NK  	  ppVP                  \        ^4      4       VP                  R4       V F-  p V P	                  RRV,           R,           4       \        R4      h	  V P	                  RR4       V P                  R	4       R# u upi   \         d   pR\        T4      9  d   h  Rp?K}  Rp?ii ; i)
r   Ú	ru  r‚   r'  rv  rw  Nrƒ  rx  )	r0  r/  ÚappendÚremoverc  rü  ry  r   rÆ   )rC   ro  Úillegal_charsr4  r5  s   &    r9   re   ÚSetHeaderHandler.get	  s¹   € ä).¨q°$¬Ó8© Aœ˜Qž©ˆÐ8Ø×ÑœS ›YÔ'Ø×Ñ˜TÔ"Û!ˆDðØ—‘ ¨°­¸Õ)=Ô>ÜÐ ?Ó@Ð@ñ "ð 	�‰˜ Ô$à�‰�EÖùò 9øô ô Ø(´°A³Ô6Øõ 7ûðús   �B(Á+B-Â-CÂ8CÃCrK   Nrg   rU   s   @r9   r}  r}    s   ø‡ € ÷ð r;   r}  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚGetArgumentHandleri  c                óÞ   € V P                  R R4      R8X  d   V P                  pM0V P                  R R4      R8X  d   V P                  pMV P                   pV P                  V! RR4      4       R# )ÚsourceNrJ  rì   r‚   r  )r+  Úget_query_argumentÚget_body_argumentrÆ   ©rC   rë   s   & r9   r/  ÚGetArgumentHandler.prepare  s`   € Ø×Ñ˜X tÓ,°Ô7Ø×,Ñ,‰FØ×Ñ˜x¨Ó.°&Ô8Ø×+Ñ+‰Fà×&Ñ&ˆFØ�‰‘F˜5 )Ó,Ö-r;   rK   N©rN   rO   rP   rQ   r/  rS   rT   rU   s   @r9   r…  r…    s   ø‡ € ÷.ð .r;   r…  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚGetArgumentsHandleri'  c           	     óš   € V P                  \        V P                  R 4      V P                  R 4      V P	                  R 4      R7      4       R# )r‚   ©r  rJ  rì   N)rÆ   rp   rý  Úget_query_argumentsÚget_body_argumentsrB   s   &r9   r/  ÚGetArgumentsHandler.prepare(  s@   € Ø�‰ÜØ×*Ñ*¨5Ó1Ø×.Ñ.¨uÓ5Ø×,Ñ,¨UÓ3ôö	
r;   rK   NrŒ  rU   s   @r9   rŽ  rŽ  '  s   ø‡ € ÷
ð 
r;   rŽ  c                   ó´   a a€ ] tR tRt oRtR tV 3R ltR tR tR t	R t
R	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tRtVtV ;t# )ÚWSGISafeWebTesti3  zWebTest.COOKIE_SECRETc                óT   € \        R RRRRR/4      p\        VRV P                  R7      # )rO  z{% module linkify(message) %}rV  zv<html><head></head><body>
{% for e in entries %}
{% module Template("entry.html", entry=e) %}
{% end %}
</body></html>z
entry.htmlaY  {{ set_resources(embedded_css=".entry { margin-bottom: 1em; }",
                 embedded_javascript="js_embed()",
                 css_files=["/base.css", "/foo.css"],
                 javascript_files="/common.js",
                 html_head="<meta>",
                 html_body='<script src="/analytics.js"/>') }}
<div class="entry">...</div>Úxhtml_escape)Útemplate_loaderÚ
autoescaperk   )r   rp   ÚCOOKIE_SECRET)rC   Úloaders   & r9   r@   ÚWSGISafeWebTest.get_app_kwargs6  sG   € ÜàÐ ?Øð ð ð  ðó
ˆô& Ø"Ø%Ø×,Ñ,ô
ð 	
r;   c                ó`   <€ \         SV `  4        \        P                  P	                  4        R # r2   ©ÚsuperÚtearDownr   Ú_template_loadersÚclear©rC   Ú	__class__s   &€r9   r   ÚWSGISafeWebTest.tearDownP  ó    ø€ Ü‰ÑÔÜ×(Ñ(×.Ñ.Ö0r;   c                óê  € \        R \        RR7      \        R\        RR7      \        R\        4      \        R\        4      \        R\        4      \        R\
        4      \        R	\        4      \        R
\        4      \        R\        RR/4      \        R\        RRRR/4      \        R\        RR/4      \        R\        4      \        R\        4      \        R\        4      \        R\        4      .pV# )z/typecheck/(.*)r%  )ru   z/decode_arg/(.*)Ú
decode_argz/decode_arg_kw/(?P<arg>.*)ú/linkifyú/uimodule_resourcesz/optional_path/(.+)?ú/multi_headerz	/redirectú/web_redirect_permanentr%   ú/web_redirect_newpathú/web_redirectrh  Fú//web_redirect_double_slashú/header_injectionú/get_argumentz/get_argumentsú/set_header)r%   r  r?  rM  rT  rZ  r^  r    ÚWebRedirectHandlerrs  r…  rŽ  r}  )rC   Úurlss   & r9   r?   ÚWSGISafeWebTest.get_handlersT  sì   € äÐ!Ô#3¸+ÔFÜÐ"Ô$4¸<ÔHÜÐ,Ô.>Ó?Ü�
œNÓ+ÜÐ%Ô'>Ó?ÜÐ&Ô(;Ó<Ü�Ô!3Ó4Ü�œ_Ó-ÜØ)Ü"ØÐ/Ð0óô
 ØÜ"ØÐ/°¸eÐDóô
 Ø-Ü"ØÐ/Ð0óô
 Ð#Ô%;Ó<Ü�Ô!3Ó4ÜÐ Ô"5Ó6Ü�Ô/Ó0ð7
ˆð: ˆr;   c                óp   € V P                   ! V/ VB pVP                  4        \        VP                  4      # r2   )rí   Úrethrowr   rì   )rC   rø  Úkwargsrô   s   &*, r9   r  ÚWSGISafeWebTest.fetch_jsont  s0   € Ø—:’:˜tÐ. vÑ.ˆØ×ÑÔÜ˜8Ÿ=™=Ó)Ð)r;   c                ó  € \        \        V P                  R R4      4      pV P                  RRRV,           /R7      p\	        VP
                  4      pV P                  V/ 4       V P                  RRRRV,           /RR7      pR	# )
r  r  z/typecheck/asdf?foo=barrm  zasdf=ro  ré   rn  ©rë   rh  rì   N)r   r'   rš  rí   r   rì   rŠ   )rC   r!  rô   r}  s   &   r9   Ú
test_typesÚWSGISafeWebTest.test_typesy  s‹   € Ü!Ü × 2Ñ 2°F¸FÓCó
ˆð —:‘:Ø%°¸'ÀLÕ:PÐ/Qð ó 
ˆô ˜8Ÿ=™=Ó)ˆØ×Ñ˜˜rÔ"à—:‘:Ø%ØØ˜w¨Õ5Ð6Øð	 ó 
Šr;   c           	     ó`  € . R	OpV FS  pV P                  V4      pVP                  4        \        VP                  4      pV P	                  VRRR.RRR./4       KU  	  V P                  R4      pVP                  4        \        VP                  4      pV P	                  VRRR.RRR./4       R# )
ú,/decode_arg/%C3%A9?foo=%C3%A9&encoding=utf-8r4   r  r  rJ  z/decode_arg/%C3%A9?foo=%C3%A9r  Úc3a9N)r¿  z'/decode_arg/%E9?foo=%E9&encoding=latin1z*/decode_arg_kw/%E9?foo=%E9&encoding=latin1©rí   r·  r   rì   rŠ   ©rC   r´  Úreq_urlrô   r}  s   &    r9   Útest_decode_argumentÚ$WSGISafeWebTest.test_decode_argumentŠ  s²   € ò
ˆó
 ˆGØ—z‘z 'Ó*ˆHØ×ÑÔÜ˜xŸ}™}Ó-ˆDØ×ÑØØ˜) XÐ.°¸)ÀXÐ9NÐOöñ	 ð —:‘:Ð=Ó>ˆØ×ÑÔÜ˜8Ÿ=™=Ó)ˆØ×Ñ˜ ¨°&Ð(9¸7ÀWÈfÐDUÐVÖWr;   c                ó$  € \        \        R 4      ;_uu_ 4        V P                  R4      pV P                  VP                  R4       V P                  R4      pV P                  VP                  R4       RRR4       R#   + '       g   i     R# ; i)z.*Invalid unicode.*z/typecheck/invalid%FFé�  z/typecheck/invalid?foo=%FFN©r   r   rí   rŠ   rï   ró   s   & r9   Ú$test_decode_argument_invalid_unicodeÚ4WSGISafeWebTest.test_decode_argument_invalid_unicodeŸ  se   € ä”wÐ 5×6Õ6Ø—z‘zÐ"9Ó:ˆHØ×Ñ˜XŸ]™]¨CÔ0Ø—z‘zÐ">Ó?ˆHØ×Ñ˜XŸ]™]¨CÔ0÷	 7×6×6Ò6ús   ™AA>Á>B	c           	     óÀ   € R R.pV FS  pV P                  V4      pVP                  4        \        VP                  4      pV P	                  VRRR.RRR./4       KU  	  R# )z6/decode_arg/1%20%2B%201?foo=1%20%2B%201&encoding=utf-8z0/decode_arg/1%20+%201?foo=1+%2B+1&encoding=utf-8r4   r  ú1 + 1rJ  NrÁ  rÂ  s   &    r9   Útest_decode_argument_plusÚ)WSGISafeWebTest.test_decode_argument_plus§  sm   € ð EØ>ð
ˆó ˆGØ—z‘z 'Ó*ˆHØ×ÑÔÜ˜xŸ}™}Ó-ˆDØ×ÑØØ˜) WÐ-¨w¸ÀGÐ8LÐMöó	 r;   c                ó¾  € V P                  V P                  P                  R R4      R4       V P                  V P                  P                  R ^*4      R4       V P                  V P                  P                  R R4      R4       V P                  V P                  P                  R R4      R4       V P                  V P                  P                  R R4      R	4       R
# )r¨  r‚   z/decode_arg/fooz/decode_arg/42r¢   z/decode_arg/%E9r  z/decode_arg/%C3%A9rÌ  z/decode_arg/1%20%2B%201N)rŠ   rA   r$  rB   s   &r9   Útest_reverse_urlÚ WSGISafeWebTest.test_reverse_url¶  s´   € Ø×Ñ˜Ÿ™×-Ñ-¨l¸EÓBÐDUÔVØ×Ñ˜Ÿ™×-Ñ-¨l¸BÓ?ÐAQÔRØ×Ñ˜Ÿ™×-Ñ-¨l¸GÓDÐFWÔXØ×ÑØ�H‰H× Ñ  ¨xÓ8Ð:Nô	
ð 	×ÑØ�H‰H× Ñ  ¨wÓ7Ð9Rö	
r;   c                ó`   € V P                  R 4      pV P                  VP                  R4       R# )r©  s3   <a href="http://example.com">http://example.com</a>Nrq  ró   s   & r9   Útest_uimodule_unescapedÚ'WSGISafeWebTest.test_uimodule_unescapedÁ  s(   € Ø—:‘:˜jÓ)ˆØ×ÑØ�M‰MÐQö	
r;   c                ó`   € V P                  R 4      pV P                  VP                  R4       R# )rª  s¿  <html><head><link href="/base.css" type="text/css" rel="stylesheet"/><link href="/foo.css" type="text/css" rel="stylesheet"/>
<style type="text/css">
.entry { margin-bottom: 1em; }
</style>
<meta>
</head><body>


<div class="entry">...</div>


<div class="entry">...</div>

<script src="/common.js" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
js_embed()
//]]>
</script>
<script src="/analytics.js"/>
</body></html>Nrq  ró   s   & r9   Útest_uimodule_resourcesÚ'WSGISafeWebTest.test_uimodule_resourcesÇ  s+   € Ø—:‘:Ð3Ó4ˆØ×ÑØ�M‰Mðö	
r;   c                ó’   € V P                  V P                  R 4      RR/4       V P                  V P                  R4      RR/4       R# )z/optional_path/foor4   r‚   z/optional_path/Nr  rB   s   &r9   Útest_optional_pathÚ"WSGISafeWebTest.test_optional_pathã  s>   € Ø×Ñ˜Ÿ™Ð)=Ó>ÀÈÀÔPØ×Ñ˜Ÿ™Ð):Ó;¸fÀd¸^ÖLr;   c                óÈ   € V P                  R 4      pV P                  VP                  R,          R4       V P                  VP                  P                  R4      RR.4       R# )r«  r`  Ú2ra  Ú3rb  Nru  ró   s   & r9   Útest_multi_headerÚ!WSGISafeWebTest.test_multi_headerç  sP   € Ø—:‘:˜oÓ.ˆØ×Ñ˜×)Ñ)¨-Õ8¸#Ô>Ø×Ñ˜×)Ñ)×2Ñ2°9Ó=ÀÀS¸zÖJr;   c                ó   € V P                  R RR7      pV P                  VP                  R4       V P                  RRR7      pV P                  VP                  R4       V P                  RRR7      pV P                  VP                  R4       R# )	z/redirect?permanent=1Fr¿  é-  z/redirect?permanent=0rÁ  z/redirect?status=307i3  N©rí   rŠ   rï   ró   s   & r9   Útest_redirectÚWSGISafeWebTest.test_redirectì  sw   € Ø—:‘:Ð5È�:ÓNˆØ×Ñ˜Ÿ™¨Ô,Ø—:‘:Ð5È�:ÓNˆØ×Ñ˜Ÿ™¨Ô,Ø—:‘:Ð4Àu�:ÓMˆØ×Ñ˜Ÿ™¨Ö,r;   c                óN  € V P                  R RR7      pV P                  VP                  R4       V P                  VP                  R,          R4       V P                  RRR7      pV P                  VP                  R4       V P                  VP                  R,          R4       R# )	r¬  Fr¿  rá  rÂ  r­  r®  rÁ  N©rí   rŠ   rï   rh  ró   s   & r9   Útest_web_redirectÚ!WSGISafeWebTest.test_web_redirectô  s‡   € Ø—:‘:Ð7È%�:ÓPˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Õ5Ð7NÔOØ—:‘:˜oÀ�:ÓFˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Õ5Ð7NÖOr;   c                óª   € V P                  R RR7      pV P                  VP                  R4       V P                  VP                  R,          R4       R# )r¯  Fr¿  rá  rÂ  r­  Nræ  ró   s   & r9   Útest_web_redirect_double_slashÚ.WSGISafeWebTest.test_web_redirect_double_slashü  sE   € Ø—:‘:Ð;Èe�:ÓTˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Õ5Ð7NÖOr;   c                ó`   € V P                  R 4      pV P                  VP                  R4       R# )r°  rx  Nrq  ró   s   & r9   Útest_header_injectionÚ%WSGISafeWebTest.test_header_injection  s%   € Ø—:‘:Ð1Ó2ˆØ×Ñ˜Ÿ™¨Ö.r;   c                ó`   € V P                  R 4      pV P                  VP                  R4       R# )r²  rx  Nrq  ró   s   & r9   Útest_set_headerÚWSGISafeWebTest.test_set_header  s$   € Ø—:‘:˜mÓ,ˆØ×Ñ˜Ÿ™¨Ö.r;   c           	     óX  € V P                  R 4      pV P                  VP                  R4       V P                  R4      pV P                  VP                  R4       V P                  R4      pV P                  VP                  R4       \        P                  P                  \        RR7      4      pV P                  R RVR	7      pV P                  VP                  R
4       V P                  RRVR	7      pV P                  \        VP                  4      \        RR.R.R.R7      4       R# )z/get_argument?foo=barrƒ   z/get_argument?foo=r;   r±  rp  rb   ©r‚   ré   rê   ó   helloz/get_arguments?foo=barr'  r�  N)rí   rŠ   rì   ÚurllibÚparseÚ	urlencoderp   r   )rC   rô   rì   s   &  r9   Útest_get_argumentÚ!WSGISafeWebTest.test_get_argument	  sò   € Ø—:‘:Ð5Ó6ˆØ×Ñ˜Ÿ™¨Ô/Ø—:‘:Ð2Ó3ˆØ×Ñ˜Ÿ™¨Ô,Ø—:‘:˜oÓ.ˆØ×Ñ˜Ÿ™¨
Ô3ô �|‰|×%Ñ%¤d¨wÔ&7Ó8ˆØ—:‘:Ð5¸fÈ4�:ÓPˆØ×Ñ˜Ÿ™¨Ô1à—:‘:Ð6¸vÈD�:ÓQˆØ×ÑÜ˜Ÿ™Ó&Ü˜% Ð)°%°À¸yÔIö	
r;   c                óx  € \         P                  P                  \        R R7      4      pV P	                  RRVR7      pV P                  VP                  R4       V P	                  RRVR7      pV P                  VP                  R4       V P	                  RRVR7      pV P                  VP                  R	4       R
# )rb   ró  z"/get_argument?source=query&foo=barré   rê   rƒ   z/get_argument?source=query&foo=r;   z/get_argument?source=queryrp  N©rõ  rö  r÷  rp   rí   rŠ   rì   ©rC   rì   rô   s   &  r9   Útest_get_query_argumentsÚ(WSGISafeWebTest.test_get_query_arguments  s§   € ô �|‰|×%Ñ%¤d¨wÔ&7Ó8ˆØ—:‘:Ø0¸Àdð ó 
ˆð 	×Ñ˜Ÿ™¨Ô/Ø—:‘:Ø-°fÀ4ð ó 
ˆð 	×Ñ˜Ÿ™¨Ô,Ø—:‘:Ð:À6ÐPT�:ÓUˆØ×Ñ˜Ÿ™¨
Ö3r;   c                ó  € \         P                  P                  \        R R7      4      pV P	                  RRVR7      pV P                  VP                  R4       \         P                  P                  \        RR7      4      pV P	                  RRVR7      pV P                  VP                  R4       \         P                  P                  \        4       4      pV P	                  RRVR7      pV P                  VP                  R4       R	# )
r'  ró  z#/get_argument?source=body&foo=helloré   rê   rƒ   rƒ  r;   rp  Nrû  rü  s   &  r9   Útest_get_body_argumentsÚ'WSGISafeWebTest.test_get_body_arguments,  sØ   € Ü�|‰|×%Ñ%¤d¨u¤oÓ6ˆØ—:‘:Ø1¸&Àtð ó 
ˆð 	×Ñ˜Ÿ™¨Ô/ä�|‰|×%Ñ%¤d¨r¤lÓ3ˆØ—:‘:Ø1¸&Àtð ó 
ˆð 	×Ñ˜Ÿ™¨Ô,ä�|‰|×%Ñ%¤d£fÓ-ˆØ—:‘:Ø1¸&Àtð ó 
ˆð 	×Ñ˜Ÿ™¨
Ö3r;   c                óØ   € V P                  R 4      pV P                  RVP                  P                  RR4      4       V P                  RVP                  P                  RR4      4       R# )r±  úAccept-EncodingÚVaryrƒ  ÚgzipúContent-EncodingN)rí   ÚassertNotInrh  re   ró   s   & r9   Útest_no_gzipÚWSGISafeWebTest.test_no_gzip?  sX   € Ø—:‘:˜oÓ.ˆØ×ÑÐ*¨H×,<Ñ,<×,@Ñ,@ÀÈÓ,LÔMØ×Ñ˜ ×!1Ñ!1×!5Ñ!5Ð6HÈ"Ó!MÖNr;   rK   )rN   rO   rP   rQ   rš  r@   r   r?   r  r¼  rÄ  rÉ  rÍ  rÐ  rÓ  rÖ  rÙ  rÞ  rã  rç  rê  rí  rð  rø  rý  r   r  rS   rT   Ú__classcell__©r¤  rV   s   @@r9   r•  r•  3  s…   ù‡ € Ø+€Mò
õ41òò@*ò

ò"Xò*1òò	
ò
ò
ò8MòKò
-òPòPò
/ò/ò
ò(4ò4÷&Oò Or;   r•  c                   ó,   a € ] tR tRt o R tR tRtV tR# )ÚNonWSGIWebTestsiE  c                ó   € R \         3.# )ú/empty_flush)rm  rB   s   &r9   r?   ÚNonWSGIWebTests.get_handlersF  s   € ØÔ!:Ð;Ð<Ð<r;   c                ó`   € V P                  R 4      pV P                  VP                  R4       R# )r  rx  Nrq  ró   s   & r9   Útest_empty_flushÚ NonWSGIWebTests.test_empty_flushI  s$   € Ø—:‘:˜nÓ-ˆØ×Ñ˜Ÿ™¨Ö.r;   rK   N)rN   rO   rP   rQ   r?   r  rS   rT   rU   s   @r9   r  r  E  s   ø‡ € ò=÷/ð /r;   r  c                   ó8   a € ] tR tRt o R tR tR tR tRtV t	R# )ÚErrorResponseTestiN  c                ó¢   €  ! R  R\         4      p ! R R\         4      p ! R R\         4      p\        RV4      \        RV4      \        RV4      .# )	c                   ó&   a € ] tR tRt o R tRtV tR# )Ú6ErrorResponseTest.get_handlers.<locals>.DefaultHandleriP  c                óŽ   € V P                  R R4      '       d$   \        \        V P                  R 4      4      4      h^^ ,           R# ©r  N)r+  r!   r*  rB   s   &r9   re   Ú:ErrorResponseTest.get_handlers.<locals>.DefaultHandler.getQ  s9   € Ø×$Ñ$ X¨t×4Ò4Ü#¤C¨×(9Ñ(9¸(Ó(CÓ$DÓEÐEØ�A—�r;   rK   Nrg   rU   s   @r9   ÚDefaultHandlerr  P  s   ø‡ € ÷ð r;   r  c                   ó,   a € ] tR tRt o R tR tRtV tR# )Ú9ErrorResponseTest.get_handlers.<locals>.WriteErrorHandleriV  c                óž   € V P                  R R4      '       d,   V P                  \        V P                  R 4      4      4       R# ^^ ,           R# r  )r+  r¶  r*  rB   s   &r9   re   Ú=ErrorResponseTest.get_handlers.<locals>.WriteErrorHandler.getW  s:   € Ø×$Ñ$ X¨t×4Ò4Ø—O‘O¤C¨×(9Ñ(9¸(Ó(CÓ$DÖEà˜—E�Er;   c                óÌ   € V P                  R R4       RV9   d3   V P                  RVR,          ^ ,          P                  ,          4       R# V P                  RV,          4       R# )úContent-Typeú
text/plainÚexc_infozException: %sz
Status: %dN)rc  rd   rN   ©rC   Ústatus_coder¸  s   &&,r9   Úwrite_errorÚEErrorResponseTest.get_handlers.<locals>.WriteErrorHandler.write_error]  sJ   € Ø—‘ °Ô=Ø Ô'Ø—J‘J˜°¸
Õ1CÀAÕ1F×1OÑ1OÕOÖPà—J‘J˜|¨kÕ9Ö:r;   rK   N©rN   rO   rP   rQ   re   r'  rS   rT   rU   s   @r9   ÚWriteErrorHandlerr  V  s   ø‡ € ò÷;ð ;r;   r*  c                   ó,   a € ] tR tRt o R tR tRtV tR# )Ú?ErrorResponseTest.get_handlers.<locals>.FailedWriteErrorHandlerid  c                ó   € ^^ ,           R# ©r³   NrK   rB   s   &r9   re   ÚCErrorResponseTest.get_handlers.<locals>.FailedWriteErrorHandler.gete  s   € Ø�A—�r;   c                ó   € \        R 4      h)zexception in write_error©rü  r%  s   &&,r9   r'  ÚKErrorResponseTest.get_handlers.<locals>.FailedWriteErrorHandler.write_errorh  s   € ÜÐ :Ó;Ð;r;   rK   Nr)  rU   s   @r9   ÚFailedWriteErrorHandlerr,  d  s   ø‡ € ò÷<ð <r;   r3  ú/defaultú/write_errorú/failed_write_error)r   r%   )rC   r  r*  r3  s   &   r9   r?   ÚErrorResponseTest.get_handlersO  sS   € ô	œ^ô 	ô	;¤ô 	;ô	<¤nô 	<ô �
˜NÓ+Ü�Ð 1Ó2ÜÐ%Ð'>Ó?ð
ð 	
r;   c                ó&  € \        \        R 4      ;_uu_ 4        V P                  R4      pV P                  VP                  R4       V P                  RVP                  4       V P                  R4      pV P                  VP                  R4       V P                  RVP                  4       V P                  R4      pV P                  VP                  R4       V P                  R	VP                  4       R
R
R
4       R
#   + '       g   i     R
# ; i)úUncaught exceptionr4  rµ  s   500: Internal Server Errorz/default?status=503é÷  s   503: Service Unavailablez/default?status=435i³  s   435: UnknownN)r   r   rí   rŠ   rï   rz  rì   ró   s   & r9   Útest_defaultÚErrorResponseTest.test_defaultq  s¿   € Ü”wÐ 4×5Õ5Ø—z‘z *Ó-ˆHØ×Ñ˜XŸ]™]¨CÔ0Ø�M‰MÐ7¸¿¹ÔGà—z‘zÐ"7Ó8ˆHØ×Ñ˜XŸ]™]¨CÔ0Ø�M‰MÐ5°x·}±}ÔEà—z‘zÐ"7Ó8ˆHØ×Ñ˜XŸ]™]¨CÔ0Ø�M‰M˜/¨8¯=©=Ô9÷ 6×5×5Ò5ús   ™CC?Ã?D	c                ó”  € \        \        R 4      ;_uu_ 4        V P                  R4      pV P                  VP                  R4       V P                  RVP
                  4       V P                  R4      pV P                  VP                  R4       V P                  RVP
                  4       RRR4       R#   + '       g   i     R# ; i)r9  r5  rµ  s   Exception: ZeroDivisionErrorz/write_error?status=503r:  s   Status: 503N©r   r   rí   rŠ   rï   rì   ró   s   & r9   Útest_write_errorÚ"ErrorResponseTest.test_write_error  s�   € Ü”wÐ 4×5Õ5Ø—z‘z .Ó1ˆHØ×Ñ˜XŸ]™]¨CÔ0Ø×ÑÐ<¸h¿m¹mÔLà—z‘zÐ";Ó<ˆHØ×Ñ˜XŸ]™]¨CÔ0Ø×Ñ˜^¨X¯]©]Ô;÷ 6×5×5Ò5ús   ™BB6Â6C	c                ó  € \        \        R 4      ;_uu_ 4        V P                  R4      pV P                  VP                  R4       V P                  RVP
                  4       RRR4       R#   + '       g   i     R# ; i)r9  r6  rµ  r;   Nr>  ró   s   & r9   Útest_failed_write_errorÚ)ErrorResponseTest.test_failed_write_error‰  sV   € Ü”wÐ 4×5Õ5Ø—z‘zÐ"7Ó8ˆHØ×Ñ˜XŸ]™]¨CÔ0Ø×Ñ˜S (§-¡-Ô0÷ 6×5×5Ò5ús   ™A
A-Á-A>	rK   N)
rN   rO   rP   rQ   r?   r;  r?  rB  rS   rT   rU   s   @r9   r  r  N  s   ø‡ € ò 
òD:ò<÷1ð 1r;   r  c                   ó²  a € ] tR tRt o Rt]P                  P                  ]P                  P                  ]	4      R4      t
R tR tR tR tR tR	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR t R t!R t"R t#R t$R t%R t&R  t'R! t(R" t)R# t*R$ t+R% t,R& t-R' t.]/P`                  ! ]Pb                  R(8g  R)4      R* 4       t2R+t3V t4R,# )-ÚStaticFileTesti�  s€   63a36e950e134b5217e33c763e88840c10a07d80e6057d92b9ac97508de7fb1fa6f0e9b7531e169657165ea764e8963399cb6d921ffe6078425aaafe54c04563Ústaticc           	     óŽ   €  ! R  R\         4      p ! R RV4      p ! R R\         4      pRV3RV3RV3R	\        \        R
R7      3.# )c                   ó&   a € ] tR tRt o R tRtV tR# )Ú5StaticFileTest.get_handlers.<locals>.StaticUrlHandleriš  c                ó~   € \        V P                  R R4      4      pV P                  V P                  WR7      4       R# )Úinclude_versionrN  )rK  N)r*  r+  rd   Ú
static_url)rC   r4   Úwith_vs   && r9   re   Ú9StaticFileTest.get_handlers.<locals>.StaticUrlHandler.get›  s1   € Ü˜T×.Ñ.Ð/@À#ÓFÓG�Ø—
‘
˜4Ÿ?™?¨4˜?ÓHÖIr;   rK   Nrg   rU   s   @r9   ÚStaticUrlHandlerrI  š  s   ø‡ € ÷Jð Jr;   rO  c                   ó   € ] tR tRtRtRtR# )Ú=StaticFileTest.get_handlers.<locals>.AbsoluteStaticUrlHandleriŸ  TrK   N)rN   rO   rP   rQ   Úinclude_hostrS   rK   r;   r9   ÚAbsoluteStaticUrlHandlerrQ  Ÿ  s   † ØŒLr;   rS  c                   ó&   a € ] tR tRt o R tRtV tR# )Ú=StaticFileTest.get_handlers.<locals>.OverrideStaticUrlHandleri¢  c                ó  € \        V P                  R 4      4      pV'       * V n        V P                  V4      pV P                  WR7      pWC8X  d   V P	                  \        R4      4      # V P                  P                  R,           p\        V4      pVP                  V^ V4      pVP                  V^ V4      pV'       d   V^ 8H  ;'       d    VR8H  p	MVR8H  ;'       d    V^ 8H  p	V P	                  \        V	4      4       R# )rR  ©rR  Fz://Néÿÿÿÿ)
rj  r+  rR  rL  rd   r   rù  Úprotocolry  Úfind)
rC   r4   Ú
do_includeÚregular_urlÚoverride_urlrY  Úprotocol_lengthÚcheck_regularÚcheck_overrideÚresults
   &&        r9   re   ÚAStaticFileTest.get_handlers.<locals>.OverrideStaticUrlHandler.get£  sÞ   € Ü! $×"3Ñ"3°NÓ"CÓD�
Ø(2¤N�Ô!à"Ÿo™o¨dÓ3�Ø#Ÿ™¨t˜ÓM�ØÔ.ØŸ:™:¤c¨%£jÓ1Ð1àŸ<™<×0Ñ0°5Õ8�Ü"% h£-�Ø +× 0Ñ 0°¸1¸oÓ N�Ø!-×!2Ñ!2°8¸QÀÓ!P�çØ+¨qÑ0×HÐH°]ÀbÑ5H‘Fà+¨rÑ1×HÐH°mÀqÑ6H�FØ—
‘
œ3˜v›;Ö'r;   rW  Nrg   rU   s   @r9   ÚOverrideStaticUrlHandlerrU  ¢  s   ø‡ € ÷(ð (r;   rc  ú/static_url/(.*)z/abs_static_url/(.*)z/override_static_url/(.*)z/root_static/(.*)rZ   r+  )r   r   rp   )rC   rO  rS  rc  s   &   r9   r?   ÚStaticFileTest.get_handlers™  s_   € ô	Jœ~ô 	Jô
	 Ð'7ô 	 ô	(¤~ô 	(ð,  Ð!1Ð2Ø#Ð%=Ð>Ø(Ð*BÐCØ Ô"3´T¸s´^ÐDð	
ð 	
r;   c                ó,   € \        \        R 4      R7      # )rF  )Ústatic_path©rp   r:   rB   s   &r9   r@   ÚStaticFileTest.get_app_kwargs¾  s   € Ü¤¨Ó 1Ô2Ð2r;   c                ó  € V P                  R 4      pV P                  RVP                  4       V P                  R4      pV P                  RVP                  4       V P                  VP                  P                  R4      R4       R# )ú/robots.txtó   Disallow: /ú/static/robots.txtr"  r#  N)rí   rz  rì   rŠ   rh  re   ró   s   & r9   Útest_static_filesÚ StaticFileTest.test_static_filesÁ  sd   € Ø—:‘:˜mÓ,ˆØ�‰�n h§m¡mÔ4à—:‘:Ð2Ó3ˆØ�‰�n h§m¡mÔ4Ø×Ñ˜×)Ñ)×-Ñ-¨nÓ=¸|ÖLr;   c                óÐ   € V P                  R 4      pV P                  RVP                  4       V P                  RVP                  4       V P                  RVP                  4       R# )z/robots.txt?v=12345rl  zCache-ControlÚExpiresN)rí   rz  rì   rh  ró   s   & r9   Útest_static_files_cacheableÚ*StaticFileTest.test_static_files_cacheableÉ  sM   € ð —:‘:Ð3Ó4ˆØ�‰�n h§m¡mÔ4Ø�‰�o x×'7Ñ'7Ô8Ø�‰�i ×!1Ñ!1Ö2r;   c                ór  € V P                  R 4      pV P                  VP                  P                  R4      R4       V P                  R4      pV P                  VP                  P                  R4      R4       V P                  R4      pV P	                  VP                  P                  R4      RR04       R# )	z/static/sample.xml.gzr"  zapplication/gzipz/static/sample.xml.bz2zapplication/octet-streamz/static/sample.xmlztext/xmlzapplication/xmlN)rí   rŠ   rh  re   rz  ró   s   & r9   Útest_static_compressed_filesÚ+StaticFileTest.test_static_compressed_filesÒ  s    € Ø—:‘:Ð5Ó6ˆØ×Ñ˜×)Ñ)×-Ñ-¨nÓ=Ð?QÔRØ—:‘:Ð6Ó7ˆØ×ÑØ×Ñ× Ñ  Ó0Ð2Lô	
ð —:‘:Ð2Ó3ˆØ�‰Ø×Ñ× Ñ  Ó0°:Ð?PÐ2Qö	
r;   c                ó‚   € V P                  R 4      pV P                  VP                  RV P                  ,           4       R# )z/static_url/robots.txts   /static/robots.txt?v=N)rí   rŠ   rì   Úrobots_txt_hashró   s   & r9   Útest_static_urlÚStaticFileTest.test_static_urlß  s1   € Ø—:‘:Ð6Ó7ˆØ×Ñ˜Ÿ™Ð(@À4×CWÑCWÕ(WÖXr;   c                óÀ   € V P                  R 4      pV P                  VP                  \        V P	                  R4      4      R,           V P
                  ,           4       R# )z/abs_static_url/robots.txtrZ   s   static/robots.txt?v=N)rí   rŠ   rì   r   rî   rx  ró   s   & r9   Útest_absolute_static_urlÚ'StaticFileTest.test_absolute_static_urlã  sH   € Ø—:‘:Ð:Ó;ˆØ×ÑØ�M‰MÜ�$—,‘,˜sÓ#Ó$Ð'>Õ>À×AUÑAUÕUö	
r;   c                ó`   € V P                  R 4      pV P                  VP                  R4       R# )z(/static_url/robots.txt?include_version=0s   /static/robots.txtNrq  ró   s   & r9   Útest_relative_version_exclusionÚ.StaticFileTest.test_relative_version_exclusionê  s&   € Ø—:‘:ÐHÓIˆØ×Ñ˜Ÿ™Ð(=Ö>r;   c                óž   € V P                  R 4      pV P                  VP                  \        V P	                  R4      R,           4      4       R# )z,/abs_static_url/robots.txt?include_version=0rZ   ústatic/robots.txtN)rí   rŠ   rì   r   rî   ró   s   & r9   Útest_absolute_version_exclusionÚ.StaticFileTest.test_absolute_version_exclusionî  s9   € Ø—:‘:ÐLÓMˆØ×Ñ˜Ÿ™¬¨T¯\©\¸#Ó->ÐATÕ-TÓ(UÖVr;   c                óJ   € V P                  R 4       V P                  R4       R# )FTN)Ú_trigger_include_host_checkrB   s   &r9   Útest_include_host_overrideÚ)StaticFileTest.test_include_host_overrideò  s   € Ø×(Ñ(¨Ô/Ø×(Ñ(¨Ö.r;   c                ó¨   € R pV P                  V\        V4      ,          4      pV P                  VP                  \	        \        R4      4      4       R# )z//override_static_url/robots.txt?include_host=%sTN)rí   r*  rŠ   rì   r   r   )rC   rR  r4   rô   s   &&  r9   r†  Ú*StaticFileTest._trigger_include_host_checkö  s;   € Ø@ˆØ—:‘:˜d¤S¨Ó%6Õ6Ó7ˆØ×Ñ˜Ÿ™¬¬S°«Y«Ö8r;   c                ó:  € V P                   ! VRR/VB pV P                   ! VRR/VB p\        4       p\        P                  ! VP                  VP                  4       F-  pVP                  R4      '       g   K  VP                  V4       K/  	  V F†  pV P                  VP                  P                  V4      VP                  P                  V4      V: RVP                  P                  V4      : RVP                  P                  V4      : R24       Kˆ  	  V# )z‡Performs a GET and HEAD request and returns the GET response.

Fails if any ``Content-*`` headers returned by the two requests
differ.
rë   ÚHEADÚGETzContent-z differs between GET (z) and HEAD (Ú))	rí   rç  Ú	itertoolsÚchainrh  Ú
startswithÚaddrŠ   re   )rC   rø  r¸  Úhead_responseÚget_responseÚcontent_headersÚhs   &*,    r9   Úget_and_headÚStaticFileTest.get_and_headû  só   € ð Ÿ
š
 DÐB°ÐB¸6ÑBˆØ—z’z 4Ð@°Ð@¸Ñ@ˆÜ›%ˆÜ—’ ×!6Ñ!6¸×8LÑ8LÖMˆAØ�|‰|˜J×'Ô'Ø×#Ñ# AÖ&ñ Nó !ˆAØ×ÑØ×%Ñ%×)Ñ)¨!Ó,Ø×$Ñ$×(Ñ(¨Ó+ã�m×+Ñ+×/Ñ/°Ö2°L×4HÑ4H×4LÑ4LÈQÖ4OðQöñ !ð Ðr;   c                óä   € V P                  R 4      pV P                  R RVP                  R,          /R7      pV P                  VP                  R4       V P	                  RVP                  4       R# )rm  úIf-Modified-SinceúLast-Modifiedro  é0  úContent-LengthN)r—  rh  rŠ   rï   r  ©rC   Ú	response1Ú	response2s   &  r9   Ú!test_static_304_if_modified_sinceÚ0StaticFileTest.test_static_304_if_modified_since  sk   € Ø×%Ñ%Ð&:Ó;ˆ	Ø×%Ñ%Ø Ø(¨)×*;Ñ*;¸OÕ*LÐMð &ó 
ˆ	ð 	×Ñ˜Ÿ™¨Ô-Ø×ÑÐ)¨9×+<Ñ+<Ö=r;   c                ó¬   € V P                  R 4      pV P                  R RVP                  R,          /R7      pV P                  VP                  R4       R# )rm  úIf-None-MatchÚEtagro  rœ  N©r—  rh  rŠ   rï   rž  s   &  r9   Útest_static_304_if_none_matchÚ,StaticFileTest.test_static_304_if_none_match  sS   € Ø×%Ñ%Ð&:Ó;ˆ	Ø×%Ñ%Ø ¨?¸I×<MÑ<MÈfÕ<UÐ*Vð &ó 
ˆ	ð 	×Ñ˜Ÿ™¨Ö-r;   c                ó°   € V P                  R 4      pV P                  R RRRVP                  R,          /R7      pV P                  VP                  ^È4       R# )rm  r¤  z
"MISMATCH"rš  r›  ro  Nr¦  rž  s   &  r9   Ú!test_static_304_etag_modified_bugÚ0StaticFileTest.test_static_304_etag_modified_bug   s[   € Ø×%Ñ%Ð&:Ó;ˆ	Ø×%Ñ%Ø à Ø# Y×%6Ñ%6°Õ%Gðð &ó 
ˆ	ð 	×Ñ˜Ÿ™¨Ö-r;   c                óh   € V P                  R RR/R7      pV P                  VP                  ^È4       R# )rm  rš  z!nv@l!dro  N©r—  rŠ   rï   ró   s   & r9   Ú)test_static_304_if_modified_since_invalidÚ8StaticFileTest.test_static_304_if_modified_since_invalid+  s8   € Ø×$Ñ$Ø Ø(¨)Ð4ð %ó 
ˆð 	×Ñ˜Ÿ™¨Ö,r;   c                óh   € V P                  R RR/R7      pV P                  VP                  ^È4       R# )rm  rš  zFri, 01 Jan 1960 00:00:00 GMTro  Nr­  ró   s   & r9   Ú'test_static_if_modified_since_pre_epochÚ6StaticFileTest.test_static_if_modified_since_pre_epoch2  s;   € ð ×$Ñ$Ø Ø(Ð*IÐJð %ó 
ˆð 	×Ñ˜Ÿ™¨Ö,r;   c                óp  € \         P                  ! \        R 4      4      pV P                  RR\	        VP
                  ^,
          4      /R7      pV P                  VP                  ^È4       V P                  RR\	        VP
                  ^,           4      /R7      pV P                  VP                  R4       R# )r‚  rm  rš  ro  rœ  N)r3   Ústatr:   r—  r   Úst_mtimerŠ   rï   )rC   r´  rô   s   &  r9   Ú'test_static_if_modified_since_time_zoneÚ6StaticFileTest.test_static_if_modified_since_time_zone<  s¢   € ô
 �wŠw”wÐ2Ó3Ó4ˆà×$Ñ$Ø Ø(Ô*:¸4¿=¹=È1Õ;LÓ*MÐNð %ó 
ˆð 	×Ñ˜Ÿ™¨Ô,Ø×$Ñ$Ø Ø(Ô*:¸4¿=¹=È1Õ;LÓ*MÐNð %ó 
ˆð 	×Ñ˜Ÿ™¨Ö,r;   c                óÀ   € V P                  R 4      pV P                  \        VP                  P	                  R4      4      RV P
                  ,           R,           4       R# )rm  r¥  ó   "N)r—  rŠ   r   rh  re   rx  ró   s   & r9   Útest_static_etagÚStaticFileTest.test_static_etagN  sL   € Ø×$Ñ$Ð%9Ó:ˆØ×ÑÜ�×!Ñ!×%Ñ% fÓ-Ó.°°t×7KÑ7KÕ0KÈdÕ0Rö	
r;   c                óä  € V P                  R RR/R7      pV P                  VP                  ^Î4       V P                  VP                  R4       V P                  \	        VP
                  P                  R4      4      RV P                  ,           R,           4       V P                  VP
                  P                  R4      R4       V P                  VP
                  P                  R	4      R
4       R# )rm  ÚRangez	bytes=0-9ro  s
   User-agentr¥  r¹  r�  Ú10úContent-Rangezbytes 0-9/26N)r—  rŠ   rï   rì   r   rh  re   rx  ró   s   & r9   Útest_static_with_rangeÚ%StaticFileTest.test_static_with_rangeT  sÉ   € Ø×$Ñ$Ø ¨7°KÐ*@ð %ó 
ˆð 	×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨Ô6Ø×ÑÜ�×!Ñ!×%Ñ% fÓ-Ó.°°t×7KÑ7KÕ0KÈdÕ0Rô	
ð 	×Ñ˜×)Ñ)×-Ñ-Ð.>Ó?ÀÔFØ×Ñ˜×)Ñ)×-Ñ-¨oÓ>ÀÖOr;   c           	     ó.  € V P                  R RR/R7      pV P                  VP                  ^È4       \        P                  P                  V P                  R4      p\        VRR7      ;_uu_ 4       pV P                  VP                  \        VP                  4       4      4       RRR4       V P                  VP                  P                  R4      R	4       V P                  VP                  P                  R
4      4       R#   + '       g   i     Lg; i)rm  r½  zbytes=0-ro  ú
robots.txtúutf-8©rA  Nr�  Ú26r¿  ©r—  rŠ   rï   r3   r4   r5   Ú
static_dirÚopenrì   r   Úreadrh  re   r›   ©rC   rô   Úrobots_file_pathÚfs   &   r9   Ú test_static_with_range_full_fileÚ/StaticFileTest.test_static_with_range_full_file`  sÍ   € Ø×$Ñ$Ø ¨7°JÐ*?ð %ó 
ˆð
 	×Ñ˜Ÿ™¨Ô,ÜŸ7™7Ÿ<™<¨¯©¸ÓFÐÜÐ"¨W×5Õ5¸Ø×Ñ˜XŸ]™]¬D°·±³«NÔ;÷ 6à×Ñ˜×)Ñ)×-Ñ-Ð.>Ó?ÀÔFØ×Ñ˜(×*Ñ*×.Ñ.¨Ó?Ö@÷ 6×5úó   Á14DÄD	c           	     ó.  € V P                  R RR/R7      pV P                  VP                  ^È4       \        P                  P                  V P                  R4      p\        VRR7      ;_uu_ 4       pV P                  VP                  \        VP                  4       4      4       RRR4       V P                  VP                  P                  R4      R	4       V P                  VP                  P                  R
4      4       R#   + '       g   i     Lg; i)rm  r½  zbytes=0-10000000ro  rÃ  rÄ  rÅ  Nr�  rÆ  r¿  rÇ  rË  s   &   r9   Ú$test_static_with_range_full_past_endÚ3StaticFileTest.test_static_with_range_full_past_endm  sÎ   € Ø×$Ñ$Ø ¨7Ð4FÐ*Gð %ó 
ˆð 	×Ñ˜Ÿ™¨Ô,ÜŸ7™7Ÿ<™<¨¯©¸ÓFÐÜÐ"¨W×5Õ5¸Ø×Ñ˜XŸ]™]¬D°·±³«NÔ;÷ 6à×Ñ˜×)Ñ)×-Ñ-Ð.>Ó?ÀÔFØ×Ñ˜(×*Ñ*×.Ñ.¨Ó?Ö@÷ 6×5úrÐ  c           	     ó>  € V P                  R RR/R7      pV P                  VP                  ^Î4       \        P                  P                  V P                  R4      p\        VRR7      ;_uu_ 4       pV P                  VP                  \        VP                  4       R,          4      4       RRR4       V P                  VP                  P                  R	4      R
4       V P                  VP                  P                  R4      R4       R#   + '       g   i     Lh; i)rm  r½  zbytes=1-10000000ro  rÃ  rÄ  rÅ  :r³   NNNr�  Ú25r¿  zbytes 1-25/26)r—  rŠ   rï   r3   r4   r5   rÈ  rÉ  rì   r   rÊ  rh  re   rË  s   &   r9   Ú'test_static_with_range_partial_past_endÚ6StaticFileTest.test_static_with_range_partial_past_endx  sÕ   € Ø×$Ñ$Ø ¨7Ð4FÐ*Gð %ó 
ˆð 	×Ñ˜Ÿ™¨Ô,ÜŸ7™7Ÿ<™<¨¯©¸ÓFÐÜÐ"¨W×5Õ5¸Ø×Ñ˜XŸ]™]¬D°·±³¸"µÓ,>Ô?÷ 6à×Ñ˜×)Ñ)×-Ñ-Ð.>Ó?ÀÔFØ×Ñ˜×)Ñ)×-Ñ-¨oÓ>ÀÖP÷ 6×5ús   Á1;DÄD	c                ó  € V P                  R RR/R7      pV P                  VP                  R4       V P                  VP                  P	                  R4      R4       V P                  VP                  P	                  R4      R4       R	# )
rm  r½  z	bytes=22-ro  ó   : /
r�  rb  r¿  úbytes 22-25/26N©r—  rŠ   rì   rh  re   ró   s   & r9   Útest_static_with_range_end_edgeÚ.StaticFileTest.test_static_with_range_end_edgeƒ  s{   € Ø×$Ñ$Ø ¨7°KÐ*@ð %ó 
ˆð 	×Ñ˜Ÿ™¨Ô1Ø×Ñ˜×)Ñ)×-Ñ-Ð.>Ó?ÀÔEØ×Ñ˜×)Ñ)×-Ñ-¨oÓ>Ð@PÖQr;   c                ó  € V P                  R RR/R7      pV P                  VP                  R4       V P                  VP                  P	                  R4      R4       V P                  VP                  P	                  R4      R4       R	# )
rm  r½  zbytes=-4ro  rÙ  r�  rb  r¿  rÚ  NrÛ  ró   s   & r9   Útest_static_with_range_neg_endÚ-StaticFileTest.test_static_with_range_neg_end‹  s{   € Ø×$Ñ$Ø ¨7°JÐ*?ð %ó 
ˆð 	×Ñ˜Ÿ™¨Ô1Ø×Ñ˜×)Ñ)×-Ñ-Ð.>Ó?ÀÔEØ×Ñ˜×)Ñ)×-Ñ-¨oÓ>Ð@PÖQr;   c           	     ó.  € V P                  R RR/R7      pV P                  VP                  ^È4       \        P                  P                  V P                  R4      p\        VRR7      ;_uu_ 4       pV P                  VP                  \        VP                  4       4      4       RRR4       V P                  VP                  P                  R4      R	4       V P                  VP                  P                  R
4      4       R#   + '       g   i     Lg; i)rm  r½  zbytes=-1000000ro  rÃ  rÄ  rÅ  Nr�  rÆ  r¿  rÇ  rË  s   &   r9   Ú%test_static_with_range_neg_past_startÚ4StaticFileTest.test_static_with_range_neg_past_start“  sÎ   € Ø×$Ñ$Ø ¨7Ð4DÐ*Eð %ó 
ˆð 	×Ñ˜Ÿ™¨Ô,ÜŸ7™7Ÿ<™<¨¯©¸ÓFÐÜÐ"¨W×5Õ5¸Ø×Ñ˜XŸ]™]¬D°·±³«NÔ;÷ 6à×Ñ˜×)Ñ)×-Ñ-Ð.>Ó?ÀÔFØ×Ñ˜(×*Ñ*×.Ñ.¨Ó?Ö@÷ 6×5úrÐ  c                óh   € V P                  R RR/R7      pV P                  VP                  ^È4       R# )rm  r½  r  ro  Nr­  ró   s   & r9   Útest_static_invalid_rangeÚ(StaticFileTest.test_static_invalid_rangež  s1   € Ø×$Ñ$Ð%9ÀGÈVÐCTÐ$ÓUˆØ×Ñ˜Ÿ™¨Ö,r;   c                ó¾   € V P                  R RR/R7      pV P                  VP                  P                  R4      R4       V P                  VP                  R4       R# )rm  r½  zbytes=-0ro  r¿  ú
bytes */26é   N)r—  rŠ   rh  re   rï   ró   s   & r9   Ú+test_static_unsatisfiable_range_zero_suffixÚ:StaticFileTest.test_static_unsatisfiable_range_zero_suffix¢  sX   € Ø×$Ñ$Ø ¨7°JÐ*?ð %ó 
ˆð 	×Ñ˜×)Ñ)×-Ñ-¨oÓ>ÀÔMØ×Ñ˜Ÿ™¨Ö,r;   c                ó¾   € V P                  R RR/R7      pV P                  VP                  R4       V P                  VP                  P	                  R4      R4       R# )rm  r½  zbytes=26ro  ré  r¿  rè  N©r—  rŠ   rï   rh  re   ró   s   & r9   Ú-test_static_unsatisfiable_range_invalid_startÚ<StaticFileTest.test_static_unsatisfiable_range_invalid_start©  sX   € Ø×$Ñ$Ø ¨7°JÐ*?ð %ó 
ˆð 	×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)×-Ñ-¨oÓ>ÀÖMr;   c                ó¾   € V P                  R RR/R7      pV P                  VP                  R4       V P                  VP                  P	                  R4      R4       R# )rm  r½  z
bytes=10-3ro  ré  r¿  rè  Nrí  ró   s   & r9   Ú3test_static_unsatisfiable_range_end_less_than_startÚBStaticFileTest.test_static_unsatisfiable_range_end_less_than_start°  sX   € Ø×$Ñ$Ø ¨7°LÐ*Að %ó 
ˆð 	×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)×-Ñ-¨oÓ>ÀÖMr;   c                ój  € V P                  R RR7      pV P                  VP                  ^È4       V P                  VP                  R4       V P                  VP                  R,          R4       V P                  \        VP                  R,          4      RV P                  ,           R,           4       R# )	rm  rŒ  ©rë   r;   r�  rÆ  r¥  r¹  N©rí   rŠ   rï   rì   rh  r   rx  ró   s   & r9   Útest_static_headÚStaticFileTest.test_static_head·  sŒ   € Ø—:‘:Ð2¸6�:ÓBˆØ×Ñ˜Ÿ™¨Ô,à×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)Ð*:Õ;¸TÔBØ×ÑÜ�×!Ñ! &Õ)Ó*¨D°4×3GÑ3GÕ,GÈ$Õ,Nö	
r;   c                óp  € V P                  R RRR/R7      pV P                  VP                  ^Î4       V P                  VP                  R4       V P                  VP                  R,          R4       V P                  \        VP                  R,          4      R	V P                  ,           R	,           4       R
# )rm  rŒ  r½  ú	bytes=1-4)rë   rh  r;   r�  rb  r¥  r¹  Nrõ  ró   s   & r9   Útest_static_head_rangeÚ%StaticFileTest.test_static_head_rangeÁ  sš   € Ø—:‘:Ø ¨¸'À;Ð9Oð ó 
ˆð 	×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)Ð*:Õ;¸SÔAØ×ÑÜ�×!Ñ! &Õ)Ó*¨D°4×3GÑ3GÕ,GÈ$Õ,Nö	
r;   c                ó”  € V P                  R RRRRV P                  ,           R,           /R7      pV P                  VP                  R4       V P                  VP                  R4       V P                  RVP                  4       V P                  \        VP                  R	,          4      RV P                  ,           R,           4       R
# )rm  r½  rù  r¤  r¹  ro  rœ  r;   r�  r¥  N)r—  rx  rŠ   rï   rì   r  rh  r   ró   s   & r9   Útest_static_range_if_none_matchÚ.StaticFileTest.test_static_range_if_none_matchÌ  s­   € Ø×$Ñ$Ø à˜Ø ¨×(<Ñ(<Õ!<¸tÕ!Cðð %ó 
ˆð 	×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨Ô,Ø×ÑÐ)¨8×+;Ñ+;Ô<Ø×ÑÜ�×!Ñ! &Õ)Ó*¨D°4×3GÑ3GÕ,GÈ$Õ,Nö	
r;   c                ó`   € V P                  R 4      pV P                  VP                  R4       R# )z/static/blargé”  Nr­  ró   s   & r9   Útest_static_404ÚStaticFileTest.test_static_404Û  s&   € Ø×$Ñ$ _Ó5ˆØ×Ñ˜Ÿ™¨Ö,r;   c                óÈ   € \        \        R 4      ;_uu_ 4        V P                  R4      pRRR4       V P                  XP                  R4       R#   + '       g   i     L.; i)z.*is not a fileú/static/dir/Né“  )r   r   r—  rŠ   rï   ró   s   & r9   Ú.test_static_directory_without_default_filenameÚ=StaticFileTest.test_static_directory_without_default_filenameß  sD   € ô ”wÐ 1×2Õ2Ø×(Ñ(¨Ó8ˆH÷ 3à×Ñ˜Ÿ™¨Ö,÷ 3×2úó   ™AÁA!	c                ó  € V P                   P                  4        \        4       V n         \        \        R 4      ;_uu_ 4        V P                  R4      pRRR4       V P                  XP                  R4       R#   + '       g   i     L.; i)z.*not in root static directoryz/static/../static_foo.txtNr  )Úhttp_clientrî  r   r   r   r—  rŠ   rï   ró   s   & r9   Útest_path_traversal_protectionÚ-StaticFileTest.test_path_traversal_protectionç  sf   € ð 	×Ñ×ÑÔ Ü0Ó2ˆÔÜ”wÐ @×AÕAØ×(Ñ(Ð)DÓEˆH÷ Bð 	×Ñ˜Ÿ™¨Ö,÷ B×Aús   ÁA:Á:B
	Úposixúnon-posix OSc                ód  € \         P                  P                  \         P                  P                  \         P                  P	                  \
        4      4      R 4      pV P                  R\        P                  P                  V4      ,           4      pV P                  VP                  ^È4       R# )r‚  z/root_staticN)r3   r4   r5   r6   Úabspathr7   r—  rõ  rö  r  rŠ   rï   )rC   r4   rô   s   &  r9   Útest_root_static_pathÚ$StaticFileTest.test_root_static_pathô  sp   € ô �w‰w�|‰|Ü�G‰G�O‰OœBŸG™GŸO™O¬HÓ5Ó6Ð8Kó
ˆð ×$Ñ$ ^´f·l±l×6HÑ6HÈÓ6NÕ%NÓOˆØ×Ñ˜Ÿ™¨Ö,r;   )r
  N)5rN   rO   rP   rQ   rx  r3   r4   r5   r6   r7   rÈ  r?   r@   rn  rr  ru  ry  r|  r  rƒ  r‡  r†  r—  r¡  r§  rª  r®  r±  r¶  rº  rÀ  rÎ  rÒ  rÖ  rÜ  rß  râ  rå  rê  rî  rñ  rö  rú  rý  r  r  r  ÚunittestÚskipIfru   r  rS   rT   rU   s   @r9   rE  rE  �  s  ø‡ € ð	Lð ð —‘—‘˜bŸg™gŸo™o¨hÓ7¸ÓB€Jò#
òJ3òMò3ò
òYò
ò?òWò/ò9ò
ò*>ò.ò	.ò-ò-ò-ò$
ò
PòAò	Aò	QòRòRò	Aò-ò-òNòNò
ò	
ò
ò-ò-ò-ð ‡_‚_�R—W‘W Ñ'¨Ó8ñ	-ó 9ö	-r;   rE  r  r  c                   ór   a a€ ] tR tRt oRtV 3R ltR tR tR tR t	R t
R	 tR
 tR tR tR tRtVtV ;t# )ÚStaticFileSymlinkTesti  z}Symlinks must not be followed out of the static directory unless the
application opts in with ``allowed_symlink_directory``.
c                óª  <€ \         P                  ! 4       V n        V P                  \        P
                  V P                  4       \        P                  P                  V P                  R 4      V n	        \        P                  P                  V P                  R4      V n
        \        P                  ! V P                  4       \        P                  ! V P                  4       \        \        P                  P                  V P                  R4      R4      ;_uu_ 4       pVP                  R4       RRR4       \        \        P                  P                  V P                  R4      R4      ;_uu_ 4       pVP                  R4       RRR4       \        \        P                  P                  V P                  R4      R4      ;_uu_ 4       pVP                  R	4       RRR4       \        P                  ! \        P                  P                  V P                  R4      \        P                  P                  V P                  R
4      4       \        P                  ! V P                  \        P                  P                  V P                  R4      4       \        P                  ! \        P                  P                  V P                  R4      4       \        P                  ! \        P                  P                  V P                  R4      \        P                  P                  V P                  R4      4       \        P                  ! \        P                  P                  V P                  R4      \        P                  P                  V P                  R4      4       \        P                  ! \        P                  P                  V P                  R4      \        P                  P                  V P                  R4      4       \        SV `A  4        R#   + '       g   i     ELð; i  + '       g   i     EL®; i  + '       g   i     ELl; i)rF  Úoutsideú
inside.txtÚwÚinsideNú
secret.txtÚsecretú
index.htmlz
root indexúlink.txtÚlinkdirÚrealdirÚlink_existsÚnopeÚlink_missingúinternal.txt)ÚtempfileÚmkdtempÚtmpdirÚ
addCleanupÚshutilÚrmtreer3   r4   r5   Úrootr  ÚmkdirrÉ  rd   ÚsymlinkrŸ  ÚsetUp)rC   rÍ  r¤  s   & €r9   r/  ÚStaticFileSymlinkTest.setUp  sp  ø€ Ü×&Ò&Ó(ˆŒØ�‰œŸ™ t§{¡{Ô3Ü—G‘G—L‘L §¡¨hÓ7ˆŒ	Ü—w‘w—|‘| D§K¡K°Ó;ˆŒÜ
�Š�—‘ÔÜ
�Š�—‘ÔÜ”"—'‘'—,‘,˜tŸy™y¨,Ó7¸×=Ô=ÀØ�G‰G�HÔ÷ >ä”"—'‘'—,‘,˜tŸ|™|¨\Ó:¸C×@Ô@ÀAØ�G‰G�HÔ÷ Aä”"—'‘'—,‘,˜tŸy™y¨,Ó7¸×=Ô=ÀØ�G‰G�LÔ!÷ >ô 	�
Š
Ü�G‰G�L‰L˜Ÿ™ |Ó4Ü�G‰G�L‰L˜Ÿ™ JÓ/ô	
ô
 	�
Š
�4—<‘<¤§¡§¡¨d¯i©i¸Ó!CÔDô 	�Š”—‘—‘˜dŸl™l¨IÓ6Ô7Ü
�
Š
Ü�G‰G�L‰L˜Ÿ™ yÓ1Ü�G‰G�L‰L˜Ÿ™ MÓ2ô	
ô 	�
Š
Ü�G‰G�L‰L˜Ÿ™ vÓ.Ü�G‰G�L‰L˜Ÿ™ NÓ3ô	
ô
 	�
Š
Ü�G‰G�L‰L˜Ÿ™ LÓ1Ü�G‰G�L‰L˜Ÿ™ NÓ3ô	
ô 	‰‰Ž÷; >×=Ð=úç@×@Ð@úç=×=Ð=ús$   Ä PÅ6P-ÇQÐP*	Ð-P>	ÑQ	c           	     óÆ   € R \         \        V P                  R7      3R\         \        V P                  V P                  R7      3R\         \        V P                  RR7      3.# )z/default/(.*)r+  z/permissive/(.*))r4   Úallowed_symlink_directoryz/default_filename/(.*)r  )r4   Údefault_filename)r   rp   r,  r(  rB   s   &r9   r?   Ú"StaticFileSymlinkTest.get_handlers-  sX   € àÔ/´¸4¿9¹9Ô1EÐFà"Ü!Ü˜$Ÿ)™)¸t¿{¹{ÔKðð )Ü!Ü˜$Ÿ)™)°lÔCðð
ð 	
r;   c                ó   € \        4       # r2   ræ   rB   s   &r9   r@   Ú$StaticFileSymlinkTest.get_app_kwargs<  ó	   € Ü‹vˆr;   c                ó˜   € V P                  R 4      pV P                  VP                  ^È4       V P                  VP                  R4       R# )z/default/inside.txtó   insideN©rí   rŠ   rï   rì   ró   s   & r9   Útest_regular_fileÚ'StaticFileSymlinkTest.test_regular_file?  s9   € Ø—:‘:Ð3Ó4ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨	Ö2r;   c                ó˜   € V P                  R 4      pV P                  VP                  ^È4       V P                  VP                  R4       R# )z/default/internal.txtr9  Nr:  ró   s   & r9   Útest_symlink_within_rootÚ.StaticFileSymlinkTest.test_symlink_within_rootD  s9   € à—:‘:Ð5Ó6ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨	Ö2r;   c                óÈ   € \        \        R 4      ;_uu_ 4        V P                  R4      pRRR4       V P                  XP                  R4       R#   + '       g   i     L.; i)ú!.*is not in root static directoryz/default/link.txtNr  rÈ  ró   s   & r9   Ú!test_symlinked_file_escaping_rootÚ7StaticFileSymlinkTest.test_symlinked_file_escaping_rootJ  sC   € Ü”wÐ C×DÕDØ—z‘zÐ"5Ó6ˆH÷ Eà×Ñ˜Ÿ™¨Ö,÷ E×Dúr  c                óÈ   € \        \        R 4      ;_uu_ 4        V P                  R4      pRRR4       V P                  XP                  R4       R#   + '       g   i     L.; i)rA  z/default/linkdir/secret.txtNr  rÈ  ró   s   & r9   Ú&test_symlinked_directory_escaping_rootÚ<StaticFileSymlinkTest.test_symlinked_directory_escaping_rootO  sC   € Ü”wÐ C×DÕDØ—z‘zÐ"?Ó@ˆH÷ Eà×Ñ˜Ÿ™¨Ö,÷ E×Dúr  c                ó˜   € V P                  R 4      pV P                  VP                  ^È4       V P                  VP                  R4       R# )ú/default_filename/s
   root indexNr:  ró   s   & r9   Útest_served_directory_itselfÚ2StaticFileSymlinkTest.test_served_directory_itselfT  s;   € ð —:‘:Ð2Ó3ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨Ö6r;   c                ó  € \         P                  ! \         P                  P                  V P                  R 4      4       \         P
                  ! \         P                  P                  V P                  R4      \         P                  P                  V P                  R R4      4       \        \        R4      ;_uu_ 4        V P                  R4      pRRR4       V P                  XP                  R4       R#   + '       g   i     L.; i)Údirr  r  rA  z/default_filename/dir/Nr  )r3   r-  r4   r5   r,  r.  r  r   r   rí   rŠ   rï   ró   s   & r9   Útest_symlinked_default_filenameÚ5StaticFileSymlinkTest.test_symlinked_default_filename\  s    € ô 	�Š”—‘—‘˜dŸi™i¨Ó/Ô0Ü
�
Š
Ü�G‰G�L‰L˜Ÿ™ |Ó4Ü�G‰G�L‰L˜Ÿ™ E¨<Ó8ô	
ô ”wÐ C×DÕDØ—z‘zÐ":Ó;ˆH÷ Eà×Ñ˜Ÿ™¨Ö,÷ E×Dús   Â?C7Ã7D	c           
     ó  € . pR FW  p\        \        R4      ;_uu_ 4        VP                  V P                  RV,           RR7      P                  4       RRR4       KY  	  V P                  VRR.4       R#   + '       g   i     K‚  ; i)r"  rA  rH  Fr¿  Nr  )r"  r$  )r   r   r€  rí   rï   rŠ   )rC   Úcodesru   s   &  r9   Ú0test_no_existence_oracle_for_symlinked_directoryÚFStaticFileSymlinkTest.test_no_existence_oracle_for_symlinked_directoryh  su   € ð ˆÛ3ˆDÜœ7Ð$G×HÕHØ—‘Ø—J‘JÐ3°dÕ:ÈU�JÓS×XÑXô÷ IÑHñ 4ð
 	×Ñ˜  c 
Ö+÷	 I×HÐHús    4A6Á6Bc                ó*  € V P                  R 4      pV P                  VP                  ^È4       V P                  VP                  R4       V P                  R4      pV P                  VP                  ^È4       V P                  VP                  R4       R# )z/permissive/link.txts   secretz/permissive/linkdir/secret.txtNr:  ró   s   & r9   Útest_allowed_symlink_directoryÚ4StaticFileSymlinkTest.test_allowed_symlink_directoryw  sr   € ð —:‘:Ð4Ó5ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨	Ô2à—:‘:Ð>Ó?ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨	Ö2r;   )r  r,  r(  )rN   rO   rP   rQ   rR   r/  r?   r@   r;  r>  rB  rE  rI  rM  rQ  rT  rS   rT   r
  r  s   @@r9   r  r    sG   ù‡ € ñõ$òL
òò3ò
3ò-ò
-ò
7ò
-ò,÷	3ò 	3r;   r  c                   óX   a a€ ] tR tRt oRtR t]R 4       tV 3R ltV3R lt	Rt
VtV ;t# )ÚMultiRootStaticFileHandleriƒ  a‡  A subclass that searches a list of directories.

It replaces ``initialize`` without calling ``super().initialize()``, so
``allowed_symlink_directory`` is never set, and it puts something other
than a string in ``self.root``, passing the directory that matched to
``validate_absolute_path``. The symlink check must run against that
directory. Jupyter's ``FileFindHandler`` is built this way.
c                óv   € \         ;QJ d    . R  V 4       F  NK  	  5M! R  V 4       4      V n        RV n        R# )c              3   óž   "  € T FC  p\         P                  P                  V4      \         P                  P                  ,           x € KE  	  R # 5ir2   )r3   r4   r  Úsep)Ú.0Úps   & r9   Ú	<genexpr>Ú8MultiRootStaticFileHandler.initialize.<locals>.<genexpr>�  s-   é € ÐIÁD¸qœ"Ÿ'™'Ÿ/™/¨!Ó,¬r¯w©w¯{©{×:Ò:ÃDùs   ‚AAN)Útupler,  r3  rØ   s   &&r9   r¯  Ú%MultiRootStaticFileHandler.initialize�  s*   € ß”EÑIÁDÓI—E‘EÑIÁDÓIÓIˆŒ	Ø $ˆÖr;   c                óf  € V Fh  p\         P                  P                  \         P                  P                  W24      4      p\         P                  P	                  V4      '       g   Kf  Vu # 	  \         P                  P                  \         P                  P                  V^ ,          V4      4      # rÝ  )r3   r4   r  r5   Úexists)ÚclsÚrootsr4   r,  Ú	candidates   &&&  r9   Úget_absolute_pathÚ,MultiRootStaticFileHandler.get_absolute_path“  sl   € ãˆDÜŸ™Ÿ™¬¯©¯©°TÓ(@ÓAˆIÜ�w‰w�~‰~˜i×(Ô(Ø Ò ñ ô �w‰w�‰œrŸw™wŸ|™|¨E°!­H°dÓ;Ó<Ð<r;   c                ó¼   <€ V P                    F=  pV\        P                  P                  ,           P	                  V4      '       g   K;  Tp M	  \
        SV `  W4      # r2   )r,  r3   r4   rZ  r‘  rŸ  Úvalidate_absolute_path)rC   r,  Úabsolute_pathre  r¤  s   &&& €r9   ri  Ú1MultiRootStaticFileHandler.validate_absolute_path›  sI   ø€ ØŸœˆIØ¤§¡§¡Õ+×7Ñ7¸	×BÔBØ �Ùñ #ô ‰wÑ-¨dÓBÐBr;   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # )é   r,  )r_  )ÚformatrV   s   "€r9   Ú__annotate__Ú'MultiRootStaticFileHandler.__annotate__ƒ  s   ø‡ ‚ ñ �Kò r;   )r3  r,  )rN   rO   rP   rQ   rR   r¯  Úclassmethodrf  ri  Ú__annotate_func__rS   rT   r
  r  s   @@r9   rW  rW  ƒ  s0   ù‡ € ñò%ð ñ=ó ð=õC÷1 … r;   rW  c                   óZ   a a€ ] tR tRt oRtV 3R ltR tR tR tR t	R t
R	 tR
tVtV ;t# )ÚStaticFileMultiRootTesti£  z°Subclasses that search several directories and never set
``allowed_symlink_directory`` must keep working (issue #3724).

SECURITY REGRESSION of CVE-2026-103263 (LP: #2172317).
c                ój  <€ \         P                  ! 4       V n        V P                  \        P
                  V P                  4       \        P                  P                  V P                  R 4      V n	        \        P                  P                  V P                  R4      V n
        \        P                  P                  V P                  R4      V n        V P                  V P                  V P                  3 F  p\        P                  ! V4       K  	  \        \        P                  P                  V P                  R4      RRR7      ;_uu_ 4       pVP                  R4       RRR4       \        \        P                  P                  V P                  R	4      RRR7      ;_uu_ 4       pVP                  R
4       RRR4       \        \        P                  P                  V P                  R4      RRR7      ;_uu_ 4       pVP                  R4       RRR4       \        P                  ! \        P                  P                  V P                  R4      \        P                  P                  V P                  R4      4       \        P                  ! \        P                  P                  V P                  R4      \        P                  P                  V P                  R4      4       \         SV `E  4        R#   + '       g   i     ELŸ; i  + '       g   i     EL[; i  + '       g   i     EL; i)Ústatic1Ústatic2r  zone.txtr  rÄ  rÅ  ÚoneNztwo.txtÚtwor  r  r%  r  )r&  r'  r(  r)  r*  r+  r3   r4   r5   Úroot1Úroot2r  r-  rÉ  rd   r.  rŸ  r/  )rC   r=  rÍ  r¤  s   &  €r9   r/  ÚStaticFileMultiRootTest.setUp«  sà  ø€ Ü×&Ò&Ó(ˆŒØ�‰œŸ™ t§{¡{Ô3Ü—W‘W—\‘\ $§+¡+¨yÓ9ˆŒ
Ü—W‘W—\‘\ $§+¡+¨yÓ9ˆŒ
Ü—w‘w—|‘| D§K¡K°Ó;ˆŒØ—*‘*˜dŸj™j¨$¯,©,Ó7ˆAÜ�HŠH�QŽKñ 8ä”"—'‘'—,‘,˜tŸz™z¨9Ó5°sÀW×MÕMÐQRØ�G‰G�EŒN÷ Nä”"—'‘'—,‘,˜tŸz™z¨9Ó5°sÀW×MÕMÐQRØ�G‰G�EŒN÷ Nä”"—'‘'—,‘,˜tŸ|™|¨\Ó:¸CÈ'×RÕRÐVWØ�G‰G�HÔ÷ Sä
�
Š
Ü�G‰G�L‰L˜Ÿ™ YÓ/Ü�G‰G�L‰L˜Ÿ™ ^Ó4ô	
ô 	�
Š
Ü�G‰G�L‰L˜Ÿ™ |Ó4Ü�G‰G�L‰L˜Ÿ™ ZÓ0ô	
ô 	‰‰Ž÷ N×MÐMúçM×MÐMúçR×RÐRús$   ÅK9Æ)LÈL!Ë9L
	ÌL	Ì!L2	c                óV   € R \         \        V P                  V P                  .R7      3.# )z/multi/(.*)r+  )rW  rp   rz  r{  rB   s   &r9   r?   Ú$StaticFileMultiRootTest.get_handlersÃ  s.   € ð Ü*Ü˜4Ÿ:™: t§z¡zÐ2Ô3ðð
ð 	
r;   c                ó   € \        4       # r2   ræ   rB   s   &r9   r@   Ú&StaticFileMultiRootTest.get_app_kwargsÌ  r7  r;   c                ó˜   € V P                  R 4      pV P                  VP                  ^È4       V P                  VP                  R4       R# )z/multi/one.txts   oneNr:  ró   s   & r9   Útest_first_rootÚ'StaticFileMultiRootTest.test_first_rootÏ  ó9   € Ø—:‘:Ð.Ó/ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨Ö/r;   c                ó˜   € V P                  R 4      pV P                  VP                  ^È4       V P                  VP                  R4       R# )z/multi/two.txts   twoNr:  ró   s   & r9   Útest_second_rootÚ(StaticFileMultiRootTest.test_second_rootÔ  r„  r;   c                óÈ   € \        \        R 4      ;_uu_ 4        V P                  R4      pRRR4       V P                  XP                  R4       R#   + '       g   i     L.; i)rA  z/multi/internal.txtNr  rÈ  ró   s   & r9   Ú#test_symlink_to_other_root_rejectedÚ;StaticFileMultiRootTest.test_symlink_to_other_root_rejectedÙ  sE   € ô ”wÐ C×DÕDØ—z‘zÐ"7Ó8ˆH÷ Eà×Ñ˜Ÿ™¨Ö,÷ E×Dúr  c                óÈ   € \        \        R 4      ;_uu_ 4        V P                  R4      pRRR4       V P                  XP                  R4       R#   + '       g   i     L.; i)rA  z/multi/link.txtNr  rÈ  ró   s   & r9   Ú$test_symlink_escaping_roots_rejectedÚ<StaticFileMultiRootTest.test_symlink_escaping_roots_rejectedà  sC   € Ü”wÐ C×DÕDØ—z‘zÐ"3Ó4ˆH÷ Eà×Ñ˜Ÿ™¨Ö,÷ E×Dúr  )r  rz  r{  r(  )rN   rO   rP   rQ   rR   r/  r?   r@   r‚  r†  r‰  rŒ  rS   rT   r
  r  s   @@r9   rt  rt  £  s2   ù‡ € ñõò0
òò0ò
0ò
-÷-ò -r;   rt  c                   óŽ   a a€ ] tR tRt oRtV 3R ltR tR t]P                  ! ]
P                  R8g  R4      R 4       tR	tVtV ;t# )
ÚStaticFileSymlinkedRootTestiæ  zhThe root itself may be reached through a symlink; that must not make
every request look like an escape.
c                óˆ  <€ \         P                  ! 4       V n        V P                  \        P
                  V P                  4       \        P                  P                  V P                  R 4      p\        P                  ! V4       \        \        P                  P                  VR4      R4      ;_uu_ 4       pVP                  R4       RRR4       \        P                  P                  V P                  R4      V n        \        P                  ! WP                  4       \        SV `=  4        R#   + '       g   i     Lo; i)Úrealr  r  r  NÚlink)r&  r'  r(  r)  r*  r+  r3   r4   r5   r-  rÉ  rd   r,  r.  rŸ  r/  )rC   Ú	real_rootrÍ  r¤  s   &  €r9   r/  Ú!StaticFileSymlinkedRootTest.setUpë  sº   ø€ Ü×&Ò&Ó(ˆŒØ�‰œŸ™ t§{¡{Ô3Ü—G‘G—L‘L §¡¨fÓ5ˆ	Ü
�Š�ÔÜ”"—'‘'—,‘,˜y¨,Ó7¸×=Ô=ÀØ�G‰G�HÔ÷ >ô —G‘G—L‘L §¡¨fÓ5ˆŒ	Ü
�
Š
�9Ÿi™iÔ(Ü‰‰Ž÷ >×=ús   Â8D1Ä1E	c                ó>   € R \         \        V P                  R7      3.# )z/static/(.*)r+  )r   rp   r,  rB   s   &r9   r?   Ú(StaticFileSymlinkedRootTest.get_handlers÷  s   € ØÔ!2´D¸d¿i¹iÔ4HÐIÐJÐJr;   c                ó   € \        4       # r2   ræ   rB   s   &r9   r@   Ú*StaticFileSymlinkedRootTest.get_app_kwargsú  r7  r;   r  r  c                ó˜   € V P                  R 4      pV P                  VP                  ^È4       V P                  VP                  R4       R# )z/static/inside.txtr9  Nr:  ró   s   & r9   Útest_symlinked_rootÚ/StaticFileSymlinkedRootTest.test_symlinked_rootý  s9   € à—:‘:Ð2Ó3ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨	Ö2r;   )r,  r(  )rN   rO   rP   rQ   rR   r/  r?   r@   r  r  r3   ru   rš  rS   rT   r
  r  s   @@r9   r�  r�  æ  sG   ù‡ € ñõ
òKòð ‡_‚_�R—W‘W Ñ'¨Ó8ñ3ó 9÷3ð 3r;   r�  c                   ó8   a € ] tR tRt o R tR tR tR tRtV t	R# )ÚStaticDefaultFilenameTesti  c                óB   € \        \        R 4      \        RR7      R7      # ©rF  r  ©r3  )rg  Ústatic_handler_argsrh  rB   s   &r9   r@   Ú(StaticDefaultFilenameTest.get_app_kwargs  ó   € ÜÜ Ó)Ü $°lÔ Cô
ð 	
r;   c                ó   € . # r2   rK   rB   s   &r9   r?   Ú&StaticDefaultFilenameTest.get_handlers  rM   r;   c                óœ   € V P                  R RR7      pV P                  VP                  ^È4       V P                  RVP                  4       R# )r  Fr¿  s   this is the index
Nr:  ró   s   & r9   Útest_static_default_filenameÚ6StaticDefaultFilenameTest.test_static_default_filename  s=   € Ø—:‘:˜n¸u�:ÓEˆØ×Ñ˜Ÿ™¨Ô,Ø×ÑÐ/°·±Ö?r;   c                óÆ   € V P                  R RR7      pV P                  VP                  R4       V P                  VP                  R,          P                  R4      4       R# )ú/static/dirFr¿  rá  rÂ  r  N)rí   rŠ   rï   rñ   rh  Úendswithró   s   & r9   Útest_static_default_redirectÚ6StaticDefaultFilenameTest.test_static_default_redirect  sJ   € Ø—:‘:˜m¸e�:ÓDˆØ×Ñ˜Ÿ™¨Ô,Ø�‰˜×(Ñ(¨Õ4×=Ñ=¸nÓMÖNr;   rK   N)
rN   rO   rP   rQ   r@   r?   r§  r¬  rS   rT   rU   s   @r9   r�  r�    s!   ø‡ € ò
òò@÷
Oð Or;   r�  c                   ó8   a € ] tR tRt o R tR tR tR tRtV t	R# )ÚStaticDefaultFilenameRootTesti  c                ó~   € \        \        P                  P                  \	        R 4      4      \        RR7      RR7      # )rF  r  r   rZ   )rg  r¡  Ústatic_url_prefix)rp   r3   r4   r  r:   rB   s   &r9   r@   Ú,StaticDefaultFilenameRootTest.get_app_kwargs  s/   € ÜÜŸ™Ÿ™¬°Ó(9Ó:Ü $°lÔ CØ!ô
ð 	
r;   c                ó   € . # r2   rK   rB   s   &r9   r?   Ú*StaticDefaultFilenameRootTest.get_handlers!  rM   r;   c                ó   € \        4       # r2   r   rB   s   &r9   Úget_http_clientÚ-StaticDefaultFilenameRootTest.get_http_client$  s   € ô %Ó&Ð&r;   c                ó®  € \         P                  P                  \        4      p\         P                  P	                  V4      w  r#\         P
                  R 8X  d   V P                  W14       MTp\        \        R4      ;_uu_ 4        V P                  RV R2RR7      pRRR4       V P                  XP                  R4       R#   + '       g   i     L.; i)r  z/.*cannot redirect path with two initial slashesz//evil.com/../rª  Fr¿  Nr  )r3   r4   r6   r7   Ú
splitdriveru   rŠ   r   r   rí   rï   )rC   Útest_dirÚdriveÚtailrô   s   &    r9   Útest_no_open_redirectÚ3StaticDefaultFilenameRootTest.test_no_open_redirect)  s¡   € ô —7‘7—?‘?¤8Ó,ˆÜ—g‘g×(Ñ(¨Ó2‰ˆÜ�7‰7�gÔØ×Ñ˜TÕ,àˆHÜ”wÐ Q×RÕRØ—z‘zØ   
¨+Ð6Ø!&ð "ó ˆH÷ Sð
 	×Ñ˜Ÿ™¨Ö,÷ S×Rús   ÂCÃC	rK   N)
rN   rO   rP   rQ   r@   r?   r¶  r½  rS   rT   rU   s   @r9   r¯  r¯    s   ø‡ € ò
òò'÷
-ð -r;   r¯  c                   ó2   a € ] tR tRt o R tR tR tRtV tR# )ÚStaticFileWithPathTesti>  c                óB   € \        \        R 4      \        RR7      R7      # rŸ  rh  rB   s   &r9   r@   Ú%StaticFileWithPathTest.get_app_kwargs?  r£  r;   c                ó,   € R \         R\        R4      /3.# )z	/foo/(.*)r4   z
templates/)r   r:   rB   s   &r9   r?   Ú#StaticFileWithPathTest.get_handlersE  s   € ØÔ/°&¼'À,Ó:OÐ1PÐQÐRÐRr;   c                ó`   € V P                  R 4      pV P                  VP                  R4       R# )z/foo/utf8.htmls   HÃ©llo
Nrq  ró   s   & r9   Ú
test_serveÚ!StaticFileWithPathTest.test_serveH  s&   € Ø—:‘:Ð.Ó/ˆØ×Ñ˜Ÿ™Ð(9Ö:r;   rK   N)	rN   rO   rP   rQ   r@   r?   rÆ  rS   rT   rU   s   @r9   rÀ  rÀ  >  s   ø‡ € ò
òS÷;ð ;r;   rÀ  c                   ó8   a € ] tR tRt o R tR tR tR tRtV t	R# )ÚCustomStaticFileTestiM  c                óT   €  ! R  R\         4      p ! R R\        4      pWn        RV3.# )c                   ó|   a € ] tR tRt o ]R 4       tR t]R 4       tR t]RR l4       t	R t
R	 t]R
 4       tRtV tR# )Ú>CustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandleriO  c                óŒ   € V P                  W4      pVP                  R 4      pVRV pW$^,           R pRP                  VVV4      # )Ú.Nz/static/{}.{}.{})Úget_versionÚrindexrn  )rc  rl   r4   Úversion_hashÚextension_indexÚbefore_versionÚafter_versions   &&&    r9   Úmake_static_urlÚNCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.make_static_urlP  sW   € à"Ÿ™¨xÓ>�Ø"&§+¡+¨cÓ"2�Ø!%Ð&6 Ð!7�Ø $¸Õ&9Ð%<Ð =�Ø)×0Ñ0Ø"Ø Ø!óð r;   c                ó`   € VP                  R 4      pVP                  R ^ V4      pVRV  WR  2# )rÎ  N)rÐ  )rC   Úurl_pathrÒ  Úversion_indexs   &&  r9   Úparse_url_pathÚMCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.parse_url_path\  s@   € Ø"*§/¡/°#Ó"6�Ø (§¡°°Q¸Ó H�Ø" > MÐ2Ð3°HÐ=MÐ4NÐ3OÐPÐPr;   c                ó   € R V,           # )zCustomStaticFileTest:rK   ©rc  rl   r4   s   &&&r9   rf  ÚPCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_absolute_patha  s   € à.°Õ5Ð5r;   c                ó   € V# r2   rK   )rC   r,  rj  s   &&&r9   ri  ÚUCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.validate_absolute_pathe  s   € Ø$Ð$r;   Nc                óL   € Vf   Ve   Q hVR8X  d   R# \        RV,          4      h)NúCustomStaticFileTest:foo.txtrƒ   úunexpected path %rr1  )rC   r4   ÚstartÚends   &&&&r9   Úget_contentÚJCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_contenth  s.   € à’}¨ªÐ4Ð4ØÐ9Ô9Ù!ÜÐ 4°tÕ ;Ó<Ð<r;   c                ó`   € V P                   R 8X  d   ^# \        RV P                   ,          4      h)râ  rã  )rj  rü  rB   s   &r9   Úget_content_sizeÚOCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_content_sizeo  s+   € Ø×%Ñ%Ð)GÔGÙÜÐ 4°t×7IÑ7IÕ IÓJÐJr;   c                ó   € R # r2   rK   rB   s   &r9   Úget_modified_timeÚPCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_modified_timet  s   € Ùr;   c                ó   € R # )Ú42rK   rÝ  s   &&&r9   rÏ  ÚJCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_versionw  s   € ár;   rK   ©NN)rN   rO   rP   rQ   rq  rÕ  rÚ  rf  ri  ræ  ré  rì  rÏ  rS   rT   rU   s   @r9   ÚMyStaticFileHandlerrÌ  O  si   ø‡ € Øñ	ó ð	òQð
 ñ6ó ð6ò%ð ó=ó ð=òKò
ð ñó ör;   rò  c                   ó&   a € ] tR tRt o R tRtV tR# )Ú;CustomStaticFileTest.get_handlers.<locals>.StaticUrlHandleri{  c                óF   € V P                  V P                  V4      4       R # r2   )rd   rL  rØ   s   &&r9   re   Ú?CustomStaticFileTest.get_handlers.<locals>.StaticUrlHandler.get|  s   € Ø—
‘
˜4Ÿ?™?¨4Ó0Ö1r;   rK   Nrg   rU   s   @r9   rO  rô  {  s   ø‡ € ÷2ð 2r;   rO  rd  )r   r   Ústatic_handler_class)rC   rò  rO  s   &  r9   r?   Ú!CustomStaticFileTest.get_handlersN  s3   € ô*	Ô"3ô *	ôX	2œ~ô 	2ð %8Ô!à#Ð%5Ð6Ð7Ð7r;   c                ó0   € \        R V P                  R7      # )Údummy)rg  r÷  )rp   r÷  rB   s   &r9   r@   Ú#CustomStaticFileTest.get_app_kwargsƒ  s   € Ü ¸d×>WÑ>WÔXÐXr;   c                ó`   € V P                  R 4      pV P                  VP                  R4       R# )z/static/foo.42.txtrƒ   Nrq  ró   s   & r9   rÆ  ÚCustomStaticFileTest.test_serve†  s%   € Ø—:‘:Ð2Ó3ˆØ×Ñ˜Ÿ™¨Ö/r;   c                óÎ   € \        \        R RR7      ;_uu_ 4        V P                  R4      pV P                  VP                  R4       RRR4       R#   + '       g   i     R# ; i)zCould not open static fileF)Úrequiredz/static_url/foo.txts   /static/foo.42.txtN)r   r   rí   rŠ   rì   ró   s   & r9   ry  Ú$CustomStaticFileTest.test_static_urlŠ  sF   € Ü”wÐ <Àu×MÖMØ—z‘zÐ"7Ó8ˆHØ×Ñ˜XŸ]™]Ð,AÔB÷ N×M×MÒMús   ›.AÁA$	)r÷  N)
rN   rO   rP   rQ   r?   r@   rÆ  ry  rS   rT   rU   s   @r9   rÉ  rÉ  M  s"   ø‡ € ò38òjYò0÷Cð Cr;   rÉ  c                   óB   a € ] tR tRt o  ! R R]4      tR tR tRtV t	R# )ÚHostMatchingTesti�  c                   ó,   a € ] tR tRt o R tR tRtV tR# )ÚHostMatchingTest.Handleri‘  c                ó   € Wn         R # r2   ©Úreply)rC   r  s   &&r9   r¯  Ú#HostMatchingTest.Handler.initialize’  s   € ØŽJr;   c                ó<   € V P                  V P                  4       R # r2   )rd   r  rB   s   &r9   re   ÚHostMatchingTest.Handler.get•  s   € Ø�J‰J�t—z‘zÖ"r;   r  N)rN   rO   rP   rQ   r¯  re   rS   rT   rU   s   @r9   r\   r  ‘  s   ø‡ € ò	÷	#ð 	#r;   r\   c                ó.   € R \         P                  RR/3.# )r  r  Úwildcard)r  r\   rB   s   &r9   r?   ÚHostMatchingTest.get_handlers˜  s   € ØÔ)×1Ñ1°G¸ZÐ3HÐIÐJÐJr;   c                ó  € V P                   P                  R R\        P                  RR/3.4       V P                   P                  RR\        P                  RR/3.4       V P                   P                  R R\        P                  RR/3.4       V P                   P                  R	R\        P                  RR
/3.4       V P	                  R4      pV P                  VP                  R4       V P	                  R4      pV P                  VP                  R4       V P	                  R4      pV P                  VP                  R4       V P	                  RRR /R7      pV P                  VP                  R4       V P	                  RRR /R7      pV P                  VP                  R4       V P	                  RRR /R7      pV P                  VP                  R4       V P	                  RRR/R7      pV P                  VP                  R4       R# )úwww.example.comr  r  ú[0]úwww\.example\.comú/barú[1]ú/bazú[2]zwww.e.*e.comz[3]s   wildcardr   ÚHostro  ó   [0]ó   [1]ó   [2]zwww.exe.coms   [3]N)rA   Úadd_handlersr  r\   rí   rŠ   rì   rï   ró   s   & r9   Útest_host_matchingÚ#HostMatchingTest.test_host_matching›  sÔ  € Ø�‰×ÑØ Ô)9×)AÑ)AÀGÈUÐCSÐ TÐUô	
ð 	�‰×ÑØ  FÔ,<×,DÑ,DÀwÐPUÐFVÐ#WÐ"Xô	
ð 	�‰×ÑØ Ô)9×)AÑ)AÀGÈUÐCSÐ TÐUô	
ð 	�‰×ÑØ˜fÔ&6×&>Ñ&>ÀÈ%Ð@PÐQÐRô	
ð —:‘:˜fÓ%ˆØ×Ñ˜Ÿ™¨Ô4Ø—:‘:˜fÓ%ˆØ×Ñ˜Ÿ™¨Ô,Ø—:‘:˜fÓ%ˆØ×Ñ˜Ÿ™¨Ô,à—:‘:˜f¨vÐ7HÐ.I�:ÓJˆØ×Ñ˜Ÿ™¨Ô/Ø—:‘:˜f¨vÐ7HÐ.I�:ÓJˆØ×Ñ˜Ÿ™¨Ô/Ø—:‘:˜f¨vÐ7HÐ.I�:ÓJˆØ×Ñ˜Ÿ™¨Ô/Ø—:‘:˜f¨v°}Ð.E�:ÓFˆØ×Ñ˜Ÿ™¨Ö/r;   rK   N)
rN   rO   rP   rQ   r   r\   r?   r  rS   rT   rU   s   @r9   r  r  �  s!   ø‡ € ô#�.ô #òK÷0ð 0r;   r  c                   ó2   a € ] tR tRt o R tR tR tRtV tR# )ÚDefaultHostMatchingTestiº  c                ó   € . # r2   rK   rB   s   &r9   r?   Ú$DefaultHostMatchingTest.get_handlers»  rM   r;   c                ó
   € R R/# )Údefault_hostr  rK   rB   s   &r9   r@   Ú&DefaultHostMatchingTest.get_app_kwargs¾  s   € ØÐ 1Ð2Ð2r;   c                ó  € V P                   P                  R R\        P                  RR/3.4       V P                   P                  RR\        P                  RR/3.4       V P                   P                  RR\        P                  RR	/3.4       V P	                  R4      pV P                  VP                  R
4       V P	                  R4      pV P                  VP                  R4       V P	                  R4      pV P                  VP                  R4       V P	                  RRR/R7      pV P                  VP                  R4       RV P                   n        V P	                  R4      pV P                  VP                  R4       R# )r  r  r  r  r  r  r  zwww.test.comr  r  r  r  r   z	X-Real-IprÛ  ro  r  N)	rA   r  r  r\   rí   rŠ   rì   rï   r"  ró   s   & r9   Útest_default_host_matchingÚ2DefaultHostMatchingTest.test_default_host_matchingÁ  sO  € Ø�‰×ÑØ Ô)9×)AÑ)AÀGÈUÐCSÐ TÐUô	
ð 	�‰×ÑØ  FÔ,<×,DÑ,DÀwÐPUÐFVÐ#WÐ"Xô	
ð 	�‰×ÑØ˜fÔ&6×&>Ñ&>ÀÈ%Ð@PÐQÐRô	
ð —:‘:˜fÓ%ˆØ×Ñ˜Ÿ™¨Ô/Ø—:‘:˜fÓ%ˆØ×Ñ˜Ÿ™¨Ô/Ø—:‘:˜fÓ%ˆØ×Ñ˜Ÿ™¨Ô,à—:‘:˜f¨{¸KÐ.H�:ÓIˆØ×Ñ˜Ÿ™¨Ô,à .ˆ�‰Ôà—:‘:˜fÓ%ˆØ×Ñ˜Ÿ™¨Ö/r;   rK   N)	rN   rO   rP   rQ   r?   r@   r%  rS   rT   rU   s   @r9   r  r  º  s   ø‡ € òò3÷0ð 0r;   r  c                   ó,   a € ] tR tRt o R tR tRtV tR# )ÚNamedURLSpecGroupsTestiÜ  c                ó0   €  ! R  R\         4      pRV3RV3.# )c                   ó&   a € ] tR tRt o R tRtV tR# )Ú8NamedURLSpecGroupsTest.get_handlers.<locals>.EchoHandleriÞ  c                ó(   € V P                  V4       R # r2   rc   rØ   s   &&r9   re   Ú<NamedURLSpecGroupsTest.get_handlers.<locals>.EchoHandler.getß  s   € Ø—
‘
˜4Ö r;   rK   Nrg   rU   s   @r9   rô  r+  Þ  s   ø‡ € ÷!ð !r;   rô  z/str/(?P<path>.*)z/unicode/(?P<path>.*)râ   )rC   rô  s   & r9   r?   Ú#NamedURLSpecGroupsTest.get_handlersÝ  s*   € ô	!œ.ô 	!ð
 ! +Ð.Ø$ kÐ2ð
ð 	
r;   c                óº   € V P                  R 4      pV P                  VP                  R4       V P                  R4      pV P                  VP                  R4       R# )z/str/foos   fooz/unicode/barrƒ   Nrq  ró   s   & r9   Útest_named_urlspec_groupsÚ0NamedURLSpecGroupsTest.test_named_urlspec_groupsç  sF   € Ø—:‘:˜jÓ)ˆØ×Ñ˜Ÿ™¨Ô/à—:‘:˜nÓ-ˆØ×Ñ˜Ÿ™¨Ö/r;   rK   N)rN   rO   rP   rQ   r?   r0  rS   rT   rU   s   @r9   r(  r(  Ü  s   ø‡ € ò
÷0ð 0r;   r(  c                   ó<   a € ] tR tRt o  ! R R]4      tR tRtV tR# )ÚClearHeaderTestiï  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚClearHeaderTest.Handlerið  c                ó’   € V P                  R R4       V P                  RR4       V P                  R 4       V P                  R4       R# )Úh1r‚   Úh2r'  ÚnonexistentN)rc  Úclear_headerrB   s   &r9   re   ÚClearHeaderTest.Handler.getñ  s:   € Ø�O‰O˜D %Ô(Ø�O‰O˜D %Ô(Ø×Ñ˜dÔ#Ø×Ñ˜mÖ,r;   rK   Nrg   rU   s   @r9   r\   r5  ð  s   ø‡ € ÷	-ð 	-r;   r\   c                ó¦   € V P                  R 4      pV P                  RVP                  4       V P                  VP                  R,          R4       R# )rZ   r7  r8  r'  N©rí   r  rh  rŠ   ró   s   & r9   Útest_clear_headerÚ!ClearHeaderTest.test_clear_header÷  s@   € Ø—:‘:˜c“?ˆØ×Ñ˜˜x×/Ñ/Ô0Ø×Ñ˜×)Ñ)¨$Õ/°Ö7r;   rK   N)	rN   rO   rP   rQ   r   r\   r>  rS   rT   rU   s   @r9   r3  r3  ï  s   ø‡ € ô-�.ô -÷8ð 8r;   r3  c                   ó<   a € ] tR tRt o  ! R R]4      tR tRtV tR# )ÚHeader204Testiý  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚHeader204Test.Handleriþ  c                óH   € V P                  ^Ì4       V P                  4        R# )éÌ   N)Ú
set_statusrÆ   rB   s   &r9   re   ÚHeader204Test.Handler.getÿ  s   € Ø�O‰O˜CÔ Ø�K‰KŽMr;   rK   Nrg   rU   s   @r9   r\   rC  þ  s   ø‡ € ÷	ð 	r;   r\   c                óÐ   € V P                  R 4      pV P                  VP                  ^Ì4       V P                  RVP                  4       V P                  RVP                  4       R# )rZ   r�  úTransfer-EncodingN)rí   rŠ   rï   r  rh  ró   s   & r9   Útest_204_headersÚHeader204Test.test_204_headers  sQ   € Ø—:‘:˜c“?ˆØ×Ñ˜Ÿ™¨Ô,Ø×ÑÐ)¨8×+;Ñ+;Ô<Ø×ÑÐ,¨h×.>Ñ.>Ö?r;   rK   N)	rN   rO   rP   rQ   r   r\   rJ  rS   rT   rU   s   @r9   rA  rA  ý  s   ø‡ € ô�.ô ÷
@ð @r;   rA  c                   ó<   a € ] tR tRt o  ! R R]4      tR tRtV tR# )ÚHeader304Testi
  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚHeader304Test.Handleri  c                óL   € V P                  R R4       V P                  R4       R# )úContent-LanguageÚen_USrb   N)rc  rd   rB   s   &r9   re   ÚHeader304Test.Handler.get  s   € Ø�O‰OÐ.°Ô8Ø�J‰J�wÖr;   rK   Nrg   rU   s   @r9   r\   rO    s   ø‡ € ÷	 ð 	 r;   r\   c                óà  € V P                  R 4      pV P                  VP                  R,          R4       V P                  VP                  R,          R4       V P                  R RVP                  R,          /R7      pV P                  VP                  R4       V P	                  RVP                  4       V P	                  RVP                  4       V P	                  R	VP                  4       R
# )rZ   r�  Ú5rQ  rR  r¤  r¥  ro  rœ  rI  N)rí   rŠ   rh  rï   r  rž  s   &  r9   Útest_304_headersÚHeader304Test.test_304_headers  sÊ   € Ø—J‘J˜s“Oˆ	Ø×Ñ˜×*Ñ*Ð+;Õ<¸cÔBØ×Ñ˜×*Ñ*Ð+=Õ>ÀÔHà—J‘JØ˜/¨9×+<Ñ+<¸VÕ+DÐEð ó 
ˆ	ð 	×Ñ˜Ÿ™¨Ô-Ø×ÑÐ)¨9×+<Ñ+<Ô=Ø×ÑÐ+¨Y×->Ñ->Ô?à×ÑÐ,¨i×.?Ñ.?Ö@r;   rK   N)	rN   rO   rP   rQ   r   r\   rV  rS   rT   rU   s   @r9   rM  rM  
  s   ø‡ € ô �.ô  ÷
Að Ar;   rM  c                   óN   a € ] tR tRt o  ! R R]4      tR tR tR tR t	Rt
V tR	# )
ÚStatusReasonTesti  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚStatusReasonTest.Handleri   c                óÖ   € V P                   P                  P                  R . 4      p\        \	        V P                  R4      4      V'       d   \        V^ ,          4      R7      hRR7      h)Úreasonrï   N©r]  )rù  rú  re   r!   r*  r+  r   )rC   r]  s   & r9   re   ÚStatusReasonTest.Handler.get!  sY   € Ø—\‘\×+Ñ+×/Ñ/°¸"Ó=ˆFÜÜ�D×%Ñ% fÓ-Ó.ß06”z &¨¥)Ó,ôð à<@ôð r;   rK   Nrg   rU   s   @r9   r\   r[     s   ø‡ € ÷	ð 	r;   r\   c                ó   € \        4       # r2   r   rB   s   &r9   r¶  Ú StatusReasonTest.get_http_client(  ó   € ä$Ó&Ð&r;   c                óN  € V P                  R 4      pV P                  VP                  R4       V P                  VP                  R4       V P                  R4      pV P                  VP                  R4       V P                  VP                  R4       V P                  R4      pV P                  VP                  R4       V P                  VP                  R4       V P                  R4      pV P                  VP                  R4       V P                  VP                  R	4       R
# )z
/?code=304rœ  zNot Modifiedz/?code=304&reason=FooÚFooz/?code=682&reason=Baréª  ÚBarz
/?code=682ÚUnknownN)rí   rŠ   rï   r]  ró   s   & r9   Útest_statusÚStatusReasonTest.test_status,  sÜ   € Ø—:‘:˜lÓ+ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨.Ô9Ø—:‘:Ð5Ó6ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨%Ô0Ø—:‘:Ð5Ó6ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨%Ô0Ø—:‘:˜lÓ+ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨)Ö4r;   c                óÐ   € V P                  R 4      pV P                  VP                  ^È4       V P                  VP                  R4       V P	                  RVP
                  4       R# )z./?code=200&reason=OK%0D%0AX-Injection:injectedrg  zX-InjectionN)rí   rŠ   rï   r]  r  rh  ró   s   & r9   rí  Ú&StatusReasonTest.test_header_injection:  sO   € Ø—:‘:ÐNÓOˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨)Ô4Ø×Ñ˜¨×(8Ñ(8Ö9r;   c                ó  € V P                  R 4      pV P                  VP                  R4       V P                  VP                  R4       V P	                  RVP
                  4       V P                  RVP
                  4       R# )z+/?code=400&reason=<script>alert(1)</script>rÇ  rg  s   scripts   UnknownN)rí   rŠ   rï   r]  r  rì   rz  ró   s   & r9   Útest_reason_xssÚ StatusReasonTest.test_reason_xss@  s_   € Ø—:‘:ÐKÓLˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨)Ô4Ø×Ñ˜ H§M¡MÔ2Ø�‰�j (§-¡-Ö0r;   rK   N)rN   rO   rP   rQ   r   r\   r¶  rh  rí  rm  rS   rT   rU   s   @r9   rY  rY    s*   ø‡ € ô�.ô ò'ò5ò:÷1ð 1r;   rY  c                   ó<   a € ] tR tRt o  ! R R]4      tR tRtV tR# )ÚDateHeaderTestiH  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚDateHeaderTest.HandleriI  c                ó(   € V P                  R 4       R# ra   rc   rB   s   &r9   re   ÚDateHeaderTest.Handler.getJ  ó   € Ø�J‰J�wÖr;   rK   Nrg   rU   s   @r9   r\   rr  I  s   ø‡ € ÷	 ð 	 r;   r\   c                óN  € V P                  R 4      p\        P                  P                  VP                  R,          4      pV P                  V\        P                  P                  \        P                  P                  4      ,
          \        P                  ! ^R7      4       R# )rZ   ÚDate)ÚsecondsN)rí   r™  rš  r›  rh  r�  r”  r•  r–  r—  r˜  )rC   rô   Úheader_dates   &  r9   Útest_date_headerÚDateHeaderTest.test_date_headerM  sm   € Ø—:‘:˜c“?ˆÜ—k‘k×7Ñ7¸×8HÑ8HÈÕ8PÓQˆØ�‰Øœ(×+Ñ+×/Ñ/´×0AÑ0A×0EÑ0EÓFÕFÜ×Ò qÔ)ö	
r;   rK   N)	rN   rO   rP   rQ   r   r\   rz  rS   rT   rU   s   @r9   rp  rp  H  s   ø‡ € ô �.ô  ÷
ð 
r;   rp  c                   óN   a € ] tR tRt o  ! R R]4      tR tR tR tR t	Rt
V tR	# )
ÚRaiseWithReasonTestiV  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚRaiseWithReasonTest.HandleriW  c                ó   € \        R RR7      h)re  rd  r^  ©r!   rB   s   &r9   re   ÚRaiseWithReasonTest.Handler.getX  s   € Ü˜C¨Ô.Ð.r;   rK   Nrg   rU   s   @r9   r\   r  W  s   ø‡ € ÷	/ð 	/r;   r\   c                ó   € \        4       # r2   r   rB   s   &r9   r¶  Ú#RaiseWithReasonTest.get_http_client[  rb  r;   c                óÐ   € V P                  R 4      pV P                  VP                  R4       V P                  VP                  R4       V P	                  RVP
                  4       R# )rZ   re  rd  s   682: FooN)rí   rŠ   rï   r]  rz  rì   ró   s   & r9   Útest_raise_with_reasonÚ*RaiseWithReasonTest.test_raise_with_reason_  sI   € Ø—:‘:˜c“?ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨%Ô0Ø�‰�k 8§=¡=Ö1r;   c           	     óR   € V P                  \        \        R RR7      4      R4       R# )re  rd  r^  zHTTP 682: FooN©rŠ   r   r!   rB   s   &r9   Útest_httperror_strÚ&RaiseWithReasonTest.test_httperror_stre  s   € Ø×ÑœœY s°5Ô9Ó:¸OÖLr;   c                óN   € V P                  \        \        R 4      4      R4       R# )re  zHTTP 682: UnknownNr‰  rB   s   &r9   Ú test_httperror_str_from_httputilÚ4RaiseWithReasonTest.test_httperror_str_from_httputilh  s   € Ø×ÑœœY s›^Ó,Ð.AÖBr;   rK   N)rN   rO   rP   rQ   r   r\   r¶  r†  rŠ  r�  rS   rT   rU   s   @r9   r}  r}  V  s-   ø‡ € ô/�.ô /ò'ò2òM÷Cð Cr;   r}  c                   ó8   a € ] tR tRt o R tR tR tR tRtV t	R# )ÚErrorHandlerXSRFTestil  c                ó*   € R \         \        RR7      3.# )ú/erroré¡  ©r&  )r#   rp   rB   s   &r9   r?   Ú!ErrorHandlerXSRFTest.get_handlersm  s   € ð œ<¬¸#Ô)>Ð?Ð@Ð@r;   c                ó   € \        R R7      # ©T)Úxsrf_cookiesræ   rB   s   &r9   r@   Ú#ErrorHandlerXSRFTest.get_app_kwargss  ó   € Ü Ô&Ð&r;   c                óf   € V P                  R RRR7      pV P                  VP                  R4       R# )r’  ré   rƒ  rê   r“  Nrâ  ró   s   & r9   Útest_error_xsrfÚ$ErrorHandlerXSRFTest.test_error_xsrfv  s*   € Ø—:‘:˜h¨v¸B�:Ó?ˆØ×Ñ˜Ÿ™¨Ö,r;   c                óf   € V P                  R RRR7      pV P                  VP                  R4       R# )z/404ré   rƒ  rê   r   Nrâ  ró   s   & r9   Útest_404_xsrfÚ"ErrorHandlerXSRFTest.test_404_xsrfz  s*   € Ø—:‘:˜f¨V¸"�:Ó=ˆØ×Ñ˜Ÿ™¨Ö,r;   rK   N)
rN   rO   rP   rQ   r?   r@   rœ  rŸ  rS   rT   rU   s   @r9   r�  r�  l  s   ø‡ € òAò'ò-÷-ð -r;   r�  c                   ó`   a € ] tR tRt o  ! R R]4      tR tR tR tR t	R t
R	 tR
 tRtV tR# )ÚGzipTestCasei  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚGzipTestCase.Handleri€  c                ó´   € V P                  R 4       F  pV P                  RV4       K  	  V P                  RR\        P                  ,          ,           4       R# )Úvaryr  zhello worldÚ!N)rý  rd  rd   r/   Ú
MIN_LENGTH)rC   Úvs   & r9   re   ÚGzipTestCase.Handler.get�  sD   € Ø×'Ñ'¨Ö/�Ø—‘ ¨Ö*ñ 0ð �J‰J�}¨Ô.A×.LÑ.LÕ(LÕMÖNr;   rK   Nrg   rU   s   @r9   r\   r¤  €  s   ø‡ € ÷	Oð 	Or;   r\   c                óš   € \        R \        P                  P                  \        P                  P	                  \
        4      R4      R7      # )TrF  )r  rg  )rp   r3   r4   r5   r6   r7   rB   s   &r9   r@   ÚGzipTestCase.get_app_kwargs‡  s0   € ÜØ¤2§7¡7§<¡<´·±·±ÄÓ0IÈ8Ó#Tô
ð 	
r;   c                ó�   € V P                  VP                  P                  R VP                  P                  R4      4      R4       R# )r  zX-Consumed-Content-Encodingr  N)rŠ   rh  re   ró   s   &&r9   Úassert_compressedÚGzipTestCase.assert_compressedŒ  sB   € ð 	×ÑØ×Ñ× Ñ Ø" H×$4Ñ$4×$8Ñ$8Ð9VÓ$Wóð ö		
r;   c                ó�   € V P                  R 4      pV P                  V4       V P                  VP                  R,          R4       R# )rZ   r  r  N©rí   r®  rŠ   rh  ró   s   & r9   Ú	test_gzipÚGzipTestCase.test_gzip–  s9   € Ø—:‘:˜c“?ˆØ×Ñ˜xÔ(Ø×Ñ˜×)Ñ)¨&Õ1Ð3DÖEr;   c                ó�   € V P                  R 4      pV P                  V4       V P                  VP                  R,          R4       R# )rk  r  r  Nr±  ró   s   & r9   Útest_gzip_staticÚGzipTestCase.test_gzip_static›  s<   € ð —:‘:˜mÓ,ˆØ×Ñ˜xÔ(Ø×Ñ˜×)Ñ)¨&Õ1Ð3DÖEr;   c                óª   € V P                  R RR7      pV P                  RVP                  4       V P                  VP                  R,          R4       R# )rZ   F)Úuse_gzipr  r  r  Nr=  ró   s   & r9   Útest_gzip_not_requestedÚ$GzipTestCase.test_gzip_not_requested¢  sG   € Ø—:‘:˜c¨E�:Ó2ˆØ×ÑÐ+¨X×-=Ñ-=Ô>Ø×Ñ˜×)Ñ)¨&Õ1Ð3DÖEr;   c                óö   € V P                  R 4      pV P                  V4       T P                  VP                  R,          P	                  R4       Uu. uF  q"P                  4       NK  	  upRR.4       R# u upi )z/?vary=Accept-Languager  Ú,úAccept-Languager  N©rí   r®  rŠ   rh  ÚsplitÚstrip©rC   rô   rê  s   &  r9   Útest_vary_already_presentÚ&GzipTestCase.test_vary_already_present§  sg   € Ø—:‘:Ð6Ó7ˆØ×Ñ˜xÔ(Ø×ÑØ (× 0Ñ 0°Õ 8× >Ñ >¸sÔ CÓDÑ C˜1�W‰WŽYÑ CÑDØÐ 1Ð2ö	
ùÚDó   ÁA6c                óö   € V P                  R 4      pV P                  V4       T P                  VP                  R,          P	                  R4       Uu. uF  q"P                  4       NK  	  up. RO4       R# u upi )z"/?vary=Accept-Language&vary=Cookier  r¼  N)r½  rm  r  r¾  rÁ  s   &  r9   Ú"test_vary_already_present_multipleÚ/GzipTestCase.test_vary_already_present_multiple¯  sa   € à—:‘:ÐBÓCˆØ×Ñ˜xÔ(Ø×ÑØ (× 0Ñ 0°Õ 8× >Ñ >¸sÔ CÓDÑ C˜1�W‰WŽYÑ CÑDÚ<ö	
ùÚDrÄ  rK   N)rN   rO   rP   rQ   r   r\   r@   r®  r²  rµ  r¹  rÂ  rÆ  rS   rT   rU   s   @r9   r¢  r¢    s>   ø‡ € ôO�.ô Oò
ò

òFò
FòFò

÷
ð 
r;   r¢  c                   óH   a € ] tR tRt o  ! R R]4      tR tR tR tRt	V t
R# )	ÚPathArgsInPrepareTesti¹  c                   ó,   a € ] tR tRt o R tR tRtV tR# )ÚPathArgsInPrepareTest.Handleriº  c                óf   € V P                  \        V P                  V P                  R 7      4       R# ))rø  r¸  N)rd   rp   r÷  Úpath_kwargsrB   s   &r9   r/  Ú%PathArgsInPrepareTest.Handler.prepare»  s   € Ø�J‰J”t §¡¸×8HÑ8HÔIÖJr;   c                ó8   € VR 8X  g   Q hV P                  4        R# )r‚   N©rÆ   rØ   s   &&r9   re   Ú!PathArgsInPrepareTest.Handler.get¾  s   € Ø˜5”=Ð �=Ø�K‰KŽMr;   rK   N©rN   rO   rP   rQ   r/  re   rS   rT   rU   s   @r9   r\   rË  º  s   ø‡ € ò	K÷	ð 	r;   r\   c                ó:   € R V P                   3RV P                   3.# )z	/pos/(.*)z/kw/(?P<path>.*)r[   rB   s   &r9   r?   Ú"PathArgsInPrepareTest.get_handlersÂ  s    € Ø˜dŸl™lÐ+Ð.@À$Ç,Á,Ð-OÐPÐPr;   c                ó    € V P                  R 4      pVP                  4        \        VP                  4      pV P	                  VRR.R/ /4       R# )z/pos/foorø  r‚   r¸  NrÁ  ©rC   rô   r}  s   &  r9   Útest_posÚPathArgsInPrepareTest.test_posÅ  sE   € Ø—:‘:˜jÓ)ˆØ×ÑÔÜ˜8Ÿ=™=Ó)ˆØ×Ñ˜ ¨¨°¸2Ð>Ö?r;   c                ó¢   € V P                  R 4      pVP                  4        \        VP                  4      pV P	                  VR. RRR//4       R# )z/kw/foorø  r¸  r4   r‚   NrÁ  rÖ  s   &  r9   Útest_kwÚPathArgsInPrepareTest.test_kwË  sG   € Ø—:‘:˜iÓ(ˆØ×ÑÔÜ˜8Ÿ=™=Ó)ˆØ×Ñ˜ ¨¨H°v¸u°oÐFÖGr;   rK   N)rN   rO   rP   rQ   r   r\   r?   r×  rÚ  rS   rT   rU   s   @r9   rÉ  rÉ  ¹  s)   ø‡ € ô�.ô òQò@÷Hð Hr;   rÉ  c                   ó<   a € ] tR tRt o  ! R R]4      tR tRtV tR# )ÚClearAllCookiesTestiÒ  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚClearAllCookiesTest.HandleriÓ  c                óH   € V P                  4        V P                  R 4       R# ©ÚokN)Úclear_all_cookiesrd   rB   s   &r9   re   ÚClearAllCookiesTest.Handler.getÔ  s   € Ø×"Ñ"Ô$Ø�J‰J�tÖr;   rK   Nrg   rU   s   @r9   r\   rß  Ó  s   ø‡ € ÷	ð 	r;   r\   c                ó  € V P                  R RR/R7      p\        VP                  P                  R4      4      pV P	                  V^ ,          P                  R4      4       V P	                  V^,          P                  R4      4       R# )rZ   rm  zfoo=bar; baz=xyzzyro  rf  zbaz="";zfoo="";N)rí   rg  rh  ri  rñ   r‘  )rC   rô   Úset_cookiess   &  r9   Útest_clear_all_cookiesÚ*ClearAllCookiesTest.test_clear_all_cookiesØ  sk   € Ø—:‘:˜c¨HÐ6JÐ+K�:ÓLˆÜ˜X×-Ñ-×6Ñ6°|ÓDÓEˆà�‰˜ A�×1Ñ1°)Ó<Ô=Ø�‰˜ A�×1Ñ1°)Ó<Ö=r;   rK   N)	rN   rO   rP   rQ   r   r\   rç  rS   rT   rU   s   @r9   rÝ  rÝ  Ò  s   ø‡ € ô�.ô ÷
>ð >r;   rÝ  c                   ó   € ] tR tRtRtR# )ÚPermissionErrorià  rK   N©rN   rO   rP   rQ   rS   rK   r;   r9   rê  rê  à  s   † Ûr;   rê  c                   óH   a € ] tR tRt o  ! R R]4      tR tR tR tRt	V t
R# )	ÚExceptionHandlerTestiä  c                   ó2   a € ] tR tRt o R tR tR tRtV tR# )ÚExceptionHandlerTest.Handleriå  c                ó–   € V P                  R 4      pVR8X  d   \        RR4      hVR8X  d   ^^ ,           R# VR8X  d   \        R4      hR# )Úexcr1  éš  zno longer hereÚzeroÚ
permissionznot allowedN)r+  r!   rê  )rC   rñ  s   & r9   re   Ú ExceptionHandlerTest.Handler.getæ  sO   € Ø×#Ñ# EÓ*ˆCØ�fŒ}Ü Ð%5Ó6Ð6Ø˜”Ø�A—�Ø˜Ô$Ü% mÓ4Ð4ñ %r;   c                óÎ   € R V9   dG   VR ,          w  r4p\        V\        4      '       d%   V P                  R4       V P                  R4       R# \        P
                  ! W3/ VB  R# )r$  r  rê  N)Ú
isinstancerê  rF  rd   r   r'  )rC   r&  r¸  Útypry   Útbs   &&,   r9   r'  Ú(ExceptionHandlerTest.Handler.write_errorï  sT   € Ø˜VÔ#Ø!'¨
Õ!3‘�˜BÜ˜e¤_×5Ò5Ø—O‘O CÔ(Ø—J‘JÐ0Ô1ÙÜ×&Ò& tÑC¸FÔCr;   c                ó´   € \        V\        4      '       d+   \        P                  ! R VP                  ^ ,          4       R# \
        P                  ! WW#4       R# )z&custom logging for PermissionError: %sN)r÷  rê  r   Úwarningrø  r   Úlog_exception©rC   rø  ry   rù  s   &&&&r9   rý  Ú*ExceptionHandlerTest.Handler.log_exceptionø  s7   € Ü˜%¤×1Ò1Ü—’Ð HÈ%Ï*É*ÐUVÍ-ÖXä×,Ò,¨T¸ÖBr;   rK   N)	rN   rO   rP   rQ   re   r'  rý  rS   rT   rU   s   @r9   r\   rï  å  s   ø‡ € ò	5ò	D÷	Cð 	Cr;   r\   c                óÊ   € \        \        R 4      ;_uu_ 4        V P                  R4      pV P                  VP                  R4       RRR4       R#   + '       g   i     R# ; i)z.*no longer herez
/?exc=httprò  NrÈ  ró   s   & r9   Útest_http_errorÚ$ExceptionHandlerTest.test_http_errorþ  sC   € ô ”wÐ 2×3Õ3Ø—z‘z ,Ó/ˆHØ×Ñ˜XŸ]™]¨CÔ0÷ 4×3×3Ò3úó   ™.AÁA"	c                óÊ   € \        \        R 4      ;_uu_ 4        V P                  R4      pV P                  VP                  R4       RRR4       R#   + '       g   i     R# ; i)r9  z
/?exc=zerorµ  N©r   r   rí   rŠ   rï   ró   s   & r9   Útest_unknown_errorÚ'ExceptionHandlerTest.test_unknown_error	  sA   € ä”wÐ 4×5Õ5Ø—z‘z ,Ó/ˆHØ×Ñ˜XŸ]™]¨CÔ0÷ 6×5×5Ò5úr  c                óÊ   € \        \        R 4      ;_uu_ 4        V P                  R4      pV P                  VP                  R4       RRR4       R#   + '       g   i     R# ; i)z/custom logging for PermissionError: not allowedz/?exc=permissionr  Nr  ró   s   & r9   Útest_known_errorÚ%ExceptionHandlerTest.test_known_error	  sE   € ô ”wÐ Q×RÕRØ—z‘zÐ"4Ó5ˆHØ×Ñ˜XŸ]™]¨CÔ0÷ S×R×RÒRúr  rK   N)rN   rO   rP   rQ   r   r\   r  r  r	  rS   rT   rU   s   @r9   rí  rí  ä  s'   ø‡ € ôC�.ô Cò21ò1÷1ð 1r;   rí  c                   ó<   a € ] tR tRt o  ! R R]4      tR tRtV tR# )ÚBuggyLoggingTesti	  c                   ó,   a € ] tR tRt o R tR tRtV tR# )ÚBuggyLoggingTest.Handleri	  c                ó   € ^^ ,           R# r.  rK   rB   s   &r9   re   ÚBuggyLoggingTest.Handler.get	  ó   € Ø��EˆEr;   c                ó   € ^^ ,           R# r.  rK   rþ  s   &&&&r9   rý  Ú&BuggyLoggingTest.Handler.log_exception	  r  r;   rK   N)rN   rO   rP   rQ   re   rý  rS   rT   rU   s   @r9   r\   r  	  s   ø‡ € ò	÷	ð 	r;   r\   c                ó’   € \        \        R 4      ;_uu_ 4        V P                  R4       RRR4       R#   + '       g   i     R# ; i)z.*rZ   N)r   r   rí   rB   s   &r9   Útest_buggy_log_exceptionÚ)BuggyLoggingTest.test_buggy_log_exception	  s+   € ô ”w ×%Õ%Ø�J‰J�sŒO÷ &×%×%Ò%úr  rK   N)	rN   rO   rP   rQ   r   r\   r  rS   rT   rU   s   @r9   r  r  	  s   ø‡ € ô�.ô ÷ð r;   r  c                   óX   a a€ ] tR tRt oRt ! R R]4      tR tV 3R ltR t	Rt
VtV ;t# )	ÚUIMethodUIModuleTesti"	  zXTest that UI methods and modules are created correctly and
associated with the handler.
c                   ó,   a € ] tR tRt o R tR tRtV tR# )ÚUIMethodUIModuleTest.Handleri'	  c                ó(   € V P                  R 4       R# rÜ   rQ  rB   s   &r9   re   Ú UIMethodUIModuleTest.Handler.get(	  s   € Ø�K‰K˜
Ö#r;   c                ó$   € V P                  R 4      # ©ry   )r+  rB   s   &r9   ry   Ú"UIMethodUIModuleTest.Handler.value+	  s   € Ø×$Ñ$ WÓ-Ð-r;   rK   N)rN   rO   rP   rQ   re   ry   rS   rT   rU   s   @r9   r\   r  '	  s   ø‡ € ò	$÷	.ð 	.r;   r\   c                ód   € R  p ! R R\         4      p\        RR/4      p\        VRV/RV/R7      # )c                 ó0   € R V RV P                  4        R2# )zIn my_ui_method(z) with handler value rÎ  r  )r�   Úxs   &&r9   Úmy_ui_methodÚ9UIMethodUIModuleTest.get_app_kwargs.<locals>.my_ui_method/	  s   € Ø% a SÐ(=¸g¿m¹m»oÐ=NÈaÐPÐPr;   c                   ó&   a € ] tR tRt o R tRtV tR# )Ú5UIMethodUIModuleTest.get_app_kwargs.<locals>.MyModulei2	  c                óœ   € R P                  V\        P                  ! \        P                  V P
                  4      P                  4       4      # )z&In MyModule({}) with handler value {}.)rn  ÚtypingÚcastr  r\   r�   ry   )rC   r"  s   &&r9   rÝ   Ú<UIMethodUIModuleTest.get_app_kwargs.<locals>.MyModule.render3	  s:   € Ø?×FÑFØÜ—K’KÔ 4× <Ñ <¸d¿l¹lÓK×QÑQÓSóð r;   rK   N©rN   rO   rP   rQ   rÝ   rS   rT   rU   s   @r9   ÚMyModuler&  2	  s   ø‡ € ÷ð r;   r,  rÖ   z1{{ my_ui_method(42) }} {% module MyModule(123) %}r#  )r˜  Ú
ui_methodsÚ
ui_modules©r*   r   rp   )rC   r#  r,  r›  s   &   r9   r@   Ú#UIMethodUIModuleTest.get_app_kwargs.	  sK   € ò	Qô	”xô 	ô ØÐLÐMó
ˆô Ø"Ø&¨Ð5Ø" HÐ-ô
ð 	
r;   c                ó`   <€ \         SV `  4        \        P                  P	                  4        R # r2   rž  r£  s   &€r9   r   ÚUIMethodUIModuleTest.tearDownB	  s    ø€ Ü‰ÑÔä×(Ñ(×.Ñ.Ö0r;   c                ó`   € V P                  R 4      pV P                  VP                  R4       R# )z/?value=asdfsV   In my_ui_method(42) with handler value asdf. In MyModule(123) with handler value asdf.Nrq  ró   s   & r9   Útest_ui_methodÚ#UIMethodUIModuleTest.test_ui_methodG	  s*   € Ø—:‘:˜nÓ-ˆØ×ÑØ�M‰Mð9ö	
r;   rK   )rN   rO   rP   rQ   rR   r   r\   r@   r   r4  rS   rT   r
  r  s   @@r9   r  r  "	  s*   ù‡ € ñô.�.ô .ò
õ(1÷

ò 
r;   r  c                   ó<   a € ] tR tRt o  ! R R]4      tR tRtV tR# )ÚGetArgumentErrorTestiP	  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚGetArgumentErrorTest.HandleriQ	  c                óÐ   €  V P                  R 4       V P                  / 4       R#   \         d5   pT P                  RTP                  RTP                  /4        Rp?R# Rp?ii ; i)r‚   Úarg_nameÚlog_messageN)r+  rd   r"   r;  r<  rz  s   & r9   re   Ú GetArgumentErrorTest.Handler.getR	  sS   € ðSØ×!Ñ! %Ô(Ø—
‘
˜2–øÜ'ô SØ—
‘
˜J¨¯
©
°MÀ1Ç=Á=ÐQ×RÒRûðSús   ‚"& ¦A%±)A Á A%rK   Nrg   rU   s   @r9   r\   r9  Q	  s   ø‡ € ÷	Sð 	Sr;   r\   c                óz   € V P                  R 4      pV P                  \        VP                  4      RRRR/4       R# )rZ   r;  r‚   r<  zMissing argument fooN)rí   rŠ   r   rì   ró   s   & r9   Útest_catch_errorÚ%GetArgumentErrorTest.test_catch_errorY	  s6   € Ø—:‘:˜c“?ˆØ×ÑÜ˜Ÿ™Ó&Ø˜ Ð/EÐFö	
r;   rK   N)	rN   rO   rP   rQ   r   r\   r?  rS   rT   rU   s   @r9   r7  r7  P	  s   ø‡ € ôS�.ô S÷
ð 
r;   r7  c                   ó<   a € ] tR tRt o  ! R R]4      tR tRtV tR# )ÚSetLazyPropertiesTestia	  c                   ó8   a € ] tR tRt o R tR tR tR tRtV t	R# )ÚSetLazyPropertiesTest.Handlerib	  c                óJ   € R V n         \        P                  ! R4      V n        R# )ÚBenrR  N)Úcurrent_userr   re   rB   s   &r9   r/  Ú%SetLazyPropertiesTest.Handler.preparec	  s   € Ø %ˆDÔÜ Ÿ*š* WÓ-ˆDŽKr;   c                ó   € \        4       hr2   rG   rB   s   &r9   Úget_user_localeÚ-SetLazyPropertiesTest.Handler.get_user_localeg	  ó   € Ü%Ó'Ð'r;   c                ó   € \        4       hr2   rG   rB   s   &r9   Úget_current_userÚ.SetLazyPropertiesTest.Handler.get_current_userj	  rL  r;   c                ór   € V P                  R V P                   RV P                  P                   R24       R# )zHello z (rŽ  N)rd   rG  r   rï   rB   s   &r9   re   Ú!SetLazyPropertiesTest.Handler.getm	  s/   € Ø�J‰J˜ × 1Ñ 1Ð2°"°T·[±[×5EÑ5EÐ4FÀaÐHÖIr;   )rG  r   N)
rN   rO   rP   rQ   r/  rJ  rN  re   rS   rT   rU   s   @r9   r\   rD  b	  s    ø‡ € ò	.ò	(ò	(÷	Jð 	Jr;   r\   c                ó`   € V P                  R 4      pV P                  VP                  R4       R# )rZ   s   Hello Ben (en_US)Nrq  ró   s   & r9   Útest_set_propertiesÚ)SetLazyPropertiesTest.test_set_propertiesp	  s&   € ð —:‘:˜c“?ˆØ×Ñ˜Ÿ™Ð(<Ö=r;   rK   N)	rN   rO   rP   rQ   r   r\   rS  rS   rT   rU   s   @r9   rB  rB  a	  s   ø‡ € ôJ�.ô J÷>ð >r;   rB  c                   ó€   a a€ ] tR tRt oR tV 3R ltR t]P                  ! R4      R 4       t	R t
R tR	 tR
tVtV ;t# )ÚGetCurrentUserTestiw	  c           
     ó†   €  ! R  R\         4      p ! R R\         4      p\        RRRRRR	R
R/4      p\        VRVRV/R7      # )c                   ó&   a € ] tR tRt o R tRtV tR# )Ú<GetCurrentUserTest.get_app_kwargs.<locals>.WithoutUserModuleiy	  c                ó   € R # )rƒ  rK   rB   s   &r9   rÝ   ÚCGetCurrentUserTest.get_app_kwargs.<locals>.WithoutUserModule.renderz	  s   € Ùr;   rK   Nr+  rU   s   @r9   ÚWithoutUserModulerY  y	  s   ø‡ € ÷ð r;   r\  c                   ó&   a € ] tR tRt o R tRtV tR# )Ú9GetCurrentUserTest.get_app_kwargs.<locals>.WithUserModulei}	  c                ó,   € \        V P                  4      # r2   )r   rG  rB   s   &r9   rÝ   Ú@GetCurrentUserTest.get_app_kwargs.<locals>.WithUserModule.render~	  s   € Ü˜4×,Ñ,Ó-Ð-r;   rK   Nr+  rU   s   @r9   ÚWithUserModuler^  }	  s   ø‡ € ÷.ð .r;   ra  úwithout_user.htmlrƒ  úwith_user.htmlz{{ current_user }}úwithout_user_module.htmlz {% module WithoutUserModule() %}úwith_user_module.htmlz{% module WithUserModule() %})r˜  r.  r/  )rC   r\  ra  r›  s   &   r9   r@   Ú!GetCurrentUserTest.get_app_kwargsx	  sd   € ô	¤ô 	ô	.œXô 	.ô à# RØ Ð"6Ø*Ð,NØ'Ð)Hð	ó
ˆô Ø"à  .Ø#Ð%6ðô
ð 	
r;   c                ó`   <€ \         SV `  4        \        P                  P	                  4        R # r2   rž  r£  s   &€r9   r   ÚGetCurrentUserTest.tearDown‘	  r¦  r;   c                óª   €  ! R  R\         4      p ! R RV4      p ! R RV4      p ! R RV4      p ! R R	V4      p ! R
 RV4      pRV3RV3RV3RV3.# )c                   ó,   a € ] tR tRt o R tR tRtV tR# )Ú;GetCurrentUserTest.get_handlers.<locals>.CurrentUserHandleri–	  c                ó   € R V n         R# )FN©Úhas_loaded_current_userrB   s   &r9   r/  ÚCGetCurrentUserTest.get_handlers.<locals>.CurrentUserHandler.prepare—	  s
   € Ø/4�Ö,r;   c                ó   € R V n         R# )Trƒ  rm  rB   s   &r9   rN  ÚLGetCurrentUserTest.get_handlers.<locals>.CurrentUserHandler.get_current_userš	  s   € Ø/3�Ô,Ùr;   rm  N)rN   rO   rP   rQ   r/  rN  rS   rT   rU   s   @r9   ÚCurrentUserHandlerrk  –	  s   ø‡ € ò5÷ð r;   rr  c                   ó&   a € ] tR tRt o R tRtV tR# )Ú;GetCurrentUserTest.get_handlers.<locals>.WithoutUserHandleriž	  c                óp   € V P                  R 4       V P                  \        V P                  4      4       R# )rb  N©Úrender_stringrÆ   r   rn  rB   s   &r9   re   Ú?GetCurrentUserTest.get_handlers.<locals>.WithoutUserHandler.getŸ	  s(   € Ø×"Ñ"Ð#6Ô7Ø—‘œC × <Ñ <Ó=Ö>r;   rK   Nrg   rU   s   @r9   ÚWithoutUserHandlerrt  ž	  ó   ø‡ € ÷?ð ?r;   ry  c                   ó&   a € ] tR tRt o R tRtV tR# )Ú8GetCurrentUserTest.get_handlers.<locals>.WithUserHandleri£	  c                óp   € V P                  R 4       V P                  \        V P                  4      4       R# )rc  Nrv  rB   s   &r9   re   Ú<GetCurrentUserTest.get_handlers.<locals>.WithUserHandler.get¤	  s(   € Ø×"Ñ"Ð#3Ô4Ø—‘œC × <Ñ <Ó=Ö>r;   rK   Nrg   rU   s   @r9   ÚWithUserHandlerr|  £	  rz  r;   r  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚAGetCurrentUserTest.get_handlers.<locals>.CurrentUserModuleHandleri¨	  c                ó   € V P                   # r2   )ÚuirB   s   &r9   Úget_template_namespaceÚXGetCurrentUserTest.get_handlers.<locals>.CurrentUserModuleHandler.get_template_namespace©	  s   € ð —w‘w�r;   rK   N)rN   rO   rP   rQ   r„  rS   rT   rU   s   @r9   ÚCurrentUserModuleHandlerr�  ¨	  s   ø‡ € ÷ð r;   r†  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚAGetCurrentUserTest.get_handlers.<locals>.WithoutUserModuleHandleri¯	  c                óp   € V P                  R 4       V P                  \        V P                  4      4       R# )rd  Nrv  rB   s   &r9   re   ÚEGetCurrentUserTest.get_handlers.<locals>.WithoutUserModuleHandler.get°	  s(   € Ø×"Ñ"Ð#=Ô>Ø—‘œC × <Ñ <Ó=Ö>r;   rK   Nrg   rU   s   @r9   ÚWithoutUserModuleHandlerrˆ  ¯	  rz  r;   r‹  c                   ó&   a € ] tR tRt o R tRtV tR# )Ú>GetCurrentUserTest.get_handlers.<locals>.WithUserModuleHandleri´	  c                óp   € V P                  R 4       V P                  \        V P                  4      4       R# )re  Nrv  rB   s   &r9   re   ÚBGetCurrentUserTest.get_handlers.<locals>.WithUserModuleHandler.getµ	  s(   € Ø×"Ñ"Ð#:Ô;Ø—‘œC × <Ñ <Ó=Ö>r;   rK   Nrg   rU   s   @r9   ÚWithUserModuleHandlerr�  ´	  rz  r;   r�  ú/without_userú
/with_userú/without_user_moduleú/with_user_modulerâ   )rC   rr  ry  r  r†  r‹  r�  s   &      r9   r?   ÚGetCurrentUserTest.get_handlers•	  s~   € ô	¤ô 	ô	?Ð!3ô 	?ô
	?Ð0ô 	?ô
	Ð'9ô 	ô	?Ð'?ô 	?ô
	?Ð$<ô 	?ð Ð0Ð1Ø˜?Ð+Ø#Ð%=Ð>Ø Ð"7Ð8ð	
ð 	
r;   z	needs fixc                ó`   € V P                  R 4      pV P                  VP                  R4       R# )r‘  ó   FalseNrq  ró   s   & r9   Útest_get_current_user_is_lazyÚ0GetCurrentUserTest.test_get_current_user_is_lazyÀ	  s&   € ð —:‘:˜oÓ.ˆØ×Ñ˜Ÿ™¨Ö1r;   c                ó`   € V P                  R 4      pV P                  VP                  R4       R# )r’  ó   TrueNrq  ró   s   & r9   Útest_get_current_user_worksÚ.GetCurrentUserTest.test_get_current_user_worksÆ	  s$   € Ø—:‘:˜lÓ+ˆØ×Ñ˜Ÿ™¨Ö0r;   c                ó`   € V P                  R 4      pV P                  VP                  R4       R# )r“  r—  Nrq  ró   s   & r9   Ú,test_get_current_user_from_ui_module_is_lazyÚ?GetCurrentUserTest.test_get_current_user_from_ui_module_is_lazyÊ	  s%   € Ø—:‘:Ð4Ó5ˆØ×Ñ˜Ÿ™¨Ö1r;   c                ó`   € V P                  R 4      pV P                  VP                  R4       R# )r”  r›  Nrq  ró   s   & r9   Ú*test_get_current_user_from_ui_module_worksÚ=GetCurrentUserTest.test_get_current_user_from_ui_module_worksÎ	  s%   € Ø—:‘:Ð1Ó2ˆØ×Ñ˜Ÿ™¨Ö0r;   rK   )rN   rO   rP   rQ   r@   r   r?   r  Úskipr˜  rœ  rŸ  r¢  rS   rT   r
  r  s   @@r9   rV  rV  w	  sF   ù‡ € ò
õ21ò)
ðV ‡]‚]�;Óñ2ó  ð2ò
1ò2÷1ò 1r;   rV  c                   ó<   a € ] tR tRt o  ! R R]4      tR tRtV tR# )ÚUnimplementedHTTPMethodsTestiÓ	  c                   ó   € ] tR tRtRtR# )Ú$UnimplementedHTTPMethodsTest.HandleriÔ	  rK   Nrë  rK   r;   r9   r\   r¨  Ô	  s   † Ûr;   r\   c                óè   € R F2  pV P                  RVR7      pV P                  VP                  R4       K4  	  R F3  pV P                  RVRR7      pV P                  VP                  R4       K5  	  R# )	rŒ  rZ   rô  é•  r;   rê   N)rŒ  r�  ÚDELETEÚOPTIONS©ré   ÚPUTrâ  )rC   rë   rô   s   &  r9   Ú#test_unimplemented_standard_methodsÚ@UnimplementedHTTPMethodsTest.test_unimplemented_standard_methods×	  sf   € Û:ˆFØ—z‘z #¨f�zÓ5ˆHØ×Ñ˜XŸ]™]¨CÖ0ñ ;ó &ˆFØ—z‘z #¨f¸3�zÓ?ˆHØ×Ñ˜XŸ]™]¨CÖ0ó &r;   rK   N)	rN   rO   rP   rQ   r   r\   r¯  rS   rT   rU   s   @r9   r¦  r¦  Ó	  s   ø‡ € ô�.ô ÷1ð 1r;   r¦  c                   óB   a € ] tR tRt o  ! R R]4      tR tR tRtV t	R# )Ú#UnimplementedNonStandardMethodsTestià	  c                   ó&   a € ] tR tRt o R tRtV tR# )Ú+UnimplementedNonStandardMethodsTest.Handleriá	  c                ó(   € V P                  R 4       R# ©ÚotherNrc   rB   s   &r9   r·  Ú1UnimplementedNonStandardMethodsTest.Handler.otherâ	  s   € ð �J‰J�wÖr;   rK   N)rN   rO   rP   rQ   r·  rS   rT   rU   s   @r9   r\   r´  á	  s   ø‡ € ÷	 ð 	 r;   r\   c                óf   € V P                  R RRR7      pV P                  VP                  R4       R# )rZ   ÚPATCHr;   rê   rª  Nrâ  ró   s   & r9   Útest_unimplemented_patchÚ<UnimplementedNonStandardMethodsTest.test_unimplemented_patchç	  s,   € ð —:‘:˜c¨'¸�:Ó<ˆØ×Ñ˜Ÿ™¨Ö,r;   c                óf   € V P                  R RRR7      pV P                  VP                  R4       R# )rZ   ÚOTHERT©rë   Úallow_nonstandard_methodsrª  Nrâ  ró   s   & r9   Útest_unimplemented_otherÚ<UnimplementedNonStandardMethodsTest.test_unimplemented_otherí	  s*   € Ø—:‘:˜c¨'ÈT�:ÓRˆØ×Ñ˜Ÿ™¨Ö,r;   rK   N)
rN   rO   rP   rQ   r   r\   r»  rÁ  rS   rT   rU   s   @r9   r²  r²  à	  s    ø‡ € ô �.ô  ò-÷-ð -r;   r²  c                   ó<   a € ] tR tRt o  ! R R]4      tR tRtV tR# )ÚAllHTTPMethodsTestiò	  c                   ó:   a € ] tR tRt o R t];t;t;t;tt	Rt
V tR# )ÚAllHTTPMethodsTest.Handlerió	  c                ó„   € V P                   P                  f   Q hV P                  V P                   P                  4       R # r2   )rù  rë   rd   rB   s   &r9   rë   Ú!AllHTTPMethodsTest.Handler.methodô	  s.   € Ø—<‘<×&Ñ&Ò2Ð2Ð2Ø�J‰J�t—|‘|×*Ñ*Ö+r;   rK   N)rN   rO   rP   rQ   rë   re   ÚdeleteÚoptionsrÎ   ÚputrS   rT   rU   s   @r9   r\   rÆ  ó	  s%   ø‡ € ò	,ð /5Ð4ˆÐ4ˆfÐ4�wÐ4 ®r;   r\   c                ój  € V P                  R RR7      pV P                  VP                  R4       R F;  pV P                  R VR7      pV P                  VP                  \        V4      4       K=  	  R F<  pV P                  R VRR7      pV P                  VP                  \        V4      4       K>  	  R# )rZ   rŒ  rô  r;   rê   N)r�  r«  r¬  r­  )rí   rŠ   rì   r   )rC   rô   rë   s   &  r9   Útest_standard_methodsÚ(AllHTTPMethodsTest.test_standard_methodsú	  s”   € Ø—:‘:˜c¨&�:Ó1ˆØ×Ñ˜Ÿ™¨Ô,Û2ˆFØ—z‘z #¨f�zÓ5ˆHØ×Ñ˜XŸ]™]¬D°«LÖ9ñ 3ó &ˆFØ—z‘z #¨f¸3�zÓ?ˆHØ×Ñ˜XŸ]™]¬D°«LÖ9ó &r;   rK   N)	rN   rO   rP   rQ   r   r\   rÍ  rS   rT   rU   s   @r9   rÄ  rÄ  ò	  s   ø‡ € ô5�.ô 5÷:ð :r;   rÄ  c                   óB   a € ] tR tRt o  ! R R]4      tR tR tRtV t	R# )ÚPatchMethodTesti
  c                   óR   a € ] tR tRt o ]P
                  R,           tR tR tRtV t	R# )ÚPatchMethodTest.Handleri
  c                ó(   € V P                  R 4       R# )ÚpatchNrc   rB   s   &r9   rÔ  ÚPatchMethodTest.Handler.patch
  ru  r;   c                ó(   € V P                  R 4       R# r¶  rc   rB   s   &r9   r·  ÚPatchMethodTest.Handler.other
  ru  r;   rK   N)r¾  )
rN   rO   rP   rQ   r   ÚSUPPORTED_METHODSrÔ  r·  rS   rT   rU   s   @r9   r\   rÒ  
  s+   ø‡ € Ø*×<Ñ<ð @
õ 
Ðò	 ÷	 ð 	 r;   r\   c                óf   € V P                  R RRR7      pV P                  VP                  R4       R# )rZ   rº  r;   rê   s   patchNrq  ró   s   & r9   Ú
test_patchÚPatchMethodTest.test_patch
  s*   € Ø—:‘:˜c¨'¸�:Ó<ˆØ×Ñ˜Ÿ™¨Ö1r;   c                óf   € V P                  R RRR7      pV P                  VP                  R4       R# )rZ   r¾  Tr¿  s   otherNrq  ró   s   & r9   Ú
test_otherÚPatchMethodTest.test_other
  s*   € Ø—:‘:˜c¨'ÈT�:ÓRˆØ×Ñ˜Ÿ™¨Ö1r;   rK   N)
rN   rO   rP   rQ   r   r\   rÚ  rÝ  rS   rT   rU   s   @r9   rÐ  rÐ  
  s    ø‡ € ô	 �.ô 	 ò2÷2ð 2r;   rÐ  c                   ó<   a € ] tR tRt o  ! R R]4      tR tRtV tR# )ÚFinishInPrepareTesti
  c                   ó,   a € ] tR tRt o R tR tRtV tR# )ÚFinishInPrepareTest.Handleri
  c                ó(   € V P                  R 4       R# )rò   NrÐ  rB   s   &r9   r/  Ú#FinishInPrepareTest.Handler.prepare
  s   € Ø�K‰K˜Ör;   c                ó   € \        R 4      h)zshould not reach this methodr1  rB   s   &r9   re   ÚFinishInPrepareTest.Handler.get
  s   € ô Ð:Ó;Ð;r;   rK   NrÒ  rU   s   @r9   r\   râ  
  s   ø‡ € ò	 ÷	<ð 	<r;   r\   c                ó`   € V P                  R 4      pV P                  VP                  R4       R# )rZ   s   doneNrq  ró   s   & r9   Útest_finish_in_prepareÚ*FinishInPrepareTest.test_finish_in_prepare%
  s#   € Ø—:‘:˜c“?ˆØ×Ñ˜Ÿ™¨Ö0r;   rK   N)	rN   rO   rP   rQ   r   r\   rè  rS   rT   rU   s   @r9   rà  rà  
  s   ø‡ € ô<�.ô <÷1ð 1r;   rà  c                   ó,   a € ] tR tRt o R tR tRtV tR# )ÚDefault404Testi*
  c                ó   € R \         3.# ©r  râ   rB   s   &r9   r?   ÚDefault404Test.get_handlers+
  s   € àœÐ(Ð)Ð)r;   c                ó˜   € V P                  R 4      pV P                  VP                  R4       V P                  VP                  R4       R# )rZ   r   sE   <html><title>404: Not Found</title><body>404: Not Found</body></html>Nr:  ró   s   & r9   Útest_404ÚDefault404Test.test_404/
  s=   € Ø—:‘:˜c“?ˆØ×Ñ˜Ÿ™¨Ô,Ø×ÑØ�M‰Mð2ö	
r;   rK   N)rN   rO   rP   rQ   r?   rð  rS   rT   rU   s   @r9   rë  rë  *
  s   ø‡ € ò*÷
ð 
r;   rë  c                   ó2   a € ] tR tRt o R tR tR tRtV tR# )ÚCustom404Testi9
  c                ó   € R \         3.# rí  râ   rB   s   &r9   r?   ÚCustom404Test.get_handlers:
  ó   € ØœÐ(Ð)Ð)r;   c                ó8   €  ! R  R\         4      p\        VR7      # )c                   ó&   a € ] tR tRt o R tRtV tR# )Ú6Custom404Test.get_app_kwargs.<locals>.Custom404Handleri>
  c                óJ   € V P                  R 4       V P                  R4       R# )r   zcustom 404 responseN)rF  rd   rB   s   &r9   re   Ú:Custom404Test.get_app_kwargs.<locals>.Custom404Handler.get?
  s   € Ø—‘ Ô$Ø—
‘
Ð0Ö1r;   rK   Nrg   rU   s   @r9   ÚCustom404Handlerrù  >
  s   ø‡ € ÷2ð 2r;   rü  )Údefault_handler_class)r   rp   )rC   rü  s   & r9   r@   ÚCustom404Test.get_app_kwargs=
  s   € ô	2œ~ô 	2ô
 Ð*:Ô;Ð;r;   c                ó˜   € V P                  R 4      pV P                  VP                  R4       V P                  VP                  R4       R# )rZ   r   s   custom 404 responseNr:  ró   s   & r9   rð  ÚCustom404Test.test_404E
  s8   € Ø—:‘:˜c“?ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™Ð(>Ö?r;   rK   N)	rN   rO   rP   rQ   r?   r@   rð  rS   rT   rU   s   @r9   ró  ró  9
  s   ø‡ € ò*ò<÷@ð @r;   ró  c                   ó2   a € ] tR tRt o R tR tR tRtV tR# )ÚDefaultHandlerArgumentsTestiK
  c                ó   € R \         3.# rí  râ   rB   s   &r9   r?   Ú(DefaultHandlerArgumentsTest.get_handlersL
  rö  r;   c                ó8   € \        \        \        R R7      R7      # )r  r”  )rý  Údefault_handler_args)rp   r#   rB   s   &r9   r@   Ú*DefaultHandlerArgumentsTest.get_app_kwargsO
  s   € ÜÜ".Ü!%°#Ô!6ô
ð 	
r;   c                ó`   € V P                  R 4      pV P                  VP                  R4       R# )rZ   r  Nrâ  ró   s   & r9   Útest_403Ú$DefaultHandlerArgumentsTest.test_403U
  s#   € Ø—:‘:˜c“?ˆØ×Ñ˜Ÿ™¨Ö,r;   rK   N)	rN   rO   rP   rQ   r?   r@   r	  rS   rT   rU   s   @r9   r  r  K
  s   ø‡ € ò*ò
÷-ð -r;   r  c                   ó,   a € ] tR tRt o R tR tRtV tR# )ÚHandlerByNameTestiZ
  c                ó,   € R \         3R\        RR4      .# )ú/hello1ú"tornado.test.web_test.HelloHandlerú/hello3)ú/hello2r  )r_   r%   rB   s   &r9   r?   ÚHandlerByNameTest.get_handlers[
  s$   € ð œÐ%Ø=Ü�	Ð?Ó@ð
ð 	
r;   c                ó  € V P                  R 4      pV P                  VP                  R4       V P                  R4      pV P                  VP                  R4       V P                  R4      pV P                  VP                  R4       R# )r  rô  r  r  Nrq  ©rC   Úresps   & r9   Útest_handler_by_nameÚ&HandlerByNameTest.test_handler_by_namec
  sh   € Ø�z‰z˜)Ó$ˆØ×Ñ˜Ÿ™ HÔ-Ø�z‰z˜)Ó$ˆØ×Ñ˜Ÿ™ HÔ-Ø�z‰z˜)Ó$ˆØ×Ñ˜Ÿ™ HÖ-r;   rK   N)rN   rO   rP   rQ   r?   r  rS   rT   rU   s   @r9   r  r  Z
  s   ø‡ € ò
÷.ð .r;   r  c                   ól   a € ] tR tRt o R tR t]R 4       t]R 4       t]R 4       t	]R 4       t
RtV tR	# )
ÚStreamingRequestBodyTestil
  c                óÔ   € \          ! R  R\        4      4       p\          ! R R\        4      4       p\          ! R R\        4      4       pRV\        V R7      3RV3R	V\        V R7      3.# )
c                   ó8   a € ] tR tRt o R tR tR tR tRtV t	R# )ÚCStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandlerin
  c                ó   € Wn         R # r2   rË  rÈ   s   &&r9   r¯  ÚNStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.initializep
  ó   € Ø –	r;   c                óP   € V P                   P                  P                  R 4       R # r2   )rÉ   ÚpreparedÚ
set_resultrB   s   &r9   r/  ÚKStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.prepares
  s   € Ø—	‘	×"Ñ"×-Ñ-¨dÖ3r;   c                óP   € V P                   P                  P                  V4       R # r2   )rÉ   r}  r"  ©rC   r}  s   &&r9   Údata_receivedÚQStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.data_receivedv
  s   € Ø—	‘	—‘×)Ñ)¨$Ö/r;   c                ór   € V P                   P                  P                  R 4       V P                  / 4       R # r2   )rÉ   Úfinishedr"  rd   rB   s   &r9   re   ÚGStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.gety
  s%   € Ø—	‘	×"Ñ"×-Ñ-¨dÔ3Ø—
‘
˜2–r;   rË  N)
rN   rO   rP   rQ   r¯  r/  r&  re   rS   rT   rU   s   @r9   ÚStreamingBodyHandlerr  n
  s   ø‡ € ò!ò4ò0÷ð r;   r+  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚAStreamingRequestBodyTest.get_handlers.<locals>.EarlyReturnHandleri}
  c                ó   € \        R 4      h)é‘  r�  rB   s   &r9   r/  ÚIStreamingRequestBodyTest.get_handlers.<locals>.EarlyReturnHandler.prepare
  s   € ô   “nÐ$r;   rK   NrŒ  rU   s   @r9   ÚEarlyReturnHandlerr-  }
  s   ø‡ € ÷%ð %r;   r1  c                   ó8   a a€ ] tR tRt oR tV 3R ltRtVtV ;t# )ÚDStreamingRequestBodyTest.get_handlers.<locals>.CloseDetectionHandleri„
  c                ó   € Wn         R # r2   rË  rÈ   s   &&r9   r¯  ÚOStreamingRequestBodyTest.get_handlers.<locals>.CloseDetectionHandler.initialize†
  r  r;   c                ón   <€ \         SV `  4        V P                  P                  P	                  R 4       R # r2   )rŸ  rÔ  rÉ   Úclose_futurer"  r£  s   &€r9   rÔ  ÚXStreamingRequestBodyTest.get_handlers.<locals>.CloseDetectionHandler.on_connection_close‰
  s&   ø€ Ü‘Ñ+Ô-Ø—	‘	×&Ñ&×1Ñ1°$Ö7r;   rË  )	rN   rO   rP   rQ   r¯  rÔ  rS   rT   r
  r  s   @@r9   ÚCloseDetectionHandlerr3  „
  s   ù‡ € ò!÷8õ 8r;   r9  z/stream_bodyrË  z/early_returnz/close_detection)r,   r   rp   )rC   r+  r1  r9  s   &   r9   r?   Ú%StreamingRequestBodyTest.get_handlersm
  s„   € Ü	ô	¤>ó 	ó 
ð	ô 
ô	%¤ó 	%ó 
ð	%ô 
ô	8¤Nó 	8ó 
ð	8ð Ð1´4¸T´?ÐCØÐ0Ð1ØÐ!6¼À$¼ÐHð
ð 	
r;   c                óX  € \         P                   ! \         P                  \         P                  ^ 4      pVP                  RV P	                  4       34       \        V4      pVP                  RV,           R,           4       V'       d   VP                  R4       VP                  R4       V# )r   rÛ  s   GET s    HTTP/1.1
Host: 127.0.0.1
s   Connection: close
s   Transfer-Encoding: chunked

)rá  râ  rã  rä  rå  r   rd   )rC   r%   Úconnection_closerê  ræ  s   &&&  r9   rä  Ú StreamingRequestBodyTest.connect“
  sy   € ä�MŠMœ&Ÿ.™.¬&×*<Ñ*<¸aÓ@ˆØ	�	‰	�; × 2Ñ 2Ó 4Ð5Ô6Ü˜!“ˆØ�‰�W˜s•]Ð%HÕHÔIßØ�L‰LÐ1Ô2Ø�‰Ð:Ô;Øˆr;   c              #  óN  "  € \        4       V n        \        4       V n        \        4       V n        V P	                  R RR7      pV P                  x € VP                  R4       V P                  x €pV P                  VR4       \        4       V n        VP                  R4       V P                  x €pV P                  VR4       VP                  R4       V P                  x € VP                  4       x €pV P                  VP                  R4      4       VP                  4        R	# 5i)
s   /stream_bodyT©r<  ó	   4
asdf
s   asdfs	   4
qwer
s   qwers   0

s   {}N)r   r!  r}  r)  rä  rd   rŠ   Úread_until_closerñ   r«  rî  ©rC   ræ  r}  s   &  r9   Útest_streaming_bodyÚ,StreamingRequestBodyTest.test_streaming_bodyž
  sÚ   é € ä›ˆŒÜ“HˆŒ	Ü›ˆŒà—‘˜oÀ�ÓEˆØ�m‰mÒØ�‰Ð%Ô&à—Y‘Y‰ˆØ×Ñ˜˜wÔ'Ü“HˆŒ	Ø�‰Ð%Ô&Ø—Y‘Y‰ˆØ×Ñ˜˜wÔ'Ø�‰�\Ô"Ø�m‰mÒØ×,Ñ,Ó.Ñ.ˆà�‰˜Ÿ™ eÓ,Ô-Ø�‰Žùs   ‚D#D%c              #  ó˜   "  € V P                  R RR7      pVP                  4       x €pV P                  VP                  R4      4       R# 5i)ó   /early_returnFr?  ó   HTTP/1.1 401N)rä  rA  rñ   r‘  rB  s   &  r9   Útest_early_returnÚ*StreamingRequestBodyTest.test_early_returnµ
  s>   é € à—‘Ð.À�ÓGˆØ×,Ñ,Ó.Ñ.ˆØ�‰˜Ÿ™¨Ó8Ö9ùs   ‚AA
c              #  óº   "  € V P                  R RR7      pVP                  R4       VP                  4       x €pV P                  VP	                  R4      4       R# 5i)rF  Fr?  r@  rG  N)rä  rd   rA  rñ   r‘  rB  s   &  r9   Útest_early_return_with_dataÚ4StreamingRequestBodyTest.test_early_return_with_data»
  sK   é € à—‘Ð.À�ÓGˆØ�‰Ð%Ô&Ø×,Ñ,Ó.Ñ.ˆØ�‰˜Ÿ™¨Ó8Ö9ùs   ‚AAc              #  óŽ   "  € \        4       V n        V P                  R RR7      pVP                  4        V P                  x € R# 5i)s   /close_detectionFr?  N)r   r7  rä  rî  )rC   ræ  s   & r9   Útest_close_during_uploadÚ1StreamingRequestBodyTest.test_close_during_uploadÂ
  s7   é € ä"›HˆÔØ—‘Ð1ÀE�ÓJˆØ�‰ŒØ×ÑÔùrÒ  )r7  r}  r)  r!  N)rN   rO   rP   rQ   r?   rä  r   rC  rH  rK  rN  rS   rT   rU   s   @r9   r  r  l
  s`   ø‡ € ò$
òL	ð ñó ðð, ñ:ó ð:ð
 ñ:ó ð:ð ñ ó ö r;   r  c                   ó’   a € ] tR tRt o R t]P                  R 4       t]P                  R 4       t
]P                  R 4       tRtV tR# )ÚBaseFlowControlHandleriÎ
  c                ó.   € Wn         R V n        . V n        R # r2   )rÉ   rë   ÚmethodsrÈ   s   &&r9   r¯  Ú!BaseFlowControlHandler.initializeÐ
  s   € ØŒ	ØˆŒØˆŽr;   c              #  óò   "  € V P                   e,   V P                  P                  RV RV P                    24       Wn         V P                  P	                  V4        R x € R V n         R #   R T n         i ; i5i)Nzentered method z
 while in )rë   rÉ   ÚfailrS  r€  rŠ  s   &&r9   Ú	in_methodÚ BaseFlowControlHandler.in_methodÕ
  s]   é € à�;‰;Ò"Ø�I‰I�N‰N˜_¨V¨H°J¸t¿{¹{¸mÐLÔMØŒØ�‰×Ñ˜FÔ#ð	ÛàˆDŽKø˜$ˆD�Küs   ‚AA7ÁA+ Á"	A7Á+	A4Á4A7c              #  óh   "  € V P                   P                  R 4       \        P                  x € R# 5i)r/  N)rS  r€  r   ÚmomentrB   s   &r9   r/  ÚBaseFlowControlHandler.prepareà
  s#   é € ð 	�‰×Ñ˜IÔ&Ü�j‰jÔùs   ‚02c              #  óæ   "  € V P                  R 4      ;_uu_ 4        \        P                  x € RRR4       V P                  \	        V P
                  R7      4       R#   + '       g   i     L7; i5i)rÎ   N©rS  )rW  r   rZ  rd   rp   rS  rB   s   &r9   rÎ   ÚBaseFlowControlHandler.postç
  s@   é € à�^‰^˜F×#Õ#Ü—*‘*Ò÷ $à�
‰
”4 §¡Ô-Ö.÷ $×#üs   ‚A1œA¯/A1ÁA.	Á)A1)rë   rS  rÉ   N)rN   rO   rP   rQ   r¯  Ú
contextlibÚcontextmanagerrW  r   rÐ   r/  rÎ   rS   rT   rU   s   @r9   rQ  rQ  Î
  sT   ø‡ € òð
 ×Ññó ðð 	‡]�]ñó ðð 	‡]�]ñ/ó ö/r;   rQ  c                   ób   a € ] tR tRt o R tR tV 3R lR ltV 3R lR ltV 3R lR	 ltR
t	V t
R# )Ú#BaseStreamingRequestFlowControlTestiî
  c                ó   € \        ^
RR7      # )é
   T)Ú
chunk_sizeÚdecompress_requestræ   rB   s   &r9   Úget_httpserver_optionsÚ:BaseStreamingRequestFlowControlTest.get_httpserver_optionsï
  s   € ô ˜r°dÔ;Ð;r;   c                ó   € \        4       # r2   r   rB   s   &r9   r¶  Ú3BaseStreamingRequestFlowControlTest.get_http_clientô
  rb  r;   c                ó4   <€ V ^8„  d   QhRS[ P                  /# ©rm  rC   ©r(  ÚAny)rn  rV   s   "€r9   ro  Ú0BaseStreamingRequestFlowControlTest.__annotate__ù
  s   ø€ ÷ 
ñ 
©6¯:©:ñ 
r;   c                ó°   € V P                  R RRR7      pVP                  4        V P                  \        VP                  4      \        . ROR7      4       R# )rZ   Úabcdefghijklmnopqrstuvwxyzré   )rì   rë   r]  N©r/  r&  r&  r&  rÎ   )rí   r·  rŠ   r   rì   rp   ró   s   & r9   Útest_flow_control_fixed_bodyÚ@BaseStreamingRequestFlowControlTest.test_flow_control_fixed_bodyù
  sJ   € Ø—:‘:˜cÐ(DÈV�:ÓTˆØ×ÑÔØ×ÑÜ˜Ÿ™Ó&Üòôö	
r;   c                ó4   <€ V ^8„  d   QhRS[ P                  /# rl  rm  )rn  rV   s   "€r9   ro  ro  	  s   ø€ ÷ 
ñ 
©V¯Z©Zñ 
r;   c                óì   a€ . ROo\         P                  V3R l4       pV P                  RVRR7      pVP                  4        V P	                  \        VP                  4      \        . ROR7      4       R# )	ó   abcdc              3   ó6   <"  € S F  pV ! V4      x € K  	  R # 5ir2   rK   )rd   ÚiÚchunkss   & €r9   Úbody_producerÚYBaseStreamingRequestFlowControlTest.test_flow_control_chunked_body.<locals>.body_producer  s   øé € ã�Ù˜A“h”ó ùs   ƒrZ   ré   )r{  rë   r]  N)rw  s   efghs   ijklrr  )r   rÐ   rí   r·  rŠ   r   rì   rp   )rC   r{  rô   rz  s   &  @r9   Útest_flow_control_chunked_bodyÚBBaseStreamingRequestFlowControlTest.test_flow_control_chunked_body	  sg   ø€ Ú,ˆä	�‰ô	ó 
ð	ð —:‘:˜c°Àv�:ÓNˆØ×ÑÔØ×ÑÜ˜Ÿ™Ó&Üòôö	
r;   c                ó4   <€ V ^8„  d   QhRS[ P                  /# rl  rm  )rn  rV   s   "€r9   ro  ro     s   ø€ ÷ 
ñ 
±·
±
ñ 
r;   c                ó\  € \        4       p\        P                  ! R VR7      pVP                  R4       VP	                  4        VP                  4       pV P                  RVRRR/R7      pVP                  4        V P                  \        VP                  4      \        . R
OR7      4       R	# )r  )ÚmodeÚfileobjs   abcdefghijklmnopqrstuvwxyzrZ   ré   r  r  )rì   rë   rh  r]  Nrr  )r0   r  ÚGzipFilerd   rî  Úgetvaluerí   r·  rŠ   r   rì   rp   )rC   ÚbytesioÚ	gzip_fileÚcompressed_bodyrô   s   &    r9   Ú!test_flow_control_compressed_bodyÚEBaseStreamingRequestFlowControlTest.test_flow_control_compressed_body   s—   € Ü“)ˆÜ—M’M s°GÔ<ˆ	Ø�‰Ð5Ô6Ø�‰ÔØ!×*Ñ*Ó,ˆØ—:‘:ØØ ØØ'¨Ð0ð	 ó 
ˆð 	×ÑÔØ×ÑÜ˜Ÿ™Ó&Üòôö	
r;   rK   N)rN   rO   rP   rQ   rg  r¶  rs  r}  rˆ  rS   rT   rU   s   @r9   rb  rb  î
  s-   ø‡ € ò<ò
'÷

ð 
÷ 
ð 
÷.
ö 
r;   rb  c                   ó&   a € ] tR tRt o R tRtV tR# )Ú(DecoratedStreamingRequestFlowControlTesti;  c                ó@   €  ! R  R\         4      pRV\        V R7      3.# )c                   óD   a € ] tR tRt o ]P
                  R 4       tRtV tR# )ÚZDecoratedStreamingRequestFlowControlTest.get_handlers.<locals>.DecoratedFlowControlHandleri?  c              3  óž   "  € V P                  R 4      ;_uu_ 4        \        P                  x € RRR4       R#   + '       g   i     R# ; i5i©r&  N)rW  r   rZ  r%  s   &&r9   r&  ÚhDecoratedStreamingRequestFlowControlTest.get_handlers.<locals>.DecoratedFlowControlHandler.data_received@  s,   é € à—^‘^ O×4Õ4ÜŸ*™*Ò$÷ 5×4×4Ò4üs   ‚Aœ9¯
A¹A
	Á	ArK   N)	rN   rO   rP   rQ   r   rÐ   r&  rS   rT   rU   s   @r9   ÚDecoratedFlowControlHandlerrŽ  ?  s   ø‡ € Ø�]‰]ñ%ó ö%r;   r’  rZ   rË  ©rQ  rp   )rC   r’  s   & r9   r?   Ú5DecoratedStreamingRequestFlowControlTest.get_handlers>  s&   € ô	%Ô*@ô 	%ð Ð1´4¸T´?ÐCÐDÐDr;   rK   N©rN   rO   rP   rQ   r?   rS   rT   rU   s   @r9   r‹  r‹  ;  s   ø‡ € ÷Eð Er;   r‹  c                   ó&   a € ] tR tRt o R tRtV tR# )Ú%NativeStreamingRequestFlowControlTestiH  c                ó@   €  ! R  R\         4      pRV\        V R7      3.# )c                   ó&   a € ] tR tRt o R tRtV tR# )ÚTNativeStreamingRequestFlowControlTest.get_handlers.<locals>.NativeFlowControlHandleriL  c              “  ó¸   "  € V P                  R 4      ;_uu_ 4        ^ RIpVP                  ^ 4      G Rj  x€L
  RRR4       R#  L  + '       g   i     R# ; i5ir�  )rW  ÚasynciorÞ  )rC   r}  rœ  s   && r9   r&  ÚbNativeStreamingRequestFlowControlTest.get_handlers.<locals>.NativeFlowControlHandler.data_receivedM  sA   é € Ø—^‘^ O×4Õ4Û"à!Ÿ-™-¨Ó*×*Ð*÷ 5Ñ4ñ +÷ 5×4Ð4üs+   ‚AœAµA¶Aº
AÁAÁA	Á	ArK   N)rN   rO   rP   rQ   r&  rS   rT   rU   s   @r9   ÚNativeFlowControlHandlerrš  L  s   ø‡ € ÷+ð +r;   rž  rZ   rË  r“  )rC   rž  s   & r9   r?   Ú2NativeStreamingRequestFlowControlTest.get_handlersK  s&   € ô	+Ô'=ô 	+ð Ð.´¸$´Ð@ÐAÐAr;   rK   Nr•  rU   s   @r9   r—  r—  H  s   ø‡ € ÷Bð Br;   r—  c                   ó2   a € ] tR tRt o R tR tR tRtV tR# )ÚIncorrectContentLengthTestiV  c                ón   a€ V oR V n          ! V3R lR\        4      p ! V3R lR\        4      pRV3RV3.# )Nc                   ó.   <a € ] tR tRt o V3R ltRtV tR# )Ú8IncorrectContentLengthTest.get_handlers.<locals>.TooHighi\  c                ó†   <€ V P                  R R4        V P                  R4       R#   \         d   pTSn        h Rp?ii ; i)r�  rï  râ  N©rc  rÆ   rü  Úserver_error©rC   r5  rÉ   s   & €r9   re   Ú<IncorrectContentLengthTest.get_handlers.<locals>.TooHigh.get]  s>   ø€ Ø—‘Ð 0°$Ô7ðØ—K‘K Ö%øÜ ô Ø()�DÔ%Øûðúó   •( ¨A ³;»A rK   Nrg   rÑ   s   @€r9   ÚTooHighr¤  \  ó   ù‡ € ÷ó r;   r«  c                   ó.   <a € ] tR tRt o V3R ltRtV tR# )Ú7IncorrectContentLengthTest.get_handlers.<locals>.TooLowie  c                ó†   <€ V P                  R R4        V P                  R4       R#   \         d   pTSn        h Rp?ii ; i)r�  rÜ  rb   Nr¦  r¨  s   & €r9   re   Ú;IncorrectContentLengthTest.get_handlers.<locals>.TooLow.getf  s>   ø€ Ø—‘Ð 0°#Ô6ðØ—K‘K Ö(øÜ ô Ø()�DÔ%Øûðúrª  rK   Nrg   rÑ   s   @€r9   ÚTooLowr®  e  r¬  r;   r±  ú/highú/low)r§  r   )rC   r«  r±  rÉ   s   &  @r9   r?   Ú'IncorrectContentLengthTest.get_handlersW  s?   ø€ ØˆØ ˆÔ÷	”nô 	÷	”^ô 	ð ˜'Ð" V¨VÐ$4Ð5Ð5r;   c                ó¸  € \        \        R 4      ;_uu_ 4        \        \        R4      ;_uu_ 4        V P                  \        4      ;_uu_ 4        V P                  RRR7       RRR4       RRR4       RRR4       V P                  \        V P                  4      R4       R#   + '       g   i     LG; i  + '       g   i     LR; i  + '       g   i     L]; i)ú*(Uncaught exception|Exception in callback)úS(Cannot send error response after headers written|Failed to flush partial response)r²  T©Úraise_errorNz0Tried to write 40 bytes less than Content-Length©	r   r   r   ÚassertRaisesr   rí   rŠ   r   r§  rB   s   &r9   Útest_content_length_too_highÚ7IncorrectContentLengthTest.test_content_length_too_highp  s™   € ô ”wÐ L×MÕMÜÜð5÷õ ð
 ×&Ñ&¤×7Õ7Ø—J‘J˜w°D�JÔ9÷ 8÷÷ Nð 	×ÑÜ�×!Ñ!Ó"Ð$Vö	
÷ 8×7ú÷÷ ú÷ N×Múó:   ™C	²B6	ÁB#Á$B6	Á,C	Â#B3Â.B6	Â6CÃC	Ã	C	c                ó¸  € \        \        R 4      ;_uu_ 4        \        \        R4      ;_uu_ 4        V P                  \        4      ;_uu_ 4        V P                  RRR7       RRR4       RRR4       RRR4       V P                  \        V P                  4      R4       R#   + '       g   i     LG; i  + '       g   i     LR; i  + '       g   i     L]; i)r¶  r·  r³  Tr¸  Nz,Tried to write more data than Content-Lengthrº  rB   s   &r9   Útest_content_length_too_lowÚ6IncorrectContentLengthTest.test_content_length_too_low€  s™   € ô ”wÐ L×MÕMÜÜð5÷õ ð
 ×&Ñ&¤×7Õ7Ø—J‘J˜v°4�JÔ8÷ 8÷÷ Nð 	×ÑÜ�×!Ñ!Ó"Ð$Rö	
÷ 8×7ú÷÷ ú÷ N×Múr¾  )r§  N)	rN   rO   rP   rQ   r?   r¼  rÀ  rS   rT   rU   s   @r9   r¡  r¡  V  s   ø‡ € ò6ò2
÷ 
ð 
r;   r¡  c                   ó<   a € ] tR tRt o  ! R R]4      tR tRtV tR# )ÚClientCloseTesti‘  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚClientCloseTest.Handleri’  c                ó   € V P                   P                  P                  R 4      '       dB   V P                   P                  P                  P                  4        V P                  R4       R# V P                  R4       R# )zHTTP/1rb   úrequires HTTP/1.xN)rù  r…   r‘  Ú
connectionræ  rî  rd   rB   s   &r9   re   ÚClientCloseTest.Handler.get“  sV   € Ø�|‰|×#Ñ#×.Ñ.¨x×8Ò8ð —‘×'Ñ'×.Ñ.×4Ñ4Ô6Ø—
‘
˜7Ö#ð —
‘
Ð.Ö/r;   rK   Nrg   rU   s   @r9   r\   rÅ  ’  s   ø‡ € ÷	0ð 	0r;   r\   c                ó<  € V P                  \        \        P                  34      ;_uu_ 4        V P	                  R RR7      pVP
                  R8X  d   V P                  R4       V P                  VP                  R4       RRR4       R#   + '       g   i     R# ; i)rZ   Tr¸  s   requires HTTP/1.xrÇ  iW  N)	r»  r   r  ÚSkipTestrí   rì   ÚskipTestrŠ   rï   ró   s   & r9   Útest_client_closeÚ!ClientCloseTest.test_client_close   sn   € Ø×Ñ¤´×1BÑ1BÐC×DÕDØ—z‘z #°4�zÓ8ˆHØ�}‰}Ð 4Ô4Ø—‘Ð1Ô2Ø×Ñ˜XŸ]™]¨CÔ0÷	 E×D×DÒDús   ®AB
Â
B	rK   N)	rN   rO   rP   rQ   r   r\   rÍ  rS   rT   rU   s   @r9   rÃ  rÃ  ‘  s   ø‡ € ô0�.ô 0÷1ð 1r;   rÃ  c                   ó|   a € ] tR tRt o Rt^ R^R^R/tR tR tR tR	 t	R
 t
R tR tR tR tR tR tR tRtV tR# )ÚSignedValueTesti¨  zIt's a secret to everybodyÚ	asdfbasdfÚ12312312Ú2342342c                ó0   € V P                  4       R,
          # )i€Q i 0* )ÚpresentrB   s   &r9   ÚpastÚSignedValueTest.past¬  s   € Ø�|‰|‹~ 
Õ*Ð*r;   c                ó   € R # )i m|MrK   rB   s   &r9   rÕ  ÚSignedValueTest.present¯  s   € Ùr;   c                óF  € \        \        P                  R R^V P                  R7      pV P	                  VR4       \        \        P                  R R^V P                  R7      pV P	                  VR4       \        \        P                  R RV P                  R7      pV P	                  W24       \        \        P                  R V^V P                  R7      pV P	                  VR4       \        \        P                  R V^V P                  R7      pV P	                  VR4       R# )	rþ  ry   )r…   Úclocks<   dmFsdWU=|1300000000|31c934969f53e48164c50768b40cbd7e2daaaa4fse   2|1:0|10:1300000000|3:key|8:dmFsdWU=|3d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e152©rÛ  )r‡   rÛ  ó   valueN)r'   rÐ  ÚSECRETrÕ  rŠ   r(   )rC   Ú	signed_v1Ú	signed_v2Úsigned_defaultÚ
decoded_v1Ú
decoded_v2s   &     r9   Útest_known_valuesÚ!SignedValueTest.test_known_values²  s  € Ü'Ü×"Ñ" E¨7¸AÀTÇ\Á\ô
ˆ	ð 	×ÑØÐVô	
ô (Ü×"Ñ" E¨7¸AÀTÇ\Á\ô
ˆ	ð 	×ÑØðPô	
ô -Ü×"Ñ" E¨7¸$¿,¹,ô
ˆð 	×Ñ˜Ô3ä(Ü×"Ñ" E¨9À!È4Ï<É<ô
ˆ
ð 	×Ñ˜ XÔ.ä(Ü×"Ñ" E¨9À!È4Ï<É<ô
ˆ
ð 	×Ñ˜ XÖ.r;   c                ó~  € \        \        P                  R RV P                  R7      p\        \        P                  RRV P                  R7      p\	        \        P                  RWP                  R7      pV P                  V4       \	        \        P                  R W P                  R7      pV P                  V4       R# )Úkey1ry   rÜ  Úkey2N)r'   rÐ  rÞ  rÕ  r(   r›   )rC   Úsigned1Úsigned2Údecoded1Údecoded2s   &    r9   Útest_name_swapÚSignedValueTest.test_name_swapÒ  s–   € Ü%Ü×"Ñ" F¨G¸4¿<¹<ô
ˆô &Ü×"Ñ" F¨G¸4¿<¹<ô
ˆô 'Ü×"Ñ" F¨G¿<¹<ô
ˆð 	×Ñ˜(Ô#Ü&Ü×"Ñ" F¨G¿<¹<ô
ˆð 	×Ñ˜(Ö#r;   c                ó2  € \        \        P                  R RV P                  R7      p\	        \        P                  R WP                  R7      pV P                  VR4       \	        \        P                  R WP                  R7      pV P                  V4       R# )rç  ry   rÜ  rÝ  N)r'   rÐ  rÞ  rÖ  r(   rŠ   rÕ  r›   )rC   ÚsignedÚdecoded_pastÚdecoded_presents   &   r9   Útest_expiredÚSignedValueTest.test_expiredã  sy   € Ü$Ü×"Ñ" F¨G¸4¿9¹9ô
ˆô +Ü×"Ñ" F¨F¿)¹)ô
ˆð 	×Ñ˜ xÔ0Ü-Ü×"Ñ" F¨F¿,¹,ô
ˆð 	×Ñ˜/Ö*r;   c                óÔ   a a€ R oV V3R lpS P                  V! R4      4       S P                  V! R4      4       S P                  V! R4      4       S P                  V! R4      4       R# )Ú@3d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e152c                 óf   <€ R \        \        P                  RV S,           SP                  R7      8H  # ©rÝ  rþ  rÜ  ©r(   rÐ  rÞ  rÕ  )ÚprefixrC   rž   s   &€€r9   ÚvalidateÚ8SignedValueTest.test_payload_tampering.<locals>.validateô  ó/   ø€ ØÔ2Ü×&Ñ&¨¨v¸­|À4Ç<Á<ô ñ ð r;   ú%2|1:0|10:1300000000|3:key|8:dmFsdWU=|z%2|1:1|10:1300000000|3:key|8:dmFsdWU=|z$2|1:0|10:130000000|3:key|8:dmFsdWU=|z&2|1:0|10:1300000000|3:keey|8:dmFsdWU=|N©rñ   ÚassertFalse)rC   rû  rž   s   f @r9   Útest_payload_tamperingÚ&SignedValueTest.test_payload_tamperingð  s]   ù€ àPˆö	ð
 	�‰™Ð!HÓIÔJà×Ñ™Ð"IÓJÔKà×Ñ™Ð"HÓIÔJà×Ñ™Ð"JÓKÖLr;   c                ó0  a a€ R oVV 3R lpS P                  V! R4      4       S P                  V! R4      4       S P                  V! R4      4       S P                  V! R4      4       S P                  V! R4      4       S P                  V! R4      4       R# )	rþ  c                 óf   <€ R \        \        P                  RSV ,           SP                  R7      8H  # rø  rù  )rž   rú  rC   s   &€€r9   rû  Ú:SignedValueTest.test_signature_tampering.<locals>.validate  rý  r;   rö  Ú@4d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e152Ú@3d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e153Ú?3d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e15ÚA3d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e1538NÚ 00000000000000000000000000000000rÿ  )rC   rû  rú  s   f @r9   Útest_signature_tamperingÚ(SignedValueTest.test_signature_tampering  s�   ù€ Ø8ˆö	ð
 	�‰ÙÐWÓXô	
ð 	×Ñ™ (Ó+Ô,à×ÑÙÐWÓXô	
ð 	×ÑÙÐWÓXô	
ð 	×ÑÙÐVÓWô	
ð 	×ÑÙØSóö	
r;   c                óÄ   € R p\        \        P                  RWP                  R7      p\	        \        P                  RW P                  R7      pV P                  W4       R# )r¢   rþ  rÜ  N)r'   rÐ  rÞ  rÕ  r(   rŠ   ©rC   ry   rð  Údecodeds   &   r9   Útest_non_asciiÚSignedValueTest.test_non_ascii!  sO   € ØˆÜ$Ü×"Ñ" E¨5¿¹ô
ˆô &Ü×"Ñ" E¨6¿¹ô
ˆð 	×Ñ˜Ö(r;   c                óÆ   € R p\        \        P                  RWP                  ^ R7      p\	        \        P                  RW P                  R7      pV P                  W4       R# ©r¢   rþ  ©rÛ  rn   rÜ  N©r'   rÐ  ÚSECRET_DICTrÕ  r(   rŠ   r  s   &   r9   Ú*test_key_versioning_read_write_default_keyÚ:SignedValueTest.test_key_versioning_read_write_default_key+  óR   € ØˆÜ$Ü×'Ñ'¨°¿\¹\ÐWXô
ˆô &Ü×'Ñ'¨°¿l¹lô
ˆð 	×Ñ˜Ö(r;   c                óÆ   € R p\        \        P                  RWP                  ^R7      p\	        \        P                  RW P                  R7      pV P                  W4       R# r  r  r  s   &   r9   Ú.test_key_versioning_read_write_non_default_keyÚ>SignedValueTest.test_key_versioning_read_write_non_default_key5  r  r;   c                ó  € R p\        \        P                  RWP                  ^ R7      p\        P                  P	                  4       pVP                  ^ 4       \        VRW P                  R7      pV P                  V4       R# r  )r'   rÐ  r  rÕ  r»   r¼   r(   r›   )rC   ry   rð  Únewkeysr  s   &    r9   Útest_key_versioning_invalid_keyÚ/SignedValueTest.test_key_versioning_invalid_key?  sf   € ØˆÜ$Ü×'Ñ'¨°¿\¹\ÐWXô
ˆô "×-Ñ-×2Ñ2Ó4ˆØ�‰�AŒÜ% g¨u°fÇLÁLÔQˆØ×Ñ˜'Ö"r;   c                ó’   € R p\        \        P                  RWP                  ^R7      p\	        V4      pV P                  ^V4       R# )r¢   rþ  r  N)r'   rÐ  r  rÕ  r)   rŠ   )rC   ry   rð  rn   s   &   r9   Útest_key_version_retrievalÚ*SignedValueTest.test_key_version_retrievalI  sA   € ØˆÜ$Ü×'Ñ'¨°¿\¹\ÐWXô
ˆô 0°Ó7ˆØ×Ñ˜˜KÖ(r;   rK   N)rN   rO   rP   rQ   rÞ  r  rÖ  rÕ  rä  rí  ró  r  r  r  r  r  r  r"  rS   rT   rU   s   @r9   rÐ  rÐ  ¨  s`   ø‡ € Ø)€FØ�k 1 j°!°YÐ?€Kò+òò/ò@$ò"+òMò"
ò@)ò)ò)ò#÷)ð )r;   rÐ  c                   ó¶   a a€ ] tR tRt o ! R R]4      tR tV 3R ltRR ltRR lt	R t
R	 tR
 tR tR tR tR tR tR tR tR tR tR tR tRtVtV ;t# )ÚXSRFTestiR  c                   ó,   a € ] tR tRt o R tR tRtV tR# )ÚXSRFTest.HandleriS  c                óŽ   € \        V P                  R R4      4      pWP                  R&   V P                  V P                  4       R# )r…   rÜ  Úxsrf_cookie_versionN)r*  r+  rl   rd   r"  )rC   r…   s   & r9   re   ÚXSRFTest.Handler.getT  s8   € Ü˜$×+Ñ+¨I°sÓ;Ó<ˆGð 4;�M‰MÐ/Ñ0Ø�J‰J�t—‘Ö'r;   c                ó(   € V P                  R 4       R# rá  rc   rB   s   &r9   rÎ   ÚXSRFTest.Handler.post[  ó   € Ø�J‰J�tÖr;   rK   N©rN   rO   rP   rQ   re   rÎ   rS   rT   rU   s   @r9   r\   r'  S  s   ø‡ € ò	(÷	ð 	r;   r\   c                ó   € \        R R7      # r—  ræ   rB   s   &r9   r@   ÚXSRFTest.get_app_kwargs^  rš  r;   c                óN   <€ \         SV `  4        V P                  4       V n        R # r2   ©rŸ  r/  Ú	get_tokenr"  r£  s   &€r9   r/  ÚXSRFTest.setUpa  ó   ø€ Ü‰‰ŒØŸ.™.Ó*ˆŽr;   c                ó¼   € Ve   V P                  V4      pMR pT P                  Vf   RMRV,          VR7      pVP                  4        \        VP                  4      # )NrZ   z/?version=%dro  ©Úcookie_headersrí   r·  r	   rì   )rC   Ú	old_tokenr…   rh  rô   s   &&&  r9   r3  ÚXSRFTest.get_tokene  s]   € ØÒ Ø×)Ñ)¨)Ó4‰GàˆGØ—:‘:Ø’?‰C¨¸'Õ)AÈGð ó 
ˆð 	×ÑÔÜ˜(Ÿ-™-Ó(Ð(r;   c                ó8   € Vf   V P                   pRRV,           /# )Nrm  z_xsrf=©r"  ©rC   Útokens   &&r9   r8  ÚXSRFTest.cookie_headersp  s    € ØŠ=Ø—O‘OˆEØ˜( UÕ*Ð+Ð+r;   c                óÎ   € \        \        R 4      ;_uu_ 4        V P                  RRRR7      pRRR4       V P                  XP                  R4       R#   + '       g   i     L.; i©ú.*'_xsrf' argument missingrZ   ré   r;   rê   Nr  rÈ  ró   s   & r9   Útest_xsrf_fail_no_tokenÚ XSRFTest.test_xsrf_fail_no_tokenu  óF   € Ü”wÐ <×=Õ=Ø—z‘z #¨f¸3�zÓ?ˆH÷ >à×Ñ˜Ÿ™¨Ö,÷ >×=úó   ™AÁA$	c                ó0  € \        \        R 4      ;_uu_ 4        V P                  RR\        P                  P                  \        V P                  R7      4      R7      pRRR4       V P                  XP                  R4       R#   + '       g   i     L.; i©ú!.*XSRF cookie does not match POSTrZ   ré   ©Ú_xsrfrê   Nr  ©
r   r   rí   rõ  rö  r÷  rp   r"  rŠ   rï   ró   s   & r9   Útest_xsrf_fail_body_no_cookieÚ&XSRFTest.test_xsrf_fail_body_no_cookiez  ój   € Ü”wÐ C×DÕDØ—z‘zØØÜ—\‘\×+Ñ+¬D°t·±Ô,GÓHð "ó ˆH÷ Eð 	×Ñ˜Ÿ™¨Ö,÷ E×Dúó   ™ABÂB	c                ó:  € \        \        R 4      ;_uu_ 4        V P                  RRV P                  4       \        P
                  P                  \        RR7      4      R7      pRRR4       V P                  XP                  R4       R#   + '       g   i     L.; i)z%.*'_xsrf' argument has invalid formatrZ   ré   ú3|rJ  r»  Nr  )
r   r   rí   r8  rõ  rö  r÷  rp   rŠ   rï   ró   s   & r9   Ú&test_xsrf_fail_argument_invalid_formatÚ/XSRFTest.test_xsrf_fail_argument_invalid_formatƒ  sr   € Ü”wÐ G×HÕHØ—z‘zØØØ×+Ñ+Ó-Ü—\‘\×+Ñ+¬D°tÔ,<Ó=ð	 "ó ˆH÷ Ið 	×Ñ˜Ÿ™¨Ö,÷ I×Hús   ™AB
Â
B	c                óR  € \        \        R 4      ;_uu_ 4        V P                  RRV P                  RR7      \        P
                  P                  \        V P                  R7      4      R7      pRRR4       V P                  XP                  R4       R#   + '       g   i     L.; i)	rI  rZ   ré   rR  ©r>  rJ  r»  Nr  )r   r   rí   r8  rõ  rö  r÷  rp   r"  rŠ   rï   ró   s   & r9   Ú$test_xsrf_fail_cookie_invalid_formatÚ-XSRFTest.test_xsrf_fail_cookie_invalid_format�  s{   € Ü”wÐ C×DÕDØ—z‘zØØØ×+Ñ+°$Ð+Ó7Ü—\‘\×+Ñ+¬D°t·±Ô,GÓHð	 "ó ˆH÷ Eð 	×Ñ˜Ÿ™¨Ö,÷ E×Dús   ™ABÂB&	c           	     óì   € \        \        R 4      ;_uu_ 4        V P                  RRRV P                  4       R7      pRRR4       V P	                  XP
                  R4       R#   + '       g   i     L.; i)rB  rZ   ré   r;   ©rë   rì   rh  Nr  )r   r   rí   r8  rŠ   rï   ró   s   & r9   Útest_xsrf_fail_cookie_no_bodyÚ&XSRFTest.test_xsrf_fail_cookie_no_body—  sY   € Ü”wÐ <×=Õ=Ø—z‘zØ˜F¨°d×6IÑ6IÓ6Kð "ó ˆH÷ >ð 	×Ñ˜Ÿ™¨Ö,÷	 >×=ús   ™$A#Á#A3	c           
     óÖ   € V P                  R R\        P                  P                  \	        RR7      4      V P                  RR7      R7      pV P                  VP                  ^È4       R# )rZ   ré   ÚdeadbeefrJ  rV  rZ  N©rí   rõ  rö  r÷  rp   r8  rŠ   rï   ró   s   & r9   Útest_xsrf_success_short_tokenÚ&XSRFTest.test_xsrf_success_short_tokenž  sY   € Ø—:‘:ØØÜ—‘×'Ñ'¬°:Ô(>Ó?Ø×'Ñ'¨jÐ'Ó9ð	 ó 
ˆð 	×Ñ˜Ÿ™¨Ö,r;   c           
     óÖ   € V P                  R R\        P                  P                  \	        RR7      4      V P                  RR7      R7      pV P                  VP                  ^È4       R# )rZ   ré   ÚxoxorJ  rV  rZ  Nr_  ró   s   & r9   Útest_xsrf_success_non_hex_tokenÚ(XSRFTest.test_xsrf_success_non_hex_token§  sY   € Ø—:‘:ØØÜ—‘×'Ñ'¬°6Ô(:Ó;Ø×'Ñ'¨fÐ'Ó5ð	 ó 
ˆð 	×Ñ˜Ÿ™¨Ö,r;   c           
     óæ   € V P                  R R\        P                  P                  \	        V P
                  R7      4      V P                  4       R7      pV P                  VP                  ^È4       R# ©rZ   ré   rJ  rZ  N©	rí   rõ  rö  r÷  rp   r"  r8  rŠ   rï   ró   s   & r9   Útest_xsrf_success_post_bodyÚ$XSRFTest.test_xsrf_success_post_body°  sX   € Ø—:‘:ØØÜ—‘×'Ñ'¬°4·?±?Ô(CÓDØ×'Ñ'Ó)ð	 ó 
ˆð 	×Ñ˜Ÿ™¨Ö,r;   c           	     óô   € V P                  R \        P                  P                  \	        V P
                  R7      4      ,           RRV P                  4       R7      pV P                  VP                  ^È4       R# )z/?rJ  ré   r;   rZ  Nrh  ró   s   & r9   Útest_xsrf_success_query_stringÚ'XSRFTest.test_xsrf_success_query_string¹  s]   € Ø—:‘:Ø”6—<‘<×)Ñ)¬$°T·_±_Ô*EÓFÕFØØØ×'Ñ'Ó)ð	 ó 
ˆð 	×Ñ˜Ÿ™¨Ö,r;   c                ó°   € V P                  R RR\        RV P                  /3/ V P                  4       B R7      pV P	                  VP
                  ^È4       R# )rZ   ré   r;   zX-XsrftokenrZ  N)rí   rp   r"  r8  rŠ   rï   ró   s   & r9   Útest_xsrf_success_headerÚ!XSRFTest.test_xsrf_success_headerÂ  sY   € Ø—:‘:ØØØÜØ §¡Ð0ñà×%Ñ%Ó'ñð	 ó 
ˆð 	×Ñ˜Ÿ™¨Ö,r;   c                ó¶   € ^
p\        4       p\        V4       F"  pVP                  V P                  4       4       K$  	  V P	                  \        V4      V4       R# )rd  N)rç  r0  r’  r3  rŠ   ry  )rC   Ú
NUM_TOKENSÚtokensry  s   &   r9   Útest_distinct_tokensÚXSRFTest.test_distinct_tokensÎ  sD   € àˆ
Ü“ˆÜ�zÖ"ˆAØ�J‰J�t—~‘~Ó'Ö(ñ #à×Ñœ˜V› jÖ1r;   c                óœ  € V P                  4       pV P                  V3 Fj  pV P                  R R\        P                  P                  \        VR7      4      V P                  V4      R7      pV P                  VP                  ^È4       Kl  	  V P                  V3WP                  33 F�  w  rE\        \        R4      ;_uu_ 4        V P                  R R\        P                  P                  \        VR7      4      V P                  V4      R7      pRRR4       V P                  XP                  R4       K�  	  R#   + '       g   i     L2; i)rZ   ré   rJ  rZ  rI  Nr  )r3  r"  rí   rõ  rö  r÷  rp   r8  rŠ   rï   r   r   )rC   Útoken2r>  rô   Úcookie_tokenÚ
body_tokens   &     r9   Útest_cross_userÚXSRFTest.test_cross_userÖ  s  € Ø—‘Ó!ˆà—o‘o vÓ.ˆEØ—z‘zØØÜ—\‘\×+Ñ+¬D°uÔ,=Ó>Ø×+Ñ+¨EÓ2ð	 "ó ˆHð ×Ñ˜XŸ]™]¨CÖ0ñ /ð �_‰_˜fÐ%Ø—_‘_Ð%ó)
Ñ$ˆLô œ7Ð$G×HÕHØŸ:™:ØØ!ÜŸ™×/Ñ/´¸:Ô0FÓGØ ×/Ñ/°Ó=ð	 &ó �÷ Ið ×Ñ˜XŸ]™]¨CÖ0ó)
÷ I×Hús   ÃAD;Ä;Ec                ó¤  € V P                   pV0p\        ^4       F–  pV P                  V4      pVP                  V4       V P	                  RR\
        P                  P                  \        V P                   R7      4      V P                  V4      R7      pV P                  VP                  ^È4       K˜  	  V P                  \        V4      ^4       R# )é   rZ   ré   rJ  rZ  N)r"  r0  r3  r’  rí   rõ  rö  r÷  rp   r8  rŠ   rï   ry  )rC   r>  Útokens_seenry  rô   s   &    r9   Útest_refresh_tokenÚXSRFTest.test_refresh_tokenï  s«   € Ø—‘ˆØ�gˆô
 �q–ˆAØ—N‘N 5Ó)ˆEà�O‰O˜EÔ"Ø—z‘zØØÜ—\‘\×+Ñ+¬D°t·±Ô,GÓHØ×+Ñ+¨EÓ2ð	 "ó ˆHð ×Ñ˜XŸ]™]¨CÖ0ñ ð 	×Ñœ˜[Ó)¨1Ö-r;   c                óh  € V P                  V P                  ^R7      V P                  ^R7      4       V P                  ^R7      p\        ^4       F&  pV P                  V P                  V^R7      V4       K(  	  V P                  V4      pV P                  W4       V P                  W0P                  V4      4       W3W133 Fl  w  rEV P	                  RR\
        P                  P                  \        VR7      4      V P                  V4      R7      pV P                  VP                  ^È4       Kn  	  R# )r³   r„   rZ   ré   rJ  rZ  N)ÚassertNotEqualr3  r0  rŠ   rí   rõ  rö  r÷  rp   r8  rï   )rC   Úv1_tokenry  Úv2_tokenrx  ry  rô   s   &      r9   Útest_versioningÚXSRFTest.test_versioning  s	  € à×Ñ˜DŸN™N°1˜NÓ5°t·~±~Èa°~Ó7PÔQð —>‘>¨!�>Ó,ˆÜ�q–ˆAØ×Ñ˜TŸ^™^¨H¸a˜^Ó@À(ÖKñ ð —>‘> (Ó+ˆØ×Ñ˜HÔ/à×Ñ˜H§n¡n°XÓ&>Ô?ð +3Ð)=ÀÐ?SÓ(TÑ$ˆLØ—z‘zØØÜ—\‘\×+Ñ+¬D°zÔ,BÓCØ×+Ñ+¨LÓ9ð	 "ó ˆHð ×Ñ˜XŸ]™]¨CÖ0ó )Ur;   r<  rñ  r2   )rN   rO   rP   rQ   r   r\   r@   r/  r3  r8  rC  rM  rS  rW  r[  r`  rd  ri  rl  ro  rt  rz  r  r…  rS   rT   r
  r  s   @@r9   r%  r%  R  sp   ù‡ € ô	�.ô 	ò'õ+ô	)ô,ò
-ò
-ò-ò-ò-ò-ò-ò-ò-ò
-ò2ò1ò2.÷(1ò 1r;   r%  c                   ót   a a€ ] tR tRt o ! R R]4      tR tV 3R ltRR ltRR lt	R t
R	 tR
 tRtVtV ;t# )ÚXSRFCookieNameTesti  c                   ó,   a € ] tR tRt o R tR tRtV tR# )ÚXSRFCookieNameTest.Handleri  c                ó<   € V P                  V P                  4       R # r2   ©rd   r"  rB   s   &r9   re   ÚXSRFCookieNameTest.Handler.get   ó   € Ø�J‰J�t—‘Ö'r;   c                ó(   € V P                  R 4       R# rá  rc   rB   s   &r9   rÎ   ÚXSRFCookieNameTest.Handler.post#  r-  r;   rK   Nr.  rU   s   @r9   r\   rŠ    s   ø‡ € ò	(÷	ð 	r;   r\   c                ó"   € \        R RRR /R7      # )Tz__Host-xsrfrO  )r˜  Úxsrf_cookie_nameÚxsrf_cookie_kwargsræ   rB   s   &r9   r@   Ú!XSRFCookieNameTest.get_app_kwargs&  s   € ÜØØ*Ø (¨$Ð/ô
ð 	
r;   c                óN   <€ \         SV `  4        V P                  4       V n        R # r2   r2  r£  s   &€r9   r/  ÚXSRFCookieNameTest.setUp-  r5  r;   c                ó¢   € Ve   V P                  V4      pMR pV P                  RVR7      pVP                  4        \        VP                  4      # )NrZ   ro  r7  )rC   r9  rh  rô   s   &&  r9   r3  ÚXSRFCookieNameTest.get_token1  sJ   € ØÒ Ø×)Ñ)¨)Ó4‰GàˆGØ—:‘:˜c¨7�:Ó3ˆØ×ÑÔÜ˜(Ÿ-™-Ó(Ð(r;   c                ó8   € Vf   V P                   pRRV,           /# )Nrm  z__Host-xsrf=r<  r=  s   &&r9   r8  Ú!XSRFCookieNameTest.cookie_headers:  s    € ØŠ=Ø—O‘OˆEØ˜.¨5Õ0Ð1Ð1r;   c                óÎ   € \        \        R 4      ;_uu_ 4        V P                  RRRR7      pRRR4       V P                  XP                  R4       R#   + '       g   i     L.; irA  rÈ  ró   s   & r9   rC  Ú*XSRFCookieNameTest.test_xsrf_fail_no_token?  rE  rF  c                ó0  € \        \        R 4      ;_uu_ 4        V P                  RR\        P                  P                  \        V P                  R7      4      R7      pRRR4       V P                  XP                  R4       R#   + '       g   i     L.; irH  rL  ró   s   & r9   rM  Ú0XSRFCookieNameTest.test_xsrf_fail_body_no_cookieD  rO  rP  c           
     óæ   € V P                  R R\        P                  P                  \	        V P
                  R7      4      V P                  4       R7      pV P                  VP                  ^È4       R# rg  rh  ró   s   & r9   ri  Ú.XSRFCookieNameTest.test_xsrf_success_post_bodyM  sX   € Ø—:‘:ØØä—‘×'Ñ'¬°4·?±?Ô(CÓDØ×'Ñ'Ó)ð ó 
ˆð 	×Ñ˜Ÿ™¨Ö,r;   r<  r2   )rN   rO   rP   rQ   r   r\   r@   r/  r3  r8  rC  rM  ri  rS   rT   r
  r  s   @@r9   rˆ  rˆ    s9   ù‡ € ô�.ô ò
õ+ô)ô2ò
-ò
-÷-ò -r;   rˆ  c                   óB   a € ] tR tRt o  ! R R]4      tR tR tRtV t	R# )ÚXSRFCookieKwargsTestiX  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚXSRFCookieKwargsTest.HandleriY  c                ó<   € V P                  V P                  4       R # r2   rŒ  rB   s   &r9   re   Ú XSRFCookieKwargsTest.Handler.getZ  rŽ  r;   rK   Nrg   rU   s   @r9   r\   r¤  Y  s   ø‡ € ÷	(ð 	(r;   r\   c                ó2   € \        R \        R ^R7      R7      # )T)rP  rz   )r˜  r“  ræ   rB   s   &r9   r@   Ú#XSRFCookieKwargsTest.get_app_kwargs]  s   € ÜØ´$ÀÐSTÔ2Uô
ð 	
r;   c                óH  € V P                  R 4      pV P                  RVP                  R,          P                  4       4       V P                  RVP                  R,          P                  4       4       VP                  P	                  R4      pVf   Q h\
        P                  ! RV4      pVf   Q h\        P                  P                  \        P                  P                  4      \        P                  ! ^R7      ,           p\        P                  P                  VP                  4       R,          4      pVP                   f+   VP#                  \        P                  P                  R7      pV P%                  \'        WE,
          P)                  4       4      ^
8  4       R# )	rZ   z	httponly;rf  zexpires=Nz.*; expires=(?P<expires>.+);.*r‘  r“  )Útzinfo)rí   rz  rh  Úlowerre   r—   r˜   r”  r•  r–  r—  r˜  r™  rš  r›  rœ  rª  Úreplacerñ   rž  rŸ  r   s   &     r9   Útest_xsrf_httponlyÚ'XSRFCookieKwargsTest.test_xsrf_httponlyb  s9  € Ø—:‘:˜c“?ˆØ�‰�k 8×#3Ñ#3°LÕ#A×#GÑ#GÓ#IÔJØ�‰�j (×"2Ñ"2°<Õ"@×"FÑ"FÓ"HÔIØ×!Ñ!×%Ñ% lÓ3ˆØÒ!Ð!Ð!Ü—’Ð9¸6ÓBˆØÒ Ð Ð ä×#Ñ#×'Ñ'¬×(9Ñ(9×(=Ñ(=Ó>Ä×ASÒASØôB
õ 
ˆô Ÿ™×:Ñ:¸5¿?¹?Ó;LÈYÕ;WÓXˆØ× Ñ Ò(Ø+×3Ñ3¼8×;LÑ;L×;PÑ;PÐ3ÓQˆNØ�‰œ˜WÕ5×DÑDÓFÓGÈ"ÑLÖMr;   rK   N)
rN   rO   rP   rQ   r   r\   r@   r­  rS   rT   rU   s   @r9   r¢  r¢  X  s"   ø‡ € ô(�.ô (ò
÷
Nð Nr;   r¢  c                   ó<   a € ] tR tRt o  ! R R]4      tR tRtV tR# )ÚFinishExceptionTestit  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚFinishExceptionTest.Handleriu  c                óÄ   € V P                  R 4       V P                  RR4       V P                  RR4      '       d   \        R4      hV P	                  R4       \        4       h)r/  úWWW-AuthenticateúBasic realm="something"Úfinish_valuerƒ  zauthentication required)rF  rc  r+  r+   rd   rB   s   &r9   re   ÚFinishExceptionTest.Handler.getv  sQ   € Ø�O‰O˜CÔ Ø�O‰OÐ.Ð0IÔJØ× Ñ  °×4Ò4ÜÐ6Ó7Ð7à—
‘
Ð4Ô5Ü“h�r;   rK   Nrg   rU   s   @r9   r\   r²  u  s   ø‡ € ÷	ð 	r;   r\   c                ó   € R Fw  pV P                  V4      pV P                  VP                  R4       V P                  RVP                  P	                  R4      4       V P                  RVP
                  4       Ky  	  R# )rZ   r/  rµ  r´  s   authentication requiredN)rZ   z/?finish_value=1)rí   rŠ   rï   rh  re   rì   )rC   Úurô   s   &  r9   Útest_finish_exceptionÚ)FinishExceptionTest.test_finish_exception  si   € Û*ˆAØ—z‘z !“}ˆHØ×Ñ˜XŸ]™]¨CÔ0Ø×ÑØ)¨8×+;Ñ+;×+?Ñ+?Ð@RÓ+Sôð ×ÑÐ7¸¿¹ÖGó +r;   rK   N)	rN   rO   rP   rQ   r   r\   rº  rS   rT   rU   s   @r9   r°  r°  t  s   ø‡ € ô�.ô ÷Hð Hr;   r°  c                   ó2   a € ] tR tRt o R tR tR tRtV tR# )ÚDecoratorTesti‰  c                óN   €  ! R  R\         4      p ! R R\         4      pRV3RV3.# )c                   ó0   a € ] tR tRt o ]R 4       tRtV tR# )Ú6DecoratorTest.get_handlers.<locals>.RemoveSlashHandleri‹  c                ó   € R # r2   rK   rB   s   &r9   re   Ú:DecoratorTest.get_handlers.<locals>.RemoveSlashHandler.getŒ  ó   € ár;   rK   N)rN   rO   rP   rQ   r-   re   rS   rT   rU   s   @r9   ÚRemoveSlashHandlerrÀ  ‹  s   ø‡ € Øñó ör;   rÄ  c                   ó0   a € ] tR tRt o ]R 4       tRtV tR# )Ú3DecoratorTest.get_handlers.<locals>.AddSlashHandleri�  c                ó   € R # r2   rK   rB   s   &r9   re   Ú7DecoratorTest.get_handlers.<locals>.AddSlashHandler.get‘  rÃ  r;   rK   N)rN   rO   rP   rQ   r.   re   rS   rT   rU   s   @r9   ÚAddSlashHandlerrÆ  �  s   ø‡ € Øñó ör;   rÉ  ú/removeslash/ú	/addslashrâ   )rC   rÄ  rÉ  s   &  r9   r?   ÚDecoratorTest.get_handlersŠ  s2   € ô	¤ô 	ô
	œnô 	ð
 !Ð"4Ð5¸À_Ð7UÐVÐVr;   c                óN  € V P                  R RR7      pV P                  VP                  R4       V P                  VP                  R,          R4       V P                  RRR7      pV P                  VP                  R4       V P                  VP                  R,          R4       R# )	rÊ  Fr¿  rá  rÂ  z/removeslashz/removeslash/?foo=barz/removeslash?foo=barNræ  ró   s   & r9   Útest_removeslashÚDecoratorTest.test_removeslash—  s†   € Ø—:‘:˜oÀ�:ÓFˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Õ5°~ÔFà—:‘:Ð5È�:ÓNˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Õ5Ð7MÖNr;   c                óN  € V P                  R RR7      pV P                  VP                  R4       V P                  VP                  R,          R4       V P                  RRR7      pV P                  VP                  R4       V P                  VP                  R,          R4       R# )	rË  Fr¿  rá  rÂ  z
/addslash/z/addslash?foo=barz/addslash/?foo=barNræ  ró   s   & r9   Útest_addslashÚDecoratorTest.test_addslash   s†   € Ø—:‘:˜k¸E�:ÓBˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Õ5°|ÔDà—:‘:Ð1ÀE�:ÓJˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Õ5Ð7KÖLr;   rK   N)	rN   rO   rP   rQ   r?   rÎ  rÑ  rS   rT   rU   s   @r9   r½  r½  ‰  s   ø‡ € òWòO÷Mð Mr;   r½  c                   ób   a € ] tR tRt o R tR tR tR tR tR t	R t
R	 tR
 tR tR tRtV tR# )Ú	CacheTestiª  c                ó*   €  ! R  R\         4      pRV3.# )c                   ó,   a € ] tR tRt o R tR tRtV tR# )Ú+CacheTest.get_handlers.<locals>.EtagHandleri¬  c                ó(   € V P                  V4       R # r2   rc   )rC   Úcomputed_etags   &&r9   re   Ú/CacheTest.get_handlers.<locals>.EtagHandler.get­  s   € Ø—
‘
˜=Ö)r;   c                ó(   € V P                   ^ ,          # rÝ  )Ú_write_bufferrB   s   &r9   Úcompute_etagÚ8CacheTest.get_handlers.<locals>.EtagHandler.compute_etag°  s   € Ø×)Ñ)¨!Õ,Ð,r;   rK   N)rN   rO   rP   rQ   re   rÝ  rS   rT   rU   s   @r9   ÚEtagHandlerr×  ¬  s   ø‡ € ò*÷-ð -r;   rß  z
/etag/(.*)râ   )rC   rß  s   & r9   r?   ÚCacheTest.get_handlers«  s   € ô	-œ.ô 	-ð ˜{Ð+Ð,Ð,r;   c                ó2   € R pRpV P                  WR4       R# )ú"xyzzy"Ú*rœ  N©Ú
_test_etag©rC   rÙ  Úetagss   &  r9   Útest_wildcard_etagÚCacheTest.test_wildcard_etagµ  s   € Ø!ˆØˆØ�‰˜¨cÖ2r;   c                ó2   € R pR pV P                  WR4       R# )râ  rœ  Nrä  ræ  s   &  r9   Útest_strong_etag_matchÚ CacheTest.test_strong_etag_matchº  s   € Ø!ˆØˆØ�‰˜¨cÖ2r;   c                ó2   € R pRpV P                  WR4       R# )ú"xyzzy1"ú"xyzzy1", "xyzzy2"rœ  Nrä  ræ  s   &  r9   Útest_multiple_strong_etag_matchÚ)CacheTest.test_multiple_strong_etag_match¿  s   € Ø"ˆØ$ˆØ�‰˜¨cÖ2r;   c                ó2   € R pRpV P                  W^È4       R# )râ  rî  Nrä  ræ  s   &  r9   Útest_strong_etag_not_matchÚ$CacheTest.test_strong_etag_not_matchÄ  s   € Ø!ˆØˆØ�‰˜¨cÖ2r;   c                ó2   € R pRpV P                  W^È4       R# )râ  rï  Nrä  ræ  s   &  r9   Ú#test_multiple_strong_etag_not_matchÚ-CacheTest.test_multiple_strong_etag_not_matchÉ  s   € Ø!ˆØ$ˆØ�‰˜¨cÖ2r;   c                ó2   € R pRpV P                  WR4       R# )rî  ú
W/"xyzzy1"rœ  Nrä  ræ  s   &  r9   Útest_weak_etag_matchÚCacheTest.test_weak_etag_matchÎ  ó   € Ø"ˆØˆØ�‰˜¨cÖ2r;   c                ó2   € R pRpV P                  WR4       R# )ú"xyzzy2"úW/"xyzzy1", W/"xyzzy2"rœ  Nrä  ræ  s   &  r9   Útest_multiple_weak_etag_matchÚ'CacheTest.test_multiple_weak_etag_matchÓ  ó   € Ø"ˆØ(ˆØ�‰˜¨cÖ2r;   c                ó2   € R pRpV P                  W^È4       R# )rþ  rù  Nrä  ræ  s   &  r9   Útest_weak_etag_not_matchÚ"CacheTest.test_weak_etag_not_matchØ  rü  r;   c                ó2   € R pRpV P                  W^È4       R# )z"xyzzy3"rÿ  Nrä  ræ  s   &  r9   Ú!test_multiple_weak_etag_not_matchÚ+CacheTest.test_multiple_weak_etag_not_matchÝ  r	  r;   c                óv   € V P                  R V,           RV/R7      pV P                  VP                  V4       R# )z/etag/r¤  ro  Nrâ  )rC   rÙ  rç  r&  rô   s   &&&& r9   rå  ÚCacheTest._test_etagâ  s:   € Ø—:‘:Ø�}Õ$¨ÀÐ.Fð ó 
ˆð 	×Ñ˜Ÿ™¨Ö4r;   rK   N)rN   rO   rP   rQ   r?   rè  rë  rð  ró  rö  rú  r 	  r	  r	  rå  rS   rT   rU   s   @r9   rÔ  rÔ  ª  sA   ø‡ € ò-ò3ò
3ò
3ò
3ò
3ò
3ò
3ò
3ò
3÷
5ð 5r;   rÔ  c                   ó<   a € ] tR tRt o  ! R R]4      tR tRtV tR# )ÚRequestSummaryTestié  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚRequestSummaryTest.Handleriê  c                óf   € R V P                   n        V P                  V P                  4       4       R # r2   )rù  Ú	remote_iprÆ   r.  rB   s   &r9   re   ÚRequestSummaryTest.Handler.getë  s%   € ð &*ˆD�L‰LÔ"Ø�K‰K˜×-Ñ-Ó/Ö0r;   rK   Nrg   rU   s   @r9   r\   r	  ê  s   ø‡ € ÷	1ð 	1r;   r\   c                ó`   € V P                  R 4      pV P                  VP                  R4       R# )rZ   s   GET / (None)Nrq  r  s   & r9   Útest_missing_remote_ipÚ)RequestSummaryTest.test_missing_remote_ipò  s#   € Ø�z‰z˜#‹ˆØ×Ñ˜Ÿ™ OÖ4r;   rK   N)	rN   rO   rP   rQ   r   r\   r	  rS   rT   rU   s   @r9   r	  r	  é  s   ø‡ € ô1�.ô 1÷5ð 5r;   r	  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚHTTPErrorTesti÷  c                ó  € \        R RR7      p\        P                  ! V4      pV P                  W4       V P                  VP                  VP                  4       V P                  VP
                  VP
                  4       R# )r  zGo awayr^  N)r!   r»   ÚassertIsNotrŠ   r&  r]  )rC   r5  Úe2s   &  r9   Ú	test_copyÚHTTPErrorTest.test_copyø  sY   € Ü�c )Ô,ˆÜ�YŠY�q‹\ˆØ×Ñ˜ÔØ×Ñ˜Ÿ™¨¯©Ô7Ø×Ñ˜Ÿ™ 2§9¡9Ö-r;   rK   N)rN   rO   rP   rQ   r	  rS   rT   rU   s   @r9   r	  r	  ÷  s   ø‡ € ÷.ð .r;   r	  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚApplicationTesti   c                ób   € \        . 4      pVP                  ^ RR7      pVP                  4        R# )r   rÛ  )ÚaddressN)r   Úlistenrñ  )rC   rA   Úservers   &  r9   Útest_listenÚApplicationTest.test_listen  s&   € Ü˜"‹oˆØ—‘˜A {�Ó3ˆØ�‰Žr;   rK   N)rN   rO   rP   rQ   r"	  rS   rT   rU   s   @r9   r	  r	     s   ø‡ € ÷ð r;   r	  c                   ó2   a € ] tR tRt o R tR tR tRtV tR# )ÚURLSpecReverseTesti  c                ó®   € V P                  R \        RR4      P                  4       4       V P                  R \        RR4      P                  4       4       R# )z/favicon.icoz/favicon\.icoNz^/favicon\.ico$©rŠ   r%   ÚreverserB   s   &r9   Útest_reverseÚURLSpecReverseTest.test_reverse  sD   € Ø×Ñ˜¬Ð-=¸tÓ)D×)LÑ)LÓ)NÔOØ×Ñ˜¬Ð-?ÀÓ)F×)NÑ)NÓ)PÖQr;   c                ó®   € R .pV F9  p\        VR4      p VP                  4       pV P                  RV: RV: 24       K;  	  R#   \         d     KM  i ; i)z^/api/v\d+/foo/(\w+)$Nz.did not get expected exception when reversing z
. result: )r%   r(	  rV  ry  )rC   Úpathsr4   Úurl_specra  s   &    r9   Útest_non_reversibleÚ&URLSpecReverseTest.test_non_reversible  s^   € ð
 *Ð*ˆÛˆDä˜4 “ˆHðØ!×)Ñ)Ó+�Ø—	’	ã$(ª&ð2öó øô ô Úðús   –)AÁAÁAc                ó²   € V P                  R \        RR4      P                  R4      4       V P                  R\        RR4      P                  ^4      4       R# )z/api/v1/foo/barz^/api/v1/foo/(\w+)$Nr'  z/api.v1/foo/5/icon.pngz/api\.v1/foo/([0-9]+)/icon\.pngr'	  rB   s   &r9   Útest_reverse_argumentsÚ)URLSpecReverseTest.test_reverse_arguments  sQ   € Ø×ÑØœsÐ#9¸4Ó@×HÑHÈÓOô	
ð 	×ÑØ$ÜÐ2°DÓ9×AÑAÀ!ÓDö	
r;   rK   N)	rN   rO   rP   rQ   r)	  r.	  r1	  rS   rT   rU   s   @r9   r%	  r%	    s   ø‡ € òRò÷$
ð 
r;   r%	  c                   ó>   a € ] tR tRt o R tR tR tR tR tRt	V t
R# )	ÚRedirectHandlerTesti(  c                óB   € R \         RR/3R\         RR/3R\         RR/3.# )ú/srcr%   ú/dstz/src2z/dst2?foo=barz/(.*?)/(.*?)/(.*)z/{1}/{0}/{2})r³  rB   s   &r9   r?   Ú RedirectHandlerTest.get_handlers)  s;   € àÔ'¨%°¨Ð9ØÔ(¨5°/Ð*BÐCØ!Ô#5¸¸~Ð7NÐOð
ð 	
r;   c                óª   € V P                  R RR7      pV P                  VP                  R4       V P                  VP                  R,          R4       R# )r6	  Fr¿  rá  rÂ  r7	  Nræ  ró   s   & r9   Útest_basic_redirectÚ'RedirectHandlerTest.test_basic_redirect0  sC   € Ø—:‘:˜f°u�:Ó=ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Õ5°vÖ>r;   c                óª   € V P                  R RR7      pV P                  VP                  R4       V P                  VP                  R,          R4       R# )z/src?foo=barFr¿  rá  rÂ  z/dst?foo=barNræ  ró   s   & r9   Útest_redirect_with_argumentÚ/RedirectHandlerTest.test_redirect_with_argument5  sC   € Ø—:‘:˜n¸u�:ÓEˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Õ5°~ÖFr;   c                óª   € V P                  R RR7      pV P                  VP                  R4       V P                  VP                  R,          R4       R# )z/src2?foo2=bar2Fr¿  rá  rÂ  z/dst2?foo=bar&foo2=bar2Nræ  ró   s   & r9   Ú%test_redirect_with_appending_argumentÚ9RedirectHandlerTest.test_redirect_with_appending_argument:  sE   € Ø—:‘:Ð/À%�:ÓHˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Õ5Ð7PÖQr;   c                óª   € V P                  R RR7      pV P                  VP                  R4       V P                  VP                  R,          R4       R# )z/a/b/cFr¿  rá  rÂ  z/b/a/cNræ  ró   s   & r9   Útest_redirect_patternÚ)RedirectHandlerTest.test_redirect_pattern?  sC   € Ø—:‘:˜h¸�:Ó?ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Õ5°xÖ@r;   rK   N)rN   rO   rP   rQ   r?   r:	  r=	  r@	  rC	  rS   rT   rU   s   @r9   r4	  r4	  (  s'   ø‡ € ò
ò?ò
Gò
R÷
Að Ar;   r4	  c                   ó<   a € ] tR tRt o RtR tR tR tR tRt	V t
R# )	ÚAcceptLanguageTestiE  z)Test evaluation of Accept-Language headerc                óÖ   € \         P                  ! \        P                  P	                  \        P                  P                  \        4      R 4      R4        ! R R\        4      pRV3.# )Úgettext_translationsÚtornado_testc                   ó&   a € ] tR tRt o R tRtV tR# )Ú>AcceptLanguageTest.get_handlers.<locals>.AcceptLanguageHandleriN  c                óœ   € V P                  R V P                  4       P                  P                  RR4      4       V P	                  R4       R# )rQ  Ú_Ú-r;   N)rc  Úget_browser_localerï   r¬  rÆ   rB   s   &r9   re   ÚBAcceptLanguageTest.get_handlers.<locals>.AcceptLanguageHandler.getO  s>   € Ø—‘Ø&¨×(?Ñ(?Ó(A×(FÑ(F×(NÑ(NÈsÐTWÓ(Xôð —‘˜CÖ r;   rK   Nrg   rU   s   @r9   ÚAcceptLanguageHandlerrK	  N  s   ø‡ € ÷!ð !r;   rQ	  rZ   )r   Úload_gettext_translationsr3   r4   r5   r6   r7   r   )rC   rQ	  s   & r9   r?   ÚAcceptLanguageTest.get_handlersH  sT   € Ü×(Ò(Ü�G‰G�L‰LœŸ™Ÿ™¬Ó2Ð4JÓKØô	
ô
	!¤Nô 	!ð Ð'Ð(ð
ð 	
r;   c                óæ   € V P                  R RR/R7      pV P                  VP                  R,          R4       V P                  R RR/R7      pV P                  VP                  R,          R4       R# )rZ   r½  zfr-FR;q=0.9ro  rQ  zfr-FRzfr-FR; q=0.9N©rí   rŠ   rh  ró   s   & r9   Útest_accept_languageÚ'AcceptLanguageTest.test_accept_languageY  sj   € Ø—:‘:˜cÐ,=¸}Ð+M�:ÓNˆØ×Ñ˜×)Ñ)Ð*<Õ=¸wÔGà—:‘:˜cÐ,=¸~Ð+N�:ÓOˆØ×Ñ˜×)Ñ)Ð*<Õ=¸wÖGr;   c                óv   € V P                  R RR/R7      pV P                  VP                  R,          R4       R# )rZ   r½  z	fr-FR;q=0ro  rQ  úen-USNrU	  ró   s   & r9   Útest_accept_language_ignoreÚ.AcceptLanguageTest.test_accept_language_ignore`  s6   € Ø—:‘:˜cÐ,=¸{Ð+K�:ÓLˆØ×Ñ˜×)Ñ)Ð*<Õ=¸wÖGr;   c                óv   € V P                  R RR/R7      pV P                  VP                  R,          R4       R# )rZ   r½  z
fr-FR;q=-1ro  rQ  rY	  NrU	  ró   s   & r9   Útest_accept_language_invalidÚ/AcceptLanguageTest.test_accept_language_invalidd  s6   € Ø—:‘:˜cÐ,=¸|Ð+L�:ÓMˆØ×Ñ˜×)Ñ)Ð*<Õ=¸wÖGr;   rK   N)rN   rO   rP   rQ   rR   r?   rV	  rZ	  r]	  rS   rT   rU   s   @r9   rF	  rF	  E  s%   ø‡ € Ù3ò
ò"HòH÷Hð Hr;   rF	  )ªr1  Útornado.concurrentr   Útornador   Útornado.escaper   r   r   r   r	   r
   Útornado.httpclientr   Útornado.httputilr   Útornado.iostreamr   r   Útornado.locksr   Útornado.logr   r   Útornado.simple_httpclientr   Útornado.templater   Útornado.testingr   r   r   r   Útornado.test.utilr   Útornado.utilr   r   Útornado.webr   r   r   r    r³  r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r•   r_  r»   r”  Úemail.utilsr™  r  Úior0   r�  r{  r3   r—   r*  rá  r&  r(  r  Úurllib.parserõ  r:   r=   rX   r_   ri   ÚTestCaser   r¦   rÁ   rû   r«  r¹  rÉ  r×  rô  r  r  r?  rM  rT  rZ  r^  rm  rs  r}  r…  rŽ  r•  r  r  rE  r  ru   r  rW  rt  r�  r�  r¯  rÀ  rÉ  r  r  r(  r3  rA  rM  rY  rp  r}  r�  r¢  rÉ  rÝ  rü  rê  rí  r  r  r7  rB  rV  r¦  r²  rÄ  rÐ  rà  rë  ró  r  r  r  rQ  rb  r‹  r—  r¡  rÃ  rÐ  r%  rˆ  r¢  r°  r½  rÔ  r	  r	  r	  r%	  r4	  rF	  rK   r;   r9   Ú<module>rq	     s›  ðÛ å %Ý ÷÷ õ /Ý -Ý %Ý Ý ß (Ý ;Ý 'ß QÓ QÝ 0ß 1÷÷ ÷ ÷ ÷ ñ ó, Û Û Û Û Û Ý Û Û Û 	Û 	Û Û Û Û Û Û ò7ôÐ#ô ô$	%˜Kô 	%ô�>ô ô
$˜~ô $ô,2S˜×*Ñ*ô 2Sôl,E˜×*Ñ*ô ,Eô^.9�kô .9ôb\=�ô \=ô~
 ô 
ô
�{ô 
ô8
(˜^ô 
(ô˜+ô ô0
�.ô 
ô6--˜+ô --ô`)O�~ô )OôXY�~ô Yô*B�^ô Bô
1˜nô 1ô
#˜.ô #ô
(˜ô (ôH�nô Hô ô ô	˜^ô 	ô�~ô ô(.˜ô .ô
˜.ô 
ôOO�kô OOôd/�kô /ô?1˜ô ?1ôDn-�[ô n-ðb 
‡‚�—‘˜GÑ# ^Ó4ô~3˜Kó ~3ó 5ð~3ôBCÐ!2ô Cð@ 
‡‚�—‘˜GÑ# ^Ó4ô?-˜kó ?-ó 5ð?-ôD3 +ô 3ô<O ô Oô*"- Kô "-ôJ;˜[ô ;ô@C˜;ô @CôF'0�{ô '0ôT0˜kô 0ôD0˜[ô 0ô&8Ð+ô 8ô
@Ð)ô 
@ôAÐ)ô Aô*&1Ð,ô &1ôR
Ð*ô 
ôCÐ/ô Cô,-˜;ô -ô&7
Ð(ô 7
ôtH˜Kô Hô2>Ð/ô >ô	�iô 	ô,1Ð0ô ,1ô^Ð,ô ô+
Ð0ô +
ô\
Ð0ô 
ô">Ð1ô >ô,Y1˜ô Y1ôx
1Ð#8ô 
1ô-Ð*?ô -ô$:Ð.ô :ô&2Ð+ô 2ô*1Ð/ô 1ô 
�[ô 
ô@�Kô @ô$- +ô -ô.˜ô .ô$[ ˜{ô [ ðD ô/˜^ó /ó ð/÷>J
ñ J
ôZ
EØ'¨ô
EôBØ'¨ôBô8
Ð!6ô 8
ôv1Ð+ô 1ô.g)�h×'Ñ'ô g)ôTH1Ð$ô H1ôX7-Ð.ô 7-ôtNÐ0ô Nô8HÐ/ô Hô*M�Kô MôB<5�ô <5ô~5Ð.ô 5ô.�H×%Ñ%ô .ô�mô ô
˜×*Ñ*ô 
ôBA˜+ô Aô:!H˜ö !Hr;   