Ë
    ìO´jJV  ã                  ó  — d dl mZ d dlZ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
mZmZmZ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 d d	lmZmZ 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(m)Z)m*Z* d dl+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1  G d„ d«      Z2 G d„ de2«      Z3 G d„ de2«      Z4 G d„ de2«      Z5 G d„ de2«      Z6e7e8z  e9z  Z:ee:   Z;e
e:   Z<e<e;z  Z= G d„ de2«      Z> G d„ de?«      Z@ G d„ d e?«      ZA G d!„ d"e2«      ZBy)#é    )ÚannotationsN)ÚAsyncIterableÚ	AwaitableÚCallableÚIterableÚMappingÚSequence)Údatetime)Úformat_datetimeÚ
formatdate)Úpartial)Ú
guess_type)Ú	token_hex)ÚAnyÚLiteral)Úquote)Úcreate_collapsing_task_group)ÚBackgroundTask)Úiterate_in_threadpool)ÚURLÚHeadersÚMutableHeaders)ÚClientDisconnect)ÚMessageÚReceiveÚScopeÚSendc                  óì   — e Zd ZdZdZ	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zddd„Zedd„«       Z		 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z
	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd	„Zdd
„Zy)ÚResponseNúutf-8c                ó€   — || _         |�|| _        || _        | j                  |«      | _        | j                  |«       y ©N)Ústatus_codeÚ
media_typeÚ
backgroundÚrenderÚbodyÚinit_headers©ÚselfÚcontentr#   Úheadersr$   r%   s         új/var/www/origus_pro_usr/data/www/origus.pro/core/.venv/lib/python3.12/site-packages/starlette/responses.pyÚ__init__zResponse.__init__!   s>   € ð 'ˆÔØÐ!Ø(ˆDŒOØ$ˆŒØ—K‘K Ó(ˆŒ	Ø×Ñ˜'Õ"ó    c                óp   — |€yt        |t        t        z  «      r|S |j                  | j                  «      S )Nr/   )Ú
isinstanceÚbytesÚ
memoryviewÚencodeÚcharset©r*   r+   s     r-   r&   zResponse.render0   s1   € Øˆ?ØÜ�gœu¤zÑ1Ô2ØˆNØ�~‰~˜dŸl™lÓ+Ð+r/   c                ó¤  — |€g }d}d}nj|j                  «       D ��cg c]5  \  }}|j                  «       j                  d«      |j                  d«      f‘Œ7 }}}|D �cg c]  }|d   ‘Œ	 }}d|v}d|v}t        | dd «      }	|	�U|rS| j                  dk  sD| j                  dv s6t        t        |	«      «      }
|j                  d|
j                  d«      f«       | j                  }|�Y|rW|j                  d	«      r$d
|j                  «       vr|d| j                  z   z  }|j                  d|j                  d«      f«       || _        y c c}}w c c}w )NTúlatin-1r   s   content-lengths   content-typer'   éÈ   )éÌ   i0  ztext/zcharset=z
; charset=)ÚitemsÚlowerr4   Úgetattrr#   ÚstrÚlenÚappendr$   Ú
startswithr5   Úraw_headers)r*   r,   rB   Úpopulate_content_lengthÚpopulate_content_typeÚkÚvÚhÚkeysr'   Úcontent_lengthÚcontent_types               r-   r(   zResponse.init_headers7   sW  € Øˆ?Ø57ˆKØ&*Ð#Ø$(Ñ!àZa×ZgÑZgÓZi×jÑRVÐRSÐUV˜AŸG™G›I×,Ñ,¨YÓ7¸¿¹À)Ó9LÒMÐjˆKÑjØ"-Ö.˜Q�A�a“DÐ.ˆDÐ.Ø&7¸tÐ&CÐ#Ø$3¸4Ð$?Ð!ä�t˜V TÓ*ˆàÐÙ'Ø×%Ñ%¨Ò+¨t×/?Ñ/?À:Ñ/Mä ¤ T£›^ˆNØ×ÑÐ 1°>×3HÑ3HÈÓ3SÐTÔUà—‘ˆØÐ#Ñ(=Ø×&Ñ& wÔ/°JÀl×FXÑFXÓFZÑ4ZØ ¨t¯|©|Ñ ;Ñ;�Ø×Ñ °×1DÑ1DÀYÓ1OÐPÔQà&ˆÕùó) kùÚ.s   �:EÁEc                óh   — t        | d«      st        | j                  ¬«      | _        | j                  S )NÚ_headers©Úraw)Úhasattrr   rB   rL   )r*   s    r-   r,   zResponse.headersS   s(   € ä�t˜ZÔ(Ü*¨t×/?Ñ/?Ô@ˆDŒMØ�}‰}Ðr/   c                ó8  — t         j                  j                  «       }|||<   |�|||   d<   |�,t        |t        «      rt        |d¬«      ||   d<   n|||   d<   |�|||   d<   |�|||   d<   |rd||   d<   |rd||   d<   |	�!|	j                  «       d	v sJ d
«       ‚|	||   d<   |
r&t        j                  dk  rt        d«      ‚d||   d<   |j                  d¬«      j                  «       }| j                  j                  d|j                  d«      f«       y )Nzmax-ageT©ÚusegmtÚexpiresÚpathÚdomainÚsecureÚhttponly)ÚstrictÚlaxÚnonez1samesite must be either 'strict', 'lax' or 'none'Úsamesite)é   é   z@Partitioned cookies are only supported in Python 3.14 and above.ÚpartitionedÚ )Úheaders
   set-cookier8   )ÚhttpÚcookiesÚSimpleCookier1   r
   r   r<   ÚsysÚversion_infoÚ
