§
    (¶ÕiQ  ã                   óÞ  — d Z ddlZddlZddlZg d¢Zdj        Zdj        Zdj        Z G d„ de	¦  «        Z
ej        ej        z   d	z   Zed
z   Zd„  e ed¦  «        ¦  «         e eee¦  «        ¦  «        z
  D ¦   «         Ze                      ed¦  «        d ed¦  «        di¦  «          ej        d ej        e¦  «        z  ¦  «        j        Z ej        d¦  «        Zd„ Zd„ Z ej        d¦  «        j        Zd„ Zd„ Zg d¢Z g d¢Z!de e!fd„Z" G d„ de#¦  «        Z$dZ%e%dz   Z& ej        de%z   d z   e&z   d!z   ej'        ej(        z  ¦  «        Z) G d"„ d#e#¦  «        Z* G d$„ d%e*¦  «        Z+dS )&a%
  
Here's a sample session to show how to use this module.
At the moment, this is the only documentation.

The Basics
----------

Importing is easy...

   >>> from http import cookies

Most of the time you start by creating a cookie.

   >>> C = cookies.SimpleCookie()

Once you've created your Cookie, you can add values just as if it were
a dictionary.

   >>> C = cookies.SimpleCookie()
   >>> C["fig"] = "newton"
   >>> C["sugar"] = "wafer"
   >>> C.output()
   'Set-Cookie: fig=newton\r\nSet-Cookie: sugar=wafer'

Notice that the printable representation of a Cookie is the
appropriate format for a Set-Cookie: header.  This is the
default behavior.  You can change the header and printed
attributes by using the .output() function

   >>> C = cookies.SimpleCookie()
   >>> C["rocky"] = "road"
   >>> C["rocky"]["path"] = "/cookie"
   >>> print(C.output(header="Cookie:"))
   Cookie: rocky=road; Path=/cookie
   >>> print(C.output(attrs=[], header="Cookie:"))
   Cookie: rocky=road

The load() method of a Cookie extracts cookies from a string.  In a
CGI script, you would use this method to extract the cookies from the
HTTP_COOKIE environment variable.

   >>> C = cookies.SimpleCookie()
   >>> C.load("chips=ahoy; vienna=finger")
   >>> C.output()
   'Set-Cookie: chips=ahoy\r\nSet-Cookie: vienna=finger'

The load() method is darn-tootin smart about identifying cookies
within a string.  Escaped quotation marks, nested semicolons, and other
such trickeries do not confuse it.

   >>> C = cookies.SimpleCookie()
   >>> C.load('keebler="E=everybody; L=\\"Loves\\"; fudge=;";')
   >>> print(C)
   Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=;"

Each element of the Cookie also supports all of the RFC 2109
Cookie attributes.  Here's an example which sets the Path
attribute.

   >>> C = cookies.SimpleCookie()
   >>> C["oreo"] = "doublestuff"
   >>> C["oreo"]["path"] = "/"
   >>> print(C)
   Set-Cookie: oreo=doublestuff; Path=/

Each dictionary element has a 'value' attribute, which gives you
back the value associated with the key.

   >>> C = cookies.SimpleCookie()
   >>> C["twix"] = "none for you"
   >>> C["twix"].value
   'none for you'

The SimpleCookie expects that all values should be standard strings.
Just to be sure, SimpleCookie invokes the str() builtin to convert
the value to a string, when the values are set dictionary-style.

   >>> C = cookies.SimpleCookie()
   >>> C["number"] = 7
   >>> C["string"] = "seven"
   >>> C["number"].value
   '7'
   >>> C["string"].value
   'seven'
   >>> C.output()
   'Set-Cookie: number=7\r\nSet-Cookie: string=seven'

Finis.
é    N)ÚCookieErrorÚ
BaseCookieÚSimpleCookieÚ z; ú c                   ó   — e Zd ZdS )r   N)Ú__name__Ú
__module__Ú__qualname__© ó    ú#/usr/lib/python3.11/http/cookies.pyr   r   ‘   s   € € € € € Ø€Dr   r   z!#$%&'*+-.^_`|~:z ()/<=>?@[]{}c                 ó   — i | ]}|d |z  “Œ	S )z\%03or   )Ú.0Úns     r   ú
<dictcomp>r   ¥   s4   € ð Jð Jð JØð �(˜Q‘,ð Jð Jð Jr   é   ú"ú\"ú\z\\z[%s]+z[\x00-\x1F\x7F]c                  ó4   — t          d„ | D ¦   «         ¦  «        S )zhDetects control characters within a value.
    Supports any type, as header values can be any type.
    c              3   ód   K  — | ]+}t                                t          |¦  «        ¦  «        V — Œ,d S ©N)Ú_control_character_reÚsearchÚstr)r   Úvs     r   ú	<genexpr>z)_has_control_character.<locals>.<genexpr>´   s7   è è € ÐAÐA¸Õ$×+Ò+­C°©F¬FÑ3Ô3ÐAÐAÐAÐAÐAÐAr   )Úany)Úvals    r   Ú_has_control_characterr!   °   s!   € õ ÐAÐA¸SÐAÑAÔAÑAÔAÐAr   c                 óh   — | �t          | ¦  «        r| S d|                      t          ¦  «        z   dz   S )zãQuote a string for use in a cookie header.

    If the string does not need to be double-quoted, then just return the
    string.  Otherwise, surround the string in doublequotes and quote
    (with a \) special characters.
    Nr   )Ú_is_legal_keyÚ	translateÚ_Translator©r   s    r   Ú_quoter'   ·   s6   € ð €{•m CÑ(Ô(€{Øˆ
