js-confuser-vm 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +281 -147
  2. package/dist/build-runtime.js +41 -15
  3. package/dist/compiler.js +714 -265
  4. package/dist/disassembler.js +367 -0
  5. package/dist/index.js +7 -2
  6. package/dist/runtime.js +160 -119
  7. package/dist/template.js +163 -42
  8. package/dist/transforms/bytecode/aliasedOpcodes.js +4 -1
  9. package/dist/transforms/bytecode/concealConstants.js +2 -2
  10. package/dist/transforms/bytecode/controlFlowFlattening.js +569 -0
  11. package/dist/transforms/bytecode/dispatcher.js +15 -111
  12. package/dist/transforms/bytecode/macroOpcodes.js +2 -2
  13. package/{src/transforms/bytecode/resolveContants.ts → dist/transforms/bytecode/resolveConstants.js} +30 -56
  14. package/dist/transforms/bytecode/resolveRegisters.js +23 -4
  15. package/dist/transforms/bytecode/selfModifying.js +88 -21
  16. package/dist/transforms/bytecode/semanticOpcodes.js +162 -0
  17. package/dist/transforms/bytecode/specializedOpcodes.js +23 -12
  18. package/dist/transforms/bytecode/stringConcealing.js +288 -0
  19. package/dist/transforms/runtime/classObfuscation.js +43 -0
  20. package/dist/transforms/runtime/handlerTable.js +91 -0
  21. package/dist/transforms/runtime/semanticOpcodes.js +35 -0
  22. package/dist/transforms/runtime/specializedOpcodes.js +11 -5
  23. package/dist/types.js +1 -1
  24. package/dist/utils/ast-utils.js +75 -0
  25. package/dist/utils/op-utils.js +1 -2
  26. package/dist/utils/pass-utils.js +100 -0
  27. package/dist/utils/profile-utils.js +3 -0
  28. package/package.json +8 -1
  29. package/.gitmodules +0 -4
  30. package/.prettierignore +0 -1
  31. package/CHANGELOG.md +0 -335
  32. package/babel-plugin-inline-runtime.cjs +0 -34
  33. package/babel.config.json +0 -23
  34. package/index.ts +0 -38
  35. package/jest-strip-types.js +0 -10
  36. package/jest.config.js +0 -52
  37. package/src/build-runtime.ts +0 -78
  38. package/src/compiler.ts +0 -2593
  39. package/src/index.ts +0 -14
  40. package/src/minify.ts +0 -21
  41. package/src/options.ts +0 -18
  42. package/src/runtime.ts +0 -923
  43. package/src/template.ts +0 -141
  44. package/src/transforms/bytecode/aliasedOpcodes.ts +0 -148
  45. package/src/transforms/bytecode/concealConstants.ts +0 -52
  46. package/src/transforms/bytecode/dispatcher.ts +0 -398
  47. package/src/transforms/bytecode/macroOpcodes.ts +0 -193
  48. package/src/transforms/bytecode/microOpcodes.ts +0 -291
  49. package/src/transforms/bytecode/resolveLabels.ts +0 -112
  50. package/src/transforms/bytecode/resolveRegisters.ts +0 -221
  51. package/src/transforms/bytecode/selfModifying.ts +0 -121
  52. package/src/transforms/bytecode/specializedOpcodes.ts +0 -153
  53. package/src/transforms/runtime/aliasedOpcodes.ts +0 -191
  54. package/src/transforms/runtime/internalVariables.ts +0 -270
  55. package/src/transforms/runtime/macroOpcodes.ts +0 -138
  56. package/src/transforms/runtime/microOpcodes.ts +0 -93
  57. package/src/transforms/runtime/minify.ts +0 -1
  58. package/src/transforms/runtime/shuffleOpcodes.ts +0 -24
  59. package/src/transforms/runtime/specializedOpcodes.ts +0 -156
  60. package/src/types.ts +0 -93
  61. package/src/utils/op-utils.ts +0 -48
  62. package/src/utils/random-utils.ts +0 -31
  63. package/tsconfig.json +0 -12
package/README.md CHANGED
@@ -1,12 +1,11 @@
1
1
  # JS Confuser VM
2
2
 
