§
    ß·i’›  ã                  ó  — U d Z 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	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 ddlmZ ddlmZ ddlmZ ddlmZ 	 ddlZeej        ej         fZ!de"d<   n+# e#$ r#  G d„ d¦  «        Z$ e$¦   «         Zeej        fZ!Y nw xY wdZ%ej&        dk    r	  e'd¦  «         n# e#$ r dZ%Y nw xY w e(ed¦  «        Z)e)rej*        Z*n G d„ d¦  «        Z*	 ej+        Z,n# e-$ r dZ,Y nw xY wdZ.ej/        ej0        de1e2ej/        e2         f         ej3        d         f                  Z4ej5        rddl6m7Z7 ddl6m8Z8 dd l9m:Z: dd!l;m<Z<  G d"„ d#ej=        ¦  «        Z> G d$„ d%e¦  «        Z?dfd*„Z@	 dgdhd.„ZA	 didjd2„ZBdkd3„ZC	 didld8„ZDdgdmd<„ZEdnd@„ZFdodC„ZGdpdD„ZH G dE„ dFe¦  «        ZI G dG„ dHejJ        eI¦  «        ZK G dI„ dJe*eI¦  «        ZL	 	 	 	 	 	 dqdrdU„ZMdsdV„ZN	 	 	 	 	 	 	 	 	 	 	 	 	 dtdude„ZOdS )vaØ  A WSGI and HTTP server for use **during development only**. This
server is convenient to use, but is not designed to be particularly
stable, secure, or efficient. Use a dedicate WSGI server and HTTP
server when deploying to production.

It provides features like interactive debugging and code reloading. Use
``run_simple`` to start the server. Put this in a ``run.py`` script:

.. code-block:: python

    from myapp import create_app
    from werkzeug import run_simple
é    )ÚannotationsN)Údatetime)Ú	timedelta)Útimezone)ÚBaseHTTPRequestHandler)Ú
HTTPServer)Úunquote)Úurlsplité   ©Ú_log)Ú_wsgi_encoding_dance)ÚInternalServerError)Ú
uri_to_iriztuple[type[Exception], ...]Úconnection_dropped_errorsc                  ó   — e Zd Zdd„ZdS )Ú	_SslDummyÚnameÚstrÚreturnút.Anyc                ó    — t          d¦  «        ‚)NzUSSL is unavailable because this Python runtime was not compiled with SSL/TLS support.)ÚRuntimeError)Úselfr   s     úU/home/mmwave/public_html/mmwave/venv/lib/python3.11/site-packages/werkzeug/serving.pyÚ__getattr__z_SslDummy.__getattr__1   s   € Ýð2ñô ð ó    N©r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__r   © r   r   r   r   0   s(   € € € € € ð	ð 	ð 	ð 	ð 	ð 	r   r   TÚntÚcoloramaFÚforkc                  ó   — e Zd ZdS )ÚForkingMixInN)r   r    r!   r"   r   r   r'   r'   H   s   € € € € € Øˆr   r'   é€   ússl.SSLContextÚadhoc)ÚWSGIApplication)ÚWSGIEnvironment)ÚRSAPrivateKeyWithSerialization)ÚCertificatec                  ó2   — e Zd ZdZdd„Zdd„Zdd
„Zdd„ZdS )ÚDechunkedInputz8An input stream that handles Transfer-Encoding 'chunked'Úrfileút.IO[bytes]r   ÚNonec                ó0   — || _         d| _        d| _        d S )NFr   )Ú_rfileÚ_doneÚ_len)r   r1   s     r   Ú__init__zDechunkedInput.__init__c   s   € ØˆŒØˆŒ
ØˆŒ	ˆ	ˆ	r   Úboolc                ó   — dS )NTr"   ©r   s    r   ÚreadablezDechunkedInput.readableh   s   € Øˆtr   Úintc                ó  — 	 | j                              ¦   «                              d¦  «        }t          |                     ¦   «         d¦  «        }n"# t
          $ r}t          d¦  «        |‚d }~ww xY w|dk     rt          d¦  «        ‚|S )NÚlatin1é   zInvalid chunk headerr   z!Negative chunk length not allowed)r5   ÚreadlineÚdecoder=   ÚstripÚ
ValueErrorÚOSError)r   Úliner7   Úes       r   Úread_chunk_lenzDechunkedInput.read_chunk_lenk   sŽ   € ð	9Ø”;×'Ò'Ñ)Ô)×0Ò0°Ñ:Ô:ˆDÝ�t—z’z‘|”| RÑ(Ô(ˆDˆDøÝð 	9ð 	9ð 	9ÝÐ0Ñ1Ô1°qÐ8øøøøð	9øøøà�!Š8ˆ8ÝÐ=Ñ>Ô>Ð>Øˆs   ‚AA Á
A0ÁA+Á+A0ÚbufÚ	bytearrayc                ó  — d}| j         �su|t          |¦  «        k     �ra| j        dk    r|                      ¦   «         | _        | j        dk    rd| _         | j        dk    rÎt	          t          |¦  «        | j        ¦  «        }||z   t          |¦  «        k    r_| j                             t          |¦  «        |z
  ¦  «        ||d …<   | xj        t          |¦  «        |z
  z  c_        t          |¦  «        }n7| j                             |¦  «        ||||z   …<   | xj        |z  c_        ||z  }| j        dk    r,| j                             ¦   «         }|dvrt          d¦  «        ‚| j         s|t          |¦  «        k     �°a|S )Nr   T)ó   
ó   
ó   z!Missing chunk terminating newline)	r6   Úlenr7   rH   Úminr5   ÚreadrA   rE   )r   rI   rQ   ÚnÚ
terminators        r   ÚreadintozDechunkedInput.readintou   sv  € ØˆØ”*ñ "	G ­¨C©¬¢¡ØŒy˜AŠ~ˆ~ð !×/Ò/Ñ1Ô1�”	àŒy˜AŠ~ˆ~ð "�”
àŒy˜1Š}ˆ}õ �˜C™œ $¤)Ñ,Ô,�ð
 ˜!‘8�c #™hœhÒ&Ð&Ø!%¤×!1Ò!1µ#°c±(´(¸T±/Ñ!BÔ!B�C˜˜˜‘JØ�I”I¥ S¡¤¨D¡Ñ0�I”IÝ˜s™8œ8�D�Dà+/¬;×+;Ò+;¸AÑ+>Ô+>�C˜˜t a™x˜Ñ(Ø�I”I ‘N�I”IØ˜A‘I�DàŒy˜AŠ~ˆ~ð "œ[×1Ò1Ñ3Ô3�
ØÐ%<Ð<Ð<Ý!Ð"EÑFÔFÐFðE ”*ð "	G ­¨C©¬¢¡ðH ˆr   N)r1   r2   r   r3   ©r   r9   ©r   r=   )rI   rJ   r   r=   )r   r    r!   Ú__doc__r8   r<   rH   rT   r"   r   r   r0   r0   `   sj   € € € € € ØBÐBðð ð ð ð
ð ð ð ðð ð ð ð&ð &ð &ð &ð &ð &r   r0   c                  ó*  ‡ — e Zd ZU dZded<   ed*d„¦   «         Zd+d„Zd,d
„Zd,ˆ fd„Z		 d-d.d„Z
d/ˆ fd„Zd*d„Zd0d„Ze                     d„ g  ed¦  «        ¢ edd¦  «        ¢D ¦   «         ¦  «        Zde ed¦  «        <   d1d2d"„Zd3d%„Zd3d&„Zd4d)„Zˆ xZS )5ÚWSGIRequestHandlerz3A request handler that implements WSGI dispatching.ÚBaseWSGIServerÚserverr   r   c                ó   — | j         j        S ©N)r[   Ú_server_versionr;   s    r   Úserver_versionz!WSGIRequestHandler.server_version£   s   € àŒ{Ô*Ð*r   r,   c                óô  — t          | j        ¦  «        }| j        j        €dnd}| j        sd| _        n(t          | j        t          ¦  «        r| j        df| _        |j        s|j        rd|j        › |j        › �}n|j        }t          |¦  «        }i dd“d|“d	| j
        “d
