Ë
    M²j 9  ã                   óÚ  — U 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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mZ d dlmZmZ d d	lmZmZ  ej8                  e«      Zej>                  e d
<   dZ!e"e d<    ed¬«       G d„ d«      «       Z# ed¬«       G d„ d«      «       Z$ ed¬«       G d„ d«      «       Z% G d„ de«      Z&de'e(   de"de'e#   fd„Z)de'e(   de"de'e#   fd„Z*	 d6de(de(de"de+e'e(   e'e#   f   fd„Z,de(fd „Z-d!e'e(   d"e'e#   de(dz  fd#„Z.d$Z/d%Z0d&Z1 G d'„ d(«      Z2 G d)„ d*e«      Z3 G d+„ d,e«      Z4 G d-„ d.«      Z5	 d7d/e6d0e(dz  d1e"d2e'e&   d3e7e(   d4e"ddfd5„Z8y)8é    N)ÚABCÚabstractmethod)ÚCallable)ÚThreadPoolExecutor)Ú	dataclass)ÚBaseHTTPRequestHandlerÚThreadingHTTPServer)Úparse_qsÚurlparse)Ú
DictLoaderÚEnvironment)Úget_world_sizeÚtcpstore_clientÚloggerç      N@Ú_DEFAULT_FETCH_TIMEOUTT)Úslotsc                   ó.   — e Zd ZU eed<   eed<   d„ Zd„ Zy)ÚResponseÚstatus_codeÚtextc                 ól   — | j                   dk7  r%t        d| j                   › d| j                  › �«      ‚y )NéÈ   zHTTP ú: )r   ÚRuntimeErrorr   ©Úselfs    ú`/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torch/distributed/debug/_frontend.pyÚraise_for_statuszResponse.raise_for_status#   s8   € Ø×Ñ˜sÒ"Ü  t×'7Ñ'7Ð&8¸¸4¿9¹9¸+ÐFÓGÐGð #ó    c                 ó@   — t        j                  | j                  «      S ©N)ÚjsonÚloadsr   r   s    r   r#   zResponse.json'   s   € Ü�z‰z˜$Ÿ)™)Ó$Ð$r    N)Ú__name__Ú
__module__Ú__qualname__ÚintÚ__annotations__Ústrr   r#   © r    r   r   r      s   … àÓØ
ƒIòHó%r    r   c                   ó"   — e Zd ZU eed<   eed<   y)ÚNavLinkÚpathÚlabelN)r%   r&   r'   r*   r)   r+   r    r   r-   r-   +   s   … à
ƒIØ„Jr    r-   c                   ó.   — e Zd ZU eed<   edgef   ed<   y)ÚRouter.   ÚHTTPRequestHandlerÚhandlerN)r%   r&   r'   r*   r)   r   Úbytesr+   r    r   r1   r1   1   s   … à
ƒIØÐ+Ð,¨eÐ3Ñ4Ô4r    r1   c                   óˆ   — e Zd ZU eZeed<   edee	   fd„«       Z
edee   fd„«       Zdeeef   fd„Zdedz  fd„Zdefd„Zy)	ÚDebugHandlerÚfetch_timeoutÚreturnc                  ó   — y r"   r+   r   s    r   ÚrouteszDebugHandler.routes:   s   € Ø%(r    c                  ó   — y r"   r+   r   s    r   Ú	nav_linkszDebugHandler.nav_links=   s   € Ø*-r    c                 ó   — i S r"   r+   r   s    r   Ú	templateszDebugHandler.templates@   s   € Øˆ	r    Nc                  ó   — y r"   r+   r   s    r   ÚdumpzDebugHandler.dumpC   s   € Ør    c                 óH   — t        | «      j                  j                  «       S r"   )Útyper%   Úlowerr   s    r   Údump_filenamezDebugHandler.dump_filenameF   s   € Ü�D‹z×"Ñ"×(Ñ(Ó*Ð*r    )r%   r&   r'   r   r7   Úfloatr)   r   Úlistr1   r:   r-   r<   Údictr*   r>   r@   rD   r+   r    r   r6   r6   7   sj   … Ø1€M�5Ó1àØ(˜˜U™Ò(ó Ø(àØ-˜4 ™=Ò-ó Ø-ð˜4  S ™>ó ð�c˜D‘jó ð+˜sô +r    r6   ÚurlsÚtimeoutr8   c                 ó¶   ‡‡— dd l Šd}dt        dt        fˆˆfd„}t        |¬«      5 }t	        |j                  || «      «      }d d d «       |S # 1 sw Y   S xY w)Nr   é   Úurlr8   c                 ó   •— 	 ‰j                  | ‰¬«      }t        |j                  |j                  «      S # ‰j                  j
                  $ r}t        dd|› �«      cY d }~S d }~w‰j                  j                  $ r}t        dd|› �«      cY d }~S d }~wt        $ r.}t        dt        |«      j                  › d|› �«      cY d }~S d }~ww xY w)N©rI   é˜  z	Timeout: é÷  zConnectionError: éö  r   )
Úpostr   r   r   Ú
exceptionsÚTimeoutÚConnectionErrorÚ	ExceptionrB   r%   )rL   ÚrespÚeÚrequestsrI   s      €€r   Úgetzfetch_thread_pool.<locals>.getU   s¶   ø€ ð	=Ø—=‘= ¨g�=Ó6ˆDÜ˜D×,Ñ,¨d¯i©iÓ8Ð8øØ×"Ñ"×*Ñ*ò 	2Ü˜C 9¨Q¨C Ó1Õ1ûØ×"Ñ"×2Ñ2ò 	:Ü˜CÐ#4°Q°CÐ!8Ó9Õ9ûÜò 	=Ü˜C¤D¨£G×$4Ñ$4Ð#5°R¸°sÐ!;Ó<Õ<ûð	=ús?   ƒ26 ¶CÁA#ÁCÁ#CÁ?BÂCÂCÂ#CÃCÃC)Úmax_workers)rY   r*   r   r   rF   Úmap)rH   rI   r[   rZ   ÚexecutorÚrespsrY   s    `    @r   Úfetch_thread_poolr_   O   s]   ù€ ãà€Kð	=”ð 	=œö 	=ô 
¨Ô	4ð .¸Ü�X—\‘\ # tÓ,Ó-ˆ÷.ð €L÷.ð €Lús   ¨AÁAc                 óÆ   ‡‡‡— dd l Šd‰j                  dt        dt        fˆfd„Šdt        t           dt        t           fˆˆˆfd„}t        j                   || «      «      S )Nr   ÚsessionrL   r8   c              “   ó4  •K  — 	 | j                  |«      4 ƒd {  –—† }|j                  «       ƒ d {  –—† }t        |j                  |«      cd d d «      ƒd {  –—†  S 7 ŒC7 Œ-7 Œ	# 1 ƒd {  –—†7  sw Y   y xY w# t        j
                  $ r}t        dd|› �«      cY d }~S d }~w‰j                  $ r.}t        dt        |«      j                  › d|› �«      cY d }~S d }~wt        $ r.}t        dt        |«      j                  › d|› �«      cY d }~S d }~ww xY w­w)NrO   zTimeoutError: rP   r   rQ   )
