§
    „ßjç  ã                  ó2  — d dl mZ d dlZd dlZd dlmZ ddlmZ ddlm	Z	 ddlm
Z
 ddlmZ dd	lmZ dd
lmZ  ej        d¦  «        Z	 	 	 	 	 	 	 	 	 d)d*d„Z ej        dej        ej        z  ¬¦  «        Z ej        d¦  «        Zd+d"„Z	 	 d,d-d'„Zdd(lmZ dS ).é    )ÚannotationsN)Údatetimeé   )Ú
_dt_as_utc)Úgenerate_etag)Ú
parse_date)Úparse_etags)Úparse_if_range_header)Úunquote_etagz&([Ww]/)?(?:"(.*?)"|(.*?))(?:\s*,\s*|$)TÚ
http_rangeú
str | NoneÚhttp_if_rangeÚhttp_if_modified_sinceÚhttp_if_none_matchÚhttp_if_matchÚetagÚdataúbytes | NoneÚlast_modifiedúdatetime | str | NoneÚignore_if_rangeÚboolÚreturnc	                óŽ  — |€|�t          |¦  «        }n|�t          d¦  «        ‚d}	t          |t          ¦  «        rt	          |¦  «        }|�#t          |                     d¬¦  «        ¦  «        }d}
|s| �t          |¦  «        }
|
�|
j        �|
j        }nt	          |¦  «        }|r
|r||k    rd}	|r�t          |¦  «        \  }}|
�/|
j
        �(t          |
j
        ¦  «                             |¦  «        }	nMt          |¦  «        }|r|                     |¦  «        }	t          |¦  «        }|r|                     |¦  «         }	|	 S )a  Convenience method for conditional requests.
    :param http_range: Range HTTP header
    :param http_if_range: If-Range HTTP header
    :param http_if_modified_since: If-Modified-Since HTTP header
    :param http_if_none_match: If-None-Match HTTP header
    :param http_if_match: If-Match HTTP header
    :param etag: the etag for the response for comparison.
    :param data: or alternatively the data of the response to automatically
                 generate an etag using :func:`generate_etag`.
    :param last_modified: an optional date of the last modification.
    :param ignore_if_range: If `False`, `If-Range` header will be taken into
                            account.
    :return: `True` if the resource was modified, otherwise `False`.

    .. versionadded:: 2.2
    Nzboth data and etag givenFr   )ÚmicrosecondT)r   Ú	TypeErrorÚ
isinstanceÚstrr   r   Úreplacer
   Údater   r   r	   ÚcontainsÚcontains_weakÚ	is_strong)r   r   r   r   r   r   r   r   r   Ú
unmodifiedÚif_rangeÚmodified_sinceÚ_Úif_none_matchÚif_matchs                  úG/var/www/html/venv/lib/python3.11/site-packages/werkzeug/sansio/http.pyÚis_resource_modifiedr+      s„  € ð6 €|˜Ð(Ý˜TÑ"Ô"ˆˆØ	Ð	ÝÐ2Ñ3Ô3Ð3à€JÝ�-¥Ñ%Ô%ð 2Ý" =Ñ1Ô1ˆð Ð Ý" =×#8Ò#8ÀQÐ#8Ñ#GÔ#GÑHÔHˆà€HØð 8˜zÐ5õ )¨Ñ7Ô7ˆàÐ ¤Ð 9Ø*2¬-ˆˆå#Ð$:Ñ;Ô;ˆàð ˜-ð ¨M¸^Ò,KÐ,KØˆ
àð :Ý˜tÑ$Ô$‰ˆˆaàÐ H¤MÐ$=Ý$ X¤]Ñ3Ô3×<Ò<¸TÑBÔBˆJˆJå'Ð(:Ñ;Ô;ˆMØð ?ð +×8Ò8¸Ñ>Ô>�
õ
 # =Ñ1Ô1ˆHØð :Ø!)×!3Ò!3°DÑ!9Ô!9Ð9�
àˆ>Ðó    zr
    ([^=;]*)
    (?:\s*=\s*
      (
        "(?:[^\\"]|\\.)*"
      |
        .*?
      )
    )?
    \s*;\s*
    )Úflagss   \\([0-3][0-7]{2}|.)Úmút.Match[bytes]Úbytesc                óž   — |                       d¦  «        }t          |¦  «        dk    r|S t          |d¦  «                             dd¦  «        S )Né   é   Úbig)ÚgroupÚlenÚintÚto_bytes)r.   Úvs     r*   Ú_cookie_unslash_replacer:   q   sC   € Ø	�Š�‰
Œ
€Aå
ˆ1�v„v�‚{€{Øˆåˆq�!‰9Œ9×Ò˜a Ñ'Ô'Ð'r,   ÚcookieÚclsú#type[ds.MultiDict[str, str]] | Noneúds.MultiDict[str, str]c                ó>  — |€t          j        dt          j        ¦  «        }| s
 |¦   «         S | › d�} g }t                               | ¦  «        D ]Ä\  }}|                     ¦   «         }|                     ¦   «         }|sŒ0t          |¦  «        dk    rj|d         |d         cxk    rdk    rQn nNt           	                    t          |dd…                              ¦   «         ¦  «                             d	¬
¦  «        }|                     ||f¦  «         ŒÅ ||¦  «        S )a)  Parse a cookie from a string.

    The same key can be provided multiple times, the values are stored
    in-order. The default :class:`MultiDict` will have the first value
    first, and all values can be retrieved with
    :meth:`MultiDict.getlist`.

    :param cookie: The cookie header as a string.
    :param cls: A dict-like class to store the parsed cookies in.
        Defaults to :class:`MultiDict`.

    .. versionchanged:: 3.0
        Passing bytes, and the ``charset`` and ``errors`` parameters, were removed.

    .. versionadded:: 2.2
    Nztype[ds.MultiDict[str, str]]ú;r   r   éÿÿÿÿú"r2   r   )Úerrors)ÚtÚcastÚdsÚ	MultiDictÚ
_cookie_reÚfindallÚstripr6   Ú_cookie_unslash_reÚsubr:   ÚencodeÚdecodeÚappend)r;   r<   ÚoutÚckÚcvs        r*   Úparse_cookierS   z   s$  € ð( €{ÝŒfÐ3µR´\ÑBÔBˆàð Øˆs‰uŒuˆàˆ\ˆ\ˆ\€FØ
€Cå×$Ò$ VÑ,Ô,ð ð ‰ˆˆBØ�XŠX‰ZŒZˆØ�XŠX‰ZŒZˆàð 	Øåˆr‰7Œ7�aŠ<ˆ<˜B˜qœE R¨¤VÐ2Ð2Ò2Ð2¨sÒ2Ð2Ð2Ð2Ð2å#×'Ò'Ý'¨¨A¨b¨D¬¯ªÑ):Ô):ñô çŠf˜IˆfÑ&Ô&ð ð 	�
Š
�B˜�8ÑÔÐÐàˆ3ˆs‰8Œ8€Or,   )Údatastructures)	NNNNNNNNT)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r.   r/   r   r0   )NN)r;   r   r<   r=   r   r>   )Ú
__future__r   ÚreÚtypingrD   r   Ú	_internalr   Úhttpr   r   r	   r
   r   ÚcompileÚ_etag_rer+   ÚASCIIÚVERBOSErH   rK   r:   rS   Ú rT   rF   © r,   r*   ú<module>r`      sŠ  ðØ "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð à "Ð "Ð "Ð "Ð "Ð "Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð àˆ2Œ:Ð?Ñ@Ô@€ð "Ø $Ø)-Ø%)Ø $ØØØ+/Ø ðLð Lð Lð Lð Lð^ ˆRŒZð
ð Œ(�R”ZÑ
ðñ ô €
ð  �R”ZÐ 7Ñ8Ô8Ð ð(ð (ð (ð (ð Ø/3ð,ð ,ð ,ð ,ð ,ð` $Ð #Ð #Ð #Ð #Ð #Ð #Ð #r,   