t          j        “d| j        j        “d| j        j        “dd“d| j        “d| j        “d| j        “dd“dt%          |¦  «        “dt%          |j        ¦  «        “dt%          | j        ¦  «        “dt%          | j        ¦  «        “d|                      ¦   «         “d|                      ¦   «         “| j        j        d         t          | j        j        d         ¦  «        | j        dœ¥}| j                             ¦   «         D ]g\  }}d|v rŒ
|                     ¦   «                              dd¦  «        }|                     dd¦  «        }|dvrd |› �}||v r||         › d!|› �}|||<   Œh|                     d"d¦  «                             ¦   «                              ¦   «         d#k    rd$|d%<   t?          |d	         ¦  «        |d	<   |j        r|j        r
|j        |d&<   	 | j                              d$¬'¦  «        }|�tC          j"        |¦  «        |d(<   n6# tF          $ r | j         $                    d)d*¦  «         Y ntJ          $ r Y nw xY w|S )+NÚhttpÚhttps)ú<local>r   r   ú/zwsgi.version)r   r   zwsgi.url_schemez
wsgi.inputzwsgi.errorszwsgi.multithreadzwsgi.multiprocesszwsgi.run_onceFzwerkzeug.socketÚSERVER_SOFTWAREÚREQUEST_METHODÚSCRIPT_NAMEÚ Ú	PATH_INFOÚQUERY_STRINGÚREQUEST_URIÚRAW_URIÚREMOTE_ADDRÚREMOTE_PORTr   )ÚSERVER_NAMEÚSERVER_PORTÚSERVER_PROTOCOLÚ_ú-z
)ÚCONTENT_TYPEÚCONTENT_LENGTHÚHTTP_ú,ÚHTTP_TRANSFER_ENCODINGÚchunkedTzwsgi.input_terminatedÚ	HTTP_HOST)Úbinary_formÚSSL_CLIENT_CERTÚerrorz&Cannot fetch SSL peer certificate info)&r
   Úpathr[   Ússl_contextÚclient_addressÚ
isinstancer   ÚschemeÚnetlocr	   r1   ÚsysÚstderrÚmultithreadÚmultiprocessÚ
connectionr_   Úcommandr   ÚqueryÚaddress_stringÚport_integerÚserver_addressÚrequest_versionÚheadersÚitemsÚupperÚreplaceÚgetrC   Úlowerr0   ÚgetpeercertÚsslÚDER_cert_to_PEM_certrD   ÚlogÚAttributeError)r   Úrequest_urlÚ
url_schemeÚ	path_infoÚenvironÚkeyÚvalueÚ	peer_certs           r   Úmake_environzWSGIRequestHandler.make_environ§   s³  € Ý˜tœyÑ)Ô)ˆØ#œ{Ô6Ð>�V�VÀGˆ
àÔ"ð 	;Ø"0ˆDÔÐÝ˜Ô+­SÑ1Ô1ð 	;Ø#'Ô#6¸Ð":ˆDÔð
 Ô!ð 	) kÔ&8ð 	)ØB˜KÔ.ÐB°Ô0@ÐBÐBˆIˆIà#Ô(ˆIå˜IÑ&Ô&ˆ	ð$
Ø˜Fð$
à˜zð$
ð ˜$œ*ð$
ð �3œ:ð	$
ð
  ¤Ô 7ð$
ð   ¤Ô!9ð$
ð ˜Uð$
ð ˜tœð$
ð ˜tÔ2ð$
ð ˜dœlð$
ð ˜2ð$
ð Õ-¨iÑ8Ô8ð$
ð Õ0°Ô1BÑCÔCð$
ð Õ/°´	Ñ:Ô:ð$
ð" Õ+¨D¬IÑ6Ô6ð#$
ð$ ˜4×.Ò.Ñ0Ô0ð%$
ð& ˜4×,Ò,Ñ.Ô.ð'$
ð(  œ;Ô5°aÔ8Ý˜tœ{Ô9¸!Ô<Ñ=Ô=Ø#Ô3ð-$
ð $
ð $
ˆð2 œ,×,Ò,Ñ.Ô.ð 
	!ð 
	!‰JˆC�Ø�cˆzˆzØà—)’)‘+”+×%Ò% c¨3Ñ/Ô/ˆCØ—M’M &¨"Ñ-Ô-ˆEØÐ<Ð<Ð<Ø#˜c�m�m�Ø˜'�>�>Ø& sœ|Ð5Ð5¨eÐ5Ð5�EØ ˆG�C‰LˆLà�;Š;Ð/°Ñ4Ô4×:Ò:Ñ<Ô<×BÒBÑDÔDÈ	ÒQÐQØ/3ˆGÐ+Ñ,Ý$2°7¸<Ô3HÑ$IÔ$IˆG�LÑ!ð Ôð 	6 +Ô"4ð 	6Ø#.Ô#5ˆG�KÑ ð	ð œ×3Ò3ÀÐ3ÑEÔEˆIØÐ$å-0Ô-EÀiÑ-PÔ-P�Ð)Ñ*øøÝð 	Oð 	Oð 	OàŒK�OŠO˜GÐ%MÑNÔNÐNÐNÐNÝð 	ð 	ð 	àˆDð	øøøð ˆs   Ê4K Ë%K5Ë)	K5Ë4K5r3   c                ó  ‡ ‡‡‡‡‡	‡
‡‡— ‰ j                              dd¦  «                             ¦   «                              ¦   «         dk    r‰ j                             d¦  «         ‰                      ¦   «         x‰ _        Šd Šd Šd Š
d ŠdŠdˆˆˆˆˆ ˆ
ˆfd
„Šdˆˆˆˆfd„	Š	dˆˆˆˆ ˆ	ˆfd„}	  |‰ j        j	        ¦  «         d S # t          $ r!}‰                      |‰¦  «         Y d }~d S d }~wt          $ r“}‰ j        j        r‚ ‰
�	‰rd‰ _        	 ‰
€d Šd Š |t          ¦   «         ¦  «         n# t          $ r Y nw xY wddlm}  ||¦  «                             ¦   «         }‰ j                             dd|› �¦  «         Y d }~d S d }~ww xY w)NÚExpectrh   z100-continues   HTTP/1.1 100 Continue

FÚdataÚbytesr   r3   c                ó(  •— ‰€
J d¦   «         ‚‰
€
J d¦   «         ‚‰�€‰Š‰
Š		 ‰                      d d¦  «        \  }}n# t          $ r ‰d}}Y nw xY wt          |¦  «        }‰                     ||¦  «         t	          ¦   «         }‰	D ]B\  }}‰                     ||¦  «         |                     |                     ¦   «         ¦  «         ŒCd|v sB‰d         dk    s6d|cxk    rdk     s)n |d	v s#‰j        d
k    rdŠ‰                     dd¦  «         ‰                     dd¦  «         ‰ 	                    ¦   «          t          | t          ¦  «        s
J d¦   «         ‚| r ‰rh‰j                             t          t          | ¦  «        ¦  «        dd …                              ¦   «         ¦  «         ‰j                             d¦  «         ‰j                             | ¦  «         ‰r‰j                             d¦  «         ‰j                             ¦   «          d S )Nzwrite() before start_responser   rh   zcontent-lengthrf   ÚHEADéd   éÈ   >   é0  éÌ   úHTTP/1.1TzTransfer-Encodingry   Ú
ConnectionÚclosezapplications must write bytesé   rM   )ÚsplitrD   r=   Úsend_responseÚsetÚsend_headerÚaddr”   Úprotocol_versionÚend_headersr�   r¥   ÚwfileÚwriteÚhexrO   ÚencodeÚflush)r¤   Úcode_strÚmsgÚcodeÚheader_keysrž   rŸ   Úchunk_responser�   Úheaders_sentÚheaders_setr   Ústatus_sentÚ
status_sets          €€€€€€€r   r¸   z*WSGIRequestHandler.run_wsgi.<locals>.write  s[  ø€ àÐ)Ð)Ð+JÑ)Ô)Ð)ØÐ*Ð*Ð,KÑ*Ô*Ð*ØÑ"Ø(�Ø*�ð4Ø$/×$5Ò$5°d¸AÑ$>Ô$>‘M�H˜c˜cøÝ!ð 4ð 4ð 4Ø$/°˜c�H�H�Hð4øøøå˜8‘}”}�Ø×"Ò" 4¨Ñ-Ô-Ð-Ý!™eœe�Ø".ð 1ð 1‘J�C˜Ø×$Ò$ S¨%Ñ0Ô0Ð0Ø—O’O C§I¢I¡K¤KÑ0Ô0Ð0Ð0ð )¨KÐ7Ð7Ø"Ð#3Ô4¸Ò>Ð>Ø 4Ð-Ð-Ò-Ð-¨#Ò-Ð-Ð-Ð-Ø :Ð-Ð-àÔ-°Ò;Ð;à%)�NØ×$Ò$Ð%8¸)ÑDÔDÐDð × Ò  ¨wÑ7Ô7Ð7Ø× Ò Ñ"Ô"Ð"å˜d¥EÑ*Ô*ÐKÐKÐ,KÑKÔKÐKàð .Ø!ð .Ø”J×$Ò$¥S­¨T©¬¡^¤^°A°B°BÔ%7×%>Ò%>Ñ%@Ô%@ÑAÔAÐAØ”J×$Ò$ WÑ-Ô-Ð-à”
× Ò  Ñ&Ô&Ð&à!ð .Ø”J×$Ò$ WÑ-Ô-Ð-àŒJ×ÒÑÔÐÐÐs   ¢< ¼AÁAc                ó”   •— |r/	 ‰r!|d                               |d         ¦  «        ‚	 d }n# d }w xY w‰rt          d¦  «        ‚| Š|Š‰S )Nr   r¯   zHeaders already set)Úwith_tracebackÚAssertionError)Ústatusr�   Úexc_inforÁ   rÂ   rÄ   r¸   s      €€€€r   Ústart_responsez3WSGIRequestHandler.run_wsgi.<locals>.start_response<  sw   ø€ àð <ð$Ø#ð FØ& qœk×8Ò8¸À!¼ÑEÔEÐEðFð  $�H�Hø˜t�H�O�O�O�OØð <Ý$Ð%:Ñ;Ô;Ð;ØˆJØ!ˆKØˆLs   …#, ¬0Úappr+   c                ó$  •—  | ‰‰
¦  «        }	 |D ]} ‰|¦  «         Œ‰s ‰d¦  «         ‰r‰	j                              d¦  «         t          j        ¦   «         }|                     ‰	j        t          j        ¦  «         d}d}|                     d¬¦  «        rV‰	j         	                    d¦  «        }|t          |¦  «        z  }|dz  }|r|dk    s|d	k    rn|                     d¬¦  «        °V|                     ¦   «          t          |d
¦  «        r|                     ¦   «          d S d S # t          j        ¦   «         }|                     ‰	j        t          j        ¦  «         d}d}|                     d¬¦  «        rV‰	j         	                    d¦  «        }|t          |¦  «        z  }|dz  }|r|dk    s|d	k    rn|                     d¬¦  «        °V|                     ¦   «          t          |d
¦  «        r|                     ¦   «          w w xY w)Nr   s   0

