§
    ŒŸjC\  ã                   óœ  — d Z ddlZddlZddlZ ej        dded¬¦  «         ddlmZmZ ddlm	Z	 dd	l
mZmZ dd
l
mZ ddlmZ ddlmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZmZ ddlmZm Z  ddl!m"Z" e	j#        Z$ e"e$¦  «        Z%e	j&        d         e	j&        d         e	j&        d         hZ'e	j&        d         Z(e	j&        d         Z)e	j&        d         Z*e	j&        d         Z+ e,d¦  «        Z- e,d¦  «        Z. G d„ d¦  «        Z/ G d„ de ¦  «        Z0 G d„ de¦  «        Z1d„ Z2d„ Z3d „ Z4 ej5        d!¦  «        Z6d"„ Z7 G d#„ d$e¦  «        Z8dS )%z‡
Shim module between Bleach and html5lib. This makes it easier to upgrade the
html5lib library without having to change a lot of code.
é    NÚignorez"html5lib's sanitizer is deprecatedzbleach._vendor.html5lib)ÚmessageÚcategoryÚmodule)Ú
HTMLParserÚgetTreeWalker)Ú	constants)Ú
namespacesÚprefixes)Ú_ReparseException)ÚFilter)Úallowed_protocolsÚallowed_css_propertiesÚallowed_svg_propertiesÚattr_val_is_uriÚsvg_attr_val_allows_refÚsvg_allow_local_href)ÚHTMLInputStream)ÚescapeÚHTMLSerializer)ÚattributeMapÚHTMLTokenizer)ÚTrieÚStartTagÚEndTagÚEmptyTagÚ
CharactersÚ
ParseError)pÚaÚabbrÚaddressÚareaÚarticleÚasideÚaudioÚbÚbaseÚbdiÚbdoÚ
blockquoteÚbodyÚbrÚbuttonÚcanvasÚcaptionÚciteÚcodeÚcolÚcolgroupÚdataÚdatalistÚddÚdelÚdetailsÚdfnÚdialogÚdivÚdlÚdtÚemÚembedÚfieldsetÚ
figcaptionÚfigureÚfooterÚformÚh1Úh2Úh3Úh4Úh5Úh6ÚheadÚheaderÚhgroupÚhrÚhtmlÚiÚiframeÚimgÚinputÚinsÚkbdÚkeygenÚlabelÚlegendÚliÚlinkÚmapÚmarkÚmenuÚmetaÚmeterÚnavÚnoscriptÚobjectÚolÚoptgroupÚoptionÚoutputÚpÚparamÚpictureÚpreÚprogressÚqÚrpÚrtÚrubyÚsÚsampÚscriptÚsectionÚselectÚslotÚsmallÚsourceÚspanÚstrongÚstyleÚsubÚsummaryÚsupÚtableÚtbodyÚtdÚtemplateÚtextareaÚtfootÚthÚtheadÚtimeÚtitleÚtrÚtrackÚuÚulÚvarÚvideoÚwbr)!r!   r#   r$   r*   r8   r:   r6   r;   r<   r=   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rL   rM   rN   rY   Úmainr`   rc   rg   rj   rs   r~   r‹   c                   óz   — e Zd ZdZd„ Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zd„ Z	dd„Z
d	„ Zd
„ Zd„ ZdS )ÚInputStreamWithMemoryzÄWraps an HTMLInputStream to remember characters since last <

    This wraps existing HTMLInputStream classes to keep track of the stream
    since the last < which marked an open tag state.

    c                 óf   — || _         | j         j        | _        | j         j        | _        g | _        d S ©N)Ú_inner_streamÚresetÚpositionÚ_buffer)ÚselfÚinner_streams     úa/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/bleach/html5lib_shim.pyÚ__init__zInputStreamWithMemory.__init__ü   s/   € Ø)ˆÔØÔ'Ô-ˆŒ
