§
    =IÛjþ7  ã                   ó¾  — d Z ddlZddlmZmZmZ ddlmZmZmZ ddl	Z	ddl
mZm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ZddlZddlZddlZddlmZ  ee¦  «                             ¦   «         j        Z ej        ¦   «         Zd„ Zd	„ Zd
„ Z d„ Z! G d„ d¦  «        Z" G d„ de#¦  «        Z$d„ Z%d„ Z&d„ Z'd„ Z(dd„Z)d„ Z*d„ Z+d„ Z,e-dk    r e. e,¦   «         ¦  «        ‚dS )zWCentury evaluation supervisor. No broker calls; requires an actual host replay adapter.é    N)ÚdatetimeÚ	timedeltaÚtimezone)ÚDecimalÚlocalcontextÚInvalidOperation©ÚBaseHTTPRequestHandlerÚThreadingHTTPServer)ÚPath)ÚZoneInfoc                  ób   — t          j        t          j        ¦  «                             ¦   «         S ©N)r   Únowr   ÚutcÚ	isoformat© ó    úD/Users/bpa/Desktop/ForesixaQuant/FinBot_Century_Gauntlet/gauntlet.pyr   r      s   € •”�hœlÑ+Ô+×5Ò5Ñ7Ô7Ð
7r   c                 óØ   — t          | t          ¦  «        rt          | ¦  «        dk    rt          d¦  «        ‚t	          | ¦  «        }|                     ¦   «         st          d¦  «        ‚|S )Néú   zbounded decimal string requiredzfinite decimal required)Ú
isinstanceÚstrÚlenÚ
ValueErrorr   Ú	is_finite)ÚvalueÚns     r   Údecimalr      sZ   € Ý�e�CÑ Ô Ðf¥C¨¡J¤J¨s¢N N½ÐDeÑ9fÔ9fÐ3fÝˆe�n„n€AØ�;Š;‰=Œ=ÐD�zÐ*CÑDÔDÐDØ€Hr   c                 ó˜  — t          | ¦  «        t          us+t          |¦  «        t          us| dk     sd|cxk    rdk    sn t          d¦  «        ‚t          ¦   «         5 }t	          d| dz   ¦  «        |_        t          d¦  «        t          d¦  «        | dz
  z  z  t          d¦  «        |dz
  z  z  cd d d ¦  «         S # 1 swxY w Y   d S )Né   éd   zattempt/year rangeén   i ¡ z1.2é   )ÚtypeÚintr   r   ÚmaxÚprecr   )ÚattemptÚyearÚctxs      r   Útargetr,      s"  € ÝˆG�}„}�CÐÐ¥4¨¡:¤:µSÐ#8Ð#8¸GÀAºI¸IÈQÐPTÈ\È\Ê\È\ÐVYÊ\È\È\È\Õ`jÐkñ  aAô  aAð  [AÝ	‰Œð P˜3Ý�S˜ ™Ñ%Ô%ˆŒÝ�v‰Œ�w u™~œ~°¸±	Ñ:Ñ:½7À1¹:¼:ÈÈQÉÑ;OÑOðPð Pð Pð Pñ Pô Pð Pð Pð Pð Pð Pð Pøøøð Pð Pð Pð Pð Pð Ps   ÁAB?Â?CÃCc                 óú   — t          ¦   «         5 }t          dt          |                     ¦   «         j        ¦  «        dz   ¦  «        |_        t          | |z
  ¦  «        |z  dz  cd d d ¦  «         S # 1 swxY w Y   d S )Nr"   é   )r   r'   r   Úas_tupleÚdigitsr(   Úabs)ÚactualÚgoalr+   s      r   Ú	deviationr4   %   s¯   € Ý	‰Œð )˜3Ý�S�˜TŸ]š]™_œ_Ô3Ñ4Ô4°RÑ7Ñ8Ô8ˆŒÝ�6˜$‘;ÑÔ Ñ$ SÑ(ð)ð )ð )ð )ñ )ô )ð )ð )ð )ð )ð )ð )øøøð )ð )ð )ð )ð )ð )s   �AA0Á0A4Á7A4c                   ó@   — e Zd Zd„ Zd„ Zd„ Zd
d„Zd„ Zd„ Zd„ Z	d	„ Z
dS )ÚStorec                 ó$  — t          |¦  «        | _        | j        j                             dd¬¦  «         t	          j        ¦   «         | _        |                      ¦   «         5 }|                     d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NT)ÚparentsÚexist_okaž  
            PRAGMA journal_mode=WAL;
            CREATE TABLE IF NOT EXISTS events(id INTEGER PRIMARY KEY,created_at TEXT NOT NULL,kind TEXT NOT NULL,payload TEXT NOT NULL);
            CREATE TABLE IF NOT EXISTS attempts(id INTEGER PRIMARY KEY,started_at TEXT NOT NULL,finished_at TEXT,status TEXT NOT NULL);
            CREATE TABLE IF NOT EXISTS metadata(key TEXT PRIMARY KEY,value TEXT NOT NULL);
            )	r   ÚpathÚparentÚmkdirÚ	threadingÚRLockÚlockÚconnectÚexecutescript)Úselfr:   Údbs      r   Ú__init__zStore.__init__+   sÇ   € Ý�t‘*”*ˆŒ	˜TœYÔ-×3Ò3¸DÈ$Ð3ÑOÔOÐOÝ”/Ñ#Ô#ˆŒ	Ø�\Š\‰^Œ^ð 	˜rØ×Òð ñ ô ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   Á"BÂB	ÂB	c                 ó8   — t          j        | j        d¬¦  «        S )Né
   ©Útimeout)Úsqlite3r@   r:   )rB   s    r   r@   zStore.connect5   s   € �Wœ_¨T¬Y¸rÐBÑBÔBÐBr   c           
      ój  — t          ¦   «         |dœ|¥}| j        5  |                      ¦   «         5 }|                     d|d         |t	          j        |¦  «        f¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   t          t	          j        |¦  «        d¬¦  «         |S )N)Ú
