+
    üÐjÖw  ã                   óL  € R t ^ RIt^ RIt^ 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HtHtHtHtHt ^ RIHtHt ^ RI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% ^ RI&H't' ^ RI(H)t) ^ RI*H+t+H,t, ^ RI-H.t.H/t/H0t0 ^ RI1H2t2H3t3H4t4H5t5 ^ RI6H7t7H8t8H9t9 R t:R R lt; ! R R])Px                  4      t= ! R R])Px                  4      t> ! R R])Px                  4      t? ! R R]+4      t@ ! R R]+4      tA ! R  R!]+4      tB ! R" R#]+4      tC ! R$ R%4      tDR&tE ! R' R(]PŒ                  ]PŽ                  4      tHR) R* ltI]! ]94       ! R+ R,4      4       tJ ! R- R.]+4      tKR/ tL^tM]! 4       tN]! ]94       ! R0 R14      4       tO]! ]94       ! R2 R34      4       tP0 R4kR5kR6kR7kR8kR9kR:kR;kR<kR=kR>kR?kR@kRAkRBkRCkRDkREkRFkRGkRHkRIkRJkRKkRLkRMkRNkROkRPkRQkRRkRSkRTkRUkRVkRWkRXkRYkRZkR[kR\kR]kR^kR_kR`kRakRbkRckRdkRekRfkRgkRhkRikRjkRkkRlkRmkRnkRokRpkRqkRrkRskRtkRukRvkRwkRxkRykRzkR{kR|kR}kR~kRkR€kR�kR‚kRƒkR„kR…kR†kR‡kRˆkR‰kRŠkR‹kRŒkR�kRŽkR�kR�kR‘kR’kR“kR”kR•kR–kR—kR˜kR™kRškR›kRœkR�kRžkRŸkR kR¡kR¢kR£kR¤kR¥kR¦kR§kR¨kR©kRªkR«ktQ ! R¬ R­4      tR]R! 4       tSR°R® R¯ lltTR# )±zG
twisted.web.util and twisted.web.template merged to avoid cyclic deps
N)ÚOrderedDict©Úescape)ÚIOÚAnyÚAnyStrÚCallableÚDictÚListÚMappingÚOptionalÚTupleÚUnionÚcast)ÚhandlerÚmake_parser)ÚAttributesNSImplÚLocator)Úimplementer)ÚDeferred)ÚLogger)Úurlpath)ÚFailure)ÚFilePath)ÚfullyQualifiedName)Úresource)ÚElementÚrenderer)ÚFlattenableÚflattenÚflattenString)ÚCDATAÚCommentÚTagÚslot)ÚIRenderableÚIRequestÚITemplateLoaderc                ó    € R\        V 4       R2# )a/  
Wraps <pre> tags around some text and HTML-escape it.

This is here since once twisted.web.html was deprecated it was hard to
migrate the html.PRE from current code to twisted.web.template.

For new code consider using twisted.web.template.

@return: Escaped text wrapped in <pre> tags.
@rtype: C{str}
z<pre>z</pre>r   )Útexts   &Ú</usr/lib/python3/dist-packages/twisted/web/_template_util.pyÚ_PREr+   ,   s   € ð ”6˜$“<�. Ð'Ð'ó    c                ó<   € V ^8„  d   QhR\         R\        R\         /# )é   ÚURLÚrequestÚreturn)Úbytesr&   )Úformats   "r*   Ú__annotate__r4   ;   s!   € ÷ &ñ &”Eð &¤Hð &´ñ &r,   c                óò   € \        V \        4      '       g   \        R4      hVP                  RR4       VP	                  V 4       RR\        V P                  R4      4      P                  R4      /,          pV# )a‹  
Generate a redirect to the given location.

@param URL: A L{bytes} giving the location to which to redirect.

@param request: The request object to use to generate the redirect.
@type request: L{IRequest<twisted.web.iweb.IRequest>} provider

@raise TypeError: If the type of C{URL} a L{str} instead of L{bytes}.

@return: A L{bytes} containing HTML which tries to convince the client
    agent
    to visit the new location even if it doesn't respect the I{FOUND}
    response code.  This is intended to be returned from a render method,
    eg::

        def render_GET(self, request):
            return redirectTo(b"http://example.com/", request)
zURL must be bytess   Content-Types   text/html; charset=utf-8sÀ   
<html>
    <head>
        <meta http-equiv="refresh" content="0;URL=%(url)s">
    </head>
    <body bgcolor="#FFFFFF" text="#000000">
    <a href="%(url)s">click here</a>
    </body>
</html>
s   urlúutf-8)Ú
isinstancer2   Ú	TypeErrorÚ	setHeaderÚredirectr   ÚdecodeÚencode)r/   r0   Úcontents   && r*   Ú
redirectTor>   ;   st   € ô( �cœ5×!Ò!ÜÐ+Ó,Ð,Ø×Ñ�oÐ'BÔCØ×Ñ�SÔð	ð 	”�s—z‘z 'Ó*Ó+×2Ñ2°7Ó;ðõ€Gð €Nr,   c                   óR   a a€ ] tR t^dt oRtRtV3R lV 3R lltR tR tRt	Vt
V ;t# )ÚRedirectz‹
Resource that redirects to a specific URL.

