
    UHjE                    ^   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 ej                  j                  d e e	e      j!                         j"                               ddlmZmZ  e	e      j!                         j*                  d   Zedz  Zed	z  Zd
ZdZh dZdddddZdddddZdZg dZg dZ d	g dddddgddg dddg ddd d!d"gdgZ!d<d#Z"d=d$Z#d>d%Z$d?d&Z%d@d'Z&dAd(Z'dBd)Z(	 	 	 	 	 	 	 	 dCd*Z)dDd+Z*	 	 	 	 	 	 	 	 	 	 	 	 dEd,Z+dFd-Z,	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dGd.Z-dHd/Z.dId0Z/dJd1Z0dKd2Z1dLd3Z2	 dM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dNd4Z3dOd5Z4	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dPd6Z5edddddf	 	 	 	 	 	 	 	 	 	 	 	 	 dQd7Z6dRd8Z7efdSd9Z8dTd:Z9e:d;k(  r e9        yy)UzDScan byte-sized coordinate encodings for map1_01a -> map2_02d exits.    )annotationsN)Path)Any)offset_to_varead_sections   outzHwanse2.exemap1_01amap2_02d>   .data.rdata.text      )topbottomleftright)r   )r   r   )r   r   )r   r      )zstrict-source-target-byte-ownerztarget-spawn-strict-byte-ownerzaxis-or-span-sequence-ownerzruntime-trigger-proof)zObyte coordinate hit owned by a strict map1_01a -> map2_02d event/control recordzDreciprocal target-spawn byte hit with strict source-target ownershipzWaxis/span byte sequence tied to a source exit table instead of selector/text collisionszFruntime trigger proving a byte-coordinate match selects the target map)zbyte coordinate scanszselector ownersztext/code collisions)pathfieldszout/map_exit_candidates.jsonexitCandidatesblockedTargetCandidateszout/save_scene_selectors.json)selectedPointer	fieldMaps	linkedCnszout/scene_events.json)recordVapointTableVapointTableEndVazout/event_transitions.jsonr   targetsc                2    t        | t              rd| dS dS )N0x08x-
isinstanceint)values    I/home/exedev/hwanse/tools/summarize_map1_01a_exit_byte_coordinate_scan.pyhex32r+   5   s    )%5Rc{>3>    c                $    | j                  d      S )N )hex)datas    r*   	hex_bytesr1   9   s    88C=r,   c                p    | j                         s|S t        j                  | j                  d            S )Nutf-8encoding)existsjsonloads	read_text)r   fallbacks     r*   	load_jsonr;   =   s*    ;;=::dnngn677r,   c                r    | D ]2  }t        |d         }|t        |d         z   }||cxk  r	|k  s.|c S  4 y )Nrawraw_sizer(   )sectionsoffsetsectionstartends        r*   section_for_offsetrE   C   sO     GEN#c'*-..F S N !
 r,   c                   | D cg c]#  }t        |j                  d      t              r|% }}|j                  d        g }t	        |      D ]  \  }}t        |d         }|dz   t        |      k  rt        ||dz      d         nd}|j                  |j                  d       d|j                  d       ||t        |      t        |      |j                  d	      xs g |j                  d
      xs g d        |S c c}w )Nr   c                    t        | d         S )Nr   r?   )rows    r*   <lambda>z'selector_owner_ranges.<locals>.<lambda>R   s    C(9$: ; r,   keyr   i  ` group:slotr   r   )selectorrC   rD   	rootVaHexrootEndVaHexr   r   )r'   getr(   sort	enumeratelenappendr+   )save_scene_selectorsrH   startsrowsindexrC   rD   s          r*   selector_owner_rangesr[   L   s    (cgg/0#6 	F 
 KK;K<D' 
sC)*+;@19s6{;Rc&#$567Xb777+,Acggfo->?u!#J-3-3
 	 K's   (Dc                @    | D ]  }|d   |cxk  r|d   k  s|c S   y )NrC   rD    )rangesvarH   s      r*   selector_owner_for_var`   c   s5     w<2*E
*J + r,   c                    i }| D ]<  }|j                  d      }t        |t              s%|j                  d      xs g ||<   > |S )Nr   r!   )rR   r'   r(   )event_transitionsrY   rH   	record_vas       r*   transition_targets_by_recordrd   j   sL    !#D  7GGJ'	i%!ggi06BDO7 Kr,   c           
        | D ]  }|j                  d      }|j                  d      }t        |t              rt        |t              sF|j                  d      }t        |t              r|n|}||cxk  r|k  swn z|j                  d      |t        |      t        |      t        |      |j                  |g       dc S  y )Nr   r    r   map)rf   r   recordVaHexpointTableVaHexpointTableEndVaHexr!   )rR   r'   r(   r+   )scene_eventsevent_targetsr_   eventrc   point_end_vapoint_start_vastart_vas           r*   strict_event_owner_for_varp   s   s    
  IIj)	yy!23)S)L#1N>2%/%D>)r(L(yy'%$Y/#(#8&+L&9(,,Y;   r,   c           
        d }t        | D cg c]$  }t        |j                  d      t              s#|& c}d       D ]  }t        |d         |k  r|} n |sy |t        |d         z
  dkD  ry |j                  d      t	        |j                  d            |j                  d      |j                  d      xs g dS c c}w )	Nr   c                    t        | d         S )Nr   r?   )items    r*   rI   z)nearest_manifest_record.<locals>.<lambda>   s    T*-. r,   rJ   i   rf   
