
    UHj7                       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m	Z	 ej                  j                  d e e	e      j                         j                               ddlmZmZmZ  e	e      j                         j(                  d   Zedz  ZdZd	Zd
ZddZddZddZddZddZ	 	 	 	 	 	 	 	 	 	 	 	 ddZddZ ddZ!ddZ"ddZ#d dZ$e%dk(  r e$        yy)!zLSummarize secondaryBranchState reset/write scope around the current blocker.    )annotationsN)Path)offset_to_varead_sectionsva_to_offset   outi`Y iA i@ c                    d| dS )N0x08x )values    J/home/exedev/hwanse/tools/summarize_save_selector_secondary_reset_scope.pyhex32r      s    c{    c           
        g }|D ]  }|j                  d      dk7  r|d   }||d   z   }| || }t        dt        dt        |      dz
              D ]  }||   dk7  rt	        |||z         }	|	t        j                  d||d	z         d   }
|	d
z   |
z   }||k(  sI|j                  |	t        |	      t        |      t        |	cxk  xr t        dz   k  nc d         |S )Nnamez.textrawraw_sizer         z<ir         )callVa	callVaHextargetVaHexinsideOpcode10Handler)
getrangemaxlenr   structunpack_fromappendr   OPCODE10_HANDLER)exesectionstargetrowssectionstartenddataindexvareldests               r   	call_refsr2      s   D ;;v')gj))5~1c!SY]34 	EE{d"h6Bz$$T4;A>C6C<Dv~ !&r#(;-=-]FVY]F]-]	 	* Kr   c                &    | t        d||z
        | S )Nr   )r    )r&   offsetcounts      r   bytes_beforer6   6   s    s1fun%f--r   c                   t        |      }|j                  d      }t        |t              s|S t	        | |d      }|j                  d      dk(  r't        |      dk\  r|dd dk(  rd	|d<   d
|d<   d|d<   |S |j                  d      dk(  rd
|d<   d|d<   |S |j                  d      dk(  rd
|d<   d|d<   |S |j                  d      dk(  rd|d<   d|d<   |S d
|d<   |j                  d      xs d|d<   |S )N
fileOffsetr   kindunknown   s   ElocalTablePointerImmediateFwriteToSecondaryTablezGloads the secondary table address into a stack local; not a table writemeaningbaseAddressImmediatez:loads secondary table base for opcode 0x10 helper dispatchindexedReadBytez+reads secondaryBranchState by selected slotindexedWriteImmediateTz,direct indexed write to secondaryBranchStatezunknown reference)dictr   
isinstanceintr6   r!   )r&   r'   refrowr4   befores         r   classify_secondary_refrJ   :   s5   
s)CWW\"Ffc"
#vq)F
wwv)#Fq(8VBr]k=Y2F',#$bI J 
2	2',#$UI J 
-	-',#$FI J 
3	3'+#$GI J (-#$?,?IJr   c           
     8   |j                  d      xs g D ci c]  }|j                  d      | }}|j                  d      xs i }|j                  d      xs g D cg c]  }t        | ||       }}i }g }	g }
|D ]h  }|j                  d      xs d}|j                  |d      dz   ||<   |j                  d	      r|	j                  |       |dk(  sX|
j                  |       j |j                  d
      xs t        t              |j                  d      xs$ t        t               dt        t        dz          |j                  d      t        |      t        t        |j                                     t        |	      t        |
      |dS c c}w c c}w )Ntablesr   secondaryBranchStaterefsr9   r:   r   r   r?   	baseVaHexrangeHex..   slots)rO   rP   rS   refCountrefKindCountsdirectIndexedWriterCountunresolvedRefCountrN   )	r   rJ   r$   r   SECONDARY_TABLEr!   rD   sorteditems)r&   r'   branch_statetablerL   	secondaryrG   rN   kindsdirect_writers
unresolvedr9   s               r   secondary_table_summaryra   S   s   4@4D4DX4N4TRTU5eii&UFU