rR   r   r   ÚstatusÚasyncioÚTimeoutErrorÚClientErrorrB   r%   rV   )ra   rL   rW   r   rX   Úaiohttps        €r   Úfetchzfetch_aiohttp.<locals>.fetchk   sò   øè ø€ ð		=Ø—|‘| CÓ(÷ 3ð 3¨DØ!ŸY™Y›[×(�Ü §¡¨TÓ2÷3÷ 3ò 3øØ(øð3ø÷ 3÷ 3ñ 3ûô ×#Ñ#ò 	7Ü˜C >°!°Ð!5Ó6Õ6ûØ×"Ñ"ò 	=Ü˜C¤D¨£G×$4Ñ$4Ð#5°R¸°sÐ!;Ó<Õ<ûÜò 	=Ü˜C¤D¨£G×$4Ñ$4Ð#5°R¸°sÐ!;Ó<Õ<ûð	=üsÅ   ƒD…A9 šA›A9 žA$²A ³A$ÁA9 ÁA"ÁA9 ÁDÁA9 Á A$Á"A9 Á$A6Á*A-Á+A6Á2A9 Á5DÁ6A9 Á9DÂB ÂDÂDÂ DÂ2#CÃDÃDÃDÃ'#DÄ
DÄDÄDÄDrH   c              “   ó8  •K  — ‰j                  ‰¬«      }‰j                  |¬«      4 ƒd {  –—† }t        t        j                  | D �cg c]  } ‰||«      ‘Œ c}Ž ƒ d {  –—† «      cd d d «      ƒd {  –—†  S 7 ŒMc c}w 7 Œ 7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)N)ÚtotalrN   )ÚClientTimeoutÚClientSessionrF   rd   Úgather)rH   Úclient_timeoutra   rL   rg   rh   rI   s       €€€r   rm   zfetch_aiohttp.<locals>.gatherw   s‘   øè ø€ Ø ×.Ñ.°WÐ.Ó=ˆØ×(Ñ(°Ð(Ó@÷ 	Vð 	VÀGÜœgŸn™nÈdÖ.SÀs©u°W¸cÕ/BÒ.SÐT×TÓU÷	V÷ 	Vò 	VúÚ.SÐTøð	Vø÷ 	V÷ 	Vñ 	Vüsb   ƒ)B¬A:­B°BÁ	A<ÁBÁ B
Á!BÁ(BÁ4BÁ5BÁ<BÂBÂBÂBÂBÂB)rg   rl   r*   r   rF   rd   Úrun)rH   rI   rm   rg   rh   s    ` @@r   Úfetch_aiohttprp   f   s[   ú€ ó ð
=˜W×2Ñ2ð 
=¼ð 
=Äõ 
=ðVœ4¤™9ð V¬¬h©÷ Vô
 �;‰;‘v˜d“|Ó$Ð$r    ÚendpointÚargsc                ó>  — t        «       }t        t        «       «      D �cg c]  }d|› �‘Œ	 }}|j                  |«      }|D �cg c]  }|j	                  «       › d| › d|› �‘Œ }}	 t        ||¬«      }||fS c c}w c c}w # t        $ r t        ||¬«      }Y ||fS w xY w)NÚrankz	/handler/ú?rN   )r   Úranger   Ú	multi_getÚdecoderp   ÚImportErrorr_   )	rq   rr   rI   ÚstoreÚrÚkeysÚaddrsÚaddrr^   s	            r   Ú	fetch_allr      s±   € ô Ó€EÜ %¤nÓ&6Ó 7Ö8˜1ˆd�1�#ŠJÐ8€DÐ8Ø�O‰O˜DÓ!€EØFKÖL¸d�—‘“ˆ˜i¨ z°°4°&Ò9ÐL€EÐLð:Ü˜e¨WÔ5ˆð �%ˆ<Ðùò 9ùâLøô ò :Ü! %°Ô9‰à�%ˆ<Ðð:ús    A6ÁA;Á%B  Â BÂBÚblobc                 óZ   — t        j                  | «      }t        j                  |d¬«      S )Né   )Úindent)r#   r$   Údumps)r€   Úparseds     r   Úformat_jsonr†   �   s!   € Ü�Z‰Z˜Ó€FÜ�:‰:�f QÔ'Ð'r    r}   r^   c                 ó0  — t        |«      D ��cg c]  \  }}|j                  dk7  sŒ||f‘Œ }}}|syt        | «      }|t        |«      z
  }d|› d|› d�g}|D ]&  \  }}	|j                  d|› d|	j                  › �«       Œ( dj                  |«      S c c}}w )	zHReturn a summary string if any workers failed, or None if all succeeded.r   NzPARTIAL DATA: ú/z workers respondedz  Rank r   ú
)Ú	enumerater   ÚlenÚappendr   Újoin)
r}   r^   Úir{   Úfailedrj   ÚokÚlinesrt   rW   s
             r   Úformat_fetch_summaryr’   ”   s§   € ä!*¨5Ó!1×J™˜˜A°Q·]±]ÀcÓ5Iˆq�!ŠfÐJ€FÑJÙØÜ�‹J€EØ	”�V“Ñ	€BØ˜b˜T  5 'Ð);Ð<Ð=€EØò 4‰
ˆˆdØ�‰�w˜t˜f B t§y¡y kÐ2Õ3ð4à�9‰9�UÓÐùó Ks
   �B§Bac  
<!doctype html>
<head>
    <title>{% block title %}{% endblock %} - PyTorch Distributed</title>
    <link rel="shortcut icon" type="image/x-icon" href="https://pytorch.org/favicon.ico?">

    <style>
        body {
            margin: 0;
            font-family:
                -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,
                "Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji",
                "Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
            font-size: 1rem;
            font-weight: 400;
            line-height: 1.5;
            color: #212529;
            text-align: left;
            background-color: #fff;
        }
        h1, h2, h2, h4, h5, h6, .h1, .h2, .h2, .h4, .h5, .h6 {
            margin-bottom: .5rem;
            font-weight: 500;
            line-height: 1.2;
        }
        nav {
            background-color: rgba(0, 0, 0, 0.17);
            padding: 10px;
            display: flex;
            align-items: center;
            padding: 16px;
            justify-content: flex-start;
        }
        nav h1 {
            display: inline-block;
            margin: 0;
        }
        nav a {
           margin: 0 8px;
        }
        section {
            max-width: 1280px;
            padding: 16px;
            margin: 0 auto;
        }
        pre {
            white-space: pre-wrap;
            max-width: 100%;
        }
    </style>
</head>

<nav>
    <h1>Torch Distributed Debug Server</h1>

    {{ nav_links | safe }}
</nav>

<section class="content">
  {% block header %}{% endblock %}
  {% block content %}{% endblock %}
</section>
    aó  
{% extends "base.html" %}
{% block header %}
    <h1>{% block title %}{{title}}{% endblock %}</h1>
{% endblock %}
{% block content %}
    {% for i, (addr, resp) in enumerate(zip(addrs, resps)) %}
        <h2>Rank {{ i }}: {{ addr }}</h2>
        {% if resp.status_code != 200 %}
            <p>Failed to fetch: status={{ resp.status_code }}</p>
            <pre>{{ resp.text }}</pre>
        {% else %}
            <pre>{{ resp.text }}</pre>
        {% endif %}
    {% endfor %}
{% endblock %}
    a  
{% extends "base.html" %}
{% block header %}
    <h1>{% block title %}{{ title }}{% endblock %}</h1>
{% endblock %}
{% block content %}
    {% for i, (addr, resp) in enumerate(zip(addrs, resps)) %}
        <h2>Rank {{ i }}: {{ addr }}</h2>
        {% if resp.status_code != 200 %}
            <p>Failed to fetch: status={{ resp.status_code }}</p>
            <pre>{{ resp.text }}</pre>
        {% else %}
            <pre>{{ format_json(resp.text) }}</pre>
        {% endif %}
    {% endfor %}
{% endblock %}
    c            	       óF   — e Zd Z	 d
dee   dededdfd„Zdd„Zdd„Z	dd	„Z
y)ÚPeriodicDumperÚhandlersÚ
output_dirÚinterval_secondsr8   Nc                 ón   — || _         || _        || _        t        j                  «       | _        d | _        y r"   )Ú	_handlersÚ_output_dirÚ_interval_secondsÚ	threadingÚEventÚ_stop_eventÚ_thread)r   r•   r–   r—   s       r   Ú__init__zPeriodicDumper.__init__  s1   € ð "ˆŒØ%ˆÔØ!1ˆÔÜ$Ÿ?™?Ó,ˆÔØ04ˆ�r    c                 óÈ   — t        j                  | j                  d¬«       t        j                  | j
                  dd¬«      | _        | j                  j                  «        y )NT)Úexist_okz distributed.debug.PeriodicDumper)ÚtargetÚdaemonÚname)ÚosÚmakedirsrš   rœ   ÚThreadÚ_runrŸ   Ústartr   s    r   rª   zPeriodicDumper.start  sG   € Ü
�‰�D×$Ñ$¨tÕ4Ü ×'Ñ'Ø—9‘9ØØ3ô
ˆŒð
 	�‰×ÑÕr    c                 ó†   — | j                   j                  «        | j                  �| j                  j                  «        y y r"   )rž   ÚsetrŸ   r�   r   s    r   ÚstopzPeriodicDumper.stop&  s3   € Ø×Ñ×ÑÔØ�<‰<Ð#Ø�L‰L×ÑÕð $r    c                 óÈ  — | j                   j                  «       sâ| j                  D ]’  }	 |j                  «       }|€Œt        j                  d«      }|j                  «       › d|› d�}t        j                  j                  | j                  |«      }	 t        |d«      5 }|j                  |«       d d d «       Œ” | j                   j!                  | j"                  «       | j                   j                  «       sŒáy y # t        $ r( t
        j                  d|j                  «       «       Y �Œw xY w# 1 sw Y   Œ�xY w# t        $ r t
        j                  d|«       Y �Œ9w xY w)NzFailed to dump %sz%Y%m%d_%H%M%SÚ_z.txtÚwzFailed to write dump to %s)rž   Úis_setr™   r@   rV   r   Ú	exceptionrD   ÚtimeÚstrftimer¦   r.   r�   rš   ÚopenÚwriteÚwaitr›   )r   r3   ÚcontentÚ	timestampÚfilenamer.   Úfs          r   r©   zPeriodicDumper._run+  s9  € Ø×"Ñ"×)Ñ)Ô+ØŸ>™>ò I�ðØ%Ÿl™l›n�Gð �?ØÜ ŸM™M¨/Ó:�	Ø%×3Ñ3Ó5Ð6°a¸	°{À$ÐG�Ü—w‘w—|‘| D×$4Ñ$4°hÓ?�ðIÜ˜d C›ð )¨AØŸ™ Ô(÷)øðIð  ×Ñ×!Ñ! $×"8Ñ"8Ô9ð# ×"Ñ"×)Ñ)×+øô !ò Ü×$Ñ$Ð%8¸'×:OÑ:OÓ:QÔRÚðú÷)ð )ûä ò IÜ×$Ñ$Ð%AÀ4×HðIús;   «C>ÂD>Â D2Â2D>Ã>-D/Ä.D/Ä2D;	Ä7D>Ä>E!Å E!©r   ©r8   N)r%   r&   r'   rF   r6   r*   rE   r    rª   r­   r©   r+   r    r   r”   r”     sF   „ ð
 #'ñ	
5à�|Ñ$ð
5ð ð
5ð  ð	
5ð
 
ó
5óó ô
:r    r”   c                   óR   — e Zd ZU ej                  Zej                  ed<   dZe	ed<   y)Ú_IPv6HTTPServerÚaddress_familyi   Úrequest_queue_sizeN)
r%   r&   r'   ÚsocketÚAF_INET6rÀ   ÚAddressFamilyr)   rÁ   r(   r+   r    r   r¿   r¿   E  s!   … Ø+1¯?©?€N�F×(Ñ(Ó:Ø"Ð˜Ô"r    r¿   c            	       óv   — e Zd ZU ded<   d„ Zd„ Zdefd„Zdeee	e   f   fd„Z
defd„Zd	efd
edededefd„Zy	)r2   ÚFrontendServerÚfrontendc                 óR   — t         j                  d| j                  d   ||z  «       y )Nz%s %sr   )r   ÚinfoÚclient_address)r   Úformatrr   s      r   Úlog_messagezHTTPRequestHandler.log_messageM  s&   € Ü�‰ØØ×Ñ Ñ"Ø�T‰Mõ	
r    c                 ó:   — | j                   j                  | «       y r"   )rÇ   Ú_handle_requestr   s    r   Údo_GETzHTTPRequestHandler.do_GETT  s   € Ø�‰×%Ñ% dÕ+r    r8   c                 ó@   — t        | j                  «      j                  S r"   )r   r.   r   s    r   Úget_pathzHTTPRequestHandler.get_pathW  s   € Ü˜Ÿ	™	Ó"×'Ñ'Ð'r    c                 ó4   — t        | j                  «       «      S r"   )r
   Úget_raw_queryr   s    r   Ú	get_queryzHTTPRequestHandler.get_queryZ  s   € Ü˜×*Ñ*Ó,Ó-Ð-r    c                 ó@   — t        | j                  «      j                  S r"   )r   r.   Úqueryr   s    r   rÓ   z HTTPRequestHandler.get_raw_query]  s   € Ü˜Ÿ	™	Ó"×(Ñ(Ð(r    Nr¥   ÚdefaultrB   c                 óJ   — | j                  «       }||vr|S  |||   d   «      S )Nr   )rÔ   )r   r¥   r×   rB   rÖ   s        r   Úget_query_argz HTTPRequestHandler.get_query_arg`  s0   € ð —‘Ó ˆØ�uÑØˆNÙ�E˜$‘K ‘NÓ#Ð#r    )r%   r&   r'   r)   rÌ   rÏ   r*   rÑ   rG   rF   rÔ   rÓ   ÚobjectrB   rÙ   r+   r    r   r2   r2   J  so   … ØÓò
ò,ð(˜#ó (ð.˜4  T¨#¡Y Ñ/ó .ð)˜só )ð ,0¸cñ$Øð$Ø"(ð$Ø7;ð$à	ô$r    r2   c                   ó`   — e Zd Z	 ddedee   dz  fd„Zdd„Zdd„Zde	ddfd	„Z
d
ededefd„Zy)rÆ   NÚportr•   c                 óÖ  — |€ddl m}  |«       }dj                  d„ |D «       «      }t        t        t
        dœ}|D ]!  }|j                  |j                  «       «       Œ# t        |«      }t        |d¬«      | _
        | j                  j                  j                  t        t        t        |¬«       i | _        |D ]:  }|j!                  «       D ]%  }|j"                  | j                  |j$                  <   Œ' Œ< || _        t)        d	t*        fd
