
    QIjZ                    6   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	 ddl
mZ ddlmZ ej                  j                  d e ee      j%                         j&                               ddlmZmZmZ ddlmZmZ  ee      j%                         j6                  d	   Zed
z  ZdZdZdZ dZ!dZ"e de dhZ#ddddd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-d0d!Z.d1d"Z/d1d#Z0edfd2d$Z1d3d%Z2e3d&k(  r e2        yy)4zJIndex opcode 0x24 mode-1 action payload patterns across selector VM roots.    )annotationsN)Counter)Path)Any)find_cns_stringsread_sectionsva_to_offset)handler_for_opcodesection_name_for_va   outmap1_01amap2_02di(T    i   .cnszfrontier leafzfrontier readerz#frontier reader false branch targetzleaf table startzcurrent root table pointerzwrapper leaf)i*T i+T ioS i)T i)T i*T c                p    | j                         s|S t        j                  | j                  d            S )Nutf-8encoding)existsjsonloads	read_text)pathfallbacks     G/home/exedev/hwanse/tools/summarize_opcode24_action_payload_patterns.py	load_jsonr   ,   s*    ;;=::dnngn677    c                    d| dS )N0x08x values    r   hex32r%   2   s    c{r   c                <    t        | t              sy t        | d      S )Nr   )
isinstancestrintr#   s    r   	parse_hexr*   6   s    eS!ub>r   c                v    t        ||      }||dz   t        |       kD  ry t        j                  d| |      d   S )N   z<Ir   )r	   lenstructunpack_from)exesectionsvaoffsets       r   dword_atr4   <   s?    (B'F~!c#h.dC033r   c           	     (   g }| D ]~  }t        |j                  d            }| |j                  |j                  d       d|j                  d       ||j                  d      xs g |j                  d      xs g d        |j                  d 	       g }t	        |      D ]i  \  }}|d
z   t        |      k  r||d
z      d   n|d   t        z   }|}||d   k  s||d   z
  t        kD  r|d   t        z   }|j                  i |d|i       k |S )NselectedPointerHexgroup:slot	fieldMaps	linkedCns)selectorstartr:   r;   c                    | d   S )Nr=   r"   )items    r   <lambda>zroot_ranges.<locals>.<lambda>Q   s
    W r   )keyr   r=   end)r*   getappendsort	enumerater-   MAX_ROOT_BYTES)		selectorsrootsrowselectedrangesindexroot
next_startrB   s	            r   root_rangesrP   C   s6   E 
SWW%9:;"www/0#''&/1BC! WW[17R WW[17R		
	
 
JJ-J.F ' ,t27!)c%j2HU519%g.dSZm^lNl
$w-3g#6#Gw-.0C**uc*+, Mr   c                   | dddS | t         v rdt         |    t        |       dS |j                  |       }|rA|t        v rd}n'|j	                  d      r|j                  d      rd	}nd
}||t        |       dS || cxk  r|k  rn nddt        |       dS t        ||       }|rd|t        |       dS | dk  rdddS | dz	  dk  r| dz  dk  rdddS dddS )Nmissing-)kindmeaningroute-frontier)rT   rU   targetVaHex	route-cnsmapr   field-map-cnscnslocal-payload-pointerz%pointer inside local lookahead windowzexe-pointeri  zsmall-scalarzsmall scalarr   i   i   pairzpacked pair or script wordscalarznon-pointer scalar)FRONTIER_VALUESr%   rC   	ROUTE_CNS
startswithendswithr   )r$   r1   cns_stringslocal_start	local_endr[   rT   sections           r   classify_valuerg   \   s    }!c22(_U5K\abg\hii
//%
 C
)D^^E"s||F';"DDU5\JJe(y(/<ctyz  uA  B  	B!(E2G%'%PU,WW&>BB56>g"=+GHH)=>>r   c                2    dj                  d | D              S )N,c              3  &   K   | ]	  }|d      ywrT   Nr"   .0r?   s     r   	<genexpr>z row_signature.<locals>.<genexpr>}   s     7TDL7   )join)	lookaheads    r   row_signaturerr   |   s    887Y777r   c                8   t        | |      }g }t        |      D ]|  }t        |d   |d   d      D ]b  }t        | ||      }||dz  dk7  rt	        ||      d u}|dz	  dz  }	|dz   }
|t
        dz  z   }g }t        dt
        dz         D ]  }||dz  z   }t        | ||      }t        ||||