@ivar url: Redirect target URL to put in the I{Location} response header.
@type url: L{bytes}
Tc                ó    <€ V ^8„  d   QhRS[ /# )r.   Úurl)r2   )r3   Ú__classdict__s   "€r*   r4   ÚRedirect.__annotate__n   s   ø€ ÷ ñ ™Eñ r,   c                ó0   <€ \         SV `  4        Wn        R # ©N)ÚsuperÚ__init__rB   )ÚselfrB   Ú	__class__s   &&€r*   rH   ÚRedirect.__init__n   s   ø€ Ü‰ÑÔØŽr,   c                ó.   € \        V P                  V4      # rF   )r>   rB   )rI   r0   s   &&r*   ÚrenderÚRedirect.renderr   s   € Ü˜$Ÿ(™( GÓ,Ð,r,   c                ó   € V # rF   © ©rI   Únamer0   s   &&&r*   ÚgetChildÚRedirect.getChildu   ó   € Øˆr,   )rB   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚisLeafrH   rM   rS   Ú__static_attributes__Ú__classdictcell__Ú__classcell__)rJ   rC   s   @@r*   r@   r@   d   s*   ù‡ € ñð €F÷ó ò-÷ò r,   r@   c                   ó:   a € ] tR t^yt o Rt^tV 3R lR ltRtV tR# )ÚParentRedirectu–  
Redirect to the nearest directory and strip any query string.

This generates redirects like::

    /              â†’  /
    /foo           â†’  /
    /foo?bar       â†’  /
    /foo/          â†’  /foo/
    /foo/bar       â†’  /foo/
    /foo/bar?baz   â†’  /foo/

However, the generated I{Location} header contains an absolute URL rather
than a path.

The response is the same regardless of HTTP method.
c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r.   r0   r1   )r&   r2   )r3   rC   s   "€r*   r4   ÚParentRedirect.__annotate__Ž   s   ø€ ÷ )ñ )™hð )©5ñ )r,   c                ó¢   € \        \        P                  P                  V4      P	                  4       4      P                  R4      p\        W!4      # )z>
Respond to all requests by redirecting to nearest directory.
Úascii)Ústrr   ÚURLPathÚfromRequestÚherer<   r>   )rI   r0   rh   s   && r*   rM   ÚParentRedirect.renderŽ   s<   € ô ”7—?‘?×.Ñ.¨wÓ7×<Ñ<Ó>Ó?×FÑFÀwÓOˆÜ˜$Ó(Ð(r,   rP   N)	rV   rW   rX   rY   rZ   r[   rM   r\   r]   ©rC   s   @r*   r`   r`   y   s   ø‡ € ñð$ €F÷)ö )r,   r`   c                   óF   a € ] tR t^–t o Rt^tR tR tR tR t	R t
RtV tR# )	ÚDeferredResourcezH
I wrap up a Deferred that will eventually result in a Resource
object.
c                óP   € \         P                  P                  V 4       Wn        R # rF   )r   ÚResourcerH   Úd)rI   ro   s   &&r*   rH   ÚDeferredResource.__init__ž   s   € Ü×Ñ×"Ñ" 4Ô(ØŽr,   c                ó   € V # rF   rP   rQ   s   &&&r*   rS   ÚDeferredResource.getChild¢   rU   r,   c                ó’   € V P                   P                  V P                  V4      P                  V P                  V4       ^ RIHp V# )é    )ÚNOT_DONE_YET)ro   ÚaddCallbackÚ_cbChildÚ
addErrbackÚ_ebChildÚtwisted.web.serverru   )rI   r0   ru   s   && r*   rM   ÚDeferredResource.render¥   s4   € Ø�‰×Ñ˜4Ÿ=™=¨'Ó2×=Ñ=¸d¿m¹mÈWÔUÝ3àÐr,   c                óP   € VP                  \        P                  ! W4      4       R # rF   )rM   r   ÚgetChildForRequest)rI   Úchildr0   s   &&&r*   rw   ÚDeferredResource._cbChild«   s   € Ø�‰”x×2Ò2°5ÓBÖCr,   c                ó(   € VP                  V4       R # rF   )ÚprocessingFailed)rI   Úreasonr0   s   &&&r*   ry   ÚDeferredResource._ebChild®   s   € Ø× Ñ  Ö(r,   )ro   N)rV   rW   rX   rY   rZ   r[   rH   rS   rM   rw   ry   r\   r]   rj   s   @r*   rl   rl   –   s0   ø‡ € ñð
 €FòòòòD÷)ð )r,   rl   c                   óJ   a € ] tR t^²t o RtR t]R 4       t]R 4       tRt	V t
R# )Ú_SourceLineElementzï
L{_SourceLineElement} is an L{IRenderable} which can render a single line of
source code.

@ivar number: A C{int} giving the line number of the source code to be
    rendered.
@ivar source: A C{str} giving the source code to be rendered.
c                óJ   € \         P                  ! W4       W n        W0n        R # rF   )r   rH   ÚnumberÚsource)rI   Úloaderr‡   rˆ   s   &&&&r*   rH   Ú_SourceLineElement.__init__¼   s   € Ü×Ò˜Ô&ØŒØŽr,   c                óF   € V! V P                   P                  RR4      4      # )z1
Render the line of source as a child of C{tag}.
z  u    Â )rˆ   Úreplace©rI   r0   Útags   &&&r*   Ú
sourceLineÚ_SourceLineElement.sourceLineÁ   s!   € ñ
 �4—;‘;×&Ñ& tÐ-BÓCÓDÐDr,   c                ó8   € V! \        V P                  4      4      # )z.
Render the line number as a child of C{tag}.
)re   r‡   r�   s   &&&r*   Ú
lineNumberÚ_SourceLineElement.lineNumberÈ   s   € ñ
 ”3�t—{‘{Ó#Ó$Ð$r,   )r‡   rˆ   N)rV   rW   rX   rY   rZ   rH   r   r�   r’   r\   r]   rj   s   @r*   r…   r…   ²   s9   ø‡ € ñòð
 ñEó ðEð ñ%ó ö%r,   r…   c                   ó@   a € ] tR t^Ðt o RtR tR t]R 4       tRt	V t
R# )Ú_SourceFragmentElementa¢  
L{_SourceFragmentElement} is an L{IRenderable} which can render several lines
of source code near the line number of a particular frame object.

@ivar frame: A L{Failure<twisted.python.failure.Failure>}-style frame object
    for which to load a source line to render.  This is really a tuple
    holding some information from a frame object.  See
    L{Failure.frames<twisted.python.failure.Failure>} for specifics.
c                ó>   € \         P                  ! W4       W n        R # rF   ©r   rH   Úframe©rI   r‰   r˜   s   &&&r*   rH   Ú_SourceFragmentElement.__init__Û   ó   € Ü×Ò˜Ô&ØŽ
r,   c              #  óì   "  € V P                   ^,          pV P                   ^,          p\        V^,
          V^,           4       F+  pV\        P                  ! W4      P	                  4       3x € K-  	  R# 5i)zü
Find the source line references by C{self.frame} and yield, in source
line order, it and the previous and following lines.

@return: A generator which yields two-tuples.  Each tuple gives a source
    line number and the contents of that source line.
N)r˜   ÚrangeÚ	linecacheÚgetlineÚrstrip)rI   Úfilenamer’   ÚsnipLineNumbers   &   r*   Ú_getSourceLinesÚ&_SourceFragmentElement._getSourceLinesß   sZ   é € ð —:‘:˜a•=ˆØ—Z‘Z •]ˆ
Ü# J°¥N°JÀµNÖCˆNØ!¤9×#4Ò#4°XÓ#N×#UÑ#UÓ#WÐXÔXó Dùs   ‚A2A4c           	   #  óÚ   "  € V P                  4        FR  w  r4VP                  4       pW0P                  ^,          8X  d   RpMRp\        V! R/ RV/B 4      p\	        WsV4      x € KT  	  R# 5i)zÕ
Render the source line indicated by C{self.frame} and several
surrounding lines.  The active line will be given a I{class} of
C{"snippetHighlightLine"}.  Other lines will be given a I{class} of
C{"snippetLine"}.
ÚsnippetHighlightLineÚsnippetLineÚclassNrP   )r£   Úcloner˜   Ú	TagLoaderr…   )rI   r0   rŽ   r’   r�   ÚnewTagÚcssClassr‰   s   &&&     r*   ÚsourceLinesÚ"_SourceFragmentElement.sourceLinesì   sd   é € ð '+×&:Ñ&:Ö&<Ñ"ˆJØ—Y‘Y“[ˆFØŸZ™Z¨�]Ô*Ø1‘à(�Ü™vÑ<¨°(Ð(;Ñ<Ó=ˆFÜ$ V¸ÓDÔDó '=ùs   ‚A)A+©r˜   N)rV   rW   rX   rY   rZ   rH   r£   r   r­   r\   r]   rj   s   @r*   r•   r•   Ð   s+   ø‡ € ñòòYð ñEó öEr,   r•   c                   ój   a € ] tR t^þt o RtR t]R 4       t]R 4       t]R 4       t	]R 4       t
RtV tR# )	Ú_FrameElementa”  
L{_FrameElement} is an L{IRenderable} which can render details about one
frame from a L{Failure<twisted.python.failure.Failure>}.

@ivar frame: A L{Failure<twisted.python.failure.Failure>}-style frame object
    for which to load a source line to render.  This is really a tuple
    holding some information from a frame object.  See
    L{Failure.frames<twisted.python.failure.Failure>} for specifics.
c                ó>   € \         P                  ! W4       W n        R # rF   r—   r™   s   &&&r*   rH   Ú_FrameElement.__init__	  r›   r,   c                ó4   € V! V P                   ^,          4      # )zI
Render the name of the file this frame references as a child of C{tag}.
r¯   r�   s   &&&r*   r¡   Ú_FrameElement.filename  ó   € ñ
 �4—:‘:˜a•=Ó!Ð!r,   c                óF   € V! \        V P                  ^,          4      4      # )zK
Render the source line number this frame references as a child of
C{tag}.
)re   r˜   r�   s   &&&r*   r’   Ú_FrameElement.lineNumber  s   € ñ ”3�t—z‘z !•}Ó%Ó&Ð&r,   c                ó4   € V! V P                   ^ ,          4      # )zF
Render the function name this frame references as a child of C{tag}.
r¯   r�   s   &&&r*   ÚfunctionÚ_FrameElement.function  r¶   r,   c                ó@   € \        \        V4      V P                  4      # )zV
Render the source code surrounding the line this frame references,
replacing C{tag}.
)r•   rª   r˜   r�   s   &&&r*   rˆ   Ú_FrameElement.source#  s   € ô &¤i°£n°d·j±jÓAÐAr,   r¯   N)rV   rW   rX   rY   rZ   rH   r   r¡   r’   rº   rˆ   r\   r]   rj   s   @r*   r±   r±   þ   sa   ø‡ € ñòð ñ"ó ð"ð ñ'ó ð'ð ñ"ó ð"ð ñBó öBr,   r±   c                   ó:   a € ] tR tRt o RtR t]R 4       tRtV t	R# )Ú_StackElementi,  zO
L{_StackElement} renders an L{IRenderable} which can render a list of frames.
c                ó>   € \         P                  ! W4       W n        R # rF   )r   rH   ÚstackFrames)rI   r‰   rÁ   s   &&&r*   rH   Ú_StackElement.__init__1  s   € Ü×Ò˜Ô&Ø&Ör,   c           	     ó†   € V P                    Uu. uF&  p\        \        VP                  4       4      V4      NK(  	  up# u upi )zG
Render the list of frames in this L{_StackElement}, replacing C{tag}.
)rÁ   r±   rª   r©   )rI   r0   rŽ   r˜   s   &&& r*   ÚframesÚ_StackElement.frames5  s@   € ð GK×FVÒFVó
ÙFV¸UŒMœ) C§I¡I£KÓ0°%Ö8ÑFVñ
ð 	
ùò 
s   �,>)rÁ   N)
rV   rW   rX   rY   rZ   rH   r   rÄ   r\   r]   rj   s   @r*   r¿   r¿   ,  s#   ø‡ € ñò'ð ñ
ó ö
r,   r¿   c                   ót   a € ] tR tRt o RtRV 3R lR lltRV 3R lR lltV 3R lR	 ltV 3R
 lR ltRt	V t
R# )Ú
_NSContexti?  zD
A mapping from XML namespaces onto their prefixes in the document.
Nc                ó.   <€ V ^8„  d   QhRS[ R,          /# )r.   ÚparentrÇ   )r   )r3   rC   s   "€r*   r4   Ú_NSContext.__annotate__D  s   ø€ ÷ 	Gñ 	G™x¨Õ5ñ 	Gr,   c                ód   € Wn         Ve   \        VP                  4      V n        R# RR/V n        R# )zM
Pull out the parent's namespaces, if there's no parent then default to
XML.
Nz$http://www.w3.org/XML/1998/namespaceÚxml)rÉ   r   Únss)rI   rÉ   s   &&r*   rH   Ú_NSContext.__init__D  s+   € ð
 ŒØÒÜ;FÀvÇzÁzÓ;RˆDŽHà>ÀÐFˆDŽHr,   c                ó\   <€ V ^8„  d   QhRS[ S[,          RS[ S[,          RS[ S[,          /# )r.   Úkro   r1   ©r   re   )r3   rC   s   "€r*   r4   rÊ   O  s.   ø€ ÷ "ñ "‘X™c•]ð "¡x±¥}ð "ÁÉÅñ "r,   c                ó8   € V P                   P                  W4      # )zD
Get a prefix for a namespace.

@param d: The default prefix value.
)rÍ   Úget)rI   rÐ   ro   s   &&&r*   rÓ   Ú_NSContext.getO  s   € ð �x‰x�|‰|˜AÓ!Ð!r,   c                óJ   <€ V ^8„  d   QhRS[ S[,          RS[ S[,          RR/# )r.   rÐ   Úvr1   NrÑ   )r3   rC   s   "€r*   r4   rÊ   W  s*   ø€ ÷ #ñ #™X¡c�]ð #©x¹­}ð #Àñ #r,   c                ó<   € V P                   P                  W4       R# )z8
Proxy through to setting the prefix for the namespace.
N)rÍ   Ú__setitem__)rI   rÐ   rÖ   s   &&&r*   rØ   Ú_NSContext.__setitem__W  s   € ð 	�‰×Ñ˜QÖ"r,   c                óF   <€ V ^8„  d   QhRS[ S[,          RS[ S[,          /# )r.   rÐ   r1   rÑ   )r3   rC   s   "€r*   r4   rÊ   ]  s#   ø€ ÷ 'ñ '™X¡c�]ð '©x¹­}ñ 'r,   c                ó8   € V P                   P                  V4      # )z8
Proxy through to getting the prefix for the namespace.
)rÍ   Ú__getitem__)rI   rÐ   s   &&r*   rÜ   Ú_NSContext.__getitem__]  s   € ð �x‰x×#Ñ# AÓ&Ð&r,   )rÍ   rÉ   rF   )rV   rW   rX   rY   rZ   rH   rÓ   rØ   rÜ   r\   r]   rj   s   @r*   rÇ   rÇ   ?  s4   ø‡ € ñ÷	Gò 	G÷"ò "÷#ð #÷'ö 'r,   rÇ   z4http://twistedmatrix.com/ns/twisted.web.template/0.1c                   ó2  a € ] tR tRt o RtV 3R lR ltV 3R lR ltV 3R lR ltV 3R	 lR
 ltV 3R lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR l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"# )#Ú_ToStanig  zX
A SAX parser which converts an XML document to the Twisted STAN
Document Object Model.
c                ó0   <€ V ^8„  d   QhRS[ S[,          /# )r.   ÚsourceFilenamerÑ   )r3   rC   s   "€r*   r4   Ú_ToStan.__annotate__m  s   ø€ ÷ ñ ¡x±¥}ñ r,   c                ó>   € Wn         \        4       V n        RV n        R# )z@
@param sourceFilename: the filename the XML was loaded out of.
FN)rá   rÇ   Ú	prefixMapÚinCDATA)rI   rá   s   &&r*   rH   Ú_ToStan.__init__m  s   € ð -ÔÜ#›ˆŒØˆŽr,   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r.   Úlocatorr1   N)r   )r3   rC   s   "€r*   r4   râ   u  s   ø€ ÷ ñ ©'ð °dñ r,   c                ó   € Wn         R# )zI
Set the document locator, which knows about line and character numbers.
N)rè   )rI   rè   s   &&r*   ÚsetDocumentLocatorÚ_ToStan.setDocumentLocatoru  s	   € ð Žr,   c                ó   <€ V ^8„  d   QhRR/# ©r.   r1   NrP   )r3   rC   s   "€r*   r4   râ   {  s   ø€ ÷ 
4ñ 
4˜tñ 
4r,   c                óR   € . V n         V P                   V n        . V n        . V n        R# )z
Initialise the document.
N)ÚdocumentÚcurrentÚstackÚ
xmlnsAttrs©rI   s   &r*   ÚstartDocumentÚ_ToStan.startDocument{  s$   € ð $&ˆŒØ—}‘}ˆŒØ "ˆŒ
Ø13ˆŽr,   c                ó   <€ V ^8„  d   QhRR/# rí   rP   )r3   rC   s   "€r*   r4   râ   ‡  s   ø€ ÷ ñ ˜Tñ r,   c                ó   € R# )z
Document ended.
NrP   ró   s   &r*   ÚendDocumentÚ_ToStan.endDocument‡  ó   ‚ r,   c                ó*   <€ V ^8„  d   QhRS[ RS[ RR/# )r.   ÚtargetÚdatar1   N©re   )r3   rC   s   "€r*   r4   râ   Œ  s"   ø€ ÷ ñ ©Cð ±sð ¸tñ r,   c                ó   € R# )z&
Processing instructions are ignored.
NrP   )rI   rü   rý   s   &&&r*   ÚprocessingInstructionÚ_ToStan.processingInstructionŒ  rú   r,   c                ó:   <€ V ^8„  d   QhRS[ S[,          RS[RR/# )r.   ÚprefixÚurir1   NrÑ   )r3   rC   s   "€r*   r4   râ   ‘  s&   ø€ ÷ ?ñ ?©±#­ð ?¹Sð ?ÀTñ ?r,   c                óþ   € \        V P                  4      V n        WP                  V&   V\        8X  d   R# Vf    V P                  P	                  RV34       R# V P                  P	                  RV,          V34       R# )z¯
Set up the prefix mapping, which maps fully qualified namespace URIs
onto namespace prefixes.

This gets called before startElementNS whenever an C{xmlns} attribute
is seen.
NÚxmlnszxmlns:%s)rÇ   rä   ÚTEMPLATE_NAMESPACErò   Úappend)rI   r  r  s   &&&r*   ÚstartPrefixMappingÚ_ToStan.startPrefixMapping‘  sg   € ô $ D§N¡NÓ3ˆŒØ$�‰�sÑð Ô$Ô$Ùð Š>Ø�O‰O×"Ñ" G¨S >Ö2à�O‰O×"Ñ" J°Õ$7¸Ð#=Ö>r,   c                ó4   <€ V ^8„  d   QhRS[ S[,          RR/# )r.   r  r1   NrÑ   )r3   rC   s   "€r*   r4   râ   §  s   ø€ ÷  ñ  ¡x±¥}ð  ¸ñ  r,   c                óT   € V P                   P                  pVf   Q R4       hW n         R# )zJ
"Pops the stack" on the prefix mapping.

Gets called after endElementNS.
Nz$More prefix mapping ends than starts)rä   rÉ   )rI   r  rÉ   s   && r*   ÚendPrefixMappingÚ_ToStan.endPrefixMapping§  s*   € ð —‘×&Ñ&ˆØÒ!ÐIÐ#IÓIÐ!ØŽr,   c                óV   <€ V ^8„  d   QhRS[ S[S[3,          RS[S[,          RS[RR/# )r.   ÚnamespaceAndNameÚqnameÚattrsr1   N)r   re   r   r   )r3   rC   s   "€r*   r4   râ   ±  sE   ø€ ÷ v#ñ v#á¡¡S �/ðv#ñ ™�}ðv#ñ  ð	v#ð
 
ñv#r,   c                óŒ  € V P                   pV P                  P                  4       pV P                  P                  4       pVw  rxV\        8X  d|   VR8X  d   RpMqVR8X  dk    VR,          p	\        VR,          V	VVVR7      p
V P                  P                  V
4       V P                  P                  V
4       V
P                  V n	        R# Rp\        V4      p\        VP                  4       4       F$  w  rÞVw  ppV\        8w  d   K  VR8X  g   K   TpWÍ K&  	  \        4       pVP                  4        F7  w  w  pppV P                  P                  V4      pVf   TpMV RV 2pVVV&   K9  	  V\        8X  d¬   VR	8X  d¥   V P                  '       g   \!        R
\         R24      hRV9  d   \!        R
\         R24      h\#        RVVVVR7      pVV P                  R,          P$                  VR,          &   V P                  P                  V4       VP                  V n	        R# V P&                  '       d,   VP)                  \        V P&                  4      4       . V n        V\        8w  d4   Ve0   V P                  V,          pVe   V P                  V,           RV 2p\#        V\        \+        \,        \.        \0        \2        3,          \2        3,          V4      4      VVVVR7      pV P                  P                  V4       V P                  P                  V4       VP                  V n	        R#   \
         d    Rp	 EL×i ; i)a%  
Gets called when we encounter a new xmlns attribute.

@param namespaceAndName: a (namespace, name) tuple, where name
    determines which type of action to take, if the namespace matches
    L{TEMPLATE_NAMESPACE}.
@param qname: ignored.
@param attrs: attributes on the element being started.
ÚtransparentÚ r$   NrR   )Údefaultr¡   r’   ÚcolumnNumberrM   Ú:Úattrz<{z}attr> as top-level elementz }attr> requires a name attribute)rM   r¡   r’   r  )Ú
attributesrM   r¡   r’   r  )Nr  )NrR   éÿÿÿÿ)rá   rè   ÚgetLineNumberÚgetColumnNumberr  ÚKeyErrorr$   rñ   r  rð   Úchildrenr   ÚlistÚitemsrä   rÓ   ÚAssertionErrorr#   r  rò   Úupdater   r   r   r2   re   )rI   r  r  r  r¡   r’   r  ÚnsrR   r  ÚslrM   ÚorderedrÐ   rÖ   ÚattrNSÚjustTheNameÚnonTemplateAttrsÚattrNsÚattrNameÚnsPrefixÚattrKeyÚelr  s   &&&&                    r*   ÚstartElementNSÚ_ToStan.startElementNS±  s  € ð  ×&Ñ&ˆØ—\‘\×/Ñ/Ó1ˆ
Ø—|‘|×3Ñ3Ó5ˆà#‰ˆØÔ#Ô#Ø�}Ô$Ø‘Ø˜”ð#à#Ð$5Õ6�Gô
 Ø˜.Õ)Ø#Ø%Ø)Ø!-ô�ð —
‘
×!Ñ! "Ô%Ø—‘×#Ñ# BÔ'Ø!Ÿ{™{�”Ùàˆä˜eÓ$ˆÜ˜Ÿ™›Ö)‰DˆAØ"#ÑˆF�KØÔ+Ô+ÙØ˜hÖ&Ø�Ø’Jñ *ô '›=ÐØ%,§]¡]¦_Ñ!ÑˆV�X Ø—~‘~×)Ñ)¨&Ó1ˆHØÒØ"‘à%˜J a¨ zÐ2�Ø()Ð˜WÓ%ñ &5ð Ô#Ô#¨°¬Ø—:—:�:ä$ØÔ,Ð-Ð-IÐJóð ð Ð-Ô-ä$ØÔ,Ð-Ð-NÐOóð ô ØØØ!Ø%Ø)ôˆBð CEˆD�J‰J�r�N×%Ñ%Ð&6°vÕ&>Ñ?Ø�J‰J×Ñ˜bÔ!ØŸ;™;ˆDŒLÙð �?�?ˆ?Ø×#Ñ#¤K°·±Ó$@ÔAØ ˆDŒOð Ô#Ô#¨ªØ—^‘^ BÕ'ˆFØÒ!ØŸ.™.¨Õ,Ð-¨Q¨t¨fÐ5�ÜØÜ"Ü”WœU¤5¬# :Õ.´Ð3Õ4Ð6FÓGóð ØØ!Ø%ô	
ˆð 	�
‰
×Ñ˜"ÔØ�‰×Ñ˜BÔØ—{‘{ˆŽøôs  ô #ð #“Gð#ús   Á"	L2 Ì2MÍMc                ó$   <€ V ^8„  d   QhRS[ RR/# )r.   Úchr1   Nrþ   )r3   rC   s   "€r*   r4   râ   )  s   ø€ ÷  ñ  ™Sð   Tñ  r,   c                ó¨   € V P                   '       d%   V P                  R,          P                  V4       R# V P                  P                  V4       R# )zU
Called when we receive some characters.  CDATA characters get passed
through as is.
Nr  )rå   rñ   r  rð   )rI   r2  s   &&r*   Ú
charactersÚ_ToStan.characters)  s8   € ð
 �<�<ˆ<Ø�J‰J�r�N×!Ñ! "Ô%ÙØ�‰×Ñ˜BÖr,   c                óP   <€ V ^8„  d   QhRS[ S[S[3,          RS[S[,          RR/# )r.   rR   r  r1   N)r   re   r   )r3   rC   s   "€r*   r4   râ   3  s.   ø€ ÷ 	)ñ 	)¡¡s©C x¥ð 	)¹Á#½ð 	)È4ñ 	)r,   c                óÈ   € V P                   P                  4        V P                   '       d%   V P                   R,          P                  V n        R# V P                  V n        R# )zz
A namespace tag is closed.  Pop the stack, if there's anything left in
it, otherwise return to the document's namespace.
Nr  )rñ   Úpopr  rð   rï   )rI   rR   r  s   &&&r*   ÚendElementNSÚ_ToStan.endElementNS3  s;   € ð
 	�
‰
�‰ÔØ�:�:ˆ:ØŸ:™: b�>×2Ñ2ˆDŽLàŸ=™=ˆDŽLr,   c                ó0   <€ V ^8„  d   QhRS[ RS[ RS[ RR/# )r.   rR   ÚpublicIdÚsystemIdr1   Nrþ   )r3   rC   s   "€r*   r4   râ   >  s)   ø€ ÷ ñ ™Sð ©Cð ¹3ð À4ñ r,   c                ó   € R# ©z
DTDs are ignored.
NrP   )rI   rR   r<  r=  s   &&&&r*   ÚstartDTDÚ_ToStan.startDTD>  rú   r,   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r.   Úargsr1   N)Úobject)r3   rC   s   "€r*   r4   râ   C  s   ø€ ÷ ñ ™Fð  tñ r,   c                ó   € R# r?  rP   )rI   rC  s   &*r*   ÚendDTDÚ_ToStan.endDTDC  rú   r,   c                ó   <€ V ^8„  d   QhRR/# rí   rP   )r3   rC   s   "€r*   r4   râ   H  s   ø€ ÷ ñ ˜Dñ r,   c                óJ   € RV n         V P                  P                  . 4       R# )z?
We're starting to be in a CDATA element, make a note of this.
TN)rå   rñ   r  ró   s   &r*   Ú
startCDATAÚ_ToStan.startCDATAH  s   € ð ˆŒØ�
‰
×Ñ˜"Ör,   c                ó   <€ V ^8„  d   QhRR/# rí   rP   )r3   rC   s   "€r*   r4   râ   O  s   ø€ ÷ ,ñ ,˜$ñ ,r,   c                ó®   € RV n         RP                  V P                  P                  4       4      pV P                  P                  \        V4      4       R# )zq
We're no longer in a CDATA element.  Collect up the characters we've
parsed and put them in a new CDATA object.
Fr  N)rå   Újoinrñ   r8  rð   r  r!   )rI   Úcomments   & r*   ÚendCDATAÚ_ToStan.endCDATAO  s:   € ð
 ˆŒØ—'‘'˜$Ÿ*™*Ÿ.™.Ó*Ó+ˆØ�‰×ÑœE '›NÖ+r,   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r.   r=   r1   Nrþ   )r3   rC   s   "€r*   r4   râ   X  s   ø€ ÷ .ñ .™sð . tñ .r,   c                óN   € V P                   P                  \        V4      4       R# )z-
Add an XML comment which we've encountered.
N)rð   r  r"   )rI   r=   s   &&r*   rO  Ú_ToStan.commentX  s   € ð 	�‰×ÑœG GÓ,Ö-r,   )rð   rï   rå   rè   rä   rá   rñ   rò   N)rV   rW   rX   rY   rZ   rH   rê   rô   rø   r   r	  r  r/  r4  r9  r@  rF  rJ  rP  rO  r\   r]   rj   s   @r*   rß   rß   g  s£   ø‡ € ñ÷
ð ÷ð ÷
4ð 
4÷ð ÷
ð ÷
?ð ?÷, ð  ÷v#ð v#÷p ð  ÷	)ð 	)÷ð ÷
ð ÷
ð ÷,ð ,÷.ö .r,   rß   c                óv   € V ^8„  d   QhR\         \        \        ,          \        3,          R\        R,          /# )r.   Úflr1   r   )r   r   r   re   r
   )r3   s   "r*   r4   r4   _  s,   € ÷ ñ ”eœBœv�J¬˜OÕ,ð ´°mÕ1Dñ r,   c                ó   € \        4       pVP                  \        P                  ^ 4       VP                  \        P                  ^4       VP                  \        P
                  ^ 4       VP                  \        P                  ^ 4       \        \        V RR4      4      pVP                  V4       VP                  V4       VP                  \        P                  V4       VP                  V 4       VP                  # )z�
Perform a SAX parse of an XML document with the _ToStan class.

@param fl: The XML document to be parsed.

@return: a C{list} of Stan objects.
rR   N)r   Ú
setFeaturer   Úfeature_validationÚfeature_namespacesÚfeature_external_gesÚfeature_external_pesrß   ÚgetattrÚsetContentHandlerÚsetEntityResolverÚsetPropertyÚproperty_lexical_handlerÚparserï   )rV  ÚparserÚss   &  r*   Ú_flatsaxParsere  _  s¾   € ô ‹]€FØ
×Ñ”g×0Ñ0°!Ô4Ø
×Ñ”g×0Ñ0°!Ô4Ø
×Ñ”g×2Ñ2°AÔ6Ø
×Ñ”g×2Ñ2°AÔ6ä”˜˜F DÓ)Ó*€AØ
×Ñ˜QÔØ
×Ñ˜QÔØ
×Ñ”w×7Ñ7¸Ô;à
‡L�L�Ôà�:‰:Ðr,   c                   óH   a € ] tR tRt o RtV 3R lR ltV 3R lR ltRtV tR# )	Ú	XMLStringiw  z@
An L{ITemplateLoader} that loads and parses XML from a string.
c                ó6   <€ V ^8„  d   QhRS[ S[S[3,          /# )r.   rd  )r   re   r2   )r3   rC   s   "€r*   r4   ÚXMLString.__annotate__}  s   ø€ ÷ #ñ #™%¡¡U 
Õ+ñ #r,   c                óœ   € \        V\        4      '       g   VP                  R4      p\        \        P
                  ! V4      4      V n        R# )z˜
Run the parser on a L{io.StringIO} copy of the string.

@param s: The string from which to load the XML.
@type s: L{str}, or a UTF-8 encoded L{bytes}.
Úutf8N)r7   re   r;   re  ÚioÚStringIOÚ_loadedTemplate)rI   rd  s   &&r*   rH   ÚXMLString.__init__}  s7   € ô ˜!œS×!Ò!Ø—‘˜Ó ˆAä4AÄ"Ç+Â+ÈaÃ.Ó4QˆÔÙ"r,   c                ó.   <€ V ^8„  d   QhRS[ R,          /# ©r.   r1   r   ©r
   )r3   rC   s   "€r*   r4   ri  Š  s   ø€ ÷ $ñ $‘d˜=Õ)ñ $r,   c                ó   € V P                   # )z5
Return the document.

@return: the loaded document.
©rn  ró   s   &r*   ÚloadÚXMLString.loadŠ  s   € ð ×#Ñ#Ð#r,   rt  N©	rV   rW   rX   rY   rZ   rH   ru  r\   r]   rj   s   @r*   rg  rg  w  s   ø‡ € ñ÷#ð #÷$ö $r,   rg  c                   ón   a € ] tR tRt o Rt]! R4      tR
R lt]R 4       t	]R 4       t
]R 4       tR	tV tR# )ÚFailureElementi“  zô
L{FailureElement} is an L{IRenderable} which can render detailed information
about a L{Failure<twisted.python.failure.Failure>}.

@ivar failure: The L{Failure<twisted.python.failure.Failure>} instance which
    will be rendered.

@since: 12.1
ao  
<div xmlns:t="http://twistedmatrix.com/ns/twisted.web.template/0.1">
  <style type="text/css">
    div.error {
      color: red;
      font-family: Verdana, Arial, helvetica, sans-serif;
      font-weight: bold;
    }

    div {
      font-family: Verdana, Arial, helvetica, sans-serif;
    }

    div.stackTrace {
    }

    div.frame {
      padding: 1em;
      background: white;
      border-bottom: thin black dashed;
    }

    div.frame:first-child {
      padding: 1em;
      background: white;
      border-top: thin black dashed;
      border-bottom: thin black dashed;
    }

    div.location {
    }

    span.function {
      font-weight: bold;
      font-family: "Courier New", courier, monospace;
    }

    div.snippet {
      margin-bottom: 0.5em;
      margin-left: 1em;
      background: #FFFFDD;
    }

    div.snippetHighlightLine {
      color: red;
    }

    span.code {
      font-family: "Courier New", courier, monospace;
    }
  </style>

  <div class="error">
    <span t:render="type" />: <span t:render="value" />
  </div>
  <div class="stackTrace" t:render="traceback">
    <div class="frame" t:render="frames">
      <div class="location">
        <span t:render="filename" />:<span t:render="lineNumber" /> in
        <span class="function" t:render="function" />
      </div>
      <div class="snippet" t:render="source">
        <div t:render="sourceLines">
          <span class="lineno" t:render="lineNumber" />
          <code class="code" t:render="sourceLine" />
        </div>
      </div>
    </div>
  </div>
  <div class="error">
    <span t:render="type" />: <span t:render="value" />
  </div>
</div>
Nc                ó>   € \         P                  ! W4       Wn        R # rF   )r   rH   Úfailure)rI   r{  r‰   s   &&&r*   rH   ÚFailureElement.__init__ë  s   € Ü×Ò˜Ô&ØŽr,   c                óL   € V! \        V P                  P                  4      4      # )z1
Render the exception type as a child of C{tag}.
)r   r{  Útyper�   s   &&&r*   r~  ÚFailureElement.typeï  s   € ñ
 Ô% d§l¡l×&7Ñ&7Ó8Ó9Ð9r,   c                ój   € V! \        V P                  P                  4      P                  R4      4      # )z2
Render the exception value as a child of C{tag}.
rk  )re   r{  Úvaluer<   r�   s   &&&r*   r�  ÚFailureElement.valueö  s)   € ñ
 ”3�t—|‘|×)Ñ)Ó*×1Ñ1°&Ó9Ó:Ð:r,   c                óT   € \        \        V4      V P                  P                  4      # )zv
Render all the frames in the wrapped
L{Failure<twisted.python.failure.Failure>}'s traceback stack, replacing
C{tag}.
)r¿   rª   r{  rÄ   r�   s   &&&r*   Ú	tracebackÚFailureElement.tracebacký  s   € ô œY s›^¨T¯\©\×-@Ñ-@ÓAÐAr,   ©r{  rF   )rV   rW   rX   rY   rZ   rg  r‰   rH   r   r~  r�  r„  r\   r]   rj   s   @r*   ry  ry  “  sa   ø‡ € ññ ðI	óK€FôZð ñ:ó ð:ð ñ;ó ð;ð ñBó öBr,   ry  c                ó  € . p\        R\        V 4      4      P                  VP                  4       \	        V^ ,          \
        4      '       d)   V^ ,          P                  R4      P                  RR4      # V^ ,          P                  4        R# )zý
Construct an HTML representation of the given failure.

Consider using L{FailureElement} instead.

@type myFailure: L{Failure<twisted.python.failure.Failure>}

@rtype: L{bytes}
@return: A string containing the HTML representation of the given failure.
Nr6   rd   Úxmlcharrefreplace)	r    ry  ÚaddBothr  r7   r2   r;   r<   ÚraiseException)Ú	myFailureÚresults   & r*   ÚformatFailurer�    sm   € ð €FÜ�$œ yÓ1Ó2×:Ñ:¸6¿=¹=ÔIÜ�&˜•)œU×#Ò#ð �a�y×Ñ Ó(×/Ñ/°Ð9LÓMÐMØ
ˆ1…I×ÑÖr,   c                   óH   a € ] tR tRt o RtV 3R lR ltV 3R lR ltRtV tR# )	rª   i'  zB
An L{ITemplateLoader} that loads an existing flattenable object.
c                ó   <€ V ^8„  d   QhRR/# )r.   rŽ   r   rP   )r3   rC   s   "€r*   r4   ÚTagLoader.__annotate__-  s   ø€ ÷ /ñ /˜Mñ /r,   c                ó   € Wn         R# )z.
@param tag: The object which will be loaded.
N©rŽ   )rI   rŽ   s   &&r*   rH   ÚTagLoader.__init__-  s   € ð
 #&ŒÙ.r,   c                ó.   <€ V ^8„  d   QhRS[ R,          /# rq  rr  )r3   rC   s   "€r*   r4   r�  5  s   ø€ ÷ ñ ‘d˜=Õ)ñ r,   c                ó   € V P                   .# rF   r’  ró   s   &r*   ru  ÚTagLoader.load5  s   € Ø—‘ˆzÐr,   r’  Nrw  rj   s   @r*   rª   rª   '  s   ø‡ € ñ÷/ð /÷ö r,   rª   c                   ól   a € ] tR tRt o RtV 3R lR l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# )ÚXMLFilei9  z>
An L{ITemplateLoader} that loads and parses XML from a file.
c                ó0   <€ V ^8„  d   QhRS[ S[,          /# )r.   Úpath)r   r   )r3   rC   s   "€r*   r4   ÚXMLFile.__annotate__?  s   ø€ ÷ 2ñ 2™X¡c�]ñ 2r,   c                óˆ   € \        V\        4      '       g   \        P                  ! R\        ^R7       RV n         Wn        R# )zN
Run the parser on a file.

@param path: The file from which to load the XML.
zhPassing filenames or file objects to XMLFile is deprecated since Twisted 12.1.  Pass a FilePath instead.)ÚcategoryÚ
stacklevelN)r7   r   ÚwarningsÚwarnÚDeprecationWarningrn  Ú_path)rI   rš  s   &&r*   rH   ÚXMLFile.__init__?  s?   € ô ˜$¤×)Ò)Ü�MŠMð@ä+Øõ	ð ?CˆÔØ=à$(Œ
Ù1r,   c                ó.   <€ V ^8„  d   QhRS[ R,          /# rq  rr  )r3   rC   s   "€r*   r4   r›  S  s   ø€ ÷ 
(ñ 
(™$˜}Õ-ñ 
(r,   c                ó  € \        V P                  \        4      '       g   \        V P                  4      # V P                  P	                  R4      ;_uu_ 4       p\        V4      uuRRR4       #   + '       g   i     R# ; i)z8
Read and parse the XML.

@return: the loaded document.
ÚrN)r7   r¢  r   re  Úopen)rI   Úfs   & r*   Ú_loadDocÚXMLFile._loadDocS  sP   € ô ˜$Ÿ*™*¤h×/Ò/Ü  §¡Ó,Ð,à—‘—‘ ×%Ô%¨Ü$ QÓ'÷ &×%×%Ó%ús   ÁA/Á/B 	c                ó    <€ V ^8„  d   QhRS[ /# )r.   r1   rþ   )r3   rC   s   "€r*   r4   r›  _  s   ø€ ÷ .ñ .™#ñ .r,   c                ó$   € R V P                   : R2# )z<XMLFile of Ú>)r¢  ró   s   &r*   Ú__repr__ÚXMLFile.__repr___  s   € Ø˜dŸj™j™^¨1Ð-Ð-r,   c                ó.   <€ V ^8„  d   QhRS[ R,          /# rq  rr  )r3   rC   s   "€r*   r4   r›  b  s   ø€ ÷ $ñ $‘d˜=Õ)ñ $r,   c                ó`   € V P                   f   V P                  4       V n         V P                   # )zT
Return the document, first loading it if necessary.

