Ë
    ×Õ°jI  ã                   ó*  — 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	 	 dd„Z G d„ d«      Zy)é    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„ Zd„ Zy)ÚFileWrapperc                 ó\   — || _         || _        t        |d«      r|j                  | _        y y )NÚclose)ÚfilelikeÚblksizeÚhasattrr   )Úselfr   r   s      úH/var/www/mission/venv/lib/python3.12/site-packages/gunicorn/http/wsgi.pyÚ__init__zFileWrapper.__init__   s*   € Ø ˆŒØˆŒÜ�8˜WÔ%Ø!Ÿ™ˆD�Jð &ó    c                 ó`   — | j                   j                  | j                  «      }|r|S t        ‚©N)r   Úreadr   Ú
IndexError)r   ÚkeyÚdatas      r   Ú__getitem__zFileWrapper.__getitem__#   s(   € Ø�}‰}×!Ñ! $§,¡,Ó/ˆÙØˆKÜÐr   c                 ó   — | S r   © ©r   s    r   Ú__iter__zFileWrapper.__iter__)   s   € Øˆr   c                 ó`   — | j                   j                  | j                  «      }|r|S t        ‚r   )r   r   r   ÚStopIteration©r   r   s     r   Ú__next__zFileWrapper.__next__,   s(   € Ø�}‰}×!Ñ! $§,¡,Ó/ˆÙØˆKÜÐr   N)i    )Ú__name__Ú
__module__Ú__qualname__r   r   r   r#   r   r   r   r   r      s   „ ó(òòór   r   c                   ó   — e Zd Zd„ Zd„ Zy)ÚWSGIErrorsWrapperc                 ó@  — t        j                  d«      }|j                  }g | _        |j                  dk(  r.| j                  j                  t        j                  «       |dd  }|D ]4  }t        |d«      sŒ| j                  j                  |j                  «       Œ6 y )Nzgunicorn.errorú-é   Ústream)
ÚloggingÚ	getLoggerÚhandlersÚstreamsÚerrorlogÚappendÚsysÚstderrr   r,   )r   Úcfgr1   r/   Úhs        r   r   zWSGIErrorsWrapper.__init__5   sƒ   € ô ×$Ñ$Ð%5Ó6ˆØ×$Ñ$ˆØˆŒà�<‰<˜3ÒØ�L‰L×Ñ¤§
¡
Ô+Ø  �|ˆHàò 	.ˆAÜ�q˜(Õ#Ø—‘×#Ñ# A§H¡HÕ-ñ	.r   c                 óÈ   — | j                   D ]$  }	 |j                  |«       |j	                  «        Œ& y # t        $ r# |j                  |j                  d«      «       Y Œ>w xY w)NzUTF-8)r0   ÚwriteÚUnicodeErrorÚencodeÚflush)r   r   r,   s      r   r8   zWSGIErrorsWrapper.writeE   sW   € Ø—l‘lò 	ˆFð3Ø—‘˜TÔ"ð �L‰L�Nñ	øô  ò 3Ø—‘˜TŸ[™[¨Ó1Ö2ð3ús   ‘5µ)A!Á A!N)r$   r%   r&   r   r8   r   r   r   r(   r(   3   s   „ ò.ó r   r(   c           	      óT   — t        | «      dd| j                  dkD  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   )r5   s    r   Úbase_environr?   N   s1   € ä(¨Ó-ØØ!Ø!Ÿk™k¨A™oØÜ(Ø!%Ü*ñ	ð 	r   c                 ó  — t        |«      }|j                  | j                  || j                  | j                  | j
                  ddj                  | j                  D �cg c]  }t        |«      ‘Œ c}«      z  dœ«       |S c c}w )NzHTTP/%sú.)z