|      }||dz  nd }|t        | ||      ni }|j                  d|dz  d	t        |      |t        |      nd |d
   |d   |j                  d      |d|dnd |j                  d      |j                  d      d	        t        d |D              }|j                  i d|d   dt        |d          dt        |d          d|d   d|d   d|dt        |      dd||d   z
  d	d|dt        |      d|	dd|	ddd|d z	  dz  dd!d|d"z	  dz  dd#|d$| d%| xr |	dk(  d&|t        k(  t        |      t        t        |j!                                     t#        d' |D              t#        d( |D              t#        d) |D              t#        d* |D              t%        d+ |D              t%        d, |D              |d-	       e  |S ).Nr=   rB   r,      $      r   z+0xxrT   rU   rW   r    02xhandlerSectionisCodeHandler)		offsetHexvaHexvalueHexrT   rU   rW   
lowByteHexlowByteHandlerSectionlowByteIsCodeHandlerc              3  &   K   | ]	  }|d      ywrk   r"   rl   s     r   rn   zscan_roots.<locals>.<genexpr>   s     !E4$v,!Ero   r<   rootRangeHexz..r:   r;   r2   r|   relativeOffsetHexr$   r}   modemodeHexbyte2Hexr   byte3Hex   pointerCollisionopcodeCandidatemode1CandidatecurrentBoundaryc              3  ,   K   | ]  }|d    dk(    yw)rT   rV   Nr"   rl   s     r   rn   zscan_roots.<locals>.<genexpr>   s     0hVZfAQ1Q0h   c              3  ,   K   | ]  }|d    dk(    yw)rT   rX   Nr"   rl   s     r   rn   zscan_roots.<locals>.<genexpr>   s     *]44<;+F*]r   c              3  *   K   | ]  }|d    dv   yw)rT   >   rX   rZ   Nr"   rl   s     r   rn   zscan_roots.<locals>.<genexpr>   s     -saed6l>\.\-ss   c              3  ,   K   | ]  }|d    dk(    yw)rT   r\   Nr"   rl   s     r   rn   zscan_roots.<locals>.<genexpr>   s     .m[_tF|?V/V.mr   c              3  H   K   | ]  }|j                  d       du sd  yw)r   Tr   NrC   rl   s     r   rn   zscan_roots.<locals>.<genexpr>   s"     +p$txxPfGgkoGoA+ps   ""c              3  J   K   | ]  }|j                  d       dk(  sd  yw)r   z.datar   Nr   rl   s     r   rn   zscan_roots.<locals>.<genexpr>   s"     +t$txxPgGhlsGsA+ts   ##)	kindSignaturelookaheadKindCountsdirectFrontierOperandrouteCnsOperandfieldMapCnsOperandlocalPayloadPointercodeLowByteCountdataLowByteCountrq   )r   rP   ranger4   r	   LOOKAHEAD_DWORDSrg   r
   rD   r%   rC   r   CURRENT_OPCODE24_VArr   dictsorteditemsanysum)r0   r1   rH   rc   rowsrN   r2   r$   pointer_collisionr   rd   re   rq   rM   item_va