@return: the loaded document.
)rn  r©  ró   s   &r*   ru  ÚXMLFile.loadb  s*   € ð ×ÑÒ'Ø#'§=¡=£?ˆDÔ Ø×#Ñ#Ð#r,   )rn  r¢  N)rV   rW   rX   rY   rZ   rH   r©  r®  ru  r\   r]   rj   s   @r*   r˜  r˜  9  s2   ø‡ € ñ÷2ð 2÷(
(ð 
(÷.ð .÷$ö $r,   r˜  ÚaÚabbrÚacronymÚaddressÚappletÚareaÚarticleÚasideÚaudioÚbÚbaseÚbasefontÚbdiÚbdoÚbigÚ
blockquoteÚbodyÚbrÚbuttonÚcanvasÚcaptionÚcenterÚciteÚcodeÚcolÚcolgroupÚcommandÚdatalistÚddÚdelÚdetailsÚdfnÚdirÚdivÚdlÚdtÚemÚembedÚfieldsetÚ
figcaptionÚfigureÚfontÚfooterÚformr˜   ÚframesetÚh1Úh2Úh3Úh4Úh5Úh6ÚheadÚheaderÚhgroupÚhrÚhtmlÚiÚiframeÚimgÚinputÚinsÚisindexÚkeygenÚkbdÚlabelÚlegendÚliÚlinkÚmapÚmarkÚmenuÚmetaÚmeterÚnavÚnoframesÚnoscriptrD  ÚolÚoptgroupÚoptionÚoutputÚpÚparamÚpreÚprogressÚqÚrpÚrtÚrubyrd  ÚsampÚscriptÚsectionÚselectÚsmallrˆ   ÚspanÚstrikeÚstrongÚstyleÚsubÚsummaryÚsupÚtableÚtbodyÚtdÚtextareaÚtfootÚthÚtheadÚtimeÚtitleÚtrÚttÚuÚulÚvarÚvideoÚwbrc                   ó6   a € ] tR tRt o RtV 3R lR ltRtV tR# )Ú_TagFactoryií  af  
A factory for L{Tag} objects; the implementation of the L{tags} object.

This allows for the syntactic convenience of C{from twisted.web.template
import tags; tags.a(href="linked-page.html")}, where 'a' can be basically
any HTML tag.

The class is not exposed publicly because you only ever need one of these,
and we already made it for you.

@see: L{tags}
c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r.   ÚtagNamer1   )re   r#   )r3   rC   s   "€r*   r4   Ú_TagFactory.__annotate__û  s   ø€ ÷ ñ ¡3ð ©3ñ r,   c                ó’   € VR 8X  d   \        R4      # VP                  R4      pV\        9  d   \        RV: 24      h\        V4      # )r  r  Ú_zunknown tag )r#   r    ÚVALID_HTML_TAG_NAMESÚAttributeError)rI   r*  s   &&r*   Ú__getattr__Ú_TagFactory.__getattr__û  sF   € Ø�mÔ#Ü�r“7ˆNà—.‘. Ó%ˆØÔ.Ô.Ü  <°©{Ð!;Ó<Ð<Ü�7‹|Ðr,   rP   N)rV   rW   rX   rY   rZ   r0  r\   r]   rj   s   @r*   r(  r(  í  s   ø‡ € ñ÷ö r,   r(  c                óœ   € V ^8„  d   QhR\         R\        R\        \        ,          R\        \        \
        .R3,          ,          R\        /# )r.   r0   ÚelementÚdoctypeÚ_failElementr   r1   )r&   r%   r   r2   r   r   rD  )r3   s   "r*   r4   r4     sO   € ÷ 4ñ 4Üð4äð4ô ”e�_ð4ô œ8¤W I¨yÐ$8Õ9Õ:ð	4ô
 ñ4r,   c                ó  a a€ Ve#   S P                  V4       S P                  R4       Sf   \        o\        S VS P                   4      pR VV 3R llpRS /R R llpVP                  V4       VP	                  V4       \
        # )a»  