à�S—]’]¥;Ñ/Ô/Ñ/°#Ñ5Ð5r   z\\(?:([0-3][0-7][0-7])|(.))c                 óh   — | d         r#t          t          | d         d¦  «        ¦  «        S | d         S )Né   é   é   )ÚchrÚint)Úms    r   Ú_unquote_replacer/   Æ   s1   € Øˆ„tð Ý•3�q˜”t˜Q‘<”<Ñ Ô Ð à�Œtˆr   c                 ó¢   — | �t          | ¦  «        dk     r| S | d         dk    s| d         dk    r| S | dd…         } t          t          | ¦  «        S )Nr+   r   r   éÿÿÿÿr)   )ÚlenÚ_unquote_subr/   r&   s    r   Ú_unquoter4   Ì   s\   € ð €{•c˜#‘h”h ’l�lØˆ
Ø
ˆ1„v�‚}€}˜˜Bœ 3š˜Øˆ
ð ˆa�ˆdŒ)€Cõ Õ(¨#Ñ.Ô.Ð.r   )ÚMonÚTueÚWedÚThuÚFriÚSatÚSun)NÚJanÚFebÚMarÚAprÚMayÚJunÚJulÚAugÚSepÚOctÚNovÚDecc           	      ó†   — ddl m}m }  |¦   «         } ||| z   ¦  «        \	  }}}}	}
}}}}d||         |||         ||	|
|fz  S )Nr   )ÚgmtimeÚtimez#%s, %02d %3s %4d %02d:%02d:%02d GMT)rJ   rI   )ÚfutureÚweekdaynameÚ	monthnamerI   rJ   ÚnowÚyearÚmonthÚdayÚhhÚmmÚssÚwdÚyÚzs                  r   Ú_getdaterX   í   su   € Ø!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ø
ˆ$‰&Œ&€CØ-3¨V°C¸&±LÑ-AÔ-AÑ*€Dˆ%��b˜"˜b " a¨Ø0Ø˜ŒO˜S )¨EÔ"2°D¸"¸bÀ"ÐEñFð Fr   c            
       ó  — e Zd ZdZdddddddd	d