ØÔ*Ô3ˆŒØˆŒˆˆó    c                 ó   — | j         j        S r“   )r”   Úerrors©r˜   s    rš   rž   zInputStreamWithMemory.errors  s   € àÔ!Ô(Ð(rœ   c                 ó   — | j         j        S r“   )r”   ÚcharEncodingrŸ   s    rš   r¡   z"InputStreamWithMemory.charEncoding  s   € àÔ!Ô.Ð.rœ   c                 ó   — | j         j        S r“   )r”   ÚchangeEncodingrŸ   s    rš   r£   z$InputStreamWithMemory.changeEncoding
  s   € àÔ!Ô0Ð0rœ   c                 óp   — | j                              ¦   «         }|r| j                             |¦  «         |S r“   )r”   Úcharr—   Úappend)r˜   Úcs     rš   r¥   zInputStreamWithMemory.char  s9   € ØÔ×#Ò#Ñ%Ô%ˆàð 	#ØŒL×Ò Ñ"Ô"Ð"Øˆrœ   Fc                 óŒ   — | j                              ||¬¦  «        }| j                             t	          |¦  «        ¦  «         |S )N)Úopposite)r”   Ú
charsUntilr—   ÚextendÚlist)r˜   Ú
charactersr©   Úcharss       rš   rª   z InputStreamWithMemory.charsUntil  s>   € ØÔ"×-Ò-¨jÀ8Ð-ÑLÔLˆØŒ×Ò�D ™KœKÑ(Ô(Ð(Øˆrœ   c                 óx   — | j         r| j                              d¦  «         | j                             |¦  «        S )Néÿÿÿÿ)r—   Úpopr”   Úunget)r˜   r¥   s     rš   r²   zInputStreamWithMemory.unget  s9   € ØŒ<ð 	!ØŒL×Ò˜RÑ Ô Ð ØÔ!×'Ò'¨Ñ-Ô-Ð-rœ   c                 ó6   — d                      | j        ¦  «        S )zþReturns the stream history since last '<'

        Since the buffer starts at the last '<' as as seen by tagOpenState(),
        we know that everything from that point to when this method is called
        is the "tag" that is being tokenized.

        Ú )Újoinr—   rŸ   s    rš   Úget_tagzInputStreamWithMemory.get_tag  s   € ð �wŠw�t”|Ñ$Ô$Ð$rœ   c                 ó   — dg| _         dS )z¶Resets stream history to just '<'

        This gets called by tagOpenState() which marks a '<' that denotes an
        open tag. Any time we see that, we reset the buffer.

        ú<N)r—   rŸ   s    rš   Ú	start_tagzInputStreamWithMemory.start_tag)  s   € ð �uˆŒˆˆrœ   N©F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r›   Úpropertyrž   r¡   r£   r¥   rª   r²   r¶   r¹   © rœ   rš   r‘   r‘   ô   sÎ   € € € € € ðð ðð ð ð ð)ð )ñ „Xð)ð ð/ð /ñ „Xð/ð ð1ð 1ñ „Xð1ðð ð ðð ð ð ð
.ð .ð .ð
%ð %ð %ðð ð ð ð rœ   r‘   c                   óN   ‡ — e Zd ZdZd	ˆ fd„	Zˆ fd„Zd
ˆ fd„	Zˆ fd„Zˆ fd„Zˆ xZ	S )ÚBleachHTMLTokenizerz1Tokenizer that doesn't consume character entitiesFc                 óˆ   •—  t          ¦   «         j        di |¤Ž || _        t          | j        ¦  «        | _        d | _        d S )NrÀ   )Úsuperr›   Úconsume_entitiesr‘   ÚstreamÚemitted_last_token)r˜   rÅ   ÚkwargsÚ	__class__s      €rš   r›   zBleachHTMLTokenizer.__init__6  sK   ø€ Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"à 0ˆÔõ ,¨D¬KÑ8Ô8ˆŒð #'ˆÔÐÐrœ   c              #   óz  •K  — d }t          ¦   «                              ¦   «         D �]+}|��|d         dk    r_|d         t          v rP|                     d¦  «        r;t	          d„ |d                              ¦   «         D ¦   «         ¦  «        |d<   d }|V — nŸ|d         dk    rq| j        j        �e|d                              ¦   «          	                    ¦   «         | j        j        vr-| j
                             ¦   «         |d<   t          |d<   d }|V — n"|d         t          k    r|V — |}n