created_atÚkindz9INSERT INTO events(created_at,kind,payload) VALUES(?,?,?)rK   T)Úflush)r   r?   r@   ÚexecuteÚjsonÚdumpsÚprint)rB   rL   ÚpayloadÚrowrC   s        r   ÚeventzStore.event6   sO  € Ý™%œ% tÐ6Ð6¨gÐ6ˆØŒYð 	Að 	A�t—|’|‘~”~ð 	A¨Ø�JŠJÐRÐTWÐXdÔTeÐfjÕkoÔkuÐv}Ñk~Ôk~ÐSñ  Aô  Að  Að	Að 	Að 	Añ 	Aô 	Að 	Að 	Að 	Að 	Að 	Að 	Aøøøð 	Að 	Að 	Að 	Að 	Að 	Að 	Añ 	Aô 	Að 	Að 	Að 	Að 	Að 	Að 	Aøøøð 	Að 	Að 	Að 	Aå�dŒj˜‰oŒo DÐ)Ñ)Ô)Ð)Øˆ
s4   ›B°2A.Á"BÁ.A2	Á2BÁ5A2	Á6BÂB	ÂB	Nc                 ó>   — |                       d||||d|dd¬¦	  «	        S )NÚLESSONzJRecord the discrepancy and preserve evidence before changing the strategy.ÚPROPOSED_NOT_IMPLEMENTEDF)Úcoder)   r*   ÚobservedÚlessonÚproposed_solutionÚsolution_statusÚstrategy_weights_updated)rT   )rB   rX   rY   Úsolutionr)   r*   s         r   rZ   zStore.lesson<   s4   € Ø�zŠz˜(¨°WÀ$ÐPXØ_Ø&Ð7QØ%*ð ñ ,ô ,ð 	,r   c                 ó
  — | j         5  |                      ¦   «         5 }|                     dt          ¦   «         f¦  «        }|j        cd d d ¦  «         cd d d ¦  «         S # 1 swxY w Y   d d d ¦  «         d S # 1 swxY w Y   d S )Nz;INSERT INTO attempts(started_at,status) VALUES(?,'RUNNING'))r?   r@   rN   r   Ú	lastrowid)rB   rC   Úcurs      r   ÚstartzStore.startA   sE  € ØŒYð 	xð 	x�t—|’|‘~”~ð 	x¨Ø—