Render an element or other L{IRenderable}.

@param request: The L{IRequest} being rendered to.
@param element: An L{IRenderable} which will be rendered.
@param doctype: A L{bytes} which will be written as the first line of
    the request, or L{None} to disable writing of a doctype.  The argument
    should not include a trailing newline and will default to the HTML5
    doctype C{'<!DOCTYPE html>'}.

@returns: NOT_DONE_YET

@since: 12.1
ó   
c                óT   € V ^8„  d   QhR\         R\        \        R,          ,          /# )r.   r{  r1   N)r   r   r   )r3   s   "r*   r4   Ú#renderElement.<locals>.__annotate__%  s#   € ÷ ñ ”Gð ¤¬°$­Õ 8ñ r,   c                 óä   <€ \         P                  R V R7       \        SRR4      pVe6   VP                  '       d$   Sf   Q h\	        SS! V 4      SP
                  4      # SP                  R4       R# )z/An error occurred while rendering the response.r†  ÚsiteNsr   <div style="font-size:800%;background-color:#FFF;color:#F00">An error occurred while rendering the response.</div>)Ú
_moduleLogr{  r]  ÚdisplayTracebacksr   Úwrite)r{  r;  r5  r0   s   & €€r*   ÚebÚrenderElement.<locals>.eb%  sw   ø€ Ü×ÑØ=Àwð 	ô 	
ô �w ¨Ó-ˆØÒ × 6× 6Ð 6ØÒ+Ð+Ð+Ü˜7¡L°Ó$9¸7¿=¹=ÓIÐIà�M‰MðKôñ r,   r0   c                ó<   € V ^8„  d   QhR\         R\        R\         /# )r.   rŒ  r0   r1   )rD  r&   )r3   s   "r*   r4   r9  6  s!   € ÷ ñ ”vð ¬8ð Ä&ñ r,   c                ó&   € VP                  4        V # rF   )Úfinish)rŒ  r0   s   &$r*   rC  ÚrenderElement.<locals>.finish6  s   € Ø�‰ÔØˆr,   )r>  ry  r   rx   r‰  ru   )r0   r3  r4  r5  ro   r?  rC  s   f&&f   r*   ÚrenderElementrE    sv   ù€ ð( ÒØ�‰�gÔØ�‰�eÔàÒÜ%ˆä�˜ '§-¡-Ó0€A÷ñ ð"°g÷ ð ‡L�L�ÔØ‡I�IˆfÔÜÐr,   )s   <!DOCTYPE html>N)UrZ   rl  rž   rŸ  Úcollectionsr   rê  r   Útypingr   r   r   r   r	   r
   r   r   r   r   r   Úxml.saxr   r   Úxml.sax.xmlreaderr   r   Úzope.interfacer   Útwisted.internet.deferr   Útwisted.loggerr   Útwisted.pythonr   Útwisted.python.failurer   Útwisted.python.filepathr   Útwisted.python.reflectr   Útwisted.webr   Útwisted.web._elementr   r   Útwisted.web._flattenr   r   r    Útwisted.web._stanr!   r"   r#   r$   Útwisted.web.iwebr%   r&   r'   r+   r>   rn   r@   r`   rl   r…   r•   r±   r¿   rÇ   r  ÚContentHandlerÚEntityResolverrß   re  rg  ry  r�  ru   r<  rª   r˜  r.  r(  ÚtagsrE  rP   r,   r*   Ú<module>rY     s�  ðñó 
Û Û Ý #Ý ÷÷ ÷ ñ ÷ )ß 7å &å +Ý !Ý "Ý *Ý ,Ý 5Ý  ß 2ß DÑ Dß 7Ó 7ß CÑ Cò(õ&ôRˆx× Ñ ô ô*)�X×&Ñ&ô )ô:)�x×(Ñ(ô )ô8%˜ô %ô<+E˜Wô +Eô\+B�Gô +Bô\
�Gô 
÷&"'ñ "'ðJ LÐ ôu.ˆg×$Ñ$ g×&<Ñ&<ô u.õpñ0 ˆ_Ó÷$ð $ó ð$ô6qB�Wô qBòhð8 €Ù‹X€
ñ ˆ_Ó÷ð ó ðñ" ˆ_Ó÷0$ð 0$ó ð0$ðnyØðyà
ðyð ðyð ð	yð
 ðyð ðyð ðyð ðyð ðyð ðyð ðyð ðyð 
ðyð 
ðyð 
ðyð  ð!yð" ð#yð$ 	ð%yð& ð'yð( ð)yð* ð+yð, ð-yð. ð/yð0 ð1yð2 
ð3yð4 ð5yð6 ð7yð8 ð9yð: 	ð;yð< 
ð=yð> ð?yð@ 
ðAyðB 
ðCyðD 
ðEyðF 	ðGyðH 	ðIyðJ 	ðKyðL ðMyðN ðOyðP ðQyðR ðSyðT ðUyðV ðWyðX ðYyðZ ð[yð\ ð]yð^ 	ð_yð` 	ðayðb 	ðcyðd 	ðeyðf 	ðgyðh 	ðiyðj ðkyðl ðmyðn ðoyðp 	ðqyðr ðsyðt ðuyðv ðwyðx 
ðyyðz ð{yð| 
ð}yð~ ðyð@ ðAyðB 
ðCyðD ðEyðF ðGyðH 	ðIyðJ ðKyðL 
ðMyðN ðOyðP ðQyðR ðSyðT ðUyðV 
ðWyðX ðYyðZ ð[yð\ ð]yð^ 	ð_yð` ðayðb ðcyðd ðeyðf ðgyðh ðiyðj 
ðkyðl ðmyðn ðoyðp 	ðqyðr 	ðsyðt ðuyðv ðwyðx ðyyðz ð{yð| ð}yð~ ðyð@ ðAyðB ðCyðD ðEyðF ðGyðH ðIyðJ ðKyðL 
ðMyðN ðOyðP 
ðQyðR ðSyðT ðUyðV 	ðWyðX ðYyðZ ð[yð\ 	ð]yð^ ð_yð` ðayðb ðcyðd 	ðeyðf 	ðgyðh ðiyðj 	ðkyðl 
ðmyðn ðoyðp 
ðqyÐ ÷xñ ñ0 ƒ}€÷4ñ 4r,   