|V — |V — d }�Œ|d         t          k    r|}�Œ'|V — �Œ-|rf|d         dk    r%t          | j
                             ¦   «         dœV — d S |d         dv r%t          | j
                             ¦   «         dœV — d S |V — d S d S )	Nr4   z#invalid-character-in-attribute-nameÚtypec              3   ó<   K  — | ]\  }}d |vrd|vr
d|v¯||fV — ŒdS )ú"ú'r¸   NrÀ   )Ú.0Ú	attr_nameÚ
attr_values      rš   ú	<genexpr>z/BleachHTMLTokenizer.__iter__.<locals>.<genexpr>Q  sZ   è è € ð 1ð 1á1˜I zà yÐ0Ð0Ø #¨9Ð 4Ð 4Ø #¨9Ð 4Ð 4ð # JÐ/ð
 !5Ð 4Ð 4Ð 4ð1ð 1rœ   z!expected-closing-tag-but-got-charzeof-in-tag-name©rË   r4   )zduplicate-attributezeof-in-attribute-namez eof-in-attribute-value-no-quoteszexpected-end-of-tag-but-got-eof)rÄ   Ú__iter__ÚTAG_TOKEN_TYPESÚgetr   ÚitemsÚparserÚtagsÚlowerÚstriprÆ   r¶   ÚTAG_TOKEN_TYPE_CHARACTERSÚTAG_TOKEN_TYPE_PARSEERROR)r˜   Úlast_error_tokenÚtokenrÉ   s      €rš   rÔ   zBleachHTMLTokenizer.__iter__A  sH  øè è € ØÐå‘W”W×%Ò%Ñ'Ô'ð B	ñ B	ˆEØÑ+à$ VÔ,Ð0UÒUÐUØ˜fœ­Ð8Ð8ØŸ	š	 &Ñ)Ô)ð 9õ %1ð 1ð 1à5:¸6´]×5HÒ5HÑ5JÔ5Jð1ñ 1ô 1ñ %ô %�E˜&‘Mð (,Ð$Ø�K�K�K�Kð % VÔ,Ð0SÒSÐSØœÔ(Ð4Ø˜fœ×+Ò+Ñ-Ô-×3Ò3Ñ5Ô5¸T¼[Ô=MÐMÐMð %)¤K×$7Ò$7Ñ$9Ô$9�E˜&‘MÝ$=�E˜&‘Mà'+Ð$Ø�K�K�K�Kà˜6”]Õ&?Ò?Ð?ð +Ð*Ð*Ð*Ø',Ð$Ð$ð +Ð*Ð*Ð*Ø�K�K�KØ'+Ð$áð �VŒ}Õ 9Ò9Ð9Ø#(Ð ÙàˆKˆKˆK‰Kàð 	'Ø Ô'Ð+<Ò<Ð<õ
  9À$Ä+×BUÒBUÑBWÔBWÐXÐXÐXÐXÐXÐXÐXà! &Ô)ð .ð ð õ   9À$Ä+×BUÒBUÑBWÔBWÐXÐXÐXÐXÐXÐXÐXð 'Ð&Ð&Ð&Ð&Ð&ð7	'ð 	'rœ   Nc                 óè   •— | j         r"t          ¦   «                              ||¦  «        S |r#| j        d         d         dxx         dz  cc<   d S | j                             t          ddœ¦  «         d S )Nr4   r°   é   ú&rÓ   )rÅ   rÄ   ÚconsumeEntityÚcurrentTokenÚ
tokenQueuer¦   rÜ   )r˜   ÚallowedCharÚfromAttributerÉ   s      €rš   rã   z!BleachHTMLTokenizer.consumeEntity¥  sŒ   ø€ ð Ô ð 	EÝ‘7”7×(Ò(¨°mÑDÔDÐDð ð 	UØÔ˜fÔ% bÔ)¨!Ð,Ð,Ô,°Ñ3Ð,Ð,Ñ,Ð,Ð,ð ŒO×"Ò"Õ,EÈsÐ#SÐ#SÑTÔTÐTÐTÐTrœ   c                 óv   •— | j                              ¦   «          t          ¦   «                              ¦   «         S r“   )rÆ   r¹   rÄ   ÚtagOpenState)r˜   rÉ   s    €rš   ré   z BleachHTMLTokenizer.tagOpenState·  s/   ø€ ð
 	Œ×ÒÑÔÐÝ‰wŒw×#Ò#Ñ%Ô%Ð%rœ   c                 ó8  •— | j         }| j        j        �Ù|d         t          v rÊ|d                              ¦   «         | j        j        vr¤| j        j        r?| j        r5|d         t          k    r$|d                              ¦   «         t          v rd}nd}n| j	         
                    ¦   «         }t          |dœ}|x| _         | _        | j                             |¦  «         | j        | _        d S | j         | _        t!          ¦   «                              ¦   «          d S )NrË   Únameú