dœ	ZddhZd„ Zed„ ¦   «         Zed„ ¦   «         Z	ed„ ¦   «         Z
d„ Zd!d„Zd„ Zej        Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd"d„ZeZd„ Zd!d„Zd!d „Z eej        ¦  «        ZdS )#ÚMorselaC  A class to hold ONE (key, value) pair.

    In a cookie, each such pair may have several attributes, so this class is
    used to keep the attributes associated with the appropriate key,value pair.
    This class also includes a coded_value attribute, which is used to hold
    the network representation of the value.
    ÚexpiresÚPathÚCommentÚDomainzMax-AgeÚSecureÚHttpOnlyÚVersionÚSameSite)	r[   ÚpathÚcommentÚdomainúmax-ageÚsecureÚhttponlyÚversionÚsamesiterg   rh   c                 ó|   — d x| _         x| _        | _        | j        D ]}t                               | |d¦  «         Œd S )Nr   )Ú_keyÚ_valueÚ_coded_valueÚ	_reservedÚdictÚ__setitem__)ÚselfÚkeys     r   Ú__init__zMorsel.__init__  sP   € à6:Ð:ˆŒ	Ð:�D”K $Ô"3ð ”>ð 	,ð 	,ˆCÝ×Ò˜T 3¨Ñ+Ô+Ð+Ð+ð	,ð 	,r   c                 ó   — | j         S r   )rl   ©rr   s    r   rs   z