’
ÐXÕZ]ÑZ_ÔZ_ÐYaÑbÔbˆCÐjmÔjwð	xð 	xð 	xð 	xñ 	xô 	xð 	xð 	xð 	xð 	xð 	xñ 	xô 	xð 	xð 	xð 	xð 	xð 	xð 	xøøøð 	xð 	xð 	xð 	xð 	xð 	xð 	xñ 	xô 	xð 	xð 	xð 	xð 	xð 	xð 	xð 	xøøøð 	xð 	xð 	xð 	xð 	xð 	xs4   ˆA8�*A ÁA8Á A$	Á$A8Á'A$	Á(A8Á8A<Á?A<c                 ó  — | j         5  |                      ¦   «         5 }|                     d|t          ¦   «         |f¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   |                      d||¬¦  «         d S )Nz5UPDATE attempts SET status=?,finished_at=? WHERE id=?ÚATTEMPT_FINISHED)r)   Ústatus)r?   r@   rN   r   rT   )rB   r)   re   rC   s       r   ÚfinishzStore.finishD   s3  € ØŒYð  	Gð  	G�t—|’|‘~”~ð  	G¨¨B¯JªJÐ7nÐpvÕwzÑw|Ôw|ð  ~Eð  pFñ  -Gô  -Gð  -Gð  	Gð  	Gð  	Gñ  	Gô  	Gð  	Gð  	Gð  	Gð  	Gð  	Gð  	Gøøøð  	Gð  	Gð  	Gð  	Gð  	Gð  	Gð  	Gñ  	Gô  	Gð  	Gð  	Gð  	Gð  	Gð  	Gð  	Gøøøð  	Gð  	Gð  	Gð  	GØ�
Š
Ð%¨g¸Vˆ
ÑDÔDÐDÐDÐDs4   ˆA&�&AÁA&ÁA	ÁA&ÁA	ÁA&Á&A*Á-A*c                 óÌ  — | j         5  |                      ¦   «         5 }|                     d¦  «                             ¦   «         }t	          |                     d¦  «        ¦  «        }|                     d¦  «                             ¦   «         }d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d„ t          |¦  «        D ¦   «         |d„ |D ¦   «         dddd	œS )
NzHSELECT id,created_at,kind,payload FROM events ORDER BY id DESC LIMIT 200z.SELECT kind,count(*) FROM events GROUP BY kindzOSELECT id,started_at,finished_at,status FROM attempts ORDER BY id DESC LIMIT 25c                 óL   — g | ]!\  }}}}|||d œt          j        |¦  «        ¥‘Œ"S ))ÚidrK   rL   ©rO   Úloads)Ú.0ÚiÚtÚkÚps        r   ú
<listcomp>z"Store.snapshot.<locals>.<listcomp>L   s:   € ÐiÐiÐiÉwÈqÐQRÐSTÐUV ¨q¸ÐJÐJ½D¼JÀq¹M¼MÐJÐiÐiÐir   c                 óH   — g | ]}t          t          d |¦  «        ¦  «        ‘Œ S ))r)   Ú
started_atÚfinished_atre   )ÚdictÚzip)rl   Úrs     r   rq   z"Store.snapshot.<locals>.<listcomp>M   s-   € Ð'wÐ'wÐ'wÐij­­SÐ1`ÐabÑ-cÔ-cÑ(dÔ(dÐ'wÐ'wÐ'wr   ú0.0001zAHOST_ADAPTER_REPORTED_REPLAY; not independently broker reconciledzLLessons logged; no neural-model training or automatic strategy modification.)ÚeventsÚcountsÚattemptsÚtolerance_pctÚscopeÚmodel_training)r?   r@   rN   Úfetchallru   Úreversed)rB   rC   Úrowsrz   r{   s        r   ÚsnapshotzStore.snapshotG   sƒ  € ØŒYð 	~ð 	~�t—|’|‘~”~ð 	~¨Ø—’ÐfÑgÔg×pÒpÑrÔrˆDÝ˜Ÿ
š
Ð#SÑTÔTÑUÔUˆFØ—Z’ZÐ qÑrÔr×{Ò{Ñ}Ô}ˆHð	~ð 	~ð 	~ñ 	~ô 	~ð 	~ð 	~ð 	~ð 	~ð 	~ð 	~øøøð 	~ð 	~ð 	~ð 	~ð 	~ð 	~ð 	~ñ 	~ô 	~ð 	~ð 	~ð 	~ð 	~ð 	~ð 	~øøøð 	~ð 	~ð 	~ð 	~ð jÐiÕZbÐcgÑZhÔZhÐiÑiÔiØÐ'wÐ'wÐnvÐ'wÑ'wÔ'wØ$Ð-pØkðmð mð 	ms5   ˆB1�A1BÂB1ÂB	ÂB1Â!B	Â"B1Â1B5Â8B5c                 óþ   — | j         5  |                      ¦   «         5 }|                     d¦  «                             ¦   «         }d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d„ |D ¦   «         S )NzHSELECT id,created_at,payload FROM events WHERE kind='LESSON' ORDER BY idc                 óH   — g | ]\  }}}||d œt          j        |¦  «        ¥‘Œ S ))ri   rK   rj   )rl   rm   rn   rp   s       r   rq   z!Store.lessons.<locals>.<listcomp>R   s3   € ÐJÐJÐJ¹E¸A¸aÀ�a QÐ7Ð7­¬°A©¬Ð7ÐJÐJÐJr   )r?   r@   rN   r   )rB   rC   r�   s      r   ÚlessonszStore.lessonsP   s%  € ØŒYð  	Sð  	S�t—|’|‘~”~ð  	S¨°·²ð  =Gñ  2Hô  2H÷  2Qò  2Qñ  2Sô  2S¨Dð  	Sð  	Sð  	Sñ  	Sô  	Sð  	Sð  	Sð  	Sð  	Sð  	Sð  	Søøøð  	Sð  	Sð  	Sð  	Sð  	Sð  	Sð  	Sñ  	Sô  	Sð  	Sð  	Sð  	Sð  	Sð  	Sð  	Søøøð  	Sð  	Sð  	Sð  	SØJÐJÀTÐJÑJÔJÐJs4   ˆA(�(AÁA(ÁA	ÁA(ÁA	ÁA(Á(A,Á/A,)NN)Ú__name__Ú
__module__Ú__qualname__rD   r@   rT   rZ   rb   rf   r‚   r…   r   r   r   r6   r6   *   sœ   € € € € € ð	ð 	ð 	ð CÐBÐBðð ð ð,ð ,ð ,ð ,ð
xð xð xðEð Eð Eðmð mð mðKð Kð Kð Kð Kr   r6   c                   ó   — e Zd ZdS )ÚBlockedN)r†   r‡   rˆ   r   r   r   rŠ   rŠ   T   s   € € € € € € € r   rŠ   c                 óª   — | st          d¦  «        ‚t          j        | ¦  «        }t          t	          |dd ¦  «        ¦  «        st          d¦  «        ‚|S )NÚREPLAY_ADAPTER_NOT_CONFIGUREDÚrun_yearÚ REPLAY_ADAPTER_INTERFACE_MISSING)rŠ   Ú	importlibÚimport_moduleÚcallableÚgetattr)ÚnameÚadapters     r   Úload_adapterr•   V   sS   € ØÐ>•gÐ=Ñ>Ô>Ð>ÝÔ# DÑ)Ô)€GÝ•G˜G J¨tÑ4Ô4Ñ5Ô5Ðg½GÐDfÑ<gÔ<gÐ6gØ€Nr   c                 óÎ  — t          | t          ¦  «        st          d¦  «        ‚|                      d¦  «        dk    rt          d¦  «        ‚|                      d¦  «        |k    rt          d¦  «        ‚|                      d¦  «        dk    rt          d	¦  «        ‚t	          |                      d
¦  «        ¦  «        }|                      d¦  «        dk    rt          d¦  «        ‚|                      di ¦  «        }dD ]+}|                     |¦  «        durt          d|z   ¦  «        ‚Œ,dD ]j}|                      |¦  «        }t          |t
          ¦  «        r,t          |¦  «        dk    st          d„ |D ¦   «         ¦  «        rt          d|z   ¦  «        ‚Œk|                      d¦  «        }t          |t          ¦  «        r|st          d¦  «        ‚|D ]�}t          |t          ¦  «        rCt          |                     d¦  «        t
          ¦  «        r|d          	                    d¦  «        st          d¦  «        ‚|                     d¦  «        durt          d¦  «        ‚Œ�|S )NÚINVALID_YEAR_REPORTÚdata_originÚHISTORICAL_REPLAYÚ#HISTORICAL_REPLAY_EVIDENCE_REQUIREDÚcalendar_yearÚYEAR_MISMATCHÚstarting_capital_usdÚ500Ú ANNUAL_STARTING_CAPITAL_MISMATCHÚnet_income_usdÚincome_definitionÚREALIZED_NET_AFTER_COSTSÚINCOME_DEFINITION_MISMATCHÚcontrols)Úintraday_3pct_breakerÚcapital_floor_ratchetÚno_live_ordersÚpoint_in_time_inputsTzCONTROL_NOT_CONFIRMED:)Ústrategy_sha256Údataset_sha256Úledger_sha256é@   c              3   ó   K  — | ]}|d vV — Œ	dS )Ú0123456789abcdefNr   ©rl   Úcs     r   ú	<genexpr>z"validate_report.<locals>.<genexpr>h   s)   è è € Ð5]Ð5]ÐVW°aÐ?QÐ6QÐ5]Ð5]Ð5]Ð5]Ð5]Ð5]r   zEVIDENCE_HASH_REQUIRED:ÚsourcesÚSOURCE_PROVENANCE_REQUIREDÚurlzhttps://ÚSOURCE_PROVENANCE_INVALIDÚpoint_in_time_validatedÚPOINT_IN_TIME_NOT_VALIDATED)