ValueErrorÚoutputÚstriprB   r@   r4   )r*   ÚkeyÚvalueÚmax_agerS   rT   rU   rV   rW   r[   r^   ÚcookieÚ
cookie_vals                r-   Ú
set_cookiezResponse.set_cookieY   sY  € ô 04¯|©|×/HÑ/HÓ/JˆØˆˆs‰ØÐØ%,ˆF�3‰K˜	Ñ"ØÐÜ˜'¤8Ô,Ü)8¸ÈÔ)N��s‘˜IÒ&à)0��s‘˜IÑ&ØÐØ"&ˆF�3‰K˜ÑØÐØ$*ˆF�3‰K˜Ñ!ÙØ$(ˆF�3‰K˜Ñ!ÙØ&*ˆF�3‰K˜
Ñ#ØÐØ—>‘>Ó#ð (ñ ð Cð Có	Cð ð
 '/ˆF�3‰K˜
Ñ#ÙÜ×Ñ 'Ò)Ü Ð!cÓdÐdØ)-ˆF�3‰K˜Ñ&à—]‘]¨"�]Ó-×3Ñ3Ó5ˆ
Ø×Ñ×Ñ °
×0AÑ0AÀ)Ó0LÐ MÕNr/   c                ó8   — | j                  |dd||||||¬«	       y )Nr   )rk   rS   rT   rU   rV   rW   r[   r^   )rn   )r*   ri   rT   rU   rV   rW   r[   r^   s           r-   Údelete_cookiezResponse.delete_cookie†   s0   € ð 	�‰ØØØØØØØØØ#ð 	õ 
	
r/   c                ó   ‡— dˆfd„}|S )Nc              “  óZ   •K  — | d   }|dv ri | ¥dd|z   i¥}  ‰| «      ƒ d {  –—†  y 7 Œ­w)NÚtype>   úhttp.response.bodyúhttp.response.startz
websocket.© )ÚmessageÚmessage_typeÚsends     €r-   Úwrappedz5Response._wrap_websocket_denial_send.<locals>.wrapped�   s<   øè ø€ Ø" 6™?ˆLØÐLÑLØJ˜WÐJ f¨l¸\Ñ.IÑJ�Ù�w“-×Òús   ƒ +£)¤+)rw   r   ÚreturnÚNonerv   )r*   ry   rz   s    ` r-   Ú_wrap_websocket_denial_sendz$Response._wrap_websocket_denial_sendœ   s   ø€ õ	 ð ˆr/   c              ƒ  ó  K  — |d   dk(  r| j                  |«      } |d| j                  | j                  dœ«      ƒ d {  –—†   |d| j                  dœ«      ƒ d {  –—†  | j                  �| j	                  «       ƒ d {  –—†  y y 7 ŒG7 Œ,7 Œ
­w)Nrs   Ú	websocketru   ©rs   Ústatusr,   rt   )rs   r'   )r}   r#   rB   r'   r%   )r*   ÚscopeÚreceivery   s       r-   Ú__call__zResponse.__call__¥   sŒ   è ø€ Ø�‰=˜KÒ'Ø×3Ñ3°DÓ9ˆDÙÐ1¸T×=MÑ=MÐZ^×ZjÑZjÑkÓl×lÐlÙÐ0¸$¿)¹)ÑDÓE×EÐEà�?‰?Ð&Ø—/‘/Ó#×#Ñ#ð 'ð 	møØEøð $ús4   ‚=B¿BÁ BÁB	Á#BÂ BÂBÂ	BÂB)Nr9   NNN©r+   r   r#   Úintr,   úMapping[str, str] | Noner$   ú
str | Noner%   úBackgroundTask | Noner{   r|   )r+   r   r{   zbytes | memoryviewr"   )r,   r‡   r{   r|   )r{   r   )	r_   NNú/NFFrY   F)ri   r>   rj   r>   rk   z
int | NonerS   zdatetime | str | int | NonerT   rˆ   rU   rˆ   rV   ÚboolrW   r‹   r[   ú'Literal['lax', 'strict', 'none'] | Noner^   r‹   r{   r|   )rŠ   NFFrY   F)ri   r>   rT   r>   rU   rˆ   rV   r‹   rW   r‹   r[   rŒ   r^   r‹   r{   r|   )ry   r   r{   r   ©r‚   r   rƒ   r   ry   r   r{   r|   )Ú__name__Ú
__module__Ú__qualname__r$   r5   r.   r&   r(   Úpropertyr,   rn   rp   r}   r„   rv   r/   r-   r   r      s†  „ Ø€JØ€Gð ØØ,0Ø!%Ø,0ð#àð#ð ð#ð *ð	#ð
 ð#ð *ð#ð 
ó#ó,ô'ð8 òó ðð Ø"Ø/3ØØ!ØØØ<AØ!ð+Oàð+Oð ð+Oð ð	+Oð
 -ð+Oð ð+Oð ð+Oð ð+Oð ð+Oð :ð+Oð ð+Oð 
ó+Oð` Ø!ØØØ<AØ!ð
àð
ð ð
ð ð	
ð
 ð
ð ð
ð :ð
ð ð
ð 
ó
ó,ô$r/   r   c                  ó   — e Zd ZdZy)ÚHTMLResponsez	text/htmlN©rŽ   r�   r�   r$   rv   r/   r-   r“   r“   ¯   s   „ Ø�Jr/   r“   c                  ó   — e Zd ZdZy)ÚPlainTextResponsez
text/plainNr”   rv   r/   r-   r–   r–   ³   s   „ Ø�Jr/   r–   c                  óL   ‡ — e Zd ZdZ	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zdd„Zˆ xZS )ÚJSONResponsezapplication/jsonc                ó,   •— t         ‰| �  |||||«       y r"   )Úsuperr.   )r*   r+   r#   r,   r$   r%   Ú	__class__s         €r-   r.   zJSONResponse.__init__º   s   ø€ ô 	‰Ñ˜ +¨w¸
ÀJÕOr/   c                óT   — t        j                  |ddd d¬«      j                  d«      S )NF)ú,ú:)Úensure_asciiÚ	allow_nanÚindentÚ
separatorsr    )ÚjsonÚdumpsr4   r6   s     r-   r&   zJSONResponse.renderÄ   s-   € Ü�z‰zØØØØØ!ô
÷ ‰&�‹/ð	r/   ©r9   NNNr…   )r+   r   r{   r2   )rŽ   r�   r�   r$   r.   r&   Ú__classcell__©r›   s   @r-   r˜   r˜   ·   sa   ø„ Ø#€Jð
 Ø,0Ø!%Ø,0ðPàðPð ðPð *ð	Pð
 ðPð *ðPð 
õP÷r/   r˜   c                  ó:   ‡ — e Zd Z	 	 	 d	 	 	 	 	 	 	 	 	 dˆ fd„Zˆ xZS )ÚRedirectResponsec                ór   •— t         ‰| �  d|||¬«       t        t        |«      d¬«      | j                  d<   y )Nr/   )r+   r#   r,   r%   z:/%#?=@[]!$&'()*+,;)ÚsafeÚlocation)rš   r.   r   r>   r,   )r*   Úurlr#   r,   r%   r›   s        €r-   r.   zRedirectResponse.__init__Ï   s6   ø€ ô 	‰Ñ °+ÀwÐ[eÐÔfÜ#(¬¨S«Ð8MÔ#Nˆ�‰�ZÒ r/   )i3  NN)
r­   z	str | URLr#   r†   r,   r‡   r%   r‰   r{   r|   )rŽ   r�   r�   r.   r¦   r§   s   @r-   r©   r©   Î   sO   ø„ ð Ø,0Ø,0ðOàðOð ðOð *ð	Oð
 *ðOð 
÷Oñ Or/   r©   c                  óX   — e Zd ZU ded<   	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 d	d„Zd
d„Zdd„Zdd„Zy)ÚStreamingResponseÚAsyncContentStreamÚbody_iteratorNc                ó¼   — t        |t        «      r|| _        nt        |«      | _        || _        |€| j
                  n|| _        || _        | j                  |«       y r"   )r1   r   r±   r   r#   r$   r%   r(   r)   s         r-   r.   zStreamingResponse.__init__ã   sR   € ô �gœ}Ô-Ø!(ˆDÕä!6°wÓ!?ˆDÔØ&ˆÔØ-7Ð-?˜$Ÿ/š/ÀZˆŒØ$ˆŒØ×Ñ˜'Õ"r/   c              ƒ  óB   K  — 	  |«       ƒ d {  –—† }|d   dk(  ry Œ7 Œ­w)Nrs   zhttp.disconnectrv   )r*   rƒ   rw   s      r-   Úlisten_for_disconnectz'StreamingResponse.listen_for_disconnectô   s*   è ø€ ØÙ#›I—oˆGØ�v‰Ð"3Ò3Øð Ø%ús   ‚Ž�c              ƒ  óL  K  —  |d| j                   | j                  dœ«      ƒ d {  –—†  | j                  2 3 d {  –—† }t        |t        t
        z  «      s|j                  | j                  «      } |d|ddœ«      ƒ d {  –—†  ŒP7 Œ`7 ŒM7 Œ	6  |ddddœ«      ƒ d {  –—†7   y ­w)Nru   r€   rt   T©rs   r'   Ú	more_bodyr/   F)r#   rB   r±   r1   r2   r3   r4   r5   )r*   ry   Úchunks      r-   Ústream_responsez!StreamingResponse.stream_responseú   sª   è ø€ ÙÐ1¸T×=MÑ=MÐZ^×ZjÑZjÑkÓl×lÐlØ×-Ñ-÷ 	Yð 	Y�%Ü˜e¤U¬ZÑ%7Ô8ØŸ™ T§\¡\Ó2�ÙÐ 4¸eÐRVÑWÓX×XÑXð	 	møð	Yøð Yøð .ñ
 Ð0¸#ÈEÑRÓS×SÒSùsN   ‚$B$¦B§B$·B»B	¼B¿AB$ÂBÂB$Â	BÂB$ÂB$ÂB ÂB$c           	   ƒ  ó4  ‡K  — |d   dk(  rO| j                  |«      }| j                  |«      ƒ d {  –—†  | j                  �| j                  «       ƒ d {  –—†  y t        t	        t
        |j                  di «      j                  dd«      j                  d«      «      «      }|dk\  r	 | j                  |«      ƒ d {  –—†  nst        «       4 ƒd {  –—† Šd	ˆfd„}‰j                  |t        | j                  |«      «        |t        | j                  |«      «      ƒ d {  –—†  d d d «      ƒd {  –—†  | j                  �| j                  «       ƒ d {  –—†  y y 7 �Œ+7 �Œ
7 Œ¤# t        $ r t        «       ‚w xY w7 Œ©7 Œ[7 ŒM# 1 ƒd {  –—†7  sw Y   Œ]xY w7 Œ@­w)
Nrs   r   ÚasgiÚspec_versionz2.0ú.)é   é   c              “  ód   •K  —  | «       ƒ d {  –—†  ‰j                   j                  «        y 7 Œ­wr"   )Úcancel_scopeÚcancel)ÚfuncÚ
task_groups    €r-   Úwrapz(StreamingResponse.__call__.<locals>.wrap  s'   øè ø€ Ù›&—L�LØ×+Ñ+×2Ñ2Õ4ð !ús   ƒ0Ž.� 0)rÃ   zCallable[[], Awaitable[None]]r{   r|   )r}   r¹   r%   ÚtupleÚmapr†   ÚgetÚsplitÚOSErrorr   r   Ú
start_soonr   r´   )r*   r‚   rƒ   ry   r¼   rÅ   rÄ   s         @r-   r„   zStreamingResponse.__call__  s�  øè ø€ Ø�‰=˜KÒ'Ø×3Ñ3°DÓ9ˆDØ×&Ñ& tÓ,×,Ð,Ø�‰Ð*Ø—o‘oÓ'×'Ð'ØäœS¤ e§i¡i°¸Ó&;×&?Ñ&?ÀÐPUÓ&V×&\Ñ&\Ð]`Ó&aÓbÓcˆà˜6Ò!ð)Ø×*Ñ*¨4Ó0×0Ñ0ô 4Ó5÷ Ið I¸õ5ð ×%Ñ% d¬G°D×4HÑ4HÈ$Ó,OÔPÙœ7 4×#=Ñ#=¸wÓGÓH×HÐH÷I÷ Ið �?‰?Ð&Ø—/‘/Ó#×#Ñ#ð 'ð- -ùà'ùð 1ùÜò )Ü&Ó(Ð(ð)úðIøð IøðIø÷ I÷ Iñ Iúð $ús­   ƒ.F±E²#FÁEÁAFÂ)E$ Â=E"Â>E$ ÃFÃE;ÃFÃAFÄ!E=Ä"FÄ&FÄ1E?Ä2#FÅFÅFÅFÅ"E$ Å$E8Å8FÅ=FÅ?FÆFÆF
ÆFÆFr¥   )r+   ÚContentStreamr#   r†   r,   r‡   r$   rˆ   r%   r‰   r{   r|   )rƒ   r   r{   r|   )ry   r   r{   r|   r�   )rŽ   r�   r�   Ú__annotations__r.   r´   r¹   r„   rv   r/   r-   r¯   r¯   à   se   … Ø%Ó%ð
 Ø,0Ø!%Ø,0ð#àð#ð ð#ð *ð	#ð
 ð#ð *ð#ð 
ó#ó"óTô$r/   r¯   c                  ó   — e Zd Zddd„Zy)ÚMalformedRangeHeaderc                ó   — || _         y r"   )r+   r6   s     r-   r.   zMalformedRangeHeader.__init__!  s	   € Øˆ�r/   N)zMalformed range header.)r+   r>   r{   r|   ©rŽ   r�   r�   r.   rv   r/   r-   rÏ   rÏ      s   „ õr/   rÏ   c                  ó   — e Zd Zdd„Zy)ÚRangeNotSatisfiablec                ó   — || _         y r"   )Úmax_size)r*   rÕ   s     r-   r.   zRangeNotSatisfiable.__init__&  s	   € Ø ˆ�r/   N)rÕ   r†   r{   r|   rÑ   rv   r/   r-   rÓ   rÓ   %  s   „ ô!r/   rÓ   c                  óê   — e Zd ZdZdZ	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Zdd„Z	 	 	 	 	 	 	 	 	 	 	 	 dd„Z		 	 	 	 	 	 	 	 	 	 dd	„Z
dd
„Zedd„«       Zedd„«       Z	 	 	 	 	 	 	 	 	 	 dd„Zy)ÚFileResponsei   éd   Nc	                óÖ  — || _         || _        || _        |€t        |xs |«      d   xs d}|| _        || _        | j                  |«       | j                  j                  dd«       | j                  �Zt        | j                  «      }	|	| j                  k7  r|› d|	› �}
n|› d| j                  › d�}
| j                  j                  d|
«       || _
        |�| j                  |«       y y )	Nr   zapplication/octet-streamzaccept-rangesr2   z; filename*=utf-8''z; filename="ú"zcontent-disposition)rT   r#   Úfilenamer   r$   r%   r(   r,   Ú
setdefaultr   Ústat_resultÚset_stat_headers)r*   rT   r#   r,   r$   r%   rÛ   rÝ   Úcontent_disposition_typeÚcontent_disposition_filenameÚcontent_dispositions              r-   r.   zFileResponse.__init__.  sô   € ð ˆŒ	Ø&ˆÔØ ˆŒØÐÜ# HÒ$4°Ó5°aÑ8ÒVÐ<VˆJØ$ˆŒØ$ˆŒØ×Ñ˜'Ô"Ø�‰×Ñ °Ô9Ø�=‰=Ð$Ü+0°·±Ó+?Ð(Ø+¨t¯}©}Ò<Ø)AÐ(BÐBUÐVrÐUsÐ&tÑ#à)AÐ(BÀ,ÈtÏ}É}ÈoÐ]^Ð&_Ð#Ø�L‰L×#Ñ#Ð$9Ð;NÔOØ&ˆÔØÐ"Ø×!Ñ! +Õ.ð #r/   c                óÎ  — t        |j                  «      }t        |j                  d¬«      }t        |j                  «      dz   t        |j                  «      z   }dt	        j
                  |j                  «       d¬«      j                  «       › d�}| j                  j                  d|«       | j                  j                  d|«       | j                  j                  d	|«       y )
NTrQ   ú-rÚ   F)Úusedforsecurityúcontent-lengthúlast-modifiedÚetag)
r>   Úst_sizer   Úst_mtimeÚhashlibÚmd5r4   Ú	hexdigestr,   rÜ   )r*   rÝ   rI   Úlast_modifiedÚ	etag_baserç   s         r-   rÞ   zFileResponse.set_stat_headersM  s³   € Ü˜[×0Ñ0Ó1ˆÜ" ;×#7Ñ#7ÀÔEˆÜ˜×,Ñ,Ó-°Ñ3´c¸+×:MÑ:MÓ6NÑNˆ	Ø”7—;‘;˜y×/Ñ/Ó1À5ÔI×SÑSÓUÐVÐVWÐXˆà�‰×ÑÐ 0°.ÔAØ�‰×Ñ °Ô?Ø�‰×Ñ ¨Õ-r/   c              ƒ  óÚ  K  — |d   }|dk(  xr |d   j                  «       dk(  }|dk(  xr d|j                  di «      v }|dk(  r| j                  |«      }| j                  €Œ	 t        j
                  j                  t        j                  | j                  «      ƒ d {  –—† }| j                  |«       |j                  }t        j                  |«      s%t        d| j                  › d	�«      ‚| j                  }t        |¬«      }	|	j                  d«      }
|	j                  d«      }| j                   dk7  s|
�|�-| j#                  |«      s| j%                  |||«      ƒ d {  –—†  n«	 | j'                  |
|j(                  «      }t5        |«      dk(  r| j%                  |||«      ƒ d {  –—†  ndt5        |«      dk(  r0|d   \  }}| j7                  ||||j(                  |«      ƒ d {  –—†  n&| j9                  |||j(                  |«      ƒ d {  –—†  | j:                  �| j;                  «       ƒ d {  –—†  y y 7 �Œ›# t        $ r t        d| j                  › d
�«      ‚w xY w7 Œÿ# t*        $ r2} t-        |j.                  d¬«      |||«      ƒ d {  –—†7  cY d }~S d }~wt0        $ r9}t-        ddd|j2                  › �i¬«      } ||||«      ƒ d {  –—†7  cY d }~S d }~ww xY w7 �Œ97 Œý7 ŒØ7 Œ¶­w)Nrs   ra   ÚmethodÚHEADúhttp.response.pathsendÚ
extensionsr   zFile at path z is not a file.z does not exist.)r‚   Úrangezif-ranger9   i�  )r#   i   zContent-Rangezbytes */)r#   r,   r   é   )ÚupperrÈ   r}   rÝ   ÚanyioÚ	to_threadÚrun_syncÚosÚstatrT   rÞ   Úst_modeÚS_ISREGÚRuntimeErrorÚFileNotFoundErrorr   r#   Ú_should_use_rangeÚ_handle_simpleÚ_parse_range_headerrè   rÏ   r–   r+   rÓ   rÕ   r?   Ú_handle_single_rangeÚ_handle_multiple_rangesr%   )r*   r‚   rƒ   ry   Ú
scope_typeÚsend_header_onlyÚsend_pathsendrÝ   Úmoder,   Ú
http_rangeÚhttp_if_rangeÚrangesÚexcÚresponseÚstartÚends                    r-   r„   zFileResponse.__call__W  sÕ  è ø€ Ø˜6‘]ˆ
Ø%¨Ñ/ÒU°E¸(±O×4IÑ4IÓ4KÈvÑ4UÐØ" fÑ,ÒhÐ1IÈUÏYÉYÐWcÐegÓMhÐ1hˆØ˜Ò$Ø×3Ñ3°DÓ9ˆDà×ÑÐ#ðSÜ$)§O¡O×$<Ñ$<¼R¿W¹WÀdÇiÁiÓ$P×P�Ø×%Ñ% kÔ2ð #×*Ñ*�Ü—|‘| DÔ)Ü&¨°t·y±y°kÀÐ'QÓRÐRà×*Ñ*ˆKä Ô&ˆØ—[‘[ Ó)ˆ
ØŸ™ JÓ/ˆð ×Ñ Ò#ØÐ!ØÐ)°$×2HÑ2HÈÔ2Wà×%Ñ% dÐ,<¸mÓL×LÑLð<Ø×1Ñ1°*¸k×>QÑ>QÓR�ô �6‹{˜aÒØ×)Ñ)¨$Ð0@À-ÓP×PÑPÜ�V“ Ò!Ø# A™Y‘
��sØ×/Ñ/°°e¸SÀ+×BUÑBUÐWgÓh×hÑhà×2Ñ2°4¸À×ATÑATÐVfÓg×gÐgà�?‰?Ð&Ø—/‘/Ó#×#Ñ#ð 'ðM Qúä$ò PÜ" ]°4·9±9°+Ð=MÐ#NÓOÐOðPúð$ Mùô (ò cØLÔ.¨s¯{©{ÈÔLÈUÐT[Ð]aÓb×bÐbÕbûÜ&ò <Ü,¸ÀÐZbÐcf×coÑcoÐbpÐXqÐFrÔs�Ù% e¨W°dÓ;×;Ð;Õ;ûð<úð
 Qùð iøàgøð $úsß   ‚A K+Á#;H< ÂH9ÂH< Â4B.K+Å"I"Å#K+Å)I$ Æ$K+Æ)K"Æ*=K+Ç'K%Ç(&K+ÈK'È#K+È2K)È3K+È9H< È<#IÉK+É$	KÉ-"JÊJÊJÊKÊK+ÊKÊ&)KËKËKËKËK+ËKËK+Ë%K+Ë'K+Ë)K+c              ƒ  óV  K  —  |d| j                   | j                  dœ«      ƒ d {  –—†  |r |ddddœ«      ƒ d {  –—†  y |r' |dt        | j                  «      dœ«      ƒ d {  –—†  y t	        j
                  | j                  d	¬
«      ƒ d {  –—† 4 ƒd {  –—† }d}|rR|j                  | j                  «      ƒ d {  –—† }t        |«      | j                  k(  } |d||dœ«      ƒ d {  –—†  |rŒRd d d «      ƒd {  –—†  y 7 ŒÝ7 ŒÉ7 Œ¢7 Œz7 Œs7 ŒN7 Œ$7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)Nru   r€   rt   r/   Fr¶   rò   )rs   rT   Úrb©r  T)	r#   rB   r>   rT   r÷   Ú	open_fileÚreadÚ
chunk_sizer?   )r*   ry   r  r  Úfiler·   r¸   s          r-   r  zFileResponse._handle_simple‰  s  è ø€ ÙÐ1¸T×=MÑ=MÐZ^×ZjÑZjÑkÓl×lÐlÙÙÐ 4¸cÐPUÑVÓW×WÑWÙÙÐ 8Ä#ÀdÇiÁiÃ.ÑQÓR×RÑRä"Ÿ_™_¨T¯Y©Y¸TÔB×B÷ fð fÀdØ �	ÙØ"&§)¡)¨D¯O©OÓ"<×<�EÜ # E£
¨d¯o©oÑ =�IÙÐ(<ÀeÐZcÑdÓe×eÐeò  ÷f÷ fð fð 	møàWøàRøàBøð føð =øàeøðfø÷ f÷ fñ füs¯   ‚$D)¦D§D)¼D½(D)Á%DÁ&)D)ÂD
ÂD)ÂDÂD)Â#DÂ?DÃ +DÃ+DÃ,DÃ3D)Ã>DÃ?D)ÄD)ÄD)Ä
D)ÄD)ÄDÄDÄD)ÄD&ÄDÄD&Ä"D)c              ƒ  óè  K  — t        t        | j                  «      ¬«      }d|› d|dz
  › d|› �|d<   t        ||z
  «      |d<    |dd	|j                  d
œ«      ƒ d {  –—†  |r |ddddœ«      ƒ d {  –—†  y t        j                  | j                  d¬«      ƒ d {  –—† 4 ƒd {  –—† }|j                  |«      ƒ d {  –—†  d}|rt|j                  t        | j                  ||z
  «      «      ƒ d {  –—† }	|t        |	«      z  }t        |	«      | j                  k(  xr ||k  } |d|	|dœ«      ƒ d {  –—†  |rŒtd d d «      ƒd {  –—†  y 7 Œï7 ŒÛ7 Œ³7 Œ¬7 Œ•7 Œc7 Œ$7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)NrM   zbytes rã   rõ   rŠ   zcontent-rangerå   ru   éÎ   r€   rt   r/   Fr¶   r  r  T)r   ÚlistrB   r>   rN   r÷   r  rT   Úseekr  Úminr  r?   )
r*   ry   r  r  Ú	file_sizer  r,   r  r·   r¸   s
             r-   r  z!FileResponse._handle_single_range—  s{  è ø€ ô !¤T¨$×*:Ñ*:Ó%;Ô<ˆØ%+¨E¨7°!°C¸!±G°9¸A¸i¸[Ð#Iˆ�Ñ Ü$'¨¨e©Ó$4ˆÐ Ñ!ÙÐ1¸SÈWÏ[É[ÑYÓZ×ZÐZÙÙÐ 4¸cÐPUÑVÓW×WÑWä"Ÿ_™_¨T¯Y©Y¸TÔB×B÷ fð fÀdØ—i‘i Ó&×&Ð&Ø �	ÙØ"&§)¡)¬C°·±ÀÀuÁÓ,MÓ"N×N�EØœS ›ZÑ'�EÜ # E£
¨d¯o©oÑ =Ò MÀ%È#Á+�IÙÐ(<ÀeÐZcÑdÓe×eÐeò	  ÷f÷ fð fð	 	[øàWøàBøð føØ&øð Oøð føðfø÷ f÷ fñ füsµ   ‚AE2ÁEÁE2Á3EÁ4)E2ÂEÂE2Â&EÂ'E2Â*EÂ?EÃ 3EÃ3EÃ4A EÄ4EÄ5EÄ<E2ÅEÅE2ÅE2ÅE2ÅE2ÅEÅEÅEÅE2ÅE/Å#E&Å$E/Å+E2c           	   ƒ  óÈ  K  — t        d«      }| j                  |||| j                  d   «      \  }}t        t	        | j
                  «      ¬«      }d|› �|d<   t        |«      |d<    |dd|j                  dœ«      ƒ d {  –—†  |r |d	d
ddœ«      ƒ d {  –—†  y t        j                  | j                  d¬«      ƒ d {  –—† 4 ƒd {  –—† }	|D ]ª  \  }
} |d	 ||
|«      ddœ«      ƒ d {  –—†  |	j                  |
«      ƒ d {  –—†  |
|k  rX|	j                  t        | j                  ||
z
  «      «      ƒ d {  –—† }|
t        |«      z  }
 |d	|ddœ«      ƒ d {  –—†  |
|k  rŒX |d	dddœ«      ƒ d {  –—†  Œ¬  |d	d|› d�j!                  d«      ddœ«      ƒ d {  –—†  d d d «      ƒd {  –—†  y 7 �Œ57 �Œ"7 Œú7 Œó7 ŒÒ7 Œ»7 Œˆ7 Œh7 ŒP7 Œ)7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)Né   zcontent-typerM   zmultipart/byteranges; boundary=rå   ru   r  r€   rt   r/   Fr¶   r  r  Ts   
ú--r8   )r   Úgenerate_multipartr,   r   r  rB   r>   rN   r÷   r  rT   r  r  r  r  r?   r4   )r*   ry   r  r  r  ÚboundaryrI   Úheader_generatorr,   r  r  r  r¸   s                r-   r  z$FileResponse._handle_multiple_rangesª  s  è ø€ ô ˜R“=ˆØ+/×+BÑ+BØ�H˜i¨¯©°nÑ)Eó,
Ñ(ˆÐ(ô !¤T¨$×*:Ñ*:Ó%;Ô<ˆØ$CÀHÀ:Ð"Nˆ�ÑÜ$'¨Ó$7ˆÐ Ñ!ÙÐ1¸SÈWÏ[É[ÑYÓZ×ZÐZÙÙÐ 4¸cÐPUÑVÓW×WÑWä"Ÿ_™_¨T¯Y©Y¸TÔB×B÷ ð ÀdØ"(ò c‘J�E˜3ÙÐ(<ÑFVÐW\Ð^aÓFbÐquÑvÓw×wÐwØŸ)™) EÓ*×*Ð*Ø #š+Ø&*§i¡i´°D·O±OÀSÈ5Á[Ó0QÓ&R× R˜Ø¤ U£Ñ+˜Ù"Ð,@È%Ð^bÑ#cÓd×dÐdð   #›+ñ Ð(<ÀgÐ\`ÑaÓb×bÑbðcñ à 4Ø"$ X J¨bÐ 1× 8Ñ 8¸Ó CØ%*ñó÷ ð ÷÷ ð ð	 	[ùàWùàBøð øàwøØ*øà RøàdøØbøðøðø÷ ÷ ñ üsð   ‚A>G"Â F5ÂG"ÂF8Â)G"Ã F;ÃG"Ã	F=Ã
G"ÃGÃ,F?Ã-GÄGÄ4GÄ:GÄ;!GÅGÅ	GÅ'GÅ6GÅ7(GÆG	Æ GÆ$G"Æ/GÆ0G"Æ8G"Æ;G"Æ=G"Æ?GÇGÇGÇGÇGÇ	GÇG"ÇGÇGÇGÇG"c                óN   — || j                   d   k(  xs || j                   d   k(  S )Nræ   rç   )r,   )r*   r
  s     r-   r   zFileResponse._should_use_rangeÎ  s-   € Ø §¡¨_Ñ =Ñ=ÒfÀÐRV×R^ÑR^Ð_eÑRfÑAfÐfr/   c                ó   ‡— g }	 |j                  dd«      \  }}|j                  «       j	                  «       }|dk7  rt        d«      ‚|j                  d«      dz   | j                  kD  rg S | j                  |‰«      }t        |«      dk(  rt        d«      ‚t        ˆfd„|D «       «      rt        ‰«      ‚t        d	„ |D «       «      rt        d
«      ‚t        |«      dk(  r|S |j                  «        |d   g}|dd  D ]7  \  }}|d   \  }	}
||
k  r|	t        |
|«      f|d<   Œ%|j                  ||f«       Œ9 |S # t        $ r t        «       ‚w xY w)Nú=rõ   r2   zOnly support bytes ranger�   r   z%Range header: range must be requestedc              3  óF   •K  — | ]  \  }}d |cxk  xr ‰k  nc  –— Œ y­w)r   Nrv   )Ú.0r  Ú_r  s      €r-   ú	<genexpr>z3FileResponse._parse_range_header.<locals>.<genexpr>æ  s"   øè ø€ ÒC±°°q�A˜Ö* Ô*Ô+ÑCùs   ƒ!c              3  ó,   K  — | ]  \  }}||k\  –— Œ y ­wr"   rv   )r'  r  r  s      r-   r)  z3FileResponse._parse_range_header.<locals>.<genexpr>é  s   è ø€ Ò5¡
  sˆu˜�|Ñ5ùs   ‚z)Range header: start must be less than endéÿÿÿÿ)rÉ   rf   rÏ   rh   r<   ÚcountÚ
max_rangesÚ_parse_rangesr?   ÚanyrÓ   ÚsortÚmaxr@   )Úclsr	  r  r  ÚunitsÚrange_Úresultr  r  Ú
last_startÚlast_ends     `        r-   r  z FileResponse._parse_range_headerÑ  sf  ø€ à(*ˆð	)Ø&×,Ñ,¨S°!Ó4‰MˆE�6ð —‘“×#Ñ#Ó%ˆà�GÒÜ&Ð'AÓBÐBà�<‰<˜Ó˜qÑ  3§>¡>Ò1ØˆIà×"Ñ" 6¨9Ó5ˆäˆv‹;˜!ÒÜ&Ð'NÓOÐOäÓC¸FÔCÔCÜ% iÓ0Ð0äÑ5¨fÔ5Ô5Ü&Ð'RÓSÐSäˆv‹;˜!ÒØˆMð 	�‰ŒØ)/°©¨ˆØ   ˜*ò 	,‰JˆE�3Ø#)¨"¡:Ñ ˆJ˜Ø˜Ò Ø(¬#¨h¸Ó*<Ð=��r’
à—‘˜u c˜lÕ+ð	,ð ˆøôG ò 	)Ü&Ó(Ð(ð	)ús   …D9 Ä9Ec                ó®  — g }|j                  d«      D ]¯  }|j                  «       }|r|dk(  rŒd|vrŒ |j                  dd«      \  }}|j                  «       }|j                  «       }	 |rt        |«      nt        |t        |«      z
  d«      }|r|rt        |«      |k  rt        |«      dz   n|}|j	                  ||f«       Œ± |S # t
        $ r Y Œ¿w xY w)Nr�   rã   rõ   r   )rÉ   rh   r†   r1  r@   rf   )	r2  r4  r  r  ÚpartÚ	start_strÚend_strr  r  s	            r-   r.  zFileResponse._parse_rangesû  sß   € à(*ˆà—L‘L Ó%ò 	ˆDØ—:‘:“<ˆDñ ˜4 3š;Øð ˜$‰Øà!%§¡¨C°Ó!3ÑˆI�wØ!Ÿ™Ó)ˆIØ—m‘m“oˆGðÙ*3œ˜Iœ¼¸YÌÈWËÑ=UÐWXÓ9Y�Ù*3¹ÄCÈÃLÐS\ÒD\”c˜'“l QÒ&Ðbk�Ø—‘˜u c˜lÕ+ð%	ð. ˆøô	 ò áðús   Á*ACÃ	CÃCc                ó²   ‡‡‡‡— t        ‰«      }d|z   t        ‰«      z   t        t        ‰«      «      z   Št        ˆfd„|D «       «      d|z   z   }|ˆˆˆfd„fS )aÏ  
        Multipart response headers generator.

        ```
        --{boundary}\r\n
        Content-Type: {content_type}\r\n
        Content-Range: bytes {start}-{end-1}/{max_size}\r\n
        \r\n
        ..........content...........\r\n
        --{boundary}\r\n
        Content-Type: {content_type}\r\n
        Content-Range: bytes {start}-{end-1}/{max_size}\r\n
        \r\n
        ..........content...........\r\n
        --{boundary}--
        ```
        é1   c              3  óŽ   •K  — | ]<  \  }}t        t        |«      «      t        t        |d z
  «      «      z   ‰z   ||z
  z   –— Œ> y­w)rõ   N)r?   r>   )r'  r  r  Ústatic_header_part_lens      €r-   r)  z2FileResponse.generate_multipart.<locals>.<genexpr>2  sK   øè ø€ ò 