r   g{®Gáz„?)Útimeouti€–˜ r   l    d(	 iè  r®   )r·   r¸   Ú	selectorsÚDefaultSelectorÚregisterrˆ   Ú
EVENT_READÚselectr1   rQ   rO   r®   Úhasattr)rË   Úapplication_iterr¤   ÚselectorÚ
total_sizeÚtotal_readsrÀ   r�   rÁ   r   rÊ   r¸   s         €€€€€€r   Úexecutez,WSGIRequestHandler.run_wsgi.<locals>.executeJ  s]  ø€ Ø"˜s 7¨NÑ;Ô;Ðð#-Ø,ð  ð  �DØ�E˜$‘K”K�K�KØ#ð Ø�E˜#‘J”J�JØ!ð 3Ø”J×$Ò$ \Ñ2Ô2Ð2õ %Ô4Ñ6Ô6�Ø×!Ò! $¤/µ9Ô3GÑHÔHÐHØ�
Ø�ð —o’o¨d�oÑ3Ô3ð 	àœ:Ÿ?š?¨:Ñ6Ô6�DØ¥# d¡)¤)Ñ+�JØ 1Ñ$�Kð  ð  :°Ò#?Ð#?À;ÐQUÒCUÐCUØð —o’o¨d�oÑ3Ô3ð 	ð —’Ñ Ô Ð åÐ+¨WÑ5Ô5ð -Ø$×*Ò*Ñ,Ô,Ð,Ð,Ð,ð-ð -øõ) %Ô4Ñ6Ô6�Ø×!Ò! $¤/µ9Ô3GÑHÔHÐHØ�
Ø�ð —o’o¨d�oÑ3Ô3ð 	àœ:Ÿ?š?¨:Ñ6Ô6�DØ¥# d¡)¤)Ñ+�JØ 1Ñ$�Kð  ð  :°Ò#?Ð#?À;ÐQUÒCUÐCUØð —o’o¨d�oÑ3Ô3ð 	ð —’Ñ Ô Ð åÐ+¨WÑ5Ô5ð -Ø$×*Ò*Ñ,Ô,Ð,Ð,ð-øøøs   �9D, Ä,C#HTr   )ÚDebugTracebackr}   zError on request:
)r¤   r¥   r   r3   r]   )rË   r+   r   r3   )r�   r“   r”   rC   r·   r¸   r¡   r�   r[   rË   r   Úconnection_droppedÚ	ExceptionÚpassthrough_errorsÚclose_connectionr   Údebug.tbtoolsrÙ   Úrender_traceback_textr˜   )r   rØ   rG   rÙ   r½   rÀ   r�   rÁ   rÂ   rÊ   rÃ   rÄ   r¸   s   `    @@@@@@@@r   Úrun_wsgizWSGIRequestHandler.run_wsgiø   s  øøøøøøøøø€ ØŒ<×Ò˜H bÑ)Ô)×/Ò/Ñ1Ô1×7Ò7Ñ9Ô9¸^ÒKÐKØŒJ×ÒÐ=Ñ>Ô>Ð>à!%×!2Ò!2Ñ!4Ô!4Ð4ˆŒ�wØ!%ˆ
Ø48ˆØ"&ˆØ59ˆØ$ˆð7	ð 7	ð 7	ð 7	ð 7	ð 7	ð 7	ð 7	ð 7	ð 7	ð 7	ð 7	ðr	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð%	-ð %	-ð %	-ð %	-ð %	-ð %	-ð %	-ð %	-ð %	-ð %	-ð %	-ðN	BØˆG�D”K”OÑ$Ô$Ð$Ð$Ð$øÝ(ð 	0ð 	0ð 	0Ø×#Ò# A wÑ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/øøøøÝð 	Bð 	Bð 	BØŒ{Ô-ð ØàÐ&¨>Ð&Ø(,�Ô%ðð Ð&Ø!%�JØ"&�KØ�Õ+Ñ-Ô-Ñ.Ô.Ð.Ð.øÝð ð ð Ø�ðøøøð 6Ð5Ð5Ð5Ð5Ð5à �. Ñ#Ô#×9Ò9Ñ;Ô;ˆCØŒK�OŠO˜GÐ%@¸3Ð%@Ð%@ÑAÔAÐAÐAÐAÐAÐAÐAÐAøøøøð)	BøøøsI   Â-C Ã
F
ÃC*Ã*F
Ã7FÄD.Ä-FÄ.
D;Ä8FÄ:D;Ä;AFÆF
c                óH  •— 	 t          ¦   «                              ¦   «          dS # t          t          j        f$ r }|                      |¦  «         Y d}~dS d}~wt          $ r>}| j        j        �&t          |¦  «        r|  
                    d|¦  «         n‚ Y d}~dS d}~ww xY w)z/Handles a request ignoring dropped connections.NzSSL error occurred: %s)ÚsuperÚhandleÚConnectionErrorÚsocketrÍ   rÚ   rÛ   r[   r   Úis_ssl_errorÚ	log_error)r   rG   Ú	__class__s     €r   rã   zWSGIRequestHandler.handle‹  sÉ   ø€ ð	Ý‰GŒG�NŠNÑÔÐÐÐøÝ¥¤Ð0ð 	'ð 	'ð 	'Ø×#Ò# AÑ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&øøøøÝð 	ð 	ð 	ØŒ{Ô&Ð2µ|ÀA±´Ð2Ø—’Ð7¸Ñ;Ô;Ð;Ð;àð <Ð;Ð;Ð;Ð;Ð;øøøøð	øøøs    ƒ % ¥B!»AÁB!Á#3BÂB!Nr}   ÚBaseExceptionr�   úWSGIEnvironment | Nonec                ó   — dS )z`Called if the connection was closed by the client.  By default
        nothing happens.
        Nr"   )r   r}   r�   s      r   rÚ   z%WSGIRequestHandler.connection_dropped—  s   € € € r   r   r   c                ót   •— |                      d¦  «        r| j        S t          t          ¦   «         |¦  «        S )NÚdo_)Ú