item_value
item_classlow_bytehandlerkind_countss                       r   
scan_rootsr      s   "31KDI& ;WtE{A6 :	BS(B/E} 4 ,Xu =T IQJ$&Dq&K-11IIq"2Q"67 uqy.%c8W=
+J+{\ef
0:0F:,DIQI],S(HEce  '*519Q-%8!&w9C9OE*$5UY *6 2#-i#8'1~~m'D=E=Q8C.&9W[18=M1N07O0L
& "!E9!EEKKKZ 0"uT']';&<BuT%[?Q>R$S  k!2  k!2	
 " U2Y (3rDM/A!.D)E U e D D: "erkT%9#$> ? "erkT%9#$> ? '(9 &+<'<  %+<'<&K$!)!" &r-@'@#$ &39%=+/{7H7H7J0K+L-00h^g0h-h'**]S\*]']*--sir-s*s+..mcl.m+m(++p)+p(p(++t)+t(t!*5;:	;x Kr   c                    | j                  d      | j                  d      | j                  d      | j                  d      | j                  d      | j                  d      xs g | j                  d      | j                  d      xs i | j                  d	      | j                  d
      | j                  d      | j                  d      | j                  d      | j                  d      | j                  d      xs g dS )Nr<   r|   r}   r   r   r:   r   r   r   r   r   r   r   r   rq   )r<   r|   r}   r   r   r:   r   r   r   r   r   r   r   r   rq   r   )rJ   s    r   	brief_rowr      s    GGJ'!GGJ' WW%89/WW[)/R1"ww'<=C!$)@!A77#45!gg&:;"ww'<=GG$67GG$67WW[)/R r   c                (   t        |       }t        | ||      }|D cg c]
  }|d   s	| }}|D cg c]
  }|d   s	| }}t        d |D        d       }|r|j                  d      nd }|r|j                  d      nd }	|D cg c]  }||j                  d      |k(  r| }
}|D cg c]  }|	|j                  d      |	k(  r| }}|D cg c]:  }t        |j                  d      xs g v st
        |j                  d      xs g v r|< }}t        d |D              }|j                  d      D cg c]-  \  }}||t        |D ch c]  }|d	   |k(  r|d
    c}      d/ }}}}|D cg c]
  }|d   s	| }}|D cg c]
  }|d   s	| }}|D cg c]
  }|d   s	| }}d}i dddddt        dt
        dt        t              dt        dt        t        |            dt        |      dt        |      dt        |      t        |      z
  dt        |      dt        |D ch c]  }|d
   	 c}      dt        |      dt        |D ch c]  }|d
   	 c}      d t        |      d!t        |      d"t        |      i d#t        d$ |D              d%|d ud&|rt        |      nd d't        |
      d(t        |
D ch c]  }|d
   	 c}      d)|
d d* D cg c]  }t        |       c}d+t        |      d,t        |D ch c]  }|d
   	 c}      d-|d d D cg c]  }t        |       c}d.|d/|d d D cg c]  }t        |       c}d0|d d D cg c]  }t        |       c}d1|d d D cg c]  }t        |       c}d2d3d4d5d6g d7d8|S c c}w c c}w c c}w c c}w c c}w c c}w c c}}}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )9Nr   r   c              3  ,   K   | ]  }|d    s	|  yw)r   Nr"   rm   rJ   s     r   rn   z build_summary.<locals>.<genexpr>   s     BC3/@+ACB   