sceneIdHextilesets)rf   rg   rt   ru   )sortedr'   rR   r(   r+   )scene_manifestr_   previousrs   rH   s        r*   nearest_manifest_recordry      s    H(R$Jtxx
7KS,QR.  s:2%H 	C$%%-||E"X\\*56ll<0LL,2	  	Ss
   $CCc                    |r5|j                  d      t        k(  rt        |j                  d      xs g v ryy| dk(  ry|r|j                  d      dk(  ry	y
|r|j                  d      t        k(  ryyy)Nrf   r!   *strict-source-target-event-byte-coordinate"strict-event-other-byte-coordinater   text-code-byte-collisionrO   z2:0$current-selector-root-byte-collisionselector-root-byte-collision$source-scene-manifest-byte-collisionscene-manifest-byte-collisionunowned-data-byte-collision)rR   SOURCETARGET)section_namer_   selector_ownerstrict_event_ownermanifest_owners        r*   classify_hitr      s     ""5)V3-11)<BC?3w)j)U29-e$.9.(r,   c           	         | j                  d      }dddddddd	d
j                  t        |      d      }|t        | j                  d            fS )Nclassificationr   r   r   r               )r{   r|   r~   r   r   r   r   r}      vaHex)rR   str)rH   r   prioritys      r*   hit_priorityr      sa    WW-.N67./0101())*'($%	 
c#n
q!  S)***r,   c                   i }i }	d}
d}d}g d}	 | j                  ||      }|dk  rn|dz   }t        ||      }||j                  d      t        vrEt	        |d         }t        ||      }|b|dz  }|j                  |d      dz   ||<   |t        |d         z
  dz  dk(  r|
dz  }
|t        |d         z
  dz  dk(  r|dz  }t        ||      }t        |||      }t        ||      }t        |||||      }|	j                  |d      dz   |	|<   |t        |      ||t        |d         z
  dz  dk(  |t        |d         z
  dz  dk(  ||xs i j                  d      |xs i j                  d      |xs i j                  d	      xs g ||t        | t        d|d
z
        t        t        |       |t        |      z   d
z                d}t              t         k  rj#                  |       nEt%        |      t        d D              k  r't        t'        t                    fd      }||<   't)        t$              |t        |      ||
|t+        t)        |j-                                     t+        t)        |	j-                                     |	j                  dd      |	j                  dd      |	j                  dd      |	j                  dd      dS )Nr   r   namer=   r   r   rO   rP   r   r   )r_   r   rB   wordAligneddwordAlignedr   selectorOwnerselectorOwnerRootHexselectorOwnerFieldMapsstrictEventOwnermanifestOwner
contextHexc              3  2   K   | ]  }t        |        y wNr   .0rs   s     r*   	<genexpr>zscan_pattern.<locals>.<genexpr>	  s     $LD\$%7$Ls   c                     t        |          S r   r   )rZ   sampless    r*   rI   zscan_pattern.<locals>.<lambda>
  s    |GTYN?[ r,   rJ   r{   r|   r~   r}   )label
patternHexhitCountwordAlignedHitCountdwordAlignedHitCountsectionCountsclassificationCountsstrictSourceTargetHitCountstrictEventOtherHitCountcurrentSelectorRootHitCounttextCodeHitCountr   )findrE   rR   SCAN_SECTIONSr   r   r(   r`   rp   ry   r   r+   r1   maxminrU   SAMPLE_LIMITrV   r   rangerv   dictitems)exer@   selector_rangesrj   rk   rw   r   patternsection_countsclassification_countsword_aligned_countdword_aligned_count	hit_countsearchhitrB   r   r_   r   r   r   r   rH   worstr   s                           @r*   scan_patternr      s5    &(N,.IGF
hhw'7q$Xs3?gkk&1F76?+(C(:Q	'5'9'9,'JQ'N|$#gen%%*a/!##gen%%*a/1$.C6|]TVW0D%
 1F0I0I.Z[0\_`0`n-2Y##gen"55:a? 3wu~#66!;q@,,277
C%3%9r$>$>{$K'5';&@&@&M&SQS 2+#CAsQwSXsSQX\GY\]G]9^$_`
 w<,&NN3#$LG$L!LLc'l+1[\E GEN_ ` W,/G(1 3f^%9%9%;<= $V,A,G,G,I%J K&;&?&?8'
 %:$=$=>bde$f'<'@'@2(
 2556PRST% r,   c                    | j                  d      xs i }t        j                  | j                  d      d      t        |j                  d      xs d      t        |j                  d      xs d      fS )Nsamplesidec   yr   x)rR   