startswithrà   Úgetattrrâ   )r   r   rè   s     €r   r   zWSGIRequestHandler.__getattr__ž  s5   ø€ à�?Š?˜5Ñ!Ô!ð 	!Ø”=Ð õ •u‘w”w Ñ%Ô%Ð%r   c                ój   — t          | dd ¦  «        r| j        d         S | j        sdS | j        d         S )Nr�   rm   rc   r   )rï   r�   r€   r;   s    r   r‹   z!WSGIRequestHandler.address_string¦  sA   € Ý�4˜ DÑ)Ô)ð 	/Ø”< Ô.Ð.àÔ"ð 	Ø�9àÔ" 1Ô%Ð%r   r=   c                ó   — | j         d         S )Nr   )r€   r;   s    r   rŒ   zWSGIRequestHandler.port_integer¯  s   € ØÔ" 1Ô%Ð%r   c                ó   — i | ]	}|d |d›�“Œ
S )z\xÚ02xr"   )Ú.0Úcs     r   ú
<dictcomp>zWSGIRequestHandler.<dictcomp>´  s"   € ÐFÐFÐF˜aˆˆM�!ˆMˆMˆMÐFÐFÐFr   é    é   é    z\\ú\rs   r¾   ú	int | strÚsizec                óH  — 	 t          | j        ¦  «        }| j        › d|› d| j        › �}n# t          $ r
 | j        }Y nw xY w|                     | j        ¦  «        }t          |¦  «        }|d         dk    rt          |d¦  «        }n�|dk    rnz|dk    rt          |d¦  «        }nc|d         dk    rt          |d	¦  «        }nF|d
k    rt          |d¦  «        }n/|d         dk    rt          |dd¦  «        }nt          |dd¦  «        }|  
                    dd|||¦  «         d S )Nú r   Ú1ÚboldÚ200Ú304ÚcyanÚ3ÚgreenÚ404ÚyellowÚ4ÚredÚmagentaÚinfoz
"%s" %s %s)r   r~   r‰   rŽ   r™   ÚrequestlineÚ	translateÚ_control_char_tabler   Ú_ansi_styler˜   )r   r¾   rü   r~   r½   s        r   Úlog_requestzWSGIRequestHandler.log_request¸  sM  € ð	#Ý˜dœiÑ(Ô(ˆDØ”\ÐAÐA DÐAÐA¨4Ô+?ÐAÐAˆCˆCøÝð 	#ð 	#ð 	#àÔ"ˆCˆCˆCð	#øøøð
 �mŠm˜DÔ4Ñ5Ô5ˆÝ�4‰yŒyˆà�Œ7�cŠ>ˆ>Ý˜c 6Ñ*Ô*ˆCˆCØ�UŠ]ˆ]ØØ�UŠ]ˆ]Ý˜c 6Ñ*Ô*ˆCˆCØ�!ŒW˜Š^ˆ^Ý˜c 7Ñ+Ô+ˆCˆCØ�UŠ]ˆ]Ý˜c 8Ñ,Ô,ˆCˆCØ�!ŒW˜Š^ˆ^Ý˜c 6¨5Ñ1Ô1ˆCˆCå˜c 6¨9Ñ5Ô5ˆCà�Š�˜ s¨D°$Ñ7Ô7Ð7Ð7Ð7s   ‚(+ «?¾?ÚformatÚargsc                ó$   —  | j         d|g|¢R Ž  d S )Nr}   ©r˜   ©r   r  r  s      r   rç   zWSGIRequestHandler.log_errorÕ  s$   € ØˆŒ�˜&Ð( 4Ð(Ð(Ð(Ð(Ð(Ð(r   c                ó$   —  | j         d|g|¢R Ž  d S )Nr  r  r  s      r   Úlog_messagezWSGIRequestHandler.log_messageØ  s$   € ØˆŒ�˜Ð' $Ð'Ð'Ð'Ð'Ð'Ð'r   ÚtypeÚmessagec           	     ó¨   — |                       ¦   «                              dd¦  «        }t          ||› d|                      ¦   «         › d|› d�g|¢R Ž  d S )Nú%z%%z - - [z] ú
)r‹   r’   r   Úlog_date_time_string)r   r  r  r  r‹   s        r   r˜   zWSGIRequestHandler.logÛ  sy   € à×,Ò,Ñ.Ô.×6Ò6°s¸DÑAÔAˆÝØØÐOÐO T×%>Ò%>Ñ%@Ô%@ÐOÐOÀGÐOÐOÐOð	
ð ð	
ð 	
ð 	
ð 	
ð 	
ð 	
r   )r   r   )r   r,   ©r   r3   r]   )r}   ré   r�   rê   r   r3   r   rV   )rs   rs   )r¾   rû   rü   rû   r   r3   )r  r   r  r   r   r3   ©r  r   r  r   r  r   r   r3   )r   r    r!   rW   Ú__annotations__Úpropertyr_   r¡   rà   rã   rÚ   r   r‹   rŒ   r   Ú	maketransÚranger  Úordr  rç   r  r˜   Ú__classcell__©rè   s   @r   rY   rY   ž   s»  ø€ € € € € € Ø=Ð=àÐÐÑàð+ð +ð +ñ „Xð+ðOð Oð Oð OðbQBð QBð QBð QBðf
ð 
ð 
ð 
ð 
ð 
ð GKðð ð ð ð ð&ð &ð &ð &ð &ð &ð&ð &ð &ð &ð&ð &ð &ð &ð Ÿ-š-ØFÐFÐ#E U U¨4¡[¤[Ð#E°5°5¸¸tÑ3DÔ3DÐ#EÐFÑFÔFñô Ðð &+Ð˜˜˜D™	œ	Ñ"ð8ð 8ð 8ð 8ð 8ð:)ð )ð )ð )ð(ð (ð (ð (ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r   rY   rŸ   r   Ústylesr   c                óV   — t           s| S dddddddœ}|D ]}d||         › d	| › �} Œ| › d
�S )Nr   é   r÷   é!   é#   é$   )r   r	  r  r  r
  r  z[Úmz[0m)Ú_log_add_style)rŸ   r'  ÚcodesÚstyles       r   r  r  å  sj   € Ýð Øˆð ØØØØØðð €Eð ð /ð /ˆØ.˜˜eœÐ.Ð. uÐ.Ð.ˆˆàÐÐÐÐr   Úcnú
str | Noneú2tuple[Certificate, RSAPrivateKeyWithSerialization]c           	     ó®  — 	 ddl m} ddlm} ddlm} ddlm} ddlm	} n# t          $ r t          d¦  «        d ‚w xY w |¦   «         }|                     dd	|¬
¦  «        }| €d} |                     |                     |j        d¦  «        |                     |j        | ¦  «        g¦  «        } |¦   «         }|                     ¦   «                              |¦  «                             |¦  «                             |                     ¦   «         ¦  «                             |                     ¦   «         ¦  «                             t1          j        t4          j        ¦  «        ¦  «                             t1          j        t4          j        ¦  «        t;          d¬¦  «        z   ¦  «                             |                     |j         g¦  «        d¬¦  «                             | !                    | "                    | ¦  «        | "                    d| › �¦  «        g¦  «        d¬¦  «         #                    || $                    ¦   «         |¦  «        }	|	|fS )Nr   )Úx509)Údefault_backend)Úhashes)Úrsa)ÚNameOIDz<Using ad-hoc certificates requires the cryptography library.i  i   )Úpublic_exponentÚkey_sizeÚbackendÚ*zDummy Certificateim  )ÚdaysF)Úcriticalz*.)%Úcryptographyr5  Úcryptography.hazmat.backendsr6  Úcryptography.hazmat.primitivesr7  Ú)cryptography.hazmat.primitives.asymmetricr8  Úcryptography.x509.oidr9  ÚImportErrorÚ	TypeErrorÚgenerate_private_keyÚNameÚNameAttributeÚORGANIZATION_NAMEÚCOMMON_NAMEÚCertificateBuilderÚsubject_nameÚissuer_nameÚ
public_keyÚserial_numberÚrandom_serial_numberÚnot_valid_beforeÚdtÚnowr   ÚutcÚnot_valid_afterr   Úadd_extensionÚExtendedKeyUsageÚOID_SERVER_AUTHÚSubjectAlternativeNameÚDNSNameÚsignÚSHA256)
r1  r5  r6  r7  r8  r9  r<  ÚpkeyÚsubjectÚcerts
             r   Úgenerate_adhoc_ssl_pairra  ø  s_  € ð	Ø%Ð%Ð%Ð%Ð%Ð%Ø@Ð@Ð@Ð@Ð@Ð@Ø9Ð9Ð9Ð9Ð9Ð9ØAÐAÐAÐAÐAÐAØ1Ð1Ð1Ð1Ð1Ð1Ð1øÝð ð ð ÝØJñ