r   ru   rŠ   Úgetr   r   r   ÚanyÚlistÚ
startswith)Úreportr›   Úincomer¤   ÚkeyÚhr²   Úsources           r   Úvalidate_reportrÁ   \   s}  € Ý�f�TÑ"Ô"ÐG­Ð1FÑ)GÔ)GÐ#GØ‡z‚z�-Ñ Ô Ð"5Ò5Ð5½GÐDiÑ<jÔ<jÐ6jØ‡z‚z�/Ñ"Ô" MÒ1Ð1½ÀÑ8PÔ8PÐ2PØ‡z‚zÐ(Ñ)Ô)¨5Ò0Ð0µwÐ?aÑ7bÔ7bÐ1bÝ�6—:’:Ð.Ñ/Ô/Ñ0Ô0€FØ‡z‚zÐ%Ñ&Ô&Ð(BÒBÐBÍÐQmÑInÔInÐCnØ�ZŠZ˜
 2Ñ&Ô&€HØhð Uð UˆØ�<Š<˜ÑÔ DÐ(Ð(­wÐ7OÐPSÑ7SÑ/TÔ/TÐ)TÐ(ØCð Kð KˆØ
�*Š*�S‰/Œ/ˆÝ˜!�CÑ Ô ð  	K¥C¨¡F¤F¨B¢J Jµ#Ð5]Ð5]Ð[\Ð5]Ñ5]Ô5]Ñ2]Ô2] JÕdkð  mFð  GJñ  mJñ  eKô  eKð  _K JØ�JŠJ�yÑ!Ô!€GÝ�g�dÑ#Ô#Ð^¨7Ð^½ÐA]Ñ9^Ô9^Ð3^Øð jð jˆÝ˜&¥Ñ&Ô&ð 	7­j¸¿ºÀEÑ9JÔ9JÍ3Ñ.OÔ.Oð 	7ÐW]Ð^cÔWd×WoÒWoÐpzÑW{ÔW{ð 	7ÝÐ5Ñ6Ô6Ð6Ø�:Š:Ð/Ñ0Ô0¸Ð<Ð<Å7ÐKhÑCiÔCiÐ=iÐ<Ø€Mr   c                 óÈ  — 	 t          j        | ¦  «        }|                     d|                     |¦  «        f¦  «         d S # t          $ r•}t          |¦  «        }t          |¦  «        j        dk    o5dt          |¦  «        cxk     odk    nc ot          d„ |D ¦   «         ¦  «        }|                     d|r|nt          |¦  «        j        f¦  «         Y d }~d S d }~ww xY w)NÚokrŠ   r   é´   c              3   ó   K  — | ]}|d v V — Œ	dS )z&ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_:Nr   r¯   s     r   r±   z replay_worker.<locals>.<genexpr>w   sM   è è € ð  MMð  MMð  @AÈQÐRzÐMzð  MMð  MMð  MMð  MMð  MMð  MMr   Úerror)
r�   r�   Úputr�   Ú	Exceptionr   r%   r†   r   Úall)Úmodule_nameÚcontextÚresult_queuer”   ÚexcÚmessageÚpublics          r   Úreplay_workerrÐ   q   s-  € ðNÝÔ'¨Ñ4Ô4ˆØ×Ò˜$˜w×/Ò/°Ñ8Ô8Ð9Ñ:Ô:Ð:Ð:Ð:øÝð Nð Nð NÝ�C‘”ˆÝ�C‰yŒyÔ! 9Ò,ð  M°µ3°w±<´<Ð1DÐ1DÒ1DÐ1DÀÒ1DÐ1DÐ1DÐ1Dð  MÍð  MMð  MMð  ELð  MMñ  MMô  MMñ  JMô  JMˆØ×Ò˜'¨VÐ"K ' '½¸c¹¼Ô9KÐLÑMÔMÐMÐMÐMÐMÐMÐMÐMøøøøðNøøøs   ‚>A Á
C!ÁB
CÃC!c                 ó€  — t          j        d¦  «        }|                     ¦   «         }|                     t          | j        ||f¬¦  «        }|                     ¦   «          	 	 t                               ¦   «         s$|r1t          j
        t          j        ¦  «        |k    rt          d¦  «        ‚|                     d¬¦  «        \  }}n8# t          j        $ r& |                     ¦   «         st          d¦  «        ‚Y Œ›w xY w|dk    rt          d	|z   ¦  «        ‚||                     ¦   «         r|                     ¦   «          |                     d