Morsel.key   s
   € àŒyÐr   c                 ó   — | j         S r   )rm   rv   s    r   ÚvaluezMorsel.value$  s
   € àŒ{Ðr   c                 ó   — | j         S r   )rn   rv   s    r   Úcoded_valuezMorsel.coded_value(  s   € àÔ Ð r   c                 óæ   — |                      ¦   «         }|| j        vrt          d|›�¦  «        ‚t          ||¦  «        rt          d|›d|›�¦  «        ‚t                               | ||¦  «         d S ©NúInvalid attribute ú.Control characters are not allowed in cookies r   )Úlowerro   r   r!   rp   rq   )rr   ÚKÚVs      r   rq   zMorsel.__setitem__,  s‚   € Ø�GŠG‰IŒIˆØ�D”NÐ"Ð"Ý�+¸¸Ð;Ñ<Ô<Ð<Ý! ! QÑ'Ô'ð 	\ÝÐZÈqÐZÐZÐUVÐZÐZÑ[Ô[Ð[Ý×Ò˜˜q !Ñ$Ô$Ð$Ð$Ð$r   Nc                 óâ   — |                      ¦   «         }|| j        vrt          d|›�¦  «        ‚t          ||¦  «        rt          d|›d|›�¦  «        ‚t                               | ||¦  «        S r|   )r   ro   r   r!   rp   Ú
setdefault)rr   rs   r    s      r   rƒ   zMorsel.setdefault4  sz   € Ø�iŠi‰kŒkˆØ�d”nÐ$Ð$Ý�+¸¸Ð=Ñ>Ô>Ð>Ý! # sÑ+Ô+ð 	cÝ�+ÐWZÐWZÐWZÐ\_Ð\_ÐaÑbÔbÐbÝ�Š˜t S¨#Ñ.Ô.Ð.r   c                 óÐ   — t          |t          ¦  «        st          S t                               | |¦  «        o/| j        |j        k    o| j        |j        k    o| j        |j        k    S r   )Ú
isinstancerZ   ÚNotImplementedrp   Ú__eq__rm   rl   rn   ©rr   Úmorsels     r   r‡   zMorsel.__eq__<  sg   € Ý˜&¥&Ñ)Ô)ð 	"Ý!Ð!Ý—’˜D &Ñ)Ô)ð 9Ø”˜vœ}Ò,ð9à”	˜Vœ[Ò(ð9ð Ô! VÔ%8Ò8ð	:r   c                 ó–   — t          ¦   «         }t                               || ¦  «         |j                             | j        ¦  «         |S r   )rZ   rp   ÚupdateÚ__dict__rˆ   s     r   ÚcopyzMorsel.copyF  s<   € Ý‘”ˆÝ�Š�F˜DÑ!Ô!Ð!ØŒ×Ò˜tœ}Ñ-Ô-Ð-Øˆr   c                 óö   — i }t          |¦  «                             ¦   «         D ]9\  }}|                     ¦   «         }|| j        vrt	          d|›�¦  «        ‚|||<   Œ:t                                | |¦  «         d S )Nr}   )rp   Úitemsr   ro   r   r‹   )rr   ÚvaluesÚdatars   r    s        r   r‹   zMorsel.updateL  s€   € ØˆÝ˜V™œ×*Ò*Ñ,Ô,ð 	ð 	‰HˆC�Ø—)’)‘+”+ˆCØ˜$œ.Ð(Ð(Ý!�k¸C¸CÐ"AÑBÔBÐBØˆD�‰IˆIÝ�Š�D˜$ÑÔÐÐÐr   c                 ó8   — |                      ¦   «         | j        v S r   )r   ro   )rr   r€   s     r   ÚisReservedKeyzMorsel.isReservedKeyU  s   € Ø�wŠw‰yŒy˜DœNÐ*Ð*r   c                 ó  — |                      ¦   «         | j        v rt          d|›�¦  «        ‚t          |¦  «        st          d|›�¦  «        ‚t	          |||¦  «        rt          d|›d|›d|›�¦  «        ‚|| _        || _        || _        d S )NzAttempt to set a reserved key zIllegal key r~   r   )r   ro   r   r#   r!   rl   rm   rn   )rr   rs   r    Ú	coded_vals       r   Úsetz
Morsel.setX  s´   € Ø�9Š9‰;Œ;˜$œ.Ð(Ð(Ý�+ÀCÀCÐIÑJÔJÐJÝ˜SÑ!Ô!ð 	9Ý�+°#°#Ð7Ñ8Ô8Ð8Ý! # s¨IÑ6Ô6ð 	cÝ�+ØLOÈCÈCÐQTÐQTÐQTÐV_ÐV_Ðañcô cð cð ˆŒ	ØˆŒØ%ˆÔÐÐr   c                 ó,   — | j         | j        | j        dœS )N)rs   rx   rz   ©rl   rm   rn   rv   s    r   Ú__getstate__zMorsel.__getstate__f  s!   € à”9Ø”[ØÔ,ð
ð 
ð 	
r   c                 óT   — |d         | _         |d         | _        |d         | _        d S )Nrs   rx   rz   r˜   )rr   Ústates     r   Ú__setstate__zMorsel.__setstate__m  s+   € Ø˜%”LˆŒ	Ø˜G”nˆŒØ! -Ô0ˆÔÐÐr   úSet-Cookie:c                 ó6   — |›d|                       |¦  «        ›�S )Nr   )ÚOutputString)rr   ÚattrsÚheaders      r   ÚoutputzMorsel.outputr  s"   € Ø ˜&˜& $×"3Ò"3°EÑ":Ô":Ð":Ð;Ð;r   c                 óL   — d| j         j        ›d|                      ¦   «         ›d�S )Nú<ú: ú>)Ú	__class__r	   rŸ   rv   s    r   Ú__repr__zMorsel.__repr__w  s,   € € Ø!œ^Ô4Ð4Ð4°d×6GÒ6GÑ6IÔ6IÐ6IÐ6IÐJÐJr   c                 óZ   — d|                       |¦  «                             dd¦  «        z  S )Nz—
        <script type="text/javascript">
        <!-- begin hiding
        document.cookie = "%s";
        // end hiding -->
        </script>
        r   r   )rŸ   Úreplace)rr   r    s     r   Ú	js_outputzMorsel.js_outputz  s4   € ðð × Ò  Ñ'Ô'×/Ò/°°UÑ;Ô;ñ=ð 	=r   c                 óú  — g }|j         } || j        ›d| j        ›�¦  «         |€| j        }t	          |                      ¦   «         ¦  «        }|D �]\  }}|dk    rŒ||vrŒ|dk    r>t          |t          ¦  «        r) || j        |         ›dt          |¦  «        ›�¦  «         ŒV|dk    r1t          |t          ¦  «        r |d| j        |         |fz  ¦  «         Œ�|dk    r>t          |t          ¦  «        r) || j        |         ›dt          |¦  «        ›�¦  «         ŒÑ|| j        v r'|r# |t          | j        |         ¦  «        ¦  «         �Œ || j        |         ›d|›�¦  «         �Œt          |¦  «        S )Nú=r   r[   rf   z%s=%drd   )Úappendrs   rz   ro   Úsortedr�   r…   r-   rX   r   r'   Ú_flagsÚ_semispacejoin)rr   r    Úresultr®   r�   rs   rx   s          r   rŸ   zMorsel.OutputString„  s»  € ð ˆØ”ˆð 	ˆ˜$œ(˜(˜( DÔ$4Ð$4Ð5Ñ6Ô6Ð6ð ˆ=Ø”NˆEÝ�t—z’z‘|”|Ñ$Ô$ˆØð 	?ñ 	?‰JˆC�Ø˜Š{ˆ{ØØ˜%ÐÐØØ�iÒÐ¥J¨uµcÑ$:Ô$:ÐØ� $¤.°Ô"5Ð"5Ð"5µxÀ±´°ÐGÑHÔHÐHÐHØ˜	Ò!Ð!¥j°½Ñ&<Ô&<Ð!Ø��w $¤.°Ô"5°uÐ!=Ñ=Ñ>Ô>Ð>Ð>Ø˜	Ò!Ð!¥j°½Ñ&<Ô&<Ð!Ø� $¤.°Ô"5Ð"5Ð"5µv¸e±}´}°}ÐEÑFÔFÐFÐFØ˜œÐ#Ð#Øð 5Ø�F�3˜tœ~¨cÔ2Ñ3Ô3Ñ4Ô4Ð4ùà� $¤.°Ô"5Ð"5Ð"5°u°uÐ=Ñ>Ô>Ð>Ñ>õ ˜fÑ%Ô%Ð%r   r   )Nr�   )r	   r
   r   Ú__doc__ro   r°   rt   Úpropertyrs   rx   rz   rq   rƒ   r‡   ÚobjectÚ__ne__r�   r‹   r“   r–   r™   rœ   r¢   Ú__str__r¨   r«   rŸ   ÚclassmethodÚtypesÚGenericAliasÚ__class_getitem__r   r   r   rZ   rZ   õ   s¯  € € € € € ðð ð* ØØØØØØØØð
ð 
€Ið ˜
Ð#€Fð,ð ,ð ,ð ðð ñ „Xðð ðð ñ „Xðð ð!ð !ñ „Xð!ð%ð %ð %ð/ð /ð /ð /ð:ð :ð :ð Œ]€Fðð ð ð ð  ð  ð+ð +ð +ð&ð &ð &ð
ð 
ð 
ð1ð 1ð 1ð
<ð <ð <ð <ð €GðKð Kð Kð=ð =ð =ð =ð&ð &ð &ð &ðB $˜ EÔ$6Ñ7Ô7ÐÐÐr   rZ   z,\w\d!#%&'~_`><@,:/\$\*\+\-\.\^\|\)\(\?\}\{\=z\[\]zŒ
    \s*                            # Optional whitespace at start of cookie
    (?P<key>                       # Start of group 'key'
    [a	  ]+?   # Any word of at least one letter
    )                              # End of group 'key'
    (                              # Optional group: there may not be a value.
    \s*=\s*                          # Equal Sign
    (?P<val>                         # Start of group 'val'
    "(?:[^\\"]|\\.)*"                  # Any doublequoted string
    |                                  # or
    \w{3},\s[\w\d\s-]{9,11}\s[\d:]{8}\sGMT  # Special case for "expires" attr
    |                                  # or
    [a-  ]*      # Any word or empty string
    )                                # End of group 'val'
    )?                             # End of optional value group
    \s*                            # Any number of spaces.
    (\s+|;|$)                      # Ending either at space, semicolon, or EOS.
    c                   ó\   — e Zd ZdZd„ Zd„ Zdd„Zd„ Zd„ Zdd
„Z	e	Z
d„ Zdd„Zd„ Zefd„ZdS )r   z'A container class for a set of Morsels.c                 ó
   — ||fS )a
  real_value, coded_value = value_decode(STRING)
        Called prior to setting a cookie's value from the network
        representation.  The VALUE is the value read from HTTP
        header.
        Override this function to modify the behavior of cookies.
        r   ©rr   r    s     r   Úvalue_decodezBaseCookie.value_decodeÍ  s   € ð �Cˆxˆr   c                 ó(   — t          |¦  «        }||fS )zýreal_value, coded_value = value_encode(VALUE)
        Called prior to setting a cookie's value from the dictionary
        representation.  The VALUE is the value being assigned.
        Override this function to modify the behavior of cookies.
        r&   ©rr   r    Ústrvals      r   Úvalue_encodezBaseCookie.value_encodeÖ  s   € õ �S‘”ˆØ�vˆ~Ðr   Nc                 ó8   — |r|                       |¦  «         d S d S r   )Úload)rr   Úinputs     r   rt   zBaseCookie.__init__ß  s,   € Øð 	Ø�IŠI�eÑÔÐÐÐð	ð 	r   c                 ó°   — |                       |t          ¦   «         ¦  «        }|                     |||¦  «         t                               | ||¦  «         dS )z+Private method for setting a cookie's valueN)ÚgetrZ   r–   rp   rq   )rr   rs   Ú