r´   rÓ   )rä   rØ   rÙ   rÕ   rÚ   rÛ   rÇ   ÚTAG_TOKEN_TYPE_STARTÚHTML_TAGS_BLOCK_LEVELrÆ   r¶   rÜ   rå   r¦   Ú	dataStateÚstaterÄ   ÚemitCurrentToken)r˜   rß   Únew_dataÚ	new_tokenrÉ   s       €rš   rñ   z$BleachHTMLTokenizer.emitCurrentToken¿  s  ø€ ØÔ!ˆð ŒKÔÐ(Ø�f”¥Ð0Ð0Ø�f”×#Ò#Ñ%Ô%¨T¬[Ô-=Ð=Ð=ð
 Œ{Ô ð 1àÔ+ð"à˜fœÕ)=Ò=Ð=Ø˜fœ×+Ò+Ñ-Ô-Õ1FÐFÐFð
  $�H�Hð  "�H�Hð  œ;×.Ò.Ñ0Ô0�å!:ÀHÐMÐMˆIà:CÐCˆDÔ Ô 7ØŒO×"Ò" 9Ñ-Ô-Ð-ØœˆDŒJØˆFà"&Ô"3ˆÔÝ‰Œ× Ò Ñ"Ô"Ð"Ð"Ð"rœ   rº   )NF)
r»   r¼   r½   r¾   r›   rÔ   rã   ré   rñ   Ú__classcell__©rÉ   s   @rš   rÂ   rÂ   3  s¸   ø€ € € € € Ø;Ð;ð	'ð 	'ð 	'ð 	'ð 	'ð 	'ðb'ð b'ð b'ð b'ð b'ðHUð Uð Uð Uð Uð Uð$&ð &ð &ð &ð &ð*#ð *#ð *#ð *#ð *#ð *#ð *#ð *#ð *#rœ   rÂ   c                   ó,   ‡ — e Zd ZdZˆ fd„Z	 dd„Zˆ xZS )ÚBleachHTMLParserz$Parser that uses BleachHTMLTokenizerc                 óš   •— |�t          d„ |D ¦   «         ¦  «        nd| _        || _        || _         t	          ¦   «         j        di |¤Ž dS )aÏ  
        :arg tags: set of allowed tags--everything else is either stripped or
            escaped; if None, then this doesn't look at tags at all
        :arg strip: whether to strip disallowed tags (True) or escape them (False);
            if tags=None, then this doesn't have any effect
        :arg consume_entities: whether to consume entities (default behavior) or
            leave them as is when tokenizing (BleachHTMLTokenizer-added behavior)

        Nc              3   ó>   K  — | ]}|                      ¦   «         V — Œd S r“   )rÚ   )rÏ   Útags     rš   rÒ   z,BleachHTMLParser.__init__.<locals>.<genexpr>ú  s*   è è € Ð3Ð3 s�s—y’y‘{”{Ð3Ð3Ð3Ð3Ð3Ð3rœ   rÀ   )Ú	frozensetrÙ   rÛ   rÅ   rÄ   r›   )r˜   rÙ   rÛ   rÅ   rÈ   rÉ   s        €rš   r›   zBleachHTMLParser.__init__ï  sd   ø€ ð 9=Ð8H�IÐ3Ð3¨dÐ3Ñ3Ô3Ñ4Ô4Ð4Èdð 	Œ	ð ˆŒ