ô 
àð	ðøøøð
 ˆoÑÔ€GØ×#Ò#Ø¨°gð $ñ ô €Dð
 
€zØˆà�iŠià×Ò˜wÔ8Ð:MÑNÔNØ×Ò˜wÔ2°BÑ7Ô7ð	
ñô €Gð ˆoÑÔ€Gà×ÒÑ!Ô!ß	Š�gÑ	Ô	ß	Š�WÑ	Ô	ß	Š�D—O’OÑ%Ô%Ñ	&Ô	&ß	Š�t×0Ò0Ñ2Ô2Ñ	3Ô	3ß	Ò	�"œ&¥¤Ñ.Ô.Ñ	/Ô	/ß	Š�œ¥¤Ñ-Ô-µ	¸sÐ0CÑ0CÔ0CÑCÑ	DÔ	Dß	Š�t×,Ò,¨dÔ.BÐ-CÑDÔDÈuˆÑ	UÔ	Uß	ŠØ×'Ò'¨¯ª°bÑ)9Ô)9¸4¿<º<È	ÈRÈ	È	Ñ;RÔ;RÐ(SÑTÔTØð 
ñ 

ô 

÷ 
Šˆd�F—M’M‘O”O WÑ	-Ô	-ð 	ð �ˆ:Ðs   ‚! ¡<Ú	base_pathÚhostútuple[str, str]c           	     óþ  — |�|}t          |¬¦  «        \  }}ddlm} | › d�}| › d�}t          |d¦  «        5 }|                     |                     |j        j        ¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   t          |d¦  «        5 }|                     |                     |j        j        |j	        j
        |                     ¦   «         ¬¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   ||fS )	aÂ  Creates an SSL key for development.  This should be used instead of
    the ``'adhoc'`` key which generates a new cert on each server start.
    It accepts a path for where it should store the key and cert and
    either a host or CN.  If a host is given it will use the CN
    ``*.host/CN=host``.

    For more information see :func:`run_simple`.

    .. versionadded:: 0.9

    :param base_path: the path to the certificate and key.  The extension
                      ``.crt`` is added for the certificate, ``.key`` is
                      added for the key.
    :param host: the name of the host.  This can be used as an alternative
                 for the `cn`.
    :param cn: the `CN` to use.
    N)r1  r   ©Úserializationz.crtz.keyÚwb©Úencodingr  Úencryption_algorithm)ra  rB  rg  Úopenr¸   Úpublic_bytesÚEncodingÚPEMÚprivate_bytesÚPrivateFormatÚTraditionalOpenSSLÚNoEncryption)	rb  rc  r1  r`  r^  rg  Ú	cert_fileÚ	pkey_fileÚfs	            r   Úmake_ssl_devcertrw  )  s—  € ð* ÐØˆÝ(¨BÐ/Ñ/Ô/�J€Dˆ$à<Ð<Ð<Ð<Ð<Ð<àÐ"Ð"Ð"€IØÐ"Ð"Ð"€Iå	ˆi˜Ñ	Ô	ð ? !Ø	�Š�×!Ò! -Ô"8Ô"<Ñ=Ô=Ñ>Ô>Ð>ð?ð ?ð ?ñ ?ô ?ð ?ð ?ð ?ð ?ð ?ð ?øøøð ?ð ?ð ?ð ?å	ˆi˜Ñ	Ô	ð 
 !Ø	�ŠØ×ÒØ&Ô/Ô3Ø$Ô2ÔEØ%2×%?Ò%?Ñ%AÔ%Að ñ ô ñ	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð �iÐÐs$   ¸3A7Á7A;Á>A;ÂAC0Ã0C4Ã7C4c            	     ó–  — ddl } ddl}t          ¦   «         \  }}ddlm} |                     ¦   «         \  }}|                     ¦   «         \  }}|                      t          j        |¦  «         |                      t          j        |¦  «         t          j	        || 
                    |j        j        ¦  «        ¦  «         t          j	        ||                     |j        j        |j        j        |                     ¦   «         ¬¦  «        ¦  «         t          j        |¦  «         t          j        |¦  «         t%          ||¦  «        }	|	S )z:Generates an adhoc SSL context for the development server.r   Nrf  ri  )ÚatexitÚtempfilera  rB  rg  ÚmkstemprÐ   ÚosÚremover¸   rm  rn  ro  rp  rq  rr  rs  r®   Úload_ssl_context)
ry  rz  r`  r^  rg  Úcert_handlert  Úpkey_handleru  Úctxs
             r   Úgenerate_adhoc_ssl_contextr‚  U  s9  € à€M€M€MØ€O€O€Oå(Ñ*Ô*�J€Dˆ$à<Ð<Ð<Ð<Ð<Ð<à%×-Ò-Ñ/Ô/Ñ€K�Ø%×-Ò-Ñ/Ô/Ñ€K�Ø
‡O‚O•B”I˜yÑ)Ô)Ð)Ø
‡O‚O•B”I˜yÑ)Ô)Ð)å„Hˆ[˜$×+Ò+¨MÔ,BÔ,FÑGÔGÑHÔHÐHÝ„HØØ×ÒØ"Ô+Ô/Ø Ô.ÔAØ!.×!;Ò!;Ñ!=Ô!=ð 	ñ 	
ô 	
ñô ð õ „Hˆ[ÑÔÐÝ„Hˆ[ÑÔÐÝ
˜9 iÑ
0Ô
0€CØ€Jr   rt  ru  Úprotocolú
int | Nonec                óv   — |€t           j        }t          j        |¦  «        }|                     | |¦  «         |S )aã  Loads SSL context from cert/private key files and optional protocol.
    Many parameters are directly taken from the API of
    :py:class:`ssl.SSLContext`.

    :param cert_file: Path of the certificate to use.
    :param pkey_file: Path of the private key to use. If not given, the key
                      will be obtained from the certificate file.
    :param protocol: A ``PROTOCOL`` constant from the :mod:`ssl` module.
        Defaults to :data:`ssl.PROTOCOL_TLS_SERVER`.
    )r–   ÚPROTOCOL_TLS_SERVERÚ
SSLContextÚload_cert_chain)rt  ru  rƒ  r�  s       r   r~  r~  s  s<   € ð ÐÝÔ*ˆå
Œ.˜Ñ
"Ô
"€CØ×Ò˜	 9Ñ-Ô-Ð-Ø€Jr   r}   úException | Noner9   c                óœ   — | €1t          j        t          t          j        ¦   «         d         ¦  «        } t          | t          j        ¦  «        S )z?Checks if the given error (or the current one) is an SSL error.Nr   )ÚtÚcastrÛ   r„   rÉ   r�   r–   ÚSSLError)r}   s    r   ræ   ræ   ˆ  s5   € à€}Ý”•y¥#¤,¡.¤.°Ô"3Ñ4Ô4ˆÝ�e�Sœ\Ñ*Ô*Ð*r   Úportr=   úsocket.AddressFamilyc                ó¦   — |                       d¦  «        rt          j        S d| v r!t          t          d¦  «        rt          j        S t          j        S )zUReturn ``AF_INET4``, ``AF_INET6``, or ``AF_UNIX`` depending on
    the host and port.zunix://ú:ÚAF_INET6)rî   rå   ÚAF_UNIXrÓ   r’  ÚAF_INET)rc  rŽ  s     r   Úselect_address_familyr•  �  sG   € ð ‡‚�yÑ!Ô!ð ÝŒ~ÐØ	�ˆˆ�¥¨Ñ4Ô4ˆÝŒÐÝŒ>Ðr   Úfamilyútuple[str, int] | strc                ó2  — |t           k    r8t          j                             |                      d¦  «        d         ¦  «        S 	 t          j        | ||t
          j        t
          j        ¦  «        }n# t
          j	        $ r | |fcY S w xY w|d         d         S )zVReturn a fully qualified socket address that can be passed to
    :func:`socket.bind`.ú://r¯   r   é   )