r$   r   r:   c              3  &   K   | ]	  }|d      yw)r}   Nr"   r   s     r   rn   z build_summary.<locals>.<genexpr>   s     As3z?Aro      r}   r<   )r}   countselectorCountr   r   r   a  Opcode 0x24 mode 1 is common in selector VM roots, and the current route boundary's exact dword appears in many unrelated roots. Across all mode-1 candidates, the next 16 dwords do not contain direct frontier values or CNS filename operands. This supports treating the current 0x005428e4 region as generic action/state payload evidence, not as a strict map1_01a->map2_02d transition proof.titlez(Opcode 0x24 Action Payload Pattern IndexscopezRselector VM roots from original EXE scene-selector table; no savedata slot parsingsourcetargetcurrentOpcode24VaHexlookaheadDwordsselectorRootCountlowByte24RowCountopcodeCandidateCountpointerCollisionCountmode1CandidateCountmode1SelectorCountmode1CurrentRouteScopeRowCount#mode1CurrentRouteScopeSelectorCountdirectFrontierOperandCountrouteCnsOperandCountfieldMapCnsOperandCountlocalPayloadPointerRowCountc              3  ,   K   | ]  }|d    s	d  yw)r   r   Nr"   r   s     r   rn   z build_summary.<locals>.<genexpr>  s     *acJ_F`1*ar   currentBoundaryFoundr   currentValuePeerCountcurrentValuePeerSelectorCountcurrentValuePeerSamples(   currentSignaturePeerCount!currentSignaturePeerSelectorCountcurrentSignaturePeerSamplestopMode1ValuesfrontierOperandSamplesrouteCnsOperandSamplesfieldMapCnsOperandSamplespromotionStatusblockedclassificationzgeneric-action-state-payloadremainingProofs)zCruntime producer trace for opcode 0x24 mode1 source byte 0x0059e348z,strict map1_01a source coordinate or hotspotzScontrol-flow proof that selector leaf/wrapper execution reaches the frontier reader
conclusion)r   r   nextrC   ROUTE_SOURCEROUTE_TARGETr   most_commonr-   r%   r   r   rP   r   r   )r0   rH   r1   r   rJ   opcode_rows
mode1_rowscurrentcurrent_valuecurrent_signaturecurrent_value_peerscurrent_signature_peersroute_scope_rowsvalue_counts	value_hexr   
top_valuesdirect_frontier	route_cnsfield_map_cnsr   s                        r   build_summaryr      s?   S!Hc8Y/D"&A3#.?*@3AKA!%?#-=)>#?J?B4BDIG,3GKK(M8?O4T!$)9])J 	 
 "(SWW_-EIZ-Z 	 
 "CGGK06B7<CGGT_L`Lfdf;g 	  AjAAL !- 8 8 <
 
 Iu " +5"$'z?i/ J" 	

J 
 '1QsC8O4PsQOQ *Ec2C.DEIE$.LS#6J2KSLML	i ';'e' 	,' 	,	'
 	&9 :' 	+' 	SY!78' 	SY' 	K 0' 	 TS-=!=' 	s:' 	cj"Is3z?"IJ' 	)#.>*?' 	.sO_3`C
O3`/a' 	%c/&:'  	I!'" 	"3}#5#'$ 	&s*a
*a'a%'& 	t 3''( 	9W-d)'* 	 %8!9+', 	(I\-]#c*o-])^-'. 	">QRUSU>V#WsIcN#W/'0 	$S)@%A1'2 	,SMd1ec#j/1e-f3'4 	&BYZ][]B^'_3	#'_5'6 	*7'8 	!_Sb=Q"Rc9S>"R9': 	!Ys^"Lc9S>"L;'< 	$cr@R%Sin%S='> 	9?'@ 	8A'B 	 
C'L 	jM' 'M B?"	
 REL& #J3` .^#W1e'_"R"L%Ss   
N3N3
N8N8N=)O?O6O	OO0
O;O
OO
O"%O"4O'O,O1.O6
O;4P 
P
1P