128bI ==(.B 	sHc2D  ENJ #wwv+)iia(1,d77*+!!#&9c"# ]];/I53IMM*-kE/4J3K2eTcfhThNiMj1kw'IfU[[]34$'$7!*o	 	! Vs   FFc                   t        |       }t        | ||      }t        | |t              }t	        |      dk(  xr t        d |D              }|j                  d      }	|j                  d      }
|j                  d      }|d   dk(  xr |d   dk(  }|xr |xr |	dk(  xr |dk(  }d	}|t        t              t        t              t	        |      ||d
|j                  dd      j                  dd      d   |j                  d      |	|
|j                  d      ||j                  d      |j                  d      |j                  d      d	||ddg d|d	S )Nr   c              3  &   K   | ]	  }|d      yw)r   Nr   .0rH   s     r   	<genexpr>z build_summary.<locals>.<genexpr>z   s     9o[^#>U:V9o   validBeforeFrontierCountvalidAfterFrontierCounttailValidSecondaryFillCountrV   r   rW   ak  The secondaryBranchState table has no direct indexed writes in .text; its direct references are table-base loads, stack-local table pointer loads, and indexed reads. Helper 0x00410c90 is reached by a single direct call inside the opcode 0x10 handler, so secondary resets/overwrites are driven by script opcode 0x10 rows. The current root has no valid secondary opcode 0x10 fill before the 0x00542b0c blocker and the 1:0 tail has no post-fill secondary fill. This narrows reset risk to unproven runtime order or still-untraced bytecode paths; it still does not promote map1_01a->map2_02d without a strict source hotspot.)helperVaHexopcode10HandlerHexdirectCallCountdirectCalls#onlyDirectCallInsideOpcode10HandlerrootRangeHex rQ   frontierReaderHexpredecessorRootHexlocalTailResetFoundpersistenceProvenstrictHotspotFound)	currentRootHexrr   'currentRootValidBeforeFrontierFillCount&currentRootValidAfterFrontierFillCountrs   &predecessorTailValidSecondaryFillCountpredecessorLocalTailResetFoundru   rv   Fblocked)zJprove selector 1:0 executes before selector 2:0 in the normal runtime pathzjprove no untraced bytecode path runs another secondary opcode 0x10 fill between 1:0 and the current readerz1find strict map1_01a source coordinate or hotspot)	rM   helper
routeScopenoDirectGlobalSecondaryWriter'noKnownPreFrontierResetInScopedEvidenceglobalResetRuledOutpromotionStatusremainingProofs
conclusion)
r   ra   r2   	HELPER_VAr!   allr   r   r%   split)r&   r[   secondary_state_sourcespredecessor_tail_resetpersistence_gapr'   r]   helper_callshelper_only_opcode10current_beforecurrent_after
tail_validno_direct_global_writerno_known_pre_frontier_resetr   s                  r   build_summaryr   p   s    S!H'X|DIS(I6L|,1oc9obn9o6o,001KLN+//0IJM'++,IJJ'(BCqHqYWkMlpqMq 	 	a	 !O	  	X  !* +"'(8"9"<0'3G
 699."MSSTXZ[\]^_!8!<!<=P!Q7E6C"8"<"<=Q"R6@.D.H.HI^._!0!4!45H!I"1"5"56J"K

 *A3N$$

 !; r   c                V    dj                  d | j                         D              xs dS )Nz, c              3  0   K   | ]  \  }}| d |   yw):Nr   )re   keyr   s      r   rf   z format_counts.<locals>.<genexpr>   s     G*#uuAeW%Gs   -)joinrZ   )countss    r   format_countsr      s"    99GGGN3Nr   c                   | d   }| d   }| d   }ddd|d    dd	|d
    dt        |d          dd|d    d|d    d|d    d|d    d|d    d|d    d|d    d|d    d| d    d | d!    d"| d#    d$| d%    d| d&   dd'dd(d)g}|d*   D ]&  }|j                  d+|d,    d-|d.    d/|d0    d1       ( |j                  g d2       |d3   D ]X  }|j                  d+|d4    d/|j                  d5      xs d6 d7|j                  d8       d7|j                  d9      xs d6 d1	       Z |j                  g d:       |j                  d; | d<   D               |j                  d       d=j	                  |      S )>NrM   r}   r~   z%# Save Selector Secondary Reset Scoperq   z- secondaryBranchState: `rP   `z- secondary refs: rT    (rU   )z$- direct secondary indexed writers: rV   z- unresolved secondary refs: rW   z- helper: `rk   z` direct calls rm   z1- helper only called inside opcode 0x10 handler: ro   z1- current valid before-frontier secondary fills: rx   z0- current valid after-frontier secondary fills: ry   z*- predecessor tail valid secondary fills: rz   z%- no direct global secondary writer: r   z2- no known pre-frontier reset in scoped evidence: r   z- global reset ruled out: r   z- promotion status: r   r   z## Helper Direct Callsz+| call | target | inside opcode10 handler |z| --- | --- | --- |rn   z| `r   z` | `r   z` | r   z |)rq   z## Secondary Table Refsrq   z'| ref | kind | writes table | meaning |z| --- | --- | --- | --- |rN   refVaHexr9   r   z | r?   r@   )rq   z## Remaining Proofsrq   c              3  &   K   | ]	  }d |   yw)z- Nr   re   items     r   rf   zmarkdown.<locals>.<genexpr>   s     D2dVDrg   r   
)r   r$   extendr   r   )summaryr]   r}   routelinesrH   s         r   markdownr      sY   ./IXFL!E/