¬¦  «         |                     ¦   «         r*|                     ¦   «          |                     d
¬¦  «         |                     ¦   «          S # |                     ¦   «         r|                     ¦   «          |                     d
¬¦  «         |                     ¦   «         r*|                     ¦   «          |                     d
¬¦  «         |                     ¦   «          w xY w)zEIsolate the replay worker so stop/deadline can terminate a hung year.Úspawn)r,   ÚargsTÚRUN_DEADLINE_OR_STOPg      Ð?rG   Ú#REPLAY_WORKER_EXITED_WITHOUT_REPORTrÃ   zREPLAY_ADAPTER_ERROR:é   )ÚmultiprocessingÚget_contextÚQueueÚProcessrÐ   r†   rb   ÚSTOPÚis_setr   r   r   r   rŠ   r¸   ÚqueueÚEmptyÚis_aliveÚ	terminateÚjoinÚkillÚclose)r”   rË   ÚdeadlineÚmpÚresultsÚworkerre   r   s           r   Úexecute_yearrè   z   sö  € åÔ" 7Ñ+Ô+€B°B·H²H±J´J¨GØ�:Š:�]°Ô1AÀ'È'Ð0Rˆ:ÑSÔS€FØ
‡L‚L�N„N€Nðð	Ý�{Š{‰}Œ}ð 6 ð 6­h¬l½8¼<Ñ.HÔ.HÈ(Ò.RÐ.RÝÐ4Ñ5Ô5Ð5Ø$Ÿ[š[°˜[Ñ5Ô5‘��u�uøÝ”;ð ð ð Ø—’Ñ(Ô(Ð]­wÐ7\Ñ/]Ô/]Ð)]Ø�ðøøøð �tŠ|ˆ|¥'Ð*AÀ%Ñ*GÑ"HÔ"HÐHØà�?Š?ÑÔÐ/˜V×-Ò-Ñ/Ô/Ð/Ø�Š˜AˆÑÔÐØ�?Š?ÑÔÐA˜VŸ[š[™]œ]˜]¨6¯;ª;¸q¨;Ñ+AÔ+AÐ+AØ�Š‰Œˆˆøð �?Š?ÑÔÐ/˜V×-Ò-Ñ/Ô/Ð/Ø�Š˜AˆÑÔÐØ�?Š?ÑÔÐA˜VŸ[š[™]œ]˜]¨6¯;ª;¸q¨;Ñ+AÔ+AÐ+AØ�Š‰Œˆˆøøøs2   Á"AF+ Â/C	 ÃF+ Ã	2C>Ã;F+ Ã=C>Ã>F+ Æ+BH=c                 óD  ‡— |                       ¦   «         }d}|                      d||ddt          t          |d¦  «        ¦  «        d¬¦  «         	 t	          dd¦  «        D �]}t
                               ¦   «         s$|r;t          j        t          j
        ¦  «        |k    r|                      |d	¦  «          d
S t          ||¦  «        }||||z   dz
  dt          |¦  «        ddddœ|r|                     ¦   «         nd |                      ¦   «         dd
dœ}|                      d|||d         t          |¦  «        ¬¦  «         t          |||¦  «        Š|r;t          j        t          j
        ¦  «        |k    r|                      |d	¦  «          d
S t          ‰|d         ¦  «        }	t!          |	|¦  «        }
|
t#          d¦  «        k    }|o|}|                      d|||d         t          |	¦  «        t          |¦  «        t          |
¦  «        |dˆfd„dD ¦   «         ¬¦
  «
         |sE|                      dt          |	¦  «        t          |¦  «        t          |
