§
    n‡ºf2  ã                   ó   — d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
 d dlmZmZ d dlmZ dZ ej        d¦  «        Z ej        e¦  «        Z G d„ d	¦  «        Z G d
„ de j        ¦  «        Zd„ Zd„ Zd„ Zd„ Z G d„ d¦  «        ZdS )é    N)ÚTOKEN_RE)ÚConfigurationProblemÚInvalidHeaderÚInvalidHeaderName)ÚSERVER_SOFTWAREÚSERVER)Úutiliÿÿÿ?z[ \t\x21-\x7e\x80-\xff]*c                   ó   — e Zd Zdd„Zd„ ZdS )ÚFileWrapperé    c                 ó^   — || _         || _        t          |d¦  «        r|j        | _        d S d S )NÚclose)ÚfilelikeÚblksizeÚhasattrr   )Úselfr   r   s      úQ/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/gunicorn/http/wsgi.pyÚ__init__zFileWrapper.__init__   s9   € Ø ˆŒØˆŒÝ�8˜WÑ%Ô%ð 	(Ø!œˆDŒJˆJˆJð	(ð 	(ó    c                 óV   — | j                              | j        ¦  «        }|r|S t          ‚©N)r   Úreadr   Ú
IndexError)r   ÚkeyÚdatas      r   Ú__getitem__zFileWrapper.__getitem__#   s,   € ØŒ}×!Ò! $¤,Ñ/Ô/ˆØð 	ØˆKÝÐr   N)r   )Ú__name__Ú
__module__Ú__qualname__r   r   © r   r   r   r      s7   € € € € € ð(ð (ð (ð (ðð ð ð ð r   r   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚWSGIErrorsWrapperc                 ó$  — t          j        d¦  «        }|j        }g | _        |j        dk    r.| j                             t          j        ¦  «         |dd …         }|D ]1}t          |d¦  «        r| j                             |j	        ¦  «         Œ2d S )Nzgunicorn.errorú-é   Ústream)
ÚloggingÚ	getLoggerÚhandlersÚstreamsÚerrorlogÚappendÚsysÚstderrr   r&   )r   Úcfgr+   r)   Úhs        r   r   zWSGIErrorsWrapper.__init__,   sš   € õ Ô$Ð%5Ñ6Ô6ˆØÔ$ˆØˆŒàŒ<˜3ÒÐØŒL×Ò¥¤
Ñ+Ô+Ð+Ø   ”|ˆHàð 	.ð 	.ˆAÝ�q˜(Ñ#Ô#ð .Ø”×#Ò# A¤HÑ-Ô-Ð-øð	.ð 	.r   c                 óà   — | j         D ]e}	 |                     |¦  «         n8# t          $ r+ |                     |                     d¦  «        ¦  «         Y nw xY w|                     ¦   «          Œfd S )NzUTF-8)r*   ÚwriteÚUnicodeErrorÚencodeÚflush)r   r   r&   s      r   r2   zWSGIErrorsWrapper.write<   s…   € Ø”lð 	ð 	ˆFð3Ø—’˜TÑ"Ô"Ð"Ð"øÝð 3ð 3ð 3Ø—’˜TŸ[š[¨Ñ1Ô1Ñ2Ô2Ð2Ð2Ð2ð3øøøà�LŠL‰NŒNˆNˆNð	ð 	s   ‹!¡2AÁAN)r   r   r   r   r2   r    r   r   r"   r"   *   s2   € € € € € ð.ð .ð .ð ð ð ð ð r   r"   c           	      óX   — t          | ¦  «        dd| j        dk    dt          dt          dœS )N©r%   r   Fr%   T)zwsgi.errorszwsgi.versionzwsgi.multithreadzwsgi.multiprocesszwsgi.run_oncezwsgi.file_wrapperzwsgi.input_terminatedr   )r"   Úworkersr   r   )r/   s    r   Úbase_environr9   E   s7   € å(¨Ñ-Ô-ØØ!Ø!œk¨AšoØÝ(Ø!%Ý*ð	ð 	ð 	r   c                 óÎ   — t          |¦  «        }|                     | j        || j        | j        | j        dd                     d„ | j        D ¦   «         ¦  «        z  dœ¦  «         |S )NzHTTP/%sú.c                 ó,   — g | ]}t          |¦  «        ‘ŒS r    )Ústr)Ú.0Úvs     r   ú
<listcomp>z#default_environ.<locals>.<listcomp>Z   s   € Ð0MÐ0MÐ0M¸Aµ°Q±´Ð0MÐ0MÐ0Mr   )z
wsgi.inputzgunicorn.socketÚREQUEST_METHODÚQUERY_STRINGÚRAW_URIÚSERVER_PROTOCOL)r9   ÚupdateÚbodyÚmethodÚqueryÚuriÚjoinÚversion)ÚreqÚsockr/   Úenvs       r   Údefault_environrO   R   sr   € Ý
�sÑ
Ô
€CØ‡J‚JØ”hØØœ*Øœ	Ø”7Ø$ s§x¢xÐ0MÐ0MÀÄÐ0MÑ0MÔ0MÑ'NÔ'NÑNðð ñ ô ð ð €Jr   c                 ó˜   — | j         }|si S |d         |d         t          |d         ¦  «        |d         t          |d         ¦  «        dœS )NÚproxy_protocolÚclient_addrÚclient_portÚ
proxy_addrÚ
proxy_port)ÚPROXY_PROTOCOLÚREMOTE_ADDRÚREMOTE_PORTÚ
PROXY_ADDRÚ
PROXY_PORT)Úproxy_protocol_infor=   )rL   Úinfos     r   Úproxy_environr]   _   sa   € ØÔ"€Dàð Øˆ	ð Ð/Ô0Ø˜MÔ*Ý˜4 Ô.Ñ/Ô/Ø˜<Ô(Ý˜$˜|Ô,Ñ-Ô-ðð ð r   c                 ó®  — t          | ||¦  «        }t          | ||¦  «        }d }t          j                             dd¦  «        }| j        D ]’\  }	}
|	dk    r.|
                     ¦   «         dk    r|                     d¦  «         n*|	dk    r|
}n!|	dk    r|
}n|	dk    r|
|d<   ŒW|	d	k    r|
|d
<   Œcd|	                     dd¦  «        z   }||v r||         ›d|
›�}
|
||<   Œ“| j	        |d<   t          |t          ¦  «        r||d<   nPt          |t          ¦  «        r|                     ¦   «         |d<   n#|d         |d<   t          |d         ¦  «        |d<   t          |t          ¦  «        r¿|                     d¦  «        }t          |¦  «        dk    r—|r€|                     d¦  «        }t          |¦  «        dk    rW| j	        dk    r|                     d¦  «         nL| j	        dk    r|                     d¦  «         n+|                     d¦  «         n|                     d¦  «         |d         |d<   t          |d         ¦  «        |d<   | j        }|rA|                     |¦  «        st'          d|›d|›�¦  «        ‚|t          |¦  «        d …         }t)          j        |¦  «        |d<   ||d<   |                     t/          | ¦  «        ¦  «         ||fS )NÚSCRIPT_NAMEÚ ÚEXPECTz100-continues   HTTP/1.1 100 Continue

