diff --git a/assets/js/main.js b/assets/js/main.js index 87b0ec2..d09b5b1 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -29,32 +29,27 @@ document.addEventListener('DOMContentLoaded', () => { protectBtn.style.opacity = '0.5'; terminal.innerHTML = ''; - log(`INITIALIZING LUARTEX EXTREME KERNEL v3.5-DELTA`, 'info'); + log(`INITIALIZING LUARTEX V3.2 NON-DETERMINISTIC ENGINE`, 'info'); await sleep(300); - log(`TARGET: ROBLOX / LUAU ENVIRONMENT`, 'info'); + log(`TARGET: ROBLOX / LUAU (HYPERION COMPATIBLE)`, 'info'); await sleep(400); - log(`MAPPING: Randomized Opcode IDs (100-255)...`, 'info'); + log(`POLYMorphism: Seed Evolution Initialized...`, 'info'); await sleep(400); - log(`ENCRYPTION: 4-Key XOR Rotation on Constants...`, 'info'); + log(`JITTER: Synchronizing Timing & GC Entropy...`, 'info'); await sleep(400); - log(`VIRTUALIZATION: Register-based Dispatcher...`, 'info'); + log(`VM: Loading Self-Modifying Bytecode Layer...`, 'info'); await sleep(300); - log(`VIRTUALIZATION: Dot-Syntax Global Resolver...`, 'info'); + log(`VM: Enabling Silent Failure (Trap) Mode...`, 'info'); await sleep(300); - log(`SECURITY: Interleaving Anti-Hook Integrity Guards...`, 'info'); + log(`CONSTANTS: Injecting Arithmetic Synthesis Chains...`, 'info'); await sleep(400); - log(`SECURITY: Real-time tick() Timing Verification...`, 'info'); + log(`DECEPTION: Spawning Fake Crypto & Protocol Paths...`, 'info'); await sleep(300); - log(`SECURITY: debug.info Native Source Checks...`, 'info'); + log(`INTEGRITY: Binding VM State to Environment...`, 'info'); await sleep(200); - log(`SECURITY: Anti-Tamper State Synchronization...`, 'info'); - await sleep(200); - - log(`STRENGTHENING: Injecting Junk Opcodes...`, 'info'); - await sleep(100); try { const response = await fetch('process.php', { @@ -68,9 +63,9 @@ document.addEventListener('DOMContentLoaded', () => { if (data.success) { await sleep(500); outputArea.value = data.protected_code; - log(`SUCCESS: VM Locked. Final Size: ${data.stats.protected_size}b`, 'success'); - log(`VM Status: ULTRA-SECURE | Environment: DELTA COMPATIBLE`, 'success'); - log(`Watermark: "ts was obfuscated by Luartex V3.2" injected.`, 'info'); + log(`SUCCESS: Luartex V3.2 VM Finalized.`, 'success'); + log(`Protection Level: OMEGA | Entropy: HIGH`, 'success'); + log(`Watermark: "Luartex V3.2 https://discord.gg/GpucUKeCtF" injected.`, 'info'); } else { log(`CRITICAL ERROR: ${data.error}`, 'warn'); } @@ -86,7 +81,7 @@ document.addEventListener('DOMContentLoaded', () => { if (!outputArea.value) return; navigator.clipboard.writeText(outputArea.value); const originalText = copyBtn.textContent; - copyBtn.textContent = 'LOCKED & COPIED'; + copyBtn.textContent = 'COPIED'; setTimeout(() => copyBtn.textContent = originalText, 2000); }); }); \ No newline at end of file diff --git a/index.php b/index.php index 57db4e9..6e6cbe4 100644 --- a/index.php +++ b/index.php @@ -1,6 +1,6 @@ @@ -23,13 +23,13 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Enterprise Luau Obfusc
-

Protect your Luau scripts.

-

Luartex utilizes a proprietary custom VM architecture to transform your scripts into secure, encrypted bytecode that is resistant to reverse-engineering. Optimized for Roblox Executors.

+

The Ultimate Luau Obfuscator.

+

Luartex V3.2 introduces Non-Deterministic VM states, Self-Modifying Bytecode, and Silent Failure mechanisms to break modern AI deobfuscators and execution tracers.

@@ -54,11 +54,13 @@ print('Hello Luartex!')">
- +
-
[SYSTEM] Hyperion V10.0 Engine Initialized. Dynamic Instruction Polymorphism (DIP) & Seed Evolution Active.
+
[SYSTEM] Luartex V3.2 Engine Initialized.
+
[SYSTEM] Non-Determinism & Self-Modifying Bytecode Active.
+
[SECURITY] Silent Failure (Trap) Mode Enabled.
diff --git a/process.php b/process.php index 56456f5..fbc0df4 100644 --- a/process.php +++ b/process.php @@ -15,14 +15,16 @@ if (!$input || empty($input['code'])) { $code = $input['code']; /** - * Hyperion V10.0 - Dynamic Instruction Polymorphism + * Luartex V3.2 - Advanced Non-Deterministic VM * Features: - * - Dynamic Opcode Mapping (Seed-based) - * - Operand Permutation (A, B, C swap roles) - * - Instruction Ghosting & Seed Evolution - * - Semantic Flattening & Environmental Entanglement (inherited) + * - Runtime-generated keys (Jitter, GC side effects) + * - Self-Modifying Bytecode (Dynamic instruction mutation) + * - Unstable Opcodes (Context-sensitive behavior) + * - Silent Failure (Believable but incorrect results on tamper) + * - Constant Synthesis & Deferred Decoding + * - Deceptive Logic Injection (Fake crypto/protocols) */ -class LuartexHyperionV10_0 { +class LuartexV3_2 { private $rawCode; private $constants = []; private $instructions = []; @@ -33,9 +35,9 @@ class LuartexHyperionV10_0 { public function __construct($code) { $this->rawCode = $code; - $this->polyKey = rand(50, 200); - $this->seed = rand(1000, 9999); - for ($i = 0; $i < 32; $i++) { + $this->polyKey = rand(50, 250); + $this->seed = rand(5000, 20000); + for ($i = 0; $i < 64; $i++) { $this->keys[] = rand(0, 255); } $this->setupOpcodes(); @@ -49,7 +51,7 @@ class LuartexHyperionV10_0 { 'TAMPER_CHECK', 'ENTROPY_SYNC', 'FETCH_ENV', 'RESOLVE_SYMBOL', 'MUTATE_BYTECODE', 'COMPUTE_PC', - 'MORPH_STATE', 'GHOST_NOP' + 'MORPH_STATE', 'GHOST_NOP', 'DECEPTIVE_TRAP' ]; shuffle($ops); foreach ($ops as $op) { @@ -57,7 +59,7 @@ class LuartexHyperionV10_0 { } } - private function genVar($len = 24) { + private function genVar($len = 20) { $sets = ['l1Ii', 'O0Q', 'uvvw', 'nmM', 'S5s', 'Z2z', 'B8b', 'g9q']; $res = '_'; for($i=0; $i<$len; $i++) { @@ -71,12 +73,17 @@ class LuartexHyperionV10_0 { $res = []; for ($i = 0; $i < strlen($s); $i++) { $char = ord($s[$i]); - $a = rand(1, 100); - $b = rand(1, 100); - $op = rand(0, 2); + $a = rand(1, 200); + $b = rand(1, 200); + $op = rand(0, 3); if ($op == 0) { $x = $char - ($a + $b); $res[] = "($x + $a + $b)"; } elseif ($op == 1) { $x = $char + ($a - $b); $res[] = "($x - $a + $b)"; } - else { $x = $char ^ $a ^ $b; $res[] = "bit32.bxor($x, $a, $b)"; } + elseif ($op == 2) { $x = $char ^ $a ^ $b; $res[] = "bit32.bxor($x, $a, $b)"; } + else { + $c = rand(1, 100); + $x = ($char + $c) ^ $a; + $res[] = "bit32.bxor($x, $a) - $c"; + } } return "function() local r = ''; for _, v in ipairs({" . implode(",", $res) . "}) do r = r .. string.char(v) end return r end"; } @@ -91,30 +98,38 @@ class LuartexHyperionV10_0 { } private function compile() { - $this->addConst("Hyperion V10.0 - DIP Engine Active"); + $this->addConst("Luartex V3.2 - Security Active"); + + // Inject deceptive logic at the beginning + $this->injectDeceptiveLogic(); + $cleanCode = preg_replace('/--[[]*.*?[]]*--/s', '', $this->rawCode); $cleanCode = preg_replace('/--.*$/m', '', $cleanCode); - $tokens = preg_split('/[;\n]+/', $cleanCode); + $tokens = preg_split('/[; +]+/', $cleanCode); foreach ($tokens as $token) { $token = trim($token); if (empty($token)) continue; - // Randomly inject Ghost NOPs to evolve the state - if (rand(0, 5) == 0) { + // Randomly inject Ghost NOPs or State Morphs + if (rand(0, 4) == 0) { $this->instructions[] = [$this->opMap['GHOST_NOP'], rand(0,255), rand(0,255), rand(0,255)]; } + if (rand(0, 10) == 0) { + $this->instructions[] = [$this->opMap['MUTATE_BYTECODE'], rand(0, 255), rand(0, 255), rand(0, 255)]; + } $this->instructions[] = [$this->opMap['ENTROPY_SYNC'], 0, 0, 0]; - if (preg_match('/^(?:local\s+)?([a-zA-Z_]\w*)\s*=\s*\{\}$/', $token, $m)) { + if (preg_match('/^(?:local\s+)?([a-zA-Z_]\w*)\s*=\s*{\}\s*$/', $token, $m)) { $this->instructions[] = [$this->opMap['NEWTABLE'], 0, 0, 0]; $this->emitSemanticSetGlobal(0, $m[1]); } - elseif (preg_match('/^([a-zA-Z_]\w*)\s*[.[\]\s*["\']?(.*?)["\\]?\s*[\\]]?\s*=\s*(.*)$/', $token, $m)) { + elseif (preg_match('/^([a-zA-Z_]\w*)\s*[.[\\\]\s*["\\\]?(.*?)["\\]?\s*[\\]]?\s*=\s*(.*)$/', $token, $m)) { $this->emitTableSet($m[1], $m[2], $m[3]); } - elseif (preg_match('/^([a-zA-Z_]\w*(?:[.:]\w*)*)\s*\((.*?)\)$/', $token, $m)) { + elseif (preg_match('/^([a-zA-Z_]\w*(?:[.:]\w*)*)\s*\((.*?)\)\s*$/', $token, $m)) { $this->emitCall($m[1], $m[2]); } elseif (preg_match('/^(?:local\s+)?([a-zA-Z_]\w*)\s*=\s*(.*)$/', $token, $m)) { @@ -124,6 +139,13 @@ class LuartexHyperionV10_0 { $this->instructions[] = [$this->opMap['RETURN'], 0, 0, 0]; } + private function injectDeceptiveLogic() { + // Fake Crypto Ops + for ($i = 0; $i < 3; $i++) { + $this->instructions[] = [$this->opMap['DECEPTIVE_TRAP'], rand(0,255), rand(0,255), rand(0,255)]; + } + } + private function emitSemanticGetGlobal($reg, $name) { $this->instructions[] = [$this->opMap['FETCH_ENV'], $reg, 0, 0]; foreach (explode('.', $name) as $part) { @@ -145,7 +167,7 @@ class LuartexHyperionV10_0 { $kIdx = $this->addConst($this->synthesizeString($key)); $this->instructions[] = [$this->opMap['LOADK'], 1, $kIdx, 1]; $val = trim($val); $vReg = 2; - if (preg_match('/^["\\](.*)["\\]$/', $val, $vm)) { + if (preg_match('/^["\\\](.*?)["\\]$/', $val, $vm)) { $vIdx = $this->addConst($this->synthesizeString($vm[1])); $this->instructions[] = [$this->opMap['LOADK'], $vReg, $vIdx, 1]; } elseif (is_numeric($val)) { @@ -163,7 +185,7 @@ class LuartexHyperionV10_0 { if (!empty(trim($argStr))) { foreach (explode(',', $argStr) as $idx => $arg) { $arg = trim($arg); $rIdx = $idx + 1; - if (preg_match('/^["\\](.*)["\\]$/', $arg, $m)) { + if (preg_match('/^["\\\](.*?)["\\]$/', $arg, $m)) { $vIdx = $this->addConst($this->synthesizeString($m[1])); $this->instructions[] = [$this->opMap['LOADK'], $rIdx, $vIdx, 1]; } elseif (is_numeric($arg)) { @@ -180,7 +202,7 @@ class LuartexHyperionV10_0 { private function emitAssignment($var, $val) { $val = trim($val); - if (preg_match('/^["\\](.*)["\\]$/', $val, $m)) { + if (preg_match('/^["\\\](.*?)["\\]$/', $val, $m)) { $vIdx = $this->addConst($this->synthesizeString($m[1])); $this->instructions[] = [$this->opMap['LOADK'], 0, $vIdx, 1]; } elseif (is_numeric($val)) { @@ -197,7 +219,7 @@ class LuartexHyperionV10_0 { foreach ($this->instructions as $pc_idx => $inst) { $pc = $pc_idx + 1; $op = (int)$inst[0]; - $mask = ($this->polyKey + $pc) % 256; + $mask = ($this->polyKey + $pc * 7) % 256; $bin .= chr($op ^ $mask); $bin .= chr((int)$inst[1] & 0xFF); $bin .= pack("n", (int)$inst[2]); @@ -212,7 +234,7 @@ class LuartexHyperionV10_0 { } $keyLen = count($this->keys); $enc = ""; for ($i = 0; $i < strlen($bin); $i++) { - $enc .= chr(ord($bin[$i]) ^ $this->keys[$i % $keyLen] ^ (($i * 31) % 256)); + $enc .= chr(ord($bin[$i]) ^ $this->keys[$i % $keyLen] ^ (($i * 31) % 256) ^ (($i + 13) % 256)); } return bin2hex($enc); } @@ -220,20 +242,20 @@ class LuartexHyperionV10_0 { public function build() { $this->compile(); $vars = []; - foreach(['k','b','e','f','d','c','v','stack','asm','poly','handlers','tamper','watchdog','fetch','tk','entropy','pc','rolling','inst','op','a','b_p','c_p','res','env','hash','sym','prev_op','state_hash','ctx','seed','morph','perm'] as $v) { + foreach(['k','b','e','f','d','c','v','stack','asm','poly','handlers','tamper','watchdog','fetch','tk','entropy','pc','rolling','inst','op','a','b_p','c_p','res','env','hash','sym','prev_op','state_hash','ctx','seed','morph','perm','corrupted','dispatcher','mutate','deceptive'] as $v) { $vars[$v] = $this->genVar(); } $k_str = implode(",", $this->keys); - $lua = "-- [[ Hyperion Engine V10.0 - DIP ]] --\n"; + $lua = "-- [[ Luartex V3.2 | https://discord.gg/GpucUKeCtF ]] --\n"; $lua .= "local " . $vars['k'] . " = { " . $k_str . " }; "; $lua .= "local " . $vars['b'] . " = \"" . $this->serializeAll() . "\"; "; $lua .= "local " . $vars['e'] . " = (getgenv and getgenv()) or (getfenv and getfenv(0)) or _G; "; $lua .= "local function _H(h) local b = {}; for i = 1, #h, 2 do b[#b+1] = tonumber(h:sub(i, i+1), 16) end return b end; "; - $lua .= "local function _D(b) local o = {}; for i = 1, #b do local k = ((i - 1) % 32) + 1; o[i] = bit32.bxor(b[i], " . $vars['k'] . "[k], ((i - 1) * 31) % 256) end return o end; "; + $lua .= "local function _D(b) local o = {}; for i = 1, #b do local k = ((i - 1) % 64) + 1; o[i] = bit32.bxor(b[i], " . $vars['k'] . "[k], ((i - 1) * 31) % 256, ((i - 1) + 13) % 256) end return o end; "; $lua .= "local " . $vars['d'] . " = _D(_H(" . $vars['b'] . ")); "; - $lua .= "local function " . $vars['entropy'] . "() return bit32.bxor(math.floor(os.clock() * 1000) % 65536, collectgarbage('count') % 256, 0x1337) end; "; + $lua .= "local function " . $vars['entropy'] . "() return bit32.bxor(math.floor(os.clock() * 1000) % 65536, collectgarbage('count') % 256, 0x5A) end; "; $lua .= "local function _R32(b, p) return b[p]*16777216 + b[p+1]*65536 + b[p+2]*256 + b[p+3] end; "; $lua .= "local function _R16(b, p) return b[p]*256 + b[p+1] end; "; @@ -244,17 +266,24 @@ class LuartexHyperionV10_0 { $lua .= "local " . $vars['fetch'] . " = function(p) local o = 5 + (p - 1) * 5; return " . $vars['d'] . "[o], " . $vars['d'] . "[o+1], _R16(" . $vars['d'] . ", o+2), " . $vars['d'] . "[o+4] end; "; $lua .= "local " . $vars['v'] . " = function() "; - $lua .= "local " . $vars['stack'] . " = {}; local " . $vars['pc'] . " = 1; local " . $vars['seed'] . " = " . $this->seed . "; "; - $lua .= "local " . $vars['rolling'] . " = " . $vars['entropy'] . "(); local " . $vars['handlers'] . " = {}; "; + $lua .= "local " . $vars['stack'] . " = {}; local " . $vars['pc'] . " = 1; local " . $vars['seed'] . " = " . $this->seed . " + " . $vars['entropy'] . "(); "; + $lua .= "local " . $vars['rolling'] . " = " . $vars['entropy'] . "(); local " . $vars['corrupted'] . " = false; "; + $lua .= "local " . $vars['handlers'] . " = {}; "; - // Morphing Function - $lua .= "local function " . $vars['morph'] . "(op, seed, pc) return bit32.bxor(op, bit32.band(seed, 0xFF), bit32.band(pc, 0xFF)) % 256 end; "; - - // Dynamic Handler Population + // Unstable Opcode Mapping - Context Sensitive + $lua .= "local function " . $vars['dispatcher'] . "(op, seed, pc) return bit32.bxor(op, bit32.band(seed, 0xFF), bit32.band(pc, 0xFF)) % 256 end; "; + foreach ($this->opMap as $name => $val) { $lua .= $vars['handlers'] . "[" . $val . "] = function(a, b, c) "; + + // Silent Failure logic + $lua .= "if " . $vars['corrupted'] . " then if math.random() > 0.5 then a = (a + 1) % 256 end if math.random() > 0.8 then return end end; "; + switch($name) { - case 'ENTROPY_SYNC': $lua .= $vars['rolling'] . " = bit32.bxor(" . $vars['rolling'] . ", " . $vars['entropy'] . "()); "; break; + case 'ENTROPY_SYNC': + $lua .= $vars['rolling'] . " = bit32.bxor(" . $vars['rolling'] . ", " . $vars['entropy'] . "()); "; + $lua .= "if " . $vars['rolling'] . " == 0 then " . $vars['corrupted'] . " = true end; "; + break; case 'FETCH_ENV': $lua .= $vars['stack'] . "[a] = " . $vars['e'] . "; "; break; case 'RESOLVE_SYMBOL': $lua .= $vars['stack'] . "[a] = " . $vars['stack'] . "[b][" . $vars['stack'] . "[c]]; "; break; case 'LOADK': $lua .= "local v = " . $vars['c'] . "[b + 1]; if c == 1 then local f = loadstring('return ' .. v); if f then v = f()() end end; " . $vars['stack'] . "[a] = v; "; break; @@ -262,42 +291,52 @@ class LuartexHyperionV10_0 { case 'RETURN': $lua .= $vars['pc'] . " = -1; "; break; case 'NEWTABLE': $lua .= $vars['stack'] . "[a] = {}; "; break; case 'SETTABLE': $lua .= $vars['stack'] . "[a][" . $vars['stack'] . "[b]] = " . $vars['stack'] . "[c]; "; break; - case 'ADD': $lua .= $vars['stack'] . "[a] = " . $vars['stack'] . "[b] + " . $vars['stack'] . "[c]; "; break; + case 'ADD': $lua .= "local v1, v2 = " . $vars['stack'] . "[b], " . $vars['stack'] . "[c]; if " . $vars['corrupted'] . " then " . $vars['stack'] . "[a] = (v1 or 0) + (v2 or 0) + math.random() else " . $vars['stack'] . "[a] = (v1 or 0) + (v2 or 0) end; "; break; case 'MORPH_STATE': $lua .= $vars['seed'] . " = bit32.bxor(" . $vars['seed'] . ", a, b, c); "; break; - case 'GHOST_NOP': $lua .= $vars['seed'] . " = bit32.bxor(" . $vars['seed'] . ", " . $vars['rolling'] . "); "; break; + case 'GHOST_NOP': $lua .= $vars['seed'] . " = bit32.bxor(" . $vars['seed'] . ", " . $vars['rolling'] . ", " . $vars['pc'] . "); "; break; + case 'MUTATE_BYTECODE': + $lua .= "local target = 5 + (" . $vars['pc'] . " + a % 10) * 5; if target < # " . $vars['d'] . " then " . $vars['d'] . "[target] = bit32.bxor(" . $vars['d'] . "[target], b) end; "; + break; + case 'DECEPTIVE_TRAP': + $lua .= "local fake_crypto = function(d) local r = ''; for i=1,#d do r=r..string.char(bit32.bxor(d:byte(i), 0xAA)) end return r end; "; + $lua .= "local res = fake_crypto('ENCRYPTED_PAYLOAD_STUB'); "; + break; + case 'TAMPER_CHECK': + $lua .= "if debug.info(print, 's') ~= '=[C]' then " . $vars['corrupted'] . " = true end; "; + break; default: break; } - // Evolution of seed after every instruction $lua .= $vars['seed'] . " = bit32.bxor(" . $vars['seed'] . ", " . $val . ", a or 0) + 1; "; $lua .= "end; "; } $lua .= "while " . $vars['pc'] . " > 0 do "; $lua .= "local raw_op, _a, _b, _c = " . $vars['fetch'] . "(" . $vars['pc'] . "); if not raw_op then break end; "; - $lua .= "local op = bit32.bxor(raw_op, (" . $this->polyKey . " + " . $vars['pc'] . ") % 256); "; + $lua .= "local op = bit32.bxor(raw_op, (" . $this->polyKey . " + " . $vars['pc'] . " * 7) % 256); "; - // Operand Permutation based on seed - $lua .= "local a, b, c; local " . $vars['perm'] . " = " . $vars['seed'] . " % 3; "; + // Operand Permutation evolves with seed and rolling entropy + $lua .= "local a, b, c; local " . $vars['perm'] . " = bit32.bxor(" . $vars['seed'] . ", " . $vars['rolling'] . ") % 3; "; $lua .= "if " . $vars['perm'] . " == 0 then a,b,c = _a,_b,_c elseif " . $vars['perm'] . " == 1 then a,b,c = _b,_c,_a else a,b,c = _c,_a,_b end; "; $lua .= "local h = " . $vars['handlers'] . "[op]; if h then h(a, b, c) end; "; $lua .= "if " . $vars['pc'] . " > 0 then " . $vars['pc'] . " = " . $vars['pc'] . " + 1 end; "; - $lua .= "if " . $vars['pc'] . " % 100 == 0 then if task and task.wait then task.wait() elseif wait then wait() end end; "; + $lua .= "if " . $vars['pc'] . " % 50 == 0 then if task and task.wait then task.wait() elseif wait then wait() end end; "; $lua .= "end; "; + $lua .= "end; "; $lua .= "pcall(" . $vars['v'] . "); "; return [ 'success' => true, 'protected_code' => $lua, - 'stats' => ['version' => '10.0-DIP', 'poly_key' => $this->polyKey, 'seed' => $this->seed] + 'stats' => ['version' => 'V3.2 (Luartex)', 'poly_key' => $this->polyKey, 'seed' => $this->seed] ]; } } try { - $vm = new LuartexHyperionV10_0($code); + $vm = new LuartexV3_2($code); echo json_encode($vm->build()); } catch (Exception $e) { echo json_encode(['success' => false, 'error' => $e->getMessage()]); -} \ No newline at end of file +} diff --git a/protected_v3_2.lua b/protected_v3_2.lua new file mode 100644 index 0000000..3eb6a5f --- /dev/null +++ b/protected_v3_2.lua @@ -0,0 +1,2 @@ +-- [[ Luartex V3.2 | https://discord.gg/GpucUKeCtF ]] -- +local _8q0829QgbnI2imvbbgnQc901 = { 230,11,44,204,212,244,63,139,130,183,196,66,172,35,187,136,39,74,108,87,125,120,83,218,246,88,155,10,154,20,231,12,241,234,224,201,75,248,126,186,49,200,136,40,146,92,173,45,90,149,171,74,37,148,1,55,171,152,82,130,91,74,135,91 }; local _nm0zvMq5Olz0M5Z199m111e9 = "eb1a1dbe333996864b35b00f346a6ac1ca640bd239d1d3feb1799a67d7766ee13d3b773f26b1d7ce2009ab242dee045cb7a665271c256cda2639137a56634db6a7619d81b97eea466b37c1f4c1d692bccadbdd3ad0515a373b46e067d23ca7e13c3babbfddb157b78ef529a3fe627f204b441227a83dc8c5a6b913ef98194eb1ea801d81b987bc476fb6e56a3baa1a444d5a5d3bcac2203732786f66d7bc94e0c63bdbc5cdb0d7362605a925fe1578a0b7449ada28bdc8da52c213ef5648b2b6609b617ab90116d76f36650f492a9245ca1c273a3c507b373bf9e092d63de3e0903951442652adb7d2082ca7ff177eb14d441526d33fc8d85c0a13efd7e182b6eb1a1d5ab97d9646dd4ce51fc0fc1245caa1ab3b30d1da9ec1798b6694bc6ee0c66c2bc42fb06636dc085360051516a110459a26d2cdc8da27399eef56634eb66b9a8e80b9fd16582343047db54fea659ce8f308107c7a645e9a6f15be4997c17d58252d50d456b7dc092b94cf148420b7307c52c65ebcb3c9d73bc6f68f21d58a763df39940b661488dc569aed8321ae67b2b1a59bffa5e4b18f315a4951583554fe2f608d3af58ae219813c63924918571b307059df1e85b10338b39433c9656baefa197d336351b440c61a604f12daba9f54c19713f595fd96802a3489c8f1c49712148d556b7dc092b97cf148420b7377c52c65ebcb3c9d73bc6f68f21d58a763df39940b661488dc569aed8321ae67b2b1a59bffa5e4b18f315a4951583554fe2f608d3af58ae21981dd3353593876dba0a088ffba70f19778076116e8b4be8bdaf97dd65321d5f0b68ef49fa24b8f3ab13103434531b8b7f13a24f80c14e1b342a42b057b7dcc44fd09176f049d82a320e8851a7b9c7d5339df6de6e91cc213de7d60fb6194396932fa8c4322cba3a344843f9a11f094caf47fa9d5fd60b1bfae41283fe1bbe60dd16cd3b66d8d836b215049dffed0a1922de674a62d402eeaeb3979f6e291d1e5723e113a66ceaf6fd0e097d385e4fca2849b5458193140964710a91668eed200988df26b60cd52d6e149a13aaa2c9cb3bdee6da6296da2d2cad994caf7746cbcc2fa5c53237ea667d4810fff417480de80eb9da4082545aa3ec5098f752b26d89579a6171d2d964e8074dd3acdb2639139e301620d51ff3f2ef91d4362a00550463e158b278eafcfa01103735451ba63647a11d878f1c5221254fc3249fa76b40d1cc27aa42cf2b680f9f0fe4fa94813fcfe2d567cbc23a79ee990fb67b4fc4c521ef8a6131b832335d1eb2b2564951ec4ef7d800851c49b4b053c3b917ae29cc4b9b1404a0b7eafc5246debcb349573bc6760f21d50af6bdf399c03661480d4569ae58b21ae6fbab1a593f7a5e4b987315a41595c91109627d069a7786e43c098edf24b2169e6832149a1de5fa958d33c4f6d27f80c23635ac8c4bb66b4f87d62fea8a2372fe7271121de2ee171059a250f7964ed40b12fdec1784e017f1299e11df3e2493846de70e08d9a7fa54192ecf244360984be9e9f3d09371680c5e047de95cbb65afb5b91a42342e4249973a15f75880853d3b514657d722d9bf7d40ca913dad00db2b7946c41dbafa9b9934c8edc328d9993a42ad990bb62f01968c7fa0c36036e220751702e4fa1c1b4aab47fc9d5dd21517b3ad5282e519be71c657d72734979b64ad1f019de5fa120c3fc77b527a834bb1bdb080c4366d4f035526ed48fb31f9e9f358483e281f09c9284bf70cd9d2151b7c64149d7f8fed290485ce27b4009c642d168111e0eb928933c2f6d27e80cb313db98854ba2406c2d63defc86a2ab8736c0309fdfa020c55ba56e48447cd5e52a5f7149fb54fb37b8112cb3924918e70b307059dfaed0a113eda674365965eaebdaa99cf2f6f43540c7bf218bc27b2b4af120162681b1bcf2d4ef710ced90417332d52826599be7146d7d724b7199b64220e8810e8e89f953bc2e4d57696c03a2cb18e5dbd665e8fd626edc87b31f969735848bea81f0a4aa84bf78f5ac81c16f1f7109dff1aed388908df243795976fba161f85e1f60e0b25cf7b43798e4bb1bdb08dc43f6a0d5f113cf304f03da5a9f50f087d7a060ecb3347fa1ddbd310593830158379d5a4665b8dc826a8008672280b880cfce98f953bc2e4db6e9dcb2f3daa9948a36f439ec83df499326eea6a640310fafa060c4cb34bb5d41ad20e15b3bc49c3ff06ed3f8505cc232d809a64ae1f04dfa1ae150b3d8d2e0c3c9e53a8b1a18cca3f6642165723e907a37dfbfbf61a09677a1c1bcb2a57fe11c6cc0d0a65640d916686ef290285ca2cad0c9f6928159e1de3fa9e8033c4f6d2788fc23635ac884fa2664496d43af88a3965fe72715859a5e905151be208a5955dcd1c0ae5e80685e21ea1208941903576808a64e8070693e8a9524b7a81314d2dde0ae8b5f790dd73280b16176ab55fe02beaa9fd5f5e355b373bf94101a2538d9555543f6c0f913bd8bf6845858d35b90090632107ce52bafaf9953399f68a2096826a7ce8cb0ebe3d129fc56bae8a6065f77b2f1a1efffa444f0bf309b0930d895d49f9b20f91b259b829db408b6076ce9736ba4246d9c9da26382989230d2dc202f5f3a990dd7a290c57092fb30aaf65edfce61a563e281764d53a11f75480c1554b302d54c27fccf4311885d235bd11976f3a139a14e4b8cfcd20ddf88136d999322fb38851b6715a9fc522e1992669e26e6e1a1bf1ee061b52ba56e09442c90d0ee0e40b91e607e5298205c8262d8c9f69ab161a9de3fa150b33c47652778042b6b5b389c9366b4f075637e101b271f2f2f15859256905159b6208a515dfd00c177173129d7780eb20058dd227b319976f3a169108e8f186882adbffcf2cdf9f292fafdb05f9344787d736ed8a2577e67b6c0d04f8f61f0241ba4af78c5ad61c10f1fc1f98fb1fed3a9b05d2353d98976fba1f1094e4f20b0023cf7d437c8f4bb1bdb089cf3f3b46160160e158b278eaa9fd141e71294349907400f95e86804e13276d06d439d3fc7b4cd18a67ea00c5647f49cc3cc8daa7bc759ab8803adf847435a89911f9250edac57de1973262ed607d5c5fa3fa681759ec47bed34e884c5ab8b65599ac55b57d9a17d1777ccfc56cac10049df0ec0a1922dd664a62d402eeaeb3979f6e291d1e513ced0aab73e6fbe80a197d385e4fca2849b5458193140963770a91608ef029189cc93ca842de302915865fb0b5d49122dfe4cf6e8fc23a30a18849ba2406c2d63defc86a2ab8736c0b04fdfa060f48b647e68859c81059b8b01583f955a466db0dce2c378c977db307059df1e80a5b7a9b655160d413f5efa981cf3a665e0f5d26e107b271fda6f41a543e7a451bc43a15f713c0c14f4f232d48d679d4b4685b8d893ca445d9203a55cd49bda8c89961cfb38d2ab7eb1a1d64df08f8251bdf8a61e9833229a5383c5610a3fa0a1b5ebd5cf7db01931c64fde45091be59fc60d94496677788cc6cb7161d84e8f1060822dc76486e875eafb4ad91d0247559164e2ff013aa65e1fbec0f0978761f16c8225ef716ced00503716f0686629ef06b40d1cc27aa42cf2b680f9904fdf6868823d6ffc36396dc2d31a98849a2664296d337e1813277f872715859a5e905151be208a5955fd30a17f1f2169df703ea20850dce2c35809a64ab151d9de3fa150c3a927f432ad94be8bdbc998f36684116167bb343fc22e4b8b55b42792c1e1b9c7403f74f8b9549493f64549132d9b80829a5ffe7e255d9276e4ec753e0f386d57c8cb78f6ec4cb273da69e46b62000c4c550ed8a6465a3357d5340b0b3454851e105bec95dd31259a9ab5499e603e9258914c92d2d809a64ab1f0495f9eb10193ecf6f556e9d4ba3a8a895d52e774f1b4536f30ab965fbeaef131c79770603d93747e205ceca1c0a66710f9d7f9aee3b1c85d435b5198e6431079909f8f38a913ed6f6c86e8ed23a36a18b4cbf6a0ddf913cf384703da529750b08e7f6170f48b347fa9d5dd01013fcf51386f71cfc3c9a05d4353594846de70e08d9a7fa54192ecf244360984be9e9f3d09371680c5e047de95cbb65afb5b91a42342e4249973a15f75880853d3b51451ad722d9bf7d40ca913dad00db2b7946c41dbafa9b9934c8edc328d9993a42ad990bb62f01968c7fa0c36036e220751702e5ed171059ab5fe79d45c10d0be7ed0ad3be43ef3b8747877a76888576b607198ff8f6060a27c67a0127c258a8b3e3c192646e5d075323e11da26ceaf6fd0e017d385e4fca2849b54581931409646806806386f5290485ca24a842de302915865fb0b5d49121dee5cf6e81d8333dac9949a46a0ddf913cf384703da529750e09fdfa060a4cb647e28947cd5e52a5f7149fb54fb37b8114cb2128808f77b307059df1ee0a5b7a9b655160d413f5efa98aca3a665b01492ff01ba66ce6f3f0030871711709d93147e605dcc810137c761381779cfc381e9cdf3ea4118576335a811dacb586cb33d2f6916e98c53a6ef5cb14f82141d58d6eb382646cea3e335e10a3bf434e0bf447a59d0b8f583ad1c4263ab142b26add4c907b2c899728f54449d1e8a8060433c871586ed004e8bdde95dd606606584566b14bfb37b9f3a65859256905159b6208a515d7d6101b60760a916e82f5254bcc8b26b60ed53c7555800ffaec8a9922d8e7ca6e9bcb2929fc905df2294fc4c532e1d8326be47b2e4e42b8b450151af206a59518c81c5ebfa006c3b243a97bc7058d3561ced3459a272879aeaf485a6786390d669f4bf6f2e2d89136344f0b4528e611b223a5a9fd651c712c1752973a0ea75c87934f132a264fc56485f26b51ca8d3db7139b642313841df9ef8f953bc2eeda6e9dcb292ca1925da7715d9fc96da8de2177e439255542f9eb000f55ba56e3944ecc1c0ee4e844d8a304ee27cb5d90672c988568ba131a91e8e814103fc767537e9646baacb488dd3d665e005226bc03b221a5fbaf1a0d71281715d73a14a34f878f5b15322c47c37fc1f5294ccb9b35f645c3316849884fe8bfc8dd12efd6e16ad09e747ef5d012f86e46968960a2cb7e65b87b601a17f6e1175d16e84788914e971c52bfe44fc1b65eae7a815ed73836948564b1071984f0fa0d192bdc7f4f2cdf1fa9afafdb85793447025c23e11ba573e3fbf01a04677655528d2955f95f968e4e136077129d7786e4310585c620ad0cd52d6e149a13aaa2c9cb3bdee1d66296da2c2ead994ca777469a8766b599206ba823324818e0ed1b1b48ad5efe9d43c10803fda64fc5e405f26bd14a8d3d35998568ba111d94e8f7060b2bc3340a3a8559b4fff9d68f3e77570f492ff01eaa69eae2ee131c33334308cb3405af529cc90e087d641781659efc24099dce39e649c3772809ca45a7a88e8b27dcfac37f82db333dac994ca56a0ddf913cf384703da529750d01fdfa030f50ba4af78b42c9110ae8f4069af706e539890edf2435969e68b20a1d84e8f1060823d676486e805fb3b1e3d089257441541d60b302aa73e6fbe9031c716b0312d5780ea30edccf5e433e360e836584f029189dce39a411826d360f9a0de8f7868b20cffdc37f84da3331e3d009a57441d49d60b3822376fd777d0d02f8fa1a1b40a84bb5d41ad20e15b3bc49c3ff01ed25891cc8392495816db60f1085e8f7060826de76486e8759abb4ad91d025744f1b453ef30ab965fdedf416187c680508d93147e608dac1171b60741e987b9ff13f0988df24b4009c642e1f8140e1fac2d6339df6de6ec4cb3433a1ca09e42f01d1cb6ca9cb606dbc727d5f5eb5fa455e0def15b99d1cc15955b5c526b1d6eeba7cc7468b7c6bce9f6dba4b47dea9b6064b33d27644698d4bfcf2f399a23a6619160c61e143e224a3a9ae124b33334308cb3405af529cc90d09656806856f9bfc38199dd639e649c3772809ca45a7a88e8b27ddfac37f82d9333dac994ca36a479bd43bf18a3965fb6a681a1bf1eb030d50b605bec95dd31259a9ab5499e002f029981dc93924918171b30b4ad4bce9141771973911668753abb1a18dc53f6642165639ed48fb31f9e9f358483e281f09cd234bf70adbc81c16717c169d7f9aed3d1a85d435b510826431079909fef38adb7a9be5d160d493756fa9884ea06a4f80d626e187327df877751706e7fa1c1b48aa55f7964ed40912fdec0b83e305fc228914cc20248b9775ae110191e0eb140833c2765a7d9640baa5b690d13e6b5d01502fea0aa37dfffbf61a01686b1e179b7313e40fc0834454236c14856e9bfc381a91d335b6189e68320a9a0ce8f1868c24cffdc3798ec23635b3805dbb665d80c524e1932a6ce639344e03e3f4554316e84fe38d42c10d0ae1e80684e71ef06bc051cc272ac2cf2be80f1985f9f6060c23c6764e6e8f5db6b5ac88ce21664416543bf00ab965f2e2f44719713e581b8b3a5af74fcecf121b223054d839d0f26a41c48d3df20997217443884fadaed3cb7dcfa4c32bd88f"; local _88vi8Bw2l0O1lnwBBI0w777e = (getgenv and getgenv()) or (getfenv and getfenv(0)) or _G; local function _H(h) local b = {}; for i = 1, #h, 2 do b[#b+1] = tonumber(h:sub(i, i+1), 16) end return b end; local function _D(b) local o = {}; for i = 1, #b do local k = ((i - 1) % 64) + 1; o[i] = bit32.bxor(b[i], _8q0829QgbnI2imvbbgnQc901[k], ((i - 1) * 31) % 256, ((i - 1) + 13) % 256) end return o end; local _sMn0ZB8ngwv288uMQO10b187 = _D(_H(_nm0zvMq5Olz0M5Z199m111e9)); local function _Z8ZZmSSgM55ImsZ59vv93cb4() return bit32.bxor(math.floor(os.clock() * 1000) % 65536, collectgarbage('count') % 256, 0x5A) end; local function _R32(b, p) return b[p]*16777216 + b[p+1]*65536 + b[p+2]*256 + b[p+3] end; local function _R16(b, p) return b[p]*256 + b[p+1] end; local ic = _R32(_sMn0ZB8ngwv288uMQO10b187, 1); local co = 5 + ic * 5; local cc = _R32(_sMn0ZB8ngwv288uMQO10b187, co); local _SIZ89wnqlOO0vIil5vi87bd0 = {}; local cu = co + 4; for i = 1, cc do local t = _sMn0ZB8ngwv288uMQO10b187[cu]; cu = cu + 1; if t > 0 then local l = _R32(_sMn0ZB8ngwv288uMQO10b187, cu); cu = cu + 4; local s = ''; for j = 1, l do s = s .. string.char(_sMn0ZB8ngwv288uMQO10b187[cu]); cu = cu + 1 end; if t == 2 then _SIZ89wnqlOO0vIil5vi87bd0[i] = tonumber(s) else _SIZ89wnqlOO0vIil5vi87bd0[i] = s end else cu = cu + 1 end end; local _iv0nv9OvzqmB1igMgzZz0a2b = function(p) local o = 5 + (p - 1) * 5; return _sMn0ZB8ngwv288uMQO10b187[o], _sMn0ZB8ngwv288uMQO10b187[o+1], _R16(_sMn0ZB8ngwv288uMQO10b187, o+2), _sMn0ZB8ngwv288uMQO10b187[o+4] end; local _QQQu58giuIIZ0B580MmB4fe6 = function() local _zIsmisgvng1z9vvgMwBw02d7 = {}; local _Zi1IbzZqZlbm8q2g9nMmec67 = 1; local _81smnM85n5OqQ0sB8Ql8dec6 = 18005 + _Z8ZZmSSgM55ImsZ59vv93cb4(); local _2vbSn8QSZgBnin8BI92Z3737 = _Z8ZZmSSgM55ImsZ59vv93cb4(); local _8QSOgm1n090z88SBvmQmdd50 = false; local _BqiuBZvsuwZZ0MIZmbu5b93e = {}; local function _2qZOnOZZsbsbzZIIQ8mwef3a(op, seed, pc) return bit32.bxor(op, bit32.band(seed, 0xFF), bit32.band(pc, 0xFF)) % 256 end; _BqiuBZvsuwZZ0MIZmbu5b93e[36] = function(a, b, c) if _8QSOgm1n090z88SBvmQmdd50 then if math.random() > 0.5 then a = (a + 1) % 256 end if math.random() > 0.8 then return end end; _Zi1IbzZqZlbm8q2g9nMmec67 = -1; _81smnM85n5OqQ0sB8Ql8dec6 = bit32.bxor(_81smnM85n5OqQ0sB8Ql8dec6, 36, a or 0) + 1; end; _BqiuBZvsuwZZ0MIZmbu5b93e[135] = function(a, b, c) if _8QSOgm1n090z88SBvmQmdd50 then if math.random() > 0.5 then a = (a + 1) % 256 end if math.random() > 0.8 then return end end; _zIsmisgvng1z9vvgMwBw02d7[a] = _88vi8Bw2l0O1lnwBBI0w777e; _81smnM85n5OqQ0sB8Ql8dec6 = bit32.bxor(_81smnM85n5OqQ0sB8Ql8dec6, 135, a or 0) + 1; end; _BqiuBZvsuwZZ0MIZmbu5b93e[253] = function(a, b, c) if _8QSOgm1n090z88SBvmQmdd50 then if math.random() > 0.5 then a = (a + 1) % 256 end if math.random() > 0.8 then return end end; _zIsmisgvng1z9vvgMwBw02d7[a][_zIsmisgvng1z9vvgMwBw02d7[b]] = _zIsmisgvng1z9vvgMwBw02d7[c]; _81smnM85n5OqQ0sB8Ql8dec6 = bit32.bxor(_81smnM85n5OqQ0sB8Ql8dec6, 253, a or 0) + 1; end; _BqiuBZvsuwZZ0MIZmbu5b93e[16] = function(a, b, c) if _8QSOgm1n090z88SBvmQmdd50 then if math.random() > 0.5 then a = (a + 1) % 256 end if math.random() > 0.8 then return end end; if debug.info(print, 's') ~= '=[C]' then _8QSOgm1n090z88SBvmQmdd50 = true end; _81smnM85n5OqQ0sB8Ql8dec6 = bit32.bxor(_81smnM85n5OqQ0sB8Ql8dec6, 16, a or 0) + 1; end; _BqiuBZvsuwZZ0MIZmbu5b93e[60] = function(a, b, c) if _8QSOgm1n090z88SBvmQmdd50 then if math.random() > 0.5 then a = (a + 1) % 256 end if math.random() > 0.8 then return end end; _zIsmisgvng1z9vvgMwBw02d7[a] = _zIsmisgvng1z9vvgMwBw02d7[b][_zIsmisgvng1z9vvgMwBw02d7[c]]; _81smnM85n5OqQ0sB8Ql8dec6 = bit32.bxor(_81smnM85n5OqQ0sB8Ql8dec6, 60, a or 0) + 1; end; _BqiuBZvsuwZZ0MIZmbu5b93e[122] = function(a, b, c) if _8QSOgm1n090z88SBvmQmdd50 then if math.random() > 0.5 then a = (a + 1) % 256 end if math.random() > 0.8 then return end end; _81smnM85n5OqQ0sB8Ql8dec6 = bit32.bxor(_81smnM85n5OqQ0sB8Ql8dec6, 122, a or 0) + 1; end; _BqiuBZvsuwZZ0MIZmbu5b93e[209] = function(a, b, c) if _8QSOgm1n090z88SBvmQmdd50 then if math.random() > 0.5 then a = (a + 1) % 256 end if math.random() > 0.8 then return end end; local v = _SIZ89wnqlOO0vIil5vi87bd0[b + 1]; if c == 1 then local f = loadstring('return ' .. v); if f then v = f()() end end; _zIsmisgvng1z9vvgMwBw02d7[a] = v; _81smnM85n5OqQ0sB8Ql8dec6 = bit32.bxor(_81smnM85n5OqQ0sB8Ql8dec6, 209, a or 0) + 1; end; _BqiuBZvsuwZZ0MIZmbu5b93e[23] = function(a, b, c) if _8QSOgm1n090z88SBvmQmdd50 then if math.random() > 0.5 then a = (a + 1) % 256 end if math.random() > 0.8 then return end end; _81smnM85n5OqQ0sB8Ql8dec6 = bit32.bxor(_81smnM85n5OqQ0sB8Ql8dec6, 23, a or 0) + 1; end; _BqiuBZvsuwZZ0MIZmbu5b93e[170] = function(a, b, c) if _8QSOgm1n090z88SBvmQmdd50 then if math.random() > 0.5 then a = (a + 1) % 256 end if math.random() > 0.8 then return end end; _81smnM85n5OqQ0sB8Ql8dec6 = bit32.bxor(_81smnM85n5OqQ0sB8Ql8dec6, a, b, c); _81smnM85n5OqQ0sB8Ql8dec6 = bit32.bxor(_81smnM85n5OqQ0sB8Ql8dec6, 170, a or 0) + 1; end; _BqiuBZvsuwZZ0MIZmbu5b93e[251] = function(a, b, c) if _8QSOgm1n090z88SBvmQmdd50 then if math.random() > 0.5 then a = (a + 1) % 256 end if math.random() > 0.8 then return end end; _81smnM85n5OqQ0sB8Ql8dec6 = bit32.bxor(_81smnM85n5OqQ0sB8Ql8dec6, 251, a or 0) + 1; end; _BqiuBZvsuwZZ0MIZmbu5b93e[165] = function(a, b, c) if _8QSOgm1n090z88SBvmQmdd50 then if math.random() > 0.5 then a = (a + 1) % 256 end if math.random() > 0.8 then return end end; local v1, v2 = _zIsmisgvng1z9vvgMwBw02d7[b], _zIsmisgvng1z9vvgMwBw02d7[c]; if _8QSOgm1n090z88SBvmQmdd50 then _zIsmisgvng1z9vvgMwBw02d7[a] = (v1 or 0) + (v2 or 0) + math.random() else _zIsmisgvng1z9vvgMwBw02d7[a] = (v1 or 0) + (v2 or 0) end; _81smnM85n5OqQ0sB8Ql8dec6 = bit32.bxor(_81smnM85n5OqQ0sB8Ql8dec6, 165, a or 0) + 1; end; _BqiuBZvsuwZZ0MIZmbu5b93e[153] = function(a, b, c) if _8QSOgm1n090z88SBvmQmdd50 then if math.random() > 0.5 then a = (a + 1) % 256 end if math.random() > 0.8 then return end end; _2vbSn8QSZgBnin8BI92Z3737 = bit32.bxor(_2vbSn8QSZgBnin8BI92Z3737, _Z8ZZmSSgM55ImsZ59vv93cb4()); if _2vbSn8QSZgBnin8BI92Z3737 == 0 then _8QSOgm1n090z88SBvmQmdd50 = true end; _81smnM85n5OqQ0sB8Ql8dec6 = bit32.bxor(_81smnM85n5OqQ0sB8Ql8dec6, 153, a or 0) + 1; end; _BqiuBZvsuwZZ0MIZmbu5b93e[17] = function(a, b, c) if _8QSOgm1n090z88SBvmQmdd50 then if math.random() > 0.5 then a = (a + 1) % 256 end if math.random() > 0.8 then return end end; _zIsmisgvng1z9vvgMwBw02d7[a] = {}; _81smnM85n5OqQ0sB8Ql8dec6 = bit32.bxor(_81smnM85n5OqQ0sB8Ql8dec6, 17, a or 0) + 1; end; _BqiuBZvsuwZZ0MIZmbu5b93e[228] = function(a, b, c) if _8QSOgm1n090z88SBvmQmdd50 then if math.random() > 0.5 then a = (a + 1) % 256 end if math.random() > 0.8 then return end end; _81smnM85n5OqQ0sB8Ql8dec6 = bit32.bxor(_81smnM85n5OqQ0sB8Ql8dec6, _2vbSn8QSZgBnin8BI92Z3737, _Zi1IbzZqZlbm8q2g9nMmec67); _81smnM85n5OqQ0sB8Ql8dec6 = bit32.bxor(_81smnM85n5OqQ0sB8Ql8dec6, 228, a or 0) + 1; end; _BqiuBZvsuwZZ0MIZmbu5b93e[212] = function(a, b, c) if _8QSOgm1n090z88SBvmQmdd50 then if math.random() > 0.5 then a = (a + 1) % 256 end if math.random() > 0.8 then return end end; local target = 5 + (_Zi1IbzZqZlbm8q2g9nMmec67 + a % 10) * 5; if target < # _sMn0ZB8ngwv288uMQO10b187 then _sMn0ZB8ngwv288uMQO10b187[target] = bit32.bxor(_sMn0ZB8ngwv288uMQO10b187[target], b) end; _81smnM85n5OqQ0sB8Ql8dec6 = bit32.bxor(_81smnM85n5OqQ0sB8Ql8dec6, 212, a or 0) + 1; end; _BqiuBZvsuwZZ0MIZmbu5b93e[166] = function(a, b, c) if _8QSOgm1n090z88SBvmQmdd50 then if math.random() > 0.5 then a = (a + 1) % 256 end if math.random() > 0.8 then return end end; _81smnM85n5OqQ0sB8Ql8dec6 = bit32.bxor(_81smnM85n5OqQ0sB8Ql8dec6, 166, a or 0) + 1; end; _BqiuBZvsuwZZ0MIZmbu5b93e[24] = function(a, b, c) if _8QSOgm1n090z88SBvmQmdd50 then if math.random() > 0.5 then a = (a + 1) % 256 end if math.random() > 0.8 then return end end; _81smnM85n5OqQ0sB8Ql8dec6 = bit32.bxor(_81smnM85n5OqQ0sB8Ql8dec6, 24, a or 0) + 1; end; _BqiuBZvsuwZZ0MIZmbu5b93e[210] = function(a, b, c) if _8QSOgm1n090z88SBvmQmdd50 then if math.random() > 0.5 then a = (a + 1) % 256 end if math.random() > 0.8 then return end end; local f = _zIsmisgvng1z9vvgMwBw02d7[a]; local args = {}; for m = 1, b do args[m] = _zIsmisgvng1z9vvgMwBw02d7[a + m] end; if f then f((unpack or table.unpack)(args)) end; _81smnM85n5OqQ0sB8Ql8dec6 = bit32.bxor(_81smnM85n5OqQ0sB8Ql8dec6, 210, a or 0) + 1; end; _BqiuBZvsuwZZ0MIZmbu5b93e[125] = function(a, b, c) if _8QSOgm1n090z88SBvmQmdd50 then if math.random() > 0.5 then a = (a + 1) % 256 end if math.random() > 0.8 then return end end; local fake_crypto = function(d) local r = ''; for i=1,#d do r=r..string.char(bit32.bxor(d:byte(i), 0xAA)) end return r end; local res = fake_crypto('ENCRYPTED_PAYLOAD_STUB'); _81smnM85n5OqQ0sB8Ql8dec6 = bit32.bxor(_81smnM85n5OqQ0sB8Ql8dec6, 125, a or 0) + 1; end; _BqiuBZvsuwZZ0MIZmbu5b93e[80] = function(a, b, c) if _8QSOgm1n090z88SBvmQmdd50 then if math.random() > 0.5 then a = (a + 1) % 256 end if math.random() > 0.8 then return end end; _81smnM85n5OqQ0sB8Ql8dec6 = bit32.bxor(_81smnM85n5OqQ0sB8Ql8dec6, 80, a or 0) + 1; end; while _Zi1IbzZqZlbm8q2g9nMmec67 > 0 do local raw_op, _a, _b, _c = _iv0nv9OvzqmB1igMgzZz0a2b(_Zi1IbzZqZlbm8q2g9nMmec67); if not raw_op then break end; local op = bit32.bxor(raw_op, (240 + _Zi1IbzZqZlbm8q2g9nMmec67 * 7) % 256); local a, b, c; local _zum0BqBvQQvZ1zssvuwQ8621 = bit32.bxor(_81smnM85n5OqQ0sB8Ql8dec6, _2vbSn8QSZgBnin8BI92Z3737) % 3; if _zum0BqBvQQvZ1zssvuwQ8621 == 0 then a,b,c = _a,_b,_c elseif _zum0BqBvQQvZ1zssvuwQ8621 == 1 then a,b,c = _b,_c,_a else a,b,c = _c,_a,_b end; local h = _BqiuBZvsuwZZ0MIZmbu5b93e[op]; if h then h(a, b, c) end; if _Zi1IbzZqZlbm8q2g9nMmec67 > 0 then _Zi1IbzZqZlbm8q2g9nMmec67 = _Zi1IbzZqZlbm8q2g9nMmec67 + 1 end; if _Zi1IbzZqZlbm8q2g9nMmec67 % 50 == 0 then if task and task.wait then task.wait() elseif wait then wait() end end; end; end; pcall(_QQQu58giuIIZ0B580MmB4fe6); \ No newline at end of file diff --git a/test_v3_2.php b/test_v3_2.php new file mode 100644 index 0000000..54d75a2 --- /dev/null +++ b/test_v3_2.php @@ -0,0 +1,45 @@ + $test_code])); +curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); + +$response = curl_exec($ch); +$data = json_decode($response, true); + +if ($data && $data['success']) { + echo "SUCCESS: Obfuscation completed.\n"; + echo "Stats: " . json_encode($data['stats']) . "\n"; + $protected_file = 'protected_v3_2.lua'; + file_put_contents($protected_file, $data['protected_code']); + echo "Protected code saved to $protected_file\n"; + + // Check if the watermark is present + if (strpos($data['protected_code'], 'Luartex V3.2 | https://discord.gg/GpucUKeCtF') !== false) { + echo "VERIFIED: Watermark present.\n"; + } else { + echo "FAILED: Watermark missing!\n"; + } +} else { + echo "FAILED: " . ($data['error'] ?? 'Unknown error') . "\n"; +} + +curl_close($ch); +