¦  «        ddœd||¦  «         �Œ|                      ||rdnd¦  «         |S # t&          $ r‹}t)          |t*          ¦  «        rt          |¦  «        nt-          |¦  «        j        }|                      d||¬¦  «         |                      dd|id |¦  «         |                      |d!¦  «         Y d }~d
S d }~ww xY w)"NTÚATTEMPT_STARTEDr"   rž   r!   rx   )r)   Úfirst_calendar_yearÚyearsÚstarting_capital_each_year_usdÚyear1_target_usdÚtarget_deviation_tolerance_pctée   ÚINTERRUPTEDFÚ3)Úintraday_drawdown_pctÚcapital_floor_ratchet_requiredÚHISTORICAL_REPLAY_ONLY)r)   r*   r›   r�   Úincome_target_usdr|   Úprotective_controlsÚdeadline_utcÚlesson_historyÚmodeÚallow_live_ordersÚYEAR_STARTEDr›   )r)   r*   r›   rö   ÚYEAR_RESULTÚHOST_ADAPTER_REPORTEDc                 ó"   •— i | ]}|‰|         “ŒS r   r   )rl   ro   r¼   s     €r   ú
<dictcomp>zrun_attempt.<locals>.<dictcomp>§   s   ø€ ÐyÐyÐy¨!˜!˜F 1œIÐyÐyÐyr   )r©   rª   r«   r²   r¤   )	r)   r*   r›   r    rö   Útarget_deviation_pctÚacceptedÚmeasurement_originÚevidenceÚTARGET_DEVIATION_EXCEEDED)Úactual_income_usdÚtarget_income_usdÚdeviation_pctÚthreshold_pctzžReconcile the replay ledger, fees, slippage and opportunity/exposure limits; test a specific strategy change on separate held-out periods before accepting it.ÚPASSEDÚFAILEDÚRUN_BLOCKED)r)   rX   ÚREPLAY_BLOCKEDrX   z‚Connect the actual historical replay adapter and timestamped market/news datasets; verify source and control evidence, then rerun.ÚBLOCKED)rb   rT   r   r,   ÚrangerÛ   rÜ   r   r   r   r   rf   r   r…   rè   rÁ   r4   r   rZ   rÈ   r   rŠ   r%   r†   )Ústorer”   Ú
start_yearrä   r)   Úpassedr*   r3   rË   r2   rÆ   rÃ   rÍ   rX   r¼   s                 @r   Úrun_attemptr  �   sœ  ø€ Ø�KŠK‰MŒM€G ˜&Ø	‡K‚KÐ!¨'ÀjÐWZØ',½cÅ&ÈÐQRÑBSÔBSÑ>TÔ>TÐt|ð ñ ~ô ~ð ~ð5Ý˜!˜C‘L”Lð 	ñ 	ˆDÝ�{Š{‰}Œ}ð A ð A­h¬l½8¼<Ñ.HÔ.HÈ(Ò.RÐ.RØ—’˜W ]Ñ3Ô3Ð3¸5¸5¸5Ý˜ Ñ%Ô%ˆDØ&¨dÀ:ÈdÁ?ÐSTÑCTØ',ÅÀTÁÄÐ[cØ?BÐdhÐ&iÐ&iØ7?ÐI˜x×1Ò1Ñ3Ô3Ð3ÀTØ!&§¢¡¤Ø/ÀEðKð KˆGð �KŠK˜¨w¸DÈwÐWfÔOgÕz}ð  Cñ  {Dô  {DˆKñ  Eô  Eð  EÝ ¨°Ñ9Ô9ˆFØð A�HœL­¬Ñ6Ô6¸Ò@Ð@Ø—’˜W ]Ñ3Ô3Ð3¸5¸5¸5Ý" 6¨'°/Ô*BÑCÔCˆFÍ)ÐTZÐ[_ÑJ`ÔJ`ÀEØ•g˜hÑ'Ô'Ò'ˆB¨v¨}¸"¨Ø�KŠK˜¨g¸4ÈgÐVeÔNfÝ" 6™{œ{½SÀ¹Y¼YÕ\_Ð`eÑ\fÔ\fØÐ/FØyÐyÐyÐyÐ/xÐyÑyÔyð ñ {ô {ð {ð ð �e—l’lÐ#>Ý%(¨¡[¤[ÅSÈÁYÄYÕ_bÐchÑ_iÔ_ið  {Cð  Dð  Dð qð  ryð  z~ñô ð ùð 	�Š�W¨Ð=˜X˜X°XÑ>Ô>Ð>Àf¸}øÝð 5ð 5ð 5å# C­Ñ0Ô0ÐH�S�‰XŒXˆXµd¸3±i´iÔ6HˆØ�Š�M¨'°tˆÑ<Ô<Ð<Ø�ŠÐ% v¨d mð  5yð  zAñ  	Bô  	Bð  	BØ�Š�W˜YÑ'Ô'Ð'¨u¨u¨u¨u¨u¨uøøøøð5øøøs(   ÁA'J
 Â9CJ
 ÆC9J
 Ê

LÊB LÌLc                  óf  — t          j        t          d¦  «        ¦  «        } |                      ¦   «         t	          d|                      ¦   «         z
  dz  ¬¦  «        z   }t          j        |t           j                             ¦   «         | j	        ¦  «         
                    t          j        ¦  «        S )NzAmerica/New_Yorké   é   )Údays)r   r   r   Údater   ÚweekdayÚcombiner'   ÚtimeÚtzinfoÚ
astimezoner   r   )r   Údays     r   Úsunday_deadliner  ³   s}   € ÝŒ•XÐ0Ñ1Ô1Ñ2Ô2€CØ�Š‰
Œ
•9 1 S§[¢[¡]¤]¡?°AÑ"5Ð6Ñ6Ô6Ñ6€CÝÔ˜C¥¤× 1Ò 1Ñ 3Ô 3°C´JÑ?Ô?×JÒJÍ8Ì<ÑXÔXÐXr   c                 óR   ‡ —  G ˆ fd„dt           ¦  «        }t          d|f|¦  «        S )Nc                   ó    •— e Zd Zd„ Zˆ fd„ZdS )úmake_server.<locals>.Handlerc                 ó   — d S r   r   )rB   rÓ   s     r   Úlog_messagez(make_server.<locals>.Handler.log_messageº   s   € € € r   c                 ó  •— | j         dk    rt          dz                       ¦   «         }d}n£| j         dk    r;t          j        ‰                     ¦   «         ¦  «                             ¦   «         }d}n]| j         dk    r;t          j        ‰                     ¦   «         ¦  «                             ¦   «         }d}n|                      d¦  «         d S |  	                    d¦  «         |  
                    d	|¦  «         |  
                    d
t          t          |¦  «        ¦  «        ¦  «         |  
                    dd¦  «         |  
                    dd¦  «         |                      ¦   «          | j                             |¦  «         d S )Nú/zmonitor.htmlztext/html; charset=utf-8z/api/statuszapplication/jsonz/api/lessonsi”  éÈ   zContent-TypezContent-LengthzCache-Controlzno-storezX-Content-Type-OptionsÚnosniff)r:   ÚROOTÚ
read_bytesrO   rP   r‚   Úencoder…   Ú
send_errorÚsend_responseÚsend_headerr   r   Úend_headersÚwfileÚwrite)rB   ÚbodyrL   r  s      €r   Údo_GETz#make_server.<locals>.Handler.do_GET»   s•  ø€ ØŒy˜#Š~ˆ~¥D¨Ñ$7×#CÒ#CÑ#EÔ#E˜dÐKeÀdÀdØ”˜MÒ)Ð)­t¬z¸%¿.º.Ñ:JÔ:JÑ/KÔ/K×/RÒ/RÑ/TÔ/T¨$ÐZlÐUYÐUYØ”˜NÒ*Ð*µ´
¸5¿=º=¹?¼?Ñ0KÔ0K×0RÒ0RÑ0TÔ0T¨4ÐZlÐUYÐUYØ—’ Ñ%Ô%Ð% f fØ×Ò˜sÑ#Ô#Ð# D×$4Ò$4°^ÀDÑ$IÔ$IÐ$IÈ$×JZÒJZÐ[kÕloÕpsÐtxÑpyÔpyÑlzÔlzÑJ{ÔJ{ÐJ{Ø×Ò˜_¨ZÑ8Ô8Ð8¸×9IÒ9IÐJbÐclÑ9mÔ9mÐ9mÐnr×n~Òn~ñ  oAô  oAð  oAð  BFô  BL÷  BRò  BRð  SWñ  BXô  BXð  BXð  BXð  BXr   N)r†   r‡   rˆ   r$  r3  )r  s   €r   ÚHandlerr"  ¹   s>   ø€ € € € € Ø(Ð(Ð(ð	Xð 	Xð 	Xð 	Xð 	Xð 	Xð 	Xr   r4  z	127.0.0.1r	   )r  Úportr4  s   `  r   Úmake_serverr6  ¸   sY   ø€ ðXð Xð Xð Xð Xð Xð XÕ(ñ Xô Xð Xõ  ¨DÐ1°'Ñ:Ô:Ð:r   c                  óþ  — t          j        t          ¬¦  «        } |                      dd¬¦  «         |                      dt          dd¬¦  «         |                      d	t
          t          d
