[*] Binary protection state of ld-linux-armhf.so.3

  
  	Full RELRO     Canary found      NX enabled   DSO          No RPATH     No RUNPATH   No Symbols


[*] Function strcat tear down of ld-linux-armhf.so.3

    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x2990 */
                                                         | #include <stdint.h>
                                                         |  
                                                         | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                         |  
    ; (fcn) fcn.00002990 ()                              | void fcn_00002990 (int16_t arg_8h, int16_t arg_20h, int16_t arg_24h, int16_t arg_2ch, int16_t arg_30h, int16_t arg_34h, int16_t arg_38h, int16_t arg_3ch, int16_t arg_44h, int16_t arg_58h, int16_t arg_5ch, int16_t arg_60h, int16_t arg_64h, int16_t arg_6ch, int16_t arg_70h, int16_t arg_74h, int16_t arg_78h, int16_t arg_7ch, int16_t arg_80h, int16_t arg_94h, int16_t arg_98h, int16_t arg_bch, int16_t arg_e8h, int16_t arg_134h, int16_t arg_138h, int16_t arg_140h, int16_t arg_150h, int16_t arg_154h, int16_t arg_15ch, int16_t arg_160h, int16_t arg_164h, int16_t arg_194h, int16_t arg_19ch, int16_t arg_1b4h, int16_t arg_1b8h, int16_t arg_1bch, int16_t arg_1d4h, int16_t arg_1f8h, int16_t arg_20ch, int16_t arg_210h, int16_t arg_230h, int16_t arg_23ch, int16_t arg_240h, int16_t arg_248h, int16_t arg_250h, int16_t arg_254h, int16_t arg_260h, int16_t arg_0h, int16_t arg_4h, int16_t arg_ch, int16_t arg_10h, int16_t arg_17h, int16_t arg_190h, int16_t arg_238h, int16_t arg3, int16_t arg4) {
                                                         |     r2 = arg3;
                                                         |     r3 = arg4;
                                                         |     do {
    0x00001a04 invalid                                   |         
    0x00001a08 cmp r3, 6                                 |         
                                                         |         if (r3 != 6) {
    0x00001a0a beq 0x1a1e                                |             
    0x00001a0c ldr.w r3, [pc, 0x938]                     |             r3 = *(0x00002348);
    0x00001a10 movs r2, 1                                |             r2 = 1;
    0x00001a12 str.w r2, [sl, 0x164]                     |             __asm ("str.w r2, [sl, 0x164]");
    0x00001a16 mov.w r2, -1                              |             r2 = -1;
    0x00001a1a add r3, pc                                |             r3 += pc;
    0x00001a1c str r2, [r3, 0x30]                        |             *((r3 + 0x30)) = r2;
                                                         |         }
    0x00001a1e ldr.w r2, [pc, 0x92c]                     |         r2 = *(0x0000234c);
    0x00001a22 subs r4, 1                                |         r4--;
    0x00001a24 adds r5, 4                                |         r5 += 4;
    0x00001a26 add r2, pc                                |         r2 += pc;
    0x00001a28 ldr r3, [r2, 0x10]                        |         r3 = *((r2 + 0x10));
    0x00001a2a adds r3, 1                                |         r3++;
    0x00001a2c str r3, [r2, 0x10]                        |         *((r2 + 0x10)) = r3;
                                                         | label_0:
    0x00001a2e ldr.w r3, [pc, 0x920]                     |         r3 = *(0x00002350);
    0x00001a32 cmp r4, 1                                 |         
    0x00001a34 add r3, pc                                |         r3 += pc;
    0x00001a36 str r4, [r3]                              |         *(r3) = r4;
    0x00001a38 ldr.w r3, [pc, 0x918]                     |         r3 = *(0x00002354);
    0x00001a3c add r3, pc                                |         r3 += pc;
    0x00001a3e str r5, [r3]                              |         *(r3) = r5;
                                                         |         if (r4 == 1) {
    0x00001a40 beq.w 0x1e0c                              |             goto label_66;
                                                         |         }
    0x00001a44 ldr r6, [r5, 4]                           |         r6 = *((r5 + 4));
    0x00001a46 mov r1, r8                                |         r1 = r8;
    0x00001a48 mov r0, r6                                |         r0 = r6;
    0x00001a4a bl 0x14f30                                |         r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00001a4e cmp r0, 0                                 |         
    0x00001a50 beq 0x1a04                                |         
                                                         |     } while (r0 == 0);
    0x00001a52 mov r1, fp                                |     r1 = fp;
    0x00001a54 mov r0, r6                                |     r0 = r6;
    0x00001a56 bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00001a5a cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00001a5c bne.w 0x1cf4                              |         
    0x00001a60 ldr.w r3, [sl, 0x164]                     |         r3 = *((sl + 0x164));
    0x00001a64 subs r4, 1                                |         r4--;
    0x00001a66 ldr.w r2, [pc, 0x8f0]                     |         r2 = *(0x00002358);
    0x00001a6a adds r5, 4                                |         r5 += 4;
    0x00001a6c cmp r3, 6                                 |         
    0x00001a6e it ne                                     |         
                                                         |         if (r3 == 6) {
    0x00001a70 movne r3, 2                               |             r3 = 2;
                                                         |         }
    0x00001a72 add r2, pc                                |         r2 += pc;
    0x00001a74 it ne                                     |         
                                                         |         if (r3 == 6) {
    0x00001a76 strne r3, [sl, 0x164]                     |             *((sl + 0x164)) = r3;
                                                         |         }
    0x00001a7a ldr r3, [r2, 0x10]                        |         r3 = *((r2 + 0x10));
    0x00001a7c adds r3, 1                                |         r3++;
    0x00001a7e str r3, [r2, 0x10]                        |         *((r2 + 0x10)) = r3;
    0x00001a80 b 0x1a2e                                  |         goto label_0;
                                                         |     }
    0x00001cf4 ldr r1, [r7, 0x34]                        |     r1 = *((r7 + 0x34));
    0x00001cf6 mov r0, r6                                |     r0 = r6;
    0x00001cf8 bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
                                                         |     if (r0 == 0) {
    0x00001cfc cbnz r0, 0x1d1a                           |         
    0x00001cfe ldr.w r2, [pc, 0x6bc]                     |         r2 = *(0x000023bc);
    0x00001d02 movs r1, 1                                |         r1 = 1;
    0x00001d04 ldr.w r3, [pc, 0x6b8]                     |         r3 = *(0x000023c0);
    0x00001d08 subs r4, 1                                |         r4--;
    0x00001d0a adds r5, 4                                |         r5 += 4;
    0x00001d0c add r2, pc                                |         r2 += pc;
    0x00001d0e add r3, pc                                |         r3 += pc;
    0x00001d10 str r1, [r3, 0x18]                        |         *((r3 + 0x18)) = r1;
    0x00001d12 ldr r3, [r2, 0x10]                        |         r3 = *((r2 + 0x10));
    0x00001d14 add r3, r1                                |         r3 += r1;
    0x00001d16 str r3, [r2, 0x10]                        |         *((r2 + 0x10)) = r3;
    0x00001d18 b 0x1a2e                                  |         goto label_0;
                                                         |     }
    0x00001d1a ldr r1, [r7, 0x30]                        |     r1 = *((r7 + 0x30));
    0x00001d1c mov r0, r6                                |     r0 = r6;
    0x00001d1e bl 0x14f30                                |     fcn_00014f30 (r0, r1, r2, r3);
    0x00001d22 subs.w sb, r4, 2                          |     sb = r4 - 2;
    0x00001d26 it ne                                     |     
                                                         |     if (sb == r4) {
    0x00001d28 movne sb, 1                               |         sb = 1;
                                                         |     }
    0x00001d2c cmp r0, 0                                 |     
    0x00001d2e ite ne                                    |     
                                                         |     if (r0 == 0) {
    0x00001d30 movne r1, 0                               |         r1 = 0;
                                                         |     }
                                                         |     if (r0 != 0) {
    0x00001d32 andeq r1, sb, 1                           |         r1 = sb & 1;
                                                         |     }
    0x00001d36 cmp r1, 0                                 |     
                                                         |     if (r1 != 0) {
    0x00001d38 bne.w 0x2e86                              |         goto label_67;
                                                         |     }
    0x00001d3c ldr r1, [r7, 0x28]                        |     r1 = *((r7 + 0x28));
    0x00001d3e mov r0, r6                                |     r0 = r6;
    0x00001d40 bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00001d44 cmp r0, 0                                 |     
    0x00001d46 ite ne                                    |     
                                                         |     if (r0 == 0) {
    0x00001d48 movne r1, 0                               |         r1 = 0;
                                                         |     }
                                                         |     if (r0 != 0) {
    0x00001d4a andeq r1, sb, 1                           |         r1 = sb & 1;
                                                         |     }
    0x00001d4e cmp r1, 0                                 |     
                                                         |     if (r1 != 0) {
    0x00001d50 bne.w 0x3098                              |         goto label_68;
                                                         |     }
    0x00001d54 ldr r1, [r7, 0x14]                        |     r1 = *((r7 + 0x14));
    0x00001d56 mov r0, r6                                |     r0 = r6;
    0x00001d58 bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00001d5c cmp r0, 0                                 |     
    0x00001d5e ite ne                                    |     
                                                         |     if (r0 == 0) {
    0x00001d60 movne r1, 0                               |         r1 = 0;
                                                         |     }
                                                         |     if (r0 != 0) {
    0x00001d62 andeq r1, sb, 1                           |         r1 = sb & 1;
                                                         |     }
    0x00001d66 cmp r1, 0                                 |     
                                                         |     if (r1 != 0) {
    0x00001d68 bne.w 0x35ce                              |         goto label_69;
                                                         |     }
    0x00001d6c ldr r1, [r7, 0x10]                        |     r1 = *((r7 + 0x10));
    0x00001d6e mov r0, r6                                |     r0 = r6;
    0x00001d70 bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00001d74 cmp r0, 0                                 |     
    0x00001d76 ite ne                                    |     
                                                         |     if (r0 == 0) {
    0x00001d78 movne r1, 0                               |         r1 = 0;
                                                         |     }
                                                         |     if (r0 != 0) {
    0x00001d7a andeq r1, sb, 1                           |         r1 = sb & 1;
                                                         |     }
    0x00001d7e cmp r1, 0                                 |     
                                                         |     if (r1 != 0) {
    0x00001d80 bne.w 0x3632                              |         goto label_70;
                                                         |     }
    0x00001d84 ldr r1, [r7, 0xc]                         |     r1 = *((r7 + 0xc));
    0x00001d86 mov r0, r6                                |     r0 = r6;
    0x00001d88 bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00001d8c cmp r0, 0                                 |     
    0x00001d8e ite ne                                    |     
                                                         |     if (r0 == 0) {
    0x00001d90 movne r1, 0                               |         r1 = 0;
                                                         |     }
                                                         |     if (r0 != 0) {
    0x00001d92 andeq r1, sb, 1                           |         r1 = sb & 1;
                                                         |     }
    0x00001d96 cmp r1, 0                                 |     
                                                         |     if (r1 != 0) {
    0x00001d98 bne.w 0x34d0                              |         goto label_71;
                                                         |     }
    0x00001d9c ldr r1, [r7, 8]                           |     r1 = *((r7 + 8));
    0x00001d9e mov r0, r6                                |     r0 = r6;
    0x00001da0 bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00001da4 cmp r0, 0                                 |     
    0x00001da6 ite ne                                    |     
                                                         |     if (r0 == 0) {
    0x00001da8 movne r1, 0                               |         r1 = 0;
                                                         |     }
                                                         |     if (r0 != 0) {
    0x00001daa andeq r1, sb, 1                           |         r1 = sb & 1;
                                                         |     }
    0x00001dae cmp r1, 0                                 |     
                                                         |     if (r1 != 0) {
    0x00001db0 bne.w 0x403c                              |         goto label_72;
                                                         |     }
    0x00001db4 ldr.w r1, [pc, 0x60c]                     |     r1 = *(0x000023c4);
    0x00001db8 mov r0, r6                                |     r0 = r6;
    0x00001dba add r1, pc                                |     r1 += pc;
    0x00001dbc bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00001dc0 cmp r0, 0                                 |     
    0x00001dc2 ite ne                                    |     
                                                         |     if (r0 == 0) {
    0x00001dc4 movne r2, 0                               |         r2 = 0;
                                                         |     }
                                                         |     if (r0 != 0) {
    0x00001dc6 andeq r2, sb, 1                           |         r2 = sb & 1;
                                                         |     }
    0x00001dca cmp r2, 0                                 |     
                                                         |     if (r2 != 0) {
    0x00001dcc bne.w 0x4066                              |         goto label_73;
                                                         |     }
    0x00001dd0 ldr.w r1, [pc, 0x5f4]                     |     r1 = *(0x000023c8);
    0x00001dd4 mov r0, r6                                |     r0 = r6;
    0x00001dd6 add r1, pc                                |     r1 += pc;
    0x00001dd8 bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00001ddc cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00001dde beq.w 0x3bee                              |         goto label_74;
                                                         |     }
    0x00001de2 ldr.w r1, [pc, 0x5e8]                     |     
    0x00001de6 mov r0, r6                                |     r0 = r6;
    0x00001de8 add r1, pc                                |     r1 = 0x41ba;
    0x00001dea bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00001dee cmp r0, 0                                 |     
                                                         |     if (r0 != 0) {
    0x00001df0 bne.w 0x4206                              |         goto label_75;
                                                         |     }
    0x00001df4 ldr.w r2, [pc, 0x5d8]                     |     r2 = *(0x000023d0);
    0x00001df8 movs r3, 5                                |     r3 = 5;
    0x00001dfa str.w r3, [sl, 0x164]                     |     __asm ("str.w r3, [sl, 0x164]");
    0x00001dfe subs r4, 1                                |     r4--;
    0x00001e00 adds r5, 4                                |     r5 += 4;
    0x00001e02 add r2, pc                                |     r2 += pc;
    0x00001e04 ldr r3, [r2, 0x10]                        |     r3 = *((r2 + 0x10));
    0x00001e06 adds r3, 1                                |     r3++;
    0x00001e08 str r3, [r2, 0x10]                        |     *((r2 + 0x10)) = r3;
    0x00001e0a b 0x1a2e                                  |     goto label_0;
                                                         | label_66:
    0x00001e0c ldr r6, [r7, 0x18]                        |     r6 = *((r7 + 0x18));
                                                         | label_65:
    0x00001e0e ldr.w r0, [sl, 0x164]                     |     r0 = *((sl + 0x164));
    0x00001e12 cmp r0, 4                                 |     
                                                         |     if (r0 == 4) {
    0x00001e14 beq.w 0x3bbc                              |         goto label_76;
                                                         |     }
                                                         | label_41:
    0x00001e18 cmp r0, 5                                 |     
                                                         |     if (r0 == 5) {
    0x00001e1a beq.w 0x44b2                              |         goto label_77;
                                                         |     }
    0x00001e1e ldr.w r2, [pc, 0x5b4]                     |     r2 = *(0x000023d4);
    0x00001e22 add r2, pc                                |     r2 += pc;
    0x00001e24 ldr r3, [r2]                              |     r3 = *(r2);
    0x00001e26 cmp r3, 1                                 |     
                                                         |     if (r3 <= 1) {
    0x00001e28 ble.w 0x33fa                              |         goto label_78;
                                                         |     }
    0x00001e2c subs r3, 1                                |     r3--;
    0x00001e2e ldr r1, [r7, 0x40]                        |     r1 = *((r7 + 0x40));
    0x00001e30 str r3, [r2]                              |     *(r2) = r3;
    0x00001e32 ldr.w r3, [pc, 0x5a4]                     |     r3 = *(0x000023d8);
    0x00001e36 add.w r1, r6, r1, lsl 5                   |     r1 = r6 + (r1 << 5);
    0x00001e3a add r3, pc                                |     r3 += pc;
    0x00001e3c ldr r2, [r3, 0x10]                        |     r2 = *((r3 + 0x10));
    0x00001e3e cmp r6, r1                                |     
    0x00001e40 ldr r4, [r3]                              |     r4 = *(r3);
    0x00001e42 add.w r2, r2, 1                           |     r2++;
    0x00001e46 str r2, [r3, 0x10]                        |     *((r3 + 0x10)) = r2;
    0x00001e48 add.w r2, r4, 4                           |     r2 = r4 + 4;
    0x00001e4c str r2, [r3]                              |     *(r3) = r2;
                                                         |     if (r6 >= r1) {
    0x00001e4e bhs 0x1e72                                |         goto label_79;
                                                         |     }
    0x00001e50 movw r2, 0xe551                           |     
    0x00001e54 movt r2, 0x6474                           |     r2 = 0x6474e551;
    0x00001e58 b 0x1e60                                  |     
                                                         |     while (r3 != r2) {
    0x00001e5a adds r6, 0x20                             |         r6 += 0x20;
    0x00001e5c cmp r6, r1                                |         
                                                         |         if (r6 >= r1) {
    0x00001e5e bhs 0x1e72                                |             goto label_79;
                                                         |         }
    0x00001e60 ldr r3, [r6]                              |         r3 = *(r6);
    0x00001e62 cmp r3, r2                                |         
    0x00001e64 bne 0x1e5a                                |         
                                                         |     }
    0x00001e66 ldr.w r3, [pc, 0x574]                     |     r3 = *(0x000023dc);
    0x00001e6a ldr r2, [r6, 0x18]                        |     r2 = *((r6 + 0x18));
    0x00001e6c add r3, pc                                |     r3 += pc;
    0x00001e6e str.w r2, [r3, 0x878]                     |     __asm ("str.w r2, [r3, 0x878]");
                                                         | label_79:
    0x00001e72 bic r0, r0, 4                             |     r0 = BIT_MASK (r0, 4);
    0x00001e76 ldr r1, [r4, 4]                           |     r1 = *((r4 + 4));
    0x00001e78 cmp r0, 2                                 |     
                                                         |     if (r0 == 2) {
    0x00001e7a beq.w 0x40b6                              |         goto label_80;
                                                         |     }
    0x00001e7e movs r3, 0                                |     r3 = 0;
    0x00001e80 mov.w r2, 0x20000000                      |     r2 = 0x20000000;
    0x00001e84 strd r2, r3, [sp]                         |     __asm ("strd r2, r3, [sp]");
    0x00001e88 mov r0, r3                                |     r0 = r3;
    0x00001e8a mov r2, r3                                |     r2 = r3;
    0x00001e8c bl 0x684c                                 |     fcn_0000684c (r0, r1, r2, r3, r4, r5);
                                                         | label_50:
    0x00001e90 ldr.w r3, [pc, 0x54c]                     |     r3 = *(0x000023e0);
    0x00001e94 ldr.w r2, [sl, 0x164]                     |     r2 = *((sl + 0x164));
    0x00001e98 add r3, pc                                |     r3 += pc;
    0x00001e9a ldr.w fp, [r3]                            |     fp = *(r3);
                                                         |     if (r2 == 0) {
    0x00001e9e cbnz r2, 0x1eca                           |         
    0x00001ea0 ldr.w r2, [r3, 0x5f0]                     |         r2 = *((r3 + 0x5f0));
                                                         |         if (r2 == 0) {
    0x00001ea4 cbz r2, 0x1eca                            |             goto label_81;
                                                         |         }
    0x00001ea6 ldr.w r1, [fp, 0x58]                      |         r1 = *(arg_58h);
                                                         |         if (r1 == 0) {
    0x00001eaa cbz r1, 0x1eca                            |             goto label_81;
                                                         |         }
    0x00001eac ldr.w r0, [r3, 0x5cc]                     |         r0 = *((r3 + 0x5cc));
    0x00001eb0 ldr r2, [r2, 4]                           |         r2 = *((r2 + 4));
    0x00001eb2 ldr r3, [r1, 4]                           |         r3 = *((r1 + 4));
    0x00001eb4 ldr r0, [r0, 4]                           |         r0 = *((r0 + 4));
    0x00001eb6 add r0, r2                                |         r0 += r2;
    0x00001eb8 ldr.w r2, [fp, 0x34]                      |         r2 = *(arg_34h);
    0x00001ebc ldr r1, [r2, 4]                           |         r1 = *((r2 + 4));
    0x00001ebe add r1, r3                                |         r1 += r3;
    0x00001ec0 bl 0x14f30                                |         r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00001ec4 cmp r0, 0                                 |         
                                                         |         if (r0 == 0) {
    0x00001ec6 beq.w 0x435e                              |             goto label_82;
                                                         |         }
                                                         |     }
                                                         | label_81:
    0x00001eca ldr.w r3, [pc, 0x518]                     |     r3 = *(0x000023e4);
    0x00001ece ldrh.w r2, [fp, 0x15c]                    |     r2 = *(arg_15ch);
    0x00001ed2 add r3, pc                                |     r3 += pc;
    0x00001ed4 str.w r3, [fp, 4]                         |     __asm ("str.w r3, [arg_4h]");
    0x00001ed8 str r2, [r7, 0x40]                        |     *((r7 + 0x40)) = r2;
    0x00001eda ldrd r6, r3, [fp, 0x154]                  |     __asm ("ldrd r6, r3, [arg_154h]");
    0x00001ede ldr r2, [r7, 0x3c]                        |     r2 = *((r7 + 0x3c));
    0x00001ee0 str r3, [r2]                              |     *(r2) = r3;
    0x00001ee2 ldr r3, [r7, 0x2c]                        |     r3 = *((r7 + 0x2c));
    0x00001ee4 ldr r3, [r3]                              |     r3 = *(r3);
    0x00001ee6 cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x00001ee8 beq.w 0x2ed2                              |         goto label_11;
                                                         |     }
    0x00001eec ldr.w r1, [pc, 0x4f8]                     |     r1 = *(0x000023e8);
    0x00001ef0 ldr r2, [r7, 0x2c]                        |     r2 = *((r7 + 0x2c));
    0x00001ef2 ldrd r5, r4, [r7, 0x3c]                   |     __asm ("ldrd r5, r4, [r7, 0x3c]");
    0x00001ef6 add r1, pc                                |     r1 += pc;
    0x00001ef8 ldr r0, [r1]                              |     r0 = *(r1);
                                                         | label_9:
    0x00001efa subs r3, 3                                |     r3 -= 3;
    0x00001efc cmp r3, 0x1c                              |     
                                                         |     if (r3 > 0x1c) {
    0x00001efe bhi.w 0x2ec8                              |         goto label_83;
                                                         |     }
                                                         |     /* switch table (29 cases) at 0x1f06 */
    0x00001f02 tbh [pc, r3, lsl 1]                       |     __asm ("tbh [pc, r3, lsl 1]");
                                                         | label_10:
    0x00001f88 ldr r3, [r7, 0x40]                        |     r3 = *((r7 + 0x40));
    0x00001f8a mov.w r1, -1                              |     r1 = -1;
    0x00001f8e ldr.w r2, [fp, 0x194]                     |     r2 = *(arg_194h);
    0x00001f92 str.w r1, [fp, 0x1b4]                     |     __asm ("str.w r1, [arg_1b4h]");
    0x00001f96 lsls r3, r3, 5                            |     r3 <<= 5;
    0x00001f98 adds r2, 1                                |     r2++;
    0x00001f9a str.w r2, [fp, 0x194]                     |     __asm ("str.w r2, [arg_194h]");
    0x00001f9e movs r2, 0                                |     r2 = 0;
    0x00001fa0 adds r4, r6, r3                           |     r4 = r6 + r3;
    0x00001fa2 strd r2, r2, [fp, 0x1b8]                  |     __asm ("strd r2, r2, [fp, 0x1b8]");
    0x00001fa6 cmp r6, r4                                |     
                                                         |     if (r6 >= r4) {
    0x00001fa8 bhs.w 0x37f6                              |         goto label_84;
                                                         |     }
    0x00001fac ldr.w r3, [pc, 0x444]                     |     r3 = *(0x000023f4);
    0x00001fb0 movw r5, 0xe551                           |     
    0x00001fb4 ldr.w r1, [pc, 0x440]                     |     r1 = *(0x000023f8);
    0x00001fb8 add.w r8, r4, 0x20                        |     r8 = r4 + 0x20;
    0x00001fbc ldr.w r0, [pc, 0x43c]                     |     r0 = *(0x000023fc);
    0x00001fc0 movt r5, 0x6474                           |     r5 = 0x6474e551;
    0x00001fc4 add r3, pc                                |     r3 += pc;
    0x00001fc6 ldr.w sb, [pc, 0x438]                     |     sb = *(0x00002400);
    0x00001fca ldr r3, [r3, 0x10]                        |     r3 = *((r3 + 0x10));
    0x00001fcc add r1, pc                                |     r1 += pc;
    0x00001fce str r2, [r7, 0x40]                        |     *((r7 + 0x40)) = r2;
    0x00001fd0 movw r2, 0xe552                           |     
    0x00001fd4 add r0, pc                                |     r0 += pc;
    0x00001fd6 str r1, [r7, 0x28]                        |     *((r7 + 0x28)) = r1;
    0x00001fd8 rsbs r3, r3, 0                            |     r3 -= ;
    0x00001fda adds r1, 0x14                             |     r1 += 0x14;
    0x00001fdc str r3, [r7, 0x34]                        |     *((r7 + 0x34)) = r3;
    0x00001fde add sb, pc                                |     sb += pc;
    0x00001fe0 ldr.w r3, [pc, 0x420]                     |     r3 = *(0x00002404);
    0x00001fe4 movt r2, 0x6474                           |     r2 = 0x6474e552;
    0x00001fe8 str r1, [r7, 0x20]                        |     *((r7 + 0x20)) = r1;
    0x00001fea add.w r1, r0, 0x20                        |     r1 = r0 + 0x20;
    0x00001fee str r0, [r7, 0x14]                        |     *((r7 + 0x14)) = r0;
    0x00001ff0 add r3, pc                                |     r3 += pc;
    0x00001ff2 str r1, [r7, 0x10]                        |     *((r7 + 0x10)) = r1;
    0x00001ff4 str r3, [r7, 0x2c]                        |     *((r7 + 0x2c)) = r3;
    0x00001ff6 ldr.w r3, [pc, 0x410]                     |     r3 = *(0x00002408);
    0x00001ffa str r4, [r7, 0x3c]                        |     *((r7 + 0x3c)) = r4;
    0x00001ffc add r3, pc                                |     r3 += pc;
    0x00001ffe str r3, [r7, 0x18]                        |     *((r7 + 0x18)) = r3;
    0x00002000 add.w r3, r6, 0x20                        |     r3 = r6 + 0x20;
                                                         |     do {
                                                         | label_4:
    0x00002004 ldr r1, [r3, -0x20]                       |         r1 = *((r3 - 0x20));
    0x00002008 cmp r1, 7                                 |         
                                                         |         if (r1 <= 7) {
    0x0000200a bhi 0x2026                                |             
                                                         |             if (r1 == 0) {
    0x0000200c cbz r1, 0x2040                            |                 goto label_3;
                                                         |             }
    0x0000200e subs r1, 1                                |             r1--;
    0x00002010 cmp r1, 6                                 |             
                                                         |             if (r1 > 6) {
    0x00002012 bhi 0x2040                                |                 goto label_3;
                                                         |             }
                                                         |             /* switch table (8 cases) at 0x2018 */
    0x00002014 tbh [pc, r1, lsl 1]                       |             __asm ("tbh [pc, r1, lsl 1]");
                                                         |         }
    0x00002026 cmp r1, r5                                |         
                                                         |         if (r1 == r5) {
    0x00002028 beq.w 0x2e40                              |             goto label_85;
                                                         |         }
    0x0000202c cmp r1, r2                                |         
                                                         |         if (r1 == r2) {
    0x0000202e bne 0x2040                                |             
    0x00002030 ldr r1, [r3, -0x18]                       |             r1 = *((r3 - 0x18));
    0x00002034 str.w r1, [fp, 0x250]                     |             __asm ("str.w r1, [arg_250h]");
    0x00002038 ldr r1, [r3, -0xc]                        |             r1 = *((r3 - 0xc));
    0x0000203c str.w r1, [fp, 0x254]                     |             __asm ("str.w r1, [arg_254h]");
                                                         |         }
                                                         | label_3:
    0x00002040 adds r3, 0x20                             |         r3 += 0x20;
    0x00002042 cmp r8, r3                                |         
    0x00002044 bne 0x2004                                |         
                                                         |     } while (r8 != r3);
                                                         | label_5:
    0x00002046 ldr r4, [r7, 0x3c]                        |     r4 = *((r7 + 0x3c));
                                                         | label_64:
    0x00002048 movw r5, 0xe553                           |     
    0x0000204c movt r5, 0x6474                           |     r5 = 0x6474e553;
    0x00002050 b 0x2056                                  |     
                                                         |     while (r3 != r5) {
    0x00002052 cmp r6, r4                                |         
                                                         |         if (r6 == r4) {
    0x00002054 beq 0x206e                                |             goto label_86;
                                                         |         }
                                                         | label_1:
    0x00002056 ldr r3, [r4, -0x20]!                      |         r3 = *((r4 -= 0x20));
    0x0000205a cmp r3, r5                                |         
    0x0000205c bne 0x2052                                |         
                                                         |     }
    0x0000205e mov r2, r4                                |     r2 = r4;
    0x00002060 mov.w r1, -1                              |     r1 = -1;
    0x00002064 mov r0, fp                                |     r0 = fp;
    0x00002066 bl 0x596c                                 |     fcn_0000596c (r0, r1);
    0x0000206a cmp r6, r4                                |     
                                                         |     if (r6 != r4) {
    0x0000206c bne 0x2056                                |         goto label_1;
                                                         |     }
                                                         | label_86:
    0x0000206e ldr.w r3, [fp, 0x230]                     |     r3 = *(arg_230h);
    0x00002072 ldrd r2, r1, [fp, 0x1b8]                  |     __asm ("ldrd r2, r1, [arg_1b8h]");
                                                         |     if (r3 != 0) {
    0x00002076 cbz r3, 0x2082                            |         
                                                         | label_28:
    0x00002078 ldr.w r0, [fp]                            |         r0 = *(fp);
    0x0000207c add r3, r0                                |         r3 += r0;
    0x0000207e str.w r3, [fp, 0x230]                     |         __asm ("str.w r3, [arg_230h]");
                                                         |     }
                                                         |     if (r2 == 0) {
    0x00002082 cbnz r2, 0x208c                           |         
                                                         | label_49:
    0x00002084 mov.w r3, -1                              |         r3 = -1;
    0x00002088 str.w r3, [fp, 0x1b8]                     |         __asm ("str.w r3, [arg_1b8h]");
                                                         |     }
                                                         |     if (r1 == 0) {
    0x0000208c cbnz r1, 0x2096                           |         
    0x0000208e mov.w r3, -1                              |         r3 = -1;
    0x00002092 str.w r3, [fp, 0x1bc]                     |         __asm ("str.w r3, [arg_1bch]");
                                                         |     }
    0x00002096 ldr r3, [pc, 0x374]                       |     
    0x00002098 add r3, pc                                |     r3 = 0x44aa;
    0x0000209a ldr.w r2, [r3, 0x5b4]                     |     r2 = *(0x4a5e);
    0x0000209e cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x000020a0 beq.w 0x323c                              |         goto label_87;
                                                         |     }
                                                         | label_12:
    0x000020a4 ldr r3, [pc, 0x368]                       |     
    0x000020a6 add r3, pc                                |     r3 = 0x44ba;
    0x000020a8 ldr.w r2, [r3, 0x5f0]                     |     r2 = *(0x4aaa);
                                                         |     if (r2 != 0) {
    0x000020ac cbz r2, 0x20e0                            |         
    0x000020ae ldr.w r1, [r3, 0x5cc]                     |         r1 = *((r3 + 0x5cc));
    0x000020b2 ldr r2, [r2, 4]                           |         r2 = *((r2 + 4));
    0x000020b4 ldr.w r5, [r3, 0x5b4]                     |         r5 = *((r3 + 0x5b4));
    0x000020b8 ldr r4, [r1, 4]                           |         r4 = *((r1 + 4));
    0x000020ba ldr r0, [r5]                              |         r0 = *(r5);
    0x000020bc add r4, r2                                |         r4 += r2;
    0x000020be mov r1, r4                                |         r1 = r4;
    0x000020c0 bl 0x14f30                                |         r0 = fcn_00014f30 (r0, r1, r2, r3);
                                                         |         if (r0 == 0) {
    0x000020c4 cbz r0, 0x20e0                            |             goto label_88;
                                                         |         }
    0x000020c6 ldr r3, [pc, 0x34c]                       |         
    0x000020c8 movs r2, 0                                |         r2 = 0;
    0x000020ca movs r1, 1                                |         r1 = 1;
    0x000020cc add r3, pc                                |         r3 = 0x44e6;
    0x000020ce str r2, [r3, 0x30]                        |         *((r3 + 0x30)) = r2;
    0x000020d0 ldr r2, [r5, 4]                           |         r2 = *((r5 + 4));
    0x000020d2 str r4, [r3, 0x2c]                        |         *((r3 + 0x2c)) = r4;
    0x000020d4 str r1, [r3, 0x34]                        |         *((r3 + 0x34)) = r1;
    0x000020d6 cmp r2, 0                                 |         
                                                         |         if (r2 != 0) {
    0x000020d8 bne.w 0x4476                              |             goto label_89;
                                                         |         }
    0x000020dc adds r3, 0x2c                             |         r3 += 0x2c;
    0x000020de str r3, [r5, 4]                           |         *((r5 + 4)) = r3;
                                                         |     }
                                                         | label_88:
    0x000020e0 ldr r3, [pc, 0x334]                       |     
    0x000020e2 add r3, pc                                |     r3 = 0x44fe;
    0x000020e4 ldrb.w r3, [r3, 0x730]                    |     r3 = *((r3 + 0x730));
    0x000020e8 lsls r3, r3, 0x1d                         |     r3 <<= 0x1d;
                                                         |     if (r3 >= r3) {
    0x000020ea bpl.w 0x4428                              |         goto label_90;
                                                         |     }
    0x000020ee ldr r3, [r7, 0x30]                        |     r3 = *((r7 + 0x30));
    0x000020f0 cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x000020f2 bne.w 0x22a0                              |         goto label_91;
                                                         |     }
    0x000020f6 ldr.w r2, [fp, 8]                         |     r2 = *(arg_8h);
    0x000020fa cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x000020fc beq.w 0x227c                              |         goto label_92;
                                                         |     }
    0x00002100 ldr r3, [r2]                              |     r3 = *(r2);
    0x00002102 add.w r1, fp, 0x20                        |     r1 += arg_20h;
                                                         |     if (r3 == 0) {
    0x00002106 cbz r3, 0x2174                            |         goto label_93;
                                                         |     }
    0x00002108 movw r6, 0xfdff                           |     
    0x0000210c movw lr, 0xfeff                           |     
    0x00002110 movw r8, 0xff41                           |     
    0x00002114 movw ip, 0xfe35                           |     
    0x00002118 movs r5, 0x22                             |     r5 = 0x22;
    0x0000211a movt r6, 0x6fff                           |     r6 = 0x6ffffdff;
    0x0000211e movt lr, 0x6fff                           |     lr = 0x6ffffeff;
    0x00002122 movt r8, 0x6fff                           |     r8 = 0x6fffff41;
    0x00002126 movt ip, 0x6fff                           |     ip = 0x6ffffe35;
    0x0000212a movt r5, 0x7000                           |     r5 = (r5 & 0xFFFF) | 0x70000000;
    0x0000212e mvn r4, 0x90000000                        |     r4 = ~0x90000000;
                                                         |     do {
    0x00002132 cmp r3, 0x22                              |         
                                                         |         if (r3 >= 0x22) {
    0x00002134 bls 0x2168                                |             
    0x00002136 subs r0, r4, r3                           |             r0 = r4 - r3;
    0x00002138 cmp r0, 0xf                               |             
    0x0000213a it ls                                     |             
                                                         |             if (r0 > 0xf) {
    0x0000213c subls r3, r5, r3                          |                 r3 = r5 - r3;
                                                         |             }
                                                         |             if (r0 < 0xf) {
    0x0000213e bls 0x2168                                |                 goto label_94;
                                                         |             }
    0x00002140 sbfx r0, r3, 0, 0x1f                      |             __asm ("sbfx r0, r3, 0, 0x1f");
    0x00002144 cmn.w r0, 4                               |             
    0x00002148 it hi                                     |             
                                                         |             if (r0 > 4) {
    0x0000214a rsbhi r3, r0, 0x32                        |                 __asm ("rsbhi r3, r0, 0x32");
                                                         |             }
                                                         |             if (r0 > 4) {
    0x0000214e bhi 0x2168                                |                 goto label_94;
                                                         |             }
    0x00002150 subs r0, r6, r3                           |             r0 = r6 - r3;
    0x00002152 cmp r0, 0xb                               |             
    0x00002154 it ls                                     |             
                                                         |             if (r0 > 0xb) {
    0x00002156 subls r3, ip, r3                          |                 r3 = ip - r3;
                                                         |             }
                                                         |             if (r0 < 0xb) {
    0x0000215a bls 0x2168                                |                 goto label_94;
                                                         |             }
    0x0000215c sub.w r0, lr, r3                          |             r0 = lr - r3;
    0x00002160 cmp r0, 0xa                               |             
                                                         |             if (r0 > 0xa) {
    0x00002162 bhi 0x216c                                |                 goto label_95;
                                                         |             }
    0x00002164 sub.w r3, r8, r3                          |             r3 = r8 - r3;
                                                         |         }
                                                         | label_94:
    0x00002168 str.w r2, [r1, r3, lsl 2]                 |         __asm ("str.w r2, [r1, r3, lsl 2]");
                                                         | label_95:
    0x0000216c ldr r3, [r2, 8]!                          |         r3 = *((r2 += 8));
    0x00002170 cmp r3, 0                                 |         
    0x00002172 bne 0x2132                                |         
                                                         |     } while (r3 != 0);
                                                         | label_93:
    0x00002174 ldr.w r3, [fp]                            |     r3 = *(fp);
    0x00002178 cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x0000217a beq 0x21e8                                |         
    0x0000217c ldr.w r2, [fp, 0x30]                      |         r2 = *(arg_30h);
                                                         |         if (r2 != 0) {
    0x00002180 cbz r2, 0x2188                            |             
    0x00002182 ldr r1, [r2, 4]                           |             r1 = *((r2 + 4));
    0x00002184 add r1, r3                                |             r1 += r3;
    0x00002186 str r1, [r2, 4]                           |             *((r2 + 4)) = r1;
                                                         |         }
    0x00002188 ldr.w r2, [fp, 0x2c]                      |         r2 = *(arg_2ch);
                                                         |         if (r2 != 0) {
    0x0000218c cbz r2, 0x2194                            |             
    0x0000218e ldr r1, [r2, 4]                           |             r1 = *((r2 + 4));
    0x00002190 add r1, r3                                |             r1 += r3;
    0x00002192 str r1, [r2, 4]                           |             *((r2 + 4)) = r1;
                                                         |         }
    0x00002194 ldr.w r2, [fp, 0x34]                      |         r2 = *(arg_34h);
                                                         |         if (r2 != 0) {
    0x00002198 cbz r2, 0x21a0                            |             
    0x0000219a ldr r1, [r2, 4]                           |             r1 = *((r2 + 4));
    0x0000219c add r1, r3                                |             r1 += r3;
    0x0000219e str r1, [r2, 4]                           |             *((r2 + 4)) = r1;
                                                         |         }
    0x000021a0 ldr.w r2, [fp, 0x38]                      |         r2 = *(arg_38h);
                                                         |         if (r2 != 0) {
    0x000021a4 cbz r2, 0x21ac                            |             
    0x000021a6 ldr r1, [r2, 4]                           |             r1 = *((r2 + 4));
    0x000021a8 add r1, r3                                |             r1 += r3;
    0x000021aa str r1, [r2, 4]                           |             *((r2 + 4)) = r1;
                                                         |         }
    0x000021ac ldr.w r2, [fp, 0x3c]                      |         r2 = *(arg_3ch);
                                                         |         if (r2 != 0) {
    0x000021b0 cbz r2, 0x21b8                            |             
    0x000021b2 ldr r1, [r2, 4]                           |             r1 = *((r2 + 4));
    0x000021b4 add r1, r3                                |             r1 += r3;
    0x000021b6 str r1, [r2, 4]                           |             *((r2 + 4)) = r1;
                                                         |         }
    0x000021b8 ldr.w r2, [fp, 0x64]                      |         r2 = *(arg_64h);
                                                         |         if (r2 != 0) {
    0x000021bc cbz r2, 0x21c4                            |             
    0x000021be ldr r1, [r2, 4]                           |             r1 = *((r2 + 4));
    0x000021c0 add r1, r3                                |             r1 += r3;
    0x000021c2 str r1, [r2, 4]                           |             *((r2 + 4)) = r1;
                                                         |         }
    0x000021c4 ldr.w r2, [fp, 0x7c]                      |         r2 = *(arg_7ch);
                                                         |         if (r2 != 0) {
    0x000021c8 cbz r2, 0x21d0                            |             
    0x000021ca ldr r1, [r2, 4]                           |             r1 = *((r2 + 4));
    0x000021cc add r1, r3                                |             r1 += r3;
    0x000021ce str r1, [r2, 4]                           |             *((r2 + 4)) = r1;
                                                         |         }
    0x000021d0 ldr.w r2, [fp, 0xe8]                      |         r2 = *(arg_e8h);
                                                         |         if (r2 != 0) {
    0x000021d4 cbz r2, 0x21dc                            |             
    0x000021d6 ldr r1, [r2, 4]                           |             r1 = *((r2 + 4));
    0x000021d8 add r1, r3                                |             r1 += r3;
    0x000021da str r1, [r2, 4]                           |             *((r2 + 4)) = r1;
                                                         |         }
    0x000021dc ldr.w r2, [fp, 0x150]                     |         r2 = *(arg_150h);
                                                         |         if (r2 == 0) {
    0x000021e0 cbz r2, 0x21e8                            |             goto label_96;
                                                         |         }
    0x000021e2 ldr r1, [r2, 4]                           |         r1 = *((r2 + 4));
    0x000021e4 add r1, r3                                |         r1 += r3;
    0x000021e6 str r1, [r2, 4]                           |         *((r2 + 4)) = r1;
                                                         |     }
                                                         | label_96:
    0x000021e8 ldr.w r3, [fp, 0x70]                      |     r3 = *(arg_70h);
                                                         |     if (r3 != 0) {
    0x000021ec cbz r3, 0x21fa                            |         
    0x000021ee ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x000021f0 cmp r3, 7                                 |         
    0x000021f2 it ne                                     |         
                                                         |         if (r3 != 7) {
    0x000021f4 cmpne r3, 0x11                            |             __asm ("cmpne r3, 0x11");
                                                         |         }
                                                         |         if (r3 != 7) {
    0x000021f6 bne.w 0x43d6                              |             goto label_97;
                                                         |         }
                                                         |     }
    0x000021fa ldr.w r3, [fp, 0x3c]                      |     r3 = *(arg_3ch);
                                                         |     if (r3 != 0) {
    0x000021fe cbz r3, 0x220c                            |         
    0x00002200 ldr.w r3, [fp, 0x44]                      |         r3 = *(arg_44h);
    0x00002204 ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x00002206 cmp r3, 0xc                               |         
                                                         |         if (r3 != 0xc) {
    0x00002208 bne.w 0x43b2                              |             goto label_98;
                                                         |         }
                                                         |     }
    0x0000220c ldr.w r3, [fp, 0x64]                      |     r3 = *(arg_64h);
                                                         |     if (r3 != 0) {
    0x00002210 cbz r3, 0x221e                            |         
    0x00002212 ldr.w r3, [fp, 0x6c]                      |         r3 = *(arg_6ch);
    0x00002216 ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x00002218 cmp r3, 8                                 |         
                                                         |         if (r3 != 8) {
    0x0000221a bne.w 0x43c4                              |             goto label_99;
                                                         |         }
                                                         |     }
    0x0000221e ldr.w r2, [fp, 0x98]                      |     r2 = *(arg_98h);
                                                         |     if (r2 != 0) {
    0x00002222 cbz r2, 0x2242                            |         
    0x00002224 ldr r3, [r2, 4]                           |         r3 = *((r2 + 4));
    0x00002226 lsls r0, r3, 0x1e                         |         r0 = r3 << 0x1e;
    0x00002228 str.w r3, [fp, 0x210]                     |         __asm ("str.w r3, [arg_210h]");
    0x0000222c it mi                                     |         
                                                         |         if (r0 >= r3) {
    0x0000222e strmi r2, [fp, 0x60]                      |             *(arg_60h) = r2;
                                                         |         }
    0x00002232 lsls r1, r3, 0x1d                         |         r1 = r3 << 0x1d;
    0x00002234 it mi                                     |         
                                                         |         if (r1 >= r3) {
    0x00002236 strmi r2, [fp, 0x78]                      |             *(arg_78h) = r2;
                                                         |         }
    0x0000223a lsls r6, r3, 0x1c                         |         r6 = r3 << 0x1c;
    0x0000223c it mi                                     |         
                                                         |         if (r6 < r3) {
    0x0000223e strmi r2, [fp, 0x80]                      |             *(arg_80h) = r2;
                                                         |             goto label_100;
                                                         |         }
                                                         |     }
                                                         | label_100:
    0x00002242 ldr.w r3, [fp, 0xbc]                      |     r3 = *(arg_bch);
                                                         |     if (r3 != 0) {
    0x00002246 cbz r3, 0x2270                            |         
    0x00002248 ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x0000224a lsls r5, r3, 0x1c                         |         r5 = r3 << 0x1c;
    0x0000224c str.w r3, [fp, 0x20c]                     |         __asm ("str.w r3, [arg_20ch]");
    0x00002250 itt mi                                    |         
                                                         |         if (r5 >= r3) {
    0x00002252 movmi r2, 1                               |             r2 = 1;
                                                         |         }
                                                         |         if (r5 >= r3) {
    0x00002254 strbmi r2, [fp, 0x19c]                    |             *(arg_19ch) = r2;
                                                         |         }
    0x00002258 ldr r2, [pc, 0x1c0]                       |         
    0x0000225a add r2, pc                                |         
    0x0000225c ldr r2, [r2]                              |         r2 = *(0x467a);
    0x0000225e lsls r4, r2, 0x19                         |         r4 = r2 << 0x19;
                                                         |         if (r4 < r2) {
    0x00002260 bmi.w 0x410c                              |             goto label_101;
                                                         |         }
                                                         | label_53:
    0x00002264 lsls r0, r3, 0x1f                         |         r0 = r3 << 0x1f;
    0x00002266 itt mi                                    |         
                                                         |         if (r0 >= r3) {
    0x00002268 ldrmi r3, [fp, 0xbc]                      |             r3 = *(arg_bch);
                                                         |         }
                                                         |         if (r0 >= r3) {
    0x0000226c str.w r3, [fp, 0x80]                      |             __asm ("str.w r3, [arg_80h]");
                                                         |             goto label_102;
                                                         |         }
                                                         |     }
                                                         | label_102:
    0x00002270 ldr.w r3, [fp, 0x94]                      |     r3 = *(arg_94h);
                                                         |     if (r3 != 0) {
    0x00002274 cbz r3, 0x227c                            |         
    0x00002276 movs r3, 0                                |         r3 = 0;
    0x00002278 str.w r3, [fp, 0x5c]                      |         __asm ("str.w r3, [arg_5ch]");
                                                         |     }
                                                         | label_92:
    0x0000227c ldr.w r3, [fp, 0x58]                      |     r3 = *(arg_58h);
                                                         |     if (r3 != 0) {
    0x00002280 cbz r3, 0x229a                            |         
    0x00002282 ldr.w r2, [fp, 0x34]                      |         r2 = *(arg_34h);
    0x00002286 ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x00002288 ldr r1, [pc, 0x194]                       |         
    0x0000228a ldr r0, [r2, 4]                           |         r0 = *((r2 + 4));
    0x0000228c add r1, pc                                |         r1 = 0x46b0;
    0x0000228e add r0, r3                                |         r0 += r3;
    0x00002290 bl 0x14f30                                |         r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00002294 cmp r0, 0                                 |         
                                                         |         if (r0 == 0) {
    0x00002296 beq.w 0x3450                              |             goto label_103;
                                                         |         }
                                                         |     }
                                                         | label_19:
    0x0000229a mov r0, fp                                |     r0 = fp;
    0x0000229c bl 0x8850                                 |     fcn_00008850 (r0);
                                                         | label_91:
    0x000022a0 ldr.w r3, [sl, 0x164]                     |     r3 = *((sl + 0x164));
    0x000022a4 cmp r3, 2                                 |     
                                                         |     if (r3 == 2) {
    0x000022a6 beq.w 0x3864                              |         goto label_104;
                                                         |     }
                                                         | label_29:
    0x000022aa ldr r4, [pc, 0x178]                       |     
    0x000022ac add r4, pc                                |     r4 = 0x46d6;
    0x000022ae ldr.w r3, [r4, 0x190]                     |     r3 = *(0x4866);
    0x000022b2 cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x000022b4 beq.w 0x2eaa                              |         goto label_105;
                                                         |     }
    0x000022b8 ldr r1, [pc, 0x16c]                       |     
    0x000022ba movs r6, 0                                |     r6 = 0;
    0x000022bc mov r3, r6                                |     r3 = r6;
    0x000022be movs r2, 1                                |     r2 = 1;
    0x000022c0 strd r6, r6, [sp]                         |     __asm ("strd r6, r6, [sp]");
    0x000022c4 add r1, pc                                |     r1 = 0x46f0;
    0x000022c6 mov r0, r1                                |     r0 = r1;
    0x000022c8 bl 0x8950                                 |     r0 = fcn_00008950 (r0, r1, r2, r3, r4, r5);
    0x000022cc mov r5, r0                                |     r5 = r0;
    0x000022ce cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x000022d0 beq.w 0x2eaa                              |         goto label_105;
                                                         |     }
    0x000022d4 ldr.w r4, [r4, 0x190]                     |     r4 = *((r4 + 0x190));
    0x000022d8 mov r3, r6                                |     r3 = r6;
    0x000022da ldr r2, [r4, 0x1c]                        |     r2 = *((r4 + 0x1c));
    0x000022dc add r2, r4                                |     r2 += r4;
    0x000022de str.w r2, [r0, 0x154]                     |     __asm ("str.w r2, [r0, 0x154]");
    0x000022e2 ldrh r0, [r4, 0x2c]                       |     r0 = *((r4 + 0x2c));
    0x000022e4 strh.w r0, [r5, 0x15c]                    |     *((r5 + 0x15c)) = r0;
    0x000022e8 cmp r0, 0                                 |     
                                                         |     if (r0 != 0) {
    0x000022ea bne.w 0x2440                              |         goto label_2;
                                                         |     }
    0x000022ee b 0x2460                                  |     goto label_106;
                                                         |     do {
    0x0000242c cmp r1, 1                                 |         
                                                         |         if (r1 == 1) {
    0x0000242e beq.w 0x2e56                              |             goto label_107;
                                                         |         }
    0x00002432 cmp r1, 7                                 |         
                                                         |         if (r1 == 7) {
    0x00002434 beq.w 0x43f0                              |             goto label_108;
                                                         |         }
                                                         | label_6:
    0x00002438 adds r3, 1                                |         r3++;
    0x0000243a adds r2, 0x20                             |         r2 += 0x20;
    0x0000243c cmp r3, r0                                |         
                                                         |         if (r3 == r0) {
    0x0000243e beq 0x2460                                |             goto label_106;
                                                         |         }
                                                         | label_2:
    0x00002440 ldr r1, [r2]                              |         r1 = *(r2);
    0x00002442 cmp r1, 2                                 |         
    0x00002444 bne 0x242c                                |         
                                                         |     } while (r1 != 2);
    0x00002446 ldr r1, [r2, 8]                           |     r1 = *((r2 + 8));
    0x00002448 adds r3, 1                                |     r3++;
    0x0000244a cmp r3, r0                                |     
    0x0000244c add.w r2, r2, 0x20                        |     r2 += 0x20;
    0x00002450 str r1, [r5, 8]                           |     *((r5 + 8)) = r1;
    0x00002452 ldr r1, [r2, -0xc]                        |     r1 = *((r2 - 0xc));
    0x00002456 lsr.w r1, r1, 3                           |     r1 >>= 3;
    0x0000245a strh.w r1, [r5, 0x15e]                    |     *((r5 + 0x15e)) = r1;
                                                         |     if (r3 != r0) {
    0x0000245e bne 0x2440                                |         goto label_2;
                                                         |     }
                                                         | label_106:
    0x00002460 ldr r1, [r5]                              |     r1 = *(r5);
    0x00002462 ldr.w r3, [r5, 0x1b8]                     |     r3 = *((r5 + 0x1b8));
    0x00002466 ldr r0, [r5, 8]                           |     r0 = *((r5 + 8));
    0x00002468 subs r1, r4, r1                           |     r1 = r4 - r1;
    0x0000246a str.w r4, [r5, 0x1b4]                     |     __asm ("str.w r4, [r5, 0x1b4]");
    0x0000246e add r3, r1                                |     r3 += r1;
    0x00002470 str r1, [r5]                              |     *(r5) = r1;
    0x00002472 str.w r3, [r5, 0x1b8]                     |     __asm ("str.w r3, [r5, 0x1b8]");
    0x00002476 adds r2, r0, r1                           |     r2 = r0 + r1;
    0x00002478 ldr.w r3, [r5, 0x1bc]                     |     r3 = *((r5 + 0x1bc));
    0x0000247c str r2, [r5, 8]                           |     *((r5 + 8)) = r2;
    0x0000247e add r3, r1                                |     r3 += r1;
    0x00002480 str.w r3, [r5, 0x1bc]                     |     __asm ("str.w r3, [r5, 0x1bc]");
    0x00002484 cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x00002486 beq.w 0x26ba                              |         goto label_109;
                                                         |     }
    0x0000248a ldr r3, [r0, r1]                          |     r3 = *((r0 + r1));
    0x0000248c add.w r0, r5, 0x20                        |     r0 = r5 + 0x20;
                                                         |     if (r3 == 0) {
    0x00002490 cbz r3, 0x2506                            |         goto label_110;
                                                         |     }
    0x00002492 movw lr, 0xfdff                           |     
    0x00002496 movw r8, 0xfeff                           |     
    0x0000249a movw sb, 0xfe35                           |     
    0x0000249e mov.w ip, 0x22                            |     
    0x000024a2 movw r4, 0xff41                           |     
    0x000024a6 movt lr, 0x6fff                           |     lr = 0x6ffffdff;
    0x000024aa movt r8, 0x6fff                           |     r8 = 0x6ffffeff;
    0x000024ae movt sb, 0x6fff                           |     sb = 0x6ffffe35;
    0x000024b2 movt ip, 0x7000                           |     
    0x000024b6 mvn r6, 0x90000000                        |     r6 = ~0x90000000;
    0x000024ba movt r4, 0x6fff                           |     r4 = 0x6fffff41;
    0x000024be str r4, [r7, 0x40]                        |     *((r7 + 0x40)) = r4;
                                                         |     do {
    0x000024c0 cmp r3, 0x22                              |         
                                                         |         if (r3 >= 0x22) {
    0x000024c2 bls 0x24fa                                |             
    0x000024c4 subs r4, r6, r3                           |             r4 = r6 - r3;
    0x000024c6 cmp r4, 0xf                               |             
    0x000024c8 it ls                                     |             
                                                         |             if (r4 > 0xf) {
    0x000024ca subls r3, ip, r3                          |                 r3 = ip - r3;
                                                         |             }
                                                         |             if (r4 < 0xf) {
    0x000024ce bls 0x24fa                                |                 goto label_111;
                                                         |             }
    0x000024d0 sbfx r4, r3, 0, 0x1f                      |             __asm ("sbfx r4, r3, 0, 0x1f");
    0x000024d4 cmn.w r4, 4                               |             
    0x000024d8 it hi                                     |             
                                                         |             if (r4 > 4) {
    0x000024da rsbhi r3, r4, 0x32                        |                 __asm ("rsbhi r3, r4, 0x32");
                                                         |             }
                                                         |             if (r4 > 4) {
    0x000024de bhi 0x24fa                                |                 goto label_111;
                                                         |             }
    0x000024e0 sub.w r4, lr, r3                          |             r4 = lr - r3;
    0x000024e4 cmp r4, 0xb                               |             
    0x000024e6 it ls                                     |             
                                                         |             if (r4 > 0xb) {
    0x000024e8 subls r3, sb, r3                          |                 r3 = sb - r3;
                                                         |             }
                                                         |             if (r4 < 0xb) {
    0x000024ec bls 0x24fa                                |                 goto label_111;
                                                         |             }
    0x000024ee sub.w r4, r8, r3                          |             r4 = r8 - r3;
    0x000024f2 cmp r4, 0xa                               |             
                                                         |             if (r4 > 0xa) {
    0x000024f4 bhi 0x24fe                                |                 goto label_112;
                                                         |             }
    0x000024f6 ldr r4, [r7, 0x40]                        |             r4 = *((r7 + 0x40));
    0x000024f8 subs r3, r4, r3                           |             r3 = r4 - r3;
                                                         |         }
                                                         | label_111:
    0x000024fa str.w r2, [r0, r3, lsl 2]                 |         __asm ("str.w r2, [r0, r3, lsl 2]");
                                                         | label_112:
    0x000024fe ldr r3, [r2, 8]!                          |         r3 = *((r2 += 8));
    0x00002502 cmp r3, 0                                 |         
    0x00002504 bne 0x24c0                                |         
                                                         |     } while (r3 != 0);
                                                         | label_110:
    0x00002506 cmp r1, 0                                 |     
                                                         |     if (r1 != 0) {
    0x00002508 beq.w 0x2634                              |         
    0x0000250c ldr r3, [r5, 0x30]                        |         r3 = *((r5 + 0x30));
                                                         |         if (r3 != 0) {
    0x0000250e cbz r3, 0x2526                            |             
    0x00002510 ldr.w r2, [pc, 0xc08]                     |             r2 = *(0x0000311c);
    0x00002514 ldrd r3, r0, [r3]                         |             __asm ("ldrd r3, r0, [r3]");
    0x00002518 add r2, pc                                |             r2 += pc;
    0x0000251a str r3, [r2, 4]                           |             *((r2 + 4)) = r3;
    0x0000251c add r0, r1                                |             r0 += r1;
    0x0000251e movs r3, 1                                |             r3 = 1;
    0x00002520 str r0, [r2, 8]                           |             *((r2 + 8)) = r0;
    0x00002522 adds r2, 4                                |             r2 += 4;
    0x00002524 str r2, [r5, 0x30]                        |             *((r5 + 0x30)) = r2;
                                                         |         }
    0x00002526 ldr r4, [r5, 0x2c]                        |         r4 = *((r5 + 0x2c));
                                                         |         if (r4 != 0) {
    0x00002528 cbz r4, 0x2546                            |             
    0x0000252a ldr.w r2, [pc, 0xbf4]                     |             r2 = *(0x00003120);
    0x0000252e ldr r0, [r4]                              |             r0 = *(r4);
    0x00002530 add r2, pc                                |             r2 += pc;
    0x00002532 adds r2, 4                                |             r2 += 4;
    0x00002534 str.w r0, [r2, r3, lsl 3]                 |             __asm ("str.w r0, [r2, r3, lsl 3]");
    0x00002538 add.w r2, r2, r3, lsl 3                   |             r2 += (r3 << 3);
    0x0000253c ldr r0, [r4, 4]                           |             r0 = *((r4 + 4));
    0x0000253e adds r3, 1                                |             r3++;
    0x00002540 add r0, r1                                |             r0 += r1;
    0x00002542 str r0, [r2, 4]                           |             *((r2 + 4)) = r0;
    0x00002544 str r2, [r5, 0x2c]                        |             *((r5 + 0x2c)) = r2;
                                                         |         }
    0x00002546 ldr r4, [r5, 0x34]                        |         r4 = *((r5 + 0x34));
                                                         |         if (r4 != 0) {
    0x00002548 cbz r4, 0x2566                            |             
    0x0000254a ldr.w r2, [pc, 0xbd8]                     |             r2 = *(0x00003124);
    0x0000254e ldr r0, [r4]                              |             r0 = *(r4);
    0x00002550 add r2, pc                                |             r2 += pc;
    0x00002552 adds r2, 4                                |             r2 += 4;
    0x00002554 str.w r0, [r2, r3, lsl 3]                 |             __asm ("str.w r0, [r2, r3, lsl 3]");
    0x00002558 add.w r2, r2, r3, lsl 3                   |             r2 += (r3 << 3);
    0x0000255c ldr r0, [r4, 4]                           |             r0 = *((r4 + 4));
    0x0000255e adds r3, 1                                |             r3++;
    0x00002560 add r0, r1                                |             r0 += r1;
    0x00002562 str r0, [r2, 4]                           |             *((r2 + 4)) = r0;
    0x00002564 str r2, [r5, 0x34]                        |             *((r5 + 0x34)) = r2;
                                                         |         }
    0x00002566 ldr r4, [r5, 0x38]                        |         r4 = *((r5 + 0x38));
                                                         |         if (r4 != 0) {
    0x00002568 cbz r4, 0x2586                            |             
    0x0000256a ldr.w r2, [pc, 0xbbc]                     |             r2 = *(0x00003128);
    0x0000256e ldr r0, [r4]                              |             r0 = *(r4);
    0x00002570 add r2, pc                                |             r2 += pc;
    0x00002572 adds r2, 4                                |             r2 += 4;
    0x00002574 str.w r0, [r2, r3, lsl 3]                 |             __asm ("str.w r0, [r2, r3, lsl 3]");
    0x00002578 add.w r2, r2, r3, lsl 3                   |             r2 += (r3 << 3);
    0x0000257c ldr r0, [r4, 4]                           |             r0 = *((r4 + 4));
    0x0000257e adds r3, 1                                |             r3++;
    0x00002580 add r0, r1                                |             r0 += r1;
    0x00002582 str r0, [r2, 4]                           |             *((r2 + 4)) = r0;
    0x00002584 str r2, [r5, 0x38]                        |             *((r5 + 0x38)) = r2;
                                                         |         }
    0x00002586 ldr r4, [r5, 0x3c]                        |         r4 = *((r5 + 0x3c));
                                                         |         if (r4 != 0) {
    0x00002588 cbz r4, 0x25a6                            |             
    0x0000258a ldr.w r2, [pc, 0xba0]                     |             r2 = *(0x0000312c);
    0x0000258e ldr r0, [r4]                              |             r0 = *(r4);
    0x00002590 add r2, pc                                |             r2 += pc;
    0x00002592 adds r2, 4                                |             r2 += 4;
    0x00002594 str.w r0, [r2, r3, lsl 3]                 |             __asm ("str.w r0, [r2, r3, lsl 3]");
    0x00002598 add.w r2, r2, r3, lsl 3                   |             r2 += (r3 << 3);
    0x0000259c ldr r0, [r4, 4]                           |             r0 = *((r4 + 4));
    0x0000259e adds r3, 1                                |             r3++;
    0x000025a0 add r0, r1                                |             r0 += r1;
    0x000025a2 str r0, [r2, 4]                           |             *((r2 + 4)) = r0;
    0x000025a4 str r2, [r5, 0x3c]                        |             *((r5 + 0x3c)) = r2;
                                                         |         }
    0x000025a6 ldr r4, [r5, 0x64]                        |         r4 = *((r5 + 0x64));
                                                         |         if (r4 != 0) {
    0x000025a8 cbz r4, 0x25c6                            |             
    0x000025aa ldr.w r2, [pc, 0xb84]                     |             r2 = *(0x00003130);
    0x000025ae ldr r0, [r4]                              |             r0 = *(r4);
    0x000025b0 add r2, pc                                |             r2 += pc;
    0x000025b2 adds r2, 4                                |             r2 += 4;
    0x000025b4 str.w r0, [r2, r3, lsl 3]                 |             __asm ("str.w r0, [r2, r3, lsl 3]");
    0x000025b8 add.w r2, r2, r3, lsl 3                   |             r2 += (r3 << 3);
    0x000025bc ldr r0, [r4, 4]                           |             r0 = *((r4 + 4));
    0x000025be adds r3, 1                                |             r3++;
    0x000025c0 add r0, r1                                |             r0 += r1;
    0x000025c2 str r0, [r2, 4]                           |             *((r2 + 4)) = r0;
    0x000025c4 str r2, [r5, 0x64]                        |             *((r5 + 0x64)) = r2;
                                                         |         }
    0x000025c6 ldr r4, [r5, 0x7c]                        |         r4 = *((r5 + 0x7c));
                                                         |         if (r4 != 0) {
    0x000025c8 cbz r4, 0x25e6                            |             
    0x000025ca ldr.w r2, [pc, 0xb68]                     |             r2 = *(0x00003134);
    0x000025ce ldr r0, [r4]                              |             r0 = *(r4);
    0x000025d0 add r2, pc                                |             r2 += pc;
    0x000025d2 adds r2, 4                                |             r2 += 4;
    0x000025d4 str.w r0, [r2, r3, lsl 3]                 |             __asm ("str.w r0, [r2, r3, lsl 3]");
    0x000025d8 add.w r2, r2, r3, lsl 3                   |             r2 += (r3 << 3);
    0x000025dc ldr r0, [r4, 4]                           |             r0 = *((r4 + 4));
    0x000025de adds r3, 1                                |             r3++;
    0x000025e0 add r0, r1                                |             r0 += r1;
    0x000025e2 str r0, [r2, 4]                           |             *((r2 + 4)) = r0;
    0x000025e4 str r2, [r5, 0x7c]                        |             *((r5 + 0x7c)) = r2;
                                                         |         }
    0x000025e6 ldr.w r4, [r5, 0xe8]                      |         r4 = *((r5 + 0xe8));
                                                         |         if (r4 != 0) {
    0x000025ea cbz r4, 0x260a                            |             
    0x000025ec ldr.w r2, [pc, 0xb48]                     |             r2 = *(0x00003138);
    0x000025f0 ldr r0, [r4]                              |             r0 = *(r4);
    0x000025f2 add r2, pc                                |             r2 += pc;
    0x000025f4 adds r2, 4                                |             r2 += 4;
    0x000025f6 str.w r0, [r2, r3, lsl 3]                 |             __asm ("str.w r0, [r2, r3, lsl 3]");
    0x000025fa add.w r2, r2, r3, lsl 3                   |             r2 += (r3 << 3);
    0x000025fe ldr r0, [r4, 4]                           |             r0 = *((r4 + 4));
    0x00002600 adds r3, 1                                |             r3++;
    0x00002602 add r0, r1                                |             r0 += r1;
    0x00002604 str r0, [r2, 4]                           |             *((r2 + 4)) = r0;
    0x00002606 str.w r2, [r5, 0xe8]                      |             __asm ("str.w r2, [r5, 0xe8]");
                                                         |         }
    0x0000260a ldr.w r4, [r5, 0x150]                     |         r4 = *((r5 + 0x150));
                                                         |         if (r4 == 0) {
    0x0000260e cbz r4, 0x2634                            |             goto label_113;
                                                         |         }
    0x00002610 ldr r0, [r4, 4]                           |         r0 = *((r4 + 4));
    0x00002612 cmp r3, 8                                 |         
    0x00002614 ldr.w r2, [pc, 0xb24]                     |         r2 = *(0x0000313c);
    0x00002618 add r0, r1                                |         r0 += r1;
    0x0000261a ldr r1, [r4]                              |         r1 = *(r4);
    0x0000261c add r2, pc                                |         r2 += pc;
    0x0000261e add.w r2, r2, 4                           |         r2 += 4;
    0x00002622 str.w r1, [r2, r3, lsl 3]                 |         __asm ("str.w r1, [r2, r3, lsl 3]");
    0x00002626 add.w r2, r2, r3, lsl 3                   |         r2 += (r3 << 3);
    0x0000262a str r0, [r2, 4]                           |         *((r2 + 4)) = r0;
    0x0000262c str.w r2, [r5, 0x150]                     |         __asm ("str.w r2, [r5, 0x150]");
                                                         |         if (r3 == 8) {
    0x00002630 beq.w 0x42a6                              |             goto label_114;
                                                         |         }
                                                         |     }
                                                         | label_113:
    0x00002634 ldr r3, [r5, 0x70]                        |     r3 = *((r5 + 0x70));
                                                         |     if (r3 != 0) {
    0x00002636 cbz r3, 0x2644                            |         
    0x00002638 ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x0000263a cmp r3, 7                                 |         
    0x0000263c it ne                                     |         
                                                         |         if (r3 != 7) {
    0x0000263e cmpne r3, 0x11                            |             __asm ("cmpne r3, 0x11");
                                                         |         }
                                                         |         if (r3 != 7) {
    0x00002640 bne.w 0x43d6                              |             goto label_97;
                                                         |         }
                                                         |     }
    0x00002644 ldr r3, [r5, 0x3c]                        |     r3 = *((r5 + 0x3c));
                                                         |     if (r3 != 0) {
    0x00002646 cbz r3, 0x2652                            |         
    0x00002648 ldr r3, [r5, 0x44]                        |         r3 = *((r5 + 0x44));
    0x0000264a ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x0000264c cmp r3, 0xc                               |         
                                                         |         if (r3 != 0xc) {
    0x0000264e bne.w 0x43b2                              |             goto label_98;
                                                         |         }
                                                         |     }
    0x00002652 ldr r3, [r5, 0x64]                        |     r3 = *((r5 + 0x64));
                                                         |     if (r3 != 0) {
    0x00002654 cbz r3, 0x2660                            |         
    0x00002656 ldr r3, [r5, 0x6c]                        |         r3 = *((r5 + 0x6c));
    0x00002658 ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x0000265a cmp r3, 8                                 |         
                                                         |         if (r3 != 8) {
    0x0000265c bne.w 0x43c4                              |             goto label_99;
                                                         |         }
                                                         |     }
    0x00002660 ldr.w r3, [r5, 0x98]                      |     r3 = *((r5 + 0x98));
                                                         |     if (r3 != 0) {
    0x00002664 cbz r3, 0x2680                            |         
    0x00002666 ldr r2, [r3, 4]                           |         r2 = *((r3 + 4));
    0x00002668 lsls r1, r2, 0x1e                         |         r1 = r2 << 0x1e;
    0x0000266a str.w r2, [r5, 0x210]                     |         __asm ("str.w r2, [r5, 0x210]");
    0x0000266e it mi                                     |         
                                                         |         if (r1 >= r2) {
    0x00002670 strmi r3, [r5, 0x60]                      |             *((r5 + 0x60)) = r3;
                                                         |         }
    0x00002672 lsls r6, r2, 0x1d                         |         r6 = r2 << 0x1d;
    0x00002674 it mi                                     |         
                                                         |         if (r6 >= r2) {
    0x00002676 strmi r3, [r5, 0x78]                      |             *((r5 + 0x78)) = r3;
                                                         |         }
    0x00002678 lsls r4, r2, 0x1c                         |         r4 = r2 << 0x1c;
    0x0000267a it mi                                     |         
                                                         |         if (r4 < r2) {
    0x0000267c strmi r3, [r5, 0x80]                      |             *((r5 + 0x80)) = r3;
                                                         |             goto label_115;
                                                         |         }
                                                         |     }
                                                         | label_115:
    0x00002680 ldr.w r3, [r5, 0xbc]                      |     r3 = *((r5 + 0xbc));
                                                         |     if (r3 != 0) {
    0x00002684 cbz r3, 0x26b0                            |         
    0x00002686 ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x00002688 lsls r0, r3, 0x1c                         |         r0 = r3 << 0x1c;
    0x0000268a str.w r3, [r5, 0x20c]                     |         __asm ("str.w r3, [r5, 0x20c]");
    0x0000268e itt mi                                    |         
                                                         |         if (r0 >= r3) {
    0x00002690 movmi r2, 1                               |             r2 = 1;
                                                         |         }
                                                         |         if (r0 >= r3) {
    0x00002692 strbmi r2, [r5, 0x19c]                    |             *((r5 + 0x19c)) = r2;
                                                         |         }
    0x00002696 ldr.w r2, [pc, 0xaa8]                     |         r2 = *(0x00003140);
    0x0000269a add r2, pc                                |         r2 += pc;
    0x0000269c ldr r2, [r2]                              |         r2 = *(r2);
    0x0000269e lsls r1, r2, 0x19                         |         r1 = r2 << 0x19;
                                                         |         if (r1 < r2) {
    0x000026a0 bmi.w 0x4084                              |             goto label_116;
                                                         |         }
                                                         | label_48:
    0x000026a4 lsls r2, r3, 0x1f                         |         r2 = r3 << 0x1f;
    0x000026a6 itt mi                                    |         
                                                         |         if (r2 >= r3) {
    0x000026a8 ldrmi r3, [r5, 0xbc]                      |             r3 = *((r5 + 0xbc));
                                                         |         }
                                                         |         if (r2 >= r3) {
    0x000026ac str.w r3, [r5, 0x80]                      |             __asm ("str.w r3, [r5, 0x80]");
                                                         |             goto label_117;
                                                         |         }
                                                         |     }
                                                         | label_117:
    0x000026b0 ldr.w r3, [r5, 0x94]                      |     r3 = *((r5 + 0x94));
                                                         |     if (r3 != 0) {
    0x000026b4 cbz r3, 0x26ba                            |         
    0x000026b6 movs r3, 0                                |         r3 = 0;
    0x000026b8 str r3, [r5, 0x5c]                        |         *((r5 + 0x5c)) = r3;
                                                         |     }
                                                         | label_109:
    0x000026ba mov r0, r5                                |     r0 = r5;
    0x000026bc bl 0x8850                                 |     fcn_00008850 (r0);
    0x000026c0 ldrb.w r3, [r5, 0x198]                    |     r3 = *((r5 + 0x198));
    0x000026c4 movs r2, 1                                |     r2 = 1;
    0x000026c6 ldr r1, [r5, 0x58]                        |     r1 = *((r5 + 0x58));
    0x000026c8 str.w r2, [r5, 0x204]                     |     __asm ("str.w r2, [r5, 0x204]");
    0x000026cc orr r3, r3, 4                             |     r3 |= 4;
    0x000026d0 strb.w r3, [r5, 0x198]                    |     *((r5 + 0x198)) = r3;
    0x000026d4 ldr.w r3, [r5, 0x1d8]                     |     r3 = *((r5 + 0x1d8));
    0x000026d8 str r2, [r3, 4]                           |     *((r3 + 4)) = r2;
    0x000026da add.w r2, r5, 0x14                        |     r2 = r5 + 0x14;
    0x000026de str r2, [r3]                              |     *(r3) = r2;
                                                         |     if (r1 != 0) {
    0x000026e0 cbz r1, 0x26f0                            |         
    0x000026e2 ldr r3, [r5, 0x34]                        |         r3 = *((r5 + 0x34));
    0x000026e4 ldr r2, [r1, 4]                           |         r2 = *((r1 + 4));
    0x000026e6 ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x000026e8 add r3, r2                                |         r3 += r2;
    0x000026ea ldr r2, [r5, 0x1c]                        |         r2 = *((r5 + 0x1c));
    0x000026ec str r3, [r2]                              |         *(r2) = r3;
    0x000026ee str r3, [r5, 4]                           |         *((r5 + 4)) = r3;
                                                         |     }
    0x000026f0 movs r1, 0                                |     r1 = 0;
    0x000026f2 mov r0, r5                                |     r0 = r5;
    0x000026f4 bl 0x88cc                                 |     fcn_000088cc (r0, r1);
    0x000026f8 ldr r3, [r5, 0xc]                         |     r3 = *((r5 + 0xc));
    0x000026fa cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x000026fc bne.w 0x4416                              |         goto label_118;
                                                         |     }
    0x00002700 ldr r3, [r5, 0x10]                        |     r3 = *((r5 + 0x10));
    0x00002702 cmp fp, r3                                |     
                                                         |     if (fp != r3) {
    0x00002704 bne.w 0x443c                              |         goto label_119;
                                                         |     }
    0x00002708 ldr.w r3, [pc, 0xa38]                     |     r3 = *(0x00003144);
    0x0000270c add r3, pc                                |     r3 += pc;
    0x0000270e str.w r5, [r3, 0x5a4]                     |     __asm ("str.w r5, [r3, 0x5a4]");
    0x00002712 add.w r3, r3, 0x598                       |     r3 += 0x598;
    0x00002716 str r3, [r5, 0x10]                        |     *((r5 + 0x10)) = r3;
    0x00002718 ldr.w r3, [pc, 0xa2c]                     |     r3 = *(0x00003148);
    0x0000271c add r3, pc                                |     r3 += pc;
    0x0000271e str.w r5, [r3, 0x194]                     |     __asm ("str.w r5, [r3, 0x194]");
    0x00002722 add.w r3, r5, 0xc                         |     r3 = r5 + 0xc;
    0x00002726 str r3, [r7, 0x28]                        |     *((r7 + 0x28)) = r3;
                                                         | label_8:
    0x00002728 ldr.w r3, [pc, 0xa20]                     |     r3 = *(0x0000314c);
    0x0000272c movs r4, 0                                |     r4 = 0;
    0x0000272e ldr r1, [r7, 0x44]                        |     r1 = *((r7 + 0x44));
    0x00002730 movs r2, 0x20                             |     r2 = 0x20;
    0x00002732 add.w r6, r7, 0x64                        |     r6 = r7 + 0x64;
    0x00002736 ldr.w sb, [pc, 0xa18]                     |     sb = *(0x00003150);
    0x0000273a add r3, pc                                |     r3 += pc;
    0x0000273c add.w r8, r7, 0x50                        |     r8 = r7 + 0x50;
    0x00002740 str r4, [r1, 0xc]                         |     *((r1 + 0xc)) = r4;
    0x00002742 strd r4, r4, [r1]                         |     __asm ("strd r4, r4, [r1]");
    0x00002746 add sb, pc                                |     sb += pc;
    0x00002748 str r4, [r1, 8]                           |     *((r1 + 8)) = r4;
    0x0000274a strb r2, [r1, 0xc]                        |     *((r1 + 0xc)) = r2;
    0x0000274c str.w r1, [r8]                            |     __asm ("str.w r1, [r8]");
    0x00002750 ldm r3, {r0, r1, r2, r3}                  |     r0 = *(r3);
                                                         |     r1 = *((r3 + 4));
                                                         |     r2 = *((r3 + 8));
                                                         |     r3 = *((r3 + 12));
    0x00002752 stm.w r6, {r0, r1, r2, r3}                |     *(r6) = r0;
                                                         |     *((r6 + 4)) = r1;
                                                         |     *((r6 + 8)) = r2;
                                                         |     *((r6 + 12)) = r3;
    0x00002756 mov r2, r8                                |     r2 = r8;
    0x00002758 ldr.w r0, [pc, 0x9f8]                     |     r0 = *(0x00003154);
    0x0000275c add.w r3, r5, 0x1d8                       |     r3 = r5 + 0x1d8;
    0x00002760 mov r1, r5                                |     r1 = r5;
    0x00002762 strd r4, r4, [sp, 8]                      |     __asm ("strd r4, r4, [sp, 8]");
    0x00002766 strd r6, r4, [sp]                         |     __asm ("strd r6, r4, [sp]");
    0x0000276a add r0, pc                                |     r0 += pc;
    0x0000276c ldr.w r4, [sb, 0x1b8]                     |     r4 = *((sb + 0x1b8));
    0x00002770 blx r4                                    |     uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00002772 ldr.w r2, [r8]                            |     r2 = *(r8);
    0x00002776 cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x00002778 beq.w 0x36ac                              |         goto label_120;
                                                         |     }
    0x0000277c ldrh r3, [r2, 0xe]                        |     r3 = *((r2 + 0xe));
    0x0000277e movw r1, 0xfff1                           |     r1 = 0xfff1;
    0x00002782 ldr r2, [r2, 4]                           |     r2 = *((r2 + 4));
    0x00002784 cmp r3, r1                                |     
    0x00002786 it ne                                     |     
                                                         |     if (r3 != r1) {
    0x00002788 cmpne r0, 0                               |         __asm ("cmpne r0, 0");
                                                         |     }
    0x0000278a itte ne                                   |     
                                                         |     if (r3 == r1) {
    0x0000278c movne r3, 1                               |         r3 = 1;
                                                         |     }
                                                         |     if (r3 == r1) {
    0x0000278e ldrne r3, [r0]                            |         r3 = *(r0);
                                                         |     }
                                                         |     if (r3 != r1) {
    0x00002790 moveq r3, 0                               |         r3 = 0;
                                                         |     }
    0x00002792 add r3, r2                                |     r3 += r2;
    0x00002794 ldr.w r2, [pc, 0x9c0]                     |     r2 = *(0x00003158);
    0x00002798 add r2, pc                                |     r2 += pc;
    0x0000279a ldr.w ip, [r2, 0x194]                     |     ip = *((r2 + 0x194));
                                                         | label_27:
    0x0000279e ldr.w r5, [pc, 0x9bc]                     |     r5 = *(0x0000315c);
    0x000027a2 add r5, pc                                |     r5 += pc;
    0x000027a4 str.w r3, [r5, 0x198]                     |     __asm ("str.w r3, [r5, 0x198]");
    0x000027a8 cmp.w ip, 0                               |     
                                                         |     if (ip == 0) {
    0x000027ac beq.w 0x35bc                              |         goto label_121;
                                                         |     }
    0x000027b0 ldr.w r3, [pc, 0x9ac]                     |     r3 = *(0x00003160);
    0x000027b4 movs r4, 0                                |     r4 = 0;
    0x000027b6 ldr r1, [r7, 0x44]                        |     r1 = *((r7 + 0x44));
    0x000027b8 movs r2, 0x20                             |     r2 = 0x20;
    0x000027ba add r3, pc                                |     r3 += pc;
    0x000027bc str r4, [r1, 0xc]                         |     *((r1 + 0xc)) = r4;
    0x000027be strd r4, r4, [r1]                         |     __asm ("strd r4, r4, [r1]");
    0x000027c2 str r4, [r1, 8]                           |     *((r1 + 8)) = r4;
    0x000027c4 str.w r1, [r8]                            |     __asm ("str.w r1, [r8]");
    0x000027c8 strb r2, [r1, 0xc]                        |     *((r1 + 0xc)) = r2;
    0x000027ca ldm r3, {r0, r1, r2, r3}                  |     r0 = *(r3);
                                                         |     r1 = *((r3 + 4));
                                                         |     r2 = *((r3 + 8));
                                                         |     r3 = *((r3 + 12));
    0x000027cc stm.w r6, {r0, r1, r2, r3}                |     *(r6) = r0;
                                                         |     *((r6 + 4)) = r1;
                                                         |     *((r6 + 8)) = r2;
                                                         |     *((r6 + 12)) = r3;
    0x000027d0 mov r2, r8                                |     r2 = r8;
    0x000027d2 ldr.w r0, [pc, 0x990]                     |     
    0x000027d6 add.w r3, ip, 0x1d8                       |     r3 = ip + 0x1d8;
    0x000027da mov r1, ip                                |     r1 = ip;
    0x000027dc strd r4, r4, [sp, 8]                      |     __asm ("strd r4, r4, [sp, 8]");
    0x000027e0 strd r6, r4, [sp]                         |     __asm ("strd r6, r4, [sp]");
    0x000027e4 add r0, pc                                |     r0 = 0x594e;
    0x000027e6 ldr.w r4, [r5, 0x1b8]                     |     r4 = *((r5 + 0x1b8));
    0x000027ea blx r4                                    |     uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x000027ec ldr.w r2, [r8]                            |     r2 = *(r8);
    0x000027f0 cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x000027f2 beq.w 0x36a2                              |         goto label_122;
                                                         |     }
    0x000027f6 ldrh r3, [r2, 0xe]                        |     r3 = *((r2 + 0xe));
    0x000027f8 movw r1, 0xfff1                           |     r1 = 0xfff1;
    0x000027fc ldr r2, [r2, 4]                           |     r2 = *((r2 + 4));
    0x000027fe cmp r3, r1                                |     
    0x00002800 it ne                                     |     
                                                         |     if (r3 != r1) {
    0x00002802 cmpne r0, 0                               |         __asm ("cmpne r0, 0");
                                                         |     }
    0x00002804 itte ne                                   |     
                                                         |     if (r3 == r1) {
    0x00002806 movne r3, 1                               |         r3 = 1;
                                                         |     }
                                                         |     if (r3 == r1) {
    0x00002808 ldrne r3, [r0]                            |         r3 = *(r0);
                                                         |     }
                                                         |     if (r3 != r1) {
    0x0000280a moveq r3, 0                               |         r3 = 0;
                                                         |     }
    0x0000280c add r3, r2                                |     r3 += r2;
    0x0000280e ldr.w r2, [pc, 0x958]                     |     r2 = *(0x00003168);
    0x00002812 add r2, pc                                |     r2 += pc;
    0x00002814 ldr.w r5, [r2, 0x194]                     |     r5 = *((r2 + 0x194));
                                                         | label_26:
    0x00002818 ldr.w ip, [pc, 0x950]                     |     ip = *(0x0000316c);
    0x0000281c add ip, pc                                |     
    0x0000281e str.w r3, [ip, 0x19c]                     |     __asm ("str.w r3, [ip, 0x19c]");
    0x00002820 adds r1, 0x9c                             |     r1 += 0x9c;
    0x00002822 cmp r5, 0                                 |     
                                                         |     if (r5 == 0) {
    0x00002824 beq.w 0x35c8                              |         goto label_123;
                                                         |     }
    0x00002828 ldr.w r3, [pc, 0x944]                     |     r3 = *(0x00003170);
    0x0000282c movs r4, 0                                |     r4 = 0;
    0x0000282e ldr r1, [r7, 0x44]                        |     r1 = *((r7 + 0x44));
    0x00002830 movs r2, 0x20                             |     r2 = 0x20;
    0x00002832 add r3, pc                                |     r3 += pc;
    0x00002834 str r4, [r1, 0xc]                         |     *((r1 + 0xc)) = r4;
    0x00002836 strd r4, r4, [r1]                         |     __asm ("strd r4, r4, [r1]");
    0x0000283a str r4, [r1, 8]                           |     *((r1 + 8)) = r4;
    0x0000283c str.w r1, [r8]                            |     __asm ("str.w r1, [r8]");
    0x00002840 strb r2, [r1, 0xc]                        |     *((r1 + 0xc)) = r2;
    0x00002842 ldm r3, {r0, r1, r2, r3}                  |     r0 = *(r3);
                                                         |     r1 = *((r3 + 4));
                                                         |     r2 = *((r3 + 8));
                                                         |     r3 = *((r3 + 12));
    0x00002844 stm.w r6, {r0, r1, r2, r3}                |     *(r6) = r0;
                                                         |     *((r6 + 4)) = r1;
                                                         |     *((r6 + 8)) = r2;
                                                         |     *((r6 + 12)) = r3;
    0x00002848 mov r2, r8                                |     r2 = r8;
    0x0000284a ldr.w r0, [pc, 0x928]                     |     r0 = *(0x00003174);
    0x0000284e add.w r3, r5, 0x1d8                       |     r3 = r5 + 0x1d8;
    0x00002852 mov r1, r5                                |     r1 = r5;
    0x00002854 str r6, [sp]                              |     *(sp) = r6;
    0x00002856 strd r4, r4, [sp, 8]                      |     __asm ("strd r4, r4, [sp, 8]");
    0x0000285a add r0, pc                                |     r0 += pc;
    0x0000285c str r4, [sp, 4]                           |     *(arg_4h) = r4;
    0x0000285e ldr.w r4, [ip, 0x1b8]                     |     r4 = *((ip + 0x1b8));
    0x00002862 blx r4                                    |     uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00002864 ldr.w r2, [r8]                            |     r2 = *(r8);
    0x00002868 cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x0000286a beq.w 0x35c8                              |         goto label_123;
                                                         |     }
    0x0000286e ldrh r3, [r2, 0xe]                        |     r3 = *((r2 + 0xe));
    0x00002870 movw r1, 0xfff1                           |     r1 = 0xfff1;
    0x00002874 ldr r2, [r2, 4]                           |     r2 = *((r2 + 4));
    0x00002876 cmp r3, r1                                |     
    0x00002878 it ne                                     |     
                                                         |     if (r3 != r1) {
    0x0000287a cmpne r0, 0                               |         __asm ("cmpne r0, 0");
                                                         |     }
    0x0000287c itte ne                                   |     
                                                         |     if (r3 == r1) {
    0x0000287e movne r3, 1                               |         r3 = 1;
                                                         |     }
                                                         |     if (r3 == r1) {
    0x00002880 ldrne r3, [r0]                            |         r3 = *(r0);
                                                         |     }
                                                         |     if (r3 != r1) {
    0x00002882 moveq r3, 0                               |         r3 = 0;
                                                         |     }
    0x00002884 add r3, r2                                |     r3 += r2;
                                                         | label_21:
    0x00002886 ldr.w r4, [pc, 0x8f0]                     |     r4 = *(0x00003178);
    0x0000288a add r4, pc                                |     r4 += pc;
    0x0000288c str.w r3, [r4, 0x1a0]                     |     __asm ("str.w r3, [r4, 0x1a0]");
    0x00002890 bl 0x11af8                                |     r0 = fcn_00011af8 ();
    0x00002894 cmp r0, 0                                 |     
                                                         |     if (r0 < 0) {
    0x00002896 blt.w 0x380c                              |         goto label_124;
                                                         |     }
    0x0000289a ldr r3, [r4, 4]                           |     r3 = *((r4 + 4));
    0x0000289c cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x0000289e bne.w 0x387e                              |         goto label_125;
                                                         |     }
                                                         | label_31:
    0x000028a2 ldr.w r3, [pc, 0x8d8]                     |     r3 = *(0x0000317c);
    0x000028a6 add r3, pc                                |     r3 += pc;
    0x000028a8 str r0, [r3, 4]                           |     *((r3 + 4)) = r0;
                                                         | label_30:
    0x000028aa movw r3, 0x1ff                            |     
    0x000028ae movt r3, 3                                |     r3 = 0x301ff;
    0x000028b2 cmp r0, r3                                |     
                                                         |     if (r0 <= r3) {
    0x000028b4 ble.w 0x43e8                              |         goto label_126;
                                                         |     }
    0x000028b8 ldr.w r4, [pc, 0x8c4]                     |     r4 = *(0x00003180);
    0x000028bc ldrd r2, r3, [sl, 0x15c]                  |     __asm ("ldrd r2, r3, [sl, 0x15c]");
    0x000028c0 ldrd r0, r1, [sl, 0x14c]                  |     __asm ("ldrd r0, r1, [sl, 0x14c]");
    0x000028c4 add r4, pc                                |     r4 += pc;
    0x000028c6 bl 0x5714                                 |     fcn_00005714 (r0, r1, r2, r3);
    0x000028ca ldr.w r0, [r4, 0x598]                     |     r0 = *((r4 + 0x598));
    0x000028ce movs r1, 0                                |     r1 = 0;
    0x000028d0 bl 0xbdf0                                 |     fcn_0000bdf0 (r0);
    0x000028d4 ldr.w r3, [r4, 0x59c]                     |     r3 = *((r4 + 0x59c));
    0x000028d8 movs r2, 0                                |     r2 = 0;
    0x000028da str r0, [r7, 0x2c]                        |     *((r7 + 0x2c)) = r0;
    0x000028dc str r2, [r0, 0xc]                         |     *((r0 + 0xc)) = r2;
    0x000028de cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x000028e0 beq.w 0x33ec                              |         goto label_127;
                                                         |     }
                                                         | label_17:
    0x000028e4 ldr.w r3, [pc, 0x89c]                     |     r3 = *(0x00003184);
    0x000028e8 movs r4, 1                                |     r4 = 1;
    0x000028ea ldr.w r0, [pc, 0x89c]                     |     r0 = *(0x00003188);
    0x000028ee add r3, pc                                |     r3 += pc;
    0x000028f0 ldrb.w r1, [r3, 0x730]                    |     r1 = *((r3 + 0x730));
    0x000028f4 add r0, pc                                |     r0 += pc;
    0x000028f6 ldr.w r2, [r3, 0x578]                     |     r2 = *((r3 + 0x578));
    0x000028fa add.w r5, r3, 0x598                       |     r5 = r3 + 0x598;
    0x000028fe bfi r1, r4, 0, 2                          |     value_0 = BIT_MASK (0, 2);
                                                         |     value_1 = r4 & value_0;
                                                         |     value_0 = ~value_0;
                                                         |     r1 &= value_0;
                                                         |     r1 |= value_1;
    0x00002902 strb.w r1, [r3, 0x730]                    |     *((r3 + 0x730)) = r1;
    0x00002906 adds r2, r2, r4                           |     r2 += r4;
    0x00002908 ldr r1, [r3, 4]                           |     r1 = *((r3 + 4));
    0x0000290a add r1, r4                                |     r1 += r4;
    0x0000290c ldr.w r4, [r0, 0x16c]                     |     r4 = *((r0 + 0x16c));
    0x00002910 str r1, [r3, 4]                           |     *((r3 + 4)) = r1;
    0x00002912 ldr.w r1, [r3, 0x57c]                     |     r1 = *((r3 + 0x57c));
    0x00002916 str.w r5, [fp, 0xc]                       |     __asm ("str.w r5, [arg_ch]");
    0x0000291a str.w r2, [r3, 0x578]                     |     __asm ("str.w r2, [r3, 0x578]");
    0x0000291e adc r1, r1, 0                             |     __asm ("adc r1, r1, 0");
    0x00002922 adds r4, 2                                |     r4 += 2;
    0x00002924 str.w r1, [r3, 0x57c]                     |     __asm ("str.w r1, [r3, 0x57c]");
    0x00002928 str.w fp, [r3, 0x5a8]                     |     __asm ("str.w fp, [r3, 0x5a8]");
                                                         |     if (r4 == 2) {
    0x0000292c bne 0x293e                                |         
    0x0000292e ldr.w r3, [fp]                            |         r3 = *(fp);
    0x00002932 clz r3, r3                                |         r3 &= r3;
    0x00002936 lsrs r3, r3, 5                            |         r3 >>= 5;
    0x00002938 rsbs r3, r3, 0                            |         r3 -= ;
    0x0000293a str.w r3, [r0, 0x16c]                     |         __asm ("str.w r3, [r0, 0x16c]");
                                                         |     }
    0x0000293e ldr.w r1, [pc, 0x84c]                     |     r1 = *(0x0000318c);
    0x00002942 add r1, pc                                |     r1 += pc;
    0x00002944 ldrh r3, [r1, 0x28]                       |     r3 = *((r1 + 0x28));
    0x00002946 cmp r3, 0x34                              |     
                                                         |     if (r3 != 0x34) {
    0x00002948 bne.w 0x438a                              |         goto label_128;
                                                         |     }
    0x0000294c ldrh r3, [r1, 0x2a]                       |     r3 = *((r1 + 0x2a));
    0x0000294e cmp r3, 0x20                              |     
                                                         |     if (r3 != 0x20) {
    0x00002950 bne.w 0x439e                              |         goto label_129;
                                                         |     }
    0x00002954 ldr r3, [r1, 0x1c]                        |     r3 = *((r1 + 0x1c));
    0x00002956 movw r0, 0xe552                           |     
    0x0000295a ldrh r2, [r1, 0x2c]                       |     r2 = *((r1 + 0x2c));
    0x0000295c movt r0, 0x6474                           |     r0 = 0x6474e552;
    0x00002960 add r3, r1                                |     r3 += r1;
    0x00002962 ldr.w r1, [pc, 0x82c]                     |     r1 = *(0x00003190);
    0x00002966 add r1, pc                                |     r1 += pc;
    0x00002968 str.w r3, [r1, 0x6ec]                     |     __asm ("str.w r3, [r1, 0x6ec]");
    0x0000296c add.w r3, r3, r2, lsl 5                   |     r3 += (r2 << 5);
    0x00002970 strh.w r2, [r1, 0x6f4]                    |     *((r1 + 0x6f4)) = r2;
                                                         |     do {
                                                         |         if (r2 == 0) {
    0x00002974 cbz r2, 0x2994                            |             goto label_130;
                                                         |         }
    0x00002976 ldr r1, [r3, -0x20]                       |         r1 = *((r3 - 0x20));
    0x0000297a subs r2, 1                                |         r2--;
    0x0000297c subs r3, 0x20                             |         r3 -= 0x20;
    0x0000297e cmp r1, r0                                |         
    0x00002980 bne 0x2974                                |         
                                                         |     } while (r1 != r0);
    0x00002982 ldr.w r2, [pc, 0x810]                     |     r2 = *(0x00003194);
    0x00002986 ldr r1, [r3, 8]                           |     r1 = *((r3 + 8));
    0x00002988 ldr r3, [r3, 0x14]                        |     r3 = *((r3 + 0x14));
    0x0000298a add r2, pc                                |     r2 += pc;
    0x0000298c str.w r1, [r2, 0x7e8]                     |     __asm ("str.w r1, [r2, 0x7e8]");
    0x00002990 str.w r3, [r2, 0x7ec]                     |     __asm ("str.w r3, [r2, 0x7ec]");
                                                         | label_130:
    0x00002994 ldr.w r0, [pc, 0x800]                     |     r0 = *(0x00003198);
    0x00002998 add r0, pc                                |     r0 += pc;
    0x0000299a ldr.w r3, [r0, 0x7d0]                     |     r3 = *((r0 + 0x7d0));
    0x0000299e cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x000029a0 bne.w 0x3258                              |         goto label_131;
                                                         |     }
                                                         | label_13:
    0x000029a4 ldr.w r3, [fp, 0x134]                     |     r3 = *(arg_134h);
    0x000029a8 ldr.w r2, [fp, 0x34]                      |     r2 = *(arg_34h);
    0x000029ac ldr r4, [r2, 4]                           |     r4 = *((r2 + 4));
                                                         |     if (r3 != 0) {
    0x000029ae cbz r3, 0x29d4                            |         
    0x000029b0 ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x000029b2 ldrb r2, [r4, r3]                         |         r2 = *((r4 + r3));
    0x000029b4 add r3, r4                                |         r3 += r4;
                                                         |         if (r2 == 0) {
    0x000029b6 cbz r2, 0x29d4                            |             goto label_132;
                                                         |         }
    0x000029b8 ldr.w r2, [sl, 0x40]                      |         r2 = *((sl + 0x40));
    0x000029bc cmp r2, 0x10                              |         
                                                         |         if (r2 == 0x10) {
    0x000029be beq.w 0x4382                              |             goto label_133;
                                                         |         }
    0x000029c2 str.w r3, [sl, r2, lsl 2]                 |         __asm ("str.w r3, [sl, r2, lsl 2]");
    0x000029c6 adds r2, 1                                |         r2++;
    0x000029c8 cmp r2, 1                                 |         
    0x000029ca str.w r2, [sl, 0x40]                      |         __asm ("str.w r2, [sl, 0x40]");
    0x000029ce it eq                                     |         
                                                         |         if (r2 == 1) {
    0x000029d0 streq r3, [sl, 0x48]                      |             *((sl + 0x48)) = r3;
                                                         |             goto label_132;
                                                         |         }
                                                         |     }
                                                         | label_132:
    0x000029d4 ldr.w r3, [fp, 0x138]                     |     r3 = *(arg_138h);
                                                         |     if (r3 != 0) {
    0x000029d8 cbz r3, 0x2a00                            |         
    0x000029da ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x000029dc ldrb r2, [r4, r3]                         |         r2 = *((r4 + r3));
    0x000029de add r4, r3                                |         r4 += r3;
                                                         |         if (r2 == 0) {
    0x000029e0 cbz r2, 0x2a00                            |             goto label_134;
                                                         |         }
    0x000029e2 ldr.w r3, [sl, 0x40]                      |         r3 = *((sl + 0x40));
    0x000029e6 cmp r3, 0x10                              |         
                                                         |         if (r3 == 0x10) {
    0x000029e8 beq.w 0x4382                              |             goto label_133;
                                                         |         }
    0x000029ec str.w r4, [sl, r3, lsl 2]                 |         __asm ("str.w r4, [sl, r3, lsl 2]");
    0x000029f0 adds r3, 1                                |         r3++;
    0x000029f2 cmp r3, 1                                 |         
    0x000029f4 ldr.w r2, [sl, 0x164]                     |         r2 = *((sl + 0x164));
    0x000029f8 str.w r3, [sl, 0x40]                      |         __asm ("str.w r3, [sl, 0x40]");
                                                         |         if (r3 == 1) {
    0x000029fc beq.w 0x3604                              |             goto label_135;
                                                         |         }
                                                         |     }
                                                         | label_134:
    0x00002a00 ldr.w r3, [sl, 0x164]                     |     r3 = *((sl + 0x164));
    0x00002a04 cmp r3, 6                                 |     
                                                         |     if (r3 == 6) {
    0x00002a06 beq.w 0x34c8                              |         goto label_22;
                                                         |     }
    0x00002a0a ldr.w r3, [sl, 0x40]                      |     r3 = *((sl + 0x40));
    0x00002a0e cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x00002a10 bne.w 0x3264                              |         goto label_136;
                                                         |     }
    0x00002a14 movs r3, 1                                |     r3 = 1;
    0x00002a16 str r3, [r7, 0x40]                        |     *((r7 + 0x40)) = r3;
                                                         | label_16:
    0x00002a18 bl 0xd498                                 |     fcn_0000d498 ();
    0x00002a1c ldr.w r3, [fp, 0x74]                      |     r3 = *(arg_74h);
    0x00002a20 str r0, [r7, 0x20]                        |     *((r7 + 0x20)) = r0;
                                                         |     if (r3 != 0) {
    0x00002a22 cbz r3, 0x2a28                            |         
    0x00002a24 ldr r2, [r7, 0x2c]                        |         r2 = *((r7 + 0x2c));
    0x00002a26 str r2, [r3, 4]                           |         *((r3 + 4)) = r2;
                                                         |     }
    0x00002a28 ldr.w r3, [pc, 0x770]                     |     r3 = *(0x0000319c);
    0x00002a2c add r3, pc                                |     r3 += pc;
    0x00002a2e ldr.w r3, [r3, 0x60c]                     |     r3 = *((r3 + 0x60c));
                                                         |     if (r3 != 0) {
    0x00002a32 cbz r3, 0x2a38                            |         
    0x00002a34 ldr r2, [r7, 0x2c]                        |         r2 = *((r7 + 0x2c));
    0x00002a36 str r2, [r3, 4]                           |         *((r3 + 4)) = r2;
                                                         |     }
    0x00002a38 ldr r2, [r7, 0x2c]                        |     r2 = *((r7 + 0x2c));
    0x00002a3a movs r3, 1                                |     r3 = 1;
    0x00002a3c ldr.w r4, [pc, 0x760]                     |     r4 = *(0x000031a0);
    0x00002a40 str r3, [r2, 0xc]                         |     *((r2 + 0xc)) = r3;
    0x00002a42 add r4, pc                                |     r4 += pc;
    0x00002a44 bl 0xbdec                                 |     dl_debug_state ();
    0x00002a48 ldr.w r3, [r4, 0x1dc]                     |     r3 = *((r4 + 0x1dc));
    0x00002a4c cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x00002a4e bne.w 0x38f2                              |         goto label_137;
                                                         |     }
                                                         | label_36:
    0x00002a52 ldr r3, [r7, 0x28]                        |     r3 = *((r7 + 0x28));
    0x00002a54 ldr r3, [r3]                              |     r3 = *(r3);
    0x00002a56 cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x00002a58 bne.w 0x436e                              |         goto label_138;
                                                         |     }
    0x00002a5c ldr.w r4, [sl, 0x154]                     |     r4 = *((sl + 0x154));
    0x00002a60 cmp r4, 0                                 |     
                                                         |     if (r4 != 0) {
    0x00002a62 bne.w 0x393c                              |         goto label_139;
                                                         |     }
                                                         | label_37:
    0x00002a66 ldr.w r0, [sl, 0x158]                     |     r0 = *((sl + 0x158));
    0x00002a6a cmp r0, 0                                 |     
                                                         |     if (r0 != 0) {
    0x00002a6c bne.w 0x3a6a                              |         goto label_140;
                                                         |     }
                                                         | label_39:
    0x00002a70 ldr.w r5, [pc, 0x730]                     |     r5 = *(0x000031a4);
    0x00002a74 movs r1, 4                                |     r1 = 4;
    0x00002a76 add r5, pc                                |     r5 += pc;
    0x00002a78 mov r0, r5                                |     r0 = r5;
    0x00002a7a bl 0x146f8                                |     r0 = fcn_000146f8 ();
    0x00002a7e cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00002a80 beq.w 0x3950                              |         goto label_141;
                                                         |     }
                                                         | label_38:
    0x00002a84 ldr r3, [r7, 0x28]                        |     r3 = *((r7 + 0x28));
    0x00002a86 ldr r1, [r3]                              |     r1 = *(r3);
    0x00002a88 cmp r1, 0                                 |     
                                                         |     if (r1 != 0) {
    0x00002a8a bne.w 0x38b0                              |         goto label_142;
                                                         |     }
                                                         | label_35:
    0x00002a8e ldr.w r3, [sl, 0x164]                     |     r3 = *((sl + 0x164));
    0x00002a92 movs r0, 0                                |     r0 = 0;
    0x00002a94 str r0, [sp]                              |     *(sp) = r0;
    0x00002a96 mov r2, r4                                |     r2 = r4;
    0x00002a98 mov r0, fp                                |     r0 = fp;
    0x00002a9a sub.w r3, r3, 3                           |     r3 -= 3;
    0x00002a9e clz r3, r3                                |     r3 &= r3;
    0x00002aa2 lsrs r3, r3, 5                            |     r3 >>= 5;
    0x00002aa4 bl 0xa720                                 |     fcn_0000a720 (r0, r1, r2, r3, r4, r5, r6);
    0x00002aa8 ldr.w r0, [fp, 0x164]                     |     r0 = *(arg_164h);
    0x00002aac cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00002aae beq.w 0x3894                              |         goto label_143;
                                                         |     }
    0x00002ab2 ldr.w r4, [fp, 0x160]                     |     r4 = *(arg_160h);
    0x00002ab6 add.w r2, r4, r0, lsl 2                   |     r2 = r4 + (r0 << 2);
                                                         |     do {
    0x00002aba ldr r1, [r2, -0x4]!                       |         r1 = *((r2 -= 0x4));
    0x00002abe ldrb.w r3, [r1, 0x198]                    |         r3 = *((r1 + 0x198));
    0x00002ac2 cmp r2, r4                                |         
    0x00002ac4 orr r3, r3, 0x10                          |         r3 |= 0x10;
    0x00002ac8 strb.w r3, [r1, 0x198]                    |         *((r1 + 0x198)) = r3;
    0x00002acc bne 0x2aba                                |         
                                                         |     } while (r2 != r4);
    0x00002ace ldr.w r3, [pc, 0x6d8]                     |     r3 = *(0x000031a8);
    0x00002ad2 add r3, pc                                |     r3 += pc;
    0x00002ad4 ldr.w r2, [r3, 0x5a8]                     |     r2 = *((r3 + 0x5a8));
    0x00002ad8 ldr.w r1, [r3, 0x5a4]                     |     r1 = *((r3 + 0x5a4));
    0x00002adc str r1, [r2, 0xc]                         |     *((r2 + 0xc)) = r1;
    0x00002ade ldr.w r3, [r3, 0x5a4]                     |     r3 = *((r3 + 0x5a4));
                                                         |     if (r3 != 0) {
    0x00002ae2 cbz r3, 0x2ae6                            |         
                                                         | label_33:
    0x00002ae4 str r2, [r3, 0x10]                        |         *((r3 + 0x10)) = r2;
                                                         |     }
    0x00002ae6 cmp r0, 1                                 |     
    0x00002ae8 ldr.w r5, [sl, 0x164]                     |     r5 = *((sl + 0x164));
                                                         |     if (r0 < 1) {
    0x00002aec bls.w 0x2ea4                              |         goto label_144;
                                                         |     }
    0x00002af0 ldr.w ip, [pc, 0x6b8]                     |     ip = *(0x000031ac);
    0x00002af4 movs r3, 1                                |     r3 = 1;
    0x00002af6 ldr.w r6, [fp, 0x160]                     |     r6 = *(arg_160h);
    0x00002afa add ip, pc                                |     
    0x00002afc mov r2, r6                                |     r2 = r6;
    0x00002afe add.w r4, ip, 0x598                       |     r4 = ip + 0x598;
    0x00002b02 b 0x2b0c                                  |     
                                                         |     while (r1 != r4) {
    0x00002b04 adds r3, 1                                |         r3++;
    0x00002b06 cmp r0, r3                                |         
                                                         |         if (r0 == r3) {
    0x00002b08 beq.w 0x2ea4                              |             goto label_144;
                                                         |         }
    0x00002b0c ldr r1, [r2, 4]!                          |         r1 = *((r2 += 4));
    0x00002b10 cmp r1, r4                                |         
    0x00002b12 bne 0x2b04                                |         
                                                         |     }
    0x00002b14 add.w r2, r3, 0x40000000                  |     r2 = r3 + 0x40000000;
    0x00002b18 subs r2, 1                                |     r2--;
    0x00002b1a ldr.w r1, [r6, r2, lsl 2]                 |     offset_2 = r2 << 2;
                                                         |     r1 = *((r6 + offset_2));
    0x00002b1e lsls r2, r2, 2                            |     r2 <<= 2;
    0x00002b20 str.w r1, [ip, 0x5a8]                     |     __asm ("str.w r1, [ip, 0x5a8]");
    0x00002b24 cmp r5, 0                                 |     
                                                         |     if (r5 != 0) {
    0x00002b26 bne.w 0x3b5e                              |         goto label_145;
                                                         |     }
    0x00002b2a adds r3, 1                                |     r3++;
    0x00002b2c ldr.w r4, [pc, 0x680]                     |     r4 = *(0x000031b0);
    0x00002b30 cmp r3, r0                                |     
    0x00002b32 ldr.w r3, [pc, 0x680]                     |     r3 = *(0x000031b4);
    0x00002b36 itet lo                                   |     
                                                         |     if (r3 >= r0) {
    0x00002b38 addlo r2, r2, r6                          |         r2 += r6;
                                                         |     }
                                                         |     if (r3 < r0) {
    0x00002b3a movhs r0, r5                              |         r0 = r5;
                                                         |     }
                                                         |     if (r3 >= r0) {
    0x00002b3c ldrlo r0, [r2, 8]                         |         r0 = *((r2 + 8));
                                                         |     }
    0x00002b3e add r4, pc                                |     r4 += pc;
    0x00002b40 add r3, pc                                |     r3 += pc;
    0x00002b42 ldr.w r3, [r3, 0x194]                     |     r3 = *((r3 + 0x194));
    0x00002b46 str.w r0, [r4, 0x5a4]                     |     __asm ("str.w r0, [r4, 0x5a4]");
    0x00002b4a ldr r2, [r1, 0xc]                         |     r2 = *((r1 + 0xc));
                                                         |     if (r3 != 0) {
    0x00002b4c cbz r3, 0x2b64                            |         
    0x00002b4e subs r6, r3, r2                           |         r6 = r3 - r2;
    0x00002b50 cmp r3, r0                                |         
    0x00002b52 clz r6, r6                                |         r6 &= r6;
    0x00002b56 lsr.w r6, r6, 5                           |         r6 >>= 5;
    0x00002b5a it eq                                     |         
                                                         |         if (r3 != r0) {
    0x00002b5c moveq r6, 0                               |             r6 = 0;
                                                         |         }
    0x00002b5e cmp r6, 0                                 |         
                                                         |         if (r6 != 0) {
    0x00002b60 bne.w 0x3888                              |             goto label_146;
                                                         |         }
                                                         |     }
                                                         | label_32:
    0x00002b64 cmp r2, r0                                |     
                                                         |     if (r2 != r0) {
    0x00002b66 bne.w 0x444e                              |         goto label_147;
                                                         |     }
    0x00002b6a ldr.w r3, [pc, 0x64c]                     |     r3 = *(0x000031b8);
    0x00002b6e add r3, pc                                |     r3 += pc;
    0x00002b70 add.w r0, r3, 0x598                       |     r0 = r3 + 0x598;
    0x00002b74 str r0, [r1, 0xc]                         |     *((r1 + 0xc)) = r0;
    0x00002b76 ldr.w r3, [r3, 0x5a4]                     |     r3 = *((r3 + 0x5a4));
    0x00002b7a cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x00002b7c beq.w 0x35a4                              |         goto label_148;
                                                         |     }
    0x00002b80 ldr r2, [r3, 0x10]                        |     r2 = *((r3 + 0x10));
    0x00002b82 cmp r2, r1                                |     
    0x00002b84 ittt eq                                   |     
                                                         |     if (r2 != r1) {
    0x00002b86 streq r0, [r3, 0x10]                      |         *((r3 + 0x10)) = r0;
                                                         |     }
                                                         |     if (r2 != r1) {
    0x00002b88 moveq r3, 1                               |         r3 = 1;
                                                         |     }
                                                         |     if (r2 != r1) {
    0x00002b8a streq r3, [r7, 0x34]                      |         *((r7 + 0x34)) = r3;
                                                         |     }
                                                         |     if (r2 != r1) {
    0x00002b8c bne.w 0x4402                              |         goto label_149;
                                                         |     }
                                                         | label_7:
    0x00002b90 clz r3, r5                                |     r3 &= r5;
    0x00002b94 sub.w r5, r5, 3                           |     r5 -= 3;
    0x00002b98 ldr.w r1, [pc, 0x620]                     |     r1 = *(0x000031bc);
    0x00002b9c clz r5, r5                                |     r5 &= r5;
    0x00002ba0 ldr.w r0, [pc, 0x61c]                     |     r0 = *(0x000031c0);
    0x00002ba4 lsrs r3, r3, 5                            |     r3 >>= 5;
    0x00002ba6 lsrs r5, r5, 5                            |     r5 >>= 5;
    0x00002ba8 add.w r6, r7, 0x64                        |     r6 = r7 + 0x64;
    0x00002bac add r1, pc                                |     r1 += pc;
    0x00002bae strd r3, r5, [r6]                         |     __asm ("strd r3, r5, [r6]");
    0x00002bb2 add r0, pc                                |     r0 += pc;
    0x00002bb4 mov r2, r6                                |     r2 = r6;
    0x00002bb6 bl 0x12578                                |     fcn_00012578 (r0, r1);
    0x00002bba ldr.w r3, [pc, 0x608]                     |     r3 = *(0x000031c4);
    0x00002bbe add r3, pc                                |     r3 += pc;
    0x00002bc0 ldrb r3, [r3, 4]                          |     r3 = *((r3 + 4));
    0x00002bc2 str r3, [r7, 0x30]                        |     *((r7 + 0x30)) = r3;
    0x00002bc4 ldr r3, [r7, 0x38]                        |     r3 = *((r7 + 0x38));
    0x00002bc6 cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x00002bc8 beq.w 0x3688                              |         goto label_150;
                                                         |     }
                                                         | label_25:
    0x00002bcc ldr r3, [r7, 0x40]                        |     r3 = *((r7 + 0x40));
                                                         |     if (r3 != 0) {
    0x00002bce cbz r3, 0x2bf6                            |         
    0x00002bd0 ldr.w r3, [pc, 0x5f4]                     |         r3 = *(0x000031c8);
    0x00002bd4 movs r5, 0                                |         r5 = 0;
    0x00002bd6 ldr r1, [r7, 0x24]                        |         r1 = *((r7 + 0x24));
    0x00002bd8 ldr.w r2, [pc, 0x5f0]                     |         r2 = *(0x31cc);
    0x00002bdc add r3, pc                                |         r3 += pc;
    0x00002bde ldr.w r4, [pc, 0x5f0]                     |         r4 = *(0x000031d0);
    0x00002be2 ldr r0, [r3]                              |         r0 = *(r3);
    0x00002be4 ldr r2, [r1, r2]                          |         r2 = *((r1 + r2));
    0x00002be6 add r4, pc                                |         r4 += pc;
    0x00002be8 ldr r1, [r0]                              |         r1 = *(r0);
    0x00002bea str r5, [r3]                              |         *(r3) = r5;
    0x00002bec ldr r3, [r0, 4]                           |         r3 = *((r0 + 4));
    0x00002bee bic r1, r1, 0xff                          |         r1 = BIT_MASK (r1, 0xff);
    0x00002bf2 str r1, [r2]                              |         *(r2) = r1;
    0x00002bf4 str r3, [r4, 0x44]                        |         *((r4 + 0x44)) = r3;
                                                         |     }
    0x00002bf6 ldr.w r3, [sl, 0x164]                     |     r3 = *((sl + 0x164));
    0x00002bfa cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x00002bfc bne.w 0x3a96                              |         goto label_151;
                                                         |     }
                                                         | label_45:
    0x00002c00 ldr.w r3, [fp, 0x140]                     |     r3 = *(arg_140h);
    0x00002c04 cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x00002c06 beq.w 0x2f14                              |         goto label_152;
                                                         |     }
    0x00002c0a ldr.w r2, [pc, 0x5c8]                     |     r2 = *(0x000031d4);
    0x00002c0e add r2, pc                                |     r2 += pc;
    0x00002c10 ldr.w r1, [r2, 0x17c]                     |     r1 = *((r2 + 0x17c));
    0x00002c14 cmp r1, 0                                 |     
                                                         |     if (r1 != 0) {
    0x00002c16 bne.w 0x2f14                              |         goto label_152;
                                                         |     }
    0x00002c1a ldr r2, [r2, 0x38]                        |     r2 = *((r2 + 0x38));
    0x00002c1c cmp r2, 0                                 |     
                                                         |     if (r2 != 0) {
    0x00002c1e bne.w 0x2f14                              |         goto label_152;
                                                         |     }
    0x00002d46 ldr r1, [r3, -0xc]                        |     r1 = *((r3 - 0xc));
    0x00002d4a cmp r1, 0                                 |     
                                                         |     if (r1 == 0) {
    0x00002d4c beq.w 0x2040                              |         goto label_3;
                                                         |     }
    0x00002d50 str.w r1, [fp, 0x238]                     |     __asm ("str.w r1, [arg_238h]");
    0x00002d54 ldr r1, [r3, -0x4]                        |     r1 = *((r3 - 0x4));
    0x00002d58 str.w r1, [fp, 0x23c]                     |     __asm ("str.w r1, [arg_23ch]");
    0x00002d5c ldr r0, [r3, -0x18]                       |     r0 = *((r3 - 0x18));
    0x00002d60 cmp r1, 0                                 |     
                                                         |     if (r1 != 0) {
    0x00002d62 bne.w 0x3406                              |         goto label_153;
                                                         |     }
                                                         | label_18:
    0x00002d66 str.w r1, [fp, 0x240]                     |     __asm ("str.w r1, [arg_240h]");
    0x00002d6a adds r3, 0x20                             |     r3 += 0x20;
    0x00002d6c ldr r1, [r3, -0x30]                       |     r1 = *((r3 - 0x30));
    0x00002d70 cmp r8, r3                                |     
    0x00002d72 strd r0, r1, [fp, 0x230]                  |     __asm ("strd r0, r1, [fp, 0x230]");
    0x00002d76 mov.w r1, 1                               |     r1 = 1;
    0x00002d7a ldr r0, [r7, 0x18]                        |     r0 = *((r7 + 0x18));
    0x00002d7c str.w r1, [fp, 0x248]                     |     __asm ("str.w r1, [arg_248h]");
    0x00002d80 str.w r1, [r0, 0x880]                     |     __asm ("str.w r1, [r0, 0x880]");
                                                         |     if (r8 != r3) {
    0x00002d84 bne.w 0x2004                              |         goto label_4;
                                                         |     }
    0x00002d88 b.w 0x2046                                |     goto label_5;
    0x00002d8c ldr r1, [r3, -0x18]                       |     r1 = *((r3 - 0x18));
    0x00002d90 adds r3, 0x20                             |     r3 += 0x20;
    0x00002d92 cmp r8, r3                                |     
    0x00002d94 sub.w r1, r6, r1                          |     r1 = r6 - r1;
    0x00002d98 str.w r1, [fp]                            |     __asm ("str.w r1, [fp]");
                                                         |     if (r8 != r3) {
    0x00002d9c bne.w 0x2004                              |         goto label_4;
                                                         |     }
    0x00002da0 b.w 0x2046                                |     goto label_5;
    0x00002da4 ldr r1, [r3, -0x18]                       |     r1 = *((r3 - 0x18));
    0x00002da8 adds r3, 0x20                             |     r3 += 0x20;
    0x00002daa ldr.w r0, [fp]                            |     r0 = *(fp);
    0x00002dae cmp r8, r3                                |     
    0x00002db0 add r1, r0                                |     r1 += r0;
    0x00002db2 str.w r1, [fp, 8]                         |     __asm ("str.w r1, [arg_8h]");
                                                         |     if (r8 != r3) {
    0x00002db6 bne.w 0x2004                              |         goto label_4;
                                                         |     }
    0x00002dba b.w 0x2046                                |     goto label_5;
    0x00002dbe ldr r0, [r3, -0x18]                       |     r0 = *((r3 - 0x18));
    0x00002dc2 ldr r4, [r7, 0x34]                        |     r4 = *((r7 + 0x34));
    0x00002dc4 ldr.w r1, [fp]                            |     r1 = *(fp);
    0x00002dc8 and.w lr, r0, r4                          |     lr = r0 & r4;
    0x00002dcc ldr.w r4, [fp, 0x1b4]                     |     r4 = *(arg_1b4h);
    0x00002dd0 add lr, r1                                |     lr += r1;
    0x00002dd2 cmp r4, lr                                |     
    0x00002dd4 it hi                                     |     
                                                         |     if (r4 <= lr) {
    0x00002dd6 strhi lr, [fp, 0x1b4]                     |         
                                                         |     }
    0x00002dda ldr r4, [r3, -0xc]                        |     r4 = *((r3 - 0xc));
    0x00002dde add r0, r4                                |     r0 += r4;
    0x00002de0 add r0, r1                                |     r0 += r1;
    0x00002de2 ldr.w r1, [fp, 0x1b8]                     |     r1 = *(arg_1b8h);
    0x00002de6 cmp r1, r0                                |     
    0x00002de8 it lo                                     |     
                                                         |     if (r1 >= r0) {
    0x00002dea strlo r0, [fp, 0x1b8]                     |         *(arg_1b8h) = r0;
                                                         |     }
    0x00002dee ldr r1, [r3, -0x8]                        |     r1 = *((r3 - 0x8));
    0x00002df2 lsls r1, r1, 0x1f                         |     r1 <<= 0x1f;
                                                         |     if (r1 >= r1) {
    0x00002df4 bpl.w 0x2040                              |         goto label_3;
                                                         |     }
    0x00002df8 ldr.w r1, [fp, 0x1bc]                     |     r1 = *(arg_1bch);
    0x00002dfc adds r3, 0x20                             |     r3 += 0x20;
    0x00002dfe cmp r1, r0                                |     
    0x00002e00 it lo                                     |     
                                                         |     if (r1 >= r0) {
    0x00002e02 strlo r0, [fp, 0x1bc]                     |         *(arg_1bch) = r0;
                                                         |     }
    0x00002e06 cmp r8, r3                                |     
                                                         |     if (r8 != r3) {
    0x00002e08 bne.w 0x2004                              |         goto label_4;
                                                         |     }
    0x00002e0c b.w 0x2046                                |     goto label_5;
    0x00002e10 ldr lr, [r3, -0x18]                       |     
    0x00002e14 ldr.w ip, [fp]                            |     ip = *(fp);
    0x00002e18 ldr r1, [r7, 0x20]                        |     r1 = *((r7 + 0x20));
    0x00002e1a ldr.w r0, [sb, 0x5a0]                     |     r0 = *((sb + 0x5a0));
    0x00002e1e ldr r4, [r7, 0x28]                        |     r4 = *((r7 + 0x28));
    0x00002e20 str.w r1, [sb, 0x5b4]                     |     __asm ("str.w r1, [sb, 0x5b4]");
    0x00002e24 add.w r1, lr, ip                          |     r1 = lr + ip;
    0x00002e28 str r1, [r4, 0x14]                        |     *((r4 + 0x14)) = r1;
    0x00002e2a cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00002e2c beq.w 0x364c                              |         goto label_154;
                                                         |     }
                                                         | label_24:
    0x00002e30 adds r3, 0x20                             |     r3 += 0x20;
    0x00002e32 movs r1, 1                                |     r1 = 1;
    0x00002e34 cmp r8, r3                                |     
    0x00002e36 str r1, [r7, 0x40]                        |     *((r7 + 0x40)) = r1;
                                                         |     if (r8 != r3) {
    0x00002e38 bne.w 0x2004                              |         goto label_4;
                                                         |     }
    0x00002e3c b.w 0x2046                                |     goto label_5;
                                                         | label_85:
    0x00002e40 ldr r1, [r3, -0x8]                        |     r1 = *((r3 - 0x8));
    0x00002e44 adds r3, 0x20                             |     r3 += 0x20;
    0x00002e46 ldr r0, [r7, 0x2c]                        |     r0 = *((r7 + 0x2c));
    0x00002e48 cmp r8, r3                                |     
    0x00002e4a str.w r1, [r0, 0x878]                     |     __asm ("str.w r1, [r0, 0x878]");
                                                         |     if (r8 != r3) {
    0x00002e4e bne.w 0x2004                              |         goto label_4;
                                                         |     }
    0x00002e52 b.w 0x2046                                |     goto label_5;
                                                         | label_107:
    0x00002e56 ldr r1, [r5]                              |     r1 = *(r5);
    0x00002e58 ldr r6, [r2, 8]                           |     r6 = *((r2 + 8));
                                                         |     if (r1 == 0) {
    0x00002e5a cbnz r1, 0x2e5e                           |         
    0x00002e5c str r6, [r5]                              |         *(r5) = r6;
                                                         |     }
    0x00002e5e ldr r1, [r2, 0x14]                        |     r1 = *((r2 + 0x14));
    0x00002e60 add r6, r1                                |     r6 += r1;
    0x00002e62 ldr.w r1, [r5, 0x1b8]                     |     r1 = *((r5 + 0x1b8));
    0x00002e66 cmp r6, r1                                |     
    0x00002e68 it hs                                     |     
                                                         |     if (r6 < r1) {
    0x00002e6a strhs r6, [r5, 0x1b8]                     |         *((r5 + 0x1b8)) = r6;
                                                         |     }
    0x00002e6e ldr r1, [r2, 0x18]                        |     r1 = *((r2 + 0x18));
    0x00002e70 lsls r1, r1, 0x1f                         |     r1 <<= 0x1f;
                                                         |     if (r1 >= r1) {
    0x00002e72 bpl.w 0x2438                              |         goto label_6;
                                                         |     }
    0x00002e76 ldr.w r1, [r5, 0x1bc]                     |     r1 = *((r5 + 0x1bc));
    0x00002e7a cmp r6, r1                                |     
    0x00002e7c it hs                                     |     
                                                         |     if (r6 < r1) {
    0x00002e7e strhs r6, [r5, 0x1bc]                     |         *((r5 + 0x1bc)) = r6;
                                                         |     }
    0x00002e82 b.w 0x2438                                |     goto label_6;
                                                         | label_67:
    0x00002e86 ldr r3, [r5, 8]!                          |     r3 = *((r5 += 8));
    0x00002e8a subs r4, 2                                |     r4 -= 2;
    0x00002e8c ldr r2, [pc, 0x354]                       |     
    0x00002e8e str.w r3, [sl, 0x14c]                     |     __asm ("str.w r3, [sl, 0x14c]");
    0x00002e92 ldr r3, [r7, 0x30]                        |     r3 = *((r7 + 0x30));
    0x00002e94 add r2, pc                                |     r2 = 0x607c;
    0x00002e96 str.w r3, [sl, 0x150]                     |     __asm ("str.w r3, [sl, 0x150]");
    0x00002e9a ldr r3, [r2, 0x10]                        |     r3 = *(0x608c);
    0x00002e9c adds r3, 2                                |     r3 += 2;
    0x00002e9e str r3, [r2, 0x10]                        |     *((r2 + 0x10)) = r3;
    0x00002ea0 b.w 0x1a2e                                |     goto label_0;
                                                         | label_144:
    0x00002ea4 movs r3, 0                                |     r3 = 0;
    0x00002ea6 str r3, [r7, 0x34]                        |     *((r7 + 0x34)) = r3;
    0x00002ea8 b 0x2b90                                  |     goto label_7;
                                                         | label_105:
    0x00002eaa ldr r3, [pc, 0x33c]                       |     
    0x00002eac add r3, pc                                |     r3 = 0x609a;
    0x00002eae ldr.w r5, [r3, 0x194]                     |     r5 = *(0x622e);
    0x00002eb2 cmp r5, 0                                 |     
                                                         |     if (r5 == 0) {
    0x00002eb4 beq.w 0x35ac                              |         goto label_155;
                                                         |     }
    0x00002eb8 ldr r3, [pc, 0x330]                       |     
    0x00002eba add r3, pc                                |     r3 = 0x60aa;
    0x00002ebc addw r3, r3, 0x5a4                        |     __asm ("addw r3, r3, 0x5a4");
    0x00002ec0 str r3, [r7, 0x28]                        |     *((r7 + 0x28)) = r3;
    0x00002ec2 b 0x2728                                  |     goto label_8;
    0x00002ec4 ldr r3, [r5]                              |     r3 = *(r5);
    0x00002ec6 str r3, [r2, 4]                           |     *((r2 + 4)) = r3;
                                                         | label_83:
    0x00002ec8 ldr r3, [r2, 8]!                          |     r3 = *((r2 += 8));
    0x00002ecc cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x00002ece bne.w 0x1efa                              |         goto label_9;
                                                         |     }
                                                         | label_11:
    0x00002ed2 ldr r3, [r7, 0x20]                        |     r3 = *((r7 + 0x20));
                                                         |     if (r3 != 0) {
    0x00002ed4 cbz r3, 0x2ee0                            |         
    0x00002ed6 ldr r3, [pc, 0x318]                       |         
    0x00002ed8 ldr r2, [r7, 0x20]                        |         r2 = *((r7 + 0x20));
    0x00002eda add r3, pc                                |         
    0x00002edc ldr r3, [r3]                              |         r3 = *(0x60d0);
    0x00002ede str r2, [r3]                              |         *(r3) = r2;
                                                         |     }
    0x00002ee0 movs r3, 1                                |     r3 = 1;
    0x00002ee2 str r3, [r7, 0x30]                        |     *((r7 + 0x30)) = r3;
    0x00002ee4 b.w 0x1f88                                |     goto label_10;
    0x00002ee8 ldr r3, [r0]                              |     r3 = *(r0);
    0x00002eea str r3, [r2, 4]                           |     *((r2 + 4)) = r3;
    0x00002eec ldr r3, [r2, 8]!                          |     r3 = *((r2 += 8));
    0x00002ef0 cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x00002ef2 bne.w 0x1efa                              |         goto label_9;
                                                         |     }
    0x00002ef6 b 0x2ed2                                  |     goto label_11;
    0x00002ef8 str r4, [r2, 4]                           |     *((r2 + 4)) = r4;
    0x00002efa ldr r3, [r2, 8]!                          |     r3 = *((r2 += 8));
    0x00002efe cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x00002f00 bne.w 0x1efa                              |         goto label_9;
                                                         |     }
    0x00002f04 b 0x2ed2                                  |     goto label_11;
    0x00002f06 str r6, [r2, 4]                           |     *((r2 + 4)) = r6;
    0x00002f08 ldr r3, [r2, 8]!                          |     r3 = *((r2 += 8));
    0x00002f0c cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x00002f0e bne.w 0x1efa                              |         goto label_9;
                                                         |     }
    0x00002f12 b 0x2ed2                                  |     goto label_11;
                                                         | label_152:
    0x00002f14 ldr r3, [pc, 0x2dc]                       |     
    0x00002f16 add r3, pc                                |     r3 = 0x610e;
    0x00002f18 ldr r4, [r3]                              |     r4 = *(0x610e);
    0x00002f1a ldr r2, [pc, 0x2dc]                       |     
    0x00002f1c add.w r1, fp, 0x160                       |     r1 += arg_160h;
    0x00002f20 ldr r3, [pc, 0x2d8]                       |     
    0x00002f22 add r2, pc                                |     
    0x00002f24 str r1, [r2, 8]                           |     *((r2 + 8)) = r1;
    0x00002f26 add r3, pc                                |     r3 = 0x6126;
    0x00002f28 ldr.w r2, [r2, 0x590]                     |     r2 = *(0x66b0);
    0x00002f2c adds r3, 0x1c                             |     r3 += 0x1c;
    0x00002f2e ldm r1, {r0, r1}                          |     r0 = *(r1);
                                                         |     r1 = *((r1 + 4));
    0x00002f30 str.w r2, [r3, 0x170]                     |     __asm ("str.w r2, [r3, 0x170]");
    0x00002f34 stm.w r3, {r0, r1}                        |     *(r3) = r0;
                                                         |     *((r3 + 4)) = r1;
    0x00002f38 lsls r1, r4, 0x16                         |     r1 = r4 << 0x16;
                                                         |     if (r1 < r4) {
    0x00002f3a bmi.w 0x34a4                              |         goto label_156;
                                                         |     }
    0x00002f3e ldr r3, [pc, 0x2c0]                       |     
    0x00002f40 ldr.w r1, [fp, 0x164]                     |     r1 = *(arg_164h);
    0x00002f44 add r3, pc                                |     r3 = 0x614a;
    0x00002f46 ldr.w r6, [r3, 0x17c]                     |     r6 = *(0x62c6);
    0x00002f4a subs r4, r1, 1                            |     r4 = r1 - 1;
    0x00002f4c ldr r2, [r3, 0x30]                        |     r2 = *(0x617a);
    0x00002f4e subs r6, 0                                |     
    0x00002f50 it ne                                     |     
                                                         |     if (r6 == 0) {
    0x00002f52 movne r6, 1                               |         r6 = 1;
                                                         |     }
    0x00002f54 orrs r2, r6                               |     r2 |= r6;
    0x00002f56 str r2, [r3, 0x30]                        |     *((r3 + 0x30)) = r2;
    0x00002f58 cmp r1, 0                                 |     
                                                         |     if (r1 == 0) {
    0x00002f5a beq 0x2fd0                                |         void (*0x2fd0)() ();
                                                         |     }
                                                         | label_68:
    0x00003098 ldr r2, [pc, 0x194]                       |     
    0x0000309a subs r4, 2                                |     r4 -= 2;
    0x0000309c ldr r3, [pc, 0x194]                       |     
    0x0000309e ldr r1, [r5, 8]!                          |     r1 = *((r5 += 8));
    0x000030a2 add r2, pc                                |     r2 = 0x62d6;
    0x000030a4 add r3, pc                                |     r3 = 0x62dc;
    0x000030a6 str.w r1, [r3, 0x164]                     |     __asm ("str.w r1, [r3, 0x164]");
    0x000030aa ldr r3, [r2, 0x10]                        |     r3 = *(0x62e6);
    0x000030ac adds r3, 2                                |     r3 += 2;
    0x000030ae str r3, [r2, 0x10]                        |     *((r2 + 0x10)) = r3;
    0x000030b0 b.w 0x1a2e                                |     goto label_0;
                                                         | label_87:
    0x0000323c ldr.w r1, [r3, 0x59c]                     |     r1 = *((r3 + 0x59c));
    0x00003240 cmp r1, 0                                 |     
                                                         |     if (r1 == 0) {
    0x00003242 beq.w 0x3bda                              |         goto label_157;
                                                         |     }
    0x00003246 ldr.w r2, [pc, 0xc5c]                     |     r2 = *(0x00003ea4);
    0x0000324a add r2, pc                                |     r2 += pc;
    0x0000324c str r1, [r2, 0x14]!                       |     *((r2 += 0x14)) = r1;
    0x00003250 str.w r2, [r3, 0x5b4]                     |     __asm ("str.w r2, [r3, 0x5b4]");
    0x00003254 b.w 0x20a4                                |     goto label_12;
                                                         | label_131:
    0x00003258 add.w r0, r0, 0x598                       |     r0 += 0x598;
    0x0000325c bl 0xd3e0                                 |     fcn_0000d3e0 (r0);
    0x00003260 b.w 0x29a4                                |     goto label_13;
                                                         | label_136:
    0x00003264 ldr.w r3, [sl, 0x44]                      |     r3 = *((sl + 0x44));
    0x00003268 ldr.w r4, [sl, 0x48]                      |     r4 = *((sl + 0x48));
    0x0000326c str r3, [r7, 0x20]                        |     *((r7 + 0x20)) = r3;
    0x0000326e cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x00003270 bne.w 0x3618                              |         goto label_158;
                                                         |     }
                                                         |     if (r4 == 0) {
    0x00003274 cbz r4, 0x328c                            |         goto label_159;
                                                         |     }
                                                         | label_23:
    0x00003276 movs r5, 0                                |     r5 = 0;
                                                         |     do {
    0x00003278 mov r0, sl                                |         r0 = sl;
    0x0000327a bl 0x1064                                 |         r0 = fcn_00001064 (r0);
                                                         |         if (r0 == 0) {
    0x0000327e cbz r0, 0x328a                            |             goto label_160;
                                                         |         }
    0x00003280 ldr.w r3, [sl, 0x48]                      |         r3 = *((sl + 0x48));
    0x00003284 adds r5, 1                                |         r5++;
    0x00003286 cmp r3, 0                                 |         
    0x00003288 bne 0x3278                                |         
                                                         |     } while (r3 != 0);
                                                         | label_160:
    0x0000328a str r5, [r7, 0x20]                        |     *((r7 + 0x20)) = r5;
                                                         | label_159:
    0x0000328c str.w r4, [sl, 0x48]                      |     __asm ("str.w r4, [sl, 0x48]");
    0x00003290 movs r4, 0                                |     r4 = 0;
    0x00003292 ldr r0, [r7, 0x20]                        |     r0 = *((r7 + 0x20));
    0x00003294 str.w r4, [sl, 0x44]                      |     __asm ("str.w r4, [sl, 0x44]");
    0x00003298 bl 0xec0                                  |     fcn_00000ec0 ();
    0x0000329c ldr.w r3, [pc, 0xc08]                     |     r3 = *(0x00003ea8);
    0x000032a0 ldr.w r2, [pc, 0xc08]                     |     r2 = *(0x3eac);
    0x000032a4 ldr r1, [r7, 0x24]                        |     r1 = *((r7 + 0x24));
    0x000032a6 add r3, pc                                |     r3 += pc;
    0x000032a8 str r0, [r7, 0x1c]                        |     *((r7 + 0x1c)) = r0;
    0x000032aa ldr r0, [r3]                              |     r0 = *(r3);
    0x000032ac ldr r6, [r1, r2]                          |     r6 = *((r1 + r2));
    0x000032ae ldr.w r5, [pc, 0xc00]                     |     r5 = *(0x00003eb0);
    0x000032b2 ldr r2, [r0]                              |     r2 = *(r0);
    0x000032b4 ldr.w r1, [sl, 0x48]                      |     r1 = *((sl + 0x48));
    0x000032b8 str r4, [r3]                              |     *(r3) = r4;
    0x000032ba add r5, pc                                |     r5 += pc;
    0x000032bc ldr r3, [r0, 4]                           |     r3 = *((r0 + 4));
    0x000032be bic r2, r2, 0xff                          |     r2 = BIT_MASK (r2, 0xff);
    0x000032c2 str r2, [r6]                              |     *(r6) = r2;
    0x000032c4 str r3, [r5, 0x44]                        |     *((r5 + 0x44)) = r3;
    0x000032c6 cmp r1, 0                                 |     
                                                         |     if (r1 == 0) {
    0x000032c8 beq.w 0x33d2                              |         goto label_161;
                                                         |     }
    0x000032cc ldr.w r3, [pc, 0xbe4]                     |     
    0x000032d0 ldr.w r2, [pc, 0xbe4]                     |     r2 = *(0x00003eb8);
    0x000032d4 str.w fp, [r7, 0x18]                      |     __asm ("str.w fp, [r7, 0x18]");
    0x000032d8 add r3, pc                                |     
    0x000032da ldr.w fp, [r7, 0x44]                      |     fp = *((r7 + 0x44));
    0x000032de add.w r3, r3, 0x380                       |     
    0x000032e2 add r2, pc                                |     r2 += pc;
    0x000032e4 str r3, [r7, 0x14]                        |     *((r7 + 0x14)) = r3;
    0x000032e6 ldr.w r3, [pc, 0xbd4]                     |     r3 = *(0x00003ebc);
    0x000032ea str r2, [r7, 0x34]                        |     *((r7 + 0x34)) = r2;
    0x000032ec ldr.w r2, [pc, 0xbd0]                     |     r2 = *(0x00003ec0);
    0x000032f0 add r3, pc                                |     
    0x000032f2 str r3, [r7, 0x10]                        |     *((r7 + 0x10)) = r3;
    0x000032f4 add.w r3, r3, 0x598                       |     r3 = 0xad9c;
    0x000032f8 add r2, pc                                |     r2 += pc;
    0x000032fa str r3, [r7, 0xc]                         |     *((r7 + 0xc)) = r3;
    0x000032fc str r2, [r7, 0x30]                        |     *((r7 + 0x30)) = r2;
    0x000032fe b 0x3364                                  |     
                                                         |     while (r6 == 0) {
    0x00003300 ldr.w r3, [pc, 0xbc0]                     |         r3 = *(0x00003ec4);
    0x00003304 add.w r6, r7, 0x64                        |         r6 = r7 + 0x64;
    0x00003308 ldr.w r1, [pc, 0xbbc]                     |         r1 = *(0x00003ec8);
    0x0000330c mov r0, sb                                |         r0 = sb;
    0x0000330e ldr.w r2, [fp, 4]                         |         r2 = *(arg_4h);
    0x00003312 add r3, pc                                |         r3 += pc;
    0x00003314 add r1, pc                                |         r1 += pc;
    0x00003316 strd r3, r2, [r6]                         |         __asm ("strd r3, r2, [r6]");
    0x0000331a mov r3, r1                                |         r3 = r1;
    0x0000331c str r1, [r7, 0x3c]                        |         *((r7 + 0x3c)) = r1;
    0x0000331e mov r2, r8                                |         r2 = r8;
    0x00003320 mov r1, r4                                |         r1 = r4;
    0x00003322 str r6, [sp]                              |         *(sp) = r6;
    0x00003324 blx 0xa04                                 |         fcn_00000a04 ();
    0x00003328 ldr r3, [r4]                              |         r3 = *(r4);
    0x0000332a cmp r3, 0                                 |         
                                                         |         if (r3 == 0) {
    0x0000332c beq.w 0x3524                              |             goto label_162;
                                                         |         }
    0x00003330 ldr r1, [r7, 0x40]                        |         r1 = *((r7 + 0x40));
    0x00003332 ldr.w r0, [fp, 4]                         |         r0 = *(arg_4h);
    0x00003336 bl 0xfd4                                  |         fcn_00000fd4 (r0, r1);
    0x0000333a ldr r6, [r4]                              |         r6 = *(r4);
    0x0000333c mov r1, r5                                |         r1 = r5;
    0x0000333e ldrb.w r4, [r8]                           |         r4 = *(r8);
    0x00003342 ldr.w r0, [pc, 0xb88]                     |         
    0x00003346 mov r2, r6                                |         r2 = r6;
    0x00003348 add r0, pc                                |         r0 = 0x721a;
    0x0000334a bl 0xc284                                 |         fcn_0000c284 ();
                                                         |         if (r4 != 0) {
    0x0000334e cbz r4, 0x335c                            |             
    0x00003350 ldr.w r3, [pc, 0xb7c]                     |             r3 = *(0x00003ed0);
    0x00003354 mov r0, r6                                |             r0 = r6;
    0x00003356 add r3, pc                                |             r3 += pc;
    0x00003358 ldr r3, [r3]                              |             r3 = *(r3);
    0x0000335a blx r3                                    |             uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
                                                         |         }
                                                         | label_14:
    0x0000335c ldr.w r3, [sl, 0x48]                      |         r3 = *((sl + 0x48));
    0x00003360 cmp r3, 0                                 |         
                                                         |         if (r3 == 0) {
    0x00003362 beq 0x33ce                                |             goto label_163;
                                                         |         }
                                                         | label_15:
    0x00003364 mov r0, sl                                |         r0 = sl;
    0x00003366 bl 0x1064                                 |         r0 = fcn_00001064 (r0);
    0x0000336a mov r5, r0                                |         r5 = r0;
                                                         |         if (r0 == 0) {
    0x0000336c cbz r0, 0x33ce                            |             goto label_163;
                                                         |         }
    0x0000336e add.w r4, r7, 0x50                        |         r4 = r7 + 0x50;
    0x00003372 movs r3, 0                                |         r3 = 0;
    0x00003374 str.w r3, [fp, 4]                         |         __asm ("str.w r3, [arg_4h]");
    0x00003378 add.w r8, r7, 0x4b                        |         r8 = r7 + 0x4b;
    0x0000337c str r3, [r4]                              |         *(r4) = r3;
    0x0000337e add.w sb, r7, 0x4c                        |         sb = r7 + 0x4c;
    0x00003382 ldr r3, [r7, 0x34]                        |         r3 = *((r7 + 0x34));
    0x00003384 mov r2, r8                                |         r2 = r8;
    0x00003386 str.w r0, [fp]                            |         __asm ("str.w r0, [fp]");
    0x0000338a mov r1, r4                                |         r1 = r4;
    0x0000338c mov r0, sb                                |         r0 = sb;
    0x0000338e ldr.w r3, [r3, 0x880]                     |         r3 = *((r3 + 0x880));
    0x00003392 str r3, [r7, 0x40]                        |         *((r7 + 0x40)) = r3;
    0x00003394 str.w fp, [sp]                            |         __asm ("str.w fp, [sp]");
    0x00003398 ldr r3, [r7, 0x30]                        |         r3 = *((r7 + 0x30));
    0x0000339a blx 0xa04                                 |         fcn_00000a04 ();
    0x0000339e ldr r6, [r4]                              |         r6 = *(r4);
    0x000033a0 cmp r6, 0                                 |         
    0x000033a2 beq 0x3300                                |         
                                                         |     }
    0x000033a4 ldrb.w r4, [r8]                           |     r4 = *(r8);
    0x000033a8 mov r1, r5                                |     r1 = r5;
    0x000033aa ldr.w r0, [pc, 0xb28]                     |     
    0x000033ae mov r2, r6                                |     r2 = r6;
    0x000033b0 add r0, pc                                |     r0 = 0x728a;
    0x000033b2 bl 0xc284                                 |     fcn_0000c284 ();
    0x000033b6 cmp r4, 0                                 |     
                                                         |     if (r4 == 0) {
    0x000033b8 beq 0x335c                                |         goto label_14;
                                                         |     }
    0x000033ba ldr.w r3, [pc, 0xb1c]                     |     r3 = *(0x00003ed8);
    0x000033be mov r0, r6                                |     r0 = r6;
    0x000033c0 add r3, pc                                |     r3 += pc;
    0x000033c2 ldr r3, [r3]                              |     r3 = *(r3);
    0x000033c4 blx r3                                    |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x000033c6 ldr.w r3, [sl, 0x48]                      |     r3 = *((sl + 0x48));
    0x000033ca cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x000033cc bne 0x3364                                |         goto label_15;
                                                         |     }
                                                         | label_163:
    0x000033ce ldr.w fp, [r7, 0x18]                      |     fp = *((r7 + 0x18));
                                                         | label_161:
    0x000033d2 ldr.w r4, [pc, 0xb08]                     |     r4 = *(0x00003edc);
    0x000033d6 add r4, pc                                |     r4 += pc;
    0x000033d8 ldr.w r3, [r4, 0x1dc]                     |     r3 = *((r4 + 0x1dc));
    0x000033dc cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x000033de bne.w 0x36b6                              |         goto label_164;
                                                         |     }
    0x000033e2 ldr r2, [r7, 0x1c]                        |     r2 = *((r7 + 0x1c));
    0x000033e4 str r3, [r7, 0x40]                        |     *((r7 + 0x40)) = r3;
    0x000033e6 str r2, [r7, 0x38]                        |     *((r7 + 0x38)) = r2;
    0x000033e8 b.w 0x2a18                                |     goto label_16;
                                                         | label_127:
    0x000033ec ldr.w r3, [r4, 0x5b4]                     |     r3 = *((r4 + 0x5b4));
    0x000033f0 ldr r3, [r3]                              |     r3 = *(r3);
    0x000033f2 str.w r3, [r4, 0x59c]                     |     __asm ("str.w r3, [r4, 0x59c]");
    0x000033f6 b.w 0x28e4                                |     goto label_17;
                                                         | label_78:
    0x000033fa cmp r0, 6                                 |     
                                                         |     if (r0 == 6) {
    0x000033fc beq 0x34c8                                |         goto label_22;
                                                         |     }
    0x000033fe ldr r0, [r7, 0x1c]                        |     r0 = *((r7 + 0x1c));
    0x00003400 movs r1, 0                                |     r1 = 0;
    0x00003402 bl 0x12f50                                |     fcn_00012f50 (r0, r1);
                                                         | label_153:
    0x00003406 subs r1, 1                                |     r1--;
    0x00003408 ands r1, r0                               |     r1 &= r0;
    0x0000340a b 0x2d66                                  |     goto label_18;
                                                         | label_103:
    0x00003450 ldr.w r3, [pc, 0xa94]                     |     r3 = *(0x00003ee8);
    0x00003454 add r3, pc                                |     r3 += pc;
    0x00003456 str.w fp, [r3, 0x14]                      |     __asm ("str.w fp, [r3, 0x14]");
    0x0000345a b.w 0x229a                                |     goto label_19;
                                                         | label_156:
    0x000034a4 movs r4, 0                                |     r4 = 0;
    0x000034a6 ldr.w r0, [pc, 0xa54]                     |     
    0x000034aa mov r5, fp                                |     r5 = fp;
    0x000034ac add r0, pc                                |     r0 = 0x73ae;
    0x000034ae bl 0xc1f0                                 |     fcn_0000c1f0 ();
                                                         |     do {
    0x000034b2 mov r0, r5                                |         r0 = r5;
    0x000034b4 movs r1, 0                                |         r1 = 0;
    0x000034b6 bl 0xe51c                                 |         fcn_0000e51c (r0, r1, r2, r3);
    0x000034ba ldr r5, [r5, 0xc]                         |         r5 = *((r5 + 0xc));
    0x000034bc cmp r5, 0                                 |         
    0x000034be bne 0x34b2                                |         
                                                         |     } while (r5 != 0);
                                                         | label_22:
    0x000034c8 ldr r0, [r7, 0x1c]                        |     r0 = *((r7 + 0x1c));
    0x000034ca mov r1, sl                                |     r1 = sl;
    0x000034cc bl 0x12fa0                                |     fcn_00012fa0 (r0, r1);
                                                         | label_71:
    0x000034d0 ldr.w r2, [pc, 0xa2c]                     |     r2 = *(0x00003f00);
    0x000034d4 subs r4, 2                                |     r4 -= 2;
    0x000034d6 ldr r3, [r5, 8]!                          |     r3 = *((r5 += 8));
    0x000034da add r2, pc                                |     r2 += pc;
    0x000034dc str r3, [r7, 0x20]                        |     *((r7 + 0x20)) = r3;
    0x000034de ldr r3, [r2, 0x10]                        |     r3 = *((r2 + 0x10));
    0x000034e0 adds r3, 2                                |     r3 += 2;
    0x000034e2 str r3, [r2, 0x10]                        |     *((r2 + 0x10)) = r3;
    0x000034e4 b.w 0x1a2e                                |     goto label_0;
                                                         | label_162:
    0x00003524 ldr r2, [r6, 8]                           |     r2 = *((r6 + 8));
    0x00003526 cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x00003528 beq.w 0x44e4                              |         goto label_165;
                                                         |     }
    0x0000352c movs r0, 1                                |     r0 = 1;
    0x0000352e str r3, [r7, 8]                           |     *((r7 + 8)) = r3;
    0x00003530 blx r2                                    |     uint32_t (*r2)(uint32_t, uint32_t) (r0, r3);
    0x00003532 ldr r3, [r7, 8]                           |     r3 = *((r7 + 8));
    0x00003534 mov r2, r0                                |     r2 = r0;
    0x00003536 cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00003538 beq.w 0x3a7c                              |         goto label_166;
                                                         |     }
    0x0000353c cmp r0, 1                                 |     
                                                         |     if (r0 != 1) {
    0x0000353e bne.w 0x4056                              |         goto label_167;
                                                         |     }
    0x00003542 ldr.w r2, [pc, 0x9c0]                     |     r2 = *(0x00003f04);
    0x00003546 movs r0, 0x24                             |     r0 = 0x24;
    0x00003548 str r3, [r7, 8]                           |     *((r7 + 8)) = r3;
    0x0000354a add r2, pc                                |     r2 += pc;
    0x0000354c ldr r2, [r2]                              |     r2 = *(r2);
    0x0000354e blx r2                                    |     uint32_t (*r2)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x00003550 ldr r3, [r7, 8]                           |     r3 = *((r7 + 8));
    0x00003552 str r0, [r7, 0x40]                        |     *((r7 + 0x40)) = r0;
    0x00003554 cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00003556 beq.w 0x4366                              |         goto label_168;
                                                         |     }
    0x0000355a ldr r2, [r7, 0x40]                        |     r2 = *((r7 + 0x40));
    0x0000355c str.w fp, [r7, 8]                         |     __asm ("str.w fp, [r7, 8]");
    0x00003560 str.w sl, [r7, 4]                         |     __asm ("str.w sl, [r7, 4]");
    0x00003564 mov sl, r3                                |     sl = r3;
    0x00003566 subs r2, 4                                |     r2 -= 4;
    0x00003568 ldr r5, [r7, 0x14]                        |     r5 = *((r7 + 0x14));
    0x0000356a mov fp, r2                                |     
    0x0000356c b 0x358a                                  |     
                                                         |     while (r3 != 0) {
    0x0000356e movs r3, 0                                |         r3 = 0;
                                                         | label_20:
    0x00003570 mov r0, r5                                |         r0 = r5;
    0x00003572 str r3, [fp, 4]!                          |         *(arg_4h) = r3;
    0x00003576 movs r1, 0                                |         r1 = 0;
    0x00003578 add.w sl, sl, 1                           |         sl++;
    0x0000357c bl 0x15e20                                |         void (*0x15e20)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00003580 ldrb r3, [r0, 1]                          |         r3 = *((r0 + 1));
    0x00003582 adds r5, r0, 1                            |         r5 = r0 + 1;
    0x00003584 cmp r3, 0                                 |         
                                                         |         if (r3 == 0) {
    0x00003586 beq.w 0x3816                              |             goto label_169;
                                                         |         }
    0x0000358a str r5, [r6]                              |         *(r6) = r5;
    0x0000358c mov r2, r8                                |         r2 = r8;
    0x0000358e str r6, [sp]                              |         *(sp) = r6;
    0x00003590 mov r1, r4                                |         r1 = r4;
    0x00003592 ldr r3, [r7, 0x3c]                        |         r3 = *((r7 + 0x3c));
    0x00003594 mov r0, sb                                |         r0 = sb;
    0x00003596 blx 0xa04                                 |         fcn_00000a04 ();
    0x0000359a ldr r3, [r4]                              |         r3 = *(r4);
    0x0000359c cmp r3, 0                                 |         
    0x0000359e bne 0x356e                                |         
                                                         |     }
    0x000035a0 ldr r3, [r6, 8]                           |     r3 = *((r6 + 8));
    0x000035a2 b 0x3570                                  |     goto label_20;
                                                         | label_148:
    0x000035a4 movs r3, 1                                |     r3 = 1;
                                                         | label_34:
    0x000035a6 str r3, [r7, 0x34]                        |     *((r7 + 0x34)) = r3;
    0x000035a8 b.w 0x2b90                                |     goto label_7;
                                                         | label_155:
    0x000035ac str.w r5, [r3, 0x198]                     |     __asm ("str.w r5, [r3, 0x198]");
    0x000035b0 ldr.w r3, [pc, 0x954]                     |     r3 = *(0x00003f08);
    0x000035b4 add r3, pc                                |     r3 += pc;
    0x000035b6 addw r3, r3, 0x5a4                        |     __asm ("addw r3, r3, 0x5a4");
    0x000035ba str r3, [r7, 0x28]                        |     *((r7 + 0x28)) = r3;
                                                         | label_121:
    0x000035bc ldr.w r3, [pc, 0x94c]                     |     r3 = *(0x00003f0c);
    0x000035c0 movs r2, 0                                |     r2 = 0;
    0x000035c2 add r3, pc                                |     r3 += pc;
    0x000035c4 str.w r2, [r3, 0x19c]                     |     __asm ("str.w r2, [r3, 0x19c]");
                                                         | label_123:
    0x000035c8 movs r3, 0                                |     r3 = 0;
    0x000035ca b.w 0x2886                                |     goto label_21;
                                                         | label_69:
    0x000035ce ldr r2, [r5, 8]                           |     r2 = *((r5 + 8));
    0x000035d0 ldrb r3, [r2]                             |     r3 = *(r2);
                                                         |     if (r3 != 0) {
    0x000035d2 cbz r3, 0x35f0                            |         
    0x000035d4 ldr.w r3, [sl, 0x40]                      |         r3 = *((sl + 0x40));
    0x000035d8 cmp r3, 0x10                              |         
                                                         |         if (r3 == 0x10) {
    0x000035da beq.w 0x4382                              |             goto label_133;
                                                         |         }
    0x000035de str.w r2, [sl, r3, lsl 2]                 |         __asm ("str.w r2, [sl, r3, lsl 2]");
    0x000035e2 adds r3, 1                                |         r3++;
    0x000035e4 cmp r3, 1                                 |         
    0x000035e6 str.w r3, [sl, 0x40]                      |         __asm ("str.w r3, [sl, 0x40]");
    0x000035ea it eq                                     |         
                                                         |         if (r3 == 1) {
    0x000035ec streq r2, [sl, 0x48]                      |             *((sl + 0x48)) = r2;
                                                         |             goto label_170;
                                                         |         }
                                                         |     }
                                                         | label_170:
    0x000035f0 ldr.w r2, [pc, 0x91c]                     |     r2 = *(0x00003f10);
    0x000035f4 subs r4, 2                                |     r4 -= 2;
    0x000035f6 adds r5, 8                                |     r5 += 8;
    0x000035f8 add r2, pc                                |     r2 += pc;
    0x000035fa ldr r3, [r2, 0x10]                        |     r3 = *((r2 + 0x10));
    0x000035fc adds r3, 2                                |     r3 += 2;
    0x000035fe str r3, [r2, 0x10]                        |     *((r2 + 0x10)) = r3;
    0x00003600 b.w 0x1a2e                                |     goto label_0;
                                                         | label_135:
    0x00003604 cmp r2, 6                                 |     
    0x00003606 str.w r4, [sl, 0x48]                      |     __asm ("str.w r4, [sl, 0x48]");
                                                         |     if (r2 == 6) {
    0x0000360a beq.w 0x34c8                              |         goto label_22;
                                                         |     }
    0x0000360e ldr.w r3, [sl, 0x44]                      |     r3 = *((sl + 0x44));
    0x00003612 cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x00003614 beq.w 0x3276                              |         goto label_23;
                                                         |     }
                                                         | label_158:
    0x00003618 ldr.w r3, [pc, 0x8f8]                     |     
    0x0000361c mov.w r2, 0x116                           |     r2 = 0x116;
    0x00003620 ldr.w r1, [pc, 0x8f4]                     |     r1 = *(0x00003f18);
    0x00003624 ldr.w r0, [pc, 0x8f4]                     |     
    0x00003628 add r3, pc                                |     r3 = 0x7540;
    0x0000362a add r1, pc                                |     r1 += pc;
    0x0000362c add r0, pc                                |     r0 = 0x754c;
    0x0000362e bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_70:
    0x00003632 ldr.w r2, [pc, 0x8ec]                     |     r2 = *(0x00003f20);
    0x00003636 subs r4, 2                                |     r4 -= 2;
    0x00003638 ldr r3, [r5, 8]!                          |     r3 = *((r5 += 8));
    0x0000363c add r2, pc                                |     r2 += pc;
    0x0000363e str.w r3, [sl, 0x158]                     |     __asm ("str.w r3, [sl, 0x158]");
    0x00003642 ldr r3, [r2, 0x10]                        |     r3 = *((r2 + 0x10));
    0x00003644 adds r3, 2                                |     r3 += 2;
    0x00003646 str r3, [r2, 0x10]                        |     *((r2 + 0x10)) = r3;
    0x00003648 b.w 0x1a2e                                |     goto label_0;
                                                         | label_154:
    0x0000364c ldrb.w ip, [lr, ip]                       |     ip = *((lr + ip));
    0x00003650 cmp.w ip, 0                               |     
                                                         |     if (ip == 0) {
    0x00003654 beq.w 0x2e30                              |         goto label_24;
                                                         |     }
    0x00003658 ldr r4, [r7, 0x3c]                        |     r4 = *((r7 + 0x3c));
    0x0000365a mov lr, r3                                |     lr = r3;
    0x0000365c mov r3, ip                                |     r3 = ip;
    0x0000365e mov ip, lr                                |     
                                                         |     do {
    0x00003660 adds r1, 1                                |         r1++;
    0x00003662 cmp r3, 0x2f                              |         
    0x00003664 it eq                                     |         
                                                         |         if (r3 != 0x2f) {
    0x00003666 moveq r0, r1                              |             r0 = r1;
                                                         |         }
    0x00003668 ldrb r3, [r1]                             |         r3 = *(r1);
    0x0000366a cmp r3, 0                                 |         
    0x0000366c bne 0x3660                                |         
                                                         |     } while (r3 != 0);
    0x0000366e mov r3, ip                                |     r3 = ip;
    0x00003670 str r4, [r7, 0x3c]                        |     *((r7 + 0x3c)) = r4;
    0x00003672 cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00003674 beq.w 0x2e30                              |         goto label_24;
                                                         |     }
    0x00003678 ldr r1, [r7, 0x14]                        |     r1 = *((r7 + 0x14));
    0x0000367a str r0, [r1, 0x20]                        |     *((r1 + 0x20)) = r0;
    0x0000367c ldr r0, [r7, 0x10]                        |     r0 = *((r7 + 0x10));
    0x0000367e str r0, [r1, 0x18]                        |     *((r1 + 0x18)) = r0;
    0x00003680 movs r1, 1                                |     r1 = 1;
    0x00003682 str r1, [r7, 0x40]                        |     *((r7 + 0x40)) = r1;
    0x00003684 b.w 0x2040                                |     goto label_3;
                                                         | label_150:
    0x00003688 mov r0, r3                                |     r0 = r3;
    0x0000368a bl 0xec0                                  |     fcn_00000ec0 ();
    0x0000368e str r0, [r7, 0x38]                        |     *((r7 + 0x38)) = r0;
    0x00003690 b.w 0x2bcc                                |     goto label_25;
                                                         | label_122:
    0x000036a2 ldr.w r5, [r5, 0x194]                     |     r5 = *((r5 + 0x194));
    0x000036a6 mov r3, r2                                |     r3 = r2;
    0x000036a8 b.w 0x2818                                |     goto label_26;
                                                         | label_120:
    0x000036ac ldr.w ip, [sb, 0x194]                     |     ip = *((sb + 0x194));
    0x000036b0 mov r3, r2                                |     r3 = r2;
    0x000036b2 b.w 0x279e                                |     goto label_27;
                                                         | label_164:
    0x000036b6 mov r0, fp                                |     r0 = fp;
    0x000036b8 bl 0xaf0                                  |     fcn_00000af0 ();
    0x000036bc ldr.w r0, [pc, 0x864]                     |     r0 = *(0x00003f24);
    0x000036c0 add r0, pc                                |     r0 += pc;
    0x000036c2 add.w r0, r0, 0x598                       |     r0 += 0x598;
    0x000036c6 bl 0xaf0                                  |     fcn_00000af0 ();
    0x000036ca ldr.w r3, [r4, 0x1dc]                     |     r3 = *((r4 + 0x1dc));
    0x000036ce ldr r2, [r7, 0x20]                        |     r2 = *((r7 + 0x20));
    0x000036d0 cmp r3, r2                                |     
                                                         |     if (r3 > r2) {
    0x000036d2 bhi.w 0x44bc                              |         goto label_171;
                                                         |     }
    0x000036d6 ldr r3, [r7, 0x1c]                        |     r3 = *((r7 + 0x1c));
    0x000036d8 str r3, [r7, 0x38]                        |     *((r7 + 0x38)) = r3;
    0x000036da movs r3, 0                                |     r3 = 0;
    0x000036dc str r3, [r7, 0x40]                        |     *((r7 + 0x40)) = r3;
    0x000036de b.w 0x2a18                                |     goto label_16;
                                                         |     if (r3 != 0) {
                                                         | label_84:
    0x000037f6 bne.w 0x4344                              |         goto label_172;
                                                         |     }
    0x000037fa ldr.w r3, [fp, 0x230]                     |     r3 = *(arg_230h);
    0x000037fe cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x00003800 beq.w 0x40ae                              |         goto label_173;
                                                         |     }
    0x00003804 mov r1, r2                                |     r1 = r2;
    0x00003806 str r2, [r7, 0x40]                        |     *((r7 + 0x40)) = r2;
    0x00003808 b.w 0x2078                                |     goto label_28;
                                                         | label_124:
    0x0000380c ldr.w r0, [pc, 0x738]                     |     
    0x00003810 add r0, pc                                |     r0 = 0x775c;
    0x00003812 bl 0xc2a4                                 |     dl_fatal_printf ();
                                                         | label_169:
    0x00003816 mov r2, sl                                |     r2 = sl;
    0x00003818 ldrd sl, fp, [r7, 4]                      |     __asm ("ldrd sl, fp, [r7, 4]");
    0x0000381c cmp r2, 8                                 |     
                                                         |     if (r2 != 8) {
    0x0000381e bne.w 0x4312                              |         goto label_174;
                                                         |     }
    0x00003822 ldr r2, [r7, 0x40]                        |     r2 = *((r7 + 0x40));
    0x00003824 str r3, [r2, 0x20]                        |     *((r2 + 0x20)) = r3;
    0x00003826 ldr r3, [r7, 0x38]                        |     r3 = *((r7 + 0x38));
    0x00003828 cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x0000382a beq.w 0x412c                              |         goto label_175;
                                                         |     }
    0x0000382e ldr r2, [r7, 0x38]                        |     r2 = *((r7 + 0x38));
    0x00003830 ldr r3, [r7, 0x40]                        |     r3 = *((r7 + 0x40));
    0x00003832 str r3, [r2, 0x20]                        |     *((r2 + 0x20)) = r3;
    0x00003834 str r3, [r7, 0x38]                        |     *((r7 + 0x38)) = r3;
                                                         | label_54:
    0x00003836 ldr.w r1, [pc, 0x714]                     |     r1 = *(0x00003f4c);
    0x0000383a ldr.w r2, [fp, 4]                         |     r2 = *(arg_4h);
    0x0000383e ldrd r5, r4, [r7, 0xc]                    |     __asm ("ldrd r5, r4, [r7, 0xc]");
    0x00003842 add r1, pc                                |     r1 += pc;
    0x00003844 ldr.w r3, [r1, 0x1dc]                     |     r3 = *((r1 + 0x1dc));
    0x00003848 add.w r0, r3, 0xff                        |     r0 = r3 + 0xff;
    0x0000384c adds r3, 1                                |     r3++;
    0x0000384e str.w r5, [r4, r0, lsl 3]                 |     __asm ("str.w r5, [r4, r0, lsl 3]");
    0x00003852 str.w r3, [r1, 0x1dc]                     |     __asm ("str.w r3, [r1, 0x1dc]");
    0x00003856 ldrb.w r3, [r2, 0x199]                    |     r3 = *((r2 + 0x199));
    0x0000385a orr r3, r3, 8                             |     r3 |= 8;
    0x0000385e strb.w r3, [r2, 0x199]                    |     *((r2 + 0x199)) = r3;
    0x00003862 b 0x335c                                  |     goto label_14;
                                                         | label_104:
    0x00003864 ldr.w r3, [fp, 8]                         |     r3 = *(arg_8h);
    0x00003868 cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x0000386a beq.w 0x41c8                              |         goto label_176;
                                                         |     }
                                                         | label_57:
    0x0000386e ldr r3, [r7, 0x40]                        |     r3 = *((r7 + 0x40));
    0x00003870 eor r0, r3, 1                             |     r0 = r3 ^ 1;
    0x00003874 lsls r0, r0, 1                            |     r0 <<= 1;
    0x00003876 bl 0x14c28                                |     fcn_00014c28 (r0);
    0x0000387a b.w 0x22aa                                |     goto label_29;
                                                         | label_125:
    0x0000387e cmp r3, r0                                |     
                                                         |     if (r3 < r0) {
    0x00003880 bls.w 0x28aa                              |         goto label_30;
                                                         |     }
    0x00003884 b.w 0x28a2                                |     goto label_31;
                                                         | label_146:
    0x00003888 ldr r2, [r3, 0xc]                         |     r2 = *((r3 + 0xc));
    0x0000388a mov r1, r3                                |     r1 = r3;
    0x0000388c str.w r3, [r4, 0x5a8]                     |     __asm ("str.w r3, [r4, 0x5a8]");
    0x00003890 b.w 0x2b64                                |     goto label_32;
                                                         | label_143:
    0x00003894 ldr.w r2, [pc, 0x6b8]                     |     r2 = *(0x00003f50);
    0x00003898 ldr.w r5, [sl, 0x164]                     |     r5 = *((sl + 0x164));
    0x0000389c add r2, pc                                |     r2 += pc;
    0x0000389e ldr.w r3, [r2, 0x5a4]                     |     r3 = *((r2 + 0x5a4));
    0x000038a2 ldr.w r2, [r2, 0x5a8]                     |     r2 = *((r2 + 0x5a8));
    0x000038a6 str r3, [r2, 0xc]                         |     *((r2 + 0xc)) = r3;
    0x000038a8 cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x000038aa bne.w 0x2ae4                              |         goto label_33;
                                                         |     }
    0x000038ae b 0x35a6                                  |     goto label_34;
                                                         | label_142:
    0x000038b0 lsls r3, r4, 2                            |     r3 = r4 << 2;
    0x000038b2 adds r3, 7                                |     r3 += 7;
    0x000038b4 bic r3, r3, 7                             |     r3 = BIT_MASK (r3, 7);
    0x000038b8 sub.w sp, sp, r3                          |     
    0x000038bc movs r3, 0                                |     r3 = 0;
    0x000038be add r0, sp, 0x10                          |     r0 += arg_10h;
    0x000038c0 add r2, sp, 0xc                           |     r2 += arg_ch;
                                                         |     do {
    0x000038c2 str r1, [r2, 4]!                          |         *((r2 += 4)) = r1;
    0x000038c6 adds r3, 1                                |         r3++;
    0x000038c8 ldr r1, [r1, 0xc]                         |         r1 = *((r1 + 0xc));
    0x000038ca cmp r1, 0                                 |         
    0x000038cc bne 0x38c2                                |         
                                                         |     } while (r1 != 0);
    0x000038ce cmp r4, r3                                |     
    0x000038d0 it eq                                     |     
                                                         |     if (r4 == r3) {
    0x000038d2 moveq r1, r0                              |         r1 = r0;
                                                         |         goto label_177;
                                                         |     }
                                                         |     if (r4 == r3) {
                                                         | label_177:
    0x000038d4 beq.w 0x2a8e                              |         goto label_35;
                                                         |     }
    0x000038d8 ldr.w r3, [pc, 0x678]                     |     
    0x000038dc movw r2, 0x77e                            |     r2 = 0x77e;
    0x000038e0 ldr.w r1, [pc, 0x674]                     |     r1 = *(0x00003f58);
    0x000038e4 ldr.w r0, [pc, 0x674]                     |     
    0x000038e8 add r3, pc                                |     r3 = 0x7840;
    0x000038ea add r1, pc                                |     r1 += pc;
    0x000038ec add r0, pc                                |     r0 = 0x784c;
    0x000038ee bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_137:
    0x000038f2 ldr.w r8, [pc, 0x66c]                     |     r8 = *(0x00003f60);
    0x000038f6 add.w sb, fp, 0x260                       |     sb += arg_260h;
    0x000038fa ldr.w r3, [pc, 0x668]                     |     r3 = *(0x00003f64);
    0x000038fe movs r5, 0                                |     r5 = 0;
    0x00003900 ldr.w r6, [r4, 0x1d8]                     |     r6 = *((r4 + 0x1d8));
    0x00003904 add r8, pc                                |     r8 += pc;
    0x00003906 add r3, pc                                |     r3 += pc;
    0x00003908 add.w r8, r8, 0x7f8                       |     r8 += 0x7f8;
    0x0000390c add.w r3, r3, 0x598                       |     r3 += 0x598;
    0x00003910 str r3, [r7, 0x3c]                        |     *((r7 + 0x3c)) = r3;
                                                         |     do {
    0x00003912 ldr r3, [r6]                              |         r3 = *(r6);
                                                         |         if (r3 != 0) {
    0x00003914 cbz r3, 0x3924                            |             
    0x00003916 ldr r2, [r7, 0x3c]                        |             r2 = *((r7 + 0x3c));
    0x00003918 movs r1, 1                                |             r1 = 1;
    0x0000391a cmp fp, r2                                |             
    0x0000391c ite ne                                    |             
                                                         |             if (fp == r2) {
    0x0000391e movne r0, sb                              |                 r0 = sb;
                                                         |             }
                                                         |             if (fp != r2) {
    0x00003920 moveq r0, r8                              |                 r0 = r8;
                                                         |             }
    0x00003922 blx r3                                    |             uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
                                                         |         }
    0x00003924 ldr.w r3, [r4, 0x1dc]                     |         r3 = *((r4 + 0x1dc));
    0x00003928 adds r5, 1                                |         r5++;
    0x0000392a ldr r6, [r6, 0x20]                        |         r6 = *((r6 + 0x20));
    0x0000392c add.w r8, r8, 8                           |         r8 += 8;
    0x00003930 add.w sb, sb, 8                           |         sb += 8;
    0x00003934 cmp r3, r5                                |         
    0x00003936 bhi 0x3912                                |         
                                                         |     } while (r3 > r5);
    0x00003938 b.w 0x2a52                                |     goto label_36;
                                                         | label_139:
    0x0000393c ldr.w r2, [pc, 0x628]                     |     
    0x00003940 mov r0, r4                                |     r0 = r4;
    0x00003942 mov r1, fp                                |     r1 = fp;
    0x00003944 add r2, pc                                |     r2 = 0x78b0;
    0x00003946 bl 0x17b4                                 |     r0 = fcn_000017b4 (r0, r1, r2);
    0x0000394a mov r4, r0                                |     r4 = r0;
    0x0000394c b.w 0x2a66                                |     goto label_37;
                                                         | label_141:
    0x00003950 mov r0, r5                                |     r0 = r5;
    0x00003952 ldr r1, [r7, 0x44]                        |     r1 = *((r7 + 0x44));
    0x00003954 movs r2, 3                                |     r2 = 3;
    0x00003956 bl 0xc19c                                 |     r0 = fcn_0000c19c (r0, r1, r2);
    0x0000395a adds r6, r0, 1                            |     r6 = r0 + 1;
    0x0000395c mov r5, r0                                |     r5 = r0;
                                                         |     if (r6 == r0) {
    0x0000395e beq.w 0x2a84                              |         goto label_38;
                                                         |     }
    0x00003962 ldr r3, [r7, 0x44]                        |     r3 = *((r7 + 0x44));
    0x00003964 add.w r6, r7, 0x64                        |     r6 = r7 + 0x64;
    0x00003968 str r0, [r6]                              |     *(r6) = r0;
    0x0000396a ldr.w sb, [r3]                            |     sb = *(r3);
    0x0000396e cmp.w sb, 0                               |     
                                                         |     if (sb == 0) {
    0x00003972 beq.w 0x4326                              |         goto label_178;
                                                         |     }
    0x00003976 mov r3, r0                                |     r3 = r0;
    0x00003978 mov.w r8, 0x20                            |     r8 = 0x20;
                                                         | label_47:
    0x0000397c movs r1, 0x23                             |     r1 = 0x23;
    0x0000397e mov r2, sb                                |     r2 = sb;
    0x00003980 mov r0, r3                                |     r0 = r3;
    0x00003982 str r3, [r7, 0x3c]                        |     *((r7 + 0x3c)) = r3;
    0x00003984 bl 0x16420                                |     r0 = fcn_00016420 (r0, r1);
    0x00003988 mov r1, r0                                |     r1 = r0;
                                                         |     if (r0 == 0) {
    0x0000398a cbz r0, 0x39b6                            |         goto label_179;
                                                         |     }
    0x0000398c ldr r3, [r7, 0x3c]                        |     r3 = *((r7 + 0x3c));
    0x0000398e subs r3, r0, r3                           |     r3 = r0 - r3;
    0x00003990 sub.w r2, sb, r3                          |     r2 = sb - r3;
    0x00003994 mov r3, r0                                |     r3 = r0;
    0x00003996 subs r0, r2, 1                            |     r0 = r2 - 1;
    0x00003998 add r1, r0                                |     r1 += r0;
    0x0000399a subs r0, r3, 1                            |     r0 = r3 - 1;
    0x0000399c add r0, r2                                |     r0 += r2;
    0x0000399e b 0x39aa                                  |     
                                                         |     while (r3 != r1) {
    0x000039a0 ldrb r2, [r3, 1]!                         |         r2 = *((r3 += 1));
    0x000039a4 cmp r2, 0xa                               |         
                                                         |         if (r2 == 0xa) {
    0x000039a6 beq.w 0x4080                              |             goto label_180;
                                                         |         }
    0x000039aa cmp r3, r1                                |         
    0x000039ac sub.w sb, r0, r3                          |         sb = r0 - r3;
    0x000039b0 strb.w r8, [r3]                           |         *(r3) = r8;
    0x000039b4 bne 0x39a0                                |         
                                                         |     }
                                                         | label_179:
    0x000039b6 ldr r3, [r7, 0x44]                        |     r3 = *((r7 + 0x44));
    0x000039b8 ldr r3, [r3]                              |     r3 = *(r3);
    0x000039ba subs r2, r3, 1                            |     r2 = r3 - 1;
    0x000039bc ldrb r1, [r5, r2]                         |     r1 = *((r5 + r2));
    0x000039be add r2, r5                                |     r2 += r5;
    0x000039c0 cmp r1, 0x20                              |     
    0x000039c2 it ne                                     |     
                                                         |     if (r1 != 0x20) {
    0x000039c4 cmpne r1, 0x3a                            |         __asm ("cmpne r1, 0x3a");
                                                         |     }
    0x000039c6 sub.w r1, r1, 9                           |     r1 -= 9;
    0x000039ca ite ne                                    |     
                                                         |     if (r1 == 0x20) {
    0x000039cc movne r0, 1                               |         r0 = 1;
                                                         |     }
                                                         |     if (r1 != 0x20) {
    0x000039ce moveq r0, 0                               |         r0 = 0;
                                                         |     }
    0x000039d0 cmp r1, 1                                 |     
    0x000039d2 ite ls                                    |     
                                                         |     if (r1 > 1) {
    0x000039d4 movls r0, 0                               |         r0 = 0;
                                                         |     }
                                                         |     if (r1 <= 1) {
    0x000039d6 andhi r0, r0, 1                           |         r0 &= 1;
                                                         |     }
    0x000039da cmp r0, 0                                 |     
                                                         |     if (r0 != 0) {
    0x000039dc bne.w 0x42c6                              |         goto label_181;
                                                         |     }
                                                         | label_62:
    0x000039e0 mov.w r8, 0                               |     r8 = 0;
    0x000039e4 strb.w r8, [r2]                           |     *(r2) = r8;
    0x000039e8 cmp r5, 0                                 |     
                                                         |     if (r5 != 0) {
    0x000039ea beq 0x3a5c                                |         
                                                         | label_60:
    0x000039ec ldr.w r3, [pc, 0x57c]                     |         r3 = *(0x00003f6c);
    0x000039f0 ldr.w sb, [pc, 0x57c]                     |         
    0x000039f4 str r5, [r6]                              |         *(r6) = r5;
    0x000039f6 add r3, pc                                |         r3 += pc;
    0x000039f8 add sb, pc                                |         sb = 0x796c;
    0x000039fa str r3, [r7, 0x3c]                        |         *((r7 + 0x3c)) = r3;
    0x000039fc b 0x3a06                                  |         void (*0x3a06)() ();
                                                         | label_61:
    0x00003a14 cmp.w r8, 0                               |         
                                                         |         if (r8 == 0) {
    0x00003a18 beq 0x3a5c                                |             goto label_182;
                                                         |         }
    0x00003a1a ldr r3, [r7, 0x44]                        |         r3 = *((r7 + 0x44));
    0x00003a1c mov r0, r8                                |         r0 = r8;
    0x00003a1e movs r6, 0                                |         r6 = 0;
    0x00003a20 ldr r1, [r3]                              |         r1 = *(r3);
    0x00003a22 sub.w r3, r8, r5                          |         r3 = r8 - r5;
    0x00003a26 subs r1, r1, r3                           |         r1 -= r3;
    0x00003a28 bl 0x1561c                                |         r0 = fcn_0001561c (r0, r1);
    0x00003a2c add.w r3, r0, 8                           |         r3 = r0 + 8;
    0x00003a30 mov r2, r0                                |         r2 = r0;
    0x00003a32 bic r3, r3, 7                             |         r3 = BIT_MASK (r3, 7);
    0x00003a36 mov r1, r8                                |         r1 = r8;
    0x00003a38 sub.w sp, sp, r3                          |         
    0x00003a3c add.w r0, sp, 0x17                        |         r0 += arg_17h;
    0x00003a40 lsrs r3, r0, 3                            |         r3 = r0 >> 3;
    0x00003a42 bic r0, r0, 7                             |         r0 = BIT_MASK (r0, 7);
    0x00003a46 strb.w r6, [r2, r3, lsl 3]                |         offset_3 = r3 << 3;
                                                         |         *((r2 + offset_3)) = r6;
    0x00003a4a blx 0x15f40                               |         fcn_00015f40 (r0, r1);
    0x00003a4e ldr.w r2, [pc, 0x524]                     |         r2 = fcn.00014c70;
    0x00003a52 mov r1, fp                                |         r1 = fp;
    0x00003a54 add r2, pc                                |         r2 += pc;
    0x00003a56 bl 0xc64                                  |         r0 = fcn_00000c64 (r0);
    0x00003a5a add r4, r0                                |         r4 += r0;
                                                         |     }
                                                         | label_182:
    0x00003a5c ldr r3, [r7, 0x44]                        |     r3 = *((r7 + 0x44));
    0x00003a5e mov r0, r5                                |     r0 = r5;
    0x00003a60 ldr r1, [r3]                              |     r1 = *(r3);
    0x00003a62 bl 0x14ae0                                |     fcn_00014ae0 (r0);
    0x00003a66 b.w 0x2a84                                |     goto label_38;
                                                         | label_140:
    0x00003a6a ldr.w r2, [pc, 0x50c]                     |     
    0x00003a6e mov r1, fp                                |     r1 = fp;
    0x00003a70 add r2, pc                                |     r2 = 0x79ee;
    0x00003a72 bl 0x17b4                                 |     r0 = fcn_000017b4 (r0, r1, r2);
    0x00003a76 add r4, r0                                |     r4 += r0;
    0x00003a78 b.w 0x2a70                                |     goto label_39;
                                                         | label_166:
    0x00003a7c ldr.w r3, [pc, 0x4fc]                     |     r3 = *(0x00003f7c);
    0x00003a80 add r3, pc                                |     r3 += pc;
    0x00003a82 ldr r3, [r3]                              |     r3 = *(r3);
    0x00003a84 lsls r3, r3, 0x19                         |     r3 <<= 0x19;
                                                         |     if (r3 < r3) {
    0x00003a86 bmi.w 0x3c92                              |         goto label_183;
                                                         |     }
                                                         | label_43:
    0x00003a8a ldr r1, [r7, 0x40]                        |     r1 = *((r7 + 0x40));
    0x00003a8c ldr.w r0, [fp, 4]                         |     r0 = *(arg_4h);
    0x00003a90 bl 0xfd4                                  |     fcn_00000fd4 (r0, r1);
    0x00003a94 b 0x335c                                  |     goto label_14;
                                                         | label_151:
    0x00003a96 ldr.w r2, [pc, 0x4e8]                     |     r2 = *(0x00003f80);
    0x00003a9a add r2, pc                                |     r2 += pc;
    0x00003a9c ldr r1, [r2]                              |     r1 = *(r2);
    0x00003a9e lsls r0, r1, 0x14                         |     r0 = r1 << 0x14;
                                                         |     if (r0 >= r1) {
    0x00003aa0 bpl.w 0x3c0e                              |         goto label_184;
                                                         |     }
    0x00003aa4 ldr.w r2, [fp, 0x164]                     |     r2 = *(arg_164h);
    0x00003aa8 cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x00003aaa beq.w 0x3cb8                              |         goto label_55;
                                                         |     }
    0x00003aae ldr.w r3, [pc, 0x4d4]                     |     r3 = *(0x00003f84);
    0x00003ab2 movs r5, 0                                |     r5 = 0;
    0x00003ab4 ldr.w sb, [pc, 0x4d0]                     |     sb = *(0x00003f88);
    0x00003ab8 mov r8, r6                                |     r8 = r6;
    0x00003aba add r3, pc                                |     r3 += pc;
    0x00003abc str r3, [r7, 0x44]                        |     *((r7 + 0x44)) = r3;
    0x00003abe add sb, pc                                |     sb += pc;
    0x00003ac0 ldr.w r3, [pc, 0x4c8]                     |     
    0x00003ac4 add r3, pc                                |     r3 = 0x7a54;
    0x00003ac6 str r3, [r7, 0x40]                        |     *((r7 + 0x40)) = r3;
    0x00003ac8 b 0x3ae6                                  |     
                                                         |     while (r1 != 0) {
    0x00003aca ldr.w r0, [pc, 0x4c4]                     |         
    0x00003ace mov r2, r6                                |         r2 = r6;
    0x00003ad0 ldr.w r3, [r4, 0x244]                     |         r3 = *((r4 + 0x244));
    0x00003ad4 add r0, pc                                |         r0 = 0x7a6a;
    0x00003ad6 bl 0xc264                                 |         fcn_0000c264 ();
                                                         | label_40:
    0x00003ada ldr.w r3, [fp, 0x164]                     |         r3 = *(arg_164h);
    0x00003ade adds r5, 1                                |         r5++;
    0x00003ae0 cmp r3, r5                                |         
                                                         |         if (r3 < r5) {
    0x00003ae2 bls.w 0x3cb2                              |             goto label_185;
                                                         |         }
    0x00003ae6 ldr.w r3, [fp, 0x160]                     |         r3 = *(arg_160h);
    0x00003aea ldr.w r4, [r3, r5, lsl 2]                 |         offset_4 = r5 << 2;
                                                         |         r4 = *((r3 + offset_4));
    0x00003aee ldrb.w r3, [r4, 0x199]                    |         r3 = *((r4 + 0x199));
    0x00003af2 lsls r6, r3, 0x1e                         |         r6 = r3 << 0x1e;
                                                         |         if (r6 < r3) {
    0x00003af4 bmi.w 0x3ca4                              |             goto label_186;
                                                         |         }
    0x00003af8 ldr r6, [r7, 0x44]                        |         r6 = *((r7 + 0x44));
    0x00003afa mov r1, r4                                |         r1 = r4;
    0x00003afc ldr.w r0, [r6, 0x184]                     |         r0 = *((r6 + 0x184));
    0x00003b00 bl 0xc2c0                                 |         r0 = fcn_0000c2c0 (r0, r1);
                                                         |         if (r0 != 0) {
    0x00003b04 cbz r0, 0x3b0a                            |             
    0x00003b06 str.w r4, [r6, 0x188]                     |             __asm ("str.w r4, [r6, 0x188]");
                                                         |         }
    0x00003b0a ldr r3, [r4, 0x1c]                        |         r3 = *((r4 + 0x1c));
    0x00003b0c ldr r1, [r3]                              |         r1 = *(r3);
    0x00003b0e ldrb r3, [r1]                             |         r3 = *(r1);
                                                         |         if (r3 == 0) {
    0x00003b10 cbnz r3, 0x3b22                           |             
    0x00003b12 ldr.w r3, [pc, 0x480]                     |             r3 = *(0x00003f94);
    0x00003b16 add r3, pc                                |             r3 += pc;
    0x00003b18 ldr r3, [r3]                              |             r3 = *(r3);
    0x00003b1a ldr r1, [r3]                              |             r1 = *(r3);
    0x00003b1c cmp r1, 0                                 |             
                                                         |             if (r1 == 0) {
    0x00003b1e beq.w 0x40fc                              |                 goto label_187;
                                                         |             }
                                                         |         }
                                                         | label_51:
    0x00003b22 ldr r2, [r4, 4]                           |         r2 = *((r4 + 4));
    0x00003b24 ldrb r3, [r2]                             |         r3 = *(r2);
                                                         |         if (r3 == 0) {
    0x00003b26 cbnz r3, 0x3b38                           |             
    0x00003b28 ldr.w r3, [pc, 0x46c]                     |             r3 = *(0x00003f98);
    0x00003b2c add r3, pc                                |             r3 += pc;
    0x00003b2e ldr r3, [r3]                              |             r3 = *(r3);
    0x00003b30 ldr r2, [r3]                              |             r2 = *(r3);
    0x00003b32 cmp r2, 0                                 |             
                                                         |             if (r2 == 0) {
    0x00003b34 beq.w 0x4104                              |                 goto label_188;
                                                         |             }
                                                         |         }
                                                         | label_52:
    0x00003b38 ldr r3, [r4]                              |         r3 = *(r4);
    0x00003b3a movs r6, 8                                |         r6 = 8;
    0x00003b3c str r6, [sp, 4]                           |         *(arg_4h) = r6;
    0x00003b3e mov r0, sb                                |         r0 = sb;
    0x00003b40 str r3, [sp, 8]                           |         *(arg_8h) = r3;
    0x00003b42 ldr.w r3, [r4, 0x1b4]                     |         r3 = *((r4 + 0x1b4));
    0x00003b46 str r3, [sp]                              |         *(sp) = r3;
    0x00003b48 mov r3, r6                                |         r3 = r6;
    0x00003b4a bl 0xc264                                 |         fcn_0000c264 ();
    0x00003b4e ldr.w r1, [r4, 0x248]                     |         r1 = *((r4 + 0x248));
    0x00003b52 cmp r1, 0                                 |         
    0x00003b54 bne 0x3aca                                |         
                                                         |     }
    0x00003b56 ldr r0, [r7, 0x40]                        |     r0 = *((r7 + 0x40));
    0x00003b58 bl 0xc264                                 |     fcn_0000c264 ();
    0x00003b5c b 0x3ada                                  |     goto label_40;
                                                         | label_145:
    0x00003b5e ldr r0, [r1, 0xc]                         |     r0 = *((r1 + 0xc));
    0x00003b60 str.w r0, [ip, 0x5a4]                     |     __asm ("str.w r0, [ip, 0x5a4]");
    0x00003b64 ldr r2, [r1, 0xc]                         |     r2 = *((r1 + 0xc));
    0x00003b66 b.w 0x2b64                                |     goto label_32;
                                                         | label_76:
    0x00003bbc bl 0x11280                                |     fcn_00011280 ();
    0x00003bc0 movs r0, 0                                |     r0 = 0;
    0x00003bc2 bl 0x14c28                                |     fcn_00014c28 (r0);
    0x00003bc6 ldr.w r0, [sl, 0x164]                     |     r0 = *((sl + 0x164));
    0x00003bca b.w 0x1e18                                |     goto label_41;
                                                         | label_157:
    0x00003bda ldr r3, [pc, 0x3cc]                       |     
    0x00003bdc movw r2, 0x637                            |     r2 = 0x637;
    0x00003be0 ldr r1, [pc, 0x3c8]                       |     
    0x00003be2 ldr r0, [pc, 0x3cc]                       |     
    0x00003be4 add r3, pc                                |     r3 = 0x7b92;
    0x00003be6 add r1, pc                                |     r1 = 0x7b96;
    0x00003be8 add r0, pc                                |     r0 = 0x7b9e;
    0x00003bea bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_74:
    0x00003bee ldr r2, [pc, 0x3c4]                       |     
    0x00003bf0 movs r3, 4                                |     r3 = 4;
    0x00003bf2 str.w r3, [sl, 0x164]                     |     __asm ("str.w r3, [sl, 0x164]");
    0x00003bf6 subs r4, 1                                |     r4--;
    0x00003bf8 adds r5, 4                                |     r5 += 4;
    0x00003bfa add r2, pc                                |     r2 = 0x7bb4;
    0x00003bfc ldr r3, [r2, 0x10]                        |     r3 = *(0x7bc4);
    0x00003bfe adds r3, 1                                |     r3++;
    0x00003c00 str r3, [r2, 0x10]                        |     *((r2 + 0x10)) = r3;
    0x00003c02 b.w 0x1a2e                                |     goto label_0;
                                                         | label_184:
    0x00003c0e lsls r0, r1, 0x17                         |     r0 = r1 << 0x17;
                                                         |     if (r0 >= r1) {
    0x00003c10 bpl.w 0x4152                              |         goto label_189;
                                                         |     }
    0x00003c14 ldr r3, [r2, 0x30]                        |     r3 = *((r2 + 0x30));
    0x00003c16 mov r2, r6                                |     r2 = r6;
    0x00003c18 ldr r1, [pc, 0x39c]                       |     
    0x00003c1a ldr r0, [pc, 0x3a0]                       |     
    0x00003c1c cmp r3, 0                                 |     
    0x00003c1e mov.w r3, 1                               |     
    0x00003c22 movt r3, 0x200                            |     r3 = 0x2000001;
    0x00003c26 it eq                                     |     
                                                         |     if (r3 != 0) {
    0x00003c28 moveq r3, 0x2000000                       |         r3 = 0x2000000;
                                                         |     }
    0x00003c2c add r0, pc                                |     r0 = 0x7bee;
    0x00003c2e add r1, pc                                |     r1 = 0x7bea;
    0x00003c30 str.w fp, [r6]                            |     __asm ("str.w fp, [r6]");
    0x00003c34 str r3, [r6, 4]                           |     *((r6 + 4)) = r3;
    0x00003c36 bl 0x12578                                |     fcn_00012578 (r0, r1);
    0x00003c3a ldr.w r4, [fp, 8]                         |     r4 = *(arg_8h);
    0x00003c3e ldr r0, [r4]                              |     r0 = *(r4);
    0x00003c40 cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00003c42 beq.w 0x4148                              |         goto label_190;
                                                         |     }
    0x00003c46 ldr r3, [pc, 0x378]                       |     
    0x00003c48 mov r5, fp                                |     r5 = fp;
    0x00003c4a ldr.w sb, [pc, 0x378]                     |     sb = *(0x00003fc4);
    0x00003c4e ldr.w r8, [pc, 0x378]                     |     
    0x00003c52 add r3, pc                                |     r3 = 0x7c18;
    0x00003c54 str r3, [r7, 0x44]                        |     *((r7 + 0x44)) = r3;
    0x00003c56 add sb, pc                                |     sb += pc;
    0x00003c58 add r8, pc                                |     r8 = 0x7c26;
    0x00003c5a movs r3, 1                                |     r3 = 1;
    0x00003c5c b 0x3c68                                  |     
                                                         |     while (r0 != 1) {
                                                         | label_42:
    0x00003c5e ldr r0, [r4, 8]!                          |         r0 = *((r4 += 8));
    0x00003c62 cmp r0, 0                                 |         
                                                         |         if (r0 == 0) {
    0x00003c64 beq.w 0x4144                              |             goto label_191;
                                                         |         }
    0x00003c68 cmp r0, 1                                 |         
    0x00003c6a bne 0x3c5e                                |         
                                                         |     }
    0x00003c6c ldr r5, [r5, 0xc]                         |     r5 = *((r5 + 0xc));
    0x00003c6e ldr.w r2, [sb, 0x194]                     |     r2 = *((sb + 0x194));
    0x00003c72 cmp r2, r5                                |     
    0x00003c74 it eq                                     |     
                                                         |     if (r2 != r5) {
    0x00003c76 ldreq r5, [r5, 0xc]                       |         r5 = *((r5 + 0xc));
                                                         |     }
    0x00003c78 ldr.w r2, [r5, 0x204]                     |     r2 = *((r5 + 0x204));
    0x00003c7c cmp r2, 0                                 |     
                                                         |     if (r2 != 0) {
    0x00003c7e bne 0x3c5e                                |         goto label_42;
                                                         |     }
    0x00003c80 cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x00003c82 bne.w 0x4286                              |         goto label_192;
                                                         |     }
                                                         | label_59:
    0x00003c86 ldr r1, [r5, 4]                           |     r1 = *((r5 + 4));
    0x00003c88 mov r0, r8                                |     r0 = r8;
    0x00003c8a bl 0xc264                                 |     fcn_0000c264 ();
    0x00003c8e movs r3, 0                                |     r3 = 0;
    0x00003c90 b 0x3c5e                                  |     goto label_42;
                                                         | label_183:
    0x00003c92 ldr.w r3, [fp, 4]                         |     r3 = *(arg_4h);
    0x00003c96 ldr r0, [pc, 0x334]                       |     
    0x00003c98 ldr r2, [r3, 0x18]                        |     r2 = *((r3 + 0x18));
    0x00003c9a ldr r1, [r3, 4]                           |     r1 = *((r3 + 4));
    0x00003c9c add r0, pc                                |     r0 = 0x7c6e;
    0x00003c9e bl 0xc1f0                                 |     fcn_0000c1f0 ();
    0x00003ca2 b 0x3a8a                                  |     goto label_43;
                                                         | label_186:
    0x00003ca4 ldr r3, [r4, 0x1c]                        |     r3 = *((r4 + 0x1c));
    0x00003ca6 ldr r0, [pc, 0x328]                       |     
    0x00003ca8 ldr r1, [r3]                              |     r1 = *(r3);
    0x00003caa add r0, pc                                |     r0 = 0x7c80;
    0x00003cac bl 0xc264                                 |     fcn_0000c264 ();
    0x00003cb0 b 0x3ada                                  |     goto label_40;
                                                         | label_185:
    0x00003cb2 ldr.w r3, [sl, 0x164]                     |     r3 = *((sl + 0x164));
    0x00003cb6 mov r6, r8                                |     r6 = r8;
                                                         | label_55:
    0x00003cb8 cmp r3, 3                                 |     
                                                         |     if (r3 != 3) {
    0x00003cba bne.w 0x4224                              |         goto label_193;
                                                         |     }
    0x00003cbe ldr r2, [pc, 0x314]                       |     
    0x00003cc0 add r2, pc                                |     r2 = 0x7c9a;
    0x00003cc2 ldr r3, [r2, 0x30]                        |     r3 = *(0x7cca);
    0x00003cc4 cmp r3, 0                                 |     
                                                         |     if (r3 < 0) {
    0x00003cc6 blt 0x3d54                                |         goto label_194;
                                                         |     }
    0x00003cc8 ldr r2, [r2, 0x28]                        |     r2 = *((r2 + 0x28));
    0x00003cca cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x00003ccc beq 0x3d54                                |         goto label_194;
                                                         |     }
    0x00003cce ldr.w r2, [fp, 0x164]                     |     r2 = *(arg_164h);
    0x00003cd2 cmp r3, 0                                 |     
    0x00003cd4 mov.w r3, 1                               |     
    0x00003cd8 movt r3, 0x200                            |     r3 = 0x2000001;
    0x00003cdc it eq                                     |     
                                                         |     if (r3 != 0) {
    0x00003cde moveq r3, 0x2000000                       |         r3 = 0x2000000;
                                                         |     }
    0x00003ce2 subs r4, r2, 1                            |     r4 = r2 - 1;
    0x00003ce4 str r3, [r6, 4]                           |     *((r6 + 4)) = r3;
                                                         |     if (r2 == 0) {
    0x00003ce6 cbz r2, 0x3d24                            |         goto label_195;
                                                         |     }
    0x00003ce8 ldr r5, [pc, 0x2ec]                       |     
    0x00003cea ldr.w sb, [pc, 0x2f0]                     |     sb = *(0x00003fdc);
    0x00003cee ldr.w r8, [pc, 0x2f0]                     |     r8 = *(0x00003fe0);
    0x00003cf2 add r5, pc                                |     
    0x00003cf4 add.w r5, r5, 0x598                       |     r5 = 0x8266;
    0x00003cf8 add sb, pc                                |     sb += pc;
    0x00003cfa add r8, pc                                |     r8 += pc;
    0x00003cfc b 0x3d02                                  |     
    0x00003d02 ldr.w r3, [fp, 0x1f8]                     |     r3 = *(arg_1f8h);
    0x00003d06 ldr.w r3, [r3, r4, lsl 2]                 |     offset_5 = r4 << 2;
                                                         |     r3 = *((r3 + offset_5));
    0x00003d0a cmp r3, r5                                |     
                                                         |     if (r3 == r5) {
    0x00003d0c beq 0x3cfe                                |         void (*0x3cfe)() ();
                                                         |     }
                                                         | label_195:
    0x00003d24 ldr r3, [pc, 0x2bc]                       |     
    0x00003d26 ldr r2, [r7, 0x34]                        |     r2 = *((r7 + 0x34));
    0x00003d28 add r3, pc                                |     
    0x00003d2a ldr r3, [r3]                              |     r3 = *(0x7d10);
    0x00003d2c ands.w r3, r2, r3, lsr 11                 |     r3 = r2 & (r3 >> 11);
                                                         |     if (r3 != r2) {
    0x00003d30 beq 0x3d54                                |         
    0x00003d32 ldr r0, [pc, 0x2b4]                       |         
    0x00003d34 movs r3, 0                                |         r3 = 0;
    0x00003d36 mov.w r2, 0x2000000                       |         r2 = 0x2000000;
    0x00003d3a add r0, pc                                |         
    0x00003d3c ldrb.w r1, [r0, 0x730]                    |         r1 = *((r0 + 0x730));
    0x00003d40 add.w r0, r0, 0x598                       |         r0 = 0x82c0;
    0x00003d44 bfc r1, 2, 1                              |         value_6 = BIT_MASK (1, );
                                                         |         value_6 = ~value_6;
                                                         |         r1 &= value_6;
    0x00003d48 strb.w r1, [r0, 0x198]                    |         *((r0 + 0x198)) = r1;
    0x00003d4c ldr.w r1, [fp, 0x1d4]                     |         r1 = *(arg_1d4h);
    0x00003d50 bl 0x8e78                                 |         fcn_00008e78 (r0, r1, r2, r3, r4, r5, r6);
                                                         |     }
                                                         | label_194:
    0x00003d54 ldrb.w r3, [sl, 0x169]                    |     r3 = *((sl + 0x169));
    0x00003d58 cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x00003d5a beq.w 0x3e98                              |         goto label_58;
                                                         |     }
    0x00003d5e ldr r3, [pc, 0x28c]                       |     
    0x00003d60 str.w fp, [r7, 0x2c]                      |     __asm ("str.w fp, [r7, 0x2c]");
    0x00003d64 str.w fp, [r7, 0x28]                      |     __asm ("str.w fp, [r7, 0x28]");
    0x00003d68 add r3, pc                                |     r3 = 0x7d5a;
    0x00003d6a str r3, [r7, 0x44]                        |     *((r7 + 0x44)) = r3;
    0x00003d6c ldr r3, [pc, 0x280]                       |     
    0x00003d6e add r3, pc                                |     r3 = 0x7d62;
    0x00003d70 str r3, [r7, 0x3c]                        |     *((r7 + 0x3c)) = r3;
    0x00003d72 movs r3, 1                                |     r3 = 1;
                                                         | label_44:
    0x00003d74 ldr r0, [r7, 0x2c]                        |     r0 = *((r7 + 0x2c));
    0x00003d76 ldr.w r2, [r0, 0xb0]                      |     r2 = *((r0 + 0xb0));
    0x00003d7a cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x00003d7c beq.w 0x3e88                              |         goto label_196;
                                                         |     }
    0x00003d80 ldr r1, [r0, 0x34]                        |     r1 = *((r0 + 0x34));
    0x00003d82 ldr r2, [r2, 4]                           |     r2 = *((r2 + 4));
    0x00003d84 ldr.w r8, [r1, 4]                         |     r8 = *((r1 + 4));
    0x00003d88 ldr r1, [r0]                              |     r1 = *(r0);
    0x00003d8a add.w sb, r1, r2                          |     sb = r1 + r2;
    0x00003d8e cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x00003d90 bne.w 0x4014                              |         goto label_197;
                                                         |     }
                                                         | label_46:
    0x00003d94 ldr r3, [r7, 0x2c]                        |     r3 = *((r7 + 0x2c));
    0x00003d96 ldr r1, [r3, 4]                           |     r1 = *((r3 + 4));
    0x00003d98 ldrb r3, [r1]                             |     r3 = *(r1);
                                                         |     if (r3 != 0) {
    0x00003d9a cbnz r3, 0x3daa                           |         void (*0x3daa)() ();
                                                         |     }
                                                         | label_196:
    0x00003e88 ldr r2, [r7, 0x2c]                        |     r2 = *((r7 + 0x2c));
    0x00003e8a ldr r2, [r2, 0xc]                         |     r2 = *((r2 + 0xc));
    0x00003e8c str r2, [r7, 0x2c]                        |     *((r7 + 0x2c)) = r2;
    0x00003e8e cmp r2, 0                                 |     
                                                         |     if (r2 != 0) {
    0x00003e90 bne.w 0x3d74                              |         goto label_44;
                                                         |     }
    0x00003e94 ldr.w fp, [r7, 0x28]                      |     fp = *((r7 + 0x28));
                                                         | label_58:
    0x00003e98 movs r0, 0                                |     r0 = 0;
    0x00003e9a bl 0x14c28                                |     fcn_00014c28 (r0);
    0x00003e9e b.w 0x2c00                                |     goto label_45;
                                                         | label_197:
    0x00004014 ldr.w r0, [pc, 0x510]                     |     
    0x00004018 add r0, pc                                |     r0 = 0x8544;
    0x0000401a bl 0xc264                                 |     fcn_0000c264 ();
    0x0000401e b 0x3d94                                  |     goto label_46;
                                                         | label_72:
    0x0000403c ldr.w r2, [pc, 0x4f0]                     |     r2 = *(0x00004530);
    0x00004040 subs r4, 2                                |     r4 -= 2;
    0x00004042 ldr r3, [r5, 8]!                          |     r3 = *((r5 += 8));
    0x00004046 add r2, pc                                |     r2 += pc;
    0x00004048 str.w r3, [sl, 0x15c]                     |     __asm ("str.w r3, [sl, 0x15c]");
    0x0000404c ldr r3, [r2, 0x10]                        |     r3 = *((r2 + 0x10));
    0x0000404e adds r3, 2                                |     r3 += 2;
    0x00004050 str r3, [r2, 0x10]                        |     *((r2 + 0x10)) = r3;
    0x00004052 b.w 0x1a2e                                |     goto label_0;
                                                         | label_167:
    0x00004056 ldr.w r0, [pc, 0x4dc]                     |     r0 = *(0x00004534);
    0x0000405a mov r1, r5                                |     r1 = r5;
    0x0000405c movs r3, 1                                |     r3 = 1;
    0x0000405e add r0, pc                                |     r0 += pc;
    0x00004060 bl 0xc1f0                                 |     fcn_0000c1f0 ();
    0x00004064 b 0x3a8a                                  |     goto label_43;
                                                         | label_73:
    0x00004066 ldr.w r2, [pc, 0x4d0]                     |     r2 = *(0x00004538);
    0x0000406a subs r4, 2                                |     r4 -= 2;
    0x0000406c ldr r3, [r5, 8]!                          |     r3 = *((r5 += 8));
    0x00004070 add r2, pc                                |     r2 += pc;
    0x00004072 str.w r3, [sl, 0x160]                     |     __asm ("str.w r3, [sl, 0x160]");
    0x00004076 ldr r3, [r2, 0x10]                        |     r3 = *((r2 + 0x10));
    0x00004078 adds r3, 2                                |     r3 += 2;
    0x0000407a str r3, [r2, 0x10]                        |     *((r2 + 0x10)) = r3;
    0x0000407c b.w 0x1a2e                                |     goto label_0;
                                                         | label_180:
    0x00004080 ldr r3, [r6]                              |     r3 = *(r6);
    0x00004082 b 0x397c                                  |     goto label_47;
                                                         | label_116:
    0x00004084 bic r1, r3, 0x8000800                     |     r1 = BIT_MASK (r3, 0x8000800);
    0x00004088 bic r1, r1, 0xe9                          |     r1 = BIT_MASK (r1, 0xe9);
    0x0000408c cmp r1, 0                                 |     
                                                         |     if (r1 == 0) {
    0x0000408e beq.w 0x26a4                              |         goto label_48;
                                                         |     }
    0x00004092 ldr.w r0, [pc, 0x4a8]                     |     r0 = *(0x0000453c);
    0x00004096 add r0, pc                                |     r0 += pc;
    0x00004098 bl 0xc1f0                                 |     fcn_0000c1f0 ();
    0x0000409c ldr.w r3, [r5, 0x20c]                     |     r3 = *((r5 + 0x20c));
    0x000040a0 b.w 0x26a4                                |     goto label_48;
                                                         | label_173:
    0x000040ae mov r1, r3                                |     r1 = r3;
    0x000040b0 str r3, [r7, 0x40]                        |     *((r7 + 0x40)) = r3;
    0x000040b2 b.w 0x2084                                |     goto label_49;
                                                         | label_80:
    0x000040b6 ldr r4, [r7, 0x44]                        |     r4 = *((r7 + 0x44));
    0x000040b8 movs r2, 0                                |     r2 = 0;
    0x000040ba str r2, [r7, 0x68]                        |     *((r7 + 0x68)) = r2;
    0x000040bc add.w r3, r7, 0x64                        |     r3 = r7 + 0x64;
    0x000040c0 str r1, [r7, 0x64]                        |     *((r7 + 0x64)) = r1;
    0x000040c2 add.w r0, r7, 0x50                        |     r0 = r7 + 0x50;
    0x000040c6 str r2, [r4]                              |     *(r4) = r2;
    0x000040c8 mov.w r2, 0x20000000                      |     r2 = 0x20000000;
    0x000040cc str r2, [r7, 0x6c]                        |     *((r7 + 0x6c)) = r2;
    0x000040ce mov r1, r4                                |     r1 = r4;
    0x000040d0 str r3, [sp]                              |     *(sp) = r3;
    0x000040d2 add.w r2, r7, 0x4c                        |     r2 = r7 + 0x4c;
    0x000040d6 ldr.w r3, [pc, 0x468]                     |     r3 = *(0x00004540);
    0x000040da add r3, pc                                |     r3 += pc;
    0x000040dc blx 0xa04                                 |     fcn_00000a04 ();
    0x000040e0 ldr r3, [r4]                              |     r3 = *(r4);
    0x000040e2 cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x000040e4 beq.w 0x1e90                              |         goto label_50;
                                                         |     }
    0x000040e8 ldr.w r3, [sl, 0x164]                     |     r3 = *((sl + 0x164));
    0x000040ec cmp r3, 6                                 |     
                                                         |     if (r3 == 6) {
    0x000040ee beq.w 0x34c8                              |         goto label_22;
                                                         |     }
    0x000040f2 movs r0, 1                                |     r0 = 1;
    0x000040f4 bl 0x14c28                                |     fcn_00014c28 (r0);
    0x000040f8 b.w 0x1e90                                |     goto label_50;
                                                         | label_187:
    0x000040fc ldr.w r1, [pc, 0x444]                     |     
    0x00004100 add r1, pc                                |     r1 = 0x8648;
    0x00004102 b 0x3b22                                  |     goto label_51;
                                                         | label_188:
    0x00004104 ldr.w r2, [pc, 0x440]                     |     
    0x00004108 add r2, pc                                |     r2 = 0x8654;
    0x0000410a b 0x3b38                                  |     goto label_52;
                                                         | label_101:
    0x0000410c bic r1, r3, 0x8000800                     |     r1 = BIT_MASK (r3, 0x8000800);
    0x00004110 bic r1, r1, 0xe9                          |     r1 = BIT_MASK (r1, 0xe9);
    0x00004114 cmp r1, 0                                 |     
                                                         |     if (r1 == 0) {
    0x00004116 beq.w 0x2264                              |         goto label_53;
                                                         |     }
    0x0000411a ldr.w r0, [pc, 0x430]                     |     r0 = *(0x0000454c);
    0x0000411e add r0, pc                                |     r0 += pc;
    0x00004120 bl 0xc1f0                                 |     fcn_0000c1f0 ();
    0x00004124 ldr.w r3, [fp, 0x20c]                     |     r3 = *(arg_20ch);
    0x00004128 b.w 0x2264                                |     goto label_53;
                                                         | label_175:
    0x0000412c ldr.w r3, [pc, 0x420]                     |     r3 = *(0x00004550);
    0x00004130 str r2, [r7, 0x38]                        |     *((r7 + 0x38)) = r2;
    0x00004132 add r3, pc                                |     r3 += pc;
    0x00004134 str.w r2, [r3, 0x1d8]                     |     __asm ("str.w r2, [r3, 0x1d8]");
    0x00004138 b.w 0x3836                                |     goto label_54;
                                                         | label_191:
    0x00004144 eor r0, r3, 1                             |     r0 = r3 ^ 1;
                                                         | label_190:
    0x00004148 bl 0x14c28                                |     fcn_00014c28 (r0);
    0x0000414c ldr.w r3, [sl, 0x164]                     |     r3 = *((sl + 0x164));
    0x00004150 b 0x3cb8                                  |     goto label_55;
                                                         | label_189:
    0x00004152 ldr.w r2, [fp, 0x24]                      |     r2 = *(arg_24h);
    0x00004156 cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x00004158 beq.w 0x42b8                              |         goto label_198;
                                                         |     }
    0x0000415c ldr.w r4, [fp, 0xc]                       |     r4 = *(arg_ch);
    0x00004160 cmp r4, 0                                 |     
                                                         |     if (r4 == 0) {
    0x00004162 beq.w 0x3cb8                              |         goto label_55;
                                                         |     }
    0x00004166 ldr r3, [pc, 0x3f0]                       |     
    0x00004168 ldr.w r8, [pc, 0x3f0]                     |     r8 = *(0x0000455c);
    0x0000416c ldr.w sb, [pc, 0x3f0]                     |     sb = *(0x00004560);
    0x00004170 add r3, pc                                |     r3 = 0x86ce;
    0x00004172 add r8, pc                                |     r8 += pc;
    0x00004174 str r3, [r7, 0x44]                        |     *((r7 + 0x44)) = r3;
    0x00004176 add sb, pc                                |     sb += pc;
    0x00004178 b 0x4188                                  |     
                                                         |     while (r0 == 0) {
    0x0000417a mov r1, r5                                |         r1 = r5;
    0x0000417c movs r2, 8                                |         r2 = 8;
    0x0000417e mov r0, sb                                |         r0 = sb;
    0x00004180 bl 0xc264                                 |         fcn_0000c264 ();
                                                         | label_56:
    0x00004184 ldr r4, [r4, 0xc]                         |         r4 = *((r4 + 0xc));
                                                         |         if (r4 == 0) {
    0x00004186 cbz r4, 0x41c2                            |             goto label_199;
                                                         |         }
    0x00004188 ldr r3, [r4, 0x1c]                        |         r3 = *((r4 + 0x1c));
    0x0000418a ldr r5, [r3]                              |         r5 = *(r3);
    0x0000418c ldrb.w r3, [r4, 0x199]                    |         r3 = *((r4 + 0x199));
    0x00004190 lsls r1, r3, 0x1e                         |         r1 = r3 << 0x1e;
                                                         |         if (r1 < r3) {
    0x00004192 bmi 0x41b8                                |             goto label_200;
                                                         |         }
    0x00004194 ldr r2, [r4, 4]                           |         r2 = *((r4 + 4));
    0x00004196 mov r0, r5                                |         r0 = r5;
    0x00004198 mov r1, r2                                |         r1 = r2;
    0x0000419a str r2, [r7, 0x40]                        |         *((r7 + 0x40)) = r2;
    0x0000419c bl 0x14f30                                |         fcn_00014f30 (r0, r1, r2, r3);
    0x000041a0 ldr.w r3, [r4, 0x1b4]                     |         r3 = *((r4 + 0x1b4));
    0x000041a4 ldr r2, [r7, 0x40]                        |         r2 = *((r7 + 0x40));
    0x000041a6 cmp r0, 0                                 |         
    0x000041a8 beq 0x417a                                |         
                                                         |     }
    0x000041aa str r3, [sp]                              |     *(sp) = r3;
    0x000041ac mov r1, r5                                |     r1 = r5;
    0x000041ae movs r3, 8                                |     r3 = 8;
    0x000041b0 mov r0, r8                                |     r0 = r8;
    0x000041b2 bl 0xc264                                 |     fcn_0000c264 ();
    0x000041b6 b 0x4184                                  |     goto label_56;
                                                         | label_200:
    0x000041b8 ldr r0, [r7, 0x44]                        |     r0 = *((r7 + 0x44));
    0x000041ba mov r1, r5                                |     r1 = r5;
    0x000041bc bl 0xc264                                 |     fcn_0000c264 ();
    0x000041c0 b 0x4184                                  |     goto label_56;
                                                         | label_199:
    0x000041c2 ldr.w r3, [sl, 0x164]                     |     r3 = *((sl + 0x164));
    0x000041c6 b 0x3cb8                                  |     goto label_55;
                                                         | label_176:
    0x000041c8 movs r0, 1                                |     r0 = 1;
    0x000041ca bl 0x14c28                                |     fcn_00014c28 (r0);
    0x000041ce b.w 0x386e                                |     goto label_57;
                                                         | label_75:
    0x00004206 ldr r1, [pc, 0x368]                       |     
    0x00004208 mov r0, r6                                |     r0 = r6;
    0x0000420a add r1, pc                                |     r1 = 0x8780;
    0x0000420c bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00004210 cmp r0, 0                                 |     
                                                         |     if (r0 != 0) {
    0x00004212 bne.w 0x44f8                              |         goto label_201;
                                                         |     }
    0x00004216 movs r3, 6                                |     r3 = 6;
    0x00004218 subs r4, 1                                |     r4--;
    0x0000421a adds r5, 4                                |     r5 += 4;
    0x0000421c str.w r3, [sl, 0x164]                     |     __asm ("str.w r3, [sl, 0x164]");
    0x00004220 b.w 0x1a2e                                |     goto label_0;
                                                         | label_193:
    0x00004224 ldr r3, [pc, 0x34c]                       |     
    0x00004226 add r3, pc                                |     
    0x00004228 ldr r3, [r3]                              |     r3 = *(0x879e);
    0x0000422a cmp r3, 1                                 |     
                                                         |     if (r3 < 1) {
    0x0000422c bls.w 0x3e98                              |         goto label_58;
                                                         |     }
    0x00004230 ldr r5, [pc, 0x344]                       |     
    0x00004232 movs r4, 1                                |     r4 = 1;
    0x00004234 ldr.w r8, [pc, 0x344]                     |     r8 = *(0x0000457c);
    0x00004238 add r5, pc                                |     r5 = 0x87b4;
    0x0000423a add r8, pc                                |     r8 += pc;
                                                         |     do {
    0x0000423c ldr r3, [r5]                              |         r3 = *(r5);
    0x0000423e movs r2, 0                                |         r2 = 0;
    0x00004240 mov r1, fp                                |         r1 = fp;
    0x00004242 ldr.w r0, [r3, r4, lsl 2]                 |         offset_7 = r4 << 2;
                                                         |         r0 = *((r3 + offset_7));
    0x00004246 ldr.w r3, [fp, 0x1d4]                     |         r3 = *(arg_1d4h);
    0x0000424a str r2, [r6]                              |         *(r6) = r2;
    0x0000424c str r2, [sp, 0xc]                         |         *(arg_ch) = r2;
    0x0000424e str r2, [sp]                              |         *(sp) = r2;
    0x00004250 movs r2, 1                                |         r2 = 1;
    0x00004252 strd r2, r2, [sp, 4]                      |         __asm ("strd r2, r2, [sp, 4]");
    0x00004256 mov r2, r6                                |         r2 = r6;
    0x00004258 bl 0x7ac8                                 |         fcn_00007ac8 (r0, r1, r2, r3, r4, r5, r6);
    0x0000425c lsls r1, r4, 2                            |         r1 = r4 << 2;
    0x0000425e mov r2, r0                                |         r2 = r0;
                                                         |         if (r0 != 0) {
    0x00004260 cbz r0, 0x4264                            |             
    0x00004262 ldr r2, [r0]                              |             r2 = *(r0);
                                                         |         }
    0x00004264 ldr r0, [r5]                              |         r0 = *(r5);
    0x00004266 adds r4, 1                                |         r4++;
    0x00004268 ldr r3, [r6]                              |         r3 = *(r6);
    0x0000426a ldr r1, [r0, r1]                          |         r1 = *((r0 + r1));
    0x0000426c mov r0, r8                                |         r0 = r8;
    0x0000426e ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x00004270 str r2, [sp, 4]                           |         *(arg_4h) = r2;
    0x00004272 movs r2, 8                                |         r2 = 8;
    0x00004274 str r2, [sp]                              |         *(sp) = r2;
    0x00004276 bl 0xc264                                 |         fcn_0000c264 ();
    0x0000427a ldr r3, [pc, 0x304]                       |         
    0x0000427c add r3, pc                                |         
    0x0000427e ldr r3, [r3]                              |         r3 = *(0x8802);
    0x00004280 cmp r3, r4                                |         
    0x00004282 bhi 0x423c                                |         
                                                         |     } while (r3 > r4);
    0x00004284 b 0x3e98                                  |     goto label_58;
                                                         | label_192:
    0x00004286 ldr r0, [r7, 0x44]                        |     r0 = *((r7 + 0x44));
    0x00004288 bl 0xc264                                 |     fcn_0000c264 ();
    0x0000428c b 0x3c86                                  |     goto label_59;
                                                         | label_114:
    0x000042a6 ldr r3, [pc, 0x2dc]                       |     
    0x000042a8 movs r2, 0x6e                             |     r2 = 0x6e;
    0x000042aa ldr r1, [pc, 0x2dc]                       |     
    0x000042ac ldr r0, [pc, 0x2dc]                       |     
    0x000042ae add r3, pc                                |     r3 = 0x8838;
    0x000042b0 add r1, pc                                |     r1 = 0x883e;
    0x000042b2 add r0, pc                                |     r0 = 0x8842;
    0x000042b4 bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_198:
    0x000042b8 ldr r0, [pc, 0x2d4]                       |     
    0x000042ba add r0, pc                                |     r0 = 0x884e;
    0x000042bc bl 0xc264                                 |     fcn_0000c264 ();
    0x000042c0 ldr.w r3, [sl, 0x164]                     |     r3 = *((sl + 0x164));
    0x000042c4 b 0x3cb8                                  |     goto label_55;
                                                         | label_181:
    0x000042c6 add r3, r5                                |     r3 += r5;
    0x000042c8 cmp r5, r3                                |     
                                                         |     if (r5 >= r3) {
    0x000042ca bhs 0x4340                                |         goto label_202;
                                                         |     }
    0x000042cc mov r0, r3                                |     r0 = r3;
    0x000042ce b 0x42d4                                  |     
                                                         |     while (r1 != 0) {
    0x000042d0 cmp r5, r0                                |         
                                                         |         if (r5 == r0) {
    0x000042d2 beq 0x4340                                |             goto label_202;
                                                         |         }
    0x000042d4 ldrb r2, [r0, -0x1]                       |         r2 = *((r0 - 0x1));
    0x000042d8 mov r8, r0                                |         r8 = r0;
    0x000042da subs r0, 1                                |         r0--;
    0x000042dc mov r3, r0                                |         r3 = r0;
    0x000042de cmp r2, 0x20                              |         
    0x000042e0 it ne                                     |         
                                                         |         if (r2 != 0x20) {
    0x000042e2 cmpne r2, 0x3a                            |             __asm ("cmpne r2, 0x3a");
                                                         |         }
    0x000042e4 sub.w r2, r2, 9                           |         r2 -= 9;
    0x000042e8 ite ne                                    |         
                                                         |         if (r2 == 0x20) {
    0x000042ea movne r1, 1                               |             r1 = 1;
                                                         |         }
                                                         |         if (r2 != 0x20) {
    0x000042ec moveq r1, 0                               |             r1 = 0;
                                                         |         }
    0x000042ee cmp r2, 1                                 |         
    0x000042f0 ite ls                                    |         
                                                         |         if (r2 > 1) {
    0x000042f2 movls r1, 0                               |             r1 = 0;
                                                         |         }
                                                         |         if (r2 <= 1) {
    0x000042f4 andhi r1, r1, 1                           |             r1 &= 1;
                                                         |         }
    0x000042f8 cmp r1, 0                                 |         
    0x000042fa bne 0x42d0                                |         
                                                         |     }
    0x000042fc cmp r5, r8                                |     
    0x000042fe it lo                                     |     
                                                         |     if (r5 < r8) {
    0x00004300 strblo r1, [r8, -0x1]                     |         *((r8 - 0x1)) = r1;
                                                         |         goto label_203;
                                                         |     }
                                                         |     if (r5 <= r8) {
                                                         | label_203:
    0x00004304 blo.w 0x39ec                              |         goto label_60;
                                                         |     }
                                                         | label_63:
    0x00004308 cmp r8, r5                                |     
                                                         |     if (r8 == r5) {
    0x0000430a beq.w 0x3a14                              |         goto label_61;
                                                         |     }
    0x0000430e b.w 0x39ec                                |     goto label_60;
                                                         | label_174:
    0x00004312 ldr r3, [pc, 0x280]                       |     
    0x00004314 movw r2, 0x414                            |     r2 = 0x414;
    0x00004318 ldr r1, [pc, 0x27c]                       |     
    0x0000431a ldr r0, [pc, 0x280]                       |     
    0x0000431c add r3, pc                                |     r3 = 0x88b6;
    0x0000431e add r1, pc                                |     r1 = 0x88ba;
    0x00004320 add r0, pc                                |     r0 = 0x88c2;
    0x00004322 bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_178:
    0x00004326 ldrb r3, [r0, -0x1]                       |     r3 = *((r0 - 0x1));
    0x0000432a subs r2, r0, 1                            |     r2 = r0 - 1;
    0x0000432c cmp r3, 0x20                              |     
    0x0000432e it ne                                     |     
                                                         |     if (r3 == 0x20) {
    0x00004330 cmpne r3, 0x3a                            |         __asm ("cmpne r3, 0x3a");
                                                         |         goto label_204;
                                                         |     }
                                                         |     if (r3 == 0x20) {
                                                         | label_204:
    0x00004332 beq.w 0x39e0                              |         goto label_62;
                                                         |     }
    0x00004336 subs r3, 9                                |     r3 -= 9;
    0x00004338 cmp r3, 1                                 |     
                                                         |     if (r3 < 1) {
    0x0000433a bls.w 0x39e0                              |         goto label_62;
                                                         |     }
    0x0000433e mov r3, r5                                |     r3 = r5;
                                                         | label_202:
    0x00004340 mov r8, r3                                |     r8 = r3;
    0x00004342 b 0x4308                                  |     goto label_63;
                                                         | label_172:
    0x00004344 str r2, [r7, 0x40]                        |     *((r7 + 0x40)) = r2;
    0x00004346 b.w 0x2048                                |     goto label_64;
                                                         | label_82:
    0x0000435e ldr r0, [pc, 0x24c]                       |     
    0x00004360 add r0, pc                                |     r0 = 0x8912;
    0x00004362 bl 0xc2a4                                 |     dl_fatal_printf ();
                                                         | label_168:
    0x00004366 ldr r0, [pc, 0x248]                       |     
    0x00004368 add r0, pc                                |     r0 = 0x891e;
    0x0000436a bl 0xc2a4                                 |     dl_fatal_printf ();
                                                         | label_138:
    0x0000436e ldr r3, [pc, 0x244]                       |     
    0x00004370 movw r2, 0x70a                            |     r2 = 0x70a;
    0x00004374 ldr r1, [pc, 0x240]                       |     
    0x00004376 ldr r0, [pc, 0x244]                       |     
    0x00004378 add r3, pc                                |     r3 = 0x8932;
    0x0000437a add r1, pc                                |     r1 = 0x8936;
    0x0000437c add r0, pc                                |     r0 = 0x893e;
    0x0000437e bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_133:
    0x00004382 ldr r0, [pc, 0x23c]                       |     
    0x00004384 add r0, pc                                |     r0 = 0x894a;
    0x00004386 bl 0xc2a4                                 |     dl_fatal_printf ();
                                                         | label_128:
    0x0000438a ldr r3, [pc, 0x238]                       |     
    0x0000438c movw r2, 0x6a6                            |     r2 = 0x6a6;
    0x00004390 ldr r1, [pc, 0x234]                       |     
    0x00004392 ldr r0, [pc, 0x238]                       |     
    0x00004394 add r3, pc                                |     r3 = 0x895e;
    0x00004396 add r1, pc                                |     r1 = 0x8962;
    0x00004398 add r0, pc                                |     r0 = 0x896a;
    0x0000439a bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_129:
    0x0000439e ldr r3, [pc, 0x230]                       |     
    0x000043a0 movw r2, 0x6a7                            |     r2 = 0x6a7;
    0x000043a4 ldr r1, [pc, 0x22c]                       |     
    0x000043a6 ldr r0, [pc, 0x230]                       |     
    0x000043a8 add r3, pc                                |     r3 = 0x897e;
    0x000043aa add r1, pc                                |     r1 = 0x8982;
    0x000043ac add r0, pc                                |     r0 = 0x898a;
    0x000043ae bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_98:
    0x000043b2 ldr r3, [pc, 0x228]                       |     
    0x000043b4 movs r2, 0x7e                             |     r2 = 0x7e;
    0x000043b6 ldr r1, [pc, 0x228]                       |     
    0x000043b8 ldr r0, [pc, 0x228]                       |     
    0x000043ba add r3, pc                                |     r3 = 0x899c;
    0x000043bc add r1, pc                                |     r1 = 0x89a2;
    0x000043be add r0, pc                                |     r0 = 0x89a6;
    0x000043c0 bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_99:
    0x000043c4 ldr r3, [pc, 0x220]                       |     
    0x000043c6 movs r2, 0x82                             |     r2 = 0x82;
    0x000043c8 ldr r1, [pc, 0x220]                       |     
    0x000043ca ldr r0, [pc, 0x224]                       |     
    0x000043cc add r3, pc                                |     r3 = 0x89b8;
    0x000043ce add r1, pc                                |     r1 = 0x89be;
    0x000043d0 add r0, pc                                |     r0 = 0x89c6;
    0x000043d2 bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_97:
    0x000043d6 ldr r3, [pc, 0x21c]                       |     
    0x000043d8 movs r2, 0x78                             |     r2 = 0x78;
    0x000043da ldr r1, [pc, 0x21c]                       |     
    0x000043dc ldr r0, [pc, 0x21c]                       |     
    0x000043de add r3, pc                                |     r3 = 0x89d8;
    0x000043e0 add r1, pc                                |     r1 = 0x89de;
    0x000043e2 add r0, pc                                |     r0 = 0x89e2;
    0x000043e4 bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_126:
    0x000043e8 ldr r0, [pc, 0x214]                       |     
    0x000043ea add r0, pc                                |     r0 = 0x89ee;
    0x000043ec bl 0xc2a4                                 |     dl_fatal_printf ();
                                                         | label_108:
    0x000043f0 ldr r3, [pc, 0x210]                       |     
    0x000043f2 movs r2, 0x3d                             |     r2 = 0x3d;
    0x000043f4 ldr r1, [pc, 0x210]                       |     
    0x000043f6 ldr r0, [pc, 0x214]                       |     
    0x000043f8 add r3, pc                                |     r3 = 0x8a00;
    0x000043fa add r1, pc                                |     r1 = 0x8a06;
    0x000043fc add r0, pc                                |     r0 = 0x8a0e;
    0x000043fe bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_149:
    0x00004402 ldr r3, [pc, 0x20c]                       |     
    0x00004404 movw r2, 0x7bb                            |     r2 = 0x7bb;
    0x00004408 ldr r1, [pc, 0x208]                       |     
    0x0000440a ldr r0, [pc, 0x20c]                       |     
    0x0000440c add r3, pc                                |     r3 = 0x8a22;
    0x0000440e add r1, pc                                |     r1 = 0x8a26;
    0x00004410 add r0, pc                                |     r0 = 0x8a2e;
    0x00004412 bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_118:
    0x00004416 ldr r3, [pc, 0x204]                       |     
    0x00004418 movs r2, 0x61                             |     r2 = 0x61;
    0x0000441a ldr r1, [pc, 0x204]                       |     
    0x0000441c ldr r0, [pc, 0x204]                       |     
    0x0000441e add r3, pc                                |     r3 = 0x8a40;
    0x00004420 add r1, pc                                |     r1 = 0x8a46;
    0x00004422 add r0, pc                                |     r0 = 0x8a4a;
    0x00004424 bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_90:
    0x00004428 ldr r3, [pc, 0x1fc]                       |     
    0x0000442a movw r2, 0x64b                            |     r2 = 0x64b;
    0x0000442e ldr r1, [pc, 0x1fc]                       |     
    0x00004430 ldr r0, [pc, 0x1fc]                       |     
    0x00004432 add r3, pc                                |     r3 = 0x8a5e;
    0x00004434 add r1, pc                                |     r1 = 0x8a66;
    0x00004436 add r0, pc                                |     r0 = 0x8a6a;
    0x00004438 bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_119:
    0x0000443c ldr r3, [pc, 0x1f4]                       |     
    0x0000443e movs r2, 0x62                             |     r2 = 0x62;
    0x00004440 ldr r1, [pc, 0x1f4]                       |     
    0x00004442 ldr r0, [pc, 0x1f8]                       |     
    0x00004444 add r3, pc                                |     r3 = 0x8a7c;
    0x00004446 add r1, pc                                |     r1 = 0x8a82;
    0x00004448 add r0, pc                                |     r0 = 0x8a8a;
    0x0000444a bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_147:
    0x0000444e ldr r3, [pc, 0x1f0]                       |     
    0x00004450 movw r2, 0x7b7                            |     r2 = 0x7b7;
    0x00004454 ldr r1, [pc, 0x1ec]                       |     
    0x00004456 ldr r0, [pc, 0x1f0]                       |     
    0x00004458 add r3, pc                                |     r3 = 0x8a9e;
    0x0000445a add r1, pc                                |     r1 = 0x8aa2;
    0x0000445c add r0, pc                                |     r0 = 0x8aaa;
    0x0000445e bl 0x11f30                                |     fcn_00011f30 (r0);
    0x00004462 ldr r3, [pc, 0x1e8]                       |     
    0x00004464 movw r2, 0x58f                            |     r2 = 0x58f;
    0x00004468 ldr r1, [pc, 0x1e4]                       |     
    0x0000446a ldr r0, [pc, 0x1e8]                       |     
    0x0000446c add r3, pc                                |     r3 = 0x8abe;
    0x0000446e add r1, pc                                |     r1 = 0x8ac2;
    0x00004470 add r0, pc                                |     r0 = 0x8aca;
    0x00004472 bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_89:
    0x00004476 ldr r3, [pc, 0x1e0]                       |     
    0x00004478 movw r2, 0x646                            |     r2 = 0x646;
    0x0000447c ldr r1, [pc, 0x1dc]                       |     
    0x0000447e ldr r0, [pc, 0x1e0]                       |     
    0x00004480 add r3, pc                                |     r3 = 0x8ade;
    0x00004482 add r1, pc                                |     r1 = 0x8ae2;
    0x00004484 add r0, pc                                |     r0 = 0x8aea;
    0x00004486 bl 0x11f30                                |     fcn_00011f30 (r0);
    0x0000448a ldr r3, [pc, 0x1d8]                       |     
    0x0000448c movw r2, 0x597                            |     r2 = 0x597;
    0x00004490 ldr r1, [pc, 0x1d4]                       |     
    0x00004492 ldr r0, [pc, 0x1d8]                       |     
    0x00004494 add r3, pc                                |     r3 = 0x8afe;
    0x00004496 add r1, pc                                |     r1 = 0x8b02;
    0x00004498 add r0, pc                                |     r0 = 0x8b0a;
    0x0000449a bl 0x11f30                                |     fcn_00011f30 (r0);
    0x0000449e ldr r3, [pc, 0x1d0]                       |     
    0x000044a0 movw r2, 0x8c7                            |     r2 = 0x8c7;
    0x000044a4 ldr r1, [pc, 0x1cc]                       |     
    0x000044a6 ldr r0, [pc, 0x1d0]                       |     
    0x000044a8 add r3, pc                                |     r3 = 0x8b1e;
    0x000044aa add r1, pc                                |     r1 = 0x8b22;
    0x000044ac add r0, pc                                |     r0 = 0x8b2a;
    0x000044ae bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_77:
    0x000044b2 ldr r3, [pc, 0x1c8]                       |     
    0x000044b4 add r3, pc                                |     r3 = 0x8b36;
    0x000044b6 ldr r0, [r3]                              |     r0 = *(0x8b36);
    0x000044b8 bl 0x134a8                                |     fcn_000134a8 (r0);
                                                         | label_171:
    0x000044bc ldr r3, [pc, 0x1c0]                       |     
    0x000044be movw r2, 0x6db                            |     r2 = 0x6db;
    0x000044c2 ldr r1, [pc, 0x1c0]                       |     
    0x000044c4 ldr r0, [pc, 0x1c0]                       |     
    0x000044c6 add r3, pc                                |     r3 = 0x8b4a;
    0x000044c8 add r1, pc                                |     r1 = 0x8b52;
    0x000044ca add r0, pc                                |     r0 = 0x8b56;
    0x000044cc bl 0x11f30                                |     fcn_00011f30 (r0);
    0x000044d0 ldr r3, [pc, 0x1b8]                       |     
    0x000044d2 movw r2, 0x983                            |     r2 = 0x983;
    0x000044d6 ldr r1, [pc, 0x1b8]                       |     
    0x000044d8 ldr r0, [pc, 0x1b8]                       |     
    0x000044da add r3, pc                                |     r3 = 0x8b6a;
    0x000044dc add r1, pc                                |     r1 = 0x8b72;
    0x000044de add r0, pc                                |     r0 = 0x8b76;
    0x000044e0 bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_165:
    0x000044e4 ldr r3, [pc, 0x1b0]                       |     
    0x000044e6 mov.w r2, 0x3d0                           |     r2 = 0x3d0;
    0x000044ea ldr r1, [pc, 0x1b0]                       |     
    0x000044ec ldr r0, [pc, 0x1b0]                       |     
    0x000044ee add r3, pc                                |     r3 = 0x8b8a;
    0x000044f0 add r1, pc                                |     r1 = 0x8b92;
    0x000044f2 add r0, pc                                |     r0 = 0x8b96;
    0x000044f4 bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_201:
    0x000044f8 ldr r1, [pc, 0x1a8]                       |     
    0x000044fa mov sb, r6                                |     sb = r6;
    0x000044fc mov r0, sb                                |     r0 = sb;
    0x000044fe ldr r6, [r7, 0x18]                        |     r6 = *((r7 + 0x18));
    0x00004500 add r1, pc                                |     r1 = 0x8ba8;
    0x00004502 bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
                                                         |     if (r0 == 0) {
    0x00004506 cbz r0, 0x4524                            |         goto label_205;
                                                         |     }
    0x00004508 ldrb.w r3, [sb]                           |     r3 = *(sb);
    0x0000450c cmp r3, 0x2d                              |     
                                                         |     if (r3 != 0x2d) {
    0x0000450e bne.w 0x1e0e                              |         goto label_65;
                                                         |     }
    0x00004512 ldrb.w r3, [sb, 1]                        |     r3 = *((sb + 1));
    0x00004516 cmp r3, 0x2d                              |     
                                                         |     if (r3 != 0x2d) {
    0x00004518 bne.w 0x1e0e                              |         goto label_65;
                                                         |     }
    0x0000451c ldr r0, [r7, 0x1c]                        |     r0 = *((r7 + 0x1c));
    0x0000451e mov r1, sb                                |     r1 = sb;
    0x00004520 bl 0x12f50                                |     r0 = fcn_00012f50 (r0, r1);
                                                         | label_205:
    0x00004524 bl 0x12f8c                                |     fcn_00012f8c ();
    0x00004528 cmp r4, r3                                |     
    0x0000452a movs r1, r0                               |     r1 = r0;
    0x0000452c strh r0, [r3, 0x10]                       |     *((r3 + 0x10)) = r0;
    0x0000452e movs r2, r0                               |     r2 = r0;
    0x00004530 ldr r0, [sp, 0x238]                       |     r0 = *(arg_238h);
    0x00004532 movs r2, r0                               |     r2 = r0;
    0x00004534 cmp r2, r1                                |     
    0x00004536 movs r1, r0                               |     r1 = r0;
    0x00004538 ldr r0, [sp, 0x190]                       |     r0 = *(arg_190h);
    0x0000453a movs r2, r0                               |     r2 = r0;
    0x0000453c subs r7, 0xe2                             |     r7 -= 0xe2;
    0x0000453e movs r1, r0                               |     r1 = r0;
    0x00004540 ldm r3, {r0, r1, r2, r3, r5, r6, r7}      |     r0 = *(r3);
                                                         |     r1 = *((r3 + 4));
                                                         |     r2 = *((r3 + 8));
                                                         |     r3 = *((r3 + 12));
                                                         |     r5 = *((r3 + 16));
                                                         |     r6 = *((r3 + 20));
                                                         |     r7 = *((r3 + 24));
    0x00004542 invalid                                   |     
                                                         |     do {
    0x00009c2e ldr r1, [r5, 8]                           |         r1 = *((r5 + 8));
    0x00009c30 ldr r2, [r2, 4]                           |         r2 = *((r2 + 4));
    0x00009c32 add r3, r1                                |         r3 += r1;
    0x00009c34 add r3, r2                                |         r3 += r2;
    0x00009c36 str.w r3, [sl, sb]                        |         __asm ("str.w r3, [sl, sb]");
    0x00009c3a b 0x9b44                                  |         void (*0x9b44)() ();
    0x0000a56a str r1, [r7, 0x44]                        |         *((r7 + 0x44)) = r1;
    0x0000a56c bl 0x8dbc                                 |         fcn_00008dbc (r0);
    0x0000a570 ldr r1, [r7, 0x44]                        |         r1 = *((r7 + 0x44));
    0x0000a572 ldr r2, [r7, 0x54]                        |         r2 = *((r7 + 0x54));
    0x0000a574 ldr.w r3, [r1, 0x244]                     |         r3 = *((r1 + 0x244));
    0x0000a578 b.w 0x9c2e                                |         
                                                         |     } while (1);
                                                         | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x47f0 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.000047f0 ()                                      | void fcn_000047f0 (int16_t arg_7h, int16_t arg_1dch, int16_t arg1, int16_t arg2, int16_t arg3, uint32_t arg4) {
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int32_t var_4h_2;
                                                                 |     int32_t var_8h_2;
                                                                 |     int32_t var_ch;
                                                                 |     int32_t var_10h;
                                                                 |     int32_t var_14h;
                                                                 |     int16_t var_0h_2;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x000047f0 ldr.w ip, [pc, 0x404]                             |     ip = *(0x00004bf8);
    0x000047f4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000047f8 sub sp, 0x24                                      |     
    0x000047fa add r7, sp, 8                                     |     r7 += var_8h;
    0x000047fc add ip, pc                                        |     
    0x000047fe mov r6, r1                                        |     r6 = r1;
    0x00004800 ldr.w r5, [ip, 0x1dc]                             |     r5 = *((ip + 0x1dc));
    0x00004804 ldrb.w r4, [r7, 0x44]                             |     r4 = *((r7 + 0x44));
    0x00004808 str r0, [r7, 0x10]                                |     var_10h = r0;
    0x0000480a cmp r5, 0                                         |     
    0x0000480c it ne                                             |     
                                                                 |     if (r5 != 0) {
    0x0000480e cmpne r3, 0                                       |         __asm ("cmpne r3, 0");
                                                                 |     }
    0x00004810 str r4, [r7, 8]                                   |     var_8h_2 = r4;
                                                                 |     if (r5 != 0) {
    0x00004812 bne.w 0x4afa                                      |         goto label_14;
                                                                 |     }
                                                                 | label_12:
    0x00004816 ldr r0, [r7, 0x10]                                |     r0 = var_10h;
    0x00004818 mov.w r1, 0x80000                                 |     r1 = 0x80000;
    0x0000481c bl 0x1488c                                        |     r0 = fcn_0001488c (r0);
    0x00004820 cmp.w r0, -1                                      |     
    0x00004824 mov sb, r0                                        |     sb = r0;
                                                                 |     if (r0 == -1) {
    0x00004826 beq.w 0x4b66                                      |         goto label_15;
                                                                 |     }
    0x0000482a ldr r3, [pc, 0x3d0]                               |     
    0x0000482c movs r4, 0                                        |     r4 = 0;
    0x0000482e mov r1, r4                                        |     r1 = r4;
    0x00004830 add r3, pc                                        |     r3 = 0x9432;
    0x00004832 str r4, [r3]                                      |     *(r3) = r4;
    0x00004834 mov r3, r6                                        |     r3 = r6;
    0x00004836 str r4, [r3], 4                                   |     *(r3) = r4;
                                                                 |     r3 += 4;
    0x0000483a str r3, [r7, 0x14]                                |     var_14h = r3;
                                                                 |     do {
    0x0000483c ldr r3, [r7, 0x14]                                |         r3 = var_14h;
    0x0000483e rsb.w r2, r1, 0x200                               |         r2 = 0x200 - r1;
    0x00004842 mov r0, sb                                        |         r0 = sb;
    0x00004844 add r1, r3                                        |         r1 += r3;
    0x00004846 bl 0x148ec                                        |         r0 = fcn_000148ec ();
    0x0000484a cmp r0, 0                                         |         
                                                                 |         if (r0 <= 0) {
    0x0000484c ble.w 0x4af0                                      |             goto label_16;
                                                                 |         }
    0x00004850 ldr r3, [r6]                                      |         r3 = *(r6);
    0x00004852 adds r1, r0, r3                                   |         r1 = r0 + r3;
    0x00004854 cmp r1, 0x33                                      |         
    0x00004856 str r1, [r6]                                      |         *(r6) = r1;
    0x00004858 bls 0x483c                                        |         
                                                                 |     } while (r1 < 0x33);
    0x0000485a mov r4, r1                                        |     r4 = r1;
                                                                 | label_11:
    0x0000485c cmp r4, 0x33                                      |     
                                                                 |     if (r4 <= 0x33) {
    0x0000485e ble.w 0x4a82                                      |         goto label_17;
                                                                 |     }
    0x00004862 ldr r1, [pc, 0x39c]                               |     
    0x00004864 movs r2, 8                                        |     r2 = 8;
    0x00004866 ldr r0, [r7, 0x14]                                |     r0 = var_14h;
    0x00004868 add r1, pc                                        |     r1 = 0x946e;
    0x0000486a bl 0x157dc                                        |     r0 = fcn_000157dc (r0, r1, r2);
    0x0000486e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00004870 bne.w 0x4ac0                                      |         goto label_18;
                                                                 |     }
                                                                 | label_8:
    0x00004874 ldr r3, [r6, 0x28]                                |     r3 = *((r6 + 0x28));
    0x00004876 mov.w r2, 0x200                                   |     
    0x0000487a movt r2, 0x500                                    |     r2 = 0x5000200;
    0x0000487e and r3, r3, 0xff00ff00                            |     r3 &= 0xff00ff00;
    0x00004882 bic r3, r3, 0xfd00                                |     r3 = BIT_MASK (r3, 0xfd00);
    0x00004886 cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x00004888 beq.w 0x4a1c                                      |         goto label_9;
                                                                 |     }
    0x0000488c ldrb r3, [r6, 0xc]                                |     r3 = *((r6 + 0xc));
    0x0000488e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00004890 bne.w 0x4a10                                      |         goto label_19;
                                                                 |     }
                                                                 | label_2:
    0x00004894 ldr r1, [pc, 0x36c]                               |     
    0x00004896 movs r2, 7                                        |     r2 = 7;
    0x00004898 add.w r0, r6, 0xd                                 |     r0 = r6 + 0xd;
    0x0000489c add r1, pc                                        |     r1 = 0x94a4;
    0x0000489e adds r1, 9                                        |     r1 += 9;
    0x000048a0 bl 0x157dc                                        |     r0 = fcn_000157dc (r0, r1, r2);
    0x000048a4 mov r5, r0                                        |     r5 = r0;
    0x000048a6 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000048a8 bne.w 0x4a1c                                      |         goto label_9;
                                                                 |     }
    0x000048ac ldr r3, [r6, 0x18]                                |     r3 = *((r6 + 0x18));
    0x000048ae cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x000048b0 bne.w 0x4ae6                                      |         goto label_20;
                                                                 |     }
    0x000048b4 ldrh r3, [r6, 0x16]                               |     r3 = *((r6 + 0x16));
    0x000048b6 cmp r3, 0x28                                      |     
                                                                 |     if (r3 != 0x28) {
    0x000048b8 bne.w 0x4aec                                      |         goto label_21;
                                                                 |     }
    0x000048bc ldrh r3, [r6, 0x14]                               |     r3 = *((r6 + 0x14));
    0x000048be subs r3, 2                                        |     r3 -= 2;
    0x000048c0 uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x000048c2 cmp r3, 1                                         |     
                                                                 |     if (r3 > 1) {
    0x000048c4 bhi.w 0x4af4                                      |         goto label_22;
                                                                 |     }
    0x000048c8 ldrh r3, [r6, 0x2e]                               |     r3 = *((r6 + 0x2e));
    0x000048ca cmp r3, 0x20                                      |     
                                                                 |     if (r3 != 0x20) {
    0x000048cc bne.w 0x49f4                                      |         goto label_23;
                                                                 |     }
    0x000048d0 ldrh r2, [r6, 0x30]                               |     r2 = *((r6 + 0x30));
    0x000048d2 ldr r3, [r6, 0x20]                                |     r3 = *((r6 + 0x20));
    0x000048d4 lsl.w sl, r2, 5                                   |     sl = r2 << 5;
    0x000048d8 add.w r1, sl, r3                                  |     r1 = sl + r3;
    0x000048dc cmp r1, r4                                        |     
                                                                 |     if (r1 > r4) {
    0x000048de bhi.w 0x4a56                                      |         goto label_24;
                                                                 |     }
    0x000048e2 ldr r1, [r7, 0x14]                                |     r1 = var_14h;
    0x000048e4 add.w r8, r1, r3                                  |     r8 = r1 + r3;
                                                                 | label_4:
    0x000048e8 add sl, r8                                        |     sl += r8;
    0x000048ea cmp r8, sl                                        |     
                                                                 |     if (r8 >= sl) {
    0x000048ec bhs.w 0x4b6c                                      |         goto label_25;
                                                                 |     }
    0x000048f0 ldr r3, [pc, 0x314]                               |     
    0x000048f2 mov r4, r8                                        |     r4 = r8;
    0x000048f4 ldr.w sl, [pc, 0x314]                             |     sl = *(0x00004c0c);
    0x000048f8 add r3, pc                                        |     r3 = 0x9504;
    0x000048fa add sl, pc                                        |     sl += pc;
    0x000048fc str r3, [r7, 4]                                   |     var_4h_2 = r3;
    0x000048fe movs r3, 0                                        |     r3 = 0;
    0x00004900 add.w sl, sl, 0x10                                |     sl += 0x10;
    0x00004904 str r3, [r7, 0xc]                                 |     var_ch = r3;
    0x00004906 b 0x4912                                          |     
                                                                 |     while (r3 != 4) {
                                                                 | label_0:
    0x00004908 add.w r3, r8, r2, lsl 5                           |         r3 = r8 + (r2 << 5);
    0x0000490c adds r4, 0x20                                     |         r4 += 0x20;
    0x0000490e cmp r4, r3                                        |         
                                                                 |         if (r4 >= r3) {
    0x00004910 bhs 0x49d0                                        |             goto label_3;
                                                                 |         }
    0x00004912 ldr r3, [r4]                                      |         r3 = *(r4);
    0x00004914 cmp r3, 4                                         |         
    0x00004916 bne 0x4908                                        |         
                                                                 |     }
    0x00004918 ldr.w fp, [r4, 0x10]                              |     fp = *((r4 + 0x10));
    0x0000491c cmp.w fp, 0x1f                                    |     
                                                                 |     if (fp < 0x1f) {
    0x00004920 bls 0x4908                                        |         goto label_0;
                                                                 |     }
    0x00004922 ldr r3, [r4, 0x1c]                                |     r3 = *((r4 + 0x1c));
    0x00004924 subs r3, 4                                        |     r3 -= 4;
    0x00004926 bics r3, r3, 4                                    |     __asm ("bics r3, r3, 4");
                                                                 |     if (r3 != 4) {
    0x0000492a bne 0x4908                                        |         goto label_0;
                                                                 |     }
    0x0000492c ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0000492e ldr r2, [r6]                                      |     r2 = *(r6);
    0x00004930 add.w r1, fp, r3                                  |     r1 = fp + r3;
    0x00004934 cmp r1, r2                                        |     
                                                                 |     if (r1 < r2) {
    0x00004936 bls.w 0x4a7c                                      |         goto label_26;
                                                                 |     }
    0x0000493a cmp.w fp, 0x10000                                 |     
                                                                 |     if (fp <= 0x10000) {
    0x0000493e blo 0x49e4                                        |         goto label_27;
                                                                 |     }
    0x00004940 ldr r3, [r7, 4]                                   |     r3 = var_4h_2;
    0x00004942 mov r1, fp                                        |     r1 = fp;
    0x00004944 ldr r0, [r7, 0xc]                                 |     r0 = var_ch;
    0x00004946 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00004948 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x0000494a mov r5, r0                                        |     r5 = r0;
    0x0000494c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0000494e beq.w 0x4ba0                                      |         goto label_28;
                                                                 |     }
    0x00004952 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x00004954 str r0, [r7, 0xc]                                 |     var_ch = r0;
                                                                 | label_1:
    0x00004956 str r3, [sp]                                      |     *(sp) = r3;
    0x00004958 movs r3, 0                                        |     r3 = 0;
    0x0000495a mov r2, fp                                        |     r2 = fp;
    0x0000495c mov r1, r5                                        |     r1 = r5;
    0x0000495e mov r0, sb                                        |     r0 = sb;
    0x00004960 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00004962 bl 0x14914                                        |     r0 = fcn_00014914 (r0);
    0x00004966 cmp fp, r0                                        |     
                                                                 |     if (fp == r0) {
    0x00004968 beq 0x4994                                        |         goto label_5;
                                                                 |     }
    0x0000496a b 0x4b96                                          |     goto label_29;
                                                                 |     do {
    0x0000496c ldr r2, [r4, 0x1c]                                |         r2 = *((r4 + 0x1c));
    0x0000496e sub.w r0, fp, 0x20                                |         r0 = fp - 0x20;
    0x00004972 ldr r1, [r5]                                      |         r1 = *(r5);
    0x00004974 add.w r3, r2, 0xb                                 |         r3 = r2 + 0xb;
    0x00004978 add.w ip, r2, -1                                  |         
    0x0000497c add r3, r1                                        |         r3 += r1;
    0x0000497e rsbs r1, r2, 0                                    |         r1 = r2 - ;
    0x00004980 ldr r2, [r5, 4]                                   |         r2 = *((r5 + 4));
    0x00004982 ands r3, r1                                       |         r3 &= r1;
    0x00004984 add ip, r2                                        |         
    0x00004986 add r3, ip                                        |         r3 += ip;
    0x00004988 ands r3, r1                                       |         r3 &= r1;
    0x0000498a cmp r3, r0                                        |         
                                                                 |         if (r3 > r0) {
    0x0000498c bhi 0x4a52                                        |             goto label_30;
                                                                 |         }
    0x0000498e sub.w fp, fp, r3                                  |         
    0x00004992 add r5, r3                                        |         r5 += r3;
                                                                 | label_5:
    0x00004994 movs r2, 0x10                                     |         r2 = 0x10;
    0x00004996 mov r1, sl                                        |         r1 = sl;
    0x00004998 mov r0, r5                                        |         r0 = r5;
    0x0000499a bl 0x157dc                                        |         r0 = fcn_000157dc (r0, r1, r2);
    0x0000499e cmp r0, 0                                         |         
    0x000049a0 bne 0x496c                                        |         
                                                                 |     } while (r0 != 0);
    0x000049a2 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x000049a6 beq 0x4a52                                        |         goto label_30;
                                                                 |     }
    0x000049a8 ldr r0, [r5, 0x10]                                |     r0 = *((r5 + 0x10));
    0x000049aa ldrd r1, r2, [r5, 0x14]                           |     __asm ("ldrd r1, r2, [r5, 0x14]");
    0x000049ae ldr r3, [r5, 0x1c]                                |     r3 = *((r5 + 0x1c));
    0x000049b0 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000049b2 bne 0x4a3e                                        |         goto label_10;
                                                                 |     }
    0x000049b4 ldr r0, [pc, 0x258]                               |     
    0x000049b6 uxtb r1, r1                                       |     r1 = (int8_t) r1;
    0x000049b8 uxtb r2, r2                                       |     r2 = (int8_t) r2;
    0x000049ba uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x000049bc add.w r2, r2, r1, lsl 8                           |     r2 += (r1 << 8);
    0x000049c0 add r0, pc                                        |     r0 = 0x95d4;
    0x000049c2 ldr r1, [r0, 4]                                   |     r1 = *(0x95d8);
    0x000049c4 add.w r3, r3, r2, lsl 8                           |     r3 += (r2 << 8);
    0x000049c8 cmp r1, 0                                         |     
    0x000049ca it ne                                             |     
                                                                 |     if (r1 != 0) {
    0x000049cc cmpne r3, r1                                      |         __asm ("cmpne r3, r1");
                                                                 |     }
                                                                 |     if (r1 > 0) {
    0x000049ce bhi 0x4a3e                                        |         goto label_10;
                                                                 |     }
                                                                 | label_3:
    0x000049d0 ldr r3, [pc, 0x240]                               |     
    0x000049d2 ldr r0, [r7, 0xc]                                 |     r0 = var_ch;
    0x000049d4 add r3, pc                                        |     
    0x000049d6 ldr r3, [r3]                                      |     r3 = *(0x95ec);
    0x000049d8 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
                                                                 | label_13:
    0x000049da mov r0, sb                                        |     r0 = sb;
    0x000049dc adds r7, 0x1c                                     |     r7 += 0x1c;
    0x000049de mov sp, r7                                        |     
    0x000049e0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_27:
    0x000049e4 add.w r2, fp, 7                                   |     r2 += arg_7h;
    0x000049e8 bic r2, r2, 7                                     |     r2 = BIT_MASK (r2, 7);
    0x000049ec sub.w sp, sp, r2                                  |     
    0x000049f0 add r5, sp, 8                                     |     r5 += var_8h;
    0x000049f2 b 0x4956                                          |     goto label_1;
                                                                 | label_23:
    0x000049f4 ldr r4, [pc, 0x220]                               |     
    0x000049f6 add r4, pc                                        |     r4 = 0x9612;
                                                                 | label_6:
    0x000049f8 ldr r3, [r7, 8]                                   |     r3 = var_8h_2;
    0x000049fa cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000049fc bne 0x4a92                                        |         goto label_31;
                                                                 |     }
                                                                 | label_7:
    0x000049fe mov r0, sb                                        |     r0 = sb;
    0x00004a00 bl 0x14720                                        |     fcn_00014720 ();
    0x00004a04 ldr r1, [r7, 0x10]                                |     r1 = var_10h;
    0x00004a06 mov r3, r4                                        |     r3 = r4;
    0x00004a08 movs r2, 0                                        |     r2 = 0;
    0x00004a0a mov r0, r5                                        |     r0 = r5;
    0x00004a0c blx 0x9f4                                         |     fcn_000009f4 ();
                                                                 | label_19:
    0x00004a10 ldrb r2, [r6, 0xb]                                |     r2 = *((r6 + 0xb));
    0x00004a12 cmp r3, 2                                         |     
    0x00004a14 it ls                                             |     
                                                                 |     if (r3 > 2) {
    0x00004a16 cmpls r2, 3                                       |         __asm ("cmpls r2, 3");
                                                                 |         goto label_32;
                                                                 |     }
                                                                 |     if (r3 == 2) {
                                                                 | label_32:
    0x00004a18 beq.w 0x4894                                      |         goto label_2;
                                                                 |     }
                                                                 | label_9:
    0x00004a1c ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x00004a1e movw r3, 0x457f                                   |     
    0x00004a22 movt r3, 0x464c                                   |     r3 = 0x464c457f;
    0x00004a26 cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x00004a28 bne.w 0x4b80                                      |         goto label_33;
                                                                 |     }
    0x00004a2c ldrb r3, [r6, 8]                                  |     r3 = *((r6 + 8));
    0x00004a2e cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x00004a30 beq.w 0x4b72                                      |         goto label_34;
                                                                 |     }
    0x00004a34 movs r2, 0                                        |     r2 = 0;
    0x00004a36 movs r3, 1                                        |     r3 = 1;
    0x00004a38 str r2, [r7, 0xc]                                 |     var_ch = r2;
    0x00004a3a ldr r2, [r7, 0x40]                                |     r2 = *((r7 + 0x40));
    0x00004a3c strb r3, [r2]                                     |     *(r2) = r3;
                                                                 | label_10:
    0x00004a3e mov r0, sb                                        |     r0 = sb;
    0x00004a40 mov.w sb, -1                                      |     sb = -1;
    0x00004a44 bl 0x14720                                        |     fcn_00014720 ();
    0x00004a48 ldr r3, [pc, 0x1d0]                               |     
    0x00004a4a movs r2, 2                                        |     r2 = 2;
    0x00004a4c add r3, pc                                        |     r3 = 0x966c;
    0x00004a4e str r2, [r3]                                      |     *(r3) = r2;
    0x00004a50 b 0x49d0                                          |     goto label_3;
                                                                 | label_30:
    0x00004a52 ldrh r2, [r6, 0x30]                               |     r2 = *((r6 + 0x30));
    0x00004a54 b 0x4908                                          |     goto label_0;
                                                                 | label_24:
    0x00004a56 sub.w sp, sp, sl                                  |     
    0x00004a5a mov r2, sl                                        |     r2 = sl;
    0x00004a5c add.w r8, sp, 8                                   |     r8 += var_8h;
    0x00004a60 strd r3, r0, [sp]                                 |     __asm ("strd r3, r0, [sp]");
    0x00004a64 mov r1, r8                                        |     r1 = r8;
    0x00004a66 mov r0, sb                                        |     r0 = sb;
    0x00004a68 bl 0x14914                                        |     r0 = fcn_00014914 (r0);
    0x00004a6c cmp r0, sl                                        |     
    0x00004a6e itt eq                                            |     
                                                                 |     if (r0 == sl) {
    0x00004a70 ldrheq r2, [r6, 0x30]                             |         __asm ("ldrheq r2, [r6, 0x30]");
                                                                 |     }
                                                                 |     if (r0 == sl) {
    0x00004a72 lsleq sl, r2, 5                                   |         sl = r2 << 5;
                                                                 |         goto label_35;
                                                                 |     }
                                                                 |     if (r0 == sl) {
                                                                 | label_35:
    0x00004a76 beq.w 0x48e8                                      |         goto label_4;
                                                                 |     }
    0x00004a7a b 0x4ba0                                          |     goto label_28;
                                                                 | label_26:
    0x00004a7c ldr r2, [r7, 0x14]                                |     r2 = var_14h;
    0x00004a7e adds r5, r2, r3                                   |     r5 = r2 + r3;
    0x00004a80 b 0x4994                                          |     goto label_5;
                                                                 | label_17:
    0x00004a82 ldr r3, [pc, 0x19c]                               |     
    0x00004a84 add r3, pc                                        |     r3 = 0x96aa;
    0x00004a86 ldr r5, [r3]                                      |     r5 = *(0x96aa);
    0x00004a88 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00004a8a bne 0x4b60                                        |         goto label_36;
                                                                 |     }
    0x00004a8c ldr r4, [pc, 0x194]                               |     
    0x00004a8e add r4, pc                                        |     r4 = 0x96b6;
    0x00004a90 b 0x49f8                                          |     goto label_6;
                                                                 | label_31:
    0x00004a92 ldr r6, [r7, 0x10]                                |     r6 = var_10h;
    0x00004a94 mov r0, r6                                        |     r0 = r6;
    0x00004a96 bl 0x15540                                        |     r0 = fcn_00015540 (r0, r1);
    0x00004a9a add.w r3, r0, 8                                   |     r3 = r0 + 8;
    0x00004a9e adds r2, r0, 1                                    |     r2 = r0 + 1;
    0x00004aa0 bic r3, r3, 7                                     |     r3 = BIT_MASK (r3, 7);
    0x00004aa4 mov r1, r6                                        |     r1 = r6;
    0x00004aa6 sub.w sp, sp, r3                                  |     
    0x00004aaa add r0, sp, 8                                     |     r0 += var_8h;
    0x00004aac blx 0x15f40                                       |     fcn_00015f40 (r0, r1);
    0x00004ab0 ldr r3, [pc, 0x174]                               |     
    0x00004ab2 mov r2, r0                                        |     r2 = r0;
    0x00004ab4 mov r0, r6                                        |     r0 = r6;
    0x00004ab6 str r2, [r7, 0x10]                                |     var_10h = r2;
    0x00004ab8 add r3, pc                                        |     
    0x00004aba ldr r3, [r3]                                      |     r3 = *(0x96e4);
    0x00004abc blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x00004abe b 0x49fe                                          |     goto label_7;
                                                                 | label_18:
    0x00004ac0 ldr r1, [pc, 0x168]                               |     
    0x00004ac2 movs r2, 8                                        |     r2 = 8;
    0x00004ac4 ldr r0, [r7, 0x14]                                |     r0 = var_14h;
    0x00004ac6 add r1, pc                                        |     r1 = 0x96f6;
    0x00004ac8 bl 0x157dc                                        |     r0 = fcn_000157dc (r0, r1, r2);
    0x00004acc cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00004ace beq.w 0x4874                                      |         goto label_8;
                                                                 |     }
    0x00004ad0 add r6, sp, 0x344                                 |     r6 = sp + 0x344;
    0x00004ad2 ldr r1, [pc, 0x15c]                               |     
    0x00004ad4 movs r2, 8                                        |     r2 = 8;
    0x00004ad6 ldr r0, [r7, 0x14]                                |     r0 = var_14h;
    0x00004ad8 add r1, pc                                        |     r1 = 0x970e;
    0x00004ada bl 0x157dc                                        |     r0 = fcn_000157dc (r0, r1, r2);
    0x00004ade cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00004ae0 beq.w 0x4874                                      |         goto label_8;
                                                                 |     }
    0x00004ae4 b 0x4a1c                                          |     goto label_9;
                                                                 | label_20:
    0x00004ae6 ldr r4, [pc, 0x14c]                               |     
    0x00004ae8 add r4, pc                                        |     r4 = 0x9722;
    0x00004aea b 0x49f8                                          |     goto label_6;
                                                                 | label_21:
    0x00004aec str r0, [r7, 0xc]                                 |     var_ch = r0;
    0x00004aee b 0x4a3e                                          |     goto label_10;
                                                                 | label_16:
    0x00004af0 ldr r4, [r6]                                      |     r4 = *(r6);
    0x00004af2 b 0x485c                                          |     goto label_11;
                                                                 | label_22:
    0x00004af4 ldr r4, [pc, 0x140]                               |     
    0x00004af6 add r4, pc                                        |     r4 = 0x9732;
    0x00004af8 b 0x49f8                                          |     goto label_6;
                                                                 | label_14:
    0x00004afa mov r4, r2                                        |     r4 = r2;
    0x00004afc mov r2, r3                                        |     r2 = r3;
    0x00004afe ldrb.w r3, [r4, 0x199]                            |     r3 = *((r4 + 0x199));
    0x00004b02 ands r2, r3, 0x3940000                            |     r2 = r3 & 0x3940000;
    0x00004b06 ldr r3, [r6, 0x14]                                |     r3 = *((r6 + 0x14));
    0x00004b08 add r6, sp, 0x218                                 |     r6 = sp + 0x218;
    0x00004b0a ldr.w sb, [pc, 0x130]                             |     sb = *(0x00004c3c);
    0x00004b0e add.w sl, r4, 0x260                               |     sl = r4 + 0x260;
    0x00004b12 ldr.w r8, [ip, 0x1d8]                             |     r8 = *((ip + 0x1d8));
    0x00004b16 ldr r3, [pc, 0x128]                               |     
    0x00004b18 ldr.w fp, [pc, 0x128]                             |     fp = *(0x00004c44);
    0x00004b1c add sb, pc                                        |     sb += pc;
    0x00004b1e mov r6, r8                                        |     r6 = r8;
    0x00004b20 add.w sb, sb, 0x7f8                               |     sb += 0x7f8;
    0x00004b24 add r3, pc                                        |     
    0x00004b26 mov r8, r2                                        |     r8 = r2;
    0x00004b28 add fp, pc                                        |     
    0x00004b2a add.w r3, r3, 0x598                               |     r3 = 0x9d02;
    0x00004b2e str r3, [r7, 0x14]                                |     var_14h = r3;
    0x00004b30 str r1, [r7, 0xc]                                 |     var_ch = r1;
                                                                 |     do {
    0x00004b32 ldr r3, [r6, 4]                                   |         r3 = *((r6 + 4));
                                                                 |         if (r3 != 0) {
    0x00004b34 cbz r3, 0x4b46                                    |             
    0x00004b36 ldr r1, [r7, 0x14]                                |             r1 = var_14h;
    0x00004b38 mov r2, r8                                        |             r2 = r8;
    0x00004b3a cmp r4, r1                                        |             
    0x00004b3c ite ne                                            |             
                                                                 |             if (r4 == r1) {
    0x00004b3e movne r1, sl                                      |                 r1 = sl;
                                                                 |             }
                                                                 |             if (r4 != r1) {
    0x00004b40 moveq r1, sb                                      |                 r1 = sb;
                                                                 |             }
    0x00004b42 blx r3                                            |             r0 = uint32_t (*r3)(uint32_t, uint32_t) (r1, r2);
                                                                 |             if (r0 == 0) {
    0x00004b44 cbz r0, 0x4b66                                    |                 goto label_15;
                                                                 |             }
                                                                 |         }
    0x00004b46 ldr.w r3, [fp, 0x1dc]                             |         r3 = *(arg_1dch);
    0x00004b4a adds r5, 1                                        |         r5++;
    0x00004b4c ldr r6, [r6, 0x20]                                |         r6 = *((r6 + 0x20));
    0x00004b4e add.w sb, sb, 8                                   |         sb += 8;
    0x00004b50 lsrs r0, r1, 4                                    |         r0 = r1 >> 4;
    0x00004b52 add.w sl, sl, 8                                   |         sl += 8;
    0x00004b56 cmp r5, r3                                        |         
    0x00004b58 blo 0x4b32                                        |         
                                                                 |     } while (r5 <= r3);
    0x00004b5a ldr r6, [r7, 0xc]                                 |     r6 = var_ch;
    0x00004b5c str r0, [r7, 0x10]                                |     var_10h = r0;
    0x00004b5e b 0x4816                                          |     goto label_12;
                                                                 | label_36:
    0x00004b60 ldr r4, [pc, 0xe4]                                |     
    0x00004b62 add r4, pc                                        |     r4 = 0x97ae;
    0x00004b64 b 0x49f8                                          |     goto label_6;
                                                                 | label_15:
    0x00004b66 mov.w sb, -1                                      |     sb = -1;
    0x00004b6a b 0x49da                                          |     goto label_13;
                                                                 | label_25:
    0x00004b6c movs r3, 0                                        |     r3 = 0;
    0x00004b6e str r3, [r7, 0xc]                                 |     var_ch = r3;
    0x00004b70 b 0x49d0                                          |     goto label_3;
                                                                 | label_34:
    0x00004b72 ldrb r3, [r6, 9]                                  |     r3 = *((r6 + 9));
    0x00004b74 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x00004b76 beq 0x4b88                                        |         
    0x00004b78 ldr r4, [pc, 0xd0]                                |         
    0x00004b7a movs r5, 0                                        |         r5 = 0;
    0x00004b7c add r4, pc                                        |         r4 = 0x97cc;
    0x00004b7e b 0x49f8                                          |         goto label_6;
                                                                 | label_33:
    0x00004b80 ldr r4, [pc, 0xcc]                                |         
    0x00004b82 movs r5, 0                                        |         r5 = 0;
    0x00004b84 add r4, pc                                        |         r4 = 0x97d8;
    0x00004b86 b 0x49f8                                          |         goto label_6;
                                                                 |     }
    0x00004b88 ldrb r3, [r6, 0xa]                                |     r3 = *((r6 + 0xa));
    0x00004b8a cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x00004b8c beq 0x4bac                                        |         
    0x00004b8e ldr r4, [pc, 0xc4]                                |         
    0x00004b90 movs r5, 0                                        |         r5 = 0;
    0x00004b92 add r4, pc                                        |         r4 = 0x97ec;
    0x00004b94 b 0x49f8                                          |         goto label_6;
                                                                 | label_29:
    0x00004b96 ldr r3, [pc, 0xc0]                                |         
    0x00004b98 ldr r0, [r7, 0xc]                                 |         r0 = *((r7 + 0xc));
    0x00004b9a add r3, pc                                        |         
    0x00004b9c ldr r3, [r3]                                      |         r3 = *(0x97f8);
    0x00004b9e blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
                                                                 | label_28:
    0x00004ba0 ldr r3, [pc, 0xb8]                                |         
    0x00004ba2 ldr r4, [pc, 0xbc]                                |         
    0x00004ba4 add r3, pc                                        |         r3 = 0x9804;
    0x00004ba6 ldr r5, [r3]                                      |         r5 = *(0x9804);
    0x00004ba8 add r4, pc                                        |         r4 = 0x980e;
    0x00004baa b 0x49f8                                          |         goto label_6;
                                                                 |     }
    0x00004bac ldrb r2, [r6, 0xb]                                |     r2 = *((r6 + 0xb));
    0x00004bae subs r3, r2, 3                                    |     r3 = r2 - 3;
    0x00004bb0 it ne                                             |     
                                                                 |     if (r3 == r2) {
    0x00004bb2 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00004bb4 tst.w r2, 0xbf                                    |     
                                                                 |     if ((r2 & 0xbf) != 0) {
    0x00004bb8 beq 0x4bc4                                        |         
                                                                 |         if (r3 == 0) {
    0x00004bba cbz r3, 0x4bc4                                    |             goto label_37;
                                                                 |         }
    0x00004bbc ldr r4, [pc, 0xa4]                                |         
    0x00004bbe movs r5, 0                                        |         r5 = 0;
    0x00004bc0 add r4, pc                                        |         r4 = 0x9828;
    0x00004bc2 b 0x49f8                                          |         goto label_6;
                                                                 |     }
                                                                 | label_37:
    0x00004bc4 ldrb r2, [r6, 0xc]                                |     r2 = *((r6 + 0xc));
                                                                 |     if (r2 != 0) {
    0x00004bc6 cbz r2, 0x4bd6                                    |         
    0x00004bc8 cmp r2, 2                                         |         
                                                                 |         if (r2 <= 2) {
    0x00004bca bhi 0x4bce                                        |             
                                                                 |             if (r3 == 0) {
    0x00004bcc cbz r3, 0x4bd6                                    |                 goto label_38;
                                                                 |             }
                                                                 |         }
    0x00004bce ldr r4, [pc, 0x98]                                |         
    0x00004bd0 movs r5, 0                                        |         r5 = 0;
    0x00004bd2 add r4, pc                                        |         r4 = 0x9840;
    0x00004bd4 b 0x49f8                                          |         goto label_6;
                                                                 |     }
                                                                 | label_38:
    0x00004bd6 ldr r1, [pc, 0x94]                                |     
    0x00004bd8 movs r2, 7                                        |     r2 = 7;
    0x00004bda add.w r0, r6, 0xd                                 |     r0 = r6 + 0xd;
    0x00004bde add r1, pc                                        |     r1 = 0x9850;
    0x00004be0 adds r1, 9                                        |     r1 += 9;
    0x00004be2 bl 0x157dc                                        |     r0 = fcn_000157dc (r0, r1, r2);
    0x00004be6 mov r5, r0                                        |     r5 = r0;
                                                                 |     if (r0 == 0) {
    0x00004be8 cbnz r0, 0x4bf0                                   |         
    0x00004bea ldr r4, [pc, 0x84]                                |         
    0x00004bec add r4, pc                                        |         r4 = 0x9862;
    0x00004bee b 0x49f8                                          |         goto label_6;
                                                                 |     }
    0x00004bf0 ldr r4, [pc, 0x80]                                |     
    0x00004bf2 movs r5, 0                                        |     r5 = 0;
    0x00004bf4 add r4, pc                                        |     r4 = 0x986c;
    0x00004bf6 b 0x49f8                                          |     goto label_6;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x4c78 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00004c78 ()                                      | void fcn_00004c78 (int16_t arg1, int16_t arg2, int16_t arg3, uint32_t arg4) {
                                                                 |     uint32_t var_bp_4h;
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int8_t var_1h_2;
                                                                 |     int16_t var_0h_3;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_1h;
                                                                 |     int32_t var_8h_2;
                                                                 |     int32_t var_ch;
                                                                 |     int32_t var_10h;
                                                                 |     int32_t var_14h;
                                                                 |     int32_t var_18h;
                                                                 |     int32_t var_1ch;
                                                                 |     int32_t var_20h;
                                                                 |     int32_t var_24h;
                                                                 |     int32_t var_28h;
                                                                 |     int32_t var_2ch;
                                                                 |     int32_t var_30h;
                                                                 |     int32_t var_34h;
                                                                 |     int32_t var_38h;
                                                                 |     int32_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int32_t var_50h;
                                                                 |     int16_t var_30h_2;
                                                                 |     int16_t var_0h_2;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00004c78 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00004c7c sub sp, 0xbc                                      |     
    0x00004c7e add r7, sp, 8                                     |     r7 += var_8h;
    0x00004c80 str r3, [r7, 4]                                   |     var_bp_4h = r3;
    0x00004c82 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00004c84 str r0, [r7, 0x30]                                |     var_30h = r0;
    0x00004c86 str r2, [r7, 0x28]                                |     var_28h = r2;
    0x00004c88 str r3, [r7, 0x24]                                |     var_24h = r3;
    0x00004c8a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00004c8c beq.w 0x4dcc                                      |         goto label_14;
                                                                 |     }
    0x00004c90 ldr r3, [pc, 0x3a0]                               |     
    0x00004c92 ldr r2, [pc, 0x3a4]                               |     
    0x00004c94 str r1, [r7, 0x14]                                |     var_14h = r1;
    0x00004c96 add r3, pc                                        |     
    0x00004c98 add r2, pc                                        |     
    0x00004c9a ldr r3, [r3]                                      |     
    0x00004c9c ldr r2, [r2]                                      |     r2 = *(0x9cd6);
    0x00004c9e add r3, r2                                        |     r3 += r2;
    0x00004ca0 add r3, r1                                        |     r3 += r1;
    0x00004ca2 adds r3, 7                                        |     r3 += 7;
    0x00004ca4 bic r3, r3, 7                                     |     r3 = BIT_MASK (r3, 7);
    0x00004ca8 sub.w sp, sp, r3                                  |     
    0x00004cac ldr r3, [r7, 0x24]                                |     r3 = var_24h;
    0x00004cae add.w fp, sp, 8                                   |     
    0x00004cb2 ldr r3, [r3]                                      |     r3 = *(0x9cce);
    0x00004cb4 str r3, [r7, 0x34]                                |     var_34h = r3;
    0x00004cb6 ldr r3, [pc, 0x384]                               |     
    0x00004cb8 add r3, pc                                        |     r3 = 0x9cfa;
    0x00004cba str r3, [r7, 8]                                   |     var_8h_2 = r3;
    0x00004cbc ldr r3, [pc, 0x380]                               |     
    0x00004cbe add r3, pc                                        |     r3 = 0x9d02;
    0x00004cc0 str r3, [r7, 0x1c]                                |     var_1ch = r3;
    0x00004cc2 movs r3, 0                                        |     r3 = 0;
    0x00004cc4 str r3, [r7, 0x20]                                |     var_20h = r3;
    0x00004cc6 str r3, [r7, 0xc]                                 |     var_ch = r3;
                                                                 | label_0:
    0x00004cc8 ldr r3, [pc, 0x378]                               |     
    0x00004cca add r3, pc                                        |     r3 = 0x9d12;
    0x00004ccc ldr r6, [r3]                                      |     r6 = *(0x9d12);
    0x00004cce ands r6, r6, 1                                    |     r6 &= 1;
                                                                 |     if (r6 != r6) {
    0x00004cd2 bne.w 0x4eb8                                      |         goto label_16;
                                                                 |     }
                                                                 | label_7:
    0x00004cd6 ldr r4, [r7, 0x34]                                |     r4 = var_34h;
    0x00004cd8 mov r0, fp                                        |     r0 = fp;
    0x00004cda movs r6, 0                                        |     r6 = 0;
    0x00004cdc ldr.w sl, [pc, 0x368]                             |     sl = *(0x00005048);
    0x00004ce0 ldr.w sb, [pc, 0x368]                             |     sb = *(0x0000504c);
    0x00004ce4 mov r5, r6                                        |     r5 = r6;
    0x00004ce6 ldrd r1, r2, [r4, 0xc]                            |     __asm ("ldrd r1, r2, [r4, 0xc]");
    0x00004cea blx 0x15f40                                       |     fcn_00015f40 (r0, r1);
    0x00004cee ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x00004cf0 add sl, pc                                        |     sl += pc;
    0x00004cf2 ldr.w r8, [r7, 0x14]                              |     r8 = var_14h;
    0x00004cf6 add sb, pc                                        |     sb += pc;
    0x00004cf8 str r6, [r7, 0x3c]                                |     var_3ch = r6;
    0x00004cfa adds r3, r0, r3                                   |     r3 = r0 + r3;
    0x00004cfc str r3, [r7, 0x38]                                |     var_38h = r3;
    0x00004cfe ldr r3, [pc, 0x350]                               |     
    0x00004d00 add r3, pc                                        |     r3 = 0x9d56;
    0x00004d02 str r3, [r7, 0x2c]                                |     var_2ch = r3;
    0x00004d04 ldr r3, [pc, 0x34c]                               |     
    0x00004d06 add r3, pc                                        |     
    0x00004d08 str r3, [r7, 0x18]                                |     var_18h = r3;
    0x00004d0a ldr r3, [r7, 0x2c]                                |     r3 = var_2ch;
    0x00004d0c ldr r3, [r3, 4]                                   |     r3 = *(0x9d62);
    0x00004d0e cmp r3, r5                                        |     
                                                                 |     if (r3 < r5) {
    0x00004d10 bls 0x4d9e                                        |         goto label_2;
                                                                 |     }
                                                                 |     do {
    0x00004d12 ldr r3, [r7, 0x34]                                |         r3 = var_34h;
    0x00004d14 add.w r4, r3, r5, lsl 2                           |         r4 = r3 + (r5 << 2);
    0x00004d18 adds r5, 1                                        |         r5++;
    0x00004d1a adds r4, 0x10                                     |         r4 += 0x10;
                                                                 | label_3:
    0x00004d1c ldr r3, [r4, 4]!                                  |         r3 = *((r4 += 4));
    0x00004d20 cmp r3, 1                                         |         
                                                                 |         if (r3 == 1) {
    0x00004d22 beq 0x4dea                                        |             goto label_4;
                                                                 |         }
    0x00004d24 ldr.w r2, [sl, 8]                                 |         r2 = *((sl + 8));
    0x00004d28 lsls r3, r5, 3                                    |         r3 = r5 << 3;
    0x00004d2a ldr r0, [r7, 0x38]                                |         r0 = var_38h;
    0x00004d2c subs r3, 8                                        |         r3 -= 8;
    0x00004d2e adds r6, r2, r3                                   |         r6 = r2 + r3;
    0x00004d30 ldr r1, [r2, r3]                                  |         r1 = *((r2 + r3));
    0x00004d32 ldr r2, [r6, 4]                                   |         r2 = *((r6 + 4));
    0x00004d34 blx 0x15f40                                       |         fcn_00015f40 (r0, r1);
    0x00004d38 ldr r3, [r6, 4]                                   |         r3 = *((r6 + 4));
    0x00004d3a mov r2, r8                                        |         r2 = r8;
    0x00004d3c ldr r1, [r7, 0x30]                                |         r1 = var_30h;
    0x00004d3e add r0, r3                                        |         r0 += r3;
    0x00004d40 blx 0x15f40                                       |         fcn_00015f40 (r0, r1);
    0x00004d44 ldr.w r3, [sb]                                    |         r3 = *(sb);
    0x00004d48 add.w r6, r0, r8                                  |         r6 = r0 + r8;
    0x00004d4c sub.w r6, r6, fp                                  |         r6 -= fp;
    0x00004d50 lsls r3, r3, 0x1f                                 |         r3 <<= 0x1f;
                                                                 |         if (r3 < r3) {
    0x00004d52 bmi.w 0x4e84                                      |             goto label_17;
                                                                 |         }
                                                                 | label_5:
    0x00004d56 ldr.w r3, [r7, 0xe8]                              |         r3 = *((r7 + 0xe8));
    0x00004d5a mov r0, fp                                        |         r0 = fp;
    0x00004d5c str r3, [sp]                                      |         *(sp) = r3;
    0x00004d5e movs r3, 0                                        |         r3 = 0;
    0x00004d60 str r3, [sp, 4]                                   |         var_4h = r3;
    0x00004d62 ldr.w r1, [r7, 0xdc]                              |         r1 = *((r7 + 0xdc));
    0x00004d66 ldrd r2, r3, [r7, 0xe0]                           |         __asm ("ldrd r2, r3, [r7, 0xe0]");
    0x00004d6a bl 0x47f0                                         |         fcn_000047f0 (r0, r1, r2, r3, r4, r5);
    0x00004d6e ldr r2, [r4]                                      |         r2 = *(r4);
    0x00004d70 mov r3, r0                                        |         r3 = r0;
    0x00004d72 cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x00004d74 bne 0x4dda                                        |             goto label_18;
                                                                 |         }
    0x00004d76 adds r0, r3, 1                                    |         r0 += var_1h;
                                                                 |         if (r0 == var_1h) {
    0x00004d78 beq 0x4dfa                                        |             goto label_19;
                                                                 |         }
    0x00004d7a movs r2, 2                                        |         r2 = 2;
    0x00004d7c str r2, [r4]                                      |         *(r4) = r2;
    0x00004d7e movs r2, 1                                        |         r2 = 1;
    0x00004d80 str r2, [r7, 0x3c]                                |         var_3ch = r2;
                                                                 | label_1:
    0x00004d82 ldr r2, [r7, 0x28]                                |         r2 = var_28h;
    0x00004d84 lsls r2, r2, 5                                    |         r2 <<= 5;
                                                                 |         if (r2 >= r2) {
    0x00004d86 bpl 0x4e52                                        |             goto label_20;
                                                                 |         }
    0x00004d88 ldr r2, [r7, 0x18]                                |         r2 = var_18h;
    0x00004d8a ldr r2, [r2]                                      |         r2 = *(r2);
    0x00004d8c cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x00004d8e bne 0x4e90                                        |             goto label_21;
                                                                 |         }
                                                                 | label_6:
    0x00004d90 adds r1, r3, 1                                    |         r1 = r3 + 1;
    0x00004d92 mov r4, r6                                        |         r4 = r6;
                                                                 |         if (r1 != r3) {
    0x00004d94 bne 0x4e54                                        |             goto label_22;
                                                                 |         }
    0x00004d96 ldr r3, [r7, 0x2c]                                |         r3 = var_2ch;
    0x00004d98 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x00004d9a cmp r3, r5                                        |         
    0x00004d9c bhi 0x4d12                                        |         
                                                                 |     } while (r3 > r5);
                                                                 | label_2:
    0x00004d9e ldr r6, [r7, 0x3c]                                |     r6 = var_3ch;
                                                                 |     if (r6 != 0) {
    0x00004da0 cbz r6, 0x4db0                                    |         
    0x00004da2 ldr r3, [pc, 0x2b4]                               |         
    0x00004da4 add r3, pc                                        |         
    0x00004da6 ldr r3, [r3]                                      |         r3 = *(0x9e02);
    0x00004da8 cmp r3, 0xd                                       |         
    0x00004daa it ne                                             |         
                                                                 |         if (r3 != 0xd) {
    0x00004dac cmpne r3, 2                                       |             __asm ("cmpne r3, 2");
                                                                 |         }
                                                                 |         if (r3 != 0xd) {
    0x00004dae bne 0x4dcc                                        |             goto label_14;
                                                                 |         }
                                                                 |     }
    0x00004db0 ldr r3, [r7, 0x20]                                |     r3 = var_20h;
    0x00004db2 orrs r3, r6                                       |     r3 |= r6;
    0x00004db4 str r3, [r7, 0x20]                                |     var_20h = r3;
    0x00004db6 ldr r3, [r7, 0x24]                                |     r3 = var_24h;
    0x00004db8 ldr r2, [r3, 4]!                                  |     r2 = *((r3 += 4));
    0x00004dbc str r2, [r7, 0x34]                                |     var_34h = r2;
    0x00004dbe str r3, [r7, 0x24]                                |     var_24h = r3;
    0x00004dc0 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00004dc2 bne 0x4cc8                                        |         goto label_0;
                                                                 |     }
    0x00004dc4 ldr r3, [r7, 0x20]                                |     r3 = var_20h;
    0x00004dc6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00004dc8 beq.w 0x4ff2                                      |         goto label_23;
                                                                 |     }
                                                                 | label_14:
    0x00004dcc mov.w r3, -1                                      |     r3 = -1;
                                                                 | label_15:
    0x00004dd0 mov r0, r3                                        |     r0 = r3;
    0x00004dd2 adds r7, 0xb4                                     |     r7 += 0xb4;
    0x00004dd4 mov sp, r7                                        |     
    0x00004dd6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_18:
    0x00004dda ldr r1, [r7, 0x3c]                                |     r1 = var_3ch;
    0x00004ddc cmp r2, 1                                         |     
    0x00004dde it ne                                             |     
                                                                 |     if (r2 == 1) {
    0x00004de0 orrne r1, r1, 1                                   |         r1 |= 1;
                                                                 |     }
    0x00004de4 adds r2, r0, 1                                    |     r2 += var_1h;
    0x00004de6 str r1, [r7, 0x3c]                                |     var_3ch = r1;
                                                                 |     if (r2 != var_1h) {
    0x00004de8 bne 0x4d82                                        |         goto label_1;
                                                                 |     }
                                                                 | label_4:
    0x00004dea ldr r3, [pc, 0x270]                               |     
    0x00004dec adds r2, r5, 1                                    |     r2 = r5 + 1;
    0x00004dee add r3, pc                                        |     
    0x00004df0 ldr r3, [r3, 4]                                   |     r3 = *(0x9e54);
    0x00004df2 cmp r3, r5                                        |     
                                                                 |     if (r3 < r5) {
    0x00004df4 bls 0x4d9e                                        |         goto label_2;
                                                                 |     }
    0x00004df6 mov r5, r2                                        |     r5 = r2;
    0x00004df8 b 0x4d1c                                          |     goto label_3;
                                                                 | label_19:
    0x00004dfa ldr.w r3, [r7, 0xe0]                              |     r3 = *((r7 + 0xe0));
                                                                 |     if (r3 == 0) {
    0x00004dfe cbz r3, 0x4e1c                                    |         goto label_24;
                                                                 |     }
    0x00004e00 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x00004e02 movs r2, 0x54                                     |     r2 = 0x54;
    0x00004e04 mul r3, r2, r3                                    |     r3 = r2 * r3;
    0x00004e08 ldr r2, [pc, 0x254]                               |     
    0x00004e0a add r2, pc                                        |     r2 = 0x9e6e;
    0x00004e0c ldr r3, [r2, r3]                                  |     r3 = *(0x9e6e);
    0x00004e0e ldrb.w r3, [r3, 0x199]                            |     r3 = *((r3 + 0x199));
    0x00004e12 lsls r1, r3, 0x1c                                 |     r1 = r3 << 0x1c;
    0x00004e14 itt mi                                            |     
                                                                 |     if (r1 >= r3) {
    0x00004e16 movmi r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r1 < r3) {
    0x00004e18 strmi r3, [r7, 0x3c]                              |         *((r7 + 0x3c)) = r3;
                                                                 |         goto label_25;
                                                                 |     }
                                                                 |     if (r1 < r3) {
                                                                 | label_25:
    0x00004e1a bmi 0x4dea                                        |         goto label_4;
                                                                 |     }
                                                                 | label_24:
    0x00004e1c sub.w r6, r6, r8                                  |     r6 -= r8;
    0x00004e20 movs r3, 0                                        |     r3 = 0;
    0x00004e22 add r6, fp                                        |     r6 += fp;
    0x00004e24 add.w r1, r7, 0x40                                |     r1 += var_40h;
    0x00004e28 strb r3, [r6, -0x1]                               |     *((r6 - 0x1)) = r3;
    0x00004e2c mov r0, fp                                        |     r0 = fp;
    0x00004e2e bl 0x14390                                        |     fcn_00014390 (r0, r1);
    0x00004e32 movs r3, 1                                        |     r3 = 1;
                                                                 |     if (r0 == 0) {
    0x00004e34 cbnz r0, 0x4e4e                                   |         
    0x00004e36 ldr r3, [r7, 0x50]                                |         r3 = var_50h;
    0x00004e38 and r3, r3, 0xf000                                |         r3 &= 0xf000;
    0x00004e3c cmp.w r3, 0x4000                                  |         
    0x00004e40 ldr r3, [r7, 0x3c]                                |         r3 = var_3ch;
    0x00004e42 it eq                                             |         
                                                                 |         if (r3 != 0x4000) {
    0x00004e44 moveq r3, 1                                       |             r3 = 1;
                                                                 |         }
    0x00004e46 str r3, [r7, 0x3c]                                |         var_3ch = r3;
    0x00004e48 ite eq                                            |         
                                                                 |         if (r3 != 0x4000) {
    0x00004e4a moveq r3, 2                                       |             r3 = 2;
                                                                 |         }
                                                                 |         if (r3 != 0x4000) {
    0x00004e4c movne r3, 1                                       |             r3 = 1;
                                                                 |             goto label_26;
                                                                 |         }
                                                                 |     }
                                                                 | label_26:
    0x00004e4e str r3, [r4]                                      |     *(r4) = r3;
    0x00004e50 b 0x4dea                                          |     goto label_4;
                                                                 | label_20:
    0x00004e52 mov r4, r6                                        |     r4 = r6;
                                                                 | label_22:
    0x00004e54 ldr r2, [pc, 0x20c]                               |     
    0x00004e56 mov r0, r4                                        |     r0 = r4;
    0x00004e58 str r3, [r7, 0x3c]                                |     var_3ch = r3;
    0x00004e5a add r2, pc                                        |     
    0x00004e5c ldr r2, [r2]                                      |     r2 = *(0x9ec2);
    0x00004e5e blx r2                                            |     uint32_t (*r2)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x00004e60 ldr.w r3, [r7, 0xd8]                              |     r3 = *((r7 + 0xd8));
    0x00004e64 str r0, [r3]                                      |     *(r3) = r0;
    0x00004e66 ldr r3, [r7, 0x3c]                                |     r3 = var_3ch;
    0x00004e68 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00004e6a beq.w 0x5022                                      |         goto label_27;
                                                                 |     }
    0x00004e6e mov r2, r4                                        |     r2 = r4;
    0x00004e70 mov r1, fp                                        |     r1 = fp;
    0x00004e72 str r3, [r7, 0x3c]                                |     var_3ch = r3;
    0x00004e74 blx 0x15f40                                       |     fcn_00015f40 (r0, r1);
    0x00004e78 ldr r3, [r7, 0x3c]                                |     r3 = var_3ch;
    0x00004e7a adds r7, 0xb4                                     |     r7 += 0xb4;
    0x00004e7c mov r0, r3                                        |     r0 = r3;
    0x00004e7e mov sp, r7                                        |     
    0x00004e80 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_17:
    0x00004e84 ldr r0, [pc, 0x1e0]                               |     
    0x00004e86 mov r1, fp                                        |     r1 = fp;
    0x00004e88 add r0, pc                                        |     r0 = 0x9ef4;
    0x00004e8a bl 0xc1f0                                         |     fcn_0000c1f0 ();
    0x00004e8e b 0x4d56                                          |     goto label_5;
                                                                 | label_21:
    0x00004e90 mov r0, r3                                        |     r0 = r3;
    0x00004e92 add.w r1, r7, 0x40                                |     r1 += var_40h;
    0x00004e96 str r3, [r7, 0x10]                                |     var_10h = r3;
    0x00004e98 bl 0x143c8                                        |     fcn_000143c8 (r0, r1);
    0x00004e9c ldr r3, [r7, 0x10]                                |     r3 = var_10h;
                                                                 |     if (r0 != 0) {
    0x00004e9e cbnz r0, 0x4ea8                                   |         goto label_28;
                                                                 |     }
    0x00004ea0 ldr r2, [r7, 0x50]                                |     r2 = var_50h;
    0x00004ea2 lsls r0, r2, 0x14                                 |     r0 = r2 << 0x14;
                                                                 |     if (r0 < r2) {
    0x00004ea4 bmi.w 0x4d90                                      |         goto label_6;
                                                                 |     }
                                                                 | label_28:
    0x00004ea8 mov r0, r3                                        |     r0 = r3;
    0x00004eaa bl 0x14720                                        |     fcn_00014720 ();
    0x00004eae ldr r3, [pc, 0x1bc]                               |     
    0x00004eb0 movs r2, 2                                        |     r2 = 2;
    0x00004eb2 add r3, pc                                        |     r3 = 0x9f24;
    0x00004eb4 str r2, [r3]                                      |     *(r3) = r2;
    0x00004eb6 b 0x4dea                                          |     goto label_4;
                                                                 | label_16:
    0x00004eb8 ldr r1, [r7, 0x34]                                |     r1 = var_34h;
    0x00004eba ldr r2, [r7, 0xc]                                 |     r2 = var_ch;
    0x00004ebc ldr r3, [r1, 4]                                   |     r3 = *((r1 + 4));
    0x00004ebe cmp r3, r2                                        |     
    0x00004ec0 str r3, [r7, 0x38]                                |     var_38h = r3;
                                                                 |     if (r3 == r2) {
    0x00004ec2 beq.w 0x4cd6                                      |         goto label_7;
                                                                 |     }
    0x00004ec6 ldr r3, [pc, 0x1a8]                               |     
    0x00004ec8 ldr r2, [pc, 0x1a8]                               |     
    0x00004eca ldr r0, [pc, 0x1ac]                               |     
    0x00004ecc add r3, pc                                        |     
    0x00004ece str.w sp, [r7, 0x10]                              |     __asm ("str.w sp, [var_10h]");
    0x00004ed2 add r2, pc                                        |     
    0x00004ed4 ldr r3, [r3]                                      |     r3 = *(0x9f42);
    0x00004ed6 ldr r2, [r2]                                      |     r2 = *(0x9f4a);
    0x00004ed8 add r0, pc                                        |     r0 = 0x9f56;
    0x00004eda add r3, r2                                        |     r3 += r2;
    0x00004edc adds r3, 7                                        |     r3 += 7;
    0x00004ede bic r3, r3, 7                                     |     r3 = BIT_MASK (r3, 7);
    0x00004ee2 sub.w sp, sp, r3                                  |     
    0x00004ee6 ldr r3, [r1, 8]                                   |     r3 = *((r1 + 8));
    0x00004ee8 add.w r8, sp, 8                                   |     r8 += var_8h;
    0x00004eec str r3, [r7, 0x18]                                |     var_18h = r3;
    0x00004eee bl 0xc1f0                                         |     fcn_0000c1f0 ();
    0x00004ef2 ldr r3, [r7, 0x24]                                |     r3 = var_24h;
    0x00004ef4 ldr r4, [r3]                                      |     r4 = *(0x9f42);
    0x00004ef6 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00004ef8 beq 0x4fa4                                        |         goto label_29;
                                                                 |     }
    0x00004efa ldr r3, [pc, 0x180]                               |     
    0x00004efc ldr.w sl, [r7, 0x24]                              |     sl = var_24h;
    0x00004f00 str.w fp, [r7, 0xc]                               |     __asm ("str.w fp, [var_ch]");
    0x00004f04 add r3, pc                                        |     r3 = 0x9f86;
    0x00004f06 mov fp, sl                                        |     
    0x00004f08 str r3, [r7, 0x2c]                                |     var_2ch = r3;
    0x00004f0a ldr.w sl, [r7, 8]                                 |     sl = var_8h_2;
    0x00004f0e ldr r3, [pc, 0x170]                               |     
    0x00004f10 add r3, pc                                        |     r3 = 0x9f96;
    0x00004f12 str r3, [r7, 0x3c]                                |     var_3ch = r3;
                                                                 | label_10:
    0x00004f14 ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x00004f16 ldr r3, [r7, 0x38]                                |     r3 = var_38h;
    0x00004f18 cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x00004f1a bne 0x4fa0                                        |         goto label_30;
                                                                 |     }
    0x00004f1c ldrd r1, r2, [r4, 0xc]                            |     __asm ("ldrd r1, r2, [r4, 0xc]");
    0x00004f20 mov r0, r8                                        |     r0 = r8;
    0x00004f22 blx 0x15f40                                       |     fcn_00015f40 (r0, r1);
    0x00004f26 ldr r2, [r4, 0x10]                                |     r2 = *((r4 + 0x10));
    0x00004f28 ldr r3, [r7, 0x2c]                                |     r3 = var_2ch;
    0x00004f2a add.w sb, r0, r2                                  |     sb = r0 + r2;
    0x00004f2e ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
                                                                 |     if (r2 == 0) {
    0x00004f30 cbz r2, 0x4f98                                    |         goto label_31;
                                                                 |     }
    0x00004f32 movs r4, 0                                        |     r4 = 0;
    0x00004f34 b 0x4f60                                          |     goto label_32;
                                                                 | label_8:
    0x00004f36 cmp r2, r5                                        |     
                                                                 |     if (r2 == r5) {
    0x00004f38 beq 0x4fd0                                        |         goto label_33;
                                                                 |     }
                                                                 | label_11:
    0x00004f3a strb ip, [r2, -0x1]                               |     *((r2 - 0x1)) = ip;
                                                                 | label_9:
    0x00004f3e ldr r3, [r7, 0x1c]                                |     r3 = var_1ch;
    0x00004f40 cmp r6, 0                                         |     
    0x00004f42 ldr r2, [r7, 0x3c]                                |     r2 = var_3ch;
    0x00004f44 mov r1, r8                                        |     r1 = r8;
    0x00004f46 mov.w r6, 0                                       |     r6 = 0;
    0x00004f4a ite ne                                            |     
                                                                 |     if (r6 == 0) {
    0x00004f4c movne r0, r3                                      |         r0 = r3;
                                                                 |     }
                                                                 |     if (r6 != 0) {
    0x00004f4e moveq r0, r2                                      |         r0 = r2;
                                                                 |     }
    0x00004f50 bl 0xc218                                         |     fcn_0000c218 ();
                                                                 |     do {
    0x00004f54 ldr r2, [pc, 0x12c]                               |         
    0x00004f56 adds r4, 1                                        |         r4++;
    0x00004f58 add r2, pc                                        |         
    0x00004f5a ldr r2, [r2, 4]                                   |         r2 = *(0x9fe4);
    0x00004f5c cmp r4, r2                                        |         
                                                                 |         if (r4 >= r2) {
    0x00004f5e bhs 0x4f98                                        |             goto label_31;
                                                                 |         }
                                                                 | label_32:
    0x00004f60 ldr.w r2, [fp]                                    |         r2 = *(fp);
    0x00004f64 mov r0, sb                                        |         r0 = sb;
    0x00004f66 add.w r2, r2, r4, lsl 2                           |         r2 += (r4 << 2);
    0x00004f6a ldr r2, [r2, 0x14]                                |         r2 = *((r2 + 0x14));
    0x00004f6c cmp r2, 1                                         |         
    0x00004f6e beq 0x4f54                                        |         
                                                                 |     } while (r2 == 1);
    0x00004f70 ldr.w r5, [sl, 8]                                 |     r5 = *((sl + 8));
    0x00004f74 ldr.w r1, [r5, r4, lsl 3]                         |     offset_0 = r4 << 3;
                                                                 |     r1 = *((r5 + offset_0));
    0x00004f78 add.w r5, r5, r4, lsl 3                           |     r5 += (r4 << 3);
    0x00004f7c ldr r2, [r5, 4]                                   |     r2 = *((r5 + 4));
    0x00004f7e blx 0x15f40                                       |     fcn_00015f40 (r0, r1);
    0x00004f82 ldr r1, [r5, 4]                                   |     r1 = *((r5 + 4));
    0x00004f84 mov.w ip, 0                                       |     
    0x00004f88 add.w r5, r8, 1                                   |     r5 += var_1h;
    0x00004f8c adds r2, r0, r1                                   |     r2 = r0 + r1;
    0x00004f8e cmp r8, r2                                        |     
                                                                 |     if (r8 != r2) {
    0x00004f90 bne 0x4f36                                        |         goto label_8;
                                                                 |     }
    0x00004f92 movs r2, 0                                        |     r2 = 0;
    0x00004f94 strb r2, [r0, r1]                                 |     *((r0 + r1)) = r2;
    0x00004f96 b 0x4f3e                                          |     goto label_9;
                                                                 | label_31:
    0x00004f98 ldr r4, [fp, 4]!                                  |     r4 = var_bp_4h;
    0x00004f9c cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00004f9e bne 0x4f14                                        |         goto label_10;
                                                                 |     }
                                                                 | label_30:
    0x00004fa0 ldr.w fp, [r7, 0xc]                               |     fp = var_ch;
                                                                 | label_29:
    0x00004fa4 ldr r3, [r7, 0x18]                                |     r3 = var_18h;
                                                                 |     if (r3 == 0) {
    0x00004fa6 cbz r3, 0x4fde                                    |         goto label_34;
                                                                 |     }
    0x00004fa8 ldr r3, [r7, 0x18]                                |     r3 = var_18h;
    0x00004faa ldrb r3, [r3]                                     |     r3 = *(r3);
                                                                 |     if (r3 == 0) {
    0x00004fac cbnz r3, 0x4fba                                   |         
    0x00004fae ldr r3, [pc, 0xd8]                                |         
    0x00004fb0 add r3, pc                                        |         
    0x00004fb2 ldr r3, [r3]                                      |         
    0x00004fb4 ldr r3, [r3]                                      |         r3 = *(0xa03e);
    0x00004fb6 str r3, [r7, 0x18]                                |         var_18h = r3;
                                                                 |         if (r3 == 0) {
    0x00004fb8 cbz r3, 0x4fea                                    |             goto label_35;
                                                                 |         }
                                                                 |     }
                                                                 | label_13:
    0x00004fba ldr r0, [pc, 0xd0]                                |     
    0x00004fbc ldr r2, [r7, 0x18]                                |     r2 = var_18h;
    0x00004fbe ldr r1, [r7, 0x38]                                |     r1 = var_38h;
    0x00004fc0 add r0, pc                                        |     r0 = 0xa052;
    0x00004fc2 bl 0xc218                                         |     fcn_0000c218 ();
                                                                 | label_12:
    0x00004fc6 ldr r3, [r7, 0x38]                                |     r3 = var_38h;
    0x00004fc8 str r3, [r7, 0xc]                                 |     var_ch = r3;
    0x00004fca ldr.w sp, [r7, 0x10]                              |     sp = var_10h;
    0x00004fce b 0x4cd6                                          |     goto label_7;
                                                                 | label_33:
    0x00004fd0 ldrb.w r5, [r8]                                   |     r5 = *(r8);
    0x00004fd4 cmp r5, 0x2f                                      |     
                                                                 |     if (r5 != 0x2f) {
    0x00004fd6 bne 0x4f3a                                        |         goto label_11;
                                                                 |     }
    0x00004fd8 movs r2, 0                                        |     r2 = 0;
    0x00004fda strb r2, [r0, r1]                                 |     *((r0 + r1)) = r2;
    0x00004fdc b 0x4f3e                                          |     goto label_9;
                                                                 | label_34:
    0x00004fde ldr r0, [pc, 0xb0]                                |     
    0x00004fe0 ldr r1, [r7, 0x38]                                |     r1 = var_38h;
    0x00004fe2 add r0, pc                                        |     r0 = 0xa078;
    0x00004fe4 bl 0xc218                                         |     fcn_0000c218 ();
    0x00004fe8 b 0x4fc6                                          |     goto label_12;
                                                                 | label_35:
    0x00004fea ldr r3, [pc, 0xa8]                                |     
    0x00004fec add r3, pc                                        |     r3 = 0xa086;
    0x00004fee str r3, [r7, 0x18]                                |     var_18h = r3;
    0x00004ff0 b 0x4fba                                          |     goto label_13;
                                                                 | label_23:
    0x00004ff2 ldr r2, [r7, 4]                                   |     r2 = var_bp_4h;
    0x00004ff4 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
                                                                 |     if (r3 != 0) {
    0x00004ff6 cbz r3, 0x5002                                    |         
    0x00004ff8 ldr r3, [pc, 0x9c]                                |         
    0x00004ffa ldr r0, [r2]                                      |         r0 = *(r2);
    0x00004ffc add r3, pc                                        |         
    0x00004ffe ldr r3, [r3]                                      |         r3 = *(0xa098);
    0x00005000 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
                                                                 |     }
    0x00005002 ldr r3, [pc, 0x98]                                |     
    0x00005004 ldr r1, [r7, 4]                                   |     r1 = var_bp_4h;
    0x00005006 add r3, pc                                        |     r3 = 0xa0a8;
    0x00005008 add.w r2, r3, 0xc                                 |     r2 = r3 + 0xc;
    0x0000500c adds r3, 0x14                                     |     r3 += 0x14;
    0x0000500e cmp r1, r2                                        |     
    0x00005010 it ne                                             |     
                                                                 |     if (r1 == r2) {
    0x00005012 cmpne r1, r3                                      |         __asm ("cmpne r1, r3");
                                                                 |         goto label_36;
                                                                 |     }
                                                                 |     if (r1 == r2) {
                                                                 | label_36:
    0x00005014 beq.w 0x4dcc                                      |         goto label_14;
                                                                 |     }
    0x00005018 mov.w r2, -1                                      |     r2 = -1;
    0x0000501c mov r3, r2                                        |     r3 = r2;
    0x0000501e str r2, [r1]                                      |     *(r1) = r2;
    0x00005020 b 0x4dd0                                          |     goto label_15;
                                                                 | label_27:
    0x00005022 mov r0, r3                                        |     r0 = r3;
    0x00005024 mov.w r3, -1                                      |     r3 = -1;
    0x00005028 str r3, [r7, 0x3c]                                |     var_3ch = r3;
    0x0000502a bl 0x14720                                        |     fcn_00014720 ();
    0x0000502e ldr r3, [r7, 0x3c]                                |     r3 = var_3ch;
    0x00005030 b 0x4dd0                                          |     goto label_15;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x53fc */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000053fc ()                                      | void fcn_000053fc (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x000053fc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00005400 sub sp, 0x24                                      |     
    0x00005402 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00005404 mov r7, r2                                        |     r7 = r2;
    0x00005406 movs r4, 0                                        |     r4 = 0;
    0x00005408 add.w r8, sp, 0x1c                                |     r8 += var_1ch;
    0x0000540c ldr r3, [pc, 0x19c]                               |     
    0x0000540e ldr.w fp, [sp, 0x4c]                              |     fp = var_4ch;
    0x00005412 str r1, [sp, 8]                                   |     var_8h = r1;
    0x00005414 add r3, pc                                        |     r3 = 0xa9c4;
    0x00005416 str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x00005418 str r3, [sp, 4]                                   |     var_4h = r3;
    0x0000541a ldr r3, [pc, 0x194]                               |     
    0x0000541c add r3, pc                                        |     r3 = 0xa9d2;
    0x0000541e str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00005420 ldr r3, [pc, 0x190]                               |     
    0x00005422 add r3, pc                                        |     r3 = 0xa9da;
    0x00005424 str r3, [sp, 0x18]                                |     var_18h = r3;
                                                                 |     do {
                                                                 | label_2:
    0x00005426 mov r1, r7                                        |         r1 = r7;
    0x00005428 mov r0, r8                                        |         r0 = r8;
    0x0000542a bl 0x122a0                                        |         r0 = fcn_000122a0 (r0, r1);
    0x0000542e mov sb, r0                                        |         sb = r0;
                                                                 |         if (r0 == 0) {
    0x00005430 cbz r0, 0x5468                                    |             goto label_6;
                                                                 |         }
                                                                 | label_0:
    0x00005432 ldrb.w r6, [sb]                                   |         r6 = *(sb);
                                                                 |         if (r6 == 0) {
    0x00005436 cbz r6, 0x5474                                    |             goto label_7;
                                                                 |         }
    0x00005438 mov r1, sb                                        |         r1 = sb;
    0x0000543a mov r0, fp                                        |         r0 = fp;
    0x0000543c bl 0x5348                                         |         r0 = fcn_00005348 (r0, r1);
    0x00005440 mov sb, r0                                        |         sb = r0;
    0x00005442 cmp r0, 0                                         |         
    0x00005444 beq 0x5426                                        |         
                                                                 |     } while (r0 == 0);
    0x00005446 bl 0x15540                                        |     r0 = fcn_00015540 (r0, r1);
    0x0000544a mov r6, r0                                        |     r6 = r0;
    0x0000544c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0000544e bne 0x54c2                                        |         goto label_8;
                                                                 |     }
    0x00005450 ldr r3, [pc, 0x164]                               |     
    0x00005452 mov r0, sb                                        |     r0 = sb;
    0x00005454 add r3, pc                                        |     
    0x00005456 ldr r3, [r3]                                      |     r3 = *(0xaa10);
    0x00005458 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000545a mov r1, r7                                        |     r1 = r7;
    0x0000545c mov r0, r8                                        |     r0 = r8;
    0x0000545e bl 0x122a0                                        |     r0 = fcn_000122a0 (r0, r1);
    0x00005462 mov sb, r0                                        |     sb = r0;
    0x00005464 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00005466 bne 0x5432                                        |         goto label_0;
                                                                 |     }
                                                                 | label_6:
    0x00005468 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0000546a str.w r0, [r3, r4, lsl 2]                         |     __asm ("str.w r0, [r3, r4, lsl 2]");
    0x0000546e add sp, 0x24                                      |     
    0x00005470 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_7:
    0x00005474 mov sl, r6                                        |     sl = r6;
                                                                 | label_3:
    0x00005476 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x00005478 ldr.w r5, [r3, 0x590]                             |     r5 = *((r3 + 0x590));
                                                                 |     if (r5 != 0) {
    0x0000547c cbnz r5, 0x5486                                   |         goto label_4;
                                                                 |     }
    0x0000547e b 0x54f8                                          |     goto label_9;
                                                                 |     do {
                                                                 | label_1:
    0x00005480 ldr r5, [r5]                                      |         r5 = *(r5);
    0x00005482 cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x00005484 beq 0x54f8                                        |             goto label_9;
                                                                 |         }
                                                                 | label_4:
    0x00005486 ldr r3, [r5, 0x10]                                |         r3 = *((r5 + 0x10));
    0x00005488 cmp r3, r6                                        |         
    0x0000548a bne 0x5480                                        |         
                                                                 |     } while (r3 != r6);
    0x0000548c ldr r1, [r5, 0xc]                                 |     r1 = *((r5 + 0xc));
    0x0000548e mov r2, r6                                        |     r2 = r6;
    0x00005490 mov r0, sb                                        |     r0 = sb;
    0x00005492 bl 0x157dc                                        |     r0 = fcn_000157dc (r0, r1, r2);
    0x00005496 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00005498 bne 0x5480                                        |         goto label_1;
                                                                 |     }
    0x0000549a ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0000549c subs r3, 4                                        |     r3 -= 4;
                                                                 |     if (r4 == 0) {
    0x0000549e cbz r4, 0x54ae                                    |         goto label_5;
                                                                 |     }
                                                                 |     do {
    0x000054a0 ldr r2, [r3, 4]!                                  |         r2 = *((r3 += 4));
    0x000054a4 cmp r2, r5                                        |         
                                                                 |         if (r2 == r5) {
    0x000054a6 beq 0x54b6                                        |             goto label_10;
                                                                 |         }
    0x000054a8 adds r0, 1                                        |         r0++;
    0x000054aa cmp r0, r4                                        |         
    0x000054ac bne 0x54a0                                        |         
                                                                 |     } while (r0 != r4);
                                                                 | label_5:
    0x000054ae ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x000054b0 str.w r5, [r3, r4, lsl 2]                         |     __asm ("str.w r5, [r3, r4, lsl 2]");
    0x000054b4 adds r4, 1                                        |     r4++;
                                                                 | label_10:
    0x000054b6 ldr r3, [pc, 0x104]                               |     
    0x000054b8 mov r0, sl                                        |     r0 = sl;
    0x000054ba add r3, pc                                        |     
    0x000054bc ldr r3, [r3]                                      |     r3 = *(0xaa7c);
    0x000054be blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x000054c0 b 0x5426                                          |     goto label_2;
                                                                 | label_8:
    0x000054c2 add.w r3, sb, r0                                  |     r3 = sb + r0;
    0x000054c6 b 0x54d4                                          |     
                                                                 |     while (r6 != 1) {
    0x000054c8 ldrb r2, [r3, -0x1]!                              |         r2 = *((r3 -= 0x1));
    0x000054cc subs r1, r6, 1                                    |         r1 = r6 - 1;
    0x000054ce cmp r2, 0x2f                                      |         
                                                                 |         if (r2 != 0x2f) {
    0x000054d0 bne 0x54e4                                        |             goto label_11;
                                                                 |         }
    0x000054d2 mov r6, r1                                        |         r6 = r1;
    0x000054d4 cmp r6, 1                                         |         
    0x000054d6 bne 0x54c8                                        |         
                                                                 |     }
    0x000054d8 ldrb.w r3, [sb]                                   |     r3 = *(sb);
    0x000054dc cmp r3, 0x2f                                      |     
    0x000054de it eq                                             |     
                                                                 |     if (r3 == 0x2f) {
    0x000054e0 moveq sl, sb                                      |         sl = sb;
                                                                 |         goto label_12;
                                                                 |     }
                                                                 |     if (r3 == 0x2f) {
                                                                 | label_12:
    0x000054e2 beq 0x5476                                        |         goto label_3;
                                                                 |     }
                                                                 | label_11:
    0x000054e4 movs r3, 0x2f                                     |     r3 = 0x2f;
    0x000054e6 mov sl, sb                                        |     sl = sb;
    0x000054e8 strb.w r3, [sb, r6]                               |     *((sb + r6)) = r3;
    0x000054ec adds r6, 1                                        |     r6++;
    0x000054ee ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x000054f0 ldr.w r5, [r3, 0x590]                             |     r5 = *((r3 + 0x590));
    0x000054f4 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x000054f6 bne 0x5486                                        |         goto label_4;
                                                                 |     }
                                                                 | label_9:
    0x000054f8 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
                                                                 |     if (r3 != 0) {
    0x000054fa cbz r3, 0x5504                                    |         
    0x000054fc ldr r0, [sp, 0x48]                                |         r0 = var_48h;
    0x000054fe bl 0x15540                                        |         r0 = fcn_00015540 (r0, r1);
    0x00005502 adds r3, r0, 1                                    |         r3 = r0 + 1;
                                                                 |     }
    0x00005504 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00005506 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00005508 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0000550a add.w r3, r6, r3, lsl 2                           |     r3 = r6 + (r3 << 2);
    0x0000550e add.w r0, r3, 0x15                                |     r0 = r3 + 0x15;
    0x00005512 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00005514 add r0, r3                                        |     r0 += r3;
    0x00005516 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00005518 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0000551a blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000551c mov r5, r0                                        |     r5 = r0;
    0x0000551e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00005520 beq 0x559c                                        |         goto label_13;
                                                                 |     }
    0x00005522 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00005524 mov r2, r6                                        |     r2 = r6;
    0x00005526 mov r1, sb                                        |     r1 = sb;
    0x00005528 ldr r0, [r3, 4]                                   |     r0 = *((r3 + 4));
    0x0000552a adds r0, 5                                        |     r0 += 5;
    0x0000552c add.w r0, r5, r0, lsl 2                           |     r0 = r5 + (r0 << 2);
    0x00005530 str r0, [r5, 0xc]                                 |     *((r5 + 0xc)) = r0;
    0x00005532 blx 0x15f40                                       |     fcn_00015f40 (r0, r1);
    0x00005536 ldr r2, [pc, 0x88]                                |     
    0x00005538 movs r1, 0                                        |     r1 = 0;
    0x0000553a strb r1, [r0, r6]                                 |     *((r0 + r6)) = r1;
    0x0000553c str r6, [r5, 0x10]                                |     *((r5 + 0x10)) = r6;
    0x0000553e add r2, pc                                        |     r2 = 0xab04;
    0x00005540 ldrb.w r0, [sb]                                   |     r0 = *(sb);
    0x00005544 ldr r1, [r2]                                      |     r1 = *(0xab04);
    0x00005546 cmp r6, r1                                        |     
    0x00005548 it hi                                             |     
                                                                 |     if (r6 <= r1) {
    0x0000554a strhi r6, [r2]                                    |         *(r2) = r6;
                                                                 |     }
    0x0000554c subs r0, 0x2f                                     |     r0 -= 0x2f;
    0x0000554e ldr r2, [pc, 0x74]                                |     
    0x00005550 it ne                                             |     
                                                                 |     if (r0 == 0x2f) {
    0x00005552 movne r0, 1                                       |         r0 = 1;
                                                                 |     }
    0x00005554 lsls r0, r0, 1                                    |     r0 <<= 1;
    0x00005556 add r2, pc                                        |     r2 = 0xab20;
    0x00005558 ldr r3, [r2, 4]                                   |     r3 = *(0xab24);
                                                                 |     if (r3 == 0) {
    0x0000555a cbz r3, 0x556c                                    |         goto label_14;
                                                                 |     }
    0x0000555c add.w r1, r5, 0x10                                |     r1 = r5 + 0x10;
    0x00005560 movs r2, 0                                        |     r2 = 0;
                                                                 |     do {
    0x00005562 adds r2, 1                                        |         r2++;
    0x00005564 str r0, [r1, 4]!                                  |         *((r1 += 4)) = r0;
    0x00005568 cmp r2, r3                                        |         
    0x0000556a bne 0x5562                                        |         
                                                                 |     } while (r2 != r3);
                                                                 | label_14:
    0x0000556c ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0000556e str r2, [r5, 4]                                   |     *((r5 + 4)) = r2;
    0x00005570 ldr r2, [sp, 0x48]                                |     r2 = var_48h;
                                                                 |     if (r2 == 0) {
    0x00005572 cbz r2, 0x5598                                    |         goto label_15;
                                                                 |     }
    0x00005574 add.w r0, r6, 0x15                                |     r0 = r6 + 0x15;
    0x00005578 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x0000557a add.w r0, r0, r3, lsl 2                           |     r0 += (r3 << 2);
    0x0000557e ldr r1, [sp, 0x48]                                |     r1 = var_48h;
    0x00005580 add r0, r5                                        |     r0 += r5;
    0x00005582 blx 0x15f40                                       |     fcn_00015f40 (r0, r1);
                                                                 |     do {
    0x00005586 ldr r2, [pc, 0x40]                                |         
    0x00005588 str r0, [r5, 8]                                   |         *((r5 + 8)) = r0;
    0x0000558a add r2, pc                                        |         r2 = 0xab58;
    0x0000558c ldr.w r1, [r2, 0x590]                             |         r1 = *(0xb0e8);
    0x00005590 str r1, [r5]                                      |         *(r5) = r1;
    0x00005592 str.w r5, [r2, 0x590]                             |         __asm ("str.w r5, [r2, 0x590]");
    0x00005596 b 0x54ae                                          |         goto label_5;
                                                                 | label_15:
    0x00005598 ldr r0, [sp, 0x48]                                |         r0 = var_48h;
    0x0000559a b 0x5586                                          |         
                                                                 |     } while (1);
                                                                 | label_13:
    0x0000559c ldr r3, [pc, 0x2c]                                |     
    0x0000559e mov r2, r0                                        |     r2 = r0;
    0x000055a0 mov r1, r0                                        |     r1 = r0;
    0x000055a2 movs r0, 0xc                                      |     r0 = 0xc;
    0x000055a4 add r3, pc                                        |     r3 = 0xab74;
    0x000055a6 blx 0x9f4                                         |     fcn_000009f4 ();
    0x000055aa nop                                               |     
    0x000055ac ldrb r0, [r7, 0xf]                                |     r0 = *((r7 + 0xf));
    0x000055ae movs r2, r0                                       |     r2 = r0;
    0x000055b0 strb r0, [r2]                                     |     *(r2) = r0;
    0x000055b2 movs r2, r0                                       |     r2 = r0;
    0x000055b4 ldrb r6, [r6, 0xa]                                |     r6 = *((r6 + 0xa));
    0x000055b6 movs r2, r0                                       |     r2 = r0;
    0x000055b8 ldrb r4, [r1, 0xa]                                |     r4 = *((r1 + 0xa));
    0x000055ba movs r2, r0                                       |     r2 = r0;
    0x000055bc ldrb r6, [r4, 8]                                  |     r6 = *((r4 + 8));
    0x000055be movs r2, r0                                       |     r2 = r0;
    0x000055c0 strh r6, [r1, 0x1e]                               |     *((r1 + 0x1e)) = r6;
    0x000055c2 movs r2, r0                                       |     r2 = r0;
    0x000055c4 ldr r6, [r2, 0x6c]                                |     r6 = *((r2 + 0x6c));
    0x000055c6 movs r2, r0                                       |     r2 = r0;
    0x000055c8 ldrb r2, [r0, 0xa]                                |     r2 = *((r0 + 0xa));
    0x000055ca movs r2, r0                                       |     r2 = r0;
    0x000055cc adds r3, 0xa8                                     |     r3 += 0xa8;
    0x000055ce movs r1, r0                                       |     r1 = r0;
                                                                 | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x59cc */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                             |  
    ; (fcn) fcn.000059cc ()                                  | void fcn_000059cc (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                             |     int16_t var_bp_4h;
                                                             |     int16_t var_bp_10h;
                                                             |     int16_t var_18h;
                                                             |     int16_t var_0h;
                                                             |     int16_t var_4h;
                                                             |     int16_t var_8h;
                                                             |     int16_t var_ch;
                                                             |     int16_t var_10h;
                                                             |     int16_t var_3h;
                                                             |     int16_t var_28h;
                                                             |     int32_t var_8h_2;
                                                             |     int32_t var_14h;
                                                             |     int32_t var_18h_2;
                                                             |     int32_t var_1ch;
                                                             |     int32_t var_20h;
                                                             |     int32_t var_24h;
                                                             |     int32_t var_2ch;
                                                             |     int32_t var_30h;
                                                             |     int32_t var_38h;
                                                             |     int32_t var_40h;
                                                             |     int32_t var_44h;
                                                             |     int32_t var_48h;
                                                             |     int32_t var_4ch;
                                                             |     int32_t var_50h;
                                                             |     int32_t var_54h;
                                                             |     int16_t var_58h;
                                                             |     int32_t var_5ch;
                                                             |     int32_t var_60h;
                                                             |     int32_t var_64h;
                                                             |     int32_t var_0h_3;
                                                             |     int16_t var_0h_2;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
                                                             |     r2 = arg3;
                                                             |     r3 = arg4;
    0x000059cc svcmi 0xf0e92d                                |     __asm ("svcmi 0xf0e92d");
    0x000059d0 sub sp, 0xf4                                  |     
    0x000059d2 add r7, sp, 0x28                              |     r7 += var_28h;
    0x000059d4 str r0, [r7, 0x38]                            |     var_38h = r0;
    0x000059d6 movs r0, 0                                    |     r0 = 0;
    0x000059d8 str r1, [r7, 0x10]                            |     var_bp_10h = r1;
    0x000059da ldr.w r1, [r7, 0x104]                         |     r1 = *((r7 + 0x104));
    0x000059de str r3, [r7, 0x24]                            |     var_24h = r3;
    0x000059e0 str r2, [r7, 0x40]                            |     var_40h = r2;
    0x000059e2 bl 0xbdf0                                     |     fcn_0000bdf0 (r0);
    0x000059e6 ldr.w r3, [r7, 0xfc]                          |     r3 = *((r7 + 0xfc));
    0x000059ea str r0, [r7, 0x2c]                            |     var_2ch = r0;
    0x000059ec ands r3, r3, 0x20000000                       |     r3 &= 0x20000000;
    0x000059f0 str r3, [r7, 0x18]                            |     var_18h_2 = r3;
                                                             |     if (r3 == r3) {
    0x000059f2 beq.w 0x5daa                                  |         goto label_45;
                                                             |     }
    0x000059f6 ldr.w r3, [r7, 0x104]                         |     r3 = *((r7 + 0x104));
    0x000059fa cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x000059fc bne.w 0x6782                                  |         goto label_46;
                                                             |     }
    0x00005a00 ldr.w r3, [r7, 0x104]                         |     r3 = *((r7 + 0x104));
    0x00005a04 strd r3, r3, [r7, 0x48]                       |     __asm ("strd r3, r3, [var_48h]");
    0x00005a08 strd r3, r3, [r7, 0x50]                       |     __asm ("strd r3, r3, [var_50h]");
                                                             | label_6:
    0x00005a0c ldr.w r3, [r7, 0xfc]                          |     r3 = *((r7 + 0xfc));
    0x00005a10 ands r3, r3, 4                                |     r3 &= 4;
    0x00005a14 str r3, [r7, 0x20]                            |     var_20h = r3;
                                                             |     if (r3 != r3) {
    0x00005a16 bne.w 0x615c                                  |         goto label_47;
                                                             |     }
    0x00005a1a ldr.w r3, [pc, 0xb94]                         |     r3 = *(0x000065b0);
    0x00005a1e add r3, pc                                    |     r3 += pc;
    0x00005a20 ldr r3, [r3]                                  |     r3 = *(r3);
    0x00005a22 lsls r0, r3, 0x19                             |     r0 = r3 << 0x19;
                                                             |     if (r0 < r3) {
    0x00005a24 bmi.w 0x62fc                                  |         goto label_48;
                                                             |     }
                                                             | label_13:
    0x00005a28 ldr r3, [r7, 0x2c]                            |     r3 = var_2ch;
    0x00005a2a ldr r4, [r3, 0xc]                             |     r4 = *((r3 + 0xc));
    0x00005a2c cmp r4, 0                                     |     
                                                             |     if (r4 == 0) {
    0x00005a2e beq.w 0x5d76                                  |         goto label_49;
                                                             |     }
    0x00005a32 cmp r4, 1                                     |     
    0x00005a34 itt eq                                        |     
                                                             |     if (r4 != 1) {
    0x00005a36 moveq r3, 0                                   |         r3 = 0;
                                                             |     }
                                                             |     if (r4 != 1) {
    0x00005a38 streq r3, [r7, 0x14]                          |         *((r7 + 0x14)) = r3;
                                                             |     }
                                                             |     if (r4 != 1) {
    0x00005a3a bne.w 0x67ba                                  |         goto label_50;
                                                             |     }
                                                             | label_4:
    0x00005a3e ldr.w r3, [r7, 0x104]                         |     r3 = *((r7 + 0x104));
    0x00005a42 str r3, [sp, 4]                               |     var_4h = r3;
    0x00005a44 ldr.w r3, [r7, 0xfc]                          |     r3 = *((r7 + 0xfc));
    0x00005a48 str r3, [sp]                                  |     *(sp) = r3;
    0x00005a4a ldr r1, [r7, 0x38]                            |     r1 = var_38h;
    0x00005a4c ldrd r3, r2, [r7, 0xf4]                       |     __asm ("ldrd r3, r2, [r7, 0xf4]");
    0x00005a50 ldr.w r0, [r7, 0xf0]                          |     r0 = *((r7 + 0xf0));
    0x00005a54 bl 0x8950                                     |     r0 = fcn_00008950 (r0, r1, r2, r3, r4, r5);
    0x00005a58 mov r4, r0                                    |     r4 = r0;
    0x00005a5a cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00005a5c beq.w 0x630e                                  |         goto label_51;
                                                             |     }
    0x00005a60 ldr r0, [r7, 0x24]                            |     r0 = var_24h;
    0x00005a62 ldrh r2, [r0, 0x30]                           |     r2 = *((r0 + 0x30));
    0x00005a64 ldrd r1, r3, [r0, 0x1c]                       |     __asm ("ldrd r1, r3, [r0, 0x1c]");
    0x00005a68 ldrh r6, [r0, 0x14]                           |     r6 = *((r0 + 0x14));
    0x00005a6a lsls r5, r2, 5                                |     r5 = r2 << 5;
    0x00005a6c str.w r1, [r4, 0x158]                         |     __asm ("str.w r1, [r4, 0x158]");
    0x00005a70 ldr r1, [r0]                                  |     r1 = *(r0);
    0x00005a72 strh.w r2, [r4, 0x15c]                        |     *((r4 + 0x15c)) = r2;
    0x00005a76 adds r2, r3, r5                               |     r2 = r3 + r5;
    0x00005a78 str r6, [r7, 4]                               |     var_bp_4h = r6;
    0x00005a7a cmp r2, r1                                    |     
                                                             |     if (r2 > r1) {
    0x00005a7c bhi.w 0x60b2                                  |         goto label_52;
                                                             |     }
    0x00005a80 adds r2, r0, 4                                |     r2 = r0 + 4;
    0x00005a82 adds r3, r2, r3                               |     r3 = r2 + r3;
    0x00005a84 str r3, [r7, 0x1c]                            |     var_1ch = r3;
                                                             | label_11:
    0x00005a86 ldrh.w r2, [r4, 0x15c]                        |     r2 = *((r4 + 0x15c));
    0x00005a8a mov r1, sp                                    |     r1 = sp;
    0x00005a8c ldr r6, [r7, 0x1c]                            |     r6 = var_1ch;
    0x00005a8e str.w sp, [r7, 8]                             |     __asm ("str.w sp, [var_8h_2]");
    0x00005a92 add.w r3, r2, r2, lsl 1                       |     r3 = r2 + (r2 << 1);
    0x00005a96 add.w r2, r6, r2, lsl 5                       |     r2 = r6 + (r2 << 5);
    0x00005a9a sub.w r3, r1, r3, lsl 3                       |     r3 = r1 - (r3 << 3);
    0x00005a9e cmp r2, r6                                    |     
    0x00005aa0 mov sp, r3                                    |     
    0x00005aa2 add.w fp, sp, 0x28                            |     
                                                             |     if (r2 < r6) {
    0x00005aa6 bls.w 0x64a4                                  |         goto label_53;
                                                             |     }
    0x00005aaa ldr.w r1, [pc, 0xb08]                         |     r1 = *(0x000065b4);
    0x00005aae movw ip, 0xe551                               |     
    0x00005ab2 ldr.w r3, [pc, 0xb04]                         |     r3 = *(0x000065b8);
    0x00005ab6 movw r0, 0xe552                               |     
    0x00005aba movw r5, 0x6240                               |     
    0x00005abe movt ip, 0x6474                               |     ip = 0x6474e551;
    0x00005ac2 add r1, pc                                    |     r1 += pc;
    0x00005ac4 movt r0, 0x6474                               |     r0 = 0x6474e552;
    0x00005ac8 ldr.w r1, [r1, 0x884]                         |     r1 = *((r1 + 0x884));
    0x00005acc add r3, pc                                    |     r3 += pc;
    0x00005ace ldr.w lr, [r3, 0x10]                          |     
    0x00005ad2 movt r5, 0x7351                               |     r5 = 0x73516240;
    0x00005ad6 str r5, [r7, 0x28]                            |     *((r7 + 0x28)) = r5;
    0x00005ad8 str r1, [r7, 0xc]                             |     *((r7 + 0xc)) = r1;
    0x00005ada movs r1, 0                                    |     r1 = 0;
    0x00005adc mov sl, r1                                    |     sl = r1;
    0x00005ade str r1, [r7, 0x34]                            |     *((r7 + 0x34)) = r1;
    0x00005ae0 movs r1, 7                                    |     r1 = 7;
    0x00005ae2 add.w r3, lr, -1                              |     r3 = lr + -1;
    0x00005ae6 str r1, [r7, 0x30]                            |     *((r7 + 0x30)) = r1;
    0x00005ae8 rsb.w lr, lr, 0                               |     lr -= ;
    0x00005aec ldr.w r1, [r7, 0xfc]                          |     r1 = *((r7 + 0xfc));
    0x00005af0 mov r8, lr                                    |     r8 = lr;
    0x00005af2 str r3, [r7, 0x44]                            |     *((r7 + 0x44)) = r3;
    0x00005af4 mov r3, r6                                    |     r3 = r6;
    0x00005af6 and r1, r1, 0x8000000                         |     r1 &= 0x8000000;
    0x00005afa str r1, [r7]                                  |     *(r7) = r1;
                                                             |     do {
                                                             | label_2:
    0x00005afc ldr r1, [r3]                                  |         r1 = *(r3);
    0x00005afe cmp r1, 7                                     |         
                                                             |         if (r1 <= 7) {
    0x00005b00 bhi 0x5b1c                                    |             
                                                             |             if (r1 == 0) {
    0x00005b02 cbz r1, 0x5b32                                |                 goto label_1;
                                                             |             }
    0x00005b04 subs r1, 1                                    |             r1--;
    0x00005b06 cmp r1, 6                                     |             
                                                             |             if (r1 > 6) {
    0x00005b08 bhi 0x5b32                                    |                 goto label_1;
                                                             |             }
                                                             |             /* switch table (8 cases) at 0x5b0e */
    0x00005b0a tbh [pc, r1, lsl 1]                           |             __asm ("tbh [pc, r1, lsl 1]");
                                                             |         }
    0x00005b1c cmp r1, ip                                    |         
                                                             |         if (r1 == ip) {
    0x00005b1e beq.w 0x5d9c                                  |             goto label_54;
                                                             |         }
    0x00005b22 cmp r1, r0                                    |         
                                                             |         if (r1 == r0) {
    0x00005b24 bne 0x5b32                                    |             
    0x00005b26 ldr r1, [r3, 8]                               |             r1 = *((r3 + 8));
    0x00005b28 str.w r1, [r4, 0x250]                         |             __asm ("str.w r1, [r4, 0x250]");
    0x00005b2c ldr r1, [r3, 0x14]                            |             r1 = *((r3 + 0x14));
    0x00005b2e str.w r1, [r4, 0x254]                         |             __asm ("str.w r1, [r4, 0x254]");
                                                             |         }
                                                             | label_1:
    0x00005b32 adds r3, 0x20                                 |         r3 += 0x20;
    0x00005b34 cmp r2, r3                                    |         
    0x00005b36 bhi 0x5afc                                    |         
                                                             |     } while (r2 > r3);
                                                             | label_3:
    0x00005b38 cmp.w sl, 0                                   |     
                                                             |     if (sl == 0) {
    0x00005b3c beq.w 0x64a4                                  |         goto label_53;
                                                             |     }
    0x00005b40 ldr r3, [r7, 4]                               |     r3 = *((r7 + 4));
    0x00005b42 cmp r3, 3                                     |     
                                                             |     if (r3 != 3) {
    0x00005b44 bne.w 0x64ee                                  |         goto label_55;
                                                             |     }
    0x00005b48 add.w r3, sl, -1                              |     r3 = sl + -1;
    0x00005b4c ldr.w r5, [fp]                                |     r5 = *(fp);
    0x00005b50 add.w r3, r3, r3, lsl 1                       |     r3 += (r3 << 1);
    0x00005b54 ldr.w r2, [pc, 0xa64]                         |     r2 = *(0x000065bc);
    0x00005b58 add.w r3, fp, r3, lsl 3                       |     r3 = fp + (r3 << 3);
    0x00005b5c add r2, pc                                    |     r2 += pc;
    0x00005b5e ldr r3, [r3, 0xc]                             |     r3 = *((r3 + 0xc));
    0x00005b60 ldr.w r0, [r2, 0x16c]                         |     r0 = *((r2 + 0x16c));
    0x00005b64 sub.w sb, r3, r5                              |     sb = r3 - r5;
    0x00005b68 ldrd r3, r6, [fp, 0x10]                       |     __asm ("ldrd r3, r6, [var_bp_10h]");
    0x00005b6c ands r0, r5                                   |     r0 &= r5;
    0x00005b6e mov r1, sb                                    |     r1 = sb;
    0x00005b70 str r3, [sp, 4]                               |     var_4h = r3;
    0x00005b72 mov r2, r6                                    |     r2 = r6;
    0x00005b74 ldr r3, [r7, 0x40]                            |     r3 = *((r7 + 0x40));
    0x00005b76 str r3, [sp]                                  |     *(sp) = r3;
    0x00005b78 movw r3, 0x802                                |     r3 = 0x802;
    0x00005b7c bl 0x14a98                                    |     r0 = fcn_00014a98 (r0, r1);
    0x00005b80 adds r3, r0, 1                                |     r3 = r0 + 1;
    0x00005b82 str.w r0, [r4, 0x1b4]                         |     __asm ("str.w r0, [r4, 0x1b4]");
                                                             |     if (r3 == r0) {
    0x00005b86 beq 0x5c48                                    |         goto label_56;
                                                             |     }
    0x00005b88 ldr r3, [r7, 0x34]                            |     r3 = *((r7 + 0x34));
    0x00005b8a subs r5, r0, r5                               |     r5 = r0 - r5;
    0x00005b8c add r0, sb                                    |     r0 += sb;
    0x00005b8e str r5, [r4]                                  |     *(r4) = r5;
    0x00005b90 str.w r0, [r4, 0x1b8]                         |     __asm ("str.w r0, [r4, 0x1b8]");
    0x00005b94 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x00005b96 bne.w 0x5ea2                                  |         goto label_57;
                                                             |     }
                                                             | label_8:
    0x00005b9a ldrb.w r3, [r4, 0x199]                        |     r3 = *((r4 + 0x199));
    0x00005b9e mov r5, fp                                    |     r5 = fp;
    0x00005ba0 orr r3, r3, 0x40                              |     r3 |= 0x40;
    0x00005ba4 strb.w r3, [r4, 0x199]                        |     *((r4 + 0x199)) = r3;
                                                             |     do {
                                                             | label_0:
    0x00005ba8 lsls r3, r6, 0x1d                             |         r3 = r6 << 0x1d;
    0x00005baa itttt mi                                      |         
                                                             |         if (r3 >= r6) {
    0x00005bac ldrmi r3, [r4]                                |             r3 = *(r4);
                                                             |         }
                                                             |         if (r3 >= r6) {
    0x00005bae ldrmi r2, [r5, 4]                             |             r2 = *((r5 + 4));
                                                             |         }
                                                             |         if (r3 >= r6) {
    0x00005bb0 addmi r3, r3, r2                              |             r3 += r2;
                                                             |         }
                                                             |         if (r3 >= r6) {
    0x00005bb2 strmi r3, [r4, 0x1bc]                         |             *((r4 + 0x1bc)) = r3;
                                                             |         }
    0x00005bb6 ldr.w r3, [r4, 0x154]                         |         r3 = *((r4 + 0x154));
    0x00005bba cmp r3, 0                                     |         
                                                             |         if (r3 == 0) {
    0x00005bbc beq.w 0x6086                                  |             goto label_58;
                                                             |         }
                                                             | label_10:
    0x00005bc0 ldrd r2, r3, [r5, 8]                          |         __asm ("ldrd r2, r3, [r5, 8]");
    0x00005bc4 cmp r3, r2                                    |         
                                                             |         if (r3 >= r2) {
    0x00005bc6 bls 0x5c12                                    |             
    0x00005bc8 ldr.w r0, [pc, 0x9f4]                         |             r0 = *(0x000065c0);
    0x00005bcc ldr r1, [r4]                                  |             r1 = *(r4);
    0x00005bce add r0, pc                                    |             r0 += pc;
    0x00005bd0 add r2, r1                                    |             r2 += r1;
    0x00005bd2 add r3, r1                                    |             r3 += r1;
    0x00005bd4 ldr r1, [r0, 0x10]                            |             r1 = *((r0 + 0x10));
    0x00005bd6 str r0, [r7, 0x3c]                            |             *((r7 + 0x3c)) = r0;
    0x00005bd8 str r2, [r7, 0x44]                            |             *((r7 + 0x44)) = r2;
    0x00005bda add.w r8, r1, -1                              |             r8 = r1 + -1;
    0x00005bde rsbs r0, r1, 0                                |             r0 = r1 - ;
    0x00005be0 add r8, r2                                    |             r8 += r2;
    0x00005be2 and.w r8, r8, r0                              |             r8 &= r0;
    0x00005be6 cmp r8, r3                                    |             
    0x00005be8 it hs                                         |             
                                                             |             if (r8 < r3) {
    0x00005bea movhs r8, r3                                  |                 r8 = r3;
                                                             |             }
    0x00005bec cmp r2, r8                                    |             
                                                             |             if (r2 < r8) {
    0x00005bee bhs 0x5c0c                                    |                 
    0x00005bf0 ands r2, r6, 2                                |                 r2 = r6 & 2;
    0x00005bf4 str r2, [r7, 0x34]                            |                 *((r7 + 0x34)) = r2;
                                                             |                 if (r2 == r6) {
    0x00005bf6 beq.w 0x6424                                  |                     goto label_59;
                                                             |                 }
    0x00005bfa str r3, [r7, 0x3c]                            |                 *((r7 + 0x3c)) = r3;
    0x00005bfc movs r1, 0                                    |                 r1 = 0;
    0x00005bfe ldr r3, [r7, 0x44]                            |                 r3 = *((r7 + 0x44));
    0x00005c00 sub.w r2, r8, r3                              |                 r2 = r8 - r3;
    0x00005c04 mov r0, r3                                    |                 r0 = r3;
    0x00005c06 blx 0x15da0                                   |                 fcn_00015da0 (r0, r1);
    0x00005c0a ldr r3, [r7, 0x3c]                            |                 r3 = *((r7 + 0x3c));
                                                             |             }
                                                             | label_21:
    0x00005c0c cmp r3, r8                                    |             
                                                             |             if (r3 > r8) {
    0x00005c0e bhi.w 0x6390                                  |                 goto label_60;
                                                             |             }
                                                             |         }
                                                             | label_17:
    0x00005c12 adds r5, 0x18                                 |         r5 += 0x18;
                                                             | label_28:
    0x00005c14 add.w r3, sl, sl, lsl 1                       |         r3 = sl + (sl << 1);
    0x00005c18 add.w r3, fp, r3, lsl 3                       |         r3 = fp + (r3 << 3);
    0x00005c1c cmp r5, r3                                    |         
                                                             |         if (r5 >= r3) {
    0x00005c1e bhs.w 0x5eca                                  |             goto label_61;
                                                             |         }
    0x00005c22 ldrd r3, r1, [r5]                             |         __asm ("ldrd r3, r1, [r5]");
    0x00005c26 ldr r6, [r5, 0x14]                            |         r6 = *((r5 + 0x14));
    0x00005c28 cmp r1, r3                                    |         
    0x00005c2a bls 0x5ba8                                    |         
                                                             |     } while (r1 < r3);
    0x00005c2c ldr r0, [r4]                                  |     r0 = *(r4);
    0x00005c2e subs r1, r1, r3                               |     r1 -= r3;
    0x00005c30 mov r2, r6                                    |     r2 = r6;
    0x00005c32 add r0, r3                                    |     r0 += r3;
    0x00005c34 ldr r3, [r5, 0x10]                            |     r3 = *((r5 + 0x10));
    0x00005c36 str r3, [sp, 4]                               |     var_4h = r3;
    0x00005c38 ldr r3, [r7, 0x40]                            |     r3 = *((r7 + 0x40));
    0x00005c3a str r3, [sp]                                  |     *(sp) = r3;
    0x00005c3c movw r3, 0x812                                |     r3 = 0x812;
    0x00005c40 bl 0x14a98                                    |     fcn_00014a98 (r0, r1);
    0x00005c44 adds r0, 1                                    |     r0++;
                                                             |     if (r0 != 1) {
    0x00005c46 bne 0x5ba8                                    |         goto label_0;
                                                             |     }
                                                             | label_56:
    0x00005c48 ldr.w r5, [pc, 0x978]                         |     
    0x00005c4c add r5, pc                                    |     r5 = 0xc214;
    0x00005c4e b 0x63b2                                      |     goto label_62;
    0x00005c50 ldr r1, [r3, 0x14]                            |     r1 = *((r3 + 0x14));
    0x00005c52 cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x00005c54 beq.w 0x5b32                                  |         goto label_1;
                                                             |     }
    0x00005c58 str.w r1, [r4, 0x238]                         |     __asm ("str.w r1, [r4, 0x238]");
    0x00005c5c ldr r1, [r3, 0x1c]                            |     r1 = *((r3 + 0x1c));
    0x00005c5e str.w r1, [r4, 0x23c]                         |     __asm ("str.w r1, [r4, 0x23c]");
    0x00005c62 ldr r6, [r3, 8]                               |     r6 = *((r3 + 8));
                                                             |     if (r1 != 0) {
    0x00005c64 cbz r1, 0x5c6a                                |         
    0x00005c66 subs r1, 1                                    |         r1--;
    0x00005c68 ands r1, r6                                   |         r1 &= r6;
                                                             |     }
    0x00005c6a ldrb.w r5, [r4, 0x198]                        |     r5 = *((r4 + 0x198));
    0x00005c6e str.w r1, [r4, 0x240]                         |     __asm ("str.w r1, [r4, 0x240]");
    0x00005c72 ldr r1, [r3, 0x10]                            |     r1 = *((r3 + 0x10));
    0x00005c74 and r5, r5, 3                                 |     r5 &= 3;
    0x00005c78 cmp r5, 1                                     |     
    0x00005c7a strd r6, r1, [r4, 0x230]                      |     __asm ("strd r6, r1, [r4, 0x230]");
                                                             |     if (r5 == 1) {
    0x00005c7e beq.w 0x5b32                                  |         goto label_1;
                                                             |     }
    0x00005c82 ldr r1, [r7, 0xc]                             |     r1 = *((r7 + 0xc));
    0x00005c84 cmp r1, 0                                     |     
                                                             |     if (r1 != 0) {
    0x00005c86 bne.w 0x5b32                                  |         goto label_1;
                                                             |     }
    0x00005c8a ldr r1, [r4, 0x10]                            |     r1 = *((r4 + 0x10));
    0x00005c8c cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x00005c8e beq.w 0x5b32                                  |         goto label_1;
                                                             |     }
    0x00005c92 ldr r1, [r7]                                  |     r1 = *(r7);
    0x00005c94 cmp r1, 0                                     |     
                                                             |     if (r1 != 0) {
    0x00005c96 bne.w 0x5b32                                  |         goto label_1;
                                                             |     }
    0x00005c9a ldr.w r3, [pc, 0x92c]                         |     r3 = *(0x000065c8);
    0x00005c9e movw r2, 0x4cc                                |     r2 = 0x4cc;
    0x00005ca2 ldr.w r1, [pc, 0x928]                         |     
    0x00005ca6 ldr.w r0, [pc, 0x928]                         |     r0 = *(0x000065d0);
    0x00005caa add r3, pc                                    |     r3 += pc;
    0x00005cac add r1, pc                                    |     r1 = 0xc27e;
    0x00005cae add r0, pc                                    |     r0 += pc;
    0x00005cb0 bl 0x11f30                                    |     fcn_00011f30 (r0);
    0x00005cb4 ldr r1, [r3, 0x10]                            |     r1 = *((r3 + 0x10));
    0x00005cb6 cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x00005cb8 beq.w 0x5b32                                  |         goto label_1;
                                                             |     }
    0x00005cbc ldr r1, [r3, 0x14]                            |     r1 = *((r3 + 0x14));
    0x00005cbe adds r3, 0x20                                 |     r3 += 0x20;
    0x00005cc0 ldr r5, [r3, -0x18]                           |     r5 = *((r3 - 0x18));
    0x00005cc4 cmp r2, r3                                    |     
    0x00005cc6 lsr.w r1, r1, 3                               |     r1 >>= 3;
    0x00005cca str r5, [r4, 8]                               |     *((r4 + 8)) = r5;
    0x00005ccc strh.w r1, [r4, 0x15e]                        |     *((r4 + 0x15e)) = r1;
                                                             |     if (r2 > r3) {
    0x00005cd0 bhi.w 0x5afc                                  |         goto label_2;
                                                             |     }
    0x00005cd4 b 0x5b38                                      |     goto label_3;
    0x00005cd6 ldr r1, [r3, 0x1c]                            |     r1 = *((r3 + 0x1c));
    0x00005cd8 ldr r5, [r7, 0x44]                            |     r5 = *((r7 + 0x44));
    0x00005cda tst r1, r5                                    |     
                                                             |     if ((r1 & r5) != 0) {
    0x00005cdc bne.w 0x60d8                                  |         goto label_63;
                                                             |     }
    0x00005ce0 ldrd r5, r6, [r3, 4]                          |     __asm ("ldrd r5, r6, [r3, 4]");
    0x00005ce4 subs r1, 1                                    |     r1--;
    0x00005ce6 sub.w lr, r6, r5                              |     lr = r6 - r5;
    0x00005cea tst.w lr, r1                                  |     
                                                             |     if ((lr & r1) != 0) {
    0x00005cee bne.w 0x617c                                  |         goto label_64;
                                                             |     }
    0x00005cf2 and.w r1, r5, r8                              |     r1 = r5 & r8;
    0x00005cf6 ldr r5, [r3, 0x14]                            |     r5 = *((r3 + 0x14));
    0x00005cf8 str r1, [r7, 0x3c]                            |     *((r7 + 0x3c)) = r1;
    0x00005cfa lsl.w lr, sl, 1                               |     lr = sl << 1;
    0x00005cfe ldr r1, [r3, 0x10]                            |     r1 = *((r3 + 0x10));
    0x00005d00 and.w sb, r6, r8                              |     sb = r6 & r8;
    0x00005d04 add r5, r6                                    |     r5 += r6;
    0x00005d06 add r1, r6                                    |     r1 += r6;
    0x00005d08 add.w r6, lr, sl                              |     r6 = lr + sl;
    0x00005d0c str.w sb, [fp, r6, lsl 3]                     |     __asm ("str.w sb, [fp, r6, lsl 3]");
    0x00005d10 add.w r6, fp, r6, lsl 3                       |     r6 = fp + (r6 << 3);
    0x00005d14 str r5, [r6, 0xc]                             |     *((r6 + 0xc)) = r5;
    0x00005d16 ldr r5, [r7, 0x3c]                            |     r5 = *((r7 + 0x3c));
    0x00005d18 str r1, [r6, 8]                               |     *((r6 + 8)) = r1;
    0x00005d1a str r5, [r6, 0x10]                            |     *((r6 + 0x10)) = r5;
    0x00005d1c ldr r5, [r7, 0x44]                            |     r5 = *((r7 + 0x44));
    0x00005d1e add r1, r5                                    |     r1 += r5;
    0x00005d20 and.w r1, r1, r8                              |     r1 &= r8;
    0x00005d24 str r1, [r6, 4]                               |     *((r6 + 4)) = r1;
    0x00005d26 add.w r1, sl, 1                               |     r1 = sl + 1;
    0x00005d2a cmp r1, 1                                     |     
                                                             |     if (r1 >= 1) {
    0x00005d2c bls 0x5d3c                                    |         
    0x00005d2e ldr r5, [r6, -0x14]                           |         r5 = *((r6 - 0x14));
    0x00005d32 ldr r6, [r7, 0x34]                            |         r6 = *((r7 + 0x34));
    0x00005d34 cmp sb, r5                                    |         
    0x00005d36 it ne                                         |         
                                                             |         if (sb == r5) {
    0x00005d38 movne r6, 1                                   |             r6 = 1;
                                                             |         }
    0x00005d3a str r6, [r7, 0x34]                            |         *((r7 + 0x34)) = r6;
                                                             |     }
    0x00005d3c add lr, sl                                    |     lr += sl;
    0x00005d3e mov sl, r1                                    |     sl = r1;
    0x00005d40 ldr r1, [r3, 0x18]                            |     r1 = *((r3 + 0x18));
    0x00005d42 adds r3, 0x20                                 |     r3 += 0x20;
    0x00005d44 ldr r5, [r7, 0x28]                            |     r5 = *((r7 + 0x28));
    0x00005d46 add.w lr, fp, lr, lsl 3                       |     lr = fp + (lr << 3);
    0x00005d4a cmp r2, r3                                    |     
    0x00005d4c and r1, r1, 7                                 |     r1 &= 7;
    0x00005d50 lsl.w r1, r1, 2                               |     r1 <<= 2;
    0x00005d54 asr.w r1, r5, r1                              |     r1 = r5 >> r1;
    0x00005d58 and r1, r1, 0xf                               |     r1 &= 0xf;
    0x00005d5c str.w r1, [lr, 0x14]                          |     __asm ("str.w r1, [lr, 0x14]");
                                                             |     if (r2 > r3) {
    0x00005d60 bhi.w 0x5afc                                  |         goto label_2;
                                                             |     }
    0x00005d64 b 0x5b38                                      |     goto label_3;
    0x00005d66 ldr r1, [r3, 8]                               |     r1 = *((r3 + 8));
    0x00005d68 adds r3, 0x20                                 |     r3 += 0x20;
    0x00005d6a cmp r2, r3                                    |     
    0x00005d6c str.w r1, [r4, 0x154]                         |     __asm ("str.w r1, [r4, 0x154]");
                                                             |     if (r2 > r3) {
    0x00005d70 bhi.w 0x5afc                                  |         goto label_2;
                                                             |     }
    0x00005d74 b 0x5b38                                      |     goto label_3;
                                                             | label_49:
    0x00005d76 ldr.w r3, [r7, 0xfc]                          |     r3 = *((r7 + 0xfc));
    0x00005d7a lsls r1, r3, 4                                |     r1 = r3 << 4;
                                                             |     if (r1 >= r3) {
    0x00005d7c bmi 0x5d8e                                    |         
    0x00005d7e ldr.w r5, [pc, 0x854]                         |         r5 = *(0x000065d4);
    0x00005d82 add r5, pc                                    |         r5 += pc;
    0x00005d84 ldr.w r3, [r5, 0x1dc]                         |         r3 = *((r5 + 0x1dc));
    0x00005d88 cmp r3, 0                                     |         
                                                             |         if (r3 != 0) {
    0x00005d8a bne.w 0x63c8                                  |             goto label_65;
                                                             |         }
                                                             |     }
                                                             | label_19:
    0x00005d8e ldr r2, [r7, 0x2c]                            |     r2 = var_2ch;
    0x00005d90 movs r3, 1                                    |     r3 = 1;
    0x00005d92 str r3, [r7, 0x14]                            |     var_14h = r3;
    0x00005d94 str r3, [r2, 0xc]                             |     *((r2 + 0xc)) = r3;
    0x00005d96 bl 0xbdec                                     |     dl_debug_state ();
    0x00005d9a b 0x5a3e                                      |     goto label_4;
                                                             | label_54:
    0x00005d9c ldr r1, [r3, 0x18]                            |     r1 = *((r3 + 0x18));
    0x00005d9e adds r3, 0x20                                 |     r3 += 0x20;
    0x00005da0 cmp r2, r3                                    |     
    0x00005da2 str r1, [r7, 0x30]                            |     *((r7 + 0x30)) = r1;
                                                             |     if (r2 > r3) {
    0x00005da4 bhi.w 0x5afc                                  |         goto label_2;
                                                             |     }
    0x00005da8 b 0x5b38                                      |     goto label_3;
                                                             | label_45:
    0x00005daa ldr r0, [r7, 0x40]                            |     r0 = var_40h;
    0x00005dac add.w r1, r7, 0x58                            |     r1 += var_58h;
    0x00005db0 bl 0x143c8                                    |     r0 = fcn_000143c8 (r0, r1);
    0x00005db4 cmp r0, 0                                     |     
                                                             |     if (r0 < 0) {
    0x00005db6 blt.w 0x6460                                  |         goto label_66;
                                                             |     }
    0x00005dba ldr.w r2, [r7, 0x104]                         |     r2 = *((r7 + 0x104));
    0x00005dbe movs r3, 0x54                                 |     r3 = 0x54;
    0x00005dc0 ldr r0, [r7, 0x58]                            |     r0 = var_58h;
    0x00005dc2 ldr r1, [r7, 0x5c]                            |     r1 = var_5ch;
    0x00005dc4 ldr r6, [r7, 0x60]                            |     r6 = var_60h;
    0x00005dc6 mul r3, r2, r3                                |     r3 = r2 * r3;
    0x00005dca ldr.w r2, [pc, 0x80c]                         |     r2 = *(0x000065d8);
    0x00005dce ldr r5, [r7, 0x64]                            |     r5 = var_64h;
    0x00005dd0 str r0, [r7, 0x48]                            |     var_48h = r0;
    0x00005dd2 add r2, pc                                    |     r2 += pc;
    0x00005dd4 str r1, [r7, 0x4c]                            |     var_4ch = r1;
    0x00005dd6 ldr r4, [r2, r3]                              |     r4 = *((r2 + r3));
    0x00005dd8 str r6, [r7, 0x50]                            |     var_50h = r6;
    0x00005dda str r5, [r7, 0x54]                            |     var_54h = r5;
                                                             |     if (r4 != 0) {
    0x00005ddc cbnz r4, 0x5de4                               |         goto label_67;
                                                             |     }
    0x00005dde b 0x5e2a                                      |     goto label_68;
                                                             |     do {
                                                             | label_5:
    0x00005de0 ldr r4, [r4, 0xc]                             |         r4 = *((r4 + 0xc));
                                                             |         if (r4 == 0) {
    0x00005de2 cbz r4, 0x5e2a                                |             goto label_68;
                                                             |         }
                                                             | label_67:
    0x00005de4 ldrb.w r3, [r4, 0x199]                        |         r3 = *((r4 + 0x199));
    0x00005de8 lsls r3, r3, 0x1a                             |         r3 <<= 0x1a;
    0x00005dea bmi 0x5de0                                    |         
                                                             |     } while (r3 < r3);
    0x00005dec ldrd r2, r3, [r4, 0x1e0]                      |     __asm ("ldrd r2, r3, [r4, 0x1e0]");
    0x00005df0 cmp r3, r1                                    |     
    0x00005df2 it eq                                         |     
                                                             |     if (r3 != r1) {
    0x00005df4 cmpeq r2, r0                                  |         __asm ("cmpeq r2, r0");
                                                             |         goto label_69;
                                                             |     }
                                                             |     if (r3 != r1) {
                                                             | label_69:
    0x00005df6 bne 0x5de0                                    |         goto label_5;
                                                             |     }
    0x00005df8 ldrd r2, r3, [r4, 0x1e8]                      |     __asm ("ldrd r2, r3, [r4, 0x1e8]");
    0x00005dfc cmp r3, r5                                    |     
    0x00005dfe it eq                                         |     
                                                             |     if (r3 != r5) {
    0x00005e00 cmpeq r2, r6                                  |         __asm ("cmpeq r2, r6");
                                                             |         goto label_70;
                                                             |     }
                                                             |     if (r3 != r5) {
                                                             | label_70:
    0x00005e02 bne 0x5de0                                    |         goto label_5;
                                                             |     }
    0x00005e04 ldr r0, [r7, 0x40]                            |     r0 = var_40h;
    0x00005e06 bl 0x14720                                    |     fcn_00014720 ();
    0x00005e0a ldr.w r3, [pc, 0x7d0]                         |     r3 = *(0x000065dc);
    0x00005e0c adds r7, 0xd0                                 |     r7 += 0xd0;
    0x00005e0e ldr.w r0, [r7, 0xf0]                          |     r0 = *((r7 + 0xf0));
    0x00005e12 add r3, pc                                    |     r3 += pc;
    0x00005e14 ldr r3, [r3]                                  |     r3 = *(r3);
    0x00005e16 blx r3                                        |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00005e18 ldr r1, [r7, 0x38]                            |     r1 = var_38h;
    0x00005e1a ldr r0, [r4, 0x1c]                            |     r0 = *((r4 + 0x1c));
    0x00005e1c bl 0x5128                                     |     fcn_00005128 (r0, r1);
                                                             | label_7:
    0x00005e20 mov r0, r4                                    |     r0 = r4;
    0x00005e22 adds r7, 0xcc                                 |     r7 += 0xcc;
    0x00005e24 mov sp, r7                                    |     
    0x00005e26 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}    |     
                                                             | label_68:
    0x00005e2a ldr.w r3, [r7, 0x104]                         |     r3 = *((r7 + 0x104));
    0x00005e2e cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00005e30 beq.w 0x5a0c                                  |         goto label_6;
                                                             |     }
    0x00005e34 ldr.w r4, [pc, 0x7a8]                         |     r4 = *(0x000065e0);
    0x00005e38 add r4, pc                                    |     r4 += pc;
    0x00005e3a ldr.w r2, [r4, 0x778]                         |     r2 = *((r4 + 0x778));
    0x00005e3e ldr.w r3, [r4, 0x77c]                         |     r3 = *((r4 + 0x77c));
    0x00005e42 cmp r3, r1                                    |     
    0x00005e44 it eq                                         |     
                                                             |     if (r3 == r1) {
    0x00005e46 cmpeq r2, r0                                  |         __asm ("cmpeq r2, r0");
                                                             |     }
                                                             |     if (r3 == r1) {
    0x00005e48 beq.w 0x64da                                  |         goto label_71;
                                                             |     }
                                                             | label_26:
    0x00005e4c ldr.w r1, [pc, 0x794]                         |     r1 = *(0x000065e4);
    0x00005e50 ldr r0, [r7, 0x38]                            |     r0 = var_38h;
    0x00005e52 add r1, pc                                    |     r1 += pc;
    0x00005e54 add.w r1, r1, 0x598                           |     r1 += 0x598;
    0x00005e58 bl 0xc2c0                                     |     r0 = fcn_0000c2c0 (r0, r1);
    0x00005e5c cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00005e5e beq.w 0x5a0c                                  |         goto label_6;
                                                             |     }
                                                             | label_27:
    0x00005e62 ldr.w r3, [r7, 0x104]                         |     r3 = *((r7 + 0x104));
    0x00005e66 str r3, [sp, 4]                               |     var_4h = r3;
    0x00005e68 ldr.w r3, [r7, 0xfc]                          |     r3 = *((r7 + 0xfc));
    0x00005e6c str r3, [sp]                                  |     *(sp) = r3;
    0x00005e6e ldr r1, [r7, 0x38]                            |     r1 = var_38h;
    0x00005e70 ldrd r3, r2, [r7, 0xf4]                       |     __asm ("ldrd r3, r2, [r7, 0xf4]");
    0x00005e74 ldr.w r0, [r7, 0xf0]                          |     r0 = *((r7 + 0xf0));
    0x00005e78 bl 0x8950                                     |     r0 = fcn_00008950 (r0, r1, r2, r3, r4, r5);
    0x00005e7c mov r4, r0                                    |     r4 = r0;
    0x00005e7e cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00005e80 beq.w 0x676a                                  |         goto label_72;
                                                             |     }
    0x00005e84 ldr.w r3, [pc, 0x760]                         |     r3 = *(0x000065e8);
    0x00005e88 ldr r0, [r7, 0x40]                            |     r0 = var_40h;
    0x00005e8a add r3, pc                                    |     r3 += pc;
    0x00005e8c add.w r3, r3, 0x598                           |     r3 += 0x598;
    0x00005e90 str r3, [r4, 0x14]                            |     *((r4 + 0x14)) = r3;
    0x00005e92 bl 0x14720                                    |     fcn_00014720 ();
    0x00005e96 ldr.w r1, [r7, 0x104]                         |     r1 = *((r7 + 0x104));
    0x00005e9a mov r0, r4                                    |     r0 = r4;
    0x00005e9c bl 0x88cc                                     |     fcn_000088cc (r0, r1);
    0x00005ea0 b 0x5e20                                      |     goto label_7;
                                                             | label_57:
    0x00005ea2 add.w r3, sl, sl, lsl 1                       |     r3 = sl + (sl << 1);
    0x00005ea6 ldr.w r0, [fp, 4]                             |     r0 = var_bp_4h;
    0x00005eaa movs r2, 0                                    |     r2 = 0;
    0x00005eac add.w r3, fp, r3, lsl 3                       |     r3 = fp + (r3 << 3);
    0x00005eb0 ldr r1, [r3, -0x18]                           |     r1 = *((r3 - 0x18));
    0x00005eb4 subs r1, r1, r0                               |     r1 -= r0;
    0x00005eb6 add r0, r5                                    |     r0 += r5;
    0x00005eb8 bl 0x14b10                                    |     r0 = fcn_00014b10 (r0);
    0x00005ebc cmp r0, 0                                     |     
                                                             |     if (r0 >= 0) {
    0x00005ebe bge.w 0x5b9a                                  |         goto label_8;
                                                             |     }
                                                             | label_20:
    0x00005ec2 ldr.w r5, [pc, 0x728]                         |     r5 = *(0x000065ec);
    0x00005ec6 add r5, pc                                    |     r5 += pc;
    0x00005ec8 b 0x63b2                                      |     goto label_62;
                                                             | label_61:
    0x00005eca ldr r3, [r4, 8]                               |     r3 = *((r4 + 8));
    0x00005ecc ldr.w sp, [r7, 8]                             |     sp = *((r7 + 8));
    0x00005ed0 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00005ed2 beq.w 0x6478                                  |         goto label_73;
                                                             |     }
    0x00005ed6 ldr.w sl, [r4]                                |     sl = *(r4);
    0x00005eda add.w r2, r3, sl                              |     r2 = r3 + sl;
    0x00005ede str r2, [r4, 8]                               |     *((r4 + 8)) = r2;
    0x00005ee0 cmp r2, 0                                     |     
                                                             |     if (r2 == 0) {
    0x00005ee2 beq.w 0x6480                                  |         goto label_74;
                                                             |     }
    0x00005ee6 ldr.w r3, [r3, sl]                            |     r3 = *((r3 + sl));
    0x00005eea add.w r1, r4, 0x20                            |     r1 = r4 + 0x20;
                                                             |     if (r3 == 0) {
    0x00005eee cbz r3, 0x5f5e                                |         goto label_75;
                                                             |     }
    0x00005ef0 movw ip, 0xfdff                               |     
    0x00005ef4 movw r8, 0xfeff                               |     
    0x00005ef8 movw fp, 0xff41                               |     
    0x00005efc movw lr, 0xfe35                               |     
    0x00005f00 movs r6, 0x22                                 |     r6 = 0x22;
    0x00005f02 movt ip, 0x6fff                               |     ip = 0x6ffffdff;
    0x00005f06 movt r8, 0x6fff                               |     r8 = 0x6ffffeff;
    0x00005f0a movt fp, 0x6fff                               |     fp = 0x6fffff41;
    0x00005f0e movt lr, 0x6fff                               |     lr = 0x6ffffe35;
    0x00005f12 movt r6, 0x7000                               |     r6 = (r6 & 0xFFFF) | 0x70000000;
    0x00005f16 mvn r5, 0x90000000                            |     r5 = ~0x90000000;
                                                             |     do {
    0x00005f1a cmp r3, 0x22                                  |         
                                                             |         if (r3 >= 0x22) {
    0x00005f1c bls 0x5f52                                    |             
    0x00005f1e subs r0, r5, r3                               |             r0 = r5 - r3;
    0x00005f20 cmp r0, 0xf                                   |             
    0x00005f22 it ls                                         |             
                                                             |             if (r0 > 0xf) {
    0x00005f24 subls r3, r6, r3                              |                 r3 = r6 - r3;
                                                             |             }
                                                             |             if (r0 < 0xf) {
    0x00005f26 bls 0x5f52                                    |                 goto label_76;
                                                             |             }
    0x00005f28 sbfx r0, r3, 0, 0x1f                          |             __asm ("sbfx r0, r3, 0, 0x1f");
    0x00005f2c cmn.w r0, 4                                   |             
    0x00005f30 it hi                                         |             
                                                             |             if (r0 > 4) {
    0x00005f32 rsbhi r3, r0, 0x32                            |                 __asm ("rsbhi r3, r0, 0x32");
                                                             |             }
                                                             |             if (r0 > 4) {
    0x00005f36 bhi 0x5f52                                    |                 goto label_76;
                                                             |             }
    0x00005f38 sub.w r0, ip, r3                              |             r0 = ip - r3;
    0x00005f3c cmp r0, 0xb                                   |             
    0x00005f3e it ls                                         |             
                                                             |             if (r0 > 0xb) {
    0x00005f40 subls r3, lr, r3                              |                 r3 = lr - r3;
                                                             |             }
                                                             |             if (r0 < 0xb) {
    0x00005f44 bls 0x5f52                                    |                 goto label_76;
                                                             |             }
    0x00005f46 sub.w r0, r8, r3                              |             r0 = r8 - r3;
    0x00005f4a cmp r0, 0xa                                   |             
                                                             |             if (r0 > 0xa) {
    0x00005f4c bhi 0x5f56                                    |                 goto label_77;
                                                             |             }
    0x00005f4e sub.w r3, fp, r3                              |             r3 = fp - r3;
                                                             |         }
                                                             | label_76:
    0x00005f52 str.w r2, [r1, r3, lsl 2]                     |         __asm ("str.w r2, [r1, r3, lsl 2]");
                                                             | label_77:
    0x00005f56 ldr r3, [r2, 8]!                              |         r3 = *((r2 += 8));
    0x00005f5a cmp r3, 0                                     |         
    0x00005f5c bne 0x5f1a                                    |         
                                                             |     } while (r3 != 0);
                                                             | label_75:
    0x00005f5e cmp.w sl, 0                                   |     
                                                             |     if (sl != 0) {
    0x00005f62 bne.w 0x632c                                  |         goto label_78;
                                                             |     }
                                                             | label_16:
    0x00005f66 ldr r3, [r4, 0x70]                            |     r3 = *((r4 + 0x70));
                                                             |     if (r3 != 0) {
    0x00005f68 cbz r3, 0x5f76                                |         
    0x00005f6a ldr r3, [r3, 4]                               |         r3 = *((r3 + 4));
    0x00005f6c cmp r3, 7                                     |         
    0x00005f6e it ne                                         |         
                                                             |         if (r3 != 7) {
    0x00005f70 cmpne r3, 0x11                                |             __asm ("cmpne r3, 0x11");
                                                             |         }
                                                             |         if (r3 != 7) {
    0x00005f72 bne.w 0x67a8                                  |             goto label_79;
                                                             |         }
                                                             |     }
    0x00005f76 ldr r3, [r4, 0x3c]                            |     r3 = *((r4 + 0x3c));
                                                             |     if (r3 != 0) {
    0x00005f78 cbz r3, 0x5f84                                |         
    0x00005f7a ldr r3, [r4, 0x44]                            |         r3 = *((r4 + 0x44));
    0x00005f7c ldr r3, [r3, 4]                               |         r3 = *((r3 + 4));
    0x00005f7e cmp r3, 0xc                                   |         
                                                             |         if (r3 != 0xc) {
    0x00005f80 bne.w 0x6796                                  |             goto label_80;
                                                             |         }
                                                             |     }
    0x00005f84 ldr r3, [r4, 0x64]                            |     r3 = *((r4 + 0x64));
                                                             |     if (r3 != 0) {
    0x00005f86 cbz r3, 0x5f92                                |         
    0x00005f88 ldr r3, [r4, 0x6c]                            |         r3 = *((r4 + 0x6c));
    0x00005f8a ldr r3, [r3, 4]                               |         r3 = *((r3 + 4));
    0x00005f8c cmp r3, 8                                     |         
                                                             |         if (r3 != 8) {
    0x00005f8e bne.w 0x67ce                                  |             goto label_81;
                                                             |         }
                                                             |     }
    0x00005f92 ldr.w r3, [r4, 0x98]                          |     r3 = *((r4 + 0x98));
                                                             |     if (r3 != 0) {
    0x00005f96 cbz r3, 0x5fb2                                |         
    0x00005f98 ldr r2, [r3, 4]                               |         r2 = *((r3 + 4));
    0x00005f9a lsls r0, r2, 0x1e                             |         r0 = r2 << 0x1e;
    0x00005f9c str.w r2, [r4, 0x210]                         |         __asm ("str.w r2, [r4, 0x210]");
    0x00005fa0 it mi                                         |         
                                                             |         if (r0 >= r2) {
    0x00005fa2 strmi r3, [r4, 0x60]                          |             *((r4 + 0x60)) = r3;
                                                             |         }
    0x00005fa4 lsls r1, r2, 0x1d                             |         r1 = r2 << 0x1d;
    0x00005fa6 it mi                                         |         
                                                             |         if (r1 >= r2) {
    0x00005fa8 strmi r3, [r4, 0x78]                          |             *((r4 + 0x78)) = r3;
                                                             |         }
    0x00005faa lsls r6, r2, 0x1c                             |         r6 = r2 << 0x1c;
    0x00005fac it mi                                         |         
                                                             |         if (r6 < r2) {
    0x00005fae strmi r3, [r4, 0x80]                          |             *((r4 + 0x80)) = r3;
                                                             |             goto label_82;
                                                             |         }
                                                             |     }
                                                             | label_82:
    0x00005fb2 ldr.w r3, [r4, 0xbc]                          |     r3 = *((r4 + 0xbc));
    0x00005fb6 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00005fb8 beq.w 0x6554                                  |         goto label_83;
                                                             |     }
    0x00005fbc ldr r3, [r3, 4]                               |     r3 = *((r3 + 4));
    0x00005fbe lsls r5, r3, 0x1c                             |     r5 = r3 << 0x1c;
    0x00005fc0 str.w r3, [r4, 0x20c]                         |     __asm ("str.w r3, [r4, 0x20c]");
    0x00005fc4 itt mi                                        |     
                                                             |     if (r5 >= r3) {
    0x00005fc6 movmi r2, 1                                   |         r2 = 1;
                                                             |     }
                                                             |     if (r5 >= r3) {
    0x00005fc8 strbmi r2, [r4, 0x19c]                        |         *((r4 + 0x19c)) = r2;
                                                             |     }
    0x00005fcc ldr.w r2, [pc, 0x620]                         |     r2 = *(0x000065f0);
    0x00005fd0 add r2, pc                                    |     r2 += pc;
    0x00005fd2 ldr r2, [r2]                                  |     r2 = *(r2);
    0x00005fd4 lsls r0, r2, 0x19                             |     r0 = r2 << 0x19;
                                                             |     if (r0 < r2) {
    0x00005fd6 bmi.w 0x66d2                                  |         goto label_84;
                                                             |     }
                                                             | label_37:
    0x00005fda ldr.w r2, [r4, 0x20c]                         |     r2 = *((r4 + 0x20c));
                                                             | label_38:
    0x00005fde lsls r1, r3, 0x1f                             |     r1 = r3 << 0x1f;
    0x00005fe0 itt mi                                        |     
                                                             |     if (r1 >= r3) {
    0x00005fe2 ldrmi r3, [r4, 0xbc]                          |         r3 = *((r4 + 0xbc));
                                                             |     }
                                                             |     if (r1 < r3) {
    0x00005fe6 str.w r3, [r4, 0x80]                          |         __asm ("str.w r3, [r4, 0x80]");
                                                             |     }
                                                             | label_30:
    0x00005fea ldr.w r3, [r4, 0x94]                          |     r3 = *((r4 + 0x94));
                                                             |     if (r3 != 0) {
    0x00005fee cbz r3, 0x5ff4                                |         
    0x00005ff0 movs r3, 0                                    |         r3 = 0;
    0x00005ff2 str r3, [r4, 0x5c]                            |         *((r4 + 0x5c)) = r3;
                                                             |     }
                                                             | label_23:
    0x00005ff4 ldr.w r3, [r7, 0xfc]                          |     r3 = *((r7 + 0xfc));
    0x00005ff8 lsrs r3, r3, 0x1f                             |     r3 >>= 0x1f;
    0x00005ffa ands.w r3, r3, r2, lsr 6                      |     r3 &= (r2 >> 6);
                                                             |     if (r3 != r3) {
    0x00005ffe bne.w 0x6760                                  |         goto label_85;
                                                             |     }
    0x00006002 ldr r3, [r7, 0x18]                            |     r3 = var_18h_2;
    0x00006004 clz r3, r3                                    |     r3 &= r3;
    0x00006008 lsrs r3, r3, 5                                |     r3 >>= 5;
    0x0000600a ands.w r3, r3, r2, lsr 27                     |     r3 &= (r2 >> 27);
                                                             |     if (r3 != r3) {
    0x0000600e bne.w 0x6760                                  |         goto label_85;
                                                             |     }
    0x00006012 ldr.w r3, [r4, 0x154]                         |     r3 = *((r4 + 0x154));
    0x00006016 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00006018 beq.w 0x64aa                                  |         goto label_86;
                                                             |     }
    0x0000601c ldr r2, [r4]                                  |     r2 = *(r4);
    0x0000601e add r3, r2                                    |     r3 += r2;
    0x00006020 str.w r3, [r4, 0x154]                         |     __asm ("str.w r3, [r4, 0x154]");
                                                             | label_25:
    0x00006024 ldr.w r2, [pc, 0x5cc]                         |     r2 = *(0x000065f4);
    0x00006028 ldr r1, [r7, 0x30]                            |     r1 = var_30h;
    0x0000602a add r2, pc                                    |     r2 += pc;
    0x0000602c ldr.w r3, [r2, 0x878]                         |     r3 = *((r2 + 0x878));
    0x00006030 bic.w r3, r1, r3                              |     r3 = BIT_MASK (r1, r3);
    0x00006034 lsls r3, r3, 0x1f                             |     r3 <<= 0x1f;
                                                             |     if (r3 < r3) {
    0x00006036 bmi.w 0x657c                                  |         goto label_87;
                                                             |     }
                                                             | label_33:
    0x0000603a ldr.w r3, [r4, 0x230]                         |     r3 = *((r4 + 0x230));
                                                             |     if (r3 != 0) {
    0x0000603e cbz r3, 0x6048                                |         
    0x00006040 ldr r2, [r4]                                  |         r2 = *(r4);
    0x00006042 add r3, r2                                    |         r3 += r2;
    0x00006044 str.w r3, [r4, 0x230]                         |         __asm ("str.w r3, [r4, 0x230]");
                                                             |     }
    0x00006048 ldr.w r2, [r4, 0x154]                         |     r2 = *((r4 + 0x154));
    0x0000604c ldrh.w r6, [r4, 0x15c]                        |     r6 = *((r4 + 0x15c));
    0x00006050 add.w r6, r2, r6, lsl 5                       |     r6 = r2 + (r6 << 5);
    0x00006054 cmp r2, r6                                    |     
                                                             |     if (r2 == r6) {
    0x00006056 beq.w 0x6190                                  |         goto label_88;
                                                             |     }
    0x0000605a movw r5, 0xe553                               |     
    0x0000605e ldr.w r8, [r7, 0x40]                          |     r8 = var_40h;
    0x00006062 movt r5, 0x6474                               |     r5 = 0x6474e553;
    0x00006066 b 0x606e                                      |     
                                                             |     while (r3 != r5) {
                                                             | label_9:
    0x00006068 cmp r2, r6                                    |         
                                                             |         if (r2 == r6) {
    0x0000606a beq.w 0x6190                                  |             goto label_88;
                                                             |         }
    0x0000606e ldr r3, [r6, -0x20]!                          |         r3 = *((r6 -= 0x20));
    0x00006072 cmp r3, r5                                    |         
    0x00006074 bne 0x6068                                    |         
                                                             |     }
    0x00006076 mov r2, r6                                    |     r2 = r6;
    0x00006078 mov r1, r8                                    |     r1 = r8;
    0x0000607a mov r0, r4                                    |     r0 = r4;
    0x0000607c bl 0x596c                                     |     fcn_0000596c (r0, r1);
    0x00006080 ldr.w r2, [r4, 0x154]                         |     r2 = *((r4 + 0x154));
    0x00006084 b 0x6068                                      |     goto label_9;
                                                             | label_58:
    0x00006086 ldr r1, [r7, 0x24]                            |     r1 = *((r7 + 0x24));
    0x00006088 ldr r2, [r5, 0x10]                            |     r2 = *((r5 + 0x10));
    0x0000608a ldr r3, [r1, 0x20]                            |     r3 = *((r1 + 0x20));
    0x0000608c cmp r2, r3                                    |     
                                                             |     if (r2 > r3) {
    0x0000608e bhi.w 0x5bc0                                  |         goto label_10;
                                                             |     }
    0x00006092 ldrh r0, [r1, 0x30]                           |     r0 = *((r1 + 0x30));
    0x00006094 ldr r1, [r5, 4]                               |     r1 = *((r5 + 4));
    0x00006096 ldr.w ip, [r5]                                |     ip = *(r5);
    0x0000609a add.w r0, r3, r0, lsl 5                       |     r0 = r3 + (r0 << 5);
    0x0000609e add r1, r2                                    |     r1 += r2;
    0x000060a0 sub.w r1, r1, ip                              |     r1 -= ip;
    0x000060a4 cmp r1, r0                                    |     
    0x000060a6 ittt hs                                       |     
                                                             |     if (r1 < r0) {
    0x000060a8 addhs r3, ip                                  |         r3 += ip;
                                                             |     }
                                                             |     if (r1 < r0) {
    0x000060aa subhs r3, r3, r2                              |         r3 -= r2;
                                                             |     }
                                                             |     if (r1 < r0) {
    0x000060ac strhs r3, [r4, 0x154]                         |         *((r4 + 0x154)) = r3;
                                                             |     }
    0x000060b0 b 0x5bc0                                      |     goto label_10;
                                                             | label_52:
    0x000060b2 sub.w sp, sp, r5                              |     
    0x000060b6 mov r2, r5                                    |     r2 = r5;
    0x000060b8 str r3, [sp]                                  |     *(sp) = r3;
    0x000060ba add r3, sp, 0x28                              |     r3 += var_28h;
    0x000060bc str r3, [r7, 0x1c]                            |     var_1ch = r3;
    0x000060be mov r1, r3                                    |     r1 = r3;
    0x000060c0 movs r3, 0                                    |     r3 = 0;
    0x000060c2 str r3, [sp, 4]                               |     var_4h = r3;
    0x000060c4 ldr r0, [r7, 0x40]                            |     r0 = var_40h;
    0x000060c6 bl 0x14914                                    |     r0 = fcn_00014914 (r0);
    0x000060ca cmp r0, r5                                    |     
                                                             |     if (r0 == r5) {
    0x000060cc beq.w 0x5a86                                  |         goto label_11;
                                                             |     }
    0x000060d0 ldr.w r5, [pc, 0x524]                         |     
    0x000060d4 add r5, pc                                    |     r5 = 0xc6d0;
    0x000060d6 b 0x6572                                      |     goto label_44;
                                                             | label_63:
    0x000060d8 ldr.w r5, [pc, 0x520]                         |     
    0x000060dc add r5, pc                                    |     r5 = 0xc6dc;
                                                             |     do {
                                                             | label_18:
    0x000060de ldr.w sp, [r7, 8]                             |         sp = *((r7 + 8));
                                                             | label_32:
    0x000060e2 ldr r3, [r7, 0x40]                            |         r3 = var_40h;
    0x000060e4 adds r3, 1                                    |         r3++;
                                                             |         if (r3 != 1) {
    0x000060e6 beq 0x60ee                                    |             
    0x000060e8 ldr r0, [r7, 0x40]                            |             r0 = var_40h;
    0x000060ea bl 0x14720                                    |             fcn_00014720 ();
                                                             |         }
    0x000060ee ldr.w r0, [r4, 0x1b4]                         |         r0 = *((r4 + 0x1b4));
    0x000060f2 cmp r0, 0                                     |         
                                                             |         if (r0 != 0) {
    0x000060f4 bne 0x6184                                    |             goto label_89;
                                                             |         }
                                                             | label_12:
    0x000060f6 ldr.w r0, [r4, 0x1b0]                         |         r0 = *((r4 + 0x1b0));
    0x000060fa adds r2, r0, 1                                |         r2 = r0 + 1;
                                                             |         if (r2 != r0) {
    0x000060fc beq 0x6108                                    |             
    0x000060fe ldr.w r3, [pc, 0x500]                         |             r3 = *(0x00006600);
    0x00006102 add r3, pc                                    |             r3 += pc;
    0x00006104 ldr r3, [r3]                                  |             r3 = *(r3);
    0x00006106 blx r3                                        |             uint32_t (*r3)(uint32_t) (r3);
                                                             |         }
    0x00006108 ldr r0, [r4, 0x1c]                            |         r0 = *((r4 + 0x1c));
    0x0000610a ldr r3, [r0, 8]                               |         r3 = *((r0 + 8));
                                                             |         if (r3 == 0) {
    0x0000610c cbnz r3, 0x6118                               |             
    0x0000610e ldr.w r3, [pc, 0x4f4]                         |             r3 = *(0x00006604);
    0x00006112 add r3, pc                                    |             r3 += pc;
    0x00006114 ldr r3, [r3]                                  |             r3 = *(r3);
    0x00006116 blx r3                                        |             uint32_t (*r3)(uint32_t) (r3);
                                                             |         }
    0x00006118 ldrsb.w r3, [r4, 0x198]                       |         r3 = *((r4 + 0x198));
    0x0000611c cmp r3, 0                                     |         
                                                             |         if (r3 < 0) {
    0x0000611e bge 0x612e                                    |             
    0x00006120 ldr.w r3, [pc, 0x4e4]                         |             r3 = *(0x00006608);
    0x00006124 ldr.w r0, [r4, 0x154]                         |             r0 = *((r4 + 0x154));
    0x00006128 add r3, pc                                    |             r3 += pc;
    0x0000612a ldr r3, [r3]                                  |             r3 = *(r3);
    0x0000612c blx r3                                        |             uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
                                                             |         }
                                                             | label_14:
    0x0000612e mov r0, r4                                    |         r0 = r4;
    0x00006130 ldr.w r4, [pc, 0x4d8]                         |         r4 = *(0x0000660c);
    0x00006134 add r4, pc                                    |         r4 += pc;
    0x00006136 ldr r3, [r4]                                  |         r3 = *(r4);
    0x00006138 blx r3                                        |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000613a ldr r3, [r4]                                  |         r3 = *(r4);
    0x0000613c ldr.w r0, [r7, 0xf0]                          |         r0 = *((r7 + 0xf0));
    0x00006140 blx r3                                        |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00006142 ldr r3, [r7, 0x14]                            |         r3 = var_14h;
                                                             |         if (r3 != 0) {
    0x00006144 cbz r3, 0x6150                                |             
    0x00006146 ldr r2, [r7, 0x2c]                            |             r2 = var_2ch;
    0x00006148 movs r3, 0                                    |             r3 = 0;
    0x0000614a str r3, [r2, 0xc]                             |             *((r2 + 0xc)) = r3;
    0x0000614c bl 0xbdec                                     |             dl_debug_state ();
                                                             |         }
                                                             | label_31:
    0x00006150 ldr r1, [r7, 0x38]                            |         r1 = var_38h;
    0x00006152 mov r3, r5                                    |         r3 = r5;
    0x00006154 ldr r0, [r7, 0x20]                            |         r0 = var_20h;
    0x00006156 movs r2, 0                                    |         r2 = 0;
    0x00006158 blx 0x9f4                                     |         fcn_000009f4 ();
                                                             | label_47:
    0x0000615c ldr.w r3, [pc, 0x4b0]                         |         r3 = *(0x00006610);
    0x00006160 movs r4, 0                                    |         r4 = 0;
    0x00006162 ldr.w r0, [r7, 0xf0]                          |         r0 = *((r7 + 0xf0));
    0x00006166 add r3, pc                                    |         r3 += pc;
    0x00006168 ldr r3, [r3]                                  |         r3 = *(r3);
    0x0000616a blx r3                                        |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000616c ldr r0, [r7, 0x40]                            |         r0 = var_40h;
    0x0000616e bl 0x14720                                    |         fcn_00014720 ();
    0x00006172 mov r0, r4                                    |         r0 = r4;
    0x00006174 adds r7, 0xcc                                 |         r7 += 0xcc;
    0x00006176 mov sp, r7                                    |         
    0x00006178 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}    |         
                                                             | label_64:
    0x0000617c ldr.w r5, [pc, 0x494]                         |         
    0x00006180 add r5, pc                                    |         r5 = 0xc798;
    0x00006182 b 0x60de                                      |         
                                                             |     } while (1);
                                                             | label_89:
    0x00006184 ldr.w r1, [r4, 0x1b8]                         |     r1 = *((r4 + 0x1b8));
    0x00006188 subs r1, r1, r0                               |     r1 -= r0;
    0x0000618a bl 0x14ae0                                    |     fcn_00014ae0 (r0);
    0x0000618e b 0x60f6                                      |     goto label_12;
                                                             | label_88:
    0x00006190 ldr r0, [r7, 0x40]                            |     r0 = var_40h;
    0x00006192 bl 0x14720                                    |     r0 = fcn_00014720 ();
    0x00006196 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00006198 bne.w 0x656e                                  |         goto label_90;
                                                             |     }
    0x0000619c ldr r3, [r7, 4]                               |     r3 = var_bp_4h;
    0x0000619e cmp r3, 2                                     |     
                                                             |     if (r3 == 2) {
    0x000061a0 beq.w 0x6486                                  |         goto label_91;
                                                             |     }
                                                             | label_24:
    0x000061a4 ldr.w r3, [pc, 0x470]                         |     r3 = *(0x00006618);
    0x000061a8 ldr.w r1, [r4, 0x158]                         |     r1 = *((r4 + 0x158));
    0x000061ac ldr r0, [r4]                                  |     r0 = *(r4);
    0x000061ae add r3, pc                                    |     r3 += pc;
    0x000061b0 ldr r3, [r3]                                  |     r3 = *(r3);
    0x000061b2 add r1, r0                                    |     r1 += r0;
    0x000061b4 str.w r1, [r4, 0x158]                         |     __asm ("str.w r1, [r4, 0x158]");
    0x000061b8 lsls r5, r3, 0x19                             |     r5 = r3 << 0x19;
                                                             |     if (r5 < r3) {
    0x000061ba bmi.w 0x669c                                  |         goto label_92;
                                                             |     }
                                                             | label_35:
    0x000061be mov r0, r4                                    |     r0 = r4;
    0x000061c0 bl 0x8850                                     |     fcn_00008850 (r0);
    0x000061c4 ldr.w r3, [r7, 0xfc]                          |     r3 = *((r7 + 0xfc));
    0x000061c8 lsls r0, r3, 0x1c                             |     r0 = r3 << 0x1c;
                                                             |     if (r0 >= r3) {
    0x000061ca bmi 0x6202                                    |         
    0x000061cc ldr r3, [r4, 0x60]                            |         r3 = *((r4 + 0x60));
                                                             |         if (r3 == 0) {
    0x000061ce cbz r3, 0x6202                                |             goto label_93;
                                                             |         }
    0x000061d0 ldr.w r1, [r4, 0x1d4]                         |         r1 = *((r4 + 0x1d4));
    0x000061d4 add.w r3, r4, 0x160                           |         r3 = r4 + 0x160;
    0x000061d8 ldr r2, [r1]                                  |         r2 = *(r1);
    0x000061da cmp r2, r3                                    |         
                                                             |         if (r2 == r3) {
    0x000061dc beq 0x6202                                    |             goto label_93;
                                                             |         }
    0x000061de ldr.w r3, [r4, 0x1d0]                         |         r3 = *((r4 + 0x1d0));
    0x000061e2 movs r0, 1                                    |         r0 = 1;
    0x000061e4 ldr.w r2, [r4, 0x168]                         |         r2 = *((r4 + 0x168));
    0x000061e8 subs r3, 1                                    |         r3--;
    0x000061ea str r4, [r2]                                  |         *(r2) = r4;
    0x000061ec lsls r2, r3, 2                                |         r2 = r3 << 2;
    0x000061ee str.w r0, [r4, 0x16c]                         |         __asm ("str.w r0, [r4, 0x16c]");
    0x000061f2 adds r0, r1, 4                                |         r0 = r1 + 4;
    0x000061f4 blx 0x15a80                                   |         fcn_00015a80 (r0, r1);
    0x000061f8 ldr.w r3, [r4, 0x1d4]                         |         r3 = *((r4 + 0x1d4));
    0x000061fc add.w r2, r4, 0x168                           |         r2 = r4 + 0x168;
    0x00006200 str r2, [r3]                                  |         *(r3) = r2;
                                                             |     }
                                                             | label_93:
    0x00006202 ldr.w r3, [r4, 0x20c]                         |     r3 = *((r4 + 0x20c));
    0x00006206 lsls r1, r3, 0x1a                             |     r1 = r3 << 0x1a;
                                                             |     if (r1 < r3) {
    0x00006208 bmi.w 0x6322                                  |         goto label_94;
                                                             |     }
                                                             | label_15:
    0x0000620c add.w r3, r7, 0x48                            |     r3 += var_48h;
    0x00006210 add.w r5, r4, 0x1e0                           |     r5 = r4 + 0x1e0;
    0x00006214 ldm r3, {r0, r1, r2, r3}                      |     r0 = *(r3);
                                                             |     r1 = *((r3 + 4));
                                                             |     r2 = *((r3 + 8));
                                                             |     r3 = *((r3 + 12));
    0x00006216 stm.w r5, {r0, r1, r2, r3}                    |     *(r5) = r0;
                                                             |     *((r5 + 4)) = r1;
                                                             |     *((r5 + 8)) = r2;
                                                             |     *((r5 + 12)) = r3;
    0x0000621a ldr r3, [r7, 0x10]                            |     r3 = var_bp_10h;
    0x0000621c cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x0000621e bne.w 0x66c8                                  |         goto label_95;
                                                             |     }
                                                             | label_36:
    0x00006222 ldr r3, [pc, 0x3f8]                           |     
    0x00006224 add r3, pc                                    |     
    0x00006226 ldr.w r3, [r3, 0x17c]                         |     r3 = *(0xc9c2);
    0x0000622a cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x0000622c bne.w 0x6684                                  |         goto label_96;
                                                             |     }
                                                             | label_34:
    0x00006230 ldr r5, [pc, 0x3ec]                           |     
    0x00006232 movs r3, 0x54                                 |     r3 = 0x54;
    0x00006234 ldr.w r2, [r7, 0x104]                         |     r2 = *((r7 + 0x104));
    0x00006238 add r5, pc                                    |     r5 = 0xc85c;
    0x0000623a mla r5, r3, r2, r5                            |     __asm ("mla r5, r3, r2, r5");
    0x0000623e ldr r3, [r5, 0x14]                            |     r3 = *(0xc870);
    0x00006240 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00006242 beq.w 0x6532                                  |         goto label_97;
                                                             |     }
                                                             | label_29:
    0x00006246 ldr.w r3, [r4, 0x238]                         |     r3 = *((r4 + 0x238));
                                                             |     if (r3 != 0) {
    0x0000624a cbz r3, 0x6260                                |         
    0x0000624c ldrb.w r3, [r4, 0x198]                        |         r3 = *((r4 + 0x198));
    0x00006250 and r3, r3, 3                                 |         r3 &= 3;
    0x00006254 cmp r3, 1                                     |         
                                                             |         if (r3 != 1) {
    0x00006256 bne.w 0x66f0                                  |             goto label_98;
                                                             |         }
                                                             | label_39:
    0x0000625a mov r0, r4                                    |         r0 = r4;
    0x0000625c bl 0xd3e0                                     |         fcn_0000d3e0 (r0);
                                                             |     }
                                                             | label_40:
    0x00006260 ldr r5, [pc, 0x3c0]                           |     r5 = *(0x6624);
    0x00006262 mov r0, r4                                    |     r0 = r4;
    0x00006264 ldr.w r1, [r7, 0x104]                         |     r1 = *((r7 + 0x104));
    0x00006268 bl 0x88cc                                     |     fcn_000088cc (r0, r1);
    0x0000626a invalid                                       |     
    0x0000626e ldr.w r3, [r5, 0x1dc]                         |     r3 = *(0x6800);
    0x00006272 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00006274 beq.w 0x5e20                                  |         goto label_7;
                                                             |     }
    0x00006278 ldr r3, [r4, 0x18]                            |     r3 = *((r4 + 0x18));
    0x0000627a movs r2, 0x54                                 |     r2 = 0x54;
    0x0000627c ldr.w r8, [pc, 0x3a8]                         |     r8 = *(0x00006628);
    0x00006280 mul r3, r2, r3                                |     r3 = r2 * r3;
    0x00006284 add r8, pc                                    |     r8 += pc;
    0x00006286 ldr.w r3, [r8, r3]                            |     r3 = *((r8 + r3));
    0x0000628a ldrb.w r3, [r3, 0x199]                        |     r3 = *((r3 + 0x199));
    0x0000628e ands r3, r3, 8                                |     r3 &= 8;
                                                             |     if (r3 != r3) {
    0x00006292 bne.w 0x5e20                                  |         goto label_7;
                                                             |     }
    0x00006296 mov r6, r3                                    |     r6 = r3;
    0x00006298 ldr r3, [pc, 0x390]                           |     
    0x0000629a ldr.w sb, [r5, 0x1d8]                         |     sb = *((r5 + 0x1d8));
    0x0000629e add.w r8, r8, 0x7f8                           |     r8 += 0x7f8;
    0x000062a2 add.w sl, r4, 0x260                           |     sl = r4 + 0x260;
    0x000062a6 add r3, pc                                    |     
    0x000062a8 add.w r3, r3, 0x598                           |     r3 = 0xce6e;
    0x000062ac str r3, [r7, 0x44]                            |     var_44h = r3;
                                                             |     do {
    0x000062ae ldr.w r3, [sb, 8]                             |         r3 = *((sb + 8));
                                                             |         if (r3 != 0) {
    0x000062b2 cbz r3, 0x62e4                                |             
    0x000062b4 ldr r2, [r7, 0x44]                            |             r2 = var_44h;
    0x000062b6 mov r0, r4                                    |             r0 = r4;
    0x000062b8 ldr.w r1, [r7, 0x104]                         |             r1 = *((r7 + 0x104));
    0x000062bc cmp r4, r2                                    |             
    0x000062be ite ne                                        |             
                                                             |             if (r4 == r2) {
    0x000062c0 movne fp, sl                                  |                 
                                                             |             }
                                                             |             if (r4 != r2) {
    0x000062c2 moveq fp, r8                                  |                 
                                                             |             }
    0x000062c4 mov r2, fp                                    |             r2 = fp;
    0x000062c6 blx r3                                        |             uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
    0x000062c8 ldrb.w r3, [r4, 0x199]                        |             r3 = *((r4 + 0x199));
    0x000062cc str.w r0, [fp, 4]                             |             __asm ("str.w r0, [var_bp_4h]");
    0x000062d0 ubfx r2, r3, 4, 1                             |             r2 = (r3 >> 4) & ((1 << 1) - 1);
    0x000062d4 cmp r0, 0                                     |             
    0x000062d6 it ne                                         |             
                                                             |             if (r0 == 0) {
    0x000062d8 orrne r2, r2, 1                               |                 r2 |= 1;
                                                             |             }
    0x000062dc bfi r3, r2, 4, 1                              |             value_0 = BIT_MASK (4, 1);
                                                             |             value_1 = r2 & value_0;
                                                             |             value_0 = ~value_0;
                                                             |             r3 &= value_0;
                                                             |             r3 |= value_1;
    0x000062e0 strb.w r3, [r4, 0x199]                        |             *((r4 + 0x199)) = r3;
                                                             |         }
    0x000062e4 ldr.w r3, [r5, 0x1dc]                         |         r3 = *((r5 + 0x1dc));
    0x000062e8 adds r6, 1                                    |         r6++;
    0x000062ea ldr.w sb, [sb, 0x20]                          |         sb = *((sb + 0x20));
    0x000062ee add.w r8, r8, 8                               |         r8 += 8;
    0x000062f2 add.w sl, sl, 8                               |         sl += 8;
    0x000062f6 cmp r3, r6                                    |         
    0x000062f8 bhi 0x62ae                                    |         
                                                             |     } while (r3 > r6);
    0x000062fa b 0x5e20                                      |     goto label_7;
                                                             | label_48:
    0x000062fc ldr r0, [pc, 0x330]                           |     
    0x000062fe ldr.w r2, [r7, 0x104]                         |     r2 = *((r7 + 0x104));
    0x00006302 ldr r1, [r7, 0x38]                            |     r1 = var_38h;
    0x00006304 add r0, pc                                    |     r0 = 0xc938;
    0x00006306 bl 0xc1f0                                     |     fcn_0000c1f0 ();
    0x0000630a b.w 0x5a28                                    |     goto label_13;
                                                             | label_51:
    0x0000630e ldr r3, [pc, 0x324]                           |     
    0x00006310 add r3, pc                                    |     
    0x00006312 ldr r3, [r3]                                  |     r3 = *(0xc94a);
    0x00006314 str r3, [r7, 0x20]                            |     var_20h = r3;
    0x00006316 ldr r3, [r7, 0x40]                            |     r3 = var_40h;
    0x00006318 adds r3, 1                                    |     r3++;
                                                             |     if (r3 != 1) {
    0x0000631a bne 0x63ba                                    |         goto label_99;
                                                             |     }
    0x0000631c ldr r5, [pc, 0x318]                           |     
    0x0000631e add r5, pc                                    |     r5 = 0xc95a;
    0x00006320 b 0x612e                                      |     goto label_14;
                                                             | label_94:
    0x00006322 ldr r3, [pc, 0x318]                           |     
    0x00006324 add r3, pc                                    |     r3 = 0xc966;
    0x00006326 str.w r4, [r3, 0x580]                         |     __asm ("str.w r4, [r3, 0x580]");
    0x0000632a b 0x620c                                      |     goto label_15;
                                                             | label_78:
    0x0000632c ldr r3, [r4, 0x30]                            |     r3 = *((r4 + 0x30));
                                                             |     if (r3 != 0) {
    0x0000632e cbz r3, 0x6336                                |         
    0x00006330 ldr r2, [r3, 4]                               |         r2 = *((r3 + 4));
    0x00006332 add r2, sl                                    |         r2 += sl;
    0x00006334 str r2, [r3, 4]                               |         *((r3 + 4)) = r2;
                                                             |     }
    0x00006336 ldr r3, [r4, 0x2c]                            |     r3 = *((r4 + 0x2c));
                                                             |     if (r3 != 0) {
    0x00006338 cbz r3, 0x6340                                |         
    0x0000633a ldr r2, [r3, 4]                               |         r2 = *((r3 + 4));
    0x0000633c add r2, sl                                    |         r2 += sl;
    0x0000633e str r2, [r3, 4]                               |         *((r3 + 4)) = r2;
                                                             |     }
    0x00006340 ldr r3, [r4, 0x34]                            |     r3 = *((r4 + 0x34));
                                                             |     if (r3 != 0) {
    0x00006342 cbz r3, 0x634a                                |         
    0x00006344 ldr r2, [r3, 4]                               |         r2 = *((r3 + 4));
    0x00006346 add r2, sl                                    |         r2 += sl;
    0x00006348 str r2, [r3, 4]                               |         *((r3 + 4)) = r2;
                                                             |     }
    0x0000634a ldr r3, [r4, 0x38]                            |     r3 = *((r4 + 0x38));
                                                             |     if (r3 != 0) {
    0x0000634c cbz r3, 0x6354                                |         
    0x0000634e ldr r2, [r3, 4]                               |         r2 = *((r3 + 4));
    0x00006350 add r2, sl                                    |         r2 += sl;
    0x00006352 str r2, [r3, 4]                               |         *((r3 + 4)) = r2;
                                                             |     }
    0x00006354 ldr r3, [r4, 0x3c]                            |     r3 = *((r4 + 0x3c));
                                                             |     if (r3 != 0) {
    0x00006356 cbz r3, 0x635e                                |         
    0x00006358 ldr r2, [r3, 4]                               |         r2 = *((r3 + 4));
    0x0000635a add r2, sl                                    |         r2 += sl;
    0x0000635c str r2, [r3, 4]                               |         *((r3 + 4)) = r2;
                                                             |     }
    0x0000635e ldr r3, [r4, 0x64]                            |     r3 = *((r4 + 0x64));
                                                             |     if (r3 != 0) {
    0x00006360 cbz r3, 0x6368                                |         
    0x00006362 ldr r2, [r3, 4]                               |         r2 = *((r3 + 4));
    0x00006364 add r2, sl                                    |         r2 += sl;
    0x00006366 str r2, [r3, 4]                               |         *((r3 + 4)) = r2;
                                                             |     }
    0x00006368 ldr r3, [r4, 0x7c]                            |     r3 = *((r4 + 0x7c));
                                                             |     if (r3 != 0) {
    0x0000636a cbz r3, 0x6372                                |         
    0x0000636c ldr r2, [r3, 4]                               |         r2 = *((r3 + 4));
    0x0000636e add r2, sl                                    |         r2 += sl;
    0x00006370 str r2, [r3, 4]                               |         *((r3 + 4)) = r2;
                                                             |     }
    0x00006372 ldr.w r3, [r4, 0xe8]                          |     r3 = *((r4 + 0xe8));
                                                             |     if (r3 != 0) {
    0x00006376 cbz r3, 0x637e                                |         
    0x00006378 ldr r2, [r3, 4]                               |         r2 = *((r3 + 4));
    0x0000637a add r2, sl                                    |         r2 += sl;
    0x0000637c str r2, [r3, 4]                               |         *((r3 + 4)) = r2;
                                                             |     }
    0x0000637e ldr.w r3, [r4, 0x150]                         |     r3 = *((r4 + 0x150));
    0x00006382 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00006384 beq.w 0x5f66                                  |         goto label_16;
                                                             |     }
    0x00006388 ldr r2, [r3, 4]                               |     r2 = *((r3 + 4));
    0x0000638a add r2, sl                                    |     r2 += sl;
    0x0000638c str r2, [r3, 4]                               |     *((r3 + 4)) = r2;
    0x0000638e b 0x5f66                                      |     goto label_16;
                                                             | label_60:
    0x00006390 mov r2, r6                                    |     r2 = r6;
    0x00006392 sub.w r1, r3, r8                              |     r1 = r3 - r8;
    0x00006396 movs r6, 0                                    |     r6 = 0;
    0x00006398 mov.w r3, -1                                  |     r3 = -1;
    0x0000639c strd r3, r6, [sp]                             |     __asm ("strd r3, r6, [sp]");
    0x000063a0 mov r0, r8                                    |     r0 = r8;
    0x000063a2 movs r3, 0x32                                 |     r3 = 0x32;
    0x000063a4 bl 0x14a98                                    |     fcn_00014a98 (r0, r1);
    0x000063a8 adds r0, 1                                    |     r0++;
                                                             |     if (r0 != 1) {
    0x000063aa bne.w 0x5c12                                  |         goto label_17;
                                                             |     }
    0x000063ae ldr r5, [pc, 0x290]                           |     
    0x000063b0 add r5, pc                                    |     r5 = 0xc9f6;
                                                             | label_62:
    0x000063b2 movs r3, 0                                    |     r3 = 0;
    0x000063b4 strd r3, r3, [r4, 0x1b4]                      |     __asm ("strd r3, r3, [r4, 0x1b4]");
    0x000063b8 b 0x60de                                      |     goto label_18;
                                                             | label_99:
    0x000063ba ldr r5, [pc, 0x288]                           |     
    0x000063bc add r5, pc                                    |     r5 = 0xca06;
                                                             | label_22:
    0x000063be ldr r0, [r7, 0x40]                            |     r0 = var_40h;
    0x000063c0 movs r4, 0                                    |     r4 = 0;
    0x000063c2 bl 0x14720                                    |     fcn_00014720 ();
    0x000063c6 b 0x612e                                      |     goto label_14;
                                                             | label_65:
    0x000063c8 ldr.w r2, [r7, 0x104]                         |     r2 = *((r7 + 0x104));
    0x000063cc movs r3, 0x54                                 |     r3 = 0x54;
    0x000063ce ldr r6, [pc, 0x278]                           |     
    0x000063d0 mul r3, r2, r3                                |     r3 = r2 * r3;
    0x000063d4 add r6, pc                                    |     r6 = 0xca22;
    0x000063d6 ldr.w sl, [r6, r3]                            |     sl = *(0xca22);
    0x000063da ldrb.w r3, [sl, 0x199]                        |     r3 = *((sl + 0x199));
    0x000063de lsls r2, r3, 0x1c                             |     r2 = r3 << 0x1c;
                                                             |     if (r2 < r3) {
    0x000063e0 bmi.w 0x5d8e                                  |         goto label_19;
                                                             |     }
    0x000063e4 ldr r3, [pc, 0x264]                           |     
    0x000063e6 add.w r6, r6, 0x7f8                           |     r6 += 0x7f8;
    0x000063ea ldr.w r8, [r5, 0x1d8]                         |     r8 = *((r5 + 0x1d8));
    0x000063ee add.w sb, sl, 0x260                           |     sb = sl + 0x260;
    0x000063f2 add r3, pc                                    |     r3 = 0xca42;
    0x000063f4 add.w fp, r3, 0x598                           |     
    0x000063f8 mov r3, r4                                    |     r3 = r4;
    0x000063fa mov r4, r8                                    |     r4 = r8;
    0x000063fc mov r8, r3                                    |     r8 = r3;
                                                             |     do {
    0x000063fe ldr r3, [r4]                                  |         r3 = *(r4);
                                                             |         if (r3 != 0) {
    0x00006400 cbz r3, 0x640e                                |             
    0x00006402 movs r1, 1                                    |             r1 = 1;
    0x00006404 cmp sl, fp                                    |             
    0x00006406 ite ne                                        |             
                                                             |             if (sl == fp) {
    0x00006408 movne r0, sb                                  |                 r0 = sb;
                                                             |             }
                                                             |             if (sl != fp) {
    0x0000640a moveq r0, r6                                  |                 r0 = r6;
                                                             |             }
    0x0000640c blx r3                                        |             uint32_t (*r3)(uint32_t, uint32_t) (r0, r1);
                                                             |         }
    0x0000640e ldr.w r3, [r5, 0x1dc]                         |         r3 = *((r5 + 0x1dc));
    0x00006412 add.w r8, r8, 1                               |         r8++;
    0x00006416 ldr r4, [r4, 0x20]                            |         r4 = *((r4 + 0x20));
    0x00006418 adds r6, 8                                    |         r6 += 8;
    0x0000641a add.w sb, sb, 8                               |         sb += 8;
    0x0000641e cmp r3, r8                                    |         
    0x00006420 bhi 0x63fe                                    |         
                                                             |     } while (r3 > r8);
    0x00006422 b 0x5d8e                                      |     goto label_19;
                                                             | label_59:
    0x00006424 str r3, [r7, 0x28]                            |     *((r7 + 0x28)) = r3;
    0x00006426 orr r2, r6, 2                                 |     r2 = r6 | 2;
    0x0000642a ldr r3, [r7, 0x44]                            |     r3 = *((r7 + 0x44));
    0x0000642c ands r0, r3                                   |     r0 &= r3;
    0x0000642e bl 0x14b10                                    |     r0 = fcn_00014b10 (r0);
    0x00006432 cmp r0, 0                                     |     
    0x00006434 ldr r3, [r7, 0x28]                            |     r3 = *((r7 + 0x28));
                                                             |     if (r0 < 0) {
    0x00006436 blt.w 0x5ec2                                  |         goto label_20;
                                                             |     }
    0x0000643a str r3, [r7, 0x28]                            |     *((r7 + 0x28)) = r3;
    0x0000643c ldr r3, [r7, 0x44]                            |     r3 = *((r7 + 0x44));
    0x0000643e ldr r1, [r7, 0x34]                            |     r1 = *((r7 + 0x34));
    0x00006440 sub.w r2, r8, r3                              |     r2 = r8 - r3;
    0x00006444 mov r0, r3                                    |     r0 = r3;
    0x00006446 blx 0x15da0                                   |     fcn_00015da0 (r0, r1);
    0x0000644a ldr r2, [r7, 0x3c]                            |     r2 = *((r7 + 0x3c));
    0x0000644c ldr r3, [r7, 0x44]                            |     r3 = *((r7 + 0x44));
    0x0000644e ldr r1, [r2, 0x10]                            |     r1 = *((r2 + 0x10));
    0x00006450 mov r2, r6                                    |     r2 = r6;
    0x00006452 rsbs r0, r1, 0                                |     r0 = r1 - ;
    0x00006454 ands r0, r3                                   |     r0 &= r3;
    0x00006456 bl 0x14b10                                    |     fcn_00014b10 (r0);
    0x0000645a ldr r3, [r7, 0x28]                            |     r3 = *((r7 + 0x28));
    0x0000645c b.w 0x5c0c                                    |     goto label_21;
                                                             | label_66:
    0x00006460 ldr r5, [pc, 0x1ec]                           |     
    0x00006462 add r5, pc                                    |     r5 = 0xcab6;
                                                             | label_43:
    0x00006464 ldr r3, [pc, 0x1ec]                           |     
    0x00006466 add r3, pc                                    |     
    0x00006468 ldr r3, [r3]                                  |     r3 = *(0xcabe);
    0x0000646a str r3, [r7, 0x20]                            |     var_20h = r3;
    0x0000646c ldr r3, [r7, 0x40]                            |     r3 = var_40h;
    0x0000646e adds r3, 1                                    |     r3++;
                                                             |     if (r3 == 1) {
    0x00006470 beq 0x655a                                    |         goto label_100;
                                                             |     }
    0x00006472 movs r3, 0                                    |     r3 = 0;
    0x00006474 str r3, [r7, 0x14]                            |     var_14h = r3;
    0x00006476 b 0x63be                                      |     goto label_22;
                                                             | label_73:
    0x00006478 ldr r3, [r7, 4]                               |     r3 = var_bp_4h;
    0x0000647a cmp r3, 3                                     |     
                                                             |     if (r3 == 3) {
    0x0000647c beq.w 0x6700                                  |         goto label_101;
                                                             |     }
                                                             | label_74:
    0x00006480 ldr.w r2, [r4, 0x20c]                         |     r2 = *((r4 + 0x20c));
    0x00006484 b 0x5ff4                                      |     goto label_23;
                                                             | label_91:
    0x00006486 ldrb.w r3, [r4, 0x198]                        |     r3 = *((r4 + 0x198));
    0x0000648a lsls r6, r3, 0x1e                             |     r6 = r3 << 0x1e;
                                                             |     if (r6 == r3) {
    0x0000648c beq.w 0x61a4                                  |         goto label_24;
                                                             |     }
    0x00006490 ldr r3, [pc, 0x1c4]                           |     
    0x00006492 movw r2, 0x589                                |     r2 = 0x589;
    0x00006496 ldr r1, [pc, 0x1c4]                           |     
    0x00006498 ldr r0, [pc, 0x1c4]                           |     
    0x0000649a add r3, pc                                    |     r3 = 0xcaf6;
    0x0000649c add r1, pc                                    |     r1 = 0xcafe;
    0x0000649e add r0, pc                                    |     r0 = 0xcb02;
    0x000064a0 bl 0x11f30                                    |     fcn_00011f30 (r0);
                                                             | label_53:
    0x000064a4 ldr r5, [pc, 0x1bc]                           |     
    0x000064a6 add r5, pc                                    |     r5 = 0xcb0e;
    0x000064a8 b 0x60de                                      |     goto label_18;
                                                             | label_86:
    0x000064aa ldr r5, [r7, 0x24]                            |     r5 = var_24h;
    0x000064ac ldr r3, [pc, 0x1b8]                           |     
    0x000064ae ldrh r0, [r5, 0x30]                           |     r0 = *((r5 + 0x30));
    0x000064b0 add r3, pc                                    |     
    0x000064b2 ldr r3, [r3]                                  |     r3 = *(0xcb1c);
    0x000064b4 lsls r0, r0, 5                                |     r0 <<= 5;
    0x000064b6 blx r3                                        |     r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x000064b8 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x000064ba beq.w 0x677c                                  |         goto label_102;
                                                             |     }
    0x000064be ldrh r2, [r5, 0x30]                           |     r2 = *((r5 + 0x30));
    0x000064c0 ldr r1, [r7, 0x1c]                            |     r1 = var_1ch;
    0x000064c2 lsls r2, r2, 5                                |     r2 <<= 5;
    0x000064c4 blx 0x15f40                                   |     fcn_00015f40 (r0, r1);
    0x000064c8 ldrb.w r3, [r4, 0x198]                        |     r3 = *((r4 + 0x198));
    0x000064cc str.w r0, [r4, 0x154]                         |     __asm ("str.w r0, [r4, 0x154]");
    0x000064d0 orr r3, r3, 0x80                              |     r3 |= 0x80;
    0x000064d4 strb.w r3, [r4, 0x198]                        |     *((r4 + 0x198)) = r3;
    0x000064d8 b 0x6024                                      |     goto label_25;
                                                             | label_71:
    0x000064da ldr.w r2, [r4, 0x780]                         |     r2 = *((r4 + 0x780));
    0x000064de ldr.w r3, [r4, 0x784]                         |     r3 = *((r4 + 0x784));
    0x000064e2 cmp r3, r5                                    |     
    0x000064e4 it eq                                         |     
                                                             |     if (r3 != r5) {
    0x000064e6 cmpeq r2, r6                                  |         __asm ("cmpeq r2, r6");
                                                             |         goto label_103;
                                                             |     }
                                                             |     if (r3 != r5) {
                                                             | label_103:
    0x000064e8 bne.w 0x5e4c                                  |         goto label_26;
                                                             |     }
    0x000064ec b 0x5e62                                      |     goto label_27;
                                                             | label_55:
    0x000064ee ldr r3, [r7, 0x18]                            |     r3 = *((r7 + 0x18));
    0x000064f0 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x000064f2 beq.w 0x675a                                  |         goto label_104;
                                                             |     }
    0x000064f6 ldr r3, [r7, 0x34]                            |     r3 = *((r7 + 0x34));
    0x000064f8 ldr.w r2, [fp]                                |     r2 = *(fp);
    0x000064fc ldrb.w r5, [r4, 0x199]                        |     r5 = *((r4 + 0x199));
    0x00006500 eor r1, r3, 1                                 |     r1 = r3 ^ 1;
    0x00006504 add.w r3, sl, -1                              |     r3 = sl + -1;
    0x00006508 add.w r3, r3, r3, lsl 1                       |     r3 += (r3 << 1);
    0x0000650c bfi r5, r1, 6, 1                              |     value_2 = BIT_MASK (6, 1);
                                                             |     value_3 = r1 & value_2;
                                                             |     value_2 = ~value_2;
                                                             |     r5 &= value_2;
                                                             |     r5 |= value_3;
    0x00006510 add.w r3, fp, r3, lsl 3                       |     r3 = fp + (r3 << 3);
    0x00006514 ldr r0, [r3, 0xc]                             |     r0 = *((r3 + 0xc));
    0x00006516 ldr r3, [r4]                                  |     r3 = *(r4);
    0x00006518 strb.w r5, [r4, 0x199]                        |     *((r4 + 0x199)) = r5;
    0x0000651c mov r5, fp                                    |     r5 = fp;
    0x0000651e sub.w sb, r0, r2                              |     sb = r0 - r2;
    0x00006522 adds r1, r3, r2                               |     r1 = r3 + r2;
    0x00006524 add r3, r0                                    |     r3 += r0;
    0x00006526 str.w r1, [r4, 0x1b4]                         |     __asm ("str.w r1, [r4, 0x1b4]");
    0x0000652a str.w r3, [r4, 0x1b8]                         |     __asm ("str.w r3, [r4, 0x1b8]");
    0x0000652e b.w 0x5c14                                    |     goto label_28;
                                                             | label_97:
    0x00006532 ldr r3, [r4, 0x58]                            |     r3 = *((r4 + 0x58));
    0x00006534 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00006536 beq.w 0x6246                                  |         goto label_29;
                                                             |     }
    0x0000653a ldr r2, [r4, 0x34]                            |     r2 = *((r4 + 0x34));
    0x0000653c ldr r3, [r3, 4]                               |     r3 = *((r3 + 4));
    0x0000653e ldr r1, [pc, 0x12c]                           |     
    0x00006540 ldr r0, [r2, 4]                               |     r0 = *((r2 + 4));
    0x00006542 add r1, pc                                    |     r1 = 0xcbb4;
    0x00006544 add r0, r3                                    |     r0 += r3;
    0x00006546 bl 0x14f30                                    |     r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x0000654a cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x0000654c bne.w 0x6246                                  |         goto label_29;
                                                             |     }
    0x00006550 str r4, [r5, 0x14]                            |     *((r5 + 0x14)) = r4;
    0x00006552 b 0x6246                                      |     goto label_29;
                                                             | label_83:
    0x00006554 ldr.w r2, [r4, 0x20c]                         |     r2 = *((r4 + 0x20c));
    0x00006558 b 0x5fea                                      |     goto label_30;
                                                             | label_100:
    0x0000655a ldr r4, [pc, 0x114]                           |     
    0x0000655c movs r0, 0                                    |     r0 = 0;
    0x0000655e add r4, pc                                    |     r4 = 0xcbd4;
    0x00006560 ldr r3, [r4]                                  |     r3 = *(0xcbd4);
    0x00006562 blx r3                                        |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00006564 ldr r3, [r4]                                  |     r3 = *(0xcbd4);
    0x00006566 ldr.w r0, [r7, 0xf0]                          |     r0 = *((r7 + 0xf0));
    0x00006568 lsls r0, r6, 3                                |     r0 = r6 << 3;
    0x0000656a blx r3                                        |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000656c b 0x6150                                      |     goto label_31;
                                                             | label_90:
    0x0000656e ldr r5, [pc, 0x104]                           |     
    0x00006570 add r5, pc                                    |     r5 = 0xcbea;
                                                             | label_44:
    0x00006572 ldr r3, [pc, 0x104]                           |     
    0x00006574 add r3, pc                                    |     
    0x00006576 ldr r3, [r3]                                  |     r3 = *(0xcbf2);
    0x00006578 str r3, [r7, 0x20]                            |     var_20h = r3;
    0x0000657a b 0x60e2                                      |     goto label_32;
                                                             | label_87:
    0x0000657c ldr.w r3, [r7, 0xfc]                          |     r3 = *((r7 + 0xfc));
    0x00006580 and r3, r3, 0x88000000                        |     r3 &= 0x88000000;
    0x00006584 cmp.w r3, -0x80000000                         |     
                                                             |     if (r3 == -0x80000000) {
    0x00006588 beq.w 0x6706                                  |         goto label_105;
                                                             |     }
                                                             | label_41:
    0x0000658c ldr r2, [pc, 0xec]                            |     
    0x0000658e add r2, pc                                    |     r2 = 0xcc0e;
    0x00006590 ldr r3, [r2, 0x1c]                            |     r3 = *(0xcc2a);
    0x00006592 orr r3, r3, 7                                 |     r3 |= 7;
    0x00006596 str r3, [r2, 0x1c]                            |     *((r2 + 0x1c)) = r3;
                                                             | label_42:
    0x00006598 ldr.w r0, [r7, 0x100]                         |     r0 = *((r7 + 0x100));
    0x0000659c bl 0xdeec                                     |     fcn_0000deec (r0);
    0x000065a0 str r0, [r7, 0x20]                            |     var_20h = r0;
    0x000065a2 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x000065a4 beq.w 0x603a                                  |         goto label_33;
                                                             |     }
    0x000065a8 ldr r5, [pc, 0xd4]                            |     
    0x000065aa add r5, pc                                    |     r5 = 0xcc2e;
    0x000065ac b 0x60e2                                      |     goto label_32;
                                                             | label_96:
    0x00006684 ldr r3, [r4, 0x58]                            |     r3 = *((r4 + 0x58));
    0x00006686 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00006688 beq.w 0x6246                                  |         goto label_29;
                                                             |     }
    0x0000668c ldr r2, [r4, 0x34]                            |     r2 = *((r4 + 0x34));
    0x0000668e ldr r3, [r3, 4]                               |     r3 = *((r3 + 4));
    0x00006690 ldr r0, [r4, 0x1c]                            |     r0 = *((r4 + 0x1c));
    0x00006692 ldr r1, [r2, 4]                               |     r1 = *((r2 + 4));
    0x00006694 add r1, r3                                    |     r1 += r3;
    0x00006696 bl 0x5128                                     |     fcn_00005128 (r0, r1);
    0x0000669a b 0x6230                                      |     goto label_34;
                                                             | label_92:
    0x0000669c ldrh.w r5, [r4, 0x15c]                        |     r5 = *((r4 + 0x15c));
    0x000066a0 movs r3, 8                                    |     r3 = 8;
    0x000066a2 ldr r2, [r4, 8]                               |     r2 = *((r4 + 8));
    0x000066a4 strd r3, r5, [sp, 0x1c]                       |     __asm ("strd r3, r5, [sp, 0x1c]");
    0x000066a8 ldr.w r5, [r4, 0x154]                         |     r5 = *((r4 + 0x154));
    0x000066ac str r0, [sp]                                  |     *(sp) = r0;
    0x000066ae ldr r0, [pc, 0x130]                           |     
    0x000066b0 str r1, [sp, 0x10]                            |     var_10h = r1;
    0x000066b2 mov r1, r3                                    |     r1 = r3;
    0x000066b4 str.w sb, [sp, 8]                             |     __asm ("str.w sb, [var_8h]");
    0x000066b8 add r0, pc                                    |     r0 = 0xce9e;
    0x000066ba strd r3, r5, [sp, 0x14]                       |     __asm ("strd r3, r5, [sp, 0x14]");
    0x000066be str r3, [sp, 0xc]                             |     var_ch = r3;
    0x000066c0 str r3, [sp, 4]                               |     var_4h = r3;
    0x000066c2 bl 0xc1f0                                     |     fcn_0000c1f0 ();
    0x000066c6 b 0x61be                                      |     goto label_35;
                                                             | label_95:
    0x000066c8 ldr r0, [r4, 0x1c]                            |     r0 = *((r4 + 0x1c));
    0x000066ca mov r1, r3                                    |     r1 = r3;
    0x000066cc bl 0x5128                                     |     fcn_00005128 (r0, r1);
    0x000066d0 b 0x6222                                      |     goto label_36;
                                                             | label_84:
    0x000066d2 bic r1, r3, 0x8000800                         |     r1 = BIT_MASK (r3, 0x8000800);
    0x000066d6 bic r1, r1, 0xe9                              |     r1 = BIT_MASK (r1, 0xe9);
    0x000066da cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x000066dc beq.w 0x5fda                                  |         goto label_37;
                                                             |     }
    0x000066e0 ldr r0, [pc, 0x100]                           |     
    0x000066e2 add r0, pc                                    |     r0 = 0xceca;
    0x000066e4 bl 0xc1f0                                     |     fcn_0000c1f0 ();
    0x000066e8 ldr.w r3, [r4, 0x20c]                         |     r3 = *((r4 + 0x20c));
    0x000066ec mov r2, r3                                    |     r2 = r3;
    0x000066ee b 0x5fde                                      |     goto label_38;
                                                             | label_98:
    0x000066f0 ldr r3, [pc, 0xf4]                            |     
    0x000066f2 add r3, pc                                    |     
    0x000066f4 ldr.w r3, [r3, 0x884]                         |     r3 = *(0xd762);
    0x000066f8 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x000066fa bne.w 0x625a                                  |         goto label_39;
                                                             |     }
    0x000066fe b 0x6260                                      |     goto label_40;
                                                             | label_101:
    0x00006700 ldr r5, [pc, 0xe8]                            |     
    0x00006702 add r5, pc                                    |     r5 = 0xcef2;
    0x00006704 b 0x60e2                                      |     goto label_32;
                                                             | label_105:
    0x00006706 ldr r3, [pc, 0xe8]                            |     
    0x00006708 ldr.w r1, [r2, 0x7e8]                         |     r1 = *((r2 + 0x7e8));
    0x0000670c ldr r6, [pc, 0xe4]                            |     
    0x0000670e add r3, pc                                    |     r3 = 0xcf04;
    0x00006710 ldr r5, [r3, 0x10]                            |     r5 = *(0xcf14);
    0x00006712 ldr.w r3, [r2, 0x598]                         |     r3 = *((r2 + 0x598));
    0x00006716 add r6, pc                                    |     r6 = 0xcf0e;
    0x00006718 ldr.w r2, [r2, 0x7ec]                         |     r2 = *((r2 + 0x7ec));
    0x0000671c rsbs r5, r5, 0                                |     r5 -= ;
    0x0000671e add r3, r1                                    |     r3 += r1;
    0x00006720 add r3, r2                                    |     r3 += r2;
    0x00006722 add.w r2, r6, 0x1c                            |     r2 = r6 + 0x1c;
    0x00006726 ands r3, r5                                   |     r3 &= r5;
    0x00006728 ands r5, r2                                   |     r5 &= r2;
    0x0000672a add.w r2, r6, 0x20                            |     r2 = r6 + 0x20;
    0x0000672e cmp r2, r3                                    |     
    0x00006730 sub.w r8, r2, r5                              |     r8 = r2 - r5;
                                                             |     if (r2 > r3) {
    0x00006734 bhi.w 0x658c                                  |         goto label_41;
                                                             |     }
    0x00006738 movs r2, 3                                    |     r2 = 3;
    0x0000673a mov r1, r8                                    |     r1 = r8;
    0x0000673c mov r0, r5                                    |     r0 = r5;
    0x0000673e bl 0x14b10                                    |     r0 = fcn_00014b10 (r0);
    0x00006742 cmp r0, 0                                     |     
                                                             |     if (r0 >= 0) {
    0x00006744 blt 0x6776                                    |         
    0x00006746 ldr r3, [r6, 0x1c]                            |         r3 = *((r6 + 0x1c));
    0x00006748 mov r1, r8                                    |         r1 = r8;
    0x0000674a mov r0, r5                                    |         r0 = r5;
    0x0000674c movs r2, 1                                    |         r2 = 1;
    0x0000674e orr r3, r3, 7                                 |         r3 |= 7;
    0x00006752 str r3, [r6, 0x1c]                            |         *((r6 + 0x1c)) = r3;
    0x00006754 bl 0x14b10                                    |         fcn_00014b10 (r0);
    0x00006758 b 0x6598                                      |         goto label_42;
                                                             | label_104:
    0x0000675a ldr r5, [pc, 0x9c]                            |         
    0x0000675c add r5, pc                                    |         r5 = 0xcf5a;
    0x0000675e b 0x60de                                      |         goto label_18;
                                                             | label_85:
    0x00006760 lsls r2, r2, 4                                |         r2 <<= 4;
                                                             |         if (r2 >= r2) {
    0x00006762 bmi 0x6770                                    |             
    0x00006764 ldr r5, [pc, 0x94]                            |             
    0x00006766 add r5, pc                                    |             r5 = 0xcf66;
    0x00006768 b 0x60e2                                      |             goto label_32;
                                                             | label_72:
    0x0000676a ldr r5, [pc, 0x94]                            |             
    0x0000676c add r5, pc                                    |             r5 = 0xcf72;
    0x0000676e b 0x6464                                      |             goto label_43;
                                                             |         }
    0x00006770 ldr r5, [pc, 0x90]                            |         
    0x00006772 add r5, pc                                    |         r5 = 0xcf7a;
    0x00006774 b 0x60e2                                      |         goto label_32;
                                                             |     }
    0x00006776 ldr r5, [pc, 0x90]                            |     
    0x00006778 add r5, pc                                    |     r5 = 0xcf86;
    0x0000677a b 0x6572                                      |     goto label_44;
                                                             | label_102:
    0x0000677c ldr r5, [pc, 0x8c]                            |     
    0x0000677e add r5, pc                                    |     r5 = 0xcf8e;
    0x00006780 b 0x6572                                      |     goto label_44;
                                                             | label_46:
    0x00006782 ldr r3, [pc, 0x8c]                            |     
    0x00006784 movw r2, 0x3c1                                |     r2 = 0x3c1;
    0x00006788 ldr r1, [pc, 0x88]                            |     
    0x0000678a ldr r0, [pc, 0x8c]                            |     
    0x0000678c add r3, pc                                    |     r3 = 0xcfa2;
    0x0000678e add r1, pc                                    |     r1 = 0xcfa6;
    0x00006790 add r0, pc                                    |     r0 = 0xcfae;
    0x00006792 bl 0x11f30                                    |     fcn_00011f30 (r0);
                                                             | label_80:
    0x00006796 ldr r3, [pc, 0x84]                            |     
    0x00006798 movs r2, 0x7e                                 |     r2 = 0x7e;
    0x0000679a ldr r1, [pc, 0x84]                            |     
    0x0000679c ldr r0, [pc, 0x84]                            |     
    0x0000679e add r3, pc                                    |     r3 = 0xcfc0;
    0x000067a0 add r1, pc                                    |     r1 = 0xcfc6;
    0x000067a2 add r0, pc                                    |     r0 = 0xcfca;
    0x000067a4 bl 0x11f30                                    |     fcn_00011f30 (r0);
                                                             | label_79:
    0x000067a8 ldr r3, [pc, 0x7c]                            |     
    0x000067aa movs r2, 0x78                                 |     r2 = 0x78;
    0x000067ac ldr r1, [pc, 0x7c]                            |     
    0x000067ae ldr r0, [pc, 0x80]                            |     
    0x000067b0 add r3, pc                                    |     r3 = 0xcfdc;
    0x000067b2 add r1, pc                                    |     r1 = 0xcfe2;
    0x000067b4 add r0, pc                                    |     r0 = 0xcfea;
    0x000067b6 bl 0x11f30                                    |     fcn_00011f30 (r0);
                                                             | label_50:
    0x000067ba ldr r3, [pc, 0x78]                            |     
    0x000067bc movw r2, 0x442                                |     r2 = 0x442;
    0x000067c0 ldr r1, [pc, 0x74]                            |     
    0x000067c2 ldr r0, [pc, 0x78]                            |     
    0x000067c4 add r3, pc                                    |     r3 = 0xcffe;
    0x000067c6 add r1, pc                                    |     r1 = 0xd002;
    0x000067c8 add r0, pc                                    |     r0 = 0xd00a;
    0x000067ca bl 0x11f30                                    |     fcn_00011f30 (r0);
                                                             | label_81:
    0x000067ce ldr r3, [pc, 0x70]                            |     
    0x000067d0 movs r2, 0x82                                 |     r2 = 0x82;
    0x000067d2 ldr r1, [pc, 0x70]                            |     
    0x000067d4 ldr r0, [pc, 0x70]                            |     
    0x000067d6 add r3, pc                                    |     r3 = 0xd01c;
    0x000067d8 add r1, pc                                    |     r1 = 0xd022;
    0x000067da add r0, pc                                    |     r0 = 0xd026;
    0x000067dc bl 0x11f30                                    |     fcn_00011f30 (r0);
    0x000067e0 movs r6, 0x5c                                 |     r6 = 0x5c;
    0x000067e2 movs r1, r0                                   |     r1 = r0;
    0x000067e4 adds r6, r2, r6                               |     r6 = r2 + r6;
    0x000067e6 movs r1, r0                                   |     r1 = r0;
    0x000067e8 ldr r2, [r3, 0x10]                            |     r2 = *(0xd02c);
    0x000067ea movs r2, r0                                   |     r2 = r0;
    0x000067ec movs r4, 0x66                                 |     r4 = 0x66;
    0x000067ee movs r1, r0                                   |     r1 = r0;
    0x000067f0 ldrh r6, [r7, r4]                             |     r6 = *((r7 + r4));
    0x000067f2 movs r2, r0                                   |     r2 = r0;
    0x000067f4 ldrb r6, [r2, r4]                             |     r6 = *((r2 + r4));
    0x000067f6 movs r2, r0                                   |     r2 = r0;
    0x000067f8 movs r3, 0x50                                 |     r3 = 0x50;
    0x000067fa movs r1, r0                                   |     r1 = r0;
    0x000067fc movs r3, 0xde                                 |     r3 = 0xde;
    0x000067fe movs r1, r0                                   |     r1 = r0;
    0x00006800 movs r2, 0x8c                                 |     r2 = 0x8c;
    0x00006802 movs r1, r0                                   |     r1 = r0;
    0x00006804 movs r3, 0x5e                                 |     r3 = 0x5e;
    0x00006806 movs r1, r0                                   |     r1 = r0;
    0x00006808 movs r4, 0x30                                 |     r4 = 0x30;
    0x0000680a movs r1, r0                                   |     r1 = r0;
    0x0000680c movs r4, 0x9a                                 |     r4 = 0x9a;
    0x0000680e movs r1, r0                                   |     r1 = r0;
    0x00006810 movs r6, 0xec                                 |     r6 = 0xec;
    0x00006812 movs r1, r0                                   |     r1 = r0;
    0x00006814 movs r1, 0x5e                                 |     r1 = 0x5e;
    0x00006816 movs r1, r0                                   |     r1 = r0;
    0x00006818 movs r4, 0xd0                                 |     r4 = 0xd0;
    0x0000681a movs r1, r0                                   |     r1 = r0;
    0x0000681c subs r6, r1, 4                                |     r6 = r1 - 4;
    0x0000681e movs r1, r0                                   |     r1 = r0;
    0x00006820 asrs r0, r7, 0xd                              |     r0 = r7 >> 0xd;
    0x00006822 movs r1, r0                                   |     r1 = r0;
    0x00006824 adds r2, r4, r2                               |     r2 = r4 + r2;
    0x00006826 movs r1, r0                                   |     r1 = r0;
    0x00006828 subs r4, r7, 3                                |     r4 -= var_3h;
    0x0000682a movs r1, r0                                   |     r1 = r0;
    0x0000682c asrs r6, r4, 0xd                              |     r6 = r4 >> 0xd;
    0x0000682e movs r1, r0                                   |     r1 = r0;
    0x00006830 adds r0, r0, r1                               |     r0 += r1;
    0x00006832 movs r1, r0                                   |     r1 = r0;
    0x00006834 movs r6, 0xb4                                 |     r6 = 0xb4;
    0x00006836 movs r1, r0                                   |     r1 = r0;
    0x00006838 movs r1, 0x26                                 |     r1 = 0x26;
    0x0000683a movs r1, r0                                   |     r1 = r0;
    0x0000683c movs r4, 0xd4                                 |     r4 = 0xd4;
    0x0000683e movs r1, r0                                   |     r1 = r0;
    0x00006840 subs r6, r2, 3                                |     r6 = r2 - 3;
    0x00006842 movs r1, r0                                   |     r1 = r0;
    0x00006844 asrs r0, r0, 0xd                              |     r0 >>= 0xd;
    0x00006846 movs r1, r0                                   |     r1 = r0;
    0x00006848 asrs r2, r7, 0xd                              |     r2 = r7 >> 0xd;
    0x0000684a movs r1, r0                                   |     r1 = r0;
                                                             | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x721c */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.0000721c ()                          | void fcn_0000721c (int16_t arg_18h, int16_t arg_1ch, int16_t arg_20h, int16_t arg_24h, int16_t arg_28h, int16_t arg_2ch, int16_t arg_30h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                     |     int16_t var_20h;
                                                     |     int16_t var_24h_2;
                                                     |     int16_t var_28h_2;
                                                     |     int16_t var_30h_2;
                                                     |     int16_t var_34h_2;
                                                     |     int16_t var_38h_2;
                                                     |     int16_t var_3ch_2;
                                                     |     int16_t var_b0h;
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
                                                     |     r2 = arg3;
                                                     |     r3 = arg4;
    0x0000721c push.w {r4, r5, r6, r7, r8, lr}       |     
    0x00007220 mov r7, r3                            |     r7 = r3;
    0x00007222 ldr r6, [sp, 0x1c]                    |     r6 = *(arg_1ch);
    0x00007224 mov r8, r1                            |     r8 = r1;
    0x00007226 mov r5, r2                            |     r5 = r2;
    0x00007228 ldr r4, [sp, 0x28]                    |     r4 = *(arg_28h);
    0x0000722a ldr r3, [r6, 4]                       |     r3 = *((r6 + 4));
    0x0000722c ldrb.w lr, [r6, 0xc]                  |     
    0x00007230 ldrh r1, [r6, 0xe]                    |     r1 = *((r6 + 0xe));
    0x00007232 and lr, lr, 0xf                       |     lr &= 0xf;
    0x00007236 cmp r3, 0                             |     
                                                     |     if (r3 == 0) {
    0x00007238 beq 0x72d8                            |         goto label_4;
                                                     |     }
                                                     | label_2:
    0x0000723a movw ip, 0xfb98                       |     
    0x0000723e ldr r2, [sp, 0x18]                    |     r2 = *(arg_18h);
    0x00007240 movt ip, 0xffff                       |     ip = 0xfffffb98;
    0x00007244 asr.w ip, ip, lr                      |     
    0x00007248 cmp r1, 0                             |     
    0x0000724a ite ne                                |     
                                                     |     if (r1 == 0) {
    0x0000724c movne r2, 0                           |         r2 = 0;
                                                     |     }
                                                     |     if (r1 != 0) {
    0x0000724e andeq r2, r2, 1                       |         r2 &= 1;
                                                     |     }
    0x00007252 and ip, ip, 1                         |     
    0x00007256 orrs.w r2, r2, ip                     |     r2 |= ip;
                                                     |     if (r2 != r2) {
    0x0000725a bne 0x72e6                            |         goto label_5;
                                                     |     }
    0x0000725c cmp r6, r8                            |     
                                                     |     if (r6 != r8) {
    0x0000725e beq 0x7270                            |         
    0x00007260 ldr r3, [sp, 0x24]                    |         r3 = *(arg_24h);
    0x00007262 mov r1, r0                            |         r1 = r0;
    0x00007264 ldr r0, [r6]                          |         r0 = *(r6);
    0x00007266 add r0, r3                            |         r0 += r3;
    0x00007268 bl 0x14f30                            |         r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x0000726c cmp r0, 0                             |         
                                                     |         if (r0 != 0) {
    0x0000726e bne 0x72e6                            |             goto label_5;
                                                     |         }
                                                     |     }
    0x00007270 ldr.w r3, [r4, 0x1ac]                 |     r3 = *((r4 + 0x1ac));
                                                     |     if (r5 == 0) {
    0x00007274 cbz r5, 0x72a4                        |         goto label_6;
                                                     |     }
    0x00007276 cmp r3, 0                             |     
                                                     |     if (r3 == 0) {
    0x00007278 beq 0x72fa                            |         goto label_7;
                                                     |     }
    0x0000727a ldr r2, [sp, 0x20]                    |     r2 = *(arg_20h);
    0x0000727c ldr r1, [r5, 4]                       |     r1 = *((r5 + 4));
    0x0000727e ldrh.w r7, [r3, r2, lsl 1]            |     offset_0 = r2 << 1;
                                                     |     r7 = *((r3 + offset_0));
    0x00007282 ldr.w r2, [r4, 0x174]                 |     r2 = *((r4 + 0x174));
    0x00007286 ubfx r3, r7, 0, 0xf                   |     r3 = (r7 >> 0) & ((1 << 0xf) - 1);
    0x0000728a lsls r3, r3, 4                        |     r3 <<= 4;
    0x0000728c adds r0, r2, r3                       |     r0 = r2 + r3;
    0x0000728e ldr r4, [r0, 4]                       |     r4 = *((r0 + 4));
    0x00007290 cmp r4, r1                            |     
                                                     |     if (r4 == r1) {
    0x00007292 beq 0x72ec                            |         goto label_8;
                                                     |     }
                                                     | label_3:
    0x00007294 ldr r3, [r5, 8]                       |     r3 = *((r5 + 8));
    0x00007296 orrs r4, r3                           |     r4 |= r3;
                                                     |     if (r4 != r3) {
    0x00007298 bne 0x72e6                            |         goto label_5;
                                                     |     }
    0x0000729a lsls r2, r7, 0x10                     |     r2 = r7 << 0x10;
                                                     |     if (r2 < r7) {
    0x0000729c bmi 0x72e6                            |         goto label_5;
                                                     |     }
                                                     |     do {
                                                     | label_0:
    0x0000729e mov r0, r6                            |         r0 = r6;
                                                     | label_1:
    0x000072a0 pop.w {r4, r5, r6, r7, r8, pc}        |         
                                                     | label_6:
    0x000072a4 cmp r3, 0                             |         
    0x000072a6 beq 0x729e                            |         
                                                     |     } while (r3 == 0);
    0x000072a8 ldr r2, [sp, 0x20]                    |     r2 = *(arg_20h);
    0x000072aa tst.w r7, 2                           |     
    0x000072ae ldrh.w r3, [r3, r2, lsl 1]            |     offset_1 = r2 << 1;
                                                     |     r3 = *((r3 + offset_1));
    0x000072b2 ite ne                                |     
                                                     |     if ((r7 & 2) == 0) {
    0x000072b4 movne r2, 2                           |         r2 = 2;
                                                     |     }
                                                     |     if ((r7 & 2) != 0) {
    0x000072b6 moveq r2, 3                           |         r2 = 3;
                                                     |     }
    0x000072b8 ubfx r1, r3, 0, 0xf                   |     r1 = (r3 >> 0) & ((1 << 0xf) - 1);
    0x000072bc cmp r1, r2                            |     
                                                     |     if (r1 < r2) {
    0x000072be blt 0x729e                            |         goto label_0;
                                                     |     }
    0x000072c0 lsls r3, r3, 0x10                     |     r3 <<= 0x10;
                                                     |     if (r3 < r3) {
    0x000072c2 bmi 0x72e6                            |         goto label_5;
                                                     |     }
    0x000072c4 ldr r3, [sp, 0x30]                    |     r3 = *(arg_30h);
    0x000072c6 ldr r1, [sp, 0x30]                    |     r1 = *(arg_30h);
    0x000072c8 ldr r3, [r3]                          |     r3 = *(r3);
    0x000072ca adds r2, r3, 1                        |     r2 = r3 + 1;
    0x000072cc str r2, [r1]                          |     *(r1) = r2;
                                                     |     if (r3 != 0) {
    0x000072ce cbnz r3, 0x72e6                       |         goto label_5;
                                                     |     }
    0x000072d0 ldr r3, [sp, 0x2c]                    |     r3 = *(arg_2ch);
    0x000072d2 mov r0, r5                            |     r0 = r5;
    0x000072d4 str r6, [r3]                          |     *(r3) = r6;
    0x000072d6 b 0x72a0                              |     goto label_1;
                                                     | label_4:
    0x000072d8 movw r3, 0xfff1                       |     r3 = 0xfff1;
    0x000072dc cmp.w lr, 6                           |     
    0x000072e0 it ne                                 |     
                                                     |     if (lr == 6) {
    0x000072e2 cmpne r1, r3                          |         __asm ("cmpne r1, r3");
                                                     |         goto label_9;
                                                     |     }
                                                     |     if (lr == 6) {
                                                     | label_9:
    0x000072e4 beq 0x723a                            |         goto label_2;
                                                     |     }
                                                     | label_5:
    0x000072e6 movs r0, 0                            |     r0 = 0;
    0x000072e8 pop.w {r4, r5, r6, r7, r8, pc}        |     
                                                     | label_8:
    0x000072ec ldr r0, [r2, r3]                      |     r0 = *((r2 + r3));
    0x000072ee ldr r1, [r5]                          |     r1 = *(r5);
    0x000072f0 bl 0x14f30                            |     r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x000072f4 cmp r0, 0                             |     
                                                     |     if (r0 == 0) {
    0x000072f6 beq 0x729e                            |         goto label_0;
                                                     |     }
    0x000072f8 b 0x7294                              |     goto label_3;
                                                     | label_7:
    0x000072fa ldr r0, [r5, 0xc]                     |     r0 = *((r5 + 0xc));
    0x000072fc cmp r0, 0                             |     
                                                     |     if (r0 == 0) {
    0x000072fe beq 0x729e                            |         goto label_0;
                                                     |     }
    0x00007300 mov r1, r4                            |     r1 = r4;
    0x00007302 bl 0xc2c0                             |     r0 = fcn_0000c2c0 (r0, r1);
    0x00007306 cmp r0, 0                             |     
                                                     |     if (r0 == 0) {
    0x00007308 beq 0x729e                            |         goto label_0;
                                                     |     }
    0x0000730a ldr r3, [pc, 0x10]                    |     
    0x0000730c movs r2, 0x69                         |     r2 = 0x69;
    0x0000730e ldr r1, [pc, 0x10]                    |     
    0x00007310 ldr r0, [pc, 0x10]                    |     
    0x00007312 add r3, pc                            |     r3 = 0xe634;
    0x00007314 add r1, pc                            |     r1 = 0xe63a;
    0x00007316 add r0, pc                            |     r0 = 0xe63e;
    0x00007318 bl 0x11f30                            |     fcn_00011f30 (r0);
    0x0000731c subs r2, r1, 5                        |     r2 = r1 - 5;
    0x0000731e movs r1, r0                           |     r1 = r0;
    0x00007320 subs r0, r6, r7                       |     r0 = r6 - r7;
    0x00007322 movs r1, r0                           |     r1 = r0;
    0x00007324 subs r2, r7, r7                       |     r2 = r7 - r7;
    0x00007326 movs r1, r0                           |     r1 = r0;
                                                     | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x7328).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate 
the needed data for the issue.
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x7ac8 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00007ac8 ()                                      | void fcn_00007ac8 (int16_t arg_a8h, int16_t arg_ach, int16_t arg_b0h, int16_t arg_b4h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_60h;
                                                                 |     int16_t var_64h;
                                                                 |     int16_t var_68h;
                                                                 |     int16_t var_6ch;
                                                                 |     int16_t var_70h;
                                                                 |     int16_t var_74h;
                                                                 |     int16_t var_78h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00007ac8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00007acc sub sp, 0x84                                      |     
    0x00007ace str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00007ad0 mov r4, r0                                        |     r4 = r0;
    0x00007ad2 mov fp, r2                                        |     
    0x00007ad4 ldr.w r3, [pc, 0xb48]                             |     r3 = *(0x00008620);
    0x00007ad8 ldrd r7, r5, [sp, 0xb0]                           |     __asm ("ldrd r7, r5, [arg_b0h]");
    0x00007adc str r1, [sp, 0x20]                                |     var_20h = r1;
    0x00007ade add r3, pc                                        |     r3 += pc;
    0x00007ae0 addw r3, r3, 0x544                                |     __asm ("addw r3, r3, 0x544");
    0x00007ae4 mov sb, r7                                        |     sb = r7;
    0x00007ae6 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x00007ae8 ldr.w r3, [pc, 0xb38]                             |     r3 = *(0x00008624);
    0x00007aec add r3, pc                                        |     r3 += pc;
    0x00007aee str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00007af0 ldr.w r3, [pc, 0xb34]                             |     r3 = *(0x00008628);
    0x00007af4 add r3, pc                                        |     r3 += pc;
    0x00007af6 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x00007af8 mrc p15, 0, r3, c13, c0, 3                        |     __asm ("mrc p15, 0, r3, c13, c0, 3");
    0x00007afc str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00007afe sub.w r3, r3, 0x540                               |     r3 -= 0x540;
    0x00007b02 str r3, [sp, 0x30]                                |     var_30h = r3;
                                                                 | label_17:
    0x00007b04 ldrb r3, [r4]                                     |     r3 = *(r4);
    0x00007b06 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00007b08 beq.w 0x7cae                                      |         goto label_52;
                                                                 |     }
    0x00007b0c mov r2, r4                                        |     r2 = r4;
    0x00007b0e movw sl, 0x1505                                   |     sl = 0x1505;
                                                                 |     do {
    0x00007b12 add.w sl, sl, sl, lsl 5                           |         sl += (sl << 5);
    0x00007b16 add sl, r3                                        |         sl += r3;
    0x00007b18 ldrb r3, [r2, 1]!                                 |         r3 = *((r2 += 1));
    0x00007b1c cmp r3, 0                                         |         
    0x00007b1e bne 0x7b12                                        |         
                                                                 |     } while (r3 != 0);
                                                                 | label_1:
    0x00007b20 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00007b22 ldr.w r3, [r2, 0x588]                             |     r3 = *((r2 + 0x588));
    0x00007b26 adds r3, 1                                        |     r3++;
    0x00007b28 str.w r3, [r2, 0x588]                             |     __asm ("str.w r3, [r2, 0x588]");
    0x00007b2c movs r3, 0                                        |     r3 = 0;
    0x00007b2e strd r3, r3, [sp, 0x64]                           |     __asm ("strd r3, r3, [var_64h]");
    0x00007b32 mov.w r3, -1                                      |     r3 = -1;
    0x00007b36 str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x00007b38 ldr r3, [sp, 0xa8]                                |     r3 = *(arg_a8h);
                                                                 |     if (r3 != 0) {
    0x00007b3a cbz r3, 0x7b44                                    |         
    0x00007b3c tst.w sb, 2                                       |         
                                                                 |         if ((sb & 2) != 0) {
    0x00007b40 bne.w 0x83bc                                      |             goto label_53;
                                                                 |         }
                                                                 |     }
    0x00007b44 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00007b46 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00007b48 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00007b4a bne.w 0x7d30                                      |         goto label_54;
                                                                 |     }
    0x00007b4e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00007b50 beq.w 0x7cb4                                      |         goto label_55;
                                                                 |     }
    0x00007b54 str r5, [sp, 0x2c]                                |     var_2ch = r5;
                                                                 | label_2:
    0x00007b56 add.w r8, sp, 0x64                                |     r8 += var_64h;
    0x00007b5a ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00007b5c mov r2, r8                                        |     r2 = r8;
    0x00007b5e ldr r6, [sp, 0x24]                                |     r6 = var_24h;
    0x00007b60 mov r8, r5                                        |     r8 = r5;
    0x00007b62 add r7, sp, 0x5c                                  |     r7 += var_5ch;
    0x00007b64 mov r5, sl                                        |     r5 = sl;
    0x00007b66 mov sl, r2                                        |     sl = r2;
    0x00007b68 b 0x7b70                                          |     
                                                                 |     while (r0 == 0) {
    0x00007b6a ldr r3, [r6, 4]!                                  |         r3 = *((r6 += 4));
                                                                 |         if (r3 == 0) {
    0x00007b6e cbz r3, 0x7b9c                                    |             goto label_56;
                                                                 |         }
    0x00007b70 strd r3, r0, [sp, 4]                              |         __asm ("strd r3, r0, [var_4h]");
    0x00007b74 mov r2, r7                                        |         r2 = r7;
    0x00007b76 ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x00007b78 mov r1, r5                                        |         r1 = r5;
    0x00007b7a str.w sb, [sp, 0x10]                              |         __asm ("str.w sb, [var_10h]");
    0x00007b7e mov r0, r4                                        |         r0 = r4;
    0x00007b80 str.w sl, [sp]                                    |         __asm ("str.w sl, [sp]");
    0x00007b84 str r3, [sp, 0x1c]                                |         var_1ch = r3;
    0x00007b86 ldr r3, [sp, 0xac]                                |         r3 = *(arg_ach);
    0x00007b88 strd r8, r3, [sp, 0x14]                           |         __asm ("strd r8, r3, [var_14h]");
    0x00007b8c ldr r3, [sp, 0xa8]                                |         r3 = *(arg_a8h);
    0x00007b8e str r3, [sp, 0xc]                                 |         var_ch = r3;
    0x00007b90 ldr.w r3, [fp]                                    |         r3 = *(fp);
    0x00007b94 bl 0x7328                                         |         r0 = fcn_00007328 (r0, r1, r2, r3, r4, r5);
    0x00007b98 cmp r0, 0                                         |         
    0x00007b9a beq 0x7b6a                                        |         
                                                                 |     }
                                                                 | label_56:
    0x00007b9c ldr r0, [sp, 0x64]                                |     r0 = var_64h;
    0x00007b9e mov sl, r5                                        |     sl = r5;
    0x00007ba0 ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x00007ba4 mov r5, r8                                        |     r5 = r8;
    0x00007ba6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00007ba8 beq.w 0x7cb8                                      |         goto label_57;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x00007bac cbz r3, 0x7bb8                                    |         
    0x00007bae ldrb r6, [r3, 0xd]                                |         r6 = *((r3 + 0xd));
    0x00007bb0 and r6, r6, 3                                     |         r6 &= 3;
    0x00007bb4 cmp r6, 3                                         |         
                                                                 |         if (r6 == 3) {
    0x00007bb6 beq 0x7bfa                                        |             goto label_58;
                                                                 |         }
                                                                 |     }
    0x00007bb8 ldr r6, [sp, 0x68]                                |     r6 = var_68h;
    0x00007bba mov.w r8, 0                                       |     r8 = 0;
                                                                 | label_0:
    0x00007bbe ldrb.w r3, [r6, 0x198]                            |     r3 = *((r6 + 0x198));
    0x00007bc2 and r3, r3, 3                                     |     r3 &= 3;
    0x00007bc6 cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x00007bc8 beq.w 0x7e64                                      |         goto label_59;
                                                                 |     }
                                                                 | label_5:
    0x00007bcc mov r5, r6                                        |     r5 = r6;
    0x00007bce mov sl, r6                                        |     sl = r6;
    0x00007bd0 ldr r6, [sp, 0x64]                                |     r6 = var_64h;
                                                                 | label_6:
    0x00007bd2 ldr.w r3, [sl, 0x204]                             |     r3 = *((sl + 0x204));
    0x00007bd6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00007bd8 beq.w 0x7d4a                                      |         goto label_60;
                                                                 |     }
                                                                 | label_3:
    0x00007bdc ldr.w r3, [pc, 0xa4c]                             |     r3 = *(0x0000862c);
    0x00007be0 movw r2, 0x804                                    |     r2 = 0x804;
    0x00007be4 add r3, pc                                        |     r3 += pc;
    0x00007be6 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00007be8 tst r3, r2                                        |     
                                                                 |     if ((r3 & r2) != 0) {
    0x00007bea bne.w 0x7d52                                      |         goto label_61;
                                                                 |     }
    0x00007bec strh r2, [r6, 4]                                  |     *((r6 + 4)) = r2;
                                                                 | label_4:
    0x00007bee mov r0, r5                                        |     r0 = r5;
    0x00007bf0 str.w r6, [fp]                                    |     __asm ("str.w r6, [fp]");
    0x00007bf4 add sp, 0x84                                      |     
    0x00007bf6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_58:
    0x00007bfa ldr r2, [sp, 0xac]                                |     r2 = *(arg_ach);
    0x00007bfc cmp r2, 1                                         |     
                                                                 |     if (r2 == 1) {
    0x00007bfe beq.w 0x7ed2                                      |         goto label_62;
                                                                 |     }
    0x00007c02 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00007c04 movs r6, 0                                        |     r6 = 0;
    0x00007c06 ldr r1, [r2]                                      |     r1 = *(r2);
    0x00007c08 strd r6, r6, [sp, 0x74]                           |     __asm ("strd r6, r6, [var_74h]");
    0x00007c0c cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00007c0e beq.w 0x7ef0                                      |         goto label_63;
                                                                 |     }
    0x00007c12 ldr r2, [sp, 0xac]                                |     r2 = *(arg_ach);
    0x00007c14 str r5, [sp, 0xb4]                                |     *(arg_b4h) = r5;
    0x00007c16 mov r5, sb                                        |     r5 = sb;
    0x00007c18 ldr.w r8, [sp, 0x24]                              |     r8 = var_24h;
    0x00007c1c sub.w r2, r2, 4                                   |     r2 -= 4;
    0x00007c20 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00007c22 clz r2, r2                                        |     r2 &= r2;
    0x00007c24 bl 0x289de2                                       |     void (*0x289de2)(uint32_t, uint32_t) (r0, r2);
    0x00007c28 str r0, [sp, 0x2d0]                               |     *((sp + 0x2d0)) = r0;
    0x00007c2a lsrs r2, r2, 5                                    |     r2 >>= 5;
    0x00007c2c str r2, [sp, 0x40]                                |     var_40h = r2;
    0x00007c2e add r2, sp, 0x74                                  |     r2 += var_74h;
    0x00007c30 str r2, [sp, 0x44]                                |     var_44h = r2;
    0x00007c32 mov r2, r3                                        |     r2 = r3;
    0x00007c34 mov r3, r1                                        |     r3 = r1;
    0x00007c36 mov r1, r2                                        |     r1 = r2;
    0x00007c38 b 0x7c44                                          |     
                                                                 |     while (r0 == 0) {
    0x00007c3a ldr r3, [r8, 4]!                                  |         r3 = *((r8 += 4));
                                                                 |         if (r3 == 0) {
    0x00007c3e cbz r3, 0x7c86                                    |             goto label_64;
                                                                 |         }
    0x00007c40 ldr.w r1, [fp]                                    |         r1 = *(fp);
    0x00007c44 ldrb.w ip, [r1, 0xc]                              |         ip = *((r1 + 0xc));
    0x00007c48 ldr r2, [sp, 0x40]                                |         r2 = var_40h;
    0x00007c4a strd r3, r0, [sp, 4]                              |         __asm ("strd r3, r0, [var_4h]");
    0x00007c4c adds r0, 1                                        |         r0++;
    0x00007c4e mov r3, r1                                        |         r3 = r1;
    0x00007c50 and r0, ip, 0xf                                   |         r0 = ip & 0xf;
    0x00007c54 mov r1, sl                                        |         r1 = sl;
    0x00007c56 cmp r0, 1                                         |         
    0x00007c58 ite ne                                            |         
                                                                 |         if (r0 == 1) {
    0x00007c5a movne r2, 0                                       |             r2 = 0;
                                                                 |         }
                                                                 |         if (r0 != 1) {
    0x00007c5c andeq r2, r2, 1                                   |             r2 &= 1;
                                                                 |         }
    0x00007c60 str r6, [sp, 0x1c]                                |         var_1ch = r6;
    0x00007c62 cmp r2, 0                                         |         
    0x00007c64 ldr r2, [sp, 0xa8]                                |         r2 = *(arg_a8h);
    0x00007c66 ite ne                                            |         
                                                                 |         if (r2 == 0) {
    0x00007c68 movne r0, 4                                       |             r0 = 4;
                                                                 |         }
                                                                 |         if (r2 != 0) {
    0x00007c6a moveq r0, 1                                       |             r0 = 1;
                                                                 |         }
    0x00007c6c str r0, [sp, 0x18]                                |         var_18h = r0;
    0x00007c6e mov r0, r4                                        |         r0 = r4;
    0x00007c70 str r2, [sp, 0xc]                                 |         var_ch = r2;
    0x00007c72 ldr r2, [sp, 0x44]                                |         r2 = var_44h;
    0x00007c74 str.w sb, [sp, 0x14]                              |         __asm ("str.w sb, [var_14h]");
    0x00007c78 str r5, [sp, 0x10]                                |         var_10h = r5;
    0x00007c7a str r2, [sp]                                      |         *(sp) = r2;
    0x00007c7c mov r2, r7                                        |         r2 = r7;
    0x00007c7e bl 0x7328                                         |         r0 = fcn_00007328 (r0, r1, r2, r3, r4, r5);
    0x00007c82 cmp r0, 0                                         |         
    0x00007c84 beq 0x7c3a                                        |         
                                                                 |     }
                                                                 | label_64:
    0x00007c86 ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x00007c88 str.w sb, [sp, 0xb4]                              |     __asm ("str.w sb, [arg_b4h]");
    0x00007c8c mov sb, r5                                        |     sb = r5;
    0x00007c8e ldr r5, [sp, 0xb4]                                |     r5 = *(arg_b4h);
    0x00007c90 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00007c92 beq.w 0x7ef0                                      |         goto label_63;
                                                                 |     }
    0x00007c96 ldr r3, [sp, 0x78]                                |     r3 = var_78h;
    0x00007c98 ldr r6, [sp, 0x20]                                |     r6 = var_20h;
    0x00007c9a cmp r3, r6                                        |     
                                                                 |     if (r3 == r6) {
    0x00007c9c beq.w 0x7ef0                                      |         goto label_63;
                                                                 |     }
    0x00007ca0 ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x00007ca4 str r6, [sp, 0x68]                                |     var_68h = r6;
    0x00007ca6 str r3, [sp, 0x64]                                |     var_64h = r3;
                                                                 | label_7:
    0x00007ca8 mov.w r8, 1                                       |     r8 = 1;
    0x00007cac b 0x7bbe                                          |     goto label_0;
                                                                 | label_52:
    0x00007cae movw sl, 0x1505                                   |     sl = 0x1505;
    0x00007cb2 b 0x7b20                                          |     goto label_1;
                                                                 | label_55:
    0x00007cb4 ldr.w r3, [fp]                                    |     r3 = *(fp);
                                                                 |     if (r3 != 0) {
                                                                 | label_57:
    0x00007cb8 cbz r3, 0x7cc2                                    |         
    0x00007cba ldrb r3, [r3, 0xc]                                |         r3 = *((r3 + 0xc));
    0x00007cbc lsrs r3, r3, 4                                    |         r3 >>= 4;
    0x00007cbe cmp r3, 2                                         |         
                                                                 |         if (r3 == 2) {
    0x00007cc0 beq 0x7d20                                        |             goto label_65;
                                                                 |         }
                                                                 |     }
    0x00007cc2 ldr.w r3, [pc, 0x96c]                             |     r3 = *(0x00008630);
    0x00007cc6 add r3, pc                                        |     r3 += pc;
    0x00007cc8 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00007cca lsls r6, r3, 0x17                                 |     r6 = r3 << 0x17;
                                                                 |     if (r6 >= r3) {
    0x00007ccc bmi 0x7d20                                        |         
    0x00007cce ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x00007cd0 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00007cd2 beq.w 0x7fec                                      |             goto label_66;
                                                                 |         }
    0x00007cd6 ldr r1, [r3, 4]                                   |         r1 = *((r3 + 4));
    0x00007cd8 ldr r3, [sp, 0xa8]                                |         r3 = *(arg_a8h);
    0x00007cda ldrb r2, [r1]                                     |         r2 = *(r1);
    0x00007cdc cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00007cde beq.w 0x8082                                      |             goto label_67;
                                                                 |         }
    0x00007ce2 ldr r3, [sp, 0xa8]                                |         r3 = *(arg_a8h);
    0x00007ce4 ldr r3, [r3]                                      |         r3 = *(r3);
    0x00007ce6 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00007ce8 beq.w 0x818a                                      |             goto label_68;
                                                                 |         }
    0x00007cec ldr.w r0, [pc, 0x944]                             |         
    0x00007cf0 add r0, pc                                        |         r0 = 0x10328;
                                                                 | label_12:
    0x00007cf2 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00007cf4 beq.w 0x8004                                      |             goto label_21;
                                                                 |         }
                                                                 | label_11:
    0x00007cf8 ldr.w r2, [pc, 0x93c]                             |         
    0x00007cfc str r3, [sp, 4]                                   |         var_4h = r3;
    0x00007cfe mov r3, r4                                        |         r3 = r4;
    0x00007d00 add r4, sp, 0x74                                  |         r4 += var_74h;
    0x00007d02 str r0, [sp]                                      |         *(sp) = r0;
    0x00007d04 add r2, pc                                        |         r2 = 0x10340;
    0x00007d06 mov r0, r4                                        |         r0 = r4;
    0x00007d08 bl 0xfd5c                                         |         dl_exception_create_format ();
    0x00007d0c ldr.w r2, [pc, 0x92c]                             |         
    0x00007d10 movs r0, 0                                        |         r0 = 0;
    0x00007d12 mov r1, r4                                        |         r1 = r4;
    0x00007d14 add r2, pc                                        |         r2 = 0x10354;
    0x00007d16 bl 0x123f4                                        |         fcn_000123f4 (r0, r1, r2, r3, r4);
    0x00007d1a mov r0, r4                                        |         r0 = r4;
    0x00007d1c bl 0xff7c                                         |         dl_exception_free ();
                                                                 |     }
                                                                 | label_65:
    0x00007d20 movs r6, 0                                        |     r6 = 0;
    0x00007d22 mov r5, r6                                        |     r5 = r6;
    0x00007d24 str.w r6, [fp]                                    |     __asm ("str.w r6, [fp]");
    0x00007d28 mov r0, r5                                        |     r0 = r5;
    0x00007d2a add sp, 0x84                                      |     
    0x00007d2c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_54:
    0x00007d30 ldr r2, [r3]                                      |     r2 = *(r3);
    0x00007d32 ldr r0, [r2]                                      |     r0 = *(r2);
    0x00007d34 cmp r5, r0                                        |     
                                                                 |     if (r5 == r0) {
    0x00007d36 beq.w 0x8030                                      |         goto label_69;
                                                                 |     }
    0x00007d3a movs r1, 0                                        |     r1 = 0;
                                                                 |     do {
    0x00007d3c ldr r0, [r2, 4]!                                  |         r0 = *((r2 += 4));
    0x00007d40 adds r1, 1                                        |         r1++;
    0x00007d42 cmp r0, r5                                        |         
    0x00007d44 bne 0x7d3c                                        |         
                                                                 |     } while (r0 != r5);
    0x00007d46 str r1, [sp, 0x2c]                                |     var_2ch = r1;
    0x00007d48 b 0x7b56                                          |     goto label_2;
                                                                 | label_60:
    0x00007d4a movs r3, 1                                        |     r3 = 1;
    0x00007d4c str.w r3, [sl, 0x204]                             |     __asm ("str.w r3, [sl, 0x204]");
    0x00007d50 b 0x7bdc                                          |     goto label_3;
                                                                 | label_61:
    0x00007d52 lsls r2, r3, 0x1d                                 |     r2 = r3 << 0x1d;
                                                                 |     if (r2 < r3) {
    0x00007d54 bpl 0x7dc4                                        |         
    0x00007d56 ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x00007d58 ldr r1, [r3, 4]                                   |         r1 = *((r3 + 4));
    0x00007d5a ldrb r3, [r1]                                     |         r3 = *(r1);
                                                                 |         if (r3 == 0) {
    0x00007d5c cbnz r3, 0x7d6e                                   |             
    0x00007d5e ldr.w r3, [pc, 0x8e0]                             |             r3 = *(0x00008640);
    0x00007d62 add r3, pc                                        |             r3 += pc;
    0x00007d64 ldr r3, [r3]                                      |             r3 = *(r3);
    0x00007d66 ldr r1, [r3]                                      |             r1 = *(r3);
    0x00007d68 cmp r1, 0                                         |             
                                                                 |             if (r1 == 0) {
    0x00007d6a beq.w 0x80e2                                      |                 goto label_70;
                                                                 |             }
                                                                 |         }
                                                                 | label_15:
    0x00007d6e ldr r3, [r5, 4]                                   |         r3 = *((r5 + 4));
    0x00007d70 ldr r2, [sp, 0x20]                                |         r2 = var_20h;
    0x00007d72 ldrb r0, [r3]                                     |         r0 = *(r3);
    0x00007d74 ldr r2, [r2, 0x18]                                |         r2 = *((r2 + 0x18));
                                                                 |         if (r0 == 0) {
    0x00007d76 cbnz r0, 0x7d88                                   |             
    0x00007d78 ldr.w r3, [pc, 0x8c8]                             |             r3 = *(0x00008644);
    0x00007d7c add r3, pc                                        |             r3 += pc;
    0x00007d7e ldr r3, [r3]                                      |             r3 = *(r3);
    0x00007d80 ldr r3, [r3]                                      |             r3 = *(r3);
    0x00007d82 cmp r3, 0                                         |             
                                                                 |             if (r3 == 0) {
    0x00007d84 beq.w 0x80ea                                      |                 goto label_71;
                                                                 |             }
                                                                 |         }
                                                                 | label_16:
    0x00007d88 ldr r0, [r5, 0x18]                                |         r0 = *((r5 + 0x18));
    0x00007d8a cmp.w r8, 0                                       |         
                                                                 |         if (r8 != 0) {
    0x00007d8e bne.w 0x7fe4                                      |             goto label_72;
                                                                 |         }
    0x00007d92 ldr.w r7, [pc, 0x8b4]                             |         r7 = *(0x00008648);
    0x00007d96 add r7, pc                                        |         r7 += pc;
                                                                 | label_10:
    0x00007d98 strd r0, r7, [sp]                                 |         __asm ("strd r0, r7, [sp]");
    0x00007d9c ldr.w r0, [pc, 0x8ac]                             |         r0 = *(0x0000864c);
    0x00007da0 str r4, [sp, 8]                                   |         var_8h = r4;
    0x00007da2 add r0, pc                                        |         r0 += pc;
    0x00007da4 bl 0xc1f0                                         |         fcn_0000c1f0 ();
    0x00007da8 ldr r3, [sp, 0xa8]                                |         r3 = *(arg_a8h);
    0x00007daa cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00007dac beq.w 0x801c                                      |             goto label_73;
                                                                 |         }
    0x00007db0 ldr.w r0, [pc, 0x89c]                             |         r0 = *(0x00008650);
    0x00007db4 ldr r1, [r3]                                      |         r1 = *(r3);
    0x00007db6 add r0, pc                                        |         r0 += pc;
    0x00007db8 bl 0xc218                                         |         fcn_0000c218 ();
    0x00007dbc ldr.w r3, [pc, 0x894]                             |         r3 = *(0x00008654);
    0x00007dc0 add r3, pc                                        |         r3 += pc;
    0x00007dc2 ldr r3, [r3]                                      |         r3 = *(r3);
                                                                 |     }
    0x00007dc4 lsls r3, r3, 0x14                                 |     r3 <<= 0x14;
                                                                 |     if (r3 >= r3) {
    0x00007dc6 bpl.w 0x7bee                                      |         goto label_4;
                                                                 |     }
    0x00007dca ldr.w r3, [pc, 0x88c]                             |     r3 = *(0x00008658);
    0x00007dce ldr.w r2, [pc, 0x88c]                             |     r2 = *(0x0000865c);
    0x00007dd2 add r3, pc                                        |     r3 += pc;
    0x00007dd4 ldr.w r3, [r3, 0x188]                             |     r3 = *((r3 + 0x188));
    0x00007dd8 add r2, pc                                        |     r2 += pc;
    0x00007dda ldr r1, [r2]                                      |     r1 = *(r2);
    0x00007ddc movs r2, 0                                        |     r2 = 0;
    0x00007dde strd r2, r2, [sp, 0x6c]                           |     __asm ("strd r2, r2, [var_6ch]");
    0x00007de2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00007de4 beq.w 0x7ef4                                      |         goto label_74;
                                                                 |     }
    0x00007de8 cmp r3, r1                                        |     
                                                                 |     if (r3 == r1) {
    0x00007dea beq.w 0x7ef4                                      |         goto label_74;
                                                                 |     }
                                                                 | label_8:
    0x00007dee cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00007df0 beq.w 0x8036                                      |         goto label_75;
                                                                 |     }
    0x00007df4 ldr r3, [sp, 0xac]                                |     r3 = *(arg_ach);
    0x00007df6 and r3, r3, 3                                     |     r3 &= 3;
    0x00007dfa str r3, [sp, 0xac]                                |     *(arg_ach) = r3;
    0x00007dfc ldrb r3, [r6, 0xc]                                |     r3 = *((r6 + 0xc));
    0x00007dfe and r3, r3, 0xf                                   |     r3 &= 0xf;
    0x00007e00 lsls r7, r1, 0xc                                  |     r7 = r1 << 0xc;
    0x00007e02 cmp r3, 6                                         |     
                                                                 |     if (r3 == 6) {
    0x00007e04 beq.w 0x8232                                      |         goto label_76;
                                                                 |     }
    0x00007e08 cmp r3, 0xa                                       |     
                                                                 |     if (r3 == 0xa) {
    0x00007e0a beq.w 0x8228                                      |         goto label_77;
                                                                 |     }
    0x00007e0e ldr.w r3, [pc, 0x850]                             |     r3 = *(0x00008660);
    0x00007e12 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00007e14 add r3, pc                                        |     r3 += pc;
    0x00007e16 ldr.w r3, [r3, 0x188]                             |     r3 = *((r3 + 0x188));
    0x00007e1a cmp r2, r3                                        |     
    0x00007e1c it ne                                             |     
                                                                 |     if (r2 == r3) {
    0x00007e1e cmpne r3, 0                                       |         __asm ("cmpne r3, 0");
                                                                 |         goto label_78;
                                                                 |     }
                                                                 |     if (r2 != r3) {
                                                                 | label_78:
    0x00007e20 bne.w 0x7bee                                      |         goto label_4;
                                                                 |     }
    0x00007e24 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00007e26 ldr.w r1, [fp]                                    |     r1 = *(fp);
    0x00007e2a ldr.w r3, [r3, 0x1b4]                             |     r3 = *((r3 + 0x1b4));
    0x00007e2e subs r1, r1, r3                                   |     r1 -= r3;
                                                                 | label_19:
    0x00007e30 ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x00007e32 str r2, [sp, 0x14]                                |     var_14h = r2;
    0x00007e34 movs r2, 8                                        |     r2 = 8;
    0x00007e36 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x00007e38 ldr.w r0, [r5, 0x1b4]                             |     r0 = *((r5 + 0x1b4));
    0x00007e3c str r1, [sp, 4]                                   |     var_4h = r1;
    0x00007e3e ldr.w r1, [pc, 0x824]                             |     r1 = *(0x00008664);
    0x00007e42 strd r2, r0, [sp, 8]                              |     __asm ("strd r2, r0, [var_ch]");
    0x00007e46 ldr.w r0, [pc, 0x820]                             |     r0 = *(0x00008668);
    0x00007e4a add r1, pc                                        |     r1 += pc;
    0x00007e4c str r2, [sp]                                      |     *(sp) = r2;
    0x00007e4e add r0, pc                                        |     r0 += pc;
    0x00007e50 bl 0xc264                                         |     fcn_0000c264 ();
                                                                 | label_9:
    0x00007e54 ldr.w r0, [pc, 0x814]                             |     
    0x00007e58 mov r2, r4                                        |     r2 = r4;
    0x00007e5a ldr r1, [sp, 0xac]                                |     r1 = *(arg_ach);
    0x00007e5c add r0, pc                                        |     r0 = 0x104cc;
    0x00007e5e bl 0xc264                                         |     fcn_0000c264 ();
    0x00007e62 b 0x7bee                                          |     goto label_4;
                                                                 | label_59:
    0x00007e64 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00007e66 mvn.w r3, sb                                      |     r3 = ~sb;
    0x00007e68 lsls r1, r1, 0xc                                  |     r1 <<= 0xc;
    0x00007e6a and r3, r3, 1                                     |     r3 &= 1;
    0x00007e6e cmp r2, r6                                        |     
    0x00007e70 it eq                                             |     
                                                                 |     if (r2 != r6) {
    0x00007e72 orreq r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
    0x00007e76 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00007e78 bne.w 0x7bcc                                      |         goto label_5;
                                                                 |     }
    0x00007e7c ldrb.w r3, [r6, 0x19b]                            |     r3 = *((r6 + 0x19b));
    0x00007e80 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00007e82 bne.w 0x7bcc                                      |         goto label_5;
                                                                 |     }
    0x00007e86 ands r3, sb, 8                                    |     r3 = sb & 8;
    0x00007e8a str r3, [sp, 0x44]                                |     var_44h = r3;
                                                                 |     if (r3 == sb) {
    0x00007e8c beq 0x7e98                                        |         goto label_79;
                                                                 |     }
    0x00007e8e ldrb.w r3, [r6, 0x19c]                            |     r3 = *((r6 + 0x19c));
    0x00007e92 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00007e94 bne.w 0x7bcc                                      |         goto label_5;
                                                                 |     }
                                                                 | label_79:
    0x00007e98 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00007e9a ldr.w r3, [r2, 0x1fc]                             |     r3 = *((r2 + 0x1fc));
    0x00007e9e dmb ish                                           |     __asm ("dmb ish");
    0x00007ea2 mov r1, r3                                        |     r1 = r3;
    0x00007ea4 ldr.w r3, [r2, 0x1f8]                             |     r3 = *((r2 + 0x1f8));
    0x00007ea8 mov r2, r1                                        |     r2 = r1;
    0x00007eaa str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x00007eac str r2, [sp, 0x48]                                |     var_48h = r2;
    0x00007eae cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00007eb0 beq.w 0x808c                                      |         goto label_80;
                                                                 |     }
    0x00007eb4 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00007eb6 ldr r2, [sp, 0x4c]                                |     r2 = var_4ch;
                                                                 |     if (r3 != 0) {
    0x00007eb8 cbnz r3, 0x7ec6                                   |         goto label_81;
                                                                 |     }
    0x00007eba b 0x808c                                          |     goto label_80;
                                                                 |     do {
    0x00007ebc ldr r3, [r2, 4]!                                  |         r3 = *((r2 += 4));
    0x00007ec0 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00007ec2 beq.w 0x808c                                      |             goto label_80;
                                                                 |         }
                                                                 | label_81:
    0x00007ec6 cmp r3, r6                                        |         
    0x00007ec8 bne 0x7ebc                                        |         
                                                                 |     } while (r3 != r6);
                                                                 | label_13:
    0x00007eca mov sl, r6                                        |     sl = r6;
    0x00007ecc ldrd r6, r5, [sp, 0x64]                           |     __asm ("ldrd r6, r5, [var_64h]");
    0x00007ed0 b 0x7bd2                                          |     goto label_6;
                                                                 | label_62:
    0x00007ed2 mov r6, r3                                        |     r6 = r3;
    0x00007ed4 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00007ed6 ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x00007ed8 cmp r3, r2                                        |     
    0x00007eda it eq                                             |     
                                                                 |     if (r3 != r2) {
    0x00007edc moveq r6, r0                                      |         r6 = r0;
                                                                 |     }
                                                                 |     if (r3 != r2) {
    0x00007ede beq 0x7ee4                                        |         
    0x00007ee0 strd r6, r2, [sp, 0x64]                           |         __asm ("strd r6, r2, [var_64h]");
                                                                 |     }
    0x00007ee4 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00007ee6 mov.w r8, 1                                       |     r8 = 1;
    0x00007eea mov r5, r3                                        |     r5 = r3;
    0x00007eec mov sl, r3                                        |     sl = r3;
    0x00007eee b 0x7bd2                                          |     goto label_6;
                                                                 | label_63:
    0x00007ef0 ldr r6, [sp, 0x68]                                |     r6 = var_68h;
    0x00007ef2 b 0x7ca8                                          |     goto label_7;
                                                                 | label_74:
    0x00007ef4 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00007ef6 cmp r2, r1                                        |     
                                                                 |     if (r2 == r1) {
    0x00007ef8 beq.w 0x7dee                                      |         goto label_8;
                                                                 |     }
    0x00007efc ldrb r3, [r4]                                     |     r3 = *(r4);
    0x00007efe cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00007f00 beq.w 0x8320                                      |         goto label_82;
                                                                 |     }
    0x00007f04 mov r2, r4                                        |     r2 = r4;
    0x00007f06 movw r1, 0x1505                                   |     r1 = 0x1505;
                                                                 |     do {
    0x00007f0a add.w r1, r1, r1, lsl 5                           |         r1 += (r1 << 5);
    0x00007f0e add r1, r3                                        |         r1 += r3;
    0x00007f10 ldrb r3, [r2, 1]!                                 |         r3 = *((r2 += 1));
    0x00007f14 cmp r3, 0                                         |         
    0x00007f16 bne 0x7f0a                                        |         
                                                                 |     } while (r3 != 0);
                                                                 | label_26:
    0x00007f18 ldr r2, [sp, 0xac]                                |     r2 = *(arg_ach);
    0x00007f1a mov.w sb, 0                                       |     sb = 0;
    0x00007f1e ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00007f20 mov.w r0, -1                                      |     r0 = -1;
    0x00007f24 ldr.w r8, [pc, 0x748]                             |     r8 = *(0x00008670);
    0x00007f28 add r7, sp, 0x6c                                  |     r7 += var_6ch;
    0x00007f2a str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00007f2c ldr r2, [sp, 0xa8]                                |     r2 = *(arg_a8h);
    0x00007f2e str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00007f30 add r8, pc                                        |     r8 += pc;
    0x00007f32 str r0, [sp, 0x60]                                |     var_60h = r0;
    0x00007f34 mov r0, r4                                        |     r0 = r4;
    0x00007f36 str r2, [sp, 0xc]                                 |     var_ch = r2;
    0x00007f38 add r2, sp, 0x60                                  |     r2 += var_60h;
    0x00007f3a ldr.w r3, [r3, 0x1d8]                             |     r3 = *((r3 + 0x1d8));
    0x00007f3e strd sb, sb, [sp, 0x10]                           |     __asm ("strd sb, sb, [var_10h]");
    0x00007f42 str.w sb, [sp, 8]                                 |     __asm ("str.w sb, [var_8h]");
    0x00007f46 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00007f48 str r7, [sp]                                      |     *(sp) = r7;
    0x00007f4a ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x00007f4e ldr.w sl, [r8, 0x30]                              |     sl = *((r8 + 0x30));
    0x00007f52 str.w sb, [r8, 0x30]                              |     __asm ("str.w sb, [r8, 0x30]");
    0x00007f56 strd r1, r2, [sp, 0x24]                           |     __asm ("strd r1, r2, [var_24h]");
    0x00007f5a bl 0x7328                                         |     fcn_00007328 (r0, r1, r2, r3, r4, r5);
    0x00007f5e ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x00007f60 ldrd r1, r2, [sp, 0x24]                           |     __asm ("ldrd r1, r2, [var_24h]");
    0x00007f64 cmp r6, r3                                        |     
                                                                 |     if (r6 == r3) {
    0x00007f66 beq.w 0x8198                                      |         goto label_83;
                                                                 |     }
                                                                 | label_18:
    0x00007f6a str.w sl, [r8, 0x30]                              |     __asm ("str.w sl, [r8, 0x30]");
    0x00007f6e cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00007f70 beq.w 0x80b4                                      |         goto label_84;
                                                                 |     }
    0x00007f74 ldr r3, [sp, 0xac]                                |     r3 = *(arg_ach);
    0x00007f76 and r3, r3, 3                                     |     r3 &= 3;
    0x00007f7a str r3, [sp, 0xac]                                |     *(arg_ach) = r3;
    0x00007f7c ldrb r3, [r6, 0xc]                                |     r3 = *((r6 + 0xc));
    0x00007f7e and r3, r3, 0xf                                   |     r3 &= 0xf;
    0x00007f82 cmp r3, 6                                         |     
                                                                 |     if (r3 == 6) {
    0x00007f84 beq.w 0x83b4                                      |         goto label_85;
                                                                 |     }
    0x00007f88 cmp r3, 0xa                                       |     
                                                                 |     if (r3 == 0xa) {
    0x00007f8a beq.w 0x83d0                                      |         goto label_86;
                                                                 |     }
                                                                 | label_29:
    0x00007f8e ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00007f90 ldr.w r1, [fp]                                    |     r1 = *(fp);
    0x00007f94 ldr.w r3, [r3, 0x1b4]                             |     r3 = *((r3 + 0x1b4));
    0x00007f98 subs r1, r1, r3                                   |     r1 -= r3;
    0x00007f9a cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00007f9c beq.w 0x80c0                                      |         goto label_87;
                                                                 |     }
    0x00007fa0 ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x00007fa2 str r2, [sp, 0x14]                                |     var_14h = r2;
    0x00007fa4 movs r2, 8                                        |     r2 = 8;
    0x00007fa6 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x00007fa8 ldr.w r0, [r5, 0x1b4]                             |     r0 = *((r5 + 0x1b4));
    0x00007fac str r1, [sp, 4]                                   |     var_4h = r1;
    0x00007fae ldr.w r1, [pc, 0x6c4]                             |     r1 = *(0x00008674);
    0x00007fb2 strd r2, r0, [sp, 8]                              |     __asm ("strd r2, r0, [var_ch]");
    0x00007fb6 ldr.w r0, [pc, 0x6c0]                             |     r0 = *(0x00008678);
    0x00007fb8 lsls r0, r0, 0x1b                                 |     r0 <<= 0x1b;
    0x00007fba add r1, pc                                        |     r1 += pc;
    0x00007fbc str r2, [sp]                                      |     *(sp) = r2;
    0x00007fbe add r0, pc                                        |     r0 += pc;
    0x00007fc0 bl 0xc264                                         |     fcn_0000c264 ();
                                                                 | label_14:
    0x00007fc4 ldr r2, [sp, 0x6c]                                |     r2 = var_6ch;
    0x00007fc6 mov r3, r2                                        |     r3 = r2;
                                                                 |     if (r2 != 0) {
    0x00007fc8 cbz r2, 0x7fd2                                    |         
    0x00007fca ldr r3, [r2, 4]                                   |         r3 = *((r2 + 4));
    0x00007fcc ldr r2, [sp, 0x70]                                |         r2 = var_70h;
    0x00007fce ldr.w r2, [r2, 0x1b4]                             |         r2 = *((r2 + 0x1b4));
    0x00007fd0 movs r1, 0xb4                                     |         r1 = 0xb4;
                                                                 |     }
    0x00007fd2 ldr.w r0, [pc, 0x6a8]                             |     
    0x00007fd6 str r3, [sp]                                      |     *(sp) = r3;
    0x00007fd8 movs r3, 8                                        |     r3 = 8;
    0x00007fda mov r1, r3                                        |     r1 = r3;
    0x00007fdc add r0, pc                                        |     r0 = 0x1065e;
    0x00007fde bl 0xc264                                         |     fcn_0000c264 ();
    0x00007fe2 b 0x7e54                                          |     goto label_9;
                                                                 | label_72:
    0x00007fe4 ldr.w r7, [pc, 0x698]                             |     
    0x00007fe8 add r7, pc                                        |     r7 = 0x1066c;
    0x00007fea b 0x7d98                                          |     goto label_10;
                                                                 | label_66:
    0x00007fec ldr r3, [sp, 0xa8]                                |     r3 = *(arg_a8h);
    0x00007fee cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00007ff0 beq.w 0x820a                                      |         goto label_88;
                                                                 |     }
    0x00007ff4 ldr r3, [sp, 0xa8]                                |     r3 = *(arg_a8h);
    0x00007ff6 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00007ff8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00007ffa beq.w 0x8214                                      |         goto label_89;
                                                                 |     }
    0x00007ffe ldr.w r0, [pc, 0x684]                             |     r0 = *(0x00008684);
    0x00008002 add r0, pc                                        |     r0 += pc;
                                                                 | label_21:
    0x00008004 ldr.w r2, [pc, 0x680]                             |     r2 = *(0x00008688);
    0x00008008 add r2, pc                                        |     r2 += pc;
    0x0000800a ldr r2, [r2]                                      |     r2 = *(r2);
    0x0000800c ldr r1, [r2]                                      |     r1 = *(r2);
    0x0000800e cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00008010 bne.w 0x7cf8                                      |         goto label_11;
                                                                 |     }
    0x00008014 ldr.w r1, [pc, 0x674]                             |     
    0x00008018 add r1, pc                                        |     r1 = 0x106a8;
    0x0000801a b 0x7cf8                                          |     goto label_11;
                                                                 | label_73:
    0x0000801c ldr.w r0, [pc, 0x670]                             |     r0 = *(0x8690);
    0x00008020 movs r0, r0                                       |     
    0x00008022 movs r0, r0                                       |     
    0x00008024 invalid                                           |     
    0x00008028 strh r0, [r0]                                     |     *(r0) = r0;
    0x0000802a movs r0, r0                                       |     
    0x0000802c movs r0, r0                                       |     
    0x0000802e movs r0, r0                                       |     
                                                                 | label_69:
    0x00008030 movs r3, r0                                       |     r3 = r0;
    0x00008032 movs r0, r0                                       |     
    0x00008034 movs r0, r0                                       |     
                                                                 | label_75:
    0x00008036 movs r0, r0                                       |     
    0x00008038 movs r0, r0                                       |     
    0x0000803a movs r0, r0                                       |     
    0x0000803c cmp r3, 0                                         |     
    0x0000803e ldr r2, [sp, 0xac]                                |     r2 = *(arg_ach);
    0x00008040 ite eq                                            |     
                                                                 |     if (r3 != 0) {
    0x00008042 moveq r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x00008044 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00008046 cmp r2, 3                                         |     
    0x00008048 it gt                                             |     
                                                                 |     if (r2 <= 3) {
    0x0000804a orrgt r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
    0x0000804c lsls r1, r0, 0xc                                  |     r1 = r0 << 0xc;
    0x0000804e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00008050 beq.w 0x7bee                                      |         goto label_4;
                                                                 |     }
    0x00008054 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00008056 ldr.w r1, [fp]                                    |     r1 = *(fp);
    0x0000805a ldr.w r3, [r3, 0x1b4]                             |     r3 = *((r3 + 0x1b4));
    0x0000805c adds r1, 0xb4                                     |     r1 += 0xb4;
    0x0000805e subs r1, r1, r3                                   |     r1 -= r3;
                                                                 | label_20:
    0x00008060 str r1, [sp, 4]                                   |     var_4h = r1;
    0x00008062 movs r1, 0                                        |     r1 = 0;
    0x00008064 str r1, [sp, 0x14]                                |     var_14h = r1;
    0x00008066 movs r2, 8                                        |     r2 = 8;
    0x00008068 str r1, [sp, 0xc]                                 |     var_ch = r1;
    0x0000806a ldr.w r0, [pc, 0x62c]                             |     
    0x0000806e ldr.w r1, [pc, 0x62c]                             |     
    0x00008072 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x00008074 add r0, pc                                        |     r0 = 0x10712;
    0x00008076 str r2, [sp, 8]                                   |     var_8h = r2;
    0x00008078 add r1, pc                                        |     r1 = 0x1071a;
    0x0000807a str r2, [sp]                                      |     *(sp) = r2;
    0x0000807c bl 0xc264                                         |     fcn_0000c264 ();
    0x00008080 b 0x7e54                                          |     goto label_9;
                                                                 | label_67:
    0x00008082 ldr.w r0, [pc, 0x61c]                             |     r0 = *(0x000086a0);
    0x00008086 add r0, pc                                        |     r0 += pc;
    0x00008088 mov r3, r0                                        |     r3 = r0;
    0x0000808a b 0x7cf2                                          |     goto label_12;
                                                                 | label_80:
    0x0000808c ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x0000808e cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00008090 beq.w 0x8222                                      |         goto label_90;
                                                                 |     }
    0x00008094 ldr.w sl, [r2]                                    |     sl = *(r2);
    0x00008098 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x0000809c beq 0x80f4                                        |         goto label_22;
                                                                 |     }
    0x0000809e movs r3, 0                                        |     r3 = 0;
    0x000080a0 mov r7, sl                                        |     r7 = sl;
    0x000080a2 b 0x80aa                                          |     
                                                                 |     while (r1 != r6) {
    0x000080a4 adds r3, 1                                        |         r3++;
    0x000080a6 cmp r7, r3                                        |         
                                                                 |         if (r7 == r3) {
    0x000080a8 beq 0x80f2                                        |             goto label_91;
                                                                 |         }
    0x000080aa ldr r1, [r2, 4]!                                  |         r1 = *((r2 += 4));
    0x000080ae cmp r1, r6                                        |         
    0x000080b0 bne 0x80a4                                        |         
                                                                 |     }
    0x000080b2 b 0x7eca                                          |     goto label_13;
                                                                 | label_84:
    0x000080b4 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000080b6 ldr.w r1, [fp]                                    |     r1 = *(fp);
    0x000080ba ldr.w r3, [r3, 0x1b4]                             |     r3 = *((r3 + 0x1b4));
    0x000080be subs r1, r1, r3                                   |     r1 -= r3;
                                                                 | label_87:
    0x000080c0 str r1, [sp, 4]                                   |     var_4h = r1;
    0x000080c2 movs r1, 0                                        |     r1 = 0;
    0x000080c4 str r1, [sp, 0x14]                                |     var_14h = r1;
    0x000080c6 movs r2, 8                                        |     r2 = 8;
    0x000080c8 str r1, [sp, 0xc]                                 |     var_ch = r1;
    0x000080ca ldr.w r0, [pc, 0x5d8]                             |     
    0x000080ce ldr.w r1, [pc, 0x5d8]                             |     
    0x000080d2 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x000080d4 add r0, pc                                        |     r0 = 0x1077e;
    0x000080d6 str r2, [sp, 8]                                   |     var_8h = r2;
    0x000080d8 add r1, pc                                        |     r1 = 0x10786;
    0x000080da str r2, [sp]                                      |     *(sp) = r2;
    0x000080dc bl 0xc264                                         |     fcn_0000c264 ();
    0x000080e0 b 0x7fc4                                          |     goto label_14;
                                                                 | label_70:
    0x000080e2 ldr.w r1, [pc, 0x5c8]                             |     r1 = *(0x000086ac);
    0x000080e6 add r1, pc                                        |     r1 += pc;
    0x000080e8 b 0x7d6e                                          |     goto label_15;
                                                                 | label_71:
    0x000080ea ldr.w r3, [pc, 0x5c4]                             |     r3 = *(0x000086b0);
    0x000080ee add r3, pc                                        |     r3 += pc;
    0x000080f0 b 0x7d88                                          |     goto label_16;
                                                                 | label_91:
    0x000080f2 mov sl, r7                                        |     sl = r7;
                                                                 | label_22:
    0x000080f4 ldr.w r3, [r6, 0x258]                             |     r3 = *((r6 + 0x258));
    0x000080f8 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x000080fa ldr.w r3, [r6, 0x25c]                             |     r3 = *((r6 + 0x25c));
    0x000080fe str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00008100 ands r3, sb, 4                                    |     r3 = sb & 4;
    0x00008104 str r3, [sp, 0x2c]                                |     var_2ch = r3;
                                                                 |     if (r3 != sb) {
    0x00008106 bne.w 0x8326                                      |         goto label_92;
                                                                 |     }
    0x0000810a ldr.w r0, [pc, 0x5a8]                             |     r0 = *(0x000086b4);
    0x0000810e ldr.w r3, [pc, 0x5a8]                             |     r3 = *(0x000086b8);
    0x00008112 add r0, pc                                        |     r0 += pc;
    0x00008114 add r3, pc                                        |     r3 += pc;
    0x00008116 addw r0, r0, 0x544                                |     __asm ("addw r0, r0, 0x544");
    0x0000811a ldr r3, [r3]                                      |     r3 = *(r3);
    0x0000811c blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000811e mov r2, r6                                        |     r2 = r6;
                                                                 | label_35:
    0x00008120 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00008122 ldr r1, [sp, 0x34]                                |     r1 = var_34h;
    0x00008124 ldr.w ip, [r3, 0x18]                              |     ip = *((r3 + 0x18));
    0x00008128 movs r3, 0x54                                     |     r3 = 0x54;
    0x0000812a mul r3, ip, r3                                    |     r3 = ip * r3;
    0x0000812e ldr r3, [r1, r3]                                  |     r3 = *((r1 + r3));
    0x00008130 cmp r3, 0                                         |     
    0x00008132 it ne                                             |     
                                                                 |     if (r3 != 0) {
    0x00008134 cmpne r3, r2                                      |         __asm ("cmpne r3, r2");
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x00008136 beq 0x814a                                        |         goto label_93;
                                                                 |     }
    0x00008138 mov r7, sl                                        |     r7 = sl;
    0x0000813a mov r0, ip                                        |     r0 = ip;
                                                                 |     do {
    0x0000813c ldr r3, [r3, 0xc]                                 |         r3 = *((r3 + 0xc));
    0x0000813e cmp r3, 0                                         |         
    0x00008140 it ne                                             |         
                                                                 |         if (r3 != 0) {
    0x00008142 cmpne r3, r2                                      |             __asm ("cmpne r3, r2");
                                                                 |         }
    0x00008144 bne 0x813c                                        |         
                                                                 |     } while (r3 != 0);
    0x00008146 mov sl, r7                                        |     sl = r7;
    0x00008148 mov ip, r0                                        |     
                                                                 | label_93:
    0x0000814a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000814c beq.w 0x8306                                      |         goto label_94;
                                                                 |     }
    0x00008150 ldrd r1, r3, [r2, 0x258]                          |     __asm ("ldrd r1, r3, [r2, 0x258]");
    0x00008154 ldrd r0, r7, [sp, 0x50]                           |     __asm ("ldrd r0, r7, [var_50h]");
    0x00008158 cmp r7, r3                                        |     
    0x0000815a it eq                                             |     
                                                                 |     if (r7 == r3) {
    0x0000815c cmpeq r0, r1                                      |         __asm ("cmpeq r0, r1");
                                                                 |     }
                                                                 |     if (r7 == r3) {
    0x0000815e beq.w 0x8272                                      |         goto label_95;
                                                                 |     }
    0x00008162 ldr.w r3, [pc, 0x558]                             |     r3 = *(0x000086bc);
    0x00008166 ldr r0, [sp, 0x3c]                                |     r0 = var_3ch;
    0x00008168 add r3, pc                                        |     r3 += pc;
    0x0000816a ldr r3, [r3]                                      |     r3 = *(r3);
    0x0000816c blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000816e ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00008170 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00008172 beq.w 0x7b04                                      |         goto label_17;
                                                                 |     }
                                                                 | label_25:
    0x00008176 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00008178 movs r3, 1                                        |     r3 = 1;
    0x0000817a str r3, [r2, 4]                                   |     *((r2 + 4)) = r3;
    0x0000817c dmb ish                                           |     __asm ("dmb ish");
                                                                 | label_27:
    0x00008180 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00008182 ldr.w r3, [r3, 0x1d4]                             |     r3 = *((r3 + 0x1d4));
    0x00008186 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00008188 b 0x7b04                                          |     goto label_17;
                                                                 | label_68:
    0x0000818a ldr.w r0, [pc, 0x534]                             |     r0 = *(0x000086c0);
    0x0000818e ldr.w r3, [pc, 0x534]                             |     
    0x00008192 add r0, pc                                        |     r0 += pc;
    0x00008194 add r3, pc                                        |     r3 = 0x1085e;
    0x00008196 b 0x7cf2                                          |     goto label_12;
                                                                 | label_83:
    0x00008198 ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x0000819a cmp r3, r5                                        |     
                                                                 |     if (r3 != r5) {
    0x0000819c bne.w 0x7f6a                                      |         goto label_18;
                                                                 |     }
    0x000081a0 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000081a2 ldrb.w r3, [r3, 0x199]                            |     r3 = *((r3 + 0x199));
    0x000081a4 adds r1, 0x99                                     |     r1 += 0x99;
    0x000081a6 ubfx r3, r3, 7, 1                                 |     r3 = (r3 >> 7) & ((1 << 1) - 1);
    0x000081aa cmp r6, 0                                         |     
    0x000081ac ite eq                                            |     
                                                                 |     if (r6 != 0) {
    0x000081ae moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r6 == 0) {
    0x000081b0 andne r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x000081b4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000081b6 bne.w 0x84b4                                      |         goto label_96;
                                                                 |     }
    0x000081ba str.w sl, [r8, 0x30]                              |     __asm ("str.w sl, [r8, 0x30]");
                                                                 |     if (r6 != 0) {
    0x000081be cbz r6, 0x81da                                    |         
    0x000081c0 ldr r2, [sp, 0xac]                                |         r2 = *(arg_ach);
    0x000081c2 and r2, r2, 3                                     |         r2 &= 3;
    0x000081c6 str r2, [sp, 0xac]                                |         *(arg_ach) = r2;
    0x000081c8 ldrb r2, [r6, 0xc]                                |         r2 = *((r6 + 0xc));
    0x000081ca and r2, r2, 0xf                                   |         r2 &= 0xf;
    0x000081ce cmp r2, 6                                         |         
                                                                 |         if (r2 == 6) {
    0x000081d0 beq.w 0x83e2                                      |             goto label_97;
                                                                 |         }
    0x000081d4 cmp r2, 0xa                                       |         
                                                                 |         if (r2 == 0xa) {
    0x000081d6 beq.w 0x83d2                                      |             goto label_46;
                                                                 |         }
                                                                 |     }
                                                                 | label_30:
    0x000081da ldr.w r3, [pc, 0x4ec]                             |     r3 = *(0x000086c8);
    0x000081de ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x000081e0 add r3, pc                                        |     r3 += pc;
    0x000081e2 ldr.w r3, [r3, 0x188]                             |     r3 = *((r3 + 0x188));
    0x000081e6 cmp r2, r3                                        |     
    0x000081e8 it ne                                             |     
                                                                 |     if (r2 != r3) {
    0x000081ea cmpne r3, 0                                       |         __asm ("cmpne r3, 0");
                                                                 |     }
                                                                 |     if (r2 == r3) {
    0x000081ec beq 0x81f6                                        |         goto label_23;
                                                                 |     }
    0x000081ee ldr r3, [sp, 0xac]                                |     r3 = *(arg_ach);
    0x000081f0 cmp r3, 3                                         |     
                                                                 |     if (r3 <= 3) {
    0x000081f2 ble.w 0x7bee                                      |         goto label_4;
                                                                 |     }
                                                                 | label_23:
    0x000081f6 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000081f8 ldr.w r1, [fp]                                    |     r1 = *(fp);
    0x000081fc ldr.w r3, [r3, 0x1b4]                             |     r3 = *((r3 + 0x1b4));
    0x00008200 subs r1, r1, r3                                   |     r1 -= r3;
    0x00008202 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00008204 bne.w 0x7e30                                      |         goto label_19;
                                                                 |     }
    0x00008208 b 0x8060                                          |     goto label_20;
                                                                 | label_88:
    0x0000820a ldr.w r0, [pc, 0x4c0]                             |     r0 = *(0x000086cc);
    0x0000820e add r0, pc                                        |     r0 += pc;
    0x00008210 mov r3, r0                                        |     r3 = r0;
    0x00008212 b 0x8004                                          |     goto label_21;
                                                                 | label_89:
    0x00008214 ldr.w r0, [pc, 0x4b8]                             |     
    0x00008218 ldr.w r3, [pc, 0x4b8]                             |     r3 = *(0x000086d4);
    0x0000821c add r0, pc                                        |     r0 = 0x108f0;
    0x0000821e add r3, pc                                        |     r3 += pc;
    0x00008220 b 0x8004                                          |     goto label_21;
                                                                 | label_90:
    0x00008222 ldr.w sl, [sp, 0x48]                              |     sl = var_48h;
    0x00008226 b 0x80f4                                          |     goto label_22;
                                                                 | label_77:
    0x00008228 ldr r3, [sp, 0xac]                                |     r3 = *(arg_ach);
    0x0000822a orr r3, r3, 8                                     |     r3 |= 8;
    0x0000822e str r3, [sp, 0xac]                                |     *(arg_ach) = r3;
    0x00008230 b 0x81f6                                          |     goto label_23;
                                                                 | label_76:
    0x00008232 ldr.w r1, [pc, 0x4a4]                             |     
    0x00008236 movs r7, 0                                        |     r7 = 0;
    0x00008238 add r1, pc                                        |     r1 = 0x10916;
                                                                 | label_28:
    0x0000823a ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x0000823c ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0000823e ldr.w r3, [r3, 0x1b4]                             |     r3 = *((r3 + 0x1b4));
    0x00008242 str r2, [sp, 0x14]                                |     var_14h = r2;
    0x00008244 movs r2, 8                                        |     r2 = 8;
    0x00008246 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x00008248 ldr.w r0, [fp]                                    |     r0 = *(fp);
    0x0000824c sub.w ip, r0, r3                                  |     
    0x00008250 ldr.w r0, [r5, 0x1b4]                             |     r0 = *((r5 + 0x1b4));
    0x00008254 strd ip, r2, [sp, 4]                              |     __asm ("strd ip, r2, [var_4h]");
    0x00008258 str r2, [sp]                                      |     *(sp) = r2;
    0x0000825a str r0, [sp, 0xc]                                 |     var_ch = r0;
    0x0000825c ldr.w r0, [pc, 0x47c]                             |     
    0x00008260 add r0, pc                                        |     r0 = 0x10940;
    0x00008262 bl 0xc264                                         |     fcn_0000c264 ();
    0x00008266 movs r3, 4                                        |     r3 = 4;
    0x00008268 str r3, [sp, 0xac]                                |     *(arg_ach) = r3;
    0x0000826a cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0000826c beq.w 0x7e54                                      |         goto label_9;
                                                                 |     }
    0x00008270 b 0x7fc4                                          |     goto label_14;
                                                                 | label_95:
    0x00008272 ldrb.w r3, [r2, 0x19b]                            |     r3 = *((r2 + 0x19b));
    0x00008276 mov r0, ip                                        |     r0 = ip;
    0x00008278 str.w sl, [sp, 0x24]                              |     __asm ("str.w sl, [var_24h]");
    0x0000827c mov sl, r6                                        |     sl = r6;
    0x0000827e mov r6, r2                                        |     r6 = r2;
                                                                 |     if (r3 != 0) {
    0x00008280 cbnz r3, 0x82d6                                   |         goto label_32;
                                                                 |     }
    0x00008282 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
                                                                 |     if (r3 != 0) {
    0x00008284 cbz r3, 0x828c                                    |         
    0x00008286 ldrb.w r3, [r2, 0x19c]                            |         r3 = *((r2 + 0x19c));
                                                                 |         if (r3 != 0) {
    0x0000828a cbnz r3, 0x82d6                                   |             goto label_32;
                                                                 |         }
                                                                 |     }
    0x0000828c ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0000828e ldrb.w r3, [r3, 0x198]                            |     r3 = *((r3 + 0x198));
    0x00008290 adds r1, 0x98                                     |     r1 += 0x98;
    0x00008292 and r3, r3, 3                                     |     r3 &= 3;
    0x00008296 cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x00008298 beq.w 0x840e                                      |         goto label_98;
                                                                 |     }
    0x0000829c ldr.w r3, [pc, 0x440]                             |     r3 = *(0x000086e0);
    0x000082a0 add r3, pc                                        |     r3 += pc;
    0x000082a2 ldr r3, [r3]                                      |     r3 = *(r3);
    0x000082a4 lsls r5, r3, 0x1d                                 |     r5 = r3 << 0x1d;
                                                                 |     if (r5 < r3) {
    0x000082a6 bmi.w 0x83ea                                      |         goto label_99;
                                                                 |     }
                                                                 | label_31:
    0x000082aa ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x000082ac cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000082ae bne.w 0x8494                                      |         goto label_100;
                                                                 |     }
    0x000082b2 ldr.w r0, [pc, 0x430]                             |     r0 = *(0x000086e4);
    0x000082b6 ldr.w r3, [pc, 0x430]                             |     r3 = *(0x000086e8);
    0x000082ba add r0, pc                                        |     r0 += pc;
    0x000082bc addw r0, r0, 0x544                                |     __asm ("addw r0, r0, 0x544");
    0x000082c0 add r3, pc                                        |     r3 += pc;
                                                                 | label_41:
    0x000082c2 movs r2, 1                                        |     r2 = 1;
    0x000082c4 ldr r3, [r3]                                      |     r3 = *(r3);
    0x000082c6 strb.w r2, [r6, 0x19b]                            |     *((r6 + 0x19b)) = r2;
    0x000082ca blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x000082cc ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
                                                                 |     if (r3 != 0) {
    0x000082ce cbnz r3, 0x82f0                                   |         goto label_33;
                                                                 |     }
                                                                 |     do {
                                                                 | label_24:
    0x000082d0 ldrd r6, r5, [sp, 0x64]                           |         __asm ("ldrd r6, r5, [var_64h]");
    0x000082d4 b 0x7bd2                                          |         goto label_6;
                                                                 | label_32:
    0x000082d6 ldr.w r0, [pc, 0x414]                             |         r0 = *(0x000086ec);
    0x000082da ldr.w r3, [pc, 0x414]                             |         r3 = *(0x000086f0);
    0x000082de add r0, pc                                        |         r0 += pc;
    0x000082e0 add r3, pc                                        |         r3 += pc;
    0x000082e2 addw r0, r0, 0x544                                |         __asm ("addw r0, r0, 0x544");
    0x000082e6 ldr r3, [r3]                                      |         r3 = *(r3);
    0x000082e8 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x000082ea ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x000082ec cmp r3, 0                                         |         
    0x000082ee beq 0x82d0                                        |         
                                                                 |     } while (r3 == 0);
                                                                 | label_33:
    0x000082f0 mrc p15, 0, r3, c13, c0, 3                        |     __asm ("mrc p15, 0, r3, c13, c0, 3");
    0x000082f4 str r3, [sp, 0x40]                                |     var_40h = r3;
                                                                 | label_50:
    0x000082f6 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x000082f8 movs r2, 1                                        |     r2 = 1;
    0x000082fa sub.w r3, r3, 0x540                               |     r3 -= 0x540;
    0x000082fe str r2, [r3, 4]                                   |     *((r3 + 4)) = r2;
    0x00008300 dmb ish                                           |     __asm ("dmb ish");
    0x00008304 b 0x82d0                                          |     goto label_24;
                                                                 | label_94:
    0x00008306 ldr r0, [pc, 0x3ec]                               |     
    0x00008308 ldr r3, [pc, 0x3ec]                               |     
    0x0000830a add r0, pc                                        |     r0 = 0x10a04;
    0x0000830c add r3, pc                                        |     
    0x0000830e addw r0, r0, 0x544                                |     __asm ("addw r0, r0, 0x544");
    0x00008312 ldr r3, [r3]                                      |     r3 = *(0x10a08);
    0x00008314 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00008316 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00008318 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000831a beq.w 0x7b04                                      |         goto label_17;
                                                                 |     }
    0x0000831e b 0x8176                                          |     goto label_25;
                                                                 | label_82:
    0x00008320 movw r1, 0x1505                                   |     r1 = 0x1505;
    0x00008324 b 0x7f18                                          |     goto label_26;
                                                                 | label_92:
    0x00008326 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00008328 str r3, [sp, 0x40]                                |     var_40h = r3;
    0x0000832a subw r0, r3, 0x53c                                |     __asm ("subw r0, r3, 0x53c");
    0x0000832e movs r3, 0                                        |     r3 = 0;
    0x00008330 dmb ish                                           |     __asm ("dmb ish");
                                                                 |     do {
    0x00008334 ldrex r2, [r0]                                    |         __asm ("ldrex r2, [r0]");
    0x00008338 strex r1, r3, [r0]                                |         __asm ("strex r1, r3, [r0]");
    0x0000833c cmp r1, 0                                         |         
    0x0000833e bne 0x8334                                        |         
                                                                 |     } while (r1 != 0);
    0x00008340 cmp r2, 2                                         |     
                                                                 |     if (r2 == 2) {
    0x00008342 beq.w 0x8528                                      |         goto label_101;
                                                                 |     }
                                                                 | label_37:
    0x00008346 ldr r0, [pc, 0x3b4]                               |     
    0x00008348 ldr r3, [pc, 0x3b4]                               |     
    0x0000834a add r0, pc                                        |     r0 = 0x10a4c;
    0x0000834c add r3, pc                                        |     
    0x0000834e addw r0, r0, 0x544                                |     __asm ("addw r0, r0, 0x544");
    0x00008352 ldr r3, [r3]                                      |     
    0x00008354 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00008356 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00008358 mov r2, r6                                        |     r2 = r6;
    0x0000835a ldr.w r3, [r3, 0x1f8]                             |     r3 = *(0x10c48);
    0x0000835e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00008360 beq.w 0x84f6                                      |         goto label_102;
                                                                 |     }
    0x00008364 ldr r1, [sp, 0x4c]                                |     r1 = var_4ch;
    0x00008366 cmp r1, r3                                        |     
                                                                 |     if (r1 == r3) {
    0x00008368 beq.w 0x84f6                                      |         goto label_102;
                                                                 |     }
    0x0000836c ldr r1, [r3]                                      |     r1 = *(r3);
    0x0000836e cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00008370 beq.w 0x84f6                                      |         goto label_102;
                                                                 |     }
    0x00008374 mov r7, sl                                        |     r7 = sl;
    0x00008376 b 0x8382                                          |     
                                                                 |     while (r1 != r2) {
    0x00008378 ldr r1, [r3, 4]!                                  |         r1 = *((r3 += 4));
    0x0000837c cmp r1, 0                                         |         
                                                                 |         if (r1 == 0) {
    0x0000837e beq.w 0x84f4                                      |             goto label_103;
                                                                 |         }
    0x00008382 cmp r1, r2                                        |         
    0x00008384 bne 0x8378                                        |         
                                                                 |     }
                                                                 | label_36:
    0x00008386 ldrd r1, r2, [r2, 0x258]                          |     __asm ("ldrd r1, r2, [r2, 0x258]");
    0x0000838a ldrd r0, r7, [sp, 0x50]                           |     __asm ("ldrd r0, r7, [var_50h]");
    0x0000838e ldr r3, [pc, 0x374]                               |     
    0x00008390 cmp r7, r2                                        |     
    0x00008392 it eq                                             |     
                                                                 |     if (r7 == r2) {
    0x00008394 cmpeq r0, r1                                      |         __asm ("cmpeq r0, r1");
                                                                 |     }
    0x00008396 add r3, pc                                        |     
    0x00008398 ldr r3, [r3]                                      |     r3 = *(0x10aa0);
                                                                 |     if (r7 == r2) {
    0x0000839a beq.w 0x880e                                      |         goto label_104;
                                                                 |     }
    0x0000839e ldr r0, [pc, 0x368]                               |     
    0x000083a0 add r0, pc                                        |     r0 = 0x10aae;
    0x000083a2 addw r0, r0, 0x544                                |     __asm ("addw r0, r0, 0x544");
    0x000083a6 blx r3                                            |     uint32_t (*r3)(uint32_t) (r0);
    0x000083a8 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x000083aa movs r3, 1                                        |     r3 = 1;
    0x000083ac str r3, [r2, 4]                                   |     *((r2 + 4)) = r3;
    0x000083ae dmb ish                                           |     __asm ("dmb ish");
    0x000083b2 b 0x8180                                          |     goto label_27;
                                                                 | label_85:
    0x000083b4 ldr r1, [pc, 0x354]                               |     
    0x000083b6 movs r7, 1                                        |     r7 = 1;
    0x000083b8 add r1, pc                                        |     r1 = 0x10ac8;
    0x000083ba b 0x823a                                          |     goto label_28;
                                                                 | label_53:
    0x000083bc ldr r3, [pc, 0x350]                               |     
    0x000083be movw r2, 0x34d                                    |     r2 = 0x34d;
    0x000083c2 ldr r1, [pc, 0x350]                               |     
    0x000083c4 ldr r0, [pc, 0x350]                               |     
    0x000083c6 add r3, pc                                        |     r3 = 0x10ada;
    0x000083c8 add r1, pc                                        |     r1 = 0x10ae2;
    0x000083ca add r0, pc                                        |     r0 = 0x10ae6;
    0x000083cc bl 0x11f30                                        |     fcn_00011f30 (r0);
                                                                 | label_86:
    0x000083d0 movs r3, 1                                        |     r3 = 1;
                                                                 | label_46:
    0x000083d2 ldr r2, [sp, 0xac]                                |     r2 = *(arg_ach);
    0x000083d4 orr r2, r2, 8                                     |     r2 |= 8;
    0x000083d8 str r2, [sp, 0xac]                                |     *(arg_ach) = r2;
    0x000083da cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000083dc bne.w 0x7f8e                                      |         goto label_29;
                                                                 |     }
    0x000083e0 b 0x81da                                          |     goto label_30;
                                                                 | label_97:
    0x000083e2 ldr r1, [pc, 0x338]                               |     
    0x000083e4 mov r7, r3                                        |     r7 = r3;
    0x000083e6 add r1, pc                                        |     r1 = 0x10b08;
    0x000083e8 b 0x823a                                          |     goto label_28;
                                                                 | label_99:
    0x000083ea ldr r3, [sp, 0x44]                                |     r3 = var_44h;
                                                                 |     if (r3 != 0) {
    0x000083ec cbz r3, 0x83f6                                    |         
    0x000083ee ldrb.w r3, [r6, 0x19c]                            |         r3 = *((r6 + 0x19c));
    0x000083f2 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x000083f4 bne 0x8494                                        |             goto label_100;
                                                                 |         }
                                                                 |     }
    0x000083f6 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000083f8 ldr r1, [r6, 4]                                   |     r1 = *((r6 + 4));
    0x000083fa ldr r2, [r6, 0x18]                                |     r2 = *((r6 + 0x18));
    0x000083fc ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x000083fe ldrb r5, [r3]                                     |     r5 = *(r3);
    0x00008400 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00008402 bne 0x84e2                                        |         goto label_105;
                                                                 |     }
    0x00008404 ldr r0, [pc, 0x318]                               |     
    0x00008406 add r0, pc                                        |     r0 = 0x10b2a;
    0x00008408 bl 0xc1f0                                         |     fcn_0000c1f0 ();
    0x0000840c b 0x82aa                                          |     goto label_31;
                                                                 | label_98:
    0x0000840e ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00008410 ldr.w r5, [r3, 0x200]                             |     r5 = *((r3 + 0x200));
    0x00008414 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00008416 cmp r5, r3                                        |     
                                                                 |     if (r5 < r3) {
    0x00008418 bls.w 0x8536                                      |         goto label_106;
                                                                 |     }
    0x0000841c ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x0000841e ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00008420 ldr.w r3, [r1, 0x1fc]                             |     r3 = *((r1 + 0x1fc));
    0x00008424 add.w r3, r3, r2, lsl 2                           |     r3 += (r2 << 2);
    0x00008428 adds r2, 1                                        |     r2++;
    0x0000842a str r6, [r3, 4]                                   |     *((r3 + 4)) = r6;
    0x0000842c dmb ish                                           |     __asm ("dmb ish");
    0x00008430 ldr.w r3, [r1, 0x1fc]                             |     r3 = *((r1 + 0x1fc));
    0x00008434 str r2, [r3]                                      |     *(r3) = r2;
                                                                 | label_38:
    0x00008436 ldr r3, [pc, 0x2ec]                               |     
    0x00008438 add r3, pc                                        |     
    0x0000843a ldr r3, [r3]                                      |     r3 = *(0x10b62);
    0x0000843c lsls r1, r3, 0x19                                 |     r1 = r3 << 0x19;
                                                                 |     if (r1 >= r3) {
    0x0000843e bpl.w 0x82d6                                      |         goto label_32;
                                                                 |     }
    0x00008442 ldr r1, [r6, 4]                                   |     r1 = *((r6 + 4));
    0x00008444 ldrb r3, [r1]                                     |     r3 = *(r1);
                                                                 |     if (r3 == 0) {
    0x00008446 cbnz r3, 0x8454                                   |         
    0x00008448 ldr r3, [pc, 0x2dc]                               |         
    0x0000844a add r3, pc                                        |         
    0x0000844c ldr r3, [r3]                                      |         r3 = *(0x10b76);
    0x0000844e ldr r1, [r3]                                      |         r1 = *(0x10b76);
    0x00008450 cmp r1, 0                                         |         
                                                                 |         if (r1 == 0) {
    0x00008452 beq 0x84ee                                        |             goto label_107;
                                                                 |         }
                                                                 |     }
                                                                 | label_34:
    0x00008454 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00008456 ldr r2, [r6, 0x18]                                |     r2 = *((r6 + 0x18));
    0x00008458 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0000845a ldrb r0, [r3]                                     |     r0 = *(r3);
                                                                 |     if (r0 == 0) {
    0x0000845c cbnz r0, 0x846c                                   |         
    0x0000845e ldr r3, [pc, 0x2cc]                               |         
    0x00008460 add r3, pc                                        |         
    0x00008462 ldr r3, [r3]                                      |         
    0x00008464 ldr r3, [r3]                                      |         r3 = *(0x10b92);
    0x00008466 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00008468 beq.w 0x857c                                      |             goto label_108;
                                                                 |         }
                                                                 |     }
                                                                 | label_39:
    0x0000846c ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x0000846e ldr r0, [r0, 0x18]                                |     r0 = *((r0 + 0x18));
    0x00008470 str r0, [sp]                                      |     *(sp) = r0;
    0x00008472 ldr r0, [pc, 0x2bc]                               |     
    0x00008474 add r0, pc                                        |     r0 = 0x10baa;
    0x00008476 bl 0xc1f0                                         |     fcn_0000c1f0 ();
    0x0000847a ldr r0, [pc, 0x2b8]                               |     
    0x0000847c ldr r3, [pc, 0x2b8]                               |     
    0x0000847e add r0, pc                                        |     r0 = 0x10bb8;
    0x00008480 add r3, pc                                        |     
    0x00008482 addw r0, r0, 0x544                                |     __asm ("addw r0, r0, 0x544");
    0x00008486 ldr r3, [r3]                                      |     r3 = *(0x10bbc);
    0x00008488 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000848a ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0000848c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000848e beq.w 0x82d0                                      |         goto label_24;
                                                                 |     }
    0x00008492 b 0x82f0                                          |     goto label_33;
                                                                 | label_100:
    0x00008494 ldr r0, [pc, 0x2a4]                               |     
    0x00008496 ldr r3, [pc, 0x2a8]                               |     
    0x00008498 add r0, pc                                        |     r0 = 0x10bd8;
    0x0000849a addw r0, r0, 0x544                                |     __asm ("addw r0, r0, 0x544");
    0x0000849e add r3, pc                                        |     r3 = 0x10be4;
                                                                 | label_43:
    0x000084a0 movs r2, 1                                        |     r2 = 1;
    0x000084a2 ldr r3, [r3]                                      |     r3 = *(r3);
    0x000084a4 strb.w r2, [r6, 0x19c]                            |     *((r6 + 0x19c)) = r2;
    0x000084a8 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x000084aa ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000084ac cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000084ae beq.w 0x82d0                                      |         goto label_24;
                                                                 |     }
    0x000084b2 b 0x82f0                                          |     goto label_33;
                                                                 | label_96:
    0x000084b4 ldrb r3, [r6, 0xc]                                |     r3 = *((r6 + 0xc));
    0x000084b6 lsrs r3, r3, 4                                    |     r3 >>= 4;
    0x000084b8 cmp r3, 0xa                                       |     
                                                                 |     if (r3 == 0xa) {
    0x000084ba beq.w 0x8774                                      |         goto label_109;
                                                                 |     }
    0x000084bc strh r3, [r3, 0xa]                                |     *((r3 + 0xa)) = r3;
    0x000084be str.w sl, [r8, 0x30]                              |     __asm ("str.w sl, [r8, 0x30]");
                                                                 | label_49:
    0x000084c2 ldrb r2, [r6, 0xc]                                |     r2 = *((r6 + 0xc));
    0x000084c4 ldr r3, [sp, 0xac]                                |     r3 = *(arg_ach);
    0x000084c6 and r2, r2, 0xf                                   |     r2 &= 0xf;
    0x000084ca cmp r2, 6                                         |     
    0x000084cc and r3, r3, 3                                     |     r3 &= 3;
    0x000084d0 str r3, [sp, 0xac]                                |     *(arg_ach) = r3;
    0x000084d2 it ne                                             |     
                                                                 |     if (r2 == 6) {
    0x000084d4 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r2 != 6) {
    0x000084d6 bne.w 0x8612                                      |         goto label_110;
                                                                 |     }
    0x000084da ldr r1, [pc, 0x268]                               |     
    0x000084dc movs r7, 0                                        |     r7 = 0;
    0x000084de add r1, pc                                        |     r1 = 0x10c28;
    0x000084e0 b 0x823a                                          |     goto label_28;
                                                                 | label_105:
    0x000084e2 str r0, [sp]                                      |     *(sp) = r0;
    0x000084e4 ldr r0, [pc, 0x260]                               |     
    0x000084e6 add r0, pc                                        |     r0 = 0x10c32;
    0x000084e8 bl 0xc1f0                                         |     fcn_0000c1f0 ();
    0x000084ec b 0x82aa                                          |     goto label_31;
                                                                 | label_107:
    0x000084ee ldr r1, [pc, 0x25c]                               |     
    0x000084f0 add r1, pc                                        |     r1 = 0x10c42;
    0x000084f2 b 0x8454                                          |     goto label_34;
                                                                 | label_103:
    0x000084f4 mov sl, r7                                        |     sl = r7;
                                                                 | label_102:
    0x000084f6 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000084f8 ldr.w r3, [r3, 0x1fc]                             |     r3 = *((r3 + 0x1fc));
    0x000084fc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000084fe beq.w 0x8120                                      |         goto label_35;
                                                                 |     }
    0x00008502 ldr r0, [sp, 0x48]                                |     r0 = var_48h;
    0x00008504 ldr r1, [r3]                                      |     r1 = *(r3);
    0x00008506 cmp r0, r3                                        |     
                                                                 |     if (r0 == r3) {
    0x00008508 beq.w 0x881c                                      |         goto label_111;
                                                                 |     }
    0x0000850c cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0000850e beq.w 0x8806                                      |         goto label_112;
                                                                 |     }
    0x00008512 movs r0, 0                                        |     r0 = 0;
    0x00008514 b 0x851e                                          |     
                                                                 |     while (r2 != r7) {
    0x00008516 adds r0, 1                                        |         r0++;
    0x00008518 cmp r0, r1                                        |         
                                                                 |         if (r0 == r1) {
    0x0000851a beq.w 0x880a                                      |             goto label_113;
                                                                 |         }
    0x0000851e ldr r7, [r3, 4]!                                  |         r7 = *((r3 += 4));
    0x00008522 cmp r2, r7                                        |         
    0x00008524 bne 0x8516                                        |         
                                                                 |     }
    0x00008526 b 0x8386                                          |     goto label_36;
                                                                 | label_101:
    0x00008528 movs r1, 0x81                                     |     r1 = 0x81;
    0x0000852a movs r2, 1                                        |     r2 = 1;
    0x0000852c mov.w ip, 0xf0                                    |     
    0x00008530 bl 0x139d0                                        |     fcn_000139d0 ();
    0x00008534 b 0x8346                                          |     goto label_37;
                                                                 | label_106:
    0x00008536 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00008538 beq 0x85b2                                        |         goto label_114;
                                                                 |     }
    0x0000853a lsls r5, r5, 1                                    |     r5 <<= 1;
                                                                 | label_42:
    0x0000853c ldr r3, [pc, 0x210]                               |     
    0x0000853e adds r0, r5, 1                                    |     r0 = r5 + 1;
    0x00008540 lsls r0, r0, 2                                    |     r0 <<= 2;
    0x00008542 add r3, pc                                        |     
    0x00008544 ldr r3, [r3]                                      |     r3 = *(0x10c96);
    0x00008546 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00008548 mov sb, r0                                        |     sb = r0;
                                                                 |     if (r0 == 0) {
    0x0000854a cbz r0, 0x8596                                    |         goto label_115;
                                                                 |     }
    0x0000854c ldr r7, [sp, 0x24]                                |     r7 = var_24h;
                                                                 |     if (r7 != 0) {
    0x0000854e cbnz r7, 0x8582                                   |         goto label_116;
                                                                 |     }
                                                                 | label_40:
    0x00008550 add.w r2, sb, r7                                  |     r2 = sb + r7;
    0x00008554 str r6, [r2, 4]                                   |     *((r2 + 4)) = r6;
    0x00008556 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00008558 adds r2, 1                                        |     r2++;
    0x0000855a str.w r2, [sb]                                    |     __asm ("str.w r2, [sb]");
    0x0000855e dmb ish                                           |     __asm ("dmb ish");
    0x00008562 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00008564 ldr.w r0, [r3, 0x1fc]                             |     r0 = *((r3 + 0x1fc));
    0x00008568 str.w r5, [r3, 0x200]                             |     __asm ("str.w r5, [r3, 0x200]");
    0x0000856c str.w sb, [r3, 0x1fc]                             |     __asm ("str.w sb, [r3, 0x1fc]");
    0x00008570 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00008572 beq.w 0x8436                                      |         goto label_38;
                                                                 |     }
    0x00008576 bl 0xde4c                                         |     fcn_0000de4c (r0, r1);
    0x0000857a b 0x8436                                          |     goto label_38;
                                                                 | label_108:
    0x0000857c ldr r3, [pc, 0x1d4]                               |     
    0x0000857e add r3, pc                                        |     r3 = 0x10cd6;
    0x00008580 b 0x846c                                          |     goto label_39;
                                                                 | label_116:
    0x00008582 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00008584 lsls r7, r7, 2                                    |     r7 <<= 2;
    0x00008586 adds r0, 4                                        |     r0 += 4;
    0x00008588 mov r2, r7                                        |     r2 = r7;
    0x0000858a ldr.w r1, [r3, 0x1fc]                             |     r1 = *((r3 + 0x1fc));
    0x0000858e adds r1, 4                                        |     r1 += 4;
    0x00008590 blx 0x15f40                                       |     fcn_00015f40 (r0, r1);
    0x00008594 b 0x8550                                          |     goto label_40;
                                                                 | label_115:
    0x00008596 ldr r3, [pc, 0x1c0]                               |     
    0x00008598 add r3, pc                                        |     
    0x0000859a ldr r3, [r3]                                      |     r3 = *(0x10cf6);
    0x0000859c lsls r0, r3, 0x1d                                 |     r0 = r3 << 0x1d;
    0x0000859e bmi 0x85c4                                        |     
                                                                 |     while (r3 != 0) {
                                                                 | label_45:
    0x000085a0 ldr r3, [sp, 0x44]                                |         r3 = var_44h;
                                                                 |         if (r3 == 0) {
    0x000085a2 cbnz r3, 0x85b6                                   |             
    0x000085a4 ldr r0, [pc, 0x1b4]                               |             
    0x000085a6 ldr r3, [pc, 0x1b8]                               |             
    0x000085a8 add r0, pc                                        |             r0 = 0x10d08;
    0x000085aa addw r0, r0, 0x544                                |             __asm ("addw r0, r0, 0x544");
    0x000085ae add r3, pc                                        |             r3 = 0x10d14;
    0x000085b0 b 0x82c2                                          |             goto label_41;
                                                                 | label_114:
    0x000085b2 movs r5, 0xa                                      |             r5 = 0xa;
    0x000085b4 b 0x853c                                          |             goto label_42;
                                                                 |         }
                                                                 | label_44:
    0x000085b6 ldr r0, [pc, 0x1ac]                               |         
    0x000085b8 ldr r3, [pc, 0x1ac]                               |         
    0x000085ba add r0, pc                                        |         r0 = 0x10d24;
    0x000085bc addw r0, r0, 0x544                                |         __asm ("addw r0, r0, 0x544");
    0x000085c0 add r3, pc                                        |         r3 = 0x10d2c;
    0x000085c2 b 0x84a0                                          |         goto label_43;
    0x000085c4 ldrb.w r3, [r6, 0x19b]                            |         r3 = *((r6 + 0x19b));
    0x000085c8 cmp r3, 0                                         |         
    0x000085ca bne 0x85a0                                        |         
                                                                 |     }
    0x000085cc ldr r3, [sp, 0x44]                                |     r3 = var_44h;
                                                                 |     if (r3 == 0) {
    0x000085ce cbz r3, 0x85d8                                    |         goto label_117;
                                                                 |     }
    0x000085d0 ldrb.w r3, [r6, 0x19c]                            |     r3 = *((r6 + 0x19c));
    0x000085d4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000085d6 bne 0x85b6                                        |         goto label_44;
                                                                 |     }
                                                                 | label_117:
    0x000085d8 ldr r0, [pc, 0x190]                               |     
    0x000085da ldr r2, [r6, 0x18]                                |     r2 = *((r6 + 0x18));
    0x000085dc ldr r1, [r6, 4]                                   |     r1 = *((r6 + 4));
    0x000085de add r0, pc                                        |     r0 = 0x10d4e;
    0x000085e0 bl 0xc1f0                                         |     fcn_0000c1f0 ();
    0x000085e4 b 0x85a0                                          |     goto label_45;
                                                                 | label_47:
    0x000085e6 ldr r3, [sp, 0xac]                                |     r3 = *(arg_ach);
    0x000085e8 ldr r7, [sp, 0x2c]                                |     r7 = var_2ch;
    0x000085ea and r3, r3, 3                                     |     r3 &= 3;
    0x000085ee str r3, [sp, 0xac]                                |     *(arg_ach) = r3;
    0x000085f0 ldr r3, [pc, 0x17c]                               |     
    0x000085f2 add r3, pc                                        |     r3 = 0x10d66;
    0x000085f4 str.w sl, [r3, 0x30]                              |     __asm ("str.w sl, [r3, 0x30]");
    0x000085f8 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000085fa ldrb r2, [r6, 0xc]                                |     r2 = *((r6 + 0xc));
    0x000085fc ldm.w r3, {r0, r1}                                |     r0 = *(r3);
                                                                 |     r1 = *((r3 + 4));
    0x00008600 and r2, r2, 0xf                                   |     r2 &= 0xf;
    0x00008604 cmp r2, 6                                         |     
    0x00008606 it ne                                             |     
                                                                 |     if (r2 == 6) {
    0x00008608 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0000860a stm.w r7, {r0, r1}                                |     *(r7) = r0;
                                                                 |     *((r7 + 4)) = r1;
    0x0000860c movs r3, r0                                       |     r3 = r0;
                                                                 |     if (r3 == r0) {
    0x0000860e beq.w 0x883c                                      |         goto label_118;
                                                                 |     }
                                                                 | label_110:
    0x00008612 cmp r2, 0xa                                       |     
                                                                 |     if (r2 == 0xa) {
    0x00008614 beq.w 0x83d2                                      |         goto label_46;
                                                                 |     }
    0x00008618 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0000861a bne.w 0x7f8e                                      |         goto label_29;
                                                                 |     }
    0x0000861e b 0x81da                                          |     goto label_30;
                                                                 | label_109:
    0x00008774 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00008776 mov r8, sb                                        |     r8 = sb;
    0x00008778 strd sb, sb, [sp, 0x74]                           |     __asm ("strd sb, sb, [var_74h]");
    0x0000877c ldr.w r3, [r3, 0x1d8]                             |     r3 = *((r3 + 0x1d8));
    0x00008780 ldr.w ip, [r3, 4]                                 |     ip = *((r3 + 4));
    0x00008784 mov lr, r3                                        |     lr = r3;
    0x00008786 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00008788 b 0x8796                                          |     
                                                                 |     while (ip != r3) {
    0x0000878a ldr.w r0, [lr]                                    |         r0 = *(lr);
    0x0000878e ldr.w r3, [r0, r3, lsl 2]                         |         offset_0 = r3 << 2;
                                                                 |         r3 = *((r0 + offset_0));
    0x00008792 cmp r3, r5                                        |         
                                                                 |         if (r3 == r5) {
    0x00008794 beq 0x87a0                                        |             goto label_119;
                                                                 |         }
    0x00008796 mov r3, r8                                        |         r3 = r8;
    0x00008798 add.w r8, r8, 1                                   |         r8++;
    0x0000879c cmp ip, r3                                        |         
    0x0000879e bne 0x878a                                        |         
                                                                 |     }
                                                                 | label_119:
    0x000087a0 add r3, sp, 0x74                                  |     r3 += var_74h;
    0x000087a2 mov.w sb, 0                                       |     sb = 0;
    0x000087a6 mov r0, ip                                        |     r0 = ip;
    0x000087a8 strd r3, r7, [sp, 0x28]                           |     __asm ("strd r3, r7, [var_28h]");
    0x000087ac b 0x87f8                                          |     goto label_120;
                                                                 | label_48:
    0x000087ae ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x000087b0 ldr r3, [r3]                                      |     r3 = *(r3);
    0x000087b2 ldr.w r3, [r3, r8, lsl 2]                         |     offset_1 = r8 << 2;
                                                                 |     r3 = *((r3 + offset_1));
    0x000087b4 adds r0, 0x28                                     |     r0 += 0x28;
    0x000087b6 ldr r7, [r3, 0x60]                                |     r7 = *((r3 + 0x60));
                                                                 |     if (r7 == 0) {
    0x000087b8 cbz r7, 0x87f4                                    |         goto label_121;
                                                                 |     }
    0x000087ba ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x000087bc add.w r3, r3, 0x168                               |     r3 += 0x168;
    0x000087c0 str r3, [sp, 4]                                   |     var_4h = r3;
    0x000087c2 str.w sb, [sp, 0x10]                              |     __asm ("str.w sb, [var_10h]");
    0x000087c6 str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x000087c8 ldr r0, [sp, 0xac]                                |     r0 = *(arg_ach);
    0x000087ca strd r1, r2, [sp, 0x30]                           |     __asm ("strd r1, r2, [var_34h]");
    0x000087ce strd sb, r0, [sp, 0x14]                           |     __asm ("strd sb, r0, [var_14h]");
    0x000087d2 ldr r0, [sp, 0xa8]                                |     r0 = *(arg_a8h);
    0x000087d4 strd sb, r0, [sp, 8]                              |     __asm ("strd sb, r0, [var_ch]");
    0x000087d8 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x000087da str r0, [sp]                                      |     *(sp) = r0;
    0x000087dc mov r0, r4                                        |     r0 = r4;
    0x000087de ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x000087e2 bl 0x7328                                         |     r0 = fcn_00007328 (r0, r1, r2, r3, r4, r5);
    0x000087e6 cmp r0, 0                                         |     
                                                                 |     if (r0 > 0) {
    0x000087e8 bgt.w 0x85e6                                      |         goto label_47;
                                                                 |     }
    0x000087ec ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x000087ee ldrd r1, r2, [sp, 0x30]                           |     __asm ("ldrd r1, r2, [var_34h]");
    0x000087f0 asrs r4, r1, 8                                    |     r4 = r1 >> 8;
    0x000087f2 ldr r0, [r3, 4]                                   |     r0 = *((r3 + 4));
                                                                 | label_121:
    0x000087f4 add.w r8, r8, 1                                   |     r8++;
                                                                 | label_120:
    0x000087f8 cmp r8, r0                                        |     
                                                                 |     if (r8 <= r0) {
    0x000087fa blo 0x87ae                                        |         goto label_48;
                                                                 |     }
    0x000087fc ldr r3, [pc, 0x44]                                |     
    0x000087fe add r3, pc                                        |     r3 = 0x11046;
    0x00008800 str.w sl, [r3, 0x30]                              |     __asm ("str.w sl, [r3, 0x30]");
    0x00008804 b 0x84c2                                          |     goto label_49;
                                                                 | label_112:
    0x00008806 mov sl, r1                                        |     sl = r1;
    0x00008808 b 0x8120                                          |     goto label_35;
                                                                 | label_113:
    0x0000880a mov sl, r0                                        |     sl = r0;
    0x0000880c b 0x8120                                          |     goto label_35;
                                                                 | label_104:
    0x0000880e ldr r0, [pc, 0x38]                                |     
    0x00008810 mov sl, r6                                        |     sl = r6;
    0x00008812 add r0, pc                                        |     r0 = 0x11060;
    0x00008814 addw r0, r0, 0x544                                |     __asm ("addw r0, r0, 0x544");
    0x00008818 blx r3                                            |     uint32_t (*r3)(uint32_t) (r0);
    0x0000881a b 0x82f6                                          |     goto label_50;
                                                                 | label_111:
    0x0000881c cmp sl, r1                                        |     
                                                                 |     if (sl >= r1) {
    0x0000881e bhs.w 0x8120                                      |         goto label_35;
                                                                 |     }
    0x00008822 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00008824 mov r7, sl                                        |     r7 = sl;
    0x00008826 adds r3, 4                                        |     r3 += 4;
                                                                 | label_51:
    0x00008828 ldr.w r0, [r3, r7, lsl 2]                         |     offset_2 = r7 << 2;
                                                                 |     r0 = *((r3 + offset_2));
    0x0000882c cmp r2, r0                                        |     
                                                                 |     if (r2 == r0) {
    0x0000882e beq.w 0x8386                                      |         goto label_36;
                                                                 |     }
    0x00008832 adds r7, 1                                        |     r7++;
    0x00008834 cmp r7, r1                                        |     
                                                                 |     if (r7 != r1) {
    0x00008836 bne 0x8828                                        |         goto label_51;
                                                                 |     }
    0x00008838 mov sl, r7                                        |     sl = r7;
    0x0000883a b 0x8120                                          |     goto label_35;
                                                                 | label_118:
    0x0000883c ldr r1, [pc, 0xc]                                 |     
    0x0000883e movs r7, 1                                        |     r7 = 1;
    0x00008840 add r1, pc                                        |     r1 = 0x11090;
    0x00008842 b 0x823a                                          |     goto label_28;
                                                                 | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0xc218 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.0000c218 ()                  | void fcn_0000c218 () {
                                             |     int16_t var_0h;
                                             |     int16_t var_4h;
                                             |     int32_t var_4h_3;
                                             |     int16_t var_10h;
                                             |     int16_t var_4h_2;
    0x0000c218 push {r0, r1, r2, r3}         |     
    0x0000c21a mov.w r1, -1                  |     r1 = -1;
    0x0000c21e push {lr}                     |     
    0x0000c220 sub sp, 0xc                   |     
    0x0000c222 add r3, sp, 0x10              |     r3 += var_10h;
    0x0000c224 ldr r0, [pc, 0x18]            |     
    0x0000c226 ldr r2, [r3], 4               |     r2 = *(r3);
                                             |     r3 += 4;
    0x0000c22a add r0, pc                    |     
    0x0000c22c ldr r0, [r0, 0x2c]            |     r0 = *(0x1849a);
    0x0000c22e str r3, [sp, 4]               |     var_4h = r3;
    0x0000c230 bl 0xbe64                     |     fcn_0000be64 (r0, r1, r2, r3, r4);
    0x0000c234 add sp, 0xc                   |     
    0x0000c236 ldr lr, [sp], 4               |     
    0x0000c23a add sp, 0x10                  |     
    0x0000c23c bx lr                         |     return;
                                             | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0xc264 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.0000c264 ()                  | void fcn_0000c264 () {
                                             |     int16_t var_0h;
                                             |     int16_t var_4h;
                                             |     int32_t var_4h_3;
                                             |     int16_t var_10h;
                                             |     int16_t var_4h_2;
    0x0000c264 push {r0, r1, r2, r3}         |     
    0x0000c266 movs r1, 0                    |     r1 = 0;
    0x0000c268 push {lr}                     |     
    0x0000c26a sub sp, 0xc                   |     
    0x0000c26c add r3, sp, 0x10              |     r3 += var_10h;
    0x0000c26e movs r0, 1                    |     r0 = 1;
    0x0000c270 ldr r2, [r3], 4               |     r2 = *(r3);
                                             |     r3 += 4;
    0x0000c274 str r3, [sp, 4]               |     var_4h = r3;
    0x0000c276 bl 0xbe64                     |     fcn_0000be64 (r0, r1, r2, r3, r4);
    0x0000c27a add sp, 0xc                   |     
    0x0000c27c ldr lr, [sp], 4               |     
    0x0000c280 add sp, 0x10                  |     
    0x0000c282 bx lr                         |     return;
                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x11638 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00011638 ()                                      | void fcn_00011638 (int16_t arg1, int16_t arg2) {
                                                                 |     int16_t var_1h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_44h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00011638 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0001163c mov r3, r0                                        |     r3 = r0;
    0x0001163e ldr r4, [pc, 0x2cc]                               |     
    0x00011640 mov fp, r1                                        |     
    0x00011642 sub sp, 0x4c                                      |     
    0x00011644 ldr r2, [pc, 0x2c8]                               |     
    0x00011646 add r4, pc                                        |     r4 = 0x22f58;
    0x00011648 ldr r1, [pc, 0x2c8]                               |     
    0x0001164a str r0, [r4]                                      |     *(r4) = r0;
    0x0001164c ldr r0, [r3], 4                                   |     r0 = *(r3);
                                                                 |     r3 += 4;
    0x00011650 add r2, pc                                        |     r2 = 0x22f64;
    0x00011652 add r1, pc                                        |     r1 = 0x22f6a;
    0x00011654 str r0, [r2]                                      |     *(r2) = r0;
    0x00011656 ldr r2, [pc, 0x2c0]                               |     
    0x00011658 str r3, [r1]                                      |     *(r1) = r3;
    0x0001165a adds r1, r0, 1                                    |     r1 = r0 + 1;
    0x0001165c add.w r0, r3, r1, lsl 2                           |     r0 = r3 + (r1 << 2);
    0x00011660 add r2, pc                                        |     r2 = 0x22f7e;
    0x00011662 str r0, [r2]                                      |     *(r2) = r0;
    0x00011664 ldr.w r3, [r3, r1, lsl 2]                         |     offset_0 = r1 << 2;
                                                                 |     r3 = *((r3 + offset_0));
    0x00011668 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001166a beq.w 0x1189e                                     |         goto label_5;
                                                                 |     }
    0x0001166e mov r3, r0                                        |     r3 = r0;
                                                                 |     do {
    0x00011670 ldr r2, [r3, 4]!                                  |         r2 = *((r3 += 4));
    0x00011674 cmp r2, 0                                         |         
    0x00011676 bne 0x11670                                       |         
                                                                 |     } while (r2 != 0);
                                                                 | label_2:
    0x00011678 ldr r1, [pc, 0x2a0]                               |     
    0x0001167a adds r2, r3, 4                                    |     r2 = r3 + 4;
    0x0001167c ldr r4, [pc, 0x2a0]                               |     
    0x0001167e mov.w r5, 0x800                                   |     r5 = 0x800;
    0x00011682 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00011684 add r1, pc                                        |     r1 = 0x22fa4;
    0x00011686 add r4, pc                                        |     r4 = 0x22faa;
    0x00011688 str r1, [sp, 0x44]                                |     var_44h = r1;
    0x0001168a movs r1, 0                                        |     r1 = 0;
    0x0001168c str r2, [r4, 0x50]                                |     *((r4 + 0x50)) = r2;
    0x0001168e str r1, [r4, 8]                                   |     *((r4 + 8)) = r1;
    0x00011690 str r5, [r4, 0x14]                                |     *((r4 + 0x14)) = r5;
    0x00011692 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00011694 beq.w 0x118a2                                     |         goto label_6;
                                                                 |     }
    0x00011698 mov r6, r1                                        |     r6 = r1;
    0x0001169a mov r7, r1                                        |     r7 = r1;
    0x0001169c mov lr, r1                                        |     lr = r1;
    0x0001169e mov r8, r1                                        |     r8 = r1;
    0x000116a0 mov sb, r1                                        |     sb = r1;
    0x000116a2 mov sl, r1                                        |     sl = r1;
    0x000116a4 mov r4, r1                                        |     r4 = r1;
    0x000116a6 mov r5, r1                                        |     r5 = r1;
    0x000116a8 strd r1, r1, [sp, 4]                              |     __asm ("strd r1, r1, [var_4h]");
    0x000116ac strd r1, r1, [sp, 0xc]                            |     __asm ("strd r1, r1, [var_ch]");
                                                                 |     do {
                                                                 | label_0:
    0x000116b0 subs r3, 3                                        |         r3 -= 3;
    0x000116b2 cmp r3, 0x30                                      |         
                                                                 |         if (r3 <= 0x30) {
    0x000116b4 bhi 0x11722                                       |             
                                                                 |             /* switch table (49 cases) at 0x116ba */
    0x000116b6 tbh [pc, r3, lsl 1]                               |             __asm ("tbh [pc, r3, lsl 1]");
    0x0001171c ldr r3, [r2, 4]                                   |             r3 = *((r2 + 4));
    0x0001171e movs r6, 1                                        |             r6 = 1;
    0x00011720 str r3, [sp, 0x18]                                |             var_18h = r3;
                                                                 |         }
    0x00011722 ldr r3, [r2, 8]!                                  |         r3 = *((r2 += 8));
    0x00011726 cmp r3, 0                                         |         
    0x00011728 bne 0x116b0                                       |         
                                                                 |     } while (r3 != 0);
                                                                 |     if (r1 != 0) {
                                                                 | label_1:
    0x0001172a cbz r1, 0x11734                                   |         
    0x0001172c ldr r3, [pc, 0x1f4]                               |         
    0x0001172e ldr r2, [sp, 0x14]                                |         r2 = var_14h;
    0x00011730 add r3, pc                                        |         r3 = 0x23058;
    0x00011732 str r2, [r3, 0x14]                                |         *((r3 + 0x14)) = r2;
                                                                 |     }
                                                                 |     if (r6 != 0) {
    0x00011734 cbz r6, 0x1173e                                   |         
    0x00011736 ldr r3, [pc, 0x1f0]                               |         
    0x00011738 ldr r2, [sp, 0x18]                                |         r2 = var_18h;
    0x0001173a add r3, pc                                        |         r3 = 0x23068;
    0x0001173c str r2, [r3, 4]                                   |         *((r3 + 4)) = r2;
                                                                 |     }
                                                                 |     if (r7 != 0) {
    0x0001173e cbz r7, 0x1174a                                   |         
    0x00011740 ldr r3, [pc, 0x1e8]                               |         
    0x00011742 ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x00011744 add r3, pc                                        |         r3 = 0x23074;
    0x00011746 str.w r2, [r3, 0x190]                             |         __asm ("str.w r2, [r3, 0x190]");
                                                                 |     }
    0x0001174a cmp.w lr, 0                                       |     
                                                                 |     if (lr != 0) {
    0x0001174e beq 0x11758                                       |         
    0x00011750 ldr r3, [pc, 0x1dc]                               |         
    0x00011752 ldr r2, [sp, 0x20]                                |         r2 = var_20h;
    0x00011754 add r3, pc                                        |         r3 = 0x23088;
    0x00011756 str r2, [r3, 0x3c]                                |         *((r3 + 0x3c)) = r2;
                                                                 |     }
    0x00011758 cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x0001175c beq 0x11766                                       |         
    0x0001175e ldr r3, [pc, 0x1d4]                               |         
    0x00011760 ldr r2, [sp, 0x24]                                |         r2 = var_24h;
    0x00011762 add r3, pc                                        |         r3 = 0x2309c;
    0x00011764 str r2, [r3, 0x24]                                |         *((r3 + 0x24)) = r2;
                                                                 |     }
    0x00011766 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x0001176a beq 0x1177c                                       |         
    0x0001176c ldr r3, [pc, 0x1c8]                               |         
    0x0001176e ldr r2, [sp, 0x28]                                |         r2 = var_28h;
    0x00011770 add r3, pc                                        |         r3 = 0x230ac;
    0x00011772 str.w r2, [r3, 0x1a8]                             |         __asm ("str.w r2, [r3, 0x1a8]");
    0x00011776 movs r2, 0                                        |         r2 = 0;
    0x00011778 str.w r2, [r3, 0x1ac]                             |         __asm ("str.w r2, [r3, 0x1ac]");
                                                                 |     }
    0x0001177c cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x00011780 beq 0x1178e                                       |         
    0x00011782 ldr r3, [pc, 0x1b8]                               |         
    0x00011784 ldr r2, [sp, 0x2c]                                |         r2 = var_2ch;
    0x00011786 add r3, pc                                        |         r3 = 0x230c8;
    0x00011788 str r2, [r3, 0x48]                                |         *((r3 + 0x48)) = r2;
    0x0001178a movs r2, 0                                        |         r2 = 0;
    0x0001178c str r2, [r3, 0x4c]                                |         *((r3 + 0x4c)) = r2;
                                                                 |     }
    0x0001178e ldr r3, [sp, 4]                                   |     r3 = var_4h;
                                                                 |     if (r3 != 0) {
    0x00011790 cbz r3, 0x1179a                                   |         
    0x00011792 ldr r3, [pc, 0x1ac]                               |         
    0x00011794 ldr r2, [sp, 0x30]                                |         r2 = var_30h;
    0x00011796 add r3, pc                                        |         r3 = 0x230dc;
    0x00011798 str r2, [r3, 8]                                   |         *((r3 + 8)) = r2;
                                                                 |     }
    0x0001179a ldr r3, [sp, 8]                                   |     r3 = var_8h;
                                                                 |     if (r3 != 0) {
    0x0001179c cbz r3, 0x117a6                                   |         
    0x0001179e ldr r3, [pc, 0x1a4]                               |         
    0x000117a0 ldr r2, [sp, 0x34]                                |         r2 = var_34h;
    0x000117a2 add r3, pc                                        |         r3 = 0x230ec;
    0x000117a4 str r2, [r3, 8]                                   |         *((r3 + 8)) = r2;
                                                                 |     }
    0x000117a6 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
                                                                 |     if (r3 != 0) {
    0x000117a8 cbz r3, 0x117ae                                   |         
    0x000117aa ldr r3, [sp, 0x3c]                                |         r3 = var_3ch;
    0x000117ac str r3, [sp, 0x44]                                |         var_44h = r3;
                                                                 |     }
    0x000117ae ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000117b0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000117b2 beq 0x118a6                                       |         goto label_7;
                                                                 |     }
    0x000117b4 ldr r3, [pc, 0x190]                               |     
    0x000117b6 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x000117b8 add r3, pc                                        |     r3 = 0x23104;
    0x000117ba str r2, [r3, 0x10]                                |     *((r3 + 0x10)) = r2;
    0x000117bc b 0x118a6                                         |     goto label_7;
    0x000117be ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x000117c0 movs r1, 1                                        |     r1 = 1;
    0x000117c2 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x000117c4 ldr r3, [r2, 8]!                                  |     r3 = *((r2 += 8));
    0x000117c8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000117ca bne.w 0x116b0                                     |         goto label_0;
                                                                 |     }
    0x000117ce b 0x1172a                                         |     goto label_1;
    0x000117d0 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x000117d2 movs r7, 1                                        |     r7 = 1;
    0x000117d4 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x000117d6 ldr r3, [r2, 8]!                                  |     r3 = *((r2 += 8));
    0x000117da cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000117dc bne.w 0x116b0                                     |         goto label_0;
                                                                 |     }
    0x000117e0 b 0x1172a                                         |     goto label_1;
    0x000117e2 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x000117e4 mov.w sb, 1                                       |     sb = 1;
    0x000117e8 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x000117ea ldr r3, [r2, 8]!                                  |     r3 = *((r2 += 8));
    0x000117ee cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000117f0 bne.w 0x116b0                                     |         goto label_0;
                                                                 |     }
    0x000117f4 b 0x1172a                                         |     goto label_1;
    0x000117f6 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x000117f8 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x000117fa movs r3, 1                                        |     r3 = 1;
    0x000117fc str r3, [sp, 8]                                   |     var_8h = r3;
    0x000117fe ldr r3, [r2, 8]!                                  |     r3 = *((r2 += 8));
    0x00011800 subs r7, 8                                        |     r7 -= 8;
    0x00011802 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00011804 bne.w 0x116b0                                     |         goto label_0;
                                                                 |     }
    0x00011808 b 0x1172a                                         |     goto label_1;
    0x0001180a ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0001180c mov.w lr, 1                                       |     lr = 1;
    0x00011810 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00011812 ldr r3, [r2, 8]!                                  |     r3 = *((r2 += 8));
    0x00011816 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00011818 bne.w 0x116b0                                     |         goto label_0;
                                                                 |     }
    0x0001181c b 0x1172a                                         |     goto label_1;
    0x0001181e ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00011820 mov.w r8, 1                                       |     r8 = 1;
    0x00011824 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00011826 ldr r3, [r2, 8]!                                  |     r3 = *((r2 += 8));
    0x0001182a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0001182c bne.w 0x116b0                                     |         goto label_0;
                                                                 |     }
    0x00011830 b 0x1172a                                         |     goto label_1;
    0x00011832 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00011834 mov.w sl, 1                                       |     sl = 1;
    0x00011838 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x0001183a ldr r3, [r2, 8]!                                  |     r3 = *((r2 += 8));
    0x0001183e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00011840 bne.w 0x116b0                                     |         goto label_0;
                                                                 |     }
    0x00011844 b 0x1172a                                         |     goto label_1;
    0x00011846 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00011848 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x0001184a movs r3, 1                                        |     r3 = 1;
    0x0001184c str r3, [sp, 4]                                   |     var_4h = r3;
    0x0001184e ldr r3, [r2, 8]!                                  |     r3 = *((r2 += 8));
    0x00011852 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00011854 bne.w 0x116b0                                     |         goto label_0;
                                                                 |     }
    0x00011858 b 0x1172a                                         |     goto label_1;
    0x0001185a ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0001185c str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x0001185e movs r3, 1                                        |     r3 = 1;
    0x00011860 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00011862 ldr r3, [r2, 8]!                                  |     r3 = *((r2 += 8));
    0x00011866 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00011868 bne.w 0x116b0                                     |         goto label_0;
                                                                 |     }
    0x0001186c b 0x1172a                                         |     goto label_1;
    0x0001186e ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00011870 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00011872 movs r3, 1                                        |     r3 = 1;
    0x00011874 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00011876 ldr r3, [r2, 8]!                                  |     r3 = *((r2 += 8));
    0x0001187a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0001187c bne.w 0x116b0                                     |         goto label_0;
                                                                 |     }
    0x00011880 b 0x1172a                                         |     goto label_1;
    0x00011882 ldr r4, [r2, 4]                                   |     r4 = *((r2 + 4));
    0x00011884 ldr r3, [r2, 8]!                                  |     r3 = *((r2 += 8));
    0x00011888 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0001188a bne.w 0x116b0                                     |         goto label_0;
                                                                 |     }
    0x0001188e b 0x1172a                                         |     goto label_1;
    0x00011890 ldr r5, [r2, 4]                                   |     r5 = *((r2 + 4));
    0x00011892 ldr r3, [r2, 8]!                                  |     r3 = *((r2 += 8));
    0x00011896 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00011898 bne.w 0x116b0                                     |         goto label_0;
                                                                 |     }
    0x0001189c b 0x1172a                                         |     goto label_1;
                                                                 | label_5:
    0x0001189e mov r3, r0                                        |     r3 = r0;
    0x000118a0 b 0x11678                                         |     goto label_2;
                                                                 | label_6:
    0x000118a2 mov r4, r3                                        |     r4 = r3;
    0x000118a4 mov r5, r3                                        |     r5 = r3;
                                                                 | label_7:
    0x000118a6 ldr r6, [pc, 0xa4]                                |     
    0x000118a8 bl 0x10e24                                        |     fcn_00010e24 (r0, r1, r2);
    0x000118ac movs r0, 0                                        |     r0 = 0;
    0x000118ae add r6, pc                                        |     r6 = 0x23200;
    0x000118b0 bl 0x139d8                                        |     fcn_000139d8 (r0);
    0x000118b4 ldr r0, [r6, 8]                                   |     r0 = *(0x23208);
                                                                 |     if (r0 == 0) {
    0x000118b6 cbz r0, 0x118be                                   |         goto label_8;
                                                                 |     }
    0x000118b8 ldrb r3, [r0]                                     |     r3 = *(r0);
                                                                 |     if (r3 != 0) {
    0x000118ba cbnz r3, 0x118ea                                  |         goto label_9;
                                                                 |     }
    0x000118bc str r3, [r6, 8]                                   |     *((r6 + 8)) = r3;
                                                                 |     do {
                                                                 | label_8:
    0x000118be movs r0, 0                                        |         r0 = 0;
    0x000118c0 bl 0x13a0c                                        |         fcn_00013a0c (r0);
    0x000118c4 ldr r3, [pc, 0x88]                                |         
    0x000118c6 add r3, pc                                        |         r3 = 0x2321a;
    0x000118c8 cmp r0, r3                                        |         
                                                                 |         if (r0 == r3) {
    0x000118ca beq 0x118f2                                       |             goto label_10;
                                                                 |         }
                                                                 | label_3:
    0x000118cc ldr r3, [pc, 0x84]                                |         
    0x000118ce add r3, pc                                        |         
    0x000118d0 ldr r3, [r3, 8]                                   |         r3 = *(0x2322e);
                                                                 |         if (r3 != 0) {
    0x000118d2 cbnz r3, 0x11904                                  |             goto label_11;
                                                                 |         }
                                                                 | label_4:
    0x000118d4 ldr r3, [pc, 0x80]                                |         
    0x000118d6 mov r0, r5                                        |         r0 = r5;
    0x000118d8 add r2, sp, 0x44                                  |         r2 += var_44h;
    0x000118da mov r1, r4                                        |         r1 = r4;
    0x000118dc add r3, pc                                        |         
    0x000118de ldr r3, [r3, 0x50]                                |         r3 = *(0x23288);
    0x000118e0 blx fp                                            |         fp (r0, r1, r2, r3);
    0x000118e2 ldr r0, [sp, 0x44]                                |         r0 = var_44h;
    0x000118e4 add sp, 0x4c                                      |         
    0x000118e6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_9:
    0x000118ea bl 0x15540                                        |         fcn_00015540 (r0, r1);
    0x000118ee str r0, [r6, 0xc]                                 |         *((r6 + 0xc)) = r0;
    0x000118f0 b 0x118be                                         |         
                                                                 |     } while (1);
                                                                 | label_10:
    0x000118f2 ldr r3, [pc, 0x68]                                |     
    0x000118f4 add r3, pc                                        |     r3 = 0x23256;
    0x000118f6 ldr r2, [r3, 0x10]                                |     r2 = *(0x23266);
    0x000118f8 subs r3, r2, 1                                    |     r3 = r2 - 1;
    0x000118fa ands r0, r3                                       |     r0 &= r3;
    0x000118fc subs r0, r2, r0                                   |     r0 = r2 - r0;
    0x000118fe bl 0x13a0c                                        |     fcn_00013a0c (r0);
    0x00011902 b 0x118cc                                         |     goto label_3;
                                                                 | label_11:
    0x00011904 bl 0x1410c                                        |     fcn_0001410c ();
    0x00011908 b 0x118d4                                         |     goto label_4;
                                                                 | }

[*] Function strcat used 1 times ld-linux-armhf.so.3