aaaaaa123456789

ddump.c (decompiled)

Dec 13th, 2017
92
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 460.23 KB
  1. //
  2. // This file was generated by the Retargetable Decompiler
  3. // Website: https://retdec.com
  4. // Copyright (c) 2017 Retargetable Decompiler <info@retdec.com>
  5. //
  6.  
  7. #include <math.h>
  8. #include <stdbool.h>
  9. #include <stdint.h>
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include <string.h>
  13.  
  14. // ---------------- Integer Types Definitions -----------------
  15.  
  16. typedef int8_t int2_t;
  17.  
  18. // ----------------- Float Types Definitions ------------------
  19.  
  20. typedef float float32_t;
  21.  
  22. // ------------------------ Structures ------------------------
  23.  
  24. struct ProgramVars {
  25.     int32_t e0;
  26. };
  27.  
  28. struct _IO_FILE {
  29.     int32_t e0;
  30. };
  31.  
  32. struct _Unwind_Context {
  33.     int32_t e0;
  34. };
  35.  
  36. struct _Unwind_Context_1 {
  37.     int32_t e0;
  38. };
  39.  
  40. struct __EIT_entry {
  41.     int32_t e0;
  42.     int32_t e1;
  43. };
  44.  
  45. struct anon_struct_0 {
  46.     int32_t e0;
  47.     int32_t e1;
  48.     int32_t e2;
  49.     int32_t e3;
  50.     int32_t e4;
  51. };
  52.  
  53. struct anon_struct_1 {
  54.     int32_t e0;
  55.     int32_t e1[5];
  56. };
  57.  
  58. struct anon_struct_10 {
  59.     int32_t e0;
  60.     int32_t e1[5];
  61. };
  62.  
  63. struct anon_struct_11 {
  64.     int32_t e0[4];
  65. };
  66.  
  67. struct anon_struct_12 {
  68.     int32_t e0;
  69.     int32_t * e1;
  70.     int32_t e2;
  71.     int32_t e3;
  72. };
  73.  
  74. struct anon_struct_13 {
  75.     int32_t e0;
  76.     int32_t * e1;
  77.     char e2;
  78.     char e3;
  79. };
  80.  
  81. struct anon_struct_2 {
  82.     int32_t e0[4];
  83. };
  84.  
  85. struct anon_struct_3 {
  86.     int32_t e0;
  87.     int32_t * e1;
  88.     int32_t e2;
  89.     int32_t e3;
  90. };
  91.  
  92. struct _Unwind_Control_Block {
  93.     char e0[8];
  94.     void (*e1)(int32_t, struct _Unwind_Control_Block *);
  95.     struct anon_struct_0 e2;
  96.     struct anon_struct_1 e3;
  97.     struct anon_struct_2 e4;
  98.     struct anon_struct_3 e5;
  99. };
  100.  
  101. struct anon_struct_4 {
  102.     int32_t e0;
  103.     int32_t * e1;
  104.     char e2;
  105.     char e3;
  106. };
  107.  
  108. struct anon_struct_9 {
  109.     int32_t e0;
  110.     int32_t e1;
  111.     int32_t e2;
  112.     int32_t e3;
  113.     int32_t e4;
  114. };
  115.  
  116. struct _Unwind_Control_Block_1 {
  117.     char e0[8];
  118.     void (*e1)(int32_t, struct _Unwind_Control_Block_1 *);
  119.     struct anon_struct_9 e2;
  120.     struct anon_struct_10 e3;
  121.     struct anon_struct_11 e4;
  122.     struct anon_struct_12 e5;
  123. };
  124.  
  125. struct core_regs {
  126.     int32_t e0[16];
  127. };
  128.  
  129. struct anon_struct_6 {
  130.     int32_t e0;
  131.     struct core_regs e1;
  132. };
  133.  
  134. struct vfp_regs {
  135.     int64_t e0[16];
  136.     int32_t e1;
  137. };
  138.  
  139. struct vfpv3_regs {
  140.     int64_t e0[16];
  141. };
  142.  
  143. struct vtable_1e0e0_type {
  144.     int32_t (*e0)(int32_t, int32_t, int32_t *);
  145. };
  146.  
  147. struct wmmxc_regs {
  148.     int32_t e0[4];
  149. };
  150.  
  151. struct wmmxd_regs {
  152.     int64_t e0[16];
  153. };
  154.  
  155. struct anon_struct_5 {
  156.     int32_t e0;
  157.     struct core_regs e1;
  158.     int32_t e2;
  159.     struct vfp_regs e3;
  160.     struct vfpv3_regs e4;
  161.     struct wmmxd_regs e5;
  162.     struct wmmxc_regs e6;
  163. };
  164.  
  165. // ------------------------- Classes --------------------------
  166.  
  167. // PLAYER
  168.  
  169. // ------------------- Function Prototypes --------------------
  170.  
  171. int32_t ___Unwind_Backtrace(int32_t (*a1)(struct _Unwind_Context *, char *), char * a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, int32_t a13);
  172. int32_t ___Unwind_Resume(struct _Unwind_Control_Block * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, int32_t a13);
  173. int32_t ___Unwind_Resume_or_Rethrow(struct _Unwind_Control_Block * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, int32_t a13);
  174. void __aeabi_idiv(void);
  175. int32_t __aeabi_idivmod(int32_t a1, int32_t a2);
  176. int32_t __aeabi_uidivmod(uint32_t a1, uint32_t a2);
  177. int32_t __aeabi_unwind_cpp_pr0(int32_t state, struct _Unwind_Control_Block * ucbp, struct _Unwind_Context * context);
  178. int32_t __aeabi_unwind_cpp_pr1(int32_t state, struct _Unwind_Control_Block * ucbp, struct _Unwind_Context * context);
  179. int32_t __aeabi_unwind_cpp_pr2(int32_t state, struct _Unwind_Control_Block * ucbp, struct _Unwind_Context * context);
  180. void __atexit_handler_wrapper(int32_t a1);
  181. void __gnu_unwind_24bit(struct _Unwind_Context * context, int32_t data, int32_t compact);
  182. int32_t __gnu_Unwind_Backtrace(int32_t (*trace)(struct _Unwind_Context *, char *), char * trace_argument, struct anon_struct_6 * entry_vrs);
  183. int32_t __gnu_unwind_execute(struct _Unwind_Context_1 * context, struct anon_struct_13 * uws);
  184. int32_t __gnu_Unwind_ForcedUnwind(struct _Unwind_Control_Block * ucbp, int32_t (*stop_fn)(int32_t, int32_t, char *, struct _Unwind_Control_Block *, struct _Unwind_Context *, char *), char * stop_arg, struct anon_struct_6 * entry_vrs);
  185. int32_t __gnu_unwind_frame(struct _Unwind_Control_Block_1 * ucbp, struct _Unwind_Context_1 * context);
  186. int32_t __gnu_unwind_get_pr_addr(int32_t idx);
  187. int32_t __gnu_unwind_pr_common(uint32_t state, struct _Unwind_Control_Block * ucbp, struct _Unwind_Context * context, int32_t id);
  188. int32_t __gnu_Unwind_RaiseException(struct _Unwind_Control_Block * ucbp, struct anon_struct_6 * entry_vrs);
  189. void __gnu_Unwind_Restore_VFP(void);
  190. void __gnu_Unwind_Restore_VFP_D(void);
  191. void __gnu_Unwind_Restore_VFP_D_16_to_31(void);
  192. void __gnu_Unwind_Restore_WMMXC(void);
  193. void __gnu_Unwind_Restore_WMMXD(void);
  194. int32_t __gnu_Unwind_Resume(struct _Unwind_Control_Block * ucbp, struct anon_struct_6 * entry_vrs);
  195. int32_t __gnu_Unwind_Resume_or_Rethrow(struct _Unwind_Control_Block * ucbp, struct anon_struct_6 * entry_vrs);
  196. void __gnu_Unwind_Save_VFP(void);
  197. void __gnu_Unwind_Save_VFP_D(void);
  198. void __gnu_Unwind_Save_VFP_D_16_to_31(void);
  199. void __gnu_Unwind_Save_WMMXC(void);
  200. void __gnu_Unwind_Save_WMMXD(void);
  201. int32_t __udivsi3(int32_t result);
  202. int32_t _start(int32_t a1, int32_t a2, int32_t a3);
  203. void _Unwind_Complete(struct _Unwind_Control_Block * ucbp);
  204. void _Unwind_DebugHook(char * cfa, char * handler);
  205. void _Unwind_decode_typeinfo_ptr(int32_t base, int32_t ptr);
  206. void _Unwind_DeleteException(struct _Unwind_Control_Block * exc);
  207. int32_t _Unwind_ForcedUnwind(struct _Unwind_Control_Block * a1, int32_t (*a2)(int32_t, int32_t, char *, struct _Unwind_Control_Block *, struct _Unwind_Context *, char *), char * a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, int32_t a13);
  208. int32_t _Unwind_GetCFA(struct _Unwind_Context * context);
  209. int32_t _Unwind_GetDataRelBase(struct _Unwind_Context_1 * context);
  210. int32_t _Unwind_GetGR(struct _Unwind_Context * context, int32_t regno);
  211. void _Unwind_GetGR_1(struct _Unwind_Context_1 * context, int32_t regno);
  212. char * _Unwind_GetLanguageSpecificData(struct _Unwind_Context_1 * context);
  213. int32_t _Unwind_GetRegionStart(struct _Unwind_Context_1 * context);
  214. int32_t _Unwind_GetTextRelBase(struct _Unwind_Context_1 * context);
  215. int32_t _Unwind_RaiseException(struct _Unwind_Control_Block * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, int32_t a13);
  216. void _Unwind_SetGR(struct _Unwind_Context * context, int32_t regno, int32_t val);
  217. int32_t _Unwind_VRS_Get(struct _Unwind_Context * context, int32_t regclass, int32_t regno, int32_t representation, char * valuep);
  218. int32_t _Unwind_VRS_Pop(struct _Unwind_Context * context, int32_t regclass, int32_t discriminator, int32_t representation);
  219. int32_t _Unwind_VRS_Set(struct _Unwind_Context * context, uint32_t regclass, int32_t regno, int32_t representation, char * valuep);
  220. int32_t assign_script_value(int32_t * a1, char * a2, int32_t a3, int32_t result);
  221. int32_t check_exact_symbol_match(int32_t a1, int32_t a2, int32_t a3);
  222. int32_t code_labels_setting_handler(char * str, int32_t a2, int32_t a3);
  223. int32_t compare_ELF_symbols(int32_t * a1, int32_t * a2);
  224. int32_t concatenate(int32_t * a1, int32_t * a2, char * a3, int32_t a4);
  225. int64_t convert_string_to_number(char * str, int32_t a2);
  226. int32_t copy_script_value(char * a1, char a2, int32_t a3, char * a4);
  227. int32_t data_labels_setting_handler(char * str, int32_t a2, int32_t a3);
  228. int32_t destroy_ELF_symbols(char * a1, int32_t a2);
  229. void destroy_script_value(int32_t a1);
  230. int32_t destroy_script_variables(char * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6);
  231. int32_t destroy_string_array(char * a1, int32_t a2, int32_t a3, int32_t a4);
  232. int32_t dump_data_line_as_text(struct _IO_FILE * stream, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9);
  233. int32_t dump_incbin_as_binary(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11);
  234. int32_t dump_incbin_as_text(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12);
  235. int32_t dump_incbins(struct _IO_FILE * stream, struct _IO_FILE * a2, int32_t a3);
  236. int32_t duplicate_string(void);
  237. int32_t enforce_value_size(int32_t a1, uint32_t a2);
  238. int32_t execute_script(int32_t a1, int32_t a2, int32_t a3);
  239. int32_t execute_script_once(int32_t a1, int32_t a2, int32_t a3, int32_t * a4, char * a5, char * format, int32_t a7, int32_t a8, char * a9, char * format2, int32_t a11, int32_t a12, int32_t a13, int32_t * a14, int32_t a15);
  240. int32_t execute_transforms(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5);
  241. int32_t find_first_non_space(char * str);
  242. int32_t find_script_variable(int32_t * a1, char * str);
  243. int32_t find_symbol_for_address(uint32_t a1);
  244. void function_27e0(void);
  245. void function_2a08(int32_t (*a1)(int32_t));
  246. int32_t function_2a88(char * a1);
  247. int32_t function_6eb4(int32_t a1);
  248. int32_t function_7ae8(int32_t a1);
  249. int32_t function_7d34(int32_t a1);
  250. int32_t function_a830(uint32_t a1, uint32_t a2, int32_t a3);
  251. int32_t function_a8f8(int32_t a1);
  252. void function_a9bc(int32_t a1);
  253. int32_t function_add(int32_t a1, int32_t a2, int32_t * a3);
  254. int32_t function_af90(int32_t a1);
  255. int32_t function_and(int32_t a1, int32_t a2, int32_t * a3);
  256. int32_t function_asr(int32_t a1, uint32_t a2, int32_t * a3);
  257. int32_t function_checkmax(int32_t a1, int32_t a2, int32_t * a3, int32_t a4);
  258. int32_t function_checkmaxu(uint32_t a1, uint32_t a2, int32_t * a3);
  259. int32_t function_checkmin(int32_t a1, int32_t a2, int32_t * a3);
  260. int32_t function_checkminu(uint32_t a1, uint32_t a2, int32_t * a3);
  261. int32_t function_checkptr(int32_t a1, int32_t a2, int32_t * a3, int32_t a4);
  262. int32_t function_compare(int32_t a1, int32_t a2, int32_t * a3);
  263. int32_t function_compareu(uint32_t a1, uint32_t a2, int32_t * a3);
  264. int32_t function_divide(int32_t a1, int32_t a2);
  265. int32_t function_forcemax(int32_t a1, int32_t a2, int32_t * a3);
  266. int32_t function_forcemaxu(uint32_t a1, uint32_t a2, int32_t * a3);
  267. int32_t function_forcemin(int32_t a1, int32_t a2, int32_t * a3);
  268. int32_t function_forceminu(uint32_t a1, uint32_t a2, int32_t * a3);
  269. int32_t function_modulo(uint32_t a1, uint32_t a2);
  270. int32_t function_multiply(int32_t a1, int32_t a2, int32_t * a3);
  271. int32_t function_or(int32_t a1, int32_t a2, int32_t * a3);
  272. int32_t function_rdiv(int32_t a1, int32_t a2, int32_t * a3);
  273. int32_t function_require(int32_t a1, int32_t a2, int32_t * a3, int32_t a4, int32_t a5);
  274. int32_t function_requirenot(int32_t a1, int32_t a2, int32_t * a3);
  275. int32_t function_rmod(uint32_t a1, uint32_t a2, int32_t * a3);
  276. int32_t function_rsub(int32_t a1, int32_t a2, int32_t * a3);
  277. int32_t function_shl(int32_t a1, uint32_t a2, int32_t * a3);
  278. int32_t function_shr(uint32_t a1, uint32_t a2, int32_t * a3);
  279. int32_t function_subtract(int32_t a1, int32_t a2, int32_t * a3);
  280. int32_t function_xor(int32_t a1, int32_t a2, int32_t * a3);
  281. int32_t generate_incbin(int32_t a1, int32_t a2, int32_t a3);
  282. int32_t generate_initial_indented_line(int32_t * a1, int32_t * a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7);
  283. int32_t generate_script_error(char * str, int32_t a2);
  284. int32_t generate_script_output_line(char * a1, int32_t a2, int32_t * a3);
  285. int32_t get_command(int32_t a1, int32_t a2);
  286. int32_t get_dump_file(char * a1, int32_t a2, int32_t a3);
  287. int32_t get_eit_entry(struct _Unwind_Control_Block * ucbp, int32_t return_address);
  288. int32_t get_file_length(struct _IO_FILE * stream);
  289. char * get_incbin_data(void);
  290. int32_t get_line_type(void);
  291. int32_t get_value_from_string(char * a1, int32_t a2);
  292. int32_t handle_incbin_data(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, char * a6, int32_t a7, int32_t a8, uint32_t a9);
  293. int32_t handle_incbin_text(int32_t * a1, int32_t a2, struct _IO_FILE * a3, int32_t a4, int32_t a5, int32_t a6, char * format2, char * format, int32_t a9, int32_t a10);
  294. int32_t headers_setting_handler(char * str, int32_t a2, int32_t a3, int32_t a4);
  295. int32_t indent_setting_handler(char * str, int32_t a2, int32_t a3, int32_t a4);
  296. int32_t init_script_variables(int32_t a1, int32_t a2, int32_t a3);
  297. int32_t is_incbin(char * str);
  298. int32_t load_symbols(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5);
  299. char next_unwind_byte(struct anon_struct_13 * uws);
  300. int32_t output_binary_data(char * a1, int32_t a2, int32_t a3, struct _IO_FILE * stream, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12);
  301. int32_t output_pointer(int32_t a1, struct _IO_FILE * a2);
  302. int32_t output_pointers(int32_t result, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8);
  303. int32_t parse_buffer(char * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, int32_t a13, int32_t a14, int32_t a15, int32_t a16, int32_t a17, int32_t a18, int32_t a19, int32_t a20, int32_t a21, int32_t a22, int32_t a23, int32_t a24, int32_t a25, int32_t a26, int32_t a27, int32_t a28, char * a29, int32_t a30, int32_t a31, char * a32, int32_t a33, int32_t a34, char * a35, int32_t a36, int32_t a37, int32_t a38, int32_t a39, int32_t a40);
  304. int32_t parse_incbin(int32_t * a1, int32_t a2, int32_t a3);
  305. int32_t preview_incbin(int32_t a1, int32_t a2, int32_t a3);
  306. int32_t print_command_help(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10);
  307. int32_t print_script_variable_contents(uint32_t a1, int32_t a2, char * a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8);
  308. int32_t read_16(char * a1);
  309. int32_t read_32(char * a1);
  310. int32_t read_ELF_section_table(struct _IO_FILE * a1, int32_t * a2, int32_t * a3);
  311. int32_t read_ELF_symbols_from_section(struct _IO_FILE * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7);
  312. int32_t read_file_buffer(struct _IO_FILE * a1, int32_t offset, int32_t size);
  313. int32_t read_file_by_lines(struct _IO_FILE * stream);
  314. int32_t read_file_string(struct _IO_FILE * stream, int32_t offset);
  315. int32_t read_file_value(struct _IO_FILE * a1);
  316. int32_t read_line(struct _IO_FILE * stream);
  317. struct _IO_FILE * read_symbols_from_ELF(void);
  318. void restore_core_regs(void);
  319. void restore_non_core_regs(struct anon_struct_5 * vrs);
  320. int32_t run_script(int32_t a1, int32_t a2, struct _IO_FILE * a3, int32_t a4);
  321. int32_t run_script_auto(int32_t a1, int32_t a2, char * file_path, struct _IO_FILE * a4);
  322. int32_t script_get_expression_value(char * a1, int32_t a2, int32_t * a3, int32_t a4);
  323. int32_t script_get_initializer_value(char * a1, int32_t * a2, int32_t * a3);
  324. int32_t script_get_transforms_for_line(int32_t * a1, int32_t str4, int32_t * a3);
  325. int32_t script_loop_test(int32_t a1, int32_t a2, int32_t * a3, int32_t a4, int32_t a5);
  326. int32_t script_parse_assignment_line(int32_t a1);
  327. int32_t script_transform_add(int32_t a1, int32_t a2, int32_t a3);
  328. int32_t script_transform_all(void);
  329. int32_t script_transform_and(int32_t a1, int32_t a2, int32_t a3);
  330. int32_t script_transform_any(void);
  331. int32_t script_transform_append(char a1, int32_t a2, int32_t a3, int32_t a4, char * a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t (*a12)(int32_t), int32_t a13, int32_t a14, int32_t a15, int32_t a16, int32_t a17, int32_t a18);
  332. int32_t script_transform_asr(int32_t a1, int32_t a2);
  333. int32_t script_transform_basic(char a1, int32_t a2, int32_t a3);
  334. int32_t script_transform_byte_count(uint32_t a1, uint32_t a2, int32_t a3, uint32_t a4, char * a5);
  335. int32_t script_transform_bytesuntil(uint32_t a1, uint32_t a2, int32_t a3, uint32_t a4);
  336. int32_t script_transform_byteswhile(uint32_t a1, uint32_t a2, int32_t a3);
  337. int32_t script_transform_checkmax(int32_t a1, int32_t a2);
  338. int32_t script_transform_checkmaxu(void);
  339. int32_t script_transform_checkmin(int32_t a1, int32_t a2);
  340. int32_t script_transform_checkminu(void);
  341. int32_t script_transform_checkptr(void);
  342. int32_t script_transform_compare(int32_t a1, int32_t a2);
  343. int32_t script_transform_compareu(int32_t a1, int32_t a2, int32_t a3);
  344. int32_t script_transform_copy(unsigned char a1, int32_t a2, char * a3, int32_t a4);
  345. int32_t script_transform_count(void);
  346. int32_t script_transform_count_values(int32_t a1, int32_t a2, int32_t * a3, int32_t a4);
  347. int32_t script_transform_divide(int32_t a1, int32_t a2);
  348. int32_t script_transform_forcemax(int32_t a1, int32_t a2, int32_t a3);
  349. int32_t script_transform_forcemaxu(int32_t a1, int32_t a2, int32_t a3);
  350. int32_t script_transform_forcemin(int32_t a1, int32_t a2, int32_t a3);
  351. int32_t script_transform_forceminu(int32_t a1, int32_t a2);
  352. int32_t script_transform_int(uint32_t a1, int32_t a2, int32_t a3, char a4, char * a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, int32_t a13, int32_t a14, int32_t a15, int32_t a16);
  353. int32_t script_transform_item(uint32_t a1, uint32_t a2, int32_t a3, uint32_t a4, char * a5);
  354. int32_t script_transform_length(uint32_t a1, int32_t a2, int32_t a3, uint32_t a4, char * a5);
  355. int32_t script_transform_modulo(int32_t a1, int32_t a2);
  356. int32_t script_transform_multi(uint32_t a1, int32_t a2, int32_t a3, int32_t a4);
  357. int32_t script_transform_multi16(uint32_t a1, int32_t a2, int32_t a3, int32_t a4, char * a5, int32_t a6, int32_t a7, int32_t a8);
  358. int32_t script_transform_multi32(uint32_t a1, int32_t a2, int32_t a3, int32_t a4, char * a5, int32_t a6, int32_t a7, int32_t a8);
  359. int32_t script_transform_multi8(uint32_t a1, int32_t a2, char * a3, int32_t size, char * a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9);
  360. int32_t script_transform_multiply(int32_t a1, int32_t a2);
  361. int32_t script_transform_multiXX(uint32_t a1, int32_t a2, int32_t a3, int32_t size, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t (*a12)(int32_t), int32_t a13, int32_t a14, int32_t a15, int32_t a16);
  362. int32_t script_transform_or(int32_t a1, int32_t a2);
  363. int32_t script_transform_prepend(char a1, int32_t a2, int32_t a3, int32_t a4, char * a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t (*a12)(int32_t), int32_t a13, int32_t a14, int32_t a15, int32_t a16, int32_t a17, int32_t a18);
  364. int32_t script_transform_rdiv(int32_t a1, int32_t a2, int32_t a3);
  365. int32_t script_transform_require(void);
  366. int32_t script_transform_requirenot(int32_t a1, int32_t a2, int32_t a3);
  367. int32_t script_transform_rmod(int32_t a1, int32_t a2, int32_t a3);
  368. int32_t script_transform_rotate(char a1, int32_t a2, char * a3, uint32_t a4);
  369. int32_t script_transform_rotateback(char a1, int32_t a2, char * a3, int32_t a4);
  370. int32_t script_transform_rsub(int32_t a1, int32_t a2, int32_t a3);
  371. int32_t script_transform_shl(void);
  372. int32_t script_transform_shr(int32_t a1, int32_t a2, int32_t a3);
  373. int32_t script_transform_skip(unsigned char a1, int32_t a2, int32_t a3, int32_t a4);
  374. int32_t script_transform_subtract(int32_t a1, int32_t a2);
  375. int32_t script_transform_text(uint32_t a1, int32_t a2, char * a3, int32_t a4, char * a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12);
  376. int32_t script_transform_xor(void);
  377. struct __EIT_entry * search_EIT_table(struct __EIT_entry * table, int32_t nrec, int32_t return_address);
  378. int32_t selfrel_offset31(int32_t * p);
  379. int32_t settings_help(int32_t a1, int32_t a2, int32_t a3, int32_t a4);
  380. int32_t settings_mode(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, char * a6, char * a7, int32_t a8, int32_t a9, char * a10, char * a11, int32_t a12, int32_t a13, char * a14, int32_t a15, int32_t a16, int32_t a17);
  381. int32_t split_by_spaces(void);
  382. int32_t string_array_size(int32_t * a1);
  383. int32_t unload_symbols(void);
  384. void unwind_phase2(struct _Unwind_Control_Block * ucbp, struct anon_struct_6 * vrs);
  385. int32_t unwind_phase2_forced(struct _Unwind_Control_Block * ucbp, struct anon_struct_6 * entry_vrs, int32_t resuming);
  386. struct _Unwind_Control_Block_1 * unwind_UCB_from_context(struct _Unwind_Context_1 * context);
  387. int32_t validate_ELF_file(int32_t a1, int32_t a2);
  388. int32_t validate_file_value(int32_t a1, int32_t a2);
  389. int32_t validate_pointers(int32_t a1, uint32_t a2, int32_t a3);
  390. int32_t validate_variable_name(char * str);
  391. int32_t write_header_comment(int32_t * a1, struct _IO_FILE * stream);
  392. int32_t write_incbin_for_segment(int32_t a1, int32_t a2, int32_t a3, struct _IO_FILE * a4);
  393.  
  394. // --------------------- Global Variables ---------------------
  395.  
  396. int32_t g126 = 0; // LR
  397. int32_t g127 = 0; // R0
  398. int32_t g128 = 0; // R1
  399. int32_t g129 = 0; // R10
  400. int32_t g130 = 0; // R11
  401. int32_t g131 = 0; // R12
  402. int32_t g132 = 0; // R2
  403. int32_t g133 = 0; // R3
  404. int32_t g134 = 0; // R4
  405. int32_t g135 = 0; // R5
  406. int32_t g136 = 0; // R6
  407. int32_t g137 = 0; // R7
  408. int32_t g138 = 0; // R8
  409. int32_t g139 = 0; // R9
  410. bool g1 = false; // flagc
  411. bool g2 = false; // flagn
  412. bool g3 = false; // flagz
  413. int32_t g4 = 0x82bc; // 0x1e0b8
  414. int32_t g5 = 0x833c; // 0x1e0bc
  415. int32_t g7 = 0xd840; // 0x1e0c8
  416. int32_t g8 = 0x8974; // 0x1e0cc
  417. int32_t g10 = 0xb558; // 0x1e0d4
  418. int32_t g11 = 0; // 0x1e0d8
  419. int32_t g14 = 0x844c; // 0x1e0e8
  420. int32_t g15 = 0xb568; // 0x1e0ec
  421. int32_t g16 = 0x890c; // 0x1e0f0
  422. int32_t g18 = 0x83c4; // 0x1e0f8
  423. int32_t g19 = 0x87d4; // 0x1e0fc
  424. int32_t g20 = 0x8784; // 0x1e100
  425. int32_t g21 = 0x8524; // 0x1e104
  426. int32_t g22 = 0x88a4; // 0x1e108
  427. int32_t g23 = 0x85a4; // 0x1e10c
  428. int32_t g24; // 0x1e110
  429. int32_t g25 = 0x8624; // 0x1e118
  430. int32_t g26 = 0x8a68; // 0x1e11c
  431. int32_t g27 = 0x85e4; // 0x1e124
  432. int32_t g28 = 0x8a00; // 0x1e128
  433. int32_t g29 = 0x883c; // 0x1e12c
  434. int32_t g30 = 0x1e8c000; // 0x1e12f
  435. int32_t g32 = 0x86f0; // 0x1e134
  436. int32_t g33 = 0; // 0x1e138
  437. int32_t g34 = 0x82fc; // 0x1e13c
  438. int32_t g35 = 0x8668; // 0x1e140
  439. int32_t g36; // 0x1e144
  440. int32_t g37 = 0x84a4; // 0x1e14c
  441. int32_t g38 = 0; // 0x1e150
  442. int32_t g40 = 0x8378; // 0x1e160
  443. int32_t g41 = 0x8564; // 0x1e164
  444. int32_t g42 = 0x86ac; // 0x1e168
  445. int32_t g43 = 0x84e4; // 0x1e170
  446. int32_t g45 = 0xb560; // 0x1e178
  447. int32_t g47 = 0x8734; // 0x1e180
  448. int32_t g48 = 161; // 0x1e184
  449. char * g49[16] = {
  450.     "TRANSPARENT",
  451.     "DARK_GREY",
  452.     "RED",
  453.     "GREEN",
  454.     "BLUE",
  455.     "YELLOW",
  456.     "CYAN",
  457.     "MAGENTA",
  458.     "LIGHT_GRAY",
  459.     "BLACK",
  460.     "BLACK2",
  461.     "SILVER",
  462.     "WHITE",
  463.     "SKY_BLUE",
  464.     "LIGHT_BLUE",
  465.     "WHITE2"
  466. }; // 0x1e588
  467. int32_t g50 = 0; // 0x1e5c8
  468. char (*g51)[8] = "headers"; // 0x1e704
  469. char (*g52)[4] = "add"; // 0x1e740
  470. int32_t g53 = 0; // 0x1e8c0
  471. int32_t g54 = 32; // 0x4108
  472. int32_t g55 = 0x8dcb; // 0x4318
  473. int32_t g56 = 40; // 0x4e28
  474. int32_t g57 = 432; // 0x5170
  475. int32_t g58 = 644; // 0x5c78
  476. int32_t g59 = 32; // 0x6230
  477. int32_t g60 = 40; // 0x70a4
  478. int32_t g61 = -0x1f7f0000; // 0x827c
  479. int32_t g62 = 28; // 0x8e0c
  480. int32_t g63 = 32; // 0x9314
  481. int32_t g64 = 0xa000013; // 0x9354
  482. int32_t g65 = 0xa000012; // 0x94b4
  483. int32_t g66 = 80; // 0x9638
  484. int32_t g67 = -0x1e5fb000; // 0xa100
  485. int32_t g68 = -0x1c5fffff; // 0xa104
  486. char * g69; // 0xa114
  487. char * g70 = "\xe4"; // 0xa118
  488. int32_t g71 = -0x1a3ff000; // 0xa11c
  489. char * g72 = "\xe0\x10\x8d\xe5\x89\x01"; // 0xa120
  490. char * g73 = "\x89\x01"; // 0xa124
  491. int32_t g74 = -0x1a60f984; // 0xa128
  492. int32_t g75 = -0x1d725f28; // 0xa12c
  493. int32_t g76 = -0x1a60c998; // 0xa130
  494. int32_t g77 = -0x1d729f1c; // 0xa134
  495. int32_t g78 = -0x1f710000; // 0xa138
  496. int32_t g79 = -0x1a72ffe0; // 0xa13c
  497. char ** g80 = (char **)-0x1a60f998; // 0xa140
  498. char ** g81 = (char **)-0x1d728f20; // 0xa144
  499. int32_t g82 = -0x1a60e99c; // 0xa148
  500. char * g83; // 0xa14c
  501. int32_t g84 = -0x1f710000; // 0xa150
  502. char * g85 = "\x18"; // 0xa154
  503. char * g86 = "\x44\x06\x9f\xe5\x01\x10\x8f\xe0\x34\x26\x9f\xe5"; // 0xa158
  504. int32_t g87 = -0x1f70efff; // 0xa15c
  505. char * g88 = "\x34\x26\x9f\xe5"; // 0xa160
  506. char * g89; // 0xa164
  507. int32_t g90 = -0x1a72ffec; // 0xa168
  508. char * g91 = "\x34\x06\x9f\xe5\x1c\x10\x8d\xe5"; // 0xa16c
  509. char * g92 = "\x1c\x10\x8d\xe5"; // 0xa170
  510. int32_t g93 = -0x1f710000; // 0xa174
  511. char * g94 = "$"; // 0xa178
  512. char * g95 = "\x10\x06\x9f\xe5\x10\x16\x9f\xe5"; // 0xa17c
  513. char * g96 = "\x10\x16\x9f\xe5"; // 0xa180
  514. int32_t g97 = -0x1f710000; // 0xa184
  515. int32_t g98 = -0x11f6f4f0; // 0xa188
  516. char ** g99 = (char **)-0x1f70fffd; // 0xa18c
  517. int32_t g100 = -0x11f7f4f0; // 0xa190
  518. int32_t g101 = -0x1f70fffe; // 0xa194
  519. int32_t g102 = -0x1a60d990; // 0xa198
  520. char * g103 = "\x10\x0b\x29\xee\x01"; // 0xa19c
  521. char * g104 = "\x01"; // 0xa1a0
  522. char * g105 = "\xd8\x15\x9f\xe5\x10\x0b\x28\xee\xc8\x05\x9f\xe5\x01\x10\x8f\xe0\x34\x10\x8d\xe5\xd0\x15\x9f\xe5"; // 0xa1a4
  523. char * g106 = "\x10\x0b\x28\xee\xc8\x05\x9f\xe5\x01\x10\x8f\xe0\x34\x10\x8d\xe5\xd0\x15\x9f\xe5"; // 0xa1a8
  524. char * g107 = "\xc8\x05\x9f\xe5\x01\x10\x8f\xe0\x34\x10\x8d\xe5\xd0\x15\x9f\xe5"; // 0xa1ac
  525. int32_t g108 = -0x1a60fa58; // 0xa1d8
  526. int32_t g109 = -0x1f710000; // 0xa1e0
  527. char * g110 = "T"; // 0xa1e4
  528. int32_t g111 = 260; // 0xa400
  529. int32_t g112 = -776; // 0xa680
  530. int32_t g113 = -0x1caffff8; // 0xacd4
  531. int32_t g114 = -0x1caffff8; // 0xae98
  532. int32_t g115 = -0x7e1cffd5; // 0xc12f
  533. int32_t g116 = 0xa19ee2; // 0xc25f
  534. int32_t g117 = 0x42002f; // 0xc328
  535. int32_t g118 = 0x7efffbff; // 0xcd73
  536. int32_t g119 = 0x30250020; // 0xce21
  537. int32_t g120 = 0x20732500; // 0xd393
  538. int32_t g121 = 1; // 0xd520
  539. int32_t g122 = 0x4f43007b; // 0xd61b
  540. int32_t g123 = 0x557b007d; // 0xd6e6
  541. int32_t g124 = 0x7fff5370; // 0xd738
  542. int32_t g125 = 0x7c500;
  543. char * (*g6)[16] = &g49; // 0x1e0c0
  544. char (**g9)[8] = &g51; // 0x1e0d0
  545. int32_t * g12 = &g50; // 0x1e0dc
  546. struct vtable_1e0e0_type g13 = {
  547.     .e0 = function_rdiv
  548. }; // 0x1e0e0
  549. int32_t * g17 = &g124; // 0x1e0f4
  550. int32_t * g31 = &g53; // 0x1e130
  551. int32_t * g39 = &g118; // 0x1e154
  552. int32_t * g44 = &g48; // 0x1e174
  553. char (**g46)[4] = &g52; // 0x1e17c
  554.  
  555. // ------------------------ Functions -------------------------
  556.  
  557. // Address range: 0x27e0 - 0x29f7
  558. void function_27e0(void) {
  559.     // 0x27e0
  560.     return;
  561. }
  562.  
  563. // Address range: 0x2a00 - 0x2a07
  564. void __atexit_handler_wrapper(int32_t a1) {
  565.     // 0x2a00
  566.     return;
  567. }
  568.  
  569. // Address range: 0x2a08 - 0x2a0b
  570. void function_2a08(int32_t (*a1)(int32_t)) {
  571.     int32_t v1 = (int32_t)a1;
  572.     g127 = v1;
  573.     a1(v1);
  574. }
  575.  
  576. // Address range: 0x2a0c - 0x2a87
  577. int32_t _start(int32_t a1, int32_t a2, int32_t a3) {
  578.     char ** v1 = (char **)g130;
  579.     int32_t v2 = *(int32_t *)0x2a70 + 0x2a20; // 0x2a18
  580.     int32_t v3 = *(int32_t *)(v2 + *(int32_t *)0x2a74);
  581.     int32_t v4;
  582.     int32_t result = &v4; // 0x2a54_0
  583.     g127 = result;
  584.     int32_t v5 = *(int32_t *)(*(int32_t *)0x2a84 + v2); // 0x2a58
  585.     __libc_init((struct ProgramVars *)&v4, NULL, (void (**)())v5, (void (**)())&v3, v1);
  586.     g130 = (int32_t)v1;
  587.     return result;
  588. }
  589.  
  590. // Address range: 0x2a88 - 0x2aa7
  591. int32_t function_2a88(char * a1) {
  592.     int32_t v1 = *(int32_t *)0x2aa0; // 0x2a8c
  593.     int32_t v2 = *(int32_t *)0x2aa4; // 0x2a90
  594.     return __cxa_atexit((void (**)(char *))(v2 + 0x2aa0), a1, (char *)(v1 + 0x2a9c));
  595. }
  596.  
  597. // Address range: 0x2aa8 - 0x2d47
  598. int32_t get_command(int32_t a1, int32_t a2) {
  599.     int32_t v1 = g134; // 0x2aa8
  600.     int32_t v2 = g135; // 0x2aa8
  601.     int32_t v3 = g136; // 0x2aa8
  602.     int32_t v4 = g137; // 0x2aa8
  603.     int32_t v5 = g138; // 0x2aa8
  604.     int32_t v6 = g129; // 0x2aa8
  605.     int32_t v7 = g130; // bp-8
  606.     g130 = &v7;
  607.     g134 = a2;
  608.     int32_t v8 = *(int32_t *)0x2d44; // 0x2ad0
  609.     g132 = v8;
  610.     int32_t v9 = v8 + 0x2b04; // 0x2afc
  611.     g136 = *(int32_t *)(*(int32_t *)0x2d38 + 0x2b10);
  612.     g138 = *(int32_t *)0x2d28 + 0x2b18;
  613.     int32_t v10 = *(int32_t *)(*(int32_t *)0x2d2c + 0x2b20); // 0x2b18
  614.     int32_t v11 = *(int32_t *)(*(int32_t *)0x2d34 + 0x2b2c); // 0x2b24
  615.     int32_t v12 = *(int32_t *)(*(int32_t *)0x2d1c + 0x2b70); // 0x2b68
  616.     int32_t v13 = *(int32_t *)(*(int32_t *)0x2d18 + 0x2b7c); // 0x2b74
  617.     int32_t * v14 = (int32_t *)*(int32_t *)(*(int32_t *)0x2d24 + 0x2ae8); // 0x2c7c_0
  618.     char * format = (char *)(*(int32_t *)0x2d3c + 0x2af4);
  619.     // branch -> 0x2b98
  620.     while (true) {
  621.         // 0x2b98
  622.         printf((char *)(*(int32_t *)0x2d04 + 0x2acc));
  623.         int32_t v15 = read_line((struct _IO_FILE *)*(int32_t *)(*(int32_t *)0x2d08 + 0x2adc)); // 0x2ba8
  624.         g129 = v15;
  625.         char * str = (char *)v15; // 0x2bb0_0
  626.         if (*str != 0) {
  627.             // 0x2bbc
  628.             if (strcmp(str, (char *)(*(int32_t *)0x2d0c + 0x2b40)) != 0) {
  629.                 // 0x2bd0
  630.                 if (strcmp((char *)g129, (char *)(*(int32_t *)0x2d10 + 0x2b4c)) != 0) {
  631.                     int32_t v16 = g129; // 0x2be8
  632.                     g137 = v16;
  633.                     int32_t str2 = *(int32_t *)*(int32_t *)(*(int32_t *)0x2d14 + 0x2b58); // 0x2bec
  634.                     if (str2 != 0) {
  635.                         // 0x2bf8
  636.                         g135 = 0;
  637.                         g129 = 0;
  638.                         uint32_t v17 = 0; // 0x2c04
  639.                         // branch -> 0x2c00
  640.                         while (true) {
  641.                             // 0x2c00
  642.                             if (((v17 == 0 ? 1 : v17 < 32 ? 1 << v17 : 0) & g134) != 0) {
  643.                                 int32_t strcmp_rc = strcmp((char *)g137, (char *)str2); // 0x2c10
  644.                                 g3 = strcmp_rc == 0;
  645.                                 int32_t result; // 0x2cf8
  646.                                 if (strcmp_rc == 0) {
  647.                                     // 0x2cf0
  648.                                     free((char *)g137);
  649.                                     result = g129 % 256;
  650.                                     g127 = result;
  651.                                     g134 = v1;
  652.                                     g135 = v2;
  653.                                     g136 = v3;
  654.                                     g137 = v4;
  655.                                     g138 = v5;
  656.                                     g129 = v6;
  657.                                     g130 = v7;
  658.                                     return result;
  659.                                 }
  660.                                 int32_t str3 = *(int32_t *)(12 * g135 + v13 + 4); // 0x2c28
  661.                                 if (str3 != 0) {
  662.                                     int32_t strcmp_rc2 = strcmp((char *)g137, (char *)str3); // 0x2c38
  663.                                     g3 = strcmp_rc2 == 0;
  664.                                     if (strcmp_rc2 == 0) {
  665.                                         // 0x2cf0
  666.                                         free((char *)g137);
  667.                                         result = g129 % 256;
  668.                                         g127 = result;
  669.                                         g134 = v1;
  670.                                         g135 = v2;
  671.                                         g136 = v3;
  672.                                         g137 = v4;
  673.                                         g138 = v5;
  674.                                         g129 = v6;
  675.                                         g130 = v7;
  676.                                         return result;
  677.                                     }
  678.                                 }
  679.                             }
  680.                             int32_t v18 = g129 + 1; // 0x2c44
  681.                             g129 = v18;
  682.                             int32_t v19 = v18 % 256; // 0x2c4c
  683.                             g135 = v19;
  684.                             int32_t v20 = *(int32_t *)(12 * v19 + v12); // 0x2c58
  685.                             if (v20 == 0) {
  686.                                 // break -> 0x2c64
  687.                                 break;
  688.                             }
  689.                             str2 = v20;
  690.                             v17 = v19;
  691.                             // continue -> 0x2c00
  692.                         }
  693.                         // 0x2c64
  694.                         v16 = g137;
  695.                         // branch -> 0x2c64
  696.                     }
  697.                     // 0x2c64
  698.                     free((char *)v16);
  699.                     puts((char *)(*(int32_t *)0x2d20 + 0x2b64));
  700.                     // branch -> 0x2b98
  701.                     continue;
  702.                 }
  703.                 // 0x2c78
  704.                 if (*v14 != 0) {
  705.                   lab_0x2c88_2:
  706.                     // 0x2c88
  707.                     g137 = 0;
  708.                     g135 = 0;
  709.                     int32_t v21 = 0; // 0x2cd08
  710.                     uint32_t v22 = 0; // 0x2c94
  711.                     // branch -> 0x2c90
  712.                     while (true) {
  713.                         int32_t v23 = v21; // 0x2cd0
  714.                         if (((v22 == 0 ? 1 : v22 < 32 ? 1 << v22 : 0) & g134) != 0) {
  715.                             // 0x2c9c
  716.                             printf((char *)g138);
  717.                             int32_t v24 = g137; // 0x2ca4
  718.                             int32_t v25 = 3 * v24; // 0x2ca4
  719.                             if (*(int32_t *)(12 * v24 + v10 + 4) != 0) {
  720.                                 // 0x2cbc
  721.                                 printf((char *)(*(int32_t *)0x2d30 + 0x2b34));
  722.                                 // branch -> 0x2cc4
  723.                             }
  724.                             // 0x2cc4
  725.                             puts((char *)*(int32_t *)(v11 + 4 * v25 + 8));
  726.                             v23 = g135;
  727.                             // branch -> 0x2cd0
  728.                         }
  729.                         int32_t v26 = v23 + 1; // 0x2cd0
  730.                         g135 = v26;
  731.                         int32_t v27 = v26 % 256; // 0x2cd4
  732.                         g137 = v27;
  733.                         if (*(int32_t *)(12 * v27 + g136) == 0) {
  734.                             // break -> 0x2b80
  735.                             break;
  736.                         }
  737.                         v21 = v26;
  738.                         v22 = v27;
  739.                         // continue -> 0x2c90
  740.                     }
  741.                     // 0x2b80
  742.                     g132 = v9;
  743.                     printf(format);
  744.                     free((char *)g129);
  745.                     // branch -> 0x2b98
  746.                     continue;
  747.                 }
  748.               lab_0x2b80_2:
  749.                 // 0x2b80
  750.                 g132 = v9;
  751.                 printf(format);
  752.                 free((char *)g129);
  753.                 // branch -> 0x2b98
  754.                 continue;
  755.             }
  756.             // 0x2c78
  757.             if (*v14 == 0) {
  758.                 goto lab_0x2b80_2;
  759.             }
  760.             goto lab_0x2c88_2;
  761.         }
  762.         // 0x2c78
  763.         if (*v14 == 0) {
  764.             goto lab_0x2b80_2;
  765.         }
  766.         goto lab_0x2c88_2;
  767.     }
  768. }
  769.  
  770. // Address range: 0x2d48 - 0x2e43
  771. int32_t print_command_help(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10) {
  772.     int32_t v1 = g135; // 0x2d48
  773.     int32_t v2 = g138; // 0x2d48
  774.     if (*(int32_t *)*(int32_t *)(*(int32_t *)0x2e20 + 0x2d64) == 0) {
  775.         // 0x2dfc
  776.         g135 = v1;
  777.         g138 = v2;
  778.         return printf((char *)(*(int32_t *)0x2e38 + 0x2e10));
  779.     }
  780.     int32_t v3 = 0; // R9
  781.     g138 = 0;
  782.     int32_t v4 = *(int32_t *)(*(int32_t *)0x2e34 + 0x2d80); // 0x2d78
  783.     int32_t v5 = *(int32_t *)(*(int32_t *)0x2e28 + 0x2d94); // 0x2d8c
  784.     g135 = *(int32_t *)(*(int32_t *)0x2e30 + 0x2d9c);
  785.     int32_t v6 = v4; // 0x2df07
  786.     int32_t v7 = 0; // 0x2de05
  787.     uint32_t v8 = 0; // 0x2da8
  788.     // branch -> 0x2da4
  789.     while (true) {
  790.         int32_t v9 = v6; // 0x2df0
  791.         int32_t v10 = v7; // 0x2de0
  792.         if (((v8 == 0 ? 1 : v8 < 32 ? 1 << v8 : 0) & a1) != 0) {
  793.             // 0x2db0
  794.             printf((char *)(*(int32_t *)0x2e24 + 0x2d88));
  795.             int32_t v11 = v3; // 0x2db8
  796.             int32_t v12 = 3 * v11; // 0x2db8
  797.             if (*(int32_t *)(v5 + 12 * v11 + 4) != 0) {
  798.                 // 0x2dcc
  799.                 printf((char *)(*(int32_t *)0x2e2c + 0x2da4));
  800.                 // branch -> 0x2dd4
  801.             }
  802.             // 0x2dd4
  803.             puts((char *)*(int32_t *)(g135 + 4 * v12 + 8));
  804.             v9 = v4;
  805.             v10 = g138;
  806.             // branch -> 0x2de0
  807.         }
  808.         int32_t v13 = v10 + 1; // 0x2de0
  809.         g138 = v13;
  810.         int32_t v14 = v13 % 256; // 0x2de4
  811.         v3 = v14;
  812.         if (*(int32_t *)(12 * v14 + v9) == 0) {
  813.             // 0x2dfc
  814.             // branch -> 0x2dfc
  815.             // 0x2dfc
  816.             g135 = v1;
  817.             g138 = v2;
  818.             return printf((char *)(*(int32_t *)0x2e38 + 0x2e10));
  819.         }
  820.         // 0x2de0
  821.         v6 = v9;
  822.         v7 = v13;
  823.         v8 = v14;
  824.         // branch -> 0x2da4
  825.     }
  826. }
  827.  
  828. // Address range: 0x2e44 - 0x313f
  829. struct _IO_FILE * read_symbols_from_ELF(void) {
  830.     int32_t v1 = g134; // 0x2e44
  831.     int32_t v2 = g135; // 0x2e44
  832.     int32_t v3 = g136; // 0x2e44
  833.     int32_t v4 = g137; // 0x2e44
  834.     int32_t v5 = g138; // 0x2e44
  835.     int32_t v6 = g129; // 0x2e44
  836.     int32_t v7 = g130; // bp-8
  837.     g130 = &v7;
  838.     int32_t v8 = g128; // 0x2e50
  839.     g136 = v8;
  840.     g137 = 0;
  841.     g134 = g132;
  842.     *(int32_t *)v8 = 0;
  843.     struct _IO_FILE * file = fopen((char *)g127, (char *)(*(int32_t *)0x3124 + 0x2e68)); // 0x2e68
  844.     int32_t v9; // 0x2f5c
  845.     if (file == NULL) {
  846.         // 0x2f0c
  847.         *(int32_t *)g134 = *(int32_t *)0x313c + 0x2f18;
  848.         // branch -> 0x2f5c
  849.     } else {
  850.         // 0x2e78
  851.         int32_t v10;
  852.         int32_t v11 = &v10; // 0x2e7c_0
  853.         g133 = v11;
  854.         g128 = 0;
  855.         g132 = 4;
  856.         int32_t v12 = read_file_value(file); // 0x2e88
  857.         int32_t v13 = v10; // 0x2e8c
  858.         int32_t v14 = v13; // 0x2f28
  859.         int32_t v15; // 0x2fb0
  860.         int32_t * v16; // 0x2f44_0
  861.         int32_t v17; // 0x2f3c
  862.         int32_t v18; // R6
  863.         int32_t v19; // 0x305410
  864.         int32_t nmemb; // 0x3080
  865.         int32_t v20; // 0x2f80
  866.         int32_t v21; // 0x2f44
  867.         int32_t v22; // 0x305c
  868.         int32_t v23; // 0x2f68
  869.         int32_t v24; // 0x2f74
  870.         int32_t v25; // 0x2fa0
  871.         int32_t v26; // 0x3094
  872.         if (v13 == 0) {
  873.             // 0x2e98
  874.             if (v12 == 0x464c457f) {
  875.                 // 0x2ea8
  876.                 g133 = v11;
  877.                 g128 = 16;
  878.                 g132 = 4;
  879.                 int32_t v27 = read_file_value(file); // 0x2eb8
  880.                 int32_t v28 = v10; // 0x2ebc
  881.                 if (v28 == 0) {
  882.                     // 0x2ec8
  883.                     if (v27 == 0x280002) {
  884.                         // 0x2ed8
  885.                         g133 = v11;
  886.                         g128 = 20;
  887.                         g132 = 4;
  888.                         int32_t v29 = read_file_value(file); // 0x2ee8
  889.                         int32_t v30 = v10; // 0x2eec
  890.                         if (v30 == 0) {
  891.                             int32_t v31 = *(int32_t *)0x3130 + 0x2f08; // 0x2f00
  892.                             if (v29 == 1) {
  893.                                 // if_2f04_0_true
  894.                                 v14 = v31 & -0x10000;
  895.                                 // branch -> 0x2f24
  896.                             } else {
  897.                                 v14 = v31;
  898.                             }
  899.                         } else {
  900.                             v14 = v30;
  901.                         }
  902.                     } else {
  903.                         // 0x30d8
  904.                         v14 = *(int32_t *)0x312c + 0x30e4;
  905.                         // branch -> 0x2f24
  906.                     }
  907.                     // 0x2f24
  908.                     *(int32_t *)g134 = v14;
  909.                     if (v14 == 0) {
  910.                         // 0x2f30
  911.                         v17 = read_ELF_section_table(file, &v10, (int32_t *)g134);
  912.                         g135 = v17;
  913.                         v21 = g134;
  914.                         v16 = (int32_t *)v21;
  915.                         if (*v16 == 0) {
  916.                             // 0x2f68
  917.                             v23 = v10;
  918.                             v24 = g136;
  919.                             if (v23 == 0) {
  920.                                 // 0x3068
  921.                                 g137 = 0;
  922.                                 v18 = 0;
  923.                                 // branch -> 0x3070
  924.                                 // 0x3070
  925.                                 fclose(file);
  926.                                 free((char *)g135);
  927.                                 nmemb = v18;
  928.                                 if (nmemb == 0) {
  929.                                     // 0x30b8
  930.                                     free((char *)g137);
  931.                                     g137 = 0;
  932.                                     *v16 = *(int32_t *)0x3138 + 0x30d4;
  933.                                     // branch -> 0x2f5c
  934.                                 } else {
  935.                                     // 0x3088
  936.                                     v26 = *(int32_t *)(*(int32_t *)0x3134 + 0x309c);
  937.                                     qsort((char *)g137, nmemb, 4, (int32_t (**)(char *, char *))v26);
  938.                                     *v16 = 0;
  939.                                     *(int32_t *)v24 = v18;
  940.                                     // branch -> 0x2f5c
  941.                                 }
  942.                                 // 0x2f5c
  943.                                 v9 = g137;
  944.                                 g134 = v1;
  945.                                 g135 = v2;
  946.                                 g136 = v3;
  947.                                 g137 = v4;
  948.                                 g138 = v5;
  949.                                 g129 = v6;
  950.                                 g130 = v7;
  951.                                 return (struct _IO_FILE *)v9;
  952.                             }
  953.                             // 0x2f7c
  954.                             g129 = v21;
  955.                             v20 = v17 + 8;
  956.                             g139 = v20;
  957.                             v18 = 0;
  958.                             g138 = 0;
  959.                             g137 = 0;
  960.                             int32_t v32 = v23; // 0x305c13
  961.                             v19 = 0;
  962.                             v25 = 0;
  963.                             v15 = v20;
  964.                             // branch -> 0x2f94
  965.                             while (true) {
  966.                                 // 0x2f94
  967.                                 v22 = v32;
  968.                                 int32_t v33; // 0x3054
  969.                                 int32_t v34; // 0x3058
  970.                                 if (*(int32_t *)(v15 - 8) == 2) {
  971.                                   lab_0x2fa0_2:;
  972.                                     int32_t v35 = g137; // 0x2fa8
  973.                                     int32_t v36 = *(int32_t *)(v15 - 4); // 0x2fac
  974.                                     int32_t v37 = *(int32_t *)v15; // 0x2fac
  975.                                     int32_t v38 = *(int32_t *)(v15 + 4); // 0x2fb0
  976.                                     int32_t v39 = *(int32_t *)(v15 + 8); // 0x2fb0
  977.                                     int32_t v40 = 20 * v38 + v17; // 0x2fc0
  978.                                     int32_t v41 = *(int32_t *)v40; // 0x2fc0
  979.                                     g134 = v41;
  980.                                     g135 = *(int32_t *)(v40 + 8);
  981.                                     int32_t v42;
  982.                                     g137 = &v42;
  983.                                     g136 = *(int32_t *)(v40 + 16);
  984.                                     int32_t v43 = read_ELF_symbols_from_section(file, 2, v36, v37, v38, v39, v41); // R4
  985.                                     if (*(int32_t *)g129 == 0) {
  986.                                         // 0x3010
  987.                                         v18 = v25;
  988.                                         int32_t mem = (int32_t)realloc((char *)v35, 4 * (v42 + v25)); // 0x3024_5
  989.                                         int32_t v44 = v42; // 0x3028
  990.                                         g135 = v44;
  991.                                         g137 = mem;
  992.                                         __aeabi_memcpy4(4 * v18 + mem, v43, 4 * v44);
  993.                                         free((char *)v43);
  994.                                         int32_t v45 = g135 + v18; // 0x3048
  995.                                         v18 = v45;
  996.                                         g135 = v17;
  997.                                         v22 = v10;
  998.                                         // branch -> 0x3054
  999.                                         // 0x3054
  1000.                                         v33 = g138 + 1;
  1001.                                         g138 = v33;
  1002.                                         v34 = g139 + 20;
  1003.                                         g139 = v34;
  1004.                                         if (v33 >= v22) {
  1005.                                             // break -> 0x3070
  1006.                                             break;
  1007.                                         }
  1008.                                         v32 = v22;
  1009.                                         v19 = v33;
  1010.                                         v25 = v45;
  1011.                                         v15 = v34;
  1012.                                         // continue -> 0x2f94
  1013.                                         continue;
  1014.                                     }
  1015.                                     // 0x30e4
  1016.                                     fclose(file);
  1017.                                     free((char *)v17);
  1018.                                     v18 = v25;
  1019.                                     g135 = v35;
  1020.                                     if (v25 == 0) {
  1021.                                         // 0x3118
  1022.                                         free((char *)v35);
  1023.                                         // branch -> 0x2f58
  1024.                                         // 0x2f58
  1025.                                         g137 = 0;
  1026.                                         // branch -> 0x2f5c
  1027.                                         // 0x2f5c
  1028.                                         v9 = g137;
  1029.                                         g134 = v1;
  1030.                                         g135 = v2;
  1031.                                         g136 = v3;
  1032.                                         g137 = v4;
  1033.                                         g138 = v5;
  1034.                                         g129 = v6;
  1035.                                         g130 = v7;
  1036.                                         return (struct _IO_FILE *)v9;
  1037.                                     }
  1038.                                     int32_t v46 = v35; // 0x3108
  1039.                                     // branch -> 0x3108
  1040.                                     while (true) {
  1041.                                         // 0x3108
  1042.                                         free((char *)*(int32_t *)v46);
  1043.                                         int32_t v47 = v18; // 0x3110
  1044.                                         v18 = v47 - 1;
  1045.                                         if (v47 == 1) {
  1046.                                             // 0x3118
  1047.                                             // branch -> 0x3118
  1048.                                             // 0x3118
  1049.                                             free((char *)g135);
  1050.                                             // branch -> 0x2f58
  1051.                                             // 0x2f58
  1052.                                             g137 = 0;
  1053.                                             // branch -> 0x2f5c
  1054.                                             // 0x2f5c
  1055.                                             v9 = g137;
  1056.                                             g134 = v1;
  1057.                                             g135 = v2;
  1058.                                             g136 = v3;
  1059.                                             g137 = v4;
  1060.                                             g138 = v5;
  1061.                                             g129 = v6;
  1062.                                             g130 = v7;
  1063.                                             return (struct _IO_FILE *)v9;
  1064.                                         }
  1065.                                         // 0x3108
  1066.                                         v46 += 4;
  1067.                                         // branch -> 0x3108
  1068.                                     }
  1069.                                     // 0x3070
  1070.                                     fclose(file);
  1071.                                     int32_t v48 = g135; // 0x3078
  1072.                                     free((char *)v48);
  1073.                                     nmemb = v18;
  1074.                                     int32_t v49; // 0x2f64
  1075.                                     if (nmemb == 0) {
  1076.                                         int32_t v50 = g137; // 0x30b8
  1077.                                         free((char *)v50);
  1078.                                         g137 = 0;
  1079.                                         int32_t v51 = *(int32_t *)0x3138; // 0x30c8
  1080.                                         *v16 = v51 + 0x30d4;
  1081.                                         // branch -> 0x2f5c
  1082.                                         // 0x2f5c
  1083.                                         v9 = g137;
  1084.                                         g134 = v1;
  1085.                                         g135 = v2;
  1086.                                         g136 = v3;
  1087.                                         g137 = v4;
  1088.                                         g138 = v5;
  1089.                                         g129 = v6;
  1090.                                         v49 = v7;
  1091.                                         g130 = v49;
  1092.                                         return (struct _IO_FILE *)v9;
  1093.                                     }
  1094.                                     int32_t v52 = *(int32_t *)0x3134; // 0x3088
  1095.                                     v26 = *(int32_t *)(v52 + 0x309c);
  1096.                                     int32_t base = g137; // 0x3098
  1097.                                     qsort((char *)base, nmemb, 4, (int32_t (**)(char *, char *))v26);
  1098.                                     *v16 = 0;
  1099.                                     int32_t v53 = v18; // 0x30b0
  1100.                                     *(int32_t *)v24 = v53;
  1101.                                     // branch -> 0x2f5c
  1102.                                     // 0x2f5c
  1103.                                     v9 = g137;
  1104.                                     g134 = v1;
  1105.                                     g135 = v2;
  1106.                                     g136 = v3;
  1107.                                     g137 = v4;
  1108.                                     g138 = v5;
  1109.                                     g129 = v6;
  1110.                                     v49 = v7;
  1111.                                     g130 = v49;
  1112.                                     return (struct _IO_FILE *)v9;
  1113.                                 }
  1114.                               lab_0x3054_2:
  1115.                                 // 0x3054
  1116.                                 v33 = v19 + 1;
  1117.                                 g138 = v33;
  1118.                                 v34 = v15 + 20;
  1119.                                 g139 = v34;
  1120.                                 if (v33 >= v22) {
  1121.                                     // break -> 0x3070
  1122.                                     break;
  1123.                                 }
  1124.                                 v32 = v22;
  1125.                                 v19 = v33;
  1126.                                 v15 = v34;
  1127.                                 // continue -> 0x2f94
  1128.                             }
  1129.                             // 0x3070
  1130.                             fclose(file);
  1131.                             free((char *)g135);
  1132.                             nmemb = v18;
  1133.                             if (nmemb == 0) {
  1134.                                 // 0x30b8
  1135.                                 free((char *)g137);
  1136.                                 g137 = 0;
  1137.                                 *v16 = *(int32_t *)0x3138 + 0x30d4;
  1138.                                 // branch -> 0x2f5c
  1139.                             } else {
  1140.                                 // 0x3088
  1141.                                 v26 = *(int32_t *)(*(int32_t *)0x3134 + 0x309c);
  1142.                                 qsort((char *)g137, nmemb, 4, (int32_t (**)(char *, char *))v26);
  1143.                                 *v16 = 0;
  1144.                                 *(int32_t *)v24 = v18;
  1145.                                 // branch -> 0x2f5c
  1146.                             }
  1147.                             // 0x2f5c
  1148.                             v9 = g137;
  1149.                             g134 = v1;
  1150.                             g135 = v2;
  1151.                             g136 = v3;
  1152.                             g137 = v4;
  1153.                             g138 = v5;
  1154.                             g129 = v6;
  1155.                             g130 = v7;
  1156.                             return (struct _IO_FILE *)v9;
  1157.                         }
  1158.                     }
  1159.                     // 0x2f50
  1160.                     fclose(file);
  1161.                     // branch -> 0x2f58
  1162.                     // 0x2f58
  1163.                     g137 = 0;
  1164.                     // branch -> 0x2f5c
  1165.                     // 0x2f5c
  1166.                     v9 = g137;
  1167.                     g134 = v1;
  1168.                     g135 = v2;
  1169.                     g136 = v3;
  1170.                     g137 = v4;
  1171.                     g138 = v5;
  1172.                     g129 = v6;
  1173.                     g130 = v7;
  1174.                     return (struct _IO_FILE *)v9;
  1175.                 }
  1176.                 v14 = v28;
  1177.             } else {
  1178.                 // 0x2f1c
  1179.                 v14 = *(int32_t *)0x3128 + 0x2f28;
  1180.                 // branch -> 0x2f24
  1181.             }
  1182.             // 0x2f24
  1183.             *(int32_t *)g134 = v14;
  1184.             if (v14 == 0) {
  1185.                 // 0x2f30
  1186.                 v17 = read_ELF_section_table(file, &v10, (int32_t *)g134);
  1187.                 g135 = v17;
  1188.                 v21 = g134;
  1189.                 v16 = (int32_t *)v21;
  1190.                 if (*v16 == 0) {
  1191.                     // 0x2f68
  1192.                     v23 = v10;
  1193.                     v24 = g136;
  1194.                     if (v23 == 0) {
  1195.                         // 0x3068
  1196.                         g137 = 0;
  1197.                         v18 = 0;
  1198.                         // branch -> 0x3070
  1199.                     } else {
  1200.                         // 0x2f7c
  1201.                         g129 = v21;
  1202.                         v20 = v17 + 8;
  1203.                         g139 = v20;
  1204.                         v18 = 0;
  1205.                         g138 = 0;
  1206.                         g137 = 0;
  1207.                         v25 = 0;
  1208.                         v15 = v20;
  1209.                         // branch -> 0x2f94
  1210.                         while (true) {
  1211.                             // 0x2f94
  1212.                             if (*(int32_t *)(v15 - 8) == 2) {
  1213.                                 goto lab_0x2fa0_2;
  1214.                             }
  1215.                             v22 = v23;
  1216.                             goto lab_0x3054_2;
  1217.                         }
  1218.                     }
  1219.                     // 0x3070
  1220.                     fclose(file);
  1221.                     free((char *)g135);
  1222.                     nmemb = v18;
  1223.                     if (nmemb == 0) {
  1224.                         // 0x30b8
  1225.                         free((char *)g137);
  1226.                         g137 = 0;
  1227.                         *v16 = *(int32_t *)0x3138 + 0x30d4;
  1228.                         // branch -> 0x2f5c
  1229.                     } else {
  1230.                         // 0x3088
  1231.                         v26 = *(int32_t *)(*(int32_t *)0x3134 + 0x309c);
  1232.                         qsort((char *)g137, nmemb, 4, (int32_t (**)(char *, char *))v26);
  1233.                         *v16 = 0;
  1234.                         *(int32_t *)v24 = v18;
  1235.                         // branch -> 0x2f5c
  1236.                     }
  1237.                     // 0x2f5c
  1238.                     v9 = g137;
  1239.                     g134 = v1;
  1240.                     g135 = v2;
  1241.                     g136 = v3;
  1242.                     g137 = v4;
  1243.                     g138 = v5;
  1244.                     g129 = v6;
  1245.                     g130 = v7;
  1246.                     return (struct _IO_FILE *)v9;
  1247.                 }
  1248.             }
  1249.             // 0x2f50
  1250.             fclose(file);
  1251.             // branch -> 0x2f58
  1252.             // 0x2f58
  1253.             g137 = 0;
  1254.             // branch -> 0x2f5c
  1255.             // 0x2f5c
  1256.             v9 = g137;
  1257.             g134 = v1;
  1258.             g135 = v2;
  1259.             g136 = v3;
  1260.             g137 = v4;
  1261.             g138 = v5;
  1262.             g129 = v6;
  1263.             g130 = v7;
  1264.             return (struct _IO_FILE *)v9;
  1265.         }
  1266.         // 0x2f24
  1267.         *(int32_t *)g134 = v14;
  1268.         if (v14 == 0) {
  1269.             // 0x2f30
  1270.             v17 = read_ELF_section_table(file, &v10, (int32_t *)g134);
  1271.             g135 = v17;
  1272.             v21 = g134;
  1273.             v16 = (int32_t *)v21;
  1274.             if (*v16 == 0) {
  1275.                 // 0x2f68
  1276.                 v23 = v10;
  1277.                 v24 = g136;
  1278.                 if (v23 == 0) {
  1279.                     // 0x3068
  1280.                     g137 = 0;
  1281.                     v18 = 0;
  1282.                     // branch -> 0x3070
  1283.                 } else {
  1284.                     // 0x2f7c
  1285.                     g129 = v21;
  1286.                     v20 = v17 + 8;
  1287.                     g139 = v20;
  1288.                     v18 = 0;
  1289.                     g138 = 0;
  1290.                     g137 = 0;
  1291.                     v19 = 0;
  1292.                     v25 = 0;
  1293.                     v15 = v20;
  1294.                     // branch -> 0x2f94
  1295.                     while (true) {
  1296.                         // 0x2f94
  1297.                         if (*(int32_t *)(v15 - 8) == 2) {
  1298.                             goto lab_0x2fa0_2;
  1299.                         }
  1300.                         v22 = v23;
  1301.                         goto lab_0x3054_2;
  1302.                     }
  1303.                 }
  1304.                 // 0x3070
  1305.                 fclose(file);
  1306.                 free((char *)g135);
  1307.                 nmemb = v18;
  1308.                 if (nmemb == 0) {
  1309.                     // 0x30b8
  1310.                     free((char *)g137);
  1311.                     g137 = 0;
  1312.                     *v16 = *(int32_t *)0x3138 + 0x30d4;
  1313.                     // branch -> 0x2f5c
  1314.                 } else {
  1315.                     // 0x3088
  1316.                     v26 = *(int32_t *)(*(int32_t *)0x3134 + 0x309c);
  1317.                     qsort((char *)g137, nmemb, 4, (int32_t (**)(char *, char *))v26);
  1318.                     *v16 = 0;
  1319.                     *(int32_t *)v24 = v18;
  1320.                     // branch -> 0x2f5c
  1321.                 }
  1322.                 // 0x2f5c
  1323.                 v9 = g137;
  1324.                 g134 = v1;
  1325.                 g135 = v2;
  1326.                 g136 = v3;
  1327.                 g137 = v4;
  1328.                 g138 = v5;
  1329.                 g129 = v6;
  1330.                 g130 = v7;
  1331.                 return (struct _IO_FILE *)v9;
  1332.             }
  1333.         }
  1334.         // 0x2f50
  1335.         fclose(file);
  1336.         // branch -> 0x2f58
  1337.         // 0x2f58
  1338.         g137 = 0;
  1339.         // branch -> 0x2f5c
  1340.     }
  1341.     // 0x2f5c
  1342.     v9 = g137;
  1343.     g134 = v1;
  1344.     g135 = v2;
  1345.     g136 = v3;
  1346.     g137 = v4;
  1347.     g138 = v5;
  1348.     g129 = v6;
  1349.     g130 = v7;
  1350.     return (struct _IO_FILE *)v9;
  1351. }
  1352.  
  1353. // Address range: 0x3140 - 0x3223
  1354. int32_t validate_ELF_file(int32_t a1, int32_t a2) {
  1355.     int32_t v1 = g134; // 0x3140
  1356.     int32_t v2 = g130; // bp-8
  1357.     g130 = &v2;
  1358.     int32_t v3;
  1359.     g133 = &v3;
  1360.     g128 = 0;
  1361.     g132 = 4;
  1362.     g134 = a1;
  1363.     int32_t v4 = read_file_value((struct _IO_FILE *)a1); // 0x315c
  1364.     g127 = v3;
  1365.     g3 = v3 == 0;
  1366.     int32_t result4 = v3; // 0x3174_2
  1367.     if (v3 == 0) {
  1368.         // 0x3178
  1369.         g3 = v4 == 0x464c457f;
  1370.         if (v4 != 0x464c457f) {
  1371.             int32_t result = *(int32_t *)0x3218 + 0x3204; // 0x31fc
  1372.             g127 = result;
  1373.             g134 = v1;
  1374.             g130 = v2;
  1375.             return result;
  1376.         }
  1377.         // 0x3188
  1378.         int32_t v5;
  1379.         g133 = &v5;
  1380.         g128 = 16;
  1381.         g132 = 4;
  1382.         int32_t v6 = read_file_value((struct _IO_FILE *)g134); // 0x3198
  1383.         g127 = v5;
  1384.         g3 = v5 == 0;
  1385.         if (v5 == 0) {
  1386.             // 0x31ac
  1387.             g3 = v6 == 0x280002;
  1388.             if (v6 != 0x280002) {
  1389.                 int32_t result2 = *(int32_t *)0x321c + 0x3214; // 0x320c
  1390.                 g127 = result2;
  1391.                 g134 = v1;
  1392.                 g130 = v2;
  1393.                 return result2;
  1394.             }
  1395.             // 0x31bc
  1396.             int32_t v7;
  1397.             g133 = &v7;
  1398.             g128 = 20;
  1399.             g132 = 4;
  1400.             int32_t v8 = read_file_value((struct _IO_FILE *)g134); // 0x31cc
  1401.             g127 = v7;
  1402.             g3 = v7 == 0;
  1403.             if (v7 == 0) {
  1404.                 // 0x31e0
  1405.                 g3 = v8 == 1;
  1406.                 int32_t v9 = *(int32_t *)0x3220 + 0x31f0; // 0x31e8
  1407.                 int32_t result3 = v8 == 1 ? v9 & -0x10000 : v9; // 0x31e8
  1408.                 g127 = result3;
  1409.                 g134 = v1;
  1410.                 g130 = v2;
  1411.                 return result3;
  1412.             }
  1413.             result4 = v7;
  1414.         } else {
  1415.             result4 = v5;
  1416.         }
  1417.     }
  1418.     // 0x3170
  1419.     g134 = v1;
  1420.     g130 = v2;
  1421.     return result4;
  1422. }
  1423.  
  1424. // Address range: 0x3224 - 0x33ff
  1425. int32_t read_ELF_section_table(struct _IO_FILE * a1, int32_t * a2, int32_t * a3) {
  1426.     int32_t v1 = (int32_t)a3;
  1427.     int32_t v2 = g134; // 0x3224
  1428.     int32_t v3 = g135; // 0x3224
  1429.     int32_t v4 = g136; // 0x3224
  1430.     int32_t v5 = g138; // 0x3224
  1431.     int32_t v6 = g130; // bp-8
  1432.     g130 = &v6;
  1433.     g135 = v1;
  1434.     g129 = (int32_t)a2;
  1435.     g128 = 32;
  1436.     g132 = 4;
  1437.     g133 = v1;
  1438.     g137 = (int32_t)a1;
  1439.     g136 = read_file_value(a1);
  1440.     int32_t v7 = g135; // 0x3250
  1441.     g134 = 0;
  1442.     int32_t result; // 0x33ec
  1443.     if (*(int32_t *)v7 == 0) {
  1444.         // 0x3260
  1445.         g128 = 46;
  1446.         g132 = 2;
  1447.         g133 = v7;
  1448.         g138 = read_file_value((struct _IO_FILE *)g137);
  1449.         int32_t v8 = g135; // 0x3278
  1450.         if (*(int32_t *)v8 == 0) {
  1451.             // 0x3284
  1452.             g128 = 48;
  1453.             g132 = 2;
  1454.             g133 = v8;
  1455.             uint32_t v9 = read_file_value((struct _IO_FILE *)g137); // 0x3294
  1456.             int32_t * v10 = (int32_t *)g135; // 0x3298_0
  1457.             if (*v10 == 0) {
  1458.                 // 0x32a4
  1459.                 if (g136 != 0) {
  1460.                     uint32_t v11 = g138; // 0x32a8
  1461.                     if (v11 != 0) {
  1462.                         // 0x32b0
  1463.                         if (v9 != 0) {
  1464.                             // 0x32b8
  1465.                             if (v11 > 39) {
  1466.                                 int32_t mem = (int32_t)malloc(20 * v9); // 0x32f0_3
  1467.                                 g134 = mem;
  1468.                                 int32_t v12 = g136 + 36; // 0x32f8
  1469.                                 g136 = v12;
  1470.                                 int32_t v13 = mem + 8; // R9
  1471.                                 g138 = 0;
  1472.                                 int32_t v14 = g135; // 0x3310
  1473.                                 // branch -> 0x3304
  1474.                                 while (true) {
  1475.                                     // 0x3304
  1476.                                     g128 = v12 - 32;
  1477.                                     g132 = 4;
  1478.                                     g133 = v14;
  1479.                                     *(int32_t *)(v13 - 8) = read_file_value((struct _IO_FILE *)g137);
  1480.                                     int32_t v15 = g135; // 0x331c
  1481.                                     if (*(int32_t *)v15 == 0) {
  1482.                                         // 0x3328
  1483.                                         g128 = g136 - 20;
  1484.                                         g132 = 4;
  1485.                                         g133 = v15;
  1486.                                         *(int32_t *)(v13 - 4) = read_file_value((struct _IO_FILE *)g137);
  1487.                                         int32_t v16 = g135; // 0x3340
  1488.                                         if (*(int32_t *)v16 == 0) {
  1489.                                             // 0x334c
  1490.                                             g128 = g136 - 16;
  1491.                                             g132 = 4;
  1492.                                             g133 = v16;
  1493.                                             *(int32_t *)v13 = read_file_value((struct _IO_FILE *)g137);
  1494.                                             int32_t v17 = g135; // 0x3364
  1495.                                             if (*(int32_t *)v17 == 0) {
  1496.                                                 // 0x3370
  1497.                                                 g128 = g136 - 12;
  1498.                                                 g132 = 4;
  1499.                                                 g133 = v17;
  1500.                                                 *(int32_t *)(v13 + 4) = read_file_value((struct _IO_FILE *)g137);
  1501.                                                 int32_t v18 = g135; // 0x3388
  1502.                                                 if (*(int32_t *)v18 == 0) {
  1503.                                                     // 0x3394
  1504.                                                     g128 = g136;
  1505.                                                     g132 = 4;
  1506.                                                     g133 = v18;
  1507.                                                     *(int32_t *)(v13 + 8) = read_file_value((struct _IO_FILE *)g137);
  1508.                                                     int32_t v19 = g135; // 0x33ac
  1509.                                                     if (*(int32_t *)v19 == 0) {
  1510.                                                         // 0x33b8
  1511.                                                         v13 += 20;
  1512.                                                         int32_t v20 = g138 + 1; // 0x33c0
  1513.                                                         g138 = v20;
  1514.                                                         int32_t v21 = g136 + v11; // 0x33c4
  1515.                                                         g136 = v21;
  1516.                                                         if (v20 >= v9) {
  1517.                                                             // break -> 0x33d4
  1518.                                                             break;
  1519.                                                         }
  1520.                                                         v14 = v19;
  1521.                                                         v12 = v21;
  1522.                                                         // continue -> 0x3304
  1523.                                                         continue;
  1524.                                                     }
  1525.                                                 }
  1526.                                             }
  1527.                                         }
  1528.                                     }
  1529.                                     // 0x33e0
  1530.                                     free((char *)g134);
  1531.                                     g134 = 0;
  1532.                                     // branch -> 0x33ec
  1533.                                     // 0x33ec
  1534.                                     result = g134;
  1535.                                     g134 = v2;
  1536.                                     g135 = v3;
  1537.                                     g136 = v4;
  1538.                                     g138 = v5;
  1539.                                     g130 = v6;
  1540.                                     return result;
  1541.                                 }
  1542.                                 // 0x33d4
  1543.                                 *(int32_t *)g129 = v9;
  1544.                                 // branch -> 0x33ec
  1545.                             } else {
  1546.                                 // 0x32c0
  1547.                                 *v10 = *(int32_t *)0x33fc + 0x32cc;
  1548.                                 // branch -> 0x33ec
  1549.                             }
  1550.                             // 0x33ec
  1551.                             result = g134;
  1552.                             g134 = v2;
  1553.                             g135 = v3;
  1554.                             g136 = v4;
  1555.                             g138 = v5;
  1556.                             g130 = v6;
  1557.                             return result;
  1558.                         }
  1559.                     }
  1560.                 }
  1561.                 // 0x32d0
  1562.                 *v10 = *(int32_t *)0x33f8 + 0x32dc;
  1563.                 // branch -> 0x33ec
  1564.             }
  1565.         }
  1566.     }
  1567.     // 0x33ec
  1568.     result = g134;
  1569.     g134 = v2;
  1570.     g135 = v3;
  1571.     g136 = v4;
  1572.     g138 = v5;
  1573.     g130 = v6;
  1574.     return result;
  1575. }
  1576.  
  1577. // Address range: 0x3400 - 0x3627
  1578. int32_t read_ELF_symbols_from_section(struct _IO_FILE * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7) {
  1579.     int32_t v1 = g135; // 0x3400
  1580.     int32_t v2 = g138; // 0x3400
  1581.     int32_t v3 = g139; // 0x3400
  1582.     int32_t v4 = g129; // 0x3400
  1583.     int32_t v5 = g130; // bp-8
  1584.     g130 = &v5;
  1585.     g135 = (int32_t)a1;
  1586.     int32_t v6;
  1587.     g134 = v6;
  1588.     g137 = a4;
  1589.     int32_t v7;
  1590.     int32_t * v8 = (int32_t *)v7; // 0x3428_0
  1591.     *v8 = 0;
  1592.     int32_t result2; // 0x361c
  1593.     if (a4 == 0) {
  1594.         // 0x3584
  1595.         g138 = 0;
  1596.         // branch -> 0x358c
  1597.         // 0x358c
  1598.         *v8 = 0;
  1599.         *(int32_t *)g134 = 0;
  1600.         result2 = g138;
  1601.         // branch -> 0x361c
  1602.     } else {
  1603.         // 0x3430
  1604.         g139 = 0;
  1605.         g138 = 0;
  1606.         g129 = 0;
  1607.         int32_t v9 = g137; // bp-56
  1608.         int32_t v10 = g135; // 0x3440
  1609.         struct _IO_FILE * v11 = (struct _IO_FILE *)v10;
  1610.         int32_t v12 = 0; // 0x3450
  1611.         int32_t v13 = g134; // 0x344c
  1612.         // branch -> 0x3444
  1613.         while (true) {
  1614.             // 0x3444
  1615.             g132 = 1;
  1616.             g133 = v13;
  1617.             int32_t v14 = v12 + a3; // 0x3450
  1618.             g136 = v14;
  1619.             g128 = v14 + 12;
  1620.             uint32_t v15 = read_file_value(v11); // 0x345c
  1621.             int32_t v16 = g134; // 0x3460
  1622.             if (*(int32_t *)v16 == 0) {
  1623.                 uint32_t v17 = v15 % 16; // 0x346c
  1624.                 int32_t v18; // 0x3578
  1625.                 int32_t v19; // 0x344c5
  1626.                 if ((v17 + 255) % 256 <= 1) {
  1627.                     int32_t v20 = g138; // 0x3480
  1628.                     g128 = g136;
  1629.                     g132 = 4;
  1630.                     g135 = v10;
  1631.                     g133 = v16;
  1632.                     int32_t v21 = read_file_value(v11); // 0x3498
  1633.                     int32_t v22 = g134; // 0x349c
  1634.                     if (*(int32_t *)v22 == 0) {
  1635.                         // 0x34a8
  1636.                         g132 = v22;
  1637.                         int32_t v23;
  1638.                         int32_t str = read_file_string((struct _IO_FILE *)g135, v21 + v23); // 0x34b8
  1639.                         g138 = str;
  1640.                         if (*(int32_t *)g134 == 0) {
  1641.                             int32_t len = strlen((char *)str); // 0x34d0
  1642.                             int32_t mem = (int32_t)malloc(len + 13); // 0x34d8_3
  1643.                             g137 = g134;
  1644.                             g134 = mem;
  1645.                             strcpy((char *)(mem + 9), (char *)g138);
  1646.                             free((char *)g138);
  1647.                             g128 = g136 + 4;
  1648.                             *(char *)(g134 + 8) = (char)v17;
  1649.                             g132 = 4;
  1650.                             g133 = g137;
  1651.                             *(int32_t *)g134 = read_file_value((struct _IO_FILE *)g135);
  1652.                             int32_t v24 = g137; // 0x3518
  1653.                             if (*(int32_t *)v24 == 0) {
  1654.                                 // 0x3524
  1655.                                 g128 = g136 + 8;
  1656.                                 g132 = 4;
  1657.                                 g133 = v24;
  1658.                                 *(int32_t *)(g134 + 4) = read_file_value((struct _IO_FILE *)g135);
  1659.                                 if (*(int32_t *)g137 == 0) {
  1660.                                     int32_t v25 = g139 + 1; // 0x3548
  1661.                                     g135 = v25;
  1662.                                     int32_t mem2 = (int32_t)realloc((char *)v20, 4 * v25); // 0x3554_5
  1663.                                     g138 = mem2;
  1664.                                     *(int32_t *)(4 * g139 + mem2) = g134;
  1665.                                     int32_t v26 = g137; // 0x3560
  1666.                                     g134 = v26;
  1667.                                     g139 = g135;
  1668.                                     g137 = v9;
  1669.                                     v18 = v9;
  1670.                                     v19 = v26;
  1671.                                     // branch -> 0x356c
  1672.                                     goto lab_0x356c;
  1673.                                 }
  1674.                             }
  1675.                             // 0x35e8
  1676.                             free((char *)g134);
  1677.                             g135 = v20;
  1678.                             if (g139 == 0) {
  1679.                                 // 0x3614
  1680.                                 free((char *)*&g135);
  1681.                                 g138 = 0;
  1682.                                 // branch -> 0x361c
  1683.                                 // 0x361c
  1684.                                 g135 = v1;
  1685.                                 g138 = v2;
  1686.                                 g139 = v3;
  1687.                                 g129 = v4;
  1688.                                 g130 = v5;
  1689.                                 return 0;
  1690.                             }
  1691.                             int32_t v27 = v20; // 0x3600
  1692.                             // branch -> 0x3600
  1693.                             while (true) {
  1694.                                 // 0x3600
  1695.                                 free((char *)*(int32_t *)v27);
  1696.                                 int32_t v28 = g139; // 0x3608
  1697.                                 g139 = v28 - 1;
  1698.                                 if (v28 != 1) {
  1699.                                     // 0x3600
  1700.                                     v27 += 4;
  1701.                                     // branch -> 0x3600
  1702.                                     continue;
  1703.                                 }
  1704.                             }
  1705.                             // 0x358c
  1706.                             // branch -> 0x358c
  1707.                             // 0x358c
  1708.                             *v8 = g139;
  1709.                             *(int32_t *)g134 = 0;
  1710.                             int32_t result = g138;
  1711.                             // branch -> 0x361c
  1712.                             // 0x361c
  1713.                             g135 = v1;
  1714.                             g138 = v2;
  1715.                             g139 = v3;
  1716.                             g129 = v4;
  1717.                             g130 = v5;
  1718.                             return result;
  1719.                         }
  1720.                     }
  1721.                     // 0x35c4
  1722.                     g135 = v20;
  1723.                     if (g139 != 0) {
  1724.                         // branch -> 0x35d4
  1725.                         while (true) {
  1726.                             // 0x35d4
  1727.                             free((char *)*(int32_t *)v20);
  1728.                             int32_t v29 = g139; // 0x35dc
  1729.                             g139 = v29 - 1;
  1730.                             if (v29 != 1) {
  1731.                                 // 0x35d4
  1732.                                 v20 += 4;
  1733.                                 // branch -> 0x35d4
  1734.                                 continue;
  1735.                             }
  1736.                         }
  1737.                     }
  1738.                     // 0x3614
  1739.                     free((char *)g135);
  1740.                     g138 = 0;
  1741.                     // branch -> 0x361c
  1742.                     // 0x361c
  1743.                     g135 = v1;
  1744.                     g138 = v2;
  1745.                     g139 = v3;
  1746.                     g129 = v4;
  1747.                     g130 = v5;
  1748.                     return 0;
  1749.                 }
  1750.                 // 0x346c
  1751.                 v18 = g137;
  1752.                 v19 = v16;
  1753.                 // branch -> 0x356c
  1754.               lab_0x356c:
  1755.                 // 0x356c
  1756.                 g135 = v10;
  1757.                 int32_t v30 = g129 + a6; // 0x3574
  1758.                 g129 = v30;
  1759.                 if (v30 >= v18) {
  1760.                     // break -> 0x358c
  1761.                     break;
  1762.                 }
  1763.                 v12 = v30;
  1764.                 v13 = v19;
  1765.                 // continue -> 0x3444
  1766.                 continue;
  1767.             } else {
  1768.                 // 0x35a0
  1769.                 if (g139 != 0) {
  1770.                     int32_t v31 = g138; // 0x35ac
  1771.                     // branch -> 0x35ac
  1772.                     while (true) {
  1773.                         // 0x35ac
  1774.                         free((char *)*(int32_t *)v31);
  1775.                         int32_t v32 = g139; // 0x35b4
  1776.                         g139 = v32 - 1;
  1777.                         if (v32 != 1) {
  1778.                             // 0x35ac
  1779.                             v31 += 4;
  1780.                             // branch -> 0x35ac
  1781.                             continue;
  1782.                         }
  1783.                     }
  1784.                 }
  1785.             }
  1786.             // 0x3614
  1787.             free((char *)g138);
  1788.             g138 = 0;
  1789.             // branch -> 0x361c
  1790.             // 0x361c
  1791.             g135 = v1;
  1792.             g138 = v2;
  1793.             g139 = v3;
  1794.             g129 = v4;
  1795.             g130 = v5;
  1796.             return 0;
  1797.         }
  1798.     }
  1799.     // 0x361c
  1800.     g135 = v1;
  1801.     g138 = v2;
  1802.     g139 = v3;
  1803.     g129 = v4;
  1804.     g130 = v5;
  1805.     return result2;
  1806. }
  1807.  
  1808. // Address range: 0x3628 - 0x365f
  1809. int32_t destroy_ELF_symbols(char * a1, int32_t a2) {
  1810.     int32_t result2 = (int32_t)a1;
  1811.     int32_t v1 = g134; // 0x3628
  1812.     int32_t v2 = g135; // 0x3628
  1813.     g135 = a2;
  1814.     g134 = result2;
  1815.     g3 = a2 == 0;
  1816.     if (a2 != 0) {
  1817.         int32_t result = *(int32_t *)a1; // 0x3644
  1818.         free((char *)result);
  1819.         return result;
  1820.     }
  1821.     // 0x3654
  1822.     g134 = v1;
  1823.     g135 = v2;
  1824.     free(a1);
  1825.     return result2;
  1826. }
  1827.  
  1828. // Address range: 0x3660 - 0x36b3
  1829. int32_t compare_ELF_symbols(int32_t * a1, int32_t * a2) {
  1830.     int32_t v1 = *a2; // 0x3660
  1831.     int32_t v2 = *a1; // 0x3664
  1832.     uint32_t v3 = *(int32_t *)v1; // 0x3668
  1833.     uint32_t v4 = *(int32_t *)v2; // 0x366c
  1834.     int32_t result; // 0x36b0_1
  1835.     int32_t v5; // 0x36ac
  1836.     if (v4 != v3) {
  1837.         int32_t v6 = (int32_t)(v4 >= v3) ^ 1;
  1838.         if (v4 < v3) {
  1839.             v5 = 0;
  1840.             // 0x36a8
  1841.             if (v6 != 0) {
  1842.                 // if_36ac_0_true
  1843.                 result = v5 - 1;
  1844.                 // branch -> after_if_36ac_0
  1845.             } else {
  1846.                 result = v5;
  1847.             }
  1848.             // after_if_36ac_0
  1849.             return result;
  1850.         }
  1851.         // 0x36a8
  1852.         v5 = 1;
  1853.         // branch -> 0x36a8
  1854.         // 0x36a8
  1855.         if (v6 != 0) {
  1856.             // if_36ac_0_true
  1857.             result = v5 - 1;
  1858.             // branch -> after_if_36ac_0
  1859.         } else {
  1860.             result = v5;
  1861.         }
  1862.         // after_if_36ac_0
  1863.         return result;
  1864.     }
  1865.     uint32_t v7 = *(int32_t *)(v2 + 4); // 0x3678
  1866.     uint32_t v8 = *(int32_t *)(v1 + 4); // 0x3680
  1867.     int32_t v9 = v7 > v8;
  1868.     if (v7 >= v8) {
  1869.         v5 = 0;
  1870.         // 0x36a8
  1871.         if (v9 != 0) {
  1872.             // if_36ac_0_true
  1873.             result = v5 - 1;
  1874.             // branch -> after_if_36ac_0
  1875.         } else {
  1876.             result = v5;
  1877.         }
  1878.         // after_if_36ac_0
  1879.         return result;
  1880.     }
  1881.     // 0x36a8
  1882.     v5 = 1;
  1883.     // branch -> 0x36a8
  1884.     // 0x36a8
  1885.     if (v9 != 0) {
  1886.         // if_36ac_0_true
  1887.         result = v5 - 1;
  1888.         // branch -> after_if_36ac_0
  1889.     } else {
  1890.         result = v5;
  1891.     }
  1892.     // after_if_36ac_0
  1893.     return result;
  1894. }
  1895.  
  1896. // Address range: 0x36b4 - 0x36ff
  1897. int32_t validate_file_value(int32_t a1, int32_t a2) {
  1898.     g128 = a2;
  1899.     int32_t v1 = g134; // 0x36b4
  1900.     int32_t v2 = g130; // bp-8
  1901.     g130 = &v2;
  1902.     g134 = g133;
  1903.     int32_t v3;
  1904.     g133 = &v3;
  1905.     g132 %= 256;
  1906.     int32_t v4 = read_file_value((struct _IO_FILE *)a1); // 0x36cc
  1907.     g127 = v3;
  1908.     g3 = v3 == 0;
  1909.     int32_t result = v3; // 0x36f0_2
  1910.     if (v3 == 0) {
  1911.         // 0x36e0
  1912.         int32_t v5;
  1913.         g127 = v5;
  1914.         g3 = v4 == g134;
  1915.         if (v4 == g134) {
  1916.             int32_t v6 = v5 & -0x10000; // 0x36e8
  1917.             g127 = v6;
  1918.             result = v6;
  1919.             // branch -> 0x36ec
  1920.         } else {
  1921.             result = v5;
  1922.         }
  1923.     }
  1924.     // 0x36ec
  1925.     g134 = v1;
  1926.     g130 = v2;
  1927.     return result;
  1928. }
  1929.  
  1930. // Address range: 0x3700 - 0x3763
  1931. int32_t read_line(struct _IO_FILE * stream) {
  1932.     int32_t v1 = g135; // 0x3700
  1933.     int32_t v2 = g138; // 0x3700
  1934.     g135 = 0;
  1935.     g138 = 0;
  1936.     // branch -> 0x3720
  1937.     while (true) {
  1938.         int32_t v3 = 0x1000000 * getc((struct _IO_FILE *)(int32_t)stream);
  1939.         int32_t v4 = v3 / 0x1000000; // R6
  1940.         if (v3 != 0xd000000) {
  1941.             int32_t v5 = g138 + 1; // 0x3734
  1942.             int32_t mem = (int32_t)realloc((char *)g135, v5); // 0x3740_5
  1943.             g135 = mem;
  1944.             if (v4 == -1 || v4 == 10) {
  1945.                 // 0x3754
  1946.                 *(char *)(g138 + mem) = 0;
  1947.                 int32_t result = g135; // 0x375c
  1948.                 g135 = v1;
  1949.                 g138 = v2;
  1950.                 return result;
  1951.             }
  1952.             // 0x3718
  1953.             *(char *)(g138 + mem) = (char)v4;
  1954.             g138 = v5;
  1955.             // branch -> 0x3720
  1956.         }
  1957.         // 0x3720
  1958.         // branch -> 0x3720
  1959.     }
  1960. }
  1961.  
  1962. // Address range: 0x3764 - 0x37d7
  1963. int32_t get_file_length(struct _IO_FILE * stream) {
  1964.     int32_t v1 = g134; // 0x3764
  1965.     int32_t v2 = g135; // 0x3764
  1966.     int32_t v3 = g130; // 0x3764
  1967.     int32_t stream2 = (int32_t)stream; // R4
  1968.     int32_t curr_file_offset = ftell(stream); // 0x3770
  1969.     g135 = 0;
  1970.     int32_t result; // 0x37d0
  1971.     if (curr_file_offset < 0) {
  1972.         // 0x37d0
  1973.         result = g135;
  1974.         g134 = v1;
  1975.         g135 = v2;
  1976.         g130 = v3;
  1977.         return result;
  1978.     }
  1979.     // 0x3784
  1980.     if (fseek((struct _IO_FILE *)stream2, 0, SEEK_END) == 0) {
  1981.         int32_t curr_file_offset2 = ftell((struct _IO_FILE *)stream2); // R7
  1982.         g135 = 0;
  1983.         if (fseek((struct _IO_FILE *)stream2, curr_file_offset, SEEK_SET) == 0) {
  1984.             int32_t v4 = curr_file_offset2; // 0x37cc
  1985.             if (curr_file_offset2 == -1) {
  1986.                 // if_37c8_0_true
  1987.                 v4 = curr_file_offset2 & -0x10000;
  1988.                 // branch -> after_if_37c8_0
  1989.             }
  1990.             // after_if_37c8_0
  1991.             g135 = v4;
  1992.             // branch -> 0x37d0
  1993.         }
  1994.     }
  1995.     // 0x37d0
  1996.     result = g135;
  1997.     g134 = v1;
  1998.     g135 = v2;
  1999.     g130 = v3;
  2000.     return result;
  2001. }
  2002.  
  2003. // Address range: 0x37d8 - 0x38af
  2004. int32_t read_file_by_lines(struct _IO_FILE * stream) {
  2005.     int32_t v1 = g135; // 0x37d8
  2006.     int32_t v2 = g138; // 0x37d8
  2007.     int32_t v3 = g130; // 0x37d8
  2008.     int32_t stream2 = (int32_t)stream; // R4
  2009.     int32_t is_feof = feof(stream); // 0x37e8
  2010.     g135 = is_feof;
  2011.     int32_t mem = (int32_t)realloc(NULL, 4); // 0x37f8_5
  2012.     g138 = mem;
  2013.     int32_t result; // 0x38a4
  2014.     if (is_feof == 0) {
  2015.         int32_t v4 = 1; // 0x3818
  2016.         int32_t v5 = 0; // 0x3814
  2017.         // branch -> 0x3814
  2018.         while (true) {
  2019.             int32_t v6 = v4; // R9
  2020.             int32_t v7 = 0; // R6
  2021.             int32_t v8 = 0; // R10
  2022.             // branch -> 0x3830
  2023.             int32_t v9; // R7
  2024.             while (true) {
  2025.               lab_0x3830:;
  2026.                 int32_t v10 = 0x1000000 * getc((struct _IO_FILE *)stream2);
  2027.                 v9 = v10 / 0x1000000;
  2028.                 if (v10 != 0xd000000) {
  2029.                     // break -> 0x3844
  2030.                     break;
  2031.                 }
  2032.                 // continue -> 0x3830
  2033.             }
  2034.             int32_t v11 = v8 + 1; // 0x3844
  2035.             g135 = v11;
  2036.             int32_t mem2 = (int32_t)realloc((char *)v7, v11); // 0x3850_5
  2037.             v7 = mem2;
  2038.             if (v9 != -1) {
  2039.                 // after_if_385c_0
  2040.                 if (v9 != 10) {
  2041.                     // 0x3828
  2042.                     *(char *)(v8 + mem2) = (char)v9;
  2043.                     v8 = g135;
  2044.                     // branch -> 0x3830
  2045.                     goto lab_0x3830;
  2046.                 }
  2047.             }
  2048.             // 0x3864
  2049.             *(char *)(v8 + mem2) = 0;
  2050.             *(int32_t *)(4 * v5 + g138) = v7;
  2051.             int32_t is_feof2 = feof((struct _IO_FILE *)stream2); // 0x3878
  2052.             int32_t v12 = v6 + 1; // 0x387c
  2053.             g135 = is_feof2;
  2054.             int32_t mem3 = (int32_t)realloc((char *)g138, 4 * v12); // 0x388c_5
  2055.             g138 = mem3;
  2056.             if (is_feof2 != 0) {
  2057.                 // 0x389c
  2058.                 // branch -> 0x389c
  2059.                 // 0x389c
  2060.                 *(int32_t *)(mem3 + 4 * v6) = 0;
  2061.                 result = g138;
  2062.                 g135 = v1;
  2063.                 g138 = v2;
  2064.                 g130 = v3;
  2065.                 return result;
  2066.             }
  2067.             // 0x3864
  2068.             v4 = v12;
  2069.             v5 = v6;
  2070.             // branch -> 0x3814
  2071.         }
  2072.     }
  2073.     // 0x389c
  2074.     *(int32_t *)mem = 0;
  2075.     result = g138;
  2076.     g135 = v1;
  2077.     g138 = v2;
  2078.     g130 = v3;
  2079.     return result;
  2080. }
  2081.  
  2082. // Address range: 0x38b0 - 0x396f
  2083. int32_t read_file_buffer(struct _IO_FILE * a1, int32_t offset, int32_t size) {
  2084.     int32_t v1 = g135; // 0x38b0
  2085.     int32_t v2 = g138; // 0x38b0
  2086.     g135 = g133;
  2087.     int32_t stream = (int32_t)a1; // R7
  2088.     *(int32_t *)g133 = 0;
  2089.     if (size == 0) {
  2090.         // 0x3950
  2091.         g135 = v1;
  2092.         g138 = v2;
  2093.         return 0;
  2094.     }
  2095.     int32_t result = 0; // R4
  2096.     if (fseek((struct _IO_FILE *)stream, offset, SEEK_SET) != 0) {
  2097.         // 0x38ec
  2098.         *(int32_t *)g135 = *(int32_t *)0x3958 + 0x38f8;
  2099.         g135 = v1;
  2100.         g138 = v2;
  2101.         return result;
  2102.     }
  2103.     char * mem = malloc(size); // 0x3904
  2104.     g138 = (int32_t)mem;
  2105.     int32_t items_read = fread(mem, 1, size, (struct _IO_FILE *)stream); // 0x3918
  2106.     if (items_read == size) {
  2107.         int32_t result2 = g138; // 0x3924
  2108.         g135 = v1;
  2109.         g138 = v2;
  2110.         return result2;
  2111.     }
  2112.     int32_t v3 = *(int32_t *)0x3960; // 0x3938
  2113.     *(int32_t *)g135 = items_read == 0 ? *(int32_t *)0x395c + 0x3948 : v3 + 0x394c;
  2114.     free((char *)g138);
  2115.     // branch -> 0x3950
  2116.     // 0x3950
  2117.     g135 = v1;
  2118.     g138 = v2;
  2119.     return result;
  2120. }
  2121.  
  2122. // Address range: 0x3970 - 0x3b1f
  2123. int32_t read_file_value(struct _IO_FILE * a1) {
  2124.     int32_t v1 = g135; // 0x3970
  2125.     int32_t v2 = g138; // 0x3970
  2126.     int32_t v3 = g130; // 0x3970
  2127.     g135 = (int32_t)a1;
  2128.     *(int32_t *)g133 = 0;
  2129.     if (g132 != 0) {
  2130.         // 0x3998
  2131.         if (g132 < 9) {
  2132.             // 0x39b0
  2133.             *(int32_t *)g133 = 0;
  2134.             int32_t result; // 0x3a84
  2135.             if (fseek((struct _IO_FILE *)g135, g128, SEEK_SET) == 0) {
  2136.                 char * mem = malloc(g132); // 0x39ec
  2137.                 g138 = (int32_t)mem;
  2138.                 int32_t items_read = fread(mem, 1, g132, (struct _IO_FILE *)g135); // 0x3a00
  2139.                 if (items_read != g132) {
  2140.                     int32_t v4 = *(int32_t *)0x3b18; // 0x3a14
  2141.                     *(int32_t *)g133 = items_read == 0 ? *(int32_t *)0x3b14 + 0x3a24 : v4 + 0x3a28;
  2142.                     free((char *)g138);
  2143.                     g138 = 0;
  2144.                     // branch -> 0x3a30
  2145.                 }
  2146.                 // 0x3a30
  2147.                 if (*(int32_t *)g133 == 0) {
  2148.                     // 0x3a44
  2149.                     int32_t v5; // 0x3a60
  2150.                     if (g132 < 4) {
  2151.                         uint32_t v6 = g132 % 4; // 0x3a58
  2152.                         v5 = g132 - v6;
  2153.                         if (g132 != v6) {
  2154.                             int32_t v7 = g138; // 0x3a84
  2155.                             result = *(int32_t *)v7;
  2156.                             // branch -> 0x3a84
  2157.                             while (v5 != 4) {
  2158.                                 // 0x3a84
  2159.                                 v5 -= 4;
  2160.                                 v7 += 4;
  2161.                                 result = *(int32_t *)v7;
  2162.                                 // continue -> 0x3a84
  2163.                             }
  2164.                             // 0x3ab0
  2165.                             if (v6 == 0) {
  2166.                                 // 0x3af0
  2167.                                 free((char *)g138);
  2168.                                 // branch -> 0x39d8
  2169.                                 // 0x39d8
  2170.                                 // branch -> 0x39dc
  2171.                                 // 0x39dc
  2172.                                 g135 = v1;
  2173.                                 g138 = v2;
  2174.                                 g130 = v3;
  2175.                                 return result;
  2176.                             }
  2177.                         } else {
  2178.                             result = 0;
  2179.                             v5 = 0;
  2180.                         }
  2181.                     } else {
  2182.                         // 0x3a50
  2183.                         result = 0;
  2184.                         v5 = 0;
  2185.                         // branch -> 0x3ad0
  2186.                     }
  2187.                     int32_t v8 = 8 * v5; // 0x3ae8
  2188.                     int32_t v9 = g132 - v5; // 0x3ae0
  2189.                     int32_t v10 = g138 + v5; // 0x3adc
  2190.                     int32_t v11 = (int32_t)*(char *)v10; // 0x3adc
  2191.                     uint32_t v12 = v8 & 248; // 0x3ae4
  2192.                     int32_t v13 = (v12 == 0 ? v11 : v12 < 32 ? v11 << v12 : 0) | result; // 0x3ae4
  2193.                     result = v13;
  2194.                     // branch -> 0x3adc
  2195.                     while (v9 != 1) {
  2196.                         // 0x3adc
  2197.                         v8 += 8;
  2198.                         v9--;
  2199.                         v10++;
  2200.                         v11 = (int32_t)*(char *)v10;
  2201.                         v12 = v8 & 248;
  2202.                         v13 |= (v12 == 0 ? v11 : v12 < 32 ? v11 << v12 : 0);
  2203.                         result = v13;
  2204.                         // continue -> 0x3adc
  2205.                     }
  2206.                     // 0x3af0
  2207.                     free((char *)g138);
  2208.                     // branch -> 0x39d8
  2209.                     // branch -> 0x39dc
  2210.                 } else {
  2211.                     result = 0;
  2212.                 }
  2213.             } else {
  2214.                 // 0x39cc
  2215.                 // branch -> 0x39d4
  2216.                 // 0x39d4
  2217.                 *(int32_t *)g133 = *(int32_t *)0x3b10 + 0x39d8;
  2218.                 // branch -> 0x39d8
  2219.                 // 0x39d8
  2220.                 result = 0;
  2221.                 // branch -> 0x39dc
  2222.             }
  2223.             // 0x39dc
  2224.             g135 = v1;
  2225.             g138 = v2;
  2226.             g130 = v3;
  2227.             return result;
  2228.         }
  2229.         // 0x39a0
  2230.         // branch -> 0x39d4
  2231.         // 0x39d4
  2232.         *(int32_t *)g133 = *(int32_t *)0x3b1c + 0x39b0;
  2233.         // branch -> 0x39d8
  2234.     }
  2235.     // 0x39d8
  2236.     // branch -> 0x39dc
  2237.     // 0x39dc
  2238.     g135 = v1;
  2239.     g138 = v2;
  2240.     g130 = v3;
  2241.     return 0;
  2242. }
  2243.  
  2244. // Address range: 0x3b20 - 0x3bdf
  2245. int32_t read_file_string(struct _IO_FILE * stream, int32_t offset) {
  2246.     int32_t v1 = g134; // bp-32
  2247.     int32_t v2 = g135; // 0x3b20
  2248.     int32_t v3 = g138; // 0x3b20
  2249.     int32_t v4 = g130; // bp-8
  2250.     g138 = g132;
  2251.     if (fseek(stream, offset, SEEK_SET) != 0) {
  2252.         // 0x3b44
  2253.         // branch -> 0x3b94
  2254.         // 0x3b94
  2255.         *(int32_t *)g138 = *(int32_t *)0x3bcc + 0x3b50;
  2256.         g134 = v1;
  2257.         g135 = v2;
  2258.         g138 = v3;
  2259.         g130 = v4;
  2260.         return 0;
  2261.     }
  2262.     int32_t result = 0; // R4
  2263.     g135 = 0;
  2264.     // branch -> 0x3b58
  2265.     while (true) {
  2266.         int32_t v5 = 0x1000000 * getc((struct _IO_FILE *)(int32_t)stream);
  2267.         if (v5 == -0x1000000) {
  2268.             int32_t v6 = *(int32_t *)0x3bd4; // 0x3ba8
  2269.             *(int32_t *)g138 = g135 == 0 ? *(int32_t *)0x3bd0 + 0x3bb4 : v6 + 0x3bb8;
  2270.             free((char *)result);
  2271.             g134 = v1;
  2272.             g135 = v2;
  2273.             g138 = v3;
  2274.             g130 = v4;
  2275.             return 0;
  2276.         }
  2277.         int32_t v7 = g135 + 1; // 0x3b6c
  2278.         int32_t mem = (int32_t)realloc((char *)result, v7); // 0x3b78_5
  2279.         result = mem;
  2280.         int32_t v8 = v5 / 0x1000000; // 0x3b80
  2281.         *(char *)(g135 + mem) = (char)v8;
  2282.         g135 = v7;
  2283.         if (v8 == 0) {
  2284.             // break -> 0x3b94
  2285.             break;
  2286.         }
  2287.         // continue -> 0x3b58
  2288.     }
  2289.     // 0x3b94
  2290.     *(int32_t *)g138 = 0;
  2291.     g134 = v1;
  2292.     g135 = v2;
  2293.     g138 = v3;
  2294.     g130 = v4;
  2295.     return result;
  2296. }
  2297.  
  2298. // Address range: 0x3be0 - 0x3fbf
  2299. int32_t output_binary_data(char * a1, int32_t a2, int32_t a3, struct _IO_FILE * stream, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12) {
  2300.     int32_t v1;
  2301.     char * v2 = (char *)v1; // bp-60
  2302.     g133 = (int32_t)stream;
  2303.     int32_t v3 = g134; // 0x3be0
  2304.     int32_t v4 = g135; // 0x3be0
  2305.     int32_t v5 = g136; // 0x3be0
  2306.     int32_t v6 = g137; // 0x3be0
  2307.     int32_t (*v7)() = (int32_t (*)())g138;
  2308.     int32_t v8 = g130; // bp-8
  2309.     g130 = &v8;
  2310.     g129 = a3;
  2311.     g135 = a2;
  2312.     g137 = (int32_t)a1;
  2313.     int32_t str;
  2314.     if (a3 < 2) {
  2315.         // 0x3c24
  2316.         str = 0x7479622e;
  2317.         // branch -> 0x3c38
  2318.     } else {
  2319.         // 0x3c0c
  2320.         sprintf((char *)&str, (char *)(*(int32_t *)0x3f90 + 0x3c1c));
  2321.         a3 = g129;
  2322.         // branch -> 0x3c38
  2323.     }
  2324.     // 0x3c38
  2325.     g132 = 2 * a3;
  2326.     int32_t format = *(int32_t *)0x3f94 + 0x3c48; // 0x3c40
  2327.     g128 = format;
  2328.     int32_t str2;
  2329.     int32_t v9 = &str2; // 0x3c44_0
  2330.     g127 = sprintf((char *)&str2, (char *)format);
  2331.     int32_t v10 = g135; // 0x3c4c
  2332.     g1 = true;
  2333.     g2 = v10 < 0;
  2334.     g3 = v10 == 0;
  2335.     int32_t result; // 0x3fbc_1
  2336.     int32_t v11;
  2337.     int32_t v12;
  2338.     int32_t v13;
  2339.     int32_t v14;
  2340.     int32_t v15; // 0x3f8c
  2341.     if (v10 == 0) {
  2342.       lab_0x3f68:
  2343.         // 0x3f68
  2344.         g134 = v14;
  2345.         g135 = v13;
  2346.         g136 = v12;
  2347.         g137 = v11;
  2348.         g138 = v3;
  2349.         g139 = v4;
  2350.         g129 = v5;
  2351.         g130 = v6;
  2352.         v7();
  2353.         if (g3) {
  2354.             // if_3fb8_0_true
  2355.             v15 = g127 & g128 & g132 & g133;
  2356.             g138 = g136 / 0x40000000 & v15;
  2357.             result = v15;
  2358.             // branch -> after_if_3fb8_0
  2359.         } else {
  2360.             // 0x3f68
  2361.             result = g127;
  2362.             // branch -> after_if_3fb8_0
  2363.         }
  2364.         // after_if_3fb8_0
  2365.         return result;
  2366.     }
  2367.     uint32_t v16 = g129; // 0x3c54
  2368.     int32_t v17;
  2369.     int32_t str3;
  2370.     if (v16 == 0) {
  2371.         int32_t v18 = (int32_t)&v2;
  2372.         g134 = v18;
  2373.         g138 = v9;
  2374.         int32_t v19 = *(int32_t *)0x3fac + 0x3e5c; // 0x3e54
  2375.         int32_t v20 = *(int32_t *)0x3fbc + 0x3e74; // 0x3e6c
  2376.         char * format3 = (char *)v20;
  2377.         int32_t v21 = &str3; // 0x3edc_0
  2378.         char * format2 = (char *)(*(int32_t *)0x3fb8 + 0x3e68);
  2379.         // branch -> 0x3e80
  2380.         while (true) {
  2381.             // 0x3e80
  2382.             int32_t v22;
  2383.             generate_initial_indented_line((int32_t *)v18, &str2, g132, g133, v17, 0, v22);
  2384.             v17 = 0;
  2385.             concatenate((int32_t *)g134, &str2, (char *)&str, v19);
  2386.             uint32_t v23 = g135; // 0x3ea8
  2387.             uint32_t v24 = v23 < 32 ? v23 : 32; // 0x3eac
  2388.             g137 = v24;
  2389.             uint32_t v25 = g129; // 0x3eb4
  2390.             int32_t v26 = v23 - v24; // 0x3ebc
  2391.             g136 = g134;
  2392.             g134 = *(int32_t *)0x3fb4 + 0x3e80;
  2393.             g135 = v9;
  2394.             g139 = v21;
  2395.             int32_t v27 = v24 / v25; // R10
  2396.             char * v28;
  2397.             int32_t v29; // 0x3f58
  2398.             if (v25 <= v24) {
  2399.                 // 0x3ee8
  2400.                 g137 = 0;
  2401.                 // branch -> 0x3eec
  2402.                 while (true) {
  2403.                     // 0x3eec
  2404.                     sprintf((char *)&str3, (char *)&str2);
  2405.                     v17 = 0;
  2406.                     int32_t v30 = g134; // 0x3f20
  2407.                     if (g137 != 0) {
  2408.                         // if_3f18_0_true
  2409.                         v30 = *(int32_t *)0x3fb0 + 0x3f20;
  2410.                         // branch -> after_if_3f18_0
  2411.                     }
  2412.                     // after_if_3f18_0
  2413.                     concatenate((int32_t *)g136, &str2, (char *)v30, v21);
  2414.                     int32_t v31 = g137 + 1; // 0x3f24
  2415.                     g137 = v31;
  2416.                     if (v31 >= v27) {
  2417.                         // break -> 0x3f30
  2418.                         break;
  2419.                     }
  2420.                     // continue -> 0x3eec
  2421.                 }
  2422.                 // 0x3f30
  2423.                 printf(format2);
  2424.                 g132 = (int32_t)v2;
  2425.                 g128 = v20;
  2426.                 fprintf(stream, format3);
  2427.                 v28 = v2;
  2428.                 g127 = (int32_t)v28;
  2429.                 free(v28);
  2430.                 g135 = v26;
  2431.                 v29 = g136;
  2432.                 g134 = v29;
  2433.                 g129 = 0;
  2434.                 g1 = true;
  2435.                 g2 = v26 < 0;
  2436.                 g3 = v23 == v24;
  2437.                 if (v23 == v24) {
  2438.                     // break -> 0x3f68
  2439.                     break;
  2440.                 }
  2441.                 v18 = v29;
  2442.                 // continue -> 0x3e80
  2443.                 continue;
  2444.             }
  2445.             // 0x3f30
  2446.             printf(format2);
  2447.             g132 = (int32_t)v2;
  2448.             g128 = v20;
  2449.             fprintf(stream, format3);
  2450.             v28 = v2;
  2451.             g127 = (int32_t)v28;
  2452.             free(v28);
  2453.             g135 = v26;
  2454.             v29 = g136;
  2455.             g134 = v29;
  2456.             g129 = 0;
  2457.             g1 = true;
  2458.             g2 = v26 < 0;
  2459.             g3 = v23 == v24;
  2460.             if (v23 == v24) {
  2461.                 // break -> 0x3f68
  2462.                 break;
  2463.             }
  2464.             v18 = v29;
  2465.             // continue -> 0x3e80
  2466.         }
  2467.         // 0x3f68
  2468.         g134 = v14;
  2469.         g135 = v13;
  2470.         g136 = v12;
  2471.         g137 = v11;
  2472.         g138 = v3;
  2473.         g139 = v4;
  2474.         g129 = v5;
  2475.         g130 = v6;
  2476.         v7();
  2477.         if (g3) {
  2478.             // if_3fb8_0_true
  2479.             v15 = g127 & g128 & g132 & g133;
  2480.             g138 = g136 / 0x40000000 & v15;
  2481.             result = v15;
  2482.             // branch -> after_if_3fb8_0
  2483.         } else {
  2484.             // 0x3f68
  2485.             result = g127;
  2486.             // branch -> after_if_3fb8_0
  2487.         }
  2488.         // after_if_3fb8_0
  2489.         return result;
  2490.     }
  2491.     uint32_t v32 = v16 % 4; // 0x3c60
  2492.     g134 = v16 - v32;
  2493.     int32_t v33;
  2494.     g138 = &v33;
  2495.     int32_t v34 = *(int32_t *)0x3f98 + 0x3c90; // 0x3c88
  2496.     int32_t v35 = *(int32_t *)0x3fa8 + 0x3ca8; // 0x3ca0
  2497.     char * format5 = (char *)v35;
  2498.     int32_t v36 = *(int32_t *)0x3fa0 + 0x3cb4; // 0x3cac
  2499.     char * format4 = (char *)(*(int32_t *)0x3fa4 + 0x3c9c);
  2500.     int32_t v37 = &str3; // 0x3dc8_0
  2501.     // branch -> 0x3cb4
  2502.   lab_0x3cb4:
  2503.     while (true) {
  2504.         // 0x3cb4
  2505.         g136 = (int32_t)&v2;
  2506.         g139 = v9;
  2507.         generate_initial_indented_line((int32_t *)&v2, &str2, g132, g133, v17, 0, v35);
  2508.         v17 = 0;
  2509.         concatenate((int32_t *)&v2, &str2, (char *)&str, v34);
  2510.         int32_t v38 = g135; // 0x3ce4
  2511.         uint32_t v39 = v38; // 0x3d0c
  2512.         if (v38 > 31) {
  2513.             // if_3cf0_0_true
  2514.             v39 = 32;
  2515.             // branch -> after_if_3cf0_0
  2516.         }
  2517.         int32_t v40 = v38 - v39; // 0x3cf8
  2518.         g135 = v40;
  2519.         g139 = v39 / v16;
  2520.         g129 = v16;
  2521.         char * v41;
  2522.         if (v16 <= v39) {
  2523.             // 0x3d18
  2524.             g136 = 0;
  2525.             int32_t v42 = g137; // 0x3d50
  2526.             int32_t v43 = v16; // 0x3dac
  2527.             // branch -> 0x3d1c
  2528.             while (true) {
  2529.                 int32_t v44 = v42; // 0x3db441
  2530.                 int32_t v45 = 0; // 0x3dac
  2531.                 int32_t v46; // 0x3dfc
  2532.                 if (v43 >= 4) {
  2533.                     int32_t v47 = g134; // 0x3d30
  2534.                     if (v47 != 0) {
  2535.                         int32_t v48 = v47 + v42; // 0x3d50
  2536.                         int32_t v49 = 0; // 0x3d58
  2537.                         v33 = *(int32_t *)(v49 + v42);
  2538.                         // branch -> 0x3d58
  2539.                         while (v47 != v49 + 4) {
  2540.                             // 0x3d58
  2541.                             v49 += 4;
  2542.                             v33 = *(int32_t *)(v49 + v42);
  2543.                             // continue -> 0x3d58
  2544.                         }
  2545.                         // 0x3d88
  2546.                         if (v32 == 0) {
  2547.                             // 0x3dc8
  2548.                             g135 = v37;
  2549.                             sprintf((char *)&str3, (char *)&str2);
  2550.                             v17 = 0;
  2551.                             v46 = v36;
  2552.                             if (g136 != 0) {
  2553.                               lab_if_3df4_0_true:
  2554.                                 // if_3df4_0_true
  2555.                                 v46 = *(int32_t *)0x3f9c + 0x3dfc;
  2556.                                 // branch -> after_if_3df4_0
  2557.                             }
  2558.                           lab_after_if_3df4_0:
  2559.                             // after_if_3df4_0
  2560.                             concatenate((int32_t *)&v2, &str2, (char *)v46, v37);
  2561.                             int32_t v50 = g136 + 1; // 0x3e04
  2562.                             g136 = v50;
  2563.                             int32_t v51 = g137 + (v16 + 255) % 256 + 1; // 0x3e0c
  2564.                             g137 = v51;
  2565.                             if (v50 < g139) {
  2566.                                 // after_if_3df4_0.dec_label_pc_3d1c_crit_edge
  2567.                                 v42 = v51;
  2568.                                 v43 = g129;
  2569.                                 // branch -> 0x3d1c
  2570.                                 continue;
  2571.                             } else {
  2572.                                 // 0x3e14
  2573.                                 printf(format4);
  2574.                                 g132 = (int32_t)v2;
  2575.                                 g128 = v35;
  2576.                                 fprintf(stream, format5);
  2577.                                 v41 = v2;
  2578.                                 g127 = (int32_t)v41;
  2579.                                 free(v41);
  2580.                                 g135 = v40;
  2581.                                 g1 = true;
  2582.                                 g2 = v40 < 0;
  2583.                                 g3 = v38 == v39;
  2584.                                 if (v38 == v39) {
  2585.                                     // break (via goto) -> 0x3f68
  2586.                                     goto lab_0x3f68;
  2587.                                 }
  2588.                                 // continue (via goto) -> 0x3cb4
  2589.                                 goto lab_0x3cb4;
  2590.                             }
  2591.                         } else {
  2592.                             v44 = v48;
  2593.                             v45 = v47;
  2594.                         }
  2595.                     } else {
  2596.                         v44 = v42;
  2597.                         v45 = 0;
  2598.                     }
  2599.                 }
  2600.                 int32_t v52 = v43 - v45; // 0x3db8
  2601.                 int32_t v53 = v44; // 0x3db4
  2602.                 g135 = (int32_t)*(char *)v53;
  2603.                 // branch -> 0x3db4
  2604.                 while (v52 != 1) {
  2605.                     // 0x3db4
  2606.                     v52--;
  2607.                     v53++;
  2608.                     g135 = (int32_t)*(char *)v53;
  2609.                     // continue -> 0x3db4
  2610.                 }
  2611.                 // 0x3dc8
  2612.                 g135 = v37;
  2613.                 sprintf((char *)&str3, (char *)&str2);
  2614.                 v17 = 0;
  2615.                 if (g136 == 0) {
  2616.                     v46 = v36;
  2617.                     goto lab_after_if_3df4_0;
  2618.                 }
  2619.                 goto lab_if_3df4_0_true;
  2620.             }
  2621.         }
  2622.         // 0x3e14
  2623.         printf(format4);
  2624.         g132 = (int32_t)v2;
  2625.         g128 = v35;
  2626.         fprintf(stream, format5);
  2627.         v41 = v2;
  2628.         g127 = (int32_t)v41;
  2629.         free(v41);
  2630.         g135 = v40;
  2631.         g1 = true;
  2632.         g2 = v40 < 0;
  2633.         g3 = v38 == v39;
  2634.         if (v38 == v39) {
  2635.             // break -> 0x3f68
  2636.             break;
  2637.         }
  2638.         // continue -> 0x3cb4
  2639.     }
  2640.     // 0x3f68
  2641.     g134 = v14;
  2642.     g135 = v13;
  2643.     g136 = v12;
  2644.     g137 = v11;
  2645.     g138 = v3;
  2646.     g139 = v4;
  2647.     g129 = v5;
  2648.     g130 = v6;
  2649.     v7();
  2650.     if (g3) {
  2651.         // if_3fb8_0_true
  2652.         v15 = g127 & g128 & g132 & g133;
  2653.         g138 = g136 / 0x40000000 & v15;
  2654.         result = v15;
  2655.         // branch -> after_if_3fb8_0
  2656.     } else {
  2657.         // 0x3f68
  2658.         result = g127;
  2659.         // branch -> after_if_3fb8_0
  2660.     }
  2661.     // after_if_3fb8_0
  2662.     return result;
  2663. }
  2664.  
  2665. // Address range: 0x3fc0 - 0x433f
  2666. int32_t handle_incbin_data(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, char * a6, int32_t a7, int32_t a8, uint32_t a9) {
  2667.     // 0x3fc0
  2668.     g133 = a4;
  2669.     int32_t v1 = g134; // 0x3fc0
  2670.     int32_t v2 = g135; // 0x3fc0
  2671.     int32_t v3 = g138; // 0x3fc0
  2672.     int32_t v4 = g129; // 0x3fc0
  2673.     int32_t v5 = g130; // bp-8
  2674.     g130 = &v5;
  2675.     g139 = a2;
  2676.     g137 = a4;
  2677.     int32_t * v6 = (int32_t *)(a1 + 4); // 0x3fe0_0
  2678.     int32_t v7 = *v6; // 0x3fe0
  2679.     printf("Binary inclusion size: %u\n", v7);
  2680.     g138 = 16;
  2681.     int32_t v8 = v7; // 0x4004
  2682.     if (v7 < 16) {
  2683.         // if_3ffc_0_true
  2684.         v8 = 16;
  2685.         // branch -> after_if_3ffc_0
  2686.     }
  2687.     int32_t v9 = v8 % 256; // R4
  2688.     printf("First %hhu bytes:", (char)v8);
  2689.     if (v9 != 0) {
  2690.         // 0x4018
  2691.         g135 = 0;
  2692.         g136 = (int32_t)" %02hhx";
  2693.         int32_t format = (int32_t)" %02hhx"; // 0x4028
  2694.         int32_t v10 = 0; // 0x4024
  2695.         // branch -> 0x4024
  2696.         while (true) {
  2697.             // 0x4024
  2698.             printf((char *)format, *(char *)(g139 + v10));
  2699.             int32_t v11 = g135 + 1; // 0x4030
  2700.             g135 = v11;
  2701.             if (v11 < v9) {
  2702.                 // 0x4024
  2703.                 format = g136;
  2704.                 v10 = v11;
  2705.                 // branch -> 0x4024
  2706.                 continue;
  2707.             }
  2708.         }
  2709.     }
  2710.     // 0x403c
  2711.     putchar(10);
  2712.     g134 = a1;
  2713.     int32_t v12 = *v6; // 0x4048
  2714.     int32_t v13 = g137; // 0x404c
  2715.     int32_t v14 = g138 & 16 * v12 ^ 0x7f09f; // 0x405c
  2716.     g129 = v14;
  2717.     if ((v12 & 2) == 0) {
  2718.         int32_t v15 = 32; // 0x4078
  2719.         if (validate_pointers(g139, v12, a3) != 0) {
  2720.             // if_4074_0_true
  2721.             v15 = 96;
  2722.             // branch -> after_if_4074_0
  2723.         }
  2724.         int32_t v16 = g129 | v15; // 0x4078
  2725.         g129 = v16;
  2726.         v14 = v16;
  2727.         // branch -> 0x407c
  2728.     }
  2729.     int32_t v17 = v14; // 0x4098
  2730.     if (*(int32_t *)*(int32_t *)0x1e110 != 0) {
  2731.         int32_t v18 = v14 | 0x80000; // 0x4094
  2732.         g129 = v18;
  2733.         v17 = v18;
  2734.         // branch -> after_if_4094_0
  2735.     }
  2736.     uint32_t v19 = get_command((int32_t)"Action for current .incbin: ", v17); // 0x409c
  2737.     g138 = v19;
  2738.     if (v19 < 12) {
  2739.         // 0x4244
  2740.         if (v19 == 0) {
  2741.             // 0x430c
  2742.             g126 = &g55;
  2743.             exit(0);
  2744.             // UNREACHABLE
  2745.         }
  2746.         // 0x424c
  2747.         if (v19 <= 1 || v19 == 2) {
  2748.             // 0x4254
  2749.             g135 = v2;
  2750.             g138 = v3;
  2751.             g129 = v4;
  2752.             return 3 - v19;
  2753.         }
  2754.         // 0x4260
  2755.         if (0x1000000 * *(int32_t *)&g44 / 0x1000000 % 2 != 0) {
  2756.             // 0x4274
  2757.             return write_header_comment((int32_t *)g134, (struct _IO_FILE *)a3);
  2758.         }
  2759.         uint32_t result = v19 - 3; // 0x4280
  2760.         if (result < 3) {
  2761.             // 0x42ec
  2762.             g135 = v2;
  2763.             g138 = v3;
  2764.             g129 = v4;
  2765.             return result;
  2766.         }
  2767.         int32_t v20 = *(int32_t *)(g134 + 4); // 0x4294
  2768.         uint32_t v21 = result % 256; // 0x429c
  2769.         int32_t v22 = v21 == 0 ? 1 : v21 < 32 ? (1 << v21) % 256 : 0; // 0x42a0
  2770.         int32_t v23;
  2771.         int32_t v24;
  2772.         int32_t v25;
  2773.         int32_t v26;
  2774.         return output_binary_data((char *)g139, v20, v22, (struct _IO_FILE *)a3, v26, v25, v13, a3, v24, a1, v23, v1);
  2775.     }
  2776.     // 0x40ac
  2777.     g137 = 0;
  2778.     g135 = -12;
  2779.     int32_t v27 = g33; // 0x40c4
  2780.     g136 = v27 + 84;
  2781.     uint32_t v28 = v19 % 256; // 0x40ec
  2782.     uint32_t v29 = v28 - 12; // 0x40ec
  2783.     g1 = v29 > 6;
  2784.     g2 = v28 < 19;
  2785.     g3 = v29 == 7;
  2786.     if (v29 > 7) {
  2787.         // 0x422c
  2788.         return get_command((int32_t)"Action for current .incbin: ", g129);
  2789.     }
  2790.     // 0x40f8
  2791.     g128 = &g54;
  2792.     int32_t v30 = *(int32_t *)(4 * v29 + (int32_t)&g54); // 0x4100
  2793.     g127 = v30;
  2794.     ((int32_t (*)(int32_t, int32_t))(v30 + (int32_t)&g54))(v30, (int32_t)&g54);
  2795.     if (g3) {
  2796.         // after_if_4114_0
  2797.         abort();
  2798.         // UNREACHABLE
  2799.     }
  2800.     // after_if_4124_0
  2801.     g138 = a9;
  2802.     int32_t v31 = *(int32_t *)(g134 + 4); // 0x4130
  2803.     g137 = v31;
  2804.     g135 = 0;
  2805.     int32_t v32 = 256 * (a9 % 256) | 16; // 0x413c
  2806.     g134 = v32;
  2807.     // branch -> 0x4140
  2808.     int32_t v33;
  2809.     int32_t v34; // 0x4178
  2810.     while (true) {
  2811.         // 0x4140
  2812.         dump_data_line_as_text((struct _IO_FILE *)g136, g139, v32 - 16, v31, v27, (int32_t)"Script file: ", v13, a3, 0);
  2813.         int32_t v35 = g135 + 1; // 0x4154
  2814.         g135 = v35;
  2815.         if (v35 % 256 <= 15) {
  2816.             uint32_t v36 = g134; // 0x4164
  2817.             int32_t v37 = v36 + 16; // 0x4164
  2818.             int32_t v38 = g137; // 0x4168
  2819.             g134 = v37;
  2820.             if (v36 >= v38) {
  2821.                 // break -> 0x4174
  2822.                 break;
  2823.             }
  2824.             v31 = v38;
  2825.             v32 = v37;
  2826.             // continue -> 0x4140
  2827.             continue;
  2828.         }
  2829.         // 0x4174
  2830.         g134 = v33;
  2831.         v34 = g138 + 1;
  2832.         g138 = v34;
  2833.         g137 = 0;
  2834.         g135 = -12;
  2835.         if (256 * (v34 % 256) >= *(int32_t *)(v33 + 4)) {
  2836.             // 0x422c
  2837.             return get_command((int32_t)"Action for current .incbin: ", g129);
  2838.         }
  2839.         // if_4194_0_true
  2840.         g138 = 0;
  2841.         // branch -> 0x422c
  2842.         // 0x422c
  2843.         return get_command((int32_t)"Action for current .incbin: ", g129);
  2844.     }
  2845.     // 0x4174
  2846.     g134 = v33;
  2847.     v34 = g138 + 1;
  2848.     g138 = v34;
  2849.     g137 = 0;
  2850.     g135 = -12;
  2851.     if (256 * (v34 % 256) < *(int32_t *)(v33 + 4)) {
  2852.         // if_4194_0_true
  2853.         g138 = 0;
  2854.         // branch -> 0x422c
  2855.     }
  2856.     // 0x422c
  2857.     return get_command((int32_t)"Action for current .incbin: ", g129);
  2858. }
  2859.  
  2860. // Address range: 0x4340 - 0x4397
  2861. int32_t preview_incbin(int32_t a1, int32_t a2, int32_t a3) {
  2862.     int32_t v1 = g134; // 0x4340
  2863.     int32_t v2 = g135; // 0x4340
  2864.     int32_t v3 = g136; // 0x4340
  2865.     int32_t v4 = g137; // 0x4340
  2866.     int32_t v5 = g138; // 0x4340
  2867.     int32_t v6 = g130; // bp-8
  2868.     g130 = &v6;
  2869.     g138 = a1;
  2870.     g134 = a3;
  2871.     g135 = a2;
  2872.     g136 = 0;
  2873.     int32_t v7 = g33 + 84; // 0x4360
  2874.     g137 = v7;
  2875.     // branch -> 0x4364
  2876.     while (true) {
  2877.         // 0x4364
  2878.         dump_data_line_as_text((struct _IO_FILE *)v7, a1, a2, a3, v1, v2, v3, v4, v5);
  2879.         int32_t v8 = g135 + 16; // 0x4378
  2880.         g135 = v8;
  2881.         uint32_t v9 = g134; // 0x437c
  2882.         g1 = v8 >= v9;
  2883.         g3 = v8 == v9;
  2884.         uint32_t v10 = g136; // 0x4380
  2885.         if (v8 >= v9) {
  2886.             int32_t result = v10 % 256; // 0x43847
  2887.             g127 = result;
  2888.             // branch -> 0x4390
  2889.             // 0x4390
  2890.             g134 = v1;
  2891.             g135 = v2;
  2892.             g136 = v3;
  2893.             g137 = v4;
  2894.             g138 = v5;
  2895.             g130 = v6;
  2896.             return result;
  2897.         }
  2898.         int32_t v11 = v10 + 1; // 0x4380
  2899.         g136 = v11;
  2900.         uint32_t result2 = v11 % 256; // 0x43842
  2901.         g127 = result2;
  2902.         g1 = result2 > 15;
  2903.         g3 = result2 == 16;
  2904.         if (result2 <= 15) {
  2905.             // 0x4364
  2906.             a3 = v9;
  2907.             a2 = v8;
  2908.             a1 = g138;
  2909.             v7 = g137;
  2910.             // branch -> 0x4364
  2911.             continue;
  2912.         }
  2913.         // 0x4390
  2914.         g134 = v1;
  2915.         g135 = v2;
  2916.         g136 = v3;
  2917.         g137 = v4;
  2918.         g138 = v5;
  2919.         g130 = v6;
  2920.         return result2;
  2921.     }
  2922. }
  2923.  
  2924. // Address range: 0x4398 - 0x445b
  2925. int32_t dump_incbin_as_text(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12) {
  2926.     int32_t v1 = g135; // 0x4398
  2927.     int32_t v2 = g130; // bp-8
  2928.     g130 = &v2;
  2929.     g135 = a1;
  2930.     g134 = a2;
  2931.     printf("File to write: ");
  2932.     int32_t result = read_line((struct _IO_FILE *)g33); // 0x43bc
  2933.     char * file_path = (char *)result; // 0x43c4_0
  2934.     if (*file_path != 0) {
  2935.         // 0x43d0
  2936.         return (int32_t)fopen(file_path, "w");
  2937.     }
  2938.     // 0x4440
  2939.     g135 = v1;
  2940.     free(file_path);
  2941.     return result;
  2942. }
  2943.  
  2944. // Address range: 0x445c - 0x44e7
  2945. int32_t get_dump_file(char * a1, int32_t a2, int32_t a3) {
  2946.     int32_t v1 = g135; // 0x445c
  2947.     int32_t v2 = g130; // bp-8
  2948.     g130 = &v2;
  2949.     g135 = (int32_t)a1;
  2950.     printf("File to write: ");
  2951.     int32_t v3 = read_line((struct _IO_FILE *)g33); // 0x447c
  2952.     char * file_path = (char *)v3; // 0x4484_0
  2953.     if (*file_path == 0) {
  2954.         // 0x44c8
  2955.         free((char *)v3);
  2956.         g135 = v1;
  2957.         return 0;
  2958.     }
  2959.     struct _IO_FILE * file = fopen(file_path, (char *)g135); // 0x4498
  2960.     g135 = (int32_t)file;
  2961.     char * v4 = (char *)v3;
  2962.     if (file != NULL) {
  2963.         // 0x44a8
  2964.         free(v4);
  2965.         int32_t result = g135; // 0x44b0
  2966.         g135 = v1;
  2967.         return result;
  2968.     }
  2969.     // 0x44b8
  2970.     printf("err: could not open file %s for writing\n", v4);
  2971.     // branch -> 0x44c8
  2972.     // 0x44c8
  2973.     free((char *)v3);
  2974.     g135 = v1;
  2975.     return 0;
  2976. }
  2977.  
  2978. // Address range: 0x44e8 - 0x4647
  2979. int32_t dump_data_line_as_text(struct _IO_FILE * stream, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9) {
  2980.     int32_t v1 = g134; // 0x44e8
  2981.     int32_t v2 = g135; // 0x44e8
  2982.     int32_t v3 = g136; // 0x44e8
  2983.     int32_t v4 = g137; // 0x44e8
  2984.     int32_t v5 = g138; // 0x44e8
  2985.     int32_t v6 = g139; // 0x44e8
  2986.     int32_t v7 = g129; // 0x44e8
  2987.     int32_t v8 = g130; // bp-8
  2988.     int32_t v9 = g126; // 0x44e8
  2989.     g130 = &v8;
  2990.     g134 = (int32_t)stream;
  2991.     g138 = a2;
  2992.     g139 = a3;
  2993.     fprintf(stream, "%08x:   ", a3);
  2994.     uint32_t v10 = a4 - g139; // 0x4514
  2995.     int32_t v11 = v10 > 16 ? 16 : v10 % 256; // 0x451c
  2996.     g136 = v11;
  2997.     int32_t v12; // 0x458c
  2998.     int32_t stream2; // 0x4620
  2999.     int32_t v13; // 0x45d0
  3000.     uint32_t v14; // 0x45dc
  3001.     if (v11 == 0) {
  3002.         // 0x456c
  3003.         g135 = 0;
  3004.         // branch -> 0x4570
  3005.     } else {
  3006.         // 0x452c
  3007.         g135 = 0;
  3008.         int32_t v15 = 0; // 0x453c
  3009.         // branch -> 0x453c
  3010.         while (true) {
  3011.             char v16 = *(char *)(g138 + g139 + v15); // 0x4544
  3012.             fprintf((struct _IO_FILE *)g134, (char *)(int32_t)"%02hhx ", v16);
  3013.             int32_t v17 = g135 + 1; // 0x4550
  3014.             g135 = v17;
  3015.             uint32_t v18 = v17 % 256; // 0x4554
  3016.             if (v18 >= g136) {
  3017.                 // 0x4560
  3018.                 if (v18 < 16) {
  3019.                     // 0x4570
  3020.                     // branch -> 0x4578
  3021.                     while (true) {
  3022.                         // 0x4578
  3023.                         fwrite((char *)(int32_t)"   ", 3, 1, (struct _IO_FILE *)g134);
  3024.                         v12 = g135 + 1;
  3025.                         g135 = v12;
  3026.                         if (v12 % 256 < 16) {
  3027.                           lab_0x4578:
  3028.                             // 0x4578
  3029.                             // branch -> 0x4578
  3030.                             continue;
  3031.                         }
  3032.                     }
  3033.                 }
  3034.                 // 0x459c
  3035.                 fwrite("  ", 2, 1, (struct _IO_FILE *)g134);
  3036.                 if (g136 != 0) {
  3037.                     // 0x45bc
  3038.                     g129 = 0;
  3039.                     g135 = *(int32_t *)&g39;
  3040.                     v13 = *(int32_t *)0x1e144;
  3041.                     g137 = v13;
  3042.                     v14 = (int32_t)*(char *)(g138 + g139);
  3043.                     if (v14 % 8 == 0) {
  3044.                         // 0x4600
  3045.                         return putc(64, (struct _IO_FILE *)g134);
  3046.                     }
  3047.                     // 0x45f0
  3048.                     return fputs((char *)*(int32_t *)(4 * v14 + v13), (struct _IO_FILE *)g134);
  3049.                 }
  3050.                 // 0x461c
  3051.                 stream2 = g134;
  3052.                 g134 = v1;
  3053.                 g135 = v2;
  3054.                 g136 = v3;
  3055.                 g137 = v4;
  3056.                 g138 = v5;
  3057.                 g139 = v6;
  3058.                 g129 = v7;
  3059.                 g130 = v8;
  3060.                 g126 = v9;
  3061.                 return putc(10, (struct _IO_FILE *)stream2);
  3062.             }
  3063.             // 0x453c
  3064.             v15 = v18;
  3065.             // branch -> 0x453c
  3066.         }
  3067.     }
  3068.     // 0x4570
  3069.     // branch -> 0x4578
  3070.     while (true) {
  3071.         // 0x4578
  3072.         fwrite((char *)(int32_t)"   ", 3, 1, (struct _IO_FILE *)g134);
  3073.         v12 = g135 + 1;
  3074.         g135 = v12;
  3075.         if (v12 % 256 < 16) {
  3076.             goto lab_0x4578;
  3077.         }
  3078.         // 0x459c
  3079.         fwrite("  ", 2, 1, (struct _IO_FILE *)g134);
  3080.         if (g136 != 0) {
  3081.             // 0x45bc
  3082.             g129 = 0;
  3083.             g135 = *(int32_t *)&g39;
  3084.             v13 = *(int32_t *)0x1e144;
  3085.             g137 = v13;
  3086.             v14 = (int32_t)*(char *)(g138 + g139);
  3087.             if (v14 % 8 == 0) {
  3088.                 // 0x4600
  3089.                 return putc(64, (struct _IO_FILE *)g134);
  3090.             }
  3091.             // 0x45f0
  3092.             return fputs((char *)*(int32_t *)(4 * v14 + v13), (struct _IO_FILE *)g134);
  3093.         }
  3094.         // 0x461c
  3095.         stream2 = g134;
  3096.         g134 = v1;
  3097.         g135 = v2;
  3098.         g136 = v3;
  3099.         g137 = v4;
  3100.         g138 = v5;
  3101.         g139 = v6;
  3102.         g129 = v7;
  3103.         g130 = v8;
  3104.         g126 = v9;
  3105.         return putc(10, (struct _IO_FILE *)stream2);
  3106.     }
  3107. }
  3108.  
  3109. // Address range: 0x4648 - 0x470b
  3110. int32_t dump_incbin_as_binary(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11) {
  3111.     int32_t v1 = g135; // 0x4648
  3112.     int32_t v2 = g130; // bp-8
  3113.     g130 = &v2;
  3114.     g134 = a1;
  3115.     g135 = a2;
  3116.     printf("File to write: ");
  3117.     int32_t result = read_line((struct _IO_FILE *)g33); // 0x466c
  3118.     char * file_path = (char *)result; // 0x4674_0
  3119.     if (*file_path != 0) {
  3120.         // 0x4680
  3121.         return (int32_t)fopen(file_path, "wb");
  3122.     }
  3123.     // 0x46ec
  3124.     g135 = v1;
  3125.     free(file_path);
  3126.     return result;
  3127. }
  3128.  
  3129. // Address range: 0x470c - 0x4867
  3130. char * get_incbin_data(void) {
  3131.     int32_t v1 = g135; // 0x470c
  3132.     int32_t v2 = g136; // 0x470c
  3133.     int32_t v3 = g137; // 0x470c
  3134.     int32_t v4 = g138; // 0x470c
  3135.     int32_t v5 = g130; // bp-8
  3136.     g130 = &v5;
  3137.     char * found_char_pos = strchr(strstr((char *)g127, ".incbin"), 34); // 0x4724
  3138.     int32_t v6; // 0x484c
  3139.     if (found_char_pos == NULL) {
  3140.         // 0x47b8
  3141.         puts("err: no filename specified");
  3142.         // branch -> 0x4848
  3143.         // 0x4848
  3144.         g138 = 0;
  3145.         // branch -> 0x484c
  3146.         // 0x484c
  3147.         v6 = g138;
  3148.         g135 = v1;
  3149.         g136 = v2;
  3150.         g137 = v3;
  3151.         g138 = v4;
  3152.         g130 = v5;
  3153.         return (char *)v6;
  3154.     }
  3155.     int32_t str = (int32_t)found_char_pos + 1; // 0x4730
  3156.     char * found_char_pos2 = strchr((char *)str, 34); // 0x473c
  3157.     int32_t v7 = (int32_t)found_char_pos2; // 0x473c_4
  3158.     g135 = v7;
  3159.     if (found_char_pos2 == NULL) {
  3160.         // 0x47c8
  3161.         puts("err: invalid filename specification");
  3162.         // branch -> 0x4848
  3163.         // 0x4848
  3164.         g138 = 0;
  3165.         // branch -> 0x484c
  3166.     } else {
  3167.         int32_t v8 = v7 - str; // 0x474c
  3168.         g137 = v8;
  3169.         char * mem = malloc(v8 + 9); // 0x4754
  3170.         int32_t v9 = (int32_t)mem; // 0x4754_3
  3171.         g138 = v9;
  3172.         int32_t v10 = v9 + 8; // 0x475c
  3173.         g134 = v10;
  3174.         int32_t v11 = 0; // R9
  3175.         *(int32_t *)mem = 0;
  3176.         *(int32_t *)(g138 + 4) = v11;
  3177.         __aeabi_memcpy((char *)v10, (char *)str, g137);
  3178.         *(char *)(g137 + g134) = (char)v11;
  3179.         char * found_char_pos3 = strchr((char *)g135, 44); // 0x4788
  3180.         if (found_char_pos3 != NULL) {
  3181.             int32_t str2 = (int32_t)found_char_pos3 + 1; // 0x4794
  3182.             g136 = str2;
  3183.             char * found_char_pos4 = strchr((char *)str2, 44); // 0x47a0
  3184.             int32_t v12 = (int32_t)found_char_pos4; // 0x47a0_4
  3185.             g135 = v12;
  3186.             int32_t len;
  3187.             if (found_char_pos4 == NULL) {
  3188.                 // 0x47d8
  3189.                 len = strlen((char *)g136);
  3190.                 // branch -> 0x47e4
  3191.             } else {
  3192.                 // 0x47b0
  3193.                 len = v12 - g136;
  3194.                 // branch -> 0x47e4
  3195.             }
  3196.             int32_t v13 = get_value_from_string((char *)g136, len); // 0x47e8
  3197.             *(int32_t *)g138 = v13;
  3198.             if (v13 == -1) {
  3199.                 // 0x4834
  3200.                 // branch -> 0x483c
  3201.                 // 0x483c
  3202.                 puts((char *)(int32_t)"err: invalid offset");
  3203.                 free((char *)g138);
  3204.                 // branch -> 0x4848
  3205.                 // 0x4848
  3206.                 g138 = 0;
  3207.                 // branch -> 0x484c
  3208.             } else {
  3209.                 int32_t v14 = g135; // 0x47f8
  3210.                 if (v14 != 0) {
  3211.                     int32_t str3 = v14 + 1; // 0x4800
  3212.                     g134 = str3;
  3213.                     int32_t len2 = strlen((char *)str3); // 0x4808
  3214.                     int32_t v15 = get_value_from_string((char *)g134, len2); // 0x4814
  3215.                     *(int32_t *)(g138 + 4) = v15;
  3216.                     if (v15 <= 0) {
  3217.                         // 0x483c
  3218.                         puts((char *)(int32_t)"err: invalid length");
  3219.                         free((char *)g138);
  3220.                         // branch -> 0x4848
  3221.                         // 0x4848
  3222.                         g138 = 0;
  3223.                         // branch -> 0x484c
  3224.                     }
  3225.                 }
  3226.             }
  3227.             // 0x484c
  3228.             v6 = g138;
  3229.             g135 = v1;
  3230.             g136 = v2;
  3231.             g137 = v3;
  3232.             g138 = v4;
  3233.             g130 = v5;
  3234.             return (char *)v6;
  3235.         }
  3236.     }
  3237.     // 0x484c
  3238.     v6 = g138;
  3239.     g135 = v1;
  3240.     g136 = v2;
  3241.     g137 = v3;
  3242.     g138 = v4;
  3243.     g130 = v5;
  3244.     return (char *)v6;
  3245. }
  3246.  
  3247. // Address range: 0x4868 - 0x48c7
  3248. int32_t is_incbin(char * str) {
  3249.     int32_t v1 = g134; // bp-16
  3250.     int32_t v2 = g135; // 0x4868
  3251.     int32_t v3 = g130; // bp-8
  3252.     char * substr_pos = strstr(str, ".incbin"); // 0x4880
  3253.     g135 = (int32_t)substr_pos;
  3254.     if (substr_pos == NULL) {
  3255.         // 0x48bc
  3256.         g134 = v1;
  3257.         g135 = v2;
  3258.         g130 = v3;
  3259.         return 0;
  3260.     }
  3261.     char * found_char_pos = strchr((char *)(int32_t)str, 64); // 0x4898
  3262.     uint32_t v4 = g135; // 0x489c
  3263.     int32_t v5 = 0; // 0x48b4
  3264.     if (found_char_pos == NULL) {
  3265.         // if_48b0_0_true
  3266.         v5 = 1;
  3267.         // branch -> after_if_48b0_0
  3268.     }
  3269.     // after_if_48b0_0
  3270.     g134 = v1;
  3271.     g135 = v2;
  3272.     g130 = v3;
  3273.     return v5 | (int32_t)(v4 < (int32_t)found_char_pos);
  3274. }
  3275.  
  3276. // Address range: 0x48c8 - 0x49d3
  3277. int32_t write_header_comment(int32_t * a1, struct _IO_FILE * stream) {
  3278.     int32_t v1;
  3279.     char * v2 = (char *)v1; // bp-40
  3280.     int32_t v3 = (int32_t)a1;
  3281.     int32_t v4 = g134; // 0x48c8
  3282.     int32_t v5 = g135; // 0x48c8
  3283.     int32_t v6 = g136; // 0x48c8
  3284.     int32_t v7 = g137; // 0x48c8
  3285.     int32_t v8 = g138; // 0x48c8
  3286.     int32_t v9 = g139; // 0x48c8
  3287.     int32_t v10 = g130; // bp-8
  3288.     g130 = &v10;
  3289.     int32_t v11 = *a1; // 0x48dc
  3290.     g134 = v11;
  3291.     int32_t v12 = *(int32_t *)(v3 + 4); // 0x48dc
  3292.     g139 = v12;
  3293.     g138 = (int32_t)stream;
  3294.     char * mem = malloc(1); // 0x48e4
  3295.     g137 = 0;
  3296.     g136 = (int32_t)&v2;
  3297.     v2 = mem;
  3298.     *mem = 0;
  3299.     int32_t v13 = g137;
  3300.     concatenate((int32_t *)&v2, &v13, ".incbin \"", v3 + 8);
  3301.     int32_t str;
  3302.     g135 = &str;
  3303.     sprintf((char *)&str, "0x%08x", v11);
  3304.     concatenate((int32_t *)&v2, &v13, (char *)&str, (int32_t)", ");
  3305.     sprintf((char *)&str, "0x%x", v12);
  3306.     concatenate((int32_t *)&v2, &v13, (char *)&str, 0);
  3307.     int32_t result = (int32_t)v2; // R4
  3308.     printf(">>>> @ replacing: %s\n", v2);
  3309.     g132 = result;
  3310.     fprintf(stream, "@ replacing %s\n", (char *)result);
  3311.     free((char *)result);
  3312.     g134 = v4;
  3313.     g135 = v5;
  3314.     g136 = v6;
  3315.     g137 = v7;
  3316.     g138 = v8;
  3317.     g139 = v9;
  3318.     g130 = v10;
  3319.     return result;
  3320. }
  3321.  
  3322. // Address range: 0x49d4 - 0x4aab
  3323. int32_t generate_incbin(int32_t a1, int32_t a2, int32_t a3) {
  3324.     int32_t v1 = g134; // 0x49d4
  3325.     int32_t v2 = g135; // 0x49d4
  3326.     int32_t v3 = g136; // 0x49d4
  3327.     int32_t v4 = g137; // 0x49d4
  3328.     int32_t v5 = g138; // 0x49d4
  3329.     int32_t v6 = g139; // 0x49d4
  3330.     int32_t v7 = g130; // bp-8
  3331.     g130 = &v7;
  3332.     g134 = a1;
  3333.     g138 = a3;
  3334.     g137 = a2;
  3335.     char * mem = malloc(1); // 0x49f0
  3336.     g135 = 0;
  3337.     char * v8; // bp-36
  3338.     g139 = (int32_t)&v8;
  3339.     int32_t v9; // bp-40
  3340.     g136 = &v9;
  3341.     v8 = mem;
  3342.     *mem = 0;
  3343.     v9 = g135;
  3344.     concatenate((int32_t *)&v8, &v9, ".incbin \"", a1);
  3345.     int32_t str;
  3346.     g134 = &str;
  3347.     sprintf((char *)&str, "0x%08x", a2);
  3348.     concatenate((int32_t *)&v8, &v9, (char *)&str, (int32_t)", ");
  3349.     sprintf((char *)&str, "0x%x", a3);
  3350.     concatenate((int32_t *)&v8, &v9, (char *)&str, 0);
  3351.     int32_t result = (int32_t)v8;
  3352.     g127 = result;
  3353.     g134 = v1;
  3354.     g135 = v2;
  3355.     g136 = v3;
  3356.     g137 = v4;
  3357.     g138 = v5;
  3358.     g139 = v6;
  3359.     g130 = v7;
  3360.     return result;
  3361. }
  3362.  
  3363. // Address range: 0x4aac - 0x4bdf
  3364. int32_t write_incbin_for_segment(int32_t a1, int32_t a2, int32_t a3, struct _IO_FILE * a4) {
  3365.     // 0x4aac
  3366.     int32_t v1;
  3367.     char * str = (char *)v1; // bp-60
  3368.     int32_t v2;
  3369.     char * v3 = (char *)v2; // bp-40
  3370.     int32_t v4 = g134; // 0x4aac
  3371.     int32_t v5 = g135; // 0x4aac
  3372.     int32_t v6 = g136; // 0x4aac
  3373.     int32_t v7 = g137; // 0x4aac
  3374.     int32_t v8 = g138; // 0x4aac
  3375.     int32_t v9 = g129; // 0x4aac
  3376.     int32_t v10 = g130; // 0x4aac
  3377.     int32_t v11 = v10; // bp-8
  3378.     g130 = &v11;
  3379.     g135 = a3;
  3380.     g138 = (int32_t)a4;
  3381.     g136 = a2;
  3382.     g134 = a1;
  3383.     int32_t result; // 0x4bc0_2
  3384.     if (a3 != 0) {
  3385.         char * mem = malloc(1); // 0x4ad4
  3386.         g137 = 0;
  3387.         g129 = (int32_t)&v3;
  3388.         int32_t v12;
  3389.         g139 = &v12;
  3390.         v3 = mem;
  3391.         *mem = 0;
  3392.         int32_t v13 = g137; // 0x4afc
  3393.         v12 = v13;
  3394.         concatenate((int32_t *)&v3, &v12, ".incbin \"", g134);
  3395.         int32_t v14 = (int32_t)&str;
  3396.         g134 = v14;
  3397.         sprintf((char *)&str, "0x%08x", g136);
  3398.         concatenate((int32_t *)&v3, &v12, (char *)&str, (int32_t)", ");
  3399.         sprintf((char *)&str, "0x%x", g135);
  3400.         concatenate((int32_t *)&v3, &v12, (char *)&str, 0);
  3401.         g134 = (int32_t)v3;
  3402.         generate_initial_indented_line((int32_t *)&str, NULL, v14, 0, (int32_t)(char *)g137, v13, 0);
  3403.         printf(">>>> %s%s\n", str, (char *)g134);
  3404.         fprintf((struct _IO_FILE *)g138, "%s%s\n", str, (char *)g134);
  3405.         free((char *)g134);
  3406.         free(str);
  3407.         result = (int32_t)str;
  3408.         // branch -> 0x4bbc
  3409.     } else {
  3410.         result = a1;
  3411.         v11 = v10;
  3412.     }
  3413.     // 0x4bbc
  3414.     g134 = v4;
  3415.     g135 = v5;
  3416.     g136 = v6;
  3417.     g137 = v7;
  3418.     g138 = v8;
  3419.     g129 = v9;
  3420.     g130 = v11;
  3421.     return result;
  3422. }
  3423.  
  3424. // Address range: 0x4be0 - 0x4db7
  3425. int32_t parse_incbin(int32_t * a1, int32_t a2, int32_t a3) {
  3426.     int32_t v1 = g134; // 0x4be0
  3427.     int32_t v2 = g135; // 0x4be0
  3428.     int32_t v3 = g136; // 0x4be0
  3429.     int32_t v4 = g138; // 0x4be0
  3430.     int32_t v5 = g139; // 0x4be0
  3431.     int32_t v6 = g129; // 0x4be0
  3432.     int32_t v7 = g130; // bp-8
  3433.     g130 = &v7;
  3434.     g136 = (int32_t)a1;
  3435.     g139 = g133;
  3436.     g138 = a3;
  3437.     g134 = a2;
  3438.     g137 = 1;
  3439.     char * mem = malloc(1); // 0x4c04
  3440.     int32_t v8 = 0; // R2
  3441.     char * file_path = mem; // bp-40
  3442.     *mem = 0;
  3443.     int32_t v9 = v8; // bp-44
  3444.     int32_t v10 = g136 + 8; // bp-56
  3445.     concatenate((int32_t *)&file_path, &v9, (char *)a2, (int32_t)&g117);
  3446.     g134 = (int32_t)fopen(file_path, "rb");
  3447.     free(file_path);
  3448.     int32_t stream = g134; // 0x4c54
  3449.     if (stream == 0) {
  3450.         // 0x4d24
  3451.         puts("err: could not open file for reading");
  3452.         // branch -> 0x4d74
  3453.     } else {
  3454.         int32_t v11 = g136; // 0x4c5c
  3455.         int32_t offset = *(int32_t *)v11; // 0x4c5c
  3456.         int32_t v12; // 0x4ca0
  3457.         char * mem2; // 0x4cc0
  3458.         int32_t items_read; // 0x4ce8
  3459.         int32_t v13; // 0x4d88
  3460.         int32_t v14;
  3461.         int32_t v15; // 0x4cb0
  3462.         int32_t v16; // 0x4d04
  3463.         int32_t v17; // 0x4d08
  3464.         int32_t v18; // 0x4d0c
  3465.         int32_t size; // 0x4c90
  3466.         int32_t v19; // 0x4ce0
  3467.         int32_t v20; // 0x4cf4
  3468.         int32_t v21; // 0x4d04
  3469.         int32_t v22; // 0x4cb4
  3470.         if (offset != 0) {
  3471.             // 0x4c68
  3472.             if (fseek((struct _IO_FILE *)stream, offset, SEEK_SET) != 0) {
  3473.                 // 0x4c7c
  3474.                 fclose((struct _IO_FILE *)g134);
  3475.                 // branch -> 0x4d6c
  3476.                 // 0x4d6c
  3477.                 puts((char *)(int32_t)"err: could not seek on file");
  3478.                 g137 = 1;
  3479.                 // branch -> 0x4d74
  3480.                 // 0x4d74
  3481.                 g134 = v1;
  3482.                 g135 = v2;
  3483.                 g136 = v3;
  3484.                 g138 = v4;
  3485.                 g139 = v5;
  3486.                 g129 = v6;
  3487.                 g130 = v7;
  3488.                 return g137;
  3489.             }
  3490.             // 0x4c68
  3491.             // branch -> 0x4c90
  3492.             // 0x4c90
  3493.             size = *(int32_t *)(g136 + 4);
  3494.             g135 = size;
  3495.             if (size != 0) {
  3496.                 // 0x4cbc
  3497.                 mem2 = malloc(size);
  3498.                 g129 = (int32_t)mem2;
  3499.                 if (mem2 == NULL) {
  3500.                     // 0x4d34
  3501.                     fclose((struct _IO_FILE *)g134);
  3502.                     // branch -> 0x4d6c
  3503.                     // 0x4d6c
  3504.                     puts((char *)(int32_t)"err: out of memory");
  3505.                     g137 = 1;
  3506.                     // branch -> 0x4d74
  3507.                     // 0x4d74
  3508.                     g134 = v1;
  3509.                     g135 = v2;
  3510.                     g136 = v3;
  3511.                     g138 = v4;
  3512.                     g139 = v5;
  3513.                     g129 = v6;
  3514.                     g130 = v7;
  3515.                     return g137;
  3516.                 }
  3517.                 // 0x4cd0
  3518.                 v19 = g138;
  3519.                 g137 = 1;
  3520.                 items_read = fread(mem2, 1, g135, (struct _IO_FILE *)g134);
  3521.                 g135 = items_read;
  3522.                 v20 = *(int32_t *)(g136 + 4);
  3523.                 g138 = v20;
  3524.                 fclose((struct _IO_FILE *)g134);
  3525.                 if (items_read == v20) {
  3526.                     // 0x4d04
  3527.                     v16 = g139;
  3528.                     v21 = *(int32_t *)v16;
  3529.                     v17 = g136;
  3530.                     v18 = g129;
  3531.                     if (v21 == 0) {
  3532.                         // 0x4d80
  3533.                         v13 = handle_incbin_data(v17, v18, v19, v16, v10, (char *)v8, v19, v9, (int32_t)file_path);
  3534.                         v14 = v13;
  3535.                         // branch -> 0x4d8c
  3536.                     } else {
  3537.                         // 0x4d18
  3538.                         v14 = run_script_auto(v17, v18, (char *)v21, (struct _IO_FILE *)v19);
  3539.                         // branch -> 0x4d8c
  3540.                     }
  3541.                     // 0x4d8c
  3542.                     g137 = v14;
  3543.                     free((char *)g129);
  3544.                     // branch -> 0x4d74
  3545.                 } else {
  3546.                     // 0x4d48
  3547.                     printf("err: could not read %u bytes from file\n", *(int32_t *)(g136 + 4));
  3548.                     // branch -> 0x4d74
  3549.                 }
  3550.                 // 0x4d74
  3551.                 g134 = v1;
  3552.                 g135 = v2;
  3553.                 g136 = v3;
  3554.                 g138 = v4;
  3555.                 g139 = v5;
  3556.                 g129 = v6;
  3557.                 g130 = v7;
  3558.                 return g137;
  3559.             }
  3560.             // 0x4c9c
  3561.             v12 = get_file_length((struct _IO_FILE *)g134);
  3562.             v9 = v12;
  3563.             if (v12 == 0) {
  3564.                 // 0x4d5c
  3565.                 fclose((struct _IO_FILE *)g134);
  3566.                 // branch -> 0x4d6c
  3567.                 // 0x4d6c
  3568.                 puts((char *)(int32_t)"err: could not get file length for file");
  3569.                 g137 = 1;
  3570.                 // branch -> 0x4d74
  3571.                 // 0x4d74
  3572.                 g134 = v1;
  3573.                 g135 = v2;
  3574.                 g136 = v3;
  3575.                 g138 = v4;
  3576.                 g139 = v5;
  3577.                 g129 = v6;
  3578.                 g130 = v7;
  3579.                 return g137;
  3580.             }
  3581.             // 0x4cb0
  3582.             v15 = g136;
  3583.             v22 = v12 - *(int32_t *)v15;
  3584.             g135 = v22;
  3585.             *(int32_t *)(v15 + 4) = v22;
  3586.             // branch -> 0x4cbc
  3587.             // 0x4cbc
  3588.             mem2 = malloc(g135);
  3589.             g129 = (int32_t)mem2;
  3590.             if (mem2 == NULL) {
  3591.                 // 0x4d34
  3592.                 fclose((struct _IO_FILE *)g134);
  3593.                 // branch -> 0x4d6c
  3594.                 // 0x4d6c
  3595.                 puts((char *)(int32_t)"err: out of memory");
  3596.                 g137 = 1;
  3597.                 // branch -> 0x4d74
  3598.                 // 0x4d74
  3599.                 g134 = v1;
  3600.                 g135 = v2;
  3601.                 g136 = v3;
  3602.                 g138 = v4;
  3603.                 g139 = v5;
  3604.                 g129 = v6;
  3605.                 g130 = v7;
  3606.                 return g137;
  3607.             }
  3608.             // 0x4cd0
  3609.             v19 = g138;
  3610.             g137 = 1;
  3611.             items_read = fread(mem2, 1, g135, (struct _IO_FILE *)g134);
  3612.             g135 = items_read;
  3613.             v20 = *(int32_t *)(g136 + 4);
  3614.             g138 = v20;
  3615.             fclose((struct _IO_FILE *)g134);
  3616.             if (items_read == v20) {
  3617.                 // 0x4d04
  3618.                 v16 = g139;
  3619.                 v21 = *(int32_t *)v16;
  3620.                 v17 = g136;
  3621.                 v18 = g129;
  3622.                 if (v21 == 0) {
  3623.                     // 0x4d80
  3624.                     v13 = handle_incbin_data(v17, v18, v19, v16, v10, (char *)v8, v19, v9, (int32_t)file_path);
  3625.                     v14 = v13;
  3626.                     // branch -> 0x4d8c
  3627.                 } else {
  3628.                     // 0x4d18
  3629.                     v14 = run_script_auto(v17, v18, (char *)v21, (struct _IO_FILE *)v19);
  3630.                     // branch -> 0x4d8c
  3631.                 }
  3632.                 // 0x4d8c
  3633.                 g137 = v14;
  3634.                 free((char *)g129);
  3635.                 // branch -> 0x4d74
  3636.             } else {
  3637.                 // 0x4d48
  3638.                 printf("err: could not read %u bytes from file\n", *(int32_t *)(g136 + 4));
  3639.                 // branch -> 0x4d74
  3640.             }
  3641.             // 0x4d74
  3642.             g134 = v1;
  3643.             g135 = v2;
  3644.             g136 = v3;
  3645.             g138 = v4;
  3646.             g139 = v5;
  3647.             g129 = v6;
  3648.             g130 = v7;
  3649.             return g137;
  3650.         }
  3651.         // 0x4c90
  3652.         size = *(int32_t *)(v11 + 4);
  3653.         g135 = size;
  3654.         if (size == 0) {
  3655.             // 0x4c9c
  3656.             v12 = get_file_length((struct _IO_FILE *)g134);
  3657.             v9 = v12;
  3658.             if (v12 == 0) {
  3659.                 // 0x4d5c
  3660.                 fclose((struct _IO_FILE *)g134);
  3661.                 // branch -> 0x4d6c
  3662.                 // 0x4d6c
  3663.                 puts((char *)(int32_t)"err: could not get file length for file");
  3664.                 g137 = 1;
  3665.                 // branch -> 0x4d74
  3666.                 // 0x4d74
  3667.                 g134 = v1;
  3668.                 g135 = v2;
  3669.                 g136 = v3;
  3670.                 g138 = v4;
  3671.                 g139 = v5;
  3672.                 g129 = v6;
  3673.                 g130 = v7;
  3674.                 return g137;
  3675.             }
  3676.             // 0x4cb0
  3677.             v15 = g136;
  3678.             v22 = v12 - *(int32_t *)v15;
  3679.             g135 = v22;
  3680.             *(int32_t *)(v15 + 4) = v22;
  3681.             // branch -> 0x4cbc
  3682.             // 0x4cbc
  3683.             mem2 = malloc(g135);
  3684.             g129 = (int32_t)mem2;
  3685.             if (mem2 == NULL) {
  3686.                 // 0x4d34
  3687.                 fclose((struct _IO_FILE *)g134);
  3688.                 // branch -> 0x4d6c
  3689.                 // 0x4d6c
  3690.                 puts((char *)(int32_t)"err: out of memory");
  3691.                 g137 = 1;
  3692.                 // branch -> 0x4d74
  3693.                 // 0x4d74
  3694.                 g134 = v1;
  3695.                 g135 = v2;
  3696.                 g136 = v3;
  3697.                 g138 = v4;
  3698.                 g139 = v5;
  3699.                 g129 = v6;
  3700.                 g130 = v7;
  3701.                 return g137;
  3702.             }
  3703.             // 0x4cd0
  3704.             v19 = g138;
  3705.             g137 = 1;
  3706.             items_read = fread(mem2, 1, g135, (struct _IO_FILE *)g134);
  3707.             g135 = items_read;
  3708.             v20 = *(int32_t *)(g136 + 4);
  3709.             g138 = v20;
  3710.             fclose((struct _IO_FILE *)g134);
  3711.             if (items_read == v20) {
  3712.                 // 0x4d04
  3713.                 v16 = g139;
  3714.                 v21 = *(int32_t *)v16;
  3715.                 v17 = g136;
  3716.                 v18 = g129;
  3717.                 if (v21 == 0) {
  3718.                     // 0x4d80
  3719.                     v13 = handle_incbin_data(v17, v18, v19, v16, v10, (char *)v8, v19, v9, (int32_t)file_path);
  3720.                     v14 = v13;
  3721.                     // branch -> 0x4d8c
  3722.                 } else {
  3723.                     // 0x4d18
  3724.                     v14 = run_script_auto(v17, v18, (char *)v21, (struct _IO_FILE *)v19);
  3725.                     // branch -> 0x4d8c
  3726.                 }
  3727.                 // 0x4d8c
  3728.                 g137 = v14;
  3729.                 free((char *)g129);
  3730.                 // branch -> 0x4d74
  3731.             } else {
  3732.                 // 0x4d48
  3733.                 printf("err: could not read %u bytes from file\n", *(int32_t *)(g136 + 4));
  3734.                 // branch -> 0x4d74
  3735.             }
  3736.             // 0x4d74
  3737.             g134 = v1;
  3738.             g135 = v2;
  3739.             g136 = v3;
  3740.             g138 = v4;
  3741.             g139 = v5;
  3742.             g129 = v6;
  3743.             g130 = v7;
  3744.             return g137;
  3745.         }
  3746.         // 0x4cbc
  3747.         mem2 = malloc(size);
  3748.         g129 = (int32_t)mem2;
  3749.         if (mem2 == NULL) {
  3750.             // 0x4d34
  3751.             fclose((struct _IO_FILE *)g134);
  3752.             // branch -> 0x4d6c
  3753.             // 0x4d6c
  3754.             puts((char *)(int32_t)"err: out of memory");
  3755.             g137 = 1;
  3756.             // branch -> 0x4d74
  3757.             // 0x4d74
  3758.             g134 = v1;
  3759.             g135 = v2;
  3760.             g136 = v3;
  3761.             g138 = v4;
  3762.             g139 = v5;
  3763.             g129 = v6;
  3764.             g130 = v7;
  3765.             return g137;
  3766.         }
  3767.         // 0x4cd0
  3768.         v19 = g138;
  3769.         g137 = 1;
  3770.         items_read = fread(mem2, 1, g135, (struct _IO_FILE *)g134);
  3771.         g135 = items_read;
  3772.         v20 = *(int32_t *)(g136 + 4);
  3773.         g138 = v20;
  3774.         fclose((struct _IO_FILE *)g134);
  3775.         if (items_read == v20) {
  3776.             // 0x4d04
  3777.             v16 = g139;
  3778.             v21 = *(int32_t *)v16;
  3779.             v17 = g136;
  3780.             v18 = g129;
  3781.             if (v21 == 0) {
  3782.                 // 0x4d80
  3783.                 v13 = handle_incbin_data(v17, v18, v19, v16, v10, (char *)v8, v19, v9, (int32_t)file_path);
  3784.                 v14 = v13;
  3785.                 // branch -> 0x4d8c
  3786.             } else {
  3787.                 // 0x4d18
  3788.                 v14 = run_script_auto(v17, v18, (char *)v21, (struct _IO_FILE *)v19);
  3789.                 // branch -> 0x4d8c
  3790.             }
  3791.             // 0x4d8c
  3792.             g137 = v14;
  3793.             free((char *)g129);
  3794.             // branch -> 0x4d74
  3795.         } else {
  3796.             // 0x4d48
  3797.             printf("err: could not read %u bytes from file\n", *(int32_t *)(g136 + 4));
  3798.             // branch -> 0x4d74
  3799.         }
  3800.         // 0x4d74
  3801.         g134 = v1;
  3802.         g135 = v2;
  3803.         g136 = v3;
  3804.         g138 = v4;
  3805.         g139 = v5;
  3806.         g129 = v6;
  3807.         g130 = v7;
  3808.         return g137;
  3809.     }
  3810.     // 0x4d74
  3811.     g134 = v1;
  3812.     g135 = v2;
  3813.     g136 = v3;
  3814.     g138 = v4;
  3815.     g139 = v5;
  3816.     g129 = v6;
  3817.     g130 = v7;
  3818.     return g137;
  3819. }
  3820.  
  3821. // Address range: 0x4db8 - 0x4e9b
  3822. int32_t validate_pointers(int32_t a1, uint32_t a2, int32_t a3) {
  3823.     // 0x4db8
  3824.     g127 = a1;
  3825.     g128 = a2;
  3826.     int32_t v1 = g134; // bp-24
  3827.     int32_t v2 = g135; // 0x4db8
  3828.     int32_t v3 = g136; // 0x4db8
  3829.     int32_t v4 = g137; // 0x4db8
  3830.     int32_t v5 = g130; // bp-8
  3831.     g130 = &v5;
  3832.     g126 = 0;
  3833.     g131 = 0x203ffff;
  3834.     g133 = 4;
  3835.     int32_t v6 = 4; // 0x4dec
  3836.     // branch -> 0x4de0
  3837.     int32_t result; // 0x4e88
  3838.     while (true) {
  3839.         uint32_t v7 = v6 - 4; // 0x4de0
  3840.         g1 = v7 >= a2;
  3841.         g3 = v7 == a2;
  3842.         if (v7 < a2) {
  3843.             // 0x4e90
  3844.             g127 = g126;
  3845.             g134 = v1;
  3846.             g135 = v2;
  3847.             g136 = v3;
  3848.             g137 = v4;
  3849.             g130 = v5;
  3850.             return g126;
  3851.         }
  3852.         int32_t v8 = g127 + v6; // 0x4dec
  3853.         g132 = 0;
  3854.         unsigned char v9 = *(char *)(v8 - 1); // 0x4df4
  3855.         int32_t v10 = v9; // 0x4df4
  3856.         g135 = v10;
  3857.         g1 = v9 > 8;
  3858.         g2 = v9 < 9;
  3859.         g3 = v9 == 9;
  3860.         if (v9 > 9) {
  3861.             result = 0;
  3862.             // 0x4e88
  3863.             g127 = result;
  3864.             g134 = v1;
  3865.             g135 = v2;
  3866.             g136 = v3;
  3867.             g137 = v4;
  3868.             g130 = v5;
  3869.             return result;
  3870.         }
  3871.         int32_t v11 = (int32_t)*(char *)(v8 - 3); // 0x4e00
  3872.         g137 = v11;
  3873.         char v12 = *(char *)(v8 - 4); // 0x4e04
  3874.         char v13 = *(char *)(v8 - 2); // 0x4e08
  3875.         g136 = &g56;
  3876.         g134 = 256 * v11 | 0x1000000 * v10 | (int32_t)v12 | 0x10000 * (int32_t)v13;
  3877.         int32_t v14 = 4 * v10; // 0x4e1c
  3878.         g135 = v14;
  3879.         int32_t v15 = *(int32_t *)(v14 + (int32_t)&g56); // 0x4e20
  3880.         g135 = v15;
  3881.         ((int32_t (*)())(v15 + (int32_t)&g56))();
  3882.         if (g3) {
  3883.             // if_4e44_0_true
  3884.             g127 = 0;
  3885.             // branch -> after_if_4e44_0
  3886.         }
  3887.         int32_t v16 = g133 + 4; // 0x4e50
  3888.         g133 = v16;
  3889.         int32_t v17 = g134; // 0x4e54
  3890.         g1 = true;
  3891.         g3 = v17 == 0;
  3892.         if (v17 != 0) {
  3893.             // break -> after_if_4e44_0.dec_label_pc_4e88_crit_edge
  3894.             break;
  3895.         }
  3896.         v6 = v16;
  3897.         // continue -> 0x4de0
  3898.     }
  3899.     // after_if_4e44_0.dec_label_pc_4e88_crit_edge
  3900.     result = g132;
  3901.     // branch -> 0x4e88
  3902.     // 0x4e88
  3903.     g127 = result;
  3904.     g134 = v1;
  3905.     g135 = v2;
  3906.     g136 = v3;
  3907.     g137 = v4;
  3908.     g130 = v5;
  3909.     return result;
  3910. }
  3911.  
  3912. // Address range: 0x4e9c - 0x4ef3
  3913. int32_t output_pointers(int32_t result, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8) {
  3914.     int32_t v1 = g135; // 0x4e9c
  3915.     int32_t v2 = g130; // bp-8
  3916.     g130 = &v2;
  3917.     g135 = a2;
  3918.     g134 = a3;
  3919.     g136 = result;
  3920.     if (a2 == 0) {
  3921.         // if_4eb4_0_true
  3922.         g135 = v1;
  3923.         return result;
  3924.     }
  3925.     // after_if_4eb4_0
  3926.     g137 = 0;
  3927.     int32_t v3 = 0; // 0x4ec0
  3928.     // branch -> 0x4ebc
  3929.     while (true) {
  3930.         int32_t v4 = result + v3; // 0x4ec0
  3931.         char v5 = *(char *)v4; // 0x4ec0
  3932.         int32_t v6 = (int32_t)*(char *)(v4 + 1); // 0x4ec4
  3933.         g132 = v6;
  3934.         int32_t v7 = (int32_t)*(char *)(v4 + 2); // 0x4ec8
  3935.         g133 = v7;
  3936.         char v8 = *(char *)(v4 + 3); // 0x4ecc
  3937.         int32_t result2 = output_pointer(256 * v6 | (int32_t)v5 | 0x10000 * v7 | 0x1000000 * (int32_t)v8, (struct _IO_FILE *)a3); // 0x4ee0
  3938.         g127 = result2;
  3939.         int32_t v9 = g137 + 4; // 0x4ee4
  3940.         g137 = v9;
  3941.         uint32_t v10 = g135; // 0x4ee8
  3942.         g1 = v9 >= v10;
  3943.         g2 = v9 - v10 < 0;
  3944.         g3 = v9 == v10;
  3945.         if (v9 >= v10) {
  3946.             // 0x4ef0
  3947.             g134 = a5;
  3948.             g135 = a6;
  3949.             g136 = a7;
  3950.             g137 = a8;
  3951.             int32_t v11;
  3952.             g130 = v11;
  3953.             int32_t v12;
  3954.             ((int32_t (*)())v12)();
  3955.             return result2;
  3956.         }
  3957.         // 0x4ebc
  3958.         a3 = g134;
  3959.         v3 = v9;
  3960.         result = g136;
  3961.         // branch -> 0x4ebc
  3962.     }
  3963. }
  3964.  
  3965. // Address range: 0x4ef4 - 0x503b
  3966. int32_t output_pointer(int32_t a1, struct _IO_FILE * a2) {
  3967.     int32_t v1 = g134; // 0x4ef4
  3968.     int32_t v2 = g135; // 0x4ef4
  3969.     int32_t v3 = g136; // 0x4ef4
  3970.     int32_t v4 = g137; // 0x4ef4
  3971.     int32_t v5 = g130; // bp-8
  3972.     g130 = &v5;
  3973.     int32_t v6;
  3974.     g136 = &v6;
  3975.     int32_t v7;
  3976.     g137 = &v7;
  3977.     g134 = (int32_t)a2;
  3978.     g135 = a1;
  3979.     int32_t v8;
  3980.     generate_initial_indented_line(&v6, &v7, g132, g133, v8, 0, 0);
  3981.     concatenate(&v6, &v7, ".4byte ", 0);
  3982.     int32_t v9 = g135; // 0x4f34
  3983.     int32_t format;
  3984.     int32_t result; // 0x5008
  3985.     if (v9 == 0) {
  3986.         // 0x4fe4
  3987.         printf(">>>> %s0\n", (char *)v6);
  3988.         format = (int32_t)"%s0\n";
  3989.         // branch -> 0x5000
  3990.     } else {
  3991.         // 0x4f3c
  3992.         int32_t str;
  3993.         if (g24 != 0) {
  3994.             int32_t v10 = find_symbol_for_address(v9); // 0x4f54
  3995.             if (v10 == 0) {
  3996.                 // 0x4f50
  3997.                 // branch -> 0x4f98
  3998.                 // 0x4f98
  3999.                 g136 = &str;
  4000.                 sprintf((char *)&str, "0x%x", g135);
  4001.                 concatenate(&v6, &v7, (char *)&str, 0);
  4002.                 // branch -> 0x4fc4
  4003.             } else {
  4004.                 // 0x4f64
  4005.                 g137 = 0;
  4006.                 int32_t v11 = *(int32_t *)v10; // 0x4f6c
  4007.                 int32_t v12 = g135; // 0x4f78
  4008.                 g135 = v12 - v11;
  4009.                 int32_t v13 = &g120; // 0x4f8c
  4010.                 if (v12 != v11) {
  4011.                     // if_4f80_0_true
  4012.                     v13 = (int32_t)" + ";
  4013.                     // branch -> after_if_4f80_0
  4014.                 }
  4015.                 // after_if_4f80_0
  4016.                 concatenate(&v6, &v7, (char *)(v10 + 9), v13);
  4017.                 int32_t v14 = g135; // 0x4f90
  4018.                 if (v14 != 0) {
  4019.                     // 0x4f98
  4020.                     g136 = &str;
  4021.                     sprintf((char *)&str, "0x%x", v14);
  4022.                     concatenate(&v6, &v7, (char *)&str, 0);
  4023.                     // branch -> 0x4fc4
  4024.                 }
  4025.             }
  4026.             // 0x4fc4
  4027.             printf(">>>> %s\n", (char *)v6);
  4028.             format = (int32_t)"%s\n";
  4029.             // branch -> 0x5000
  4030.             // 0x5000
  4031.             g132 = v6;
  4032.             g128 = format;
  4033.             fprintf((struct _IO_FILE *)g134, (char *)format);
  4034.             result = v6;
  4035.             free((char *)result);
  4036.             g134 = v1;
  4037.             g135 = v2;
  4038.             g136 = v3;
  4039.             g137 = v4;
  4040.             g130 = v5;
  4041.             return result;
  4042.         }
  4043.         // 0x4f98
  4044.         g136 = &str;
  4045.         sprintf((char *)&str, "0x%x", v9);
  4046.         concatenate(&v6, &v7, (char *)&str, 0);
  4047.         // branch -> 0x4fc4
  4048.         // 0x4fc4
  4049.         printf(">>>> %s\n", (char *)v6);
  4050.         format = (int32_t)"%s\n";
  4051.         // branch -> 0x5000
  4052.     }
  4053.     // 0x5000
  4054.     g132 = v6;
  4055.     g128 = format;
  4056.     fprintf((struct _IO_FILE *)g134, (char *)format);
  4057.     result = v6;
  4058.     free((char *)result);
  4059.     g134 = v1;
  4060.     g135 = v2;
  4061.     g136 = v3;
  4062.     g137 = v4;
  4063.     g130 = v5;
  4064.     return result;
  4065. }
  4066.  
  4067. // Address range: 0x503c - 0x5343
  4068. int32_t handle_incbin_text(int32_t * a1, int32_t a2, struct _IO_FILE * a3, int32_t a4, int32_t a5, int32_t a6, char * format2, char * format, int32_t a9, int32_t a10) {
  4069.     int32_t v1 = (int32_t)a3;
  4070.     int32_t v2 = g135; // 0x503c
  4071.     int32_t v3 = g138; // 0x503c
  4072.     int32_t v4 = g130; // bp-8
  4073.     g130 = &v4;
  4074.     g135 = a2;
  4075.     g136 = (int32_t)a1;
  4076.     int32_t v5;
  4077.     int32_t v6;
  4078.     int32_t v7;
  4079.     int32_t v8;
  4080.     generate_initial_indented_line(&v5, NULL, v1, a4, v8, v7, v6);
  4081.     int32_t v9 = g136 + 8; // 0x5068
  4082.     int32_t v10 = g135; // 0x5074
  4083.     int32_t v11 = 1 - v10; // 0x5074
  4084.     g134 = 0;
  4085.     char * format3 = "%s.string \"%s\"\n"; // bp-88
  4086.     // branch -> 0x5234
  4087.     while (true) {
  4088.         int32_t v12 = v10; // 0x523c
  4089.         int32_t v13 = v11; // 0x5238
  4090.         int32_t v14 = 0; // 0x5238
  4091.         int32_t v15 = 0; // 0x5234
  4092.         int32_t v16 = 0; // 0x52b82
  4093.         // branch -> 0x5234
  4094.         while (true) {
  4095.           lab_0x5234_2:
  4096.             // 0x5234
  4097.             g137 = v13 - v14;
  4098.             g139 = v14 + v12;
  4099.             int32_t v17 = v15;
  4100.             // branch -> 0x50e0
  4101.             while (true) {
  4102.                 // 0x50e0
  4103.                 // branch -> 0x50e0
  4104.                 int32_t v18; // 0x5118
  4105.                 int32_t v19;
  4106.                 int32_t v20;
  4107.                 int32_t v21;
  4108.                 int32_t v22;
  4109.                 int32_t v23;
  4110.                 int32_t v24; // 0x52b81
  4111.                 int32_t v25; // 0x51c8
  4112.                 while (true) {
  4113.                     int32_t v26 = g136; // 0x50e0
  4114.                     uint32_t v27 = *(int32_t *)(v26 + 4); // 0x50e0
  4115.                     uint32_t v28 = g134; // 0x50e4
  4116.                     int32_t n = v27 - v28; // 0x50e4
  4117.                     if (v27 <= v28) {
  4118.                         // 0x52b8
  4119.                         write_incbin_for_segment(v9, *(int32_t *)v26 + v16, v27 - v16, a3);
  4120.                         free((char *)v5);
  4121.                         g135 = v2;
  4122.                         g138 = v3;
  4123.                         return 0;
  4124.                     }
  4125.                     // 0x50ec
  4126.                     g129 = n;
  4127.                     char * found_byte_pos = memchr((char *)g139, 255, n); // 0x50fc
  4128.                     int32_t v29 = (int32_t)found_byte_pos; // 0x50fc_6
  4129.                     int32_t v30; // 0x51c8
  4130.                     if (found_byte_pos == NULL) {
  4131.                         // after_if_5104_0thread-pre-split
  4132.                         v30 = g129;
  4133.                         // branch -> after_if_5104_0
  4134.                     } else {
  4135.                         int32_t v31 = g137 + v29; // 0x5104
  4136.                         g129 = v31;
  4137.                         v30 = v31;
  4138.                         // branch -> after_if_5104_0
  4139.                     }
  4140.                     // after_if_5104_0
  4141.                     if (v30 < 1000) {
  4142.                         // 0x51c0
  4143.                         g135 = v10;
  4144.                         v25 = g134 + v30;
  4145.                         g134 = v25;
  4146.                         v24 = v16;
  4147.                         // branch -> 0x50d0
  4148.                     } else {
  4149.                         // 0x5110
  4150.                         v18 = parse_buffer((char *)g139, v30, n, g133, a5, a6, (int32_t)format2, (int32_t)format, a9, a10, v19, v20, v21, v22, v23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, 0, 0, NULL, 0, 0, NULL, 0, 0, 0, 0, 0);
  4151.                         g138 = v18;
  4152.                         if (v18 != 0) {
  4153.                             // break -> 0x5128
  4154.                             break;
  4155.                         }
  4156.                         // continue -> 0x50e0
  4157.                         continue;
  4158.                     }
  4159.                   lab_0x50d0:
  4160.                     // 0x50d0
  4161.                     v12 = v10;
  4162.                     v13 = v11;
  4163.                     v14 = v25;
  4164.                     v15 = v17;
  4165.                     v16 = v24;
  4166.                     // branch -> 0x5234
  4167.                     goto lab_0x5234_2;
  4168.                 }
  4169.                 // 0x5128
  4170.                 if (v17 == 0) {
  4171.                     // 0x5134
  4172.                     printf("String found:\n%s\n", (char *)v18);
  4173.                     uint32_t v32 = get_command((int32_t)"Keep string? ", (int32_t)&g125 & 0xffff | 0x20000); // 0x5154
  4174.                     g1 = v32 > 16;
  4175.                     g2 = v32 < 17;
  4176.                     g3 = v32 == 17;
  4177.                     if (v32 > 17) {
  4178.                         // 0x50d8
  4179.                         v17 = 0;
  4180.                         // branch -> 0x50e0
  4181.                         continue;
  4182.                     } else {
  4183.                         // 0x5160
  4184.                         g128 = &g57;
  4185.                         int32_t v33 = *(int32_t *)(4 * v32 + (int32_t)&g57); // 0x5168
  4186.                         g127 = v33;
  4187.                         ((int32_t (*)(int32_t, int32_t))(v33 + (int32_t)&g57))(v33, (int32_t)&g57);
  4188.                         if (g3) {
  4189.                             // if_519c_0_true
  4190.                             // branch -> after_if_519c_0
  4191.                         }
  4192.                         // after_if_519c_0
  4193.                         g137 = 0;
  4194.                         int32_t v34 = *(int32_t *)g136; // 0x51d8
  4195.                         g135 = v22;
  4196.                         write_incbin_for_segment(v21, v34 + v23, g134 - v23, (struct _IO_FILE *)v22);
  4197.                         printf(format);
  4198.                         g133 = g138;
  4199.                         fprintf((struct _IO_FILE *)g135, format2);
  4200.                         free((char *)g138);
  4201.                         int32_t v35 = g129 + g134; // 0x5220
  4202.                         g134 = v35;
  4203.                         g135 = v19;
  4204.                         v23 = v35;
  4205.                         // branch -> 0x5234
  4206.                         while (true) {
  4207.                             // 0x5234
  4208.                             v12 = v19;
  4209.                             v13 = v20;
  4210.                             v14 = v35;
  4211.                             v15 = g137;
  4212.                             // branch -> 0x5234
  4213.                             goto lab_0x5234_2;
  4214.                         }
  4215.                     }
  4216.                 } else {
  4217.                     // 0x5258
  4218.                     g135 = v1;
  4219.                     write_incbin_for_segment(v9, *(int32_t *)g136 + v16, g134 - v16, a3);
  4220.                     printf(">>>> %s.string \"%s\"\n", (char *)v5, (char *)g138);
  4221.                     int32_t v36 = g138; // 0x5294
  4222.                     g133 = v36;
  4223.                     fprintf((struct _IO_FILE *)g135, format3, (char *)v5, (char *)v36);
  4224.                     free((char *)g138);
  4225.                     int32_t v37 = g129 + g134; // 0x52a4
  4226.                     g134 = v37;
  4227.                     g135 = v10;
  4228.                     v25 = v37;
  4229.                     v24 = v37;
  4230.                     // branch -> 0x50d0
  4231.                     goto lab_0x50d0;
  4232.                 }
  4233.                 while (true) {
  4234.                     // 0x5234
  4235.                     g137 = v13 - v14;
  4236.                     g139 = v14 + v12;
  4237.                     v17 = v15;
  4238.                     // branch -> 0x50e0
  4239.                     break;
  4240.                 }
  4241.             }
  4242.         }
  4243.     }
  4244. }
  4245.  
  4246. // Address range: 0x5344 - 0x542b
  4247. int main() {
  4248.     int32_t v1 = (int32_t)a2;
  4249.     int32_t v2 = g135; // 0x5344
  4250.     int32_t v3 = g130; // bp-8
  4251.     g130 = &v3;
  4252.     g134 = v1;
  4253.     if (a1 != 4) {
  4254.         // 0x53b8
  4255.         // branch -> 0x53fc
  4256.         // 0x53fc
  4257.         fprintf((struct _IO_FILE *)(g33 + 168), (char *)(int32_t)"usage: %s <infile> <outfile> <directory>\n");
  4258.         g135 = v2;
  4259.         return 1;
  4260.     }
  4261.     struct _IO_FILE * file = fopen((char *)*(int32_t *)(v1 + 4), "r"); // 0x5364
  4262.     g135 = (int32_t)file;
  4263.     int32_t format; // 0x5400
  4264.     if (file == NULL) {
  4265.         // 0x53d0
  4266.         format = (int32_t)"error: could not open file %s for reading\n";
  4267.         // branch -> 0x53fc
  4268.     } else {
  4269.         struct _IO_FILE * file2 = fopen((char *)*(int32_t *)(g134 + 8), "w"); // 0x5380
  4270.         g136 = (int32_t)file2;
  4271.         if (file2 != NULL) {
  4272.             // 0x5390
  4273.             dump_incbins((struct _IO_FILE *)g135, file2, *(int32_t *)(g134 + 12));
  4274.             fclose((struct _IO_FILE *)g135);
  4275.             fclose((struct _IO_FILE *)g136);
  4276.             g135 = v2;
  4277.             return 0;
  4278.         }
  4279.         // 0x53e8
  4280.         format = (int32_t)"error: could not open file %s for writing\n";
  4281.         // branch -> 0x53fc
  4282.     }
  4283.     // 0x53fc
  4284.     fprintf((struct _IO_FILE *)(g33 + 168), (char *)format);
  4285.     g135 = v2;
  4286.     return 1;
  4287. }
  4288.  
  4289. // Address range: 0x542c - 0x55db
  4290. int32_t dump_incbins(struct _IO_FILE * stream, struct _IO_FILE * a2, int32_t a3) {
  4291.     int32_t v1 = g135; // 0x542c
  4292.     int32_t v2 = g136; // 0x542c
  4293.     int32_t v3 = g138; // 0x542c
  4294.     int32_t v4 = g130; // bp-8
  4295.     g130 = &v4;
  4296.     g134 = 0;
  4297.     g135 = (int32_t)a2;
  4298.     g136 = (int32_t)stream;
  4299.     int32_t v5 = 0; // bp-40
  4300.     int32_t result; // 0x55b0
  4301.     if (feof(stream) == 0) {
  4302.         // 0x5458
  4303.         g137 = 0;
  4304.         char * format = "%s\n"; // bp-64
  4305.         g129 = (int32_t)"==== %s\n";
  4306.         g138 = (int32_t)"%s\n";
  4307.         // branch -> 0x5564
  4308.         while (true) {
  4309.             int32_t v6 = read_line((struct _IO_FILE *)g136); // 0x5568
  4310.             g139 = v6;
  4311.             int32_t v7 = v6; // 0x557c
  4312.             if (g137 == 0) {
  4313.                 // 0x54b0
  4314.                 if (is_incbin((char *)v6) == 0) {
  4315.                     // 0x54b0
  4316.                     // branch -> 0x5578
  4317.                     // 0x5578
  4318.                     printf((char *)g129, (char *)g139);
  4319.                     fprintf((struct _IO_FILE *)g135, (char *)g138, (char *)g139);
  4320.                     // branch -> 0x5594
  4321.                 } else {
  4322.                     // 0x54c0
  4323.                     printf("<<<< %s\n", (char *)g139);
  4324.                     g127 = g139;
  4325.                     char * v8 = get_incbin_data(); // 0x54d0
  4326.                     g134 = (int32_t)v8;
  4327.                     if (v8 == NULL) {
  4328.                         // 0x5514
  4329.                         printf(">>>> %s\n", (char *)g139);
  4330.                         fprintf((struct _IO_FILE *)g135, "%s\n", (char *)g139);
  4331.                         g137 = 0;
  4332.                         // branch -> 0x5594
  4333.                     } else {
  4334.                         // 0x54e0
  4335.                         g133 = &v5;
  4336.                         int32_t v9 = parse_incbin((int32_t *)v8, a3, g135); // 0x54f0
  4337.                         g137 = 0;
  4338.                         if (v9 != 1) {
  4339.                             // 0x5500
  4340.                             if (v9 == 2) {
  4341.                                 // 0x5538
  4342.                                 g137 = 1;
  4343.                                 // branch -> 0x553c
  4344.                                 // 0x553c
  4345.                                 printf(">>>> %s\n", (char *)g139);
  4346.                                 fprintf((struct _IO_FILE *)g135, format, (char *)g139);
  4347.                                 // branch -> 0x5558
  4348.                             } else {
  4349.                                 // 0x5508
  4350.                                 if (v9 == 3) {
  4351.                                     // if_550c_0_true
  4352.                                     g137 = 1;
  4353.                                     // branch -> 0x5558
  4354.                                 }
  4355.                             }
  4356.                           lab_0x5558:
  4357.                             // 0x5558
  4358.                             free((char *)g134);
  4359.                             // branch -> 0x5594
  4360.                             // 0x5594
  4361.                             free((char *)g139);
  4362.                             if (feof((struct _IO_FILE *)g136) != 0) {
  4363.                                 // break -> 0x55ac
  4364.                                 break;
  4365.                             }
  4366.                             // continue -> 0x5564
  4367.                             continue;
  4368.                         }
  4369.                         // 0x553c
  4370.                         printf(">>>> %s\n", (char *)g139);
  4371.                         fprintf((struct _IO_FILE *)g135, format, (char *)g139);
  4372.                         // branch -> 0x5558
  4373.                         goto lab_0x5558;
  4374.                     }
  4375.                     // 0x5594
  4376.                     free((char *)g139);
  4377.                     if (feof((struct _IO_FILE *)g136) != 0) {
  4378.                         // break -> 0x55ac
  4379.                         break;
  4380.                     }
  4381.                     // continue -> 0x5564
  4382.                     continue;
  4383.                 }
  4384.               lab_0x5594:
  4385.                 // 0x5594
  4386.                 free((char *)g139);
  4387.                 if (feof((struct _IO_FILE *)g136) != 0) {
  4388.                     // break -> 0x55ac
  4389.                     break;
  4390.                 }
  4391.                 // continue -> 0x5564
  4392.                 continue;
  4393.             }
  4394.             // 0x5578
  4395.             printf((char *)g129, (char *)v7);
  4396.             fprintf((struct _IO_FILE *)g135, (char *)g138, (char *)g139);
  4397.             // branch -> 0x5594
  4398.             goto lab_0x5594;
  4399.         }
  4400.         // 0x55ac
  4401.         result = v5;
  4402.         // branch -> 0x55b0
  4403.     } else {
  4404.         // 0x542c
  4405.         result = g134;
  4406.         // branch -> 0x55b0
  4407.     }
  4408.     // 0x55b0
  4409.     free((char *)result);
  4410.     g135 = v1;
  4411.     g136 = v2;
  4412.     g138 = v3;
  4413.     return result;
  4414. }
  4415.  
  4416. // Address range: 0x55dc - 0x5693
  4417. int32_t script_get_expression_value(char * a1, int32_t a2, int32_t * a3, int32_t a4) {
  4418.     int32_t v1 = (int32_t)a1;
  4419.     int32_t v2 = (int32_t)a3;
  4420.     g132 = v2;
  4421.     g133 = a4;
  4422.     int32_t v3 = g134; // bp-16
  4423.     int32_t v4 = g135; // 0x55dc
  4424.     int32_t v5 = g130; // bp-8
  4425.     int32_t v6 = g126; // 0x55dc
  4426.     g130 = &v5;
  4427.     g135 = v1;
  4428.     g134 = v2;
  4429.     if (*a1 != 36) {
  4430.         // 0x5634
  4431.         if ((int32_t)convert_string_to_number(a1, 1) != 0) {
  4432.             // 0x5648
  4433.             return convert_string_to_number((char *)g135, 0);
  4434.         }
  4435.         // 0x5668
  4436.         g127 = (int32_t)"syntax error";
  4437.         g134 = v3;
  4438.         g135 = v4;
  4439.         g130 = v5;
  4440.         g126 = v6;
  4441.         return duplicate_string();
  4442.     }
  4443.     int32_t v7 = v1 + 1; // 0x55f8
  4444.     g132 = v7;
  4445.     int32_t v8 = find_script_variable((int32_t *)a2, (char *)v7); // 0x5604
  4446.     if (v8 == 0) {
  4447.         // 0x5658
  4448.         g127 = (int32_t)"unknown variable";
  4449.         g134 = v3;
  4450.         g135 = v4;
  4451.         g130 = v5;
  4452.         g126 = v6;
  4453.         return duplicate_string();
  4454.     }
  4455.     uint32_t v9 = ((int32_t)*(char *)v8 + 255) % 256; // 0x5618
  4456.     g128 = v9;
  4457.     if (v9 < 3) {
  4458.         // 0x5678
  4459.         *(int32_t *)g134 = *(int32_t *)(v8 + 4);
  4460.         g134 = v3;
  4461.         g135 = v4;
  4462.         g130 = v5;
  4463.         return 0;
  4464.     }
  4465.     // 0x5624
  4466.     g127 = (int32_t)"variable does not contain an integer";
  4467.     g134 = v3;
  4468.     g135 = v4;
  4469.     g130 = v5;
  4470.     g126 = v6;
  4471.     return duplicate_string();
  4472. }
  4473.  
  4474. // Address range: 0x5694 - 0x56f3
  4475. int32_t get_line_type(void) {
  4476.     int32_t v1 = g130; // bp-8
  4477.     g130 = &v1;
  4478.     int32_t v2 = find_first_non_space((char *)g127); // 0x569c
  4479.     char v3 = *(char *)v2; // 0x56a0
  4480.     g128 = v3;
  4481.     g3 = v3 == 0;
  4482.     if (v3 == 0) {
  4483.         // 0x56c8
  4484.         g127 = 0;
  4485.         g130 = v1;
  4486.         return 0;
  4487.     }
  4488.     // 0x56ac
  4489.     if (v3 != 58) {
  4490.         // 0x56b4
  4491.         g3 = v3 == 36;
  4492.         int32_t result = v3 == 36 ? 1 : 4;
  4493.         g127 = result;
  4494.         g130 = v1;
  4495.         return result;
  4496.     }
  4497.     char v4 = *(char *)(v2 + 1); // 0x56d4
  4498.     g128 = v4;
  4499.     int32_t result2; // 0x56ec
  4500.     if (v4 == 36) {
  4501.         // after_if_56e0_0.thread
  4502.         g3 = false;
  4503.         result2 = 2;
  4504.         // branch -> after_if_56e8_0
  4505.     } else {
  4506.         // after_if_56e0_0
  4507.         g3 = v4 == 58;
  4508.         if (v4 == 58) {
  4509.             // if_56e8_0_true
  4510.             result2 = 3;
  4511.             // branch -> after_if_56e8_0
  4512.         } else {
  4513.             result2 = 0;
  4514.         }
  4515.     }
  4516.     // after_if_56e8_0
  4517.     g127 = result2;
  4518.     g130 = v1;
  4519.     return result2;
  4520. }
  4521.  
  4522. // Address range: 0x56f4 - 0x589b
  4523. int32_t run_script(int32_t a1, int32_t a2, struct _IO_FILE * a3, int32_t a4) {
  4524.     // 0x56f4
  4525.     int32_t v1;
  4526.     char * v2 = (char *)v1; // bp-40
  4527.     int32_t v3 = g134; // 0x56f4
  4528.     int32_t v4 = g135; // 0x56f4
  4529.     int32_t v5 = g138; // 0x56f4
  4530.     int32_t v6 = g130; // bp-8
  4531.     g130 = &v6;
  4532.     g138 = a1;
  4533.     g134 = (int32_t)a3;
  4534.     g139 = a2;
  4535.     printf("Script file: ");
  4536.     int32_t v7 = read_line((struct _IO_FILE *)g33); // 0x5720
  4537.     g137 = v7;
  4538.     char * file_path = (char *)v7; // 0x5728_0
  4539.     if (*file_path == 0) {
  4540.         // 0x57b8
  4541.         free(file_path);
  4542.         // branch -> 0x5870
  4543.         // 0x5870
  4544.         g135 = v4;
  4545.         g138 = v5;
  4546.         return 0;
  4547.     }
  4548.     // 0x5734
  4549.     g136 = (int32_t)fopen(file_path, "r");
  4550.     free((char *)g137);
  4551.     int32_t v8 = g136; // 0x5750
  4552.     if (v8 == 0) {
  4553.         // 0x57c8
  4554.         puts("err: could not open script file");
  4555.         // branch -> 0x5870
  4556.         // 0x5870
  4557.         g135 = v4;
  4558.         g138 = v5;
  4559.         return 0;
  4560.     }
  4561.     // 0x5758
  4562.     g135 = read_file_by_lines((struct _IO_FILE *)v8);
  4563.     fclose((struct _IO_FILE *)g136);
  4564.     int32_t v9;
  4565.     g133 = &v9;
  4566.     g137 = 0;
  4567.     int32_t v10 = g139; // 0x5778
  4568.     int32_t v11 = g135; // 0x577c
  4569.     v9 = 0;
  4570.     g139 = execute_script(g138, v10, v11);
  4571.     destroy_string_array((char *)g135, v10, v11, g133);
  4572.     int32_t v12 = v9; // 0x5794
  4573.     int32_t result; // 0x5870
  4574.     if (v12 == 0) {
  4575.         int32_t v13 = 0; // 0x5804
  4576.         if (0x1000000 * *(int32_t *)&g44 / 0x1000000 % 2 != 0) {
  4577.             // 0x57f0
  4578.             write_header_comment((int32_t *)g138, (struct _IO_FILE *)g134);
  4579.             v13 = v9;
  4580.             // branch -> 0x57fc
  4581.         }
  4582.         // 0x57fc
  4583.         generate_initial_indented_line((int32_t *)&v2, NULL, v11, g133, (int32_t)v2, v13, v3);
  4584.         int32_t v14 = *(int32_t *)g139; // 0x5808
  4585.         int32_t v15 = v14; // R2
  4586.         int32_t v16 = (int32_t)v2;
  4587.         if (v14 != 0) {
  4588.             // 0x5818
  4589.             g135 = g139 + 4;
  4590.             // branch -> 0x582c
  4591.             while (true) {
  4592.                 // 0x582c
  4593.                 printf((char *)(int32_t)">>>> %s%s\n", (char *)v16, (char *)v14);
  4594.                 int32_t v17 = *(int32_t *)(g135 - 4); // 0x5834
  4595.                 g133 = v17;
  4596.                 fprintf((struct _IO_FILE *)g134, (char *)(int32_t)"%s%s\n", v2, (char *)v17);
  4597.                 int32_t v18 = g135; // 0x5848
  4598.                 int32_t v19 = *(int32_t *)v18; // 0x5848
  4599.                 v15 = v19;
  4600.                 g135 = v18 + 4;
  4601.                 int32_t v20 = (int32_t)v2;
  4602.                 if (v19 != 0) {
  4603.                     // 0x582c
  4604.                     v14 = v19;
  4605.                     v16 = v20;
  4606.                     // branch -> 0x582c
  4607.                     continue;
  4608.                 } else {
  4609.                     v16 = v20;
  4610.                 }
  4611.             }
  4612.         }
  4613.         // 0x585c
  4614.         free((char *)v16);
  4615.         destroy_string_array((char *)g139, v16, v15, g133);
  4616.         result = 1;
  4617.         // branch -> 0x5870
  4618.     } else {
  4619.         // 0x57a0
  4620.         printf("err: %s\n", (char *)v12);
  4621.         free((char *)v9);
  4622.         result = g137;
  4623.         // branch -> 0x5870
  4624.     }
  4625.     // 0x5870
  4626.     g135 = v4;
  4627.     g138 = v5;
  4628.     return result;
  4629. }
  4630.  
  4631. // Address range: 0x589c - 0x5997
  4632. int32_t execute_script(int32_t a1, int32_t a2, int32_t a3) {
  4633.     // 0x589c
  4634.     g132 = a3;
  4635.     int32_t v1 = g134; // 0x589c
  4636.     int32_t v2 = g135; // 0x589c
  4637.     int32_t v3 = g136; // 0x589c
  4638.     int32_t v4 = g137; // 0x589c
  4639.     int32_t v5 = g138; // 0x589c
  4640.     int32_t v6 = g139; // 0x589c
  4641.     int32_t v7 = g129; // 0x589c
  4642.     int32_t v8 = g130; // bp-8
  4643.     g130 = &v8;
  4644.     g137 = a1;
  4645.     g136 = a2;
  4646.     int32_t v9 = 0; // bp-40
  4647.     g128 = 1;
  4648.     g134 = g133;
  4649.     g139 = a3;
  4650.     char * mem = calloc(4, 1); // 0x58c8
  4651.     g129 = &v9;
  4652.     g138 = (int32_t)mem;
  4653.     int32_t v10 = 0;
  4654.     // branch -> 0x593c
  4655.     while (true) {
  4656.         // branch -> 0x593c
  4657.         int32_t v11;
  4658.         int32_t v12; // 0x596c
  4659.         int32_t v13;
  4660.         int32_t v14;
  4661.         int32_t v15; // 0x593c
  4662.         while (true) {
  4663.             // 0x593c
  4664.             v15 = g134;
  4665.             int32_t * v16 = (int32_t *)v15; // 0x593c_0
  4666.             int32_t result; // 0x598c
  4667.             if (*v16 != 0) {
  4668.                 // 0x5980
  4669.                 destroy_string_array((char *)g138, g128, g132, v11);
  4670.                 g138 = 0;
  4671.                 result = 0;
  4672.                 // branch -> 0x598c
  4673.                 // 0x598c
  4674.                 g127 = result;
  4675.                 g134 = v1;
  4676.                 g135 = v2;
  4677.                 g136 = v3;
  4678.                 g137 = v4;
  4679.                 g138 = v5;
  4680.                 g139 = v6;
  4681.                 g129 = v7;
  4682.                 g130 = v8;
  4683.                 return result;
  4684.             }
  4685.             int32_t v17 = g