SIDE_ORDERr(   )	candidater   s     r*   candidate_sort_keyr   #  s`    ]]8$*Fy}}V,b1FJJsO q!FJJsO q! r,   c                   g }| D ]  }|j                  d      t        k7  r|j                  d      xs g D ]  }|j                  d      xs i }g |j                  d      xs g |j                  d      xs g }t        d |j                  d      xs g D        d       }|j                  d      }|j                  d	      }t        |v st	        |t
              st	        |t
              s|j                  i |d
|i         i }	|D ]L  }
|
j                  d      xs i }|
|	|
j                  d      |j                  d      |j                  d	      f<   N t        |	j                         t              S )Nrf   r   r   r   selectorTargetCandidatesc              3  P   K   | ]  }|j                  d       t        k(  r|   yw)targetN)rR   r   )r   hints     r*   r   z"exit_candidates.<locals>.<genexpr>8  s)      !xx)V3 s   $&targetHintsr   r   
targetHintr   rJ   )
rR   r   nextr   r'   r(   rV   rv   valuesr   )map_exit_candidatesrY   map_rowr   r   r!   target_hintr   r   uniquerH   s              r*   exit_candidatesr   ,  sy   D& F;;u' %56<" 	FI]]8,2F-- 9:@b-- :;ArG %.]]=%A%GR K 

3A

3A Z3%7Jq#<NDyD,DE!	FF( F J"(bFIC&**S/BCJ &--/'9::r,   c                T    d| cxk  rdk  rn y d|cxk  rdk  sy  y t        | |g      S )Nr      )bytesr   r   s     r*   
byte_pointr   I  s6    McM  1mm ,!Q=r,   c                    t         j                  | d      \  }}|r|dz
  |f||f|dz   |fgS |r||dz
  f||f||dz   fgS ||fgS )Nr   r   r   )SIDE_VECTORrR   )r   r   r   dxdys        r*   side_axis_pointsr   O  si    __T6*FB	Q
QFQUAJ//	AE
QFQAJ//F8Or,   c                    d||dfd||dfd|dz   |dz   dfd|dz   |dz   dfg}t         j                  t        |       d      \  }}||z   }||z   }|j                  d	||dfd
||dfg       |S )Nztile byte x,yxyztile byte y,xyxzone-based byte x,yr   zone-based byte y,xr   zoutside byte x,yzoutside byte y,x)r   rR   r   extend)r   r   r   variantsr   r   	outside_x	outside_ys           r*   byte_pair_variantsr   X  s    	!Q%	!Q%	q1ua!eT2	q1ua!eT2	H __SY/FBBIBIOO	Y	48	Y	48  Or,   c
                0   g }
t        |||      D ]  \  }}}}|dk(  rt        ||      nt        ||      }|	 | }||
j                  |||d|dddd       It        | |||||||      }|j	                  ||d|dd       |
j                  |        |
S )	Nr   r   r%   r   T)r   pointpackedOrderr   r   skippedOutOfByteRangeF)r   r   r   )r   r   rV   r   update)r   r@   r   rj   rk   rw   r   r   r   label_prefixscansr   pxpyorderr   
full_labelrH   s                     r*   scan_byte_pair_variantsr   i  s     E 24A > r2u(-*R$:b";M$~eW-
?LL#!+$!)-  	
 	

B' %*
 	
 	S9: Lr,   c                   | j                  d      xs i }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }t        d ||||fD              sg S |dk(  rd	||fd
||fd||fd||fg}n|dk(  rd	||fd
||fd||fd||fg}ng S t               }g }	|D ]4  \  }
}}||f|v r|j                  ||f       |	j	                  |
||f       6 |	S )NspanaxisfromtoperpendicularFromperpendicularToc              3  <   K   | ]  }t        |t                y wr   r&   )r   r)   s     r*   r   z%span_corner_points.<locals>.<genexpr>  s     P%z%%Ps   r   zspan min/minzspan max/minzspan min/maxzspan max/maxr   )rR   allsetaddrV   )r   r   r   rC   rD   p_startp_endpointsseenrY   r   r   r   s                r*   span_corner_pointsr    sE   == &BD88FDHHVE
((4.Chh*+GHH&'EPE33OPP	s{UG,S'*UE*S%(	
 
We,UE*Wc*UC(	
 	5DD #q!q6T>!QUAqM"	#
 Kr,   c                   |j                  d      xs i }|j                  d      }t        |d         }	t        |d         }