real_valuerz   ÚMs        r   Ú__setzBaseCookie.__setã  sM   € à�HŠH�S�&™(œ(Ñ#Ô#ˆØ	�Šˆc�:˜{Ñ+Ô+Ð+Ý×Ò˜˜s AÑ&Ô&Ð&Ð&Ð&r   c                 óÊ   — t          |t          ¦  «        rt                               | ||¦  «         dS |                      |¦  «        \  }}|                      |||¦  «         dS )zDictionary style assignment.N)r…   rZ   rp   rq   rÃ   Ú_BaseCookie__set)rr   rs   rx   ÚrvalÚcvals        r   rq   zBaseCookie.__setitem__é  se   € å�e�VÑ$Ô$ð 	(å×Ò˜T 3¨Ñ.Ô.Ð.Ð.Ð.à×*Ò*¨5Ñ1Ô1‰JˆD�$Ø�JŠJ�s˜D $Ñ'Ô'Ð'Ð'Ð'r   r�   ú
c                 ó  — g }t          |                      ¦   «         ¦  «        }|D ]N\  }}|                     ||¦  «        }t          |¦  «        rt	          d¦  «        ‚|                     |¦  «         ŒO|                     |¦  «        S )z"Return a string suitable for HTTP.z-Control characters are not allowed in cookies)r¯   r�   r¢   r!   r   r®   Újoin)	rr   r    r¡   Úsepr²   r�   rs   rx   Úvalue_outputs	            r   r¢   zBaseCookie.outputò  s‰   € àˆÝ�t—z’z‘|”|Ñ$Ô$ˆØð 	(ð 	(‰JˆC�Ø Ÿ<š<¨¨vÑ6Ô6ˆLÝ% lÑ3Ô3ð SÝ!Ð"QÑRÔRÐRØ�MŠM˜,Ñ'Ô'Ð'Ð'Ø�xŠx˜ÑÔÐr   c                 óð   — g }t          |                      ¦   «         ¦  «        }|D ]1\  }}|                     |›dt          |j        ¦  «        ›�¦  «         Œ2d| j        j        ›dt          |¦  «        ›d�S )Nr­   r¤   r¥   r¦   )r¯   r�   r®   Úreprrx   r§   r	   Ú
_spacejoin)rr   Úlr�   rs   rx   s        r   r¨   zBaseCookie.__repr__ÿ  s   € ØˆÝ�t—z’z‘|”|Ñ$Ô$ˆØð 	9ð 	9‰JˆC�Ø�HŠH   ¥T¨%¬+Ñ%6Ô%6Ð%6Ð7Ñ8Ô8Ð8Ð8ð	9à!œ^Ô4Ð4Ð4µjÀ±m´m°m°mÐDÐDr   c                 óÆ   — g }t          |                      ¦   «         ¦  «        }|D ]-\  }}|                     |                     |¦  «        ¦  «         Œ.t	          |¦  «        S )z(Return a string suitable for JavaScript.)r¯   r�   r®   r«   Ú	_nulljoin)rr   r    r²   r�   rs   rx   s         r   r«   zBaseCookie.js_output  s^   € àˆÝ�t—z’z‘|”|Ñ$Ô$ˆØð 	2ð 	2‰JˆC�Ø�MŠM˜%Ÿ/š/¨%Ñ0Ô0Ñ1Ô1Ð1Ð1Ý˜Ñ Ô Ð r   c                 óš   — t          |t          ¦  «        r|                      |¦  «         n|                     ¦   «         D ]
\  }}|| |<   ŒdS )zÝLoad cookies from a string (presumably HTTP_COOKIE) or
        from a dictionary.  Loading cookies from a dictionary 'd'
        is equivalent to calling:
            map(Cookie.__setitem__, d.keys(), d.values())
        N)r…   r   Ú_BaseCookie__parse_stringr�   )rr   Úrawdatars   rx   s       r   rÅ   zBaseCookie.load  sZ   € õ �g�sÑ#Ô#ð 	"Ø×Ò Ñ(Ô(Ð(Ð(ð &Ÿmšm™oœoð "ð "‘