Úaf_unixr|  r~   ÚabspathÚ	partitionrå   ÚgetaddrinfoÚSOCK_STREAMÚIPPROTO_TCPÚgaierror)rc  rŽ  r–  Úress       r   Úget_sockaddrr£  ™  s›   € ð
 •ÒÐåŒw�Š˜tŸ~š~¨eÑ4Ô4°QÔ7Ñ8Ô8Ð8ðÝÔ Ø�$˜¥Ô 2µFÔ4Fñ
ô 
ˆˆøõ Œ?ð ð ð Ø�TˆzÐÐÐðøøøàˆqŒ6�!Œ9Ðs   Á,A2 Á2BÂBc                ób  — | t           j        k    rdnd}t          j         | t           j        ¦  «        5 }	 |                     |df¦  «         n0# t          $ r# | t           j        k    rdndcY cddd¦  «         S w xY w|                     ¦   «         d         cddd¦  «         S # 1 swxY w Y   dS )zˆGet the IP address of an external interface. Used when binding to
    0.0.0.0 or ::1 to show a more useful URL.

    :meta private:
    zfd31:f903:5ab5:1::1z10.253.155.219i2ã  z::1ú	127.0.0.1Nr   )rå   r’  Ú
SOCK_DGRAMÚconnectrE   Úgetsockname)r–  rc  Úss      r   Úget_interface_iprª  ª  s#  € ð %+­f¬oÒ$=Ð$=Ð Ð ÐCS€Då	Œ�v�vÔ0Ñ	1Ô	1ð "°Qð	GØ�IŠI�t˜U�mÑ$Ô$Ð$Ð$øÝð 	Gð 	Gð 	GØ"¥f¤oÒ5Ð5�5�5¸;ÐFÐFð	"ð "ð "ð "ñ "ô "ð "ð "ð	Gøøøð �}Š}‰Œ˜qÔ!ð"ð "ð "ð "ñ "ô "ð "ð "ð "ð "ð "ð "øøøð "ð "ð "ð "ð "ð "s4   ´B$¶AÁB$ÁA;Á,B$Á:A;Á;B$Â$B(Â+B(c                  óh   ‡ — e Zd ZdZdZdZeZdZ	 	 	 	 d$d%ˆ fd„Z	d&d„Z
d'd(ˆ fd„Zd)ˆ fd"„Zd*d#„Zˆ xZS )+rZ   zuA WSGI server that that handles one request at a time.

    Use :func:`make_server` to create a server instance.
    FTNrc  r   rŽ  r=   rË   r+   Úhandlerútype[WSGIRequestHandler] | NonerÜ   r9   r   ú_TSSLContextArg | NoneÚfdr„  r   r3   c                ó"  •— |€t           }dt          |¦  «        vr| j        s| j        rd|_        || _        || _        || _        || _        t          ||¦  «        x| _
        }t          |t          |¦  «        |¦  «        }	|t          k    rO|€Mt          j        t           |	¦  «        }	t"          j                             |	¦  «        rt#          j        |	¦  «         t+          ¦   «                              |	|d¬¦  «         |�€	 |                      ¦   «          |                      ¦   «          �n9# t2          $ r·}
|                      ¦   «          t7          |
j        t:          j        ¬¦  «         |
j        t>          j         k    rPt7          d|› d�t:          j        ¬¦  «         t:          j!        dk    r!|d	k    rt7          d
t:          j        ¬¦  «         t;          j"        d¦  «         Y d }
~
n}d }
~
wtF          $ r |                      ¦   «          ‚ w xY w|                      ¦   «          tI          j%        ||tH          j&        ¦  «        | _$        | j$         '                    ¦   «         | _(        |t          k    r| j(        d         | _        |�\tS          |tT          ¦  «        r
tW          |Ž }n|dk    rtY          ¦   «         }| -                    | j$        d¬¦  «        | _$        || _.        nd | _.        dd l/}d|j0         1                    d¦  «        › �| _2        d S )Nrµ   r¬   F)Úbind_and_activate)ÚfilezPort zp is in use by another program. Either identify and stop that program, or start the server with a different port.Údarwiniˆ  zPOn macOS, try searching for and disabling 'AirPlay Receiver' in System Settings.r   r*   T)Úserver_sider   z	Werkzeug/Úwerkzeug)3rY   Úvarsr†   r‡   rµ   rc  rŽ  rË   rÜ   r•  Úaddress_familyr£  r=   r›  r‹  rŒ  r   r|  r~   ÚexistsÚunlinkrâ   r8   Úserver_bindÚserver_activaterE   Úserver_closeÚprintÚstrerrorr„   r…   ÚerrnoÚ
EADDRINUSEÚplatformÚexitré   rå   ÚfromfdrŸ  r¨  r�   r�   Útupler~  r‚  Úwrap_socketr   Úimportlib.metadataÚmetadataÚversionr^   )r   rc  rŽ  rË   r¬  rÜ   r   r¯  r·  r�   rG   Ú	importlibrè   s               €r   r8   zBaseWSGIServer.__init__Ç  s5  ø€ ð ˆ?Ý(ˆGð
 ¥T¨'¡]¤]Ð2Ð2ØÔð 3Ø $Ô 1ð 3ð (2ˆGÔ$àˆŒ	ØˆŒ	ØˆŒØ"4ˆÔå/DÀTÈ4Ñ/PÔ/PÐPˆÔ˜nÝ% d­C°©I¬I°~ÑFÔFˆð �WÒ$Ð$¨¨ÝœV¥C¨Ñ8Ô8ˆNåŒw�~Š~˜nÑ-Ô-ð *Ý”	˜.Ñ)Ô)Ð)õ 	‰Œ×ÒØØØ#ð 	ñ 	
ô 	
ð 	
ð ‰:ðØ× Ò Ñ"Ô"Ð"Ø×$Ò$Ñ&Ô&Ð&Ñ&øÝð ð ð ð ×!Ò!Ñ#Ô#Ð#Ý�a”j¥s¤zÐ2Ñ2Ô2Ð2à”7�eÔ.Ò.Ð.Ýð! ð !ð !ð !õ !œZð	ñ ô ð õ ”| xÒ/Ð/°D¸D²L°LÝðFå!$¤ðñ ô ð õ ”˜‘”������øøøøÝ ð ð ð Ø×!Ò!Ñ#Ô#Ð#Øðøøøð ×ÒÑÔÐõ !œ-¨¨N½FÔ<NÑOÔOˆDŒKØ"&¤+×"9Ò"9Ñ";Ô";ˆDÔà�WÒ$Ð$àÔ+¨AÔ.ˆDŒIàÐ"Ý˜+¥uÑ-Ô-ð ;Ý.°Ð<��Ø Ò'Ð'Ý8Ñ:Ô:�à%×1Ò1°$´+È4Ð1ÑPÔPˆDŒKØ6AˆDÔÐà#ˆDÔà!Ð!Ð!Ð!àS¨9Ô+=×+EÒ+EÀjÑ+QÔ+QÐSÐSˆÔÐÐs   Ä(D. Ä.
HÄ8B-G*Ç*#Hr  r  r  r   c                ó"   — t          ||g|¢R Ž  d S r]   r   )r   r  r  r  s       r   r˜   zBaseWSGIServer.log.  s    € ÝˆT�7Ð"˜TÐ"Ð"Ð"Ð"Ð"Ð"r   ç      à?Úpoll_intervalÚfloatc                óÊ   •— 	 t          ¦   «                              |¬¦  «         n# t          $ r Y nw xY w|                      ¦   «          d S # |                      ¦   «          w xY w)N)rÌ  )râ   Úserve_foreverÚKeyboardInterruptr¼  )r   rÌ  rè   s     €r   rÏ  zBaseWSGIServer.serve_forever1  sx   ø€ ð	 Ý‰GŒG×!Ò!°Ð!Ñ>Ô>Ð>Ð>øÝ ð 	ð 	ð 	ØˆDð	øøøð ×ÒÑÔÐÐÐøˆD×ÒÑÔÐÐøøøs!   ƒ"& ¥A ¦
3°A ²3³A ÁA"Úrequestr€   r—  c                óX   •— | j         r‚ t          ¦   «                              ||¦  «        S r]   )rÜ   râ   Úhandle_error)r   rÑ  r€   rè   s      €r   rÓ  zBaseWSGIServer.handle_error9  s-   ø€ ð Ô"ð 	Øå‰wŒw×#Ò# G¨^Ñ<Ô<Ð<r   c                ój  — d}t          |dd¦  «        }|g}| j        t          k    r|                     d| j        › �¦  «         nË| j        €dnd}| j        }| j        dv rƒ|                     d	| j        › d
�¦  «         | j        dk    rd}t          t          j        ¦  «        }nd}t          t          j	        ¦  «        }|                     d|› d|› d| j
        › �¦  «         d|v rd|› d�}|                     d|› d|› d| j
        › �¦  «         t          dd                     |¦  «        ¦  «         dS )z<Show information about the address when starting the server.zvWARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.r   r	  z * Running on Nra   rb   >   ú::ú0.0.0.0z * Running on all addresses (ú)rÖ  r¥  z[::1]r™  r‘  ú[ú]r  r  )r  r·  r›  Úappendrc  r   rª  rå   r”  r’  rŽ  r   Újoin)r   Údev_warningÚmessagesr‚   Údisplay_hostnameÚ	localhosts         r   Úlog_startupzBaseWSGIServer.log_startupA  sq  € ðAð 	õ " +¨v°uÑ=Ô=ˆØ�=ˆàÔ¥'Ò)Ð)Ø�OŠOÐ8¨T¬YÐ8Ð8Ñ9Ô9Ð9Ð9à#Ô/Ð7�V�V¸WˆFØ#œyÐàŒyÐ-Ð-Ð-Ø—’Ð LÀÄ	Ð LÐ LÐ LÑMÔMÐMà”9 	Ò)Ð)Ø +�IÝ'7½¼Ñ'GÔ'GÐ$Ð$à '�IÝ'7½¼Ñ'HÔ'HÐ$à—’Ð S°Ð SÐ S¸IÐ SÐ SÈÌ	Ð SÐ SÑTÔTÐTàÐ&Ð&Ð&Ø#:Ð'7Ð#:Ð#:Ð#:Ð à�OŠOÐV¨VÐVÐVÐ8HÐVÐVÈ4Ì9ÐVÐVÑWÔWÐWåˆV�T—Y’Y˜xÑ(Ô(Ñ)Ô)Ð)Ð)Ð)r   )NFNN)rc  r   rŽ  r=   rË   r+   r¬  r­  rÜ   r9   r   r®  r¯  r„  r   r3   r  )rË  )rÌ  rÍ  r   r3   )rÑ  r   r€   r—  r   r3   r  )r   r    r!   rW   r†   r‡   ÚLISTEN_QUEUEÚrequest_queue_sizeÚallow_reuse_addressr8   r˜   rÏ  rÓ  rà  r%  r&  s   @r   rZ   rZ   ¼  sê   ø€ € € € € ðð ð
 €KØ€LØ%ÐØÐð 48Ø#(Ø.2ØðeTð eTð eTð eTð eTð eTð eTðN#ð #ð #ð #ð ð  ð  ð  ð  ð  ð  ð=ð =ð =ð =ð =ð =ð *ð  *ð  *ð  *ð  *ð  *ð  *ð  *r   rZ   c                  ó   — e Zd ZdZdZdZdS )ÚThreadedWSGIServerz†A WSGI server that handles concurrent requests in separate
    threads.

    Use :func:`make_server` to create a server instance.
    TN)r   r    r!   rW   r†   Údaemon_threadsr"   r   r   rå  rå  d  s$   € € € € € ðð ð €KØ€N€N€Nr   rå  c                  ó4   ‡ — e Zd ZdZdZ	 	 	 	 	 ddˆ fd„Zˆ xZS )ÚForkingWSGIServerz�A WSGI server that handles concurrent requests in separate forked
    processes.

    Use :func:`make_server` to create a server instance.
    Té(   NFrc  r   rŽ  r=   rË   r+   Ú	processesr¬  r­  rÜ   r9   r   r®  r¯  r„  r   r3   c	           	     ó�   •— t           st          d¦  «        ‚t          ¦   «                              |||||||¦  «         || _        d S )Nz'Your platform does not support forking.)Úcan_forkrD   râ   r8   Úmax_children)