P
Oc                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| d    dd | d!    d"| d#    d$| d%    d&| d'    d(| d)    d*| d+    d,| d-    dd.| d/    d,| d0    dd1| d2    d3| d4    d| d5   dd6dg}| j                  d7      xs i }|r|j                  d8|j                  d9       d
d:|j                  d;       d
d<|j                  d=       d>|j                  d?       d
d@dAj                  |j                  dB      xs g       xs dC dDt        j                  |j                  dE      xs i dFG       d
ddHdIg       |j                  dJ      xs g D ]  }|j                  dK|j                  dL       dM|j                  d=       dM|j                  d?       dN|j                  dO       dPt        j                  t        |j                  dQ                   dP|j                  dR      xs dC dS        |j                  d       |j                  g dT       | dU   D ]&  }|j                  dK|d?    dN|dV    dP|dW    dS       ( |j                  g dX       | dY   D ]  }dAj                  |j                  dB      xs g       xs dC}|j                  dK|j                  d9       dM|j                  d=       dM|j                  d?       dN| dP|j                  dZ       dP|j                  d[       dP|j                  d\       dS        |j                  g d]       |j                  d^ | d_   D               |j                  d       d`j                  |      S )aNz*# Opcode 0x24 Action Payload Pattern Index zScope: r   .z- route under test: `r   z -> r   `z!- current opcode 0x24 boundary: `r   z- lookahead: r   z dwordsz- selector roots scanned: r   z- low-byte 0x24 rows: r   z- opcode candidates: r   z- pointer collisions: r   z- mode 1 candidates: r    across r   z selector rootsz!- route-scope mode 1 candidates: r   r   z0- direct frontier operands in mode 1 lookahead: r   z*- route CNS operands in mode 1 lookahead: r   z.- field-map CNS operands in mode 1 lookahead: r   z+- mode 1 rows with local payload pointers: r   z- current boundary found: r   z- current value peers: r    rows across r   z- current signature peers: r   r   z- classification: r   z- promotion status: r   r   z## Current Boundaryr   z- selector: `r<   z- root range: `r   z- va/value: `r|   z` / `r}   z- field maps: , r:   rS   z- lookahead kind counts: `r   T)	sort_keysz;| offset | va | value | kind | meaning | low byte handler |z%| --- | --- | --- | --- | --- | --- |rq   z| `r{   z` | `z` | rT   z | rU   r   z |)z## Top Mode 1 Valuesr   z!| value | rows | selector roots |z| --- | ---: | ---: |r   r   r   )r   z## Current Value Peer Samplesr   za| selector | va | value | route maps | local payload ptr | frontier operand | route CNS operand |z+| --- | --- | --- | --- | --- | --- | --- |r   r   r   r   )r   z## Remaining Proofsr   c              3  &   K   | ]	  }d |   yw)z- Nr"   rl   s     r   rn   zmarkdown.<locals>.<genexpr>p  s     D2dVDro   r   
)	rC   extendrp   r   dumpsrD   htmlescaper(   )summarylinesr   r?   rJ   
route_mapss         r   markdownr   )  s   4

''"#1%

 12$wx7H6IK
+G4J,K+LAN
 1237;
$W-@%A$BC
 )<!= >?
(> ?@A
 )@!A BC
(= >?xPdHeGffuv
+G4T,U+VV^_f  hM  `N  _O  O^  	_
:7C_;`:ab
4W=S5T4UV
8AZ9[8\]
5g>[6\5]^
$W-C%D$EF
!'*A"B!C=QXYxQyPz  {J  	K
%g.I&J%K=Y`  bE  ZF  YG  GV  	W
W%5678
w'89:;


7E: kk+,2GGKK
34A6gkk.9:!<GKK01w{{:7N6OqQTYYw{{;'?'E2FM#NO(GKK@U4V4\Z\hl)m(nnopI3	
 		 KK,2 	DLLdhh{+,E$((72C1DE$((S]J^I__c88F#$CC8K4L(M'Nc8834;<B@	 	R	LL   '( [s3z?+4G~S_AU@VVXYZ[	LL   01 
YYsww{39r:Ac
#''*%&eCGGG,<+=U377:CVBWW[l#cgg&;<=SI`Aa@bbefifmfmn  gA  fB  BDE	

 
LL01	LLD1B)CDD	LL99Ur   c                $   | j                  d      xs i }d}|r+dj                  d |j                  d      xs g D              }dj                  d | d   D              }dj                  d | d   D              }dj                  d	 | d
   D              }dj                  g dddddddddddddddddt        j                  | d          ddd t        j                  | d!          d"t        j                  | d#          d$d%| d&    d$d'| d(    d)d*| d+    d,| d-    d.d/| d0    d,| d1    d.d2| d3    d)d4| d5    d)d6| d7    d)d8| d9    d:| d;    d<d=| d>    d:| d?    d<d@t        j                  | dA          d)dBt        j                  | dC          d)dDdEt        j                  | dF          dGdHdIt        j                  t	        |j                  dJ                   dKt        j                  t	        |j                  dL                   dMt        j                  t	        |j                  dN                   dOdPdQ| dRdSdTdQ| dRdUdVdQ| dRdWd| dXdYdZd      S )[Nr   r   c              3  V  K   | ]   }d t        j                  t        |j                  d                   dt        j                  t        |j                  d                   dt        j                  t        |j                  d                   dt        j                  t        |j                  d                   dt        j                  t        |j                  d                   dt        j                  t        |j                  d	      xs d
             d # yw)<tr><td><code>r{   </code></td><td><code>r|   r}   </code></td><td>rT   	</td><td>rU   r   rS   