z  dz  ¬¦  «         |                      dd¬¦  «         |                      dd¬¦  «         |                      dt          d¬¦  «         |                      dd¬¦  «         |                      dd¬¦  «         |                      dt          d¬¦  «         |                      ¦   «         }|j	        dk     sd|j
        cxk    rdk    sn |                      d¦  «         |j        r-t          j        |j                             dd¦  «        ¦  «        nt!          ¦   «         }|j        €|                      d¦  «         t%          |j        ¦  «        }t)          j        t(          j        d„ ¦  «         t)          j        t(          j        d„ ¦  «         d }|j        s|j        rht3          ||j        ¦  «        }t7          j        |j        d ¬!¦  «                             ¦   «          |                     d"d#|j         d         › �d$¬%¦  «         	 |j        r¿tB           "                    ¦   «         swt          j#        tH          j%        ¦  «        |k     rUtB           &                    d&¦  «         tB           "                    ¦   «         s"t          j#        tH          j%        ¦  «        |k     °U	 |r*| '                    ¦   «          | (                    ¦   «          d'S d'S d }d(}|�€¾tB           "                    ¦   «         �s¤t          j#        tH          j%        ¦  «        |k     �r�tS          |j*        ¦  «        }�n-# tV          $ �r}tY          |tZ          ¦  «        rt]          |¦  «        nt_          |¦  «        j0        }|s6|                     d)|d d d d ¬*¦  «         | 1                    d+d,|id-¦  «         d }|j2        s2Y d }~|r*| '                    ¦   «          | (                    ¦   «          d.S d.S tB           &                    tg          |j	        ti          d'|t          j#        tH          j%        ¦  «        z
   5                    ¦   «         ¦  «        ¦  «        ¦  «         Y d }~nd }~ww xY w|€<tB           "                    ¦   «         s#t          j#        tH          j%        ¦  «        |k     �°�|€/	 |r*| '                    ¦   «          | (                    ¦   «          d.S d.S |                     d/|j2        | 6                    ¦   «         ¬0¦  «         tB           "                    ¦   «         s›t          j#        tH          j%        ¦  «        |k     ryto          |||j
        |¦  «         |j2        snZtB           &                    |j	        ¦  «         tB           "                    ¦   «         s"t          j#        tH          j%        ¦  «        |k     °y	 |r*| '                    ¦   «          | (                    ¦   «          d'S d'S # |r)| '                    ¦   «          | (                    ¦   «          w w xY w)1N)Údescriptionz	--adapterzFLocal module providing run_year(context); never a broker order adapter)Úhelpz--start-yeari†  z&100 complete years, default 1926..2025)r%   Údefaultr9  z--dbÚrunszgauntlet.db)r%   r:  z--continuousÚ