| i«      }	d|f}
t-        |
|	«      | _        t1        j2                  | j4                  ddd¬«      | _        | j6                  j9                  «        y )Nr   )Údefault_handlersr‰   c              3   ó€   K  — | ]6  }|j                  «       D ]!  }d |j                  › d|j                  › d�–— Œ# Œ8 y­w)z    <a href="z">z</a> <!--@lint-ignore-->N)r<   r.   r/   )Ú.0r3   Úlinks      r   ú	<genexpr>z*FrontendServer.__init__.<locals>.<genexpr>u  sN   è ø€ ò 
àØ×)Ñ)Ó+ò
ð ð ˜DŸI™I˜; b¨¯©¨Ð4LÔMð
ØMñ
ùs   ‚<>)z	base.htmlzraw_resp.htmlzjson_resp.htmlT)ÚloaderÚenable_async)Úzipr†   rŠ   r<   r2   rÇ   Ú r+   z distributed.debug.FrontendServer)r£   rr   r¤   r¥   )Ú'torch.distributed.debug._debug_handlersrÞ   r�   ÚBASE_TEMPLATEÚRAW_RESP_TEMPLATEÚJSON_RESP_TEMPLATEÚupdater>   r   r   Ú
_jinja_envÚglobalsrå   r†   rŠ   Ú_routesr:   r3   r.   r™   rB   r2   r¿   Ú_serverrœ   r¨   Ú_serverŸ   rª   )r   rÜ   r•   rÞ   Únav_htmlÚall_templatesr3   rã   ÚrouteÚRequestHandlerClassÚserver_addresss              r   r    zFrontendServer.__init__j  sj  € ð
 ÐÝPá'Ó)ˆHð —9‘9ñ 