wsgi.inputzgunicorn.socketÚREQUEST_METHODÚQUERY_STRINGÚRAW_URIÚSERVER_PROTOCOL)	r?   ÚupdateÚbodyÚmethodÚqueryÚuriÚjoinÚversionÚstr)ÚreqÚsockr5   ÚenvÚvs        r   Údefault_environrR   [   sm   € Ü
�sÓ
€CØ‡J�JØ—h‘hØØŸ*™*ØŸ	™	Ø—7‘7Ø$ s§x¡xÀÇÁÖ0M¸A´°QµÒ0MÓ'NÑNñô ð €Jùò 1Ns   ÁBc                 ót   — | 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_inforM   )rN   Úinfos     r   Úproxy_environr`   h   sT   € Ø×"Ñ"€DáØˆ	ð Ð/Ñ0Ø˜MÑ*Ü˜4 Ñ.Ó/Ø˜<Ñ(Ü˜$˜|Ñ,Ó-ñð r   c                 ó   ‡ ‡‡— ˆ ˆˆfd„}|S )a   Create a wsgi.early_hints callback for sending 103 Early Hints.

    This allows WSGI applications to send 103 Early Hints responses
    before the final response, enabling browsers to preload resources.

    Args:
        req: The request object
        sock: The socket to write to
        resp: The Response object to check if headers have been sent

    Returns:
        A callback function that accepts a list of (name, value) header tuples
        and sends a 103 Early Hints response.

    Note:
        - Early hints are only sent for HTTP/1.1 or later clients
        - HTTP/1.0 clients will silently ignore the callback
        - Multiple calls are allowed (sending multiple 103 responses)
        - Calls after response has started are silently ignored
    c                 óô  •— ‰j                   ry‰j                  dk  ryd}| D ]¸  \  }}t        |t        «      r|j	                  d«      }t        |t        «      r|j	                  d«      }t        j                  |«      st        d|z  «      ‚t        j                  |«      st        d|z  «      ‚|j                  d«      }||› d|› d�j                  d«      z  }Œº |d	z  }t        j                  ‰|«       y)
a}  Send 103 Early Hints response.

        Args:
            headers: List of (name, value) header tuples, typically Link headers
                     Example: [('Link', '</style.css>; rel=preload; as=style')]

        Raises:
            InvalidHeaderName: If a header name is not a valid HTTP token.
            InvalidHeader: If a header value contains invalid characters.
        N)r+   r+   s   HTTP/1.1 103 Early Hints
úlatin-1ú%rú 	ú: ú
ó   
)Úheaders_sentrL   Ú
isinstanceÚbytesÚdecoder   Ú	fullmatchr   ÚHEADER_VALUE_REr   Ústripr:   r	   r8   )ÚheadersÚresponseÚnameÚvaluerN   ÚresprO   s       €€€r   Úsend_early_hintsz4_make_early_hints_callback.<locals>.send_early_hintsŒ   sö   ø€ ð ×ÒØð �;‰;˜ÒØð 3ˆØ"ò 	A‰KˆD�%Ü˜$¤Ô&Ø—{‘{ 9Ó-�Ü˜%¤Ô'ØŸ™ YÓ/�ô
 ×%Ñ% dÔ+Ü'¨¨t©Ó4Ð4Ü"×,Ñ,¨UÔ3ô
 $ D¨4¡KÓ0Ð0à—K‘K Ó&ˆEØ˜4˜&  5 '¨Ð.×5Ñ5°iÓ@Ñ@‰Hð'	Að( 	�GÑˆä�
‰
�4˜Õ"r   r   )rN   rO   rt   ru   s   ``` r   Ú_make_early_hints_callbackrv   w   s   ú€ ö*+#ðZ Ðr   c                 óJ  — |€t         } || ||g|¢­Ž }t        | ||«      }d}	t        j                  j	                  dd«      }
| j
                  r|j                  d«       | j                  D ]S  \  }}|dk(  r|}	n|dk(  r|}
n|dk(  r||d<   Œ!|dk(  r||d	<   Œ,d
|j                  dd«      z   }||v r
||   ›d|›�}|||<   ŒU | j                  |d<   t        |t        «      r||d<   n=t        |t        «      r|j                  «       |d<   n|d   |d<   t        |d   «      |d<   t        |t        «      r¥|j                  d«      }t        |«      dk(  r†|	rs|	j                  d«      }t        |«      dk(  re| j                  dk(  r|j!                  d«       nD| j                  dk(  r|j!                  d«       n#|j!                  d«       n|j!                  d«       |d   |d<   t        |d   «      |d<   | j"                  }|
r0|j%                  |
«      st'        d|›d|
›�«      ‚|t        |
«      d }t)        j*                  |«      |d<   |
|d<   |j-                  t/        | «      «       t1        | ||«      |d<   t3        | d«      r| j4                  |d<   | j6                  |d <   ||fS )!a  Build the (response, environ) pair for a request.

    ``response_class`` and ``response_args`` let a protocol supply its own
    writer: HTTP/2 passes HTTP2Response so the body is framed as HTTP/2
    instead of HTTP/1, while everything else here stays the same.
    NÚSCRIPT_NAMEÚ s   HTTP/1.1 100 Continue