t        | |||||t        |      |	|
	      }|j                  d      xs i }g }t	        |j                  d      t              rt	        |j                  d      t              rt        | |||||t        |j                  d      xs d      t        |d         t        |d         d
      }|D ]h  }|j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d	      d
|d<   j g }t        t        |      |	|
      }dD ]  }g }|D ]9  \  }}|dk(  rt        ||      nt        ||      }|g } n|j                  |       ; dj                  |      }|r%|j                  t        | |||||d| |             {|j                  d| dddg d        g }t        |      }t        |      dk\  rdD ]  }g }|D ]:  \  }}}|dk(  rt        ||      nt        ||      }|g } n|j                  |       < dj                  |      }|r%|j                  t        | |||||d| |             ||j                  d| dddg d        g |||}t        d |D              }t        d |D              }t        d |D              }t        d |D              }t        d g ||D              }i d|d|	|
dd|j                  d      xs i d|rc|j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d	      d
ni d|d|d |d!|d"t        d# |D              d$t        |      d%t        d& |D              d't        d( |D              d)t        d* |D              d+t        d, |D              d-t        d. |D              d/t        d0 |D              d1||||||dkD  d2S )3Nr   r   r   r   r   r   ztarget spawn 	standableautoTrigger)r   r   r   r   r  r  targetSpawn)r   r   r   r,   zaxis 3-point byte sequence r%   r   T)r   r   r   r   r   r   zspan corner byte sequence c              3  @   K   | ]  }|j                  d d        ywr   r   NrR   r   rH   s     r*   r   z!scan_candidate.<locals>.<genexpr>.  s     #bQTCGG,H!$L#b   c              3  @   K   | ]  }|j                  d d        ywr   r   Nr  r  s     r*   r   z!scan_candidate.<locals>.<genexpr>/  s     _c(Eq I_r  c              3  @   K   | ]  }|j                  d d        ywr   r   Nr  r  s     r*   r   z!scan_candidate.<locals>.<genexpr>0  s     !^S#''*Da"H!^r  c              3  @   K   | ]  }|j                  d d        ywr   r   Nr  r  s     r*   r   z!scan_candidate.<locals>.<genexpr>1  s     MC!3Q7Mr  c              3  @   K   | ]  }|j                  d d        ywr   r   Nr  r  s     r*   r   z!scan_candidate.<locals>.<genexpr>2  s     bSWWZ3br  tiler   r   bytePairScanstargetSpawnBytePairScansaxisSequenceScansspanSequenceScansbytePairHitCountc              3  @   K   | ]  }|j                  d d        ywr  r  r  s     r*   r   z!scan_candidate.<locals>.<genexpr>C  s     H3
A 6Hr  targetSpawnBytePairScanCounttargetSpawnBytePairHitCountc              3  @   K   | ]  }|j                  d d        ywr  r  r  s     r*   r   z!scan_candidate.<locals>.<genexpr>E  s     *`c377:q+A*`r  )targetSpawnStrictSourceTargetByteHitCountc              3  @   K   | ]  }|j                  d d        ywr  r  r  s     r*   r   z!scan_candidate.<locals>.<genexpr>F  s!      9
9<CGG0!49
r  'targetSpawnStrictEventOtherByteHitCountc              3  @   K   | ]  }|j                  d d        ywr  r  r  s     r*   r   z!scan_candidate.<locals>.<genexpr>I  s!      7
7:CGG.27
r  *targetSpawnCurrentSelectorRootByteHitCountc              3  @   K   | ]  }|j                  d d        ywr  r  r  s     r*   r   z!scan_candidate.<locals>.<genexpr>L  s!      :
:=CGG115:
r  targetSpawnTextCodeByteHitCountc              3  @   K   | ]  }|j                  d d        ywr  r  r  s     r*   r   z!scan_candidate.<locals>.<genexpr>O  s     .lRUsww7I1/M.lr  ,targetSpawnStrictByteCoordinateEvidenceFoundc              3  F   K   | ]  }|j                  d d      dkD    ywr  r  r  s     r*   r   z!scan_candidate.<locals>.<genexpr>P  s&      <
=@CGG0!4q8<
s   !sequenceHitCount)strictSourceTargetByteHitCountstrictEventOtherByteHitCountcurrentSelectorRootByteHitCounttextCodeByteHitCount!strictByteCoordinateEvidenceFound)rR   r(   r   r   r'   r   r   rV   joinr   r  rU   sumany) r   r@   r   rj   rk   rw   r   r   r   r   r   r   r   target_spawn_scansrH   axis_sequencesaxis_pointsr   partsr   r   pairr   span_sequencescorners_label	all_scansstrict_source_target_hitscurrent_selector_hitsstrict_event_other_hitstext_code_hitssequence_hit_counts                                    r*   scan_candidaterH    sz    ]]8$*F== DF3KAF3KA#D			
E ---3K+//#&,KOOC<PRU1V4'384C !C !
 & 	C%//(3#/ __S) __S)(__[9*}="C	 N"3t9a3K ! 	FB).$:b"%Jr2<ND|LL	 ((5/!!# !"1%9	 !!6ug>!)-# /> N +G
7|q! 	EE") #B-2d]z"b)
2r@R<ET"# hhuoG%%  '$%&4UG<	 %%9%A"% !-1!' /	> ;%:.:>:I ##bXa#b b_U^__!!^T]!^^M9MMNb?a?aR`?abb&&aa & 		f%+& 	  "ooh/OOF+%%$5&??=9
 !& 	& 	#$6& 	^& 	^&  	CH%HH!&" 	',>(?#&$ 	&s*`M_*`'`%&& 	4S 9