store_true)Úactionz--untilz:Timezone-aware ISO datetime; default Sunday night New Yorkz
--intervalé<   z--monitor-onlyz--servez--portiº"  r!   i¬&  zinvalid interval or yearÚZz+00:00z--until requires timezonec                  ó4   — t                                ¦   «         S r   ©rÛ   Úset©Ú_s    r   ú<lambda>zmain.<locals>.<lambda>Ò   s   € ­4¯8ª8©:¬:€ r   c                  ó4   — t                                ¦   «         S r   rA  rC  s    r   rE  zmain.<locals>.<lambda>Ò   s   € Õ]a×]eÒ]eÑ]gÔ]g€ r   T)r,   ÚdaemonÚMONITOR_STARTEDzhttp://127.0.0.1:z^Use existing authenticated gateway; do not expose this unauthenticated local monitor directly.)r´   Úremote_accessg      à?r   Fr  )rX   r)   r*   Ú
income_usdr  ÚMISSING_REPLAY_INPUTSrX   zwInstall the host replay adapter and point-in-time historical datasets. There is no completed century trial to evaluate.rÖ   ÚSUPERVISOR_STARTED)Ú
continuousrø   )8ÚargparseÚArgumentParserÚ__doc__Úadd_argumentr&   r   r)  ÚfloatÚ
parse_argsÚintervalr  rÆ   Úuntilr   ÚfromisoformatÚreplacer  r  r6   rC   ÚsignalÚSIGTERMÚSIGINTÚserveÚmonitor_onlyr6  r5  r=   ÚThreadÚserve_foreverrb   rT   Úserver_addressrÛ   rÜ   r   r   r   ÚwaitÚshutdownÚserver_closer•   r”   rÈ   r   rŠ   r   r%   r†   rZ   rM  Úminr'   Útotal_secondsr   r  )	rp   rÓ   rU  r  Úserverr”   Úblocked_recordedrÍ   rX   s	            r   Úmainrg  Ä   s  € ÝÔ­'Ð2Ñ2Ô2€AØ‡N‚N�;Ð$l€NÑmÔmÐmØ‡N‚N�>¥s°4Ð=e€NÑfÔfÐfØ‡N‚N�6�t­D°©K¸Ñ,E€NÑFÔFÐFØ‡N‚N�>¨€NÑ6Ô6Ð6Ø‡N‚N�9Ð"^€NÑ_Ô_Ð_Ø‡N‚N�<¥U°2€NÑ6Ô6Ð6Ø‡N‚NÐ#¨<€NÑ8Ô8Ð8¸¿ºÈ	ÐYe¸Ñ9fÔ9fÐ9fÐgh×guÒguÐv~õ  EHð  QUÐguñ  hVô  hVð  hVØ	
�Š‰Œ€DØ„}�Q‚€˜a ¤Ð6Ð6Ò6Ð6°$Ò6Ð6Ð6Ð6°q·w²wÐ?YÑ7ZÔ7ZÐ7ZØFJÄjÐ
g�(Ô
  ¤×!3Ò!3°C¸Ñ!AÔ!AÑ
BÔ
BÐ
BÕVeÑVgÔVg€EØ„|Ð˜AŸGšGÐ$?Ñ@Ô@Ð@Ý
�”‰.Œ.€EÝ
„M•&”.Ð!5Ð!5Ñ6Ô6Ð6µv´}ÅVÄ]ÐSgÐSgÑ7hÔ7hÐ7hØ€FØ„zð I�TÔ&ð IÝ˜5 ¤Ñ+Ô+ˆ­IÔ,<ÀFÔDXÐ`dÐ,eÑ,eÔ,e×,kÒ,kÑ,mÔ,mÐ,mØ�ŠÐ%Ð*X¸fÔ>SÐTUÔ>VÐ*XÐ*Xð  hHˆñ  	Iô  	Ið  	Ið:ØÔð 	Ý—k’k‘m”mÐV­¬µX´\Ñ(BÔ(BÀ5Ò(HÐ(HÍÏÊÐSUÉÌÈ•d—k’k‘m”mÐV­¬µX´\Ñ(BÔ(BÀ5Ò(HÐ(HØð( Ð9�&—/’/Ñ#Ô#Ð# F×$7Ò$7Ñ$9Ô$9Ð$9Ð$9Ð$9Ð9Ð9ð' ˆ eÐ%Ø‰o¥d§k¢k¡m¤m‰o½¼ÅXÄ\Ñ8RÔ8RÐSXÒ8XÑ8XÝ$ T¤\Ñ2Ô2�‘øÝð hñ hð hÝ!+¨CµÑ!8Ô!8ÐP•S˜‘X”X�X½dÀ3¹i¼iÔ>P�Ø'ð *Ø—K’K °4ÀÈ$ÐZ^Ðtx�KÑyÔyÐyØ—L’LÐ!8¸&À¸ð  HAñ  Bô  Bð  BØ%)Ð$Ø”Ð/¨a¨a¨a¨að Ð9�&—/’/Ñ#Ô#Ð# F×$7Ò$7Ñ$9Ô$9Ð$9Ð$9Ð$9Ð9Ð9õ —	’	�#˜dœm­C°°5½¼ÅhÄlÑ9SÔ9SÑ3S×2bÒ2bÑ2dÔ2dÑ,eÔ,eÑfÔfÑgÔgÐgÐgÐgÐgÐgÐgøøøøðhøøøð ˆo¥d§k¢k¡m¤mˆo½¼ÅXÄ\Ñ8RÔ8RÐSXÒ8XÑ8Xð ˆ? !ð Ð9�&—/’/Ñ#Ô#Ð# F×$7Ò$7Ñ$9Ô$9Ð$9Ð$9Ð$9Ð9Ð9ð 	�ŠÐ(°D´OÐQV×Q`ÒQ`ÑQbÔQbˆÑcÔcÐcÝ—+’+‘-”-ð 	%¥H¤Lµ´Ñ$>Ô$>¸uÒ$DÐ$DÝ˜˜g d¤o°eÑ<Ô<Ð<Ø”?Ð( 5Ý�IŠI�d”mÑ$Ô$Ð$õ —+’+‘-”-ð 	%¥H¤Lµ´Ñ$>Ô$>¸uÒ$DÐ$Dð àÐ9�&—/’/Ñ#Ô#Ð# F×$7Ò$7Ñ$9Ô$9Ð$9Ð$9Ð$9Ð9Ð9øˆ6Ð9�&—/’/Ñ#Ô#Ð# F×$7Ò$7Ñ$9Ô$9Ð$9Ð$9Ð9øøøsT   ÊBY ÍAY ÎN! ÎY Î!SÎ,A7SÐ#Y ÑA,SÓY ÓSÓAY Ô=C#Y Ù-Y<Ú__main__r   )/rP  rN  r   r   r   r   r   r   r   ÚhashlibÚhttp.serverr
   r   r�   r×   rÝ   rO   Úpathlibr   rX  rI   r=   r  Úzoneinfor   Ú__file__Úresolver;   r)  ÚEventrÛ   r   r,   r4   r6   r   rŠ   r•   rÁ   rÐ   rè   r  r  r6  rg  r†   Ú
SystemExitr   r   r   ú<module>rq     sF  ðà ]Ð ]Ø €€€Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø €€€Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð à	€Tˆ(�^„^×ÒÑÔÔ$€Ø€Y„_ÑÔ€ð 8Ð 7Ð 7ðð ð ðPð Pð Pð)ð )ð )ð
(Kð (Kð (Kð (Kð (Kñ (Kô (Kð (KðT Ð Ð Ð Ð ˆjÑ Ô Ð ðð ð ðð ð ð*Nð Nð Nðð ð ð*"5ð "5ð "5ð "5ðHYð Yð Yð

;ð 
;ð 
;ð*:ð *:ð *:ðX ˆZÒÐ˜j˜j¨¨©¬Ñ0Ô0Ð0ÐÐr   