AxisAngles

Listener

Jun 11th, 2022
1,370
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 18.57 KB | None | 0 0
  1. local llIIlIlIIllllIlIlIlIIlIlIlIllllIllI = {'\27','\76','\117','\97','\81','\0','\1','\4','\8','\4','\8','\0','\7','\0',
  2. '\0','\0','\0','\0','\0','\0','\60','\101','\118','\97','\108','\62','\0','\3','\0','\0','\0','\7','\0','\0','\0','\0','\0',
  3. '\0','\3','\10','\0','\0','\0','\5','\0','\0','\0','\69','\64','\0','\0','\70','\128','\192','\0','\70','\192','\192','\0',
  4. '\28','\128','\0','\1','\11','\0','\65','\0','\133','\64','\1','\0','\156','\0','\128','\0','\28','\64','\0','\0','\30','\0',
  5. '\128','\0','\6','\0','\0','\0','\4','\8','\0','\0','\0','\0','\0','\0','\0','\114','\101','\113','\117','\105','\114','\101',
  6. '\0','\4','\5','\0','\0','\0','\0','\0','\0','\0','\103','\97','\109','\101','\0','\4','\18','\0','\0','\0','\0','\0','\0',
  7. '\0','\82','\101','\112','\108','\105','\99','\97','\116','\101','\100','\83','\116','\111','\114','\97','\103','\101','\0',
  8. '\4','\9','\0','\0','\0','\0','\0','\0','\0','\69','\108','\101','\118','\97','\116','\101','\100','\0','\4','\8','\0','\0',
  9. '\0','\0','\0','\0','\0','\69','\108','\101','\118','\97','\116','\101','\0','\4','\8','\0','\0','\0','\0','\0','\0','\0',
  10. '\103','\101','\116','\103','\101','\110','\118','\0','\0','\0','\0','\0','\10','\0','\0','\0','\5','\0','\0','\0','\5','\0',
  11. '\0','\0','\5','\0','\0','\0','\5','\0','\0','\0','\5','\0','\0','\0','\5','\0','\0','\0','\5','\0','\0','\0','\5','\0','\0',
  12. '\0','\5','\0','\0','\0','\7','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0'}
  13.  
  14. local IlIIlIlIIIlllIlIlIIlIlIlIlIIIlIIIII = {
  15. "ABC",  "ABx", "ABC",  "ABC",
  16. "ABC",  "ABx", "ABC",  "ABx",
  17. "ABC",  "ABC", "ABC",  "ABC",
  18. "ABC",  "ABC", "ABC",  "ABC",
  19. "ABC",  "ABC", "ABC",  "ABC",
  20. "ABC",  "ABC", "AsBx", "ABC",
  21. "ABC",  "ABC", "ABC",  "ABC",
  22. "ABC",  "ABC", "ABC",  "AsBx",
  23. "AsBx", "ABC", "ABC", "ABC",
  24. "ABx",  "ABC",}
  25. local llllIIlIllIIlIllIIllIlIlIIlIIIllIlI = {
  26. "MOVE",     "LOADK",     "LOADBOOL", "LOADNIL",
  27. "GETUPVAL", "GETGLOBAL", "GETTABLE", "SETGLOBAL",
  28. "SETUPVAL", "SETTABLE",  "NEWTABLE", "SELF",
  29. "ADD",      "SUB",       "MUL",      "DIV",
  30. "MOD",      "POW",       "UNM",      "NOT",
  31. "LEN",      "CONCAT",    "JMP",      "EQ",
  32. "LT",       "LE",        "TEST",     "TESTSET",
  33. "CALL",     "TAILCALL",  "RETURN",   "FORLOOP",
  34. "FORPREP",  "TFORLOOP",  "SETLIST",  "CLOSE",
  35. "CLOSURE",  "VARARG"
  36. };
  37. local function get_bits(input, n, n2)
  38. if n2 then
  39. local total = 0
  40. local digitn = 0
  41. for i = n, n2 do
  42. total = total + 2^digitn*get_bits(input, i)
  43. digitn = digitn + 1
  44. end
  45. return total
  46. else
  47. local pn = 2^(n-1)
  48. return (input % (pn + pn) >= pn) and 1 or 0
  49. end
  50. end
  51. local function lIlIIIlllIlIIIIlIIIllIlIIIIIlIlIlll(IlIlllllllIllIlIllIlIlllIIIIIlIIlll)
  52. local index = 1
  53. local big_endian = false
  54. local int_size;
  55. local size_t;
  56. local get_int, get_size_t;
  57. local get_int8, get_int32, get_int64, get_float64, get_string;
  58. do
  59. function get_int8()
  60. local a = IlIlllllllIllIlIllIlIlllIIIIIlIIlll:byte(index, index);
  61. index = index + 1
  62. return a
  63. end
  64. function get_int32()
  65. local a, b, c, d = IlIlllllllIllIlIllIlIlllIIIIIlIIlll:byte(index, index + 3);
  66. index = index + 4;
  67. return d*16777216 + c*65536 + b*256 + a
  68. end
  69. function get_int64()
  70. local a = get_int32();
  71. local b = get_int32();
  72. return b*4294967296 + a;
  73. end
  74. function get_float64()
  75. local a = get_int32()
  76. local b = get_int32()
  77. return (-2*get_bits(b, 32)+1)*(2^(get_bits(b, 21, 31)-1023))*
  78. ((get_bits(b, 1, 20)*(2^32) + a)/(2^52)+1)
  79. end
  80. function get_string(len)
  81. local str;
  82. if len then
  83. str = IlIlllllllIllIlIllIlIlllIIIIIlIIlll:sub(index, index + len - 1);
  84. index = index + len;
  85. else
  86. len = get_size_t();
  87. if len == 0 then return; end
  88. str = IlIlllllllIllIlIllIlIlllIIIIIlIIlll:sub(index, index + len - 1);
  89. index = index + len;
  90. end
  91. return str;
  92. end
  93. end
  94. local function decode_chunk()
  95. local chunk;
  96. local instructions = {};
  97. local constants    = {};
  98. local prototypes   = {};
  99. local debug = {
  100. lines = {};
  101. };
  102. chunk = {
  103. instructions = instructions;
  104. constants    = constants;
  105. prototypes   = prototypes;
  106. debug = debug;
  107. };
  108. local num;
  109. chunk.name       = get_string();
  110. chunk.first_line = get_int();
  111. chunk.last_line  = get_int();
  112. if chunk.name then chunk.name = chunk.name:sub(1, -2); end
  113. chunk.upvalues  = get_int8();
  114. chunk.arguments = get_int8();
  115. chunk.varg      = get_int8();
  116. chunk.stack     = get_int8();
  117. do
  118. num = get_int();
  119. for i = 1, num do
  120. local instruction = {
  121. };
  122. local llIIlIlIIllllIlIlIlIIlIlIlIllllIllI   = get_int32();
  123. local opcode = get_bits(llIIlIlIIllllIlIlIlIIlIlIlIllllIllI, 1, 6);
  124. local type   = IlIIlIlIIIlllIlIlIIlIlIlIlIIIlIIIII[opcode + 1];
  125. instruction.opcode = opcode;
  126. instruction.type   = type;
  127. instruction.A = get_bits(llIIlIlIIllllIlIlIlIIlIlIlIllllIllI, 7, 14);
  128. if type == "ABC" then
  129. instruction.B = get_bits(llIIlIlIIllllIlIlIlIIlIlIlIllllIllI, 24, 32);
  130. instruction.C = get_bits(llIIlIlIIllllIlIlIlIIlIlIlIllllIllI, 15, 23);
  131. elseif type == "ABx" then
  132. instruction.Bx = get_bits(llIIlIlIIllllIlIlIlIIlIlIlIllllIllI, 15, 32);
  133. elseif type == "AsBx" then
  134. instruction.sBx = get_bits(llIIlIlIIllllIlIlIlIIlIlIlIllllIllI, 15, 32) - 131071;
  135. end
  136. instructions[i] = instruction;
  137. end
  138. end
  139. do
  140. num = get_int();
  141. for i = 1, num do
  142. local constant = {
  143. };
  144. local type = get_int8();
  145. constant.type = type;
  146. if type == 1 then
  147. constant.llIIlIlIIllllIlIlIlIIlIlIlIllllIllI = (get_int8() ~= 0);
  148. elseif type == 3 then
  149. constant.llIIlIlIIllllIlIlIlIIlIlIlIllllIllI = get_float64();
  150. elseif type == 4 then
  151. constant.llIIlIlIIllllIlIlIlIIlIlIlIllllIllI = get_string():sub(1, -2);
  152. end
  153. constants[i-1] = constant;
  154. end
  155. end
  156. do
  157. num = get_int();
  158. for i = 1, num do
  159. prototypes[i-1] = decode_chunk();
  160. end
  161. end
  162. do
  163. local llIIlIlIIllllIlIlIlIIlIlIlIllllIllI = debug.lines
  164. num = get_int();
  165. for i = 1, num do
  166. llIIlIlIIllllIlIlIlIIlIlIlIllllIllI[i] = get_int32();
  167. end
  168. num = get_int();
  169. for i = 1, num do
  170. get_string():sub(1, -2);
  171. get_int32();
  172. get_int32();
  173. end
  174. num = get_int();
  175. for i = 1, num do
  176. get_string();
  177. end
  178. end
  179. return chunk;
  180. end
  181. do
  182. assert(get_string(4) == "\27Lua", "S1MPLYS3C7RED: Bytecode expected");
  183. assert(get_int8() == 0x51, "S1MPLYS3C7RED: Only lua5.1 is supported");
  184. get_int8();
  185. big_endian = (get_int8() == 0);
  186. int_size = get_int8();
  187. size_t   = get_int8();
  188. if int_size == 4 then
  189. get_int = get_int32;
  190. elseif int_size == 8 then
  191. get_int = get_int64;
  192. else
  193. error("");
  194. end
  195. if size_t == 4 then
  196. get_size_t = get_int32;
  197. elseif size_t == 8 then
  198. get_size_t = get_int64;
  199. else
  200. error("");
  201. end
  202. assert(get_string(3) == "\4\8\0","S1MPLYS3C7RED: Unsupported platform");
  203. end
  204. return decode_chunk();
  205. end
  206. local function handle_return(...)
  207. local c = select("#", ...)
  208. local t = {...}
  209. return c, t
  210. end
  211. local function IIllIllIlIIIIIIIIllIlIIIIlllIIIIIIl(IIllIlIIIlIlllllIIIlIIlllllIllllIlI, upvalues)
  212. local instructions = IIllIlIIIlIlllllIIIlIIlllllIllllIlI.instructions;
  213. local constants    = IIllIlIIIlIlllllIIIlIIlllllIllllIlI.constants;
  214. local prototypes   = IIllIlIIIlIlllllIIIlIIlllllIllllIlI.prototypes;
  215.  
  216. local stack, top
  217. local environment
  218. local IP = 1;
  219. local vararg, vararg_size
  220.  
  221. local opcode_funcs = {
  222. [0]  = function(instruction)
  223. stack[instruction.A] = stack[instruction.B];
  224. end,
  225. [1]  = function(instruction)
  226. stack[instruction.A] = constants[instruction.Bx].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI;
  227. end,
  228. [2]  = function(instruction)
  229. stack[instruction.A] = instruction.B ~= 0
  230. if instruction.C ~= 0 then
  231. IP = IP + 1
  232. end
  233. end,
  234. [3]  = function(instruction)
  235. local stack = stack
  236. for i = instruction.A, instruction.B do
  237. stack[i] = nil
  238. end
  239. end,
  240. [4] = function(instruction)
  241. stack[instruction.A] = upvalues[instruction.B]
  242. end,
  243. [5]  = function(instruction)
  244. local key = constants[instruction.Bx].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI;
  245. stack[instruction.A] = environment[key];
  246. end,
  247. [6]  = function(instruction)
  248. local C = instruction.C
  249. local stack = stack
  250. C = C > 255 and constants[C-256].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI or stack[C]
  251. stack[instruction.A] = stack[instruction.B][C];
  252. end,
  253. [7]  = function(instruction)
  254. local key = constants[instruction.Bx].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI;
  255. environment[key] = stack[instruction.A];
  256. end,
  257. [8] = function (instruction)
  258. upvalues[instruction.B] = stack[instruction.A]
  259. end,
  260. [9] = function (instruction)
  261. local B = instruction.B;
  262. local C = instruction.C;
  263. local stack, constants = stack, constants;
  264. B = B > 255 and constants[B-256].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI or stack[B];
  265. C = C > 255 and constants[C-256].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI or stack[C];
  266. stack[instruction.A][B] = C
  267. end,
  268. [10] = function (instruction)
  269. stack[instruction.A] = {}
  270. end,
  271. [11] = function (instruction)
  272. local A = instruction.A
  273. local B = instruction.B
  274. local C = instruction.C
  275. local stack = stack
  276. B = stack[B]
  277. C = C > 255 and constants[C-256].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI or stack[C]
  278. stack[A+1] = B
  279. stack[A]   = B[C]
  280. end,
  281. [12] = function(instruction)
  282. local B = instruction.B;
  283. local C = instruction.C;
  284. local stack, constants = stack, constants;
  285. B = B > 255 and constants[B-256].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI or stack[B];
  286. C = C > 255 and constants[C-256].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI or stack[C];
  287. stack[instruction.A] = B+C;
  288. end,
  289. [13] = function(instruction)
  290. local B = instruction.B;
  291. local C = instruction.C;
  292. local stack, constants = stack, constants;
  293. B = B > 255 and constants[B-256].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI or stack[B];
  294. C = C > 255 and constants[C-256].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI or stack[C];
  295. stack[instruction.A] = B - C;
  296. end,
  297. [14] = function(instruction)
  298. local B = instruction.B;
  299. local C = instruction.C;
  300. local stack, constants = stack, constants;
  301. B = B > 255 and constants[B-256].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI or stack[B];
  302. C = C > 255 and constants[C-256].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI or stack[C];
  303. stack[instruction.A] = B * C;
  304. end,
  305. [15] = function(instruction)
  306. local B = instruction.B;
  307. local C = instruction.C;
  308. local stack, constants = stack, constants;
  309. B = B > 255 and constants[B-256].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI or stack[B];
  310. C = C > 255 and constants[C-256].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI or stack[C];
  311. stack[instruction.A] = B / C;
  312. end,
  313. [16] = function(instruction)
  314. local B = instruction.B;
  315. local C = instruction.C;
  316. local stack, constants = stack, constants;
  317. B = B > 255 and constants[B-256].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI or stack[B];
  318. C = C > 255 and constants[C-256].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI or stack[C];
  319. stack[instruction.A] = B % C;
  320. end,
  321. [17] = function(instruction)
  322. local B = instruction.B;
  323. local C = instruction.C;
  324. local stack, constants = stack, constants;
  325. B = B > 255 and constants[B-256].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI or stack[B];
  326. C = C > 255 and constants[C-256].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI or stack[C];
  327. stack[instruction.A] = B ^ C;
  328. end,
  329. [18] = function(instruction)
  330. stack[instruction.A] = -stack[instruction.B]
  331. end,
  332. [19] = function(instruction)
  333. stack[instruction.A] = not stack[instruction.B]
  334. end,
  335. [20] = function(instruction)
  336. stack[instruction.A] = #stack[instruction.B]
  337. end,
  338. [21] = function(instruction)
  339. local B = instruction.B
  340. local result = stack[B]
  341. for i = B+1, instruction.C do
  342. result = result .. stack[i]
  343. end
  344. stack[instruction.A] = result
  345. end,
  346. [22] = function(instruction)
  347. IP = IP + instruction.sBx
  348. end,
  349. [23] = function(instruction)
  350. local A = instruction.A
  351. local B = instruction.B
  352. local C = instruction.C
  353. local stack, constants = stack, constants
  354. A = A ~= 0
  355. B = B > 255 and constants[B-256].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI or stack[B]
  356. C = C > 255 and constants[C-256].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI or stack[C]
  357. if (B == C) ~= A then
  358. IP = IP + 1
  359. end
  360. end,
  361. [24] = function(instruction)
  362. local A = instruction.A
  363. local B = instruction.B
  364. local C = instruction.C
  365. local stack, constants = stack, constants
  366. A = A ~= 0
  367. B = B > 255 and constants[B-256].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI or stack[B]
  368. C = C > 255 and constants[C-256].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI or stack[C]
  369. if (B < C) ~= A then
  370. IP = IP + 1
  371. end
  372. end,
  373. [25] = function(instruction)
  374. local A = instruction.A
  375. local B = instruction.B
  376. local C = instruction.C
  377. local stack, constants = stack, constants
  378. A = A ~= 0
  379. B = B > 255 and constants[B-256].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI or stack[B]
  380. C = C > 255 and constants[C-256].llIIlIlIIllllIlIlIlIIlIlIlIllllIllI or stack[C]
  381. if (B <= C) ~= A then
  382. IP = IP + 1
  383. end
  384. end,
  385. [26] = function(instruction)
  386. if stack[instruction.A] == (instruction.C ~= 0) then
  387. IP = IP + 1
  388. end
  389. end,
  390. [27] = function(instruction)
  391. local stack = stack
  392. local B = stack[instruction.B]
  393. if B == (instruction.C ~= 0) then
  394. IP = IP + 1
  395. else
  396. stack[instruction.A] = B
  397. end
  398. end,
  399. [28] = function(instruction)
  400. local A = instruction.A;
  401. local B = instruction.B;
  402. local C = instruction.C;
  403. local stack = stack;
  404. local args, results;
  405. local limit, loop
  406. args = {};
  407. if B ~= 1 then
  408. if B ~= 0 then
  409. limit = A+B-1;
  410. else
  411. limit = top
  412. end
  413. loop = 0
  414. for i = A+1, limit do
  415. loop = loop + 1
  416. args[loop] = stack[i];
  417. end
  418. limit, results = handle_return(stack[A](unpack(args, 1, limit-A)))
  419. else
  420. limit, results = handle_return(stack[A]())
  421. end
  422. top = A - 1
  423. if C ~= 1 then
  424. if C ~= 0 then
  425. limit = A+C-2;
  426. else
  427. limit = limit+A
  428. end
  429. loop = 0;
  430. for i = A, limit do
  431. loop = loop + 1;
  432. stack[i] = results[loop];
  433. end
  434. end
  435. end,
  436. [29] = function (instruction)
  437. local A = instruction.A;
  438. local B = instruction.B;
  439. local C = instruction.C;
  440. local stack = stack;
  441. local args, results;
  442. local top, limit, loop = top
  443. args = {};
  444. if B ~= 1 then
  445. if B ~= 0 then
  446. limit = A+B-1;
  447. else
  448. limit = top
  449. end
  450. loop = 0
  451. for i = A+1, limit do
  452. loop = loop + 1
  453. args[#args+1] = stack[i];
  454. end
  455. results = {stack[A](unpack(args, 1, limit-A))};
  456. else
  457. results = {stack[A]()};
  458. end
  459. return true, results
  460. end,
  461. [30] = function(instruction)
  462. local A = instruction.A;
  463. local B = instruction.B;
  464. local stack = stack;
  465. local limit;
  466. local loop, IlllIlIIIIIlIIIlIllIIIIlIllIllIlIlI;
  467. if B == 1 then
  468. return true;
  469. end
  470. if B == 0 then
  471. limit = top
  472. else
  473. limit = A + B - 2;
  474. end
  475. IlllIlIIIIIlIIIlIllIIIIlIllIllIlIlI = {};
  476. local loop = 0
  477. for i = A, limit do
  478. loop = loop + 1
  479. IlllIlIIIIIlIIIlIllIIIIlIllIllIlIlI[loop] = stack[i];
  480. end
  481. return true, IlllIlIIIIIlIIIlIllIIIIlIllIllIlIlI;
  482. end,
  483. [31] = function(instruction)
  484. local A = instruction.A
  485. local stack = stack
  486. local step = stack[A+2]
  487. local index = stack[A] + step
  488. stack[A] = index
  489. if step > 0 then
  490. if index <= stack[A+1] then
  491. IP = IP + instruction.sBx
  492. stack[A+3] = index
  493. end
  494. else
  495. if index >= stack[A+1] then
  496. IP = IP + instruction.sBx
  497. stack[A+3] = index
  498. end
  499. end
  500. end,
  501. [32] = function(instruction)
  502. local A = instruction.A
  503. local stack = stack
  504. stack[A] = stack[A] - stack[A+2]
  505. IP = IP + instruction.sBx
  506. end,
  507. [33] = function(instruction)
  508. local A = instruction.A
  509. local B = instruction.B
  510. local C = instruction.C
  511. local stack = stack
  512. local offset = A+2
  513. local result = {stack[A](stack[A+1], stack[A+2])}
  514. for i = 1, C do
  515. stack[offset+i] = result[i]
  516. end
  517. if stack[A+3] ~= nil then
  518. stack[A+2] = stack[A+3]
  519. else
  520. IP = IP + 1
  521. end
  522. end,
  523. [34] = function(instruction)
  524. local A = instruction.A
  525. local B = instruction.B
  526. local C = instruction.C
  527. local stack = stack
  528. if C == 0 then
  529. error("NYI: extended SETLIST")
  530. else
  531. local offset = (C - 1) * 50
  532. local t = stack[A]
  533. if B == 0 then
  534. B = top
  535. end
  536. for i = 1, B do
  537. t[offset+i] = stack[A+i]
  538. end
  539. end
  540. end,
  541. [35] = function(instruction)
  542. io.stderr:write("NYI: CLOSE")
  543. io.stderr:flush()
  544. end,
  545. [36] = function(instruction)
  546. local proto = prototypes[instruction.Bx]
  547. local instructions = instructions
  548. local stack = stack
  549. local indices = {}
  550. local new_upvals = setmetatable({},
  551. {
  552. __index = function(t, k)
  553. local upval = indices[k]
  554. return upval.segment[upval.offset]
  555. end,
  556. __newindex = function(t, k, v)
  557. local upval = indices[k]
  558. upval.segment[upval.offset] = v
  559. end
  560. }
  561. )
  562. for i = 1, proto.upvalues do
  563. local movement = instructions[IP]
  564. if movement.opcode == 0 then
  565. indices[i-1] = {segment = stack, offset = movement.B}
  566. elseif instructions[IP].opcode == 4 then
  567. indices[i-1] = {segment = upvalues, offset = movement.B}
  568. end
  569. IP = IP + 1
  570. end
  571. local _, func = IIllIllIlIIIIIIIIllIlIIIIlllIIIIIIl(proto, new_upvals)
  572. stack[instruction.A] = func
  573. end,
  574. [37] = function(instruction)
  575. local A = instruction.A
  576. local B = instruction.B
  577. local stack, vararg = stack, vararg
  578.  
  579. for i = A, A + (B > 0 and B - 1 or vararg_size) do
  580. stack[i] = vararg[i - A]
  581. end
  582. end,
  583. }
  584. local function loop()
  585. local instructions = instructions
  586. local instruction, a, b
  587. while true do
  588. instruction = instructions[IP];
  589. IP = IP + 1
  590. a, b = opcode_funcs[instruction.opcode](instruction);
  591. if a then
  592. return b;
  593. end
  594. end
  595. end
  596. local IIIIIIIlIlIIlllIIlIlIIIllIIlIIIlIlI = {
  597. get_stack = function()
  598. return stack;
  599. end;
  600. get_IP = function()
  601. return IP;
  602. end
  603. };
  604. local function func(...)
  605. local local_stack = {};
  606. local ghost_stack = {};
  607. top = -1
  608. stack = setmetatable(local_stack, {
  609. __index = ghost_stack;
  610. __newindex = function(t, k, v)
  611. if k > top and v then
  612. top = k
  613. end
  614. ghost_stack[k] = v
  615. end;
  616. })
  617. local args = {...};
  618. vararg = {}
  619. vararg_size = select("#", ...) - 1
  620. for i = 0, vararg_size do
  621. local_stack[i] = args[i+1];
  622. vararg[i] = args[i+1]
  623. end
  624. environment = getfenv();
  625. IP = 1;
  626. local thread = coroutine.create(loop)
  627. local a, b = coroutine.resume(thread)
  628. if a then
  629. if b then
  630. return unpack(b);
  631. end
  632. return;
  633. else
  634. local name = IIllIlIIIlIlllllIIIlIIlllllIllllIlI.name;
  635. local line = IIllIlIIIlIlllllIIIlIIlllllIllllIlI.debug.lines[IP];
  636. local err  = b:gsub("(.-:)", "");
  637. local IlllIlIIIIIlIIIlIllIIIIlIllIllIlIlI = "";
  638. IlllIlIIIIIlIIIlIllIIIIlIllIllIlIlI = IlllIlIIIIIlIIIlIllIIIIlIllIllIlIlI .. (name and name .. ":" or "");
  639. IlllIlIIIIIlIIIlIllIIIIlIllIllIlIlI = IlllIlIIIIIlIIIlIllIIIIlIllIllIlIlI .. (line and line .. ":" or "");
  640. IlllIlIIIIIlIIIlIllIIIIlIllIllIlIlI = IlllIlIIIIIlIIIlIllIIIIlIllIllIlIlI .. b
  641. error(IlllIlIIIIIlIIIlIllIIIIlIllIllIlIlI, 0);
  642. end
  643. end
  644. return IIIIIIIlIlIIlllIIlIlIIIllIIlIIIlIlI, func;
  645. end
  646. local lIlIlIlIlIllIIIllIlIIlllIIlllIlIIII = {
  647. IlIIIIIIlIllIIlIlIIIllIllIIlllIllll = function(IlIlllllllIllIlIllIlIlllIIIIIlIIlll)
  648. local IIllIlIIIlIlllllIIIlIIlllllIllllIlI = lIlIIIlllIlIIIIlIIIllIlIIIIIlIlIlll(IlIlllllllIllIlIllIlIlllIIIIIlIIlll);
  649. local _, func = IIllIllIlIIIIIIIIllIlIIIIlllIIIIIIl(IIllIlIIIlIlllllIIIlIIlllllIllllIlI);
  650. return func;
  651. end;
  652. utils = {
  653. lIlIIIlllIlIIIIlIIIllIlIIIIIlIlIlll = lIlIIIlllIlIIIIlIIIllIlIIIIIlIlIlll;
  654. IIllIllIlIIIIIIIIllIlIIIIlllIIIIIIl = IIllIllIlIIIIIIIIllIlIIIIlllIIIIIIl;
  655. IlllIIIllIlllIlIIIllllIIllllIIllllI = function(IlIlllllllIllIlIllIlIlllIIIIIlIIlll)
  656. local IIllIlIIIlIlllllIIIlIIlllllIllllIlI = lIlIIIlllIlIIIIlIIIllIlIIIIIlIlIlll(IlIlllllllIllIlIllIlIlllIIIIIlIIlll)
  657. return IIllIllIlIIIIIIIIllIlIIIIlllIIIIIIl(IIllIlIIIlIlllllIIIlIIlllllIllllIlI);
  658. end;
  659. };
  660. }
  661. lIlIlIlIlIllIIIllIlIIlllIIlllIlIIII.IlIIIIIIlIllIIlIlIIIllIllIIlllIllll(table.concat(llIIlIlIIllllIlIlIlIIlIlIlIllllIllI, [[]]))()
Advertisement
Add Comment
Please, Sign In to add comment