��UØ!��S‘	�	Øˆr   c                 óŽ  — d}t          |¦  «        }g }d}d}d}d|cxk    r|k     �rVn �nR|                     ||¦  «        }	|	s�n8|	                     d¦  «        |	                     d¦  «        }}
|	                     d¦  «        }|
d         dk    r$|sŒz|                     ||
dd …         |f¦  «         n¹|
                     ¦   «         t          j        v rg|sd S |€;|
                     ¦   «         t          j        v r|                     ||
df¦  «         nZd S |                     ||
t          |¦  «        f¦  «         n2|�.|                     ||
|  
                    |¦  «        f¦  «         d}nd S d|cxk    r|k     �°Pn d }|D ]B\  }}
}||k    r
|€J ‚|||
<   Œ||k    sJ ‚|\  }}|                      |
||¦  «         | |
         }ŒCd S )	Nr   Fr)   r+   rs   r    ú$T)r2   ÚmatchÚgroupÚendr®   r   rZ   ro   r°   r4   r¿   rÍ   )rr   r   ÚpattÚir   Úparsed_itemsÚmorsel_seenÚTYPE_ATTRIBUTEÚTYPE_KEYVALUErà   rs   rx   rÊ   ÚtprÎ   rÏ   s                   r   Ú__parse_stringzBaseCookie.__parse_string  s-  € ØˆÝ�‰HŒHˆØˆØˆàˆØˆð
 �1ˆjˆjŠjˆj�qŠj‰jˆjˆj‰jà—J’J˜s AÑ&Ô&ˆEØð áàŸš UÑ+Ô+¨U¯[ª[¸Ñ-?Ô-?�ˆCØ—	’	˜!‘”ˆAà�1Œv˜Š}ˆ}Ø"ð ð Ø×#Ò# ^°S¸¸¸´W¸eÐ$DÑEÔEÐEÐEØ—’‘”¥Ô 0Ð0Ð0Ø"ð à�FØ�=Ø—y’y‘{”{¥f¤mÐ3Ð3Ø$×+Ò+¨^¸SÀ$Ð,GÑHÔHÐHÐHð ˜à ×'Ò'¨¸½hÀu¹o¼oÐ(NÑOÔOÐOÐOØÐ"Ø×#Ò# ]°C¸×9JÒ9JÈ5Ñ9QÔ9QÐ$RÑSÔSÐSØ"��ð �ðE �1ˆjˆjŠjˆj�qŠj‰jˆjˆjðJ ˆØ*ð 	ð 	‰NˆB��UØ�^Ò#Ð#Ø�}�}�}Ø��#‘�à˜]Ò*Ð*Ð*Ð*Ø"‘
��dØ—
’
˜3  dÑ+Ô+Ð+Ø˜”I��ð	ð 	r   r   )Nr�   rÐ   )r	   r
   r   r³   r¿   rÃ   rt   rÍ   rq   r¢   r·   r¨   r«   rÅ   Ú_CookiePatternrÜ   r   r   r   r   r   Ê  sÓ   € € € € € Ø1Ð1ðð ð ðð ð ðð ð ð ð'ð 'ð 'ð(ð (ð (ð	 ð 	 ð 	 ð 	 ð €GðEð Eð Eð!ð !ð !ð !ðð ð ð (6ð :ð :ð :ð :ð :ð :r   r   c                   ó   — e Zd ZdZd„ Zd„ ZdS )r   zþ
    SimpleCookie supports strings as cookie values.  When setting
    the value using the dictionary assignment notation, SimpleCookie
    calls the builtin str() to convert the value to a string.  Values
    received from HTTP are kept as strings.
    c                 ó$   — t          |¦  «        |fS r   )r4   r¾   s     r   r¿   zSimpleCookie.value_decode`  s   € Ý˜‰}Œ}˜cÐ!Ð!r   c                 óB   — t          |¦  «        }|t          |¦  «        fS r   )r   r'   rÁ   s      r   rÃ   zSimpleCookie.value_encodec  s   € Ý�S‘”ˆØ•v˜f‘~”~Ð%Ð%r   N)r	   r
   r   r³   r¿   rÃ   r   r   r   r   r   Y  s<   € € € € € ðð ð"ð "ð "ð&ð &ð &ð &ð &r   r   ),r³   ÚreÚstringr¹   Ú__all__rÒ   rÚ   r±   r×   Ú	Exceptionr   Úascii_lettersÚdigitsÚ_LegalCharsÚ_UnescapedCharsr–   ÚrangeÚmapÚordr%   r‹   ÚcompileÚescapeÚ	fullmatchr#   r   r!   r'   Úsubr3   r/   r4   Ú_weekdaynameÚ
_monthnamerX   rp   rZ   Ú_LegalKeyCharsÚ_LegalValueCharsÚASCIIÚVERBOSErë   r   r   r   r   r   ú<module>r     së  ððNXð Xðz 
€	€	€	Ø €€€Ø €€€à
7Ð
7Ð
7€àŒG€	Ø”€ØŒX€
ð
	ð 	ð 	ð 	ð 	�)ñ 	ô 	ð 	ð" Ô" V¤]Ñ2Ð5GÑG€Ø Ñ/€ðJð JØ˜˜E˜E #™JœJ™œ¨#¨#¨c¨c°#°Ñ.GÔ.GÑ*HÔ*HÑHðJñ Jô J€à × Ò Ø€Cˆ�H„HˆeØ€Cˆ�I„Iˆvðñ ô ð ð
 �”
˜7 Y R¤Y¨{Ñ%;Ô%;Ñ;Ñ<Ô<ÔF€Ø"˜œ
Ð#5Ñ6Ô6Ð ðBð Bð Bð
6ð 
6ð 
6ð ˆrŒzÐ8Ñ9Ô9Ô=€ðð ð ð/ð /ð /ð6 AÐ@Ð@€ð8ð 8ð 8€
ð  <¸:ð Fð Fð Fð Fðp8ð p8ð p8ð p8ð p8ˆTñ p8ô p8ð p8ðx B€Ø! GÑ+Ð Ø�”ð 	ð ñð		ñ	ð ñðñð" 
Œ�B”JÑ	ñ# ô  €ð.Lð Lð Lð Lð L�ñ Lô Lð Lð^&ð &ð &ð &ð &�:ñ &ô &ð &ð &ð &r   