// obfusgator.zig, Toby Jaffey 2025-01-07// zig run obfusgator.zig// zig run obfusgator.zig -- myprog.zigconstg= & [_ ]u8 {31 ,139 ,8 ,8 ,45 ,79 ,125 ,103 ,0 ,3 ,102 ,111 ,111 ,46 ,112 ,112 ,109 ,0 ,237 ,211 ,203 ,13 ,131 ,48 ,16 ,69 ,209 ,172 ,93 ,69 ,74 ,64 ,40 ,160 ,148 ,65 ,255 ,205 ,144 ,29 ,66 ,254 ,105 ,226 ,121 ,248 ,243 ,60 ,119 ,69 ,64 ,25 ,124 ,12 ,28 ,187 ,251 ,46 ,239 ,207 ,226 ,214 ,109 ,115 ,47 ,75 ,214 ,9 ,170 ,181 ,195 ,15 ,229 ,50 ,102 ,87 ,77 ,226 ,229 ,19 ,229 ,99 ,117 ,133 ,113 ,63 ,199 ,48 ,243 ,82 ,50 ,175 ,204 ,203 ,234 ,21 ,74 ,205 ,59 ,104 ,147 ,48 ,175 ,40 ,189 ,25 ,72 ,91 ,47 ,246 ,190 ,18 ,136 ,121 ,43 ,236 ,128 ,112 ,172 ,102 ,109 ,247 ,131 ,251 ,165 ,178 ,153 ,209 ,91 ,104 ,118 ,62 ,58 ,7 ,178 ,54 ,111 ,44 ,106 ,38 ,36 ,148 ,215 ,155 ,208 ,173 ,23 ,21 ,189 ,215 ,179 ,232 ,191 ,172 ,174 ,10 ,23 ,159 ,1 ,142 ,232 ,205 ,188 ,159 ,255 ,214 ,22 ,34 ,140 ,222 ,171 ,17 ,153 ,119 ,56 ,111 ,234 ,60 ,153 ,58 ,44 ,197 ,143 ,254 ,60 ,211 ,251 ,83 ,123 ,221 ,165 ,205 ,230 ,85 ,102 ,94 ,202 ,102 ,123 ,159 ,139 ,191 ,226 ,212 ,31 ,171 ,13 ,196 ,134 ,218 ,183 ,231 ,6 ,62 ,212 ,108 ,112 ,243 ,114 ,120 ,127 ,82 ,105 ,15 ,254 ,141 ,37 ,0 ,0 } ;constz=@import ("std" ) ;constTi=z .zig .Tokenizer ;constT=z .zig .Token ;consta=z .heap .page_allocator ;constio=z .io ;constw=io .getStdOut ( ) .writer ( ) ;constmem=z .mem ;constfmt=z .fmt ;constiobs=io .fixedBufferStream ;constu=undefined ;pubconstP=struct {d : [2 ]u32 ,p : [ ]u1 ,pubfnfrom (ls : [ ]constu8 )!P {varf=iobs (ls ) ;varln :u32=0 ;varp :P=u ;varlb : [1024*128 ]u8=u ;varb=io .bufferedReader (f .reader ( ) ) ;varr=b .reader ( ) ;while (true ) {if (tryr .readUntilDelimiterOrEof ( &lb ,'\n' ) )|l| {switch (ln ) {1=> {varit=mem .splitAny (u8 ,l ," " ) ;for (0..2 )|i|p .d [i ]=tryfmt .parseInt (u32 ,it .next ( ) .? ,10 ) ; } ,3=> {p .p=trya .alloc (u1 ,p .d [0 ]*p .d [1 ] ) ;for (0..p .d [0 ]*p .d [1 ] )|i| {if (l [i*3 ]>0orl [i*3+1 ]>0orl [i*3+2 ]>0 ) {p .p [i ]=1 ; } }break ; } ,else=> { } , }ln+=1 ; } }returnp ; } } ;fnpt (src : [ ]constu8 ,ts : [ ]constT ,ti :*u32 ,ncf :u32 ,pws :*bool )!void {varnc=ncf ;while (true ) {if (ti.*>=ts .len ) {return ; }consttok=ts [ti.* ] ;if (mem .containsAtLeast (u8 ,@tagName (tok .tag ) ,1 ,"comment" ) ) {ti.*+=1 ;continue ; }vartl :u32=@intCast ( (tok .loc .end-tok .loc .start )+1 ) ;if (!pws.* )tl+=1 ;if (tl<=nc ) {if (!pws.* )_=tryw .write (" " ) ;tryw .print ("{s} " , . {src [tok .loc .start..tok .loc .end ] } ) ;pws.*=true ;nc-=tl ;ti.*+=1 ; }else {for (0..nc )|_|_=tryw .write (" " ) ;return ; } } }pubfnmain ( )!void {_=tryw .write ("// zig"++" run"++" obfusg"++"ator.zig"++"\n// zig"++" run obfus"++"gator.zig"++" -- m"++"yprog"++".zig\n" ) ;constargs=tryz .process .argsAlloc (a ) ;varsrc : [ :0 ]constu8=@embedFile ("obfusgator.zig" ) ;if (args .len>1 ) {constd=tryz .fs .cwd ( ) .readFileAlloc (a ,args [1 ] ,1024*64 ) ;src=trya .dupeZ (u8 ,d ) ; }varin=iobs (g ) ;varr : [32768 ]u8=u ;varot=iobs ( &r ) ;tryz .compress .gzip .decompress (in .reader ( ) ,ot .writer ( ) ) ;constp=tryP .from ( &r ) ;vare :bool=false ;varelen :u32=0 ;varts=z .ArrayList (T ) .init (a ) ;vartokenizer=Ti .init (src ) ;while (true ) {consttoken=tokenizer .next ( ) ;tryts .append (token ) ;if (token .tag== .eof )break ; }varti :u32=0 ;varpws=true ;varn :u32=0 ;while (ti<ts .items .len ) {for (0..p .d [1 ] )|y| {for (0..p .d [0 ] )|x| {varnx=x ;if (n%2>0 ) {nx= (p .d [0 ]-1 )-x ; }if (p .p [y*p .d [0 ]+nx ]>0 ) {if (!e ) {e=true ;elen=1 ; }else {elen+=1 ; } }else {if (e ) {e=false ;trypt (src ,ts .items , &ti ,elen , &pws ) ; }_=tryw .write (" " ) ; } }if (e ) {e=false ;trypt (src ,ts .items , &ti ,elen , &pws ) ; }tryw .print ("\n" , . { } ) ;if (ti>=ts .items .len )break ; }n+=1 ; } }