@R9
 6
'&, 	23 7
>P7
 4
-&2 	5c :
AS:
 7
3&8 	*3.lYk.l+l9&: 	7 <
DV<
 9
;&@ 	.A&B +D(?+@ .-F-JK& &r,   c                   | j                         }t        |      }||nt        t        dz  g       }||nt        t        dz  g       }||nt        t        dz  g       }||nt        t        dz  g       }||nt        t        dz  g       }t	        |      }t        |      }	t        |      }
|
D cg c]  }t        |||||	||       }}t        d |D              }t        d |D              }t        d |D              }t        d	 |D              }t        d
 |D              }t        d |D              }t        d |D              }t        d |D              }t        d |D              }t        d |D              }t        d |D              }t        d |D              }t        d |D              }t        d |D              }t        d |D              }|dkD  }|dkD  }i dt        |      d|d|d|d|d|d|d|d|d|d |d!|d"|d#|d$|d%|d&|d'|i}d(t        |       d)| d*| d+||z    d,| d-| d.| d/| d0| d1}i d2t        d3t        dt        |      d|d|d|d|d|d|d|d|d|d |d!|d"|d#|d$|||||rd4nd5|||rg nt        |rg nt        t        t        t              |||d6S c c}w )7Nzsave_scene_selectors.jsonzscene_events.jsonzevent_transitions.jsonzscene_manifest.jsonzmap_exit_candidates.jsonc              3  8   K   | ]  }t        |d            yw)r  NrU   r  s     r*   r   z build_summary.<locals>.<genexpr>  s     XSs3#78X   c              3  8   K   | ]  }t        |d            yw)r   NrK  r  s     r*   r   z build_summary.<locals>.<genexpr>       "`S3s+>'?#@"`rL  c              3  8   K   | ]  }t        |d            yw)r!  NrK  r  s     r*   r   z build_summary.<locals>.<genexpr>  rN  rL  c              3  &   K   | ]	  }|d      yw)r2  Nr]   r  s     r*   r   z build_summary.<locals>.<genexpr>  s      )25,-)   c              3  &   K   | ]	  }|d      yw)r4  Nr]   r  s     r*   r   z build_summary.<locals>.<genexpr>  s     $kPSS)J%K$krQ  c              3  &   K   | ]	  }|d      yw)r1  Nr]   r  s     r*   r   z build_summary.<locals>.<genexpr>  s     TS!34TrQ  c              3  &   K   | ]	  }|d      yw)r3  Nr]   r  s     r*   r   z build_summary.<locals>.<genexpr>  s     &jss+I'J&jrQ  c              3  &   K   | ]	  }|d      yw)r5  Nr]   r  s     r*   r   z build_summary.<locals>.<genexpr>  s     Ycc"89YrQ  c              3  &   K   | ]	  }|d      yw)r"  Nr]   r  s     r*   r   z build_summary.<locals>.<genexpr>  s     U#c"45UrQ  c              3  &   K   | ]	  }|d      yw)r$  Nr]   r  s     r*   r   z build_summary.<locals>.<genexpr>  s     +oTWC0N,O+orQ  c              3  &   K   | ]	  }|d      yw)r%  Nr]   r  s     r*   r   z build_summary.<locals>.<genexpr>  s     *mRU3/L+M*mrQ  c              3  &   K   | ]	  }|d      yw)r'  Nr]   r  s     r*   r   z build_summary.<locals>.<genexpr>  s      6=@786rQ  c              3  &   K   | ]	  }|d      yw)r)  Nr]   r  s     r*   r   z build_summary.<locals>.<genexpr>  s      4;>564rQ  c              3  &   K   | ]	  }|d      yw)r+  Nr]   r  s     r*   r   z build_summary.<locals>.<genexpr>  s      2>A892rQ  c              3  &   K   | ]	  }|d      yw)r-  Nr]   r  s     r*   r   z build_summary.<locals>.<genexpr>  s      +36-.+rQ  r   candidateCountbytePairScanCountaxisSequenceScanCountspanSequenceScanCountr"  r1  r2  r3  r4  r5  r6  r$  r%  r'  r)  r+  r-  r/  zfByte-sized coordinate encodings do not provide a strict map1_01a -> map2_02d hotspot. The scan covers z exit candidates with z exact byte-pair patterns, z2 reciprocal target-spawn byte-pair patterns, plus z" byte-sequence patterns. It found z* strict source-target event-owned hit(s), z+ target-spawn strict source-target hit(s), z1 source current selector-root byte collision(s), z; target-spawn current selector-root byte collision(s), and z axis/span sequence hit(s). Without a strict source-target event owner or runtime trigger, byte-pair matches remain collision-prone diagnostics and cannot promote the route.sourcer   zready-for-reviewblocked)r+  r-  r/  promotionStatus