à#ô
ó 
ˆô 'Ü.Ü0ñ)
ˆð
  ò 	6ˆGØ× Ñ  ×!2Ñ!2Ó!4Õ5ð	6ô ˜MÓ*ˆÜ%¨VÀ$ÔGˆŒØ�‰×Ñ×&Ñ&ÜÜ#ÜØð	 	'ô 	
ð JLˆŒØò 	9ˆGØ Ÿ™Ó)ò 9�Ø+0¯=©=�—‘˜UŸZ™ZÒ(ñ9ð	9ð "ˆŒô #Ø ÜÐ!Ø˜Ðó
Ðð ˜d˜ˆÜ& ~Ð7JÓKˆŒä ×'Ñ'Ø—;‘;ØØØ3ô	
ˆŒð 	�‰×ÑÕr    r8   c                 ó‚   — 	 | j                   j                  «        y # t        $ r t        j	                  d«       Y y w xY w)Nz got exception in frontend server)rï   Úserve_foreverrV   r   r²   r   s    r   rð   zFrontendServer._serve§  s8   € ð	AØ�L‰L×&Ñ&Õ(øÜò 	AÜ×ÑÐ?Ö@ð	Aús   ‚ �>½>c                 ó8   — | j                   j                  «        y r"   )rŸ   r�   r   s    r   r�   zFrontendServer.join­  s   € Ø�‰×ÑÕr    Úreqc                 óØ  — |j                  «       }|| j                  vr|j                  dd|› �«       y | j                  |   }	  ||«      }|j                  d«       |j                  dd«       |j                  «        |j                  j                  |«       y # t        t        f$ r>}t
        j                  d|«       |j                  ddt        |«      › �«       Y d }~y d }~ww xY w)	Ni”  zHandler not found: z-Exception in frontend server when handling %siô  zException: r   zContent-typez	text/html)rÑ   rî   Ú