r   rc  rŽ  rË   rê  r¬  rÜ   r   r¯  rè   s
            €r   r8   zForkingWSGIServer.__init__x  sQ   ø€ õ ð 	HÝÐFÑGÔGÐGå‰Œ×Ò˜˜t S¨'Ð3EÀ{ÐTVÑWÔWÐWØ%ˆÔÐÐr   )ré  NFNN)rc  r   rŽ  r=   rË   r+   rê  r=   r¬  r­  rÜ   r9   r   r®  r¯  r„  r   r3   )r   r    r!   rW   r‡   r8   r%  r&  s   @r   rè  rè  o  sd   ø€ € € € € ðð ð €Lð Ø37Ø#(Ø.2Øð&ð &ð &ð &ð &ð &ð &ð &ð &ð &ð &r   rè  rË   r+   Úthreadedrê  Úrequest_handlerr­  rÜ   r   r®  r¯  c	           
     óÆ   — |r|dk    rt          d¦  «        ‚|rt          | ||||||¬¦  «        S |dk    rt          | |||||||¬¦  «        S t          | ||||||¬¦  «        S )a6  Create an appropriate WSGI server instance based on the value of
    ``threaded`` and ``processes``.

    This is called from :func:`run_simple`, but can be used separately
    to have access to the server object, such as to run it in a separate
    thread.

    See :func:`run_simple` for parameter docs.
    r   z4Cannot have a multi-thread and multi-process server.©r¯  )rD   rå  rè  rZ   )	rc  rŽ  rË   rî  rê  rï  rÜ   r   r¯  s	            r   Úmake_serverrò  Š  s·   € ð( ð Q�I ’M�MÝÐOÑPÔPÐPàð 
Ý!Ø�$˜˜_Ð.@À+ÐRTð
ñ 
ô 
ð 	
ð �1‚}€}Ý ØØØØØØØØð	
ñ 	
ô 	
ð 		
õ Øˆd�C˜Ð*<¸kÈbðñ ô ð r   c                 óH   — t           j                             d¦  «        dk    S )zqCheck if the server is running as a subprocess within the
    Werkzeug reloader.

    .. versionadded:: 0.10
    ÚWERKZEUG_RUN_MAINÚtrue)r|  r�   r“   r"   r   r   Úis_running_from_reloaderrö  ·  s   € õ Œ:�>Š>Ð-Ñ.Ô.°&Ò8Ð8r   ÚautoÚhostnameÚapplicationÚuse_reloaderÚuse_debuggerÚ