</td></tr>N)r   r   r(   rC   rl   s     r   rn   zhtml_page.<locals>.<genexpr>y  s      

 S+)>%?@A BS'):%;<= >S*)=%>?@ A;;s488F#3456 7;;s488I#6789 :;;s488,C#D#KLMN O

s   D'D)rq   c              3  l   K   | ],  }d t        j                  |d          d|d    d|d    d . yw)r  r}   r  r   r  r   r  Nr   r   r   s     r   rn   zhtml_page.<locals>.<genexpr>  sU       	[[Z12 37|n ?#$ %	s   24r   c              3    K   | ]X  }d t        j                  t        |j                  d                   dt        j                  t        |j                  d                   dt        j                  t        |j                  d                   dt        j                  dj	                  |j                  d      xs g       xs d       d	t        j                  t        |j                  d
                   d	t        j                  t        |j                  d                   d	t        j                  t        |j                  d                   d [ yw)r  r<   r  r|   r}   r  r   r:   rS   r  r   r   r   r  N)r   r   r(   rC   rp   r   s     r   rn   zhtml_page.<locals>.<genexpr>  s!      	[[SWWZ%8!9:; <[[SWWW%5!678 9[[SWWZ%8!9:; <{{499SWW[%9%?R@GCHI J{{3sww'<=>?@ A{{3sww'>?@AB C{{3sww'89:;< =	s   EE!r   c              3  N   K   | ]  }d t        j                  |       d  yw)z<li></li>Nr	  rl   s     r   rn   zhtml_page.<locals>.<genexpr>  s#     adDT!2 359as   #%r   r   z<!doctype html>z<html lang="en">z<head>z  <meta charset="utf-8">zF  <meta name="viewport" content="width=device-width, initial-scale=1">z9  <title>Opcode 0x24 Action Payload Pattern Index</title>z	  <style>z[    body { margin: 24px; background: #111; color: #eee; font: 14px system-ui, sans-serif; }zJ    table { border-collapse: collapse; width: 100%; margin: 18px 0 28px; }zP    th, td { border: 1px solid #3a3a3a; padding: 6px 8px; vertical-align: top; }z9    th { background: #202020; position: sticky; top: 0; }z    code { color: #9bd4ff; }z
  </style>z</head>z<body>z3  <h1>Opcode 0x24 Action Payload Pattern Index</h1>z  <p>Scope: r   z.</p>z  <ul>z    <li>route: <code>r   z -&gt; r   z</code></li>z,    <li>current opcode 0x24 boundary: <code>r   z     <li>selector roots scanned: r   r  z    <li>mode 1 candidates: r   r   r   z selector roots</li>z'    <li>route-scope mode 1 candidates: r   r   z"    <li>direct frontier operands: r   z    <li>route CNS operands: r   z     <li>field-map CNS operands: r   z    <li>current value peers: r   r   r   z roots</li>z!    <li>current signature peers: r   r   z    <li>classification: r   z    <li>promotion status: r   z  </ul>z  <p>r   z</p>z  <h2>Current Boundary</h2>z  <p>selector <code>r<   z</code>; root <code>r   z</code>; value <code>r}   z</code>.</p>z  <table><thead><tr><th>offset</th><th>va</th><th>value</th><th>kind</th><th>meaning</th><th>low-byte handler section</th></tr></thead>z	  <tbody>z</tbody></table>z  <h2>Top Mode 1 Values</h2>zS  <table><thead><tr><th>value</th><th>rows</th><th>selector roots</th></tr></thead>z%  <h2>Current Value Peer Samples</h2>z  <table><thead><tr><th>selector</th><th>va</th><th>value</th><th>field maps</th><th>local ptr</th><th>frontier operand</th><th>route CNS operand</th></tr></thead>z  <h2>Remaining Proofs</h2>z</ul>z</body>z</html>)rC   rp   r   r   r(   )r   r   current_rows
value_rows	peer_rowsproof_itemss         r   	html_pager  u  s?   kk+,2GLww 

  K06B

 

   +, J   45 I ''agN_F`aaK99 000 	0 	#	0
 	Q0 	D0 	0 	f0 	U0 	[0 	D0 	'0 	0 	0 	0  	>!0" t{{77#345U;#0$ 	%0&  GH,= >?wt{{SZ[cSdGeFffrs'0( 7w?U7V6WWcd)0* +73F+G*HN+0, &g.C&D%EXgVjNkMl  mA  	B-0. 2':Z2[1\\del  nS  fT  eU  Ui  	j/00 -W5Q-R,SSXY102 'w/E'F&GuM304 +73L+M*NeT506 (0G(H'IW^_~W  WA  AL  	M708 ,G4O,P+QQ^_f  hK  `L  _M  MX  	Y90: #4;;w7G/H#I"J%P;0< %T[[9J1K%L$MUS=0> 	?0@ GL12348A0B 	&C0D t{{3w{{:/F+GHII]^b^i^ijmnunyny  {I  oJ  kK  _L  ^M  Mb  cg  cn  cn  or  sz  s~  s~  I  sJ  oK  cL  bM  MY  	ZE0F 	RG0H L>!12I0J 	'K0L 	^M0N J</0O0P 	0Q0R 	nS0T I;./U0V 	&W0X U#Y0Z 	[0\ 	]0^ 	_0 0 0r   c                    |j                  dd       |dz  j                  t        j                  | dd      d       |:|j                  j                  dd       |j                  t        |       d       y y )	NT)parentsexist_ok%opcode24_action_payload_patterns.jsonF)ri   r8   )ensure_ascii
separatorsr   r   )mkdir
write_textr   r   parentr  )r   out_dirhtml_outs      r   write_outputsr    s{    MM$M.66BB

7:F C  dT:Ig.A r   c                 &   t        j                  t              } | j                  dt        t
        dz         | j                  dt        t        dz         | j                  dt        t               | j                  dt        d d	
       | j                         }t        |j                  j                         t        |j                  g             }t        ||j                  |j                         t!        d|j                  dz          y )N)descriptionz--exezHwanse2.exe)typedefaultz--selectorszsave_scene_selectors.jsonz	--out-dirz
--html-outz!Optional HTML report output path.)r   r!  helpz*wrote opcode24 action payload patterns -> r  )argparseArgumentParser__doc__add_argumentr   ROOTOUT
parse_argsr   r0   
read_bytesr   rH   r  r  r  print)parserargsr   s      r   mainr.    s    $$9F
dD=4HI
D#@[:[\
$<
4DghD$.."%G '4<<7	6t||Fm7m6n
opr   __main__)r   r   r   r   returnr   )r$   r)   r0  r(   )r$   z
str | Noner0  
int | None)r0   bytesr1   
list[dict]r2   r)   r0  r1  )rH   r3  r0  r3  )r$   r1  r1   r3  rc   zdict[int, str]rd   r)   re   r)   r0  r   )rq   r3  r0  r(   )r0   r2  r1   r3  rH   r3  r0  r3  )rJ   r   r0  r   )r0   r2  rH   r3  r0  r   )r   r   r0  r(   )r   r   r  r   r  zPath | Noner0  None)r0  r4  )4r%  
__future__r   r#  r   r   r.   syscollectionsr   pathlibr   typingr   r   insertr(   __file__resolver  probe_exe_scene_tablesr   r   r	   summarize_script_handler_tabler
   r   r  r'  r(  r   r   r   r   rG   r`   r_   r   r%   r*   r4   rP   rg   rr   r   r   r   r   r  r  r.  __name__r"   r   r   <module>r@     st   P "     
    3tH~--/667 8 P P R H~''*
Ul    nDnD	  !5",842???  ? 	?
 ? 
?@8?D(PfIXTn 25d Bq zF r   