send_errorrV   Ú
SystemExitr   r²   ÚreprÚsend_responseÚsend_headerÚend_headersÚwfiler¶   )r   rù   r.   r3   rW   rX   s         r   rÎ   zFrontendServer._handle_request°  sÏ   € Ø�|‰|‹~ˆØ�t—|‘|Ñ#Ø�N‰N˜3Ð"5°d°VÐ <Ô=Øà—,‘,˜tÑ$ˆð		Ù˜3“<ˆDð 	×Ñ˜#ÔØ�‰˜¨Ô4Ø�‰ÔØ�	‰	�‰˜Õøô œ:Ð&ò 	Ü×ÑØ?Øôð �N‰N˜3 +¬d°1«g¨YÐ 7Ô8Üûð	ús   ÁB ÂC)Â+4C$Ã$C)ÚtemplateÚkwargsc                 ót   —  | j                   j                  |«      j                  di |¤Žj                  «       S )Nr+   )rì   Úget_templateÚrenderÚencode)r   r  r  s      r   Úrender_templatezFrontendServer.render_templateÇ  s0   € Ø<ˆt�‰×+Ñ+¨HÓ5×<Ñ<ÑF¸vÑF×MÑMÓOÐOr    r"   r½   )r%   r&   r'   r(   rF   r6   r    rð   r�   r2   rÎ   r*   rÚ   r4   r  r+   r    r   rÆ   rÆ   i  sf   „ ð /3ñ;àð;ð �|Ñ$ tÑ+ó;ózAóðÐ#5ð ¸$ó ð.P¨ð P°vð PÀ%ô Pr    rÆ   rÜ   Údump_dirÚdump_intervalr•   Úenabled_dumpsr7   c                 ó  — |D ]	  }||_         Œ t        j                  t        j                  «       t        | |¬«      }t        j                  d|j                  j                  «       d }|�Tt        |D �cg c]  }|j                  «       |v r|‘Œ c}||«      }|j                  «        t        j                  d||«       	 |j                  «        |�|j                  «        y y c c}w # |�|j                  «        w w xY w)N)rÜ   r•   z"Frontend server started on port %dz2Periodic dumper started, writing to %s every %.0fs)r7   r   ÚsetLevelÚloggingÚINFOrÆ   rÉ   rï   Úserver_portr”   rD   rª   r�   r­   )	rÜ   r	  r
  r•   r  r7   r3   ÚserverÚdumpers	            r   Úmainr  Ë  s÷   € ð ò .ˆØ -ˆÕð.ô ‡O�O”G—L‘LÔ!ä °Ô9€FÜ