ñ ��sô ”�U“‹_œs¤3 s¨Q¡w£<Ó0Ñ0Ð3IÑIØ�U‰{õñ
ùs   ƒAAr¿   c                óL   •— d‰› d‰› d| › d|dz
  › d‰› d�j                  d«      S )	Nr  z
Content-Type: z
Content-Range: bytes rã   rõ   rŠ   z

r8   )r4   )r  r  r!  rJ   rÕ   s     €€€r-   ú<lambda>z1FileResponse.generate_multipart.<locals>.<lambda>;  sL   ø€ ðØ€*ð Øˆnð Ø�W˜A˜c A™g˜Y a¨ zð 2ð÷ ‰f�YÓð r/   )r?   r>   Úsum)r*   r  r!  rÕ   rJ   Úboundary_lenrI   r?  s     ```  @r-   r   zFileResponse.generate_multipart  sn   û€ ô0 ˜8“}ˆØ!# lÑ!2´S¸Ó5FÑ!FÌÌSÐQYË]ÓI[Ñ![ÐÜó 
ð %ô
ó 
ð
 �Ññ
ˆð õ ð

ð 
	
r/   )r9   NNNNNÚ
attachment)rT   zstr | os.PathLike[str]r#   r†   r,   r‡   r$   rˆ   r%   r‰   rÛ   rˆ   rÝ   zos.stat_result | Nonerß   r>   r{   r|   )rÝ   zos.stat_resultr{   r|   r�   )ry   r   r  r‹   r  r‹   r{   r|   )ry   r   r  r†   r  r†   r  r†   r  r‹   r{   r|   )
ry   r   r  úlist[tuple[int, int]]r  r†   r  r‹   r{   r|   )r
  r>   r{   r‹   )r	  r>   r  r†   r{   rE  )r4  r>   r  r†   r{   rE  )
r  zSequence[tuple[int, int]]r!  r>   rÕ   r†   rJ   r>   r{   z'tuple[int, Callable[[int, int], bytes]])rŽ   r�   r�   r  r-  r.   rÞ   r„   r  r  r  r   Úclassmethodr  r.  r   rv   r/   r-   r×   r×   *  sg  „ Ø€JØ€Jð
 Ø,0Ø!%Ø,0Ø#Ø-1Ø(4ð/à$ð/ð ð/ð *ð	/ð
 ð/ð *ð/ð ð/ð +ð/ð #&ð/ð 
ó/ó>.ó0$ódfðfØðfØ!$ðfØ+.ðfØ;>ðfØRVðfà	ófð&"àð"ð &ð"ð ð	"ð
 ð"ð 
ó"óHgð ò'ó ð'ðR òó ðð8+
à)ð+
ð ð+
ð ð	+
ð
 ð+
ð 
1ô+
r/   r×   )CÚ
__future__r   rê   Úhttp.cookiesra   r£   rú   rû   rd   Úcollections.abcr   r   r   r   r   r	   r
   Úemail.utilsr   r   Ú	functoolsr   Ú	mimetypesr   Úsecretsr   Útypingr   r   Úurllib.parser   r÷   Úanyio.to_threadÚstarlette._utilsr   Ústarlette.backgroundr   Ústarlette.concurrencyr   Ústarlette.datastructuresr   r   r   Ústarlette.requestsr   Ústarlette.typesr   r   r   r   r   r“   r–   r˜   r©   r>   r2   r3   ÚContentÚSyncContentStreamr°   rÌ   r¯   Ú	ExceptionrÏ   rÓ   r×   rv   r/   r-   ú<module>rZ     sö   ðÝ "ã Û Û Û 	Û Û 
ß [× [Ý ß 3Ý Ý  Ý ß Ý ã Û å 9Ý /Ý 7ß AÑ AÝ /ß 9Ó 9÷O$ñ O$ôd�8ô ô˜ô ô�8ô ô.	O�xô 	Oð �‰+˜
Ñ
"€Ø˜WÑ%Ð Ø" 7Ñ+Ð Ø"Ð%6Ñ6€ô=$˜ô =$ô@˜9ô ô
!˜)ô !ô
Y
�8õ Y
r/   