[*] Binary protection state of libbz2.so.1.0.8

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


[*] Function popen tear down of libbz2.so.1.0.8

    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libbz2.so.1.0.8 @ 0x2cd8 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) sym.BZ2_compressBlock ()                         | void BZ2_compressBlock (uint32_t arg1, int16_t arg2) {
                                                             |     int16_t var_0h;
                                                             |     uint32_t var_4h;
                                                             |     int32_t var_4h_2;
                                                             |     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;
                                                             |     FILE * 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_58h;
                                                             |     int16_t var_5ch;
                                                             |     int16_t var_60h;
                                                             |     int16_t var_64h;
                                                             |     int16_t var_68h;
                                                             |     int16_t var_6ch;
                                                             |     int16_t var_70h;
                                                             |     FILE * stream;
                                                             |     int16_t var_78h;
                                                             |     int16_t var_7ch;
                                                             |     int16_t var_80h;
                                                             |     int16_t var_84h;
                                                             |     int16_t var_88h;
                                                             |     int16_t var_8ch;
                                                             |     int16_t var_90h;
                                                             |     int16_t var_94h;
                                                             |     int16_t var_98h;
                                                             |     int16_t var_9ch;
                                                             |     int16_t var_a0h;
                                                             |     int16_t var_a4h;
                                                             |     int16_t var_a8h;
                                                             |     int16_t var_ach;
                                                             |     int16_t var_b0h;
                                                             |     int16_t var_b4h;
                                                             |     int16_t var_b8h;
                                                             |     int16_t var_bah;
                                                             |     int16_t var_0h_2;
                                                             |     int32_t var_bch;
                                                             |     int16_t var_c4h;
                                                             |     int16_t var_0h_3;
                                                             |     int16_t var_dbh;
                                                             |     int16_t var_dch;
                                                             |     int16_t var_ddh;
                                                             |     int16_t var_0h_4;
                                                             |     int32_t var_4h_3;
                                                             |     int32_t var_4h_4;
                                                             |     int32_t var_ch;
                                                             |     int16_t var_ech;
                                                             |     int16_t var_f0h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x00002cd8 svcmi 0xf0e92d                                |     __asm ("svcmi 0xf0e92d");
    0x00002cdc mov sl, r0                                    |     sl = r0;
    0x00002cde ldr.w r4, [pc, 0x838]                         |     r4 = *(0x00003518);
    0x00002ce2 ldr.w r2, [pc, 0x838]                         |     r2 = *(0x0000351c);
    0x00002ce6 ldr.w r3, [pc, 0x838]                         |     
    0x00002cea add r4, pc                                    |     r4 += pc;
    0x00002cec ldr r0, [r0, 0x44]                            |     r0 = *((r0 + 0x44));
    0x00002cee vpush {d8}                                    |     __asm ("vpush {d8}");
    0x00002cf2 add r2, pc                                    |     r2 += pc;
    0x00002cf4 sub sp, 0xf4                                  |     
    0x00002cf6 str r4, [sp, 0x4c]                            |     var_4ch = r4;
    0x00002cf8 cmp r0, 0                                     |     
    0x00002cfa ldr r3, [r2, r3]                              |     r3 = *((r2 + r3));
    0x00002cfc ldr r3, [r3]                                  |     r3 = *(0x3522);
    0x00002cfe str r3, [sp, 0xec]                            |     var_ech = r3;
    0x00002d00 mov.w r3, 0                                   |     r3 = 0;
    0x00002d04 str r1, [sp, 0xac]                            |     var_ach = r1;
                                                             |     if (r0 <= 0) {
    0x00002d06 ble.w 0x301c                                  |         goto label_44;
                                                             |     }
    0x00002d0a ldr.w r3, [sl, 0x26c]                         |     r3 = *((sl + 0x26c));
    0x00002d0e ldr.w r2, [sl, 0x260]                         |     r2 = *((sl + 0x260));
    0x00002d12 ldr.w r1, [sl, 0x264]                         |     r1 = *((sl + 0x264));
    0x00002d16 cmp r3, 1                                     |     
    0x00002d18 it gt                                         |     
                                                             |     if (r3 <= 1) {
    0x00002d1a movgt r4, 0                                   |         r4 = 0;
                                                             |     }
    0x00002d1c mvn.w r2, r2                                  |     r2 = ~r2;
    0x00002d20 it gt                                         |     
                                                             |     if (r3 <= 1) {
    0x00002d22 strgt r4, [sl, 0x4c]                          |         *((sl + 0x4c)) = r4;
                                                             |     }
    0x00002d26 ldr.w r4, [sl, 0x268]                         |     r4 = *((sl + 0x268));
    0x00002d2a eor.w r1, r2, r1, ror 31                      |     r1 = r2 ^ (r1 >>> 31);
    0x00002d2e str.w r2, [sl, 0x260]                         |     __asm ("str.w r2, [sl, 0x260]");
    0x00002d32 str.w r1, [sl, 0x264]                         |     __asm ("str.w r1, [sl, 0x264]");
    0x00002d36 cmp r4, 1                                     |     
                                                             |     if (r4 > 1) {
    0x00002d38 bgt.w 0x305a                                  |         goto label_45;
                                                             |     }
                                                             | label_0:
    0x00002d3c mov r0, sl                                    |     r0 = sl;
    0x00002d3e blx 0xf40                                     |     fcn_00000f40 ();
    0x00002d42 ldr.w r2, [sl, 0x44]                          |     r2 = *((sl + 0x44));
    0x00002d46 ldr.w r3, [sl, 0x14]                          |     r3 = *((sl + 0x14));
    0x00002d4a add r3, r2                                    |     r3 += r2;
    0x00002d4c str.w r3, [sl, 0x2c]                          |     __asm ("str.w r3, [sl, 0x2c]");
    0x00002d50 ldr.w r3, [sl, 0x26c]                         |     r3 = *((sl + 0x26c));
    0x00002d54 cmp r3, 1                                     |     
                                                             |     if (r3 == 1) {
    0x00002d56 beq.w 0x3078                                  |         goto label_46;
                                                             |     }
    0x00002d5a cmp r2, 0                                     |     
                                                             |     if (r2 <= 0) {
    0x00002d5c ble.w 0x302e                                  |         goto label_2;
                                                             |     }
                                                             | label_1:
    0x00002d60 ldrd r1, r3, [sl, 0x258]                      |     __asm ("ldrd r1, r3, [sl, 0x258]");
    0x00002d64 cmp r3, 7                                     |     
                                                             |     if (r3 <= 7) {
    0x00002d66 ble.w 0x5de6                                  |         goto label_47;
                                                             |     }
    0x00002d6a ldr.w r0, [sl, 0x4c]                          |     r0 = *((sl + 0x4c));
                                                             |     do {
    0x00002d6e ldr.w r3, [sl, 0x2c]                          |         r3 = *((sl + 0x2c));
    0x00002d72 lsrs r1, r1, 0x18                             |         r1 >>= 0x18;
    0x00002d74 strb r1, [r3, r0]                             |         *((r3 + r0)) = r1;
    0x00002d76 ldr.w r1, [sl, 0x258]                         |         r1 = *((sl + 0x258));
    0x00002d7a ldr.w r2, [sl, 0x25c]                         |         r2 = *((sl + 0x25c));
    0x00002d7e ldr.w r0, [sl, 0x4c]                          |         r0 = *((sl + 0x4c));
    0x00002d82 sub.w r3, r2, 8                               |         r3 = r2 - 8;
    0x00002d86 lsls r1, r1, 8                                |         r1 <<= 8;
    0x00002d88 cmp r3, 7                                     |         
    0x00002d8a add.w r0, r0, 1                               |         r0++;
    0x00002d8e strd r1, r3, [sl, 0x258]                      |         __asm ("strd r1, r3, [sl, 0x258]");
    0x00002d92 str.w r0, [sl, 0x4c]                          |         __asm ("str.w r0, [sl, 0x4c]");
    0x00002d96 bgt 0x2d6e                                    |         
                                                             |     } while (r3 > 7);
                                                             | label_29:
    0x00002d98 rsb.w r0, r3, 0x18                            |     r0 = 0x18 - r3;
    0x00002d9c movs r3, 0x31                                 |     r3 = 0x31;
    0x00002d9e lsls r3, r0                                   |     r3 <<= r0;
    0x00002da0 cmp r2, 7                                     |     
    0x00002da2 str.w r2, [sl, 0x25c]                         |     __asm ("str.w r2, [sl, 0x25c]");
    0x00002da6 orr.w r3, r3, r1                              |     r3 |= r1;
    0x00002daa str.w r3, [sl, 0x258]                         |     __asm ("str.w r3, [sl, 0x258]");
                                                             |     if (r2 <= 7) {
    0x00002dae ble.w 0x5dee                                  |         goto label_48;
                                                             |     }
    0x00002db2 ldr.w r1, [sl, 0x4c]                          |     r1 = *((sl + 0x4c));
                                                             |     do {
    0x00002db6 ldr.w r2, [sl, 0x2c]                          |         r2 = *((sl + 0x2c));
    0x00002dba lsrs r3, r3, 0x18                             |         r3 >>= 0x18;
    0x00002dbc strb r3, [r2, r1]                             |         *((r2 + r1)) = r3;
    0x00002dbe ldr.w r3, [sl, 0x258]                         |         r3 = *((sl + 0x258));
    0x00002dc2 ldr.w r0, [sl, 0x25c]                         |         r0 = *((sl + 0x25c));
    0x00002dc6 ldr.w r1, [sl, 0x4c]                          |         r1 = *((sl + 0x4c));
    0x00002dca sub.w r2, r0, 8                               |         r2 = r0 - 8;
    0x00002dce lsls r3, r3, 8                                |         r3 <<= 8;
    0x00002dd0 cmp r2, 7                                     |         
    0x00002dd2 add.w r1, r1, 1                               |         r1++;
    0x00002dd6 strd r3, r2, [sl, 0x258]                      |         __asm ("strd r3, r2, [sl, 0x258]");
    0x00002dda str.w r1, [sl, 0x4c]                          |         __asm ("str.w r1, [sl, 0x4c]");
    0x00002dde bgt 0x2db6                                    |         
                                                             |     } while (r2 > 7);
                                                             | label_30:
    0x00002de0 rsb.w r1, r2, 0x18                            |     r1 = 0x18 - r2;
    0x00002de4 movs r2, 0x41                                 |     r2 = 0x41;
    0x00002de6 lsls r2, r1                                   |     r2 <<= r1;
    0x00002de8 cmp r0, 7                                     |     
    0x00002dea str.w r0, [sl, 0x25c]                         |     __asm ("str.w r0, [sl, 0x25c]");
    0x00002dee orr.w r2, r2, r3                              |     r2 |= r3;
    0x00002df2 str.w r2, [sl, 0x258]                         |     __asm ("str.w r2, [sl, 0x258]");
                                                             |     if (r0 <= 7) {
    0x00002df6 ble.w 0x5df6                                  |         goto label_49;
                                                             |     }
    0x00002dfa ldr.w r3, [sl, 0x4c]                          |     r3 = *((sl + 0x4c));
                                                             |     do {
    0x00002dfe ldr.w r1, [sl, 0x2c]                          |         r1 = *((sl + 0x2c));
    0x00002e02 lsrs r2, r2, 0x18                             |         r2 >>= 0x18;
    0x00002e04 strb r2, [r1, r3]                             |         *((r1 + r3)) = r2;
    0x00002e06 ldr.w r2, [sl, 0x258]                         |         r2 = *((sl + 0x258));
    0x00002e0a ldr.w r1, [sl, 0x25c]                         |         r1 = *((sl + 0x25c));
    0x00002e0e ldr.w r3, [sl, 0x4c]                          |         r3 = *((sl + 0x4c));
    0x00002e12 sub.w r0, r1, 8                               |         r0 = r1 - 8;
    0x00002e16 lsls r2, r2, 8                                |         r2 <<= 8;
    0x00002e18 cmp r0, 7                                     |         
    0x00002e1a add.w r3, r3, 1                               |         r3++;
    0x00002e1e strd r2, r0, [sl, 0x258]                      |         __asm ("strd r2, r0, [sl, 0x258]");
    0x00002e22 str.w r3, [sl, 0x4c]                          |         __asm ("str.w r3, [sl, 0x4c]");
    0x00002e26 bgt 0x2dfe                                    |         
                                                             |     } while (r0 > 7);
                                                             | label_31:
    0x00002e28 rsb.w r0, r0, 0x18                            |     r0 = 0x18 - r0;
    0x00002e2c movs r3, 0x59                                 |     r3 = 0x59;
    0x00002e2e lsls r3, r0                                   |     r3 <<= r0;
    0x00002e30 cmp r1, 7                                     |     
    0x00002e32 str.w r1, [sl, 0x25c]                         |     __asm ("str.w r1, [sl, 0x25c]");
    0x00002e36 orr.w r3, r3, r2                              |     r3 |= r2;
    0x00002e3a str.w r3, [sl, 0x258]                         |     __asm ("str.w r3, [sl, 0x258]");
                                                             |     if (r1 <= 7) {
    0x00002e3e ble.w 0x5dfe                                  |         goto label_50;
                                                             |     }
    0x00002e42 ldr.w r2, [sl, 0x4c]                          |     r2 = *((sl + 0x4c));
                                                             |     do {
    0x00002e46 ldr.w r1, [sl, 0x2c]                          |         r1 = *((sl + 0x2c));
    0x00002e4a lsrs r3, r3, 0x18                             |         r3 >>= 0x18;
    0x00002e4c strb r3, [r1, r2]                             |         *((r1 + r2)) = r3;
    0x00002e4e ldr.w r3, [sl, 0x258]                         |         r3 = *((sl + 0x258));
    0x00002e52 ldr.w r0, [sl, 0x25c]                         |         r0 = *((sl + 0x25c));
    0x00002e56 ldr.w r2, [sl, 0x4c]                          |         r2 = *((sl + 0x4c));
    0x00002e5a sub.w r1, r0, 8                               |         r1 = r0 - 8;
    0x00002e5e lsls r3, r3, 8                                |         r3 <<= 8;
    0x00002e60 cmp r1, 7                                     |         
    0x00002e62 add.w r2, r2, 1                               |         r2++;
    0x00002e66 strd r3, r1, [sl, 0x258]                      |         __asm ("strd r3, r1, [sl, 0x258]");
    0x00002e6a str.w r2, [sl, 0x4c]                          |         __asm ("str.w r2, [sl, 0x4c]");
    0x00002e6e bgt 0x2e46                                    |         
                                                             |     } while (r1 > 7);
                                                             | label_32:
    0x00002e70 rsb.w r1, r1, 0x18                            |     r1 = 0x18 - r1;
    0x00002e74 movs r2, 0x26                                 |     r2 = 0x26;
    0x00002e76 lsls r2, r1                                   |     r2 <<= r1;
    0x00002e78 cmp r0, 7                                     |     
    0x00002e7a str.w r0, [sl, 0x25c]                         |     __asm ("str.w r0, [sl, 0x25c]");
    0x00002e7e orr.w r2, r2, r3                              |     r2 |= r3;
    0x00002e82 str.w r2, [sl, 0x258]                         |     __asm ("str.w r2, [sl, 0x258]");
                                                             |     if (r0 <= 7) {
    0x00002e86 ble.w 0x5e06                                  |         goto label_51;
                                                             |     }
    0x00002e8a ldr.w r3, [sl, 0x4c]                          |     r3 = *((sl + 0x4c));
                                                             |     do {
    0x00002e8e ldr.w r1, [sl, 0x2c]                          |         r1 = *((sl + 0x2c));
    0x00002e92 lsrs r2, r2, 0x18                             |         r2 >>= 0x18;
    0x00002e94 strb r2, [r1, r3]                             |         *((r1 + r3)) = r2;
    0x00002e96 ldr.w r2, [sl, 0x258]                         |         r2 = *((sl + 0x258));
    0x00002e9a ldr.w r1, [sl, 0x25c]                         |         r1 = *((sl + 0x25c));
    0x00002e9e ldr.w r3, [sl, 0x4c]                          |         r3 = *((sl + 0x4c));
    0x00002ea2 sub.w r0, r1, 8                               |         r0 = r1 - 8;
    0x00002ea6 lsls r2, r2, 8                                |         r2 <<= 8;
    0x00002ea8 cmp r0, 7                                     |         
    0x00002eaa add.w r3, r3, 1                               |         r3++;
    0x00002eae strd r2, r0, [sl, 0x258]                      |         __asm ("strd r2, r0, [sl, 0x258]");
    0x00002eb2 str.w r3, [sl, 0x4c]                          |         __asm ("str.w r3, [sl, 0x4c]");
    0x00002eb6 bgt 0x2e8e                                    |         
                                                             |     } while (r0 > 7);
                                                             | label_33:
    0x00002eb8 rsb.w r0, r0, 0x18                            |     r0 = 0x18 - r0;
    0x00002ebc movs r3, 0x53                                 |     r3 = 0x53;
    0x00002ebe lsls r3, r0                                   |     r3 <<= r0;
    0x00002ec0 cmp r1, 7                                     |     
    0x00002ec2 str.w r1, [sl, 0x25c]                         |     __asm ("str.w r1, [sl, 0x25c]");
    0x00002ec6 orr.w r3, r3, r2                              |     r3 |= r2;
    0x00002eca str.w r3, [sl, 0x258]                         |     __asm ("str.w r3, [sl, 0x258]");
                                                             |     if (r1 <= 7) {
    0x00002ece ble.w 0x5e0e                                  |         goto label_52;
                                                             |     }
    0x00002ed2 ldr.w r2, [sl, 0x4c]                          |     r2 = *((sl + 0x4c));
                                                             |     do {
    0x00002ed6 ldr.w r1, [sl, 0x2c]                          |         r1 = *((sl + 0x2c));
    0x00002eda lsrs r3, r3, 0x18                             |         r3 >>= 0x18;
    0x00002edc strb r3, [r1, r2]                             |         *((r1 + r2)) = r3;
    0x00002ede ldr.w r3, [sl, 0x258]                         |         r3 = *((sl + 0x258));
    0x00002ee2 ldr.w r0, [sl, 0x25c]                         |         r0 = *((sl + 0x25c));
    0x00002ee6 ldr.w r2, [sl, 0x4c]                          |         r2 = *((sl + 0x4c));
    0x00002eea sub.w r1, r0, 8                               |         r1 = r0 - 8;
    0x00002eee lsls r3, r3, 8                                |         r3 <<= 8;
    0x00002ef0 cmp r1, 7                                     |         
    0x00002ef2 add.w r2, r2, 1                               |         r2++;
    0x00002ef6 strd r3, r1, [sl, 0x258]                      |         __asm ("strd r3, r1, [sl, 0x258]");
    0x00002efa str.w r2, [sl, 0x4c]                          |         __asm ("str.w r2, [sl, 0x4c]");
    0x00002efe bgt 0x2ed6                                    |         
                                                             |     } while (r1 > 7);
                                                             | label_34:
    0x00002f00 rsb.w r1, r1, 0x18                            |     r1 = 0x18 - r1;
    0x00002f04 movs r2, 0x59                                 |     r2 = 0x59;
    0x00002f06 lsls r2, r1                                   |     r2 <<= r1;
    0x00002f08 str.w r0, [sl, 0x25c]                         |     __asm ("str.w r0, [sl, 0x25c]");
    0x00002f0c ldr.w r1, [sl, 0x260]                         |     r1 = *((sl + 0x260));
    0x00002f10 mov r0, sl                                    |     r0 = sl;
    0x00002f12 orrs r3, r2                                   |     r3 |= r2;
    0x00002f14 str.w r3, [sl, 0x258]                         |     __asm ("str.w r3, [sl, 0x258]");
    0x00002f16 adds r2, 0x58                                 |     r2 += 0x58;
    0x00002f18 bl 0x2bac                                     |     fcn_00002bac (r0, r1);
    0x00002f1c ldrd r3, r2, [sl, 0x258]                      |     __asm ("ldrd r3, r2, [sl, 0x258]");
    0x00002f20 cmp r2, 7                                     |     
                                                             |     if (r2 <= 7) {
    0x00002f22 ble 0x2f50                                    |         goto label_53;
                                                             |     }
    0x00002f24 ldr.w r1, [sl, 0x4c]                          |     r1 = *((sl + 0x4c));
                                                             |     do {
    0x00002f28 ldr.w r2, [sl, 0x2c]                          |         r2 = *((sl + 0x2c));
    0x00002f2c lsrs r3, r3, 0x18                             |         r3 >>= 0x18;
    0x00002f2e strb r3, [r2, r1]                             |         *((r2 + r1)) = r3;
    0x00002f30 ldr.w r3, [sl, 0x258]                         |         r3 = *((sl + 0x258));
    0x00002f34 ldr.w r2, [sl, 0x25c]                         |         r2 = *((sl + 0x25c));
    0x00002f38 ldr.w r1, [sl, 0x4c]                          |         r1 = *((sl + 0x4c));
    0x00002f3c subs r2, 8                                    |         r2 -= 8;
    0x00002f3e lsls r3, r3, 8                                |         r3 <<= 8;
    0x00002f40 cmp r2, 7                                     |         
    0x00002f42 add.w r1, r1, 1                               |         r1++;
    0x00002f46 strd r3, r2, [sl, 0x258]                      |         __asm ("strd r3, r2, [sl, 0x258]");
    0x00002f4a str.w r1, [sl, 0x4c]                          |         __asm ("str.w r1, [sl, 0x4c]");
    0x00002f4e bgt 0x2f28                                    |         
                                                             |     } while (r2 > 7);
                                                             | label_53:
    0x00002f50 adds r2, 1                                    |     r2++;
    0x00002f52 ldr.w r0, [sl, 0x1c]                          |     r0 = *((sl + 0x1c));
    0x00002f56 cmp r2, 8                                     |     
    0x00002f58 str.w r2, [sl, 0x25c]                         |     __asm ("str.w r2, [sl, 0x25c]");
                                                             |     if (r2 != 8) {
    0x00002f5c bne 0x2f8a                                    |         goto label_54;
                                                             |     }
    0x00002f5e ldr.w r1, [sl, 0x4c]                          |     r1 = *((sl + 0x4c));
                                                             |     do {
    0x00002f62 ldr.w r2, [sl, 0x2c]                          |         r2 = *((sl + 0x2c));
    0x00002f66 lsrs r3, r3, 0x18                             |         r3 >>= 0x18;
    0x00002f68 strb r3, [r2, r1]                             |         *((r2 + r1)) = r3;
    0x00002f6a ldr.w r3, [sl, 0x258]                         |         r3 = *((sl + 0x258));
    0x00002f6e ldr.w r2, [sl, 0x25c]                         |         r2 = *((sl + 0x25c));
    0x00002f72 ldr.w r1, [sl, 0x4c]                          |         r1 = *((sl + 0x4c));
    0x00002f76 subs r2, 8                                    |         r2 -= 8;
    0x00002f78 lsls r3, r3, 8                                |         r3 <<= 8;
    0x00002f7a cmp r2, 7                                     |         
    0x00002f7c add.w r1, r1, 1                               |         r1++;
    0x00002f80 strd r3, r2, [sl, 0x258]                      |         __asm ("strd r3, r2, [sl, 0x258]");
    0x00002f84 str.w r1, [sl, 0x4c]                          |         __asm ("str.w r1, [sl, 0x4c]");
    0x00002f88 bgt 0x2f62                                    |         
                                                             |     } while (r2 > 7);
                                                             | label_54:
    0x00002f8a rsb.w r1, r2, 8                               |     r1 = 8 - r2;
    0x00002f8e adds r2, 0x18                                 |     r2 += 0x18;
    0x00002f90 lsl.w r1, r0, r1                              |     r1 = r0 << r1;
    0x00002f94 str.w r2, [sl, 0x25c]                         |     __asm ("str.w r2, [sl, 0x25c]");
    0x00002f98 mov r0, sl                                    |     r0 = sl;
    0x00002f9a orrs r3, r1                                   |     r3 |= r1;
    0x00002f9c str.w r3, [sl, 0x258]                         |     __asm ("str.w r3, [sl, 0x258]");
    0x00002fa0 bl 0x29c8                                     |     fcn_000029c8 (r0);
    0x00002fa4 ldr.w r3, [sl, 0x268]                         |     r3 = *((sl + 0x268));
    0x00002fa8 ldr.w r2, [sl, 0x28]                          |     r2 = *((sl + 0x28));
    0x00002fac cmp r3, 2                                     |     
    0x00002fae str r2, [sp, 0x30]                            |     var_30h = r2;
                                                             |     if (r3 > 2) {
    0x00002fb0 bgt.w 0x5d9a                                  |         goto label_55;
                                                             |     }
                                                             | label_26:
    0x00002fb4 ldr.w r2, [sl, 0x54]                          |     r2 = *((sl + 0x54));
    0x00002fb8 add.w r3, sl, 0x9300                          |     r3 = sl + 0x9300;
    0x00002fbc add.w r1, sl, 0x9900                          |     r1 = sl + 0x9900;
    0x00002fc0 adds r3, 0x24                                 |     r3 += 0x24;
    0x00002fc2 adds r1, 0x30                                 |     r1 += 0x30;
    0x00002fc4 str r3, [sp, 0x84]                            |     var_84h = r3;
    0x00002fc6 str r2, [sp, 0x64]                            |     var_64h = r2;
    0x00002fc8 adds r2, 2                                    |     r2 += 2;
    0x00002fca str r1, [sp, 0x8c]                            |     var_8ch = r1;
    0x00002fcc str r3, [sp, 0x74]                            |     stream = r3;
    0x00002fce str r2, [sp, 0x40]                            |     var_40h = r2;
                                                             |     do {
    0x00002fd0 ldr r2, [sp, 0x40]                            |         r2 = var_40h;
    0x00002fd2 cmp r2, 0                                     |         
                                                             |         if (r2 > 0) {
    0x00002fd4 ble 0x2fe2                                    |             
    0x00002fd6 mov r0, r3                                    |             r0 = r3;
    0x00002fd8 ldr r2, [sp, 0x40]                            |             r2 = var_40h;
    0x00002fda movs r1, 0xf                                  |             r1 = 0xf;
    0x00002fdc blx 0xf10                                     |             r0 = fcn_00000f10 ();
    0x00002fe0 mov r3, r0                                    |             r3 = r0;
                                                             |         }
    0x00002fe2 ldr r2, [sp, 0x8c]                            |         r2 = var_8ch;
    0x00002fe4 add.w r3, r3, 0x102                           |         r3 += 0x102;
    0x00002fe8 cmp r2, r3                                    |         
    0x00002fea bne 0x2fd0                                    |         
                                                             |     } while (r2 != r3);
    0x00002fec ldr.w r7, [sl, 0x274]                         |     r7 = *((sl + 0x274));
    0x00002ff0 cmp r7, 0                                     |     
                                                             |     if (r7 <= 0) {
    0x00002ff2 ble.w 0x5dc0                                  |         goto label_56;
                                                             |     }
                                                             | label_27:
    0x00002ff6 cmp r7, 0xc7                                  |     
                                                             |     if (r7 <= 0xc7) {
    0x00002ff8 ble.w 0x33c0                                  |         goto label_57;
                                                             |     }
    0x00002ffc cmp.w r7, 0x258                               |     
                                                             |     if (r7 < 0x258) {
    0x00003000 blt.w 0x5d3a                                  |         goto label_58;
                                                             |     }
    0x00003004 cmp.w r7, 0x4b0                               |     
                                                             |     if (r7 < 0x4b0) {
    0x00003008 blt.w 0x5dd0                                  |         goto label_59;
                                                             |     }
    0x0000300c cmp.w r7, 0x960                               |     
                                                             |     if (r7 >= 0x960) {
    0x00003010 bge.w 0x5e4e                                  |         goto label_60;
                                                             |     }
    0x00003014 movs r3, 5                                    |     r3 = 5;
    0x00003016 mov r5, r3                                    |     r5 = r3;
    0x00003018 str r3, [sp, 0x60]                            |     var_60h = r3;
    0x0000301a b 0x33c6                                      |     goto label_25;
                                                             | label_44:
    0x0000301c ldr.w r2, [sl, 0x26c]                         |     r2 = *((sl + 0x26c));
    0x00003020 ldr.w r3, [sl, 0x14]                          |     r3 = *((sl + 0x14));
    0x00003024 cmp r2, 1                                     |     
    0x00003026 add r3, r0                                    |     r3 += r0;
    0x00003028 str.w r3, [sl, 0x2c]                          |     __asm ("str.w r3, [sl, 0x2c]");
                                                             |     if (r2 != 1) {
    0x0000302c beq 0x3078                                    |         
                                                             | label_2:
    0x0000302e ldr r3, [sp, 0xac]                            |         r3 = var_ach;
    0x00003030 cmp r3, 0                                     |         
                                                             |         if (r3 != 0) {
    0x00003032 bne.w 0x31bc                                  |             goto label_61;
                                                             |         }
                                                             | label_3:
    0x00003036 ldr.w r2, [pc, 0x4ec]                         |         r2 = *(0x00003524);
    0x0000303a ldr.w r3, [pc, 0x4e4]                         |         r3 = *(0x3522);
    0x0000303e add r2, pc                                    |         r2 += pc;
    0x00003040 ldr r3, [r2, r3]                              |         r3 = *((r2 + r3));
    0x00003042 ldr r2, [r3]                                  |         r2 = *(0x3522);
    0x00003044 ldr r3, [sp, 0xec]                            |         r3 = var_ech;
    0x00003046 eors r2, r3                                   |         r2 ^= r3;
    0x00003048 mov.w r3, 0                                   |         r3 = 0;
                                                             |         if (r2 != r3) {
    0x0000304c bne.w 0x5de2                                  |             goto label_62;
                                                             |         }
    0x00003050 add sp, 0xf4                                  |         
    0x00003052 vpop {d8}                                     |         __asm ("vpop {d8}");
    0x00003056 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}    |         
                                                             | label_45:
    0x0000305a ldr r5, [sp, 0x4c]                            |         r5 = var_4ch;
    0x0000305c ldr.w r4, [pc, 0x4c8]                         |         r4 = *(0x3528);
    0x00003060 ldr r4, [r5, r4]                              |         r4 = *((r5 + r4));
    0x00003062 str r2, [sp]                                  |         *(sp) = r2;
    0x00003064 ldr.w r2, [pc, 0x4c4]                         |         
    0x00003068 strd r1, r0, [sp, 4]                          |         __asm ("strd r1, r0, [var_4h]");
    0x0000306c movs r1, 1                                    |         r1 = 1;
    0x0000306e ldr r0, [r4]                                  |         r0 = *(0x3528);
    0x00003070 add r2, pc                                    |         r2 = 0x65a0;
    0x00003072 blx 0xf50                                     |         fcn_00000f50 ();
    0x00003076 b 0x2d3c                                      |         goto label_0;
                                                             |     }
                                                             | label_46:
    0x00003078 mov r0, sl                                    |     r0 = sl;
    0x0000307a blx 0xf1c                                     |     fcn_00000f1c ();
    0x0000307e ldrd r1, r3, [sl, 0x258]                      |     __asm ("ldrd r1, r3, [sl, 0x258]");
    0x00003082 cmp r3, 7                                     |     
                                                             |     if (r3 <= 7) {
    0x00003084 ble.w 0x5e1e                                  |         goto label_63;
                                                             |     }
    0x00003088 ldr.w r0, [sl, 0x4c]                          |     r0 = *((sl + 0x4c));
                                                             |     do {
    0x0000308c ldr.w r3, [sl, 0x2c]                          |         r3 = *((sl + 0x2c));
    0x00003090 lsrs r1, r1, 0x18                             |         r1 >>= 0x18;
    0x00003092 strb r1, [r3, r0]                             |         *((r3 + r0)) = r1;
    0x00003094 ldr.w r1, [sl, 0x258]                         |         r1 = *((sl + 0x258));
    0x00003098 ldr.w r2, [sl, 0x25c]                         |         r2 = *((sl + 0x25c));
    0x0000309c ldr.w r0, [sl, 0x4c]                          |         r0 = *((sl + 0x4c));
    0x000030a0 sub.w r3, r2, 8                               |         r3 = r2 - 8;
    0x000030a4 lsls r1, r1, 8                                |         r1 <<= 8;
    0x000030a6 cmp r3, 7                                     |         
    0x000030a8 add.w r0, r0, 1                               |         r0++;
    0x000030ac strd r1, r3, [sl, 0x258]                      |         __asm ("strd r1, r3, [sl, 0x258]");
    0x000030b0 str.w r0, [sl, 0x4c]                          |         __asm ("str.w r0, [sl, 0x4c]");
    0x000030b4 bgt 0x308c                                    |         
                                                             |     } while (r3 > 7);
                                                             | label_36:
    0x000030b6 rsb.w r0, r3, 0x18                            |     r0 = 0x18 - r3;
    0x000030ba movs r3, 0x42                                 |     r3 = 0x42;
    0x000030bc lsls r3, r0                                   |     r3 <<= r0;
    0x000030be cmp r2, 7                                     |     
    0x000030c0 str.w r2, [sl, 0x25c]                         |     __asm ("str.w r2, [sl, 0x25c]");
    0x000030c4 orr.w r3, r3, r1                              |     r3 |= r1;
    0x000030c8 str.w r3, [sl, 0x258]                         |     __asm ("str.w r3, [sl, 0x258]");
                                                             |     if (r2 <= 7) {
    0x000030cc ble.w 0x5dda                                  |         goto label_64;
                                                             |     }
    0x000030d0 ldr.w r1, [sl, 0x4c]                          |     r1 = *((sl + 0x4c));
                                                             |     do {
    0x000030d4 ldr.w r2, [sl, 0x2c]                          |         r2 = *((sl + 0x2c));
    0x000030d8 lsrs r3, r3, 0x18                             |         r3 >>= 0x18;
    0x000030da strb r3, [r2, r1]                             |         *((r2 + r1)) = r3;
    0x000030dc ldr.w r3, [sl, 0x258]                         |         r3 = *((sl + 0x258));
    0x000030e0 ldr.w r0, [sl, 0x25c]                         |         r0 = *((sl + 0x25c));
    0x000030e4 ldr.w r1, [sl, 0x4c]                          |         r1 = *((sl + 0x4c));
    0x000030e8 sub.w r2, r0, 8                               |         r2 = r0 - 8;
    0x000030ec lsls r3, r3, 8                                |         r3 <<= 8;
    0x000030ee cmp r2, 7                                     |         
    0x000030f0 add.w r1, r1, 1                               |         r1++;
    0x000030f4 strd r3, r2, [sl, 0x258]                      |         __asm ("strd r3, r2, [sl, 0x258]");
    0x000030f8 str.w r1, [sl, 0x4c]                          |         __asm ("str.w r1, [sl, 0x4c]");
    0x000030fc bgt 0x30d4                                    |         
                                                             |     } while (r2 > 7);
                                                             | label_28:
    0x000030fe rsb.w r2, r2, 0x18                            |     r2 = 0x18 - r2;
    0x00003102 movs r1, 0x5a                                 |     r1 = 0x5a;
    0x00003104 lsl.w r2, r1, r2                              |     r2 = r1 << r2;
    0x00003108 cmp r0, 7                                     |     
    0x0000310a str.w r0, [sl, 0x25c]                         |     __asm ("str.w r0, [sl, 0x25c]");
    0x0000310e orr.w r2, r2, r3                              |     r2 |= r3;
    0x00003112 str.w r2, [sl, 0x258]                         |     __asm ("str.w r2, [sl, 0x258]");
                                                             |     if (r0 <= 7) {
    0x00003116 ble.w 0x5e60                                  |         goto label_65;
                                                             |     }
    0x0000311a ldr.w r3, [sl, 0x4c]                          |     r3 = *((sl + 0x4c));
                                                             |     do {
    0x0000311e ldr.w r1, [sl, 0x2c]                          |         r1 = *((sl + 0x2c));
    0x00003122 lsrs r2, r2, 0x18                             |         r2 >>= 0x18;
    0x00003124 strb r2, [r1, r3]                             |         *((r1 + r3)) = r2;
    0x00003126 ldr.w r2, [sl, 0x258]                         |         r2 = *((sl + 0x258));
    0x0000312a ldr.w r1, [sl, 0x25c]                         |         r1 = *((sl + 0x25c));
    0x0000312e ldr.w r3, [sl, 0x4c]                          |         r3 = *((sl + 0x4c));
    0x00003132 sub.w r0, r1, 8                               |         r0 = r1 - 8;
    0x00003136 lsls r2, r2, 8                                |         r2 <<= 8;
    0x00003138 cmp r0, 7                                     |         
    0x0000313a add.w r3, r3, 1                               |         r3++;
    0x0000313e strd r2, r0, [sl, 0x258]                      |         __asm ("strd r2, r0, [sl, 0x258]");
    0x00003142 str.w r3, [sl, 0x4c]                          |         __asm ("str.w r3, [sl, 0x4c]");
    0x00003146 bgt 0x311e                                    |         
                                                             |     } while (r0 > 7);
                                                             | label_43:
    0x00003148 ldr.w r3, [sl, 0x270]                         |     r3 = *((sl + 0x270));
    0x0000314c rsb.w r0, r0, 0x18                            |     r0 = 0x18 - r0;
    0x00003150 cmp r1, 7                                     |     
    0x00003152 str.w r1, [sl, 0x25c]                         |     __asm ("str.w r1, [sl, 0x25c]");
    0x00003156 add.w r3, r3, 0x30                            |     r3 += 0x30;
    0x0000315a uxtb r4, r3                                   |     r4 = (int8_t) r3;
    0x0000315c mov.w r3, 0x68                                |     r3 = 0x68;
    0x00003160 lsl.w r3, r3, r0                              |     r3 <<= r0;
    0x00003164 orr.w r3, r3, r2                              |     r3 |= r2;
    0x00003168 str.w r3, [sl, 0x258]                         |     __asm ("str.w r3, [sl, 0x258]");
                                                             |     if (r1 <= 7) {
    0x0000316c ble.w 0x5e58                                  |         goto label_66;
                                                             |     }
    0x00003170 ldr.w r2, [sl, 0x4c]                          |     r2 = *((sl + 0x4c));
                                                             |     do {
    0x00003174 ldr.w r1, [sl, 0x2c]                          |         r1 = *((sl + 0x2c));
    0x00003178 lsrs r3, r3, 0x18                             |         r3 >>= 0x18;
    0x0000317a strb r3, [r1, r2]                             |         *((r1 + r2)) = r3;
    0x0000317c ldr.w r3, [sl, 0x258]                         |         r3 = *((sl + 0x258));
    0x00003180 ldr.w r0, [sl, 0x25c]                         |         r0 = *((sl + 0x25c));
    0x00003184 ldr.w r2, [sl, 0x4c]                          |         r2 = *((sl + 0x4c));
    0x00003188 sub.w r1, r0, 8                               |         r1 = r0 - 8;
    0x0000318c lsls r3, r3, 8                                |         r3 <<= 8;
    0x0000318e cmp r1, 7                                     |         
    0x00003190 add.w r2, r2, 1                               |         r2++;
    0x00003194 strd r3, r1, [sl, 0x258]                      |         __asm ("strd r3, r1, [sl, 0x258]");
    0x00003198 str.w r2, [sl, 0x4c]                          |         __asm ("str.w r2, [sl, 0x4c]");
    0x0000319c bgt 0x3174                                    |         
                                                             |     } while (r1 > 7);
                                                             | label_42:
    0x0000319e rsb.w r1, r1, 0x18                            |     r1 = 0x18 - r1;
    0x000031a2 str.w r0, [sl, 0x25c]                         |     __asm ("str.w r0, [sl, 0x25c]");
    0x000031a6 lsl.w r2, r4, r1                              |     r2 = r4 << r1;
    0x000031aa orrs r3, r2                                   |     r3 |= r2;
    0x000031ac ldr.w r2, [sl, 0x44]                          |     r2 = *((sl + 0x44));
    0x000031b0 str.w r3, [sl, 0x258]                         |     __asm ("str.w r3, [sl, 0x258]");
    0x000031b4 cmp r2, 0                                     |     
                                                             |     if (r2 > 0) {
    0x000031b6 bgt.w 0x2d60                                  |         goto label_1;
                                                             |     }
    0x000031ba b 0x302e                                      |     goto label_2;
                                                             | label_61:
    0x000031bc ldrd r1, r3, [sl, 0x258]                      |     __asm ("ldrd r1, r3, [sl, 0x258]");
    0x000031c0 cmp r3, 7                                     |     
                                                             |     if (r3 <= 7) {
    0x000031c2 ble.w 0x5e26                                  |         goto label_67;
                                                             |     }
    0x000031c6 ldr.w r0, [sl, 0x4c]                          |     r0 = *((sl + 0x4c));
                                                             |     do {
    0x000031ca ldr.w r3, [sl, 0x2c]                          |         r3 = *((sl + 0x2c));
    0x000031ce lsrs r1, r1, 0x18                             |         r1 >>= 0x18;
    0x000031d0 strb r1, [r3, r0]                             |         *((r3 + r0)) = r1;
    0x000031d2 ldr.w r1, [sl, 0x258]                         |         r1 = *((sl + 0x258));
    0x000031d6 ldr.w r2, [sl, 0x25c]                         |         r2 = *((sl + 0x25c));
    0x000031da ldr.w r0, [sl, 0x4c]                          |         r0 = *((sl + 0x4c));
    0x000031de sub.w r3, r2, 8                               |         r3 = r2 - 8;
    0x000031e2 lsls r1, r1, 8                                |         r1 <<= 8;
    0x000031e4 cmp r3, 7                                     |         
    0x000031e6 add.w r0, r0, 1                               |         r0++;
    0x000031ea strd r1, r3, [sl, 0x258]                      |         __asm ("strd r1, r3, [sl, 0x258]");
    0x000031ee str.w r0, [sl, 0x4c]                          |         __asm ("str.w r0, [sl, 0x4c]");
    0x000031f2 bgt 0x31ca                                    |         
                                                             |     } while (r3 > 7);
                                                             | label_37:
    0x000031f4 rsb.w r0, r3, 0x18                            |     r0 = 0x18 - r3;
    0x000031f8 movs r3, 0x17                                 |     r3 = 0x17;
    0x000031fa lsls r3, r0                                   |     r3 <<= r0;
    0x000031fc cmp r2, 7                                     |     
    0x000031fe str.w r2, [sl, 0x25c]                         |     __asm ("str.w r2, [sl, 0x25c]");
    0x00003202 orr.w r3, r3, r1                              |     r3 |= r1;
    0x00003206 str.w r3, [sl, 0x258]                         |     __asm ("str.w r3, [sl, 0x258]");
                                                             |     if (r2 <= 7) {
    0x0000320a ble.w 0x5e2e                                  |         goto label_68;
                                                             |     }
    0x0000320e ldr.w r1, [sl, 0x4c]                          |     r1 = *((sl + 0x4c));
                                                             |     do {
    0x00003212 ldr.w r2, [sl, 0x2c]                          |         r2 = *((sl + 0x2c));
    0x00003216 lsrs r3, r3, 0x18                             |         r3 >>= 0x18;
    0x00003218 strb r3, [r2, r1]                             |         *((r2 + r1)) = r3;
    0x0000321a ldr.w r3, [sl, 0x258]                         |         r3 = *((sl + 0x258));
    0x0000321e ldr.w r0, [sl, 0x25c]                         |         r0 = *((sl + 0x25c));
    0x00003222 ldr.w r1, [sl, 0x4c]                          |         r1 = *((sl + 0x4c));
    0x00003226 sub.w r2, r0, 8                               |         r2 = r0 - 8;
    0x0000322a lsls r3, r3, 8                                |         r3 <<= 8;
    0x0000322c cmp r2, 7                                     |         
    0x0000322e add.w r1, r1, 1                               |         r1++;
    0x00003232 strd r3, r2, [sl, 0x258]                      |         __asm ("strd r3, r2, [sl, 0x258]");
    0x00003236 str.w r1, [sl, 0x4c]                          |         __asm ("str.w r1, [sl, 0x4c]");
    0x0000323a bgt 0x3212                                    |         
                                                             |     } while (r2 > 7);
                                                             | label_38:
    0x0000323c rsb.w r1, r2, 0x18                            |     r1 = 0x18 - r2;
    0x00003240 movs r2, 0x72                                 |     r2 = 0x72;
    0x00003242 lsls r2, r1                                   |     r2 <<= r1;
    0x00003244 cmp r0, 7                                     |     
    0x00003246 str.w r0, [sl, 0x25c]                         |     __asm ("str.w r0, [sl, 0x25c]");
    0x0000324a orr.w r2, r2, r3                              |     r2 |= r3;
    0x0000324e str.w r2, [sl, 0x258]                         |     __asm ("str.w r2, [sl, 0x258]");
                                                             |     if (r0 <= 7) {
    0x00003252 ble.w 0x5e36                                  |         goto label_69;
                                                             |     }
    0x00003256 ldr.w r3, [sl, 0x4c]                          |     r3 = *((sl + 0x4c));
                                                             |     do {
    0x0000325a ldr.w r1, [sl, 0x2c]                          |         r1 = *((sl + 0x2c));
    0x0000325e lsrs r2, r2, 0x18                             |         r2 >>= 0x18;
    0x00003260 strb r2, [r1, r3]                             |         *((r1 + r3)) = r2;
    0x00003262 ldr.w r2, [sl, 0x258]                         |         r2 = *((sl + 0x258));
    0x00003266 ldr.w r1, [sl, 0x25c]                         |         r1 = *((sl + 0x25c));
    0x0000326a ldr.w r3, [sl, 0x4c]                          |         r3 = *((sl + 0x4c));
    0x0000326e sub.w r0, r1, 8                               |         r0 = r1 - 8;
    0x00003272 lsls r2, r2, 8                                |         r2 <<= 8;
    0x00003274 cmp r0, 7                                     |         
    0x00003276 add.w r3, r3, 1                               |         r3++;
    0x0000327a strd r2, r0, [sl, 0x258]                      |         __asm ("strd r2, r0, [sl, 0x258]");
    0x0000327e str.w r3, [sl, 0x4c]                          |         __asm ("str.w r3, [sl, 0x4c]");
    0x00003282 bgt 0x325a                                    |         
                                                             |     } while (r0 > 7);
                                                             | label_39:
    0x00003284 rsb.w r0, r0, 0x18                            |     r0 = 0x18 - r0;
    0x00003288 movs r3, 0x45                                 |     r3 = 0x45;
    0x0000328a lsls r3, r0                                   |     r3 <<= r0;
    0x0000328c cmp r1, 7                                     |     
    0x0000328e str.w r1, [sl, 0x25c]                         |     __asm ("str.w r1, [sl, 0x25c]");
    0x00003292 orr.w r3, r3, r2                              |     r3 |= r2;
    0x00003296 str.w r3, [sl, 0x258]                         |     __asm ("str.w r3, [sl, 0x258]");
                                                             |     if (r1 <= 7) {
    0x0000329a ble.w 0x5e3e                                  |         goto label_70;
                                                             |     }
    0x0000329e ldr.w r2, [sl, 0x4c]                          |     r2 = *((sl + 0x4c));
                                                             |     do {
    0x000032a2 ldr.w r1, [sl, 0x2c]                          |         r1 = *((sl + 0x2c));
    0x000032a6 lsrs r3, r3, 0x18                             |         r3 >>= 0x18;
    0x000032a8 strb r3, [r1, r2]                             |         *((r1 + r2)) = r3;
    0x000032aa ldr.w r3, [sl, 0x258]                         |         r3 = *((sl + 0x258));
    0x000032ae ldr.w r0, [sl, 0x25c]                         |         r0 = *((sl + 0x25c));
    0x000032b2 ldr.w r2, [sl, 0x4c]                          |         r2 = *((sl + 0x4c));
    0x000032b6 sub.w r1, r0, 8                               |         r1 = r0 - 8;
    0x000032ba lsls r3, r3, 8                                |         r3 <<= 8;
    0x000032bc cmp r1, 7                                     |         
    0x000032be add.w r2, r2, 1                               |         r2++;
    0x000032c2 strd r3, r1, [sl, 0x258]                      |         __asm ("strd r3, r1, [sl, 0x258]");
    0x000032c6 str.w r2, [sl, 0x4c]                          |         __asm ("str.w r2, [sl, 0x4c]");
    0x000032ca bgt 0x32a2                                    |         
                                                             |     } while (r1 > 7);
                                                             | label_40:
    0x000032cc rsb.w r1, r1, 0x18                            |     r1 = 0x18 - r1;
    0x000032d0 movs r2, 0x38                                 |     r2 = 0x38;
    0x000032d2 lsls r2, r1                                   |     r2 <<= r1;
    0x000032d4 cmp r0, 7                                     |     
    0x000032d6 str.w r0, [sl, 0x25c]                         |     __asm ("str.w r0, [sl, 0x25c]");
    0x000032da orr.w r2, r2, r3                              |     r2 |= r3;
    0x000032de str.w r2, [sl, 0x258]                         |     __asm ("str.w r2, [sl, 0x258]");
                                                             |     if (r0 <= 7) {
    0x000032e2 ble.w 0x5e46                                  |         goto label_71;
                                                             |     }
    0x000032e6 ldr.w r3, [sl, 0x4c]                          |     r3 = *((sl + 0x4c));
                                                             |     do {
    0x000032ea ldr.w r1, [sl, 0x2c]                          |         r1 = *((sl + 0x2c));
    0x000032ee lsrs r2, r2, 0x18                             |         r2 >>= 0x18;
    0x000032f0 strb r2, [r1, r3]                             |         *((r1 + r3)) = r2;
    0x000032f2 ldr.w r2, [sl, 0x258]                         |         r2 = *((sl + 0x258));
    0x000032f6 ldr.w r1, [sl, 0x25c]                         |         r1 = *((sl + 0x25c));
    0x000032fa ldr.w r3, [sl, 0x4c]                          |         r3 = *((sl + 0x4c));
    0x000032fe sub.w r0, r1, 8                               |         r0 = r1 - 8;
    0x00003302 lsls r2, r2, 8                                |         r2 <<= 8;
    0x00003304 cmp r0, 7                                     |         
    0x00003306 add.w r3, r3, 1                               |         r3++;
    0x0000330a strd r2, r0, [sl, 0x258]                      |         __asm ("strd r2, r0, [sl, 0x258]");
    0x0000330e str.w r3, [sl, 0x4c]                          |         __asm ("str.w r3, [sl, 0x4c]");
    0x00003312 bgt 0x32ea                                    |         
                                                             |     } while (r0 > 7);
                                                             | label_41:
    0x00003314 rsb.w r0, r0, 0x18                            |     r0 = 0x18 - r0;
    0x00003318 movs r3, 0x50                                 |     r3 = 0x50;
    0x0000331a lsls r3, r0                                   |     r3 <<= r0;
    0x0000331c cmp r1, 7                                     |     
    0x0000331e str.w r1, [sl, 0x25c]                         |     __asm ("str.w r1, [sl, 0x25c]");
    0x00003322 orr.w r3, r3, r2                              |     r3 |= r2;
    0x00003326 str.w r3, [sl, 0x258]                         |     __asm ("str.w r3, [sl, 0x258]");
                                                             |     if (r1 <= 7) {
    0x0000332a ble.w 0x5e16                                  |         goto label_72;
                                                             |     }
    0x0000332e ldr.w r2, [sl, 0x4c]                          |     r2 = *((sl + 0x4c));
                                                             |     do {
    0x00003332 ldr.w r1, [sl, 0x2c]                          |         r1 = *((sl + 0x2c));
    0x00003336 lsrs r3, r3, 0x18                             |         r3 >>= 0x18;
    0x00003338 strb r3, [r1, r2]                             |         *((r1 + r2)) = r3;
    0x0000333a ldr.w r3, [sl, 0x258]                         |         r3 = *((sl + 0x258));
    0x0000333e ldr.w r0, [sl, 0x25c]                         |         r0 = *((sl + 0x25c));
    0x00003342 ldr.w r2, [sl, 0x4c]                          |         r2 = *((sl + 0x4c));
    0x00003346 sub.w r1, r0, 8                               |         r1 = r0 - 8;
    0x0000334a lsls r3, r3, 8                                |         r3 <<= 8;
    0x0000334c cmp r1, 7                                     |         
    0x0000334e add.w r2, r2, 1                               |         r2++;
    0x00003352 strd r3, r1, [sl, 0x258]                      |         __asm ("strd r3, r1, [sl, 0x258]");
    0x00003356 str.w r2, [sl, 0x4c]                          |         __asm ("str.w r2, [sl, 0x4c]");
    0x0000335a bgt 0x3332                                    |         
                                                             |     } while (r1 > 7);
                                                             | label_35:
    0x0000335c rsb.w r2, r1, 0x18                            |     r2 = 0x18 - r1;
    0x00003360 str.w r0, [sl, 0x25c]                         |     __asm ("str.w r0, [sl, 0x25c]");
    0x00003364 movs r0, 0x90                                 |     r0 = 0x90;
    0x00003366 ldr.w r1, [sl, 0x264]                         |     r1 = *((sl + 0x264));
    0x0000336a lsl.w r2, r0, r2                              |     r2 = r0 << r2;
    0x0000336e mov r0, sl                                    |     r0 = sl;
    0x00003370 orrs r3, r2                                   |     r3 |= r2;
    0x00003372 str.w r3, [sl, 0x258]                         |     __asm ("str.w r3, [sl, 0x258]");
    0x00003376 bl 0x2bac                                     |     fcn_00002bac (r0, r1);
    0x0000337a ldr.w r3, [sl, 0x268]                         |     r3 = *((sl + 0x268));
    0x0000337e cmp r3, 1                                     |     
                                                             |     if (r3 > 1) {
    0x00003380 bgt.w 0x5d20                                  |         goto label_73;
                                                             |     }
                                                             | label_24:
    0x00003384 ldr.w r3, [sl, 0x25c]                         |     r3 = *((sl + 0x25c));
    0x00003388 cmp r3, 0                                     |     
                                                             |     if (r3 <= 0) {
    0x0000338a ble.w 0x3036                                  |         goto label_3;
                                                             |     }
    0x0000338e ldr.w r3, [sl, 0x258]                         |     r3 = *((sl + 0x258));
    0x00003392 ldr.w r2, [sl, 0x4c]                          |     r2 = *((sl + 0x4c));
                                                             |     do {
    0x00003396 ldr.w r1, [sl, 0x2c]                          |         r1 = *((sl + 0x2c));
    0x0000339a lsrs r3, r3, 0x18                             |         r3 >>= 0x18;
    0x0000339c strb r3, [r1, r2]                             |         *((r1 + r2)) = r3;
    0x0000339e ldr.w r3, [sl, 0x258]                         |         r3 = *((sl + 0x258));
    0x000033a2 ldr.w r1, [sl, 0x25c]                         |         r1 = *((sl + 0x25c));
    0x000033a6 ldr.w r2, [sl, 0x4c]                          |         r2 = *((sl + 0x4c));
    0x000033aa subs r1, 8                                    |         r1 -= 8;
    0x000033ac lsls r3, r3, 8                                |         r3 <<= 8;
    0x000033ae cmp r1, 0                                     |         
    0x000033b0 add.w r2, r2, 1                               |         r2++;
    0x000033b4 strd r3, r1, [sl, 0x258]                      |         __asm ("strd r3, r1, [sl, 0x258]");
    0x000033b8 str.w r2, [sl, 0x4c]                          |         __asm ("str.w r2, [sl, 0x4c]");
    0x000033bc bgt 0x3396                                    |         
                                                             |     } while (r1 > 0);
    0x000033be b 0x3036                                      |     goto label_3;
                                                             | label_57:
    0x000033c0 movs r3, 2                                    |     r3 = 2;
    0x000033c2 mov r5, r3                                    |     r5 = r3;
    0x000033c4 str r3, [sp, 0x60]                            |     var_60h = r3;
                                                             | label_25:
    0x000033c6 subs r3, r5, 1                                |     r3 = r5 - 1;
    0x000033c8 ldr.w r2, [sl, 0x268]                         |     r2 = *((sl + 0x268));
    0x000033cc add.w r3, r3, r3, lsl 7                       |     r3 += (r3 << 7);
    0x000033d0 vldr d8, [pc, 0x13c]                          |     __asm ("vldr d8, [0x00003514]");
    0x000033d4 movs r6, 0                                    |     r6 = 0;
    0x000033d6 str r7, [sp, 0x28]                            |     var_28h = r7;
    0x000033d8 lsls r3, r3, 1                                |     r3 <<= 1;
    0x000033da str r2, [sp, 0x6c]                            |     var_6ch = r2;
    0x000033dc ldr r2, [pc, 0x150]                           |     
    0x000033de str r3, [sp, 0x18]                            |     var_18h = r3;
    0x000033e0 add.w r3, r3, 0x9300                          |     r3 += 0x9300;
    0x000033e4 adds r3, 0x23                                 |     r3 += 0x23;
    0x000033e6 str r5, [sp, 0x44]                            |     var_44h = r5;
    0x000033e8 add.w sb, sl, r3                              |     sb = sl + r3;
    0x000033ec ldr r3, [sp, 0x64]                            |     r3 = var_64h;
    0x000033ee add r2, pc                                    |     r2 = 0x6922;
    0x000033f0 str r2, [sp, 0x20]                            |     var_20h = r2;
    0x000033f2 adds r3, 1                                    |     r3++;
    0x000033f4 str r3, [sp, 0x1c]                            |     var_1ch = r3;
                                                             | label_4:
    0x000033f6 ldr.w r8, [sp, 0x44]                          |     r8 = var_44h;
    0x000033fa mov r0, r7                                    |     r0 = r7;
    0x000033fc subs r4, r6, 1                                |     r4 = r6 - 1;
    0x000033fe mov r1, r8                                    |     r1 = r8;
    0x00003400 bl 0x9c70                                     |     fcn_00009c70 (r0, r1);
    0x00003404 subs.w ip, r5, r8                             |     
    0x00003408 it ne                                         |     
                                                             |     if (ip == r5) {
    0x0000340a movne ip, 1                                   |         
                                                             |     }
    0x0000340e subs.w lr, r8, 1                              |     lr = r8 - 1;
    0x00003412 it ne                                         |     
                                                             |     if (lr == r8) {
    0x00003414 movne lr, 1                                   |         lr = 1;
                                                             |     }
    0x00003416 lsrs r1, r0, 0x18                             |     r1 = r0 >> 0x18;
    0x00003418 subs r1, r0, 0                                |     r1 = r0 - 0;
                                                             |     if (r1 <= r0) {
    0x0000341a ble.w 0x5d18                                  |         goto label_74;
                                                             |     }
    0x0000341e ldr r3, [sp, 0x1c]                            |     r3 = var_1ch;
    0x00003420 cmp r4, r3                                    |     
                                                             |     if (r4 >= r3) {
    0x00003422 bge.w 0x5d18                                  |         goto label_74;
                                                             |     }
    0x00003426 add.w r3, sl, r6, lsl 2                       |     r3 = sl + (r6 << 2);
    0x0000342a ldr r0, [sp, 0x64]                            |     r0 = var_64h;
    0x0000342c mov.w fp, 0                                   |     
    0x00003430 add.w r3, r3, 0x274                           |     r3 += 0x274;
    0x00003434 b 0x343a                                      |     
                                                             |     while (r1 > fp) {
    0x00003436 cmp r0, r2                                    |         
                                                             |         if (r0 == r2) {
    0x00003438 beq 0x344a                                    |             goto label_75;
                                                             |         }
    0x0000343a ldr r2, [r3, 4]!                              |         r2 = *((r3 += 4));
    0x0000343e add fp, r2                                    |         
    0x00003440 mov r2, r4                                    |         r2 = r4;
    0x00003442 cmp r1, fp                                    |         
    0x00003444 add.w r4, r4, 1                               |         r4++;
    0x00003448 bgt 0x3436                                    |         
                                                             |     }
                                                             | label_75:
    0x0000344a and.w r3, ip, lr                              |     r3 = ip & lr;
    0x0000344e cmp r4, r6                                    |     
    0x00003450 ite le                                        |     
                                                             |     if (r4 > r6) {
    0x00003452 movle r3, 0                                   |         r3 = 0;
                                                             |     }
                                                             |     if (r4 <= r6) {
    0x00003454 andgt r3, r3, 1                               |         r3 &= 1;
                                                             |     }
                                                             |     if (r3 != 0) {
    0x00003458 cbnz r3, 0x34a0                               |         goto label_76;
                                                             |     }
                                                             | label_23:
    0x0000345a ldr r3, [sp, 0x6c]                            |     r3 = var_6ch;
    0x0000345c add.w r8, r4, 1                               |     r8 = r4 + 1;
    0x00003460 cmp r3, 2                                     |     
                                                             |     if (r3 > 2) {
    0x00003462 bgt 0x34c4                                    |         goto label_77;
                                                             |     }
                                                             | label_5:
    0x00003464 ldr r3, [sp, 0x44]                            |     r3 = var_44h;
    0x00003466 subs r3, 1                                    |     r3--;
    0x00003468 str r3, [sp, 0x44]                            |     var_44h = r3;
    0x0000346a ldr r3, [sp, 0x40]                            |     r3 = var_40h;
    0x0000346c cmp r3, 0                                     |     
                                                             |     if (r3 <= 0) {
    0x0000346e ble 0x348e                                    |         goto label_78;
                                                             |     }
    0x00003470 ldr r0, [sp, 0x40]                            |     r0 = var_40h;
    0x00003472 mov r2, sb                                    |     r2 = sb;
    0x00003474 movs r3, 0                                    |     r3 = 0;
                                                             |     do {
    0x00003476 cmp r3, r6                                    |         
    0x00003478 it ge                                         |         
                                                             |         if (r3 >= r6) {
    0x0000347a cmpge r4, r3                                  |             __asm ("cmpge r4, r3");
                                                             |         }
    0x0000347c add.w r3, r3, 1                               |         r3++;
    0x00003480 ite ge                                        |         
                                                             |         if (r3 < r6) {
    0x00003482 movge r1, 0                                   |             r1 = 0;
                                                             |         }
                                                             |         if (r3 >= r6) {
    0x00003484 movlt r1, 0xf                                 |             r1 = 0xf;
                                                             |         }
    0x00003486 cmp r0, r3                                    |         
    0x00003488 strb r1, [r2, 1]!                             |         *((r2 += 1)) = r1;
    0x0000348c bne 0x3476                                    |         
                                                             |     } while (r0 != r3);
                                                             | label_78:
    0x0000348e ldr r3, [sp, 0x44]                            |     r3 = var_44h;
    0x00003490 sub.w r7, r7, fp                              |     r7 -= fp;
    0x00003494 sub.w sb, sb, 0x102                           |     sb -= 0x102;
    0x00003498 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x0000349a beq 0x3534                                    |         goto label_79;
                                                             |     }
    0x0000349c mov r6, r8                                    |     r6 = r8;
    0x0000349e b 0x33f6                                      |     goto label_4;
                                                             | label_76:
    0x000034a0 ldr r3, [sp, 0x44]                            |     r3 = var_44h;
    0x000034a2 subs r3, r5, r3                               |     r3 = r5 - r3;
    0x000034a4 lsls r3, r3, 0x1f                             |     r3 <<= 0x1f;
    0x000034a6 ittte mi                                      |     
                                                             |     if (r3 >= r3) {
    0x000034a8 addmi r3, r4, 0x9e                            |         r3 = r4 + 0x9e;
                                                             |     }
                                                             |     if (r3 >= r3) {
    0x000034ac movmi r8, r4                                  |         r8 = r4;
                                                             |     }
                                                             |     if (r3 < r3) {
    0x000034ae ldrpl r3, [sl, r3, lsl 2]                     |         offset_0 = r3 << 2;
                                                             |         r3 = *((sl + offset_0));
                                                             |     }
                                                             |     if (r3 >= r3) {
    0x000034b2 add.w r8, r2, 2                               |         r8 = r2 + 2;
                                                             |     }
    0x000034b6 itt mi                                        |     
                                                             |     if (r3 >= r3) {
    0x000034b8 movmi r4, r2                                  |         r4 = r2;
                                                             |     }
                                                             |     if (r3 >= r3) {
    0x000034ba submi fp, fp, r3                              |         
                                                             |     }
    0x000034be ldr r3, [sp, 0x6c]                            |     r3 = var_6ch;
    0x000034c0 cmp r3, 2                                     |     
                                                             |     if (r3 <= 2) {
    0x000034c2 ble 0x3464                                    |         goto label_5;
                                                             |     }
                                                             | label_77:
    0x000034c4 vldr s15, [sp, 0x28]                          |     __asm ("vldr s15, [sp, 0x28]");
    0x000034c8 movs r1, 1                                    |     r1 = 1;
    0x000034ca ldr r2, [sp, 0x4c]                            |     r2 = var_4ch;
    0x000034cc ldr r3, [pc, 0x58]                            |     r3 = *(0x3528);
    0x000034ce vcvt.f32.s32 s14, s15                         |     __asm ("vcvt.f32.s32 s14, s15");
    0x000034d2 vmov s15, fp                                  |     __asm ("vmov s15, fp");
    0x000034d6 ldr r3, [r2, r3]                              |     r3 = *((r2 + r3));
    0x000034d8 vcvt.f32.s32 s15, s15                         |     __asm ("vcvt.f32.s32 s15, s15");
    0x000034dc strd r4, fp, [sp, 4]                          |     __asm ("strd r4, fp, [var_4h]");
    0x000034e0 str r6, [sp]                                  |     *(sp) = r6;
    0x000034e2 ldr r2, [sp, 0x20]                            |     r2 = var_20h;
    0x000034e4 vcvt.f64.f32 d16, s15                         |     __asm ("vcvt.f64.f32 d16, s15");
    0x000034e8 vcvt.f64.f32 d7, s14                          |     __asm ("vcvt.f64.f32 d7, s14");
    0x000034ec ldr r0, [r3]                                  |     r0 = *(0x3528);
    0x000034ee ldr r3, [sp, 0x44]                            |     r3 = var_44h;
    0x000034f0 vmul.f64 d16, d16, d8                         |     __asm ("vmul.f64 d16, d16, d8");
    0x000034f4 vdiv.f64 d18, d16, d7                         |     __asm ("vdiv.f64 d18, d16, d7");
    0x000034f8 vstr d18, [sp, 0x10]                          |     __asm ("vstr d18, [sp, 0x10]");
    0x000034fc blx 0xf50                                     |     fcn_00000f50 ();
    0x00003500 ldr.w r3, [sl, 0x274]                         |     r3 = *((sl + 0x274));
    0x00003504 str r3, [sp, 0x28]                            |     var_28h = r3;
    0x00003506 ldr.w r3, [sl, 0x268]                         |     r3 = *((sl + 0x268));
    0x0000350a str r3, [sp, 0x6c]                            |     var_6ch = r3;
    0x0000350c b 0x3464                                      |     goto label_5;
                                                             | label_79:
    0x00003534 ldr r3, [sp, 0x18]                            |     r3 = var_18h;
    0x00003536 movw r6, 0xf981                               |     
    0x0000353a add.w r4, sl, 0xb100                          |     r4 = sl + 0xb100;
    0x0000353e movt r6, 0xffff                               |     r6 = 0xfffff981;
    0x00003542 lsls r0, r5, 1                                |     r0 = r5 << 1;
    0x00003544 adds r4, 0x60                                 |     r4 += 0x60;
    0x00003546 add.w r2, r3, 0x102                           |     r2 = r3 + 0x102;
    0x0000354a add.w r3, r5, r5, lsl 7                       |     r3 = r5 + (r5 << 7);
    0x0000354e sub.w r6, r6, sl                              |     r6 -= sl;
    0x00003552 lsls r1, r5, 2                                |     r1 = r5 << 2;
    0x00003554 lsls r3, r3, 3                                |     r3 <<= 3;
    0x00003556 str r6, [sp, 0x54]                            |     var_54h = r6;
    0x00003558 add r6, sp, 0xb8                              |     r6 += var_b8h;
    0x0000355a str r2, [sp, 0x9c]                            |     var_9ch = r2;
    0x0000355c str r3, [sp, 0x78]                            |     var_78h = r3;
    0x0000355e add.w r3, sl, 0x9300                          |     r3 = sl + 0x9300;
    0x00003562 adds r3, 0x23                                 |     r3 += 0x23;
    0x00003564 add r7, sp, 0xc4                              |     r7 += var_c4h;
    0x00003566 str r3, [sp, 0x80]                            |     var_80h = r3;
    0x00003568 add.w r3, sl, 0x9300                          |     r3 = sl + 0x9300;
    0x0000356c adds r3, 0x25                                 |     r3 += 0x25;
    0x0000356e str r1, [sp, 0xa4]                            |     var_a4h = r1;
    0x00003570 str r3, [sp, 0x88]                            |     var_88h = r3;
    0x00003572 ldr.w r3, [pc, 0xcec]                         |     
    0x00003576 str r0, [sp, 0x48]                            |     var_48h = r0;
    0x00003578 str r4, [sp, 0xb0]                            |     var_b0h = r4;
    0x0000357a add r3, pc                                    |     r3 = 0x77e0;
    0x0000357c str r6, [sp, 0x3c]                            |     var_3ch = r6;
    0x0000357e str r3, [sp, 0xb4]                            |     var_b4h = r3;
    0x00003580 ldr r3, [sp, 0x40]                            |     r3 = var_40h;
    0x00003582 str r7, [sp, 0x7c]                            |     var_7ch = r7;
    0x00003584 lsls r3, r3, 2                                |     r3 <<= 2;
    0x00003586 str r3, [sp, 0xa8]                            |     var_a8h = r3;
    0x00003588 ldr r3, [sp, 0x78]                            |     r3 = var_78h;
    0x0000358a adds r3, r4, r3                               |     r3 = r4 + r3;
    0x0000358c str r3, [sp, 0x90]                            |     var_90h = r3;
    0x0000358e adds r3, r6, r0                               |     r3 = r6 + r0;
    0x00003590 str r3, [sp, 0x5c]                            |     var_5ch = r3;
    0x00003592 adds r3, r7, r1                               |     r3 = r7 + r1;
    0x00003594 str r3, [sp, 0x94]                            |     var_94h = r3;
    0x00003596 ldr r3, [sp, 0x84]                            |     r3 = var_84h;
    0x00003598 add r3, r2                                    |     r3 += r2;
    0x0000359a str r3, [sp, 0x98]                            |     var_98h = r3;
    0x0000359c ldr r3, [sp, 0x44]                            |     r3 = var_44h;
    0x0000359e str r3, [sp, 0x68]                            |     var_68h = r3;
                                                             | label_11:
    0x000035a0 ldr r2, [sp, 0xa4]                            |     r2 = var_a4h;
    0x000035a2 movs r1, 0                                    |     r1 = 0;
    0x000035a4 ldr r0, [sp, 0x7c]                            |     r0 = var_7ch;
    0x000035a6 blx 0xf10                                     |     fcn_00000f10 ();
    0x000035aa ldr r4, [sp, 0x90]                            |     r4 = var_90h;
    0x000035ac ldr r6, [sp, 0xa8]                            |     r6 = var_a8h;
    0x000035ae ldr r7, [sp, 0x40]                            |     r7 = var_40h;
    0x000035b0 ldr r3, [sp, 0xb0]                            |     r3 = var_b0h;
    0x000035b2 str r3, [sp, 0xa0]                            |     var_a0h = r3;
                                                             |     do {
    0x000035b4 cmp r7, 0                                     |         
                                                             |         if (r7 > 0) {
    0x000035b6 ble 0x35c4                                    |             
    0x000035b8 mov r0, r3                                    |             r0 = r3;
    0x000035ba mov r2, r6                                    |             r2 = r6;
    0x000035bc movs r1, 0                                    |             r1 = 0;
    0x000035be blx 0xf10                                     |             r0 = fcn_00000f10 ();
    0x000035c2 mov r3, r0                                    |             r3 = r0;
                                                             |         }
    0x000035c4 add.w r3, r3, 0x408                           |         r3 += 0x408;
    0x000035c8 cmp r4, r3                                    |         
    0x000035ca bne 0x35b4                                    |         
                                                             |     } while (r4 != r3);
    0x000035cc cmp r5, 6                                     |     
                                                             |     if (r5 == 6) {
    0x000035ce beq.w 0x5cba                                  |         goto label_80;
                                                             |     }
                                                             | label_20:
    0x000035d2 ldr r3, [sp, 0x28]                            |     r3 = var_28h;
    0x000035d4 cmp r3, 0                                     |     
                                                             |     if (r3 <= 0) {
    0x000035d6 ble.w 0x5d0e                                  |         goto label_81;
                                                             |     }
                                                             | label_21:
    0x000035da addw r3, sl, 0x67f                            |     __asm ("addw r3, sl, 0x67f");
    0x000035de movs r4, 0                                    |     r4 = 0;
    0x000035e0 str r3, [sp, 0x38]                            |     var_38h = r3;
    0x000035e2 add.w r3, sp, 0xba                            |     r3 += var_bah;
    0x000035e6 str r3, [sp, 0x50]                            |     var_50h = r3;
    0x000035e8 ldr r3, [sp, 0x28]                            |     r3 = var_28h;
    0x000035ea str r4, [sp, 0x34]                            |     var_34h = r4;
    0x000035ec str r5, [sp, 0x24]                            |     var_24h = r5;
    0x000035ee subs r3, 1                                    |     r3--;
    0x000035f0 str r4, [sp, 0x18]                            |     var_18h = r4;
    0x000035f2 str r3, [sp, 0x70]                            |     var_70h = r3;
                                                             | label_6:
    0x000035f4 ldr r2, [sp, 0x18]                            |     r2 = var_18h;
    0x000035f6 ldr r1, [sp, 0x28]                            |     r1 = var_28h;
    0x000035f8 ldr r0, [sp, 0x3c]                            |     r0 = var_3ch;
    0x000035fa add.w r3, r2, 0x31                            |     r3 = r2 + 0x31;
    0x000035fe cmp r3, r1                                    |     
    0x00003600 str r3, [sp, 0x1c]                            |     var_1ch = r3;
    0x00003602 ite ge                                        |     
                                                             |     if (r3 < r1) {
    0x00003604 ldrge r3, [sp, 0x70]                          |         r3 = var_70h;
                                                             |     }
                                                             |     if (r3 >= r1) {
    0x00003606 addlt r3, r2, 0x32                            |         r3 = r2 + 0x32;
                                                             |     }
    0x0000360a mov.w r1, 0                                   |     r1 = 0;
    0x0000360e ldr r2, [sp, 0x48]                            |     r2 = var_48h;
    0x00003610 itt ge                                        |     
                                                             |     if (r3 < r1) {
    0x00003612 strge r3, [sp, 0x1c]                          |         var_1ch = r3;
                                                             |     }
                                                             |     if (r3 < r1) {
    0x00003614 ldrge r3, [sp, 0x28]                          |         r3 = var_28h;
                                                             |     }
    0x00003616 str r3, [sp, 0x2c]                            |     var_2ch = r3;
    0x00003618 blx 0xf10                                     |     fcn_00000f10 ();
    0x0000361c ldr r3, [sp, 0x24]                            |     r3 = var_24h;
    0x0000361e cmp r3, 6                                     |     
                                                             |     if (r3 != 6) {
    0x00003620 bne.w 0x4182                                  |         goto label_82;
                                                             |     }
    0x00003624 ldrd r2, r3, [sp, 0x18]                       |     __asm ("ldrd r2, r3, [var_18h]");
    0x00003628 subs r3, r3, r2                               |     r3 -= r2;
    0x0000362a cmp r3, 0x31                                  |     
                                                             |     if (r3 != 0x31) {
    0x0000362c bne.w 0x4182                                  |         goto label_82;
                                                             |     }
    0x00003630 ldr r2, [sp, 0x30]                            |     r2 = var_30h;
    0x00003632 ldr r1, [sp, 0x18]                            |     r1 = var_18h;
    0x00003634 ldrh.w r8, [r2, r1, lsl 1]                    |     offset_1 = r1 << 1;
                                                             |     r8 = *((r2 + offset_1));
    0x00003638 add.w r3, r2, r1, lsl 1                       |     r3 = r2 + (r1 << 1);
    0x0000363c movw r1, 0xc994                               |     r1 = 0xc994;
    0x00003640 movw r2, 0xc998                               |     r2 = 0xc998;
    0x00003644 ldrh r6, [r3, 2]                              |     r6 = *((r3 + 2));
    0x00003646 ldrh.w sb, [r3, 4]                            |     sb = *((r3 + 4));
    0x0000364a ldrh.w lr, [r3, 6]                            |     
    0x0000364e addw r0, r6, 0xc99                            |     __asm ("addw r0, r6, 0xc99");
    0x00003652 ldrh.w ip, [r3, 8]                            |     ip = *((r3 + 8));
    0x00003656 addw fp, sb, 0xc99                            |     __asm ("addw fp, sb, 0xc99");
    0x0000365a lsls r0, r0, 4                                |     r0 <<= 4;
    0x0000365c lsl.w fp, fp, 4                               |     
    0x00003660 ldrh r7, [r3, 0xa]                            |     r7 = *((r3 + 0xa));
    0x00003662 ldr.w r0, [sl, r0]                            |     r0 = *((sl + r0));
    0x00003666 add.w r6, sl, r6, lsl 4                       |     r6 = sl + (r6 << 4);
    0x0000366a ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x0000366e add.w sb, sl, sb, lsl 4                       |     sb = sl + (sb << 4);
    0x00003672 ldrh r5, [r3, 0xc]                            |     r5 = *((r3 + 0xc));
    0x00003674 ldrh r4, [r3, 0xe]                            |     r4 = *((r3 + 0xe));
    0x00003676 add r0, fp                                    |     r0 += fp;
    0x00003678 addw fp, r8, 0xc99                            |     __asm ("addw fp, r8, 0xc99");
    0x0000367c lsl.w fp, fp, 4                               |     
    0x00003680 str r3, [sp, 0x20]                            |     var_20h = r3;
    0x00003682 add.w r8, sl, r8, lsl 4                       |     r8 = sl + (r8 << 4);
    0x00003686 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x0000368a add r0, fp                                    |     r0 += fp;
    0x0000368c addw fp, lr, 0xc99                            |     __asm ("addw fp, lr, 0xc99");
    0x00003690 lsl.w fp, fp, 4                               |     
    0x00003694 add.w lr, sl, lr, lsl 4                       |     lr = sl + (lr << 4);
    0x00003698 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x0000369c add r0, fp                                    |     r0 += fp;
    0x0000369e addw fp, ip, 0xc99                            |     __asm ("addw fp, ip, 0xc99");
    0x000036a2 lsl.w fp, fp, 4                               |     
    0x000036a6 add.w ip, sl, ip, lsl 4                       |     
    0x000036aa ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x000036ae add r0, fp                                    |     r0 += fp;
    0x000036b0 addw fp, r7, 0xc99                            |     __asm ("addw fp, r7, 0xc99");
    0x000036b4 lsl.w fp, fp, 4                               |     
    0x000036b8 add.w r7, sl, r7, lsl 4                       |     r7 = sl + (r7 << 4);
    0x000036bc ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x000036c0 add r0, fp                                    |     r0 += fp;
    0x000036c2 addw fp, r5, 0xc99                            |     __asm ("addw fp, r5, 0xc99");
    0x000036c6 lsl.w fp, fp, 4                               |     
    0x000036ca add.w r5, sl, r5, lsl 4                       |     r5 = sl + (r5 << 4);
    0x000036ce ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x000036d2 add r0, fp                                    |     r0 += fp;
    0x000036d4 addw fp, r4, 0xc99                            |     __asm ("addw fp, r4, 0xc99");
    0x000036d8 lsl.w fp, fp, 4                               |     
    0x000036dc add.w r4, sl, r4, lsl 4                       |     r4 = sl + (r4 << 4);
    0x000036e0 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x000036e4 add fp, r0                                    |     
    0x000036e6 ldr r0, [r6, r1]                              |     r0 = *((r6 + r1));
    0x000036e8 ldr r6, [r6, r2]                              |     r6 = *((r6 + r2));
    0x000036ea mov r3, r6                                    |     r3 = r6;
    0x000036ec ldr.w r6, [sb, r1]                            |     r6 = *((sb + r1));
    0x000036f0 add r0, r6                                    |     r0 += r6;
    0x000036f2 ldr.w r6, [sb, r2]                            |     r6 = *((sb + r2));
    0x000036f6 add.w sb, r3, r6                              |     sb = r3 + r6;
    0x000036fa ldr.w r6, [r8, r1]                            |     r6 = *((r8 + r1));
    0x000036fe add r0, r6                                    |     r0 += r6;
    0x00003700 ldr.w r6, [r8, r2]                            |     r6 = *((r8 + r2));
    0x00003704 add.w r8, sb, r6                              |     r8 = sb + r6;
    0x00003708 ldr.w r6, [lr, r1]                            |     r6 = *((lr + r1));
    0x0000370c add r6, r0                                    |     r6 += r0;
    0x0000370e ldr.w r0, [lr, r2]                            |     r0 = *((lr + r2));
    0x00003712 add.w lr, r8, r0                              |     lr = r8 + r0;
    0x00003716 ldr.w r0, [ip, r1]                            |     r0 = *((ip + r1));
    0x0000371a add r6, r0                                    |     r6 += r0;
    0x0000371c ldr.w r0, [ip, r2]                            |     r0 = *((ip + r2));
    0x00003720 add.w ip, lr, r0                              |     
    0x00003724 ldr r0, [r7, r1]                              |     r0 = *((r7 + r1));
    0x00003726 ldr r7, [r7, r2]                              |     r7 = *((r7 + r2));
    0x00003728 add r6, r0                                    |     r6 += r0;
    0x0000372a ldr r0, [r5, r1]                              |     r0 = *((r5 + r1));
    0x0000372c ldr r5, [r5, r2]                              |     r5 = *((r5 + r2));
    0x0000372e add r7, ip                                    |     r7 += ip;
    0x00003730 add r6, r0                                    |     r6 += r0;
    0x00003732 ldr r0, [r4, r1]                              |     r0 = *((r4 + r1));
    0x00003734 add r5, r7                                    |     r5 += r7;
    0x00003736 adds r3, r6, r0                               |     r3 = r6 + r0;
    0x00003738 ldr r0, [r4, r2]                              |     r0 = *((r4 + r2));
    0x0000373a adds r0, r5, r0                               |     r0 = r5 + r0;
    0x0000373c str r0, [sp, 0x58]                            |     var_58h = r0;
    0x0000373e ldr r0, [sp, 0x20]                            |     r0 = var_20h;
    0x00003740 ldrh r7, [r0, 0x10]                           |     r7 = *((r0 + 0x10));
    0x00003742 ldrh.w sb, [r0, 0x12]                         |     sb = *((r0 + 0x12));
    0x00003746 ldrh.w r8, [r0, 0x14]                         |     r8 = *((r0 + 0x14));
    0x0000374a ldrh.w lr, [r0, 0x16]                         |     
    0x0000374e ldrh.w ip, [r0, 0x18]                         |     ip = *((r0 + 0x18));
    0x00003752 ldrh r6, [r0, 0x1a]                           |     r6 = *((r0 + 0x1a));
    0x00003754 ldrh r5, [r0, 0x1c]                           |     r5 = *((r0 + 0x1c));
    0x00003756 ldrh r4, [r0, 0x1e]                           |     r4 = *((r0 + 0x1e));
    0x00003758 addw r0, r7, 0xc99                            |     __asm ("addw r0, r7, 0xc99");
    0x0000375c lsls r0, r0, 4                                |     r0 <<= 4;
    0x0000375e add.w r7, sl, r7, lsl 4                       |     r7 = sl + (r7 << 4);
    0x00003762 ldr.w r0, [sl, r0]                            |     r0 = *((sl + r0));
    0x00003766 add r0, fp                                    |     r0 += fp;
    0x00003768 addw fp, sb, 0xc99                            |     __asm ("addw fp, sb, 0xc99");
    0x0000376c lsl.w fp, fp, 4                               |     
    0x00003770 add.w sb, sl, sb, lsl 4                       |     sb = sl + (sb << 4);
    0x00003774 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x00003778 add r0, fp                                    |     r0 += fp;
    0x0000377a addw fp, r8, 0xc99                            |     __asm ("addw fp, r8, 0xc99");
    0x0000377e lsl.w fp, fp, 4                               |     
    0x00003782 add.w r8, sl, r8, lsl 4                       |     r8 = sl + (r8 << 4);
    0x00003786 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x0000378a add r0, fp                                    |     r0 += fp;
    0x0000378c addw fp, lr, 0xc99                            |     __asm ("addw fp, lr, 0xc99");
    0x00003790 lsl.w fp, fp, 4                               |     
    0x00003794 add.w lr, sl, lr, lsl 4                       |     lr = sl + (lr << 4);
    0x00003798 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x0000379c add r0, fp                                    |     r0 += fp;
    0x0000379e addw fp, ip, 0xc99                            |     __asm ("addw fp, ip, 0xc99");
    0x000037a2 lsl.w fp, fp, 4                               |     
    0x000037a6 add.w ip, sl, ip, lsl 4                       |     
    0x000037aa ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x000037ae add r0, fp                                    |     r0 += fp;
    0x000037b0 addw fp, r6, 0xc99                            |     __asm ("addw fp, r6, 0xc99");
    0x000037b4 lsl.w fp, fp, 4                               |     
    0x000037b8 add.w r6, sl, r6, lsl 4                       |     r6 = sl + (r6 << 4);
    0x000037bc ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x000037c0 add r0, fp                                    |     r0 += fp;
    0x000037c2 addw fp, r5, 0xc99                            |     __asm ("addw fp, r5, 0xc99");
    0x000037c6 lsl.w fp, fp, 4                               |     
    0x000037ca add.w r5, sl, r5, lsl 4                       |     r5 = sl + (r5 << 4);
    0x000037ce ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x000037d2 add r0, fp                                    |     r0 += fp;
    0x000037d4 addw fp, r4, 0xc99                            |     __asm ("addw fp, r4, 0xc99");
    0x000037d8 lsl.w fp, fp, 4                               |     
    0x000037dc add.w r4, sl, r4, lsl 4                       |     r4 = sl + (r4 << 4);
    0x000037e0 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x000037e4 add fp, r0                                    |     
    0x000037e6 ldr r0, [r7, r1]                              |     r0 = *((r7 + r1));
    0x000037e8 ldr r7, [r7, r2]                              |     r7 = *((r7 + r2));
    0x000037ea add r0, r3                                    |     r0 += r3;
    0x000037ec ldr r3, [sp, 0x58]                            |     r3 = var_58h;
    0x000037ee add r3, r7                                    |     r3 += r7;
    0x000037f0 ldr.w r7, [sb, r1]                            |     r7 = *((sb + r1));
    0x000037f4 add r7, r0                                    |     r7 += r0;
    0x000037f6 ldr.w r0, [sb, r2]                            |     r0 = *((sb + r2));
    0x000037fa add.w sb, r3, r0                              |     sb = r3 + r0;
    0x000037fe ldr.w r0, [r8, r1]                            |     r0 = *((r8 + r1));
    0x00003802 add r7, r0                                    |     r7 += r0;
    0x00003804 ldr.w r0, [r8, r2]                            |     r0 = *((r8 + r2));
    0x00003808 add.w r8, sb, r0                              |     r8 = sb + r0;
    0x0000380c ldr.w r0, [lr, r1]                            |     r0 = *((lr + r1));
    0x00003810 add r7, r0                                    |     r7 += r0;
    0x00003812 ldr.w r0, [lr, r2]                            |     r0 = *((lr + r2));
    0x00003816 add.w lr, r8, r0                              |     lr = r8 + r0;
    0x0000381a ldr.w r0, [ip, r1]                            |     r0 = *((ip + r1));
    0x0000381e add r7, r0                                    |     r7 += r0;
    0x00003820 ldr.w r0, [ip, r2]                            |     r0 = *((ip + r2));
    0x00003824 add.w ip, lr, r0                              |     
    0x00003828 ldr r0, [r6, r1]                              |     r0 = *((r6 + r1));
    0x0000382a ldr r6, [r6, r2]                              |     r6 = *((r6 + r2));
    0x0000382c add r7, r0                                    |     r7 += r0;
    0x0000382e ldr r0, [r5, r1]                              |     r0 = *((r5 + r1));
    0x00003830 ldr r5, [r5, r2]                              |     r5 = *((r5 + r2));
    0x00003832 add r6, ip                                    |     r6 += ip;
    0x00003834 add r7, r0                                    |     r7 += r0;
    0x00003836 ldr r0, [r4, r1]                              |     r0 = *((r4 + r1));
    0x00003838 add r5, r6                                    |     r5 += r6;
    0x0000383a adds r3, r7, r0                               |     r3 = r7 + r0;
    0x0000383c ldr r0, [r4, r2]                              |     r0 = *((r4 + r2));
    0x0000383e adds r0, r5, r0                               |     r0 = r5 + r0;
    0x00003840 str r0, [sp, 0x58]                            |     var_58h = r0;
    0x00003842 ldr r0, [sp, 0x20]                            |     r0 = var_20h;
    0x00003844 ldrh r7, [r0, 0x20]                           |     r7 = *((r0 + 0x20));
    0x00003846 ldrh.w sb, [r0, 0x22]                         |     sb = *((r0 + 0x22));
    0x0000384a ldrh.w r8, [r0, 0x24]                         |     r8 = *((r0 + 0x24));
    0x0000384e ldrh.w lr, [r0, 0x26]                         |     
    0x00003852 ldrh.w ip, [r0, 0x28]                         |     ip = *((r0 + 0x28));
    0x00003856 ldrh r6, [r0, 0x2a]                           |     r6 = *((r0 + 0x2a));
    0x00003858 ldrh r5, [r0, 0x2c]                           |     r5 = *((r0 + 0x2c));
    0x0000385a ldrh r4, [r0, 0x2e]                           |     r4 = *((r0 + 0x2e));
    0x0000385c addw r0, r7, 0xc99                            |     __asm ("addw r0, r7, 0xc99");
    0x00003860 lsls r0, r0, 4                                |     r0 <<= 4;
    0x00003862 add.w r7, sl, r7, lsl 4                       |     r7 = sl + (r7 << 4);
    0x00003866 ldr.w r0, [sl, r0]                            |     r0 = *((sl + r0));
    0x0000386a add r0, fp                                    |     r0 += fp;
    0x0000386c addw fp, sb, 0xc99                            |     __asm ("addw fp, sb, 0xc99");
    0x00003870 lsl.w fp, fp, 4                               |     
    0x00003874 add.w sb, sl, sb, lsl 4                       |     sb = sl + (sb << 4);
    0x00003878 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x0000387c add r0, fp                                    |     r0 += fp;
    0x0000387e addw fp, r8, 0xc99                            |     __asm ("addw fp, r8, 0xc99");
    0x00003882 lsl.w fp, fp, 4                               |     
    0x00003886 add.w r8, sl, r8, lsl 4                       |     r8 = sl + (r8 << 4);
    0x0000388a ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x0000388e add r0, fp                                    |     r0 += fp;
    0x00003890 addw fp, lr, 0xc99                            |     __asm ("addw fp, lr, 0xc99");
    0x00003894 lsl.w fp, fp, 4                               |     
    0x00003898 add.w lr, sl, lr, lsl 4                       |     lr = sl + (lr << 4);
    0x0000389c ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x000038a0 add r0, fp                                    |     r0 += fp;
    0x000038a2 addw fp, ip, 0xc99                            |     __asm ("addw fp, ip, 0xc99");
    0x000038a6 lsl.w fp, fp, 4                               |     
    0x000038aa add.w ip, sl, ip, lsl 4                       |     
    0x000038ae ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x000038b2 add r0, fp                                    |     r0 += fp;
    0x000038b4 addw fp, r6, 0xc99                            |     __asm ("addw fp, r6, 0xc99");
    0x000038b8 lsl.w fp, fp, 4                               |     
    0x000038bc add.w r6, sl, r6, lsl 4                       |     r6 = sl + (r6 << 4);
    0x000038c0 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x000038c4 add r0, fp                                    |     r0 += fp;
    0x000038c6 addw fp, r5, 0xc99                            |     __asm ("addw fp, r5, 0xc99");
    0x000038ca lsl.w fp, fp, 4                               |     
    0x000038ce add.w r5, sl, r5, lsl 4                       |     r5 = sl + (r5 << 4);
    0x000038d2 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x000038d6 add r0, fp                                    |     r0 += fp;
    0x000038d8 addw fp, r4, 0xc99                            |     __asm ("addw fp, r4, 0xc99");
    0x000038dc lsl.w fp, fp, 4                               |     
    0x000038e0 add.w r4, sl, r4, lsl 4                       |     r4 = sl + (r4 << 4);
    0x000038e4 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x000038e8 add fp, r0                                    |     
    0x000038ea ldr r0, [r7, r1]                              |     r0 = *((r7 + r1));
    0x000038ec ldr r7, [r7, r2]                              |     r7 = *((r7 + r2));
    0x000038ee add r0, r3                                    |     r0 += r3;
    0x000038f0 ldr r3, [sp, 0x58]                            |     r3 = var_58h;
    0x000038f2 add r3, r7                                    |     r3 += r7;
    0x000038f4 ldr.w r7, [sb, r1]                            |     r7 = *((sb + r1));
    0x000038f8 add r7, r0                                    |     r7 += r0;
    0x000038fa ldr.w r0, [sb, r2]                            |     r0 = *((sb + r2));
    0x000038fe add.w sb, r3, r0                              |     sb = r3 + r0;
    0x00003902 ldr.w r0, [r8, r1]                            |     r0 = *((r8 + r1));
    0x00003906 add r7, r0                                    |     r7 += r0;
    0x00003908 ldr.w r0, [r8, r2]                            |     r0 = *((r8 + r2));
    0x0000390c add.w r8, sb, r0                              |     r8 = sb + r0;
    0x00003910 ldr.w r0, [lr, r1]                            |     r0 = *((lr + r1));
    0x00003914 add r7, r0                                    |     r7 += r0;
    0x00003916 ldr.w r0, [lr, r2]                            |     r0 = *((lr + r2));
    0x0000391a add.w lr, r8, r0                              |     lr = r8 + r0;
    0x0000391e ldr.w r0, [ip, r1]                            |     r0 = *((ip + r1));
    0x00003922 add r7, r0                                    |     r7 += r0;
    0x00003924 ldr.w r0, [ip, r2]                            |     r0 = *((ip + r2));
    0x00003928 add.w ip, lr, r0                              |     
    0x0000392c ldr r0, [r6, r1]                              |     r0 = *((r6 + r1));
    0x0000392e ldr r6, [r6, r2]                              |     r6 = *((r6 + r2));
    0x00003930 add r7, r0                                    |     r7 += r0;
    0x00003932 ldr r0, [r5, r1]                              |     r0 = *((r5 + r1));
    0x00003934 ldr r5, [r5, r2]                              |     r5 = *((r5 + r2));
    0x00003936 add r6, ip                                    |     r6 += ip;
    0x00003938 add r7, r0                                    |     r7 += r0;
    0x0000393a ldr r0, [r4, r1]                              |     r0 = *((r4 + r1));
    0x0000393c add r5, r6                                    |     r5 += r6;
    0x0000393e adds r3, r7, r0                               |     r3 = r7 + r0;
    0x00003940 ldr r0, [r4, r2]                              |     r0 = *((r4 + r2));
    0x00003942 adds r0, r5, r0                               |     r0 = r5 + r0;
    0x00003944 str r0, [sp, 0x58]                            |     var_58h = r0;
    0x00003946 ldr r0, [sp, 0x20]                            |     r0 = var_20h;
    0x00003948 ldrh r7, [r0, 0x30]                           |     r7 = *((r0 + 0x30));
    0x0000394a ldrh.w sb, [r0, 0x32]                         |     sb = *((r0 + 0x32));
    0x0000394e ldrh.w r8, [r0, 0x34]                         |     r8 = *((r0 + 0x34));
    0x00003952 ldrh.w lr, [r0, 0x36]                         |     
    0x00003956 ldrh.w ip, [r0, 0x38]                         |     ip = *((r0 + 0x38));
    0x0000395a ldrh r6, [r0, 0x3a]                           |     r6 = *((r0 + 0x3a));
    0x0000395c ldrh r5, [r0, 0x3c]                           |     r5 = *((r0 + 0x3c));
    0x0000395e ldrh r4, [r0, 0x3e]                           |     r4 = *((r0 + 0x3e));
    0x00003960 addw r0, r7, 0xc99                            |     __asm ("addw r0, r7, 0xc99");
    0x00003964 lsls r0, r0, 4                                |     r0 <<= 4;
    0x00003966 add.w r7, sl, r7, lsl 4                       |     r7 = sl + (r7 << 4);
    0x0000396a ldr.w r0, [sl, r0]                            |     r0 = *((sl + r0));
    0x0000396e add r0, fp                                    |     r0 += fp;
    0x00003970 addw fp, sb, 0xc99                            |     __asm ("addw fp, sb, 0xc99");
    0x00003974 lsl.w fp, fp, 4                               |     
    0x00003978 add.w sb, sl, sb, lsl 4                       |     sb = sl + (sb << 4);
    0x0000397c ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x00003980 add r0, fp                                    |     r0 += fp;
    0x00003982 addw fp, r8, 0xc99                            |     __asm ("addw fp, r8, 0xc99");
    0x00003986 lsl.w fp, fp, 4                               |     
    0x0000398a add.w r8, sl, r8, lsl 4                       |     r8 = sl + (r8 << 4);
    0x0000398e ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x00003992 add r0, fp                                    |     r0 += fp;
    0x00003994 addw fp, lr, 0xc99                            |     __asm ("addw fp, lr, 0xc99");
    0x00003998 lsl.w fp, fp, 4                               |     
    0x0000399c add.w lr, sl, lr, lsl 4                       |     lr = sl + (lr << 4);
    0x000039a0 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x000039a4 add r0, fp                                    |     r0 += fp;
    0x000039a6 addw fp, ip, 0xc99                            |     __asm ("addw fp, ip, 0xc99");
    0x000039aa lsl.w fp, fp, 4                               |     
    0x000039ae add.w ip, sl, ip, lsl 4                       |     
    0x000039b2 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x000039b6 add r0, fp                                    |     r0 += fp;
    0x000039b8 addw fp, r6, 0xc99                            |     __asm ("addw fp, r6, 0xc99");
    0x000039bc lsl.w fp, fp, 4                               |     
    0x000039c0 add.w r6, sl, r6, lsl 4                       |     r6 = sl + (r6 << 4);
    0x000039c4 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x000039c8 add r0, fp                                    |     r0 += fp;
    0x000039ca addw fp, r5, 0xc99                            |     __asm ("addw fp, r5, 0xc99");
    0x000039ce lsl.w fp, fp, 4                               |     
    0x000039d2 add.w r5, sl, r5, lsl 4                       |     r5 = sl + (r5 << 4);
    0x000039d6 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x000039da add r0, fp                                    |     r0 += fp;
    0x000039dc addw fp, r4, 0xc99                            |     __asm ("addw fp, r4, 0xc99");
    0x000039e0 lsl.w fp, fp, 4                               |     
    0x000039e4 add.w r4, sl, r4, lsl 4                       |     r4 = sl + (r4 << 4);
    0x000039e8 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x000039ec add fp, r0                                    |     
    0x000039ee ldr r0, [r7, r1]                              |     r0 = *((r7 + r1));
    0x000039f0 ldr r7, [r7, r2]                              |     r7 = *((r7 + r2));
    0x000039f2 add r0, r3                                    |     r0 += r3;
    0x000039f4 ldr r3, [sp, 0x58]                            |     r3 = var_58h;
    0x000039f6 add r3, r7                                    |     r3 += r7;
    0x000039f8 ldr.w r7, [sb, r1]                            |     r7 = *((sb + r1));
    0x000039fc add r7, r0                                    |     r7 += r0;
    0x000039fe ldr.w r0, [sb, r2]                            |     r0 = *((sb + r2));
    0x00003a02 add.w sb, r3, r0                              |     sb = r3 + r0;
    0x00003a06 ldr.w r0, [r8, r1]                            |     r0 = *((r8 + r1));
    0x00003a0a add r7, r0                                    |     r7 += r0;
    0x00003a0c ldr.w r0, [r8, r2]                            |     r0 = *((r8 + r2));
    0x00003a10 add.w r8, sb, r0                              |     r8 = sb + r0;
    0x00003a14 ldr.w r0, [lr, r1]                            |     r0 = *((lr + r1));
    0x00003a16 movs r1, r0                                   |     r1 = r0;
    0x00003a18 add r7, r0                                    |     r7 += r0;
    0x00003a1a ldr.w r0, [lr, r2]                            |     r0 = *((lr + r2));
    0x00003a1e add.w lr, r8, r0                              |     lr = r8 + r0;
    0x00003a22 ldr.w r0, [ip, r1]                            |     r0 = *((ip + r1));
    0x00003a26 add r7, r0                                    |     r7 += r0;
    0x00003a28 ldr.w r0, [ip, r2]                            |     r0 = *((ip + r2));
    0x00003a2c add.w ip, lr, r0                              |     
    0x00003a30 ldr r0, [r6, r1]                              |     r0 = *((r6 + r1));
    0x00003a32 ldr r6, [r6, r2]                              |     r6 = *((r6 + r2));
    0x00003a34 add r7, r0                                    |     r7 += r0;
    0x00003a36 ldr r0, [r5, r1]                              |     r0 = *((r5 + r1));
    0x00003a38 ldr r5, [r5, r2]                              |     r5 = *((r5 + r2));
    0x00003a3a add r6, ip                                    |     r6 += ip;
    0x00003a3c add r7, r0                                    |     r7 += r0;
    0x00003a3e ldr r0, [r4, r1]                              |     r0 = *((r4 + r1));
    0x00003a40 add r5, r6                                    |     r5 += r6;
    0x00003a42 adds r3, r7, r0                               |     r3 = r7 + r0;
    0x00003a44 ldr r0, [r4, r2]                              |     r0 = *((r4 + r2));
    0x00003a46 adds r0, r5, r0                               |     r0 = r5 + r0;
    0x00003a48 str r0, [sp, 0x58]                            |     var_58h = r0;
    0x00003a4a ldr r0, [sp, 0x20]                            |     r0 = var_20h;
    0x00003a4c ldrh.w r7, [r0, 0x40]                         |     r7 = *((r0 + 0x40));
    0x00003a50 ldrh.w sb, [r0, 0x42]                         |     sb = *((r0 + 0x42));
    0x00003a54 ldrh.w r8, [r0, 0x44]                         |     r8 = *((r0 + 0x44));
    0x00003a58 ldrh.w lr, [r0, 0x46]                         |     
    0x00003a5c ldrh.w ip, [r0, 0x48]                         |     ip = *((r0 + 0x48));
    0x00003a60 ldrh.w r6, [r0, 0x4a]                         |     r6 = *((r0 + 0x4a));
    0x00003a64 ldrh.w r5, [r0, 0x4c]                         |     r5 = *((r0 + 0x4c));
    0x00003a68 ldrh.w r4, [r0, 0x4e]                         |     r4 = *((r0 + 0x4e));
    0x00003a6c addw r0, r7, 0xc99                            |     __asm ("addw r0, r7, 0xc99");
    0x00003a70 lsls r0, r0, 4                                |     r0 <<= 4;
    0x00003a72 add.w r7, sl, r7, lsl 4                       |     r7 = sl + (r7 << 4);
    0x00003a76 ldr.w r0, [sl, r0]                            |     r0 = *((sl + r0));
    0x00003a7a add r0, fp                                    |     r0 += fp;
    0x00003a7c addw fp, sb, 0xc99                            |     __asm ("addw fp, sb, 0xc99");
    0x00003a80 lsl.w fp, fp, 4                               |     
    0x00003a84 add.w sb, sl, sb, lsl 4                       |     sb = sl + (sb << 4);
    0x00003a88 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x00003a8c add r0, fp                                    |     r0 += fp;
    0x00003a8e addw fp, r8, 0xc99                            |     __asm ("addw fp, r8, 0xc99");
    0x00003a92 lsl.w fp, fp, 4                               |     
    0x00003a96 add.w r8, sl, r8, lsl 4                       |     r8 = sl + (r8 << 4);
    0x00003a9a ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x00003a9e add r0, fp                                    |     r0 += fp;
    0x00003aa0 addw fp, lr, 0xc99                            |     __asm ("addw fp, lr, 0xc99");
    0x00003aa4 lsl.w fp, fp, 4                               |     
    0x00003aa8 add.w lr, sl, lr, lsl 4                       |     lr = sl + (lr << 4);
    0x00003aac ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x00003ab0 add r0, fp                                    |     r0 += fp;
    0x00003ab2 addw fp, ip, 0xc99                            |     __asm ("addw fp, ip, 0xc99");
    0x00003ab6 lsl.w fp, fp, 4                               |     
    0x00003aba add.w ip, sl, ip, lsl 4                       |     
    0x00003abe ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x00003ac2 add r0, fp                                    |     r0 += fp;
    0x00003ac4 addw fp, r6, 0xc99                            |     __asm ("addw fp, r6, 0xc99");
    0x00003ac8 lsl.w fp, fp, 4                               |     
    0x00003acc add.w r6, sl, r6, lsl 4                       |     r6 = sl + (r6 << 4);
    0x00003ad0 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x00003ad4 add r0, fp                                    |     r0 += fp;
    0x00003ad6 addw fp, r5, 0xc99                            |     __asm ("addw fp, r5, 0xc99");
    0x00003ada lsl.w fp, fp, 4                               |     
    0x00003ade add.w r5, sl, r5, lsl 4                       |     r5 = sl + (r5 << 4);
    0x00003ae2 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x00003ae6 add r0, fp                                    |     r0 += fp;
    0x00003ae8 addw fp, r4, 0xc99                            |     __asm ("addw fp, r4, 0xc99");
    0x00003aec lsl.w fp, fp, 4                               |     
    0x00003af0 add.w r4, sl, r4, lsl 4                       |     r4 = sl + (r4 << 4);
    0x00003af4 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x00003af8 add fp, r0                                    |     
    0x00003afa ldr r0, [r7, r1]                              |     r0 = *((r7 + r1));
    0x00003afc ldr r7, [r7, r2]                              |     r7 = *((r7 + r2));
    0x00003afe add r0, r3                                    |     r0 += r3;
    0x00003b00 ldr r3, [sp, 0x58]                            |     r3 = var_58h;
    0x00003b02 add r3, r7                                    |     r3 += r7;
    0x00003b04 ldr.w r7, [sb, r1]                            |     r7 = *((sb + r1));
    0x00003b08 add r7, r0                                    |     r7 += r0;
    0x00003b0a ldr.w r0, [sb, r2]                            |     r0 = *((sb + r2));
    0x00003b0e add.w sb, r3, r0                              |     sb = r3 + r0;
    0x00003b12 ldr.w r0, [r8, r1]                            |     r0 = *((r8 + r1));
    0x00003b16 add r7, r0                                    |     r7 += r0;
    0x00003b18 ldr.w r0, [r8, r2]                            |     r0 = *((r8 + r2));
    0x00003b1c add.w r8, sb, r0                              |     r8 = sb + r0;
    0x00003b20 ldr.w r0, [lr, r1]                            |     r0 = *((lr + r1));
    0x00003b24 add r7, r0                                    |     r7 += r0;
    0x00003b26 ldr.w r0, [lr, r2]                            |     r0 = *((lr + r2));
    0x00003b2a add.w lr, r8, r0                              |     lr = r8 + r0;
    0x00003b2e ldr.w r0, [ip, r1]                            |     r0 = *((ip + r1));
    0x00003b32 add r7, r0                                    |     r7 += r0;
    0x00003b34 ldr.w r0, [ip, r2]                            |     r0 = *((ip + r2));
    0x00003b38 add.w ip, lr, r0                              |     
    0x00003b3c ldr r0, [r6, r1]                              |     r0 = *((r6 + r1));
    0x00003b3e ldr r6, [r6, r2]                              |     r6 = *((r6 + r2));
    0x00003b40 add r7, r0                                    |     r7 += r0;
    0x00003b42 ldr r0, [r5, r1]                              |     r0 = *((r5 + r1));
    0x00003b44 ldr r5, [r5, r2]                              |     r5 = *((r5 + r2));
    0x00003b46 add r6, ip                                    |     r6 += ip;
    0x00003b48 add r7, r0                                    |     r7 += r0;
    0x00003b4a ldr r0, [r4, r1]                              |     r0 = *((r4 + r1));
    0x00003b4c add r5, r6                                    |     r5 += r6;
    0x00003b4e adds r3, r7, r0                               |     r3 = r7 + r0;
    0x00003b50 ldr r0, [r4, r2]                              |     r0 = *((r4 + r2));
    0x00003b52 adds r0, r5, r0                               |     r0 = r5 + r0;
    0x00003b54 str r0, [sp, 0x58]                            |     var_58h = r0;
    0x00003b56 ldr r0, [sp, 0x20]                            |     r0 = var_20h;
    0x00003b58 ldrh.w r6, [r0, 0x50]                         |     r6 = *((r0 + 0x50));
    0x00003b5c ldrh.w sb, [r0, 0x52]                         |     sb = *((r0 + 0x52));
    0x00003b60 ldrh.w r8, [r0, 0x54]                         |     r8 = *((r0 + 0x54));
    0x00003b64 ldrh.w lr, [r0, 0x56]                         |     
    0x00003b68 ldrh.w ip, [r0, 0x58]                         |     ip = *((r0 + 0x58));
    0x00003b6c ldrh.w r7, [r0, 0x5a]                         |     r7 = *((r0 + 0x5a));
    0x00003b70 ldrh.w r5, [r0, 0x5c]                         |     r5 = *((r0 + 0x5c));
    0x00003b74 ldrh.w r4, [r0, 0x5e]                         |     r4 = *((r0 + 0x5e));
    0x00003b78 addw r0, r6, 0xc99                            |     __asm ("addw r0, r6, 0xc99");
    0x00003b7c lsls r0, r0, 4                                |     r0 <<= 4;
    0x00003b7e add.w r6, sl, r6, lsl 4                       |     r6 = sl + (r6 << 4);
    0x00003b82 ldr.w r0, [sl, r0]                            |     r0 = *((sl + r0));
    0x00003b86 add r0, fp                                    |     r0 += fp;
    0x00003b88 addw fp, sb, 0xc99                            |     __asm ("addw fp, sb, 0xc99");
    0x00003b8c lsl.w fp, fp, 4                               |     
    0x00003b90 add.w sb, sl, sb, lsl 4                       |     sb = sl + (sb << 4);
    0x00003b94 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x00003b98 add r0, fp                                    |     r0 += fp;
    0x00003b9a addw fp, r8, 0xc99                            |     __asm ("addw fp, r8, 0xc99");
    0x00003b9e lsl.w fp, fp, 4                               |     
    0x00003ba2 add.w r8, sl, r8, lsl 4                       |     r8 = sl + (r8 << 4);
    0x00003ba6 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x00003baa add r0, fp                                    |     r0 += fp;
    0x00003bac addw fp, lr, 0xc99                            |     __asm ("addw fp, lr, 0xc99");
    0x00003bb0 lsl.w fp, fp, 4                               |     
    0x00003bb4 add.w lr, sl, lr, lsl 4                       |     lr = sl + (lr << 4);
    0x00003bb8 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x00003bbc add r0, fp                                    |     r0 += fp;
    0x00003bbe addw fp, ip, 0xc99                            |     __asm ("addw fp, ip, 0xc99");
    0x00003bc2 lsl.w fp, fp, 4                               |     
    0x00003bc6 add.w ip, sl, ip, lsl 4                       |     
    0x00003bca ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x00003bce add r0, fp                                    |     r0 += fp;
    0x00003bd0 addw fp, r7, 0xc99                            |     __asm ("addw fp, r7, 0xc99");
    0x00003bd4 lsl.w fp, fp, 4                               |     
    0x00003bd8 add.w r7, sl, r7, lsl 4                       |     r7 = sl + (r7 << 4);
    0x00003bdc ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x00003be0 add r0, fp                                    |     r0 += fp;
    0x00003be2 addw fp, r5, 0xc99                            |     __asm ("addw fp, r5, 0xc99");
    0x00003be6 lsl.w fp, fp, 4                               |     
    0x00003bea add.w r5, sl, r5, lsl 4                       |     r5 = sl + (r5 << 4);
    0x00003bee ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x00003bf2 add r0, fp                                    |     r0 += fp;
    0x00003bf4 addw fp, r4, 0xc99                            |     __asm ("addw fp, r4, 0xc99");
    0x00003bf8 lsl.w fp, fp, 4                               |     
    0x00003bfc add.w r4, sl, r4, lsl 4                       |     r4 = sl + (r4 << 4);
    0x00003c00 ldr.w fp, [sl, fp]                            |     fp = *((sl + fp));
    0x00003c04 add fp, r0                                    |     
    0x00003c06 ldr r0, [r6, r1]                              |     r0 = *((r6 + r1));
    0x00003c08 ldr r6, [r6, r2]                              |     r6 = *((r6 + r2));
    0x00003c0a add r0, r3                                    |     r0 += r3;
    0x00003c0c ldr r3, [sp, 0x58]                            |     r3 = var_58h;
    0x00003c0e add r6, r3                                    |     r6 += r3;
    0x00003c10 ldr.w r3, [sb, r1]                            |     r3 = *((sb + r1));
    0x00003c14 ldr.w sb, [sb, r2]                            |     sb = *((sb + r2));
    0x00003c18 add r0, r3                                    |     r0 += r3;
    0x00003c1a ldr r3, [sp, 0x20]                            |     r3 = var_20h;
    0x00003c1c add sb, r6                                    |     sb += r6;
    0x00003c1e ldr.w r6, [r8, r1]                            |     r6 = *((r8 + r1));
    0x00003c22 add r0, r6                                    |     r0 += r6;
    0x00003c24 ldr.w r6, [r8, r2]                            |     r6 = *((r8 + r2));
    0x00003c28 add.w r8, sb, r6                              |     r8 = sb + r6;
    0x00003c2c ldr.w r6, [lr, r1]                            |     r6 = *((lr + r1));
    0x00003c30 add r6, r0                                    |     r6 += r0;
    0x00003c32 ldr.w r0, [lr, r2]                            |     r0 = *((lr + r2));
    0x00003c36 add.w lr, r8, r0                              |     lr = r8 + r0;
    0x00003c3a ldr.w r0, [ip, r1]                            |     r0 = *((ip + r1));
    0x00003c3e add r6, r0                                    |     r6 += r0;
    0x00003c40 ldr.w r0, [ip, r2]                            |     r0 = *((ip + r2));
    0x00003c44 add.w ip, lr, r0                              |     
    0x00003c48 ldr r0, [r7, r1]                              |     r0 = *((r7 + r1));
    0x00003c4a ldr r7, [r7, r2]                              |     r7 = *((r7 + r2));
    0x00003c4c add r6, r0                                    |     r6 += r0;
    0x00003c4e ldr r0, [r5, r1]                              |     r0 = *((r5 + r1));
    0x00003c50 add r7, ip                                    |     r7 += ip;
    0x00003c52 add r6, r0                                    |     r6 += r0;
    0x00003c54 ldr r0, [r5, r2]                              |     r0 = *((r5 + r2));
    0x00003c56 add r7, r0                                    |     r7 += r0;
    0x00003c58 ldr r0, [r4, r1]                              |     r0 = *((r4 + r1));
    0x00003c5a adds r5, r6, r0                               |     r5 = r6 + r0;
    0x00003c5c ldr r6, [r4, r2]                              |     r6 = *((r4 + r2));
    0x00003c5e ldrh.w r4, [r3, 0x62]                         |     r4 = *((r3 + 0x62));
    0x00003c62 add r6, r7                                    |     r6 += r7;
    0x00003c64 ldrh.w r7, [r3, 0x60]                         |     r7 = *((r3 + 0x60));
    0x00003c68 addw r0, r4, 0xc99                            |     __asm ("addw r0, r4, 0xc99");
    0x00003c6c lsls r0, r0, 4                                |     r0 <<= 4;
    0x00003c6e add.w r4, sl, r4, lsl 4                       |     r4 = sl + (r4 << 4);
    0x00003c72 addw r3, r7, 0xc99                            |     __asm ("addw r3, r7, 0xc99");
    0x00003c76 ldr.w r0, [sl, r0]                            |     r0 = *((sl + r0));
    0x00003c7a lsls r3, r3, 4                                |     r3 <<= 4;
    0x00003c7c add.w r7, sl, r7, lsl 4                       |     r7 = sl + (r7 << 4);
    0x00003c80 ldr.w r3, [sl, r3]                            |     r3 = *((sl + r3));
    0x00003c84 add r3, fp                                    |     r3 += fp;
    0x00003c86 add r0, r3                                    |     r0 += r3;
    0x00003c88 ldr r3, [r7, r1]                              |     r3 = *((r7 + r1));
    0x00003c8a ldr r1, [r4, r1]                              |     r1 = *((r4 + r1));
    0x00003c8c str r0, [sp, 0xb8]                            |     var_b8h = r0;
    0x00003c8e uxth r0, r0                                   |     r0 = (int16_t) r0;
    0x00003c90 add r5, r3                                    |     r5 += r3;
    0x00003c92 ldr r3, [r7, r2]                              |     r3 = *((r7 + r2));
    0x00003c94 ldr r2, [r4, r2]                              |     r2 = *((r4 + r2));
    0x00003c96 add r5, r1                                    |     r5 += r1;
    0x00003c98 add r3, r6                                    |     r3 += r6;
    0x00003c9a add r3, r2                                    |     r3 += r2;
    0x00003c9c strd r5, r3, [sp, 0xbc]                       |     __asm ("strd r5, r3, [var_0h_2]");
                                                             | label_7:
    0x00003ca0 movs r1, 0                                    |     r1 = 0;
    0x00003ca2 ldr r4, [sp, 0x50]                            |     r4 = var_50h;
    0x00003ca4 ldr r5, [sp, 0x24]                            |     r5 = var_24h;
    0x00003ca6 mov r3, r1                                    |     r3 = r1;
    0x00003ca8 b 0x3cb6                                      |     
                                                             |     while (r5 != r1) {
    0x00003caa ldrh r2, [r4], 2                              |         r2 = *(r4);
                                                             |         r4 += 2;
    0x00003cae cmp r2, r0                                    |         
    0x00003cb0 itt lt                                        |         
                                                             |         if (r2 >= r0) {
    0x00003cb2 movlt r0, r2                                  |             r0 = r2;
                                                             |         }
                                                             |         if (r2 >= r0) {
    0x00003cb4 movlt r3, r1                                  |             r3 = r1;
                                                             |         }
    0x00003cb6 adds r1, 1                                    |         r1++;
    0x00003cb8 cmp r5, r1                                    |         
    0x00003cba bne 0x3caa                                    |         
                                                             |     }
    0x00003cbc ldr r2, [sp, 0x34]                            |     r2 = var_34h;
    0x00003cbe add r1, sp, 0xf0                              |     r1 += var_f0h;
    0x00003cc0 add.w r1, r1, r3, lsl 2                       |     r1 += (r3 << 2);
    0x00003cc4 add r2, r0                                    |     r2 += r0;
    0x00003cc6 ldr r0, [sp, 0x54]                            |     r0 = var_54h;
    0x00003cc8 str r2, [sp, 0x34]                            |     var_34h = r2;
    0x00003cca ldr r2, [sp, 0x38]                            |     r2 = var_38h;
    0x00003ccc strb r3, [r2, 1]!                             |     *((r2 += 1)) = r3;
    0x00003cd0 adds r5, r0, r2                               |     r5 = r0 + r2;
    0x00003cd2 str r2, [sp, 0x38]                            |     var_38h = r2;
    0x00003cd4 ldr r2, [r1, -0x2c]                           |     r2 = var_c4h;
    0x00003cd8 adds r2, 1                                    |     r2++;
    0x00003cda str r2, [r1, -0x2c]                           |     var_c4h = r2;
    0x00003cde ldr r2, [sp, 0x24]                            |     r2 = var_24h;
    0x00003ce0 cmp r2, 6                                     |     
                                                             |     if (r2 != 6) {
    0x00003ce2 bne.w 0x41d0                                  |         goto label_83;
                                                             |     }
    0x00003ce6 ldrd r1, r2, [sp, 0x18]                       |     __asm ("ldrd r1, r2, [var_18h]");
    0x00003cea subs r2, r2, r1                               |     r2 -= r1;
    0x00003cec cmp r2, 0x31                                  |     
                                                             |     if (r2 != 0x31) {
    0x00003cee bne.w 0x41d0                                  |         goto label_83;
                                                             |     }
    0x00003cf2 ldr r1, [sp, 0x18]                            |     r1 = var_18h;
    0x00003cf4 add.w r3, r3, r3, lsl 7                       |     r3 += (r3 << 7);
    0x00003cf8 ldr r2, [sp, 0x30]                            |     r2 = var_30h;
    0x00003cfa lsls r3, r3, 1                                |     r3 <<= 1;
    0x00003cfc ldrh.w r0, [r2, r1, lsl 1]                    |     offset_2 = r1 << 1;
                                                             |     r0 = *((r2 + offset_2));
    0x00003d00 add.w r2, r2, r1, lsl 1                       |     r2 += (r1 << 1);
    0x00003d04 add r0, r3                                    |     r0 += r3;
    0x00003d06 ldrh r4, [r2, 2]                              |     r4 = *((r2 + 2));
    0x00003d08 add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x00003d0c add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x00003d10 add r4, r3                                    |     r4 += r3;
    0x00003d12 ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00003d16 add.w r4, sl, r4, lsl 2                       |     r4 = sl + (r4 << 2);
    0x00003d1a add.w r4, r4, 0xb000                          |     r4 += 0xb000;
    0x00003d1e adds r1, 1                                    |     r1++;
    0x00003d20 str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x00003d24 ldrh r0, [r2, 4]                              |     r0 = *((r2 + 4));
    0x00003d26 ldr.w r1, [r4, 0x160]                         |     r1 = *((r4 + 0x160));
    0x00003d2a add r0, r3                                    |     r0 += r3;
    0x00003d2c add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x00003d30 adds r1, 1                                    |     r1++;
    0x00003d32 str.w r1, [r4, 0x160]                         |     __asm ("str.w r1, [r4, 0x160]");
    0x00003d36 add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x00003d3a ldrh r4, [r2, 6]                              |     r4 = *((r2 + 6));
    0x00003d3c ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00003d40 add r4, r3                                    |     r4 += r3;
    0x00003d42 adds r1, 1                                    |     r1++;
    0x00003d44 add.w r4, sl, r4, lsl 2                       |     r4 = sl + (r4 << 2);
    0x00003d48 str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x00003d4c ldrh r0, [r2, 8]                              |     r0 = *((r2 + 8));
    0x00003d4e add.w r4, r4, 0xb000                          |     r4 += 0xb000;
    0x00003d52 ldr.w r1, [r4, 0x160]                         |     r1 = *((r4 + 0x160));
    0x00003d56 add r0, r3                                    |     r0 += r3;
    0x00003d58 add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x00003d5c adds r1, 1                                    |     r1++;
    0x00003d5e str.w r1, [r4, 0x160]                         |     __asm ("str.w r1, [r4, 0x160]");
    0x00003d62 add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x00003d66 ldrh r4, [r2, 0xa]                            |     r4 = *((r2 + 0xa));
    0x00003d68 ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00003d6c add r4, r3                                    |     r4 += r3;
    0x00003d6e adds r1, 1                                    |     r1++;
    0x00003d70 add.w r4, sl, r4, lsl 2                       |     r4 = sl + (r4 << 2);
    0x00003d74 str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x00003d78 ldrh r0, [r2, 0xc]                            |     r0 = *((r2 + 0xc));
    0x00003d7a add.w r4, r4, 0xb000                          |     r4 += 0xb000;
    0x00003d7e ldr.w r1, [r4, 0x160]                         |     r1 = *((r4 + 0x160));
    0x00003d82 add r0, r3                                    |     r0 += r3;
    0x00003d84 add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x00003d88 adds r1, 1                                    |     r1++;
    0x00003d8a str.w r1, [r4, 0x160]                         |     __asm ("str.w r1, [r4, 0x160]");
    0x00003d8e add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x00003d92 ldrh r4, [r2, 0xe]                            |     r4 = *((r2 + 0xe));
    0x00003d94 ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00003d98 add r4, r3                                    |     r4 += r3;
    0x00003d9a adds r1, 1                                    |     r1++;
    0x00003d9c add.w r4, sl, r4, lsl 2                       |     r4 = sl + (r4 << 2);
    0x00003da0 str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x00003da4 ldrh r0, [r2, 0x10]                           |     r0 = *((r2 + 0x10));
    0x00003da6 add.w r4, r4, 0xb000                          |     r4 += 0xb000;
    0x00003daa ldr.w r1, [r4, 0x160]                         |     r1 = *((r4 + 0x160));
    0x00003dae add r0, r3                                    |     r0 += r3;
    0x00003db0 add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x00003db4 adds r1, 1                                    |     r1++;
    0x00003db6 str.w r1, [r4, 0x160]                         |     __asm ("str.w r1, [r4, 0x160]");
    0x00003dba add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x00003dbe ldrh r4, [r2, 0x12]                           |     r4 = *((r2 + 0x12));
    0x00003dc0 ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00003dc4 add r4, r3                                    |     r4 += r3;
    0x00003dc6 adds r1, 1                                    |     r1++;
    0x00003dc8 add.w r4, sl, r4, lsl 2                       |     r4 = sl + (r4 << 2);
    0x00003dcc str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x00003dd0 ldrh r0, [r2, 0x14]                           |     r0 = *((r2 + 0x14));
    0x00003dd2 add.w r4, r4, 0xb000                          |     r4 += 0xb000;
    0x00003dd6 ldr.w r1, [r4, 0x160]                         |     r1 = *((r4 + 0x160));
    0x00003dda add r0, r3                                    |     r0 += r3;
    0x00003ddc add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x00003de0 adds r1, 1                                    |     r1++;
    0x00003de2 str.w r1, [r4, 0x160]                         |     __asm ("str.w r1, [r4, 0x160]");
    0x00003de6 add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x00003dea ldrh r4, [r2, 0x18]                           |     r4 = *((r2 + 0x18));
    0x00003dec ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00003df0 add r4, r3                                    |     r4 += r3;
    0x00003df2 adds r1, 1                                    |     r1++;
    0x00003df4 add.w r4, sl, r4, lsl 2                       |     r4 = sl + (r4 << 2);
    0x00003df8 str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x00003dfc ldrh r0, [r2, 0x16]                           |     r0 = *((r2 + 0x16));
    0x00003dfe add.w r4, r4, 0xb000                          |     r4 += 0xb000;
    0x00003e02 add r0, r3                                    |     r0 += r3;
    0x00003e04 add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x00003e08 add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x00003e0c ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00003e10 adds r1, 1                                    |     r1++;
    0x00003e12 str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x00003e16 ldrh r0, [r2, 0x1a]                           |     r0 = *((r2 + 0x1a));
    0x00003e18 ldr.w r1, [r4, 0x160]                         |     r1 = *((r4 + 0x160));
    0x00003e1c add r0, r3                                    |     r0 += r3;
    0x00003e1e add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x00003e22 adds r1, 1                                    |     r1++;
    0x00003e24 str.w r1, [r4, 0x160]                         |     __asm ("str.w r1, [r4, 0x160]");
    0x00003e28 add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x00003e2c ldrh r4, [r2, 0x1c]                           |     r4 = *((r2 + 0x1c));
    0x00003e2e ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00003e32 add r4, r3                                    |     r4 += r3;
    0x00003e34 adds r1, 1                                    |     r1++;
    0x00003e36 add.w r4, sl, r4, lsl 2                       |     r4 = sl + (r4 << 2);
    0x00003e3a str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x00003e3e ldrh r0, [r2, 0x1e]                           |     r0 = *((r2 + 0x1e));
    0x00003e40 add.w r4, r4, 0xb000                          |     r4 += 0xb000;
    0x00003e44 ldr.w r1, [r4, 0x160]                         |     r1 = *((r4 + 0x160));
    0x00003e48 add r0, r3                                    |     r0 += r3;
    0x00003e4a add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x00003e4e adds r1, 1                                    |     r1++;
    0x00003e50 str.w r1, [r4, 0x160]                         |     __asm ("str.w r1, [r4, 0x160]");
    0x00003e54 add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x00003e58 ldrh r4, [r2, 0x20]                           |     r4 = *((r2 + 0x20));
    0x00003e5a ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00003e5e add r4, r3                                    |     r4 += r3;
    0x00003e60 adds r1, 1                                    |     r1++;
    0x00003e62 add.w r4, sl, r4, lsl 2                       |     r4 = sl + (r4 << 2);
    0x00003e66 str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x00003e6a ldrh r0, [r2, 0x22]                           |     r0 = *((r2 + 0x22));
    0x00003e6c add.w r4, r4, 0xb000                          |     r4 += 0xb000;
    0x00003e70 ldr.w r1, [r4, 0x160]                         |     r1 = *((r4 + 0x160));
    0x00003e74 add r0, r3                                    |     r0 += r3;
    0x00003e76 add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x00003e7a adds r1, 1                                    |     r1++;
    0x00003e7c str.w r1, [r4, 0x160]                         |     __asm ("str.w r1, [r4, 0x160]");
    0x00003e80 add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x00003e84 ldrh r4, [r2, 0x24]                           |     r4 = *((r2 + 0x24));
    0x00003e86 ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00003e8a add r4, r3                                    |     r4 += r3;
    0x00003e8c adds r1, 1                                    |     r1++;
    0x00003e8e add.w r4, sl, r4, lsl 2                       |     r4 = sl + (r4 << 2);
    0x00003e92 str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x00003e96 ldrh r0, [r2, 0x26]                           |     r0 = *((r2 + 0x26));
    0x00003e98 add.w r4, r4, 0xb000                          |     r4 += 0xb000;
    0x00003e9c ldr.w r1, [r4, 0x160]                         |     r1 = *((r4 + 0x160));
    0x00003ea0 add r0, r3                                    |     r0 += r3;
    0x00003ea2 add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x00003ea6 adds r1, 1                                    |     r1++;
    0x00003ea8 str.w r1, [r4, 0x160]                         |     __asm ("str.w r1, [r4, 0x160]");
    0x00003eac add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x00003eb0 ldrh r4, [r2, 0x28]                           |     r4 = *((r2 + 0x28));
    0x00003eb2 ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00003eb6 add r4, r3                                    |     r4 += r3;
    0x00003eb8 adds r1, 1                                    |     r1++;
    0x00003eba add.w r4, sl, r4, lsl 2                       |     r4 = sl + (r4 << 2);
    0x00003ebe str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x00003ec2 ldrh r0, [r2, 0x2a]                           |     r0 = *((r2 + 0x2a));
    0x00003ec4 add.w r4, r4, 0xb000                          |     r4 += 0xb000;
    0x00003ec8 ldr.w r1, [r4, 0x160]                         |     r1 = *((r4 + 0x160));
    0x00003ecc add r0, r3                                    |     r0 += r3;
    0x00003ece add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x00003ed2 adds r1, 1                                    |     r1++;
    0x00003ed4 str.w r1, [r4, 0x160]                         |     __asm ("str.w r1, [r4, 0x160]");
    0x00003ed8 add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x00003edc ldrh r4, [r2, 0x2e]                           |     r4 = *((r2 + 0x2e));
    0x00003ede ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00003ee2 add r4, r3                                    |     r4 += r3;
    0x00003ee4 adds r1, 1                                    |     r1++;
    0x00003ee6 add.w r4, sl, r4, lsl 2                       |     r4 = sl + (r4 << 2);
    0x00003eea str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x00003eee ldrh r0, [r2, 0x2c]                           |     r0 = *((r2 + 0x2c));
    0x00003ef0 add.w r4, r4, 0xb000                          |     r4 += 0xb000;
    0x00003ef4 add r0, r3                                    |     r0 += r3;
    0x00003ef6 add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x00003efa add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x00003efe ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00003f02 adds r1, 1                                    |     r1++;
    0x00003f04 str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x00003f08 ldrh r0, [r2, 0x30]                           |     r0 = *((r2 + 0x30));
    0x00003f0a ldr.w r1, [r4, 0x160]                         |     r1 = *((r4 + 0x160));
    0x00003f0e add r0, r3                                    |     r0 += r3;
    0x00003f10 add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x00003f14 adds r1, 1                                    |     r1++;
    0x00003f16 str.w r1, [r4, 0x160]                         |     __asm ("str.w r1, [r4, 0x160]");
    0x00003f1a add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x00003f1e ldrh r4, [r2, 0x32]                           |     r4 = *((r2 + 0x32));
    0x00003f20 ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00003f24 add r4, r3                                    |     r4 += r3;
    0x00003f26 adds r1, 1                                    |     r1++;
    0x00003f28 add.w r4, sl, r4, lsl 2                       |     r4 = sl + (r4 << 2);
    0x00003f2c str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x00003f30 ldrh r0, [r2, 0x34]                           |     r0 = *((r2 + 0x34));
    0x00003f32 add.w r4, r4, 0xb000                          |     r4 += 0xb000;
    0x00003f36 ldr.w r1, [r4, 0x160]                         |     r1 = *((r4 + 0x160));
    0x00003f3a add r0, r3                                    |     r0 += r3;
    0x00003f3c add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x00003f40 adds r1, 1                                    |     r1++;
    0x00003f42 str.w r1, [r4, 0x160]                         |     __asm ("str.w r1, [r4, 0x160]");
    0x00003f46 add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x00003f4a ldrh r4, [r2, 0x36]                           |     r4 = *((r2 + 0x36));
    0x00003f4c ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00003f50 add r4, r3                                    |     r4 += r3;
    0x00003f52 adds r1, 1                                    |     r1++;
    0x00003f54 add.w r4, sl, r4, lsl 2                       |     r4 = sl + (r4 << 2);
    0x00003f58 str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x00003f5c ldrh r0, [r2, 0x38]                           |     r0 = *((r2 + 0x38));
    0x00003f5e add.w r4, r4, 0xb000                          |     r4 += 0xb000;
    0x00003f62 ldr.w r1, [r4, 0x160]                         |     r1 = *((r4 + 0x160));
    0x00003f66 add r0, r3                                    |     r0 += r3;
    0x00003f68 add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x00003f6c adds r1, 1                                    |     r1++;
    0x00003f6e str.w r1, [r4, 0x160]                         |     __asm ("str.w r1, [r4, 0x160]");
    0x00003f72 add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x00003f76 ldrh r4, [r2, 0x3a]                           |     r4 = *((r2 + 0x3a));
    0x00003f78 ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00003f7c add r4, r3                                    |     r4 += r3;
    0x00003f7e adds r1, 1                                    |     r1++;
    0x00003f80 add.w r4, sl, r4, lsl 2                       |     r4 = sl + (r4 << 2);
    0x00003f84 str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x00003f88 ldrh r0, [r2, 0x3c]                           |     r0 = *((r2 + 0x3c));
    0x00003f8a add.w r4, r4, 0xb000                          |     r4 += 0xb000;
    0x00003f8e ldr.w r1, [r4, 0x160]                         |     r1 = *((r4 + 0x160));
    0x00003f92 add r0, r3                                    |     r0 += r3;
    0x00003f94 add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x00003f98 adds r1, 1                                    |     r1++;
    0x00003f9a str.w r1, [r4, 0x160]                         |     __asm ("str.w r1, [r4, 0x160]");
    0x00003f9e add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x00003fa2 ldrh r4, [r2, 0x3e]                           |     r4 = *((r2 + 0x3e));
    0x00003fa4 ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00003fa8 add r4, r3                                    |     r4 += r3;
    0x00003faa adds r1, 1                                    |     r1++;
    0x00003fac add.w r4, sl, r4, lsl 2                       |     r4 = sl + (r4 << 2);
    0x00003fb0 str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x00003fb4 ldrh.w r0, [r2, 0x40]                         |     r0 = *((r2 + 0x40));
    0x00003fb8 add.w r4, r4, 0xb000                          |     r4 += 0xb000;
    0x00003fbc ldr.w r1, [r4, 0x160]                         |     r1 = *((r4 + 0x160));
    0x00003fc0 add r0, r3                                    |     r0 += r3;
    0x00003fc2 add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x00003fc6 adds r1, 1                                    |     r1++;
    0x00003fc8 str.w r1, [r4, 0x160]                         |     __asm ("str.w r1, [r4, 0x160]");
    0x00003fcc add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x00003fd0 ldrh.w r4, [r2, 0x44]                         |     r4 = *((r2 + 0x44));
    0x00003fd4 ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00003fd8 add r4, r3                                    |     r4 += r3;
    0x00003fda adds r1, 1                                    |     r1++;
    0x00003fdc add.w r4, sl, r4, lsl 2                       |     r4 = sl + (r4 << 2);
    0x00003fe0 str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x00003fe4 ldrh.w r0, [r2, 0x42]                         |     r0 = *((r2 + 0x42));
    0x00003fe8 add.w r4, r4, 0xb000                          |     r4 += 0xb000;
    0x00003fec add r0, r3                                    |     r0 += r3;
    0x00003fee add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x00003ff2 add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x00003ff6 ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00003ffa adds r1, 1                                    |     r1++;
    0x00003ffc str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x00004000 ldrh.w r0, [r2, 0x46]                         |     r0 = *((r2 + 0x46));
    0x00004004 ldr.w r1, [r4, 0x160]                         |     r1 = *((r4 + 0x160));
    0x00004008 add r0, r3                                    |     r0 += r3;
    0x0000400a add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x0000400e adds r1, 1                                    |     r1++;
    0x00004010 str.w r1, [r4, 0x160]                         |     __asm ("str.w r1, [r4, 0x160]");
    0x00004014 add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x00004018 ldrh.w r4, [r2, 0x48]                         |     r4 = *((r2 + 0x48));
    0x0000401c ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00004020 add r4, r3                                    |     r4 += r3;
    0x00004022 adds r1, 1                                    |     r1++;
    0x00004024 add.w r4, sl, r4, lsl 2                       |     r4 = sl + (r4 << 2);
    0x00004028 str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x0000402c ldrh.w r0, [r2, 0x4a]                         |     r0 = *((r2 + 0x4a));
    0x00004030 add.w r4, r4, 0xb000                          |     r4 += 0xb000;
    0x00004034 ldr.w r1, [r4, 0x160]                         |     r1 = *((r4 + 0x160));
    0x00004038 add r0, r3                                    |     r0 += r3;
    0x0000403a add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x0000403e adds r1, 1                                    |     r1++;
    0x00004040 str.w r1, [r4, 0x160]                         |     __asm ("str.w r1, [r4, 0x160]");
    0x00004044 add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x00004048 ldrh.w r4, [r2, 0x4c]                         |     r4 = *((r2 + 0x4c));
    0x0000404c ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00004050 add r4, r3                                    |     r4 += r3;
    0x00004052 adds r1, 1                                    |     r1++;
    0x00004054 add.w r4, sl, r4, lsl 2                       |     r4 = sl + (r4 << 2);
    0x00004058 str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x0000405c ldrh.w r0, [r2, 0x4e]                         |     r0 = *((r2 + 0x4e));
    0x00004060 add.w r4, r4, 0xb000                          |     r4 += 0xb000;
    0x00004064 ldr.w r1, [r4, 0x160]                         |     r1 = *((r4 + 0x160));
    0x00004068 add r0, r3                                    |     r0 += r3;
    0x0000406a add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x0000406e adds r1, 1                                    |     r1++;
    0x00004070 str.w r1, [r4, 0x160]                         |     __asm ("str.w r1, [r4, 0x160]");
    0x00004074 add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x00004078 ldrh.w r4, [r2, 0x50]                         |     r4 = *((r2 + 0x50));
    0x0000407c ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00004080 add r4, r3                                    |     r4 += r3;
    0x00004082 adds r1, 1                                    |     r1++;
    0x00004084 add.w r4, sl, r4, lsl 2                       |     r4 = sl + (r4 << 2);
    0x00004088 str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x0000408c ldrh.w r0, [r2, 0x52]                         |     r0 = *((r2 + 0x52));
    0x00004090 add.w r4, r4, 0xb000                          |     r4 += 0xb000;
    0x00004094 ldr.w r1, [r4, 0x160]                         |     r1 = *((r4 + 0x160));
    0x00004098 add r0, r3                                    |     r0 += r3;
    0x0000409a add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x0000409e adds r1, 1                                    |     r1++;
    0x000040a0 str.w r1, [r4, 0x160]                         |     __asm ("str.w r1, [r4, 0x160]");
    0x000040a4 add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x000040a8 ldrh.w r4, [r2, 0x54]                         |     r4 = *((r2 + 0x54));
    0x000040ac ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x000040b0 add r4, r3                                    |     r4 += r3;
    0x000040b2 adds r1, 1                                    |     r1++;
    0x000040b4 add.w r4, sl, r4, lsl 2                       |     r4 = sl + (r4 << 2);
    0x000040b8 str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x000040bc ldrh.w r0, [r2, 0x56]                         |     r0 = *((r2 + 0x56));
    0x000040c0 add.w r4, r4, 0xb000                          |     r4 += 0xb000;
    0x000040c4 ldr.w r1, [r4, 0x160]                         |     r1 = *((r4 + 0x160));
    0x000040c8 add r0, r3                                    |     r0 += r3;
    0x000040ca add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x000040ce adds r1, 1                                    |     r1++;
    0x000040d0 str.w r1, [r4, 0x160]                         |     __asm ("str.w r1, [r4, 0x160]");
    0x000040d4 add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x000040d8 ldrh.w r4, [r2, 0x5a]                         |     r4 = *((r2 + 0x5a));
    0x000040dc ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x000040e0 add r4, r3                                    |     r4 += r3;
    0x000040e2 adds r1, 1                                    |     r1++;
    0x000040e4 add.w r4, sl, r4, lsl 2                       |     r4 = sl + (r4 << 2);
    0x000040e8 str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x000040ec ldrh.w r0, [r2, 0x58]                         |     r0 = *((r2 + 0x58));
    0x000040f0 add.w r4, r4, 0xb000                          |     r4 += 0xb000;
    0x000040f4 add r0, r3                                    |     r0 += r3;
    0x000040f6 add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x000040fa add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x000040fe ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00004102 adds r1, 1                                    |     r1++;
    0x00004104 str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x00004108 ldrh.w r0, [r2, 0x5c]                         |     r0 = *((r2 + 0x5c));
    0x0000410c ldr.w r1, [r4, 0x160]                         |     r1 = *((r4 + 0x160));
    0x00004110 add r0, r3                                    |     r0 += r3;
    0x00004112 add.w r0, sl, r0, lsl 2                       |     r0 = sl + (r0 << 2);
    0x00004116 adds r1, 1                                    |     r1++;
    0x00004118 str.w r1, [r4, 0x160]                         |     __asm ("str.w r1, [r4, 0x160]");
    0x0000411c add.w r0, r0, 0xb000                          |     r0 += 0xb000;
    0x00004120 ldrh.w r4, [r2, 0x5e]                         |     r4 = *((r2 + 0x5e));
    0x00004124 ldr.w r1, [r0, 0x160]                         |     r1 = *((r0 + 0x160));
    0x00004128 add r4, r3                                    |     r4 += r3;
    0x0000412a adds r1, 1                                    |     r1++;
    0x0000412c add.w r4, sl, r4, lsl 2                       |     r4 = sl + (r4 << 2);
    0x00004130 str.w r1, [r0, 0x160]                         |     __asm ("str.w r1, [r0, 0x160]");
    0x00004134 ldrh.w r1, [r2, 0x60]                         |     r1 = *((r2 + 0x60));
    0x00004138 add.w r4, r4, 0xb000                          |     r4 += 0xb000;
    0x0000413c ldrh.w r2, [r2, 0x62]                         |     r2 = *((r2 + 0x62));
    0x00004140 add r1, r3                                    |     r1 += r3;
    0x00004142 add r3, r2                                    |     r3 += r2;
    0x00004144 ldr.w r2, [r4, 0x160]                         |     r2 = *((r4 + 0x160));
    0x00004148 add.w r1, sl, r1, lsl 2                       |     r1 = sl + (r1 << 2);
    0x0000414c add.w r3, sl, r3, lsl 2                       |     r3 = sl + (r3 << 2);
    0x00004150 add.w r1, r1, 0xb000                          |     r1 += 0xb000;
    0x00004154 adds r2, 1                                    |     r2++;
    0x00004156 str.w r2, [r4, 0x160]                         |     __asm ("str.w r2, [r4, 0x160]");
    0x0000415a add.w r3, r3, 0xb000                          |     r3 += 0xb000;
    0x0000415e ldr.w r2, [r1, 0x160]                         |     r2 = *((r1 + 0x160));
    0x00004162 adds r2, 1                                    |     r2++;
    0x00004164 str.w r2, [r1, 0x160]                         |     __asm ("str.w r2, [r1, 0x160]");
    0x00004168 ldr.w r2, [r3, 0x160]                         |     r2 = *((r3 + 0x160));
    0x0000416c adds r2, 1                                    |     r2++;
    0x0000416e str.w r2, [r3, 0x160]                         |     __asm ("str.w r2, [r3, 0x160]");
                                                             | label_9:
    0x00004172 ldrd r3, r2, [sp, 0x28]                       |     __asm ("ldrd r3, r2, [var_28h]");
    0x00004176 cmp r3, r2                                    |     
                                                             |     if (r3 <= r2) {
    0x00004178 ble 0x4214                                    |         goto label_84;
                                                             |     }
                                                             | label_10:
    0x0000417a ldr r3, [sp, 0x2c]                            |     r3 = var_2ch;
    0x0000417c str r3, [sp, 0x18]                            |     var_18h = r3;
    0x0000417e b.w 0x35f4                                    |     goto label_6;
                                                             | label_82:
    0x00004182 ldrd r2, r3, [sp, 0x18]                       |     __asm ("ldrd r2, r3, [var_18h]");
    0x00004186 ldrh.w r0, [sp, 0xb8]                         |     r0 = var_b8h;
    0x0000418a cmp r3, r2                                    |     
                                                             |     if (r3 < r2) {
    0x0000418c blt.w 0x3ca0                                  |         goto label_7;
                                                             |     }
    0x00004190 ldr r3, [sp, 0x30]                            |     r3 = var_30h;
    0x00004192 movw r6, 0x9324                               |     r6 = 0x9324;
    0x00004196 ldr r2, [sp, 0x1c]                            |     r2 = var_1ch;
    0x00004198 ldr.w ip, [sp, 0x5c]                          |     ip = var_5ch;
    0x0000419c adds r4, r3, 2                                |     r4 = r3 + 2;
    0x0000419e ldr r7, [sp, 0x3c]                            |     r7 = var_3ch;
    0x000041a0 add.w r4, r4, r2, lsl 1                       |     r4 += (r2 << 1);
    0x000041a4 ldr r2, [sp, 0x18]                            |     r2 = var_18h;
    0x000041a6 add.w r1, r3, r2, lsl 1                       |     r1 = r3 + (r2 << 1);
                                                             | label_8:
    0x000041aa ldrh r3, [r1], 2                              |     r3 = *(r1);
                                                             |     r1 += 2;
    0x000041ae mov r2, r7                                    |     r2 = r7;
    0x000041b0 add r3, r6                                    |     r3 += r6;
    0x000041b2 add r3, sl                                    |     r3 += sl;
                                                             |     do {
    0x000041b4 ldrh r0, [r2]                                 |         r0 = *(r2);
    0x000041b6 ldrb r5, [r3]                                 |         r5 = *(r3);
    0x000041b8 add.w r3, r3, 0x102                           |         r3 += 0x102;
    0x000041bc add r0, r5                                    |         r0 += r5;
    0x000041be strh r0, [r2], 2                              |         *(r2) = r0;
                                                             |         r2 += 2;
    0x000041c2 cmp ip, r2                                    |         
    0x000041c4 bne 0x41b4                                    |         
                                                             |     } while (ip != r2);
    0x000041c6 cmp r4, r1                                    |     
                                                             |     if (r4 != r1) {
    0x000041c8 bne 0x41aa                                    |         goto label_8;
                                                             |     }
    0x000041ca ldrh.w r0, [sp, 0xb8]                         |     r0 = var_b8h;
    0x000041ce b 0x3ca0                                      |     goto label_7;
                                                             | label_83:
    0x000041d0 ldrd r1, r2, [sp, 0x18]                       |     __asm ("ldrd r1, r2, [var_18h]");
    0x000041d4 cmp r2, r1                                    |     
                                                             |     if (r2 < r1) {
    0x000041d6 blt 0x4172                                    |         goto label_9;
                                                             |     }
    0x000041d8 ldr r1, [sp, 0x30]                            |     r1 = var_30h;
    0x000041da add.w r3, r3, r3, lsl 7                       |     r3 += (r3 << 7);
    0x000041de ldr r2, [sp, 0x18]                            |     r2 = var_18h;
    0x000041e0 adds r4, r1, 2                                |     r4 = r1 + 2;
    0x000041e2 add.w r0, r1, r2, lsl 1                       |     r0 = r1 + (r2 << 1);
    0x000041e6 lsls r2, r3, 1                                |     r2 = r3 << 1;
    0x000041e8 ldr r3, [sp, 0x1c]                            |     r3 = var_1ch;
    0x000041ea add.w r4, r4, r3, lsl 1                       |     r4 += (r3 << 1);
                                                             |     do {
    0x000041ee ldrh r3, [r0], 2                              |         r3 = *(r0);
                                                             |         r0 += 2;
    0x000041f2 add r3, r2                                    |         r3 += r2;
    0x000041f4 cmp r4, r0                                    |         
    0x000041f6 add.w r3, sl, r3, lsl 2                       |         r3 = sl + (r3 << 2);
    0x000041fa add.w r3, r3, 0xb000                          |         r3 += 0xb000;
    0x000041fe ldr.w r1, [r3, 0x160]                         |         r1 = *((r3 + 0x160));
    0x00004202 add.w r1, r1, 1                               |         r1++;
    0x00004206 str.w r1, [r3, 0x160]                         |         __asm ("str.w r1, [r3, 0x160]");
    0x0000420a bne 0x41ee                                    |         
                                                             |     } while (r4 != r0);
    0x0000420c ldrd r3, r2, [sp, 0x28]                       |     __asm ("ldrd r3, r2, [var_28h]");
    0x00004210 cmp r3, r2                                    |     
                                                             |     if (r3 > r2) {
    0x00004212 bgt 0x417a                                    |         goto label_10;
                                                             |     }
                                                             | label_84:
    0x00004214 str r5, [sp, 0x1c]                            |     var_1ch = r5;
    0x00004216 ldr r5, [sp, 0x24]                            |     r5 = var_24h;
                                                             | label_22:
    0x00004218 ldr r3, [sp, 0x68]                            |     r3 = var_68h;
    0x0000421a adds r3, 1                                    |     r3++;
    0x0000421c str r3, [sp, 0x68]                            |     var_68h = r3;
    0x0000421e ldr r3, [sp, 0x6c]                            |     r3 = var_6ch;
    0x00004220 cmp r3, 2                                     |     
                                                             |     if (r3 > 2) {
    0x00004222 bgt.w 0x5c7c                                  |         goto label_85;
                                                             |     }
                                                             | label_19:
    0x00004226 ldr r4, [sp, 0x84]                            |     r4 = var_84h;
    0x00004228 ldr r7, [sp, 0x98]                            |     r7 = var_98h;
    0x0000422a ldr r6, [sp, 0xa0]                            |     r6 = var_a0h;
    0x0000422c ldr.w r8, [sp, 0x40]                          |     r8 = var_40h;
                                                             |     do {
    0x00004230 mov r1, r6                                    |         r1 = r6;
    0x00004232 mov r0, r4                                    |         r0 = r4;
    0x00004234 movs r3, 0x11                                 |         r3 = 0x11;
    0x00004236 add.w r4, r4, 0x102                           |         r4 += 0x102;
    0x0000423a mov r2, r8                                    |         r2 = r8;
    0x0000423c add.w r6, r6, 0x408                           |         r6 += 0x408;
    0x00004240 blx 0xdb8                                     |         fcn_00000db8 ();
    0x00004244 cmp r7, r4                                    |         
    0x00004246 bne 0x4230                                    |         
                                                             |     } while (r7 != r4);
    0x00004248 ldr r3, [sp, 0x68]                            |     r3 = var_68h;
    0x0000424a cmp r3, 4                                     |     
                                                             |     if (r3 != 4) {
    0x0000424c beq 0x4264                                    |         
    0x0000424e ldr.w r3, [sl, 0x268]                         |         r3 = *((sl + 0x268));
    0x00004252 str r3, [sp, 0x6c]                            |         var_6ch = r3;
    0x00004254 ldr.w r3, [sl, 0x274]                         |         r3 = *((sl + 0x274));
    0x00004258 str r3, [sp, 0x28]                            |         var_28h = r3;
    0x0000425a b.w 0x35a0                                    |         goto label_11;
                                                             |     }
    0x00004264 movs r3, 0                                    |     r3 = 0;
    0x00004266 add r7, sp, 0xdc                              |     r7 += var_dch;
    0x00004268 str r3, [sp, 0x18]                            |     var_18h = r3;
    0x0000426a mov r3, r7                                    |     r3 = r7;
                                                             |     do {
    0x0000426c ldr r2, [sp, 0x18]                            |         r2 = var_18h;
    0x0000426e strb r2, [r3], 1                              |         *(r3) = r2;
                                                             |         r3++;
    0x00004272 adds r2, 1                                    |         r2++;
    0x00004274 cmp r5, r2                                    |         
    0x00004276 str r2, [sp, 0x18]                            |         var_18h = r2;
    0x00004278 bne 0x426c                                    |         
                                                             |     } while (r5 != r2);
    0x0000427a ldr r2, [sp, 0x1c]                            |     r2 = var_1ch;
                                                             |     if (r2 == 0) {
    0x0000427c cbz r2, 0x42ba                                |         goto label_86;
                                                             |     }
    0x0000427e ldrb.w r3, [sp, 0xdc]                         |     r3 = var_dch;
    0x00004282 addw r5, sl, 0x67f                            |     __asm ("addw r5, sl, 0x67f");
    0x00004286 add.w r6, sl, 0x4c80                          |     r6 = sl + 0x4c80;
    0x0000428a add.w ip, r5, r2                              |     
    0x0000428e adds r6, 0x51                                 |     r6 += 0x51;
                                                             | label_12:
    0x00004290 ldrb r4, [r5, 1]!                             |     r4 = *((r5 += 1));
    0x00004294 cmp r4, r3                                    |     
    0x00004296 it eq                                         |     
                                                             |     if (r4 != r3) {
    0x00004298 moveq r1, 0                                   |         r1 = 0;
                                                             |     }
                                                             |     if (r4 == r3) {
    0x0000429a beq 0x42b2                                    |         goto label_87;
                                                             |     }
    0x0000429c add.w r2, sp, 0xdd                            |     r2 += var_ddh;
    0x000042a0 movs r1, 0                                    |     r1 = 0;
                                                             |     do {
    0x000042a2 mov r0, r3                                    |         r0 = r3;
    0x000042a4 ldrb r3, [r2]                                 |         r3 = *(r2);
    0x000042a6 adds r1, 1                                    |         r1++;
    0x000042a8 strb r0, [r2], 1                              |         *(r2) = r0;
                                                             |         r2++;
    0x000042ac cmp r4, r3                                    |         
    0x000042ae bne 0x42a2                                    |         
                                                             |     } while (r4 != r3);
    0x000042b0 uxtb r1, r1                                   |     r1 = (int8_t) r1;
                                                             | label_87:
    0x000042b2 cmp ip, r5                                    |     
    0x000042b4 strb r1, [r6, 1]!                             |     *((r6 += 1)) = r1;
                                                             |     if (ip != r5) {
    0x000042b8 bne 0x4290                                    |         goto label_12;
                                                             |     }
                                                             | label_86:
    0x000042ba ldr r3, [sp, 0x88]                            |     r3 = var_88h;
    0x000042bc ldr r2, [sp, 0x64]                            |     r2 = var_64h;
    0x000042be ldr r5, [sp, 0x8c]                            |     r5 = var_8ch;
    0x000042c0 ldr r6, [sp, 0x78]                            |     r6 = var_78h;
    0x000042c2 add r3, r2                                    |     r3 += r2;
    0x000042c4 mov r8, r3                                    |     r8 = r3;
    0x000042c6 mov r4, r3                                    |     r4 = r3;
    0x000042c8 add r6, r5                                    |     r6 += r5;
                                                             | label_13:
    0x000042ca ldr r3, [sp, 0x40]                            |     r3 = var_40h;
    0x000042cc cmp r3, 0                                     |     
    0x000042ce itt le                                        |     
                                                             |     if (r3 > 0) {
    0x000042d0 movle fp, 0                                   |         
                                                             |     }
                                                             |     if (r3 <= 0) {
    0x000042d4 mov.w sb, 0x20                                |         sb = 0x20;
                                                             |     }
                                                             |     if (r3 <= 0) {
    0x000042d8 ble 0x430a                                    |         goto label_17;
                                                             |     }
    0x000042da ldr r3, [sp, 0x74]                            |     r3 = stream;
    0x000042dc mov.w fp, 0                                   |     
    0x000042e0 mov.w sb, 0x20                                |     sb = 0x20;
    0x000042e4 subs r1, r3, 1                                |     r1 = r3 - 1;
                                                             |     do {
    0x000042e6 ldrb r3, [r1, 1]!                             |         r3 = *((r1 += 1));
    0x000042ea cmp fp, r3                                    |         
    0x000042ec it lt                                         |         
                                                             |         if (fp >= r3) {
    0x000042ee movlt fp, r3                                  |             
                                                             |         }
    0x000042f0 cmp sb, r3                                    |         
    0x000042f2 it ge                                         |         
                                                             |         if (sb < r3) {
    0x000042f4 movge sb, r3                                  |             sb = r3;
                                                             |         }
    0x000042f6 cmp r4, r1                                    |         
    0x000042f8 bne 0x42e6                                    |         
                                                             |     } while (r4 != r1);
    0x000042fa cmp.w fp, 0x11                                |     
                                                             |     if (fp > 0x11) {
    0x000042fe bgt.w 0x4474                                  |         goto label_88;
                                                             |     }
    0x00004302 cmp.w sb, 0                                   |     
                                                             |     if (sb == 0) {
    0x00004306 beq.w 0x4484                                  |         goto label_89;
                                                             |     }
                                                             | label_17:
    0x0000430a ldr r1, [sp, 0x40]                            |     r1 = var_40h;
    0x0000430c mov r3, fp                                    |     r3 = fp;
    0x0000430e mov r2, sb                                    |     r2 = sb;
    0x00004310 add.w r4, r4, 0x102                           |     r4 += 0x102;
    0x00004314 str r1, [sp]                                  |     *(sp) = r1;
    0x00004316 ldr r1, [sp, 0x74]                            |     r1 = stream;
    0x00004318 add.w r0, r1, 0x102                           |     r0 = r1 + 0x102;
    0x0000431c str r0, [sp, 0x74]                            |     stream = r0;
    0x0000431e mov r0, r5                                    |     r0 = r5;
    0x00004320 add.w r5, r5, 0x408                           |     r5 += 0x408;
    0x00004324 blx 0xf80                                     |     fputc (r0, r1);
    0x00004328 cmp r6, r5                                    |     
                                                             |     if (r6 != r5) {
    0x0000432a bne 0x42ca                                    |         goto label_13;
                                                             |     }
    0x0000432c add.w r0, sl, 0x67                            |     r0 = sl + 0x67;
    0x00004330 addw ip, sl, 0x167                            |     __asm ("addw ip, sl, 0x167");
    0x00004334 mov r4, r7                                    |     r4 = r7;
    0x00004336 mov r1, r0                                    |     r1 = r0;
    0x00004338 movs r5, 1                                    |     r5 = 1;
    0x0000433a movs r3, 0                                    |     r3 = 0;
    0x0000433c str r3, [sp, 0xdc]                            |     var_dch = r3;
    0x0000433e strd r3, r3, [r7, 4]                          |     __asm ("strd r3, r3, [var_4h_3]");
    0x00004342 str r3, [r7, 0xc]                             |     var_ch = r3;
                                                             | label_14:
    0x00004344 sub.w r3, r1, 0x10                            |     r3 = r1 - 0x10;
                                                             |     do {
    0x00004348 ldrb r2, [r3, 1]!                             |         r2 = *((r3 += 1));
                                                             |         if (r2 != 0) {
    0x0000434c cbz r2, 0x4350                                |             
    0x0000434e strb r5, [r4]                                 |             *(r4) = r5;
                                                             |         }
    0x00004350 cmp r1, r3                                    |         
    0x00004352 bne 0x4348                                    |         
                                                             |     } while (r1 != r3);
    0x00004354 adds r1, 0x10                                 |     r1 += 0x10;
    0x00004356 adds r4, 1                                    |     r4++;
    0x00004358 cmp ip, r1                                    |     
                                                             |     if (ip != r1) {
    0x0000435a bne 0x4344                                    |         goto label_14;
                                                             |     }
    0x0000435c ldr.w lr, [sl, 0x4c]                          |     
    0x00004360 add.w r6, sp, 0xdb                            |     r6 += var_dbh;
    0x00004364 adds r7, 0xf                                  |     r7 += 0xf;
    0x00004366 mov.w sb, -0x80000000                         |     sb = -0x80000000;
    0x0000436a mov r1, r6                                    |     r1 = r6;
    0x0000436c mov r2, lr                                    |     r2 = lr;
                                                             | label_15:
    0x0000436e ldrb r4, [r1, 1]!                             |     r4 = var_dch;
    0x00004372 ldr.w r3, [sl, 0x25c]                         |     r3 = *((sl + 0x25c));
    0x00004376 cmp r4, 0                                     |     
                                                             |     if (r4 != 0) {
    0x00004378 bne.w 0x448e                                  |         goto label_90;
                                                             |     }
    0x0000437c cmp r3, 7                                     |     
    0x0000437e it gt                                         |     
                                                             |     if (r3 <= 7) {
    0x00004380 ldrgt r4, [sl, 0x258]                         |         r4 = *((sl + 0x258));
                                                             |     }
                                                             |     if (r3 <= 7) {
    0x00004384 ble 0x43b4                                    |         goto label_91;
                                                             |     }
                                                             |     do {
    0x00004386 ldr.w r5, [sl, 0x2c]                          |         r5 = *((sl + 0x2c));
    0x0000438a lsrs r4, r4, 0x18                             |         r4 >>= 0x18;
    0x0000438c strb r4, [r5, r2]                             |         *((r5 + r2)) = r4;
    0x0000438e ldr.w r4, [sl, 0x258]                         |         r4 = *((sl + 0x258));
    0x00004392 ldr.w r5, [sl, 0x25c]                         |         r5 = *((sl + 0x25c));
    0x00004396 ldr.w r3, [sl, 0x4c]                          |         r3 = *((sl + 0x4c));
    0x0000439a subs r5, 8                                    |         r5 -= 8;
    0x0000439c lsls r4, r4, 8                                |         r4 <<= 8;
    0x0000439e cmp r5, 7                                     |         
    0x000043a0 str.w r5, [sl, 0x25c]                         |         __asm ("str.w r5, [sl, 0x25c]");
    0x000043a4 add.w r2, r3, 1                               |         r2 = r3 + 1;
    0x000043a8 str.w r4, [sl, 0x258]                         |         __asm ("str.w r4, [sl, 0x258]");
    0x000043ac str.w r2, [sl, 0x4c]                          |         __asm ("str.w r2, [sl, 0x4c]");
    0x000043b0 bgt 0x4386                                    |         
                                                             |     } while (r5 > 7);
    0x000043b2 mov r3, r5                                    |     r3 = r5;
                                                             | label_91:
    0x000043b4 adds r3, 1                                    |     r3++;
                                                             | label_18:
    0x000043b6 cmp r7, r1                                    |     
    0x000043b8 str.w r3, [sl, 0x25c]                         |     __asm ("str.w r3, [sl, 0x25c]");
                                                             |     if (r7 != r1) {
    0x000043bc bne 0x436e                                    |         goto label_15;
                                                             |     }
    0x000043be mov.w r7, -0x80000000                         |     r7 = -0x80000000;
    0x000043c2 b 0x43cc                                      |     goto label_92;
                                                             | label_16:
    0x000043c4 adds r0, 0x10                                 |     r0 += 0x10;
    0x000043c6 cmp ip, r0                                    |     
                                                             |     if (ip == r0) {
    0x000043c8 beq.w 0x44d2                                  |         void (*0x44d2)() ();
                                                             |     }
                                                             | label_92:
    0x000043cc ldrb r3, [r6, 1]!                             |     r3 = var_dch;
    0x000043d0 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x000043d2 beq 0x43c4                                    |         goto label_16;
                                                             |     }
    0x000043d4 sub.w r4, r0, 0x10                            |     r4 = r0 - 0x10;
    0x000043d8 ldr.w r1, [sl, 0x25c]                         |     r1 = *((sl + 0x25c));
    0x000043dc ldrb r3, [r4, 1]!                             |     r3 = *((r4 += 1));
    0x000043de subs r7, 1                                    |     r7--;
                                                             |     if (r3 != 0) {
    0x000043e0 cbnz r3, 0x442e                               |         void (*0x442e)() ();
                                                             |     }
                                                             | label_88:
    0x00004474 movw r0, 0xbbc                                |     r0 = 0xbbc;
    0x00004478 blx 0xfc0                                     |     fcn_00000fc0 ();
    0x0000447c cmp.w sb, 0                                   |     
                                                             |     if (sb != 0) {
    0x00004480 bne.w 0x430a                                  |         goto label_17;
                                                             |     }
                                                             | label_89:
    0x00004484 movw r0, 0xbbd                                |     r0 = 0xbbd;
    0x00004488 blx 0xfc0                                     |     fcn_00000fc0 ();
    0x0000448c b 0x430a                                      |     goto label_17;
                                                             | label_90:
    0x0000448e cmp r3, 7                                     |     
    0x00004490 ldr.w r4, [sl, 0x258]                         |     r4 = *((sl + 0x258));
                                                             |     if (r3 <= 7) {
    0x00004494 ble 0x44c4                                    |         goto label_93;
                                                             |     }
                                                             |     do {
    0x00004496 ldr.w r5, [sl, 0x2c]                          |         r5 = *((sl + 0x2c));
    0x0000449a lsrs r4, r4, 0x18                             |         r4 >>= 0x18;
    0x0000449c strb r4, [r5, r2]                             |         *((r5 + r2)) = r4;
    0x0000449e ldr.w r4, [sl, 0x258]                         |         r4 = *((sl + 0x258));
    0x000044a2 ldr.w r5, [sl, 0x25c]                         |         r5 = *((sl + 0x25c));
    0x000044a6 ldr.w r3, [sl, 0x4c]                          |         r3 = *((sl + 0x4c));
    0x000044a8 adds r0, 0x4c                                 |         r0 += 0x4c;
    0x000044aa subs r5, 8                                    |         r5 -= 8;
    0x000044ac lsls r4, r4, 8                                |         r4 <<= 8;
    0x000044ae cmp r5, 7                                     |         
    0x000044b0 str.w r5, [sl, 0x25c]                         |         __asm ("str.w r5, [sl, 0x25c]");
    0x000044b4 add.w r2, r3, 1                               |         r2 = r3 + 1;
    0x000044b8 str.w r4, [sl, 0x258]                         |         __asm ("str.w r4, [sl, 0x258]");
    0x000044bc str.w r2, [sl, 0x4c]                          |         __asm ("str.w r2, [sl, 0x4c]");
    0x000044c0 bgt 0x4496                                    |         
                                                             |     } while (r5 > 7);
    0x000044c2 mov r3, r5                                    |     r3 = r5;
                                                             | label_93:
    0x000044c4 lsr.w r5, sb, r3                              |     r5 = sb >> r3;
    0x000044c8 adds r3, 1                                    |     r3++;
    0x000044ca orrs r4, r5                                   |     r4 |= r5;
    0x000044cc str.w r4, [sl, 0x258]                         |     __asm ("str.w r4, [sl, 0x258]");
    0x000044d0 b 0x43b6                                      |     goto label_18;
                                                             | label_85:
    0x00005c7c ldr r3, [sp, 0x34]                            |     r3 = var_34h;
    0x00005c7e ldr r2, [pc, 0x1e8]                           |     r2 = *(0x5e6a);
    0x00005c80 ldr r1, [sp, 0x4c]                            |     r1 = var_4ch;
    0x00005c82 ldr r6, [pc, 0x1ec]                           |     
    0x00005c84 asrs r3, r3, 3                                |     r3 >>= 3;
    0x00005c86 ldr r4, [sp, 0x7c]                            |     r4 = var_7ch;
    0x00005c88 ldr r7, [r1, r2]                              |     r7 = *((r1 + r2));
    0x00005c8a movs r1, 1                                    |     r1 = 1;
    0x00005c8c str r3, [sp]                                  |     *(sp) = r3;
    0x00005c8e add r6, pc                                    |     r6 = 0xbb04;
    0x00005c90 ldr r3, [sp, 0x68]                            |     r3 = var_68h;
    0x00005c92 ldr r2, [sp, 0xb4]                            |     r2 = var_b4h;
    0x00005c94 ldr r0, [r7]                                  |     r0 = *(r7);
    0x00005c96 blx 0xf50                                     |     fcn_00000f50 ();
                                                             |     do {
    0x00005c9a ldr r3, [r4], 4                               |         r3 = *(r4);
                                                             |         r4 += 4;
    0x00005c9e mov r2, r6                                    |         r2 = r6;
    0x00005ca0 ldr r0, [r7]                                  |         r0 = *(r7);
    0x00005ca2 movs r1, 1                                    |         r1 = 1;
    0x00005ca4 blx 0xf50                                     |         fcn_00000f50 ();
    0x00005ca8 ldr r3, [sp, 0x94]                            |         r3 = var_94h;
    0x00005caa cmp r3, r4                                    |         
    0x00005cac bne 0x5c9a                                    |         
                                                             |     } while (r3 != r4);
    0x00005cae ldr r1, [r7]                                  |     r1 = *(r7);
    0x00005cb0 movs r0, 0xa                                  |     r0 = 0xa;
    0x00005cb2 blx 0xf8c                                     |     fopen64 ();
    0x00005cb6 b.w 0x4226                                    |     goto label_19;
                                                             | label_80:
    0x00005cba ldr r3, [sp, 0x40]                            |     r3 = var_40h;
    0x00005cbc cmp r3, 0                                     |     
                                                             |     if (r3 <= 0) {
    0x00005cbe ble.w 0x35d2                                  |         goto label_20;
                                                             |     }
    0x00005cc2 ldr r1, [sp, 0x88]                            |     r1 = var_88h;
    0x00005cc4 add.w r2, sl, 0xc900                          |     r2 = sl + 0xc900;
    0x00005cc8 ldr r0, [sp, 0x64]                            |     r0 = var_64h;
    0x00005cca adds r2, 0x90                                 |     r2 += 0x90;
    0x00005ccc ldr r3, [sp, 0x80]                            |     r3 = var_80h;
    0x00005cce adds r0, r1, r0                               |     r0 = r1 + r0;
                                                             |     do {
    0x00005cd0 ldrb.w r4, [r3, 0x103]                        |         r4 = *((r3 + 0x103));
    0x00005cd4 adds r2, 0x10                                 |         r2 += 0x10;
    0x00005cd6 ldrb r1, [r3, 1]!                             |         r1 = *((r3 += 1));
    0x00005cda cmp r0, r3                                    |         
    0x00005cdc orr.w r1, r1, r4, lsl 16                      |         r1 |= (r4 << 16);
    0x00005ce0 str r1, [r2, -0x10]                           |         *((r2 - 0x10)) = r1;
    0x00005ce4 ldrb.w r4, [r3, 0x306]                        |         r4 = *((r3 + 0x306));
    0x00005ce8 ldrb.w r1, [r3, 0x204]                        |         r1 = *((r3 + 0x204));
    0x00005cec orr.w r1, r1, r4, lsl 16                      |         r1 |= (r4 << 16);
    0x00005cf0 str r1, [r2, -0xc]                            |         *((r2 - 0xc)) = r1;
    0x00005cf4 ldrb.w r4, [r3, 0x50a]                        |         r4 = *((r3 + 0x50a));
    0x00005cf8 ldrb.w r1, [r3, 0x408]                        |         r1 = *((r3 + 0x408));
    0x00005cfc orr.w r1, r1, r4, lsl 16                      |         r1 |= (r4 << 16);
    0x00005d00 str r1, [r2, -0x8]                            |         *((r2 - 0x8)) = r1;
    0x00005d04 bne 0x5cd0                                    |         
                                                             |     } while (r0 != r3);
    0x00005d06 ldr r3, [sp, 0x28]                            |     r3 = var_28h;
    0x00005d08 cmp r3, 0                                     |     
                                                             |     if (r3 > 0) {
    0x00005d0a bgt.w 0x35da                                  |         goto label_21;
                                                             |     }
                                                             | label_81:
    0x00005d0e movs r3, 0                                    |     r3 = 0;
    0x00005d10 str r3, [sp, 0x1c]                            |     var_1ch = r3;
    0x00005d12 str r3, [sp, 0x34]                            |     var_34h = r3;
    0x00005d14 b.w 0x4218                                    |     goto label_22;
                                                             | label_74:
    0x00005d18 mov.w fp, 0                                   |     
    0x00005d1c b.w 0x345a                                    |     goto label_23;
                                                             | label_73:
    0x00005d20 ldr r0, [sp, 0x4c]                            |     r0 = var_4ch;
    0x00005d22 ldr r1, [pc, 0x144]                           |     r1 = *(0x5e6a);
    0x00005d24 ldr r2, [pc, 0x14c]                           |     
    0x00005d26 ldr.w r3, [sl, 0x264]                         |     r3 = *((sl + 0x264));
    0x00005d2a ldr r1, [r0, r1]                              |     r1 = *((r0 + r1));
    0x00005d2c add r2, pc                                    |     r2 = 0xbba4;
    0x00005d2e ldr r0, [r1]                                  |     r0 = *(0x5e6a);
    0x00005d30 movs r1, 1                                    |     r1 = 1;
    0x00005d32 blx 0xf50                                     |     fcn_00000f50 ();
    0x00005d36 b.w 0x3384                                    |     goto label_24;
                                                             | label_58:
    0x00005d3a movs r3, 3                                    |     r3 = 3;
    0x00005d3c mov r5, r3                                    |     r5 = r3;
    0x00005d3e str r3, [sp, 0x60]                            |     var_60h = r3;
    0x00005d40 b.w 0x33c6                                    |     goto label_25;
                                                             | label_55:
    0x00005d9a ldr r2, [sp, 0x4c]                            |     r2 = var_4ch;
    0x00005d9c movs r1, 1                                    |     r1 = 1;
    0x00005d9e ldr r3, [pc, 0xc8]                            |     r3 = *(0x5e6a);
    0x00005da0 ldr r3, [r2, r3]                              |     r3 = *((r2 + r3));
    0x00005da2 ldr r2, [pc, 0xe0]                            |     
    0x00005da4 ldr r0, [r3]                                  |     r0 = *(0x5e6a);
    0x00005da6 ldr.w r3, [sl, 0x54]                          |     r3 = *((sl + 0x54));
    0x00005daa add r2, pc                                    |     r2 = 0xbc34;
    0x00005dac str r3, [sp, 4]                               |     var_4h = r3;
    0x00005dae ldr.w r3, [sl, 0x274]                         |     r3 = *((sl + 0x274));
    0x00005db2 str r3, [sp]                                  |     *(sp) = r3;
    0x00005db4 ldr.w r3, [sl, 0x44]                          |     r3 = *((sl + 0x44));
    0x00005db8 blx 0xf50                                     |     fcn_00000f50 ();
    0x00005dbc b.w 0x2fb4                                    |     goto label_26;
                                                             | label_56:
    0x00005dc0 movw r0, 0xbb9                                |     r0 = 0xbb9;
    0x00005dc4 blx 0xfc0                                     |     fcn_00000fc0 ();
    0x00005dc8 ldr.w r7, [sl, 0x274]                         |     r7 = *((sl + 0x274));
    0x00005dcc b.w 0x2ff6                                    |     goto label_27;
                                                             | label_59:
    0x00005dd0 movs r3, 4                                    |     r3 = 4;
    0x00005dd2 mov r5, r3                                    |     r5 = r3;
    0x00005dd4 str r3, [sp, 0x60]                            |     var_60h = r3;
    0x00005dd6 b.w 0x33c6                                    |     goto label_25;
                                                             | label_64:
    0x00005dda add.w r0, r2, 8                               |     r0 = r2 + 8;
    0x00005dde b.w 0x30fe                                    |     goto label_28;
                                                             | label_62:
    0x00005de2 blx 0xe1c                                     |     fcn_00000e1c ();
                                                             | label_47:
    0x00005de6 add.w r2, r3, 8                               |     r2 = r3 + 8;
    0x00005dea b.w 0x2d98                                    |     goto label_29;
                                                             | label_48:
    0x00005dee add.w r0, r2, 8                               |     r0 = r2 + 8;
    0x00005df2 b.w 0x2de0                                    |     goto label_30;
                                                             | label_49:
    0x00005df6 add.w r1, r0, 8                               |     r1 = r0 + 8;
    0x00005dfa b.w 0x2e28                                    |     goto label_31;
                                                             | label_50:
    0x00005dfe add.w r0, r1, 8                               |     r0 = r1 + 8;
    0x00005e02 b.w 0x2e70                                    |     goto label_32;
                                                             | label_51:
    0x00005e06 add.w r1, r0, 8                               |     r1 = r0 + 8;
    0x00005e0a b.w 0x2eb8                                    |     goto label_33;
                                                             | label_52:
    0x00005e0e add.w r0, r1, 8                               |     r0 = r1 + 8;
    0x00005e12 b.w 0x2f00                                    |     goto label_34;
                                                             | label_72:
    0x00005e16 add.w r0, r1, 8                               |     r0 = r1 + 8;
    0x00005e1a b.w 0x335c                                    |     goto label_35;
                                                             | label_63:
    0x00005e1e add.w r2, r3, 8                               |     r2 = r3 + 8;
    0x00005e22 b.w 0x30b6                                    |     goto label_36;
                                                             | label_67:
    0x00005e26 add.w r2, r3, 8                               |     r2 = r3 + 8;
    0x00005e2a b.w 0x31f4                                    |     goto label_37;
                                                             | label_68:
    0x00005e2e add.w r0, r2, 8                               |     r0 = r2 + 8;
    0x00005e32 b.w 0x323c                                    |     goto label_38;
                                                             | label_69:
    0x00005e36 add.w r1, r0, 8                               |     r1 = r0 + 8;
    0x00005e3a b.w 0x3284                                    |     goto label_39;
                                                             | label_70:
    0x00005e3e add.w r0, r1, 8                               |     r0 = r1 + 8;
    0x00005e42 b.w 0x32cc                                    |     goto label_40;
                                                             | label_71:
    0x00005e46 add.w r1, r0, 8                               |     r1 = r0 + 8;
    0x00005e4a b.w 0x3314                                    |     goto label_41;
                                                             | label_60:
    0x00005e4e movs r3, 6                                    |     r3 = 6;
    0x00005e50 mov r5, r3                                    |     r5 = r3;
    0x00005e52 str r3, [sp, 0x60]                            |     var_60h = r3;
    0x00005e54 b.w 0x33c6                                    |     goto label_25;
                                                             | label_66:
    0x00005e58 add.w r0, r1, 8                               |     r0 = r1 + 8;
    0x00005e5c b.w 0x319e                                    |     goto label_42;
                                                             | label_65:
    0x00005e60 add.w r1, r0, 8                               |     r1 = r0 + 8;
    0x00005e64 b.w 0x3148                                    |     goto label_43;
                                                             | }

[*] Function popen used 1 times libbz2.so.1.0.8