Ø 0ˆÔØ�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ð"Ð"rœ   Fr;   Tc                 ó(  — || _         || _        || _        t          d|| j        | dœ|¤Ž| _        |                      ¦   «          	 |                      ¦   «          d S # t          $ r, |                      ¦   «          |                      ¦   «          Y d S w xY w)N)rÆ   rÅ   rØ   rÀ   )	ÚinnerHTMLModeÚ	containerÚ	scriptingrÂ   rÅ   Ú	tokenizerr•   ÚmainLoopÚReparseException)r˜   rÆ   Ú	innerHTMLrþ   rÿ   rÈ   s         rš   Ú_parsezBleachHTMLParser._parse   s§   € ð 'ˆÔØ"ˆŒØ"ˆŒÝ,ð 
Ø¨DÔ,AÈ$ð
ð 
ØRXð
ð 
ˆŒð 	�
Š
‰Œˆð	Ø�MŠM‰OŒOˆOˆOˆOøÝð 	ð 	ð 	Ø�JŠJ‰LŒLˆLØ�MŠM‰OŒOˆOˆOˆOˆOð	øøøs   ÁA Á2BÂB)Fr;   T)r»   r¼   r½   r¾   r›   r  rô   rõ   s   @rš   r÷   r÷   ì  sY   ø€ € € € € Ø.Ð.ð#ð #ð #ð #ð #ð$ CGðð ð ð ð ð ð ð rœ   r÷   c                 ó2  — | d         dk    rqt          | ¦  «        dk     rdS | d         dv r| dd…         d}}n| dd…         d}}|d	k    rdS t          ||¦  «        }d|cxk     rd
k     rn nt          |¦  «        S dS t                               | d¦  «        S )a9  Convert an entity (minus the & and ; part) into what it represents

    This handles numeric, hex, and text entities.

    :arg value: the string (minus the ``&`` and ``;`` part) to convert

    :returns: unicode character or None if it's an ambiguous ampersand that
        doesn't match a character entity

    r   ú#é   Nrá   ©ÚxÚXé   é
   r´   i   )ÚlenÚintÚchrÚENTITIESrÖ   )ÚvalueÚint_as_stringr'   Ú
code_points       rš   Úconvert_entityr    sÀ   € ð ˆQ„x�3‚€Ýˆu‰:Œ:˜Š>ˆ>Ø�4à�Œ8�zÐ!Ð!à"'¨¨¨¤)¨R˜4ˆMˆMð #(¨¨¨¤)¨R˜4ˆMà˜BÒÐØ�4å˜¨Ñ-Ô-ˆ
ØˆzÐ$Ð$Ò$Ð$˜HÒ$Ð$Ð$Ð$Ð$Ý�z‘?”?Ð"à�4å�<Š<˜˜tÑ$Ô$Ð$rœ   c                 óŒ  — d| vr| S g }t          | ¦  «        D ]˜}|sŒ|                     d¦  «        rit          |¦  «        }|�Xt          |¦  «        }|�G|                     |¦  «         |t          |¦  «        dz   d…         }|r|                     |¦  «         Œƒ|                     |¦  «         Œ™d                     |¦  «        S )z‘Converts all found entities in the text

    :arg text: the text to convert entities in

    :returns: unicode text with converted entities

    râ   Nr  r´   )Únext_possible_entityÚ
startswithÚmatch_entityr  r¦   r  rµ   )ÚtextÚnew_textÚpartÚentityÚ	convertedÚ	remainders         rš   Úconvert_entitiesr  :  så   € ð �$€€Øˆà€HÝ$ TÑ*Ô*ð ð ˆØð 	Øà�?Š?˜3ÑÔð 	Ý! $Ñ'Ô'ˆFØÐ!Ý*¨6Ñ2Ô2�	ð Ð(Ø—O’O IÑ.Ô.Ð.Ø $¥S¨¡[¤[°1¡_Ð%6Ð%6Ô 7�IØð 3Ø Ÿš¨	Ñ2Ô2Ð2Øà�Š˜ÑÔÐÐà�7Š7�8ÑÔÐrœ   c                 ó‚  — | d         dk    rt          d¦  «        ‚| dd…         } t          | ¦  «        } d}dt          j        z   }| r—| d         dk    r‹d}|                      d¦  «         | r%| d         d	v rd
}||                      d¦  «        z  }nd}| r5| d         |vr+|                      d¦  «        }||vrn||z  }| r
| d         |v°+|r| r| d         dk    r|S dS | rL| d         |vrB|                      d¦  «        }||z  }t
                               |¦  «        sdS | r