use_evalexÚextra_filesút.Iterable[str] | NoneÚexclude_patternsÚreloader_intervalÚreloader_typeÚstatic_filesú'dict[str, str | tuple[str, str]] | Noner3   c                ó6  — t          |t          ¦  «        st          d¦  «        ‚|rddlm}  |||¦  «        }|r-ddlm}  |||¬¦  «        }|j                             | ¦  «         t          ¦   «         sd}nt          t          j        d         ¦  «        }t          | |||
|||||¬¦	  «	        }|j                             d	¦  «         t          |                     ¦   «         ¦  «        t          j        d<   t          ¦   «         s2|                     ¦   «          t%          d
t'          dd¦  «        ¦  «         |rKddlm} 	  ||j        ||||	¬¦  «         |                     ¦   «          dS # |                     ¦   «          w xY w|                     ¦   «          dS )a  Start a development server for a WSGI application. Various
    optional features can be enabled.

    .. warning::

        Do not use the development server when deploying to production.
        It is intended for use only during local development. It is not
        designed to be particularly efficient, stable, or secure.

    :param hostname: The host to bind to, for example ``'localhost'``.
        Can be a domain, IPv4 or IPv6 address, or file path starting
        with ``unix://`` for a Unix socket.
    :param port: The port to bind to, for example ``8080``. Using ``0``
        tells the OS to pick a random free port.
    :param application: The WSGI application to run.
    :param use_reloader: Use a reloader process to restart the server
        process when files are changed.
    :param use_debugger: Use Werkzeug's debugger, which will show
        formatted tracebacks on unhandled exceptions.
    :param use_evalex: Make the debugger interactive. A Python terminal
        can be opened for any frame in the traceback. Some protection is
        provided by requiring a PIN, but this should never be enabled
        on a publicly visible server.
    :param extra_files: The reloader will watch these files for changes
        in addition to Python modules. For example, watch a
        configuration file.
    :param exclude_patterns: The reloader will ignore changes to any
        files matching these :mod:`fnmatch` patterns. For example,
        ignore cache files.
    :param reloader_interval: How often the reloader tries to check for
        changes.
    :param reloader_type: The reloader to use. The ``'stat'`` reloader
        is built in, but may require significant CPU to watch files. The
        ``'watchdog'`` reloader is much more efficient but requires
        installing the ``watchdog`` package first.
    :param threaded: Handle concurrent requests using threads. Cannot be
        used with ``processes``.
    :param processes: Handle concurrent requests using up to this number
        of processes. Cannot be used with ``threaded``.
    :param request_handler: Use a different
        :class:`~BaseHTTPServer.BaseHTTPRequestHandler` subclass to
        handle requests.
    :param static_files: A dict mapping URL prefixes to directories to
        serve static files from using
        :class:`~werkzeug.middleware.SharedDataMiddleware`.
    :param passthrough_errors: Don't catch unhandled exceptions at the
        server level, let the server crash instead. If ``use_debugger``
        is enabled, the debugger will still catch such errors.
    :param ssl_context: Configure TLS to serve over HTTPS. Can be an
        :class:`ssl.SSLContext` object, a ``(cert_file, key_file)``
        tuple to create a typical context, or the string ``'adhoc'`` to
        generate a temporary self-signed certificate.

    .. versionchanged:: 2.1
        Instructions are shown for dealing with an "address already in
        use" error.

    .. versionchanged:: 2.1
        Running on ``0.0.0.0`` or ``::`` shows the loopback IP in
        addition to a real IP.

    .. versionchanged:: 2.1
        The command-line interface was removed.

    .. versionchanged:: 2.0
        Running on ``0.0.0.0`` or ``::`` shows a real IP address that
        was bound as well as a warning not to run the development server
        in production.

    .. versionchanged:: 2.0
        The ``exclude_patterns`` parameter was added.

    .. versionchanged:: 0.15
        Bind to a Unix socket by passing a ``hostname`` that starts with
        ``unix://``.

    .. versionchanged:: 0.10
        Improved the reloader and added support for changing the backend
        through the ``reloader_type`` parameter.

    .. versionchanged:: 0.9
        A command-line interface was added.

    .. versionchanged:: 0.8
        ``ssl_context`` can be a tuple of paths to the certificate and
        private key files.

    .. versionchanged:: 0.6
        The ``ssl_context`` parameter was added.

    .. versionchanged:: 0.5
       The ``static_files`` and ``passthrough_errors`` parameters were
       added.
    zport must be an integerr   )ÚSharedDataMiddleware)ÚDebuggedApplication)ÚevalexNÚWERKZEUG_SERVER_FDrñ  Tr  zPress CTRL+C to quitr  )Úrun_with_reloader)rý  rÿ  Úintervalr  )r�   r=   rF  Úmiddleware.shared_datar  Údebugr  Útrusted_hostsrÚ  rö  r|  r�   rò  rå   Úset_inheritabler   Úfilenorà  r   r  Ú	_reloaderr	  rÏ  r¼  )rø  rŽ  rù  rú  rû  rü  rý  rÿ  r   r  rî  rê  rï  r  rÜ   r   r  r  r¯  Úsrvr	  s                        r   Ú
run_simpler  À  sø  € õ` �d�CÑ Ô ð 3ÝÐ1Ñ2Ô2Ð2àð FØ@Ð@Ð@Ð@Ð@Ð@à*Ð*¨;¸ÑEÔEˆàð 3Ø.Ð.Ð.Ð.Ð.Ð.à)Ð)¨+¸jÐIÑIÔIˆð 	Ô!×(Ò(¨Ñ2Ô2Ð2å#Ñ%Ô%ð 3Øˆˆå•”Ð0Ô1Ñ2Ô2ˆå
ØØØØØØØØØð
ñ 
ô 
€Cð „J×Ò˜tÑ$Ô$Ð$Ý'*¨3¯:ª:©<¬<Ñ'8Ô'8…B„JÐ#Ñ$å#Ñ%Ô%ð DØ�ŠÑÔÐÝˆV•[Ð!7¸ÑBÔBÑCÔCÐCàð Ø0Ð0Ð0Ð0Ð0Ð0ð		ØÐØÔ!Ø'Ø!1Ø*Ø+ðñ ô ð ð ×ÒÑÔÐÐÐøˆC×ÒÑÔÐÐøøøà×ÒÑÔÐÐÐs   ÅE, Å,F)rŸ   r   r'  r   r   r   r]   )r1  r2  r   r3  )NN)rb  r   rc  r2  r1  r2  r   rd  )r   r)   )rt  r   ru  r2  rƒ  r„  r   r)   )r}   r‰  r   r9   )rc  r   rŽ  r=   r   r�  )rc  r   rŽ  r=   r–  r�  r   r—  )r–  r�  r   r   )Fr   NFNN)rc  r   rŽ  r=   rË   r+   rî  r9   rê  r=   rï  r­  rÜ   r9   r   r®  r¯  r„  r   rZ   rU   )FFTNNr   r÷  Fr   NNFN)"rø  r   rŽ  r=   rù  r+   rú  r9   rû  r9   rü  r9   rý  rþ  rÿ  rþ  r   r=   r  r   rî  r9   rê  r=   rï  r­  r  r  rÜ   r9   r   r®  r   r3   )PrW   Ú
__future__r   r¿  Úior|  rÎ   rå   Úsocketserverr„   Útypingr‹  r   rS  r   r   Úhttp.serverr   r   Úurllib.parser	   r
   Ú	_internalr   r   Ú
exceptionsr   Úurlsr   r–   rä   rÍ   ÚSSLEOFErrorr   r   rE  r   r.  r   Ú
__import__rÓ   rì  r'   r“  r›  r™   rá  ÚOptionalÚUnionrÄ  r   ÚLiteralÚ_TSSLContextArgÚTYPE_CHECKINGÚ_typeshed.wsgir+   r,   Ú-cryptography.hazmat.primitives.asymmetric.rsar-   Úcryptography.x509r.   Ú	RawIOBaser0   rY   r  ra  rw  r‚  r~  ræ   r•  r£  rª  rZ   ÚThreadingMixInrå  rè  rò  rö  r  r"   r   r   ú<module>r(     s²  ððð ð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ø "Ð "Ð "Ð "Ð "Ð "Ø  Ð  Ð  Ð  Ð  Ð  Ø !Ð !Ð !Ð !Ð !Ð !à Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ø +Ð +Ð +Ð +Ð +Ð +Ø Ð Ð Ð Ð Ð ðBØ€J€J€Jð 	ØŒØŒð>Ðð ð ð ñ ð øð
 ð 
Bð 
Bð 
Bðð ð ð ð ñ ô ð ð ˆ)‰+Œ+€CØ!0°&´.Ð AÐÐÐð
Bøøøð €à„7ˆd‚?€?ðØˆ
�:ÑÔÐÐøØð ð ð Øˆˆˆðøøøð ˆ7�2�vÑÔ€àð ØÔ,€L€Lðð ð ð ð ñ ô ð ðØŒn€G€GøØð ð ð Ø€G€G€Gðøøøð €à”*Ø„GÐ˜e C¨¬°C¬Ð$8Ô9¸1¼9ÀWÔ;MÐMÔNô€ð „?ð .Ø.Ð.Ð.Ð.Ð.Ð.Ø.Ð.Ð.Ð.Ð.Ð.ðð ð ð ð ð ð .Ð-Ð-Ð-Ð-Ð-ð;ð ;ð ;ð ;ð ;�R”\ñ ;ô ;ð ;ð|D
ð D
ð D
ð D
ð D
Ð/ñ D
ô D
ð D
ðN
ð ð ð ð( ð.ð .ð .ð .ð .ðd ?Cð) ð ) ð ) ð ) ð ) ðXð ð ð ð> JNðð ð ð ð ð*+ð +ð +ð +ð +ðð ð ð ðð ð ð ð""ð "ð "ð "ð$e*ð e*ð e*ð e*ð e*�Zñ e*ô e*ð e*ðPð ð ð ð ˜Ô4°nñ ô ð ð&ð &ð &ð &ð &˜ nñ &ô &ð &ð> ØØ7;Ø$Ø*.Øð*ð *ð *ð *ð *ðZ9ð 9ð 9ð 9ð ØØØ*.Ø/3ØØØØØ7;Ø<@Ø$Ø*.ð!eð eð eð eð eð eð es6   Á-B Â%B.Â-B.Â?C ÃCÃCÃ<D ÄDÄD