ÚHOSTzCONTENT-TYPEÚCONTENT_TYPEzCONTENT-LENGTHÚCONTENT_LENGTHÚHTTP_r$   Ú_ú,zwsgi.url_schemerW   r   r%   rX   ú:ÚhttpéP   Úhttpsi»  ÚSERVER_NAMEÚSERVER_PORTzRequest path z! does not start with SCRIPT_NAME Ú	PATH_INFO)ÚResponserO   ÚosÚenvironÚgetÚheadersÚlowerÚsendÚreplaceÚschemeÚ
isinstancer=   ÚbytesÚdecodeÚsplitÚlenr,   ÚpathÚ
startswithr   r	   Úunquote_to_wsgi_strrE   r]   )rL   rM   ÚclientÚserverr/   Úresprq   ÚhostÚscript_nameÚhdr_nameÚ	hdr_valuer   Ú	path_infos                r   Úcreaterˆ   n   s7  € Ý�C˜˜sÑ#Ô#€Dõ ˜c 4¨Ñ-Ô-€Gð €DÝ”*—.’. °Ñ3Ô3€Kð  #œ{ð !ð !Ñˆ�)Ø�xÒÐà�ŠÑ Ô  NÒ2Ð2Ø—	’	Ð:Ñ;Ô;Ð;øØ˜ÒÐØˆDˆDØ˜Ò&Ð&Ø#ˆKˆKØ˜Ò'Ð'Ø&/ˆG�NÑ#ØØÐ)Ò)Ð)Ø(1ˆGÐ$Ñ%Øð ˜×(Ò(¨¨cÑ2Ô2Ñ2ˆØ�'ˆ>ˆ>Ø#*¨3¤< < <°°Ð;ˆIØ ˆ�‰ˆð "%¤€GÐÑõ �&�#ÑÔð 0Ø!'ˆ�ÑÐÝ	�F�EÑ	"Ô	"ð 0Ø!'§¢¡¤ˆ�ÑÐà!'¨¤ˆ�ÑÝ!$ V¨A¤Y¡¤ˆ�Ñõ �&�#ÑÔð "Ø—’˜cÑ"Ô"ˆÝˆv‰;Œ;˜!ÒÐàð "ØŸš C™œ�Ý�v‘;”; !Ò#Ð#Ø”z VÒ+Ð+ØŸš bÑ)Ô)Ð)Ð)Øœ wÒ.Ð.ØŸš cÑ*Ô*Ð*Ð*àŸš bÑ)Ô)Ð)øð —’˜bÑ!Ô!Ð!Ø# AœY€GˆMÑÝ  ¨¤™^œ^€GˆMÑð ”€IØð 1Ø×#Ò# KÑ0Ô0ð 	*Ý&Ð&à��˜K˜Kð)ñ*ô *ð *ð �c +Ñ.Ô.Ð/Ð/Ô0ˆ	ÝÔ3°IÑ>Ô>€GˆKÑØ(€GˆMÑð ‡N‚N•= Ñ%Ô%Ñ&Ô&Ð&Ø�ˆ=Ðr   c                   ó^   — e Zd Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ ZdS )ro   c                 ó¸   — || _         || _        t          | _        d | _        d| _        d| _        g | _        d| _        d | _	        d| _
        d| _        || _        d S )NFr   )rL   rM   r   rK   ÚstatusÚchunkedÚ