ÚHOSTzCONTENT-TYPEÚCONTENT_TYPEzCONTENT-LENGTHÚCONTENT_LENGTHÚHTTP_r*   Ú_ú,zwsgi.url_schemerZ   r   r+   r[   ú:ÚhttpéP   Úhttpsi»  ÚSERVER_NAMEÚSERVER_PORTzRequest path z! does not start with SCRIPT_NAME Ú	PATH_INFOzwsgi.early_hintsÚpriority_weightzgunicorn.http2.priority_weightz"gunicorn.http2.priority_depends_on)ÚResponserR   ÚosÚenvironÚgetÚ_expected_100_continueÚsendrp   ÚreplaceÚschemerj   rM   rk   rl   ÚsplitÚlenr2   ÚpathÚ
startswithr   r	   Úunquote_to_wsgi_strrF   r`   rv   r   r‡   Úpriority_depends_on)rN   rO   ÚclientÚserverr5   Úresponse_classÚresponse_argsrt   rŠ   ÚhostÚscript_nameÚhdr_nameÚ	hdr_valuer   Ú	path_infos                  r   ÚcreaterŸ   ¼   sÏ  € ð ÐÜ!ˆÙ˜#˜t SÐ9¨=Ò9€Dô ˜c 4¨Ó-€Gð €DÜ—*‘*—.‘. °Ó3€Kà
×!Ò!Ø�	‰	Ð2Ô3ð
  #Ÿ{™{ò !Ñˆ�)Ø�vÒØ‰DØ˜Ò&Ø#‰KØ˜Ò'Ø&/ˆG�NÑ#ØØÐ)Ò)Ø(1ˆGÐ$Ñ%Øð ˜×(Ñ(¨¨cÓ2Ñ2ˆØ�'‰>Ø#*¨3£<±Ð;ˆIØ ˆ�Šð#!ð( "%§¡€GÐÑô �&œ#ÔØ!'ˆ�ÒÜ	�FœEÔ	"Ø!'§¡£ˆ�Òà!'¨¡ˆ�ÑÜ!$ V¨A¡Y£ˆ�Ñô �&œ#ÔØ—‘˜cÓ"ˆÜˆv‹;˜!ÒáØŸ™ C›�Ü�v“; !Ò#Ø—z‘z VÒ+ØŸ™ bÕ)ØŸ™ wÒ.ØŸ™ cÕ*àŸ™ bÕ)ð —‘˜bÔ!Ø# A™Y€GˆMÑÜ  ¨¡›^€GˆMÑð —‘€IÙØ×#Ñ# KÔ0Ý&â™Kð)ó*ð *ð œc +Ó.Ð/Ð0ˆ	Ü×3Ñ3°IÓ>€GˆKÑØ(€GˆMÑð ‡N�N”= Ó%Ô&ô #=¸SÀ$ÈÓ"M€GÐÑô ˆsÐ%Ô&Ø47×4GÑ4GˆÐ0Ñ1Ø8;×8OÑ8OˆÐ4Ñ5à�ˆ=Ðr   c                   ó‚   — e Zd Zd„ Zd„ Zd„ Zdd„Zed„ «       Zed„ «       Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)rˆ   c                 óÐ   — || _         || _        t        | _        d | _        d| _        d| _        g | _        d| _        d | _	        d| _
        d| _        || _        d| _        d| _        y )NFr   )rN   rO   r   rL   ÚstatusÚchunkedÚ
must_closerp   ri   Úresponse_lengthÚsentÚupgrader5   Ú_omits_bodyÚ_omits_body_warned)r   rN   rO   r5   s       r   r   zResponse.__init__+  sh   € ØˆŒØˆŒ	ÜˆŒØˆŒØˆŒØˆŒØˆŒØ!ˆÔØ#ˆÔØˆŒ	ØˆŒØˆŒØ ˆÔØ"'ˆÕr   c                 ó   — d| _         y )NT)r¤   r   s    r   Úforce_closezResponse.force_close;  s	   € Øˆ�r   c                 óô   — | j                   s| j                  j                  «       ry| j                  €| j                  ry| j                  j
                  dk(  ry| j                  dk  s| j                  dv ryy)NTFÚHEADéÈ   ©éÌ   i0  )r¤   rN   Úshould_closer¥   r£   rH   Ústatus_coder   s    r   r±   zResponse.should_close>  sd   € Ø�?Š?˜dŸh™h×3Ñ3Ô5ØØ×ÑÐ+¨t¯|ª|ØØ�8‰8�?‰?˜fÒ$ØØ×Ñ˜cÒ! T×%5Ñ%5¸Ñ%CØØr   Nc                 óö  — |r<	 | j                   r,| j                  r t        j                  |d   |d   |d   «       d }n| j                   �t	        d«      ‚|| _         	 t        | j                   j                  «       d   «      | _        | j                  |«       | j                  | j                  j                  | j                  «      | _        | j                  r\| j                  | j                  «      rA| j                  D ��cg c]  \  }}|j!                  «       dk7  sŒ||f‘Œ c}}| _        d | _        | j%                  «       | _        | j(                  S # d }w xY w# t        $ r
 d | _        Y Œèw xY wc c}}w )Nr   r+   é   zResponse headers already set!úcontent-length)r¢   ri   r	   ÚreraiseÚAssertionErrorÚintr�   r²   Ú
ValueErrorÚprocess_headersÚ_response_omits_bodyrN   rH   r¨   Ú _response_forbids_content_lengthrp   Úlowerr¥   Ú
is_chunkedr£   r8   )r   r¢   rp   Úexc_infoÚkrQ   s         r   Ústart_responsezResponse.start_responseI  sJ  € Ùð Ø—;’; 4×#4Ò#4Ü—L‘L ¨!¡¨h°q©k¸8ÀA¹;ÔGà‘Ø�[‰[Ð$Ü Ð!@ÓAÐAàˆŒð
	$Ü" 4§;¡;×#4Ñ#4Ó#6°qÑ#9Ó:ˆDÔð 	×Ñ˜WÔ%Ø×4Ñ4Ø�H‰H�O‰O˜T×-Ñ-ó/ˆÔà×Ò × EÑ EØ× Ñ ô!"ð $(§<¡<÷Ù˜1˜a°1·7±7³9Ð@PÓ3P��A’óˆDŒLð $(ˆDÔ Ø—‘Ó(ˆŒØ�z‰zÐøð1  ‘ûô ò 	$Ø#ˆDÖð	$üós)   „8E Á+E ÄE5Ä!E5ÅEÅE2Å1E2c                 óH   — | dk(  xs |dv xs |d uxr d|cxk  xr dk  S c S )Nr­   r¯   éd   r®   r   )rH   r¢   s     r   r»   zResponse._response_omits_bodyi  sD   € ð
 �fÑò <Ø˜Ð#ò<à˜dÐ"Ò: s¨fÖ':°sÑ':ð	
ñ (;ð	
r   c                 ó<   — | dk(  xs | d uxr d| cxk  xr dk  S c S )Nr°   rÃ   r®   r   )r¢   s    r   r¼   z)Response._response_forbids_content_lengths  s-   € ð
 ˜‰}ÒL ¨tÐ!3Ò!K¸¸vÖ8KÈÑ8KÐLÑ8KÐLr   c                 ó   — |D �]H  \  }}t        |t        «      st        d|z  «      ‚t        j                  |«      st        d|z  «      ‚t        |t        «      st        d|z  «      ‚t        j	                  |«      st        d|z  «      ‚|j                  d«      }|j                  «       }|dk(  rt        |«      | _        nlt        j                  |«      rW|dk(  r|j                  «       dk(  r=d| _        n5|dk(  r0|j                  «       dk(  r| j                  j!                  ||f«       �Œ,| j                  j!                  ||f«       �ŒK y )	Nz%r is not a stringrd   re   rµ   Ú
connectionr§   TÚ	websocket)rj   rM   Ú	TypeErrorr   rm   r   rn   r   ro   r½   r¸   r¥   r	   Ú
is_hoppishr§   rp   r2   )r   rp   rr   rs   Úlnames        r   rº   zResponse.process_headersz  s%  € Ø"ó 	/‰KˆD�%Ü˜d¤CÔ(ÜÐ 4°tÑ ;Ó<Ð<ä×%Ñ% dÔ+Ü'¨¨t©Ó4Ð4ä˜e¤SÔ)ÜÐ 4°uÑ <Ó=Ð=ä"×,Ñ,¨UÔ3Ü# D¨5¡LÓ1Ð1ð —K‘K Ó&ˆEØ—J‘J“LˆEØÐ(Ò(Ü'*¨5£z�Õ$Ü—‘ Ô&Ø˜LÒ(à—{‘{“}¨	Ò1Ø'+˜�Ø˜iÒ'Ø—{‘{“}¨Ò3ØŸ™×+Ñ+¨T°5¨MÔ:ñ Ø�L‰L×Ñ  u Ö.ñ;	/r   c                 ól   — | j                   �y| j                  j                  dk  ry| j                  ryy)NFr=   T)r¥   rN   rL   r¨   r   s    r   r¾   zResponse.is_chunkedš  s7   € ð ×ÑÐ+ØØ�X‰X×Ñ Ò'ØØ×ÒàØr   c                 ób  — | j                   rd}n| j                  «       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|j                  d«       |S )Nr§   r   z
keep-alivezHTTP/r   rA   r+   ú rg   zServer: %s
z
Date: %s
zConnection: %s
zTransfer-Encoding: chunked
)	r§   r±   rN   rL   r¢   r	   Ú	http_dater£   r2   )r   rÆ   rp   s      r   Údefault_headerszResponse.default_headers§  sœ   € à�<Š<Ø"‰JØ×ÑÔ Ø ‰Jà%ˆJøð $(§8¡8×#3Ñ#3°AÓ#6Ø#'§8¡8×#3Ñ#3°AÓ#6¸¿»ðEà˜tŸ|™|Ñ+ØœTŸ^™^Ó-Ñ-Ø  :Ñ-ð
ˆð �<Š<Ø�N‰NÐ;Ô<Øˆr   c           
      óP  — | j                   ry | j                  «       }|j                  | j                  D ��cg c]  \  }}|›d|›d�‘Œ c}}«       ddj	                  |«      z  }t        j                  | j                  t        j                  |d«      «       d| _         y c c}}w )Nrf   rg   z%s
ry   rc   T)	ri   rÏ   Úextendrp   rK   r	   r8   rO   Úto_bytestring)r   ÚtosendrÀ   rQ   Ú
header_strs        r   Úsend_headerszResponse.send_headers»  s   € Ø×ÒØØ×%Ñ%Ó'ˆØ�‰¸¿¹×F±°°A¢qª!Ò,ÓFÔGà §¡¨£Ñ/ˆ
Ü�
‰
�4—9‘9œd×0Ñ0°¸YÓGÔHØ ˆÕùó	 Gs   ¸B"
c                 ó>  — | j                  «        t        |t        «      st        d|z  «      ‚| j                  rK|rH| j
                  s<t        j                  d| j                  j                  | j                  «       d| _        y t        |«      }|}| j                  �G| j                  | j                  k\  ry t        | j                  | j                  z
  |«      }||k  r|d | }| j                  r|dk(  ry | xj                  |z  c_        | j!                  |«       y )Nz%r is not a byteú\WSGI app sent body bytes on a no-body response (method=%s status=%s); dropping per RFC 9110.Tr   )rÕ   rj   rk   rÈ   r¨   r©   ÚlogÚwarningrN   rH   r²   r‘   r¥   r¦   Úminr£   Ú
_emit_body)r   ÚargÚarglenrÓ   s       r   r8   zResponse.writeÅ  s÷   € Ø×ÑÔÜ˜#œuÔ%ÜÐ.°Ñ4Ó5Ð5Ø×ÒÙ˜4×2Ò2Ü—‘ðDà—H‘H—O‘O T×%5Ñ%5ôð
 +/�Ô'ØÜ�S“ˆØˆØ×ÑÐ+Ø�y‰y˜D×0Ñ0Ò0àä˜×-Ñ-°·	±	Ñ9¸6ÓBˆFØ˜ŠØ˜'˜6�l�ð �<Š<˜F ašKØà�	Š	�VÑ�	Ø�‰˜Õr   c                 óZ   — t        j                  | j                  || j                  «       y)z®Put body bytes on the wire.

        The one place body framing happens, so a subclass can frame it
        differently without reimplementing write()'s bookkeeping.
        N)r	   r8   rO   r£   r"   s     r   rÛ   zResponse._emit_bodyå  s   € ô 	�
‰
�4—9‘9˜d D§L¡LÕ1r   c                 ó2   — | j                   j                  duS )NF)r5   Úsendfiler   s    r   Úcan_sendfilezResponse.can_sendfileí  s   € Ø�x‰x× Ñ ¨Ð-Ð-r   c                 ó6  — | j                   j                  s| j                  «       syt        j                  |j
                  «      sy|j
                  j                  «       }	 t        j                  |dt        j                  «      }| j                  €%t        j                  |«      j                  }||z
  }n| j                  }| j                   r^| j#                  «        |dkD  rH| j$                  s<t&        j)                  d| j*                  j,                  | j.                  «       d| _        y| j#                  «        | j1                  «       r/d|z  }| j2                  j5                  |j7                  d«      «       |dkD  r(| j2                  j9                  |j
                  ||¬«       | j1                  «       r| j2                  j5                  d«       t        j                  ||t        j:                  «       y# t        t        j                  f$ r Y yw xY w)	NFr   r×   Tz%X
zutf-8)ÚoffsetÚcountrh   )r5   Úis_sslrá   r	   Ú
has_filenor   Úfilenor‰   ÚlseekÚSEEK_CURr¥   ÚfstatÚst_sizeÚOSErrorÚioÚUnsupportedOperationr¨   rÕ   r©   rØ   rÙ   rN   rH   r²   r¾   rO   Úsendallr:   rà   ÚSEEK_SET)r   Úrespiterrç   rã   ÚfilesizeÚnbytesÚ
chunk_sizes          r   rà   zResponse.sendfileð  s£  € Ø�8‰8�?Š? $×"3Ñ"3Ô"5Øä�‰˜x×0Ñ0Ô1Øà×"Ñ"×)Ñ)Ó+ˆð	Ü—X‘X˜f a¬¯©Ó5ˆFØ×#Ñ#Ð+ÜŸ8™8 FÓ+×3Ñ3�Ø! FÑ*‘à×-Ñ-�ð ×ÒØ×ÑÔð ˜Šz $×"9Ò"9Ü—‘ðDà—H‘H—O‘O T×%5Ñ%5ôð
 +/�Ô'Øà×ÑÔà�?‰?ÔØ! FÑ*ˆJØ�I‰I×Ñ˜j×/Ñ/°Ó8Ô9Ø�AŠ:Ø�I‰I×Ñ˜x×0Ñ0¸ÀvÐÔNà�?‰?ÔØ�I‰I×Ñ˜gÔ&ä
�‰�˜¤§¡Ô-àøô; œ×0Ñ0Ð1ò 	Ùð	ús   Á#A"G< Ç<HÈHc                 óX   — | j                  |«      s|D ]  }| j                  |«       Œ y y r   )rà   r8   )r   rñ   Úitems      r   Ú
write_filezResponse.write_file  s.   € Ø�}‰}˜XÔ&Ø ò !�Ø—
‘
˜4Õ ñ!ð 'r   c                 ó–   — | j                   s| j                  «        | j                  r!t        j                  | j
                  d«       y y )Nr   )ri   rÕ   r£   r	   Úwrite_chunkrO   r   s    r   r   zResponse.close#  s7   € Ø× Ò Ø×ÑÔØ�<Š<Ü×Ñ˜TŸY™Y¨Õ,ð r   r   )r$   r%   r&   r   r«   r±   rÁ   Ústaticmethodr»   r¼   rº   r¾   rÏ   rÕ   r8   rÛ   rá   rà   r÷   r   r   r   r   rˆ   rˆ   )  sv   „ ò(ò ò	óð@ ñ
ó ð
ð ñMó ðMò/ò@òò(!òò@2ò.ò,ò\!ó
-r   rˆ   )Nr   )rí   r-   r‰   Úrer3   Úgunicorn.http.messager   Úgunicorn.http.errorsr   r   r   Úgunicornr   r   r	   ÚBLKSIZEÚcompilern   r.   r$   rØ   r   Ú	RawIOBaser(   r?   rR   r`   rv   rŸ   rˆ   r   r   r   ú<module>r     sœ   ðó
 
Û Û 	Û 	Û 
å *ß WÑ Wß ,Ý ð €ð �"—*‘*Ð8Ó9€à€g×Ñ˜Ó!€÷ñ ô0˜Ÿ™ô ò6
ò
òòBðJ ;?Øój÷Z~-ò ~-r   