3
- [![NPM](https://img.shields.io/badge/NPM-%23000000.svg?style=for-the-badge&logo=npm&logoColor=white)](https://npmjs.com/package/js-confuser-vm) [![GitHub](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge&logo=github&logoColor=white)](https://github.com/MichaelXF/js-confuser-vm) [![Netlify](https://img.shields.io/badge/netlify-%23000000.svg?style=for-the-badge&logo=netlify&logoColor=#00C7B7)](https://development--confuser.netlify.app/vm)
3
+ [![NPM](https://img.shields.io/badge/NPM-%23000000.svg?style=for-the-badge&logo=npm&logoColor=white)](https://npmjs.com/package/js-confuser-vm) [![GitHub](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge&logo=github&logoColor=white)](https://github.com/MichaelXF/js-confuser-vm) [![Netlify](https://img.shields.io/badge/netlify-%23000000.svg?style=for-the-badge&logo=netlify&logoColor=#00C7B7)](https://js-confuser.com/vm)
4
4
 
5
5
 
6
- - **Requires Node v24.13.1 or higher**
7
- - ES5 support only. No complex features: async, generator, and even try..finally aren't supported.
6
+ - Supports ES5 and limited ES6 features. No complex features, such as async and generators aren't supported.
8
7
  - Experimental. Expect issues.
9
- - [Try the web version.](https://development--confuser.netlify.app/vm)
8
+ - [Try the web version.](https://js-confuser.com/vm)
10
9
 
11
10
  ### Installation
12
11
 
@@ -37,50 +36,63 @@ JsConfuserVM.obfuscate(`
37
36
  target: "browser", // or "node"
38
37
  randomizeOpcodes: true, // randomize the opcode numbers?
39
38
  shuffleOpcodes: true, // shuffle order of opcode handlers in the runtime?
40
- encodeBytecode: true, // encode the bytecode array?
41
- concealConstants: true, // conceal strings and integers in the constant pool?
42
- dispatcher: true, // create middleman blocks to process jumps?
39
+ encodeBytecode: true, // encode bytecode? when off, comments for instructions are added
43
40
  selfModifying: true, // do self-modifying bytecode for function bodies?
41
+ dispatcher: true, // create middleman blocks to process jumps?
42
+ controlFlowFlattening: true, // flatten the control flow of your program into a convoluted state machine?
43
+ stringConcealing: true, // base64-encode strings to conceal plain-text values?
44
44
  macroOpcodes: true, // create combined opcodes for repeated instruction sequences?
45
- microOpcodes: true, // break opcodes into sub-opcodes?
46
45
  specializedOpcodes: true, // create specialized opcodes for commonly used opcode+operand pairs?
47
46
  aliasedOpcodes: true, // create duplicate opcodes for commonly used opcodes?
48
47
  timingChecks: true, // add timing checks to detect debuggers?
49
- minify: true // pass final output through Google Closure Compiler? (Renames VM class properties)
48
+ concealConstants: true, // conceal strings and integers in the constant pool?
49
+ classObfuscation: true, // obfuscate the VM runtime classes?
50
+ minify: true, // pass final output through Google Closure Compiler? (Renames VM class properties)
50
51
  }).then(result => {
51
52
  console.log(result.code)
52
53
  })
53
54
 
54
55
  /*
55
- var c=Symbol();function f(a,e){this.A=a;this.H=e;this.I=!1;this.J=void 0}function h(a){return a.I?a.J:a.A.h[a.H]}function k(a,e){a.I?a.J=e:a.A.h[a.H]=e}function m(a){this.v=a;this.D=[];this.prototype={}}function n(a,e,b){this.K=a;this.h=Array(a.v.L).fill(void 0);this.l=a.v.R;this.W=e!==void 0?e:void 0;this.G=b!==void 0?b:0;this.o=null;this.F=[]}function p(a,e,b,d){this.u=a;this.O=b;this.m=d;this.j=[];this.B=[];this.i=new n(new m({C:0,L:e,R:0}),void 0,0);this.g={}}
56
- function v(a){return a.u[a.i.l++]}function w(a,e,b){for(var d=0;d<a.B.length;d++){var g=a.B[d];if(g.A===e&&g.H===b)return g}g=new f(e,b);a.B.push(g);return g}function x(a,e,b){e=e??v(a);b=b??v(a);a=a.O[e];if(!b)return a;if(typeof a==="number")return a^b;a=typeof Buffer!=="undefined"?Buffer.from(a,"base64"):Uint8Array.from(atob(a),function(g){return g.charCodeAt(0)});e="";for(var d=0;d<a.length/2;d++)e+=String.fromCharCode((a[d*2]|a[d*2+1]<<8)^b+d&65535);return e}
57
- function z(a,e){a.B=a.B.filter(function(b){return b.A===e?(b.J=b.A.h[b.H],b.I=!0,!1):!0})}
58
- function A(a){for(var e=performance.now();;){var b=a.i;if(b.l>=a.u.length)break;var d=b.l++;d=a.u[d];var g=performance.now(),D=g-e>1E3;e=g;if(D){for(d=0;d<a.u.length;d++)a.u[d]=0;b.h.fill(void 0);d=51142;b.l=a.u.length}try{switch(d){case 48376:a.g[16541]=v(a);a.g[36877]=b.h[v(a)];b.h[a.g[16541]]=a.g[36877]^b.h[v(a)];break;case 24807:a.g[32755]=v(a);a.g[30211]=b.h[v(a)];b.h[a.g[32755]]=a.g[30211]>>>b.h[v(a)];break;case 25812:a.g[11979]=3;b.h[a.g[11979]]=b.h[4];break;case 21199:a.g[16541]=4;b.h[a.g[16541]]=
59
- x(a,0,19941);break;case 48511:a.g[38915]=b.h[5];z(a,b);if(a.j.length===0)return a.g[38915];b.o===null||typeof a.g[38915]==="object"&&a.g[38915]!==null||(a.g[38915]=b.o);a.g[25255]=a.j.pop();a.g[25255].h[b.G]=a.g[38915];a.i=a.g[25255];break;case 26119:a.g[16541]=v(a);a.g[3839]=b.h[v(a)];b.h[a.g[16541]]=a.g[3839]>b.h[v(a)];break;case 7802:a.g[16541]=v(a);a.g[62634]=b.h[v(a)];b.h[a.g[16541]]=a.g[62634]!==b.h[v(a)];break;case 29164:a.g[16541]=3;b.h[a.g[16541]]=x(a,0,19941);break;case 45474:a.g[19089]=
60
- v(a);a.g[25428]=b.h[v(a)];a.g[7422]=b.h[v(a)];a.g[40522]=v(a);a.g[28705]=Array(a.g[40522]);for(a.g[12462]=0;a.g[12462]<a.g[40522];a.g[12462]++)a.g[28705][a.g[12462]]=b.h[v(a)];if(a.g[7422]&&a.g[7422][c]){a.g[7358]=a.g[7422][c];a.g[58907]=new n(a.g[7358],a.g[25428],a.g[19089]);for(a.g[12462]=0;a.g[12462]<a.g[28705].length;a.g[12462]++)a.g[58907].h[a.g[12462]]=a.g[28705][a.g[12462]];a.g[58907].h[a.g[7358].v.C]=a.g[28705];a.j.push(a.i);a.i=a.g[58907]}else b.h[a.g[19089]]=a.g[7422].apply(a.g[25428],a.g[28705]);
61
- break;case 47786:a.g[3766]=v(a);a.g[62634]=b.h[v(a)];b.h[a.g[3766]]=a.g[62634]!=b.h[v(a)];break;case 45528:a.g[16541]=2;b.h[a.g[16541]]=b.h[5];break;case 37324:a.g[38915]=b.h[v(a)];z(a,b);if(a.j.length===0)return a.g[38915];b.o===null||typeof a.g[38915]==="object"&&a.g[38915]!==null||(a.g[38915]=b.o);a.g[23776]=a.j.pop();a.g[23776].h[b.G]=a.g[38915];a.i=a.g[23776];break;case 37593:a.g[21276]=0;b.h[a.g[21276]]=b.h[7];break;case 16492:a.g[16541]=v(a);a.g[62634]=b.h[v(a)];b.h[a.g[16541]]=a.g[62634]<=
62
- b.h[v(a)];break;case 1900:b.l=13;break;case 42013:a.m[x(a)]=b.h[v(a)];break;case 63795:a.g[28560]=v(a);b.h[a.g[28560]]=v(a);break;case 54788:a.g[2920]=b.h[v(a)];a.g[37378]=b.h[v(a)];a.g[35839]=b.h[v(a)];a.g[27080]=Object.getOwnPropertyDescriptor(a.g[2920],a.g[37378]);a.g[39506]={set:a.g[35839],configurable:!0,enumerable:!0};a.g[27080]&&typeof a.g[27080].get==="function"&&(a.g[39506].get=a.g[27080].get);Object.defineProperty(a.g[2920],a.g[37378],a.g[39506]);break;case 12182:a.g[29248]=v(a);a.g[52124]=
63
- b.h[v(a)];a.g[47986]=b.h[v(a)];b.h[a.g[29248]]=delete a.g[52124][a.g[47986]];break;case 3376:a.g[16541]=5;a.g[62634]=b.h[2];b.h[a.g[16541]]=a.g[62634]+b.h[3];break;case 4123:a.g[63658]=5;a.g[40080]=b.h[3];a.g[37378]=b.h[4];b.h[a.g[63658]]=a.g[40080][a.g[37378]];break;case 27100:a.g[16541]=v(a);b.h[a.g[16541]]=-b.h[v(a)];break;case 35987:a.g[16541]=3;b.h[a.g[16541]]=b.h[6];break;case 59134:a.g[11440]=5;b.h[a.g[11440]]=x(a,4,0);break;case 47879:a.g[59573]=v(a);v(a);b.h[a.g[59573]]=void 0;break;case 59967:a.g[16541]=
64
- 7;a.g[54385]=b.h[0];b.h[a.g[16541]]=a.g[54385]-b.h[6];break;case 37122:a.g[16541]=v(a);a.g[62634]=b.h[v(a)];b.h[a.g[16541]]=a.g[62634]>=b.h[v(a)];break;case 18522:a.g[1489]=v(a);a.g[38065]=b.h[v(a)];b.h[a.g[1489]]=a.g[38065]===b.h[v(a)];break;case 60376:a.g[19925]=b.h[3];z(a,b);if(a.j.length===0)return a.g[19925];b.o===null||typeof a.g[19925]==="object"&&a.g[19925]!==null||(a.g[19925]=b.o);a.g[53519]=a.j.pop();a.g[53519].h[b.G]=a.g[19925];a.i=a.g[53519];break;case 28102:a.g[16541]=v(a);a.g[10179]=
65
- v(a);a.g[38805]=Array(a.g[10179]);for(a.g[37753]=0;a.g[37753]<a.g[10179];a.g[37753]++)a.g[38805][a.g[37753]]=b.h[v(a)];b.h[a.g[16541]]=a.g[38805];break;case 55907:a.g[249]=v(a);a.g[13793]=v(a);a.g[7488]=v(a);a.g[33443]=v(a);a.g[59975]=v(a);a.g[44466]=Array(a.g[59975]);for(a.g[33125]=0;a.g[33125]<a.g[59975];a.g[33125]++)a.g[5413]=v(a),a.g[61217]=v(a),a.g[44466][a.g[33125]]={V:a.g[5413],M:a.g[61217]};a.g[29776]={C:a.g[7488],L:a.g[33443],R:a.g[13793],X:a.g[44466]};a.g[32226]=new m(a.g[29776]);for(a.g[33125]=
66
- 0;a.g[33125]<a.g[44466].length;a.g[33125]++)a.g[49053]=a.g[44466][a.g[33125]],a.g[49053].V?a.g[32226].D.push(w(a,b,a.g[49053].M)):a.g[32226].D.push(b.K.D[a.g[49053].M]);var q=a;a.g[31999]=function(l){return function(){for(var t=Array.prototype.slice.call(arguments),y=new p(q.u,l.v.L,q.O,q.m),u=new n(l,this==null?q.m:this,0),r=0;r<t.length;r++)u.h[r]=t[r];u.h[l.v.C]=t;y.i=u;return A(y)}}(a.g[32226]);a.g[31999][c]=a.g[32226];a.g[31999].prototype=a.g[32226].prototype;b.h[a.g[249]]=a.g[31999];break;case 138:a.g[16541]=
67
- 5;b.h[a.g[16541]]=x(a,5,58082);break;case 48909:a.g[16541]=v(a);a.g[41461]=b.h[v(a)];b.h[a.g[16541]]=a.g[41461]%b.h[v(a)];break;case 13149:a.g[14138]=v(a);a.g[52124]=b.h[v(a)];a.g[37378]=b.h[v(a)];b.h[a.g[14138]]=a.g[52124][a.g[37378]];break;case 63724:a.g[55552]=4;a.g[21339]=44;b.h[a.g[55552]]||(b.l=a.g[21339]);break;case 25433:a.g[16541]=4;b.h[a.g[16541]]=b.h[5];break;case 5005:a.g[52124]=b.h[v(a)];a.g[37378]=b.h[v(a)];a.g[3547]=b.h[v(a)];Reflect.set(a.g[52124],a.g[37378],a.g[3547]);break;case 44357:b.F.push({U:v(a),
68
- S:v(a),T:a.j.length});break;case 52184:a.g[16541]=v(a);b.h[a.g[16541]]=~b.h[v(a)];break;case 17926:b.F.pop();break;case 17061:a.g[16541]=v(a);b.h[a.g[16541]]=+b.h[v(a)];break;case 739:a.g[22118]=v(a);a.g[36985]=b.h[v(a)];a.g[41836]=v(a);a.g[59944]=Array(a.g[41836]);for(a.g[33125]=0;a.g[33125]<a.g[41836];a.g[33125]++)a.g[59944][a.g[33125]]=b.h[v(a)];if(a.g[36985]&&a.g[36985][c]){a.g[6850]=a.g[36985][c];a.g[30557]=Object.create(a.g[6850].prototype||null);a.g[58907]=new n(a.g[6850],a.g[30557],a.g[22118]);
69
- a.g[58907].o=a.g[30557];for(a.g[33125]=0;a.g[33125]<a.g[59944].length;a.g[33125]++)a.g[58907].h[a.g[33125]]=a.g[59944][a.g[33125]];a.g[58907].h[a.g[6850].v.C]=a.g[59944];a.j.push(a.i);a.i=a.g[58907]}else b.h[a.g[22118]]=Reflect.construct(a.g[36985],a.g[59944]);break;case 16825:a.g[16541]=v(a);a.g[3993]=b.h[v(a)];b.h[a.g[16541]]=a.g[3993]in b.h[v(a)];break;case 62846:a.g[16541]=6;b.h[a.g[16541]]=x(a,0,19941);break;case 41878:a.g[16541]=v(a);a.g[35268]=b.h[v(a)];b.h[a.g[16541]]=a.g[35268]==b.h[v(a)];
70
- break;case 46432:a.g[29035]=4;a.g[62634]=b.h[2];b.h[a.g[29035]]=a.g[62634]<=b.h[3];break;case 51142:b.l=v(a);break;case 29761:a.g[44199]=v(a);a.g[7487]=b.h[v(a)];b.h[a.g[44199]]=a.g[7487]>>b.h[v(a)];break;case 47732:a.g[16541]=v(a);b.h[a.g[16541]]=b.W;break;case 21541:a.g[16076]=9;a.g[21339]=75;b.h[a.g[16076]]||(b.l=a.g[21339]);break;case 14784:a.g[16541]=3;b.h[a.g[16541]]=x(a,1,30115);break;case 51607:a.g[16541]=v(a);a.g[65339]=b.h[v(a)];a.g[47106]=b.h[v(a)];if(typeof a.g[47106]==="function")b.h[a.g[16541]]=
71
- a.g[65339]instanceof a.g[47106];else{a.g[5038]=a.g[47106].prototype;a.g[21339]=Object.getPrototypeOf(a.g[65339]);for(a.g[25853]=!1;a.g[21339]!==null;){if(a.g[21339]===a.g[5038]){a.g[25853]=!0;break}a.g[21339]=Object.getPrototypeOf(a.g[21339])}b.h[a.g[16541]]=a.g[25853]}break;case 55835:a.g[16541]=v(a);b.h[a.g[16541]]=h(b.K.D[v(a)]);break;case 29844:a.g[42713]=v(a);a.g[1817]=x(a);if(!(a.g[1817]in a.m))throw new ReferenceError(`${a.g[1817]} is not defined`);b.h[a.g[42713]]=a.m[a.g[1817]];break;case 24699:a.g[16541]=
72
- 5;a.g[62634]=b.h[2];b.h[a.g[16541]]=a.g[62634]+b.h[4];break;case 44361:a.g[16541]=v(a);a.g[52124]=b.h[v(a)];a.g[15140]=[];if(a.g[52124]!==null&&a.g[52124]!==void 0)for(a.g[23643]=Object.create(null),a.g[61494]=Object(a.g[52124]);a.g[61494]!==null;){a.g[46538]=Object.getOwnPropertyNames(a.g[61494]);for(a.g[33125]=0;a.g[33125]<a.g[46538].length;a.g[33125]++)a.g[7176]=a.g[46538][a.g[33125]],a.g[7176]in a.g[23643]||(a.g[23643][a.g[7176]]=!0,a.g[34638]=Object.getOwnPropertyDescriptor(a.g[61494],a.g[7176]),
73
- a.g[34638]&&a.g[34638].enumerable&&a.g[15140].push(a.g[7176]));a.g[61494]=Object.getPrototypeOf(a.g[61494])}b.h[a.g[16541]]={N:a.g[15140],P:0};break;case 49820:a.g[16541]=v(a);b.h[a.g[16541]]=x(a);break;case 51817:a.g[38915]=b.h[4];z(a,b);if(a.j.length===0)return a.g[38915];b.o===null||typeof a.g[38915]==="object"&&a.g[38915]!==null||(a.g[38915]=b.o);a.g[23776]=a.j.pop();a.g[23776].h[b.G]=a.g[38915];a.i=a.g[23776];break;case 64967:a.g[52124]=b.h[v(a)];a.g[37378]=b.h[v(a)];a.g[11470]=b.h[v(a)];a.g[12672]=
74
- Object.getOwnPropertyDescriptor(a.g[52124],a.g[37378]);a.g[60061]={get:a.g[11470],configurable:!0,enumerable:!0};a.g[12672]&&typeof a.g[12672].set==="function"&&(a.g[60061].set=a.g[12672].set);Object.defineProperty(a.g[52124],a.g[37378],a.g[60061]);break;case 45309:a.g[7138]=v(a);a.g[18365]=v(a);a.g[49429]=v(a);for(a.g[9236]=a.g[18365];a.g[9236]<a.g[49429];a.g[9236]++)a.u[a.g[7138]+(a.g[9236]-a.g[18365])]=a.u[a.g[9236]];break;case 49746:a.g[12540]=v(a);k(b.K.D[a.g[12540]],b.h[v(a)]);break;case 7780:a.g[16541]=
75
- 3;a.g[1817]=x(a,2,31810);if(!(a.g[1817]in a.m))throw new ReferenceError(`${a.g[1817]} is not defined`);b.h[a.g[16541]]=a.m[a.g[1817]];break;case 20641:a.g[16541]=v(a);a.g[7422]=b.h[v(a)];a.g[11407]=v(a);a.g[59944]=Array(a.g[11407]);for(a.g[33125]=0;a.g[33125]<a.g[11407];a.g[33125]++)a.g[59944][a.g[33125]]=b.h[v(a)];if(a.g[7422]&&a.g[7422][c]){a.g[7358]=a.g[7422][c];a.g[58907]=new n(a.g[7358],a.m,a.g[16541]);for(a.g[33125]=0;a.g[33125]<a.g[59944].length;a.g[33125]++)a.g[58907].h[a.g[33125]]=a.g[59944][a.g[33125]];
76
- a.g[58907].h[a.g[7358].v.C]=a.g[59944];a.j.push(a.i);a.i=a.g[58907]}else b.h[a.g[16541]]=a.g[7422].apply(null,a.g[59944]);break;case 5381:a.g[16541]=v(a);a.g[14415]=b.h[v(a)];b.h[a.g[16541]]=a.g[14415]-b.h[v(a)];break;case 60964:a.g[1E3]=9;a.g[62634]=b.h[5];b.h[a.g[1E3]]=a.g[62634]>b.h[8];break;case 19072:a.g[12158]=v(a);a.g[21339]=v(a);b.h[a.g[12158]]&&(b.l=a.g[21339]);break;case 51960:a.g[16541]=3;b.h[a.g[16541]]=b.h[2];break;case 30357:a.g[16541]=v(a);a.g[63497]=b.h[v(a)];a.g[57844]=v(a);a.g[63497].P>=
77
- a.g[63497].N.length?b.l=a.g[57844]:b.h[a.g[16541]]=a.g[63497].N[a.g[63497].P++];break;case 20745:a.g[16541]=v(a);a.g[62634]=b.h[v(a)];b.h[a.g[16541]]=a.g[62634]/b.h[v(a)];break;case 11726:a.g[9620]=v(a);a.g[62634]=b.h[v(a)];b.h[a.g[9620]]=a.g[62634]&b.h[v(a)];break;case 48568:a.g[5190]=3;b.h[a.g[5190]]=x(a,4,0);break;case 3645:a.g[22553]=v(a);a.g[807]=x(a);a.g[645]=Object.prototype.hasOwnProperty.call(a.m,a.g[807])?a.m[a.g[807]]:void 0;b.h[a.g[22553]]=typeof a.g[645];break;case 46061:a.g[34726]=v(a);
78
- a.g[59851]=v(a);a.g[62133]={};for(a.g[33125]=0;a.g[33125]<a.g[59851];a.g[33125]++)a.g[37378]=b.h[v(a)],a.g[3547]=b.h[v(a)],a.g[62133][a.g[37378]]=a.g[3547];b.h[a.g[34726]]=a.g[62133];break;case 20491:debugger;break;case 24674:a.g[51590]=1;b.h[a.g[51590]]=b.h[3];break;case 60658:a.g[16541]=v(a);a.g[62634]=b.h[v(a)];b.h[a.g[16541]]=a.g[62634]<<b.h[v(a)];break;case 8845:a.g[16541]=2;b.h[a.g[16541]]=b.h[3];break;default:throw Error("Unknown opcode: "+d+" at pc "+(b.l-1));case 59199:a.g[16541]=v(a);a.g[62634]=
79
- b.h[v(a)];b.h[a.g[16541]]=a.g[62634]+b.h[v(a)];break;case 5385:a.g[39284]=4;b.h[a.g[39284]]=x(a,3,32194);break;case 20918:a.g[16541]=v(a);a.g[16160]=b.h[v(a)];b.h[a.g[16541]]=a.g[16160]|b.h[v(a)];break;case 25652:a.g[16541]=8;b.h[a.g[16541]]=x(a,0,19941);break;case 51993:a.g[14091]=v(a);a.g[20393]=b.h[v(a)];b.h[a.g[14091]]=a.g[20393]*b.h[v(a)];break;case 29458:a.g[27021]=4;b.h[a.g[27021]]=b.h[0];break;case 38570:throw b.h[v(a)];case 21903:a.g[16541]=v(a);a.g[46842]=b.h[v(a)];b.h[a.g[16541]]=a.g[46842]<
80
- b.h[v(a)];break;case 17068:a.g[16541]=5;b.h[a.g[16541]]=b.h[0];break;case 26163:a.g[55552]=v(a);a.g[16422]=v(a);b.h[a.g[55552]]||(b.l=a.g[16422]);break;case 28425:a.g[16541]=v(a);b.h[a.g[16541]]=typeof b.h[v(a)];break;case 63202:a.g[60330]=v(a);b.h[a.g[60330]]=b.h[v(a)];break;case 31805:a.g[53668]=v(a);b.h[a.g[53668]]=!b.h[v(a)];break;case 57225:b.l=59}}catch(l){b=null;for(d=a.i;;){if(d.F.length>0){b=d;break}z(a,d);if(a.j.length===0)break;d=a.j.pop();a.i=d}if(!b)throw l;d=b.F.pop();a.j.length=d.T;
81
- b.h[d.S]=l;b.l=d.U;a.i=b}}}var B={},C;for(C of Object.getOwnPropertyNames(globalThis))B[C]=globalThis[C];if(typeof window!=="undefined"){B.window=window;for(C of Object.getOwnPropertyNames(window))B[C]=window[C]}B.undefined=void 0;B.Infinity=Infinity;B.NaN=NaN;
82
- A(new p(function(a){a=typeof Buffer!=="undefined"?Buffer.from(a,"base64"):Uint8Array.from(atob(a),function(d){return d.charCodeAt(0)});for(var e=new Uint16Array(a.length/2),b=0;b<e.length;b++)e[b]=a[b*2]|a[b*2+1]<<8;return e}("/bAEAFIAWwCNE5aj8uz9sA2/zi2qlqqWY9r9sBEAWwBtAKFQ52DnYD0OPQ5FrTNmCVGPVRnLbEC2UZV2+Lz4vMyRB7sJb/2wJwBtAHIAtlE/58Zt/bDMkf2wMAByAHQAzJF6Hv2wNgB0AHkA3GnOLT18B2Y/5/2wPwB5AIUAB7v4vKKxBNYNv6KxPXxFrQTWY9o9fO2z/bBPAIUAiABJrVLCPXxj2gMAMgABAAoAAABiYOxxjSLAOWC17PhkHgkVGxChUAYAAQABAAIAorEHAAMABQACAAIABgD4ys9Se2DYsWwHuL3Y64oA2LF+9ZOMEnOsQn71P+rZkjRkJO4lVDANWWONItRkid9pyv7mf70="),0,
83
- [19940,30138,"IXwsfCp8NnwpfCt8LXw=","rn2sfaN9",void 0,58082],B));
56
+ function ba(d,q,e,m){this.F=d;this.P=e;this.C=m;this.l=[];this.J=[];this.g=Array(q).fill(void 0);this.v=q;this.o=new f(new ca({B:0,m:q,U:0}),void 0,0,0)}function da(d){return typeof Buffer!=="undefined"?Buffer.from(d,"base64"):Uint8Array.from(atob(d),function(q){return q.charCodeAt(0)})}function ea(d,q){this.g=d;this.G=q;this.H=!1;this.M=void 0}var n=new WeakMap;function f(d,q,e,m){this.A=d;this.h=m;this.j=d.i.U;this.$=q!==void 0?q:void 0;this.D=e!==void 0?e:0;this.u=null;this.I=[]}
57
+ function ca(d){this.i=d;this.K=[];this.prototype={}}function B(d,q,e){q=q??I(d);e=e??I(d);d=d.P[q];if(!e)return d;if(typeof d==="number")return d^e;d=da(d);q="";for(var m=0;m<d.length/2;m++)q+=String.fromCharCode((d[m*2]|d[m*2+1]<<8)^e+m&65535);return q}function fa(d){return d.H?d.M:d.g[d.G]}function ra(d,q,e){q=q.h+e;for(e=0;e<d.J.length;e++){var m=d.J[e];if(!m.H&&m.G===q)return m}m=new ea(d.g,q);d.J.push(m);return m}function sa(d,q){d.H?d.M=q:d.g[d.G]=q}function I(d){return d.F[d.o.j++]}
58
+ function M(d,q){var e=q.h,m=q.h+q.A.i.m;d.J=d.J.filter(function(y){return!y.H&&y.G>=e&&y.G<m?(y.M=y.g[y.G],y.H=!0,!1):!0})}function P(d,q,e){for(e=q+e;d.g.length<e;)d.g.push(void 0);for(;q<e;q++)d.g[q]=void 0}
59
+ function ta(d){for(var q=performance.now();;){var e=d.o;if(e.j>=d.F.length)break;var m=e.j++;m=d.F[m];var y=performance.now(),va=y-q>1E3;q=y;if(va){for(var g=0;g<d.F.length;g++)d.F[g]=0;for(m=e.h;m<d.v;m++)d.g[m]=void 0;m=56794;e.j=d.F.length}try{var b=d.g,c=e.h;switch(m){case 27304:var w=b[c+I(d)],z=b[c+I(d)],wa=b[c+I(d)],H=Object.getOwnPropertyDescriptor(w,z);e={set:wa,configurable:!0,enumerable:!0};H&&typeof H.get==="function"&&(e.get=H.get);Object.defineProperty(w,z,e);break;case 3275:e.j=287;
60
+ break;case 51732:var a=1;b[c+a]=B(d,13,0);break;case 38496:var k=b[c+29];M(d,e);var x=e.h+e.A.i.m;for(g=e.h;g<x;g++)d.g[g]=void 0;d.v=e.h;if(d.l.length===0)return k;e.u===null||typeof k==="object"&&k!==null||(k=e.u);var t=d.l.pop();d.g[t.h+e.D]=k;d.o=t;break;case 51626:a=I(d);b[c+a]=e.$;break;case 53773:k=b[c+3];M(d,e);x=e.h+e.A.i.m;for(g=e.h;g<x;g++)d.g[g]=void 0;d.v=e.h;if(d.l.length===0)return k;e.u===null||typeof k==="object"&&k!==null||(k=e.u);t=d.l.pop();d.g[t.h+e.D]=k;d.o=t;break;case 65442:a=
61
+ 7;b[c+a]=45008;break;case 54897:a=23;b[c+a]=B(d,21,61364);break;case 60096:a=I(d);var h=b[c+I(d)];b[c+a]=h>>>b[c+I(d)];break;case 31086:var p=31,l=507;b[c+p]||(e.j=l);break;case 55707:a=30;b[c+a]=B(d,13,0);break;case 45866:debugger;break;case 3739:a=I(d);var ha=I(d),ia=Array(ha);for(g=0;g<ha;g++)ia[g]=b[c+I(d)];b[c+a]=ia;break;case 34277:a=27;b[c+a]=55886;break;case 6475:a=27;b[c+a]=19472;break;case 23398:a=27;b[c+a]=22253;break;case 16267:a=27;b[c+a]=47829;break;case 62373:a=I(d);w=b[c+I(d)];var X=
62
+ b[c+I(d)];if(typeof X==="function")b[c+a]=w instanceof X;else{var xa=X.prototype;l=Object.getPrototypeOf(w);for(e=!1;l!==null;){if(l===xa){e=!0;break}l=Object.getPrototypeOf(l)}b[c+a]=e}break;case 728:var ya=I(d),ja=I(d),za=I(d);for(e=ja;e<za;e++)d.F[ya+(e-ja)]=d.F[e];break;case 23697:a=28;b[c+a]=59819;break;case 30800:a=I(d);h=b[c+I(d)];b[c+a]=h===b[c+I(d)];break;case 52519:a=28;b[c+a]=54421;break;case 57471:p=12;l=331;b[c+p]&&(e.j=l);break;case 6233:a=27;b[c+a]=214;break;case 2122:a=28;b[c+a]=6034;
63
+ break;case 45689:a=2;b[c+a]=b[c+3];break;case 21693:a=29;b[c+a]=B(d,13,0);break;case 59763:p=9;l=23;b[c+p]&&(e.j=l);break;case 52409:a=26;b[c+a]=11895;break;case 43733:a=I(d);h=b[c+I(d)];b[c+a]=h>>b[c+I(d)];break;case 6977:p=18;l=382;b[c+p]&&(e.j=l);break;case 914:a=7;b[c+a]=b[c+6];break;case 9768:k=b[c+2];M(d,e);x=e.h+e.A.i.m;for(g=e.h;g<x;g++)d.g[g]=void 0;d.v=e.h;if(d.l.length===0)return k;e.u===null||typeof k==="object"&&k!==null||(k=e.u);t=d.l.pop();d.g[t.h+e.D]=k;d.o=t;break;case 30839:a=I(d);
64
+ h=b[c+I(d)];b[c+a]=h*b[c+I(d)];break;case 33249:a=27;b[c+a]=5007;break;case 13193:a=27;b[c+a]=32650;break;case 9579:a=8;b[c+a]=11538;break;case 23885:a=8;b[c+a]=27166;break;case 44775:k=b[c+1];M(d,e);x=e.h+e.A.i.m;for(g=e.h;g<x;g++)d.g[g]=void 0;d.v=e.h;if(d.l.length===0)return k;e.u===null||typeof k==="object"&&k!==null||(k=e.u);t=d.l.pop();d.g[t.h+e.D]=k;d.o=t;break;case 58411:a=28;b[c+a]=33223;break;case 61434:a=3;h=b[c+4];b[c+a]=h&b[c+2];break;case 53370:a=27;b[c+a]=26969;break;case 60585:a=27;
65
+ b[c+a]=11124;break;case 35870:a=3;b[c+a]=b[c+0];break;case 2359:a=I(d);var ka=b[c+I(d)],C=b[c+I(d)],D=I(d);if(D===1346325351)var u=b[c+I(d)];else for(u=Array(D),g=0;g<D;g++)u[g]=b[c+I(d)];var r=C&&n.get(C);if(r){var v=d.v;P(d,v,r.i.m);d.v=v+r.i.m;var J=new f(r,ka,a,v);if(r.i.L){var E=r.i.B-1;for(g=0;g<E;g++)d.g[v+g]=g<u.length?u[g]:void 0;d.g[v+E]=u.slice(E)}else for(g=0;g<u.length&&g<r.i.m;g++)d.g[v+g]=u[g];r.i.B<r.i.m&&(d.g[v+r.i.B]=u);d.l.push(d.o);d.o=J}else b[c+a]=C.apply(ka,u);break;case 33199:a=
66
+ 27;b[c+a]=51778;break;case 16523:a=29;b[c+a]=b[c+1];break;case 52773:a=26;b[c+a]=8604;break;case 41754:a=27;b[c+a]=65235;break;case 55073:a=26;b[c+a]=41150;break;case 30215:a=5;b[c+a]=b[c+0];break;case 12986:a=1;b[c+a]=b[c+2];break;case 52156:a=27;b[c+a]=17892;break;case 31804:a=I(d);b[c+a]=fa(e.A.K[I(d)]);break;case 25312:a=28;b[c+a]=29501;break;case 38178:a=28;b[c+a]=5409;break;case 11443:a=29;b[c+a]=B(d,9,48146);break;case 14362:a=1;b[c+a]=b[c+30];break;case 19456:a=29;b[c+a]=B(d,10,53642);break;
67
+ case 3282:a=7;b[c+a]=12018;break;case 14125:k=b[c+2];M(d,e);x=e.h+e.A.i.m;for(g=e.h;g<x;g++)d.g[g]=void 0;d.v=e.h;if(d.l.length===0)return k;e.u===null||typeof k==="object"&&k!==null||(k=e.u);t=d.l.pop();d.g[t.h+e.D]=k;d.o=t;break;case 50918:a=28;b[c+a]=10738;break;case 51949:a=27;b[c+a]=64988;break;case 2059:a=27;b[c+a]=61594;break;case 52528:a=7;b[c+a]=19983;break;case 3978:a=27;b[c+a]=9370;break;case 25228:a=26;b[c+a]=63581;break;case 4992:a=28;b[c+a]=44381;break;case 28745:a=27;b[c+a]=40319;break;
68
+ case 5201:a=I(d);h=b[c+I(d)];b[c+a]=h>=b[c+I(d)];break;case 48708:a=8;b[c+a]=44102;break;case 49539:a=I(d);h=b[c+I(d)];b[c+a]=h==b[c+I(d)];break;case 40068:a=6;h=b[c+0];b[c+a]=h-b[c+30];break;case 43644:a=2;h=b[c+0];b[c+a]=h^b[c+1];break;case 62162:p=I(d);l=I(d);b[c+p]&&(e.j=l);break;case 49692:a=4;b[c+a]=B(d,9,48146);break;case 36265:p=24;l=433;b[c+p]&&(e.j=l);break;case 18996:a=17;b[c+a]=B(d,18,31254);break;case 41259:a=7;b[c+a]=B(d,14,19695);break;case 30356:a=27;b[c+a]=4133;break;case 30951:e.I.push({X:I(d),
69
+ R:I(d),S:d.l.length});break;case 58823:a=26;b[c+a]=58954;break;case 62570:e.I.push({W:I(d),V:I(d),Z:I(d),aa:I(d),S:d.l.length});break;case 51978:a=8;b[c+a]=B(d,1,2776);break;case 3766:a=8;b[c+a]=10594;break;case 4542:p=23;l=135;b[c+p]&&(e.j=l);break;case 52019:a=8;b[c+a]=b[c+7];break;case 24314:a=I(d);var S=b[c+I(d)],Aa=I(d);S.T>=S.O.length?e.j=Aa:b[c+a]=S.O[S.T++];break;case 26863:a=26;b[c+a]=28504;break;case 4731:a=27;b[c+a]=57674;break;case 45482:a=29;b[c+a]=B(d,9,48146);break;case 59270:a=I(d);
70
+ h=b[c+I(d)];b[c+a]=h+b[c+I(d)];break;case 30848:a=26;b[c+a]=34955;break;case 21700:a=20;h=b[c+8];b[c+a]=h===b[c+19];break;case 46334:k=b[c+2];M(d,e);x=e.h+e.A.i.m;for(g=e.h;g<x;g++)d.g[g]=void 0;d.v=e.h;if(d.l.length===0)return k;e.u===null||typeof k==="object"&&k!==null||(k=e.u);t=d.l.pop();d.g[t.h+e.D]=k;d.o=t;break;case 13136:a=I(d);C=b[c+I(d)];D=I(d);if(D===1346325351)u=b[c+I(d)];else for(u=Array(D),g=0;g<D;g++)u[g]=b[c+I(d)];if(r=C&&n.get(C)){var la=Object.create(r.prototype||null);v=d.v;P(d,
71
+ v,r.i.m);d.v=v+r.i.m;J=new f(r,la,a,v);if(r.i.L){E=r.i.B-1;for(g=0;g<E;g++)d.g[v+g]=g<u.length?u[g]:void 0;d.g[v+E]=u.slice(E)}else for(g=0;g<u.length&&g<r.i.m;g++)d.g[v+g]=u[g];r.i.B<r.i.m&&(d.g[v+r.i.B]=u);J.u=la;d.l.push(d.o);d.o=J}else b[c+a]=Reflect.construct(C,u);break;case 22903:a=26;h=b[c+8];b[c+a]=h===b[c+25];break;case 8165:a=I(d);h=b[c+I(d)];b[c+a]=h-b[c+I(d)];break;case 57345:a=27;b[c+a]=42023;break;case 30575:e.j=b[c+I(d)];break;case 12185:a=I(d);I(d);b[c+a]=void 0;break;case 25230:a=
72
+ 7;b[c+a]=44230;break;case 9110:a=29;w=b[c+2];z=b[c+3];b[c+a]=w[z];break;case 2408:a=27;b[c+a]=16167;break;case 43340:a=28;b[c+a]=15123;break;case 375:a=27;b[c+a]=37792;break;case 61363:a=26;b[c+a]=56165;break;case 45914:a=27;b[c+a]=59072;break;case 43243:a=15;b[c+a]=B(d,17,34472);break;case 60738:a=2;b[c+a]=B(d,26,9252);break;case 9014:a=28;b[c+a]=19641;break;case 59995:a=26;b[c+a]=33559;break;case 6861:e.j=b[c+27];break;case 30584:e.I.pop();break;case 26717:a=27;b[c+a]=49516;break;case 53260:a=7;
73
+ b[c+a]=33291;break;case 43900:a=3;b[c+a]=B(d,12,57845);break;case 10766:p=14;l=348;b[c+p]&&(e.j=l);break;case 20871:a=28;b[c+a]=42270;break;case 47625:a=2;var F=B(d,11,11091);if(!(F in d.C))throw new ReferenceError(`${F} is not defined`);b[c+a]=d.C[F];break;case 45744:a=30;h=b[c+1];b[c+a]=h+b[c+2];break;case 51945:a=27;b[c+a]=64978;break;case 48135:a=I(d);h=b[c+I(d)];b[c+a]=h/b[c+I(d)];break;case 12490:a=6;b[c+a]=B(d,0,48833);break;case 38156:a=23;h=b[c+7];b[c+a]=h===b[c+22];break;case 45443:a=18;
74
+ b[c+a]=B(d,5,64476);break;case 58487:a=27;b[c+a]=43608;break;case 41062:a=18;h=b[c+8];b[c+a]=h===b[c+17];break;case 49336:p=10;l=321;b[c+p]&&(e.j=l);break;case 22586:a=4;h=b[c+2];b[c+a]=h+b[c+3];break;case 5785:a=28;b[c+a]=64273;break;case 41424:a=2;h=b[c+0];b[c+a]=h^b[c+1];break;case 13057:a=28;b[c+a]=52685;break;case 56997:a=21;b[c+a]=B(d,20,12401);break;case 13072:a=27;b[c+a]=22906;break;case 17372:a=4;h=b[c+1];b[c+a]=h+b[c+29];break;case 54813:a=26;b[c+a]=60773;break;case 58446:a=26;b[c+a]=25862;
75
+ break;case 14082:a=3;b[c+a]=b[c+30];break;case 28900:a=I(d);h=b[c+I(d)];b[c+a]=h!=b[c+I(d)];break;case 5356:a=28;b[c+a]=44747;break;case 21091:a=I(d);h=b[c+I(d)];b[c+a]=h%b[c+I(d)];break;case 55496:a=16;h=b[c+8];b[c+a]=h===b[c+15];break;case 8964:a=0;b[c+a]=b[c+6];break;case 19574:a=26;b[c+a]=63328;break;case 58892:a=30;b[c+a]=B(d,9,48146);break;case 16851:a=I(d);h=b[c+I(d)];b[c+a]=h^b[c+I(d)];break;case 29264:a=27;b[c+a]=27633;break;case 1439:a=I(d);b[c+a]=B(d);break;case 27274:a=16;b[c+a]=B(d,4,
76
+ 39230);break;case 21219:a=I(d);b[c+a]=b[c+I(d)];break;case 31487:a=7;b[c+a]=59380;break;case 16336:a=I(d);F=B(d);if(!(F in d.C))throw new ReferenceError(`${F} is not defined`);b[c+a]=d.C[F];break;case 48989:a=14;h=b[c+8];b[c+a]=h===b[c+13];break;case 41866:a=26;b[c+a]=25437;break;case 59315:a=27;b[c+a]=59668;break;case 45755:a=10;h=b[c+8];b[c+a]=h!==b[c+9];break;case 40780:a=20;b[c+a]=B(d,6,27256);break;case 15310:a=26;b[c+a]=56683;break;case 53587:a=I(d);b[c+a]=~b[c+I(d)];break;case 2860:a=3;b[c+
77
+ a]=B(d,25,63889);break;case 61396:a=8;b[c+a]=2154;break;case 50015:a=12;h=b[c+8];b[c+a]=h===b[c+11];break;case 31240:a=26;b[c+a]=37995;break;case 48917:p=26;l=450;b[c+p]&&(e.j=l);break;case 41977:a=27;b[c+a]=52154;break;case 37311:a=25;h=b[c+7];b[c+a]=h===b[c+24];break;case 9266:a=I(d);var Ba=I(d);e={};for(g=0;g<Ba;g++){z=b[c+I(d)];var N=b[c+I(d)];e[z]=N}b[c+a]=e;break;case 38320:p=15;l=67;b[c+p]&&(e.j=l);break;case 65117:a=26;b[c+a]=18271;break;case 55737:p=20;l=399;b[c+p]&&(e.j=l);break;case 64061:a=
78
+ 27;b[c+a]=63311;break;case 24393:a=I(d);var Ca=I(d),Da=I(d),Ea=I(d),ma=I(d),Fa=I(d),T=Array(ma);for(g=0;g<ma;g++){var Ga=I(d),Ha=I(d);T[g]={Y:Ga,N:Ha}}r=new ca({B:Da,m:Ea,U:Ca,ba:T,L:Fa});for(g=0;g<T.length;g++){var Y=T[g];Y.Y?r.K.push(ra(d,e,Y.N)):r.K.push(e.A.K[Y.N])}var U=d,aa=function(A){return function(){var K=Array.prototype.slice.call(arguments),L=new ba(U.F,A.i.m,U.P,U.C);L.o=new f(A,this==null?U.C:this,0,0);if(A.i.L){for(var Z=A.i.B-1,G=0;G<Z;G++)L.g[G]=G<K.length?K[G]:void 0;L.g[Z]=K.slice(Z)}else for(G=
79
+ 0;G<K.length&&G<A.i.m;G++)L.g[G]=K[G];A.i.B<A.i.m&&(L.g[A.i.B]=K);return ta(L)}}(r);n.set(aa,r);aa.prototype=r.prototype;b[c+a]=aa;break;case 39651:p=19;l=101;b[c+p]&&(e.j=l);break;case 23213:a=4;h=b[c+2];b[c+a]=h+b[c+3];break;case 37419:e.j=554;break;case 27387:p=I(d);l=I(d);b[c+p]||(e.j=l);break;case 2958:a=I(d);h=b[c+I(d)];b[c+a]=h>b[c+I(d)];break;case 43992:p=30;l=197;b[c+p]||(e.j=l);break;case 38858:a=9;h=b[c+7];b[c+a]=h!==b[c+8];break;case 23280:p=16;l=365;b[c+p]&&(e.j=l);break;case 24807:a=
80
+ I(d);h=b[c+I(d)];b[c+a]=h in b[c+I(d)];break;case 49359:a=7;b[c+a]=60100;break;case 31717:a=27;b[c+a]=31190;break;case 61163:a=26;b[c+a]=43553;break;case 45062:var Ia=I(d);sa(e.A.K[Ia],b[c+I(d)]);break;case 5400:a=27;b[c+a]=21191;break;case 22960:a=26;b[c+a]=36296;break;case 30198:a=19;b[c+a]=B(d,19,20565);break;case 31054:a=3;h=b[c+4];b[c+a]=h&b[c+2];break;case 55946:a=27;b[c+a]=50533;break;case 42326:a=2;b[c+a]=B(d,13,0);break;case 47802:a=1;F=B(d,24,5777);if(!(F in d.C))throw new ReferenceError(`${F} is not defined`);
81
+ b[c+a]=d.C[F];break;case 45545:a=27;b[c+a]=29788;break;case 36497:a=26;b[c+a]=61501;break;case 16530:k=b[c+3];M(d,e);x=e.h+e.A.i.m;for(g=e.h;g<x;g++)d.g[g]=void 0;d.v=e.h;if(d.l.length===0)return k;e.u===null||typeof k==="object"&&k!==null||(k=e.u);t=d.l.pop();d.g[t.h+e.D]=k;d.o=t;break;case 3575:w=b[c+I(d)];z=b[c+I(d)];var Ja=b[c+I(d)];H=Object.getOwnPropertyDescriptor(w,z);e={get:Ja,configurable:!0,enumerable:!0};H&&typeof H.set==="function"&&(e.set=H.set);Object.defineProperty(w,z,e);break;case 58449:a=
82
+ 27;b[c+a]=11931;break;case 16922:a=15;h=b[c+7];b[c+a]=h===b[c+14];break;case 18529:a=24;h=b[c+8];b[c+a]=h===b[c+23];break;case 20311:a=17;h=b[c+7];b[c+a]=h===b[c+16];break;case 61126:a=27;b[c+a]=44075;break;case 25501:a=11;h=b[c+7];b[c+a]=h===b[c+10];break;case 60915:a=12;b[c+a]=B(d,2,53228);break;case 35705:a=28;b[c+a]=9057;break;case 27643:a=28;b[c+a]=63849;break;case 10397:a=I(d);h=b[c+I(d)];b[c+a]=h<=b[c+I(d)];break;case 38422:a=8;b[c+a]=38938;break;case 24297:w=b[c+I(d)];z=b[c+I(d)];N=b[c+I(d)];
83
+ Reflect.set(w,z,N);break;case 52921:a=27;b[c+a]=30719;break;case 61718:p=13;l=50;b[c+p]&&(e.j=l);break;case 2367:a=27;b[c+a]=39190;break;case 30416:p=17;l=84;b[c+p]&&(e.j=l);break;case 15914:a=27;b[c+a]=18317;break;case 56794:e.j=I(d);break;case 45239:a=I(d);h=b[c+I(d)];b[c+a]=h!==b[c+I(d)];break;case 45026:a=27;b[c+a]=50871;break;case 58546:a=26;b[c+a]=31393;break;case 43850:a=28;b[c+a]=16708;break;case 60849:a=27;b[c+a]=12296;break;case 9480:a=28;b[c+a]=33263;break;case 27936:k=b[c+3];M(d,e);x=
84
+ e.h+e.A.i.m;for(g=e.h;g<x;g++)d.g[g]=void 0;d.v=e.h;if(d.l.length===0)return k;e.u===null||typeof k==="object"&&k!==null||(k=e.u);t=d.l.pop();d.g[t.h+e.D]=k;d.o=t;break;case 37363:a=I(d);w=b[c+I(d)];e=[];if(w!==null&&w!==void 0)for(var na=Object.create(null),O=Object(w);O!==null;){var oa=Object.getOwnPropertyNames(O);for(g=0;g<oa.length;g++){var V=oa[g];if(!(V in na)){na[V]=!0;var pa=Object.getOwnPropertyDescriptor(O,V);pa&&pa.enumerable&&e.push(V)}}O=Object.getPrototypeOf(O)}b[c+a]={O:e,T:0};break;
85
+ case 19617:a=13;b[c+a]=B(d,16,60419);break;case 57432:a=28;b[c+a]=13137;break;case 40263:a=I(d);h=b[c+I(d)];b[c+a]=h|b[c+I(d)];break;case 64236:a=26;b[c+a]=15299;break;case 40865:a=10;b[c+a]=B(d,0,48833);break;case 8579:a=30;b[c+a]=B(d,9,48146);break;case 45218:a=28;b[c+a]=51115;break;case 8570:a=22;h=b[c+8];b[c+a]=h===b[c+21];break;case 33783:a=27;b[c+a]=15371;break;case 18478:a=13;h=b[c+7];b[c+a]=h===b[c+12];break;case 63914:a=2;b[c+a]=B(d,13,0);break;case 51668:p=22;l=416;b[c+p]&&(e.j=l);break;
86
+ case 11733:a=28;b[c+a]=37192;break;case 28212:a=27;b[c+a]=26727;break;case 55080:a=I(d);h=b[c+I(d)];b[c+a]=h<<b[c+I(d)];break;case 34997:a=25;b[c+a]=B(d,22,17109);break;case 40017:a=I(d);b[c+a]=typeof b[c+I(d)];break;case 42789:a=1;b[c+a]=b[c+4];break;case 42178:a=28;b[c+a]=11279;break;case 33888:a=I(d);b[c+a]=I(d);break;case 9576:a=31;h=b[c+5];b[c+a]=h>b[c+30];break;case 9695:d.C[B(d)]=b[c+I(d)];break;case 52523:a=26;b[c+a]=48462;break;case 57979:throw b[c+I(d)];case 5207:a=I(d);var qa=B(d);N=Object.prototype.hasOwnProperty.call(d.C,
87
+ qa)?d.C[qa]:void 0;b[c+a]=typeof N;break;case 48152:a=2;b[c+a]=b[c+4];break;case 35255:a=30;h=b[c+1];b[c+a]=h<=b[c+29];break;case 29133:a=28;b[c+a]=48053;break;case 58091:a=3;b[c+a]=B(d,27,54427);break;case 8386:a=27;b[c+a]=29674;break;case 39710:a=26;b[c+a]=55240;break;case 29797:a=11;b[c+a]=B(d,14,19695);break;case 58346:a=2;b[c+a]=B(d,26,9252);break;case 38319:a=I(d);w=b[c+I(d)];z=b[c+I(d)];b[c+a]=w[z];break;case 23668:a=26;b[c+a]=63446;break;case 30824:a=27;b[c+a]=45446;break;case 20277:a=30;
88
+ b[c+a]=B(d,23,16334);break;case 53273:a=26;b[c+a]=34027;break;case 23724:a=27;b[c+a]=39434;break;case 23917:a=27;b[c+a]=43482;break;case 22738:p=21;l=118;b[c+p]&&(e.j=l);break;case 64284:a=27;b[c+a]=64964;break;case 64251:a=27;b[c+a]=52423;break;case 30908:a=21;h=b[c+7];b[c+a]=h===b[c+20];break;case 8120:a=28;b[c+a]=6573;break;case 15616:a=28;b[c+a]=40723;break;case 40501:k=b[c+30];M(d,e);x=e.h+e.A.i.m;for(g=e.h;g<x;g++)d.g[g]=void 0;d.v=e.h;if(d.l.length===0)return k;e.u===null||typeof k==="object"&&
89
+ k!==null||(k=e.u);t=d.l.pop();d.g[t.h+e.D]=k;d.o=t;break;case 43904:a=I(d);w=b[c+I(d)];z=b[c+I(d)];b[c+a]=delete w[z];break;case 60845:a=22;b[c+a]=B(d,7,13959);break;case 61174:a=26;b[c+a]=60787;break;case 25287:a=14;b[c+a]=B(d,3,52933);break;case 21764:a=27;b[c+a]=37980;break;case 22858:a=27;b[c+a]=54157;break;case 14347:a=I(d);h=b[c+I(d)];b[c+a]=h&b[c+I(d)];break;case 37980:a=I(d);h=b[c+I(d)];b[c+a]=h<b[c+I(d)];break;case 35397:a=I(d);b[c+a]=+b[c+I(d)];break;case 35514:p=25;l=152;b[c+p]&&(e.j=l);
90
+ break;case 55255:a=19;h=b[c+7];b[c+a]=h===b[c+18];break;case 39015:a=I(d);b[c+a]=-b[c+I(d)];break;case 38427:a=I(d);C=b[c+I(d)];D=I(d);if(D===1346325351)u=b[c+I(d)];else for(u=Array(D),g=0;g<D;g++)u[g]=b[c+I(d)];if(r=C&&n.get(C)){v=d.v;P(d,v,r.i.m);d.v=v+r.i.m;J=new f(r,d.C,a,v);if(r.i.L){E=r.i.B-1;for(g=0;g<E;g++)d.g[v+g]=g<u.length?u[g]:void 0;d.g[v+E]=u.slice(E)}else for(g=0;g<u.length&&g<r.i.m;g++)d.g[v+g]=u[g];r.i.B<r.i.m&&(d.g[v+r.i.B]=u);d.l.push(d.o);d.o=J}else b[c+a]=C.apply(null,u);break;
91
+ case 35553:a=28;b[c+a]=17042;break;case 37928:a=26;b[c+a]=18841;break;case 16154:a=0;b[c+a]=b[c+29];break;case 16094:a=24;b[c+a]=B(d,8,35519);break;case 33144:a=27;b[c+a]=59351;break;case 20740:k=b[c+I(d)];M(d,e);x=e.h+e.A.i.m;for(g=e.h;g<x;g++)d.g[g]=void 0;d.v=e.h;if(d.l.length===0)return k;e.u===null||typeof k==="object"&&k!==null||(k=e.u);t=d.l.pop();d.g[t.h+e.D]=k;d.o=t;break;case 41670:a=9;b[c+a]=B(d,15,58824);break;case 64390:a=I(d);b[c+a]=!b[c+I(d)];break;case 61626:a=27;b[c+a]=34012;break;
92
+ case 3843:a=1;b[c+a]=b[c+29];break;case 33412:e.j=b[c+26];break;default:throw Error("Unknown opcode: "+m+" at pc "+(e.j-1));case 17870:p=11,l=33,b[c+p]&&(e.j=l)}}catch(A){e=null;for(m=d.o;;){if(m.I.length>0){e=m;break}M(d,m);d.v=m.h;if(d.l.length===0)break;m=d.l.pop();d.o=m}if(!e)throw A;m=e.I.pop();d.l.length=m.S;y=e.h;m.R!==void 0?(d.g[y+m.R]=A,e.j=m.X):(d.g[y+m.V]=m.aa,d.g[y+m.Z]=A,e.j=m.W);d.v=y+e.A.i.m;d.o=e}}}var Q=globalThis;
93
+ typeof window!=="undefined"&&(Q.window=window,Q.document=typeof document!=="undefined"?document:void 0);typeof module!=="undefined"&&(Q.module=module,Q.exports=typeof exports!=="undefined"?exports:void 0);
94
+ for(var ua=ta,R=da("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"),Ka=
95
+ new Uint32Array(R.length/4),W=0;W<Ka.length;W++)Ka[W]=(R[W*4]|R[W*4+1]<<8|R[W*4+2]<<16|R[W*4+3]<<24)>>>0;ua(new ba(Ka,32,[34991,8448,24636,57399,29690,22298,59507,53619,50352,48147,53651,"MCs7KzsrJSs4KzQrPCs=","l+Gx4c7hluE=",void 0,54717,54029,58473,45002,4104,64531,7523,30638,21997,16334,"8BbmFvwW9hY=",5831,56283,52226],Q));
84
96
  */
85
97
  ```
86
98
 
@@ -112,16 +124,22 @@ A(new p(function(a){a=typeof Buffer!=="undefined"?Buffer.from(a,"base64"):Uint8A
112
124
  - [x] labeled statements
113
125
  - [x] for..in loop
114
126
  - [x] RegExp literals
115
- - [x] try..catch
127
+ - [x] try..catch..finally
116
128
  - [x] getter/setters
117
129
  - [x] debugger;
118
130
  - [x] template literals (**ES6**)
131
+ - [x] rest parameters (**ES6**)
132
+ - [x] spread operator (**ES6**)
133
+ - [x] object methods, computed property keys (**ES6**)
134
+ - [x] arrow functions (**ES6**)
135
+ - [x] exponentiation operator `**`, `**=`
136
+ - [x] nullish coalescing `??`
119
137
 
120
138
  ### Missing
121
139
 
122
- - [ ] try..finally
123
140
  - [ ] with statement
124
141
  - [ ] arguments.callee, argument parameter syncing
142
+ - [ ] eval() referencing local variables
125
143
 
126
144
  ### Hardening
127
145
 
@@ -132,7 +150,6 @@ A(new p(function(a){a=typeof Buffer!=="undefined"?Buffer.from(a,"base64"):Uint8A
132
150
  - [ ] dead handlers
133
151
  - [ ] dead bytecode insertion
134
152
  - [x] macro opcodes (Combine multiple opcodes into a "macro opcode")
135
- - [x] micro opcodes (Break opcodes into sub-opcodes)
136
153
  - [x] specialized opcodes (Create specific opcodes for opcode+operand pairs)
137
154
  - [x] aliased opcodes (Create duplicate opcodes, including variants with shuffled operand order)
138
155
  - [x] encoded bytecode array
@@ -181,30 +198,96 @@ var CONSTANTS = [/* 0 */"console", /* 1 */"log", /* 2 */"Hello world!", /* 3 */u
181
198
  var CONSTANTS = [/* 0 */"DaQApB6kAqQdpB+kEaQ=", /* 1 */"TCFOIUUh", /* 2 */"kKK8orait6Kzov2iqaKwopKijaKGosKi", /* 3 */undefined];
182
199
  ```
183
200
 
184
- #### `dispatcher` (true/false)
201
+ #### `controlFlowFlattening` (true/false)
185
202
 
186
- - Creates a middleman block to process jumps.
203
+ Flattens the control flow of your program into a convoluted state machine.
187
204
 
188
205
  ```js
189
206
  // Input Code
207
+ var message;
190
208
  if (true) {
191
- console.log("Hello world!");
209
+ message = "Hello World";
192
210
  }
193
211
 
194
212
  // Before
195
213
  // fn_0_0:
196
- // [0, 0, 0, 0], LOAD_CONST reg[0] = true 1:4-1:8
197
- // [40, 0, 29], JUMP_IF_FALSE [0, if_else_1] 1:0-3:1
198
- // [2, 0, 1, 0], LOAD_GLOBAL reg[0] = console 2:2-2:9
199
- // [0, 1, 2, 0], LOAD_CONST reg[1] = "log" 2:2-2:29
200
- // [8, 2, 0, 1], GET_PROP reg[2] = reg[0][reg[1]] 2:2-2:29
201
- // [0, 1, 3, 0], LOAD_CONST reg[1] = "Hello world!" 2:14-2:28
202
- // [43, 3, 0, 2, 1, 1], CALL_METHOD reg[3] = reg[2](recv=reg[0], 1 args) 2:2-2:29
214
+ r1 = this
215
+ r2 = undefined // 1:0-1:12
216
+ r3 = true // 2:4-2:8
217
+ if (!r3) goto: if_else_1 // 2:0-4:1
218
+ r3 = "Hello World" // 3:12-3:25
219
+ r2 = r3 // 3:2-3:25
203
220
  // if_else_1:
204
- // [0, 0, 4, 0], LOAD_CONST reg[0] = undefined
205
- // [45, 0], RETURN reg[0]
221
+ r3 = undefined
222
+ return r3
206
223
 
207
- // What this looks like decompiled:
224
+ // After
225
+ // fn_0_0:
226
+ r3 = this
227
+ r4 = 14110
228
+ r5 = r4
229
+ r6 = 0
230
+ r7 = r6
231
+ // while_top_5:
232
+ r8 = 8201
233
+ r9 = r5 !== r8
234
+ if (!r9) goto: while_exit_6
235
+ r10 = 14110
236
+ r7 = r10
237
+ r11 = r5 === r7
238
+ if (!r11) goto: if_else_7
239
+ goto: cff_block_2
240
+ // if_else_7:
241
+ r12 = 6428
242
+ r13 = r7 + r12
243
+ r7 = r13
244
+ r14 = r5 === r7
245
+ if (!r14) goto: if_else_8
246
+ goto: cff_block_3
247
+ // if_else_8:
248
+ r15 = 40055
249
+ r16 = r7 + r15
250
+ r7 = r16
251
+ r17 = r5 === r7
252
+ if (!r17) goto: if_else_9
253
+ goto: if_else_1
254
+ // if_else_9:
255
+ goto: while_top_5
256
+ // while_exit_6:
257
+ // cff_block_2:
258
+ r1 = this
259
+ r2 = undefined // 1:0-1:12
260
+ r19 = true // 2:4-2:8
261
+ if (r19) goto: cff_skip_10
262
+ r18 = 46483
263
+ r5 = r5 + r18
264
+ goto: while_top_5
265
+ // cff_skip_10:
266
+ r18 = 6428
267
+ r5 = r5 + r18
268
+ goto: while_top_5
269
+ // cff_block_3:
270
+ r19 = "Hello World" // 3:12-3:25
271
+ r2 = r19 // 3:2-3:25
272
+ r18 = 40055
273
+ r5 = r5 + r18
274
+ goto: while_top_5
275
+ // if_else_1:
276
+ r19 = undefined
277
+ return r19
278
+ ```
279
+
280
+ #### `dispatcher` (true/false)
281
+
282
+ Creates a middleman block to process jumps.
283
+
284
+ ```js
285
+ // Input Code
286
+ if (true) {
287
+ console.log("Hello world!");
288
+ }
289
+
290
+ // Before
208
291
  // fn_0_0:
209
292
  r0 = true
210
293
  if (!r0) goto if_else_1
@@ -219,34 +302,6 @@ if (!r0) goto if_else_1
219
302
 
220
303
  // After
221
304
  // fn_0_0:
222
- // [47, 2, 57, 2, 5, 0], MAKE_CLOSURE reg[2] PC=fn_2_3 (params=2 regs=5 upvalues=0)
223
- // [0, 3, 0, 0], LOAD_CONST reg[3] = true 1:4-1:8
224
- // [41, 3, 21], JUMP_IF_TRUE [3, if_else_1_skip_5]
225
- // [1, 0, 43020], LOAD_INT reg[0] = if_else_1
226
- // [1, 1, 40151], LOAD_INT reg[1] = 40151
227
- // [39, 49], JUMP dispatcher_4
228
- // if_else_1_skip_5:
229
- // [2, 3, 1, 0], LOAD_GLOBAL reg[3] = console 2:2-2:9
230
- // [0, 4, 2, 0], LOAD_CONST reg[4] = "log" 2:2-2:29
231
- // [8, 5, 3, 4], GET_PROP reg[5] = reg[3][reg[4]] 2:2-2:29
232
- // [0, 4, 3, 0], LOAD_CONST reg[4] = "Hello world!" 2:14-2:28
233
- // [43, 6, 3, 5, 1, 4], CALL_METHOD reg[6] = reg[5](recv=reg[3], 1 args) 2:2-2:29
234
- // if_else_1:
235
- // [0, 3, 4, 0], LOAD_CONST reg[3] = undefined
236
- // [45, 3], RETURN reg[3]
237
- // dispatcher_4:
238
- // [42, 0, 2, 2, 0, 1], CALL reg[0] = reg[2](reg[0], reg[1])
239
- // [58, 0], JUMP_REG PC = reg[0]
240
- // fn_2_3:
241
- // [18, 2, 0, 1], BXOR [2, 0, 1]
242
- // [0, 3, 5, 0], LOAD_CONST reg[3] = 52048
243
- // [11, 4, 2, 3], ADD [4, 2, 3]
244
- // [0, 2, 6, 0], LOAD_CONST reg[2] = 65535
245
- // [16, 3, 4, 2], BAND [3, 4, 2]
246
- // [45, 3], RETURN reg[3]
247
-
248
- // What this looks like decompiled:
249
- // fn_0_0:
250
305
  r2 = MakeClosure(fn_2_3, params=2)
251
306
  r3 = true
252
307
  if (r3) goto if_else_1_skip
@@ -273,6 +328,129 @@ function decode(x, k) {
273
328
  }
274
329
  ```
275
330
 
331
+ #### `stringConcealing` (true/false)
332
+
333
+ Encodes strings to conceal plain-text values.
334
+
335
+ ```js
336
+ // Input Code
337
+ console.log("Hello world!");
338
+
339
+ // Before
340
+ // fn_0_0:
341
+ r1 = this
342
+ r2 = console // 1:0-1:7
343
+ r3 = "log" // 1:0-1:27
344
+ r4 = r2[r3] // 1:0-1:27
345
+ r3 = "Hello world!" // 1:12-1:26
346
+ r5 = r4.call(r2, r3) // 1:0-1:27
347
+ r2 = undefined
348
+ return r2
349
+
350
+ // After
351
+ // fn_0_0:
352
+ r5 = MakeClosure(fn_2_2, params=1, regs=12)
353
+ r6 = "mKNIF30WffjjBsylG/34gYmefN1/xPh7UBAQJ5lhW9Axbf6irGnhIDhJoyz7PSAZp4OL0StDBm98+RAFiFSwvPj5NbNkE+dd//DZB1kuXk5qw3i287bfPMJtzwWl3O13yKjBWjToZqoCw7SnH+9zMbm0FjK76/010vycgCswFeL55IW3NWzIrJgZz/SAfUuohmCo8TgTjg7+3gF/W40QcIRntolhFMb6FeMOjly3nJ5yIFyC24zSCeT/dfQwA3dfLySb+WmAcj/ytb8goSiw2u5s41NkX2m1mjVscIvlKrqYJQXuhnIwxvBDwj7S0rplK/6mamCW5GVdeHtS/oB/jiayKOikal19OIR7bYT4HI6BD3XHs4BKcaMkCafa1xCxCQvA4wLVE8LATUSS1w1ej0DltwM4Uep0/RhY/YCdxt5X1KpQ8ba37D4Ym5+isUpRF14iNX/8yX+mEGccPJDsu1R+ONC6CM7Zk6gmWAczweJlVy4vQZnjvMVIXGkldqBK2IVDDR88xw9VrCDaeLoKuDT4wEVOrKgjIbJB7BvmwArqQtflYayMCyWL/Q9GO+NVqORgx90mGLRUgEg2WxAtY6f8HLSTWILcC0a1o63oVOwgGQRjx3t255bOSNlwDprNdmJJ1qlLpU+orau4uJc="
354
+ r4 = r5(r6)
355
+ r7 = MakeClosure(fn_3_6, params=4, regs=14)
356
+ r1 = this
357
+ r11 = console // 1:0-1:7
358
+ r8 = 2508801877
359
+ r9 = 106
360
+ r10 = 3
361
+ r2 = r7(r4, r8, r9, r10)
362
+ r12 = r11[r2] // 1:0-1:27
363
+ r8 = 3419107516
364
+ r9 = 111
365
+ r10 = 12
366
+ r3 = r7(r4, r8, r9, r10)
367
+ r13 = r12.call(r11, r3) // 1:0-1:27
368
+ r11 = undefined
369
+ return r11
370
+ // fn_2_2(r0):
371
+ r2 = this
372
+ r6 = atob
373
+ r7 = r6(r0)
374
+ r3 = r7
375
+ r6 = ""
376
+ r4 = r6
377
+ r6 = 0
378
+ r5 = r6
379
+ // for_top_3:
380
+ r6 = "length"
381
+ r7 = r3[r6]
382
+ r6 = r5 < r7
383
+ if (!r6) goto: for_exit_4
384
+ r6 = String
385
+ r7 = "fromCharCode"
386
+ r8 = r6[r7]
387
+ r7 = "charCodeAt"
388
+ r9 = r3[r7]
389
+ r7 = r9.call(r3, r5)
390
+ r9 = "charCodeAt"
391
+ r10 = r3[r9]
392
+ r9 = 1
393
+ r11 = r5 + r9
394
+ r9 = r10.call(r3, r11)
395
+ r10 = 8
396
+ r11 = r9 << r10
397
+ r9 = r7 | r11
398
+ r7 = r8.call(r6, r9)
399
+ r6 = r4 + r7
400
+ r4 = r6
401
+ // for_update_5:
402
+ r6 = 2
403
+ r7 = r5 + r6
404
+ r5 = r7
405
+ goto: for_top_3
406
+ // for_exit_4:
407
+ return r4
408
+ r6 = undefined
409
+ return r6
410
+ // fn_3_6(r0, r1, r2, r3):
411
+ r5 = this
412
+ r9 = ""
413
+ r6 = r9
414
+ r9 = 0
415
+ r7 = r9
416
+ // for_top_7:
417
+ r9 = r7 < r3
418
+ if (!r9) goto: for_exit_8
419
+ r9 = 2654435769
420
+ r10 = r1 + r9
421
+ r9 = 0
422
+ r11 = r10 | r9
423
+ r1 = r11
424
+ r9 = 13
425
+ r10 = r1 >>> r9
426
+ r9 = r1 ^ r10
427
+ r10 = 65535
428
+ r11 = r9 & r10
429
+ r8 = r11
430
+ r9 = String
431
+ r10 = "fromCharCode"
432
+ r11 = r9[r10]
433
+ r10 = "charCodeAt"
434
+ r12 = r0[r10]
435
+ r10 = r2 + r7
436
+ r13 = r12.call(r0, r10)
437
+ r10 = r13 ^ r8
438
+ r12 = r11.call(r9, r10)
439
+ r9 = r6 + r12
440
+ r6 = r9
441
+ // for_update_9:
442
+ r9 = r7
443
+ r9 = 1
444
+ r10 = r7 + r9
445
+ r7 = r10
446
+ goto: for_top_7
447
+ // for_exit_8:
448
+ return r6
449
+ r9 = undefined
450
+ return r9
451
+ ```
452
+
453
+
276
454
  #### `macroOpcodes` (true/false)
277
455
 
278
456
  Combines multiple opcodes commonly used from your bytecode.
@@ -340,53 +518,6 @@ case 5074:
340
518
  break;
341
519
  ```
342
520
 
343
- #### `microOpcodes` (true/false)
344
-
345
- Breaks opcodes into mulitple sub-opcodes.
346
-
347
- ```js
348
- // Input Code
349
- console.log("Hello world!");
350
-
351
- // Before
352
- // [2, 1, 0, 0], LOAD_GLOBAL reg[1] = console 1:0-1:7
353
- // [0, 2, 1, 0], LOAD_CONST reg[2] = "log" 1:0-1:27
354
- // [8, 3, 1, 2], GET_PROP reg[3] = reg[1][reg[2]] 1:0-1:27
355
- // [0, 4, 2, 0], LOAD_CONST reg[4] = "Hello world!" 1:12-1:26
356
- // [43, 5, 1, 3, 1, 4], CALL_METHOD reg[5] = reg[3](recv=reg[1], 1 args) 1:0-1:27
357
-
358
- // What the opcode "LOAD_CONST" looks like:
359
- case OP.LOAD_CONST:
360
- var dst = this._operand();
361
- frame.regs[dst] = this._constant();
362
- break;
363
-
364
- // After
365
- // [60, 1], MICRO_LOAD_GLOBAL_0 1 1:0-1:7
366
- // [61, 0, 0], MICRO_LOAD_GLOBAL_1 [0, 0]
367
- // [62], MICRO_LOAD_GLOBAL_2
368
- // [63], MICRO_LOAD_GLOBAL_3
369
- // [58, 2], MICRO_LOAD_CONST_0 2 1:0-1:27
370
- // [59, 1, 0], MICRO_LOAD_CONST_1 [1, 0]
371
- // [64, 3], MICRO_GET_PROP_0 3 1:0-1:27
372
- // [65, 1], MICRO_GET_PROP_1 1
373
- // [66, 2], MICRO_GET_PROP_2 2
374
- // [67], MICRO_GET_PROP_3
375
- // [58, 4], MICRO_LOAD_CONST_0 4 1:12-1:26
376
- // [59, 2, 0], MICRO_LOAD_CONST_1 [2, 0]
377
- // [43, 5, 1, 3, 1, 4], CALL_METHOD reg[5] = reg[3](recv=reg[1], 1 args) 1:0-1:27
378
-
379
- // What the opcodes "MICRO_LOAD_CONST_0" (58) and "MICRO_LOAD_CONST_1" (59) look like:
380
- case 58:
381
- // MICRO_LOAD_CONST_0
382
- this._internals[0] = this._operand();
383
- break;
384
- case 59:
385
- // MICRO_LOAD_CONST_1
386
- frame.regs[this._internals[0]] = this._constant();
387
- break;
388
- ```
389
-
390
521
  #### `specializedOpcodes` (true/false)
391
522
 
392
523
  Creates specialized opcodes for commonly used opcode+operand pairs.
@@ -403,9 +534,9 @@ console.log("Hello world!");
403
534
  // [43, 5, 1, 3, 1, 4], CALL_METHOD reg[5] = method(recv=reg[1], fn=reg[3], 1 args)1:0-1:27
404
535
 
405
536
  // What the opcode "LOAD_GLOBAL" looks like:
406
- case OP.LOAD_CONST:
537
+ case OP.LOAD_GLOBAL:
407
538
  var dst = this._operand();
408
- frame.regs[dst] = this.constants[this._operand()];
539
+ frame.regs[dst] = this.globals[this.constants[this._operand()]];
409
540
  break;
410
541
 
411
542
  // After
@@ -519,26 +650,29 @@ console.log("Hello, world!");
519
650
 
520
651
  Detects the use of debuggers by checking for >1second pauses. May break code with slow sync tasks.
521
652
 
653
+ #### `classObfuscation` (true/false)
654
+
655
+ Obfuscates the VM runtime classes by shuffling the order of declarations and methods.
522
656
 
523
657
  #### `minify` (true/false)
524
658
 
525
659
  Minifies the final code with Google Closure Compiler. Renames the VM class properties.
526
660
 
527
- ### No Try Finally
661
+ #### `verbose` (true/false)
528
662
 
529
- While Try Catch is supported, Try..Finally is not. You can use Try..Finally by defining an outside helper function:
663
+ Prints obfuscator info useful for debugging purposes.
530
664
 
531
- ```js
532
- function TryFinally(cb, _finally) {
533
- try {
534
- return { value: cb() }
535
- } catch (error) {
536
- return { error };
537
- } finally {
538
- _finally()
539
- }
540
- }
541
- ```
665
+ ### Methods
666
+
667
+ #### `JSConfuserVM.obfuscate(sourceCode, options)`
668
+
669
+ Returns a `Promise<ObfuscationResult>` which contains a `code` property with the obfuscated code.
670
+
671
+ #### `JSConfuserVM.disassemble(sourceCode)`
672
+
673
+ Returns a partial JS representation based on the debug bytecode comment, for debugging and unobfuscated outputs.
674
+
675
+ Returns a `Promise<string>` which resolves to the disassembled code.
542
676
 
543
677
  ### ES5 Only
544
678
 
@@ -558,7 +692,7 @@ Please transpile your code down first using [Babel](https://github.com/babel/bab
558
692
 
559
693
  ### Best practices
560
694
 
561
- - **Don't rely on "function.length"**
695
+ - Don't rely on "function.length"
562
696
  - Avoid undeclared variables
563
697
  - Don't rely on "function.name"
564
698
  - Don't use eval() to reference or modify local variables
@@ -596,8 +730,8 @@ main().catch(console.error);
596
730
 
597
731
  ### WIP
598
732
 
599
- - 178 tests, 91.18% coverage
600
- - [Test262 (es5-tests)](https://github.com/tc39/test262/tree/es5-tests) percentage: 66.67%
733
+ - 202 tests, 91.18% coverage
734
+ - [Test262 (es5-tests)](https://github.com/tc39/test262/tree/es5-tests) percentage: 85.58%
601
735
 
602
736
  ### Made with AI
603
737