must_closers   Úheaders_sentÚresponse_lengthÚsentÚupgrader/   )r   rL   rM   r/   s       r   r   zResponse.__init__Ê   s\   € ØˆŒØˆŒ	ÝˆŒØˆŒØˆŒØˆŒØˆŒØ!ˆÔØ#ˆÔØˆŒ	ØˆŒØˆŒˆˆr   c                 ó   — d| _         d S )NT)r�   ©r   s    r   Úforce_closezResponse.force_closeØ   s   € ØˆŒˆˆr   c                 óº   — | j         s| j                             ¦   «         rdS | j        €| j        rdS | j        j        dk    rdS | j        dk     s	| j        dv rdS dS )NTFÚHEADéÈ   ©éÌ   i0  )r�   rL   Úshould_closer�   rŒ   rG   Ústatus_coder“   s    r   rš   zResponse.should_closeÛ   st   € ØŒ?ð 	˜dœh×3Ò3Ñ5Ô5ð 	Ø�4ØÔÐ+¨t¬|Ð+Ø�5ØŒ8Œ?˜fÒ$Ð$Ø�5ØÔ˜cÒ!Ð! TÔ%5¸Ð%CÐ%CØ�5Øˆtr   Nc                 óÀ  — |rA	 | j         r/| j        r(t          j        |d         |d         |d         ¦  «         d }n# d }w xY w| j         �t	          d¦  «        ‚|| _         	 t          | j                              ¦   «         d         ¦  «        | _        n# t          $ r
 d | _        Y nw xY w|  	                    |¦  «         |  
                    ¦   «         | _        | j        S )Nr   r%   é   zResponse headers already set!)r‹   rŽ   r	   ÚreraiseÚAssertionErrorÚintr{   r›   Ú
ValueErrorÚprocess_headersÚ
is_chunkedrŒ   r2   )r   r‹   rs   Úexc_infos       r   Ústart_responsezResponse.start_responseæ   sû   € Øð 	Bð Ø”;ð H 4Ô#4ð HÝ”L ¨!¤¨h°q¬k¸8ÀA¼;ÑGÔGÐGà��ø˜4�����ØŒ[Ð$Ý Ð!@ÑAÔAÐAàˆŒð
	$Ý" 4¤;×#4Ò#4Ñ#6Ô#6°qÔ#9Ñ:Ô:ˆDÔÐøÝð 	$ð 	$ð 	$Ø#ˆDÔÐÐð	$øøøð 	×Ò˜WÑ%Ô%Ð%Ø—’Ñ(Ô(ˆŒØŒzÐs   „6= ½AÁ"1B ÂB(Â'B(c                 ó  — |D �]|\  }}t          |t          ¦  «        st          d|z  ¦  «        ‚t          j        |¦  «        st          d|z  ¦  «        ‚t          |t          ¦  «        st          d|z  ¦  «        ‚t                               |¦  «        st          d|z  ¦  «        ‚|                     d¦  «        }| 	                    ¦   «         }|dk    rt          |¦  «        | _        nvt          j        |¦  «        rb|dk    r | 	                    ¦   «         dk    rd| _        n:|dk    r4| 	                    ¦   «         dk    r| j                             ||f¦  «         �Œ`| j                             ||f¦  «         �Œ~d S )	Nz%r is not a stringz%rz 	zcontent-lengthÚ
connectionr‘   TÚ	websocket)rx   r=   Ú	TypeErrorr   Ú	fullmatchr   ÚHEADER_VALUE_REr   Ústriprt   r    r�   r	   Ú
is_hoppishr‘   rs   r,   )r   rs   ÚnameÚvalueÚlnames        r   r¢   zResponse.process_headersþ   s‡  € Ø"ð 	/ñ 	/‰KˆD�%Ý˜d¥CÑ(Ô(ð =ÝÐ 4°tÑ ;Ñ<Ô<Ð<åÔ% dÑ+Ô+ð 5Ý'¨¨t©Ñ4Ô4Ð4å˜e¥SÑ)Ô)ð >ÝÐ 4°uÑ <Ñ=Ô=Ð=å"×,Ò,¨UÑ3Ô3ð 2Ý# D¨5¡LÑ1Ô1Ð1ð —K’K Ñ&Ô&ˆEØ—J’J‘L”LˆEØÐ(Ò(Ð(Ý'*¨5¡z¤z�Ô$Ð$Ý” Ñ&Ô&ð 
Ø˜LÒ(Ð(à—{’{‘}”}¨	Ò1Ð1Ø'+˜œøØ˜iÒ'Ð'Ø—{’{‘}”}¨Ò3Ð3Øœ×+Ò+¨T°5¨MÑ:Ô:Ð:ñ ØŒL×Ò  u Ñ.Ô.Ð.Ñ.ð;	/ð 	/r   c                 óv   — | j         �dS | j        j        dk    rdS | j        j        dk    rdS | j        dv rdS dS )NFr7   r–   r˜   T)r�   rL   rK   rG   r›   r“   s    r   r£   zResponse.is_chunked  sU   € ð ÔÐ+Ø�5ØŒXÔ Ò'Ð'Ø�5ØŒXŒ_ Ò&Ð&à�5ØÔ Ð+Ð+ð �5Øˆtr   c                 ó,  — | j         rd}n|                      ¦   «         rd}nd}d| j        j        d         ›d| j        j        d         ›d| j        ›d	�d
| j        z  dt          j        ¦   «         z  d|z  g}| j        r|                     d¦  «         |S )Nr‘   r   z
keep-alivezHTTP/r   r;   r%   ú ú
zServer: %s
z
Date: %s
zConnection: %s
zTransfer-Encoding: chunked
)	r‘   rš   rL   rK   r‹   r	   Ú	http_daterŒ   r,   )r   r§   rs   s      r   Údefault_headerszResponse.default_headers/  s·   € àŒ<ð 	&Ø"ˆJˆJØ×ÒÑ Ô ð 	&Ø ˆJˆJà%ˆJøð $(¤8Ô#3°AÔ#6Ð#6Ð#6Ø#'¤8Ô#3°AÔ#6Ð#6Ð#6¸¼¸¸ðEà˜tœ|Ñ+Ø�Tœ^Ñ-Ô-Ñ-Ø  :Ñ-ð
ˆð Œ<ð 	=Ø�NŠNÐ;Ñ<Ô<Ð<Øˆr   c                 ó   — | j         rd S |                      ¦   «         }|                     d„ | j        D ¦   «         ¦  «         dd                     |¦  «        z  }t          j        | j        t          j        |d¦  «        ¦  «         d| _         d S )Nc                 ó$   — g | ]\  }}|›d |›d�‘ŒS )z: r´   r    )r>   Úkr?   s      r   r@   z)Response.send_headers.<locals>.<listcomp>G  s)   € ÐFÐFÐF±°°A q q q¨!¨!¨!Ð,ÐFÐFÐFr   z%s
r`   zlatin-1T)	rŽ   r¶   Úextendrs   rJ   r	   r2   rM   Úto_bytestring)r   ÚtosendÚ
header_strs      r   Úsend_headerszResponse.send_headersC  s‰   € ØÔð 	ØˆFØ×%Ò%Ñ'Ô'ˆØ�ŠÐFÐF¸¼ÐFÑFÔFÑGÔGÐGà §¢¨¡¤Ñ/ˆ
ÝŒ
�4”9�dÔ0°¸YÑGÔGÑHÔHÐHØ ˆÔÐÐr   c                 ó¨  — |                       ¦   «          t          |t          ¦  «        st          d|z  ¦  «        ‚t	          |¦  «        }|}| j        �?| j        | j        k    rd S t          | j        | j        z
  |¦  «        }||k     r
|d |…         }| j        r|dk    rd S | xj        |z  c_        t          j
        | j        || j        ¦  «         d S )Nz%r is not a byter   )r¾   rx   ry   r©   r|   r�   r�   ÚminrŒ   r	   r2   rM   )r   ÚargÚarglenr¼   s       r   r2   zResponse.writeM  sÞ   € Ø×ÒÑÔÐÝ˜#�uÑ%Ô%ð 	6ÝÐ.°Ñ4Ñ5Ô5Ð5Ý�S‘”ˆØˆØÔÐ+ØŒy˜DÔ0Ò0Ð0à�å˜Ô-°´	Ñ9¸6ÑBÔBˆFØ˜ŠˆØ˜'˜6˜'”l�ð Œ<ð 	˜F ašK˜KØˆFàˆ	Œ	�VÑˆ	Œ	ÝŒ
�4”9˜c 4¤<Ñ0Ô0Ð0Ð0Ð0r   c                 ó   — | j         j        duS )NF)r/   Úsendfiler“   s    r   Úcan_sendfilezResponse.can_sendfiled  s   € ØŒxÔ ¨Ð-Ð-r   c                 ó*  — | j         j        s|                      ¦   «         sdS t          j        |j        ¦  «        sdS |j                             ¦   «         }	 t          j        |dt          j	        ¦  «        }| j
        €t          j        |¦  «        j        }||z
  }n| j
        }n# t          t          j        f$ r Y dS w xY w|                      ¦   «          |                      ¦   «         r2d|z  }| j                             |                     d¦  «        ¦  «         |dk    r"| j                             |j        ||¬¦  «         |                      ¦   «         r| j                             d¦  «         t          j        ||t          j        ¦  «         dS )NFr   z%X
zutf-8)ÚoffsetÚcounts   
T)r/   Úis_sslrÅ   r	   Ú
has_filenor   Úfilenorp   ÚlseekÚSEEK_CURr�   ÚfstatÚst_sizeÚOSErrorÚioÚUnsupportedOperationr¾   r£   rM   Úsendallr4   rÄ   ÚSEEK_SET)r   ÚrespiterrË   rÇ   ÚfilesizeÚnbytesÚ
chunk_sizes          r   rÄ   zResponse.sendfileg  sˆ  € ØŒ8Œ?ð 	 $×"3Ò"3Ñ"5Ô"5ð 	Ø�5åŒ˜xÔ0Ñ1Ô1ð 	Ø�5àÔ"×)Ò)Ñ+Ô+ˆð	Ý”X˜f a­¬Ñ5Ô5ˆFØÔ#Ð+Ýœ8 FÑ+Ô+Ô3�Ø! FÑ*��àÔ-�øøÝ�Ô0Ð1ð 	ð 	ð 	Ø�5�5ð	øøøð 	×ÒÑÔÐà�?Š?ÑÔð 	:Ø! FÑ*ˆJØŒI×Ò˜j×/Ò/°Ñ8Ô8Ñ9Ô9Ð9Ø�AŠ:ˆ:ØŒI×Ò˜xÔ0¸ÀvÐÑNÔNÐNà�?Š?ÑÔð 	'ØŒI×Ò˜gÑ&Ô&Ð&å
Œ�˜¥¤Ñ-Ô-Ð-àˆts   ÁAB& Â&C Â?C c                 óh   — |                       |¦  «        s|D ]}|                      |¦  «         Œd S d S r   )rÄ   r2   )r   rÕ   Úitems      r   Ú
write_filezResponse.write_fileˆ  sN   € Ø�}Š}˜XÑ&Ô&ð 	!Ø ð !ð !�Ø—
’
˜4Ñ Ô Ð Ð ð	!ð 	!ð!ð !r   c                 ó‚   — | j         s|                      ¦   «          | j        rt          j        | j        d¦  «         d S d S )Nr   )rŽ   r¾   rŒ   r	   Úwrite_chunkrM   r“   s    r   r   zResponse.close�  sN   € ØÔ ð 	 Ø×ÒÑÔÐØŒ<ð 	-ÝÔ˜TœY¨Ñ,Ô,Ð,Ð,Ð,ð	-ð 	-r   r   )r   r   r   r   r”   rš   r¥   r¢   r£   r¶   r¾   r2   rÅ   rÄ   rÛ   r   r    r   r   ro   ro   È   sÞ   € € € € € ðð ð ðð ð ð	ð 	ð 	ðð ð ð ð0/ð /ð /ð@ð ð ð"ð ð ð(!ð !ð !ð1ð 1ð 1ð..ð .ð .ðð ð ðB!ð !ð !ð
-ð -ð -ð -ð -r   ro   )rÑ   r'   rp   Úrer-   Úgunicorn.http.messager   Úgunicorn.http.errorsr   r   r   Úgunicornr   r   r	   ÚBLKSIZEÚcompiler«   r(   r   Úlogr   Ú	RawIOBaser"   r9   rO   r]   rˆ   ro   r    r   r   ú<module>ræ      s‹  ðð
 
€	€	€	Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø 
€
€
€
à *Ð *Ð *Ð *Ð *Ð *Ø WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WØ ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø Ð Ð Ð Ð Ð ð €ð �"”*Ð8Ñ9Ô9€à€gÔ˜Ñ!Ô!€ðð ð ð ð ñ ô ð ðð ð ð ð ˜œñ ô ð ð6
ð 
ð 
ð
ð 
ð 
ðð ð ðWð Wð WðtI-ð I-ð I-ð I-ð I-ñ I-ô I-ð I-ð I-ð I-r   