‡K�KÐ4°f·n±n×6PÑ6PÔQà$(€FØÐÜð  (öàØ×(Ñ(Ó*¨mÑ;ò òð
 Øó
ˆð 	�‰ŒÜ�‰Ø@ØØô	
ðØ�‰ŒàÐØ�K‰K�Mð ùò%øð$ ÐØ�K‰K�Mð ús   Á6C&ÃC+ Ã+D )ræ   r¼   )9rd   r#   r  r¦   rÂ   rœ   r³   Úabcr   r   Úcollections.abcr   Úconcurrent.futuresr   Údataclassesr   Úhttp.serverr   r	   Úurllib.parser
   r   Újinja2r   r   Útorch.distributed.debug._storer   r   Ú	getLoggerr%   r   ÚLoggerr)   r   rE   r   r-   r1   r6   rF   r*   r_   rp   Útupler   r†   r’   rè   ré   rê   r”   r¿   r2   rÆ   r(   r¬   r  r+   r    r   ú<module>r     s  ðÜ Û Û Û 	Û Û Û ß #Ý $Ý 1Ý !ß Cß +ç *ç Jð +˜×*Ñ*¨8Ó4€ˆ�‰Ó 4à $Ð ˜Ó $ñ �Ô÷	%ð 	%ó ð	%ñ �Ô÷ð ó ðñ
 �Ô÷5ð 5ó ð5ô
+�3ô +ð0˜D ™Ið °ð ¸$¸x¹.ó ð.%˜˜S™	ð %¨Eð %°d¸8±nó %ð4  "ñØðØðØ/4ðà
ˆ4�‰9�d˜8‘nÐ$Ñ%óð (�có (ð

  S¡	ð 
°$°x±.ð 
ÀSÈ4ÁZó 
ð$>€ð@Ð ð$Ð ÷0-:ñ -:ôj#Ð)ô #ô
$Ð/ô $÷>_Pñ _PðP  ñ&Ø
ð&à�D‰jð&ð ð&ð �<Ñ ð	&ð
 �s‘8ð&ð ð&ð 
ô&r    