proofFoundexitByteCoordinateProofFoundfailedExitByteCoordinateGateIdsmissingEvidenceevidenceRefsevidenceRefCountcandidateSummariesfalsePositiveSummary
conclusion)
read_bytesr   r;   OUTr[   rd   r   rH  r8  rU   r   r   $FAILED_EXIT_BYTE_COORDINATE_GATE_IDS%EXIT_BYTE_COORDINATE_MISSING_EVIDENCE"EXIT_BYTE_COORDINATE_EVIDENCE_REFS) exe_pathrW   rj   rb   rw   r   r   r@   r   rk   
candidatesr   candidate_summariesbyte_pair_scan_countaxis_sequence_scan_countspan_sequence_scan_countstrict_source_target_hit_countcurrent_selector_hit_countrG  strict_event_other_hit_counttext_code_hit_countbyte_pair_hit_count!target_spawn_byte_pair_scan_count target_spawn_byte_pair_hit_count+target_spawn_strict_source_target_hit_count)target_spawn_strict_event_other_hit_count'target_spawn_current_selector_hit_count target_spawn_text_code_hit_countstrict_foundtarget_spawn_strict_foundfalse_positive_summaryrl  s                                    r*   build_summaryr  \  s    


CS!H3G3S/Yb))
Z $0#;<3QdKdfhAiL->-J)PY&&
Q (6'A^yQTWlQlnpGqN1D1P-V_((
W ,,@AO01BCM !45J $  		
  XDWXX""`L_"``""`L_"``%( )9L) &" "%$kWj$k!kT@STT#&&jVi&j#j YEXYYUATUU(++o[n+o(o%'**mYl*m'm$25 6DW6 3/ 14 4BU4 1- /2 2EX2 /+ (+ +:M+ ($ 2A5L Ka O#121 	 !9 	 !9	
 	/ 	. 	)*H 	'(D 	*+E 	 3 	,\ 	'(I 	&'G 	45` 	23\  	56]!" 	*+K#$ 	78Q%*	2344JK_J` a67 8(+CCD E233]6
77b%
&&W2
33n
 4
	4 && 	#12 	1	
 	 !9 	 !9 	/ 	. 	)*H 	'(D 	*+E 	 3 	,\ 	'(I 	&'G  	45`!" 	23\#$ 7^+K8Q1=-9"(41=2Cg!-23X: BC1 6 = Qs   4Kc                   g }| d   D ]  }|d   }|j                  d      xs i }|rI|j                  d       d|j                  d       d|j                  d       d|j                  d	       nd
}|j                  dt        j                  t	        |d                d|d    d|d	    dt        j                  |       d|d    d|d    d|d    d|d    d|d    d|d    d|d    d|d    d|d    d        g }| d   D ]h  }|d   }|d    d|d    d|d	    }|j                  d      xs i }|rJd|j                  d       d|j                  d       d|j                  d       d|j                  d	       nd}	g |d   |d   |d   D ]  }|j                  dt        j                  |       dt        j                  t	        |j                  d                   dt        j                  t	        |j                  d                    d|j                  d!       d|j                  d"d#       d|j                  d$d#       d|j                  d%d#       d|j                  d&d#       d        |d'   D ]  }|j                  dt        j                  |       dt        j                  |	dz   t	        |j                  d            z          dt        j                  t	        |j                  d                    d|j                  d!       d|j                  d"d#       d|j                  d$d#       d|j                  d%d#       d|j                  d&d#       d        k d(j                  g d)d*d+d,d-d.t        j                  | d/          d0t        j                  | d          d1d2d3| d4    d5d6| d7    d5d8| d    d5d9| d    d5d:| d    d5d;| d    d5d<| d    d5d=| d    d5d>| d    d5d?t        j                  t	        | d@                d5dAt        j                  t	        | j                  dB                   d5dCt        j                  dj                  | j                  dD      xs g       xs d
       d5dEt        j                  t	        | j                  dF                   d5dGdHt        j                  | dI          dJdKd2d(j                  dL | j                  dM      xs g D              dGdNd2d(j                  dO | j                  dP      xs g D              dGdQd(j                  |      dRdSdTd(j                  |      dR      S )UNrj  r  r  r   r.   r   r   ,r   r%   z<tr><td>z</td><td><code>z</code></td><td><code>z</code></td><td>r"  z	</td><td>r%  r1  r2  r'  r4  r+  r6  r/  z
</td></tr>ztarget ztarget -r  r   r!  r   r   r   r   r   r   r   r   r  
z<!doctype html>z<meta charset="utf-8">z1<title>map1_01a Exit Byte Coordinate Scan</title>a  <style>body{font-family:system-ui,sans-serif;background:#111;color:#ddd;margin:24px}table{border-collapse:collapse;width:100%;margin:16px 0}td,th{border:1px solid #333;padding:6px 8px;text-align:left;vertical-align:top}th{background:#1f1f1f}code{color:#ffd27a}</style>z+<h1>map1_01a Exit Byte Coordinate Scan</h1>z<p>Route: <code>ra  z -&gt; z</code></p>z<ul>z<li>byte-pair scans: <code>r^  z</code></li>z(<li>target-spawn byte-pair scans: <code>r$  z<li>sequence hits: <code>z*<li>strict source-target byte hits: <code>z7<li>target-spawn strict source-target byte hits: <code>z+<li>current selector-root byte hits: <code>z8<li>target-spawn current selector-root byte hits: <code>z1<li>strict byte coordinate evidence found: <code>z><li>target-spawn strict byte coordinate evidence found: <code>z<li>promotion status: <code>rc  z<li>proof found: <code>rd  z-<li>failed exit byte-coordinate gates: <code>rf  z<li>evidence refs: <code>ri  z</ul>z<p>rl  z</p>z<h2>Missing Evidence</h2>c              3  N   K   | ]  }d t        j                  |       d  yw)z<li></li>N)htmlescaper   s     r*   r   zhtml_page.<locals>.<genexpr>>  s#     cdDT*+51cs   #%rg  z<h2>Evidence Refs</h2>c              3     K   | ]m  }d t        j                  t        |j                  d                   dt        j                  dj	                  |j                  d      xs g              d o yw)z
<li><code>r   z	</code>: z, r   r  N)r  r  r   rR   r7  )r   refs     r*   r   zhtml_page.<locals>.<genexpr>B  se      
  S%9:;9{{499SWWX%6%<"=>?uF
s   A3A5rh  a?  <table><thead><tr><th>side</th><th>tile</th><th>target spawn</th><th>byte hits</th><th>target byte hits</th><th>sequence hits</th><th>strict source-target</th><th>target strict source-target</th><th>current root</th><th>target current root</th><th>strict evidence</th><th>target strict evidence</th></tr></thead><tbody>z</tbody></table>z<h2>Scan Rows</h2>z<table><thead><tr><th>candidate</th><th>pattern</th><th>bytes</th><th>hits</th><th>strict source-target</th><th>strict other</th><th>current root</th><th>text code</th></tr></thead><tbody>)rR   rV   r  r  r   r7  )
summarycandidate_rowsrH   r  target_spawntarget_spawn_label	scan_rowsr   r   target_labels
             r*   	html_pager    s   N+, 
6{ww}-3  )*!L,<,<V,D+EQ$%Q|'7'7'<&=? 	 	 	;;s3v;/01 2c1T#YK 0%789 :)*+ ,456 7)*+ ,789 :BCD E89: ;CDE F:;< =EFG H	

2 I12 '	 V$%QtCyk49+> }}]39r  l&&x01<3C3CF3K2LA$%Q|'7'7'<&=? 	 	
'
*+
 *+
 	C
 {{5)* +{{3swww'7#89: ;![[SWW\-B)CDE Fwwz*+ ,ww;Q?@ Aww91=> ?ww<a@A Bww1156 7		" 78 	C{{5)* +{{<##5CGGG<L8M#MNO P![[SWW\-B)CDE Fwwz*+ ,ww;Q?@ Aww91=> ?ww<a@A Bww1156 7		7'P 99 ** * 	<* 	W	*
 	6* 4;;wx'89:'$++gV^N_B`Aaalm* 	* &g.A&B%C<P* 37;Y3Z2[[gh* $G,>$?#@M* 5W=]5^4__kl* B'JuBvAw  xD  	E* 6g>_6`5aamn* C7KwCxBy  zF  	G* <GDg<h;iiuv*  IQ  JA  IB  BN  	O!*" 't{{3w?P7Q3R'S&TT`a#*$ "$++c'++l2K.L"M!Nl[%*& 8CHHW[[YzM{  NB  @B  EC  EJ  GJ  9K  8L  LX  	Y'*( $DKKGKK@R4S0T$U#VVbc)** 	+*, dkk',/016-*. 	$/*0 	1*2 			cgkkJ[>\>b`bcc3*4 	5*6 	!7*8 	9*: 			 
 {{>28b
 	
;*D 	E*F 	JG*H 			.!I*J 	K*L 	M*N 	GO*P 			)Q*R 	S* * *r,   c                    |j                  dd       |dz  j                  t        j                  | dd      dz   d	       y )
NT)parentsexist_ok'map1_01a_exit_byte_coordinate_scan.jsonFr   )ensure_asciiindentr  r3   r4   )mkdir
write_textr7   dumps)r  out_dirs     r*   write_outputsr  R  sD    MM$M.88DD

7q9D@ E r,   c            	     `   t        j                         } | j                  dt        t               | j                  dt        t
               | j                         }t        |j                        }t        ||j                         t        d|d    d|d    d|j                  d	z          y )
Nz--exe)typedefaultz	--out-dirzwrote byte-coordinate scan: r]  z candidates, r2  z strict source-target hits -> r  )argparseArgumentParseradd_argumentr   EXErn  
parse_argsr  r   r  r  print)parserargsr  s      r*   mainr  Z  s    $$&F
dC8
$<DDHH%G'4<<(	&#$
%]34
55S<<CC
D	Fr,   __main__)r)   z
int | Nonereturnr   )r0   r   r  r   )r   r   r:   r   r  r   )r@   
list[dict]rA   r(   r  dict | None)rW   r  r  r  )r^   r  r_   r(   r  r  )rb   r  r  dict[int, list[str]])rj   r  rk   r  r_   r(   r  r  )rw   r  r_   r(   r  r  )r   r   r_   r(   r   r  r   r  r   r  r  r   )rH   r   r  ztuple[int, str])r   r   r@   r  r   r  rj   r  rk   r  rw   r  r   r   r   r   r  r   )r   r   r  ztuple[int, int, int])r   r  r  r  )r   r(   r   r(   r  zbytes | None)r   r   r   r(   r   r(   r  zlist[tuple[int, int]])r   r   r   r(   r   r(   r  zlist[tuple[str, int, int, str]]) )r   r   r@   r  r   r  rj   r  rk   r  rw   r  r   r   r   r(   r   r(   r   r   r  r  )r   r   r  zlist[tuple[str, int, int]])r   r   r@   r  r   r  rj   r  rk   r  rw   r  r   r   r  r   )rr  r   rW   list[dict] | Nonerj   r  rb   r  rw   r  r   r  r  r   )r  r   r  r   )r  r   r  r   r  None)r  r  );__doc__
__future__r   r  r  r7   structsyspathlibr   typingr   r   insertr   __file__resolveparentprobe_exe_scene_tablesr   r   r  ROOTrn  r  r   r   r   r   r   r   ro  rp  rq  r+   r1   r;   rE   r[   r`   rd   rp   ry   r   r   r   r   r   r   r   r   r   r  rH  r  r  r  r  __name__r]   r,   r*   <module>r     s}   J "     
   3tH~--/667 8 > H~''*
Ul
]		,!Q;
	 ( $) % &jk+8HJc7de,8ef$0_`)j)5LM& "?8.' 	 	0,)))  ) $	)
  ) 	)6+U	UU  U 	U
 (U U U U 
Up;:6 *	**  * 	*
 (* * * * * * *Z F`	``  ` 	`
 (` ` ` 
`H .2&*+/(,-1BB+B $B )	B
 &B +B 
BJnb 25   zF r,   