#Ij$9#:!<
Yz232mIoD^6_5``ab
.y9S/T.UV
'	2F(G'HI
f]+,OFCT<U;VW
;FCh<i;jk
;EBk<l;mn
:5Ai;j:kl
4U;c5d4ef
/8W0X/YZ
<WEn=o<pq
$W-B%C$DE
w'89:;

 
5-E0 m$ 
#k"#5]);(<DE\A]@^^`a	

 
LL     
#j/"$swwv'=#&>c#''JaBbAccfwwy!(S)-	


 
LL01	LLD1B)CDD	LL99Ur   c                ~   | d   }| d   }| d   }dj                  d |d   D              }dj                  d |d   D              }d	j                  d
 | d   D              }dj                  ddddt        j                  |d          d|d    dt        j                  t        |d                d|d    d|d    dd|d    d|d    d|d    dd |d!    d"|d#    d$|d%    dd&| d'    d(| d)    d*| d+    d,t        j                  | d-          d.	d/t        j                  | d0          d.d1|d2d3|d2d4| d5g      S )6NrM   r}   r~   r   c              3     K   | ]?  }d t        j                  |d          dt        j                  |d          d|d    d A yw)<tr><td><code>r   z</code></td><td><code>r   </code></td><td>r   
</td></tr>Nhtmlescaperd   s     r   rf   zhtml_page.<locals>.<genexpr>   sb       	[[[!123 4[[]!345 6*+, -	s   AArn   c              3  T  K   | ]  }d t        j                  |d          dt        j                  |j                  d      xs d       dt        j                  t        |j                  d                   dt        j                  |j                  d      xs d       d	  y	w)
r   r   r   r9   r   z	</td><td>r?   r@   r   N)r   r   r   strrd   s     r   rf   zhtml_page.<locals>.<genexpr>   s       	[[Z12 3{{3776?1c23 4{{3sww'>?@AB C{{3779-456 7		s   B&B(rN   rq   c              3  N   K   | ]  }d t        j                  |       d  yw)z<li>z</li>Nr   r   s     r   rf   zhtml_page.<locals>.<genexpr>   s#     \tDKK-.e4\s   #%r   zW<!doctype html><meta charset="utf-8"><title>Save Selector Secondary Reset Scope</title>z<style>body{font-family:system-ui,sans-serif;background:#111;color:#eee;max-width:1100px;margin:24px auto}table{border-collapse:collapse;width:100%;margin:18px 0}td,th{border:1px solid #444;padding:6px 8px;vertical-align:top}code{color:#9bd4ff}</style>z,<h1>Save Selector Secondary Reset Scope</h1>z<p>secondaryBranchState <code>rP   z</code>; refs rT   r   rU   z%); direct secondary indexed writers: rV   z; unresolved refs: rW   z.</p>z<p>helper <code>rk   z</code>; direct calls rm   z1; helper only called inside opcode 0x10 handler: ro   z"<p>current before-frontier fills: rx   z ; current after-frontier fills: ry   z ; predecessor tail valid fills: rz   z&<p>no direct global secondary writer: r   z2; no known pre-frontier reset in scoped evidence: r   z; global reset ruled out: r   z; promotion status: r   z</p>z<p>r   z~<h2>Helper Direct Calls</h2><table><thead><tr><th>call</th><th>target</th><th>inside opcode10 handler</th></tr></thead><tbody>z</tbody></table>z<h2>Secondary Table Refs</h2><table><thead><tr><th>ref</th><th>kind</th><th>writes table</th><th>meaning</th></tr></thead><tbody>z<h2>Remaining Proofs</h2><ul>z</ul>)r   r   r   r   )r   r]   r}   r   	call_rowsref_rowsproofss          r   	html_pager      s   ./IXFL!E		  -( I yy  V$ H WW\IZA[\\F99c 	G6
(Yz5J)K(LN[deo[pZqqstxtt  AN  OX  Yh  Oi  Aj  uk  tl  lQ  R[  \v  Rw  Qx  xK  LU  Vj  Lk  Kl  lq  	r
6-011GO`HaGb  cT  U[  \A  UB  TC  CH  	I
,U3\-],^^~  @E  Fn  @o  p  pP  QV  W  Q@  PA  AF  	G
09X1Y0Z  [M  NU  V  N@  MA  A[  \c  dy  \z  [{  {O  PT  P[  P[  \c  du  \v  Pw  Ox  x|  	}
dkk',/016 	I 	L
'xu5  r   c                    |j                  dd       |dz  j                  t        j                  | dd      dz   d	       |d
z  j                  t	        |       d	       y )NT)parentsexist_okz(save_selector_secondary_reset_scope.jsonF   )ensure_asciiindentr   utf-8encoding(save_selector_secondary_reset_scope.html)mkdir
write_textjsondumpsr   )r   out_dirs     r   write_outputsr     sf    MM$M.99EE

7q9D@ F  99EEiPWFXcjEkr   c                    t        j                         } | j                  dt        t        dz         | j                  dt        t
        dz         | j                  dt        t
        dz         | j                  dt        t
        d	z         | j                  d
t        t
        dz         | j                  dt        t
               | j                         }t        |j                  j                         t        j                  |j                  j                  d            t        j                  |j                  j                  d            t        j                  |j                  j                  d            t        j                  |j                   j                  d                  }t#        ||j$                         t'        d|j$                  dz          y )Nz--exezHwanse2.exe)typedefaultz--branch-statezsave_selector_branch_state.jsonz--secondary-state-sourcesz*save_selector_secondary_state_sources.jsonz--tail-resetz)save_selector_predecessor_tail_reset.jsonz--persistence-gapz.save_selector_predecessor_persistence_gap.jsonz	--out-dirr   r   zwrote secondary reset scope -> r   )argparseArgumentParseradd_argumentr   ROOTOUT
parse_argsr   r&   
read_bytesr   loadsr[   	read_textr   
tail_resetr   r   r   print)parserargsr   s      r   mainr     s   $$&F
dD=4HI
(tSCd=de
3$NzHz{
T3Al;lm
+$Fv@vw
$<D

4$$...@A

4//9979KL

4??,,g,>?

4''1171CDG '4<<(	+DLL;e,e+f
ghr   __main__)r   rF   returnr   )r&   bytesr'   
list[dict]r(   rF   r   r   )r&   r   r4   rF   r5   rF   r   r   )r&   r   r'   r   rG   rD   r   rD   )r&   r   r'   r   r[   rD   r   rD   )r&   r   r[   rD   r   rD   r   rD   r   rD   r   rD   )r   zdict[str, int]r   r   )r   rD   r   r   )r   rD   r   r   r   None)r   r   )&__doc__
__future__r   r   r   r   r"   syspathlibr   pathinsertr   __file__resolveparentprobe_exe_scene_tablesr   r   r   r   r   r   rX   r   r%   r   r2   r6   rJ   ra   r   r   r   r   r   r   __name__r   r   r   <module>r      s   R "     
  3tH~--/667 8 L L H~''*
Ul	 4.2:;	;; "; !	;
 ; 
;|O/d&Rli( zF r   