| d         |v°B|r| r| d         dk    r|S dS )av  Returns first entity in stream or None if no entity exists

    Note: For Bleach purposes, entities must start with a "&" and end with a
    ";". This ignores ambiguous character entities that have no ";" at the end.

    :arg stream: the character stream

    :returns: the entity string without "&" or ";" if it's a valid character
        entity; ``None`` otherwise

    r   râ   zStream should begin with "&"rá   Nr´   z<&=;r  r  Ú0123456789abcdefABCDEFÚ
0123456789ú;)Ú
ValueErrorr¬   ÚstringÚ
whitespacer±   ÚENTITIES_TRIEÚhas_keys_with_prefix)rÆ   Úpossible_entityÚend_charactersÚallowedr§   s        rš   r  r  ]  s¿  € ð ˆa„y�CÒÐÝÐ7Ñ8Ô8Ð8à�A�B�BŒZ€Få�&‰\Œ\€FØ€OØ�fÔ/Ñ/€Nð ð �&˜”)˜sÒ"Ð"ØˆØ�
Š
�1‰Œˆàð 	#�f˜Q”i :Ð-Ð-Ø.ˆGØ˜vŸzšz¨!™}œ}Ñ,ˆOˆOà"ˆGð ð 	!˜ œ¨.Ð8Ð8Ø—
’
˜1‘”ˆAØ˜ÐÐØØ˜qÑ ˆOð	 ð 	!˜ œ¨.Ð8Ð8ð ð 	#˜vð 	#¨&°¬)°sÒ*:Ð*:Ø"Ð"Øˆtð ð �V˜A”Y nÐ4Ð4Ø�JŠJ�q‰MŒMˆØ˜1ÑˆÝ×1Ò1°/ÑBÔBð 	ð �4ð ð �V˜A”Y nÐ4Ð4ð ð ˜6ð  f¨Q¤i°3Ò&6Ð&6ØÐàˆ4rœ   z(&)c              #   óš   K  — t          t                               | ¦  «        ¦  «        D ] \  }}|dk    r|V — Œ|dz  dk    rd|z   V — Œ!dS )z·Takes a text and generates a list of possible entities

    :arg text: the text to look at

    :returns: generator where each part (except the first) starts with an
        "&"

    r   r  râ   N)Ú	enumerateÚAMP_SPLIT_REÚsplit)r  rP   r  s      rš   r  r  œ  sm   è è € õ �\×/Ò/°Ñ5Ô5Ñ6Ô6ð ð ‰ˆˆ4Ø�Š6ˆ6ØˆJˆJˆJˆJØ�‰U�aŠZˆZØ˜‘*ÐÐÐøð	ð rœ   c                   ó.   ‡ — e Zd ZdZdZd„ Zdˆ fd„	Zˆ xZS )ÚBleachHTMLSerializerz[HTMLSerializer that undoes & -> &amp; in attributes and sets
    escape_rcdata to True
    Tc              #   óL  K  — |                      dd¦  «        }t          |¦  «        D ]{}|sŒ|                     d¦  «        rIt          |¦  «        }|�8t	          |¦  «        �)d|› d�V — |t          |¦  «        dz   d…         }|r|V — Œc|                      dd¦  «        V — Œ|dS )z,Escapes just bare & in HTML attribute valuesz&amp;râ   Nr#  r  )Úreplacer  r  r  r  r  )r˜   Ústokenr  r  s       rš   Úescape_base_ampz$BleachHTMLSerializer.escape_base_amp¹  sà   è è € ð —’ ¨Ñ-Ô-ˆõ )¨Ñ0Ô0ð 	-ð 	-ˆDØð Øà�Š˜sÑ#Ô#ð Ý% dÑ+Ô+�ð Ð%­.¸Ñ*@Ô*@Ð*LØ'˜f˜-˜-˜-Ð'Ð'Ð'ð  ¥ F¡¤¨a¡Ð 1Ð 1Ô2�DØð #Ø"˜
˜
˜
Øà—,’,˜s GÑ,Ô,Ð,Ð,Ð,Ð,ð%	-ð 	-rœ   Nc              #   ó  •K  — d}d}t          ¦   «                              ||¦  «        D ]\}|r=|dk    rd}n/|r%|dk    r|                      |¦  «        E d{V —† d}Œ3n|dk    rd}|V — ŒA|                     d¦  «        rd}|V — Œ]dS )zÜWrap HTMLSerializer.serialize and conver & to &amp; in attribute values

        Note that this converts & to &amp; in attribute values where the & isn't
        already part of an unambiguous character entity.

        Fú>rÍ   Nú=Tr¸   )rÄ   Ú	serializer5  r  )r˜   Ú
treewalkerÚencodingÚin_tagÚafter_equalsr4  rÉ   s         €rš   r9  zBleachHTMLSerializer.serializeØ  sÝ   øè è € ð ˆØˆå‘g”g×'Ò'¨
°HÑ=Ô=ð 	ð 	ˆFØð Ø˜S’=�=Ø"�F�Fà!ð (Ø ’}�}Ø#'×#7Ò#7¸Ñ#?Ô#?Ð?Ð?Ð?Ð?Ð?Ð?Ð?à',˜Ø ð	 %ð ˜s’]�]Ø#'�Là����à×$Ò$ SÑ)Ô)ð "Ø!�FØ����ð'	ð 	rœ   r“   )r»   r¼   r½   r¾   Úescape_rcdatar5  r9  rô   rõ   s   @rš   r1  r1  ¬  s]   ø€ € € € € ðð ð €Mð-ð -ð -ð>ð ð ð ð ð ð ð ð ð rœ   r1  )9r¾   Úrer%  ÚwarningsÚfilterwarningsÚDeprecationWarningÚbleach._vendor.html5libr   r   r	   Ú!bleach._vendor.html5lib.constantsr
   r   r   r  Ú$bleach._vendor.html5lib.filters.baser   Ú)bleach._vendor.html5lib.filters.sanitizerr   r   r   r   r   r   ÚSanitizerFilterÚ$bleach._vendor.html5lib._inputstreamr   Ú"bleach._vendor.html5lib.serializerr   r   Ú"bleach._vendor.html5lib._tokenizerr   r   Úbleach._vendor.html5lib._trier   Úentitiesr  r'  Ú
tokenTypesrÕ   rí   ÚTAG_TOKEN_TYPE_ENDrÜ   rÝ   rû   Ú	HTML_TAGSrî   r‘   rÂ   r÷   r  r  r  Úcompiler.  r  r1  rÀ   rœ   rš   ú<module>rQ     sÄ  ððð ð
 
€	€	€	Ø €€€Ø €€€ð €Ô ØØ0ØØ$ð	ñ ô ð ðð ð ð ð ð ð ð ðð ð ð ð ð ðð ð ð ð ð ð ð ðð ð ð ð ð ðð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ðð ð ð ð ð ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ðð ð ð ð ð ð Ô€ð ��X‘”€ð Ô˜Ô$ØÔ˜Ô"ØÔ˜Ô$ð€ð
 !Ô+¨JÔ7Ð ØÔ)¨(Ô3Ð Ø%Ô0°Ô>Ð Ø%Ô0°Ô>Ð ð
 ˆIðqñsô s€	ðr "˜	ð"ñ$ô $Ð ðN<ð <ð <ð <ð <ñ <ô <ð <ð~v#ð v#ð v#ð v#ð v#˜-ñ v#ô v#ð v#ðr)ð )ð )ð )ð )�zñ )ô )ð )ðX%ð %ð %ðD ð  ð  ðF9ð 9ð 9ðx ˆrŒz˜%Ñ Ô €ðð ð ð Ið Ið Ið Ið I˜>ñ Iô Ið Ið Ið Irœ   