[*] Binary protection state of libsqlcipher.so.0.8.6

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


[*] Function strcpy tear down of libsqlcipher.so.0.8.6

    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x89e0 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.000089e0 ()                          | void fcn_000089e0 (int16_t arg1, int16_t arg2, uint32_t arg3) {
                                                     |     int32_t var_0h;
                                                     |     int32_t var_0h_2;
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
                                                     |     r2 = arg3;
    0x000089e0 mvnsmi lr, 0xb4000                    |     __asm ("mvnsmi lr, aav.0x000000ff");
    0x000089e4 subs r6, r2, 0                        |     r6 = r2 - 0;
    0x000089e6 sub sp, 0xc                           |     
    0x000089e8 ittt gt                               |     
                                                     |     if (r6 <= r2) {
    0x000089ea movgt r4, r0                          |         r4 = r0;
                                                     |     }
                                                     |     if (r6 <= r2) {
    0x000089ec movgt r7, r1                          |         r7 = r1;
                                                     |     }
                                                     |     if (r6 <= r2) {
    0x000089ee movgt r5, r6                          |         r5 = r6;
                                                     |     }
                                                     |     if (r6 > r2) {
    0x000089f0 bgt 0x8a58                            |         goto label_0;
                                                     |     }
    0x000089f2 b 0x8a66                              |     goto label_1;
                                                     |     do {
    0x000089f4 ldrd r3, r2, [r4, 4]                  |         __asm ("ldrd r3, r2, [r4, 4]");
    0x000089f8 ldr r0, [r4, 0x10]                    |         r0 = *((r4 + 0x10));
    0x000089fa subs r2, r2, r0                       |         r2 -= r0;
    0x000089fc add r0, r3                            |         r0 += r3;
    0x000089fe cmp r2, r5                            |         
    0x00008a00 it ge                                 |         
                                                     |         if (r2 < r5) {
    0x00008a02 movge r2, r5                          |             r2 = r5;
                                                     |         }
    0x00008a04 mov sb, r2                            |         sb = r2;
    0x00008a06 subs r5, r5, r2                       |         r5 -= r2;
    0x00008a08 blx 0x6214                            |         fcn_00006214 ();
    0x00008a0c ldr r2, [r4, 0x10]                    |         r2 = *((r4 + 0x10));
    0x00008a0e ldr r3, [r4, 8]                       |         r3 = *((r4 + 8));
    0x00008a10 add r2, sb                            |         r2 += sb;
    0x00008a12 cmp r2, r3                            |         
    0x00008a14 str r2, [r4, 0x10]                    |         *((r4 + 0x10)) = r2;
                                                     |         if (r2 == r3) {
    0x00008a16 bne 0x8a54                            |             
    0x00008a18 ldr r1, [r4, 0xc]                     |             r1 = *((r4 + 0xc));
    0x00008a1a ldr r0, [r4, 0x18]                    |             r0 = *((r4 + 0x18));
    0x00008a1c ldrd r3, lr, [r4, 0x1c]               |             __asm ("ldrd r3, lr, [r4, 0x1c]");
    0x00008a20 subs r2, r2, r1                       |             r2 -= r1;
    0x00008a22 adds.w ip, r1, r0                     |             
    0x00008a26 ldr r0, [r4, 4]                       |             r0 = *((r4 + 4));
    0x00008a28 adc.w r3, r3, r1, asr 31              |             __asm ("adc.w r3, r3, r1, asr 31");
    0x00008a2c add r1, r0                            |             r1 += r0;
    0x00008a2e mov r0, lr                            |             r0 = lr;
    0x00008a30 ldr.w lr, [lr]                        |             
    0x00008a34 strd ip, r3, [sp]                     |             __asm ("strd ip, r3, [sp]");
    0x00008a38 ldr.w r3, [lr, 0xc]                   |             r3 = *((lr + 0xc));
    0x00008a3c blx r3                                |             uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00008a3e ldrd r3, r2, [r4, 0x18]               |             __asm ("ldrd r3, r2, [r4, 0x18]");
    0x00008a42 ldr r1, [r4, 8]                       |             r1 = *((r4 + 8));
    0x00008a44 str r0, [r4]                          |             *(r4) = r0;
    0x00008a46 strd r8, r8, [r4, 0xc]                |             __asm ("strd r8, r8, [r4, 0xc]");
    0x00008a4a adds r3, r3, r1                       |             r3 += r1;
    0x00008a4c adc.w r2, r2, r1, asr 31              |             __asm ("adc.w r2, r2, r1, asr 31");
    0x00008a50 str r3, [r4, 0x18]                    |             *((r4 + 0x18)) = r3;
    0x00008a52 str r2, [r4, 0x1c]                    |             *((r4 + 0x1c)) = r2;
                                                     |         }
    0x00008a54 cmp r5, 0                             |         
                                                     |         if (r5 <= 0) {
    0x00008a56 ble 0x8a66                            |             goto label_1;
                                                     |         }
                                                     | label_0:
    0x00008a58 ldr.w r8, [r4]                        |         r8 = *(r4);
    0x00008a5c subs r1, r6, r5                       |         r1 = r6 - r5;
    0x00008a5e add r1, r7                            |         r1 += r7;
    0x00008a60 cmp.w r8, 0                           |         
    0x00008a64 beq 0x89f4                            |         
                                                     |     } while (r8 == 0);
                                                     | label_1:
    0x00008a66 add sp, 0xc                           |     
    0x00008a68 pop.w {r4, r5, r6, r7, r8, sb, pc}    |     
                                                     | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x95bc */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.000095bc ()                      | void fcn_000095bc (int16_t arg1, uint32_t arg2) {
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
    0x000095bc push {r3, r4, r5, r6, r7, lr}     |     
    0x000095be ldrb r3, [r0, 0x10]               |     r3 = *((r0 + 0x10));
    0x000095c0 ldr r5, [r0, 0x18]                |     r5 = *((r0 + 0x18));
    0x000095c2 cmp r3, r1                        |     
                                                 |     if (r3 == r1) {
    0x000095c4 beq 0x9602                        |         goto label_1;
                                                 |     }
    0x000095c6 cmp r1, 1                         |     
    0x000095c8 mov r4, r0                        |     r4 = r0;
    0x000095ca itt eq                            |     
                                                 |     if (r1 != 1) {
    0x000095cc strbeq r1, [r4, 0x10]             |         *((r4 + 0x10)) = r1;
                                                 |     }
                                                 |     if (r1 != 1) {
    0x000095ce moveq r0, 0                       |         r0 = 0;
                                                 |     }
                                                 |     if (r1 == 1) {
    0x000095d0 beq 0x95e8                        |         goto label_2;
                                                 |     }
    0x000095d2 ldr r6, [pc, 0x44]                |     
    0x000095d4 mov r0, r5                        |     r0 = r5;
    0x000095d6 add r6, pc                        |     r6 = 0x12bf4;
    0x000095d8 ldr.w r3, [r6, 0xe8]              |     r3 = *(0x12cdc);
    0x000095dc blx r3                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x000095de cmp r0, 0                         |     
    0x000095e0 blt 0x95ea                        |     
                                                 |     while (r0 >= 0) {
    0x000095e2 movs r3, 0                        |         r3 = 0;
    0x000095e4 mov r0, r3                        |         r0 = r3;
    0x000095e6 strb r3, [r4, 0x10]               |         *((r4 + 0x10)) = r3;
                                                 | label_2:
    0x000095e8 pop {r3, r4, r5, r6, r7, pc}      |         
    0x000095ea blx 0x67d0                        |         r0 = fcn_000067d0 ();
    0x000095ee ldr r3, [r0]                      |         r3 = *(r0);
    0x000095f0 mov r7, r0                        |         r7 = r0;
    0x000095f2 cmp r3, 0x14                      |         
                                                 |         if (r3 != 0x14) {
    0x000095f4 beq 0x9606                        |             
                                                 | label_0:
    0x000095f6 cmp r3, 2                         |             
                                                 |             if (r3 != 2) {
    0x000095f8 beq 0x9602                        |                 
    0x000095fa movw r0, 0x80a                    |                 r0 = 0x80a;
    0x000095fe str r3, [r4, 0x14]                |                 *((r4 + 0x14)) = r3;
    0x00009600 pop {r3, r4, r5, r6, r7, pc}      |                 
                                                 |             }
                                                 | label_1:
    0x00009602 movs r0, 0                        |             r0 = 0;
    0x00009604 pop {r3, r4, r5, r6, r7, pc}      |             
                                                 |         }
    0x00009606 ldr.w r3, [r6, 0xc4]              |         r3 = *((r6 + 0xc4));
    0x0000960a mov r0, r5                        |         r0 = r5;
    0x0000960c blx r3                            |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000960e cmp r0, 0                         |         
    0x00009610 bge 0x95e2                        |         
                                                 |     }
    0x00009612 ldr r3, [r7]                      |     r3 = *(r7);
    0x00009614 b 0x95f6                          |     goto label_0;
                                                 | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xe308 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.0000e308 ()                      | void fcn_0000e308 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                 |     int32_t var_0h;
                                                 |     int32_t var_0h_2;
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
                                                 |     r2 = arg3;
    0x0000e308 push {r4, r5, r6, r7, lr}         |     
    0x0000e30a mov r4, r1                        |     r4 = r1;
    0x0000e30c ldr r3, [r4]                      |     r3 = *(r4);
    0x0000e30e sub sp, 0xc                       |     
    0x0000e310 mov r7, r0                        |     r7 = r0;
    0x0000e312 mov r5, r2                        |     r5 = r2;
    0x0000e314 ldr r1, [r1, 4]                   |     r1 = *((r1 + 4));
    0x0000e316 ldr r6, [r4, 0x10]                |     r6 = *((r4 + 0x10));
                                                 |     if (r3 == 0) {
    0x0000e318 cbnz r3, 0xe348                   |         
                                                 |         if (r1 == 0) {
    0x0000e31a cbz r1, 0xe348                    |             goto label_0;
                                                 |         }
    0x0000e31c ldr r3, [r4, 0xc]                 |         r3 = *((r4 + 0xc));
    0x0000e31e cmp r3, r6                        |         
                                                 |         if (r3 >= r6) {
    0x0000e320 bge 0xe348                        |             goto label_0;
                                                 |         }
    0x0000e322 subs r2, r6, r3                   |         r2 = r6 - r3;
    0x0000e324 ldr r6, [r4, 0x18]                |         r6 = *((r4 + 0x18));
    0x0000e326 ldr r0, [r4, 0x20]                |         r0 = *((r4 + 0x20));
    0x0000e328 add r1, r3                        |         r1 += r3;
    0x0000e32a adds.w lr, r3, r6                 |         lr = r3 + r6;
    0x0000e32e ldr r6, [r4, 0x1c]                |         r6 = *((r4 + 0x1c));
    0x0000e330 ldr.w ip, [r0]                    |         ip = *(r0);
    0x0000e334 adc.w r3, r6, r3, asr 31          |         __asm ("adc.w r3, r6, r3, asr 31");
    0x0000e338 strd lr, r3, [sp]                 |         __asm ("strd lr, r3, [sp]");
    0x0000e33c ldr.w r3, [ip, 0xc]               |         r3 = *((ip + 0xc));
    0x0000e340 blx r3                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0000e342 ldr r6, [r4, 0x10]                |         r6 = *((r4 + 0x10));
    0x0000e344 ldr r1, [r4, 4]                   |         r1 = *((r4 + 4));
    0x0000e346 str r0, [r4]                      |         *(r4) = r0;
                                                 |     }
                                                 | label_0:
    0x0000e348 ldr r3, [r4, 0x18]                |     r3 = *((r4 + 0x18));
    0x0000e34a mov r0, r7                        |     r0 = r7;
    0x0000e34c ldr r2, [r4, 0x1c]                |     r2 = *((r4 + 0x1c));
    0x0000e34e adds r3, r3, r6                   |     r3 += r6;
    0x0000e350 str r3, [r5]                      |     *(r5) = r3;
    0x0000e352 adc.w r2, r2, r6, asr 31          |     __asm ("adc.w r2, r2, r6, asr 31");
    0x0000e356 str r2, [r5, 4]                   |     *((r5 + 4)) = r2;
    0x0000e358 bl 0xe12c                         |     fcn_0000e12c (r0, r1);
    0x0000e35c ldr r5, [r4]                      |     r5 = *(r4);
    0x0000e35e movs r2, 0x28                     |     r2 = 0x28;
    0x0000e360 movs r1, 0                        |     r1 = 0;
    0x0000e362 mov r0, r4                        |     r0 = r4;
    0x0000e364 blx 0x5fcc                        |     fcn_00005fcc ();
    0x0000e368 mov r0, r5                        |     r0 = r5;
    0x0000e36a add sp, 0xc                       |     
    0x0000e36c pop {r4, r5, r6, r7, pc}          |     
                                                 | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1149c */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.0001149c ()                          | void fcn_0001149c (int16_t arg1) {
                                                     |     r0 = arg1;
    0x0001149c mvnsmi lr, sp, lsr 18                 |     __asm ("mvnsmi lr, sp, lsr 18");
    0x000114a0 movs r6, 0                            |     r6 = 0;
    0x000114a2 mov r8, r0                            |     r8 = r0;
    0x000114a4 movs r7, 1                            |     r7 = 1;
                                                     | label_0:
    0x000114a6 ldr.w r2, [r8, 0x10]                  |     r2 = *((r8 + 0x10));
    0x000114aa ldr.w r3, [r8, 4]                     |     r3 = *((r8 + 4));
    0x000114ae cmp r2, r3                            |     
                                                     |     if (r2 < r3) {
    0x000114b0 bls 0x11522                           |         goto label_4;
                                                     |     }
                                                     | label_1:
    0x000114b2 ldr.w r4, [r8, 0x18]                  |     r4 = *((r8 + 0x18));
    0x000114b6 cmp r4, 0                             |     
                                                     |     if (r4 == 0) {
    0x000114b8 beq 0x11522                           |         goto label_4;
                                                     |     }
    0x000114ba ldr r3, [r4, 0x1c]                    |     r3 = *((r4 + 0x1c));
    0x000114bc ldrd r5, r2, [r4, 0x14]               |     __asm ("ldrd r5, r2, [r4, 0x14]");
    0x000114c0 ldr r1, [r5]                          |     r1 = *(r5);
    0x000114c2 cmp r3, 0                             |     
                                                     |     if (r3 == 0) {
    0x000114c4 beq 0x1152a                           |         goto label_5;
                                                     |     }
    0x000114c6 str r2, [r3, 0x18]                    |     *((r3 + 0x18)) = r2;
                                                     |     if (r2 == 0) {
                                                     | label_3:
    0x000114c8 cbz r2, 0x11526                       |         goto label_6;
                                                     |     }
    0x000114ca str r3, [r2, 0x1c]                    |     *((r2 + 0x1c)) = r3;
                                                     | label_2:
    0x000114cc strb r7, [r4, 0xc]                    |     *((r4 + 0xc)) = r7;
    0x000114ce ldr r3, [r5, 0x20]                    |     r3 = *((r5 + 0x20));
    0x000114d0 ldr r0, [r4, 8]                       |     r0 = *((r4 + 8));
    0x000114d2 strd r6, r6, [r4, 0x18]               |     __asm ("strd r6, r6, [r4, 0x18]");
    0x000114d6 subs r3, 1                            |     r3--;
    0x000114d8 ldr r1, [r5, 0x28]                    |     r1 = *((r5 + 0x28));
    0x000114da str r3, [r5, 0x20]                    |     *((r5 + 0x20)) = r3;
    0x000114dc bl 0x5debc                            |     fcn_0005debc (r0, r1, r2);
    0x000114e0 ldr r2, [r5, 0x2c]                    |     r2 = *((r5 + 0x2c));
    0x000114e2 ldr.w r3, [r2, r1, lsl 2]             |     offset_0 = r1 << 2;
                                                     |     r3 = *((r2 + offset_0));
    0x000114e6 add.w r2, r2, r1, lsl 2               |     r2 += (r1 << 2);
    0x000114ea cmp r4, r3                            |     
                                                     |     if (r4 == r3) {
    0x000114ec beq 0x114f8                           |         goto label_7;
                                                     |     }
                                                     |     do {
    0x000114ee mov r2, r3                            |         r2 = r3;
    0x000114f0 ldr r3, [r3, 0x10]                    |         r3 = *((r3 + 0x10));
    0x000114f2 cmp r4, r3                            |         
    0x000114f4 bne 0x114ee                           |         
                                                     |     } while (r4 != r3);
    0x000114f6 adds r2, 0x10                         |     r2 += 0x10;
                                                     | label_7:
    0x000114f8 ldr r3, [r5, 0x24]                    |     r3 = *((r5 + 0x24));
    0x000114fa ldr r1, [r4, 0x10]                    |     r1 = *((r4 + 0x10));
    0x000114fc subs r3, 1                            |     r3--;
    0x000114fe str r1, [r2]                          |     *(r2) = r1;
    0x00011500 str r3, [r5, 0x24]                    |     *((r5 + 0x24)) = r3;
    0x00011502 ldr r0, [r4]                          |     r0 = *(r4);
    0x00011504 bl 0x11040                            |     fcn_00011040 (r0);
    0x00011508 ldr r3, [r5, 0xc]                     |     r3 = *((r5 + 0xc));
    0x0001150a cmp r3, 0                             |     
                                                     |     if (r3 == 0) {
    0x0001150c beq 0x114a6                           |         goto label_0;
                                                     |     }
    0x0001150e ldr r2, [r5]                          |     r2 = *(r5);
    0x00011510 ldr r3, [r2, 0x10]                    |     r3 = *((r2 + 0x10));
    0x00011512 subs r3, 1                            |     r3--;
    0x00011514 str r3, [r2, 0x10]                    |     *((r2 + 0x10)) = r3;
    0x00011516 ldr.w r3, [r8, 4]                     |     r3 = *((r8 + 4));
    0x0001151a ldr.w r2, [r8, 0x10]                  |     r2 = *((r8 + 0x10));
    0x0001151e cmp r2, r3                            |     
                                                     |     if (r2 > r3) {
    0x00011520 bhi 0x114b2                           |         goto label_1;
                                                     |     }
                                                     | label_4:
    0x00011522 pop.w {r4, r5, r6, r7, r8, pc}        |     
                                                     | label_6:
    0x00011526 str r3, [r1, 0x18]                    |     *((r1 + 0x18)) = r3;
    0x00011528 b 0x114cc                             |     goto label_2;
                                                     | label_5:
    0x0001152a str r2, [r1, 0x14]                    |     *((r1 + 0x14)) = r2;
    0x0001152c b 0x114c8                             |     goto label_3;
                                                     | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x14b5c).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate 
the needed data for the issue.


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x14be8).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate 
the needed data for the issue.
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x18b14 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.00018b14 ()                      | void fcn_00018b14 (int16_t arg1) {
                                                 |     r0 = arg1;
    0x00018b14 push {r4, r5, r6, lr}             |     
    0x00018b16 mov.w r2, 0x3fc                   |     r2 = 0x3fc;
    0x00018b1a ldr r6, [r0, 0x18]                |     r6 = *((r0 + 0x18));
    0x00018b1c mov r5, r0                        |     r5 = r0;
    0x00018b1e ldr r3, [r6, 0x54]                |     r3 = *((r6 + 0x54));
                                                 |     if (r3 != 0) {
    0x00018b20 cbz r3, 0x18b2a                   |         
    0x00018b22 lsls r2, r3, 3                    |         r2 = r3 << 3;
    0x00018b24 add.w r2, r2, r3, lsl 1           |         r2 += (r3 << 1);
    0x00018b28 lsls r2, r2, 2                    |         r2 <<= 2;
                                                 |     }
    0x00018b2a ldr r1, [r5, 4]                   |     r1 = *((r5 + 4));
    0x00018b2c ldr r0, [r6]                      |     r0 = *(r6);
    0x00018b2e bl 0x17264                        |     r0 = fcn_00017264 (r0, r1, r2);
    0x00018b32 mov r4, r0                        |     r4 = r0;
    0x00018b34 movs r0, 7                        |     r0 = 7;
                                                 |     if (r4 == 0) {
    0x00018b36 cbz r4, 0x18b60                   |         goto label_1;
                                                 |     }
    0x00018b38 ldr r3, [r6]                      |     r3 = *(r6);
    0x00018b3a ldr.w r2, [r3, 0x10c]             |     r2 = *((r3 + 0x10c));
    0x00018b3e cmp r4, r2                        |     
    0x00018b40 bhs 0x18b62                       |     
                                                 |     while (r4 >= r2) {
    0x00018b42 ldr r3, [pc, 0x2c]                |         
    0x00018b44 mov r0, r4                        |         r0 = r4;
    0x00018b46 add r3, pc                        |         
    0x00018b48 ldr r3, [r3, 0x30]                |         r3 = *(0x316ec);
    0x00018b4a blx r3                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
                                                 | label_0:
    0x00018b4c movw r3, 0xcccd                   |         
    0x00018b50 movt r3, 0xcccc                   |         r3 = 0xcccccccd;
    0x00018b54 umull r2, r3, r3, r0              |         r2:r3 = r3 * r0;
    0x00018b58 movs r0, 0                        |         r0 = 0;
    0x00018b5a lsrs r3, r3, 4                    |         r3 >>= 4;
    0x00018b5c str r3, [r6, 0x54]                |         *((r6 + 0x54)) = r3;
    0x00018b5e str r4, [r5, 4]                   |         *((r5 + 4)) = r4;
                                                 | label_1:
    0x00018b60 pop {r4, r5, r6, pc}              |         
    0x00018b62 ldr.w r2, [r3, 0x110]             |         r2 = *((r3 + 0x110));
    0x00018b66 cmp r4, r2                        |         
    0x00018b68 bhs 0x18b42                       |         
                                                 |     }
    0x00018b6a ldrh.w r0, [r3, 0xf0]             |     r0 = *((r3 + 0xf0));
    0x00018b6e b 0x18b4c                         |     goto label_0;
                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1a27c */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.0001a27c ()                                          | void fcn_0001a27c (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                     |     int32_t var_0h;
                                                                     |     int32_t var_0h_2;
                                                                     |     int16_t var_ch_3;
                                                                     |     int16_t var_10h;
                                                                     |     int16_t var_14h;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0001a27c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0001a280 mov r6, r2                                            |     r6 = r2;
    0x0001a282 ldr r2, [pc, 0x140]                                   |     
    0x0001a284 mov r8, r3                                            |     r8 = r3;
    0x0001a286 sub sp, 0x1c                                          |     
    0x0001a288 mov r4, r1                                            |     r4 = r1;
    0x0001a28a ldr r5, [r1, 0x28]                                    |     r5 = *((r1 + 0x28));
    0x0001a28c mov r7, r0                                            |     r7 = r0;
    0x0001a28e ldr r3, [pc, 0x138]                                   |     r3 = *(0x1a3ca);
    0x0001a290 add r2, pc                                            |     r2 = 0x3465a;
    0x0001a292 ldr.w sb, [r1]                                        |     sb = *(r1);
    0x0001a296 ldr.w sl, [r1, 4]                                     |     sl = *((r1 + 4));
    0x0001a29a ldr r3, [r2, r3]                                      |     
    0x0001a29c asr.w fp, r5, 0x1f                                    |     
    0x0001a2a0 mov r0, sb                                            |     r0 = sb;
    0x0001a2a2 mov r2, r5                                            |     r2 = r5;
    0x0001a2a4 mov r1, sl                                            |     r1 = sl;
    0x0001a2a6 ldr r3, [r3]                                          |     r3 = *(0x3465a);
    0x0001a2a8 str r3, [sp, 0x14]                                    |     var_14h = r3;
    0x0001a2aa mov.w r3, 0                                           |     r3 = 0;
    0x0001a2ae mov r3, fp                                            |     r3 = fp;
    0x0001a2b0 bl 0x5e500                                            |     fcn_0005e500 (r0, r1, r2, r3);
    0x0001a2b4 mov r3, r2                                            |     r3 = r2;
                                                                     |     if (r2 == 0) {
    0x0001a2b6 cbnz r2, 0x1a2ea                                      |         
    0x0001a2b8 ldr r2, [r4, 8]                                       |         r2 = *((r4 + 8));
    0x0001a2ba ldr r1, [r4, 0xc]                                     |         r1 = *((r4 + 0xc));
    0x0001a2bc ldr r0, [r4, 0x18]                                    |         r0 = *((r4 + 0x18));
    0x0001a2be subs.w r2, r2, sb                                     |         r2 -= sb;
    0x0001a2c2 str r3, [sp, 0xc]                                     |         var_ch_3 = r3;
    0x0001a2c4 sbc.w r1, r1, sl                                      |         __asm ("sbc.w r1, r1, sl");
    0x0001a2c8 cmp r5, r2                                            |         
    0x0001a2ca sbcs.w r1, fp, r1                                     |         __asm ("sbcs.w r1, fp, r1");
    0x0001a2ce ldr r1, [r4, 0x24]                                    |         r1 = *((r4 + 0x24));
    0x0001a2d0 it ge                                                 |         
                                                                     |         if (r5 < r2) {
    0x0001a2d2 movge r5, r2                                          |             r5 = r2;
                                                                     |         }
    0x0001a2d4 mov r2, r5                                            |         r2 = r5;
    0x0001a2d6 ldr r5, [r0]                                          |         r5 = *(r0);
    0x0001a2d8 strd sb, sl, [sp]                                     |         __asm ("strd sb, sl, [sp]");
    0x0001a2dc ldr r5, [r5, 8]                                       |         r5 = *((r5 + 8));
    0x0001a2de blx r5                                                |         r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0001a2e0 mov sb, r0                                            |         sb = r0;
    0x0001a2e2 cmp r0, 0                                             |         
                                                                     |         if (r0 != 0) {
    0x0001a2e4 bne 0x1a374                                           |             goto label_0;
                                                                     |         }
    0x0001a2e6 ldr r5, [r4, 0x28]                                    |         r5 = *((r4 + 0x28));
    0x0001a2e8 ldr r3, [sp, 0xc]                                     |         r3 = var_ch_3;
                                                                     |     }
    0x0001a2ea sub.w sb, r5, r3                                      |     sb = r5 - r3;
    0x0001a2ee cmp sb, r6                                            |     
                                                                     |     if (sb >= r6) {
    0x0001a2f0 bge 0x1a390                                           |         goto label_2;
                                                                     |     }
    0x0001a2f2 ldr r5, [r4, 0x10]                                    |     r5 = *((r4 + 0x10));
    0x0001a2f4 ldr.w sl, [r4, 0x1c]                                  |     sl = *((r4 + 0x1c));
    0x0001a2f8 cmp r5, r6                                            |     
                                                                     |     if (r5 >= r6) {
    0x0001a2fa bge 0x1a31a                                           |         goto label_3;
                                                                     |     }
                                                                     |     do {
    0x0001a2fc lsls r5, r5, 1                                        |         r5 <<= 1;
    0x0001a2fe cmp r6, r5                                            |         
    0x0001a300 bgt 0x1a2fc                                           |         
                                                                     |     } while (r6 > r5);
    0x0001a302 mov r2, r5                                            |     r2 = r5;
    0x0001a304 mov r1, sl                                            |     r1 = sl;
    0x0001a306 mov r0, r7                                            |     r0 = r7;
    0x0001a308 str r3, [sp, 0xc]                                     |     var_ch_3 = r3;
    0x0001a30a bl 0x17264                                            |     fcn_00017264 (r0, r1, r2);
    0x0001a30e ldr r3, [sp, 0xc]                                     |     r3 = var_ch_3;
    0x0001a310 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0001a312 beq 0x1a3ac                                           |         goto label_4;
                                                                     |     }
    0x0001a314 mov sl, r0                                            |     sl = r0;
    0x0001a316 str r5, [r4, 0x10]                                    |     *((r4 + 0x10)) = r5;
    0x0001a318 str r0, [r4, 0x1c]                                    |     *((r4 + 0x1c)) = r0;
                                                                     | label_3:
    0x0001a31a ldr r1, [r4, 0x24]                                    |     r1 = *((r4 + 0x24));
    0x0001a31c mov r0, sl                                            |     r0 = sl;
    0x0001a31e mov r2, sb                                            |     r2 = sb;
    0x0001a320 sub.w r5, r6, sb                                      |     r5 = r6 - sb;
    0x0001a324 add.w fp, sp, 0x10                                    |     
    0x0001a328 add r1, r3                                            |     r1 += r3;
    0x0001a32a blx 0x6214                                            |     fcn_00006214 ();
    0x0001a32e ldr r3, [r4]                                          |     r3 = *(r4);
    0x0001a330 adds.w r3, r3, sb                                     |     r3 += sb;
    0x0001a334 str r3, [r4]                                          |     *(r4) = r3;
    0x0001a336 ldr r3, [r4, 4]                                       |     r3 = *((r4 + 4));
    0x0001a338 adc.w r3, r3, sb, asr 31                              |     __asm ("adc.w r3, r3, sb, asr 31");
    0x0001a33c str r3, [r4, 4]                                       |     *((r4 + 4)) = r3;
                                                                     |     do {
    0x0001a33e ldr r3, [r4, 0x28]                                    |         r3 = *((r4 + 0x28));
    0x0001a340 mov r1, r4                                            |         r1 = r4;
    0x0001a342 mov r0, r7                                            |         r0 = r7;
    0x0001a344 cmp r3, r5                                            |         
    0x0001a346 it ge                                                 |         
                                                                     |         if (r3 < r5) {
    0x0001a348 movge r3, r5                                          |             r3 = r5;
                                                                     |         }
    0x0001a34a mov sl, r3                                            |         sl = r3;
    0x0001a34c mov r3, fp                                            |         r3 = fp;
    0x0001a34e mov r2, sl                                            |         r2 = sl;
    0x0001a350 bl 0x1a27c                                            |         r0 = fcn_0001a27c (r0, r1, r2, r3);
    0x0001a354 mov sb, r0                                            |         sb = r0;
                                                                     |         if (r0 != 0) {
    0x0001a356 cbnz r0, 0x1a374                                      |             goto label_0;
                                                                     |         }
                                                                     | label_1:
    0x0001a358 ldr r0, [r4, 0x1c]                                    |         r0 = *((r4 + 0x1c));
    0x0001a35a subs r3, r6, r5                                       |         r3 = r6 - r5;
    0x0001a35c ldr r1, [sp, 0x10]                                    |         r1 = var_10h;
    0x0001a35e sub.w r5, r5, sl                                      |         r5 -= sl;
    0x0001a360 lsls r2, r1, 0x14                                     |         r2 = r1 << 0x14;
    0x0001a362 mov r2, sl                                            |         r2 = sl;
    0x0001a364 add r0, r3                                            |         r0 += r3;
    0x0001a366 blx 0x6214                                            |         fcn_00006214 ();
    0x0001a36a cmp r5, 0                                             |         
    0x0001a36c bgt 0x1a33e                                           |         
                                                                     |     } while (r5 > 0);
    0x0001a36e ldr r3, [r4, 0x1c]                                    |     r3 = *((r4 + 0x1c));
    0x0001a370 str.w r3, [r8]                                        |     __asm ("str.w r3, [r8]");
                                                                     |     do {
                                                                     | label_0:
    0x0001a374 ldr r2, [pc, 0x54]                                    |         
    0x0001a376 ldr r3, [pc, 0x50]                                    |         r3 = *(0x1a3ca);
    0x0001a378 add r2, pc                                            |         r2 = 0x34748;
    0x0001a37a ldr r3, [r2, r3]                                      |         r3 = *(0x34748);
    0x0001a37c ldr r2, [r3]                                          |         r2 = *(0x34748);
    0x0001a37e ldr r3, [sp, 0x14]                                    |         r3 = var_14h;
    0x0001a380 eors r2, r3                                           |         r2 ^= r3;
    0x0001a382 mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x0001a386 bne 0x1a3c0                                           |             goto label_5;
                                                                     |         }
    0x0001a388 mov r0, sb                                            |         r0 = sb;
    0x0001a38a add sp, 0x1c                                          |         
    0x0001a38c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     | label_2:
    0x0001a390 ldr r2, [r4, 0x24]                                    |         r2 = *((r4 + 0x24));
    0x0001a392 mov.w sb, 0                                           |         sb = 0;
    0x0001a396 add r2, r3                                            |         r2 += r3;
    0x0001a398 ldr r3, [r4]                                          |         r3 = *(r4);
    0x0001a39a str.w r2, [r8]                                        |         __asm ("str.w r2, [r8]");
    0x0001a39e ldr r2, [r4, 4]                                       |         r2 = *((r4 + 4));
    0x0001a3a0 adds r3, r3, r6                                       |         r3 += r6;
    0x0001a3a2 str r3, [r4]                                          |         *(r4) = r3;
    0x0001a3a4 adc.w r2, r2, r6, asr 31                              |         __asm ("adc.w r2, r2, r6, asr 31");
    0x0001a3a8 str r2, [r4, 4]                                       |         *((r4 + 4)) = r2;
    0x0001a3aa b 0x1a374                                             |         
                                                                     |     } while (1);
                                                                     | label_4:
    0x0001a3ac str r0, [sp, 0xc]                                     |     var_ch_3 = r0;
    0x0001a3ae mov r1, sl                                            |     r1 = sl;
    0x0001a3b0 mov r0, r7                                            |     r0 = r7;
    0x0001a3b2 mov.w sb, 7                                           |     sb = 7;
    0x0001a3b6 bl 0xe12c                                             |     fcn_0000e12c (r0, r1);
    0x0001a3ba ldr r2, [sp, 0xc]                                     |     r2 = var_ch_3;
    0x0001a3bc str r2, [r4, 0x1c]                                    |     *((r4 + 0x1c)) = r2;
    0x0001a3be b 0x1a374                                             |     goto label_0;
                                                                     | label_5:
    0x0001a3c0 blx 0x6498                                            |     fcn_00006498 ();
                                                                     |     if (r3 < r3) {
    0x0001a3c4 bls 0x1a358                                           |         goto label_1;
                                                                     |     }
    0x0001a3c6 movs r5, r0                                           |     r5 = r0;
    0x0001a3c8 lsls r0, r1, 0xe                                      |     r0 = r1 << 0xe;
    0x0001a3ca movs r0, r0                                           |     
                                                                     |     if (r0 > r0) {
    0x0001a3cc bhi 0x1a390                                           |         goto label_2;
                                                                     |     }
    0x0001a3ce movs r5, r0                                           |     r5 = r0;
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x24b84 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00024b84 ()                                      | void fcn_00024b84 (int16_t arg1, int16_t arg2) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_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;
                                                                 |     int16_t var_74h;
                                                                 |     int16_t var_78h;
                                                                 |     int32_t var_78h_2;
                                                                 |     int16_t var_84h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00024b84 ldr.w r2, [pc, 0x570]                             |     
    0x00024b88 ldr.w r3, [pc, 0x570]                             |     r3 = *(0x250fc);
    0x00024b8c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00024b90 add r2, pc                                        |     
    0x00024b92 vpush {d8}                                        |     __asm ("vpush {d8}");
    0x00024b96 sub sp, 0x8c                                      |     
    0x00024b98 str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x00024b9a ldr r3, [r2, r3]                                  |     
    0x00024b9c ldr r2, [r0]                                      |     r2 = *(r0);
    0x00024b9e ldr r3, [r3]                                      |     r3 = *(0x49c8c);
    0x00024ba0 str r3, [sp, 0x84]                                |     var_84h = r3;
    0x00024ba2 mov.w r3, 0                                       |     r3 = 0;
    0x00024ba6 ldrb.w r3, [r0, 0x29]                             |     r3 = *((r0 + 0x29));
    0x00024baa str r2, [sp, 0x64]                                |     var_64h = r2;
    0x00024bac ldr r2, [r2]                                      |     r2 = *(0x49c8c);
    0x00024bae cmp r3, 1                                         |     
    0x00024bb0 str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x00024bb2 it le                                             |     
                                                                 |     if (r3 > 1) {
    0x00024bb4 movle r5, 1                                       |         r5 = 1;
                                                                 |     }
    0x00024bb6 str r1, [sp, 0x48]                                |     var_48h = r1;
    0x00024bb8 str r2, [sp, 0x68]                                |     var_68h = r2;
    0x00024bba it le                                             |     
                                                                 |     if (r3 > 1) {
    0x00024bbc strle r5, [sp, 0x14]                              |         var_14h = r5;
                                                                 |     }
                                                                 |     if (r3 > 1) {
    0x00024bbe ble 0x24bca                                       |         
    0x00024bc0 cmp r3, 2                                         |         
    0x00024bc2 ite ne                                            |         
                                                                 |         if (r3 == 2) {
    0x00024bc4 movne r5, 0xa                                     |             r5 = 0xa;
                                                                 |         }
                                                                 |         if (r3 != 2) {
    0x00024bc6 moveq r5, 5                                       |             r5 = 5;
                                                                 |         }
    0x00024bc8 str r5, [sp, 0x14]                                |         var_14h = r5;
                                                                 |     }
    0x00024bca ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00024bcc ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x00024bce ldr r6, [sp, 0x5c]                                |     r6 = var_5ch;
    0x00024bd0 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00024bd2 ldr r0, [sp, 0x68]                                |     r0 = var_68h;
    0x00024bd4 add.w r1, r6, 8                                   |     r1 = r6 + 8;
    0x00024bd8 cmp r3, 0                                         |     
    0x00024bda it ne                                             |     
                                                                 |     if (r3 != 0) {
    0x00024bdc cmpne r2, 0                                       |         __asm ("cmpne r2, 0");
                                                                 |     }
    0x00024bde mul r1, r5, r1                                    |     r1 = r5 * r1;
    0x00024be2 iteet ne                                          |     
                                                                 |     if (r3 == 0) {
    0x00024be4 ldrne r3, [r3]                                    |         r3 = *(r3);
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x00024be6 moveq r4, 0                                       |         r4 = 0;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x00024be8 streq r4, [sp, 0x28]                              |         var_28h = r4;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x00024bea strne r3, [sp, 0x28]                              |         var_28h = r3;
                                                                 |     }
    0x00024bec it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x00024bee lslne r4, r3, 1                                   |         r4 = r3 << 1;
                                                                 |     }
    0x00024bf0 add.w r1, r4, r1, lsl 3                           |     r1 = r4 + (r1 << 3);
    0x00024bf4 bl 0xd3a0                                         |     r0 = fcn_0000d3a0 (r0, r1);
    0x00024bf8 mov r7, r0                                        |     r7 = r0;
    0x00024bfa str r0, [sp, 0x6c]                                |     var_6ch = r0;
    0x00024bfc cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00024bfe beq.w 0x2506c                                     |         goto label_16;
                                                                 |     }
    0x00024c02 lsls r5, r5, 5                                    |     r5 <<= 5;
    0x00024c04 lsls r6, r6, 2                                    |     r6 <<= 2;
    0x00024c06 adds r3, r0, r5                                   |     r3 = r0 + r5;
    0x00024c08 movs r2, 0x20                                     |     r2 = 0x20;
    0x00024c0a movs r1, 0                                        |     r1 = 0;
    0x00024c0c mov r0, r3                                        |     r0 = r3;
    0x00024c0e mov r8, r3                                        |     r8 = r3;
    0x00024c10 str r3, [sp, 0x58]                                |     var_58h = r3;
    0x00024c12 str r6, [sp, 0x70]                                |     var_70h = r6;
    0x00024c14 add r5, r8                                        |     r5 += r8;
    0x00024c16 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00024c1a ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00024c1c mov r3, r7                                        |     r3 = r7;
    0x00024c1e lsls r0, r2, 1                                    |     r0 = r2 << 1;
    0x00024c20 add.w r1, r7, r2, lsl 6                           |     r1 = r7 + (r2 << 6);
    0x00024c24 mov r2, r5                                        |     r2 = r5;
                                                                 |     do {
    0x00024c26 str r2, [r3, 0x18]                                |         *((r3 + 0x18)) = r2;
    0x00024c28 adds r3, 0x20                                     |         r3 += 0x20;
    0x00024c2a cmp r1, r3                                        |         
    0x00024c2c add r2, r6                                        |         r2 += r6;
    0x00024c2e bne 0x24c26                                       |         
                                                                 |     } while (r1 != r3);
    0x00024c30 ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x00024c32 mla r3, r0, r3, r5                                |     __asm ("mla r3, r0, r3, r5");
    0x00024c36 str r3, [sp, 0x40]                                |     var_40h = r3;
    0x00024c38 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00024c3a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00024c3c bne.w 0x25026                                     |         goto label_17;
                                                                 |     }
    0x00024c40 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x00024c42 ldr r2, [sp, 0x58]                                |     r2 = var_58h;
    0x00024c44 ldr.w r3, [r3, 0x1a8]                             |     r3 = *((r3 + 0x1a8));
    0x00024c48 cmp r3, 0x2e                                      |     
    0x00024c4a it hs                                             |     
                                                                 |     if (r3 < 0x2e) {
    0x00024c4c movhs r3, 0x2e                                    |         r3 = 0x2e;
                                                                 |     }
    0x00024c4e strh r3, [r2, 0x10]                               |     *((r2 + 0x10)) = r3;
    0x00024c50 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00024c52 str r3, [sp, 0x40]                                |     var_40h = r3;
                                                                 | label_11:
    0x00024c54 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x00024c56 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00024c58 beq.w 0x25066                                     |         goto label_18;
                                                                 |     }
    0x00024c5c ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00024c5e movs r3, 0                                        |     r3 = 0;
    0x00024c60 vmov.i32 d8, 0                                    |     __asm ("vmov.i32 d8, 0");
    0x00024c64 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00024c66 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00024c68 lsls r2, r2, 5                                    |     r2 <<= 5;
    0x00024c6a str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00024c6c str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00024c6e str r2, [sp, 0x74]                                |     var_74h = r2;
    0x00024c70 ldr r2, [sp, 0x6c]                                |     r2 = var_6ch;
    0x00024c72 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x00024c74 movs r2, 1                                        |     r2 = 1;
    0x00024c76 str r2, [sp, 0x34]                                |     var_34h = r2;
                                                                 | label_8:
    0x00024c78 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00024c7a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00024c7c beq.w 0x24e78                                     |         goto label_19;
                                                                 |     }
    0x00024c80 ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x00024c82 mov.w fp, 0                                       |     
    0x00024c86 str.w fp, [sp, 0x20]                              |     __asm ("str.w fp, [var_20h]");
    0x00024c8a lsls r2, r3, 2                                    |     r2 = r3 << 2;
    0x00024c8c uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x00024c8e str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x00024c90 ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x00024c92 str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x00024c94 ldr r2, [sp, 0x74]                                |     r2 = var_74h;
    0x00024c96 add.w sb, r3, 0x20                                |     sb = r3 + 0x20;
    0x00024c9a ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00024c9c add r3, r2                                        |     r3 += r2;
    0x00024c9e str r3, [sp, 0x4c]                                |     var_4ch = r3;
                                                                 | label_7:
    0x00024ca0 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00024ca2 ldr r4, [r3, 0x10]                                |     r4 = *((r3 + 0x10));
    0x00024ca4 sub.w r3, sb, 0x20                                |     r3 = sb - 0x20;
    0x00024ca8 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00024caa cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00024cac beq.w 0x24e62                                     |         goto label_20;
                                                                 |     }
    0x00024cb0 mov r7, fp                                        |     r7 = fp;
    0x00024cb2 b 0x24cbc                                         |     
                                                                 |     while (r3 != r2) {
                                                                 | label_0:
    0x00024cb4 ldr r4, [r4, 0x30]                                |         r4 = *((r4 + 0x30));
    0x00024cb6 cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x00024cb8 beq.w 0x24e60                                     |             goto label_21;
                                                                 |         }
    0x00024cbc ldrsb r8, [sb, -0xa]                              |         r8 = *((sb - 0xa));
    0x00024cc0 vstr d8, [sp, 0x78]                               |         __asm ("vstr d8, [sp, 0x78]");
    0x00024cc4 ldrd r5, r6, [sb, -0x20]                          |         __asm ("ldrd r5, r6, [sb, -0x20]");
    0x00024cc8 ldr r3, [r4]                                      |         r3 = *(r4);
    0x00024cca ldr r2, [r4, 4]                                   |         r2 = *((r4 + 4));
    0x00024ccc bic.w r3, r3, r5                                  |         r3 = BIT_MASK (r3, r5);
    0x00024cd0 bic.w r2, r2, r6                                  |         r2 = BIT_MASK (r2, r6);
    0x00024cd4 orrs r3, r2                                       |         r3 |= r2;
    0x00024cd6 bne 0x24cb4                                       |         
                                                                 |     }
    0x00024cd8 ldrd r1, r2, [r4, 8]                              |     __asm ("ldrd r1, r2, [r4, 8]");
    0x00024cdc and.w r0, r5, r1                                  |     r0 = r5 & r1;
    0x00024ce0 and.w r3, r6, r2                                  |     r3 = r6 & r2;
    0x00024ce4 orrs r3, r0                                       |     r3 |= r0;
                                                                 |     if (r3 != r0) {
    0x00024ce6 bne 0x24cb4                                       |         goto label_0;
                                                                 |     }
    0x00024ce8 ldrh sl, [sb, -0x10]                              |     sl = *((sb - 0x10));
    0x00024cec orrs r5, r1                                       |     r5 |= r1;
    0x00024cee ldrh r1, [r4, 0x14]                               |     r1 = *((r4 + 0x14));
    0x00024cf0 orrs r6, r2                                       |     r6 |= r2;
    0x00024cf2 ldrsh.w r0, [r4, 0x12]                            |     r0 = *((r4 + 0x12));
    0x00024cf6 add r1, sl                                        |     r1 += sl;
    0x00024cf8 sxth r1, r1                                       |     __asm ("sxth r1, r1");
    0x00024cfa bl 0x9fdc                                         |     fcn_00009fdc (r0, r1);
    0x00024cfe ldrsh r1, [sb, -0xc]                              |     r1 = *((sb - 0xc));
    0x00024d02 bl 0x9fdc                                         |     fcn_00009fdc (r0, r1);
    0x00024d06 ldrh r3, [r4, 0x16]                               |     r3 = *((r4 + 0x16));
    0x00024d08 cmp.w r8, 0                                       |     
    0x00024d0c mov fp, r0                                        |     
    0x00024d0e add sl, r3                                        |     sl += r3;
    0x00024d10 sxth.w sl, sl                                     |     __asm ("sxth.w sl, sl");
                                                                 |     if (r8 < 0) {
    0x00024d14 blt 0x24e06                                       |         goto label_22;
                                                                 |     }
    0x00024d16 ldrd r2, r3, [sb, -0x18]                          |     __asm ("ldrd r2, r3, [sb, -0x18]");
    0x00024d1a strd r2, r3, [sp, 0x78]                           |     __asm ("strd r2, r3, [var_78h]");
                                                                 | label_4:
    0x00024d1e ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00024d20 cmp r3, r8                                        |     
                                                                 |     if (r3 <= r8) {
    0x00024d22 ble 0x24e24                                       |         goto label_23;
                                                                 |     }
    0x00024d24 ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x00024d26 sxth.w r2, r8                                     |     __asm ("sxth.w r2, r8");
    0x00024d2a ldrsh.w r3, [r1, r2, lsl 1]                       |     offset_0 = r2 << 1;
                                                                 |     r3 = *((r1 + offset_0));
    0x00024d2e add.w r2, r1, r2, lsl 1                           |     r2 = r1 + (r2 << 1);
    0x00024d32 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00024d34 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00024d36 beq.w 0x24ea4                                     |         goto label_24;
                                                                 |     }
                                                                 | label_9:
    0x00024d3a mov r1, r3                                        |     r1 = r3;
    0x00024d3c mov r0, fp                                        |     r0 = fp;
    0x00024d3e bl 0x9fdc                                         |     r0 = fcn_00009fdc (r0, r1);
    0x00024d42 mov ip, r0                                        |     
    0x00024d44 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00024d46 beq 0x24e2a                                       |         goto label_25;
                                                                 |     }
                                                                 | label_5:
    0x00024d48 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00024d4a movs r0, 0                                        |     r0 = 0;
    0x00024d4c b 0x24d56                                         |     
                                                                 |     while (r6 != r2) {
                                                                 | label_1:
    0x00024d4e adds r0, 1                                        |         r0++;
    0x00024d50 adds r3, 0x20                                     |         r3 += 0x20;
    0x00024d52 cmp r7, r0                                        |         
                                                                 |         if (r7 == r0) {
    0x00024d54 beq 0x24e30                                       |             goto label_26;
                                                                 |         }
    0x00024d56 ldrd r1, r2, [r3]                                 |         __asm ("ldrd r1, r2, [r3]");
    0x00024d5a cmp r6, r2                                        |         
    0x00024d5c it eq                                             |         
                                                                 |         if (r6 == r2) {
    0x00024d5e cmpeq r5, r1                                      |             __asm ("cmpeq r5, r1");
                                                                 |         }
    0x00024d60 bne 0x24d4e                                       |         
                                                                 |     }
    0x00024d62 ldrb r2, [r3, 0x16]                               |     r2 = *((r3 + 0x16));
    0x00024d64 eor.w r2, r8, r2                                  |     r2 = r8 ^ r2;
    0x00024d68 lsls r2, r2, 0x18                                 |     r2 <<= 0x18;
                                                                 |     if (r2 < r2) {
    0x00024d6a bmi 0x24d4e                                       |         goto label_1;
                                                                 |     }
    0x00024d6c ldrsh.w r2, [r3, 0x12]                            |     r2 = *((r3 + 0x12));
    0x00024d70 cmp ip, r2                                        |     
                                                                 |     if (ip > r2) {
    0x00024d72 bgt 0x24cb4                                       |         goto label_0;
                                                                 |     }
                                                                 |     if (ip == r2) {
    0x00024d74 beq.w 0x24e98                                     |         goto label_27;
                                                                 |     }
                                                                 | label_6:
    0x00024d78 ldrd r1, r2, [sb, -0x20]                          |     __asm ("ldrd r1, r2, [sb, -0x20]");
    0x00024d7c ldr r0, [r4, 8]                                   |     r0 = *((r4 + 8));
    0x00024d7e ldr r5, [sp, 0x2c]                                |     r5 = var_2ch;
    0x00024d80 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00024d82 orrs r1, r0                                       |     r1 |= r0;
    0x00024d84 ldr r0, [r4, 0xc]                                 |     r0 = *((r4 + 0xc));
    0x00024d86 str r1, [r3]                                      |     *(r3) = r1;
    0x00024d88 orrs r2, r0                                       |     r2 |= r0;
    0x00024d8a ldr r0, [r3, 0x18]                                |     r0 = *((r3 + 0x18));
    0x00024d8c str r2, [r3, 4]                                   |     *((r3 + 4)) = r2;
    0x00024d8e mov r2, r5                                        |     r2 = r5;
    0x00024d90 vldr d16, [sp, 0x78]                              |     __asm ("vldr d16, [sp, 0x78]");
    0x00024d94 strb.w r8, [r3, 0x16]                             |     *((r3 + 0x16)) = r8;
    0x00024d98 strh.w sl, [r3, 0x10]                             |     *((r3 + 0x10)) = sl;
    0x00024d9c vstr d16, [r3, 8]                                 |     __asm ("vstr d16, [r3, 8]");
    0x00024da0 strh.w ip, [r3, 0x12]                             |     *((r3 + 0x12)) = ip;
    0x00024da4 strh.w fp, [r3, 0x14]                             |     *((r3 + 0x14)) = fp;
    0x00024da8 ldr r1, [sb, -0x8]                                |     r1 = *((sb - 0x8));
    0x00024dac blx 0x6214                                        |     fcn_00006214 ();
    0x00024db0 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00024db2 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x00024db4 str r4, [r3, r5]                                  |     *((r3 + r5)) = r4;
    0x00024db6 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00024db8 cmp r3, r7                                        |     
                                                                 |     if (r3 > r7) {
    0x00024dba bgt.w 0x24cb4                                     |         goto label_0;
                                                                 |     }
    0x00024dbe ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00024dc0 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00024dc2 ldrsh.w r0, [r3, 0x12]                            |     r0 = *((r3 + 0x12));
    0x00024dc6 adds r3, 0x20                                     |     r3 += 0x20;
    0x00024dc8 ldrsh r6, [r3, -0x10]                             |     r6 = *((r3 - 0x10));
    0x00024dcc cmp r2, 1                                         |     
    0x00024dce str r0, [sp, 0x30]                                |     var_30h = r0;
    0x00024dd0 str r6, [sp, 0x38]                                |     var_38h = r6;
                                                                 |     if (r2 == 1) {
    0x00024dd2 beq.w 0x24f00                                     |         goto label_28;
                                                                 |     }
    0x00024dd6 movs r1, 0                                        |     r1 = 0;
    0x00024dd8 ldr r5, [sp, 0x4c]                                |     r5 = var_4ch;
    0x00024dda movs r2, 1                                        |     r2 = 1;
    0x00024ddc mov ip, r1                                        |     
    0x00024dde b 0x24df0                                         |     
                                                                 |     while (r1 > r0) {
    0x00024de0 ldrsh.w r6, [r3, 0x14]                            |         r6 = *((r3 + 0x14));
                                                                 | label_3:
    0x00024de4 mov r0, r1                                        |         r0 = r1;
    0x00024de6 mov ip, r2                                        |         
                                                                 | label_2:
    0x00024de8 adds r3, 0x20                                     |         r3 += 0x20;
    0x00024dea adds r2, 1                                        |         r2++;
    0x00024dec cmp r3, r5                                        |         
                                                                 |         if (r3 == r5) {
    0x00024dee beq 0x24e8e                                       |             goto label_29;
                                                                 |         }
    0x00024df0 ldrsh.w r1, [r3, 0x12]                            |         r1 = *((r3 + 0x12));
    0x00024df4 cmp r1, r0                                        |         
    0x00024df6 bgt 0x24de0                                       |         
                                                                 |     }
                                                                 |     if (r1 != r0) {
    0x00024df8 bne 0x24de8                                       |         goto label_2;
                                                                 |     }
    0x00024dfa ldrsh.w lr, [r3, 0x14]                            |     
    0x00024dfe cmp lr, r6                                        |     
                                                                 |     if (lr <= r6) {
    0x00024e00 ble 0x24de8                                       |         goto label_2;
                                                                 |     }
    0x00024e02 mov r6, lr                                        |     r6 = lr;
    0x00024e04 b 0x24de4                                         |     goto label_3;
                                                                 | label_22:
    0x00024e06 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00024e08 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x00024e0a str r4, [sp, 4]                                   |     var_4h = r4;
    0x00024e0c str r3, [sp]                                      |     *(sp) = r3;
    0x00024e0e add r3, sp, 0x78                                  |     r3 += var_78h;
    0x00024e10 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00024e12 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00024e14 ldrh r3, [r0, 0x22]                               |     r3 = *((r0 + 0x22));
    0x00024e16 ldr r1, [r0, 8]                                   |     r1 = *((r0 + 8));
    0x00024e18 bl 0x244e4                                        |     r0 = fcn_000244e4 (r0, r1, r2, r3, r4, r5, r6);
    0x00024e1c subs.w r8, r0, 0                                  |     r8 = r0 - 0;
                                                                 |     if (r8 >= r0) {
    0x00024e20 bge.w 0x24d1e                                     |         goto label_4;
                                                                 |     }
                                                                 | label_23:
    0x00024e24 mov ip, fp                                        |     
    0x00024e26 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x00024e28 bne 0x24d48                                       |         goto label_5;
                                                                 |     }
                                                                 |     do {
                                                                 | label_25:
    0x00024e2a mov r3, r7                                        |         r3 = r7;
    0x00024e2c adds r7, 1                                        |         r7++;
    0x00024e2e b 0x24e58                                         |         goto label_30;
                                                                 | label_26:
    0x00024e30 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00024e32 cmp r3, r7                                        |         
    0x00024e34 bgt 0x24e2a                                       |         
                                                                 |     } while (r3 > r7);
    0x00024e36 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00024e38 cmp ip, r3                                        |     
                                                                 |     if (ip > r3) {
    0x00024e3a bgt.w 0x24cb4                                     |         goto label_0;
                                                                 |     }
    0x00024e3e ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x00024e40 ite eq                                            |     
                                                                 |     if (ip != r3) {
    0x00024e42 moveq r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (ip == r3) {
    0x00024e44 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00024e46 cmp fp, r2                                        |     
    0x00024e48 ite lt                                            |     
                                                                 |     if (fp >= r2) {
    0x00024e4a movlt r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (fp < r2) {
    0x00024e4c andge r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x00024e50 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00024e52 bne.w 0x24cb4                                     |         goto label_0;
                                                                 |     }
    0x00024e56 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
                                                                 | label_30:
    0x00024e58 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00024e5a add.w r3, r2, r3, lsl 5                           |     r3 = r2 + (r3 << 5);
    0x00024e5e b 0x24d78                                         |     goto label_6;
                                                                 | label_21:
    0x00024e60 mov fp, r7                                        |     
                                                                 | label_20:
    0x00024e62 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00024e64 add.w sb, sb, 0x20                                |     sb += 0x20;
    0x00024e68 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x00024e6a adds r3, 1                                        |     r3++;
    0x00024e6c cmp r3, r2                                        |     
    0x00024e6e str r3, [sp, 0x20]                                |     var_20h = r3;
                                                                 |     if (r3 != r2) {
    0x00024e70 bne.w 0x24ca0                                     |         goto label_7;
                                                                 |     }
    0x00024e74 str.w fp, [sp, 0x34]                              |     __asm ("str.w fp, [var_34h]");
                                                                 | label_19:
    0x00024e78 ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x00024e7a ldr r2, [sp, 0x60]                                |     r2 = var_60h;
    0x00024e7c ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x00024e7e str r1, [sp, 0x58]                                |     var_58h = r1;
    0x00024e80 ldr r1, [sp, 0x5c]                                |     r1 = var_5ch;
    0x00024e82 adds r2, 1                                        |     r2++;
    0x00024e84 str r2, [sp, 0x60]                                |     var_60h = r2;
    0x00024e86 cmp r1, r2                                        |     
                                                                 |     if (r1 == r2) {
    0x00024e88 beq 0x24f06                                       |         goto label_31;
                                                                 |     }
    0x00024e8a str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00024e8c b 0x24c78                                         |     goto label_8;
                                                                 | label_29:
    0x00024e8e str.w ip, [sp, 0x44]                              |     __asm ("str.w ip, [var_44h]");
    0x00024e92 str r0, [sp, 0x30]                                |     var_30h = r0;
    0x00024e94 str r6, [sp, 0x38]                                |     var_38h = r6;
    0x00024e96 b 0x24cb4                                         |     goto label_0;
                                                                 | label_27:
    0x00024e98 ldrsh.w r2, [r3, 0x10]                            |     r2 = *((r3 + 0x10));
    0x00024e9c cmp r2, sl                                        |     
                                                                 |     if (r2 > sl) {
    0x00024e9e bgt.w 0x24d78                                     |         goto label_6;
                                                                 |     }
    0x00024ea2 b 0x24cb4                                         |     goto label_0;
                                                                 | label_24:
    0x00024ea4 ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x00024ea6 movs r0, 0x64                                     |     r0 = 0x64;
    0x00024ea8 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00024eaa sub.w r2, r1, r8                                  |     r2 = r1 - r8;
    0x00024eae mul r0, r2, r0                                    |     r0 = r2 * r0;
    0x00024eb2 bl 0x5ded8                                        |     r0 = fcn_0005ded8 (r0, r1);
    0x00024eb6 asrs r1, r0, 0x1f                                 |     r1 = r0 >> 0x1f;
    0x00024eb8 bl 0x73ac                                         |     fcn_000073ac (r0, r1);
    0x00024ebc ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00024ebe uxth r2, r0                                       |     r2 = (int16_t) r0;
    0x00024ec0 ldrh r3, [r3, 0x22]                               |     r3 = *((r3 + 0x22));
    0x00024ec2 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x00024ec4 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00024ec6 cmp r3, 0xa                                       |     
    0x00024ec8 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00024eca bgt 0x24eea                                       |     
                                                                 |     while (1) {
    0x00024ecc ldr r1, [sp, 0x48]                                |         r1 = var_48h;
    0x00024ece subs r1, 0x42                                     |         r1 -= 0x42;
    0x00024ed0 add r2, r1                                        |         r2 += r1;
    0x00024ed2 add r3, r2                                        |         r3 += r2;
    0x00024ed4 ldr r2, [sp, 0x50]                                |         r2 = var_50h;
    0x00024ed6 uxth r3, r3                                       |         r3 = (int16_t) r3;
    0x00024ed8 lsls r1, r2, 0x15                                 |         r1 = r2 << 0x15;
    0x00024eda ldr r2, [sp, 0x18]                                |         r2 = var_18h;
    0x00024edc ite pl                                            |         
                                                                 |         if (r1 < r2) {
    0x00024ede addpl r3, 0x10                                    |             r3 += 0x10;
                                                                 |         }
                                                                 |         if (r1 >= r2) {
    0x00024ee0 addmi r3, 0x20                                    |             r3 += 0x20;
                                                                 |         }
    0x00024ee2 uxth r3, r3                                       |         r3 = (int16_t) r3;
    0x00024ee4 sxth r3, r3                                       |         __asm ("sxth r3, r3");
    0x00024ee6 strh r3, [r2]                                     |         *(r2) = r3;
    0x00024ee8 b 0x24d3a                                         |         goto label_9;
    0x00024eea ldr r3, [sp, 0x48]                                |         r3 = var_48h;
    0x00024eec str r2, [sp, 0x54]                                |         var_54h = r2;
    0x00024eee mov r0, r3                                        |         r0 = r3;
    0x00024ef0 asrs r1, r3, 0x1f                                 |         r1 = r3 >> 0x1f;
    0x00024ef2 bl 0x73ac                                         |         r0 = fcn_000073ac (r0, r1);
    0x00024ef6 sub.w r3, r0, 0x21                                |         r3 = r0 - 0x21;
    0x00024efa ldr r2, [sp, 0x54]                                |         r2 = var_54h;
    0x00024efc uxth r3, r3                                       |         r3 = (int16_t) r3;
    0x00024efe b 0x24ecc                                         |         
                                                                 |     }
                                                                 | label_28:
    0x00024f00 movs r3, 0                                        |     r3 = 0;
    0x00024f02 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00024f04 b 0x24cb4                                         |     goto label_0;
                                                                 | label_31:
    0x00024f06 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00024f08 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00024f0a beq.w 0x2508a                                     |         goto label_32;
                                                                 |     }
    0x00024f0e ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00024f10 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x00024f12 beq 0x24f36                                       |         goto label_33;
                                                                 |     }
    0x00024f14 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00024f16 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00024f18 add.w r0, r2, r3, lsl 5                           |     r0 = r2 + (r3 << 5);
    0x00024f1c add.w r3, r2, 0x20                                |     r3 = r2 + 0x20;
                                                                 |     do {
    0x00024f20 ldrsh.w r1, [r3, 0x12]                            |         r1 = *((r3 + 0x12));
    0x00024f24 ldrsh.w r4, [r2, 0x12]                            |         r4 = *((r2 + 0x12));
    0x00024f28 cmp r4, r1                                        |         
    0x00024f2a it gt                                             |         
                                                                 |         if (r4 <= r1) {
    0x00024f2c movgt r2, r3                                      |             r2 = r3;
                                                                 |         }
    0x00024f2e adds r3, 0x20                                     |         r3 += 0x20;
    0x00024f30 cmp r0, r3                                        |         
    0x00024f32 bne 0x24f20                                       |         
                                                                 |     } while (r0 != r3);
    0x00024f34 str r2, [sp, 0x10]                                |     var_10h = r2;
                                                                 | label_33:
    0x00024f36 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00024f38 movs r1, 0                                        |     r1 = 0;
    0x00024f3a ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00024f3c ldr r5, [sp, 0x5c]                                |     r5 = var_5ch;
    0x00024f3e ldr r0, [r3, 0x18]                                |     r0 = *((r3 + 0x18));
    0x00024f40 ldr r4, [r2, 4]                                   |     r4 = *((r2 + 4));
    0x00024f42 subs r0, 4                                        |     r0 -= 4;
                                                                 |     do {
    0x00024f44 ldr r3, [r0, 4]!                                  |         r3 = *((r0 += 4));
    0x00024f48 adds r1, 1                                        |         r1++;
    0x00024f4a cmp r5, r1                                        |         
    0x00024f4c add.w r2, r2, 0x48                                |         r2 += 0x48;
    0x00024f50 str.w r3, [r2, 0x2d0]                             |         __asm ("str.w r3, aav.0x000000ff");
    0x00024f54 ldrb r3, [r3, 0x10]                               |         r3 = *((r3 + 0x10));
    0x00024f56 strb.w r3, [r2, 0x2bc]                            |         *((r2 + 0x2bc)) = r3;
    0x00024f5a add.w r3, r3, r3, lsl 3                           |         r3 += (r3 << 3);
    0x00024f5e add.w r3, r4, r3, lsl 3                           |         r3 = r4 + (r3 << 3);
    0x00024f62 ldr r3, [r3, 0x30]                                |         r3 = *((r3 + 0x30));
    0x00024f64 str.w r3, [r2, 0x29c]                             |         __asm ("str.w r3, aav.0x000000ff");
    0x00024f68 bgt 0x24f44                                       |         
                                                                 |     } while (r5 > r1);
                                                                 | label_13:
    0x00024f6a ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00024f6c ldrh r3, [r3, 0x22]                               |     r3 = *((r3 + 0x22));
    0x00024f6e and r3, r3, 0x600                                 |     r3 &= 0x600;
    0x00024f72 cmp.w r3, 0x400                                   |     
    0x00024f76 beq 0x24fd2                                       |     
                                                                 |     while (r3 == 0) {
                                                                 | label_10:
    0x00024f78 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x00024f7a ldr r1, [r3, 8]                                   |         r1 = *((r3 + 8));
                                                                 |         if (r1 != 0) {
    0x00024f7c cbz r1, 0x24fa4                                   |             
    0x00024f7e ldrh r2, [r3, 0x22]                               |             r2 = *((r3 + 0x22));
    0x00024f80 ldr r3, [sp, 0x10]                                |             r3 = var_10h;
    0x00024f82 lsls r0, r2, 0x16                                 |             r0 = r2 << 0x16;
    0x00024f84 ldrsb.w r3, [r3, 0x16]                            |             r3 = *((r3 + 0x16));
                                                                 |             if (r0 >= r2) {
    0x00024f88 bpl 0x25050                                       |                 goto label_34;
                                                                 |             }
    0x00024f8a ldr r0, [r1]                                      |             r0 = *(r1);
    0x00024f8c cmp r3, r0                                        |             
                                                                 |             if (r3 == r0) {
    0x00024f8e beq.w 0x250ac                                     |                 goto label_35;
                                                                 |             }
                                                                 | label_12:
    0x00024f92 lsls r3, r2, 0x14                                 |             r3 = r2 << 0x14;
                                                                 |             if (r3 >= r2) {
    0x00024f94 bpl 0x24fa4                                       |                 goto label_15;
                                                                 |             }
    0x00024f96 ldr r3, [sp, 0x1c]                                |             r3 = var_1ch;
    0x00024f98 ldrsb.w r2, [r3, 0x24]                            |             r2 = *((r3 + 0x24));
    0x00024f9c ldr r3, [r1]                                      |             r3 = *(r1);
    0x00024f9e cmp r2, r3                                        |             
                                                                 |             if (r2 == r3) {
    0x00024fa0 beq.w 0x250b6                                     |                 goto label_36;
                                                                 |             }
                                                                 |         }
                                                                 | label_15:
    0x00024fa4 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x00024fa6 ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x00024fa8 ldrh r3, [r3, 0x10]                               |         r3 = *((r3 + 0x10));
    0x00024faa strh r3, [r2, 0x20]                               |         *((r2 + 0x20)) = r3;
    0x00024fac ldr r2, [pc, 0x150]                               |         
    0x00024fae ldr r3, [pc, 0x14c]                               |         r3 = *(0x250fe);
    0x00024fb0 add r2, pc                                        |         r2 = 0x4a0b4;
    0x00024fb2 ldr r3, [r2, r3]                                  |         r3 = *(0x4a0b4);
    0x00024fb4 ldr r2, [r3]                                      |         r2 = *(0x4a0b4);
    0x00024fb6 ldr r3, [sp, 0x84]                                |         r3 = var_84h;
    0x00024fb8 eors r2, r3                                       |         r2 ^= r3;
    0x00024fba mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00024fbe bne 0x250a8                                       |             goto label_37;
                                                                 |         }
                                                                 | label_14:
    0x00024fc0 ldrd r0, r1, [sp, 0x68]                           |         __asm ("ldrd r0, r1, [var_68h]");
    0x00024fc4 add sp, 0x8c                                      |         
    0x00024fc6 vpop {d8}                                         |         __asm ("vpop {d8}");
    0x00024fca pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |         
    0x00024fce b.w 0xe12c                                        |         void (*0xe12c)() ();
    0x00024fd2 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x00024fd4 ldr r2, [sp, 0x48]                                |         r2 = var_48h;
    0x00024fd6 ldrb.w r3, [r3, 0x28]                             |         r3 = *((r3 + 0x28));
    0x00024fda cmp r2, 0                                         |         
    0x00024fdc clz r3, r3                                        |         r3 &= r3;
    0x00024fe0 lsr.w r3, r3, 5                                   |         r3 >>= 5;
    0x00024fe4 it eq                                             |         
                                                                 |         if (r2 != 0) {
    0x00024fe6 moveq r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x00024fe8 cmp r3, 0                                         |         
    0x00024fea beq 0x24f78                                       |         
                                                                 |     }
    0x00024fec ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00024fee add r3, sp, 0x78                                  |     r3 += var_78h;
    0x00024ff0 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00024ff2 ldr r1, [sp, 0x70]                                |     r1 = var_70h;
    0x00024ff4 ldr r3, [r2, 0x18]                                |     r3 = *((r2 + 0x18));
    0x00024ff6 ldr r4, [sp, 0x1c]                                |     r4 = var_1ch;
    0x00024ff8 add r3, r1                                        |     r3 += r1;
    0x00024ffa ldr r3, [r3, -0x4]                                |     r3 = *((r3 - 0x4));
    0x00024ffe mov r0, r4                                        |     r0 = r4;
    0x00025000 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00025002 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x00025004 subs r3, 1                                        |     r3--;
    0x00025006 uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x00025008 str r3, [sp]                                      |     *(sp) = r3;
    0x0002500a mov.w r3, 0x200                                   |     r3 = 0x200;
    0x0002500e ldr r1, [r4, 0xc]                                 |     r1 = *((r4 + 0xc));
    0x00025010 bl 0x244e4                                        |     fcn_000244e4 (r0, r1, r2, r3, r4, r5, r6);
    0x00025014 ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00025016 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00025018 cmp r0, r3                                        |     
    0x0002501a ittt eq                                           |     
                                                                 |     if (r0 != r3) {
    0x0002501c ldreq r2, [sp, 0x1c]                              |         r2 = var_1ch;
                                                                 |     }
                                                                 |     if (r0 != r3) {
    0x0002501e moveq r3, 2                                       |         r3 = 2;
                                                                 |     }
                                                                 |     if (r0 != r3) {
    0x00025020 strbeq r3, [r2, 0x28]                             |         *((r2 + 0x28)) = r3;
                                                                 |     }
    0x00025024 b 0x24f78                                         |     goto label_10;
                                                                 | label_17:
    0x00025026 mov r2, r4                                        |     r2 = r4;
    0x00025028 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x0002502a movs r1, 0                                        |     r1 = 0;
    0x0002502c blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00025030 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x00025032 ldr r2, [sp, 0x58]                                |     r2 = var_58h;
    0x00025034 ldr.w r3, [r3, 0x1a8]                             |     r3 = *((r3 + 0x1a8));
    0x00025038 cmp r3, 0x2e                                      |     
    0x0002503a it hs                                             |     
                                                                 |     if (r3 < 0x2e) {
    0x0002503c movhs r3, 0x2e                                    |         r3 = 0x2e;
                                                                 |     }
    0x0002503e strh r3, [r2, 0x10]                               |     *((r2 + 0x10)) = r3;
    0x00025040 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x00025042 cmp r3, 0                                         |     
    0x00025044 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00025046 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x00025048 movne r3, -1                                      |         r3 = -1;
                                                                 |     }
    0x0002504c strb r3, [r2, 0x16]                               |     *((r2 + 0x16)) = r3;
    0x0002504e b 0x24c54                                         |     goto label_11;
                                                                 | label_34:
    0x00025050 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x00025052 bic.w r3, r3, r3, asr 31                          |     r3 = BIT_MASK (r3, r3);
    0x00025056 strb.w r3, [r0, 0x24]                             |     *((r0 + 0x24)) = r3;
    0x0002505a ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0002505c ldrd r4, r5, [r3, 8]                              |     __asm ("ldrd r4, r5, [r3, 8]");
    0x00025060 strd r4, r5, [r0, 0x18]                           |     __asm ("strd r4, r5, [r0, 0x18]");
    0x00025064 b 0x24f92                                         |     goto label_12;
                                                                 | label_18:
    0x00025066 ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x00025068 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0002506a b 0x24f6a                                         |     goto label_13;
                                                                 | label_16:
    0x0002506c ldr r2, [pc, 0x94]                                |     
    0x0002506e ldr r3, [pc, 0x8c]                                |     r3 = *(0x250fe);
    0x00025070 add r2, pc                                        |     r2 = 0x4a178;
    0x00025072 ldr r3, [r2, r3]                                  |     r3 = *(0x4a178);
    0x00025074 ldr r2, [r3]                                      |     r2 = *(0x4a178);
    0x00025076 ldr r3, [sp, 0x84]                                |     r3 = var_84h;
    0x00025078 eors r2, r3                                       |     r2 ^= r3;
    0x0002507a mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0002507e bne 0x250a8                                       |         goto label_37;
                                                                 |     }
    0x00025080 add sp, 0x8c                                      |     
    0x00025082 vpop {d8}                                         |     __asm ("vpop {d8}");
    0x00025086 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_32:
    0x0002508a ldr r1, [pc, 0x7c]                                |     
    0x0002508c ldr r0, [sp, 0x64]                                |     r0 = var_64h;
    0x0002508e add r1, pc                                        |     r1 = 0x4a19c;
    0x00025090 bl 0x1ca34                                        |     fcn_0001ca34 (r0);
    0x00025094 ldr r2, [pc, 0x74]                                |     
    0x00025096 ldr r3, [pc, 0x64]                                |     r3 = *(0x250fe);
    0x00025098 add r2, pc                                        |     r2 = 0x4a1a8;
    0x0002509a ldr r3, [r2, r3]                                  |     r3 = *(0x4a1a8);
    0x0002509c ldr r2, [r3]                                      |     r2 = *(0x4a1a8);
    0x0002509e ldr r3, [sp, 0x84]                                |     r3 = var_84h;
    0x000250a0 eors r2, r3                                       |     r2 ^= r3;
    0x000250a2 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 == r3) {
    0x000250a6 beq 0x24fc0                                       |         goto label_14;
                                                                 |     }
                                                                 | label_37:
    0x000250a8 blx 0x6498                                        |     fcn_00006498 ();
                                                                 | label_35:
    0x000250ac ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x000250ae movs r3, 2                                        |     r3 = 2;
    0x000250b0 strb.w r3, [r0, 0x28]                             |     *((r0 + 0x28)) = r3;
    0x000250b4 b 0x24f92                                         |     goto label_12;
                                                                 | label_36:
    0x000250b6 ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x000250b8 add r2, sp, 0x78                                  |     r2 += var_78h;
    0x000250ba ldr r4, [sp, 0x70]                                |     r4 = var_70h;
    0x000250bc str r2, [sp, 8]                                   |     var_8h = r2;
    0x000250be ldr r2, [r0, 0x18]                                |     r2 = *((r0 + 0x18));
    0x000250c0 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x000250c2 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x000250c6 add r2, r4                                        |     r2 += r4;
    0x000250c8 ldr r4, [sp, 0x1c]                                |     r4 = var_1ch;
    0x000250ca ldr r2, [r2, -0x4]                                |     r2 = *((r2 - 0x4));
    0x000250ce subs r3, 1                                        |     r3--;
    0x000250d0 uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x000250d2 vstr d16, [sp, 0x78]                              |     __asm ("vstr d16, [sp, 0x78]");
    0x000250d6 strd r3, r2, [sp]                                 |     __asm ("strd r3, r2, [sp]");
    0x000250da movs r3, 0                                        |     r3 = 0;
    0x000250dc mov r2, r0                                        |     r2 = r0;
    0x000250de mov r0, r4                                        |     r0 = r4;
    0x000250e0 bl 0x244e4                                        |     fcn_000244e4 (r0, r1, r2, r3, r4, r5, r6);
    0x000250e4 ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x000250e6 ldr r3, [r3]                                      |     r3 = *(r3);
    0x000250e8 subs r3, r3, r0                                   |     r3 -= r0;
    0x000250ea clz r3, r3                                        |     r3 &= r3;
    0x000250ee lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x000250f0 strb.w r3, [r4, 0x25]                             |     *((r4 + 0x25)) = r3;
    0x000250f4 b 0x24fa4                                         |     goto label_15;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x3ec04 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.0003ec04 ()                                      | void fcn_0003ec04 (int16_t arg_0h, int16_t arg_4h, int16_t arg_14h, int16_t arg_20h, int16_t arg_22h, int16_t arg_24h, int16_t arg_27h, int16_t arg_28h, int16_t arg_29h, int16_t arg_44h, int16_t arg_148h, int16_t arg_2e4h, int16_t arg_318h, int16_t arg_110h, int16_t arg_114h, int16_t arg_118h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_3eh;
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_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;
                                                                 |     int16_t var_74h;
                                                                 |     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;
                                                                 |     int32_t var_a0h_2;
                                                                 |     int16_t var_ach;
                                                                 |     int16_t var_b0h;
                                                                 |     int16_t var_b4h;
                                                                 |     int16_t var_b8h;
                                                                 |     int16_t var_bch;
                                                                 |     int16_t var_c0h;
                                                                 |     int32_t var_c0h_2;
                                                                 |     int32_t var_c8h;
                                                                 |     int32_t var_c8h_2;
                                                                 |     int16_t var_d0h;
                                                                 |     int16_t var_d4h;
                                                                 |     int16_t var_d8h;
                                                                 |     int16_t var_dch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0003ec04 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0003ec08 mov r6, r2                                        |     r6 = r2;
    0x0003ec0a vpush {d8}                                        |     __asm ("vpush {d8}");
    0x0003ec0e sub sp, 0xe4                                      |     
    0x0003ec10 str r1, [sp, 0x2c]                                |     var_2ch = r1;
    0x0003ec12 ldr.w r1, [pc, 0xa3c]                             |     
    0x0003ec16 ldr.w r2, [pc, 0xa3c]                             |     r2 = *(0x3f656);
    0x0003ec1a str r0, [sp, 0x14]                                |     var_14h = r0;
    0x0003ec1c add r1, pc                                        |     r1 = 0x7e272;
    0x0003ec1e ldr.w sb, [sp, 0x110]                             |     sb = *(arg_110h);
    0x0003ec22 ldr r2, [r1, r2]                                  |     
    0x0003ec24 add r1, sp, 0xac                                  |     r1 += var_ach;
    0x0003ec26 ldr r2, [r2]                                      |     r2 = *(0x7e272);
    0x0003ec28 str r2, [sp, 0xdc]                                |     var_dch = r2;
    0x0003ec2a mov.w r2, 0                                       |     r2 = 0;
    0x0003ec2e str r1, [sp, 0x30]                                |     var_30h = r1;
    0x0003ec30 ldrh.w r1, [sp, 0x114]                            |     r1 = *(arg_114h);
    0x0003ec34 movs r2, 0                                        |     r2 = 0;
    0x0003ec36 strd r2, r2, [sp, 0xac]                           |     __asm ("strd r2, r2, [var_ach]");
    0x0003ec3a strd r2, r2, [sp, 0xb4]                           |     __asm ("strd r2, r2, [var_b4h]");
    0x0003ec3e str r2, [sp, 0xbc]                                |     var_bch = r2;
    0x0003ec40 str r1, [sp, 0x4c]                                |     var_4ch = r1;
    0x0003ec42 ldr r2, [r0]                                      |     r2 = *(r0);
    0x0003ec44 ldr r1, [r0, 8]                                   |     r1 = *((r0 + 8));
    0x0003ec46 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0003ec48 str r2, [sp, 0x40]                                |     var_40h = r2;
    0x0003ec4a str r1, [sp, 0x48]                                |     var_48h = r1;
                                                                 |     if (r3 != 0) {
    0x0003ec4c cbz r3, 0x3ec5c                                   |         
    0x0003ec4e mov r2, r3                                        |         r2 = r3;
    0x0003ec50 ldr r3, [r3]                                      |         r3 = *(r3);
    0x0003ec52 cmp r3, 0x40                                      |         
    0x0003ec54 ite lt                                            |         
                                                                 |         if (r3 >= 0x40) {
    0x0003ec56 movlt r3, r2                                      |             r3 = r2;
                                                                 |         }
                                                                 |         if (r3 < 0x40) {
    0x0003ec58 movge r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x0003ec5a str r3, [sp, 0x18]                                |         var_18h = r3;
                                                                 |     }
    0x0003ec5c ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003ec5e str r3, [sp, 0xb4]                                |     var_b4h = r3;
    0x0003ec60 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0003ec62 ldrh r3, [r3, 0x3c]                               |     r3 = *((r3 + 0x3c));
    0x0003ec64 lsls r2, r3, 0x1a                                 |     r2 = r3 << 0x1a;
                                                                 |     if (r2 < r3) {
    0x0003ec66 bpl 0x3ec74                                       |         
    0x0003ec68 ldr r3, [sp, 0x4c]                                |         r3 = var_4ch;
    0x0003ec6a bic r3, r3, 0x400                                 |         r3 = BIT_MASK (r3, 0x400);
    0x0003ec6e lsls r3, r3, 0x10                                 |         r3 <<= 0x10;
    0x0003ec70 lsrs r3, r3, 0x10                                 |         r3 >>= 0x10;
    0x0003ec72 str r3, [sp, 0x4c]                                |         var_4ch = r3;
                                                                 |     }
    0x0003ec74 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0003ec76 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0003ec78 cmp r3, 0x40                                      |     
    0x0003ec7a str r3, [sp, 0x3c]                                |     var_3ch = r3;
                                                                 |     if (r3 > 0x40) {
    0x0003ec7c bgt.w 0x4070a                                     |         goto label_110;
                                                                 |     }
    0x0003ec80 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0003ec82 ands r3, r3, 0x40                                 |     r3 &= 0x40;
    0x0003ec86 str r3, [sp, 0x38]                                |     var_38h = r3;
                                                                 |     if (r3 == r3) {
    0x0003ec88 beq.w 0x3ef40                                     |         goto label_111;
                                                                 |     }
    0x0003ec8c mov.w r1, 0x370                                   |     r1 = 0x370;
    0x0003ec90 mov.w r5, 0x328                                   |     r5 = 0x328;
    0x0003ec94 movs r3, 1                                        |     r3 = 1;
    0x0003ec96 str r3, [sp, 0x3c]                                |     var_3ch = r3;
                                                                 | label_0:
    0x0003ec98 ldr r4, [sp, 0x40]                                |     r4 = var_40h;
    0x0003ec9a mov r0, r4                                        |     r0 = r4;
    0x0003ec9c bl 0xdb58                                         |     fcn_0000db58 (r0, r1);
    0x0003eca0 ldrb.w r4, [r4, 0x40]                             |     r4 = *((r4 + 0x40));
    0x0003eca4 str r0, [sp, 0x10]                                |     var_10h = r0;
    0x0003eca6 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x0003eca8 bne.w 0x405c4                                     |         goto label_112;
                                                                 |     }
    0x0003ecac ldr r7, [sp, 0x10]                                |     r7 = var_10h;
    0x0003ecae ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0003ecb0 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0003ecb2 ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x0003ecb4 add r5, r7                                        |     r5 += r7;
    0x0003ecb6 strb.w r3, [r7, 0x29]                             |     *((r7 + 0x29)) = r3;
    0x0003ecba ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003ecbc str r1, [r7, 4]                                   |     *((r7 + 4)) = r1;
    0x0003ecbe ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x0003ecc0 str r3, [r7]                                      |     *(r7) = r3;
    0x0003ecc2 mov.w r3, -1                                      |     r3 = -1;
    0x0003ecc6 ldr r0, [r2, 0x18]                                |     r0 = *((r2 + 0x18));
    0x0003ecc8 strd r1, sb, [r7, 8]                              |     __asm ("strd r1, sb, [r7, 8]");
    0x0003eccc strd r3, r3, [r7, 0x3c]                           |     __asm ("strd r3, r3, [r7, 0x3c]");
    0x0003ecd0 bl 0x19ed0                                        |     fcn_00019ed0 (r0);
    0x0003ecd4 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003ecd6 movs r2, 0x48                                     |     r2 = 0x48;
    0x0003ecd8 ldr r1, [sp, 0x4c]                                |     r1 = var_4ch;
    0x0003ecda strd r0, r0, [r7, 0x30]                           |     __asm ("strd r0, r0, [r7, 0x30]");
    0x0003ecde add.w r0, r7, 0x148                               |     r0 = r7 + 0x148;
    0x0003ece2 ldr.w r3, [r3, 0x1a8]                             |     r3 = *((r3 + 0x1a8));
    0x0003ece6 strh r1, [r7, 0x22]                               |     *((r7 + 0x22)) = r1;
    0x0003ece8 mov r1, r6                                        |     r1 = r6;
    0x0003ecea str r7, [sp, 0xac]                                |     var_ach = r7;
    0x0003ecec str r3, [r7, 0x38]                                |     *((r7 + 0x38)) = r3;
    0x0003ecee add.w r3, r5, 0x34                                |     r3 = r5 + 0x34;
    0x0003ecf2 str r3, [r5, 0x2c]                                |     *((r5 + 0x2c)) = r3;
    0x0003ecf4 mov.w r3, 0x40000                                 |     r3 = 0x40000;
    0x0003ecf8 str r3, [r5, 0x28]                                |     *((r5 + 0x28)) = r3;
    0x0003ecfa movs r3, 8                                        |     r3 = 8;
    0x0003ecfc str r4, [r5, 0x24]                                |     *((r5 + 0x24)) = r4;
    0x0003ecfe str.w r3, [r7, 0x158]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x0003ed02 add.w r3, r7, 0x160                               |     r3 = r7 + 0x160;
    0x0003ed06 str.w r3, [r7, 0x15c]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x0003ed0a str r4, [r7, 0x44]                                |     *((r7 + 0x44)) = r4;
    0x0003ed0c strd r7, r4, [r7, 0x148]                          |     __asm ("strd r7, r4, aav.0x000000ff");
    0x0003ed10 str.w r4, [r7, 0x154]                             |     __asm ("str.w r4, aav.0x000000ff");
    0x0003ed14 str r5, [sp, 0xb8]                                |     var_b8h = r5;
    0x0003ed16 str r0, [sp, 0x58]                                |     var_58h = r0;
    0x0003ed18 str r0, [sp, 0xb0]                                |     var_b0h = r0;
    0x0003ed1a bl 0x133ec                                        |     fcn_000133ec (r0, r1, r2, r3, r4);
    0x0003ed1e ldr r3, [sp, 0xb0]                                |     r3 = var_b0h;
    0x0003ed20 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x0003ed22 cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x0003ed24 ble 0x3ed8a                                       |         goto label_113;
                                                                 |     }
    0x0003ed26 ldr.w r6, [pc, 0x930]                             |     r6 = *(0x0003f658);
    0x0003ed2a mov r5, r4                                        |     r5 = r4;
    0x0003ed2c ldr.w r7, [pc, 0x92c]                             |     r7 = *(0x0003f65c);
    0x0003ed30 ldrd r8, sl, [sp, 0x10]                           |     __asm ("ldrd r8, sl, [var_14h]");
    0x0003ed34 add r6, pc                                        |     r6 += pc;
    0x0003ed36 mov fp, r6                                        |     
    0x0003ed38 ldr r6, [sp, 0x3c]                                |     r6 = var_3ch;
    0x0003ed3a add r7, pc                                        |     r7 += pc;
                                                                 |     do {
                                                                 |         if (r6 != 0) {
    0x0003ed3c cbz r6, 0x3ed62                                   |             
    0x0003ed3e ldr r3, [r3, 0x14]                                |             r3 = *((r3 + 0x14));
    0x0003ed40 add r0, sp, 0xc0                                  |             r0 += var_c0h;
    0x0003ed42 ldr r1, [r3, r4]                                  |             r1 = *((r3 + r4));
    0x0003ed44 movs r3, 0                                        |             r3 = 0;
    0x0003ed46 strd r3, r3, [sp, 0xc8]                           |             __asm ("strd r3, r3, [var_c8h]");
    0x0003ed4a str r3, [sp, 0xd0]                                |             var_d0h = r3;
    0x0003ed4c movs r3, 3                                        |             r3 = 3;
    0x0003ed4e str r3, [sp, 0xd4]                                |             var_d4h = r3;
    0x0003ed50 strd r7, fp, [sp, 0xc0]                           |             __asm ("strd r7, fp, [var_0hxc0]");
    0x0003ed54 bl 0xc6b0                                         |             fcn_0000c6b0 (r0, r1);
    0x0003ed58 ldr r3, [sp, 0xd4]                                |             r3 = var_d4h;
    0x0003ed5a cmp r3, 0                                         |             
                                                                 |             if (r3 == 0) {
    0x0003ed5c beq.w 0x3ef96                                     |                 goto label_114;
                                                                 |             }
    0x0003ed60 ldr r3, [sp, 0xb0]                                |             r3 = var_b0h;
                                                                 |         }
    0x0003ed62 ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x0003ed64 mov r0, sl                                        |         r0 = sl;
    0x0003ed66 ldr.w r2, [r8, 0x34]                              |         r2 = *((r8 + 0x34));
    0x0003ed68 movs r0, 0x34                                     |         r0 = 0x34;
    0x0003ed6a ldr r1, [r3, r4]                                  |         r1 = *((r3 + r4));
    0x0003ed6c movs r3, 8                                        |         r3 = 8;
    0x0003ed6e bl 0x3cee8                                        |         fcn_0003cee8 (r0, r1, r2, r3, r4, r5);
    0x0003ed72 ldr r3, [sp, 0xb0]                                |         r3 = var_b0h;
    0x0003ed74 ldr r2, [r3, 0x14]                                |         r2 = *((r3 + 0x14));
    0x0003ed76 add r2, r4                                        |         r2 += r4;
    0x0003ed78 ldrb r1, [r2, 0x14]                               |         r1 = *((r2 + 0x14));
    0x0003ed7a orr r1, r1, 4                                     |         r1 |= 4;
    0x0003ed7e strb r1, [r2, 0x14]                               |         *((r2 + 0x14)) = r1;
                                                                 | label_4:
    0x0003ed80 ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x0003ed82 adds r5, 1                                        |         r5++;
    0x0003ed84 adds r4, 0x30                                     |         r4 += 0x30;
    0x0003ed86 cmp r2, r5                                        |         
    0x0003ed88 bgt 0x3ed3c                                       |         
                                                                 |     } while (r2 > r5);
                                                                 | label_113:
    0x0003ed8a ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
                                                                 |     if (r3 == 0) {
    0x0003ed8c cbnz r3, 0x3eda2                                  |         
    0x0003ed8e ldr r3, [sp, 0x18]                                |         r3 = var_18h;
                                                                 |         if (r3 != 0) {
    0x0003ed90 cbz r3, 0x3ed9a                                   |             
    0x0003ed92 ldr r3, [r3]                                      |             r3 = *(r3);
    0x0003ed94 ldr r2, [sp, 0x10]                                |             r2 = var_10h;
    0x0003ed96 strb.w r3, [r2, 0x24]                             |             *((r2 + 0x24)) = r3;
                                                                 |         }
    0x0003ed9a ldr r3, [sp, 0x4c]                                |         r3 = var_4ch;
    0x0003ed9c lsls r3, r3, 0x15                                 |         r3 <<= 0x15;
                                                                 |         if (r3 < r3) {
    0x0003ed9e bmi.w 0x3f5c4                                     |             goto label_115;
                                                                 |         }
                                                                 |     }
                                                                 | label_15:
    0x0003eda2 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0003eda4 ldr r4, [r3]                                      |     r4 = *(r3);
    0x0003eda6 cmp r4, 0                                         |     
                                                                 |     if (r4 <= 0) {
    0x0003eda8 ble 0x3edd4                                       |         goto label_116;
                                                                 |     }
    0x0003edaa ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0003edac add.w r1, r4, r4, lsl 3                           |     r1 = r4 + (r4 << 3);
    0x0003edb0 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0003edb2 movs r3, 0                                        |     r3 = 0;
    0x0003edb4 lsls r1, r1, 1                                    |     r1 <<= 1;
    0x0003edb6 ldr r5, [r2, 0x44]                                |     r5 = *((r2 + 0x44));
    0x0003edb8 adds r0, 0x30                                     |     r0 += 0x30;
    0x0003edba add.w r2, r2, r5, lsl 2                           |     r2 += (r5 << 2);
    0x0003edbe adds r2, 0x44                                     |     r2 += 0x44;
                                                                 |     do {
    0x0003edc0 ldr.w r6, [r0, r3, lsl 2]                         |         offset_0 = r3 << 2;
                                                                 |         r6 = *((r0 + offset_0));
    0x0003edc4 adds r3, 0x12                                     |         r3 += 0x12;
    0x0003edc6 cmp r1, r3                                        |         
    0x0003edc8 str r6, [r2, 4]!                                  |         *((r2 += 4)) = r6;
    0x0003edcc bne 0x3edc0                                       |         
                                                                 |     } while (r1 != r3);
    0x0003edce ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0003edd0 add r5, r4                                        |     r5 += r4;
    0x0003edd2 str r5, [r3, 0x44]                                |     *((r3 + 0x44)) = r5;
                                                                 | label_116:
    0x0003edd4 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0003edd6 ldr.w r4, [r3, 0x154]                             |     r4 = *((r3 + 0x154));
    0x0003edda subs r4, 1                                        |     r4--;
    0x0003eddc it pl                                             |     
                                                                 |     if (r4 < 1) {
    0x0003edde ldrpl r5, [sp, 0x58]                              |         r5 = var_58h;
                                                                 |     }
                                                                 |     if (r4 < 1) {
    0x0003ede0 bmi 0x3edf0                                       |         goto label_117;
                                                                 |     }
                                                                 |     do {
    0x0003ede2 mov r1, r4                                        |         r1 = r4;
    0x0003ede4 mov r0, r5                                        |         r0 = r5;
    0x0003ede6 subs r4, 1                                        |         r4--;
    0x0003ede8 bl 0x3db1c                                        |         fcn_0003db1c (r0, r1, r2, r3, r4, r5, r6);
    0x0003edec adds r7, r4, 1                                    |         r7 = r4 + 1;
    0x0003edee bne 0x3ede2                                       |         
                                                                 |     } while (r7 != r4);
                                                                 | label_117:
    0x0003edf0 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0003edf2 ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
    0x0003edf6 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x0003edf8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003edfa bne.w 0x3ef06                                     |         goto label_5;
                                                                 |     }
    0x0003edfe ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0003ee00 ands r3, r3, 0x400                                |     r3 &= 0x400;
    0x0003ee04 str r3, [sp, 0x44]                                |     var_44h = r3;
                                                                 |     if (r3 != r3) {
    0x0003ee06 bne.w 0x3f4b0                                     |         goto label_118;
                                                                 |     }
                                                                 | label_14:
    0x0003ee0a ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0003ee0c ldr.w fp, [sp, 0xac]                              |     fp = var_ach;
    0x0003ee10 ldr r4, [sp, 0xb8]                                |     r4 = var_b8h;
    0x0003ee12 cmp r3, 1                                         |     
    0x0003ee14 ldr.w r6, [fp, 4]                                 |     r6 = *(arg_4h);
                                                                 |     if (r3 == 1) {
    0x0003ee18 beq.w 0x3f40e                                     |         goto label_119;
                                                                 |     }
                                                                 | label_10:
    0x0003ee1c ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x0003ee20 add.w r5, r6, 8                                   |     r5 = r6 + 8;
    0x0003ee24 ldrb.w r2, [fp, 0x29]                             |     r2 = *(arg_29h);
    0x0003ee28 movs r7, 0                                        |     r7 = 0;
    0x0003ee2a mov.w r6, 0x40000                                 |     r6 = 0x40000;
    0x0003ee2e ldr r3, [r3]                                      |     r3 = *(r3);
    0x0003ee30 str r2, [sp, 0x24]                                |     var_24h = r2;
    0x0003ee32 strd r7, r6, [r4, 0x24]                           |     __asm ("strd r7, r6, [r4, 0x24]");
    0x0003ee36 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0003ee38 add.w r3, r4, 0x34                                |     r3 = r4 + 0x34;
    0x0003ee3c str r3, [sp, 0x34]                                |     var_34h = r3;
    0x0003ee3e str r3, [r4, 0x2c]                                |     *((r4 + 0x2c)) = r3;
    0x0003ee40 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0003ee42 beq.w 0x40c14                                     |         goto label_120;
                                                                 |     }
    0x0003ee46 ldr.w ip, [sp, 0x28]                              |     ip = var_28h;
    0x0003ee4a mov r8, r7                                        |     r8 = r7;
    0x0003ee4c str.w fp, [sp, 0x28]                              |     __asm ("str.w fp, [var_28h]");
    0x0003ee50 mov r6, r7                                        |     r6 = r7;
    0x0003ee52 ldr.w fp, [sp, 0x30]                              |     fp = var_30h;
    0x0003ee56 strd r7, r7, [sp, 0x18]                           |     __asm ("strd r7, r7, [var_18h]");
    0x0003ee5a str.w sb, [sp, 0x50]                              |     __asm ("str.w sb, [var_50h]");
                                                                 | label_1:
    0x0003ee5e ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x0003ee60 strb r6, [r4, 0x10]                               |     *((r4 + 0x10)) = r6;
    0x0003ee62 ldr.w lr, [r5, 0x28]                              |     
    0x0003ee66 ldr r0, [r3, 0x44]                                |     r0 = *((r3 + 0x44));
    0x0003ee68 cmp r0, 0                                         |     
                                                                 |     if (r0 <= 0) {
    0x0003ee6a ble.w 0x3ef88                                     |         goto label_121;
                                                                 |     }
    0x0003ee6e add.w r2, r3, 0x44                                |     r2 = r3 + 0x44;
    0x0003ee72 movs r3, 0                                        |     r3 = 0;
    0x0003ee74 b 0x3ee7e                                         |     
                                                                 |     while (lr != r1) {
    0x0003ee76 adds r3, 1                                        |         r3++;
    0x0003ee78 cmp r0, r3                                        |         
                                                                 |         if (r0 == r3) {
    0x0003ee7a beq.w 0x3ef88                                     |             goto label_121;
                                                                 |         }
    0x0003ee7e ldr r1, [r2, 4]!                                  |         r1 = *((r2 += 4));
    0x0003ee82 cmp lr, r1                                        |         
    0x0003ee84 bne 0x3ee76                                       |         
                                                                 |     }
    0x0003ee86 movs r0, 1                                        |     r0 = 1;
    0x0003ee88 sub.w r2, r3, 0x20                                |     r2 = r3 - 0x20;
    0x0003ee8c rsb.w r1, r3, 0x20                                |     r1 = 0x20 - r3;
    0x0003ee90 lsl.w r2, r0, r2                                  |     r2 = r0 << r2;
    0x0003ee94 lsr.w r1, r0, r1                                  |     r1 = r0 >> r1;
    0x0003ee98 lsl.w r3, r0, r3                                  |     r3 = r0 << r3;
    0x0003ee9c orrs r2, r1                                       |     r2 |= r1;
                                                                 | label_2:
    0x0003ee9e strd r3, r2, [r4, 8]                              |     __asm ("strd r3, r2, [r4, 8]");
    0x0003eea2 mov r0, fp                                        |     r0 = fp;
    0x0003eea4 ldrb.w sl, [r5, 0x24]                             |     sl = *((r5 + 0x24));
    0x0003eea8 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003eeaa orr.w ip, sl, ip                                  |     
    0x0003eeae and ip, ip, 0xa                                   |     
    0x0003eeb2 cmp.w ip, 0                                       |     
    0x0003eeb6 it ne                                             |     
                                                                 |     if (ip == 0) {
    0x0003eeb8 movne r1, r3                                      |         r1 = r3;
                                                                 |     }
    0x0003eeba ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003eebc itt eq                                            |     
                                                                 |     if (ip != 0) {
    0x0003eebe moveq r1, r7                                      |         r1 = r7;
                                                                 |     }
                                                                 |     if (ip != 0) {
    0x0003eec0 moveq sb, r8                                      |         sb = r8;
                                                                 |     }
    0x0003eec2 mov r7, r1                                        |     r7 = r1;
    0x0003eec4 mov r2, r1                                        |     r2 = r1;
    0x0003eec6 it ne                                             |     
                                                                 |     if (ip == 0) {
    0x0003eec8 movne sb, r3                                      |         sb = r3;
                                                                 |     }
    0x0003eeca ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x0003eecc mov r8, sb                                        |     r8 = sb;
    0x0003eece str r1, [sp, 0x30]                                |     var_30h = r1;
    0x0003eed0 ldrb.w r3, [r3, 0x2c]                             |     r3 = *((r3 + 0x2c));
    0x0003eed4 tst.w r3, 0x10                                    |     
    0x0003eed8 mov r3, sb                                        |     r3 = sb;
                                                                 |     if ((r3 & 0x10) == 0) {
    0x0003eeda beq 0x3ef8e                                       |         goto label_122;
                                                                 |     }
    0x0003eedc bl 0x1eaac                                        |     fcn_0001eaac (r0, r1, r2, r3, r4);
    0x0003eee0 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
                                                                 | label_3:
    0x0003eee2 cmp r0, 0                                         |     
    0x0003eee4 beq 0x3ef54                                       |     
                                                                 |     while (r0 != 0) {
    0x0003eee6 ldr r1, [r4, 0x2c]                                |         r1 = *((r4 + 0x2c));
    0x0003eee8 ldr r3, [sp, 0x34]                                |         r3 = var_34h;
    0x0003eeea cmp r3, r1                                        |         
                                                                 |         if (r3 != r1) {
    0x0003eeec bne.w 0x3f5ee                                     |             goto label_123;
                                                                 |         }
    0x0003eef0 ldr r0, [sp, 0x20]                                |         r0 = var_20h;
    0x0003eef2 mov r1, r4                                        |         r1 = r4;
                                                                 | label_17:
    0x0003eef4 bl 0xfa60                                         |         fcn_0000fa60 (r0, r1);
    0x0003eef8 ldr r3, [sp, 0x34]                                |         r3 = var_34h;
    0x0003eefa movs r2, 0                                        |         r2 = 0;
    0x0003eefc str r3, [r4, 0x2c]                                |         *((r4 + 0x2c)) = r3;
    0x0003eefe mov.w r3, 0x40000                                 |         r3 = 0x40000;
    0x0003ef00 movs r3, 0x80                                     |         r3 = 0x80;
    0x0003ef02 strd r2, r3, [r4, 0x24]                           |         __asm ("strd r2, r3, [r4, 0x24]");
                                                                 | label_5:
    0x0003ef06 ldr r1, [sp, 0x10]                                |         r1 = var_10h;
    0x0003ef08 movs r2, 0                                        |         r2 = 0;
    0x0003ef0a str r2, [sp, 0x10]                                |         var_10h = r2;
    0x0003ef0c ldr r2, [sp, 0x14]                                |         r2 = var_14h;
    0x0003ef0e ldr r3, [r1, 0x38]                                |         r3 = *((r1 + 0x38));
    0x0003ef10 ldr r0, [sp, 0x40]                                |         r0 = var_40h;
    0x0003ef12 str.w r3, [r2, 0x1a8]                             |         __asm ("str.w r3, aav.0x000000ff");
    0x0003ef16 bl 0x13658                                        |         fcn_00013658 (r0, r1);
                                                                 | label_31:
    0x0003ef1a ldr.w r2, [pc, 0x744]                             |         r2 = *(0x0003f660);
    0x0003ef1e ldr.w r3, [pc, 0x734]                             |         r3 = *(0x3f656);
    0x0003ef22 add r2, pc                                        |         r2 += pc;
    0x0003ef24 ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x0003ef26 ldr r2, [r3]                                      |         r2 = *(0x3f656);
    0x0003ef28 ldr r3, [sp, 0xdc]                                |         r3 = var_dch;
    0x0003ef2a eors r2, r3                                       |         r2 ^= r3;
    0x0003ef2c mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0003ef30 bne.w 0x41068                                     |             goto label_124;
                                                                 |         }
    0x0003ef34 ldr r0, [sp, 0x10]                                |         r0 = var_10h;
    0x0003ef36 add sp, 0xe4                                      |         
    0x0003ef38 vpop {d8}                                         |         __asm ("vpop {d8}");
    0x0003ef3c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_111:
    0x0003ef40 ldr r3, [sp, 0x3c]                                |         r3 = var_3ch;
    0x0003ef42 subs r1, r3, 1                                    |         r1 = r3 - 1;
    0x0003ef44 add.w r1, r1, r1, lsl 3                           |         r1 += (r1 << 3);
    0x0003ef48 lsls r1, r1, 3                                    |         r1 <<= 3;
    0x0003ef4a add.w r5, r1, 0x328                               |         r5 = r1 + 0x328;
    0x0003ef4e add.w r1, r1, 0x370                               |         r1 += 0x370;
    0x0003ef52 b 0x3ec98                                         |         goto label_0;
    0x0003ef54 mov r2, r1                                        |         r2 = r1;
    0x0003ef56 mov r3, sb                                        |         r3 = sb;
    0x0003ef58 mov r0, fp                                        |         r0 = fp;
    0x0003ef5a bl 0x23c74                                        |         fcn_00023c74 (r0, r1, r2);
    0x0003ef5e ldr r3, [r4, 8]                                   |         r3 = *((r4 + 8));
    0x0003ef60 ldr r2, [sp, 0x18]                                |         r2 = var_18h;
    0x0003ef62 orrs r2, r3                                       |         r2 |= r3;
    0x0003ef64 ldr r3, [r4, 0xc]                                 |         r3 = *((r4 + 0xc));
    0x0003ef66 str r2, [sp, 0x18]                                |         var_18h = r2;
    0x0003ef68 ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x0003ef6a orrs r2, r3                                       |         r2 |= r3;
    0x0003ef6c str r2, [sp, 0x1c]                                |         var_1ch = r2;
    0x0003ef6e cmp r0, 0                                         |         
    0x0003ef70 bne 0x3eee6                                       |         
                                                                 |     }
    0x0003ef72 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0003ef74 ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
                                                                 |     if (r3 == 0) {
    0x0003ef78 cbnz r3, 0x3ef9a                                  |         
    0x0003ef7a ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x0003ef7c adds r6, 1                                        |         r6++;
    0x0003ef7e adds r5, 0x48                                     |         r5 += 0x48;
    0x0003ef80 cmp r3, r6                                        |         
                                                                 |         if (r3 == r6) {
    0x0003ef82 beq 0x3ef9a                                       |             goto label_125;
                                                                 |         }
    0x0003ef84 mov ip, sl                                        |         
    0x0003ef86 b 0x3ee5e                                         |         goto label_1;
                                                                 | label_121:
    0x0003ef88 movs r3, 0                                        |         r3 = 0;
    0x0003ef8a mov r2, r3                                        |         r2 = r3;
    0x0003ef8c b 0x3ee9e                                         |         goto label_2;
                                                                 | label_122:
    0x0003ef8e bl 0x23750                                        |         fcn_00023750 (r0, r1, r2);
    0x0003ef92 ldr r1, [sp, 0x30]                                |         r1 = var_30h;
    0x0003ef94 b 0x3eee2                                         |         goto label_3;
                                                                 | label_114:
    0x0003ef96 ldr r3, [sp, 0xb0]                                |         r3 = var_b0h;
    0x0003ef98 b 0x3ed80                                         |         goto label_4;
                                                                 |     }
                                                                 | label_125:
    0x0003ef9a ldr r1, [r4, 0x2c]                                |     r1 = *((r4 + 0x2c));
    0x0003ef9c ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0003ef9e ldr.w sb, [sp, 0x50]                              |     sb = var_50h;
    0x0003efa2 cmp r3, r1                                        |     
                                                                 |     if (r3 == r1) {
    0x0003efa4 beq.w 0x3f5d0                                     |         goto label_126;
                                                                 |     }
    0x0003efa8 ldr r5, [sp, 0x20]                                |     r5 = var_20h;
    0x0003efaa mov r0, r5                                        |     r0 = r5;
    0x0003efac bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0003efb0 mov r1, r4                                        |     r1 = r4;
    0x0003efb2 mov r0, r5                                        |     r0 = r5;
                                                                 | label_16:
    0x0003efb4 bl 0xfa60                                         |     fcn_0000fa60 (r0, r1);
    0x0003efb8 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0003efba movs r1, 0                                        |     r1 = 0;
    0x0003efbc str r3, [r4, 0x2c]                                |     *((r4 + 0x2c)) = r3;
    0x0003efbe mov.w r3, 0x40000                                 |     r3 = 0x40000;
    0x0003efc2 strd r1, r3, [r4, 0x24]                           |     __asm ("strd r1, r3, [r4, 0x24]");
                                                                 | label_90:
    0x0003efc6 ldr r4, [sp, 0x10]                                |     r4 = var_10h;
    0x0003efc8 movs r1, 0                                        |     r1 = 0;
    0x0003efca mov r0, r4                                        |     r0 = r4;
    0x0003efcc bl 0x24b84                                        |     fcn_00024b84 (r0, r1);
    0x0003efd0 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0003efd2 ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
    0x0003efd6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003efd8 bne 0x3ef06                                       |         goto label_5;
                                                                 |     }
    0x0003efda ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x0003efdc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003efde beq.w 0x406f2                                     |         goto label_127;
                                                                 |     }
    0x0003efe2 ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x0003efe4 ldrh r1, [r0, 0x20]                               |     r1 = *((r0 + 0x20));
    0x0003efe6 adds r1, 1                                        |     r1++;
    0x0003efe8 sxth r1, r1                                       |     __asm ("sxth r1, r1");
    0x0003efea bl 0x24b84                                        |     fcn_00024b84 (r0, r1);
    0x0003efee ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0003eff0 ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
    0x0003eff4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003eff6 bne 0x3ef06                                       |         goto label_5;
                                                                 |     }
                                                                 | label_105:
    0x0003eff8 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0003effa ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0003effc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003effe beq.w 0x406f2                                     |         goto label_127;
                                                                 |     }
                                                                 | label_60:
    0x0003f002 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003f004 ldr r3, [r3, 0x40]                                |     r3 = *((r3 + 0x40));
    0x0003f006 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003f008 bne.w 0x3ef06                                     |         goto label_5;
                                                                 |     }
    0x0003f00c ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x0003f00e ldrb.w r3, [r2, 0x40]                             |     r3 = *((r2 + 0x40));
    0x0003f012 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003f014 bne.w 0x3ef06                                     |         goto label_5;
                                                                 |     }
    0x0003f018 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0003f01a ldrb.w sl, [r3, 0x29]                             |     sl = *((r3 + 0x29));
    0x0003f01e cmp.w sb, 0                                       |     
    0x0003f022 it ne                                             |     
                                                                 |     if (sb != 0) {
    0x0003f024 cmpne sl, 1                                       |         __asm ("cmpne sl, 1");
                                                                 |     }
                                                                 |     if (sb > 0) {
    0x0003f028 bhi.w 0x40752                                     |         goto label_128;
                                                                 |     }
                                                                 | label_65:
    0x0003f02c ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x0003f02e ldr r2, [r0]                                      |     r2 = *(r0);
    0x0003f030 ldrsh.w r1, [r0, 0x20]                            |     r1 = *((r0 + 0x20));
    0x0003f034 ldr.w r3, [r2, 0x1a8]                             |     r3 = *((r2 + 0x1a8));
    0x0003f038 add r3, r1                                        |     r3 += r1;
    0x0003f03a str.w r3, [r2, 0x1a8]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x0003f03e ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0003f040 lsls r6, r3, 0x1d                                 |     r6 = r3 << 0x1d;
                                                                 |     if (r6 < r3) {
    0x0003f042 bpl 0x3f066                                       |         
    0x0003f044 ldr.w r2, [r0, 0x318]                             |         r2 = *((r0 + 0x318));
    0x0003f048 ldr r3, [r2, 0x24]                                |         r3 = *((r2 + 0x24));
    0x0003f04a lsls r5, r3, 0x13                                 |         r5 = r3 << 0x13;
                                                                 |         if (r5 >= r3) {
    0x0003f04c bpl 0x3f066                                       |             goto label_129;
                                                                 |         }
    0x0003f04e movs r1, 1                                        |         r1 = 1;
    0x0003f050 strb.w r1, [r0, 0x26]                             |         *((r0 + 0x26)) = r1;
    0x0003f054 ldr r1, [sp, 0x2c]                                |         r1 = var_2ch;
    0x0003f056 ldr r1, [r1, 0x18]                                |         r1 = *((r1 + 0x18));
    0x0003f058 ldrb.w r1, [r1, 0x2c]                             |         r1 = *((r1 + 0x2c));
    0x0003f05c lsls r4, r1, 0x1a                                 |         r4 = r1 << 0x1a;
    0x0003f05e itt pl                                            |         
                                                                 |         if (r4 >= r1) {
    0x0003f060 bicpl r3, r3, 0x40                                |             __asm ("bicpl r3, r3, 0x40");
                                                                 |         }
                                                                 |         if (r4 < r1) {
    0x0003f064 str r3, [r2, 0x24]                                |             *((r2 + 0x24)) = r3;
                                                                 |             goto label_129;
                                                                 |         }
                                                                 |     }
                                                                 | label_129:
    0x0003f066 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0003f068 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0003f06a cmp r3, 0                                         |     
    0x0003f06c add.w sb, r2, 0x2e0                               |     sb = r2 + 0x2e0;
                                                                 |     if (r3 <= 0) {
    0x0003f070 ble.w 0x40c08                                     |         goto label_130;
                                                                 |     }
    0x0003f074 add.w r3, r3, r3, lsl 3                           |     r3 += (r3 << 3);
    0x0003f078 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0003f07c add.w sl, r3, 0x2e0                               |     sl = r3 + 0x2e0;
    0x0003f080 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0003f082 and fp, r3, 0x1000                                |     
    0x0003f086 and r3, r3, 0x10                                  |     r3 &= 0x10;
    0x0003f08a strd sl, r3, [sp, 0x18]                           |     __asm ("strd sl, r3, [var_18h]");
    0x0003f08e str.w fp, [sp, 0x20]                              |     __asm ("str.w fp, [var_20h]");
    0x0003f092 ldr.w sl, [sp, 0x14]                              |     sl = var_14h;
    0x0003f096 ldr.w fp, [sp, 0x40]                              |     fp = var_40h;
                                                                 | label_6:
    0x0003f09a ldrb.w r6, [sb, 0x24]                             |     r6 = *((sb + 0x24));
    0x0003f09e ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0003f0a0 lsl.w r8, r6, 3                                   |     r8 = r6 << 3;
    0x0003f0a4 add.w r3, r8, r6                                  |     r3 = r8 + r6;
    0x0003f0a8 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0003f0ac ldr r5, [r3, 0x18]                                |     r5 = *((r3 + 0x18));
    0x0003f0ae ldr r1, [r5, 0x44]                                |     r1 = *((r5 + 0x44));
    0x0003f0b0 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0003f0b2 beq.w 0x40bfc                                     |         goto label_131;
                                                                 |     }
    0x0003f0b6 ldr.w r0, [fp, 0x14]                              |     r0 = *(arg_14h);
    0x0003f0ba cmp r0, 0                                         |     
                                                                 |     if (r0 <= 0) {
    0x0003f0bc ble.w 0x4074c                                     |         goto label_132;
                                                                 |     }
    0x0003f0c0 ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_118h);
    0x0003f0c4 movs r4, 0                                        |     r4 = 0;
    0x0003f0c6 b 0x3f0d0                                         |     
                                                                 |     while (r1 != r2) {
    0x0003f0c8 adds r4, 1                                        |         r4++;
    0x0003f0ca adds r3, 0x10                                     |         r3 += 0x10;
    0x0003f0cc cmp r4, r0                                        |         
                                                                 |         if (r4 == r0) {
    0x0003f0ce beq 0x3f0d6                                       |             goto label_64;
                                                                 |         }
    0x0003f0d0 ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x0003f0d2 cmp r1, r2                                        |         
    0x0003f0d4 bne 0x3f0c8                                       |         
                                                                 |     }
                                                                 | label_64:
    0x0003f0d6 ldrb.w r2, [r5, 0x2c]                             |     r2 = *((r5 + 0x2c));
    0x0003f0da ldr.w r7, [sb, 0x38]                              |     r7 = *((sb + 0x38));
    0x0003f0de lsls r0, r2, 0x1e                                 |     r0 = r2 << 0x1e;
    0x0003f0e0 ldr r3, [r7, 0x24]                                |     r3 = *((r7 + 0x24));
                                                                 |     if (r0 >= r2) {
    0x0003f0e2 bmi 0x3f0ec                                       |         
    0x0003f0e4 ldr r1, [r5, 0xc]                                 |         r1 = *((r5 + 0xc));
    0x0003f0e6 cmp r1, 0                                         |         
                                                                 |         if (r1 == 0) {
    0x0003f0e8 beq.w 0x402f6                                     |             goto label_133;
                                                                 |         }
                                                                 |     }
                                                                 | label_42:
    0x0003f0ec lsls r3, r3, 0x16                                 |     r3 <<= 0x16;
                                                                 |     if (r3 < r3) {
    0x0003f0ee bpl 0x3f158                                       |         
    0x0003f0f0 ldrb.w r3, [r5, 0x2c]                             |         r3 = *((r5 + 0x2c));
    0x0003f0f4 ldr r5, [r7, 0x1c]                                |         r5 = *((r7 + 0x1c));
    0x0003f0f6 lsls r7, r3, 0x1a                                 |         r7 = r3 << 0x1a;
                                                                 |         if (r7 < r3) {
    0x0003f0f8 bpl 0x3f11c                                       |             
    0x0003f0fa ldrb.w r3, [r5, 0x37]                             |             r3 = *((r5 + 0x37));
    0x0003f0fe ldr r2, [sp, 0x38]                                |             r2 = var_38h;
    0x0003f100 and r3, r3, 3                                     |             r3 &= 3;
    0x0003f104 sub.w r3, r3, 2                                   |             r3 -= 2;
    0x0003f106 lsls r2, r0, 0xc                                  |             r2 = r0 << 0xc;
    0x0003f108 cmp r2, 0                                         |             
    0x0003f10a clz r3, r3                                        |             r3 &= r3;
    0x0003f10e lsr.w r3, r3, 5                                   |             r3 >>= 5;
    0x0003f112 it eq                                             |             
                                                                 |             if (r2 != 0) {
    0x0003f114 moveq r3, 0                                       |                 r3 = 0;
                                                                 |             }
    0x0003f116 cmp r3, 0                                         |             
                                                                 |             if (r3 != 0) {
    0x0003f118 bne.w 0x4037a                                     |                 goto label_134;
                                                                 |             }
                                                                 |         }
    0x0003f11c ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x0003f11e ldrb.w r3, [r3, 0x26]                             |         r3 = *((r3 + 0x26));
    0x0003f122 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0003f124 bne.w 0x403c8                                     |             goto label_135;
                                                                 |         }
                                                                 | label_44:
    0x0003f128 ldr r3, [sp, 0x118]                               |         r3 = *(arg_118h);
    0x0003f12a ldr r2, [sp, 0x38]                                |         r2 = var_38h;
    0x0003f12c cmp r3, 0                                         |         
    0x0003f12e it ne                                             |         
                                                                 |         if (r3 != 0) {
    0x0003f130 cmpne r2, 0                                       |             __asm ("cmpne r2, 0");
                                                                 |         }
                                                                 |         if (r3 != 0) {
    0x0003f132 bne.w 0x4053c                                     |             goto label_136;
                                                                 |         }
    0x0003f136 ldr.w r2, [sl, 0x44]                              |         r2 = *((sl + 0x44));
    0x0003f13a movs r1, 0x35                                     |         r1 = 0x35;
    0x0003f13c adds r3, r2, 1                                    |         r3 = r2 + 1;
    0x0003f13e str.w r3, [sl, 0x44]                              |         __asm ("str.w r3, [sl, 0x44]");
                                                                 | label_46:
    0x0003f142 str.w r2, [sb, 8]                                 |         __asm ("str.w r2, [sb, 8]");
    0x0003f146 ldr r0, [sp, 0x48]                                |         r0 = var_48h;
    0x0003f148 ldr r3, [r5, 0x2c]                                |         r3 = *((r5 + 0x2c));
    0x0003f14a str r4, [sp]                                      |         *(sp) = r4;
    0x0003f14c bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003f150 mov r1, r5                                        |         r1 = r5;
    0x0003f152 mov r0, sl                                        |         r0 = sl;
    0x0003f154 bl 0x220e4                                        |         fcn_000220e4 (r0, r1);
                                                                 |     }
                                                                 | label_43:
    0x0003f158 cmp r4, 0                                         |     
                                                                 |     if (r4 >= 0) {
    0x0003f15a blt 0x3f164                                       |         
    0x0003f15c mov r1, r4                                        |         r1 = r4;
    0x0003f15e mov r0, sl                                        |         r0 = sl;
    0x0003f160 bl 0x39214                                        |         fcn_00039214 (r0, r1);
                                                                 |     }
    0x0003f164 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003f166 add.w sb, sb, 0x48                                |     sb += 0x48;
    0x0003f168 lsrs r0, r1, 5                                    |     r0 = r1 >> 5;
    0x0003f16a cmp sb, r3                                        |     
                                                                 |     if (sb != r3) {
    0x0003f16c bne 0x3f09a                                       |         goto label_6;
                                                                 |     }
    0x0003f16e ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x0003f170 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0003f172 ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x0003f174 str r3, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r3;
    0x0003f176 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0003f178 ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
    0x0003f17c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003f17e bne.w 0x3ef06                                     |         goto label_5;
                                                                 |     }
    0x0003f182 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x0003f184 movw r2, 0x3d3f                                   |     
    0x0003f188 ldr.w r3, [pc, 0x4d8]                             |     r3 = *(0x0003f664);
    0x0003f18c movt r2, 0x3e3c                                   |     r2 = 0x3e3c3d3f;
    0x0003f190 ldr.w fp, [sp, 0x10]                              |     fp = var_10h;
    0x0003f194 str r2, [sp, 0x9c]                                |     var_9ch = r2;
    0x0003f196 add r3, pc                                        |     r3 += pc;
    0x0003f198 str r3, [sp, 0x88]                                |     var_88h = r3;
    0x0003f19a mov sb, fp                                        |     sb = fp;
    0x0003f19c ldr.w r3, [pc, 0x4c8]                             |     
    0x0003f1a0 add r3, pc                                        |     r3 = 0x7e80c;
    0x0003f1a2 str r3, [sp, 0x8c]                                |     var_8ch = r3;
    0x0003f1a4 ldr.w r3, [pc, 0x4c4]                             |     
    0x0003f1a8 add r3, pc                                        |     r3 = 0x7e818;
    0x0003f1aa str r3, [sp, 0x98]                                |     var_98h = r3;
    0x0003f1ac mov.w r3, -1                                      |     r3 = -1;
    0x0003f1b0 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x0003f1b2 str r3, [sp, 0x34]                                |     var_34h = r3;
                                                                 | label_30:
    0x0003f1b4 ldr.w r3, [sb, 0x318]                             |     r3 = *((sb + 0x318));
    0x0003f1b8 add.w r2, sb, 0x2e0                               |     r2 = sb + 0x2e0;
    0x0003f1bc ldrb.w r1, [sb, 0x304]                            |     r1 = *((sb + 0x304));
    0x0003f1c0 str r2, [sp, 0x44]                                |     var_44h = r2;
    0x0003f1c2 ldr r3, [r3, 0x24]                                |     r3 = *((r3 + 0x24));
    0x0003f1c4 str r1, [sp, 0x20]                                |     var_20h = r1;
    0x0003f1c6 str r2, [sp, 0x5c]                                |     var_5ch = r2;
    0x0003f1c8 lsls r0, r3, 0x11                                 |     r0 = r3 << 0x11;
                                                                 |     if (r0 < r3) {
    0x0003f1ca bmi.w 0x3f670                                     |         goto label_137;
                                                                 |     }
                                                                 | label_24:
    0x0003f1ce ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003f1d0 ldrb.w r3, [r3, 0x1c2]                            |     r3 = *((r3 + 0x1c2));
    0x0003f1d4 cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x0003f1d6 bne 0x3f1f6                                       |         
    0x0003f1d8 ldr r1, [sp, 0x4c]                                |         r1 = var_4ch;
    0x0003f1da ldr.w r3, [sb, 0x318]                             |         r3 = *((sb + 0x318));
    0x0003f1de ldr r2, [sp, 0x20]                                |         r2 = var_20h;
    0x0003f1e0 str r1, [sp, 8]                                   |         var_8h = r1;
    0x0003f1e2 ldr r1, [sp, 0x38]                                |         r1 = var_38h;
    0x0003f1e4 ldr r0, [sp, 0x14]                                |         r0 = var_14h;
    0x0003f1e6 str r2, [sp, 4]                                   |         var_4h = r2;
    0x0003f1e8 str r1, [sp]                                      |         *(sp) = r1;
    0x0003f1ea ldr r1, [sp, 0x2c]                                |         r1 = var_2ch;
    0x0003f1ec bl 0x201b4                                        |         fcn_000201b4 (r0, r1, r2, r3);
    0x0003f1f0 ldrb.w r3, [sb, 0x304]                            |         r3 = *((sb + 0x304));
    0x0003f1f4 str r3, [sp, 0x20]                                |         var_20h = r3;
                                                                 |     }
    0x0003f1f6 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0003f1f8 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x0003f1fa ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x0003f1fc ldr r1, [r2, 4]                                   |     r1 = *((r2 + 4));
    0x0003f1fe ldr r6, [r2]                                      |     r6 = *(r2);
    0x0003f200 ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x0003f202 lsls r7, r0, 3                                    |     r7 = r0 << 3;
    0x0003f204 ldr.w sl, [sb, 0x318]                             |     sl = *((sb + 0x318));
    0x0003f208 ldr.w r8, [r6, 8]                                 |     r8 = *((r6 + 8));
    0x0003f20c str.w r3, [sb, 0x300]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x0003f210 adds r3, r7, r0                                   |     r3 = r7 + r0;
    0x0003f212 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0003f216 ldr r0, [r2, 0x44]                                |     r0 = *((r2 + 0x44));
    0x0003f218 str r1, [sp, 0x1c]                                |     var_1ch = r1;
    0x0003f21a ldr.w fp, [r3, 0x30]                              |     fp = *((r3 + 0x30));
    0x0003f21e ldr r3, [r6]                                      |     r3 = *(r6);
    0x0003f220 cmp r0, 0                                         |     
    0x0003f222 str r3, [sp, 0x28]                                |     var_28h = r3;
                                                                 |     if (r0 <= 0) {
    0x0003f224 ble.w 0x3f648                                     |         goto label_138;
                                                                 |     }
    0x0003f228 adds r2, 0x44                                     |     r2 += 0x44;
    0x0003f22a movs r3, 0                                        |     r3 = 0;
    0x0003f22c b 0x3f236                                         |     
                                                                 |     while (fp != r1) {
    0x0003f22e adds r3, 1                                        |         r3++;
    0x0003f230 cmp r3, r0                                        |         
                                                                 |         if (r3 == r0) {
    0x0003f232 beq.w 0x3f648                                     |             goto label_138;
                                                                 |         }
    0x0003f236 ldr r1, [r2, 4]!                                  |         r1 = *((r2 += 4));
    0x0003f23a cmp fp, r1                                        |         
    0x0003f23c bne 0x3f22e                                       |         
                                                                 |     }
    0x0003f23e movs r1, 1                                        |     r1 = 1;
    0x0003f240 sub.w r2, r3, 0x20                                |     r2 = r3 - 0x20;
    0x0003f244 rsb.w r0, r3, 0x20                                |     r0 = 0x20 - r3;
    0x0003f248 lsl.w r2, r1, r2                                  |     r2 = r1 << r2;
    0x0003f24c lsr.w r0, r1, r0                                  |     r0 = r1 >> r0;
    0x0003f250 lsls r1, r3                                       |     r1 <<= r3;
    0x0003f252 orr.w r3, r2, r0                                  |     r3 = r2 | r0;
    0x0003f256 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x0003f258 bic.w r1, r2, r1                                  |     r1 = BIT_MASK (r2, r1);
    0x0003f25c ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x0003f25e bic.w r3, r2, r3                                  |     r3 = BIT_MASK (r2, r3);
                                                                 | label_21:
    0x0003f262 strd r1, r3, [sb, 0x320]                          |     __asm ("strd r1, r3, aav.0x000000ff");
    0x0003f266 ldr.w r3, [sl, 0x24]                              |     r3 = *((sl + 0x24));
    0x0003f26a ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0003f26c ldr.w r0, [r8, 0x18]                              |     r0 = *((r8 + 0x18));
    0x0003f270 ands r3, r3, 0x40                                 |     r3 &= 0x40;
    0x0003f274 it ne                                             |     
                                                                 |     if (r3 != r3) {
    0x0003f276 ldrhne r3, [r2, 0x22]                             |         __asm ("ldrhne r3, [r2, 0x22]");
                                                                 |     }
    0x0003f278 ldrd r5, r1, [r2, 0x18]                           |     __asm ("ldrd r5, r1, [r2, 0x18]");
    0x0003f27c itt ne                                            |     
                                                                 |     if (r3 == r3) {
    0x0003f27e eorne r3, r3, 0x20                                |         r3 ^= 0x20;
                                                                 |     }
                                                                 |     if (r3 != r3) {
    0x0003f282 ubfx r3, r3, 5, 1                                 |         r3 = (r3 >> 5) & ((1 << 1) - 1);
                                                                 |     }
    0x0003f286 str r1, [sp, 0x18]                                |     var_18h = r1;
    0x0003f288 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x0003f28a bl 0x19ed0                                        |     r0 = fcn_00019ed0 (r0);
    0x0003f28e strd r0, r0, [sb, 0x2ec]                          |     __asm ("strd r0, r0, aav.0x000000ff");
    0x0003f292 mov r4, r0                                        |     r4 = r0;
    0x0003f294 ldr.w r0, [r8, 0x18]                              |     r0 = *((r8 + 0x18));
    0x0003f298 bl 0x19ed0                                        |     fcn_00019ed0 (r0);
    0x0003f29c ldrb.w r3, [sb, 0x304]                            |     r3 = *((sb + 0x304));
    0x0003f2a0 str r0, [sp, 0x24]                                |     var_24h = r0;
    0x0003f2a2 str.w r0, [sb, 0x2f8]                             |     __asm ("str.w r0, aav.0x000000ff");
                                                                 |     if (r3 != 0) {
    0x0003f2a6 cbz r3, 0x3f2bc                                   |         
    0x0003f2a8 ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x0003f2aa ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x0003f2ac adds r3, r7, r3                                   |         r3 = r7 + r3;
    0x0003f2ae add.w r3, r2, r3, lsl 3                           |         r3 = r2 + (r3 << 3);
    0x0003f2b2 ldrb.w r3, [r3, 0x2c]                             |         r3 = *((r3 + 0x2c));
    0x0003f2b6 lsls r3, r3, 0x1c                                 |         r3 <<= 0x1c;
                                                                 |         if (r3 < r3) {
    0x0003f2b8 bmi.w 0x402ac                                     |             goto label_139;
                                                                 |         }
                                                                 |     }
                                                                 | label_39:
    0x0003f2bc ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x0003f2be ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0003f2c0 adds r3, r7, r3                                   |     r3 = r7 + r3;
    0x0003f2c2 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0003f2c6 ldrb.w r1, [r3, 0x2d]                             |     r1 = *((r3 + 0x2d));
    0x0003f2ca ands r2, r1, 4                                    |     r2 = r1 & 4;
    0x0003f2ce str r2, [sp, 0x50]                                |     var_50h = r2;
                                                                 |     if (r2 != r1) {
    0x0003f2d0 bne.w 0x3ffaa                                     |         goto label_140;
                                                                 |     }
    0x0003f2d4 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x0003f2d6 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x0003f2d8 rsb.w r3, r2, 0x20                                |     r3 = 0x20 - r2;
    0x0003f2dc lsrs r5, r2                                       |     r5 >>= r2;
    0x0003f2de lsl.w r3, r0, r3                                  |     r3 = r0 << r3;
    0x0003f2e2 orrs r5, r3                                       |     r5 |= r3;
    0x0003f2e4 sub.w r3, r2, 0x20                                |     r3 = r2 - 0x20;
    0x0003f2e8 lsr.w r3, r0, r3                                  |     r3 = r0 >> r3;
    0x0003f2ec ldr.w r2, [sl, 0x24]                              |     r2 = *((sl + 0x24));
    0x0003f2f0 orrs r5, r3                                       |     r5 |= r3;
    0x0003f2f2 and r3, r5, 1                                     |     r3 = r5 & 1;
    0x0003f2f6 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0003f2f8 ands r3, r2, 0x400                                |     r3 = r2 & 0x400;
                                                                 |     if (r3 == r2) {
    0x0003f2fc beq.w 0x3faac                                     |         goto label_141;
                                                                 |     }
    0x0003f300 ldr r3, [r6, 0x64]                                |     r3 = *((r6 + 0x64));
    0x0003f302 ldrh.w r4, [sl, 0x28]                             |     r4 = *((sl + 0x28));
    0x0003f306 ldr r1, [r6, 0x3c]                                |     r1 = *((r6 + 0x3c));
    0x0003f308 adds r3, 1                                        |     r3++;
    0x0003f30a str r3, [r6, 0x64]                                |     *((r6 + 0x64)) = r3;
    0x0003f30c adds r2, r4, 2                                    |     r2 = r4 + 2;
    0x0003f30e ldr r3, [r6, 0x38]                                |     r3 = *((r6 + 0x38));
    0x0003f310 str r2, [sp, 0x50]                                |     var_50h = r2;
    0x0003f312 str r1, [sp, 0x1c]                                |     var_1ch = r1;
    0x0003f314 cmp r2, r3                                        |     
                                                                 |     if (r2 > r3) {
    0x0003f316 bgt.w 0x402c6                                     |         goto label_142;
                                                                 |     }
    0x0003f31a subs r3, r3, r2                                   |     r3 -= r2;
    0x0003f31c str r3, [r6, 0x38]                                |     *((r6 + 0x38)) = r3;
    0x0003f31e mov r3, r2                                        |     r3 = r2;
    0x0003f320 add r3, r1                                        |     r3 += r1;
    0x0003f322 str r3, [r6, 0x3c]                                |     *((r6 + 0x3c)) = r3;
                                                                 | label_40:
    0x0003f324 ldr.w r3, [sb, 0x2ec]                             |     r3 = *((sb + 0x2ec));
    0x0003f328 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0003f32a ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003f32c adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x0003f32e str r2, [sp, 0x54]                                |     var_54h = r2;
    0x0003f330 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0003f332 beq.w 0x401b4                                     |         goto label_143;
                                                                 |     }
    0x0003f336 movs r7, 0                                        |     r7 = 0;
    0x0003f338 str.w r8, [sp, 0x5c]                              |     __asm ("str.w r8, [var_5ch]");
    0x0003f33c adds r5, r3, 2                                    |     r5 = r3 + 2;
    0x0003f33e mov r8, r7                                        |     r8 = r7;
    0x0003f340 ldr r7, [sp, 0x44]                                |     r7 = var_44h;
    0x0003f342 b 0x3f362                                         |     goto label_8;
                                                                 | label_7:
    0x0003f344 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003f346 mov r0, r6                                        |     r0 = r6;
    0x0003f348 str r2, [sp, 4]                                   |     var_4h = r2;
    0x0003f34a mov r2, r7                                        |     r2 = r7;
    0x0003f34c str r3, [sp]                                      |     *(sp) = r3;
    0x0003f34e mov r3, r8                                        |     r3 = r8;
    0x0003f350 bl 0x3c350                                        |     fcn_0003c350 (r0, r1, r2, r3, r4, r5, r6);
    0x0003f354 ldr.w r3, [sb, 0x2f0]                             |     r3 = *((sb + 0x2f0));
    0x0003f358 str r3, [sp, 0x20]                                |     var_20h = r3;
                                                                 |     do {
    0x0003f35a add.w r8, r8, 1                                   |         r8++;
    0x0003f35e cmp r4, r8                                        |         
                                                                 |         if (r4 == r8) {
    0x0003f360 beq 0x3f38a                                       |             goto label_144;
                                                                 |         }
                                                                 | label_8:
    0x0003f362 ldr.w r2, [sl, 0x2c]                              |         r2 = *((sl + 0x2c));
    0x0003f366 ldr.w r1, [r2, r8, lsl 2]                         |         offset_1 = r8 << 2;
                                                                 |         r1 = *((r2 + offset_1));
    0x0003f36a add.w r2, r5, r8                                  |         r2 = r5 + r8;
    0x0003f36e cmp r1, 0                                         |         
    0x0003f370 beq 0x3f35a                                       |         
                                                                 |     } while (r1 == 0);
    0x0003f372 ldrh r0, [r1, 0x12]                               |     r0 = *((r1 + 0x12));
    0x0003f374 lsls r0, r0, 0x1f                                 |     r0 <<= 0x1f;
                                                                 |     if (r0 < r0) {
    0x0003f376 bmi 0x3f344                                       |         goto label_7;
                                                                 |     }
    0x0003f378 ldr r1, [r1]                                      |     r1 = *(r1);
    0x0003f37a mov r0, r6                                        |     r0 = r6;
    0x0003f37c add.w r8, r8, 1                                   |     r8++;
    0x0003f380 ldr r1, [r1, 0x10]                                |     r1 = *((r1 + 0x10));
    0x0003f382 bl 0x3c4a8                                        |     fcn_0003c4a8 (r0, r1, r2);
    0x0003f386 cmp r4, r8                                        |     
                                                                 |     if (r4 != r8) {
    0x0003f388 bne 0x3f362                                       |         goto label_8;
                                                                 |     }
                                                                 | label_144:
    0x0003f38a ldr.w r8, [sp, 0x5c]                              |     r8 = var_5ch;
    0x0003f38e movs r5, 0                                        |     r5 = 0;
    0x0003f390 ldr.w r2, [sl, 0x18]                              |     r2 = *((sl + 0x18));
    0x0003f394 movs r1, 0x19                                     |     r1 = 0x19;
    0x0003f396 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003f398 mov r0, r8                                        |     r0 = r8;
    0x0003f39a str r5, [sp]                                      |     *(sp) = r5;
    0x0003f39c bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003f3a0 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0003f3a2 mov r2, r4                                        |     r2 = r4;
    0x0003f3a4 movs r1, 0x19                                     |     r1 = 0x19;
    0x0003f3a6 mov r0, r8                                        |     r0 = r8;
    0x0003f3a8 str r5, [sp]                                      |     *(sp) = r5;
    0x0003f3aa bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003f3ae ldrb.w r7, [sl, 0x1c]                             |     r7 = *((sl + 0x1c));
    0x0003f3b2 ldr.w r3, [sl, 0x20]                              |     r3 = *((sl + 0x20));
    0x0003f3b6 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0003f3b8 beq.w 0x402d6                                     |         goto label_145;
                                                                 |     }
    0x0003f3bc str r3, [sp, 4]                                   |     var_4h = r3;
    0x0003f3be movs r1, 0xe                                      |     r1 = 0xe;
    0x0003f3c0 ldrd r2, r3, [sp, 0x1c]                           |     __asm ("ldrd r2, r3, [var_20h]");
    0x0003f3c4 mov r0, r8                                        |     r0 = r8;
    0x0003f3c6 str r2, [sp]                                      |     *(sp) = r2;
    0x0003f3c8 mvn r2, 0xa                                       |     r2 = ~0xa;
    0x0003f3cc str r2, [sp, 8]                                   |     var_8h = r2;
    0x0003f3ce mov r2, fp                                        |     r2 = fp;
    0x0003f3d0 bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x0003f3d4 strb.w r5, [sl, 0x1c]                             |     *((sl + 0x1c)) = r5;
                                                                 | label_41:
    0x0003f3d8 ldrh.w r7, [sl, 0x1e]                             |     r7 = *((sl + 0x1e));
    0x0003f3dc movs r5, 0                                        |     r5 = 0;
    0x0003f3de ldr r0, [sp, 0x44]                                |     r0 = var_44h;
    0x0003f3e0 b 0x3f3f8                                         |     
                                                                 |     while (r2 >= r3) {
                                                                 | label_9:
    0x0003f3e2 adds r5, 1                                        |         r5++;
    0x0003f3e4 cmp r4, r5                                        |         
    0x0003f3e6 ite gt                                            |         
                                                                 |         if (r4 <= r5) {
    0x0003f3e8 movgt r3, 1                                       |             r3 = 1;
                                                                 |         }
                                                                 |         if (r4 > r5) {
    0x0003f3ea movle r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x0003f3ec cmp r5, 0xf                                       |         
    0x0003f3ee it gt                                             |         
                                                                 |         if (r5 <= 0xf) {
    0x0003f3f0 movgt r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x0003f3f2 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0003f3f4 beq.w 0x401fc                                     |             goto label_146;
                                                                 |         }
    0x0003f3f8 asr.w r3, r7, r5                                  |         r3 = r7 >> r5;
    0x0003f3fc lsls r2, r3, 0x1f                                 |         r2 = r3 << 0x1f;
    0x0003f3fe bpl 0x3f3e2                                       |         
                                                                 |     }
    0x0003f400 ldr.w r3, [sl, 0x2c]                              |     r3 = *((sl + 0x2c));
    0x0003f404 ldr.w r1, [r3, r5, lsl 2]                         |     offset_2 = r5 << 2;
                                                                 |     r1 = *((r3 + offset_2));
    0x0003f408 bl 0x83a0                                         |     fcn_000083a0 (r0, r1);
    0x0003f40c b 0x3f3e2                                         |     goto label_9;
                                                                 | label_119:
    0x0003f40e ldrh.w r3, [fp, 0x22]                             |     r3 = *(arg_22h);
    0x0003f412 lsls r3, r3, 0x1a                                 |     r3 <<= 0x1a;
                                                                 |     if (r3 < r3) {
    0x0003f414 bmi.w 0x3ee1c                                     |         goto label_10;
                                                                 |     }
    0x0003f418 ldr r5, [r6, 0x18]                                |     r5 = *((r6 + 0x18));
    0x0003f41a ldrb.w r3, [r5, 0x2c]                             |     r3 = *((r5 + 0x2c));
    0x0003f41e lsls r7, r3, 0x1b                                 |     r7 = r3 << 0x1b;
                                                                 |     if (r7 < r3) {
    0x0003f420 bmi.w 0x3ee1c                                     |         goto label_10;
                                                                 |     }
    0x0003f424 ldr r3, [r6, 0x48]                                |     r3 = *((r6 + 0x48));
    0x0003f426 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003f428 bne.w 0x3ee1c                                     |         goto label_10;
                                                                 |     }
    0x0003f42c ldr.w sl, [r6, 0x30]                              |     sl = *((r6 + 0x30));
    0x0003f430 add.w r7, fp, 0x148                               |     r7 += arg_148h;
    0x0003f434 vmov.i32 d8, 0                                    |     __asm ("vmov.i32 d8, 0");
    0x0003f438 mov.w r2, -1                                      |     r2 = -1;
    0x0003f43c str r3, [r4, 0x24]                                |     *((r4 + 0x24)) = r3;
    0x0003f43e mov r0, r7                                        |     r0 = r7;
    0x0003f440 strh r3, [r4, 0x1a]                               |     *((r4 + 0x1a)) = r3;
    0x0003f442 mov r1, sl                                        |     r1 = sl;
    0x0003f444 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x0003f446 movs r3, 2                                        |     r3 = 2;
    0x0003f448 vstr d8, [sp]                                     |     __asm ("vstr d8, [sp]");
    0x0003f44c str r3, [sp, 8]                                   |     var_8h = r3;
    0x0003f44e bl 0x231d0                                        |     r0 = fcn_000231d0 (r0, r1, r2, r3, r4, r5);
    0x0003f452 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003f454 beq.w 0x4109c                                     |         goto label_147;
                                                                 |     }
    0x0003f458 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0003f45a movw r1, 0x1101                                   |     r1 = 0x1101;
    0x0003f45e ldr r2, [r4, 0x2c]                                |     r2 = *((r4 + 0x2c));
    0x0003f460 str r1, [r4, 0x24]                                |     *((r4 + 0x24)) = r1;
    0x0003f462 str r0, [r2]                                      |     *(r2) = r0;
    0x0003f464 strh r3, [r4, 0x28]                               |     *((r4 + 0x28)) = r3;
    0x0003f466 strh r3, [r4, 0x18]                               |     *((r4 + 0x18)) = r3;
    0x0003f468 movs r3, 0x21                                     |     r3 = 0x21;
    0x0003f46a strh r3, [r4, 0x14]                               |     *((r4 + 0x14)) = r3;
                                                                 | label_108:
    0x0003f46c ldr.w r2, [fp, 0x44]                              |     r2 = *(arg_44h);
    0x0003f470 movs r3, 1                                        |     r3 = 1;
    0x0003f472 strh r3, [r4, 0x16]                               |     *((r4 + 0x16)) = r3;
    0x0003f474 str.w r4, [fp, 0x318]                             |     __asm ("str.w r4, [arg_318h]");
    0x0003f478 cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x0003f47a ble.w 0x4106c                                     |         goto label_148;
                                                                 |     }
    0x0003f47e add.w r3, fp, 0x44                                |     r3 += arg_44h;
    0x0003f482 movs r1, 0                                        |     r1 = 0;
    0x0003f484 b 0x3f48e                                         |     
                                                                 |     while (sl != r0) {
    0x0003f486 adds r1, 1                                        |         r1++;
    0x0003f488 cmp r1, r2                                        |         
                                                                 |         if (r1 == r2) {
    0x0003f48a beq.w 0x4106c                                     |             goto label_148;
                                                                 |         }
    0x0003f48c strh r7, [r5, 0x2e]                               |         *((r5 + 0x2e)) = r7;
    0x0003f48e ldr r0, [r3, 4]!                                  |         r0 = *((r3 += 4));
    0x0003f492 cmp sl, r0                                        |         
    0x0003f494 bne 0x3f486                                       |         
                                                                 |     }
    0x0003f496 movs r3, 1                                        |     r3 = 1;
    0x0003f498 sub.w r2, r1, 0x20                                |     r2 = r1 - 0x20;
    0x0003f49c rsb.w r0, r1, 0x20                                |     r0 = 0x20 - r1;
    0x0003f4a0 lsl.w r2, r3, r2                                  |     r2 = r3 << r2;
    0x0003f4a4 lsr.w r0, r3, r0                                  |     r0 = r3 >> r0;
    0x0003f4a8 lsls r3, r1                                       |     r3 <<= r1;
    0x0003f4aa orrs r2, r0                                       |     r2 |= r0;
    0x0003f4ac b.w 0x41070                                       |     goto label_149;
                                                                 | label_118:
    0x0003f4b0 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0003f4b2 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0003f4b4 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x0003f4b6 bne.w 0x3f5d6                                     |         goto label_150;
                                                                 |     }
    0x0003f4ba ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0003f4bc ldr.w r0, [sb]                                    |     r0 = *(sb);
    0x0003f4c0 ldr.w sl, [r3, 0x30]                              |     sl = *((r3 + 0x30));
    0x0003f4c4 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x0003f4c6 cmp r0, 0                                         |     
    0x0003f4c8 str r3, [sp, 0x1c]                                |     var_1ch = r3;
                                                                 |     if (r0 <= 0) {
    0x0003f4ca ble 0x3f506                                       |         goto label_151;
                                                                 |     }
    0x0003f4cc ldr.w r4, [sb, 4]                                 |     r4 = *((sb + 4));
    0x0003f4d0 add.w r0, r0, r0, lsl 2                           |     r0 += (r0 << 2);
    0x0003f4d4 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
                                                                 | label_11:
    0x0003f4d6 ldr.w r3, [r4, r2, lsl 2]                         |     offset_3 = r2 << 2;
                                                                 |     r3 = *((r4 + offset_3));
                                                                 |     if (r3 != 0) {
    0x0003f4da cbnz r3, 0x3f4f2                                  |         goto label_152;
                                                                 |     }
    0x0003f4dc b.w 0x411f6                                       |     goto label_153;
                                                                 |     do {
    0x0003f4e0 lsls r6, r1, 0xd                                  |         r6 = r1 << 0xd;
    0x0003f4e2 itett mi                                          |         
                                                                 |         if (r6 >= r1) {
    0x0003f4e4 ldrmi r3, [r3, 0x14]                              |             r3 = *((r3 + 0x14));
                                                                 |         }
                                                                 |         if (r6 < r1) {
    0x0003f4e6 ldrpl r3, [r3, 0xc]                               |             r3 = *((r3 + 0xc));
                                                                 |         }
                                                                 |         if (r6 >= r1) {
    0x0003f4e8 ldrmi r3, [r3, 4]                                 |             r3 = *((r3 + 4));
                                                                 |         }
                                                                 |         if (r6 >= r1) {
    0x0003f4ea ldrmi r3, [r3]                                    |             r3 = *(r3);
                                                                 |         }
    0x0003f4ec cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0003f4ee beq.w 0x411f6                                     |             goto label_153;
                                                                 |         }
                                                                 | label_152:
    0x0003f4f2 ldr r1, [r3, 4]                                   |         r1 = *((r3 + 4));
    0x0003f4f4 lsls r5, r1, 0x13                                 |         r5 = r1 << 0x13;
    0x0003f4f6 bmi 0x3f4e0                                       |         
                                                                 |     } while (r5 < r1);
    0x0003f4f8 ldrb r1, [r3]                                     |     r1 = *(r3);
    0x0003f4fa cmp r1, 0x9a                                      |     
                                                                 |     if (r1 == 0x9a) {
    0x0003f4fc beq.w 0x40292                                     |         goto label_154;
                                                                 |     }
                                                                 | label_36:
    0x0003f500 adds r2, 5                                        |     r2 += 5;
    0x0003f502 cmp r0, r2                                        |     
                                                                 |     if (r0 != r2) {
    0x0003f504 bne 0x3f4d6                                       |         goto label_11;
                                                                 |     }
                                                                 | label_151:
    0x0003f506 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003f508 ldr r6, [r3, 8]                                   |     r6 = *((r3 + 8));
    0x0003f50a cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0003f50c beq 0x3f5d6                                       |         goto label_150;
                                                                 |     }
    0x0003f50e vmov.i8 d8, 0xff                                  |     __asm ("vmov.i8 d8, 0xff");
    0x0003f512 mov.w fp, 2                                       |     
    0x0003f516 b 0x3f51e                                         |     
                                                                 |     while (r3 == 0) {
                                                                 | label_13:
    0x0003f518 ldr r6, [r6, 0x14]                                |         r6 = *((r6 + 0x14));
    0x0003f51a cmp r6, 0                                         |         
                                                                 |         if (r6 == 0) {
    0x0003f51c beq 0x3f5d6                                       |             goto label_150;
                                                                 |         }
    0x0003f51e ldrb.w r3, [r6, 0x36]                             |         r3 = *((r6 + 0x36));
    0x0003f522 cmp r3, 0                                         |         
    0x0003f524 beq 0x3f518                                       |         
                                                                 |     }
    0x0003f526 ldrh r3, [r6, 0x32]                               |     r3 = *((r6 + 0x32));
    0x0003f528 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003f52a beq 0x3f5ba                                       |         goto label_37;
                                                                 |     }
    0x0003f52c ldr.w r8, [sp, 0x58]                              |     r8 = var_58h;
    0x0003f530 movs r5, 0                                        |     r5 = 0;
    0x0003f532 b 0x3f53c                                         |     
                                                                 |     while (r0 != 0) {
                                                                 | label_19:
    0x0003f534 ldrh r3, [r6, 0x32]                               |         r3 = *((r6 + 0x32));
    0x0003f536 adds r5, 1                                        |         r5++;
    0x0003f538 cmp r5, r3                                        |         
                                                                 |         if (r5 >= r3) {
    0x0003f53a bge 0x3f5b6                                       |             goto label_155;
                                                                 |         }
    0x0003f53c ldr r3, [r6, 4]                                   |         r3 = *((r6 + 4));
    0x0003f53e mov r1, sl                                        |         r1 = sl;
    0x0003f540 mov r0, r8                                        |         r0 = r8;
    0x0003f542 ldrsh.w r7, [r3, r5, lsl 1]                       |         offset_4 = r5 << 1;
                                                                 |         r7 = *((r3 + offset_4));
    0x0003f546 strd fp, r6, [sp, 8]                              |         __asm ("strd fp, r6, [var_8h]");
    0x0003f54a vstr d8, [sp]                                     |         __asm ("vstr d8, [sp]");
    0x0003f54e mov r2, r7                                        |         r2 = r7;
    0x0003f550 bl 0x231d0                                        |         fcn_000231d0 (r0, r1, r2, r3, r4, r5);
    0x0003f554 lsls r2, r5, 1                                    |         r2 = r5 << 1;
    0x0003f556 cmp r0, 0                                         |         
    0x0003f558 bne 0x3f534                                       |         
                                                                 |     }
    0x0003f55a ldr r3, [r6, 0x20]                                |     r3 = *((r6 + 0x20));
    0x0003f55c ldr.w ip, [sb]                                    |     ip = *(sb);
    0x0003f560 ldr.w r3, [r3, r5, lsl 2]                         |     offset_5 = r5 << 2;
                                                                 |     r3 = *((r3 + offset_5));
    0x0003f564 cmp.w ip, 0                                       |     
    0x0003f568 str r3, [sp, 0x20]                                |     var_20h = r3;
                                                                 |     if (ip <= 0) {
    0x0003f56a ble 0x3f5b4                                       |         goto label_20;
                                                                 |     }
    0x0003f56c mov r3, r2                                        |     r3 = r2;
    0x0003f56e mov r4, r0                                        |     r4 = r0;
    0x0003f570 mov r2, r5                                        |     r2 = r5;
    0x0003f572 mov r5, r7                                        |     r5 = r7;
    0x0003f574 mov r7, r3                                        |     r7 = r3;
                                                                 | label_12:
    0x0003f576 ldr.w r3, [sb, 4]                                 |     r3 = *((sb + 4));
    0x0003f57a add.w r1, r4, r4, lsl 2                           |     r1 = r4 + (r4 << 2);
    0x0003f57e ldr.w r1, [r3, r1, lsl 2]                         |     offset_6 = r1 << 2;
                                                                 |     r1 = *((r3 + offset_6));
    0x0003f582 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0003f584 beq.w 0x411f6                                     |         goto label_153;
                                                                 |     }
    0x0003f588 mov r3, r1                                        |     r3 = r1;
    0x0003f58a b 0x3f59e                                         |     
                                                                 |     while ((r0 & 0x1000) != 0) {
    0x0003f58c lsls r0, r0, 0xd                                  |         r0 <<= 0xd;
    0x0003f58e itett mi                                          |         
                                                                 |         if (r0 >= r0) {
    0x0003f590 ldrmi r3, [r3, 0x14]                              |             r3 = *((r3 + 0x14));
                                                                 |         }
                                                                 |         if (r0 < r0) {
    0x0003f592 ldrpl r3, [r3, 0xc]                               |             r3 = *((r3 + 0xc));
                                                                 |         }
                                                                 |         if (r0 >= r0) {
    0x0003f594 ldrmi r3, [r3, 4]                                 |             r3 = *((r3 + 4));
                                                                 |         }
                                                                 |         if (r0 >= r0) {
    0x0003f596 ldrmi r3, [r3]                                    |             r3 = *(r3);
                                                                 |         }
    0x0003f598 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0003f59a beq.w 0x411f6                                     |             goto label_153;
                                                                 |         }
    0x0003f59e ldr r0, [r3, 4]                                   |         r0 = *((r3 + 4));
    0x0003f5a0 tst.w r0, 0x1000                                  |         
    0x0003f5a4 bne 0x3f58c                                       |         
                                                                 |     }
    0x0003f5a6 ldrb r0, [r3]                                     |     r0 = *(r3);
    0x0003f5a8 cmp r0, 0x9a                                      |     
                                                                 |     if (r0 == 0x9a) {
    0x0003f5aa beq 0x3f5fc                                       |         goto label_156;
                                                                 |     }
                                                                 | label_18:
    0x0003f5ac adds r4, 1                                        |     r4++;
    0x0003f5ae cmp r4, ip                                        |     
                                                                 |     if (r4 < ip) {
    0x0003f5b0 blt 0x3f576                                       |         goto label_12;
                                                                 |     }
    0x0003f5b2 mov r5, r2                                        |     r5 = r2;
                                                                 | label_20:
    0x0003f5b4 ldrh r3, [r6, 0x32]                               |     r3 = *((r6 + 0x32));
                                                                 | label_155:
    0x0003f5b6 cmp r3, r5                                        |     
                                                                 |     if (r3 != r5) {
    0x0003f5b8 bne 0x3f518                                       |         goto label_13;
                                                                 |     }
                                                                 | label_37:
    0x0003f5ba ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0003f5bc movs r3, 1                                        |     r3 = 1;
    0x0003f5be strb.w r3, [r2, 0x28]                             |     *((r2 + 0x28)) = r3;
    0x0003f5c2 b 0x3ee0a                                         |     goto label_14;
                                                                 | label_115:
    0x0003f5c4 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0003f5c6 movs r3, 1                                        |     r3 = 1;
    0x0003f5c8 strb.w r3, [r2, 0x28]                             |     *((r2 + 0x28)) = r3;
    0x0003f5cc b.w 0x3eda2                                       |     goto label_15;
                                                                 | label_126:
    0x0003f5d0 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x0003f5d2 mov r1, r4                                        |     r1 = r4;
    0x0003f5d4 b 0x3efb4                                         |     goto label_16;
                                                                 | label_150:
    0x0003f5d6 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003f5d8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003f5da bne.w 0x3ee0a                                     |         goto label_14;
                                                                 |     }
    0x0003f5de ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0003f5e0 ldrh r3, [r2, 0x22]                               |     r3 = *((r2 + 0x22));
    0x0003f5e2 str.w sb, [r2, 8]                                 |     __asm ("str.w sb, [r2, 8]");
    0x0003f5e6 orr r3, r3, 0x200                                 |     r3 |= 0x200;
    0x0003f5ea strh r3, [r2, 0x22]                               |     *((r2 + 0x22)) = r3;
    0x0003f5ec b 0x3ee0a                                         |     goto label_14;
                                                                 | label_123:
    0x0003f5ee ldr r5, [sp, 0x20]                                |     r5 = var_20h;
    0x0003f5f0 mov r0, r5                                        |     r0 = r5;
    0x0003f5f2 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0003f5f6 mov r1, r4                                        |     r1 = r4;
    0x0003f5f8 mov r0, r5                                        |     r0 = r5;
    0x0003f5fa b 0x3eef4                                         |     goto label_17;
                                                                 | label_156:
    0x0003f5fc ldr r0, [r6, 4]                                   |     r0 = *((r6 + 4));
    0x0003f5fe ldrsh.w lr, [r3, 0x20]                            |     
    0x0003f602 ldrsh r0, [r0, r7]                                |     r0 = *((r0 + r7));
    0x0003f604 cmp lr, r0                                        |     
                                                                 |     if (lr != r0) {
    0x0003f606 bne 0x3f5ac                                       |         goto label_18;
                                                                 |     }
    0x0003f608 ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x0003f60a cmp sl, r3                                        |     
                                                                 |     if (sl != r3) {
    0x0003f60c bne 0x3f5ac                                       |         goto label_18;
                                                                 |     }
    0x0003f60e ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0003f610 str r2, [sp, 0x24]                                |     var_24h = r2;
    0x0003f612 bl 0x22e78                                        |     fcn_00022e78 (r0, r1);
    0x0003f616 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
                                                                 |     if (r0 != 0) {
    0x0003f618 cbz r0, 0x3f628                                   |         
    0x0003f61a ldr r0, [r0]                                      |         r0 = *(r0);
    0x0003f61c ldr r1, [sp, 0x20]                                |         r1 = var_20h;
    0x0003f61e str r2, [sp, 0x24]                                |         var_24h = r2;
    0x0003f620 blx 0x6164                                        |         fcn_00006164 ();
    0x0003f624 ldr r2, [sp, 0x24]                                |         r2 = var_24h;
                                                                 |         if (r0 == 0) {
    0x0003f626 cbz r0, 0x3f62e                                   |             goto label_157;
                                                                 |         }
                                                                 |     }
    0x0003f628 ldr.w ip, [sb]                                    |     ip = *(sb);
    0x0003f62c b 0x3f5ac                                         |     goto label_18;
                                                                 | label_157:
    0x0003f62e ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003f630 mov r7, r5                                        |     r7 = r5;
    0x0003f632 add.w r7, r7, r7, lsl 1                           |     r7 += (r7 << 1);
    0x0003f636 mov r5, r2                                        |     r5 = r2;
    0x0003f638 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0003f63a add.w r3, r3, r7, lsl 3                           |     r3 += (r7 << 3);
    0x0003f63e ldrb r3, [r3, 0x14]                               |     r3 = *((r3 + 0x14));
    0x0003f640 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003f642 bne.w 0x3f534                                     |         goto label_19;
                                                                 |     }
    0x0003f646 b 0x3f5b4                                         |     goto label_20;
                                                                 | label_138:
    0x0003f648 ldrd r1, r3, [sp, 0x30]                           |     __asm ("ldrd r1, r3, [var_30h]");
    0x0003f64c b 0x3f262                                         |     goto label_21;
                                                                 | label_137:
    0x0003f670 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0003f672 mov.w r8, 0x48                                    |     r8 = 0x48;
    0x0003f676 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x0003f678 mla r8, r8, r2, r3                                |     __asm ("mla r8, r8, r2, r3");
    0x0003f67c ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003f67e ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0003f680 add.w r8, r8, 8                                   |     r8 += 8;
    0x0003f684 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x0003f686 ldr r0, [sp, 0x54]                                |     r0 = var_54h;
    0x0003f688 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003f68a beq.w 0x4054c                                     |         goto label_158;
                                                                 |     }
                                                                 | label_51:
    0x0003f68e ldr r4, [sp, 0x14]                                |     r4 = var_14h;
    0x0003f690 movs r7, 0                                        |     r7 = 0;
    0x0003f692 mov r3, r7                                        |     r3 = r7;
    0x0003f694 ldr r2, [r4, 0x50]                                |     r2 = *((r4 + 0x50));
    0x0003f696 str r7, [sp]                                      |     *(sp) = r7;
    0x0003f698 adds r1, r2, 1                                    |     r1 = r2 + 1;
    0x0003f69a str r1, [r4, 0x50]                                |     *((r4 + 0x50)) = r1;
    0x0003f69c movs r1, 0x2b                                     |     r1 = 0x2b;
    0x0003f69e bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003f6a2 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0003f6a4 ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x0003f6a6 str r0, [sp, 0x6c]                                |     var_6ch = r0;
    0x0003f6a8 ldr.w r3, [r2, 0x154]                             |     r3 = *((r2 + 0x154));
    0x0003f6ac ldr.w r4, [r2, 0x15c]                             |     r4 = *((r2 + 0x15c));
    0x0003f6b0 ldr.w r0, [sb, 0x318]                             |     r0 = *((sb + 0x318));
    0x0003f6b4 add.w r3, r3, r3, lsl 1                           |     r3 += (r3 << 1);
    0x0003f6b8 str r0, [sp, 0x28]                                |     var_28h = r0;
    0x0003f6ba add.w r2, r4, r3, lsl 4                           |     r2 = r4 + (r3 << 4);
    0x0003f6be lsls r3, r1, 3                                    |     r3 = r1 << 3;
    0x0003f6c0 str r3, [sp, 0x64]                                |     var_64h = r3;
    0x0003f6c2 add r3, r1                                        |     r3 += r1;
    0x0003f6c4 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0003f6c6 cmp r4, r2                                        |     
    0x0003f6c8 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x0003f6ca add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0003f6ce ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x0003f6d0 str r3, [sp, 0x50]                                |     var_50h = r3;
                                                                 |     if (r4 >= r2) {
    0x0003f6d2 bhs.w 0x409d6                                     |         goto label_159;
                                                                 |     }
    0x0003f6d6 ldr.w r3, [pc, 0xb54]                             |     r3 = *(0x0004022c);
    0x0003f6da mov fp, r7                                        |     
    0x0003f6dc mov sl, r7                                        |     sl = r7;
    0x0003f6de str r7, [sp, 0x1c]                                |     var_1ch = r7;
    0x0003f6e0 str r7, [sp, 0x24]                                |     var_24h = r7;
    0x0003f6e2 str.w sb, [sp, 0x68]                              |     __asm ("str.w sb, [var_68h]");
    0x0003f6e6 add r3, pc                                        |     r3 += pc;
    0x0003f6e8 ldrd r7, sb, [sp, 0x30]                           |     __asm ("ldrd r7, sb, [var_30h]");
    0x0003f6ec str r3, [sp, 0x60]                                |     var_60h = r3;
                                                                 |     do {
    0x0003f6ee mov r2, r7                                        |         r2 = r7;
    0x0003f6f0 mov r3, sb                                        |         r3 = sb;
    0x0003f6f2 mov r1, r8                                        |         r1 = r8;
    0x0003f6f4 mov r0, r4                                        |         r0 = r4;
    0x0003f6f6 bl 0xc474                                         |         r0 = fcn_0000c474 (r0, r1);
    0x0003f6fa cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0003f6fc beq 0x3f776                                       |             
    0x0003f6fe ldr r3, [r4, 0xc]                                 |             r3 = *((r4 + 0xc));
    0x0003f700 cmp r3, 0x3f                                      |             
    0x0003f702 itt gt                                            |             
                                                                 |             if (r3 <= 0x3f) {
    0x0003f704 movgt r6, 0                                       |                 r6 = 0;
                                                                 |             }
                                                                 |             if (r3 <= 0x3f) {
    0x0003f706 movgt r5, -0x80000000                             |                 r5 = -0x80000000;
                                                                 |             }
                                                                 |             if (r3 <= 0x3f) {
    0x0003f70a bgt 0x3f724                                       |                 
    0x0003f70c movs r1, 1                                        |                 r1 = 1;
    0x0003f70e sub.w r5, r3, 0x20                                |                 r5 = r3 - 0x20;
    0x0003f712 rsb.w r2, r3, 0x20                                |                 r2 = 0x20 - r3;
    0x0003f716 lsl.w r5, r1, r5                                  |                 r5 = r1 << r5;
    0x0003f71a lsr.w r2, r1, r2                                  |                 r2 = r1 >> r2;
    0x0003f71e lsl.w r6, r1, r3                                  |                 r6 = r1 << r3;
    0x0003f722 orrs r5, r2                                       |                 r5 |= r2;
                                                                 |             }
    0x0003f724 cmp.w fp, 0                                       |             
                                                                 |             if (fp == 0) {
    0x0003f728 beq.w 0x3fa92                                     |                 goto label_160;
                                                                 |             }
                                                                 | label_26:
    0x0003f72c ldr r2, [sp, 0x1c]                                |             r2 = var_1ch;
    0x0003f72e and.w r3, r6, sl                                  |             r3 = r6 & sl;
    0x0003f732 ands r2, r5                                       |             r2 &= r5;
    0x0003f734 orrs r3, r2                                       |             r3 |= r2;
                                                                 |             if (r3 != r2) {
    0x0003f736 bne.w 0x3fa8c                                     |                 goto label_161;
                                                                 |             }
    0x0003f73a ldr r3, [sp, 0x28]                                |             r3 = var_28h;
    0x0003f73c ldr r2, [sp, 0x24]                                |             r2 = var_24h;
    0x0003f73e ldrh r3, [r3, 0x2a]                               |             r3 = *((r3 + 0x2a));
    0x0003f740 add.w fp, r2, 1                                   |             
    0x0003f744 ldr r2, [sp, 0x14]                                |             r2 = var_14h;
    0x0003f746 cmp fp, r3                                        |             
    0x0003f748 ldr r0, [r2]                                      |             r0 = *(r2);
                                                                 |             if (fp > r3) {
    0x0003f74a ble 0x3f75a                                       |                 
    0x0003f74c ldr r1, [sp, 0x28]                                |                 r1 = var_28h;
    0x0003f74e mov r2, fp                                        |                 r2 = fp;
    0x0003f750 bl 0xeee4                                         |                 r0 = fcn_0000eee4 (r0, r1, r2);
    0x0003f754 cmp r0, 0                                         |                 
                                                                 |                 if (r0 != 0) {
    0x0003f756 bne.w 0x40720                                     |                     goto label_162;
                                                                 |                 }
                                                                 |             }
    0x0003f75a ldr r3, [sp, 0x1c]                                |             r3 = var_1ch;
    0x0003f75c orr.w sl, r6, sl                                  |             sl = r6 | sl;
    0x0003f760 ldr r2, [sp, 0x24]                                |             r2 = var_24h;
    0x0003f762 str.w fp, [sp, 0x24]                              |             __asm ("str.w fp, [var_24h]");
    0x0003f766 mov.w fp, 1                                       |             
    0x0003f76a orrs r3, r5                                       |             r3 |= r5;
    0x0003f76c str r3, [sp, 0x1c]                                |             var_1ch = r3;
    0x0003f76e ldr r3, [sp, 0x28]                                |             r3 = var_28h;
    0x0003f770 ldr r3, [r3, 0x2c]                                |             r3 = *((r3 + 0x2c));
    0x0003f772 str.w r4, [r3, r2, lsl 2]                         |             __asm ("str.w r4, [r3, r2, lsl 2]");
                                                                 |         }
                                                                 | label_25:
    0x0003f776 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x0003f778 adds r4, 0x30                                     |         r4 += 0x30;
    0x0003f77a cmp r3, r4                                        |         
    0x0003f77c bhi 0x3f6ee                                       |         
                                                                 |     } while (r3 > r4);
    0x0003f77e ldr r7, [sp, 0x24]                                |     r7 = var_24h;
    0x0003f780 mvn.w sl, sl                                      |     sl = ~sl;
    0x0003f784 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003f786 ldr.w sb, [sp, 0x68]                              |     sb = var_68h;
    0x0003f78a mvns r4, r3                                       |     r4 = ~r3;
    0x0003f78c uxth r3, r7                                       |     r3 = (int16_t) r7;
    0x0003f78e orr r4, r4, 0x80000000                            |     r4 |= 0x80000000;
                                                                 | label_74:
    0x0003f792 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x0003f794 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x0003f796 strh r3, [r0, 0x28]                               |     *((r0 + 0x28)) = r3;
    0x0003f798 strh r3, [r0, 0x18]                               |     *((r0 + 0x18)) = r3;
    0x0003f79a ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x0003f79c add r3, r2                                        |     r3 += r2;
    0x0003f79e ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0003f7a0 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0003f7a4 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x0003f7a6 ldr r5, [r3, 0x40]                                |     r5 = *((r3 + 0x40));
    0x0003f7a8 ldrsh.w r1, [r2, 0x26]                            |     r1 = *((r2 + 0x26));
    0x0003f7ac movw r2, 0x4241                                   |     r2 = 0x4241;
    0x0003f7b0 str r2, [r0, 0x24]                                |     *((r0 + 0x24)) = r2;
    0x0003f7b2 ldr r0, [r3, 0x44]                                |     r0 = *((r3 + 0x44));
    0x0003f7b4 and.w r5, r5, sl                                  |     r5 &= sl;
    0x0003f7b8 cmp r1, 0x3f                                      |     
    0x0003f7ba mov r6, r1                                        |     r6 = r1;
    0x0003f7bc it ge                                             |     
                                                                 |     if (r1 < 0x3f) {
    0x0003f7be movge r6, 0x3f                                    |         r6 = 0x3f;
                                                                 |     }
    0x0003f7c0 cmp r1, 0                                         |     
    0x0003f7c2 and.w r4, r4, r0                                  |     r4 &= r0;
    0x0003f7c6 str r1, [sp, 0x1c]                                |     var_1ch = r1;
                                                                 |     if (r1 <= 0) {
    0x0003f7c8 ble 0x3f7f0                                       |         goto label_163;
                                                                 |     }
    0x0003f7ca movs r3, 0                                        |     r3 = 0;
                                                                 |     do {
    0x0003f7cc rsb.w r1, r3, 0x20                                |         r1 = 0x20 - r3;
    0x0003f7d0 lsr.w r2, r5, r3                                  |         r2 = r5 >> r3;
    0x0003f7d4 lsl.w r1, r4, r1                                  |         r1 = r4 << r1;
    0x0003f7d8 orrs r2, r1                                       |         r2 |= r1;
    0x0003f7da sub.w r1, r3, 0x20                                |         r1 = r3 - 0x20;
    0x0003f7de lsr.w r1, r4, r1                                  |         r1 = r4 >> r1;
    0x0003f7e2 adds r3, 1                                        |         r3++;
    0x0003f7e4 orrs r2, r1                                       |         r2 |= r1;
    0x0003f7e6 lsls r1, r2, 0x1f                                 |         r1 = r2 << 0x1f;
    0x0003f7e8 it mi                                             |         
                                                                 |         if (r1 >= r2) {
    0x0003f7ea addmi r7, 1                                       |             r7++;
                                                                 |         }
    0x0003f7ec cmp r6, r3                                        |         
    0x0003f7ee bne 0x3f7cc                                       |         
                                                                 |     } while (r6 != r3);
                                                                 | label_163:
    0x0003f7f0 cmp r0, 0                                         |     
    0x0003f7f2 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0003f7f4 it lt                                             |     
                                                                 |     if (r0 >= 0) {
    0x0003f7f6 ldrlt r3, [sp, 0x1c]                              |         r3 = var_1ch;
                                                                 |     }
    0x0003f7f8 ldr r0, [r2]                                      |     r0 = *(r2);
    0x0003f7fa mov.w r2, 0                                       |     r2 = 0;
    0x0003f7fe itt lt                                            |     
                                                                 |     if (r0 >= 0) {
    0x0003f800 sublt r3, 0x3f                                    |         r3 -= 0x3f;
                                                                 |     }
                                                                 |     if (r0 >= 0) {
    0x0003f802 addlt r7, r7, r3                                  |         r7 += r3;
                                                                 |     }
    0x0003f804 adds r3, r7, 1                                    |     r3 = r7 + 1;
    0x0003f806 sxth r1, r3                                       |     __asm ("sxth r1, r3");
    0x0003f808 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0003f80a add r3, sp, 0xc0                                  |     r3 += var_c0h;
    0x0003f80c bl 0xd660                                         |     r0 = fcn_0000d660 (r0, r1, r2, r3);
    0x0003f810 mov sl, r0                                        |     sl = r0;
    0x0003f812 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003f814 beq.w 0x3fa76                                     |         goto label_61;
                                                                 |     }
    0x0003f818 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x0003f81a mov.w fp, 0                                       |     
    0x0003f81c lsrs r0, r0, 0xc                                  |     r0 >>= 0xc;
    0x0003f81e str r0, [r3, 0x1c]                                |     *((r3 + 0x1c)) = r0;
    0x0003f820 ldr r3, [sp, 0x88]                                |     r3 = var_88h;
    0x0003f822 str r3, [r0]                                      |     *(r0) = r3;
    0x0003f824 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x0003f826 str r3, [r0, 0xc]                                 |     *((r0 + 0xc)) = r3;
    0x0003f828 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0003f82a ldr.w r7, [r3, 0x15c]                             |     r7 = *((r3 + 0x15c));
    0x0003f82e ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003f830 cmp r3, r7                                        |     
                                                                 |     if (r3 < r7) {
    0x0003f832 bls.w 0x40860                                     |         goto label_164;
                                                                 |     }
    0x0003f836 str r6, [sp, 0x28]                                |     var_28h = r6;
    0x0003f838 str.w sb, [sp, 0x60]                              |     __asm ("str.w sb, [var_60h]");
    0x0003f83c mov sb, fp                                        |     sb = fp;
    0x0003f83e str r5, [sp, 0x68]                                |     var_68h = r5;
    0x0003f840 str r4, [sp, 0x70]                                |     var_70h = r4;
    0x0003f842 mov r4, r3                                        |     r4 = r3;
    0x0003f844 ldrd r5, r6, [sp, 0x30]                           |     __asm ("ldrd r5, r6, [var_30h]");
    0x0003f848 str.w fp, [sp, 0x18]                              |     __asm ("str.w fp, [var_18h]");
    0x0003f84c b 0x3f854                                         |     
                                                                 |     while (r0 == 0) {
                                                                 | label_22:
    0x0003f84e adds r7, 0x30                                     |         r7 += 0x30;
    0x0003f850 cmp r4, r7                                        |         
                                                                 |         if (r4 < r7) {
    0x0003f852 bls 0x3f8ce                                       |             goto label_165;
                                                                 |         }
                                                                 | label_23:
    0x0003f854 mov r2, r5                                        |         r2 = r5;
    0x0003f856 mov r3, r6                                        |         r3 = r6;
    0x0003f858 mov r1, r8                                        |         r1 = r8;
    0x0003f85a mov r0, r7                                        |         r0 = r7;
    0x0003f85c bl 0xc474                                         |         r0 = fcn_0000c474 (r0, r1);
    0x0003f860 cmp r0, 0                                         |         
    0x0003f862 beq 0x3f84e                                       |         
                                                                 |     }
    0x0003f864 ldr r1, [r7, 0xc]                                 |     r1 = *((r7 + 0xc));
    0x0003f866 cmp r1, 0x3f                                      |     
    0x0003f868 itt gt                                            |     
                                                                 |     if (r1 <= 0x3f) {
    0x0003f86a movgt r0, 0                                       |         r0 = 0;
                                                                 |     }
                                                                 |     if (r1 <= 0x3f) {
    0x0003f86c movgt r2, -0x80000000                             |         r2 = -0x80000000;
                                                                 |     }
                                                                 |     if (r1 <= 0x3f) {
    0x0003f870 bgt 0x3f888                                       |         
    0x0003f872 movs r0, 1                                        |         r0 = 1;
    0x0003f874 sub.w r2, r1, 0x20                                |         r2 = r1 - 0x20;
    0x0003f878 rsb.w r3, r1, 0x20                                |         r3 = 0x20 - r1;
    0x0003f87c lsl.w r2, r0, r2                                  |         r2 = r0 << r2;
    0x0003f880 lsr.w r3, r0, r3                                  |         r3 = r0 >> r3;
    0x0003f884 lsls r0, r1                                       |         r0 <<= r1;
    0x0003f886 orrs r2, r3                                       |         r2 |= r3;
                                                                 |     }
    0x0003f888 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003f88a and.w ip, r2, sb                                  |     
    0x0003f88e ands r3, r0                                       |     r3 &= r0;
    0x0003f890 orrs.w r3, r3, ip                                 |     r3 |= ip;
                                                                 |     if (r3 != r3) {
    0x0003f894 bne 0x3f84e                                       |         goto label_22;
                                                                 |     }
    0x0003f896 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003f898 orr.w sb, r2, sb                                  |     sb = r2 | sb;
    0x0003f89c ldr.w r2, [sl, 4]                                 |     r2 = *((sl + 4));
    0x0003f8a0 orrs r3, r0                                       |     r3 |= r0;
    0x0003f8a2 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0003f8a4 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0003f8a6 ldr r3, [r7]                                      |     r3 = *(r7);
    0x0003f8a8 strh.w r1, [r2, fp, lsl 1]                        |     offset_7 = fp << 1;
                                                                 |     *((r2 + offset_7)) = r1;
    0x0003f8ac ldrd r1, r2, [r3, 0xc]                            |     __asm ("ldrd r1, r2, [r3, 0xc]");
    0x0003f8b0 bl 0x22f58                                        |     r0 = fcn_00022f58 (r0, r1, r2);
    0x0003f8b4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003f8b6 beq.w 0x40438                                     |         goto label_166;
                                                                 |     }
    0x0003f8ba ldr r2, [r0]                                      |     r2 = *(r0);
                                                                 | label_48:
    0x0003f8bc ldr.w r3, [sl, 0x20]                              |     r3 = *((sl + 0x20));
    0x0003f8c0 adds r7, 0x30                                     |     r7 += 0x30;
    0x0003f8c2 cmp r4, r7                                        |     
    0x0003f8c4 str.w r2, [r3, fp, lsl 2]                         |     __asm ("str.w r2, [r3, fp, lsl 2]");
    0x0003f8c8 add.w fp, fp, 1                                   |     
                                                                 |     if (r4 > r7) {
    0x0003f8cc bhi 0x3f854                                       |         goto label_23;
                                                                 |     }
                                                                 | label_165:
    0x0003f8ce ldr r6, [sp, 0x28]                                |     r6 = var_28h;
    0x0003f8d0 lsl.w r7, fp, 1                                   |     r7 = fp << 1;
    0x0003f8d4 ldr.w sb, [sp, 0x60]                              |     sb = var_60h;
    0x0003f8d8 lsl.w ip, fp, 2                                   |     
    0x0003f8dc ldr r5, [sp, 0x68]                                |     r5 = var_68h;
    0x0003f8de ldr r4, [sp, 0x70]                                |     r4 = var_70h;
                                                                 | label_67:
    0x0003f8e0 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003f8e2 ldr.w r0, [sl, 4]                                 |     r0 = *((sl + 4));
    0x0003f8e6 ldr.w r1, [sl, 0x20]                              |     r1 = *((sl + 0x20));
    0x0003f8ea cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0003f8ec ble 0x3f92e                                       |         goto label_167;
                                                                 |     }
    0x0003f8ee ldr.w ip, [sp, 0x8c]                              |     ip = var_8ch;
    0x0003f8f2 movs r3, 0                                        |     r3 = 0;
                                                                 |     do {
    0x0003f8f4 rsb.w r7, r3, 0x20                                |         r7 = 0x20 - r3;
    0x0003f8f8 lsr.w r2, r5, r3                                  |         r2 = r5 >> r3;
    0x0003f8fc lsl.w r7, r4, r7                                  |         r7 = r4 << r7;
    0x0003f900 orrs r2, r7                                       |         r2 |= r7;
    0x0003f902 sub.w r7, r3, 0x20                                |         r7 = r3 - 0x20;
    0x0003f906 lsr.w r7, r4, r7                                  |         r7 = r4 >> r7;
    0x0003f90a orrs r2, r7                                       |         r2 |= r7;
    0x0003f90c lsls r2, r2, 0x1f                                 |         r2 <<= 0x1f;
    0x0003f90e it mi                                             |         
                                                                 |         if (r2 < r2) {
    0x0003f910 strhmi r3, [r0, fp, lsl 1]                        |             __asm ("strhmi r3, [r0, fp, lsl 1]");
                                                                 |         }
    0x0003f914 add.w r3, r3, 1                                   |         r3++;
    0x0003f918 itt mi                                            |         
                                                                 |         if (r2 >= r2) {
    0x0003f91a strmi ip, [r1, fp, lsl 2]                         |             offset_8 = fp << 2;
                                                                 |             *((r1 + offset_8)) = ip;
                                                                 |         }
                                                                 |         if (r2 < r2) {
    0x0003f91e add.w fp, fp, 1                                   |             
                                                                 |         }
    0x0003f922 cmp r6, r3                                        |         
    0x0003f924 bne 0x3f8f4                                       |         
                                                                 |     } while (r6 != r3);
    0x0003f926 lsl.w r7, fp, 1                                   |     r7 = fp << 1;
    0x0003f92a lsl.w ip, fp, 2                                   |     
                                                                 | label_167:
    0x0003f92e ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x0003f930 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x0003f932 add r3, r2                                        |     r3 += r2;
    0x0003f934 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0003f936 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0003f93a ldr r3, [r3, 0x44]                                |     r3 = *((r3 + 0x44));
    0x0003f93c cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x0003f93e blt.w 0x403f6                                     |         goto label_168;
                                                                 |     }
                                                                 | label_47:
    0x0003f942 ldr r5, [sp, 0x14]                                |     r5 = var_14h;
    0x0003f944 movw r6, 0xffff                                   |     r6 = 0xffff;
    0x0003f948 movs r4, 0                                        |     r4 = 0;
    0x0003f94a ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0003f94c ldr r2, [r5, 0x44]                                |     r2 = *((r5 + 0x44));
    0x0003f94e ldr.w r5, [pc, 0x8e0]                             |     
    0x0003f952 strh r6, [r0, r7]                                 |     *((r0 + r7)) = r6;
    0x0003f954 ldr r7, [sp, 0x14]                                |     r7 = var_14h;
    0x0003f956 ldr r6, [sp, 0x54]                                |     r6 = var_54h;
    0x0003f958 add r5, pc                                        |     r5 = 0x7fb8e;
    0x0003f95a str.w r5, [r1, ip]                                |     __asm ("str.w r5, [r1, ip]");
    0x0003f95e adds r1, r2, 1                                    |     r1 = r2 + 1;
    0x0003f960 str r1, [r7, 0x44]                                |     *((r7 + 0x44)) = r1;
    0x0003f962 movs r1, 0x37                                     |     r1 = 0x37;
    0x0003f964 str.w r2, [sb, 0x2e8]                             |     __asm ("str.w r2, aav.0x000000ff");
    0x0003f968 mov r0, r6                                        |     r0 = r6;
    0x0003f96a str r4, [sp]                                      |     *(sp) = r4;
    0x0003f96c bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003f970 ldr r5, [r7, 8]                                   |     r5 = *((r7 + 8));
    0x0003f972 mov r1, sl                                        |     r1 = sl;
    0x0003f974 mov r0, r7                                        |     r0 = r7;
    0x0003f976 bl 0x21ff4                                        |     fcn_00021ff4 (r0, r1);
    0x0003f97a mvn r3, 5                                         |     r3 = ~5;
    0x0003f97e mov r2, r0                                        |     r2 = r0;
    0x0003f980 mov.w r1, -1                                      |     r1 = -1;
    0x0003f984 mov r0, r5                                        |     r0 = r5;
    0x0003f986 bl 0x1021c                                        |     fcn_0001021c (r0, r1, r2, r3);
    0x0003f98a ldr.w r2, [sb, 0x2e4]                             |     r2 = *((sb + 0x2e4));
    0x0003f98e mov r3, r4                                        |     r3 = r4;
    0x0003f990 mov r0, r6                                        |     r0 = r6;
    0x0003f992 movs r1, 0x6a                                     |     r1 = 0x6a;
    0x0003f994 str r4, [sp]                                      |     *(sp) = r4;
    0x0003f996 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003f99a ldrb r3, [r7, 0x13]                               |     r3 = *((r7 + 0x13));
    0x0003f99c mov r6, r0                                        |     r6 = r0;
    0x0003f99e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003f9a0 beq.w 0x4051c                                     |         goto label_169;
                                                                 |     }
    0x0003f9a4 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0003f9a6 subs r3, 1                                        |     r3--;
    0x0003f9a8 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x0003f9aa strb r3, [r2, 0x13]                               |     *((r2 + 0x13)) = r3;
    0x0003f9ac adds r3, 6                                        |     r3 += 6;
    0x0003f9ae ldr.w r4, [r2, r3, lsl 2]                         |     offset_9 = r3 << 2;
                                                                 |     r4 = *((r2 + offset_9));
                                                                 | label_49:
    0x0003f9b2 movs r5, 0                                        |     r5 = 0;
    0x0003f9b4 ldr.w r2, [sb, 0x2e4]                             |     r2 = *((sb + 0x2e4));
    0x0003f9b8 mov r1, sl                                        |     r1 = sl;
    0x0003f9ba mov r3, r4                                        |     r3 = r4;
    0x0003f9bc strd r5, r5, [sp, 8]                              |     __asm ("strd r5, r5, [var_8h]");
    0x0003f9c0 strd r5, r5, [sp]                                 |     __asm ("strd r5, r5, [sp]");
    0x0003f9c4 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0003f9c6 bl 0x3d550                                        |     fcn_0003d550 (r0, r1, r2, r3);
    0x0003f9ca ldr.w r2, [sb, 0x2e8]                             |     r2 = *((sb + 0x2e8));
    0x0003f9ce mov r3, r4                                        |     r3 = r4;
    0x0003f9d0 str r5, [sp]                                      |     *(sp) = r5;
    0x0003f9d2 movs r1, 0x6c                                     |     r1 = 0x6c;
    0x0003f9d4 ldr r5, [sp, 0x54]                                |     r5 = var_54h;
    0x0003f9d6 mov r0, r5                                        |     r0 = r5;
    0x0003f9d8 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003f9dc ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
                                                                 |     if (r3 != 0) {
    0x0003f9de cbz r3, 0x3f9f0                                   |         
    0x0003f9e0 ldr r2, [r5, 0x20]                                |         r2 = *((r5 + 0x20));
    0x0003f9e2 add.w r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
    0x0003f9e6 add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
    0x0003f9ea movs r2, 0x10                                     |         r2 = 0x10;
    0x0003f9ec strb r2, [r3, -0x11]                              |         *((r3 - 0x11)) = r2;
                                                                 |     }
    0x0003f9f0 ldr r5, [sp, 0x54]                                |     r5 = var_54h;
    0x0003f9f2 movs r3, 0                                        |     r3 = 0;
    0x0003f9f4 ldr.w r2, [sb, 0x2e4]                             |     r2 = *((sb + 0x2e4));
    0x0003f9f8 movs r1, 9                                        |     r1 = 9;
    0x0003f9fa str r3, [sp]                                      |     *(sp) = r3;
    0x0003f9fc adds r3, r6, 1                                    |     r3 = r6 + 1;
    0x0003f9fe mov r0, r5                                        |     r0 = r5;
    0x0003fa00 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003fa04 ldr r1, [r5, 4]                                   |     r1 = *((r5 + 4));
    0x0003fa06 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0003fa08 ldr r2, [r3, 0x20]                                |     r2 = *((r3 + 0x20));
                                                                 |     if (r1 != 0) {
    0x0003fa0a cbz r1, 0x3fa1a                                   |         
    0x0003fa0c add.w r3, r2, r2, lsl 2                           |         r3 = r2 + (r2 << 2);
    0x0003fa10 movs r0, 3                                        |         r0 = 3;
    0x0003fa12 add.w r3, r1, r3, lsl 2                           |         r3 = r1 + (r3 << 2);
    0x0003fa16 strb r0, [r3, -0x11]                              |         *((r3 - 0x11)) = r0;
                                                                 |     }
    0x0003fa1a cmp r6, r2                                        |     
    0x0003fa1c add.w r7, r2, -1                                  |     r7 = r2 + -1;
    0x0003fa20 ittt lo                                           |     
                                                                 |     if (r6 >= r2) {
    0x0003fa22 addlo r6, r6, r6, lsl 2                           |         r6 += (r6 << 2);
                                                                 |     }
                                                                 |     if (r6 >= r2) {
    0x0003fa26 addlo r3, r1, r6, lsl 2                           |         r3 = r1 + (r6 << 2);
                                                                 |     }
                                                                 |     if (r6 < r2) {
    0x0003fa2a str r2, [r3, 8]                                   |         *((r3 + 8)) = r2;
                                                                 |     }
    0x0003fa2c ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0003fa2e ldr.w ip, [r3, 0x18]                              |     ip = *((r3 + 0x18));
    0x0003fa32 str.w r7, [ip, 0x58]                              |     __asm ("str.w r7, [ip, 0x58]");
                                                                 |     if (r4 == 0) {
    0x0003fa36 cbz r4, 0x3fa62                                   |         goto label_75;
                                                                 |     }
    0x0003fa38 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0003fa3a ldrb r5, [r0, 0x13]                               |     r5 = *((r0 + 0x13));
    0x0003fa3c cmp r5, 7                                         |     
                                                                 |     if (r5 > 7) {
    0x0003fa3e bhi 0x3fa62                                       |         goto label_75;
                                                                 |     }
    0x0003fa40 add.w r3, r0, 0x74                                |     r3 = r0 + 0x74;
    0x0003fa44 add.w r6, r0, 0x13c                               |     r6 = r0 + 0x13c;
                                                                 |     do {
    0x0003fa48 ldr r0, [r3, 0xc]                                 |         r0 = *((r3 + 0xc));
    0x0003fa4a cmp r4, r0                                        |         
                                                                 |         if (r4 == r0) {
    0x0003fa4c beq.w 0x409e2                                     |             goto label_170;
                                                                 |         }
    0x0003fa50 adds r3, 0x14                                     |         r3 += 0x14;
    0x0003fa52 cmp r3, r6                                        |         
    0x0003fa54 bne 0x3fa48                                       |         
                                                                 |     } while (r3 != r6);
    0x0003fa56 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0003fa58 adds r3, r5, 1                                    |     r3 = r5 + 1;
    0x0003fa5a adds r5, 6                                        |     r5 += 6;
    0x0003fa5c strb r3, [r0, 0x13]                               |     *((r0 + 0x13)) = r3;
    0x0003fa5e str.w r4, [r0, r5, lsl 2]                         |     __asm ("str.w r4, [r0, r5, lsl 2]");
                                                                 | label_75:
    0x0003fa62 ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x0003fa64 cmp r3, r2                                        |     
    0x0003fa66 ittt lo                                           |     
                                                                 |     if (r3 >= r2) {
    0x0003fa68 addlo r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
                                                                 |     }
                                                                 |     if (r3 >= r2) {
    0x0003fa6c addlo r1, r1, r3, lsl 2                           |         r1 += (r3 << 2);
                                                                 |     }
                                                                 |     if (r3 < r2) {
    0x0003fa70 str r2, [r1, 8]                                   |         *((r1 + 8)) = r2;
                                                                 |     }
    0x0003fa72 str.w r7, [ip, 0x58]                              |     __asm ("str.w r7, [ip, 0x58]");
                                                                 | label_61:
    0x0003fa76 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0003fa78 ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
    0x0003fa7c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003fa7e bne.w 0x3ef06                                     |         goto label_5;
                                                                 |     }
    0x0003fa82 ldrb.w r3, [sb, 0x304]                            |     r3 = *((sb + 0x304));
    0x0003fa86 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0003fa88 b.w 0x3f1ce                                       |     goto label_24;
                                                                 | label_161:
    0x0003fa8c mov.w fp, 1                                       |     
    0x0003fa90 b 0x3f776                                         |     goto label_25;
                                                                 | label_160:
    0x0003fa92 ldr r1, [sp, 0x50]                                |     r1 = var_50h;
    0x0003fa94 add.w r3, r3, r3, lsl 1                           |     r3 += (r3 << 1);
    0x0003fa98 mov.w r0, 0x11c                                   |     r0 = 0x11c;
    0x0003fa9c ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0003fa9e ldr.w r3, [r2, r3, lsl 3]                         |     offset_10 = r3 << 3;
                                                                 |     r3 = *((r2 + offset_10));
    0x0003faa2 ldr r2, [r1]                                      |     r2 = *(r1);
    0x0003faa4 ldr r1, [sp, 0x60]                                |     r1 = var_60h;
    0x0003faa6 blx 0x6820                                        |     fcn_00006820 ();
    0x0003faaa b 0x3f72c                                         |     goto label_26;
                                                                 | label_141:
    0x0003faac lsls r0, r2, 0x17                                 |     r0 = r2 << 0x17;
                                                                 |     if (r0 < r2) {
    0x0003faae bpl 0x3fab8                                       |         
    0x0003fab0 tst.w r2, 5                                       |         
                                                                 |         if ((r2 & 5) != 0) {
    0x0003fab4 bne.w 0x40556                                     |             goto label_171;
                                                                 |         }
                                                                 |     }
    0x0003fab8 and r3, r2, 0x102                                 |     r3 = r2 & 0x102;
    0x0003fabc cmp.w r3, 0x102                                   |     
                                                                 |     if (r3 == 0x102) {
    0x0003fac0 beq.w 0x4043e                                     |         goto label_172;
                                                                 |     }
    0x0003fac4 ands r5, r2, 0x200                                |     r5 = r2 & 0x200;
                                                                 |     if (r5 == r2) {
    0x0003fac8 beq.w 0x40506                                     |         goto label_173;
                                                                 |     }
    0x0003facc ldr r4, [sp, 0x10]                                |     r4 = var_10h;
    0x0003face movs r1, 0                                        |     r1 = 0;
    0x0003fad0 ldrh.w r0, [sl, 0x18]                             |     r0 = *((sl + 0x18));
    0x0003fad4 strb.w r1, [sp, 0xc0]                             |     var_c0h = r1;
    0x0003fad8 ldrh r3, [r4, 0x22]                               |     r3 = *((r4 + 0x22));
    0x0003fada ldr.w r5, [sl, 0x1c]                              |     r5 = *((sl + 0x1c));
    0x0003fadc str r4, [r3, r0]                                  |     *((r3 + r0)) = r4;
    0x0003fade ldr.w r7, [sb, 0x2e8]                             |     r7 = *((sb + 0x2e8));
    0x0003fae2 ands r3, r3, 1                                    |     r3 &= 1;
    0x0003fae6 str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x0003fae8 str r5, [sp, 0x7c]                                |     var_7ch = r5;
    0x0003faea str r7, [sp, 0x70]                                |     var_70h = r7;
                                                                 |     if (r3 == r3) {
    0x0003faec beq.w 0x405be                                     |         goto label_174;
                                                                 |     }
    0x0003faf0 ldrsb.w r3, [r4, 0x24]                            |     r3 = *((r4 + 0x24));
    0x0003faf4 cmp r3, r1                                        |     
                                                                 |     if (r3 > r1) {
    0x0003faf6 ble 0x3fb00                                       |         
    0x0003faf8 ldrh r3, [r5, 0x32]                               |         r3 = *((r5 + 0x32));
    0x0003fafa cmp r3, r0                                        |         
                                                                 |         if (r3 > r0) {
    0x0003fafc bhi.w 0x405bc                                     |             goto label_175;
                                                                 |         }
                                                                 |     }
    0x0003fb00 mov r3, r1                                        |     r3 = r1;
    0x0003fb02 str r1, [sp, 0x64]                                |     var_64h = r1;
                                                                 | label_52:
    0x0003fb04 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x0003fb06 and r1, r2, 0x10                                  |     r1 = r2 & 0x10;
    0x0003fb0a lsls r2, r2, 0x1a                                 |     r2 <<= 0x1a;
    0x0003fb0c str r0, [sp, 0x84]                                |     var_84h = r0;
                                                                 |     if (r2 >= r2) {
    0x0003fb0e bpl.w 0x405d4                                     |         goto label_176;
                                                                 |     }
    0x0003fb12 ldr.w r3, [sl, 0x2c]                              |     r3 = *((sl + 0x2c));
    0x0003fb16 mov r2, r0                                        |     r2 = r0;
    0x0003fb18 ldr.w r0, [r3, r0, lsl 2]                         |     offset_11 = r0 << 2;
                                                                 |     r0 = *((r3 + offset_11));
    0x0003fb1c str r0, [sp, 0x20]                                |     var_20h = r0;
    0x0003fb1e cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0003fb20 beq.w 0x40bf4                                     |         goto label_177;
                                                                 |     }
    0x0003fb24 adds r2, 1                                        |     r2++;
    0x0003fb26 ldr.w r3, [r3, r2, lsl 2]                         |     offset_12 = r2 << 2;
                                                                 |     r3 = *((r3 + offset_12));
    0x0003fb2a str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x0003fb2c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003fb2e beq.w 0x40bbe                                     |         goto label_178;
                                                                 |     }
                                                                 | label_89:
    0x0003fb32 movs r3, 1                                        |     r3 = 1;
                                                                 | label_53:
    0x0003fb34 ldr.w r1, [sb, 0x318]                             |     r1 = *((sb + 0x318));
    0x0003fb38 ldr r2, [r6, 0x48]                                |     r2 = *((r6 + 0x48));
    0x0003fb3a ldr r0, [r6, 8]                                   |     r0 = *((r6 + 8));
    0x0003fb3c ldrh r5, [r1, 0x18]                               |     r5 = *((r1 + 0x18));
    0x0003fb3e adds r7, r2, 1                                    |     r7 = r2 + 1;
    0x0003fb40 ldr r4, [r6]                                      |     r4 = *(r6);
    0x0003fb42 str r1, [sp, 0x90]                                |     var_90h = r1;
    0x0003fb44 add r3, r5                                        |     r3 += r5;
    0x0003fb46 str r5, [sp, 0x94]                                |     var_94h = r5;
    0x0003fb48 mov r5, r1                                        |     r5 = r1;
    0x0003fb4a str r3, [sp, 0x78]                                |     var_78h = r3;
    0x0003fb4c adds r3, r2, r3                                   |     r3 = r2 + r3;
    0x0003fb4e ldrh r2, [r5, 0x1a]                               |     r2 = *((r5 + 0x1a));
    0x0003fb50 ldr r1, [r1, 0x1c]                                |     r1 = *((r1 + 0x1c));
    0x0003fb52 str r3, [r6, 0x48]                                |     *((r6 + 0x48)) = r3;
    0x0003fb54 str r2, [sp, 0x74]                                |     var_74h = r2;
    0x0003fb56 str r0, [sp, 0x60]                                |     var_60h = r0;
    0x0003fb58 str r7, [sp, 0x80]                                |     var_80h = r7;
    0x0003fb5a bl 0xdafc                                         |     r0 = fcn_0000dafc (r0, r1);
    0x0003fb5e mov r1, r0                                        |     r1 = r0;
    0x0003fb60 mov r0, r4                                        |     r0 = r4;
    0x0003fb62 bl 0xd418                                         |     fcn_0000d418 (r0, r1);
    0x0003fb66 str r7, [sp, 0x6c]                                |     var_6ch = r7;
    0x0003fb68 str r0, [sp, 0x68]                                |     var_68h = r0;
    0x0003fb6a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003fb6c beq.w 0x408d8                                     |         goto label_179;
                                                                 |     }
                                                                 | label_70:
    0x0003fb70 ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x0003fb72 mov r4, r3                                        |     r4 = r3;
    0x0003fb74 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003fb76 beq 0x3fc16                                       |         goto label_180;
                                                                 |     }
    0x0003fb78 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003fb7a ldr.w r7, [sb, 0x2e8]                             |     r7 = *((sb + 0x2e8));
    0x0003fb7e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003fb80 beq.w 0x409f4                                     |         goto label_181;
                                                                 |     }
    0x0003fb84 movs r5, 0                                        |     r5 = 0;
    0x0003fb86 mov r2, r7                                        |     r2 = r7;
    0x0003fb88 mov r3, r5                                        |     r3 = r5;
    0x0003fb8a movs r1, 0x67                                     |     r1 = 0x67;
    0x0003fb8c str r5, [sp]                                      |     *(sp) = r5;
    0x0003fb8e ldr r0, [sp, 0x60]                                |     r0 = var_60h;
    0x0003fb90 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003fb94 mov r3, r5                                        |     r3 = r5;
    0x0003fb96 mov r2, r5                                        |     r2 = r5;
    0x0003fb98 movs r1, 0x10                                     |     r1 = 0x10;
    0x0003fb9a str r5, [sp]                                      |     *(sp) = r5;
    0x0003fb9c ldr r0, [sp, 0x60]                                |     r0 = var_60h;
    0x0003fb9e bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003fba2 movs r1, 0x3c                                     |     r1 = 0x3c;
    0x0003fba4 mov r5, r0                                        |     r5 = r0;
                                                                 | label_76:
    0x0003fba6 ldr r3, [sp, 0x80]                                |     r3 = var_80h;
    0x0003fba8 mov r2, r7                                        |     r2 = r7;
    0x0003fbaa ldr r0, [sp, 0x60]                                |     r0 = var_60h;
    0x0003fbac str r3, [sp]                                      |     *(sp) = r3;
    0x0003fbae movs r3, 0                                        |     r3 = 0;
    0x0003fbb0 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003fbb4 ldr r2, [sp, 0x74]                                |     r2 = var_74h;
    0x0003fbb6 mov r1, r0                                        |     r1 = r0;
    0x0003fbb8 mvn r3, 0xd                                       |     r3 = ~0xd;
    0x0003fbbc str r0, [sp, 0xa0]                                |     var_a0h = r0;
    0x0003fbbe ldr r0, [sp, 0x60]                                |     r0 = var_60h;
    0x0003fbc0 bl 0x1021c                                        |     fcn_0001021c (r0, r1, r2, r3);
    0x0003fbc4 ldr r2, [sp, 0x60]                                |     r2 = var_60h;
    0x0003fbc6 ldr r1, [sp, 0xa0]                                |     r1 = var_a0h;
    0x0003fbc8 str r6, [sp, 0xa0]                                |     var_a0h = r6;
    0x0003fbca ldr r3, [r2, 0x20]                                |     r3 = *((r2 + 0x20));
    0x0003fbcc str.w r1, [sb, 0x2f4]                             |     __asm ("str.w r1, aav.0x000000ff");
    0x0003fbd0 ldr r1, [sp, 0x60]                                |     r1 = var_60h;
    0x0003fbd2 cmp r5, r3                                        |     
    0x0003fbd4 itt lo                                            |     
                                                                 |     if (r5 >= r3) {
    0x0003fbd6 ldrlo r2, [r2, 4]                                 |         r2 = *((r2 + 4));
                                                                 |     }
                                                                 |     if (r5 >= r3) {
    0x0003fbd8 addlo r5, r5, r5, lsl 2                           |         r5 += (r5 << 2);
                                                                 |     }
    0x0003fbdc mov r6, r1                                        |     r6 = r1;
    0x0003fbde it lo                                             |     
                                                                 |     if (r5 >= r3) {
    0x0003fbe0 addlo r2, r2, r5, lsl 2                           |         r2 += (r5 << 2);
                                                                 |     }
    0x0003fbe4 mov.w r5, 0                                       |     r5 = 0;
    0x0003fbe8 it lo                                             |     
                                                                 |     if (r5 >= r3) {
    0x0003fbea strlo r3, [r2, 8]                                 |         *((r2 + 8)) = r3;
                                                                 |     }
    0x0003fbec subs r3, 1                                        |     r3--;
    0x0003fbee ldr r2, [r1, 0x18]                                |     r2 = *((r1 + 0x18));
    0x0003fbf0 str r3, [r2, 0x58]                                |     *((r2 + 0x58)) = r3;
    0x0003fbf2 mov r3, r4                                        |     r3 = r4;
    0x0003fbf4 mov r4, r7                                        |     r4 = r7;
    0x0003fbf6 mov r7, r3                                        |     r7 = r3;
                                                                 |     do {
    0x0003fbf8 ldr r3, [sp, 0x80]                                |         r3 = var_80h;
    0x0003fbfa mov r2, r4                                        |         r2 = r4;
    0x0003fbfc movs r1, 0x2e                                     |         r1 = 0x2e;
    0x0003fbfe mov r0, r6                                        |         r0 = r6;
    0x0003fc00 add r3, r5                                        |         r3 += r5;
    0x0003fc02 str r3, [sp]                                      |         *(sp) = r3;
    0x0003fc04 mov r3, r5                                        |         r3 = r5;
    0x0003fc06 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003fc0a ldr r3, [sp, 0x74]                                |         r3 = var_74h;
    0x0003fc0c adds r5, 1                                        |         r5++;
    0x0003fc0e cmp r5, r3                                        |         
    0x0003fc10 bne 0x3fbf8                                       |         
                                                                 |     } while (r5 != r3);
    0x0003fc12 ldr r6, [sp, 0xa0]                                |     r6 = var_a0h;
    0x0003fc14 mov r4, r7                                        |     r4 = r7;
                                                                 | label_180:
    0x0003fc16 ldr r3, [sp, 0x94]                                |     r3 = var_94h;
    0x0003fc18 ldr r2, [sp, 0x74]                                |     r2 = var_74h;
    0x0003fc1a cmp r3, r2                                        |     
                                                                 |     if (r3 <= r2) {
    0x0003fc1c ble 0x3fcba                                       |         goto label_182;
                                                                 |     }
    0x0003fc1e add.w r2, r6, 0x13c                               |     r2 = r6 + 0x13c;
    0x0003fc22 strd sl, fp, [sp, 0xa0]                           |     __asm ("strd sl, fp, [var_0hxa0]");
    0x0003fc26 str.w r8, [sp, 0x94]                              |     __asm ("str.w r8, [var_94h]");
    0x0003fc2a mov r8, r6                                        |     r8 = r6;
    0x0003fc2c ldr.w sl, [sp, 0x90]                              |     sl = var_90h;
    0x0003fc30 ldr r6, [sp, 0x6c]                                |     r6 = var_6ch;
    0x0003fc32 ldr.w fp, [sp, 0x44]                              |     fp = var_44h;
    0x0003fc36 str.w sb, [sp, 0x74]                              |     __asm ("str.w sb, [var_74h]");
    0x0003fc38 str r0, [sp, 0x1d0]                               |     *((sp + 0x1d0)) = r0;
    0x0003fc3a mov sb, r3                                        |     sb = r3;
    0x0003fc3c str r2, [sp, 0x80]                                |     var_80h = r2;
                                                                 | label_27:
    0x0003fc3e ldr.w r3, [sl, 0x2c]                              |     r3 = *((sl + 0x2c));
    0x0003fc42 adds r7, r6, r4                                   |     r7 = r6 + r4;
    0x0003fc44 mov r2, fp                                        |     r2 = fp;
    0x0003fc46 mov r0, r8                                        |     r0 = r8;
    0x0003fc48 ldr.w r5, [r3, r4, lsl 2]                         |     offset_13 = r4 << 2;
                                                                 |     r5 = *((r3 + offset_13));
    0x0003fc4c ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003fc4e str r7, [sp, 4]                                   |     var_4h = r7;
    0x0003fc50 mov r1, r5                                        |     r1 = r5;
    0x0003fc52 str r3, [sp]                                      |     *(sp) = r3;
    0x0003fc54 mov r3, r4                                        |     r3 = r4;
    0x0003fc56 bl 0x3c350                                        |     r0 = fcn_0003c350 (r0, r1, r2, r3, r4, r5, r6);
    0x0003fc5a cmp r7, r0                                        |     
    0x0003fc5c mov r2, r0                                        |     r2 = r0;
                                                                 |     if (r7 == r0) {
    0x0003fc5e beq 0x3fc9a                                       |         goto label_38;
                                                                 |     }
    0x0003fc60 ldr r3, [sp, 0x78]                                |     r3 = var_78h;
    0x0003fc62 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x0003fc64 bne.w 0x4023c                                     |         goto label_183;
                                                                 |     }
    0x0003fc68 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0003fc6a beq.w 0x402a8                                     |         goto label_184;
                                                                 |     }
    0x0003fc6e ldrb.w r0, [r8, 0x13]                             |     r0 = *((r8 + 0x13));
    0x0003fc72 cmp r0, 7                                         |     
                                                                 |     if (r0 > 7) {
    0x0003fc74 bhi.w 0x402a8                                     |         goto label_184;
                                                                 |     }
    0x0003fc78 ldr r7, [sp, 0x80]                                |     r7 = var_80h;
    0x0003fc7a add.w r3, r8, 0x74                                |     r3 = r8 + 0x74;
                                                                 |     do {
    0x0003fc7e ldr r1, [r3, 0xc]                                 |         r1 = *((r3 + 0xc));
    0x0003fc80 cmp r1, r6                                        |         
                                                                 |         if (r1 == r6) {
    0x0003fc82 beq.w 0x40a1a                                     |             goto label_185;
                                                                 |         }
    0x0003fc86 adds r3, 0x14                                     |         r3 += 0x14;
    0x0003fc88 cmp r3, r7                                        |         
    0x0003fc8a bne 0x3fc7e                                       |         
                                                                 |     } while (r3 != r7);
    0x0003fc8c adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x0003fc8e adds r0, 6                                        |     r0 += 6;
    0x0003fc90 strb.w r3, [r8, 0x13]                             |     *((r8 + 0x13)) = r3;
    0x0003fc94 str.w r6, [r8, r0, lsl 2]                         |     __asm ("str.w r6, [r8, r0, lsl 2]");
    0x0003fc98 mov r6, r2                                        |     r6 = r2;
                                                                 | label_38:
    0x0003fc9a ldrh r3, [r5, 0x12]                               |     r3 = *((r5 + 0x12));
    0x0003fc9c ands r1, r3, 0x81                                 |     r1 = r3 & 0x81;
                                                                 |     if (r1 == r3) {
    0x0003fca0 beq.w 0x40254                                     |         goto label_186;
                                                                 |     }
                                                                 | label_35:
    0x0003fca4 adds r4, 1                                        |     r4++;
    0x0003fca6 cmp sb, r4                                        |     
                                                                 |     if (sb != r4) {
    0x0003fca8 bne 0x3fc3e                                       |         goto label_27;
                                                                 |     }
    0x0003fcaa str r6, [sp, 0x6c]                                |     var_6ch = r6;
    0x0003fcac mov r6, r8                                        |     r6 = r8;
    0x0003fcae ldrd sl, fp, [sp, 0xa0]                           |     __asm ("ldrd sl, fp, [var_a0h]");
    0x0003fcb2 ldr.w r8, [sp, 0x94]                              |     r8 = var_94h;
    0x0003fcb6 ldr.w sb, [sp, 0x74]                              |     sb = var_74h;
                                                                 | label_182:
    0x0003fcba ldr r3, [sp, 0x68]                                |     r3 = var_68h;
                                                                 |     if (r3 != 0) {
    0x0003fcbc cbz r3, 0x3fcc6                                   |         
    0x0003fcbe ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x0003fcc0 ldrb r3, [r3, r2]                                 |         r3 = *((r3 + r2));
    0x0003fcc2 strb.w r3, [sp, 0xc0]                             |         var_c0h = r3;
                                                                 |     }
    0x0003fcc6 ldr.w r1, [sb, 0x2f0]                             |     r1 = *((sb + 0x2f0));
    0x0003fcca ldr r2, [sp, 0x7c]                                |     r2 = var_7ch;
    0x0003fccc str r1, [sp, 0x74]                                |     var_74h = r1;
    0x0003fcce ldrh r3, [r2, 0x32]                               |     r3 = *((r2 + 0x32));
    0x0003fcd0 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x0003fcd2 cmp r1, r3                                        |     
                                                                 |     if (r1 >= r3) {
    0x0003fcd4 bhs.w 0x40686                                     |         goto label_187;
                                                                 |     }
    0x0003fcd8 ldr r3, [r2, 0x1c]                                |     r3 = *((r2 + 0x1c));
    0x0003fcda ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0003fcdc ldrb r3, [r3, r1]                                 |     r3 = *((r3 + r1));
    0x0003fcde clz r3, r3                                        |     r3 &= r3;
    0x0003fce2 lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x0003fce4 cmp r2, r3                                        |     
                                                                 |     if (r2 == r3) {
    0x0003fce6 beq.w 0x40696                                     |         goto label_188;
                                                                 |     }
    0x0003fcea ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0003fcec cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0003fcee beq.w 0x40a24                                     |         goto label_189;
                                                                 |     }
                                                                 | label_58:
    0x0003fcf2 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x0003fcf4 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x0003fcf6 ldr r5, [sp, 0x64]                                |     r5 = var_64h;
    0x0003fcf8 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0003fcfa movs r3, 0                                        |     r3 = 0;
    0x0003fcfc str r2, [sp, 0x5c]                                |     var_5ch = r2;
    0x0003fcfe str r5, [sp, 0x50]                                |     var_50h = r5;
    0x0003fd00 str r3, [sp, 0x64]                                |     var_64h = r3;
                                                                 | label_59:
    0x0003fd02 ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
    0x0003fd04 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003fd06 subs r7, r2, 0                                    |     r7 = r2 - 0;
    0x0003fd08 it ne                                             |     
                                                                 |     if (r7 == r2) {
    0x0003fd0a movne r7, 1                                       |         r7 = 1;
                                                                 |     }
    0x0003fd0c subs r3, 0                                        |     
    0x0003fd0e it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x0003fd10 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0003fd12 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0003fd14 beq.w 0x4089e                                     |         goto label_190;
                                                                 |     }
    0x0003fd18 ldrh r2, [r2, 0x12]                               |     r2 = *((r2 + 0x12));
    0x0003fd1a and r2, r2, 0x28                                  |     r2 &= 0x28;
    0x0003fd1e subs r2, 0                                        |     
    0x0003fd20 it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x0003fd22 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x0003fd24 str r2, [sp, 0x50]                                |     var_50h = r2;
    0x0003fd26 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x0003fd28 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0003fd2a beq.w 0x409cc                                     |         goto label_191;
                                                                 |     }
    0x0003fd2e orrs r7, r3                                       |     r7 |= r3;
    0x0003fd30 ldrh r3, [r2, 0x12]                               |     r3 = *((r2 + 0x12));
    0x0003fd32 lsls r7, r7, 2                                    |     r7 <<= 2;
    0x0003fd34 and r3, r3, 0x28                                  |     r3 &= 0x28;
    0x0003fd38 subs r3, 0                                        |     
    0x0003fd3a it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x0003fd3c movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0003fd3e str r3, [sp, 0x60]                                |     var_60h = r3;
                                                                 | label_73:
    0x0003fd40 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x0003fd42 mov r0, r6                                        |     r0 = r6;
    0x0003fd44 ldr r2, [sp, 0x6c]                                |     r2 = var_6ch;
    0x0003fd46 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0003fd48 ldr r4, [r3, 0x10]                                |     r4 = *((r3 + 0x10));
    0x0003fd4a ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003fd4c mov r1, r4                                        |     r1 = r4;
    0x0003fd4e adds r2, r3, r2                                   |     r2 = r3 + r2;
    0x0003fd50 str r2, [sp, 0x78]                                |     var_78h = r2;
    0x0003fd52 bl 0x3c4a8                                        |     fcn_0003c4a8 (r0, r1, r2);
    0x0003fd56 mov r0, r4                                        |     r0 = r4;
    0x0003fd58 bl 0x7f74                                         |     fcn_00007f74 (r0);
    0x0003fd5c ldr r2, [sp, 0x78]                                |     r2 = var_78h;
    0x0003fd5e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0003fd60 bne.w 0x40ae8                                     |         goto label_192;
                                                                 |     }
                                                                 | label_83:
    0x0003fd64 ldr r3, [sp, 0x68]                                |     r3 = var_68h;
                                                                 |     if (r3 != 0) {
    0x0003fd66 cbz r3, 0x3fdaa                                   |         
    0x0003fd68 ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x0003fd6a mov r0, r4                                        |         r0 = r4;
    0x0003fd6c ldrb r1, [r3, r2]                                 |         r1 = *((r3 + r2));
    0x0003fd6e str r1, [sp, 0x78]                                |         var_78h = r1;
    0x0003fd70 bl 0xb8a4                                         |         fcn_0000b8a4 (r0);
    0x0003fd74 ldr r1, [sp, 0x78]                                |         r1 = var_78h;
    0x0003fd76 mov r3, r0                                        |         r3 = r0;
    0x0003fd78 cmp r0, 0                                         |         
    0x0003fd7a it ne                                             |         
                                                                 |         if (r0 != 0) {
    0x0003fd7c cmpne r1, 0                                       |             __asm ("cmpne r1, 0");
                                                                 |         }
                                                                 |         if (r0 != 0) {
    0x0003fd7e bne.w 0x40a36                                     |             goto label_193;
                                                                 |         }
    0x0003fd82 orr.w r2, r1, r0                                  |         r2 = r1 | r0;
    0x0003fd86 uxtb r2, r2                                       |         r2 = (int8_t) r2;
    0x0003fd88 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x0003fd8a beq.w 0x40a40                                     |             goto label_194;
                                                                 |         }
    0x0003fd8e add r3, r1                                        |         r3 += r1;
    0x0003fd90 uxtb r3, r3                                       |         r3 = (int8_t) r3;
    0x0003fd92 cmp r3, 0x62                                      |         
                                                                 |         if (r3 == 0x62) {
    0x0003fd94 beq.w 0x40a40                                     |             goto label_194;
                                                                 |         }
                                                                 | label_77:
    0x0003fd98 cmp r1, 0x62                                      |         
                                                                 |         if (r1 == 0x62) {
    0x0003fd9a beq.w 0x40a40                                     |             goto label_194;
                                                                 |         }
    0x0003fd9e mov r0, r4                                        |         r0 = r4;
    0x0003fda0 bl 0xa36c                                         |         r0 = fcn_0000a36c (r0, r1);
    0x0003fda4 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0003fda6 bne.w 0x40a40                                     |             goto label_194;
                                                                 |         }
                                                                 |     }
                                                                 | label_78:
    0x0003fdaa ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x0003fdac add.w r3, r7, r3, lsl 1                           |     r3 = r7 + (r3 << 1);
    0x0003fdb0 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x0003fdb2 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003fdb4 adds r7, r3, 1                                    |     r7 = r3 + 1;
                                                                 | label_68:
    0x0003fdb6 ldr r2, [sp, 0x68]                                |     r2 = var_68h;
    0x0003fdb8 subs r3, r7, r5                                   |     r3 = r7 - r5;
                                                                 |     if (r2 == 0) {
    0x0003fdba cbz r2, 0x3fe18                                   |         goto label_195;
                                                                 |     }
    0x0003fdbc cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0003fdbe ble 0x3fe18                                       |         goto label_195;
                                                                 |     }
    0x0003fdc0 ldr r4, [sp, 0x6c]                                |     r4 = var_6ch;
    0x0003fdc2 b 0x3fdcc                                         |     
                                                                 |     while (r1 == 0x62) {
    0x0003fdc4 subs r3, 1                                        |         r3--;
    0x0003fdc6 add.w r4, r4, 1                                   |         r4++;
                                                                 |         if (r3 == 1) {
    0x0003fdca beq 0x3fe18                                       |             goto label_195;
                                                                 |         }
    0x0003fdcc mov r5, r2                                        |         r5 = r2;
    0x0003fdce ldrb r1, [r2], 1                                  |         r1 = *(r2);
                                                                 |         r2++;
    0x0003fdd2 cmp r1, 0x62                                      |         
    0x0003fdd4 beq 0x3fdc4                                       |         
                                                                 |     }
    0x0003fdd6 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0003fdd8 beq 0x3fdec                                       |         void (*0x3fdec)() ();
                                                                 |     }
                                                                 | label_195:
    0x0003fe18 ldr.w r3, [pc, 0x418]                             |     r3 = *(0x00040234);
    0x0003fe1c mov pc, pc                                        |     
    0x0003fe1e ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0003fe20 ldr r5, [sp, 0x6c]                                |     r5 = var_6ch;
    0x0003fe22 add r3, pc                                        |     r3 += pc;
    0x0003fe24 str r7, [sp, 4]                                   |     var_4h = r7;
    0x0003fe26 add r3, r2                                        |     r3 += r2;
    0x0003fe28 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x0003fe2a str r5, [sp]                                      |     *(sp) = r5;
    0x0003fe2c add r3, r2                                        |     r3 += r2;
    0x0003fe2e ldrb.w r1, [r3, 0xb44]                            |     r1 = *((r3 + 0xb44));
    0x0003fe32 ldrd r2, r3, [sp, 0x70]                           |     __asm ("ldrd r2, r3, [var_74h]");
    0x0003fe36 bl 0x19a3c                                        |     fcn_00019a3c (r0, r1, r2, r3, r4, r5);
    0x0003fe3a ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0003fe3c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003fe3e beq.w 0x40728                                     |         goto label_196;
                                                                 |     }
    0x0003fe42 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0003fe44 mov r0, r6                                        |     r0 = r6;
    0x0003fe46 movs r2, 1                                        |     r2 = 1;
    0x0003fe48 ldr r4, [r3, 0x10]                                |     r4 = *((r3 + 0x10));
    0x0003fe4a ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003fe4c adds r5, r3, r5                                   |     r5 = r3 + r5;
    0x0003fe4e mov r1, r5                                        |     r1 = r5;
    0x0003fe50 vshr.u32 d16, d25, 1                              |     __asm ("vshr.u32 d16, d25, 1");
    0x0003fe54 mov r2, r5                                        |     r2 = r5;
    0x0003fe56 mov r1, r4                                        |     r1 = r4;
    0x0003fe58 bl 0x3c4a8                                        |     fcn_0003c4a8 (r0, r1, r2);
    0x0003fe5c mov r0, r4                                        |     r0 = r4;
    0x0003fe5e bl 0x7f74                                         |     r0 = fcn_00007f74 (r0);
    0x0003fe62 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0003fe64 bne.w 0x40b5a                                     |         goto label_197;
                                                                 |     }
                                                                 | label_85:
    0x0003fe68 ldrb.w r7, [sp, 0xc0]                             |     r7 = var_c0h;
    0x0003fe6c mov r0, r4                                        |     r0 = r4;
    0x0003fe6e bl 0xb8a4                                         |     r0 = fcn_0000b8a4 (r0);
    0x0003fe72 mov r3, r0                                        |     r3 = r0;
    0x0003fe74 cmp r0, 0                                         |     
    0x0003fe76 it ne                                             |     
                                                                 |     if (r0 == 0) {
    0x0003fe78 cmpne r7, 0                                       |         __asm ("cmpne r7, 0");
                                                                 |         goto label_198;
                                                                 |     }
                                                                 |     if (r0 == 0) {
                                                                 | label_198:
    0x0003fe7a beq.w 0x4069c                                     |         void (*0x4069c)() ();
                                                                 |     }
                                                                 | label_86:
    0x0003fe8e ldr r1, [sp, 0x68]                                |     r1 = var_68h;
    0x0003fe90 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x0003fe92 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0003fe94 invalid                                           |     
    0x0003fe98 adds r0, 0x20                                     |     r0 += 0x20;
    0x0003fe9a str.w r3, [sb, 0x30c]                             |     __asm ("str.w r3, aav.0x000000ff");
                                                                 | label_63:
    0x0003fe9e ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x0003fea0 mov r0, r8                                        |     r0 = r8;
    0x0003fea2 ldr r2, [pc, 0x394]                               |     
    0x0003fea4 ldr r3, [sp, 0x84]                                |     r3 = var_84h;
    0x0003fea6 add r2, pc                                        |     r2 = 0x800e4;
    0x0003fea8 add.w r2, r2, r1, lsl 1                           |     r2 += (r1 << 1);
    0x0003feac ldr r1, [sp, 0x60]                                |     r1 = var_60h;
    0x0003feae str r3, [sp, 4]                                   |     var_4h = r3;
    0x0003feb0 ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x0003feb2 add r2, r1                                        |     r2 += r1;
    0x0003feb4 ldrb.w r1, [r2, 0xb4c]                            |     r1 = *((r2 + 0xb4c));
    0x0003feb8 str r3, [sp]                                      |     *(sp) = r3;
    0x0003feba ldr r2, [sp, 0x70]                                |     r2 = var_70h;
    0x0003febc ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x0003febe bl 0x19a3c                                        |     fcn_00019a3c (r0, r1, r2, r3, r4, r5);
                                                                 | label_62:
    0x0003fec2 ldr r1, [sp, 0x5c]                                |     r1 = var_5ch;
    0x0003fec4 ldr r0, [sp, 0x44]                                |     r0 = var_44h;
    0x0003fec6 bl 0x83a0                                         |     fcn_000083a0 (r0, r1);
    0x0003feca ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x0003fecc bl 0x83a0                                         |     fcn_000083a0 (r0, r1);
    0x0003fed0 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0003fed2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003fed4 bne 0x3ff7a                                       |         void (*0x3ff7a)() ();
                                                                 |     }
                                                                 | label_71:
    0x0003ffa2 movs r3, 1                                        |     r3 = 1;
    0x0003ffa4 strb.w r3, [sb, 0x307]                            |     *((sb + 0x307)) = r3;
    0x0003ffa8 b 0x3ffd6                                         |     goto label_34;
                                                                 | label_140:
    0x0003ffaa ldrd r3, r5, [r3, 0x20]                           |     __asm ("ldrd r3, r5, [r3, 0x20]");
    0x0003ffae movs r1, 0x14                                     |     r1 = 0x14;
    0x0003ffb0 mov r0, r8                                        |     r0 = r8;
    0x0003ffb2 mov r2, r5                                        |     r2 = r5;
    0x0003ffb4 str r3, [sp]                                      |     *(sp) = r3;
    0x0003ffb6 movs r3, 0                                        |     r3 = 0;
    0x0003ffb8 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003ffbc movs r1, 0                                        |     r1 = 0;
    0x0003ffbe mov r3, r4                                        |     r3 = r4;
    0x0003ffc0 str r1, [sp]                                      |     *(sp) = r1;
    0x0003ffc2 mov r2, r5                                        |     r2 = r5;
    0x0003ffc4 movs r1, 0x16                                     |     r1 = 0x16;
    0x0003ffc6 mov r0, r8                                        |     r0 = r8;
    0x0003ffc8 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003ffcc movs r3, 0x10                                     |     r3 = 0x10;
    0x0003ffce str.w r0, [sb, 0x30c]                             |     __asm ("str.w r0, aav.0x000000ff");
    0x0003ffd2 strb.w r3, [sb, 0x305]                            |     *((sb + 0x305)) = r3;
                                                                 | label_34:
    0x0003ffd6 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0003ffd8 ldr.w r5, [r3, 0x154]                             |     r5 = *((r3 + 0x154));
    0x0003ffdc ldr.w r4, [r3, 0x15c]                             |     r4 = *((r3 + 0x15c));
    0x0003ffe0 ldr.w r3, [sb, 0x2e0]                             |     r3 = *((sb + 0x2e0));
    0x0003ffe4 cmp r5, 0                                         |     
                                                                 |     if (r5 <= 0) {
    0x0003ffe6 ble.w 0x40104                                     |         goto label_199;
                                                                 |     }
    0x0003ffea ldr.w sl, [sp, 0x24]                              |     sl = var_24h;
    0x0003ffee adds r4, 0x30                                     |     r4 += 0x30;
    0x0003fff0 movs r7, 1                                        |     r7 = 1;
    0x0003fff2 b 0x40022                                         |     goto label_29;
                                                                 | label_28:
    0x0003fff4 ldr r1, [r4, -0x30]                               |     r1 = *((r4 - 0x30));
                                                                 |     if (r3 != 0) {
    0x0003fff8 cbz r3, 0x40000                                   |         
    0x0003fffa str r2, [r1, 0x44]                                |         *((r1 + 0x44)) = r2;
    0x0003fffc asrs r7, r7, 0x1d                                 |         r7 >>= 0x1d;
                                                                 |         if (r3 >= 0) {
    0x0003fffe bpl 0x40002                                       |             goto label_200;
                                                                 |         }
                                                                 |     }
    0x00040000 movs r0, r2                                       |     r0 = r2;
                                                                 | label_200:
    0x00040002 movs r0, r0                                       |     
                                                                 |     if (r0 < r0) {
    0x00040004 blt 0x3ff14                                       |         void (*0x3ff14)() ();
                                                                 |     }
    0x00040006 vhadd.u8 d0, d11, d0                              |     __asm ("vhadd.u8 d0, d11, d0");
    0x0004000a movs r4, r0                                       |     r4 = r0;
    0x0004000c subs r4, 0x1c                                     |     r4 -= 0x1c;
    0x0004000e orr r3, r3, 4                                     |     r3 |= 4;
    0x00040010 lsls r4, r0, 0xc                                  |     r4 = r0 << 0xc;
    0x00040012 strbt pc, [r4, 0x1c]                              |     __asm ("strbt pc, [r4, 0x1c]");
    0x00040016 ldr.w r3, [sb, 0x2e0]                             |     r3 = *((sb + 0x2e0));
                                                                 |     do {
    0x0004001a subs r5, 1                                        |         r5--;
    0x0004001c add.w r8, r4, 0xf400000                           |         r8 = r4 + 0xf400000;
    0x00040020 movs r0, r0                                       |         
                                                                 | label_29:
    0x00040022 movs r0, r0                                       |         
    0x00040024 cmp r4, 0x1c                                      |         
    0x00040026 tst.w r2, 6                                       |         
    0x0004002a bne 0x4001a                                       |         
                                                                 |     } while ((r2 & 6) != 0);
    0x0004002c ldrd r2, r1, [r4, -0x8]                           |     __asm ("ldrd r2, r1, [r4, -0x8]");
    0x00040030 ldr.w r0, [sb, 0x320]                             |     r0 = *((sb + 0x320));
    0x00040034 ands r2, r0                                       |     r2 &= r0;
    0x00040036 ldr.w r0, [sb, 0x324]                             |     r0 = *((sb + 0x324));
    0x0004003a ands r1, r0                                       |     r1 &= r0;
    0x0004003c orrs r2, r1                                       |     r2 |= r1;
                                                                 |     if (r2 == r1) {
    0x0004003e beq 0x3fff4                                       |         goto label_28;
                                                                 |     }
    0x00040040 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00040042 subs r5, 1                                        |     r5--;
    0x00040044 add.w r4, r4, 0x30                                |     r4 += 0x30;
    0x00040048 strb.w r7, [r2, 0x27]                             |     *((r2 + 0x27)) = r7;
                                                                 |     if (r5 != 1) {
    0x0004004c bne 0x40022                                       |         goto label_29;
                                                                 |     }
    0x0004004e ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00040050 ldr.w r5, [r2, 0x154]                             |     r5 = *((r2 + 0x154));
    0x00040054 ldr.w r4, [r2, 0x15c]                             |     r4 = *((r2 + 0x15c));
    0x00040058 invalid                                           |     
    0x0004005c adds r4, 0x30                                     |     r4 += 0x30;
    0x0004005e movw r7, 0x402                                    |     r7 = 0x402;
    0x00040062 mov.w sl, 3                                       |     sl = 3;
                                                                 |     do {
    0x00040066 ldrb r2, [r4, -0x1c]                              |         r2 = *((r4 - 0x1c));
    0x0004006a tst.w r2, 6                                       |         
                                                                 |         if ((r2 & 6) == 0) {
    0x0004006e bne 0x400fc                                       |             
    0x00040070 ldrh r2, [r4, -0x1e]                              |             r2 = *((r4 - 0x1e));
    0x00040074 cmp r2, r7                                        |             
                                                                 |             if (r2 != r7) {
    0x00040076 bne 0x400fc                                       |                 goto label_201;
                                                                 |             }
    0x00040078 ldr r2, [r4, -0x28]                               |             r2 = *((r4 - 0x28));
    0x0004007c cmp fp, r2                                        |             
                                                                 |             if (fp != r2) {
    0x0004007e bne 0x400fc                                       |                 goto label_201;
                                                                 |             }
    0x00040080 cmp r3, 0                                         |             
                                                                 |             if (r3 != 0) {
    0x00040082 bne 0x400fc                                       |                 goto label_201;
                                                                 |             }
    0x00040084 ldr r1, [r4, -0x30]                               |             r1 = *((r4 - 0x30));
    0x00040088 ldr r2, [r4, -0x24]                               |             r2 = *((r4 - 0x24));
    0x0004008c strd sl, r3, [sp, 8]                              |             __asm ("strd sl, r3, [var_8h]");
    0x00040090 ldr r3, [sp, 0x30]                                |             r3 = var_30h;
    0x00040092 str r1, [sp, 0x18]                                |             var_18h = r1;
    0x00040094 mov r1, fp                                        |             r1 = fp;
    0x00040096 ldr r0, [sp, 0x58]                                |             r0 = var_58h;
    0x00040098 str r3, [sp]                                      |             *(sp) = r3;
    0x0004009a ldr r3, [sp, 0x34]                                |             r3 = var_34h;
    0x0004009c str r3, [sp, 4]                                   |             var_4h = r3;
    0x0004009e bl 0x231d0                                        |             r0 = fcn_000231d0 (r0, r1, r2, r3, r4, r5);
                                                                 |             if (r0 != 0) {
    0x000400a2 cbz r0, 0x400f8                                   |                 
    0x000400a4 ldrb r2, [r0, 0x14]                               |                 r2 = *((r0 + 0x14));
    0x000400a6 lsls r2, r2, 0x1d                                 |                 r2 <<= 0x1d;
                                                                 |                 if (r2 < r2) {
    0x000400a8 bmi 0x400f8                                       |                     goto label_202;
                                                                 |                 }
    0x000400aa str r0, [sp, 0x20]                                |                 var_20h = r0;
    0x000400ac movs r1, 0x30                                     |                 r1 = 0x30;
    0x000400ae ldr r0, [sp, 0x28]                                |                 r0 = var_28h;
    0x000400b0 bl 0xd3a0                                         |                 fcn_0000d3a0 (r0, r1);
    0x000400b4 ldr r3, [sp, 0x20]                                |                 r3 = var_20h;
    0x000400b6 str r0, [sp, 0x1c]                                |                 var_1ch = r0;
                                                                 |                 if (r0 == 0) {
    0x000400b8 cbz r0, 0x400f8                                   |                     goto label_202;
                                                                 |                 }
    0x000400ba ldr.w lr, [r3]                                    |                 
    0x000400be ldr.w ip, [sp, 0x1c]                              |                 ip = var_1ch;
    0x000400c2 ldm.w lr!, {r0, r1, r2, r3}                       |                 r0 = *(lr!);
                                                                 |                 r1 = *((lr! + 4));
                                                                 |                 r2 = *((lr! + 8));
                                                                 |                 r3 = *((lr! + 12));
    0x000400c6 stm.w ip!, {r0, r1, r2, r3}                       |                 *(ip!) = r0;
                                                                 |                 *((ip! + 4)) = r1;
                                                                 |                 *((ip! + 8)) = r2;
                                                                 |                 *((ip! + 12)) = r3;
    0x000400ca ldr r2, [sp, 0x18]                                |                 r2 = var_18h;
    0x000400cc ldr r2, [r2, 0xc]                                 |                 r2 = *((r2 + 0xc));
    0x000400ce str r2, [sp, 0x18]                                |                 var_18h = r2;
    0x000400d0 ldm.w lr!, {r0, r1, r2, r3}                       |                 r0 = *(lr!);
                                                                 |                 r1 = *((lr! + 4));
                                                                 |                 r2 = *((lr! + 8));
                                                                 |                 r3 = *((lr! + 12));
    0x000400d4 stm.w ip!, {r0, r1, r2, r3}                       |                 *(ip!) = r0;
                                                                 |                 *((ip! + 4)) = r1;
                                                                 |                 *((ip! + 8)) = r2;
                                                                 |                 *((ip! + 12)) = r3;
    0x000400d8 ldm.w lr, {r0, r1, r2, r3}                        |                 r0 = *(lr);
                                                                 |                 r1 = *((lr + 4));
                                                                 |                 r2 = *((lr + 8));
                                                                 |                 r3 = *((lr + 12));
    0x000400dc stm.w ip, {r0, r1, r2, r3}                        |                 *(ip) = r0;
                                                                 |                 *((ip + 4)) = r1;
                                                                 |                 *((ip + 8)) = r2;
                                                                 |                 *((ip + 12)) = r3;
    0x000400e0 mov r0, r6                                        |                 r0 = r6;
    0x000400e2 ldr r1, [sp, 0x1c]                                |                 r1 = var_1ch;
    0x000400e4 movs r3, 8                                        |                 r3 = 8;
    0x000400e6 ldr r2, [sp, 0x18]                                |                 r2 = var_18h;
    0x000400e8 str r2, [r1, 0xc]                                 |                 *((r1 + 0xc)) = r2;
    0x000400ea ldr r2, [sp, 0x24]                                |                 r2 = var_24h;
    0x000400ec bl 0x3cee8                                        |                 fcn_0003cee8 (r0, r1, r2, r3, r4, r5);
    0x000400f0 ldr r1, [sp, 0x1c]                                |                 r1 = var_1ch;
    0x000400f2 ldr r0, [sp, 0x28]                                |                 r0 = var_28h;
    0x000400f4 bl 0xe12c                                         |                 fcn_0000e12c (r0, r1);
                                                                 |             }
                                                                 | label_202:
    0x000400f8 ldr.w r3, [sb, 0x2e0]                             |             r3 = *((sb + 0x2e0));
                                                                 |         }
                                                                 | label_201:
    0x000400fc subs r5, 1                                        |         r5--;
    0x000400fe add.w r4, r4, 0x30                                |         r4 += 0x30;
    0x00040102 bne 0x40066                                       |         
                                                                 |     } while (r5 != 1);
                                                                 |     if (r3 != 0) {
                                                                 | label_199:
    0x00040104 cbnz r3, 0x40130                                  |         goto label_203;
                                                                 |     }
                                                                 | label_32:
    0x00040106 ldr.w r3, [sb, 0x320]                             |     r3 = *((sb + 0x320));
    0x0004010a str r3, [sp, 0x30]                                |     var_30h = r3;
    0x0004010c ldr.w r3, [sb, 0x324]                             |     r3 = *((sb + 0x324));
    0x00040110 str r3, [sp, 0x34]                                |     var_34h = r3;
                                                                 | label_33:
    0x00040112 ldr.w r3, [sb, 0x2f8]                             |     r3 = *((sb + 0x2f8));
    0x00040116 add.w sb, sb, 0x48                                |     sb += 0x48;
    0x0004011a ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x0004011c ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x0004011e str r3, [r1, 0x30]                                |     *((r1 + 0x30)) = r3;
    0x00040120 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00040122 adds r2, 1                                        |     r2++;
    0x00040124 str r2, [sp, 0x38]                                |     var_38h = r2;
    0x00040126 cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x00040128 bne.w 0x3f1b4                                     |         goto label_30;
                                                                 |     }
    0x0004012c b.w 0x3ef1a                                       |     goto label_31;
                                                                 | label_203:
    0x00040130 ldr.w r2, [r8, 0x20]                              |     r2 = *((r8 + 0x20));
    0x00040134 movs r5, 0                                        |     r5 = 0;
    0x00040136 movs r1, 0x19                                     |     r1 = 0x19;
    0x00040138 mov r0, r8                                        |     r0 = r8;
    0x0004013a str.w r2, [sb, 0x2fc]                             |     __asm ("str.w r2, aav.0x000000ff");
    0x0004013e movs r2, 1                                        |     r2 = 1;
    0x00040140 str r5, [sp]                                      |     *(sp) = r5;
    0x00040142 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040146 mov r0, r6                                        |     r0 = r6;
    0x00040148 bl 0xae68                                         |     fcn_0000ae68 (r0);
    0x0004014c ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0004014e ldr.w r0, [r3, 0x154]                             |     r0 = *((r3 + 0x154));
    0x00040152 ldr.w r4, [r3, 0x15c]                             |     r4 = *((r3 + 0x15c));
    0x00040156 cmp r0, r5                                        |     
                                                                 |     if (r0 <= r5) {
    0x00040158 ble 0x40106                                       |         goto label_32;
                                                                 |     }
    0x0004015a ldrd r1, r3, [sb, 0x320]                          |     __asm ("ldrd r1, r3, aav.0x000000ff");
    0x0004015e adds r4, 0x30                                     |     r4 += 0x30;
    0x00040160 ldr r7, [sp, 0x24]                                |     r7 = var_24h;
    0x00040162 ldr.w r8, [sp, 0x10]                              |     r8 = var_10h;
    0x00040166 mov ip, r3                                        |     
                                                                 |     do {
    0x00040168 ldrb r3, [r4, -0x1c]                              |         r3 = *((r4 - 0x1c));
    0x0004016c tst.w r3, 6                                       |         
                                                                 |         if ((r3 & 6) == 0) {
    0x00040170 bne 0x401a6                                       |             
    0x00040172 ldr r3, [r4, -0x8]                                |             r3 = *((r4 - 0x8));
    0x00040176 ldr r2, [r4, -0x4]                                |             r2 = *((r4 - 0x4));
    0x0004017a ands r3, r1                                       |             r3 &= r1;
    0x0004017c and.w r2, ip, r2                                  |             r2 = ip & r2;
    0x00040180 orrs r3, r2                                       |             r3 |= r2;
                                                                 |             if (r3 != r2) {
    0x00040182 bne 0x401a6                                       |                 goto label_204;
                                                                 |             }
    0x00040184 ldr r1, [r4, -0x30]                               |             r1 = *((r4 - 0x30));
    0x00040188 movs r3, 8                                        |             r3 = 8;
    0x0004018a mov r0, r6                                        |             r0 = r6;
    0x0004018c mov r2, r7                                        |             r2 = r7;
    0x0004018e bl 0x3cee8                                        |             fcn_0003cee8 (r0, r1, r2, r3, r4, r5);
    0x00040192 ldrb r3, [r4, -0x1c]                              |             r3 = *((r4 - 0x1c));
    0x00040196 orr r3, r3, 4                                     |             r3 |= 4;
    0x0004019a strb r3, [r4, -0x1c]                              |             *((r4 - 0x1c)) = r3;
    0x0004019e ldrd r1, ip, [sb, 0x320]                          |             __asm ("ldrd r1, ip, aav.0x000000ff");
    0x000401a2 ldr.w r0, [r8, 0x154]                             |             r0 = *((r8 + 0x154));
                                                                 |         }
                                                                 | label_204:
    0x000401a6 adds r5, 1                                        |         r5++;
    0x000401a8 adds r4, 0x30                                     |         r4 += 0x30;
    0x000401aa cmp r5, r0                                        |         
    0x000401ac blt 0x40168                                       |         
                                                                 |     } while (r5 < r0);
    0x000401ae strd r1, ip, [sp, 0x30]                           |     __asm ("strd r1, ip, [var_30h]");
    0x000401b2 b 0x40112                                         |     goto label_33;
                                                                 | label_143:
    0x000401b4 ldr.w r2, [sl, 0x18]                              |     r2 = *((sl + 0x18));
    0x000401b8 movs r1, 0x19                                     |     r1 = 0x19;
    0x000401ba ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000401bc mov r0, r8                                        |     r0 = r8;
    0x000401be str r4, [sp]                                      |     *(sp) = r4;
    0x000401c0 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000401c4 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x000401c6 mov r2, r4                                        |     r2 = r4;
    0x000401c8 movs r1, 0x19                                     |     r1 = 0x19;
    0x000401ca mov r0, r8                                        |     r0 = r8;
    0x000401cc str r4, [sp]                                      |     *(sp) = r4;
    0x000401ce bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000401d2 ldrb.w r2, [sl, 0x1c]                             |     r2 = *((sl + 0x1c));
    0x000401d6 ldr.w r3, [sl, 0x20]                              |     r3 = *((sl + 0x20));
    0x000401da cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000401dc beq.w 0x409be                                     |         goto label_205;
                                                                 |     }
    0x000401e0 str r3, [sp, 4]                                   |     var_4h = r3;
    0x000401e2 ldrd r2, r3, [sp, 0x1c]                           |     __asm ("ldrd r2, r3, [var_20h]");
    0x000401e6 str r2, [sp]                                      |     *(sp) = r2;
    0x000401e8 mvn r2, 0xa                                       |     r2 = ~0xa;
                                                                 | label_72:
    0x000401ec str r2, [sp, 8]                                   |     var_8h = r2;
    0x000401ee movs r1, 0xe                                      |     r1 = 0xe;
    0x000401f0 mov r2, fp                                        |     r2 = fp;
    0x000401f2 mov r0, r8                                        |     r0 = r8;
    0x000401f4 bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x000401f8 strb.w r4, [sl, 0x1c]                             |     *((sl + 0x1c)) = r4;
                                                                 | label_146:
    0x000401fc ldr.w r3, [r8, 0x20]                              |     r3 = *((r8 + 0x20));
    0x00040200 mov r0, r6                                        |     r0 = r6;
    0x00040202 ldr r4, [sp, 0x50]                                |     r4 = var_50h;
    0x00040204 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00040206 str.w r3, [sb, 0x30c]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x0004020a movs r3, 0x98                                     |     r3 = 0x98;
    0x0004020c strb.w r3, [sb, 0x305]                            |     *((sb + 0x305)) = r3;
    0x00040210 mov r2, r4                                        |     r2 = r4;
    0x00040212 str.w fp, [sb, 0x308]                             |     __asm ("str.w fp, aav.0x000000ff");
    0x00040216 bl 0xaea0                                         |     fcn_0000aea0 (r0, r1, r2);
    0x0004021a ldr r3, [r6, 0x38]                                |     r3 = *((r6 + 0x38));
    0x0004021c cmp r4, r3                                        |     
    0x0004021e ittt gt                                           |     
                                                                 |     if (r4 <= r3) {
    0x00040220 movgt r3, r1                                      |         r3 = r1;
                                                                 |     }
                                                                 |     if (r4 <= r3) {
    0x00040222 strgt r4, [r6, 0x38]                              |         *((r6 + 0x38)) = r4;
                                                                 |     }
                                                                 |     if (r4 <= r3) {
    0x00040224 strgt r3, [r6, 0x3c]                              |         *((r6 + 0x3c)) = r3;
                                                                 |     }
    0x00040226 bl 0xa404                                         |     fcn_0000a404 (r0);
    0x0004022a b 0x3ffd6                                         |     goto label_34;
                                                                 | label_183:
    0x0004023c movs r1, 0                                        |     r1 = 0;
    0x0004023e mov r3, r7                                        |     r3 = r7;
    0x00040240 str r1, [sp]                                      |     *(sp) = r1;
    0x00040242 movs r1, 0x22                                     |     r1 = 0x22;
    0x00040244 ldr r0, [sp, 0x60]                                |     r0 = var_60h;
    0x00040246 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004024a ldrh r3, [r5, 0x12]                               |     r3 = *((r5 + 0x12));
    0x0004024c ands r1, r3, 0x81                                 |     r1 = r3 & 0x81;
                                                                 |     if (r1 != r3) {
    0x00040250 bne.w 0x3fca4                                     |         goto label_35;
                                                                 |     }
                                                                 | label_186:
    0x00040254 ldr r3, [r5]                                      |     r3 = *(r5);
    0x00040256 ldr r5, [r3, 0x10]                                |     r5 = *((r3 + 0x10));
    0x00040258 mov r0, r5                                        |     r0 = r5;
    0x0004025a bl 0x7f74                                         |     r0 = fcn_00007f74 (r0);
    0x0004025e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00040260 bne.w 0x40528                                     |         goto label_206;
                                                                 |     }
                                                                 | label_50:
    0x00040264 ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x00040266 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00040268 beq.w 0x3fca4                                     |         goto label_35;
                                                                 |     }
    0x0004026c ldrb r7, [r3, r4]                                 |     r7 = *((r3 + r4));
    0x0004026e mov r0, r5                                        |     r0 = r5;
    0x00040270 bl 0xb8a4                                         |     r0 = fcn_0000b8a4 (r0);
    0x00040274 mov r3, r0                                        |     r3 = r0;
    0x00040276 cmp r0, 0                                         |     
    0x00040278 it ne                                             |     
                                                                 |     if (r0 != 0) {
    0x0004027a cmpne r7, 0                                       |         __asm ("cmpne r7, 0");
                                                                 |     }
                                                                 |     if (r0 == 0) {
    0x0004027c beq.w 0x4039c                                     |         goto label_207;
                                                                 |     }
    0x00040280 cmp r7, 0x62                                      |     
    0x00040282 it ls                                             |     
                                                                 |     if (r7 <= 0x62) {
    0x00040284 cmpls r0, 0x62                                    |         __asm ("cmpls r0, 0x62");
                                                                 |     }
                                                                 |     if (r7 > 0x62) {
    0x00040286 bhi.w 0x403b2                                     |         goto label_208;
                                                                 |     }
                                                                 | label_45:
    0x0004028a ldr r2, [sp, 0x68]                                |     r2 = var_68h;
    0x0004028c movs r3, 0x62                                     |     r3 = 0x62;
    0x0004028e strb r3, [r2, r4]                                 |     *((r2 + r4)) = r3;
    0x00040290 b 0x3fca4                                         |     goto label_35;
                                                                 | label_154:
    0x00040292 ldr r1, [r3, 0x1c]                                |     r1 = *((r3 + 0x1c));
    0x00040294 cmp sl, r1                                        |     
                                                                 |     if (sl != r1) {
    0x00040296 bne.w 0x3f500                                     |         goto label_36;
                                                                 |     }
    0x0004029a ldrsh.w r3, [r3, 0x20]                            |     r3 = *((r3 + 0x20));
    0x0004029e cmp r3, 0                                         |     
                                                                 |     if (r3 >= 0) {
    0x000402a0 bge.w 0x3f500                                     |         goto label_36;
                                                                 |     }
    0x000402a4 b.w 0x3f5ba                                       |     goto label_37;
                                                                 | label_184:
    0x000402a8 mov r6, r2                                        |     r6 = r2;
    0x000402aa b 0x3fc9a                                         |     goto label_38;
                                                                 | label_139:
    0x000402ac ldr r3, [r6, 0x48]                                |     r3 = *((r6 + 0x48));
    0x000402ae movs r2, 0                                        |     r2 = 0;
    0x000402b0 movs r1, 0x19                                     |     r1 = 0x19;
    0x000402b2 mov r0, r8                                        |     r0 = r8;
    0x000402b4 adds r3, 1                                        |     r3++;
    0x000402b6 str r3, [r6, 0x48]                                |     *((r6 + 0x48)) = r3;
    0x000402b8 str.w r3, [sb, 0x2e0]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x000402bc str r2, [sp]                                      |     *(sp) = r2;
    0x000402be bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000402c2 b.w 0x3f2bc                                       |     goto label_39;
                                                                 | label_142:
    0x000402c6 ldr r3, [r6, 0x48]                                |     r3 = *((r6 + 0x48));
    0x000402c8 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x000402ca str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x000402cc ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x000402ce add r3, r2                                        |     r3 += r2;
    0x000402d0 str r3, [r6, 0x48]                                |     *((r6 + 0x48)) = r3;
    0x000402d2 b.w 0x3f324                                       |     goto label_40;
                                                                 | label_145:
    0x000402d6 str r3, [sp, 4]                                   |     var_4h = r3;
    0x000402d8 movs r1, 0xe                                      |     r1 = 0xe;
    0x000402da ldrd r2, r3, [sp, 0x1c]                           |     __asm ("ldrd r2, r3, [var_20h]");
    0x000402de mov r0, r8                                        |     r0 = r8;
    0x000402e0 str r2, [sp]                                      |     *(sp) = r2;
    0x000402e2 mvn r2, 1                                         |     r2 = ~1;
    0x000402e6 str r2, [sp, 8]                                   |     var_8h = r2;
    0x000402e8 mov r2, fp                                        |     r2 = fp;
    0x000402ea bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x000402ee strb.w r7, [sl, 0x1c]                             |     *((sl + 0x1c)) = r7;
    0x000402f2 b.w 0x3f3d8                                       |     goto label_41;
                                                                 | label_133:
    0x000402f6 lsls r0, r3, 0x15                                 |     r0 = r3 << 0x15;
                                                                 |     if (r0 < r3) {
    0x000402f8 bmi.w 0x40868                                     |         goto label_209;
                                                                 |     }
    0x000402fc lsls r0, r2, 0x1b                                 |     r0 = r2 << 0x1b;
                                                                 |     if (r0 < r2) {
    0x000402fe bmi.w 0x3f0ec                                     |         goto label_42;
                                                                 |     }
    0x00040302 lsls r2, r3, 0x19                                 |     r2 = r3 << 0x19;
                                                                 |     if (r2 < r3) {
    0x00040304 bmi 0x40386                                       |         goto label_210;
                                                                 |     }
    0x00040306 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00040308 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004030a bne 0x40386                                       |         goto label_210;
                                                                 |     }
    0x0004030c ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x0004030e add.w r3, r8, r6                                  |     r3 = r8 + r6;
    0x00040312 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00040314 ldrb.w r2, [r0, 0x26]                             |     r2 = *((r0 + 0x26));
    0x00040318 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0004031c ldr r1, [r3, 0x30]                                |     r1 = *((r3 + 0x30));
    0x0004031e movs r3, 0x35                                     |     r3 = 0x35;
                                                                 |     if (r2 != 0) {
    0x00040320 cbz r2, 0x40326                                   |         
    0x00040322 movs r3, 0x36                                     |         r3 = 0x36;
    0x00040324 str r1, [r0, 0x3c]                                |         *((r0 + 0x3c)) = r1;
                                                                 |     }
    0x00040326 str r3, [sp]                                      |     *(sp) = r3;
    0x00040328 mov r2, r4                                        |     r2 = r4;
    0x0004032a mov r3, r5                                        |     r3 = r5;
    0x0004032c mov r0, sl                                        |     r0 = sl;
    0x0004032e bl 0x22140                                        |     fcn_00022140 (r0, r1, r2, r3, r4);
    0x00040330 invalid                                           |     
    0x00040334 ldrb.w r3, [r3, 0x26]                             |     r3 = *((r3 + 0x26));
                                                                 |     if (r3 != 0) {
    0x00040338 cbnz r3, 0x40396                                  |         goto label_211;
                                                                 |     }
    0x0004033a ldrsh.w r3, [r5, 0x26]                            |     r3 = *((r5 + 0x26));
    0x0004033e cmp r3, 0x3f                                      |     
                                                                 |     if (r3 > 0x3f) {
    0x00040340 bgt 0x40396                                       |         goto label_211;
                                                                 |     }
    0x00040342 ldrb.w r2, [r5, 0x2c]                             |     r2 = *((r5 + 0x2c));
    0x00040346 ands r2, r2, 0x20                                 |     r2 &= 0x20;
                                                                 |     if (r2 == r2) {
    0x0004034a beq.w 0x411ac                                     |         goto label_212;
                                                                 |     }
    0x0004034e ldr r3, [r7, 0x24]                                |     r3 = *((r7 + 0x24));
    0x00040350 lsls r0, r3, 0x16                                 |     r0 = r3 << 0x16;
                                                                 |     if (r0 >= r3) {
    0x00040352 bpl.w 0x3f158                                     |         goto label_43;
                                                                 |     }
    0x00040356 ldr r5, [r7, 0x1c]                                |     r5 = *((r7 + 0x1c));
    0x00040358 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x0004035a ldrb.w r3, [r5, 0x37]                             |     r3 = *((r5 + 0x37));
    0x0004035e cmp r2, 0                                         |     
    0x00040360 and r3, r3, 3                                     |     r3 &= 3;
    0x00040364 sub.w r3, r3, 2                                   |     r3 -= 2;
    0x00040368 clz r3, r3                                        |     r3 &= r3;
    0x0004036c lsr.w r3, r3, 5                                   |     r3 >>= 5;
    0x00040370 it eq                                             |     
                                                                 |     if (r2 != 0) {
    0x00040372 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00040374 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00040376 beq.w 0x3f128                                     |         goto label_44;
                                                                 |     }
                                                                 | label_134:
    0x0004037a ldr.w r3, [sb, 4]                                 |     r3 = *((sb + 4));
    0x0004037e str.w r3, [sb, 8]                                 |     __asm ("str.w r3, [sb, 8]");
    0x00040382 b.w 0x3f158                                       |     goto label_43;
                                                                 | label_210:
    0x00040386 ldr r3, [r5]                                      |     r3 = *(r5);
    0x00040388 mov r1, r4                                        |     r1 = r4;
    0x0004038a ldr r2, [r5, 0x20]                                |     r2 = *((r5 + 0x20));
    0x0004038c mov r0, sl                                        |     r0 = sl;
    0x0004038e str r3, [sp]                                      |     *(sp) = r3;
    0x00040390 movs r3, 0                                        |     r3 = 0;
    0x00040392 bl 0x19dd4                                        |     fcn_00019dd4 (r0, r1, r2, r3, r4);
                                                                 | label_211:
    0x00040396 ldr r3, [r7, 0x24]                                |     r3 = *((r7 + 0x24));
    0x00040398 b.w 0x3f0ec                                       |     goto label_42;
                                                                 | label_207:
    0x0004039c orr.w r2, r7, r0                                  |     r2 = r7 | r0;
    0x000403a0 uxtb r2, r2                                       |     r2 = (int8_t) r2;
    0x000403a2 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000403a4 beq.w 0x4028a                                     |         goto label_45;
                                                                 |     }
    0x000403a8 add r3, r7                                        |     r3 += r7;
    0x000403aa uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x000403ac cmp r3, 0x62                                      |     
                                                                 |     if (r3 == 0x62) {
    0x000403ae beq.w 0x4028a                                     |         goto label_45;
                                                                 |     }
                                                                 | label_208:
    0x000403b2 cmp r7, 0x62                                      |     
                                                                 |     if (r7 == 0x62) {
    0x000403b4 beq.w 0x4028a                                     |         goto label_45;
                                                                 |     }
    0x000403b8 mov r1, r7                                        |     r1 = r7;
    0x000403ba mov r0, r5                                        |     r0 = r5;
    0x000403bc bl 0xa36c                                         |     r0 = fcn_0000a36c (r0, r1);
    0x000403c0 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000403c2 beq.w 0x3fca4                                     |         goto label_35;
                                                                 |     }
    0x000403c6 b 0x4028a                                         |     goto label_45;
                                                                 | label_135:
    0x000403c8 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x000403ca add.w r3, r8, r6                                  |     r3 = r8 + r6;
    0x000403ce add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x000403d2 ldr r2, [sp, 0x118]                               |     r2 = *(arg_118h);
    0x000403d4 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x000403d6 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x000403d8 cmp r3, 0                                         |     
    0x000403da it ne                                             |     
                                                                 |     if (r3 != 0) {
    0x000403dc cmpne r5, r3                                      |         __asm ("cmpne r5, r3");
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x000403de beq 0x403ec                                       |         goto label_213;
                                                                 |     }
                                                                 |     do {
    0x000403e0 ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x000403e2 adds r2, 1                                        |         r2++;
    0x000403e4 cmp r3, 0                                         |         
    0x000403e6 it ne                                             |         
                                                                 |         if (r3 != 0) {
    0x000403e8 cmpne r5, r3                                      |             __asm ("cmpne r5, r3");
                                                                 |         }
    0x000403ea bne 0x403e0                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_213:
    0x000403ec ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000403ee movs r1, 0x36                                     |     r1 = 0x36;
    0x000403f0 str r2, [r3, 0x40]                                |     *((r3 + 0x40)) = r2;
    0x000403f2 b.w 0x3f142                                       |     goto label_46;
                                                                 | label_168:
    0x000403f6 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x000403f8 ldrsh.w r3, [r2, 0x26]                            |     r3 = *((r2 + 0x26));
    0x000403fc cmp r3, 0x3f                                      |     
                                                                 |     if (r3 <= 0x3f) {
    0x000403fe ble.w 0x3f942                                     |         goto label_47;
                                                                 |     }
    0x00040402 ldr.w r6, [pc, 0xba8]                             |     
    0x00040406 add.w r5, r0, fp, lsl 1                           |     r5 = r0 + (fp << 1);
    0x0004040a add.w r4, r1, fp, lsl 2                           |     r4 = r1 + (fp << 2);
    0x0004040e sub.w ip, fp, 0x3e                                |     
    0x00040412 movs r3, 0x3f                                     |     r3 = 0x3f;
    0x00040414 add r6, pc                                        |     r6 = 0x813c6;
    0x00040416 mov lr, r2                                        |     lr = r2;
                                                                 |     do {
    0x00040418 strh r3, [r5], 2                                  |         *(r5) = r3;
                                                                 |         r5 += 2;
    0x0004041c add.w r2, ip, r3                                  |         r2 = ip + r3;
    0x00040420 ldrsh.w r7, [lr, 0x26]                            |         r7 = *((lr + 0x26));
    0x00040424 adds r3, 1                                        |         r3++;
    0x00040426 str r6, [r4], 4                                   |         *(r4) = r6;
                                                                 |         r4 += 4;
    0x0004042a cmp r3, r7                                        |         
    0x0004042c blt 0x40418                                       |         
                                                                 |     } while (r3 < r7);
    0x0004042e lsls r7, r2, 1                                    |     r7 = r2 << 1;
    0x00040430 lsl.w ip, r2, 2                                   |     
    0x00040434 b.w 0x3f942                                       |     goto label_47;
                                                                 | label_166:
    0x00040438 ldr r2, [sp, 0x98]                                |     r2 = var_98h;
    0x0004043a b.w 0x3f8bc                                       |     goto label_48;
                                                                 | label_172:
    0x0004043e ands r3, r2, 0x20                                 |     r3 = r2 & 0x20;
    0x00040442 itett ne                                          |     
                                                                 |     if (r3 == r2) {
    0x00040444 ldrne r3, [sl, 0x2c]                              |         r3 = *((sl + 0x2c));
                                                                 |     }
                                                                 |     if (r3 == r2) {
    0x00040448 movne r7, r3                                      |         r7 = r3;
                                                                 |     }
                                                                 |     if (r3 == r2) {
    0x0004044a ldrne r7, [r3]                                    |         r7 = *(r3);
                                                                 |     }
                                                                 |     if (r3 != r2) {
    0x0004044c movs r3, 1                                        |         r3 = 1;
                                                                 |     }
    0x0004044e lsls r1, r2, 0x1b                                 |     r1 = r2 << 0x1b;
                                                                 |     if (r1 < r2) {
    0x00040450 bmi.w 0x40668                                     |         goto label_214;
                                                                 |     }
    0x00040454 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00040456 mov sl, r3                                        |     sl = r3;
    0x00040458 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004045a beq.w 0x405fa                                     |         goto label_55;
                                                                 |     }
                                                                 | label_56:
    0x0004045e movs r1, 0x67                                     |     r1 = 0x67;
                                                                 | label_88:
    0x00040460 movs r3, 0                                        |     r3 = 0;
    0x00040462 mov r2, fp                                        |     r2 = fp;
    0x00040464 str r3, [sp]                                      |     *(sp) = r3;
    0x00040466 mov r0, r8                                        |     r0 = r8;
    0x00040468 mov r3, r4                                        |     r3 = r4;
    0x0004046a bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
                                                                 | label_54:
    0x0004046e cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00040470 beq.w 0x405e2                                     |         goto label_215;
                                                                 |     }
    0x00040474 ldr r3, [r6, 0x48]                                |     r3 = *((r6 + 0x48));
    0x00040476 mov r0, r6                                        |     r0 = r6;
    0x00040478 ldr r5, [r7]                                      |     r5 = *(r7);
    0x0004047a add.w sl, r3, 1                                   |     sl = r3 + 1;
    0x0004047e ldr r1, [r5, 0x10]                                |     r1 = *((r5 + 0x10));
    0x00040480 mov r2, sl                                        |     r2 = sl;
    0x00040482 str.w sl, [r6, 0x48]                              |     __asm ("str.w sl, [r6, 0x48]");
    0x00040486 bl 0x3c4a8                                        |     fcn_0003c4a8 (r0, r1, r2);
    0x0004048a ldrb r3, [r5]                                     |     r3 = *(r5);
    0x0004048c and r3, r3, 0xfd                                  |     r3 &= 0xfd;
    0x00040490 cmp r3, 0x50                                      |     
    0x00040492 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
                                                                 |     if (r3 != 0x50) {
    0x00040494 bne.w 0x408cc                                     |         goto label_216;
                                                                 |     }
    0x00040498 movs r5, 0x53                                     |     r5 = 0x53;
    0x0004049a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004049c bne.w 0x40a4c                                     |         goto label_217;
                                                                 |     }
                                                                 | label_69:
    0x000404a0 ldr r0, [sp, 0x44]                                |     r0 = var_44h;
    0x000404a2 mov r1, r7                                        |     r1 = r7;
    0x000404a4 bl 0x83a0                                         |     fcn_000083a0 (r0, r1);
    0x000404a8 ldr.w r2, [r8, 0x20]                              |     r2 = *((r8 + 0x20));
    0x000404ac movs r3, 9                                        |     r3 = 9;
                                                                 | label_79:
    0x000404ae ldr r7, [r6, 0x48]                                |     r7 = *((r6 + 0x48));
    0x000404b0 movs r1, 0x65                                     |     r1 = 0x65;
    0x000404b2 strb.w r3, [sb, 0x305]                            |     *((sb + 0x305)) = r3;
    0x000404b6 movs r3, 0                                        |     r3 = 0;
    0x000404b8 strd fp, r2, [sb, 0x308]                          |     __asm ("strd fp, r2, aav.0x000000ff");
    0x000404bc mov r0, r8                                        |     r0 = r8;
    0x000404be adds r7, 1                                        |     r7++;
    0x000404c0 mov r2, fp                                        |     r2 = fp;
    0x000404c2 str r7, [r6, 0x48]                                |     *((r6 + 0x48)) = r7;
    0x000404c4 str r3, [sp]                                      |     *(sp) = r3;
    0x000404c6 mov r3, r7                                        |     r3 = r7;
    0x000404c8 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000404cc mov r3, r7                                        |     r3 = r7;
    0x000404ce mov.w r2, -1                                      |     r2 = -1;
    0x000404d2 mov r1, fp                                        |     r1 = fp;
    0x000404d4 mov r0, r6                                        |     r0 = r6;
    0x000404d6 bl 0xa44c                                         |     fcn_0000a44c (r0, r1, r2, r3);
    0x000404da mov r3, r4                                        |     r3 = r4;
    0x000404dc mov r2, sl                                        |     r2 = sl;
    0x000404de mov r1, r5                                        |     r1 = r5;
    0x000404e0 mov r0, r8                                        |     r0 = r8;
    0x000404e2 str r7, [sp]                                      |     *(sp) = r7;
    0x000404e4 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000404e8 ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x000404ec cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000404ee beq.w 0x3ffd6                                     |         goto label_34;
                                                                 |     }
    0x000404f2 ldr.w r2, [r8, 0x20]                              |     r2 = *((r8 + 0x20));
    0x000404f6 add.w r2, r2, r2, lsl 2                           |     r2 += (r2 << 2);
    0x000404fa add.w r3, r3, r2, lsl 2                           |     r3 += (r2 << 2);
    0x000404fe movs r2, 0x6b                                     |     r2 = 0x6b;
    0x00040500 strb r2, [r3, -0x11]                              |     *((r3 - 0x11)) = r2;
    0x00040504 b 0x3ffd6                                         |     goto label_34;
                                                                 | label_173:
    0x00040506 lsls r0, r2, 0x12                                 |     r0 = r2 << 0x12;
                                                                 |     if (r0 < r2) {
    0x00040508 bmi.w 0x408e4                                     |         goto label_218;
                                                                 |     }
    0x0004050c ands r1, r1, 8                                    |     r1 &= 8;
                                                                 |     if (r1 == r1) {
    0x00040510 beq.w 0x4098e                                     |         goto label_219;
                                                                 |     }
    0x00040514 movs r3, 0x9d                                     |     r3 = 0x9d;
    0x00040516 strb.w r3, [sb, 0x305]                            |     *((sb + 0x305)) = r3;
    0x0004051a b 0x3ffd6                                         |     goto label_34;
                                                                 | label_169:
    0x0004051c ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0004051e ldr r4, [r3, 0x48]                                |     r4 = *((r3 + 0x48));
    0x00040520 adds r4, 1                                        |     r4++;
    0x00040522 str r4, [r3, 0x48]                                |     *((r3 + 0x48)) = r4;
    0x00040524 b.w 0x3f9b2                                       |     goto label_49;
                                                                 | label_206:
    0x00040528 ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x0004052a adds r2, r6, r4                                   |     r2 = r6 + r4;
    0x0004052c ldr r0, [sp, 0x60]                                |     r0 = var_60h;
    0x0004052e ldr.w r3, [r3, 0x2ec]                             |     r3 = *((r3 + 0x2ec));
    0x00040532 str r1, [sp]                                      |     *(sp) = r1;
    0x00040534 movs r1, 0x4c                                     |     r1 = 0x4c;
    0x00040536 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004053a b 0x40264                                         |     goto label_50;
                                                                 | label_136:
    0x0004053c ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0004053e ldr r2, [sp, 0x118]                               |     r2 = *(arg_118h);
    0x00040540 cmp r3, 0                                         |     
    0x00040542 ite eq                                            |     
                                                                 |     if (r3 != 0) {
    0x00040544 moveq r1, 0x35                                    |         r1 = 0x35;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x00040546 movne r1, 0x34                                    |         r1 = 0x34;
                                                                 |     }
    0x00040548 b.w 0x3f142                                       |     goto label_46;
                                                                 | label_158:
    0x0004054c ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0004054e bl 0x192c8                                        |     fcn_000192c8 (r0);
    0x00040552 b.w 0x3f68e                                       |     goto label_51;
                                                                 | label_171:
    0x00040556 ldr r4, [r6, 0x48]                                |     r4 = *((r6 + 0x48));
    0x00040558 ldr.w r1, [sl, 0x2c]                              |     r1 = *((sl + 0x2c));
    0x0004055c ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x0004055e adds r4, 1                                        |     r4++;
    0x00040560 ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x00040562 ldr r1, [r1]                                      |     r1 = *(r1);
    0x00040564 str r4, [r6, 0x48]                                |     *((r6 + 0x48)) = r4;
    0x00040566 strd r0, r4, [sp]                                 |     __asm ("strd r0, r4, [sp]");
    0x0004056a mov r0, r6                                        |     r0 = r6;
    0x0004056c bl 0x3c350                                        |     fcn_0003c350 (r0, r1, r2, r3, r4, r5, r6);
    0x00040570 cmp r4, 0                                         |     
    0x00040572 it ne                                             |     
                                                                 |     if (r4 != 0) {
    0x00040574 cmpne r4, r0                                      |         __asm ("cmpne r4, r0");
                                                                 |     }
    0x00040576 mov r5, r0                                        |     r5 = r0;
                                                                 |     if (r4 != 0) {
    0x00040578 bne.w 0x40afa                                     |         goto label_220;
                                                                 |     }
                                                                 | label_84:
    0x0004057c ldr.w r4, [sb, 0x2f0]                             |     r4 = *((sb + 0x2f0));
    0x00040580 movs r3, 0                                        |     r3 = 0;
    0x00040582 mov r2, r5                                        |     r2 = r5;
    0x00040584 movs r1, 0x26                                     |     r1 = 0x26;
    0x00040586 str r3, [sp]                                      |     *(sp) = r3;
    0x00040588 mov r0, r8                                        |     r0 = r8;
    0x0004058a mov r3, r4                                        |     r3 = r4;
    0x0004058c bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040590 mov r3, r4                                        |     r3 = r4;
    0x00040592 mov r2, fp                                        |     r2 = fp;
    0x00040594 movs r1, 0x44                                     |     r1 = 0x44;
    0x00040596 mov r0, r8                                        |     r0 = r8;
    0x00040598 str r5, [sp]                                      |     *(sp) = r5;
    0x0004059a bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004059e movs r2, 1                                        |     r2 = 1;
    0x000405a0 mov r1, r5                                        |     r1 = r5;
    0x000405a2 mov r0, r6                                        |     r0 = r6;
    0x000405a4 bl 0xaea0                                         |     fcn_0000aea0 (r0, r1, r2);
    0x000405a8 mov r3, r5                                        |     r3 = r5;
    0x000405aa mov.w r2, -1                                      |     r2 = -1;
    0x000405ae mov r1, fp                                        |     r1 = fp;
    0x000405b0 bl 0xa44c                                         |     fcn_0000a44c (r0, r1, r2, r3);
    0x000405b4 movs r3, 0x9d                                     |     r3 = 0x9d;
    0x000405b6 strb.w r3, [sb, 0x305]                            |     *((sb + 0x305)) = r3;
    0x000405ba b 0x3ffd6                                         |     goto label_34;
                                                                 | label_175:
    0x000405bc movs r3, 1                                        |     r3 = 1;
                                                                 | label_174:
    0x000405be str r3, [sp, 0x64]                                |     var_64h = r3;
    0x000405c0 b.w 0x3fb04                                       |     goto label_52;
                                                                 | label_112:
    0x000405c4 mov r1, r0                                        |     r1 = r0;
    0x000405c6 movs r3, 0                                        |     r3 = 0;
    0x000405c8 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x000405ca str r3, [sp, 0x10]                                |     var_10h = r3;
    0x000405cc bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x000405d0 b.w 0x3ef1a                                       |     goto label_31;
                                                                 | label_176:
    0x000405d4 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x000405d6 bne.w 0x40bb2                                     |         goto label_221;
                                                                 |     }
    0x000405da str r1, [sp, 0x20]                                |     var_20h = r1;
    0x000405dc str r1, [sp, 0x5c]                                |     var_5ch = r1;
    0x000405de b.w 0x3fb34                                       |     goto label_53;
                                                                 | label_215:
    0x000405e2 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x000405e4 ldr.w r3, [r8, 0x20]                              |     r3 = *((r8 + 0x20));
    0x000405e8 strd fp, r3, [sb, 0x308]                          |     __asm ("strd fp, r3, aav.0x000000ff");
    0x000405ec cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000405ee beq.w 0x409ea                                     |         goto label_222;
                                                                 |     }
    0x000405f2 movs r3, 8                                        |     r3 = 8;
    0x000405f4 strb.w r3, [sb, 0x305]                            |     *((sb + 0x305)) = r3;
    0x000405f8 b 0x3ffd6                                         |     goto label_34;
                                                                 | label_55:
    0x000405fa cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x000405fc beq.w 0x40be6                                     |         goto label_223;
                                                                 |     }
                                                                 | label_57:
    0x00040600 ldr r5, [r7]                                      |     r5 = *(r7);
    0x00040602 add r2, sp, 0xc0                                  |     r2 += var_c0h;
    0x00040604 ldr r3, [sp, 0x9c]                                |     r3 = var_9ch;
    0x00040606 mov r0, r6                                        |     r0 = r6;
    0x00040608 ldr r1, [r5, 0x10]                                |     r1 = *((r5 + 0x10));
    0x0004060a str r3, [sp, 0xd8]                                |     var_d8h = r3;
    0x0004060c bl 0x3c858                                        |     fcn_0003c858 (r0, r1, r2);
    0x00040610 ldrb r3, [r5]                                     |     r3 = *(r5);
    0x00040612 mov r2, fp                                        |     r2 = fp;
    0x00040614 str r0, [sp]                                      |     *(sp) = r0;
    0x00040616 mov r5, r0                                        |     r5 = r0;
    0x00040618 mov r0, r8                                        |     r0 = r8;
    0x0004061a adds r3, 0xe0                                     |     r3 += 0xe0;
    0x0004061c add r3, sp, r3                                    |     r3 = sp + r3;
    0x0004061e ldrb r1, [r3, -0x58]                              |     r1 = *((r3 - 0x58));
    0x00040622 mov r3, r4                                        |     r3 = r4;
    0x00040624 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040628 mov r1, r5                                        |     r1 = r5;
    0x0004062a movs r2, 1                                        |     r2 = 1;
    0x0004062c mov r0, r6                                        |     r0 = r6;
    0x0004062e bl 0xaea0                                         |     fcn_0000aea0 (r0, r1, r2);
    0x00040632 ldr r1, [sp, 0xc0]                                |     r1 = var_c0h;
                                                                 |     if (r1 == 0) {
    0x00040634 cbz r1, 0x4065c                                   |         goto label_104;
                                                                 |     }
    0x00040636 ldrb r3, [r6, 0x13]                               |     r3 = *((r6 + 0x13));
    0x00040638 cmp r3, 7                                         |     
                                                                 |     if (r3 > 7) {
    0x0004063a bhi 0x4065c                                       |         goto label_104;
                                                                 |     }
    0x0004063c add.w r2, r6, 0x74                                |     r2 = r6 + 0x74;
    0x00040640 add.w r5, r6, 0x13c                               |     r5 = r6 + 0x13c;
                                                                 |     do {
    0x00040644 ldr r0, [r2, 0xc]                                 |         r0 = *((r2 + 0xc));
    0x00040646 cmp r1, r0                                        |         
                                                                 |         if (r1 == r0) {
    0x00040648 beq.w 0x41060                                     |             goto label_224;
                                                                 |         }
    0x0004064c adds r2, 0x14                                     |         r2 += 0x14;
    0x0004064e cmp r2, r5                                        |         
    0x00040650 bne 0x40644                                       |         
                                                                 |     } while (r2 != r5);
    0x00040652 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x00040654 adds r3, 6                                        |     r3 += 6;
    0x00040656 strb r2, [r6, 0x13]                               |     *((r6 + 0x13)) = r2;
    0x00040658 str.w r1, [r6, r3, lsl 2]                         |     __asm ("str.w r1, [r6, r3, lsl 2]");
                                                                 | label_104:
    0x0004065c mov r1, r7                                        |     r1 = r7;
    0x0004065e ldr r0, [sp, 0x44]                                |     r0 = var_44h;
    0x00040660 mov r7, sl                                        |     r7 = sl;
    0x00040662 bl 0x83a0                                         |     fcn_000083a0 (r0, r1);
    0x00040666 b 0x4046e                                         |     goto label_54;
                                                                 | label_214:
    0x00040668 ldr.w r2, [sl, 0x2c]                              |     r2 = *((sl + 0x2c));
    0x0004066c ldr.w sl, [r2, r3, lsl 2]                         |     offset_14 = r3 << 2;
                                                                 |     sl = *((r2 + offset_14));
    0x00040670 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00040672 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00040674 beq 0x405fa                                       |         goto label_55;
                                                                 |     }
    0x00040676 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x0004067a beq.w 0x4045e                                     |         goto label_56;
                                                                 |     }
    0x0004067e mov r3, r7                                        |     r3 = r7;
    0x00040680 mov r7, sl                                        |     r7 = sl;
    0x00040682 mov sl, r3                                        |     sl = r3;
    0x00040684 b 0x40600                                         |     goto label_57;
                                                                 | label_187:
    0x00040686 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00040688 and r3, r3, 1                                     |     r3 &= 1;
    0x0004068c it ne                                             |     
                                                                 |     if (sl == 0) {
    0x0004068e movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00040690 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00040692 beq.w 0x3fcf2                                     |         goto label_58;
                                                                 |     }
                                                                 | label_188:
    0x00040696 movs r5, 0                                        |     r5 = 0;
    0x00040698 b.w 0x3fd02                                       |     goto label_59;
                                                                 | label_127:
    0x000406f2 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x000406f4 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x000406f6 lsls r4, r3, 0xe                                  |     r4 = r3 << 0xe;
                                                                 |     if (r4 >= r3) {
    0x000406f8 bpl.w 0x3f002                                     |         goto label_60;
                                                                 |     }
    0x000406fc ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000406fe vmov.i8 d16, 0xff                                 |     __asm ("vmov.i8 d16, 0xff");
    0x00040702 vstr d16, [r3, 0x18]                              |     __asm ("vstr d16, [r3, 0x18]");
    0x00040706 b.w 0x3f002                                       |     goto label_60;
                                                                 | label_110:
    0x0004070a ldr.w r1, [pc, 0x8a4]                             |     r1 = *(0x00040fb0);
    0x0004070e movs r3, 0                                        |     r3 = 0;
    0x00040710 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x00040712 movs r2, 0x40                                     |     r2 = 0x40;
    0x00040714 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00040716 add r1, pc                                        |     r1 += pc;
    0x00040718 bl 0x1ca34                                        |     fcn_0001ca34 (r0);
    0x0004071c b.w 0x3ef1a                                       |     goto label_31;
                                                                 | label_162:
    0x00040720 ldr.w sb, [sp, 0x68]                              |     sb = var_68h;
    0x00040724 b.w 0x3fa76                                       |     goto label_61;
                                                                 | label_196:
    0x00040728 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x0004072a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004072c bne.w 0x40b6e                                     |         goto label_225;
                                                                 |     }
    0x00040730 ldr r1, [sp, 0x68]                                |     r1 = var_68h;
    0x00040732 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00040734 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00040738 ldr.w r3, [r8, 0x20]                              |     r3 = *((r8 + 0x20));
    0x0004073c str.w r3, [sb, 0x30c]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x00040740 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00040742 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00040744 beq.w 0x3fec2                                     |         goto label_62;
                                                                 |     }
    0x00040748 b.w 0x3fe9e                                       |     goto label_63;
                                                                 | label_132:
    0x0004074c movs r4, 0                                        |     r4 = 0;
    0x0004074e b.w 0x3f0d6                                       |     goto label_64;
                                                                 | label_128:
    0x00040752 ldrh r4, [r2, 0x3c]                               |     r4 = *((r2 + 0x3c));
    0x00040754 ands r4, r4, 0x400                                |     r4 &= 0x400;
                                                                 |     if (r4 != r4) {
    0x00040758 bne.w 0x3f02c                                     |         goto label_65;
                                                                 |     }
    0x0004075c ldr.w r5, [sb]                                    |     r5 = *(sb);
    0x00040760 add.w fp, r3, 0x44                                |     
    0x00040764 cmp r5, 0                                         |     
                                                                 |     if (r5 <= 0) {
    0x00040766 ble.w 0x41058                                     |         goto label_226;
                                                                 |     }
    0x0004076a add.w r5, r5, r5, lsl 2                           |     r5 += (r5 << 2);
    0x0004076e ldr.w r6, [sb, 4]                                 |     r6 = *((sb + 4));
    0x00040772 mov r8, r4                                        |     r8 = r4;
    0x00040774 mov sb, r4                                        |     sb = r4;
                                                                 |     do {
    0x00040776 ldr.w r1, [r6, r4, lsl 2]                         |         offset_15 = r4 << 2;
                                                                 |         r1 = *((r6 + offset_15));
    0x0004077a mov r0, fp                                        |         r0 = fp;
    0x0004077c adds r4, 5                                        |         r4 += 5;
    0x0004077e bl 0xbc08                                         |         fcn_0000bc08 (r0, r1);
    0x00040782 cmp r5, r4                                        |         
    0x00040784 orr.w r8, r0, r8                                  |         r8 = r0 | r8;
    0x00040788 orr.w sb, r1, sb                                  |         sb = r1 | sb;
    0x0004078c bne 0x40776                                       |         
                                                                 |     } while (r5 != r4);
                                                                 | label_103:
    0x0004078e ldr r3, [sp, 0xb4]                                |     r3 = var_b4h;
                                                                 |     if (r3 == 0) {
    0x00040790 cbz r3, 0x407d4                                   |         goto label_227;
                                                                 |     }
    0x00040792 ldr r5, [r3]                                      |     r5 = *(r3);
    0x00040794 cmp r5, 0                                         |     
                                                                 |     if (r5 <= 0) {
    0x00040796 ble 0x407d4                                       |         goto label_227;
                                                                 |     }
    0x00040798 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004079a add.w r5, r5, r5, lsl 2                           |     r5 += (r5 << 2);
    0x0004079e movs r4, 0                                        |     r4 = 0;
    0x000407a0 str.w sb, [sp, 0x18]                              |     __asm ("str.w sb, [var_18h]");
    0x000407a4 mov r7, r4                                        |     r7 = r4;
    0x000407a6 mov sb, r8                                        |     sb = r8;
    0x000407a8 mov r6, r4                                        |     r6 = r4;
    0x000407aa mov r8, r5                                        |     r8 = r5;
    0x000407ac mov r5, r3                                        |     r5 = r3;
                                                                 |     do {
    0x000407ae ldr.w r1, [r5, r4, lsl 2]                         |         offset_16 = r4 << 2;
                                                                 |         r1 = *((r5 + offset_16));
    0x000407b2 mov r0, fp                                        |         r0 = fp;
    0x000407b4 adds r4, 5                                        |         r4 += 5;
    0x000407b6 bl 0xbc08                                         |         fcn_0000bc08 (r0, r1);
    0x000407ba cmp r8, r4                                        |         
    0x000407bc orr.w r7, r7, r0                                  |         r7 |= r0;
    0x000407c0 orr.w r6, r6, r1                                  |         r6 |= r1;
    0x000407c4 bne 0x407ae                                       |         
                                                                 |     } while (r8 != r4);
    0x000407c6 mov r8, sb                                        |     r8 = sb;
    0x000407c8 ldr.w sb, [sp, 0x18]                              |     sb = var_18h;
    0x000407cc orr.w r8, r7, r8                                  |     r8 = r7 | r8;
    0x000407d0 orr.w sb, r6, sb                                  |     sb = r6 | sb;
                                                                 | label_227:
    0x000407d4 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000407d6 mov r6, sl                                        |     r6 = sl;
    0x000407d8 ldr r7, [sp, 0xb0]                                |     r7 = var_b0h;
    0x000407da ldr.w lr, [sp, 0x3c]                              |     lr = var_3ch;
    0x000407de ldr.w ip, [r3, 4]                                 |     ip = *((r3 + 4));
    0x000407e2 mov fp, r3                                        |     
                                                                 | label_66:
    0x000407e4 subs r6, 1                                        |     r6--;
    0x000407e6 add.w r3, r6, r6, lsl 3                           |     r3 = r6 + (r6 << 3);
    0x000407ea add.w r3, fp, r3, lsl 3                           |     r3 = fp + (r3 << 3);
    0x000407ee ldr.w r2, [r3, 0x318]                             |     r2 = *((r3 + 0x318));
    0x000407f2 ldrb r3, [r2, 0x10]                               |     r3 = *((r2 + 0x10));
    0x000407f4 add.w r3, r3, r3, lsl 3                           |     r3 += (r3 << 3);
    0x000407f8 add.w r3, ip, r3, lsl 3                           |     r3 = ip + (r3 << 3);
    0x000407fc ldrb.w r3, [r3, 0x2c]                             |     r3 = *((r3 + 0x2c));
    0x00040800 lsls r0, r3, 0x1c                                 |     r0 = r3 << 0x1c;
                                                                 |     if (r0 >= r3) {
    0x00040802 bpl 0x40858                                       |         goto label_82;
                                                                 |     }
    0x00040804 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
                                                                 |     if (r3 == 0) {
    0x00040806 cbnz r3, 0x4080e                                  |         
    0x00040808 ldr r3, [r2, 0x24]                                |         r3 = *((r2 + 0x24));
    0x0004080a lsls r1, r3, 0x13                                 |         r1 = r3 << 0x13;
                                                                 |         if (r1 >= r3) {
    0x0004080c bpl 0x40858                                       |             goto label_82;
                                                                 |         }
                                                                 |     }
    0x0004080e ldrd r4, r5, [r2, 8]                              |     __asm ("ldrd r4, r5, [r2, 8]");
    0x00040812 and.w r3, r4, r8                                  |     r3 = r4 & r8;
    0x00040816 and.w r2, r5, sb                                  |     r2 = r5 & sb;
    0x0004081a orrs r3, r2                                       |     r3 |= r2;
                                                                 |     if (r3 != r2) {
    0x0004081c bne 0x40858                                       |         goto label_82;
                                                                 |     }
    0x0004081e ldr r0, [r7, 0xc]                                 |     r0 = *((r7 + 0xc));
    0x00040820 ldr r3, [r7, 0x14]                                |     r3 = *((r7 + 0x14));
    0x00040822 add.w r0, r0, r0, lsl 1                           |     r0 += (r0 << 1);
    0x00040826 add.w r0, r3, r0, lsl 4                           |     r0 = r3 + (r0 << 4);
    0x0004082a cmp r3, r0                                        |     
                                                                 |     if (r3 >= r0) {
    0x0004082c bhs 0x4084a                                       |         goto label_81;
                                                                 |     }
                                                                 |     do {
    0x0004082e ldr r2, [r3, 0x28]                                |         r2 = *((r3 + 0x28));
    0x00040830 ldr r1, [r3, 0x2c]                                |         r1 = *((r3 + 0x2c));
    0x00040832 ands r2, r4                                       |         r2 &= r4;
    0x00040834 ands r1, r5                                       |         r1 &= r5;
    0x00040836 orrs r2, r1                                       |         r2 |= r1;
                                                                 |         if (r2 != r1) {
    0x00040838 beq 0x40844                                       |             
    0x0004083a ldr r2, [r3]                                      |             r2 = *(r3);
    0x0004083c ldr r2, [r2, 4]                                   |             r2 = *((r2 + 4));
    0x0004083e lsls r2, r2, 0x1f                                 |             r2 <<= 0x1f;
                                                                 |             if (r2 >= r2) {
    0x00040840 bpl.w 0x40ae0                                     |                 goto label_228;
                                                                 |             }
                                                                 |         }
    0x00040844 adds r3, 0x30                                     |         r3 += 0x30;
    0x00040846 cmp r0, r3                                        |         
    0x00040848 bhi 0x4082e                                       |         
                                                                 |     } while (r0 > r3);
                                                                 | label_81:
    0x0004084a uxtb r6, r6                                       |     r6 = (int8_t) r6;
    0x0004084c add.w lr, lr, -1                                  |     lr += -1;
    0x00040850 cmp r6, 1                                         |     
    0x00040852 strb.w r6, [fp, 0x29]                             |     *(arg_29h) = r6;
                                                                 |     if (r6 != 1) {
    0x00040856 bne 0x407e4                                       |         goto label_66;
                                                                 |     }
                                                                 | label_82:
    0x00040858 str.w lr, [sp, 0x3c]                              |     __asm ("str.w lr, [var_3ch]");
    0x0004085c b.w 0x3f02c                                       |     goto label_65;
                                                                 | label_164:
    0x00040860 mov ip, fp                                        |     
    0x00040862 mov r7, fp                                        |     r7 = fp;
    0x00040864 b.w 0x3f8e0                                       |     goto label_67;
                                                                 | label_209:
    0x00040868 ldr r3, [r5, 0x3c]                                |     r3 = *((r5 + 0x3c));
                                                                 |     if (r3 != 0) {
    0x0004086a cbnz r3, 0x40872                                  |         goto label_229;
                                                                 |     }
    0x0004086c b 0x40878                                         |     goto label_230;
                                                                 |     do {
    0x0004086e ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
                                                                 |         if (r3 == 0) {
    0x00040870 cbz r3, 0x40878                                   |             goto label_230;
                                                                 |         }
                                                                 | label_229:
    0x00040872 ldr r2, [r3]                                      |         r2 = *(r3);
    0x00040874 cmp fp, r2                                        |         
    0x00040876 bne 0x4086e                                       |         
                                                                 |     } while (fp != r2);
                                                                 | label_230:
    0x00040878 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0004087a add.w r2, r8, r6                                  |     r2 = r8 + r6;
    0x0004087c lsls r6, r0, 8                                    |     r6 = r0 << 8;
    0x0004087e ldr r0, [sp, 0x48]                                |     r0 = var_48h;
    0x00040880 add.w r2, r1, r2, lsl 3                           |     r2 = r1 + (r2 << 3);
    0x00040884 mvn r1, 9                                         |     r1 = ~9;
    0x00040888 ldr r2, [r2, 0x30]                                |     r2 = *((r2 + 0x30));
    0x0004088a str r3, [sp, 4]                                   |     var_4h = r3;
    0x0004088c movs r3, 0                                        |     r3 = 0;
    0x0004088e str r3, [sp]                                      |     *(sp) = r3;
    0x00040890 str r1, [sp, 8]                                   |     var_8h = r1;
    0x00040892 movs r1, 0x96                                     |     r1 = 0x96;
    0x00040894 bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x00040898 ldr r3, [r7, 0x24]                                |     r3 = *((r7 + 0x24));
    0x0004089a b.w 0x3f0ec                                       |     goto label_42;
                                                                 | label_190:
    0x0004089e ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x000408a0 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000408a2 beq.w 0x40baa                                     |         goto label_231;
                                                                 |     }
    0x000408a6 orrs r7, r3                                       |     r7 |= r3;
    0x000408a8 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000408aa ldrh r3, [r3, 0x12]                               |     r3 = *((r3 + 0x12));
    0x000408ac and r3, r3, 0x28                                  |     r3 &= 0x28;
    0x000408b0 subs r3, 0                                        |     
    0x000408b2 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x000408b4 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x000408b6 str r3, [sp, 0x60]                                |     var_60h = r3;
                                                                 | label_87:
    0x000408b8 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x000408ba cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000408bc bne.w 0x40b8e                                     |         goto label_232;
                                                                 |     }
    0x000408c0 lsls r7, r7, 2                                    |     r7 <<= 2;
    0x000408c2 adds r3, r7, 2                                    |     r3 = r7 + 2;
    0x000408c4 ldr r7, [sp, 0x1c]                                |     r7 = var_1ch;
    0x000408c6 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x000408c8 b.w 0x3fdb6                                       |     goto label_68;
                                                                 | label_216:
    0x000408cc movs r5, 0x50                                     |     r5 = 0x50;
    0x000408ce cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000408d0 beq.w 0x404a0                                     |         goto label_69;
                                                                 |     }
    0x000408d4 movs r5, 0x52                                     |     r5 = 0x52;
    0x000408d6 b 0x40a4e                                         |     goto label_233;
                                                                 | label_179:
    0x000408d8 ldr r3, [r6]                                      |     r3 = *(r6);
    0x000408da movs r2, 1                                        |     r2 = 1;
    0x000408dc strb.w r2, [r3, 0x40]                             |     *((r3 + 0x40)) = r2;
    0x000408e0 b.w 0x3fb70                                       |     goto label_70;
                                                                 | label_218:
    0x000408e4 ldr r2, [r6, 0x44]                                |     r2 = *((r6 + 0x44));
    0x000408e6 ldr r3, [r6, 0x48]                                |     r3 = *((r6 + 0x48));
    0x000408e8 ldr.w r0, [r8, 0x18]                              |     r0 = *((r8 + 0x18));
    0x000408ec str r2, [sp, 0x78]                                |     var_78h = r2;
    0x000408ee adds r4, r3, 1                                    |     r4 = r3 + 1;
    0x000408f0 adds r3, r2, 1                                    |     r3 = r2 + 1;
    0x000408f2 str r4, [r6, 0x48]                                |     *((r6 + 0x48)) = r4;
    0x000408f4 str r3, [r6, 0x44]                                |     *((r6 + 0x44)) = r3;
    0x000408f6 str r4, [sp, 0x68]                                |     var_68h = r4;
    0x000408f8 bl 0x19ed0                                        |     fcn_00019ed0 (r0);
    0x000408fc ldr.w r2, [sl, 0x2c]                              |     r2 = *((sl + 0x2c));
    0x00040900 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00040902 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00040904 ldr r2, [r2]                                      |     r2 = *(r2);
    0x00040906 adds r3, r7, r3                                   |     r3 = r7 + r3;
    0x00040908 str r0, [sp, 0x6c]                                |     var_6ch = r0;
    0x0004090a str r2, [sp, 0x7c]                                |     var_7ch = r2;
    0x0004090c add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x00040910 ldr r2, [r2, 0xc]                                 |     r2 = *((r2 + 0xc));
    0x00040912 ldr r0, [r3, 0x18]                                |     r0 = *((r3 + 0x18));
    0x00040914 movs r3, 0x12                                     |     r3 = 0x12;
    0x00040916 strb.w r3, [sb, 0x305]                            |     *((sb + 0x305)) = r3;
    0x0004091a str r2, [sp, 0x18]                                |     var_18h = r2;
    0x0004091c ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0004091e str.w r4, [sb, 0x308]                             |     __asm ("str.w r4, aav.0x000000ff");
    0x00040922 str r0, [sp, 0x50]                                |     var_50h = r0;
    0x00040924 ldrb.w r4, [r2, 0x29]                             |     r4 = *((r2 + 0x29));
    0x00040928 cmp r4, 1                                         |     
                                                                 |     if (r4 > 1) {
    0x0004092a bhi.w 0x40a5e                                     |         goto label_234;
                                                                 |     }
    0x0004092e ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00040930 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00040932 str r3, [sp, 0x54]                                |     var_54h = r3;
                                                                 | label_80:
    0x00040934 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00040936 ldrh r3, [r3, 0x22]                               |     r3 = *((r3 + 0x22));
    0x00040938 lsls r2, r3, 0x1c                                 |     r2 = r3 << 0x1c;
                                                                 |     if (r2 < r3) {
    0x0004093a bmi.w 0x40c2a                                     |         goto label_235;
                                                                 |     }
    0x0004093e ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00040940 ldrb.w r2, [r3, 0x2c]                             |     r2 = *((r3 + 0x2c));
    0x00040944 ands r2, r2, 0x20                                 |     r2 &= 0x20;
                                                                 |     if (r2 == r2) {
    0x00040948 beq.w 0x41030                                     |         goto label_236;
                                                                 |     }
    0x0004094c ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x0004094e ldr r4, [r3, 8]                                   |     r4 = *((r3 + 8));
                                                                 |     if (r4 != 0) {
    0x00040950 cbnz r4, 0x4095e                                  |         goto label_237;
                                                                 |     }
    0x00040952 b.w 0x411e4                                       |     goto label_238;
                                                                 |     do {
    0x00040956 ldr r4, [r4, 0x14]                                |         r4 = *((r4 + 0x14));
    0x00040958 cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x0004095a beq.w 0x411e4                                     |             goto label_238;
                                                                 |         }
                                                                 | label_237:
    0x0004095e ldrb.w r3, [r4, 0x37]                             |         r3 = *((r4 + 0x37));
    0x00040962 and r3, r3, 3                                     |         r3 &= 3;
    0x00040966 cmp r3, 2                                         |         
    0x00040968 bne 0x40956                                       |         
                                                                 |     } while (r3 != 2);
    0x0004096a ldr.w sl, [r6, 0x44]                              |     sl = *((r6 + 0x44));
    0x0004096e movs r1, 0x38                                     |     r1 = 0x38;
    0x00040970 ldrh r3, [r4, 0x32]                               |     r3 = *((r4 + 0x32));
    0x00040972 mov r0, r8                                        |     r0 = r8;
    0x00040974 add.w r2, sl, 1                                   |     r2 = sl + 1;
    0x00040978 str r2, [r6, 0x44]                                |     *((r6 + 0x44)) = r2;
    0x0004097a movs r2, 0                                        |     r2 = 0;
    0x0004097c str r2, [sp]                                      |     *(sp) = r2;
    0x0004097e mov r2, sl                                        |     r2 = sl;
    0x00040980 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040984 mov r1, r4                                        |     r1 = r4;
    0x00040986 mov r0, r6                                        |     r0 = r6;
    0x00040988 bl 0x220e4                                        |     fcn_000220e4 (r0, r1);
    0x0004098c b 0x41046                                         |     goto label_239;
                                                                 | label_219:
    0x0004098e ldr.w r0, [pc, 0x624]                             |     r0 = *(0x00040fb4);
    0x00040992 mov r3, r4                                        |     r3 = r4;
    0x00040994 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00040996 str.w fp, [sb, 0x308]                             |     __asm ("str.w fp, aav.0x000000ff");
    0x0004099a add r0, pc                                        |     r0 += pc;
    0x0004099c add r0, r2                                        |     r0 += r2;
    0x0004099e mov r2, fp                                        |     r2 = fp;
    0x000409a0 ldrb.w r4, [r0, 0xb50]                            |     r4 = *((r0 + 0xb50));
    0x000409a4 strb.w r4, [sb, 0x305]                            |     *((sb + 0x305)) = r4;
    0x000409a8 str r1, [sp]                                      |     *(sp) = r1;
    0x000409aa ldrb.w r1, [r0, 0xb54]                            |     r1 = *((r0 + 0xb54));
    0x000409ae mov r0, r8                                        |     r0 = r8;
    0x000409b0 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000409b4 adds r0, 1                                        |     r0++;
    0x000409b6 str.w r0, [sb, 0x30c]                             |     __asm ("str.w r0, aav.0x000000ff");
    0x000409ba b.w 0x3ffa2                                       |     goto label_71;
                                                                 | label_205:
    0x000409be str r3, [sp, 4]                                   |     var_4h = r3;
    0x000409c0 ldrd r2, r3, [sp, 0x1c]                           |     __asm ("ldrd r2, r3, [var_20h]");
    0x000409c4 str r2, [sp]                                      |     *(sp) = r2;
    0x000409c6 mvn r2, 1                                         |     r2 = ~1;
    0x000409ca b 0x401ec                                         |     goto label_72;
                                                                 | label_191:
    0x000409cc movs r3, 1                                        |     r3 = 1;
    0x000409ce movs r7, 4                                        |     r7 = 4;
    0x000409d0 str r3, [sp, 0x60]                                |     var_60h = r3;
    0x000409d2 b.w 0x3fd40                                       |     goto label_73;
                                                                 | label_159:
    0x000409d6 mov.w sl, -1                                      |     sl = -1;
    0x000409da mov r3, r7                                        |     r3 = r7;
    0x000409dc mov r4, sl                                        |     r4 = sl;
    0x000409de b.w 0x3f792                                       |     goto label_74;
                                                                 | label_170:
    0x000409e2 movs r0, 1                                        |     r0 = 1;
    0x000409e4 strb r0, [r3, 6]                                  |     *((r3 + 6)) = r0;
    0x000409e6 b.w 0x3fa62                                       |     goto label_75;
                                                                 | label_222:
    0x000409ea movs r3, 9                                        |     r3 = 9;
    0x000409ec strb.w r3, [sb, 0x305]                            |     *((sb + 0x305)) = r3;
    0x000409f0 b.w 0x3ffd6                                       |     goto label_34;
                                                                 | label_181:
    0x000409f4 ldr r5, [sp, 0x60]                                |     r5 = var_60h;
    0x000409f6 mov r2, r7                                        |     r2 = r7;
    0x000409f8 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000409fa movs r1, 0x6a                                     |     r1 = 0x6a;
    0x000409fc mov r0, r5                                        |     r0 = r5;
    0x000409fe str r3, [sp]                                      |     *(sp) = r3;
    0x00040a00 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040a04 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00040a06 movs r1, 0x10                                     |     r1 = 0x10;
    0x00040a08 mov r0, r5                                        |     r0 = r5;
    0x00040a0a mov r2, r3                                        |     r2 = r3;
    0x00040a0c str r3, [sp]                                      |     *(sp) = r3;
    0x00040a0e bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040a12 movs r1, 0x3f                                     |     r1 = 0x3f;
    0x00040a14 mov r5, r0                                        |     r5 = r0;
    0x00040a16 b.w 0x3fba6                                       |     goto label_76;
                                                                 | label_185:
    0x00040a1a mov r6, r2                                        |     r6 = r2;
    0x00040a1c movs r2, 1                                        |     r2 = 1;
    0x00040a1e strb r2, [r3, 6]                                  |     *((r3 + 6)) = r2;
    0x00040a20 b.w 0x3fc9a                                       |     goto label_38;
                                                                 | label_189:
    0x00040a24 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x00040a26 ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x00040a28 ldr r5, [sp, 0x64]                                |     r5 = var_64h;
    0x00040a2a str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00040a2c str r1, [sp, 0x5c]                                |     var_5ch = r1;
    0x00040a2e str r5, [sp, 0x50]                                |     var_50h = r5;
    0x00040a30 str r2, [sp, 0x64]                                |     var_64h = r2;
    0x00040a32 b.w 0x3fd02                                       |     goto label_59;
                                                                 | label_193:
    0x00040a36 cmp r1, 0x62                                      |     
    0x00040a38 it ls                                             |     
                                                                 |     if (r1 > 0x62) {
    0x00040a3a cmpls r0, 0x62                                    |         __asm ("cmpls r0, 0x62");
                                                                 |         goto label_240;
                                                                 |     }
                                                                 |     if (r1 > 0x62) {
                                                                 | label_240:
    0x00040a3c bhi.w 0x3fd98                                     |         goto label_77;
                                                                 |     }
                                                                 | label_194:
    0x00040a40 ldr r2, [sp, 0x68]                                |     r2 = var_68h;
    0x00040a42 movs r3, 0x62                                     |     r3 = 0x62;
    0x00040a44 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00040a46 strb r3, [r2, r1]                                 |     *((r2 + r1)) = r3;
    0x00040a48 b.w 0x3fdaa                                       |     goto label_78;
                                                                 | label_217:
    0x00040a4c movs r5, 0x51                                     |     r5 = 0x51;
                                                                 | label_233:
    0x00040a4e ldr r0, [sp, 0x44]                                |     r0 = var_44h;
    0x00040a50 mov r1, r7                                        |     r1 = r7;
    0x00040a52 bl 0x83a0                                         |     fcn_000083a0 (r0, r1);
    0x00040a56 ldr.w r2, [r8, 0x20]                              |     r2 = *((r8 + 0x20));
    0x00040a5a movs r3, 8                                        |     r3 = 8;
    0x00040a5c b 0x404ae                                         |     goto label_79;
                                                                 | label_234:
    0x00040a5e ldr r0, [sp, 0x38]                                |     r0 = var_38h;
    0x00040a60 subs r4, r4, r0                                   |     r4 -= r0;
    0x00040a62 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00040a64 subs r7, r4, 1                                    |     r7 = r4 - 1;
    0x00040a66 add.w r1, r7, r7, lsl 3                           |     r1 = r7 + (r7 << 3);
    0x00040a6a lsls r1, r1, 3                                    |     r1 <<= 3;
    0x00040a6c adds r1, 0x50                                     |     r1 += 0x50;
    0x00040a6e bl 0xd3a0                                         |     fcn_0000d3a0 (r0, r1);
    0x00040a72 str r0, [sp, 0x54]                                |     var_54h = r0;
    0x00040a74 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00040a76 beq.w 0x40112                                     |         goto label_33;
                                                                 |     }
    0x00040a7a ldrd r1, r3, [sp, 0x1c]                           |     __asm ("ldrd r1, r3, [var_20h]");
    0x00040a7e movs r2, 0x48                                     |     r2 = 0x48;
    0x00040a80 mla r1, r2, r3, r1                                |     __asm ("mla r1, r2, r3, r1");
    0x00040a84 uxtb r3, r4                                       |     r3 = (int8_t) r4;
    0x00040a86 adds r1, 8                                        |     r1 += 8;
    0x00040a88 str r3, [r0, 4]                                   |     *((r0 + 4)) = r3;
    0x00040a8a str r3, [r0], 8                                   |     *(r0) = r3;
                                                                 |     r0 += 8;
    0x00040a8e blx 0x6214                                        |     fcn_00006214 ();
    0x00040a92 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00040a94 cmp r7, 0                                         |     
    0x00040a96 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00040a98 add.w sl, r3, 8                                   |     sl = r3 + 8;
                                                                 |     if (r7 <= 0) {
    0x00040a9c ble.w 0x40934                                     |         goto label_80;
                                                                 |     }
    0x00040aa0 ldr r0, [sp, 0x54]                                |     r0 = var_54h;
    0x00040aa2 add.w r4, r4, r4, lsl 3                           |     r4 += (r4 << 3);
    0x00040aa6 add.w r3, sb, 0x298                               |     r3 = sb + 0x298;
    0x00040aaa str r5, [sp, 0x1c]                                |     var_1ch = r5;
    0x00040aac add.w r7, r3, r4, lsl 3                           |     r7 = r3 + (r4 << 3);
    0x00040ab0 add.w r4, r0, 0x50                                |     r4 = r0 + 0x50;
    0x00040ab4 mov r5, r4                                        |     r5 = r4;
    0x00040ab6 ldr r4, [sp, 0x44]                                |     r4 = var_44h;
                                                                 |     do {
    0x00040ab8 ldrb.w r1, [r4, 0x6c]                             |         r1 = *((r4 + 0x6c));
    0x00040abc mov r0, r5                                        |         r0 = r5;
    0x00040abe adds r4, 0x48                                     |         r4 += 0x48;
    0x00040ac0 movs r2, 0x48                                     |         r2 = 0x48;
    0x00040ac2 adds r5, 0x48                                     |         r5 += 0x48;
    0x00040ac4 add.w r1, r1, r1, lsl 3                           |         r1 += (r1 << 3);
    0x00040ac8 add.w r1, sl, r1, lsl 3                           |         r1 = sl + (r1 << 3);
    0x00040acc blx 0x6214                                        |         fcn_00006214 ();
    0x00040ad0 cmp r7, r4                                        |         
    0x00040ad2 bne 0x40ab8                                       |         
                                                                 |     } while (r7 != r4);
    0x00040ad4 ldr r5, [sp, 0x1c]                                |     r5 = var_1ch;
    0x00040ad6 b 0x40934                                         |     goto label_80;
                                                                 | label_228:
    0x00040ae0 cmp r0, r3                                        |     
                                                                 |     if (r0 < r3) {
    0x00040ae2 bls.w 0x4084a                                     |         goto label_81;
                                                                 |     }
    0x00040ae6 b 0x40858                                         |     goto label_82;
                                                                 | label_192:
    0x00040ae8 movs r3, 0                                        |     r3 = 0;
    0x00040aea movs r1, 0x4c                                     |     r1 = 0x4c;
    0x00040aec str r3, [sp]                                      |     *(sp) = r3;
    0x00040aee mov r0, r8                                        |     r0 = r8;
    0x00040af0 ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x00040af2 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040af6 b.w 0x3fd64                                       |     goto label_83;
                                                                 | label_220:
    0x00040afa ldrb r3, [r6, 0x13]                               |     r3 = *((r6 + 0x13));
    0x00040afc cmp r3, 7                                         |     
                                                                 |     if (r3 > 7) {
    0x00040afe bhi.w 0x4057c                                     |         goto label_84;
                                                                 |     }
    0x00040b02 add.w r2, r6, 0x74                                |     r2 = r6 + 0x74;
    0x00040b06 add.w r1, r6, 0x13c                               |     r1 = r6 + 0x13c;
                                                                 |     do {
    0x00040b0a ldr r0, [r2, 0xc]                                 |         r0 = *((r2 + 0xc));
    0x00040b0c cmp r4, r0                                        |         
                                                                 |         if (r4 == r0) {
    0x00040b0e beq.w 0x41050                                     |             goto label_241;
                                                                 |         }
    0x00040b12 adds r2, 0x14                                     |         r2 += 0x14;
    0x00040b14 cmp r2, r1                                        |         
    0x00040b16 bne 0x40b0a                                       |         
                                                                 |     } while (r2 != r1);
    0x00040b18 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x00040b1a adds r3, 6                                        |     r3 += 6;
    0x00040b1c strb r2, [r6, 0x13]                               |     *((r6 + 0x13)) = r2;
    0x00040b1e str.w r4, [r6, r3, lsl 2]                         |     __asm ("str.w r4, [r6, r3, lsl 2]");
    0x00040b22 b 0x4057c                                         |     goto label_84;
                                                                 | label_197:
    0x00040b5a movs r3, 0                                        |     r3 = 0;
    0x00040b5c mov r2, r5                                        |     r2 = r5;
    0x00040b5e str r3, [sp]                                      |     *(sp) = r3;
    0x00040b60 movs r1, 0x4c                                     |     r1 = 0x4c;
    0x00040b62 ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x00040b64 mov r0, r8                                        |     r0 = r8;
    0x00040b66 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040b6a b.w 0x3fe68                                       |     goto label_85;
                                                                 | label_225:
    0x00040b6e ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00040b70 ldr r4, [sp, 0x20]                                |     r4 = var_20h;
    0x00040b72 ldr r0, [sp, 0x6c]                                |     r0 = var_6ch;
    0x00040b74 mov r3, r1                                        |     r3 = r1;
    0x00040b76 adds r1, 1                                        |     r1++;
    0x00040b78 str r1, [sp, 0x84]                                |     var_84h = r1;
    0x00040b7a mov r2, r4                                        |     r2 = r4;
    0x00040b7c add r3, r0                                        |     r3 += r0;
    0x00040b7e movs r1, 0x1c                                     |     r1 = 0x1c;
    0x00040b80 mov r0, r8                                        |     r0 = r8;
    0x00040b82 str r4, [sp]                                      |     *(sp) = r4;
    0x00040b84 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040b88 str r4, [sp, 0x60]                                |     var_60h = r4;
    0x00040b8a b.w 0x3fe8e                                       |     goto label_86;
                                                                 | label_232:
    0x00040b8e movs r1, 4                                        |     r1 = 4;
    0x00040b90 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00040b92 str r1, [sp, 0x50]                                |     var_50h = r1;
    0x00040b94 movs r2, 0                                        |     r2 = 0;
    0x00040b96 ldr r1, [sp, 0x6c]                                |     r1 = var_6ch;
    0x00040b98 mov r0, r8                                        |     r0 = r8;
    0x00040b9a adds r7, r3, 1                                    |     r7 = r3 + 1;
    0x00040b9c str r2, [sp]                                      |     *(sp) = r2;
    0x00040b9e add r3, r1                                        |     r3 += r1;
    0x00040ba0 movs r1, 0x1c                                     |     r1 = 0x1c;
    0x00040ba2 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040ba6 b.w 0x3fdb6                                       |     goto label_68;
                                                                 | label_231:
    0x00040baa mov r7, r3                                        |     r7 = r3;
    0x00040bac movs r3, 1                                        |     r3 = 1;
    0x00040bae str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00040bb0 b 0x408b8                                         |     goto label_87;
                                                                 | label_221:
    0x00040bb2 ldr.w r3, [sl, 0x2c]                              |     r3 = *((sl + 0x2c));
    0x00040bb6 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00040bb8 ldr.w r3, [r3, r2, lsl 2]                         |     offset_17 = r2 << 2;
                                                                 |     r3 = *((r3 + offset_17));
    0x00040bbc str r3, [sp, 0x5c]                                |     var_5ch = r3;
                                                                 | label_178:
    0x00040bbe ldr r2, [sp, 0x7c]                                |     r2 = var_7ch;
    0x00040bc0 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00040bc2 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00040bc4 ldrsh.w r3, [r3, r1, lsl 1]                       |     offset_18 = r1 << 1;
                                                                 |     r3 = *((r3 + offset_18));
    0x00040bc8 cmp r3, 0                                         |     
                                                                 |     if (r3 >= 0) {
    0x00040bca blt 0x40bec                                       |         
    0x00040bcc ldr r2, [r2, 0xc]                                 |         r2 = *((r2 + 0xc));
    0x00040bce add.w r3, r3, r3, lsl 1                           |         r3 += (r3 << 1);
    0x00040bd2 ldr r2, [r2, 4]                                   |         r2 = *((r2 + 4));
    0x00040bd4 add.w r3, r2, r3, lsl 3                           |         r3 = r2 + (r3 << 3);
    0x00040bd8 ldrb r3, [r3, 0x14]                               |         r3 = *((r3 + 0x14));
                                                                 |         if (r3 != 0) {
    0x00040bda cbnz r3, 0x40bec                                  |             goto label_242;
                                                                 |         }
    0x00040bdc str r3, [sp, 0x20]                                |         var_20h = r3;
    0x00040bde movs r3, 1                                        |         r3 = 1;
    0x00040be0 str r3, [sp, 0x64]                                |         var_64h = r3;
    0x00040be2 b.w 0x3fb34                                       |         goto label_53;
                                                                 | label_223:
    0x00040be6 mov r7, sl                                        |         r7 = sl;
    0x00040be8 movs r1, 0x6a                                     |         r1 = 0x6a;
    0x00040bea b 0x40460                                         |         goto label_88;
                                                                 |     }
                                                                 | label_242:
    0x00040bec movs r3, 0                                        |     r3 = 0;
    0x00040bee str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00040bf0 b.w 0x3fb32                                       |     goto label_89;
                                                                 | label_177:
    0x00040bf4 movs r3, 1                                        |     r3 = 1;
    0x00040bf6 str r1, [sp, 0x5c]                                |     var_5ch = r1;
    0x00040bf8 b.w 0x3fb34                                       |     goto label_53;
                                                                 | label_131:
    0x00040bfc movw r4, 0xbdc0                                   |     
    0x00040c00 movt r4, 0xfff0                                   |     r4 = 0xfff0bdc0;
    0x00040c04 b.w 0x3f0d6                                       |     goto label_64;
                                                                 | label_130:
    0x00040c08 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00040c0a ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00040c0c ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x00040c0e str r3, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r3;
    0x00040c10 b.w 0x3ef1a                                       |     goto label_31;
                                                                 | label_120:
    0x00040c14 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00040c16 mov r1, r4                                        |     r1 = r4;
    0x00040c18 bl 0xfa60                                         |     fcn_0000fa60 (r0, r1);
    0x00040c1c ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00040c1e str r3, [r4, 0x2c]                                |     *((r4 + 0x2c)) = r3;
    0x00040c20 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00040c22 strd r3, r6, [r4, 0x24]                           |     __asm ("strd r3, r6, [r4, 0x24]");
    0x00040c26 b.w 0x3efc6                                       |     goto label_90;
                                                                 | label_235:
    0x00040c2a movs r3, 0                                        |     r3 = 0;
    0x00040c2c mov sl, r3                                        |     sl = r3;
    0x00040c2e str r3, [sp, 0x1c]                                |     var_1ch = r3;
                                                                 | label_102:
    0x00040c30 movs r7, 0                                        |     r7 = 0;
    0x00040c32 ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x00040c34 mov r2, r7                                        |     r2 = r7;
    0x00040c36 movs r1, 0x19                                     |     r1 = 0x19;
    0x00040c38 mov r0, r8                                        |     r0 = r8;
    0x00040c3a str r7, [sp]                                      |     *(sp) = r7;
    0x00040c3c bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040c40 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00040c42 str r0, [sp, 0x84]                                |     var_84h = r0;
    0x00040c44 ldr.w r0, [r3, 0x154]                             |     r0 = *((r3 + 0x154));
    0x00040c48 cmp r0, 1                                         |     
                                                                 |     if (r0 <= 1) {
    0x00040c4a ble.w 0x40f92                                     |         goto label_243;
                                                                 |     }
    0x00040c4e str r6, [sp, 0x20]                                |     var_20h = r6;
    0x00040c50 mov r4, r7                                        |     r4 = r7;
    0x00040c52 ldr r6, [sp, 0x10]                                |     r6 = var_10h;
                                                                 |     do {
    0x00040c54 ldr.w r3, [r6, 0x15c]                             |         r3 = *((r6 + 0x15c));
    0x00040c58 adds r2, r3, r5                                   |         r2 = r3 + r5;
    0x00040c5a ldr r1, [r3, r5]                                  |         r1 = *((r3 + r5));
    0x00040c5c ldr r3, [sp, 0x7c]                                |         r3 = var_7ch;
    0x00040c5e cmp r3, r2                                        |         
                                                                 |         if (r3 != r2) {
    0x00040c60 beq 0x40c9c                                       |             
    0x00040c62 ldr r3, [r1, 4]                                   |             r3 = *((r1 + 4));
    0x00040c64 lsls r3, r3, 0x1f                                 |             r3 <<= 0x1f;
                                                                 |             if (r3 < r3) {
    0x00040c66 bmi 0x40c9c                                       |                 goto label_99;
                                                                 |             }
    0x00040c68 ldrb r3, [r2, 0x14]                               |             r3 = *((r2 + 0x14));
    0x00040c6a ands r3, r3, 0x12                                 |             r3 &= 0x12;
                                                                 |             if (r3 != r3) {
    0x00040c6e bne 0x40c9c                                       |                 goto label_99;
                                                                 |             }
    0x00040c70 ldrh r2, [r2, 0x12]                               |             r2 = *((r2 + 0x12));
    0x00040c72 ubfx r2, r2, 0, 0xc                               |             r2 = (r2 >> 0) & ((1 << 0xc) - 1);
                                                                 |             if (r2 == 0) {
    0x00040c76 cbz r2, 0x40c9c                                   |                 goto label_99;
                                                                 |             }
    0x00040c78 mov r2, r3                                        |             r2 = r3;
    0x00040c7a ldr r0, [sp, 0x28]                                |             r0 = var_28h;
    0x00040c7c bl 0xe5fc                                         |             r0 = fcn_0000e5fc (r0, r1, r2, r3, r4, r5);
    0x00040c80 mov r2, r0                                        |             r2 = r0;
    0x00040c82 cmp r4, 0                                         |             
                                                                 |             if (r4 == 0) {
    0x00040c84 beq.w 0x40fe4                                     |                 goto label_244;
                                                                 |             }
    0x00040c88 cmp r0, 0                                         |             
                                                                 |             if (r0 == 0) {
    0x00040c8a beq.w 0x40fe6                                     |                 goto label_245;
                                                                 |             }
    0x00040c8e mov r1, r4                                        |             r1 = r4;
    0x00040c90 ldr r0, [sp, 0x28]                                |             r0 = var_28h;
    0x00040c92 bl 0x13020                                        |             r0 = fcn_00013020 (r0, r1, r2);
    0x00040c96 mov r4, r0                                        |             r4 = r0;
    0x00040c98 ldr.w r0, [r6, 0x154]                             |             r0 = *((r6 + 0x154));
                                                                 |         }
                                                                 | label_99:
    0x00040c9c adds r7, 1                                        |         r7++;
    0x00040c9e adds r5, 0x30                                     |         r5 += 0x30;
    0x00040ca0 cmp r7, r0                                        |         
    0x00040ca2 blt 0x40c54                                       |         
                                                                 |     } while (r7 < r0);
    0x00040ca4 ldr r6, [sp, 0x20]                                |     r6 = var_20h;
    0x00040ca6 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00040ca8 beq.w 0x40f92                                     |         goto label_243;
                                                                 |     }
    0x00040cac mov r3, r4                                        |     r3 = r4;
    0x00040cae movs r4, 0                                        |     r4 = 0;
    0x00040cb0 mov r2, r4                                        |     r2 = r4;
    0x00040cb2 movs r1, 0x48                                     |     r1 = 0x48;
    0x00040cb4 mov r0, r6                                        |     r0 = r6;
    0x00040cb6 str r4, [sp]                                      |     *(sp) = r4;
    0x00040cb8 bl 0x1cd60                                        |     fcn_0001cd60 (r0, r1, r2, r3, r4);
    0x00040cbc ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00040cbe str r0, [sp, 0x74]                                |     var_74h = r0;
    0x00040cc0 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x00040cc2 cmp r2, r4                                        |     
                                                                 |     if (r2 <= r4) {
    0x00040cc4 ble.w 0x41028                                     |         goto label_246;
                                                                 |     }
                                                                 | label_97:
    0x00040cc8 movs r3, 0                                        |     r3 = 0;
    0x00040cca movs r1, 0xf0                                     |     r1 = 0xf0;
    0x00040ccc mov r7, r3                                        |     r7 = r3;
    0x00040cce str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00040cd0 str r1, [sp, 0x70]                                |     var_70h = r1;
    0x00040cd2 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00040cd4 str.w fp, [sp, 0x64]                              |     __asm ("str.w fp, [var_64h]");
    0x00040cd8 str.w sb, [sp, 0x80]                              |     __asm ("str.w sb, [var_80h]");
    0x00040cdc b 0x40d94                                         |     goto label_247;
                                                                 | label_92:
    0x00040cde ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00040ce0 ldr r1, [sp, 0x50]                                |     r1 = var_50h;
    0x00040ce2 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00040ce4 ldrb.w r4, [r1, 0x2c]                             |     r4 = *((r1 + 0x2c));
    0x00040ce8 subs r3, 1                                        |     r3--;
    0x00040cea cmp r3, r7                                        |     
    0x00040cec ite ne                                            |     
                                                                 |     if (r3 == r7) {
    0x00040cee movne r5, r7                                      |         r5 = r7;
                                                                 |     }
                                                                 |     if (r3 != r7) {
    0x00040cf0 moveq r5, -1                                      |         r5 = -1;
                                                                 |     }
    0x00040cf4 ands r4, r4, 0x20                                 |     r4 &= 0x20;
    0x00040cf8 str r5, [sp, 0x44]                                |     var_44h = r5;
                                                                 |     if (r4 != r4) {
    0x00040cfa bne.w 0x40e46                                     |         goto label_248;
                                                                 |     }
    0x00040cfe ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00040d00 mov.w r2, -1                                      |     r2 = -1;
    0x00040d04 mov r0, r6                                        |     r0 = r6;
    0x00040d06 str r4, [sp, 4]                                   |     var_4h = r4;
    0x00040d08 str r3, [sp]                                      |     *(sp) = r3;
    0x00040d0a ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x00040d0c bl 0x26204                                        |     fcn_00026204 (r0, r1, r2, r3, r4, r5);
    0x00040d10 mov r3, r4                                        |     r3 = r4;
    0x00040d12 strd r0, r5, [sp]                                 |     __asm ("strd r0, r5, [sp]");
    0x00040d16 mov r2, sl                                        |     r2 = sl;
    0x00040d18 movs r1, 0x80                                     |     r1 = 0x80;
    0x00040d1a mov r0, r8                                        |     r0 = r8;
    0x00040d1c bl 0x19a3c                                        |     r0 = fcn_00019a3c (r0, r1, r2, r3, r4, r5);
    0x00040d20 mov sb, r0                                        |     sb = r0;
                                                                 | label_95:
    0x00040d22 movs r3, 0                                        |     r3 = 0;
    0x00040d24 movs r1, 0x11                                     |     r1 = 0x11;
    0x00040d26 str r3, [sp]                                      |     *(sp) = r3;
    0x00040d28 mov r0, r8                                        |     r0 = r8;
    0x00040d2a ldrd r2, r3, [sp, 0x68]                           |     __asm ("ldrd r2, r3, [var_6ch]");
    0x00040d2e bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040d32 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x00040d36 beq 0x40d56                                       |         
    0x00040d38 ldr.w r3, [r8, 0x20]                              |         r3 = *((r8 + 0x20));
    0x00040d3c cmp sb, r3                                        |         
    0x00040d3e itttt lo                                          |         
                                                                 |         if (sb >= r3) {
    0x00040d40 ldrlo r2, [r8, 4]                                 |             r2 = *((r8 + 4));
                                                                 |         }
                                                                 |         if (sb >= r3) {
    0x00040d44 addlo r1, sb, sb, lsl 2                           |             r1 = sb + (sb << 2);
                                                                 |         }
                                                                 |         if (sb < r3) {
    0x00040d48 add.w r2, r2, r1, lsl 2                           |             r2 += (r1 << 2);
                                                                 |         }
                                                                 |         if (sb < r3) {
    0x00040d4c str r3, [r2, 8]                                   |             *((r2 + 8)) = r3;
                                                                 |         }
    0x00040d4e subs r3, 1                                        |         r3--;
    0x00040d50 ldr.w r2, [r8, 0x18]                              |         r2 = *((r8 + 0x18));
    0x00040d54 str r3, [r2, 0x58]                                |         *((r2 + 0x58)) = r3;
                                                                 |     }
                                                                 | label_93:
    0x00040d56 ldrb.w r3, [fp, 0x27]                             |     r3 = *(arg_27h);
    0x00040d5a ldr.w r2, [fp, 0x318]                             |     r2 = *(arg_318h);
    0x00040d5e cmp r3, 0                                         |     
    0x00040d60 ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x00040d62 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x00040d64 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00040d66 str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00040d68 ldr r3, [r2, 0x24]                                |     r3 = *((r2 + 0x24));
    0x00040d6a ands r3, r3, 0x200                                |     r3 &= 0x200;
                                                                 |     if (r3 != r3) {
    0x00040d6e beq 0x40d80                                       |         
    0x00040d70 ldr r3, [r2, 0x1c]                                |         r3 = *((r2 + 0x1c));
    0x00040d72 cmp r7, 0                                         |         
                                                                 |         if (r7 == 0) {
    0x00040d74 beq 0x40e1e                                       |             goto label_249;
                                                                 |         }
    0x00040d76 ldr r2, [sp, 0x20]                                |         r2 = var_20h;
    0x00040d78 cmp r2, r3                                        |         
    0x00040d7a it ne                                             |         
                                                                 |         if (r2 == r3) {
    0x00040d7c movne r3, 0                                       |             r3 = 0;
                                                                 |         }
                                                                 |         if (r2 == r3) {
    0x00040d7e beq 0x40e1e                                       |             goto label_249;
                                                                 |         }
                                                                 |     }
    0x00040d80 str r3, [sp, 0x20]                                |     var_20h = r3;
                                                                 | label_94:
    0x00040d82 mov r0, fp                                        |     r0 = fp;
    0x00040d84 bl 0x18dcc                                        |     fcn_00018dcc (r0);
                                                                 | label_91:
    0x00040d88 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00040d8a ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
                                                                 |     do {
    0x00040d8c adds r7, 1                                        |         r7++;
    0x00040d8e cmp r7, r2                                        |         
                                                                 |         if (r7 >= r2) {
    0x00040d90 bge.w 0x40efe                                     |             goto label_250;
                                                                 |         }
                                                                 | label_247:
    0x00040d94 ldr r1, [sp, 0x18]                                |         r1 = var_18h;
    0x00040d96 add.w r3, r7, r7, lsl 1                           |         r3 = r7 + (r7 << 1);
    0x00040d9a ldr r5, [sp, 0x64]                                |         r5 = var_64h;
    0x00040d9c lsls r3, r3, 4                                    |         r3 <<= 4;
    0x00040d9e ldr r1, [r1, 0x14]                                |         r1 = *((r1 + 0x14));
    0x00040da0 adds r0, r1, r3                                   |         r0 = r1 + r3;
    0x00040da2 ldr r4, [r0, 8]                                   |         r4 = *((r0 + 8));
    0x00040da4 cmp r5, r4                                        |         
                                                                 |         if (r5 == r4) {
    0x00040da6 beq 0x40dae                                       |             goto label_251;
                                                                 |         }
    0x00040da8 ldrh r0, [r0, 0x12]                               |         r0 = *((r0 + 0x12));
    0x00040daa lsls r0, r0, 0x16                                 |         r0 <<= 0x16;
    0x00040dac bpl 0x40d8c                                       |         
                                                                 |     } while (r0 >= r0);
                                                                 | label_251:
    0x00040dae ldr r2, [r1, r3]                                  |     r2 = *((r1 + r3));
    0x00040db0 ldr r1, [sp, 0x74]                                |     r1 = var_74h;
                                                                 |     if (r1 != 0) {
    0x00040db2 cbz r1, 0x40dbe                                   |         
    0x00040db4 ldr r3, [r2, 4]                                   |         r3 = *((r2 + 4));
    0x00040db6 lsls r3, r3, 0x1f                                 |         r3 <<= 0x1f;
    0x00040db8 itt pl                                            |         
                                                                 |         if (r3 < r3) {
    0x00040dba strpl r2, [r1, 0xc]                               |             *((r1 + 0xc)) = r2;
                                                                 |         }
                                                                 |         if (r3 >= r3) {
    0x00040dbc movpl r2, r1                                      |             r2 = r1;
                                                                 |             goto label_252;
                                                                 |         }
                                                                 |     }
                                                                 | label_252:
    0x00040dbe ldr r3, [sp, 0x78]                                |     r3 = var_78h;
    0x00040dc0 mov r0, r6                                        |     r0 = r6;
    0x00040dc2 ldr r1, [sp, 0x54]                                |     r1 = var_54h;
    0x00040dc4 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00040dc6 ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x00040dc8 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00040dca movs r3, 0                                        |     r3 = 0;
    0x00040dcc str r3, [sp]                                      |     *(sp) = r3;
    0x00040dce bl 0x3ec04                                        |     r0 = fcn_0003ec04 (r0, r1, r2, r3, r4, r5, r6);
    0x00040dd2 mov fp, r0                                        |     
    0x00040dd4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00040dd6 beq 0x40d88                                       |         goto label_91;
                                                                 |     }
    0x00040dd8 ldrb.w r3, [r6, 0x1c2]                            |     r3 = *((r6 + 0x1c2));
    0x00040ddc cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x00040dde bne 0x40e00                                       |         
    0x00040de0 movs r1, 0                                        |         r1 = 0;
    0x00040de2 ldr.w r3, [r0, 0x318]                             |         r3 = *((r0 + 0x318));
    0x00040de6 ldrb.w r2, [r0, 0x304]                            |         r2 = *((r0 + 0x304));
    0x00040dea mov r0, r6                                        |         r0 = r6;
    0x00040dec str r1, [sp, 8]                                   |         var_8h = r1;
    0x00040dee ldr r1, [sp, 0x80]                                |         r1 = var_80h;
    0x00040df0 ldrb.w r1, [r1, 0x304]                            |         r1 = *((r1 + 0x304));
    0x00040df4 str r1, [sp, 4]                                   |         var_4h = r1;
    0x00040df6 ldr r1, [sp, 0x38]                                |         r1 = var_38h;
    0x00040df8 str r1, [sp]                                      |         *(sp) = r1;
    0x00040dfa ldr r1, [sp, 0x54]                                |         r1 = var_54h;
    0x00040dfc bl 0x201b4                                        |         fcn_000201b4 (r0, r1, r2, r3);
                                                                 |     }
    0x00040e00 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00040e02 ldrh r3, [r3, 0x22]                               |     r3 = *((r3 + 0x22));
    0x00040e04 lsls r5, r3, 0x1c                                 |     r5 = r3 << 0x1c;
    0x00040e06 it mi                                             |     
                                                                 |     if (r5 < r3) {
    0x00040e08 movmi r3, 0                                       |         r3 = 0;
                                                                 |         goto label_253;
                                                                 |     }
                                                                 |     if (r5 >= r3) {
                                                                 | label_253:
    0x00040e0a bpl.w 0x40cde                                     |         goto label_92;
                                                                 |     }
                                                                 | label_98:
    0x00040e0e str r3, [sp]                                      |     *(sp) = r3;
    0x00040e10 movs r1, 0x11                                     |     r1 = 0x11;
    0x00040e12 ldrd r2, r3, [sp, 0x68]                           |     __asm ("ldrd r2, r3, [var_6ch]");
    0x00040e16 mov r0, r8                                        |     r0 = r8;
    0x00040e18 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040e1c b 0x40d56                                         |     goto label_93;
                                                                 | label_249:
    0x00040e1e ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00040e20 ldrb.w r2, [r2, 0x2c]                             |     r2 = *((r2 + 0x2c));
    0x00040e24 lsls r4, r2, 0x1a                                 |     r4 = r2 << 0x1a;
                                                                 |     if (r4 >= r2) {
    0x00040e26 bpl 0x40ef4                                       |         goto label_254;
                                                                 |     }
    0x00040e28 ldrb.w r2, [r3, 0x37]                             |     r2 = *((r3 + 0x37));
    0x00040e2c and r2, r2, 3                                     |     r2 &= 3;
    0x00040e30 cmp r2, 2                                         |     
    0x00040e32 movw r2, 0x10f0                                   |     r2 = 0x10f0;
    0x00040e36 it eq                                             |     
                                                                 |     if (r2 != 2) {
    0x00040e38 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00040e3a str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00040e3c ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x00040e3e it ne                                             |     
                                                                 |     if (r2 == 2) {
    0x00040e40 movne r3, r2                                      |         r3 = r2;
                                                                 |     }
    0x00040e42 str r3, [sp, 0x70]                                |     var_70h = r3;
    0x00040e44 b 0x40d82                                         |     goto label_94;
                                                                 | label_248:
    0x00040e46 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00040e48 ldr.w sb, [r3, 8]                                 |     sb = *((r3 + 8));
    0x00040e4c cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00040e50 beq.w 0x411f0                                     |         goto label_255;
                                                                 |     }
    0x00040e54 mov r2, sb                                        |     r2 = sb;
    0x00040e56 b 0x40e60                                         |     
                                                                 |     while (r3 != 2) {
    0x00040e58 ldr r2, [r2, 0x14]                                |         r2 = *((r2 + 0x14));
    0x00040e5a cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00040e5c beq.w 0x411f0                                     |             goto label_255;
                                                                 |         }
    0x00040e60 ldrb.w r3, [r2, 0x37]                             |         r3 = *((r2 + 0x37));
    0x00040e64 and r3, r3, 3                                     |         r3 &= 3;
    0x00040e68 cmp r3, 2                                         |         
    0x00040e6a bne 0x40e58                                       |         
                                                                 |     }
    0x00040e6c ldrd r3, r5, [r6, 0x38]                           |     __asm ("ldrd r3, r5, [r6, 0x38]");
    0x00040e70 mov sb, r2                                        |     sb = r2;
    0x00040e72 ldrh r4, [r2, 0x32]                               |     r4 = *((r2 + 0x32));
    0x00040e74 cmp r4, r3                                        |     
    0x00040e76 iteee gt                                          |     
                                                                 |     if (r4 <= r3) {
    0x00040e78 ldrgt r3, [r6, 0x48]                              |         r3 = *((r6 + 0x48));
                                                                 |     }
                                                                 |     if (r4 > r3) {
    0x00040e7a suble r3, r3, r4                                  |         r3 -= r4;
                                                                 |     }
                                                                 |     if (r4 > r3) {
    0x00040e7c strle r3, [r6, 0x38]                              |         *((r6 + 0x38)) = r3;
                                                                 |     }
                                                                 |     if (r4 > r3) {
    0x00040e7e addle r3, r4, r5                                  |         r3 = r4 + r5;
                                                                 |     }
    0x00040e80 iteee le                                          |     
                                                                 |     if (r4 > r3) {
    0x00040e82 strle r3, [r6, 0x3c]                              |         *((r6 + 0x3c)) = r3;
                                                                 |     }
                                                                 |     if (r4 <= r3) {
    0x00040e84 addgt r5, r3, 1                                   |         r5 = r3 + 1;
                                                                 |     }
                                                                 |     if (r4 <= r3) {
    0x00040e86 addgt r3, r3, r4                                  |         r3 += r4;
                                                                 |     }
                                                                 |     if (r4 <= r3) {
    0x00040e88 strgt r3, [r6, 0x48]                              |         *((r6 + 0x48)) = r3;
                                                                 |     }
                                                                 |     if (r4 == 0) {
    0x00040e8a cbz r4, 0x40eb4                                   |         goto label_256;
                                                                 |     }
    0x00040e8c movs r3, 0                                        |     r3 = 0;
    0x00040e8e str r7, [sp, 0x90]                                |     var_90h = r7;
    0x00040e90 mov r7, r3                                        |     r7 = r3;
                                                                 |     do {
    0x00040e92 ldr.w r3, [sb, 4]                                 |         r3 = *((sb + 4));
    0x00040e96 mov r0, r6                                        |         r0 = r6;
    0x00040e98 ldr r1, [sp, 0x50]                                |         r1 = var_50h;
    0x00040e9a ldrsh.w r2, [r3, r7, lsl 1]                       |         offset_19 = r7 << 1;
                                                                 |         r2 = *((r3 + offset_19));
    0x00040e9e movs r3, 0                                        |         r3 = 0;
    0x00040ea0 str r3, [sp, 4]                                   |         var_4h = r3;
    0x00040ea2 adds r3, r5, r7                                   |         r3 = r5 + r7;
    0x00040ea4 str r3, [sp]                                      |         *(sp) = r3;
    0x00040ea6 adds r7, 1                                        |         r7++;
    0x00040ea8 ldr r3, [sp, 0x64]                                |         r3 = var_64h;
    0x00040eaa bl 0x26204                                        |         fcn_00026204 (r0, r1, r2, r3, r4, r5);
    0x00040eae cmp r4, r7                                        |         
    0x00040eb0 bne 0x40e92                                       |         
                                                                 |     } while (r4 != r7);
    0x00040eb2 ldr r7, [sp, 0x90]                                |     r7 = var_90h;
                                                                 | label_256:
    0x00040eb4 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00040eb6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00040eb8 bne 0x40fb8                                       |         goto label_257;
                                                                 |     }
    0x00040eba ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00040ebc mov r2, r5                                        |     r2 = r5;
    0x00040ebe movs r1, 0x30                                     |     r1 = 0x30;
    0x00040ec0 mov r0, r8                                        |     r0 = r8;
    0x00040ec2 str r3, [sp]                                      |     *(sp) = r3;
    0x00040ec4 mov r3, r4                                        |     r3 = r4;
    0x00040ec6 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040eca ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x00040ecc movs r1, 0x6c                                     |     r1 = 0x6c;
    0x00040ece ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00040ed0 mov r0, r8                                        |     r0 = r8;
    0x00040ed2 str r2, [sp]                                      |     *(sp) = r2;
    0x00040ed4 mov r2, sl                                        |     r2 = sl;
    0x00040ed6 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040eda mov r2, r4                                        |     r2 = r4;
    0x00040edc mov r1, r5                                        |     r1 = r5;
    0x00040ede mov r0, r6                                        |     r0 = r6;
    0x00040ee0 bl 0xaea0                                         |     fcn_0000aea0 (r0, r1, r2);
    0x00040ee4 ldr r3, [r6, 0x38]                                |     r3 = *((r6 + 0x38));
    0x00040ee6 cmp r4, r3                                        |     
                                                                 |     if (r4 <= r3) {
    0x00040ee8 ble 0x40fa8                                       |         goto label_258;
                                                                 |     }
    0x00040eea ldr.w sb, [sp, 0x44]                              |     sb = var_44h;
    0x00040eee strd r4, r5, [r6, 0x38]                           |     __asm ("strd r4, r5, [r6, 0x38]");
    0x00040ef2 b 0x40d22                                         |     goto label_95;
                                                                 | label_254:
    0x00040ef4 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00040ef6 movw r3, 0x10f0                                   |     r3 = 0x10f0;
    0x00040efa str r3, [sp, 0x70]                                |     var_70h = r3;
    0x00040efc b 0x40d82                                         |     goto label_94;
                                                                 | label_250:
    0x00040efe ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00040f00 ldr.w sb, [sp, 0x80]                              |     sb = var_80h;
    0x00040f04 ldr.w fp, [sp, 0x64]                              |     fp = var_64h;
    0x00040f08 str.w r3, [sb, 0x310]                             |     __asm ("str.w r3, aav.0x000000ff");
                                                                 |     if (r3 != 0) {
    0x00040f0c cbz r3, 0x40f14                                   |         
    0x00040f0e ldr r3, [sp, 0x78]                                |         r3 = var_78h;
    0x00040f10 str.w r3, [sb, 0x2e8]                             |         __asm ("str.w r3, aav.0x000000ff");
                                                                 |     }
                                                                 | label_101:
    0x00040f14 ldr r2, [sp, 0x74]                                |     r2 = var_74h;
                                                                 |     if (r2 != 0) {
    0x00040f16 cbz r2, 0x40f24                                   |         
    0x00040f18 movs r3, 0                                        |         r3 = 0;
    0x00040f1a ldr r0, [sp, 0x28]                                |         r0 = var_28h;
    0x00040f1c mov r1, r2                                        |         r1 = r2;
    0x00040f1e str r3, [r2, 0xc]                                 |         *((r2 + 0xc)) = r3;
    0x00040f20 bl 0x12e68                                        |         fcn_00012e68 (r0);
                                                                 |     }
                                                                 | label_96:
    0x00040f24 ldr.w r1, [r8, 0x20]                              |     r1 = *((r8 + 0x20));
    0x00040f28 mov r0, r8                                        |     r0 = r8;
    0x00040f2a ldr r3, [sp, 0x84]                                |     r3 = var_84h;
    0x00040f2c cmp r3, r1                                        |     
    0x00040f2e ittt lo                                           |     
                                                                 |     if (r3 >= r1) {
    0x00040f30 ldrlo r2, [r8, 4]                                 |         r2 = *((r8 + 4));
                                                                 |     }
                                                                 |     if (r3 >= r1) {
    0x00040f34 addlo r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
                                                                 |     }
                                                                 |     if (r3 < r1) {
    0x00040f38 add.w r2, r2, r3, lsl 2                           |         r2 += (r3 << 2);
                                                                 |     }
    0x00040f3c ldr.w r3, [sb, 0x2ec]                             |     r3 = *((sb + 0x2ec));
    0x00040f40 it lo                                             |     
                                                                 |     if (r3 >= r1) {
    0x00040f42 strlo r1, [r2, 4]                                 |         *((r2 + 4)) = r1;
                                                                 |     }
    0x00040f44 movs r2, 0                                        |     r2 = 0;
    0x00040f46 str r2, [sp]                                      |     *(sp) = r2;
    0x00040f48 movs r1, 0x10                                     |     r1 = 0x10;
    0x00040f4a bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040f4e ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x00040f50 ldr.w r2, [r8, 0x18]                              |     r2 = *((r8 + 0x18));
    0x00040f54 mvns r3, r3                                       |     r3 = ~r3;
                                                                 |     if (r3 >= r3) {
    0x00040f56 bmi 0x40f64                                       |         
    0x00040f58 ldr r1, [r2, 0x70]                                |         r1 = *((r2 + 0x70));
                                                                 |         if (r1 == 0) {
    0x00040f5a cbz r1, 0x40f64                                   |             goto label_259;
                                                                 |         }
    0x00040f5c ldr.w r0, [r8, 0x20]                              |         r0 = *((r8 + 0x20));
    0x00040f60 str.w r0, [r1, r3, lsl 2]                         |         __asm ("str.w r0, [r1, r3, lsl 2]");
                                                                 |     }
                                                                 | label_259:
    0x00040f64 ldr.w r3, [r8, 0x20]                              |     r3 = *((r8 + 0x20));
    0x00040f68 subs r3, 1                                        |     r3--;
    0x00040f6a str r3, [r2, 0x58]                                |     *((r2 + 0x58)) = r3;
    0x00040f6c ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00040f6e ldrb.w r3, [r3, 0x29]                             |     r3 = *((r3 + 0x29));
    0x00040f72 cmp r3, 1                                         |     
                                                                 |     if (r3 >= 1) {
    0x00040f74 bls 0x40f7e                                       |         
    0x00040f76 ldr r1, [sp, 0x54]                                |         r1 = var_54h;
    0x00040f78 ldr r0, [sp, 0x28]                                |         r0 = var_28h;
    0x00040f7a bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
                                                                 |     }
    0x00040f7e ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x00040f80 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00040f82 bne.w 0x3ffd6                                     |         goto label_34;
                                                                 |     }
    0x00040f86 ldr r1, [sp, 0x7c]                                |     r1 = var_7ch;
    0x00040f88 ldr r0, [sp, 0x5c]                                |     r0 = var_5ch;
    0x00040f8a bl 0x83a0                                         |     fcn_000083a0 (r0, r1);
    0x00040f8e b.w 0x3ffd6                                       |     goto label_34;
                                                                 | label_243:
    0x00040f92 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00040f94 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x00040f96 movs r3, 0                                        |     r3 = 0;
    0x00040f98 cmp r2, 0                                         |     
    0x00040f9a itt le                                            |     
                                                                 |     if (r2 > 0) {
    0x00040f9c strle r3, [sb, 0x310]                             |         *((sb + 0x310)) = r3;
                                                                 |     }
                                                                 |     if (r2 > 0) {
    0x00040fa0 str r3, [sp, 0x60]                                |         var_60h = r3;
                                                                 |         goto label_260;
                                                                 |     }
                                                                 |     if (r2 <= 0) {
                                                                 | label_260:
    0x00040fa2 ble 0x40f24                                       |         goto label_96;
                                                                 |     }
    0x00040fa4 str r3, [sp, 0x74]                                |     var_74h = r3;
    0x00040fa6 b 0x40cc8                                         |     goto label_97;
                                                                 | label_258:
    0x00040fa8 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00040faa b 0x40e0e                                         |     goto label_98;
                                                                 | label_257:
    0x00040fb8 movs r3, 0                                        |     r3 = 0;
    0x00040fba mov r2, sl                                        |     r2 = sl;
    0x00040fbc movs r1, 0x43                                     |     r1 = 0x43;
    0x00040fbe mov r0, r8                                        |     r0 = r8;
    0x00040fc0 strd r5, r4, [sp]                                 |     __asm ("strd r5, r4, [sp]");
    0x00040fc4 bl 0x19a3c                                        |     fcn_00019a3c (r0, r1, r2, r3, r4, r5);
    0x00040fc8 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00040fca mov sb, r0                                        |     sb = r0;
    0x00040fcc adds r3, 1                                        |     r3++;
                                                                 |     if (r3 != 1) {
    0x00040fce bne 0x40fec                                       |         goto label_261;
                                                                 |     }
                                                                 | label_100:
    0x00040fd0 mov r2, r4                                        |     r2 = r4;
    0x00040fd2 mov r1, r5                                        |     r1 = r5;
    0x00040fd4 mov r0, r6                                        |     r0 = r6;
    0x00040fd6 bl 0xaea0                                         |     fcn_0000aea0 (r0, r1, r2);
    0x00040fda ldr r3, [r6, 0x38]                                |     r3 = *((r6 + 0x38));
    0x00040fdc cmp r4, r3                                        |     
                                                                 |     if (r4 <= r3) {
    0x00040fde ble.w 0x40d22                                     |         goto label_95;
                                                                 |     }
                                                                 | label_244:
    0x00040fe4 mov r4, r0                                        |     r4 = r0;
                                                                 | label_245:
    0x00040fe6 ldr.w r0, [r6, 0x154]                             |     r0 = *((r6 + 0x154));
    0x00040fea b 0x40c9c                                         |     goto label_99;
                                                                 | label_261:
    0x00040fec ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00040fee mov r2, r5                                        |     r2 = r5;
    0x00040ff0 movs r1, 0x30                                     |     r1 = 0x30;
    0x00040ff2 mov r0, r8                                        |     r0 = r8;
    0x00040ff4 str r3, [sp]                                      |     *(sp) = r3;
    0x00040ff6 mov r3, r4                                        |     r3 = r4;
    0x00040ff8 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040ffc movs r2, 0                                        |     r2 = 0;
    0x00040ffe ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00041000 str r2, [sp]                                      |     *(sp) = r2;
    0x00041002 movs r1, 0x6c                                     |     r1 = 0x6c;
    0x00041004 mov r2, sl                                        |     r2 = sl;
    0x00041006 mov r0, r8                                        |     r0 = r8;
    0x00041008 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004100c ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x00041010 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00041012 beq 0x40fd0                                       |         goto label_100;
                                                                 |     }
    0x00041014 ldr.w r2, [r8, 0x20]                              |     r2 = *((r8 + 0x20));
    0x00041018 add.w r2, r2, r2, lsl 2                           |     r2 += (r2 << 2);
    0x0004101c add.w r3, r3, r2, lsl 2                           |     r3 += (r2 << 2);
    0x00041020 movs r2, 0x10                                     |     r2 = 0x10;
    0x00041022 strb r2, [r3, -0x11]                              |     *((r3 - 0x11)) = r2;
    0x00041026 b 0x40fd0                                         |     goto label_100;
                                                                 | label_246:
    0x00041028 str.w r4, [sb, 0x310]                             |     __asm ("str.w r4, aav.0x000000ff");
    0x0004102c str r4, [sp, 0x60]                                |     var_60h = r4;
    0x0004102e b 0x40f14                                         |     goto label_101;
                                                                 | label_236:
    0x00041030 ldr r3, [r6, 0x48]                                |     r3 = *((r6 + 0x48));
    0x00041032 movs r1, 0x1c                                     |     r1 = 0x1c;
    0x00041034 mov r0, r8                                        |     r0 = r8;
    0x00041036 add.w sl, r3, 1                                   |     sl = r3 + 1;
    0x0004103a str.w sl, [r6, 0x48]                              |     __asm ("str.w sl, [r6, 0x48]");
    0x0004103e mov r3, sl                                        |     r3 = sl;
    0x00041040 str r2, [sp]                                      |     *(sp) = r2;
    0x00041042 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
                                                                 | label_239:
    0x00041046 ldr r3, [r6, 0x48]                                |     r3 = *((r6 + 0x48));
    0x00041048 adds r3, 1                                        |     r3++;
    0x0004104a str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0004104c str r3, [r6, 0x48]                                |     *((r6 + 0x48)) = r3;
    0x0004104e b 0x40c30                                         |     goto label_102;
                                                                 | label_241:
    0x00041050 movs r3, 1                                        |     r3 = 1;
    0x00041052 strb r3, [r2, 6]                                  |     *((r2 + 6)) = r3;
    0x00041054 b.w 0x4057c                                       |     goto label_84;
                                                                 | label_226:
    0x00041058 mov r8, r4                                        |     r8 = r4;
    0x0004105a mov sb, r4                                        |     sb = r4;
    0x0004105c b.w 0x4078e                                       |     goto label_103;
                                                                 | label_224:
    0x00041060 movs r3, 1                                        |     r3 = 1;
    0x00041062 strb r3, [r2, 6]                                  |     *((r2 + 6)) = r3;
    0x00041064 b.w 0x4065c                                       |     goto label_104;
                                                                 | label_124:
    0x00041068 blx 0x6498                                        |     fcn_00006498 ();
                                                                 | label_148:
    0x0004106c movs r3, 0                                        |     r3 = 0;
    0x0004106e mov r2, r3                                        |     r2 = r3;
                                                                 | label_149:
    0x00041070 strd r3, r2, [r4, 8]                              |     __asm ("strd r3, r2, [r4, 8]");
    0x00041074 movs r2, 1                                        |     r2 = 1;
    0x00041076 ldr.w r3, [fp, 8]                                 |     r3 = *(arg_110h);
    0x0004107a str.w sl, [fp, 0x2e4]                             |     __asm ("str.w sl, [arg_2e4h]");
    0x0004107e strh.w r2, [fp, 0x20]                             |     *(arg_20h) = r2;
                                                                 |     if (r3 != 0) {
    0x00041082 cbz r3, 0x4108a                                   |         
    0x00041084 ldr r3, [r3]                                      |         r3 = *(r3);
    0x00041086 strb.w r3, [fp, 0x24]                             |         *(arg_24h) = r3;
                                                                 |     }
    0x0004108a ldrh.w r3, [fp, 0x22]                             |     r3 = *(arg_22h);
    0x0004108e lsls r5, r3, 0x15                                 |     r5 = r3 << 0x15;
    0x00041090 itt mi                                            |     
                                                                 |     if (r5 >= r3) {
    0x00041092 movmi r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r5 >= r3) {
    0x00041094 strbmi r3, [fp, 0x28]                             |         *(arg_28h) = r3;
                                                                 |     }
    0x00041098 b.w 0x3eff8                                       |     goto label_105;
                                                                 | label_147:
    0x0004109c ldr r5, [r5, 8]                                   |     r5 = *((r5 + 8));
                                                                 |     if (r5 != 0) {
    0x0004109e cbnz r5, 0x410a8                                  |         goto label_262;
                                                                 |     }
    0x000410a0 b 0x41152                                         |     goto label_263;
                                                                 |     do {
                                                                 | label_106:
    0x000410a2 ldr r5, [r5, 0x14]                                |         r5 = *((r5 + 0x14));
    0x000410a4 cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x000410a6 beq 0x41152                                       |             goto label_263;
                                                                 |         }
                                                                 | label_262:
    0x000410a8 ldrb.w r3, [r5, 0x36]                             |         r3 = *((r5 + 0x36));
    0x000410ac cmp r3, 0                                         |         
    0x000410ae beq 0x410a2                                       |         
                                                                 |     } while (r3 == 0);
    0x000410b0 ldr r2, [r5, 0x24]                                |     r2 = *((r5 + 0x24));
    0x000410b2 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000410b4 bne 0x410a2                                       |         goto label_106;
                                                                 |     }
    0x000410b6 ldrh r3, [r5, 0x32]                               |     r3 = *((r5 + 0x32));
    0x000410b8 cmp r3, 4                                         |     
                                                                 |     if (r3 > 4) {
    0x000410ba bhi 0x410a2                                       |         goto label_106;
                                                                 |     }
    0x000410bc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000410be beq 0x41168                                       |         goto label_264;
                                                                 |     }
    0x000410c0 mov r8, r2                                        |     r8 = r2;
    0x000410c2 b 0x410d4                                         |     
                                                                 |     while (r0 != 0) {
    0x000410c4 ldr r2, [r4, 0x2c]                                |         r2 = *((r4 + 0x2c));
    0x000410c6 ldrh r3, [r5, 0x32]                               |         r3 = *((r5 + 0x32));
    0x000410c8 str.w r0, [r2, r8, lsl 2]                         |         __asm ("str.w r0, [r2, r8, lsl 2]");
    0x000410cc add.w r8, r8, 1                                   |         r8++;
    0x000410d0 cmp r8, r3                                        |         
                                                                 |         if (r8 >= r3) {
    0x000410d2 bge 0x410f2                                       |             goto label_265;
                                                                 |         }
    0x000410d4 ldr r3, [r5, 4]                                   |         r3 = *((r5 + 4));
    0x000410d6 mov r1, sl                                        |         r1 = sl;
    0x000410d8 mov r0, r7                                        |         r0 = r7;
    0x000410da ldrsh.w r2, [r3, r8, lsl 1]                       |         offset_20 = r8 << 1;
                                                                 |         r2 = *((r3 + offset_20));
    0x000410de movs r3, 2                                        |         r3 = 2;
    0x000410e0 str r5, [sp, 0xc]                                 |         var_ch = r5;
    0x000410e2 str r3, [sp, 8]                                   |         var_8h = r3;
    0x000410e4 vstr d8, [sp]                                     |         __asm ("vstr d8, [sp]");
    0x000410e8 bl 0x231d0                                        |         r0 = fcn_000231d0 (r0, r1, r2, r3, r4, r5);
    0x000410ec cmp r0, 0                                         |         
    0x000410ee bne 0x410c4                                       |         
                                                                 |     }
    0x000410f0 ldrh r3, [r5, 0x32]                               |     r3 = *((r5 + 0x32));
                                                                 | label_265:
    0x000410f2 cmp r3, r8                                        |     
                                                                 |     if (r3 != r8) {
    0x000410f4 bne 0x410a2                                       |         goto label_106;
                                                                 |     }
                                                                 | label_109:
    0x000410f6 ldrb.w r3, [r5, 0x37]                             |     r3 = *((r5 + 0x37));
    0x000410fa movw r2, 0x1201                                   |     r2 = 0x1201;
    0x000410fe str r2, [r4, 0x24]                                |     *((r4 + 0x24)) = r2;
    0x00041100 ands r3, r3, 0x20                                 |     r3 &= 0x20;
                                                                 |     if (r3 != r3) {
    0x00041104 bne 0x41190                                       |         goto label_266;
                                                                 |     }
    0x00041106 ldr r2, [r6, 0x40]                                |     r2 = *((r6 + 0x40));
    0x00041108 ldrh r1, [r5, 0x34]                               |     r1 = *((r5 + 0x34));
    0x0004110a ldr.w lr, [r5, 4]                                 |     
    0x0004110e str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x00041110 ldr r2, [r6, 0x44]                                |     r2 = *((r6 + 0x44));
    0x00041112 str r2, [sp, 0x20]                                |     var_20h = r2;
    0x00041114 subs r2, r1, 1                                    |     r2 = r1 - 1;
                                                                 |     if (r1 == 0) {
    0x00041116 cbz r1, 0x4116c                                   |         goto label_267;
                                                                 |     }
    0x00041118 add.w r2, lr, r2, lsl 1                           |     r2 = lr + (r2 << 1);
    0x0004111c mov r6, r3                                        |     r6 = r3;
    0x0004111e movs r7, 1                                        |     r7 = 1;
    0x00041120 b 0x41128                                         |     
                                                                 |     while (r1 > 0x3e) {
                                                                 | label_107:
    0x00041122 ldr r1, [sp, 0x18]                                |         r1 = var_18h;
    0x00041124 cmp lr, r1                                        |         
                                                                 |         if (lr == r1) {
    0x00041126 beq 0x4116e                                       |             goto label_268;
                                                                 |         }
    0x00041128 ldrsh.w r1, [r2]                                  |         r1 = *(r2);
    0x0004112c str r2, [sp, 0x18]                                |         var_18h = r2;
    0x0004112e subs r2, 2                                        |         r2 -= 2;
    0x00041130 cmp r1, 0x3e                                      |         
    0x00041132 bhi 0x41122                                       |         
                                                                 |     }
    0x00041134 sub.w r0, r1, 0x20                                |     r0 = r1 - 0x20;
    0x00041138 rsb.w ip, r1, 0x20                                |     
    0x0004113c lsl.w r0, r7, r0                                  |     r0 = r7 << r0;
    0x00041140 lsr.w ip, r7, ip                                  |     
    0x00041144 lsl.w r1, r7, r1                                  |     r1 = r7 << r1;
    0x00041148 orr.w r0, r0, ip                                  |     r0 |= ip;
    0x0004114c orrs r6, r0                                       |     r6 |= r0;
    0x0004114e orrs r3, r1                                       |     r3 |= r1;
    0x00041150 b 0x41122                                         |     goto label_107;
                                                                 | label_263:
    0x00041152 ldr r3, [r4, 0x24]                                |     r3 = *((r4 + 0x24));
    0x00041154 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00041156 bne.w 0x3f46c                                     |         goto label_108;
                                                                 |     }
    0x0004115a ldr.w fp, [sp, 0xac]                              |     fp = var_ach;
    0x0004115e ldr r4, [sp, 0xb8]                                |     r4 = var_b8h;
    0x00041160 ldr.w r6, [fp, 4]                                 |     r6 = *(arg_4h);
    0x00041164 b.w 0x3ee1c                                       |     goto label_10;
                                                                 | label_264:
    0x00041168 mov r8, r3                                        |     r8 = r3;
    0x0004116a b 0x410f6                                         |     goto label_109;
                                                                 | label_267:
    0x0004116c mov r6, r3                                        |     r6 = r3;
                                                                 | label_268:
    0x0004116e ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00041170 bic.w r2, r2, r3                                  |     r2 = BIT_MASK (r2, r3);
    0x00041174 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00041176 bic.w r3, r3, r6                                  |     r3 = BIT_MASK (r3, r6);
    0x0004117a orrs r3, r2                                       |     r3 |= r2;
                                                                 |     if (r3 != r2) {
    0x0004117c beq 0x41190                                       |         
    0x0004117e uxth.w r3, r8                                     |         r3 = (int16_t) r8;
    0x00041182 str r5, [r4, 0x1c]                                |         *((r4 + 0x1c)) = r5;
    0x00041184 strh r3, [r4, 0x28]                               |         *((r4 + 0x28)) = r3;
    0x00041186 strh r3, [r4, 0x18]                               |         *((r4 + 0x18)) = r3;
    0x00041188 movs r3, 0x27                                     |         r3 = 0x27;
    0x0004118a strh r3, [r4, 0x14]                               |         *((r4 + 0x14)) = r3;
    0x0004118c b.w 0x3f46c                                       |         goto label_108;
                                                                 |     }
                                                                 | label_266:
    0x00041190 uxth.w r8, r8                                     |     r8 = (int16_t) r8;
    0x00041194 movw r3, 0x1241                                   |     r3 = 0x1241;
    0x00041198 str r3, [r4, 0x24]                                |     *((r4 + 0x24)) = r3;
    0x0004119a movs r3, 0x27                                     |     r3 = 0x27;
    0x0004119c str r5, [r4, 0x1c]                                |     *((r4 + 0x1c)) = r5;
    0x0004119e strh.w r8, [r4, 0x28]                             |     *((r4 + 0x28)) = r8;
    0x000411a2 strh.w r8, [r4, 0x18]                             |     *((r4 + 0x18)) = r8;
    0x000411a6 strh r3, [r4, 0x14]                               |     *((r4 + 0x14)) = r3;
    0x000411a8 b.w 0x3f46c                                       |     goto label_108;
                                                                 | label_212:
    0x000411ac ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000411ae add.w r1, r8, r6                                  |     r1 = r8 + r6;
    0x000411b2 add.w r1, r3, r1, lsl 3                           |     r1 = r3 + (r1 << 3);
    0x000411b6 ldrd r3, r1, [r1, 0x40]                           |     __asm ("ldrd r3, r1, [r1, 0x40]");
    0x000411ba orrs.w r0, r3, r1                                 |     r0 = r3 | r1;
                                                                 |     if (r0 == r3) {
    0x000411be beq 0x411d0                                       |         goto label_269;
                                                                 |     }
                                                                 |     do {
    0x000411c0 lsrs r3, r3, 1                                    |         r3 >>= 1;
    0x000411c2 adds r2, 1                                        |         r2++;
    0x000411c4 orr.w r3, r3, r1, lsl 31                          |         r3 |= (r1 << 31);
    0x000411c8 lsrs r1, r1, 1                                    |         r1 >>= 1;
    0x000411ca orrs.w r0, r3, r1                                 |         r0 = r3 | r1;
    0x000411ce bne 0x411c0                                       |         
                                                                 |     } while (r0 != r3);
                                                                 | label_269:
    0x000411d0 ldr r0, [sp, 0x48]                                |     r0 = var_48h;
    0x000411d2 mvn r3, 0xd                                       |     r3 = ~0xd;
    0x000411d6 ldr r1, [r0, 0x20]                                |     r1 = *((r0 + 0x20));
    0x000411d8 subs r1, 1                                        |     r1--;
    0x000411da bl 0x1021c                                        |     fcn_0001021c (r0, r1, r2, r3);
    0x000411de ldr r3, [r7, 0x24]                                |     r3 = *((r7 + 0x24));
    0x000411e0 b.w 0x3f0ec                                       |     goto label_42;
                                                                 | label_238:
    0x000411e4 ldr r3, [r6, 0x44]                                |     r3 = *((r6 + 0x44));
    0x000411e6 movs r2, 0                                        |     r2 = 0;
    0x000411e8 ldrh r2, [r2, 0x32]                               |     r2 = *((r2 + 0x32));
    0x000411ea adds r3, 1                                        |     r3++;
    0x000411ec str r3, [r6, 0x44]                                |     *((r6 + 0x44)) = r3;
    0x000411ee udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | label_255:
    0x000411f0 movs r3, 0                                        |     r3 = 0;
    0x000411f2 ldrh r3, [r3, 0x32]                               |     r3 = *((r3 + 0x32));
    0x000411f4 udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | label_153:
    0x000411f6 movs r3, 0                                        |     r3 = 0;
    0x000411f8 ldrb r3, [r3]                                     |     r3 = *(r3);
    0x000411fa udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x4d1a8 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                                                 |                                ((n & 0x0000ff00) <<  8) | \
                                                                 |                                ((n & 0x00ff0000) >>  8) | \
                                                                 |                                ((n & 0xff000000) >> 24)))
                                                                 |  
    ; (fcn) fcn.0004d1a8 ()                                      | void fcn_0004d1a8 (int16_t arg_4h, int16_t arg_10h, int16_t arg_14h, int16_t arg_18h, int16_t arg_20h, int16_t arg_24h, int16_t arg_3eh, int16_t arg_3fh, int16_t arg_40h, int16_t arg_42h, int16_t arg_45h, int16_t arg_48h, int16_t arg_50h, int16_t arg_54h, int16_t arg_89h, int16_t arg_8ch, int16_t arg_90h, int16_t arg_94h, int16_t arg_a4h, int16_t arg_c4h, int16_t arg_c8h, int16_t arg_e8h, int16_t arg_11ch, int16_t arg_120h, int16_t arg_124h, int16_t arg_140h, int16_t arg_1bch, int16_t arg_1e0h, int16_t arg_1e8h, int16_t arg_1f0h, int16_t arg_1f4h, int16_t arg_1f8h, int16_t arg_1fch, int16_t arg_200h, int16_t arg_0h, int16_t arg_1ch, int16_t arg_28h, int16_t arg_2ch, int16_t arg_30h, int16_t arg_34h, int16_t arg_38h, int16_t arg_3ch, int16_t arg_44h, int16_t arg_4ch, int16_t arg_58h, int16_t arg_5ch, int16_t arg_64h, int16_t arg_68h, int16_t arg_6ch, int16_t arg_70h, int16_t arg_74h, int16_t arg_78h, int16_t arg_7ch, int16_t arg_80h, int16_t arg_84h, int16_t arg_88h, int16_t arg_98h, int16_t arg_a8h, int16_t arg_ach, int16_t arg_b0h, int16_t arg_b4h, int16_t arg_d8h, int16_t arg_dch, int16_t arg_deh, int16_t arg_e0h, int16_t arg_f4h, int16_t arg_fch, int16_t arg_feh, int16_t arg_100h, int16_t arg_108h, int16_t arg_110h, int16_t arg_114h, int16_t arg_118h, int16_t arg_128h, int16_t arg_12ch, int16_t arg_1ech, int16_t arg1) {
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_64h;
                                                                 |     int16_t var_68h;
                                                                 |     int16_t var_6ch;
                                                                 |     int16_t var_70h;
                                                                 |     int16_t var_74h;
                                                                 |     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_1ech;
                                                                 |     r0 = arg1;
    0x0004d1a8 ldr r2, [pc, 0x26c]                               |     
    0x0004d1aa push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0004d1ae vpush {d8, d9, d10, d11, d12, d13}                |     __asm ("vpush {d8, d9, d10, d11, d12, d13}");
    0x0004d1b2 sub sp, 0x1f4                                     |     
    0x0004d1b4 add r2, pc                                        |     r2 = 0x9a5d0;
    0x0004d1b6 str r2, [sp, 0x78]                                |     var_78h = r2;
    0x0004d1b8 ldr r2, [pc, 0x260]                               |     
    0x0004d1ba ldr r3, [pc, 0x264]                               |     r3 = *(0x4d422);
    0x0004d1bc str r0, [sp, 0x24]                                |     *(arg_24h) = r0;
    0x0004d1be add r2, pc                                        |     
    0x0004d1c0 ldr r3, [r2, r3]                                  |     
    0x0004d1c2 ldrd fp, r2, [r0]                                 |     __asm ("ldrd fp, r2, [r0]");
    0x0004d1c6 ldr r3, [r3]                                      |     r3 = *(0x9a5de);
    0x0004d1c8 str r3, [sp, 0x1ec]                               |     var_1ech = r3;
    0x0004d1ca mov.w r3, 0                                       |     r3 = 0;
    0x0004d1cc lsls r0, r0, 0xc                                  |     r0 <<= 0xc;
    0x0004d1ce ldr r3, [r0, 0x64]                                |     r3 = *((r0 + 0x64));
    0x0004d1d0 str r2, [sp, 0x40]                                |     *(arg_40h) = r2;
    0x0004d1d2 ldr r2, [r0, 8]                                   |     r2 = *((r0 + 8));
    0x0004d1d4 str r2, [sp, 0x44]                                |     var_44h = r2;
    0x0004d1d6 ldr.w r2, [fp, 0x10]                              |     r2 = *(arg_10h);
    0x0004d1da ldr r2, [r2, 0xc]                                 |     r2 = *(0x9a5ea);
    0x0004d1dc ldrb.w r2, [r2, 0x4d]                             |     r2 = *((r2 + 0x4d));
    0x0004d1e0 str r2, [sp, 0x70]                                |     var_70h = r2;
    0x0004d1e2 ldr.w r2, [fp, 0x20]                              |     r2 = *(arg_20h);
    0x0004d1e6 str r2, [sp, 0x68]                                |     var_68h = r2;
    0x0004d1e8 ldr.w r2, [fp, 0x24]                              |     r2 = *(arg_24h);
    0x0004d1ec str r2, [sp, 0x6c]                                |     var_6ch = r2;
                                                                 |     if (r3 != 0) {
    0x0004d1ee cbz r3, 0x4d1f4                                   |         
    0x0004d1f0 bl 0xd1c8                                         |         fcn_0000d1c8 (r0);
                                                                 |     }
    0x0004d1f4 ldr r1, [sp, 0x24]                                |     r1 = *(arg_24h);
    0x0004d1f6 ldr r3, [r1, 0x50]                                |     r3 = *((r1 + 0x50));
    0x0004d1f8 cmp r3, 7                                         |     
                                                                 |     if (r3 == 7) {
    0x0004d1fa beq.w 0x4d50a                                     |         goto label_291;
                                                                 |     }
    0x0004d1fe ldr.w r2, [fp, 0xe8]                              |     r2 = *(arg_e8h);
    0x0004d202 movs r3, 0                                        |     r3 = 0;
    0x0004d204 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0004d208 str r3, [r1, 0x50]                                |     *((r1 + 0x50)) = r3;
    0x0004d20a str r3, [r1, 0x14]                                |     *((r1 + 0x14)) = r3;
    0x0004d20c vstr d16, [r1, 0x88]                              |     __asm ("vstr d16, [r1, 0x88]");
    0x0004d210 str.w r3, [fp, 0x1bc]                             |     __asm ("str.w r3, [arg_1bch]");
    0x0004d214 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0004d216 bne.w 0x4d428                                     |         goto label_292;
                                                                 |     }
    0x0004d21a ldr.w r3, [fp, 0x11c]                             |     r3 = *(arg_11ch);
    0x0004d21e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004d220 beq.w 0x4d872                                     |         goto label_293;
                                                                 |     }
    0x0004d224 ldr r0, [r1, 0x7c]                                |     r0 = *((r1 + 0x7c));
    0x0004d226 ldr.w r1, [fp, 0x124]                             |     r1 = *(arg_124h);
    0x0004d22a str r1, [sp, 0x74]                                |     var_74h = r1;
    0x0004d22c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004d22e bne.w 0x4d86a                                     |         goto label_294;
                                                                 |     }
                                                                 | label_5:
    0x0004d232 ldr r3, [sp, 0x24]                                |     r3 = *(arg_24h);
    0x0004d234 mov.w r2, 0xca00                                  |     r2 = 0xca00;
    0x0004d238 vldr d10, [pc, 0x1cc]                             |     __asm ("vldr d10, aav.0x000000ff");
    0x0004d23c movt r2, 0x3b9a                                   |     r2 = (r2 & 0xFFFF) | 0x3b9a0000;
    0x0004d240 vldr d9, [pc, 0x1cc]                              |     __asm ("vldr d9, aav.0x000000ff");
    0x0004d244 ldr r3, [r3, 0x4c]                                |     r3 = *((r3 + 0x4c));
    0x0004d246 vmov.i64 d8, 0                                    |     __asm ("vmov.i64 d8, 0");
    0x0004d24a str r2, [sp, 0x8c]                                |     *(arg_8ch) = r2;
    0x0004d24c movw r2, 0xda3                                    |     
    0x0004d250 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0004d252 movt r2, 0xbdf2                                   |     r2 = 0xbdf20da3;
    0x0004d256 ldr r3, [pc, 0x1cc]                               |     
    0x0004d258 str r2, [sp, 0x84]                                |     var_84h = r2;
    0x0004d25a add r3, pc                                        |     r3 = 0x9a684;
    0x0004d25c str r3, [sp, 0x88]                                |     var_88h = r3;
    0x0004d25e movs r3, 0                                        |     r3 = 0;
    0x0004d260 str r3, [sp, 0x80]                                |     var_80h = r3;
    0x0004d262 str r3, [sp, 0x7c]                                |     var_7ch = r3;
    0x0004d264 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x0004d266 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x0004d268 str r3, [sp, 0x64]                                |     var_64h = r3;
                                                                 | label_2:
    0x0004d26a ldrb.w r4, [fp, 0x40]                             |     r4 = *(arg_40h);
    0x0004d26e cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x0004d270 bne.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x0004d274 ldr r3, [sp, 0x30]                                |     r3 = *(arg_30h);
    0x0004d276 ldr r2, [sp, 0x40]                                |     r2 = *(arg_40h);
    0x0004d278 adds r3, 1                                        |     r3++;
    0x0004d27a str r3, [sp, 0x30]                                |     *(arg_30h) = r3;
    0x0004d27c ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004d27e add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004d282 add.w r2, r2, r3, lsl 2                           |     r2 += (r3 << 2);
    0x0004d286 ldrb r3, [r2, 2]                                  |     r3 = *((r2 + 2));
    0x0004d288 str r2, [sp, 0x20]                                |     *(arg_20h) = r2;
    0x0004d28a lsls r1, r3, 0x1e                                 |     r1 = r3 << 0x1e;
                                                                 |     if (r1 >= r3) {
    0x0004d28c bpl 0x4d2ae                                       |         goto label_295;
                                                                 |     }
    0x0004d28e ldr r3, [r2, 8]                                   |     r3 = *((r2 + 8));
    0x0004d290 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004d292 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004d296 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004d29a movw r2, 0x2460                                   |     r2 = 0x2460;
    0x0004d29e str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x0004d2a0 ldrh r3, [r3, 0x1c]                               |     r3 = *((r3 + 0x1c));
    0x0004d2a2 tst r2, r3                                        |     
    0x0004d2a4 bne.w 0x4d3fc                                     |     
                                                                 |     while (1) {
    0x0004d2a8 ldr r2, [sp, 0x38]                                |         r2 = *(arg_38h);
    0x0004d2aa movs r3, 4                                        |         r3 = 4;
    0x0004d2ac strh r3, [r2, 0x1c]                               |         *((r2 + 0x1c)) = r3;
                                                                 | label_295:
    0x0004d2ae ldr r3, [sp, 0x20]                                |         r3 = *(arg_20h);
    0x0004d2b0 ldrb.w r8, [r3]                                   |         r8 = *(r3);
    0x0004d2b4 add.w sb, r8, -1                                  |         sb = r8 + -1;
    0x0004d2b8 cmp.w sb, 0x9b                                    |         
                                                                 |         if (sb > 0x9b) {
    0x0004d2bc bhi.w 0x540ee                                     |             goto label_296;
                                                                 |         }
                                                                 |         /* switch table (157 cases) at 0x4d2c4 */
    0x0004d2c0 tbh [pc, sb, lsl 1]                               |         __asm ("tbh [pc, sb, lsl 1]");
    0x0004d3fc ldr r0, [sp, 0x38]                                |         r0 = *(arg_38h);
    0x0004d3fe bl 0xfe84                                         |         fcn_0000fe84 (r0);
    0x0004d402 b 0x4d2a8                                         |         
                                                                 |     }
                                                                 | label_292:
    0x0004d428 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x0004d42a str r3, [sp, 0x64]                                |     var_64h = r3;
    0x0004d42c str r3, [sp, 0x1c]                                |     var_1ch = r3;
                                                                 | label_8:
    0x0004d42e ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0004d430 movs r4, 9                                        |     r4 = 9;
    0x0004d432 ldr.w r3, [pc, 0xb4c]                             |     
    0x0004d436 mov r1, fp                                        |     r1 = fp;
    0x0004d438 ldr.w r2, [pc, 0xb48]                             |     r2 = *(0x0004df84);
    0x0004d43c str r4, [r0, 0x50]                                |     *((r0 + 0x50)) = r4;
    0x0004d43e adds r0, 0x2c                                     |     r0 += 0x2c;
    0x0004d440 add r3, pc                                        |     r3 = 0x9b3c6;
    0x0004d442 add r2, pc                                        |     r2 += pc;
    0x0004d444 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x0004d448 mov r0, r4                                        |     r0 = r4;
                                                                 | label_1:
    0x0004d44a ldr r4, [sp, 0x24]                                |     r4 = *((sp + 0x24));
    0x0004d44c ldr.w r1, [pc, 0xb38]                             |     r1 = *(0x0004df88);
    0x0004d450 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004d452 ldr r3, [r4, 0x2c]                                |     r3 = *((r4 + 0x2c));
    0x0004d454 str r0, [r4, 0x50]                                |     *((r4 + 0x50)) = r0;
    0x0004d456 add r1, pc                                        |     r1 += pc;
    0x0004d458 str r3, [sp]                                      |     *(sp) = r3;
    0x0004d45a ldr.w r3, [r4, 0xa8]                              |     r3 = *((r4 + 0xa8));
    0x0004d45e blx 0x6820                                        |     fcn_00006820 ();
    0x0004d462 mov r0, r4                                        |     r0 = r4;
    0x0004d464 bl 0x335d0                                        |     fcn_000335d0 (r0);
                                                                 | label_3:
    0x0004d468 ldr r3, [sp, 0x64]                                |     r3 = *(arg_64h);
    0x0004d46a movs r4, 1                                        |     r4 = 1;
    0x0004d46c cbnz r3, 0x4d4b4                                  |     
                                                                 |     while (r4 == 1) {
                                                                 | label_0:
    0x0004d46e ldr r3, [sp, 0x68]                                |         r3 = *(arg_68h);
    0x0004d470 ldr r1, [sp, 0x24]                                |         r1 = *((sp + 0x24));
    0x0004d472 ldr r0, [sp, 0x30]                                |         r0 = *(arg_30h);
    0x0004d474 str.w r3, [fp, 0x20]                              |         __asm ("str.w r3, [arg_20h]");
    0x0004d478 ldr r3, [sp, 0x6c]                                |         r3 = *(arg_6ch);
    0x0004d47a ldr r2, [r1, 0x64]                                |         r2 = *((r1 + 0x64));
    0x0004d47c str.w r3, [fp, 0x24]                              |         __asm ("str.w r3, [fp, 0x24]");
    0x0004d480 ldr r3, [r1, 0x7c]                                |         r3 = *((r1 + 0x7c));
    0x0004d482 add r3, r0                                        |         r3 += r0;
    0x0004d484 str r3, [r1, 0x7c]                                |         *((r1 + 0x7c)) = r3;
                                                                 |         if (r2 != 0) {
    0x0004d486 cbz r2, 0x4d48e                                   |             
    0x0004d488 mov r0, r1                                        |             r0 = r1;
    0x0004d48a bl 0x11824                                        |             fcn_00011824 (r0);
                                                                 |         }
    0x0004d48e ldr.w r2, [pc, 0xafc]                             |         r2 = *(0x0004df8c);
    0x0004d492 ldr.w r3, [pc, 0xafc]                             |         r3 = *(0x4df92);
    0x0004d496 add r2, pc                                        |         r2 += pc;
    0x0004d498 ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x0004d49a ldr r2, [r3]                                      |         r2 = *(0x4df92);
    0x0004d49c ldr r3, [sp, 0x1ec]                               |         r3 = *(arg_1ech);
    0x0004d49e eors r2, r3                                       |         r2 ^= r3;
    0x0004d4a0 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0004d4a4 bne.w 0x53f26                                     |             goto label_297;
                                                                 |         }
    0x0004d4a8 mov r0, r4                                        |         r0 = r4;
    0x0004d4aa add sp, 0x1f4                                     |         
    0x0004d4ac vpop {d8, d9, d10, d11, d12, d13}                 |         __asm ("vpop {d8, d9, d10, d11, d12, d13}");
    0x0004d4b0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x0004d4b4 subs r4, r3, 1                                    |         r4 = r3 - 1;
    0x0004d4b6 ldr.w r3, [fp, 0x10]                              |         r3 = *(arg_10h);
    0x0004d4ba add.w r3, r3, r4, lsl 4                           |         r3 += (r4 << 4);
    0x0004d4be ldr r0, [r3, 0xc]                                 |         r0 = *((r3 + 0xc));
    0x0004d4c0 bl 0x1386c                                        |         fcn_0001386c (r0);
    0x0004d4c4 cmp r4, 1                                         |         
    0x0004d4c6 beq 0x4d46e                                       |         
                                                                 |     }
    0x0004d4c8 ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004d4cc movs r4, 1                                        |     r4 = 1;
    0x0004d4ce ldr r0, [r3, 0x1c]                                |     r0 = *((r3 + 0x1c));
    0x0004d4d0 bl 0x1386c                                        |     fcn_0001386c (r0);
    0x0004d4d4 b 0x4d46e                                         |     goto label_0;
                                                                 | label_15:
    0x0004d4d6 bic r3, r3, 0x1c00                                |     r3 = BIT_MASK (r3, 0x1c00);
    0x0004d4da orr r3, r3, 0x1000                                |     r3 |= 0x1000;
    0x0004d4de strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
                                                                 | label_16:
    0x0004d4e0 mov r0, r4                                        |     r0 = r4;
    0x0004d4e2 bl 0x17410                                        |     r0 = fcn_00017410 (r0);
    0x0004d4e6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004d4e8 beq.w 0x4e75e                                     |         goto label_298;
                                                                 |     }
                                                                 | label_6:
    0x0004d4ec ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004d4ee add.w r4, r3, 0x2c                                |     r4 = r3 + 0x2c;
                                                                 |     do {
                                                                 | label_24:
    0x0004d4f2 ldr.w r2, [pc, 0xaa0]                             |         
    0x0004d4f6 movs r3, 1                                        |         r3 = 1;
    0x0004d4f8 mov r0, r4                                        |         r0 = r4;
    0x0004d4fa mov r1, fp                                        |         r1 = fp;
    0x0004d4fc strb.w r3, [fp, 0x40]                             |         *(arg_40h) = r3;
    0x0004d500 add r2, pc                                        |         r2 = 0x9b49a;
    0x0004d502 bl 0x1c9d0                                        |         fcn_0001c9d0 (r0, r1);
    0x0004d506 movs r0, 7                                        |         r0 = 7;
    0x0004d508 b 0x4d44a                                         |         goto label_1;
                                                                 | label_291:
    0x0004d50a ldr r3, [sp, 0x24]                                |         r3 = *(arg_24h);
    0x0004d50c add.w r4, r3, 0x2c                                |         r4 = r3 + 0x2c;
    0x0004d510 movs r3, 0                                        |         r3 = 0;
    0x0004d512 str r3, [sp, 0x30]                                |         var_30h = r3;
    0x0004d514 str r3, [sp, 0x64]                                |         var_64h = r3;
    0x0004d516 str r3, [sp, 0x1c]                                |         var_1ch = r3;
    0x0004d518 b 0x4d4f2                                         |         
                                                                 |     } while (1);
    0x0004d51a ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004d51c ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004d51e ldr r7, [r3, 4]                                   |     r7 = *((r3 + 4));
    0x0004d520 ldr r4, [r3, 0xc]                                 |     r4 = *((r3 + 0xc));
    0x0004d522 add.w r7, r7, r7, lsl 2                           |     r7 += (r7 << 2);
    0x0004d526 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004d52a add.w r7, r2, r7, lsl 3                           |     r7 = r2 + (r7 << 3);
    0x0004d52e add.w r4, r2, r4, lsl 3                           |     r4 = r2 + (r4 << 3);
    0x0004d532 ldrb r2, [r3, 3]                                  |     r2 = *((r3 + 3));
    0x0004d534 ldrh r5, [r7, 0x1c]                               |     r5 = *((r7 + 0x1c));
    0x0004d536 ldrh r6, [r4, 0x1c]                               |     r6 = *((r4 + 0x1c));
    0x0004d538 orr.w r3, r5, r6                                  |     r3 = r5 | r6;
    0x0004d53c lsls r0, r3, 0x1f                                 |     r0 = r3 << 0x1f;
                                                                 |     if (r0 < r3) {
    0x0004d53e bmi.w 0x50fa6                                     |         goto label_299;
                                                                 |     }
    0x0004d542 ands r8, r2, 0x67                                 |     r8 = r2 & 0x67;
    0x0004d546 it eq                                             |     
                                                                 |     if (r8 != r2) {
    0x0004d548 moveq r3, r5                                      |         r3 = r5;
                                                                 |     }
                                                                 |     if (r8 != r2) {
    0x0004d54a bne.w 0x52c28                                     |         goto label_300;
                                                                 |     }
                                                                 | label_171:
    0x0004d54e lsls r2, r3, 0x11                                 |     r2 = r3 << 0x11;
                                                                 |     if (r2 < r3) {
    0x0004d550 bmi.w 0x52c1e                                     |         goto label_301;
                                                                 |     }
                                                                 | label_170:
    0x0004d554 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004d556 lsls r3, r3, 0x11                                 |     r3 <<= 0x11;
                                                                 |     if (r3 < r3) {
    0x0004d558 bmi.w 0x52c14                                     |         goto label_302;
                                                                 |     }
                                                                 | label_169:
    0x0004d55c ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004d55e mov r1, r7                                        |     r1 = r7;
    0x0004d560 mov r0, r4                                        |     r0 = r4;
    0x0004d562 ldr r2, [r2, 0x10]                                |     r2 = *((r2 + 0x10));
    0x0004d564 bl 0x21bfc                                        |     fcn_00021bfc (r0, r1, r2);
    0x0004d568 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004d56a mov r3, r0                                        |     r3 = r0;
    0x0004d56c ldrb.w r8, [r2]                                   |     r8 = *(r2);
    0x0004d570 ldrb r2, [r2, 3]                                  |     r2 = *((r2 + 3));
                                                                 | label_158:
    0x0004d572 sub.w r8, r8, 0x4e                                |     r8 -= 0x4e;
    0x0004d576 cmp.w r8, 4                                       |     
                                                                 |     if (r8 > 4) {
    0x0004d57a bhi.w 0x51656                                     |         goto label_303;
                                                                 |     }
                                                                 |     /* switch table (6 cases) at 0x4d582 */
    0x0004d57e tbh [pc, r8, lsl 1]                               |     __asm ("tbh [pc, r8, lsl 1]");
    0x0004d58c ldr r7, [sp, 0x20]                                |     r7 = *(arg_20h);
    0x0004d58e ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004d590 ldr r6, [r7, 4]                                   |     r6 = *((r7 + 4));
    0x0004d592 add.w r6, r6, r6, lsl 2                           |     r6 += (r6 << 2);
    0x0004d594 lsls r6, r0, 0x1a                                 |     r6 = r0 << 0x1a;
    0x0004d596 add.w r6, r3, r6, lsl 3                           |     r6 = r3 + (r6 << 3);
    0x0004d59a mov r0, r6                                        |     r0 = r6;
    0x0004d59c bl 0xa31c                                         |     fcn_0000a31c (r0);
    0x0004d5a0 ldr r5, [r7, 8]                                   |     r5 = *((r7 + 8));
    0x0004d5a2 mov sl, r0                                        |     sl = r0;
    0x0004d5a4 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004d5a6 add.w r5, r5, r5, lsl 2                           |     r5 += (r5 << 2);
    0x0004d5aa add.w r5, r3, r5, lsl 3                           |     r5 = r3 + (r5 << 3);
    0x0004d5ac lsls r5, r0, 0x17                                 |     r5 = r0 << 0x17;
    0x0004d5ae mov r0, r5                                        |     r0 = r5;
    0x0004d5b0 bl 0xa31c                                         |     fcn_0000a31c (r0);
    0x0004d5b4 ldr r3, [r7, 0xc]                                 |     r3 = *((r7 + 0xc));
    0x0004d5b6 mov sb, r0                                        |     sb = r0;
    0x0004d5b8 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004d5ba add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004d5be add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004d5c2 ldrh r2, [r5, 0x1c]                               |     r2 = *((r5 + 0x1c));
    0x0004d5c4 str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x0004d5c6 ldrh r3, [r6, 0x1c]                               |     r3 = *((r6 + 0x1c));
    0x0004d5c8 orrs r3, r2                                       |     r3 |= r2;
    0x0004d5ca lsls r0, r3, 0x1f                                 |     r0 = r3 << 0x1f;
                                                                 |     if (r0 < r3) {
    0x0004d5cc bmi.w 0x51c08                                     |         goto label_290;
                                                                 |     }
    0x0004d5d0 and.w r3, sl, sb                                  |     r3 = sl & sb;
    0x0004d5d4 lsls r1, r3, 0x1d                                 |     r1 = r3 << 0x1d;
                                                                 |     if (r1 >= r3) {
    0x0004d5d6 bpl.w 0x514b8                                     |         goto label_304;
                                                                 |     }
    0x0004d5da sub.w r8, r8, 0x59                                |     r8 -= 0x59;
    0x0004d5de ldrd r2, r3, [r6, 0x10]                           |     __asm ("ldrd r2, r3, [r6, 0x10]");
    0x0004d5e2 ldrd r0, r1, [r5, 0x10]                           |     __asm ("ldrd r0, r1, [r5, 0x10]");
    0x0004d5e6 cmp.w r8, 3                                       |     
                                                                 |     if (r8 > 3) {
    0x0004d5ea bhi.w 0x540b6                                     |         goto label_305;
                                                                 |     }
                                                                 |     /* switch table (5 cases) at 0x4d5f2 */
    0x0004d5ee tbh [pc, r8, lsl 1]                               |     __asm ("tbh [pc, r8, lsl 1]");
    0x0004d5fa ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004d5fc ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004d5fe ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004d600 adds r3, 1                                        |     r3++;
    0x0004d602 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004d604 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004d606 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004d60a add.w r6, r1, r3, lsl 3                           |     r6 = r1 + (r3 << 3);
    0x0004d60e ldrd r3, r2, [r2, 8]                              |     __asm ("ldrd r3, r2, [r2, 8]");
    0x0004d612 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004d616 add.w r2, r2, r2, lsl 2                           |     r2 += (r2 << 2);
    0x0004d61a add.w r0, r1, r3, lsl 3                           |     r0 = r1 + (r3 << 3);
    0x0004d61e add.w r1, r1, r2, lsl 3                           |     r1 += (r2 << 3);
    0x0004d622 ldrh r3, [r6, 0x1c]                               |     r3 = *((r6 + 0x1c));
    0x0004d624 ldrh r2, [r0, 0x1c]                               |     r2 = *((r0 + 0x1c));
    0x0004d626 str r1, [sp, 0x38]                                |     *(arg_38h) = r1;
    0x0004d628 orrs r3, r2                                       |     r3 |= r2;
    0x0004d62a lsls r7, r3, 0x1f                                 |     r7 = r3 << 0x1f;
                                                                 |     if (r7 < r3) {
    0x0004d62c bmi.w 0x50ec6                                     |         goto label_306;
                                                                 |     }
    0x0004d630 bl 0xa1d8                                         |     r0 = fcn_0000a1d8 (r0);
    0x0004d634 mov r4, r0                                        |     r4 = r0;
    0x0004d636 mov r0, r6                                        |     r0 = r6;
    0x0004d638 mov r5, r1                                        |     r5 = r1;
    0x0004d63a bl 0xa1d8                                         |     fcn_0000a1d8 (r0);
    0x0004d63e cmp.w r8, 0x55                                    |     
    0x0004d642 mov r3, r0                                        |     r3 = r0;
    0x0004d644 mov r2, r1                                        |     r2 = r1;
    0x0004d646 itt eq                                            |     
                                                                 |     if (r8 != 0x55) {
    0x0004d648 andeq r4, r0                                      |         r4 &= r0;
                                                                 |     }
                                                                 |     if (r8 != 0x55) {
    0x0004d64a andeq r5, r1                                      |         r5 &= r1;
                                                                 |     }
                                                                 |     if (r8 != 0x55) {
    0x0004d64c beq 0x4d69e                                       |         
    0x0004d64e cmp.w r8, 0x56                                    |         
    0x0004d652 itt eq                                            |         
                                                                 |         if (r8 != 0x56) {
    0x0004d654 orreq r4, r0                                      |             r4 |= r0;
                                                                 |         }
                                                                 |         if (r8 != 0x56) {
    0x0004d656 orreq r5, r1                                      |             r5 |= r1;
                                                                 |         }
                                                                 |         if (r8 == 0x56) {
    0x0004d658 beq 0x4d69e                                       |             goto label_229;
                                                                 |         }
    0x0004d65a orrs.w r1, r3, r2                                 |         r1 = r3 | r2;
                                                                 |         if (r1 == r3) {
    0x0004d65e beq 0x4d69e                                       |             goto label_229;
                                                                 |         }
    0x0004d660 cmp r2, 0                                         |         
                                                                 |         if (r2 < 0) {
    0x0004d662 blt.w 0x537d2                                     |             goto label_307;
                                                                 |         }
    0x0004d666 cmp r3, 0x40                                      |         
    0x0004d668 sbcs r2, r2, 0                                    |         __asm ("sbcs r2, r2, 0");
                                                                 |         if (r3 >= 0x40) {
    0x0004d66c bge.w 0x537ea                                     |             goto label_308;
                                                                 |         }
                                                                 | label_228:
    0x0004d670 cmp.w r8, 0x57                                    |         
                                                                 |         if (r8 == 0x57) {
    0x0004d674 beq.w 0x53bfc                                     |             goto label_309;
                                                                 |         }
    0x0004d678 rsb.w r2, r3, 0x20                                |         r2 = 0x20 - r3;
    0x0004d67c lsrs r4, r3                                       |         r4 >>= r3;
    0x0004d67e lsl.w r2, r5, r2                                  |         r2 = r5 << r2;
    0x0004d682 cmp r5, 0                                         |         
    0x0004d684 orr.w r4, r4, r2                                  |         r4 |= r2;
    0x0004d688 sub.w r2, r3, 0x20                                |         r2 = r3 - 0x20;
    0x0004d68c lsr.w r2, r5, r2                                  |         r2 = r5 >> r2;
    0x0004d690 orr.w r4, r4, r2                                  |         r4 |= r2;
    0x0004d694 lsr.w r2, r5, r3                                  |         r2 = r5 >> r3;
                                                                 |         if (r5 < 0) {
    0x0004d698 blt.w 0x53ca0                                     |             goto label_310;
                                                                 |         }
                                                                 | label_256:
    0x0004d69c mov r5, r2                                        |         r5 = r2;
                                                                 |     }
                                                                 | label_229:
    0x0004d69e ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004d6a0 ldrh r3, [r2, 0x1c]                               |     r3 = *((r2 + 0x1c));
    0x0004d6a2 strd r4, r5, [r2, 0x10]                           |     __asm ("strd r4, r5, [r2, 0x10]");
    0x0004d6a6 bic r3, r3, 0x4180                                |     r3 = BIT_MASK (r3, 0x4180);
    0x0004d6aa bic r3, r3, 0x7f                                  |     r3 = BIT_MASK (r3, 0x7f);
    0x0004d6ae orr r3, r3, 4                                     |     r3 |= 4;
    0x0004d6b2 strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x0004d6b4 b 0x4d26a                                         |     goto label_2;
    0x0004d6b6 ldr r0, [sp, 0x20]                                |     r0 = *(arg_20h);
    0x0004d6b8 cmp.w r8, 0x70                                    |     
    0x0004d6bc ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004d6be add r4, sp, 0xb0                                  |     r4 += arg_b0h;
    0x0004d6c0 mov.w r8, -1                                      |     r8 = -1;
    0x0004d6c4 it hi                                             |     
                                                                 |     if (r8 <= 0x70) {
    0x0004d6c6 movhi r8, 0                                       |         r8 = 0;
                                                                 |     }
    0x0004d6ca ldr r2, [r0, 4]                                   |     r2 = *((r0 + 4));
    0x0004d6cc ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004d6ce ldr r1, [r0, 0x10]                                |     r1 = *((r0 + 0x10));
    0x0004d6d0 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0004d6d4 ldr.w r3, [r3, r2, lsl 2]                         |     offset_0 = r2 << 2;
                                                                 |     r3 = *((r3 + offset_0));
    0x0004d6d8 ldr r2, [r3, 8]                                   |     r2 = *((r3 + 8));
    0x0004d6da strb.w r8, [r4, 6]                                |     *((r4 + 6)) = r8;
    0x0004d6de ldr r5, [r3]                                      |     r5 = *(r3);
    0x0004d6e0 ldr r3, [r0, 0xc]                                 |     r3 = *((r0 + 0xc));
    0x0004d6e2 str r2, [r4]                                      |     *(r4) = r2;
    0x0004d6e4 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004d6e6 strh r1, [r4, 4]                                  |     *((r4 + 4)) = r1;
    0x0004d6e8 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004d6ec vstr d16, [sp, 0xa8]                              |     __asm ("vstr d16, [sp, 0xa8]");
    0x0004d6f0 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004d6f4 str r3, [r4, 8]                                   |     *((r4 + 8)) = r3;
    0x0004d6f6 ldrb.w r8, [r5, 0x51]                             |     r8 = *((r5 + 0x51));
    0x0004d6fa cmp.w r8, 1                                       |     
                                                                 |     if (r8 == 1) {
    0x0004d6fe beq.w 0x50b1c                                     |         goto label_311;
                                                                 |     }
                                                                 | label_44:
    0x0004d702 blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x0004d706 ldr.w r1, [pc, 0x890]                             |     r1 = *(0x0004df98);
    0x0004d70a movw r2, 0xdcf                                    |     
    0x0004d70e movs r4, 0                                        |     r4 = 0;
    0x0004d710 movs r6, 0xb                                      |     r6 = 0xb;
    0x0004d712 add.w r3, r0, 0x14                                |     r3 = r0 + 0x14;
    0x0004d716 movt r2, 1                                        |     r2 = 0x10dcf;
    0x0004d71a add r1, pc                                        |     r1 += pc;
    0x0004d71c movs r0, 0xb                                      |     r0 = 0xb;
    0x0004d71e blx 0x6820                                        |     fcn_00006820 ();
                                                                 | label_45:
    0x0004d722 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004d724 ldrb r3, [r3]                                     |     r3 = *(r3);
    0x0004d726 lsls r7, r3, 0x1f                                 |     r7 = r3 << 0x1f;
    0x0004d728 ite mi                                            |     
                                                                 |     if (r7 < r3) {
    0x0004d72a rsbmi r4, r4, 0                                   |         __asm ("rsbmi r4, r4, 0");
                                                                 |     }
                                                                 |     if (r7 < r3) {
    0x0004d72c addpl r4, 1                                       |         r4++;
                                                                 |     }
    0x0004d72e cmp r4, 0                                         |     
                                                                 |     if (r4 <= 0) {
    0x0004d730 ble.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
                                                                 | label_68:
    0x0004d734 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004d736 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004d738 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
                                                                 | label_12:
    0x0004d73a cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004d73c beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
                                                                 | label_7:
    0x0004d740 mov sb, r6                                        |     sb = r6;
                                                                 | label_25:
    0x0004d742 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004d744 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
                                                                 | label_34:
    0x0004d746 ldr r4, [sp, 0x24]                                |     r4 = *((sp + 0x24));
    0x0004d748 ldr.w r1, [pc, 0x850]                             |     r1 = *(0x0004df9c);
    0x0004d74c str r0, [sp]                                      |     *(sp) = r0;
    0x0004d74e mov r0, sb                                        |     r0 = sb;
    0x0004d750 ldr.w r3, [r4, 0xa8]                              |     r3 = *((r4 + 0xa8));
    0x0004d754 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004d756 add r1, pc                                        |     r1 += pc;
    0x0004d758 str.w sb, [r4, 0x50]                              |     __asm ("str.w sb, [r4, 0x50]");
    0x0004d75c blx 0x6820                                        |     fcn_00006820 ();
    0x0004d760 mov r0, r4                                        |     r0 = r4;
    0x0004d762 bl 0x335d0                                        |     fcn_000335d0 (r0);
    0x0004d766 movw r3, 0xc0a                                    |     r3 = 0xc0a;
    0x0004d76a cmp sb, r3                                        |     
                                                                 |     if (sb != r3) {
    0x0004d76c bne.w 0x4d468                                     |         goto label_3;
                                                                 |     }
                                                                 | label_155:
    0x0004d770 movs r3, 1                                        |     r3 = 1;
    0x0004d772 strb.w r3, [fp, 0x40]                             |     *(arg_40h) = r3;
    0x0004d776 b 0x4d468                                         |     goto label_3;
    0x0004d778 ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004d77a mov r5, r8                                        |     r5 = r8;
    0x0004d77c ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004d77e ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0004d780 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004d782 ldr.w r4, [r3, r2, lsl 2]                         |     offset_1 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_1));
    0x0004d786 movs r3, 0                                        |     r3 = 0;
    0x0004d788 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004d78a strb r3, [r4, 0x19]                               |     *((r4 + 0x19)) = r3;
    0x0004d78c ldr r3, [r1, 0xc]                                 |     r3 = *((r1 + 0xc));
    0x0004d78e add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004d792 add.w r6, r2, r3, lsl 3                           |     r6 = r2 + (r3 << 3);
    0x0004d796 ldrb r2, [r4, 0x1c]                               |     r2 = *((r4 + 0x1c));
    0x0004d798 ldrh r3, [r6, 0x1c]                               |     r3 = *((r6 + 0x1c));
    0x0004d79a lsls r1, r2, 0x1d                                 |     r1 = r2 << 0x1d;
                                                                 |     if (r1 < r2) {
    0x0004d79c bmi.w 0x50e98                                     |         goto label_312;
                                                                 |     }
    0x0004d7a0 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004d7a2 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004d7a4 tst.w r8, 1                                       |     
    0x0004d7a8 ldr r1, [r2, 0x10]                                |     r1 = *((r2 + 0x10));
    0x0004d7aa ldr r2, [r4, 8]                                   |     r2 = *((r4 + 8));
    0x0004d7ac str r6, [r7, 8]                                   |     *((r7 + 8)) = r6;
    0x0004d7ae strh r1, [r7, 4]                                  |     *((r7 + 4)) = r1;
    0x0004d7b0 str r2, [r7]                                      |     *(r7) = r2;
    0x0004d7b2 ite ne                                            |     
                                                                 |     if ((r8 & 1) == 0) {
    0x0004d7b4 movne r2, -1                                      |         r2 = -1;
                                                                 |     }
                                                                 |     if ((r8 & 1) == 0) {
    0x0004d7b8 movs r2, 1                                        |         r2 = 1;
                                                                 |     }
    0x0004d7ba strb r2, [r7, 6]                                  |     *((r7 + 6)) = r2;
    0x0004d7bc lsls r2, r3, 0x11                                 |     r2 = r3 << 0x11;
                                                                 |     if (r2 < r3) {
    0x0004d7be bmi.w 0x52c00                                     |         goto label_313;
                                                                 |     }
                                                                 | label_168:
    0x0004d7c2 movs r3, 0                                        |     r3 = 0;
    0x0004d7c4 add.w sl, sp, 0xb0                                |     sl += arg_b0h;
    0x0004d7c8 ldr r0, [r4]                                      |     r0 = *(r4);
    0x0004d7ca mov r1, r7                                        |     r1 = r7;
    0x0004d7cc str r3, [sp]                                      |     *(sp) = r3;
    0x0004d7ce movs r2, 0                                        |     r2 = 0;
    0x0004d7d0 movs r3, 0                                        |     r3 = 0;
    0x0004d7d2 str.w sl, [sp, 4]                                 |     __asm ("str.w sl, [arg_4h]");
    0x0004d7d6 bl 0x2e9e8                                        |     r0 = fcn_0002e9e8 (r0, r1, r2, r3, r4, r5, r6);
    0x0004d7da mov r6, r0                                        |     r6 = r0;
    0x0004d7dc cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004d7de bne.w 0x528f6                                     |         goto label_207;
                                                                 |     }
    0x0004d7e2 strb r0, [r4, 0x1a]                               |     *((r4 + 0x1a)) = r0;
    0x0004d7e4 ldr.w r3, [sl]                                    |     r3 = *(sl);
                                                                 | label_125:
    0x0004d7e8 cmp r5, 0x3d                                      |     
    0x0004d7ea mov.w r2, 0                                       |     r2 = 0;
    0x0004d7ee strb r2, [r4, 0x1b]                               |     *((r4 + 0x1b)) = r2;
    0x0004d7f0 str r2, [r4, 0x44]                                |     *((r4 + 0x44)) = r2;
                                                                 |     if (r5 <= 0x3d) {
    0x0004d7f2 ble.w 0x520e6                                     |         goto label_314;
                                                                 |     }
    0x0004d7f6 cmp r3, r2                                        |     
                                                                 |     if (r3 < r2) {
    0x0004d7f8 blt.w 0x528e0                                     |         goto label_315;
                                                                 |     }
                                                                 | label_126:
    0x0004d7fc cmp r5, 0x3f                                      |     
    0x0004d7fe it eq                                             |     
                                                                 |     if (r5 == 0x3f) {
    0x0004d800 cmpeq r3, 0                                       |         __asm ("cmpeq r3, 0");
                                                                 |     }
                                                                 |     if (r5 == 0x3f) {
    0x0004d802 beq.w 0x528e0                                     |         goto label_315;
                                                                 |     }
    0x0004d806 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004d808 adds r3, 1                                        |     r3++;
    0x0004d80a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004d80c b 0x4d26a                                         |     goto label_2;
    0x0004d80e ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004d810 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004d812 ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0004d814 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004d816 ldr r6, [r1, 0xc]                                 |     r6 = *((r1 + 0xc));
    0x0004d818 ldr.w r4, [r3, r2, lsl 2]                         |     offset_2 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_2));
    0x0004d81c ldr r3, [r1, 0x10]                                |     r3 = *((r1 + 0x10));
    0x0004d81e ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004d820 add.w r6, r6, r6, lsl 2                           |     r6 += (r6 << 2);
    0x0004d824 ldr.w sl, [r4, 8]                                 |     sl = *((r4 + 8));
    0x0004d828 cmp r3, 0                                         |     
    0x0004d82a add.w r6, r2, r6, lsl 3                           |     r6 = r2 + (r6 << 3);
                                                                 |     if (r3 <= 0) {
    0x0004d82e ble.w 0x50eda                                     |         goto label_316;
                                                                 |     }
    0x0004d832 uxth r5, r3                                       |     r5 = (int16_t) r3;
    0x0004d834 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004d836 str.w sl, [r7]                                    |     __asm ("str.w sl, [r7]");
    0x0004d83a strh r3, [r7, 4]                                  |     *((r7 + 4)) = r3;
    0x0004d83c str r6, [r7, 8]                                   |     *((r7 + 8)) = r6;
    0x0004d83e cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0004d840 beq.w 0x53a80                                     |         goto label_317;
                                                                 |     }
    0x0004d844 movs r5, 0                                        |     r5 = 0;
    0x0004d846 mov r0, r6                                        |     r0 = r6;
    0x0004d848 mov r8, r5                                        |     r8 = r5;
    0x0004d84a b 0x4d85c                                         |     
                                                                 |     while (r3 >= r3) {
                                                                 | label_4:
    0x0004d84c ldrh r3, [r7, 4]                                  |         r3 = *((r7 + 4));
    0x0004d84e adds r5, 1                                        |         r5++;
    0x0004d850 add.w r8, r8, 0x28                                |         r8 += 0x28;
    0x0004d854 cmp r3, r5                                        |         
                                                                 |         if (r3 <= r5) {
    0x0004d856 ble.w 0x51d3c                                     |             goto label_318;
                                                                 |         }
    0x0004d85a ldr r0, [r7, 8]                                   |         r0 = *((r7 + 8));
    0x0004d85c add r0, r8                                        |         r0 += r8;
    0x0004d85e ldrh r3, [r0, 0x1c]                               |         r3 = *((r0 + 0x1c));
    0x0004d860 lsls r3, r3, 0x11                                 |         r3 <<= 0x11;
    0x0004d862 bpl 0x4d84c                                       |         
                                                                 |     }
    0x0004d864 bl 0x173c0                                        |     fcn_000173c0 (r0);
    0x0004d868 b 0x4d84c                                         |     goto label_4;
                                                                 | label_294:
    0x0004d86a bl 0x5debc                                        |     fcn_0005debc (r0, r1, r2);
    0x0004d86e str r1, [sp, 0x74]                                |     var_74h = r1;
    0x0004d870 b 0x4d232                                         |     goto label_5;
                                                                 | label_293:
    0x0004d872 str r3, [sp, 0x74]                                |     var_74h = r3;
    0x0004d874 b 0x4d232                                         |     goto label_5;
    0x0004d876 ldr r0, [sp, 0x20]                                |     r0 = *(arg_20h);
    0x0004d878 cmp.w r8, 0x49                                    |     
    0x0004d87c ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004d87e ldr r3, [r0, 8]                                   |     r3 = *((r0 + 8));
    0x0004d880 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004d884 add.w r1, r2, r3, lsl 3                           |     r1 = r2 + (r3 << 3);
    0x0004d888 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004d88a ldr r2, [r0, 4]                                   |     r2 = *((r0 + 4));
    0x0004d88c ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004d88e ldr.w r4, [r3, r2, lsl 2]                         |     offset_3 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_3));
    0x0004d892 ldr r3, [r0, 0xc]                                 |     r3 = *((r0 + 0xc));
    0x0004d894 itete eq                                          |     
                                                                 |     if (r8 != 0x49) {
    0x0004d896 ldreq r2, [sp, 0x44]                              |         r2 = *(arg_44h);
                                                                 |     }
                                                                 |     if (r8 == 0x49) {
    0x0004d898 movne sb, r3                                      |         sb = r3;
                                                                 |     }
                                                                 |     if (r8 != 0x49) {
    0x0004d89a addeq r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
                                                                 |     }
                                                                 |     if (r8 != 0x49) {
    0x0004d89e asrs r5, r3, 0x1f                                 |         r5 = r3 >> 0x1f;
                                                                 |     }
    0x0004d8a0 itt eq                                            |     
                                                                 |     if (r8 != 0x49) {
    0x0004d8a2 addeq r3, r2, r3, lsl 3                           |         r3 = r2 + (r3 << 3);
                                                                 |     }
                                                                 |     if (r8 == 0x49) {
    0x0004d8a6 ldrd sb, r5, [r3, 0x10]                           |         __asm ("ldrd sb, r5, [r3, 0x10]");
                                                                 |     }
    0x0004d8aa ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004d8ac ldrb r3, [r3, 3]                                  |     r3 = *((r3 + 3));
    0x0004d8ae lsls r7, r3, 0x1f                                 |     r7 = r3 << 0x1f;
    0x0004d8b0 itttt mi                                          |     
                                                                 |     if (r7 >= r3) {
    0x0004d8b2 ldrmi r0, [sp, 0x24]                              |         r0 = *((sp + 0x24));
                                                                 |     }
                                                                 |     if (r7 >= r3) {
    0x0004d8b4 ldrmi r2, [r0, 0x5c]                              |         r2 = *((r0 + 0x5c));
                                                                 |     }
                                                                 |     if (r7 >= r3) {
    0x0004d8b6 addmi r2, 1                                       |         r2++;
                                                                 |     }
                                                                 |     if (r7 >= r3) {
    0x0004d8b8 strmi r2, [r0, 0x5c]                              |         *((r0 + 0x5c)) = r2;
                                                                 |     }
    0x0004d8ba lsls r6, r3, 0x1e                                 |     r6 = r3 << 0x1e;
    0x0004d8bc ldrh r2, [r1, 0x1c]                               |     r2 = *((r1 + 0x1c));
    0x0004d8be itt mi                                            |     
                                                                 |     if (r6 < r3) {
    0x0004d8c0 strdmi sb, r5, [fp, 0x20]                         |         __asm ("strdmi sb, r5, [fp, 0x20]");
                                                                 |     }
                                                                 |     if (r6 < r3) {
    0x0004d8c4 strd sb, r5, [sp, 0x68]                           |         __asm ("strd sb, r5, [sp, 0x68]");
                                                                 |     }
    0x0004d8c8 lsls r0, r2, 0x1f                                 |     r0 = r2 << 0x1f;
    0x0004d8ca ldr r0, [r4]                                      |     r0 = *(r4);
    0x0004d8cc iteet mi                                          |     
                                                                 |     if (r0 >= r2) {
    0x0004d8ce movmi r7, 0                                       |         r7 = 0;
                                                                 |     }
                                                                 |     if (r0 < r2) {
    0x0004d8d0 ldrpl r6, [r1, 4]                                 |         r6 = *((r1 + 4));
                                                                 |     }
                                                                 |     if (r0 < r2) {
    0x0004d8d2 ldrpl r7, [r1, 0x18]                              |         r7 = *((r1 + 0x18));
                                                                 |     }
                                                                 |     if (r0 >= r2) {
    0x0004d8d4 movmi r6, r7                                      |         r6 = r7;
                                                                 |     }
    0x0004d8d6 itt mi                                            |     
                                                                 |     if (r0 >= r2) {
    0x0004d8d8 strmi r7, [r1, 4]                                 |         *((r1 + 4)) = r7;
                                                                 |     }
                                                                 |     if (r0 >= r2) {
    0x0004d8da strmi r7, [r1, 0x18]                              |         *((r1 + 0x18)) = r7;
                                                                 |     }
    0x0004d8dc ands ip, r3, 0x10                                 |     
    0x0004d8e0 it ne                                             |     
                                                                 |     if (ip == r3) {
    0x0004d8e2 ldrne ip, [r4, 0xc]                               |         ip = *((r4 + 0xc));
                                                                 |     }
    0x0004d8e6 ands r2, r2, 0x4000                               |     r2 &= 0x4000;
    0x0004d8ea it ne                                             |     
                                                                 |     if (r2 == r2) {
    0x0004d8ec ldrne r2, [r1, 0x10]                              |         r2 = *((r1 + 0x10));
                                                                 |     }
    0x0004d8ee ubfx r3, r3, 3, 1                                 |     r3 = (r3 >> 3) & ((1 << 1) - 1);
    0x0004d8f2 ldr r1, [sp, 0x1c]                                |     r1 = *(arg_1ch);
    0x0004d8f4 strd r3, ip, [sp, 0xc]                            |     __asm ("strd r3, ip, [sp, 0xc]");
    0x0004d8f8 mov r3, r5                                        |     r3 = r5;
    0x0004d8fa strd r7, r2, [sp, 4]                              |     __asm ("strd r7, r2, [sp, 4]");
    0x0004d8fe mov r2, sb                                        |     r2 = sb;
    0x0004d900 str r6, [sp]                                      |     *(sp) = r6;
    0x0004d902 add.w r8, r1, 1                                   |     r8 = r1 + 1;
    0x0004d906 movs r1, 0                                        |     r1 = 0;
    0x0004d908 bl 0x32b00                                        |     fcn_00032b00 (r0, r1, r2, r3, r4, r5, r6);
    0x0004d90c movs r3, 0                                        |     r3 = 0;
    0x0004d90e mov r6, r0                                        |     r6 = r0;
    0x0004d910 strh r3, [r4, 0x1a]                               |     *((r4 + 0x1a)) = r3;
    0x0004d912 str r3, [r4, 0x44]                                |     *((r4 + 0x44)) = r3;
    0x0004d914 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004d916 bne.w 0x50ed0                                     |         goto label_319;
                                                                 |     }
    0x0004d91a ldr.w r7, [fp, 0xc8]                              |     r7 = *(arg_c8h);
    0x0004d91e cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0004d920 beq.w 0x52bf8                                     |         goto label_320;
                                                                 |     }
    0x0004d924 ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004d926 ldr r3, [r1, 0x10]                                |     r3 = *((r1 + 0x10));
    0x0004d928 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004d92a beq.w 0x52d2c                                     |         goto label_321;
                                                                 |     }
    0x0004d92e ldrsb.w r2, [r4, 0x18]                            |     r2 = *((r4 + 0x18));
    0x0004d932 ldrb r1, [r1, 3]                                  |     r1 = *((r1 + 3));
    0x0004d934 ldr.w r0, [fp, 0xc4]                              |     r0 = *(arg_c4h);
    0x0004d938 str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x0004d93c tst.w r1, 4                                       |     
    0x0004d940 ldr.w r1, [fp, 0x10]                              |     r1 = *(arg_10h);
    0x0004d944 lsl.w r2, r2, 4                                   |     r2 <<= 4;
    0x0004d948 ldr r2, [r1, r2]                                  |     r2 = *((r1 + r2));
    0x0004d94a ite ne                                            |     
                                                                 |     if ((r1 & 4) == 0) {
    0x0004d94c movne r1, 0x17                                    |         r1 = 0x17;
                                                                 |     }
                                                                 |     if ((r1 & 4) != 0) {
    0x0004d94e moveq r1, 0x12                                    |         r1 = 0x12;
                                                                 |     }
    0x0004d950 strd sb, r5, [sp]                                 |     __asm ("strd sb, r5, [sp]");
    0x0004d954 blx r7                                            |     uint32_t (*r7)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
    0x0004d956 b 0x4d26a                                         |     goto label_2;
    0x0004d958 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004d95a ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004d95c ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004d95e add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004d962 add.w r0, r2, r3, lsl 3                           |     r0 = r2 + (r3 << 3);
    0x0004d966 ldrh r3, [r0, 0x1c]                               |     r3 = *((r0 + 0x1c));
    0x0004d968 lsls r1, r3, 0x1f                                 |     r1 = r3 << 0x1f;
    0x0004d96a it mi                                             |     
                                                                 |     if (r1 >= r3) {
    0x0004d96c movmi r4, 6                                       |         r4 = 6;
                                                                 |     }
                                                                 |     if (r1 >= r3) {
    0x0004d96e bpl.w 0x51fc4                                     |         goto label_322;
                                                                 |     }
                                                                 | label_122:
    0x0004d972 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004d974 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004d976 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004d978 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004d97c add.w r0, r2, r3, lsl 3                           |     r0 = r2 + (r3 << 3);
    0x0004d980 ldrh r3, [r0, 0x1c]                               |     r3 = *((r0 + 0x1c));
    0x0004d982 lsls r2, r3, 0x1f                                 |     r2 = r3 << 0x1f;
    0x0004d984 it mi                                             |     
                                                                 |     if (r2 >= r3) {
    0x0004d986 movmi r3, 2                                       |         r3 = 2;
                                                                 |     }
                                                                 |     if (r2 >= r3) {
    0x0004d988 bpl.w 0x51fe8                                     |         goto label_323;
                                                                 |     }
                                                                 | label_124:
    0x0004d98c cmp.w r8, 0x48                                    |     
    0x0004d990 add r3, r4                                        |     r3 += r4;
                                                                 |     if (r8 == 0x48) {
    0x0004d992 beq.w 0x51fd8                                     |         goto label_324;
                                                                 |     }
    0x0004d996 ldr.w r2, [pc, 0x608]                             |     r2 = *(0x0004dfa0);
    0x0004d99a add r2, pc                                        |     r2 += pc;
    0x0004d99c add r3, r2                                        |     r3 += r2;
    0x0004d99e ldrb.w r2, [r3, 0xc38]                            |     r2 = *((r3 + 0xc38));
                                                                 | label_123:
    0x0004d9a2 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004d9a4 cmp r2, 2                                         |     
    0x0004d9a6 ldr r1, [sp, 0x1c]                                |     r1 = *(arg_1ch);
    0x0004d9a8 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x0004d9aa add.w r1, r1, 1                                   |     r1++;
    0x0004d9ae str r1, [sp, 0x1c]                                |     *(arg_1ch) = r1;
    0x0004d9b0 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004d9b2 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004d9b6 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0004d9ba str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x0004d9bc ldrsh.w r3, [r3, 0x1c]                            |     r3 = *((r3 + 0x1c));
    0x0004d9c0 bic r3, r3, 0x4180                                |     r3 = BIT_MASK (r3, 0x4180);
    0x0004d9c4 bic r3, r3, 0x7f                                  |     r3 = BIT_MASK (r3, 0x7f);
                                                                 |     if (r2 == 2) {
    0x0004d9c8 beq.w 0x51ff8                                     |         goto label_325;
                                                                 |     }
    0x0004d9cc ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x0004d9ce orr r3, r3, 4                                     |     r3 |= 4;
    0x0004d9d2 str r2, [r1, 0x10]                                |     *((r1 + 0x10)) = r2;
    0x0004d9d4 asrs r2, r2, 0x1f                                 |     r2 >>= 0x1f;
    0x0004d9d6 strh r3, [r1, 0x1c]                               |     *((r1 + 0x1c)) = r3;
    0x0004d9d8 str r2, [r1, 0x14]                                |     *((r1 + 0x14)) = r2;
    0x0004d9da b 0x4d26a                                         |     goto label_2;
    0x0004d9dc ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004d9de movs r7, 1                                        |     r7 = 1;
    0x0004d9e0 ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0004d9e2 ldrd r1, r2, [r3, 4]                              |     __asm ("ldrd r1, r2, [r3, 4]");
    0x0004d9e6 mov.w r3, -1                                      |     r3 = -1;
    0x0004d9ea str r7, [sp]                                      |     *(sp) = r7;
    0x0004d9ec bl 0x2e430                                        |     r0 = fcn_0002e430 (r0, r1, r2, r3, r4, r5);
    0x0004d9f0 mov r4, r0                                        |     r4 = r0;
    0x0004d9f2 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004d9f4 beq.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x0004d9f8 ldrb r3, [r0, 0x1c]                               |     r3 = *((r0 + 0x1c));
    0x0004d9fa mov r2, fp                                        |     r2 = fp;
    0x0004d9fc strb r7, [r0, 0x19]                               |     *((r0 + 0x19)) = r7;
    0x0004d9fe movs r1, 0                                        |     r1 = 0;
    0x0004da00 orr r3, r3, 1                                     |     r3 |= 1;
    0x0004da04 strb r3, [r0, 0x1c]                               |     *((r0 + 0x1c)) = r3;
    0x0004da06 movw r3, 0x41e                                    |     r3 = 0x41e;
    0x0004da0a ldr.w r0, [fp]                                    |     r0 = *(fp);
    0x0004da0e str r3, [sp, 4]                                   |     *(arg_4h) = r3;
    0x0004da10 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004da12 ldrb r3, [r3, 3]                                  |     r3 = *((r3 + 3));
    0x0004da14 orr r3, r3, 5                                     |     r3 |= 5;
    0x0004da18 str r3, [sp]                                      |     *(sp) = r3;
    0x0004da1a adds r3, r4, 4                                    |     r3 = r4 + 4;
    0x0004da1c bl 0x385bc                                        |     r0 = fcn_000385bc (r0, r1, r2, r3, r4, r5);
    0x0004da20 mov r6, r0                                        |     r6 = r0;
    0x0004da22 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004da24 beq.w 0x51c90                                     |         goto label_326;
                                                                 |     }
                                                                 | label_101:
    0x0004da28 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004da2a ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004da2c ldrb r3, [r3, 3]                                  |     r3 = *((r3 + 3));
    0x0004da2e adds r2, 1                                        |     r2++;
    0x0004da30 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004da32 ldrb r2, [r4, 0x1c]                               |     r2 = *((r4 + 0x1c));
    0x0004da34 subs r3, 8                                        |     r3 -= 8;
    0x0004da36 it ne                                             |     
                                                                 |     if (r3 == 8) {
    0x0004da38 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0004da3a bfi r2, r3, 3, 1                                  |     value_4 = BIT_MASK (3, 1);
                                                                 |     value_5 = r3 & value_4;
                                                                 |     value_4 = ~value_4;
                                                                 |     r2 &= value_4;
                                                                 |     r2 |= value_5;
    0x0004da3e strb r2, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r2;
    0x0004da40 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004da42 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004da46 b 0x4d740                                         |     goto label_7;
    0x0004da48 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004da4a ldrb.w r3, [r3, 0x58]                             |     r3 = *((r3 + 0x58));
    0x0004da4e ands r2, r3, 0x20                                 |     r2 = r3 & 0x20;
                                                                 |     if (r2 != r3) {
    0x0004da52 bne.w 0x5052a                                     |         goto label_327;
                                                                 |     }
    0x0004da56 ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004da58 cmp.w r8, 0x36                                    |     
    0x0004da5c ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004da60 it ne                                             |     
                                                                 |     if (r8 == 0x36) {
    0x0004da62 movne r5, r2                                      |         r5 = r2;
                                                                 |     }
    0x0004da64 ldr r4, [r1, 0xc]                                 |     r4 = *((r1 + 0xc));
    0x0004da66 ldr r6, [r1, 8]                                   |     r6 = *((r1 + 8));
    0x0004da68 add.w r3, r3, r4, lsl 4                           |     r3 += (r4 << 4);
    0x0004da6c ldr r7, [r3, 4]                                   |     r7 = *((r3 + 4));
                                                                 |     if (r8 == 0x36) {
    0x0004da6e bne 0x4da86                                       |         
    0x0004da70 ldr r3, [r3, 0xc]                                 |         r3 = *((r3 + 0xc));
    0x0004da72 movs r5, 1                                        |         r5 = 1;
    0x0004da74 ldr r1, [sp, 0x24]                                |         r1 = *((sp + 0x24));
    0x0004da76 ldrb.w r3, [r3, 0x4c]                             |         r3 = *((r3 + 0x4c));
    0x0004da7a ldrb.w r2, [r1, 0x57]                             |         r2 = *((r1 + 0x57));
    0x0004da7e cmp r2, r3                                        |         
    0x0004da80 it hi                                             |         
                                                                 |         if (r2 > r3) {
    0x0004da82 strbhi r3, [r1, 0x57]                             |             *((r1 + 0x57)) = r3;
                                                                 |             goto label_23;
                                                                 |         }
                                                                 |     }
                                                                 | label_23:
    0x0004da86 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004da88 ldrb r3, [r3, 3]                                  |     r3 = *((r3 + 3));
    0x0004da8a lsls r1, r3, 0x1e                                 |     r1 = r3 << 0x1e;
                                                                 |     if (r1 < r3) {
    0x0004da8c bmi.w 0x5245c                                     |         goto label_328;
                                                                 |     }
                                                                 | label_140:
    0x0004da90 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004da92 ldrsb.w r3, [r3, 1]                               |     r3 = *((r3 + 1));
    0x0004da96 adds r2, r3, 6                                    |     r2 = r3 + 6;
                                                                 |     if (r2 == r3) {
    0x0004da98 beq.w 0x52448                                     |         goto label_329;
                                                                 |     }
    0x0004da9c adds r3, 0xe                                      |     r3 += 0xe;
    0x0004da9e itete eq                                          |     
                                                                 |     if (r3 != 0xe) {
    0x0004daa0 ldreq r3, [sp, 0x20]                              |         r3 = *(arg_20h);
                                                                 |     }
                                                                 |     if (r3 == 0xe) {
    0x0004daa2 movne r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r3 != 0xe) {
    0x0004daa4 moveq r8, 0                                       |         r8 = 0;
                                                                 |     }
                                                                 |     if (r3 != 0xe) {
    0x0004daa8 mov r8, r2                                        |         r8 = r2;
                                                                 |     }
    0x0004daaa it eq                                             |     
                                                                 |     if (r3 != 0xe) {
    0x0004daac ldreq r2, [r3, 0x10]                              |         r2 = *((r3 + 0x10));
                                                                 |     }
                                                                 | label_139:
    0x0004daae ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004dab0 mov.w sb, 1                                       |     sb = 1;
    0x0004dab4 mov r3, r4                                        |     r3 = r4;
    0x0004dab6 ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0004dab8 ldr r1, [r1, 4]                                   |     r1 = *((r1 + 4));
    0x0004daba str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x0004dabe bl 0x2e430                                        |     r0 = fcn_0002e430 (r0, r1, r2, r3, r4, r5);
    0x0004dac2 mov r4, r0                                        |     r4 = r0;
    0x0004dac4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004dac6 beq.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x0004daca ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004dacc mov r1, r6                                        |     r1 = r6;
    0x0004dace strb.w sb, [r0, 0x19]                             |     *((r0 + 0x19)) = sb;
    0x0004dad2 mov r2, r5                                        |     r2 = r5;
    0x0004dad4 str r6, [r0, 0x20]                                |     *((r0 + 0x20)) = r6;
    0x0004dad6 mov r0, r7                                        |     r0 = r7;
    0x0004dad8 adds r3, 1                                        |     r3++;
    0x0004dada str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004dadc ldrb r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004dade orr r3, r3, 8                                     |     r3 |= 8;
    0x0004dae2 strb r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x0004dae4 ldr r3, [r4]                                      |     r3 = *(r4);
    0x0004dae6 str r3, [sp]                                      |     *(sp) = r3;
    0x0004dae8 mov r3, r8                                        |     r3 = r8;
    0x0004daea bl 0x119f0                                        |     fcn_000119f0 (r0, r1, r2, r3, r4);
    0x0004daee ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004daf0 mov r6, r0                                        |     r6 = r0;
    0x0004daf2 str.w r8, [r4, 8]                                 |     __asm ("str.w r8, [r4, 8]");
    0x0004daf6 ldr r2, [r4]                                      |     r2 = *(r4);
    0x0004daf8 ldrb r3, [r1, 3]                                  |     r3 = *((r1 + 3));
    0x0004dafa and r3, r3, 1                                     |     r3 &= 1;
    0x0004dafe strb.w r3, [r2, 0x52]                             |     *((r2 + 0x52)) = r3;
    0x0004db02 ldrsb.w r3, [r1, 1]                               |     r3 = *((r1 + 1));
    0x0004db06 ldrb r2, [r4, 0x1c]                               |     r2 = *((r4 + 0x1c));
    0x0004db08 adds r3, 6                                        |     r3 += 6;
    0x0004db0a it ne                                             |     
                                                                 |     if (r3 == 6) {
    0x0004db0c movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0004db0e bfi r2, r3, 2, 1                                  |     value_6 = BIT_MASK (2, 1);
                                                                 |     value_7 = r3 & value_6;
                                                                 |     value_6 = ~value_6;
                                                                 |     r2 &= value_6;
                                                                 |     r2 |= value_7;
    0x0004db12 strb r2, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r2;
    0x0004db14 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004db16 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004db1a b 0x4d740                                         |     goto label_7;
    0x0004db1c ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004db1e ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004db20 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004db22 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004db26 add.w r0, r1, r3, lsl 3                           |     r0 = r1 + (r3 << 3);
    0x0004db2a ldrh r3, [r0, 0x1c]                               |     r3 = *((r0 + 0x1c));
    0x0004db2c lsls r7, r3, 0x1f                                 |     r7 = r3 << 0x1f;
                                                                 |     if (r7 >= r3) {
    0x0004db2e bpl.w 0x51e9e                                     |         goto label_330;
                                                                 |     }
    0x0004db32 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x0004db34 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004db36 beq.w 0x5125e                                     |         goto label_331;
                                                                 |     }
                                                                 | label_114:
    0x0004db3a ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004db3c ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004db3e str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004db40 b.w 0x4d26a                                       |     goto label_2;
    0x0004db44 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004db46 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004db48 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004db4a ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004db4c ldr.w r4, [r3, r2, lsl 2]                         |     offset_8 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_8));
                                                                 | label_9:
    0x0004db50 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004db52 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004db54 ldr r0, [r4]                                      |     r0 = *(r4);
    0x0004db56 mov r1, r7                                        |     r1 = r7;
    0x0004db58 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x0004db5a str r3, [sp, 0xd8]                                |     *(arg_d8h) = r3;
    0x0004db5c ldr r3, [r2, 0x10]                                |     r3 = *((r2 + 0x10));
    0x0004db5e blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004db60 mov r6, r0                                        |     r6 = r0;
                                                                 | label_28:
    0x0004db62 movs r3, 0                                        |     r3 = 0;
    0x0004db64 str r3, [r4, 0x44]                                |     *((r4 + 0x44)) = r3;
    0x0004db66 ldr r3, [r7]                                      |     r3 = *(r7);
    0x0004db68 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004db6a bne.w 0x50652                                     |         goto label_332;
                                                                 |     }
    0x0004db6e ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004db70 strb r3, [r4, 0x19]                               |     *((r4 + 0x19)) = r3;
    0x0004db72 ldr r1, [sp, 0x24]                                |     r1 = *((sp + 0x24));
    0x0004db74 ldrb r3, [r2, 3]                                  |     r3 = *((r2 + 3));
    0x0004db76 ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x0004db78 add.w r3, r1, r3, lsl 2                           |     r3 = r1 + (r3 << 2);
    0x0004db7c subs r2, 1                                        |     r2--;
    0x0004db7e str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004db80 ldr r2, [r3, 0x6c]                                |     r2 = *((r3 + 0x6c));
    0x0004db82 adds r2, 1                                        |     r2++;
    0x0004db84 str r2, [r3, 0x6c]                                |     *((r3 + 0x6c)) = r2;
                                                                 | label_37:
    0x0004db86 movs r3, 0                                        |     r3 = 0;
    0x0004db88 strb r3, [r4, 0x1a]                               |     *((r4 + 0x1a)) = r3;
                                                                 | label_11:
    0x0004db8a ldr.w r3, [fp, 0xe8]                              |     r3 = *(arg_e8h);
    0x0004db8e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004db90 bne.w 0x4d42e                                     |         goto label_8;
                                                                 |     }
    0x0004db94 ldr.w r4, [fp, 0x11c]                             |     r4 = *(arg_11ch);
    0x0004db98 ldr r2, [sp, 0x30]                                |     r2 = *(arg_30h);
    0x0004db9a ldr r1, [sp, 0x74]                                |     r1 = *(arg_74h);
    0x0004db9c subs r3, r4, 0                                    |     r3 = r4 - 0;
    0x0004db9e it ne                                             |     
                                                                 |     if (r3 == r4) {
    0x0004dba0 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0004dba2 cmp r2, r1                                        |     
    0x0004dba4 it lo                                             |     
                                                                 |     if (r2 >= r1) {
    0x0004dba6 movlo r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x0004dba8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004dbaa bne.w 0x50620                                     |         goto label_333;
                                                                 |     }
                                                                 | label_20:
    0x0004dbae ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004dbb0 adds r3, 1                                        |     r3++;
    0x0004dbb2 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004dbb4 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004dbb6 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004dbba b 0x4d740                                         |     goto label_7;
    0x0004dbbc ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004dbbe ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004dbc0 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004dbc2 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004dbc4 ldr.w r4, [r3, r2, lsl 2]                         |     offset_9 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_9));
    0x0004dbc8 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x0004dbca bne 0x4db50                                       |         goto label_9;
                                                                 |     }
    0x0004dbcc ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004dbce adds r3, 1                                        |     r3++;
    0x0004dbd0 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004dbd2 b.w 0x4d26a                                       |     goto label_2;
    0x0004dbd6 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004dbd8 movs r3, 0                                        |     r3 = 0;
    0x0004dbda str r3, [r7]                                      |     *(r7) = r3;
    0x0004dbdc cmp.w r8, 0x77                                    |     
    0x0004dbe0 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004dbe2 ite eq                                            |     
                                                                 |     if (r8 != 0x77) {
    0x0004dbe4 moveq r5, 1                                       |         r5 = 1;
                                                                 |     }
                                                                 |     if (r8 == 0x77) {
    0x0004dbe6 movne r5, 2                                       |         r5 = 2;
                                                                 |     }
    0x0004dbe8 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004dbea ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004dbee add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x0004dbf2 ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004dbf4 mov r0, r4                                        |     r0 = r4;
    0x0004dbf6 bl 0xd140                                         |     fcn_0000d140 (r0);
    0x0004dbfa mov r2, r5                                        |     r2 = r5;
    0x0004dbfc mov r1, r7                                        |     r1 = r7;
    0x0004dbfe mov r0, r4                                        |     r0 = r4;
    0x0004dc00 bl 0x3496c                                        |     fcn_0003496c (r0, r1, r2, r3);
    0x0004dc04 ldrb r3, [r4, 9]                                  |     r3 = *((r4 + 9));
    0x0004dc06 mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r3 != 0) {
    0x0004dc08 cbz r3, 0x4dc1c                                   |         
    0x0004dc0a ldr r5, [r4, 0xc]                                 |         r5 = *((r4 + 0xc));
    0x0004dc0c subs r5, 1                                        |         r5--;
    0x0004dc0e str r5, [r4, 0xc]                                 |         *((r4 + 0xc)) = r5;
                                                                 |         if (r5 != 0) {
    0x0004dc10 cbnz r5, 0x4dc1c                                  |             goto label_334;
                                                                 |         }
    0x0004dc12 ldr r3, [r4, 4]                                   |         r3 = *((r4 + 4));
    0x0004dc14 ldr r0, [r3, 0x38]                                |         r0 = *((r3 + 0x38));
    0x0004dc16 blx 0x63dc                                        |         fcn_000063dc ();
    0x0004dc1a strb r5, [r4, 0xa]                                |         *((r4 + 0xa)) = r5;
                                                                 |     }
                                                                 | label_334:
    0x0004dc1c ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004dc1e ldr r3, [r7]                                      |     r3 = *(r7);
    0x0004dc20 adds r2, 1                                        |     r2++;
    0x0004dc22 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004dc24 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004dc26 str r3, [r2, 0x10]                                |     *((r2 + 0x10)) = r3;
    0x0004dc28 asrs r3, r3, 0x1f                                 |     r3 >>= 0x1f;
    0x0004dc2a str r3, [r2, 0x14]                                |     *((r2 + 0x14)) = r3;
    0x0004dc2c cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004dc2e beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004dc32 b 0x4d740                                         |     goto label_7;
    0x0004dc34 ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0004dc36 ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004dc38 ldr r3, [r0, 0x38]                                |     r3 = *((r0 + 0x38));
    0x0004dc3a ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0004dc3c ldr r4, [r1, 8]                                   |     r4 = *((r1 + 8));
    0x0004dc3e ldr.w r5, [r3, r2, lsl 2]                         |     offset_10 = r2 << 2;
                                                                 |     r5 = *((r3 + offset_10));
    0x0004dc42 ldrb r3, [r1, 3]                                  |     r3 = *((r1 + 3));
    0x0004dc44 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004dc46 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004dc4a ldr r7, [r5]                                      |     r7 = *(r5);
    0x0004dc4c lsls r6, r3, 0x1f                                 |     r6 = r3 << 0x1f;
    0x0004dc4e it mi                                             |     
                                                                 |     if (r6 >= r3) {
    0x0004dc50 ldrmi r3, [r0, 0x5c]                              |         r3 = *((r0 + 0x5c));
                                                                 |     }
    0x0004dc52 add.w r4, r2, r4, lsl 3                           |     r4 = r2 + (r4 << 3);
    0x0004dc56 itt mi                                            |     
                                                                 |     if (r6 >= r3) {
    0x0004dc58 addmi r3, 1                                       |         r3++;
                                                                 |     }
                                                                 |     if (r6 >= r3) {
    0x0004dc5a strmi r3, [r0, 0x5c]                              |         *((r0 + 0x5c)) = r3;
                                                                 |     }
    0x0004dc5c ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004dc5e lsls r0, r3, 0x11                                 |     r0 = r3 << 0x11;
                                                                 |     if (r0 < r3) {
    0x0004dc60 bmi.w 0x51ed2                                     |         goto label_335;
                                                                 |     }
                                                                 | label_116:
    0x0004dc64 ldr.w r8, [r5, 0x40]                              |     r8 = *((r5 + 0x40));
    0x0004dc68 ldr r2, [r4, 0x18]                                |     r2 = *((r4 + 0x18));
    0x0004dc6a cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0004dc6e beq.w 0x511ca                                     |         goto label_336;
                                                                 |     }
    0x0004dc72 asrs r0, r2, 0x1f                                 |     r0 = r2 >> 0x1f;
    0x0004dc74 mov r3, r2                                        |     r3 = r2;
    0x0004dc76 movs r7, 0                                        |     r7 = 0;
                                                                 |     do {
    0x0004dc78 lsrs r3, r3, 7                                    |         r3 >>= 7;
    0x0004dc7a adds r7, 1                                        |         r7++;
    0x0004dc7c cmp r7, 8                                         |         
    0x0004dc7e orr.w r3, r3, r0, lsl 25                          |         r3 |= (r0 << 25);
    0x0004dc82 lsr.w r0, r0, 7                                   |         r0 >>= 7;
    0x0004dc86 orr.w r6, r3, r0                                  |         r6 = r3 | r0;
    0x0004dc8a ite gt                                            |         
                                                                 |         if (r7 <= 8) {
    0x0004dc8c movgt r1, 0                                       |             r1 = 0;
                                                                 |         }
                                                                 |         if (r7 > 8) {
    0x0004dc8e movle r1, 1                                       |             r1 = 1;
                                                                 |         }
    0x0004dc90 cmp r6, 0                                         |         
    0x0004dc92 it eq                                             |         
                                                                 |         if (r6 != 0) {
    0x0004dc94 moveq r1, 0                                       |             r1 = 0;
                                                                 |         }
    0x0004dc96 cmp r1, 0                                         |         
    0x0004dc98 bne 0x4dc78                                       |         
                                                                 |     } while (r1 != 0);
    0x0004dc9a ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x0004dc9e add r7, r2                                        |     r7 += r2;
    0x0004dca0 add.w r1, r2, 0xc                                 |     r1 = r2 + 0xc;
    0x0004dca4 mov r0, fp                                        |     r0 = fp;
    0x0004dca6 add r3, r7                                        |     r3 += r7;
    0x0004dca8 str.w r3, [r8, 0x10]                              |     __asm ("str.w r3, [r8, 0x10]");
    0x0004dcac bl 0xd3a0                                         |     fcn_0000d3a0 (r0, r1);
    0x0004dcb0 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004dcb2 mov r7, r0                                        |     r7 = r0;
    0x0004dcb4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004dcb6 beq.w 0x50b0e                                     |         goto label_337;
                                                                 |     }
    0x0004dcba adds r0, 0xc                                      |     r0 += 0xc;
    0x0004dcbc adds r3, 1                                        |     r3++;
    0x0004dcbe ldr r2, [r4, 0x18]                                |     r2 = *((r4 + 0x18));
    0x0004dcc0 ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x0004dcc2 str r0, [r7]                                      |     *(r7) = r0;
    0x0004dcc4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004dcc6 blx 0x6214                                        |     fcn_00006214 ();
    0x0004dcca ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x0004dccc ldr.w r2, [r8, 0x20]                              |     r2 = *((r8 + 0x20));
    0x0004dcd0 str r3, [r7, 4]                                   |     *((r7 + 4)) = r3;
    0x0004dcd2 ldr.w r3, [r8, 0x30]                              |     r3 = *((r8 + 0x30));
    0x0004dcd6 cmp r2, 0                                         |     
    0x0004dcd8 str r3, [r7, 8]                                   |     *((r7 + 8)) = r3;
    0x0004dcda str.w r7, [r8, 0x30]                              |     __asm ("str.w r7, [r8, 0x30]");
                                                                 |     if (r2 <= 0) {
    0x0004dcde ble.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004dce2 ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x0004dce6 cmp r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x0004dce8 blt 0x4dd00                                       |         goto label_338;
                                                                 |     }
    0x0004dcea ldr.w r2, [r8, 0x1c]                              |     r2 = *((r8 + 0x1c));
    0x0004dcee cmp r3, r2                                        |     
                                                                 |     if (r3 <= r2) {
    0x0004dcf0 ble.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004dcf4 ldr r3, [pc, 0x2ac]                               |     
    0x0004dcf6 add r3, pc                                        |     
    0x0004dcf8 ldr r3, [r3, 0x74]                                |     r3 = *(0x9bd12);
    0x0004dcfa cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004dcfc beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
                                                                 | label_338:
    0x0004dd00 mov r1, r5                                        |     r1 = r5;
    0x0004dd02 mov r0, fp                                        |     r0 = fp;
    0x0004dd04 bl 0x30960                                        |     r0 = fcn_00030960 (r0, r1);
    0x0004dd08 mov r6, r0                                        |     r6 = r0;
    0x0004dd0a movs r3, 0                                        |     r3 = 0;
    0x0004dd0c str.w r3, [r8, 0x10]                              |     __asm ("str.w r3, [r8, 0x10]");
    0x0004dd10 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004dd12 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004dd16 b 0x4d740                                         |     goto label_7;
    0x0004dd18 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004dd1a ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004dd1c ldrd r2, r3, [r3, 4]                              |     __asm ("ldrd r2, r3, [r3, 4]");
    0x0004dd20 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004dd24 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0004dd28 str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x0004dd2a ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004dd2c ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004dd2e ldr.w r8, [r3, r2, lsl 2]                         |     offset_11 = r2 << 2;
                                                                 |     r8 = *((r3 + offset_11));
    0x0004dd32 mov r0, r8                                        |     r0 = r8;
    0x0004dd34 ldr.w r5, [r8]                                    |     r5 = *(r8);
    0x0004dd38 bl 0x2f33c                                        |     r0 = fcn_0002f33c (r0);
    0x0004dd3c mov r6, r0                                        |     r6 = r0;
    0x0004dd3e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004dd40 bne.w 0x528f6                                     |         goto label_207;
                                                                 |     }
    0x0004dd44 ldrb.w r3, [r8, 0x1c]                             |     r3 = *((r8 + 0x1c));
    0x0004dd48 lsls r7, r3, 0x1d                                 |     r7 = r3 << 0x1d;
                                                                 |     if (r7 >= r3) {
    0x0004dd4a bpl.w 0x50f82                                     |         goto label_339;
                                                                 |     }
    0x0004dd4e add r4, sp, 0xb0                                  |     r4 += arg_b0h;
    0x0004dd50 mov r0, r5                                        |     r0 = r5;
    0x0004dd52 mov r1, r4                                        |     r1 = r4;
    0x0004dd54 bl 0xb570                                         |     fcn_0000b570 (r0, r1);
    0x0004dd58 ldr r4, [sp, 0xb0]                                |     r4 = *(arg_b0h);
    0x0004dd5a ldr.w r3, [fp, 0x58]                              |     r3 = *(arg_58h);
    0x0004dd5e cmp r3, r4                                        |     
                                                                 |     if (r3 <= r4) {
    0x0004dd60 blo.w 0x4f592                                     |         goto label_30;
                                                                 |     }
                                                                 | label_56:
    0x0004dd64 ldr r0, [sp, 0x38]                                |     r0 = *(arg_38h);
    0x0004dd66 movs r2, 0                                        |     r2 = 0;
    0x0004dd68 mov r1, r4                                        |     r1 = r4;
    0x0004dd6a bl 0x172d4                                        |     r0 = fcn_000172d4 (r0, r1, r2);
    0x0004dd6e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004dd70 bne.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x0004dd74 ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x0004dd76 ldrb.w r2, [r8, 0x1c]                             |     r2 = *((r8 + 0x1c));
    0x0004dd7a ldrh r3, [r1, 0x1c]                               |     r3 = *((r1 + 0x1c));
    0x0004dd7c ldr r7, [r1, 4]                                   |     r7 = *((r1 + 4));
    0x0004dd7e str r4, [r1, 0x18]                                |     *((r1 + 0x18)) = r4;
    0x0004dd80 bic r3, r3, 0x4180                                |     r3 = BIT_MASK (r3, 0x4180);
    0x0004dd84 bic r3, r3, 0x7f                                  |     r3 = BIT_MASK (r3, 0x7f);
    0x0004dd88 orr r3, r3, 0x10                                  |     r3 |= 0x10;
    0x0004dd8c strh r3, [r1, 0x1c]                               |     *((r1 + 0x1c)) = r3;
    0x0004dd8e ands r1, r2, 4                                    |     r1 = r2 & 4;
                                                                 |     if (r1 != r2) {
    0x0004dd92 bne.w 0x51d4a                                     |         goto label_340;
                                                                 |     }
    0x0004dd96 mov r3, r7                                        |     r3 = r7;
    0x0004dd98 mov r2, r4                                        |     r2 = r4;
    0x0004dd9a mov r0, r5                                        |     r0 = r5;
    0x0004dd9c str r1, [sp]                                      |     *(sp) = r1;
    0x0004dd9e bl 0x2d6d4                                        |     r0 = fcn_0002d6d4 (r0, r1, r2, r3, r4);
    0x0004dda2 mov r6, r0                                        |     r6 = r0;
                                                                 | label_104:
    0x0004dda4 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004dda6 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004dda8 adds r3, 1                                        |     r3++;
    0x0004ddaa str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004ddac movs r3, 1                                        |     r3 = 1;
    0x0004ddae strb r3, [r2, 0x1e]                               |     *((r2 + 0x1e)) = r3;
    0x0004ddb0 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004ddb2 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004ddb6 b 0x4d740                                         |     goto label_7;
    0x0004ddb8 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0004ddba ldr r3, [r2, 0x74]                                |     r3 = *((r2 + 0x74));
    0x0004ddbc adds r3, 1                                        |     r3++;
    0x0004ddbe str r3, [r2, 0x74]                                |     *((r2 + 0x74)) = r3;
    0x0004ddc0 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004ddc2 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004ddc4 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004ddc6 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004ddc8 ldr.w r3, [r3, r2, lsl 2]                         |     offset_12 = r2 << 2;
                                                                 |     r3 = *((r3 + offset_12));
    0x0004ddcc str r3, [sp, 0x48]                                |     *(arg_48h) = r3;
    0x0004ddce ldr r3, [r3, 0x40]                                |     r3 = *((r3 + 0x40));
    0x0004ddd0 str r3, [sp, 0x4c]                                |     *(arg_4ch) = r3;
    0x0004ddd2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004ddd4 beq.w 0x51bb0                                     |         goto label_341;
                                                                 |     }
    0x0004ddd8 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x0004ddda vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0004ddde vstr d16, [sp, 0xa8]                              |     __asm ("vstr d16, [sp, 0xa8]");
    0x0004dde2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004dde4 beq.w 0x51d82                                     |         goto label_342;
                                                                 |     }
    0x0004dde8 ldr r1, [sp, 0x48]                                |     r1 = *(arg_48h);
    0x0004ddea mov r0, fp                                        |     r0 = fp;
    0x0004ddec bl 0x30960                                        |     r0 = fcn_00030960 (r0, r1);
    0x0004ddf0 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ddf2 bne.w 0x51272                                     |         goto label_343;
                                                                 |     }
    0x0004ddf6 ldr r3, [sp, 0x4c]                                |     r3 = *(arg_4ch);
    0x0004ddf8 ldr r2, [r3, 0x18]                                |     r2 = *((r3 + 0x18));
    0x0004ddfa cmp r2, 0x10                                      |     
    0x0004ddfc mov r3, r2                                        |     r3 = r2;
    0x0004ddfe it ge                                             |     
                                                                 |     if (r2 < 0x10) {
    0x0004de00 movge r3, 0x10                                    |         r3 = 0x10;
                                                                 |     }
    0x0004de02 cmp r2, 2                                         |     
                                                                 |     if (r2 <= 2) {
    0x0004de04 ble.w 0x531a8                                     |         goto label_344;
                                                                 |     }
    0x0004de08 movs r4, 2                                        |     r4 = 2;
                                                                 |     do {
    0x0004de0a lsls r4, r4, 1                                    |         r4 <<= 1;
    0x0004de0c cmp r3, r4                                        |         
    0x0004de0e bgt 0x4de0a                                       |         
                                                                 |     } while (r3 > r4);
    0x0004de10 movs r1, 0x34                                     |     r1 = 0x34;
    0x0004de12 mov r5, r4                                        |     r5 = r4;
    0x0004de14 mul r1, r4, r1                                    |     r1 = r4 * r1;
                                                                 | label_200:
    0x0004de18 mov r0, fp                                        |     r0 = fp;
    0x0004de1a bl 0xdb58                                         |     fcn_0000db58 (r0, r1);
    0x0004de1e ldr r2, [sp, 0x4c]                                |     r2 = *(arg_4ch);
    0x0004de20 str r0, [r2, 0x24]                                |     *((r2 + 0x24)) = r0;
    0x0004de22 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004de24 beq.w 0x5355c                                     |         goto label_345;
                                                                 |     }
    0x0004de28 add.w r5, r5, r5, lsl 1                           |     r5 += (r5 << 1);
    0x0004de2c ldr r2, [sp, 0x4c]                                |     r2 = *(arg_4ch);
    0x0004de2e mov sl, fp                                        |     sl = fp;
    0x0004de30 add.w r3, r0, r5, lsl 4                           |     r3 = r0 + (r5 << 4);
    0x0004de34 str r4, [r2, 0x14]                                |     *((r2 + 0x14)) = r4;
    0x0004de36 str r3, [r2, 0x28]                                |     *((r2 + 0x28)) = r3;
    0x0004de38 movs r3, 0                                        |     r3 = 0;
    0x0004de3a str r3, [sp, 0x50]                                |     *(arg_50h) = r3;
    0x0004de3c add r3, sp, 0xb0                                  |     r3 += arg_b0h;
    0x0004de3e ldr r2, [r2, 0x18]                                |     r2 = *((r2 + 0x18));
    0x0004de40 str r3, [sp, 0x3c]                                |     *(arg_3ch) = r3;
    0x0004de42 b 0x4de84                                         |     
                                                                 |     while (r0 != 0) {
    0x0004de44 ldrd r3, r2, [r8, 8]                              |         __asm ("ldrd r3, r2, [r8, 8]");
    0x0004de48 mov sl, fp                                        |         sl = fp;
    0x0004de4a mov fp, r0                                        |         
                                                                 | label_10:
    0x0004de4c strd r3, r2, [r7, 8]                              |         __asm ("strd r3, r2, [r7, 8]");
                                                                 | label_91:
    0x0004de50 ldr r3, [sp, 0x4c]                                |         r3 = *(arg_4ch);
    0x0004de52 ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
                                                                 | label_95:
    0x0004de54 ldr r7, [sp, 0x50]                                |         r7 = *(arg_50h);
    0x0004de56 ldr r2, [sp, 0x58]                                |         r2 = *(arg_58h);
                                                                 | label_90:
    0x0004de58 cmp r3, 0x10                                      |         
                                                                 |         if (r3 <= 0x10) {
    0x0004de5a ble.w 0x52762                                     |             goto label_346;
                                                                 |         }
    0x0004de5e ldr r3, [sp, 0x4c]                                |         r3 = *(arg_4ch);
    0x0004de60 vmov.i32 d16, 0                                   |         __asm ("vmov.i32 d16, 0");
    0x0004de64 ldr r1, [r3, 0x2c]                                |         r1 = *((r3 + 0x2c));
    0x0004de66 str r2, [r3, 0x18]                                |         *((r3 + 0x18)) = r2;
    0x0004de68 str r7, [r3, 0x2c]                                |         *((r3 + 0x2c)) = r7;
    0x0004de6a str r1, [sp, 0x50]                                |         *(arg_50h) = r1;
    0x0004de6c ldrd r0, r1, [sp, 0xa8]                           |         __asm ("ldrd r0, r1, [arg_a8h]");
    0x0004de70 vstr d16, [r3, 8]                                 |         __asm ("vstr d16, [r3, 8]");
    0x0004de74 strd r0, r1, [r3]                                 |         __asm ("strd r0, r1, [r3]");
    0x0004de78 vstr d16, [sp, 0xa8]                              |         __asm ("vstr d16, [sp, 0xa8]");
    0x0004de7c cmp.w fp, 0                                       |         
                                                                 |         if (fp != 0) {
    0x0004de80 bne.w 0x5272a                                     |             goto label_347;
                                                                 |         }
                                                                 | label_102:
    0x0004de84 movs r3, 0                                        |         r3 = 0;
    0x0004de86 mov fp, sl                                        |         
    0x0004de88 str r3, [sp, 0x58]                                |         *(arg_58h) = r3;
    0x0004de8a add r3, sp, 0xd8                                  |         r3 += arg_d8h;
    0x0004de8c str r3, [sp, 0x54]                                |         *(arg_54h) = r3;
                                                                 | label_92:
    0x0004de8e ldr r3, [sp, 0x58]                                |         r3 = *(arg_58h);
    0x0004de90 cmp.w r2, r3, lsl 4                               |         
                                                                 |         if (r2 <= r3) {
    0x0004de94 ble.w 0x51d00                                     |             goto label_348;
                                                                 |         }
    0x0004de98 ldr r0, [sp, 0x54]                                |         r0 = *(arg_54h);
    0x0004de9a movs r2, 0x28                                     |         r2 = 0x28;
    0x0004de9c movs r1, 0                                        |         r1 = 0;
    0x0004de9e mov.w sl, 0                                       |         sl = 0;
    0x0004dea2 blx 0x5fcc                                        |         fcn_00005fcc ();
    0x0004dea6 ldr r3, [sp, 0x48]                                |         r3 = *(arg_48h);
    0x0004dea8 strd sl, sl, [sp, 0x28]                           |         __asm ("strd sl, sl, [sp, 0x28]");
    0x0004deac ldr r7, [r3, 0x40]                                |         r7 = *((r3 + 0x40));
    0x0004deae add r3, sp, 0xb4                                  |         r3 += arg_b4h;
    0x0004deb0 str r3, [sp, 0x34]                                |         *(arg_34h) = r3;
    0x0004deb2 ldrd r5, sb, [r7, 8]                              |         __asm ("ldrd r5, sb, [r7, 8]");
                                                                 | label_88:
    0x0004deb6 ldr.w r3, [fp, 0x10]                              |         r3 = *(arg_10h);
    0x0004deba movs r1, 0x80                                     |         r1 = 0x80;
    0x0004debc ldr r2, [r7, 0x2c]                                |         r2 = *((r7 + 0x2c));
    0x0004debe mov r0, fp                                        |         r0 = fp;
    0x0004dec0 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x0004dec2 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x0004dec4 ldr r4, [r3, 0x20]                                |         r4 = *((r3 + 0x20));
    0x0004dec6 ldr r3, [r7, 0x24]                                |         r3 = *((r7 + 0x24));
    0x0004dec8 add.w r8, r3, sl                                  |         r8 = r3 + sl;
    0x0004decc str.w r2, [r8, 0x18]                              |         __asm ("str.w r2, [r8, 0x18]");
    0x0004ded0 str.w r5, [r3, sl]                                |         __asm ("str.w r5, [r3, sl]");
    0x0004ded4 str.w r1, [r8, 0x10]                              |         __asm ("str.w r1, [r8, 0x10]");
    0x0004ded8 str.w sb, [r8, 4]                                 |         __asm ("str.w sb, [r8, 4]");
    0x0004dedc bl 0xd3a0                                         |         fcn_0000d3a0 (r0, r1);
    0x0004dee0 mov r1, r4                                        |         r1 = r4;
    0x0004dee2 str.w r0, [r8, 0x1c]                              |         __asm ("str.w r0, [r8, 0x1c]");
    0x0004dee6 str.w r4, [r8, 0x28]                              |         __asm ("str.w r4, [r8, 0x28]");
    0x0004deea mov r0, fp                                        |         r0 = fp;
    0x0004deec bl 0xd3a0                                         |         r0 = fcn_0000d3a0 (r0, r1);
    0x0004def0 mov r6, r0                                        |         r6 = r0;
    0x0004def2 str.w r0, [r8, 0x24]                              |         __asm ("str.w r0, [r8, 0x24]");
    0x0004def6 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x0004def8 beq.w 0x51ace                                     |             goto label_349;
                                                                 |         }
    0x0004defc asrs r3, r4, 0x1f                                 |         r3 = r4 >> 0x1f;
    0x0004defe mov r2, r4                                        |         r2 = r4;
    0x0004df00 mov r0, r5                                        |         r0 = r5;
    0x0004df02 mov r1, sb                                        |         r1 = sb;
    0x0004df04 bl 0x5e500                                        |         fcn_0005e500 (r0, r1, r2, r3);
    0x0004df08 ldrd r0, r3, [r7]                                 |         __asm ("ldrd r0, r3, [r7]");
    0x0004df0c mov r1, r2                                        |         r1 = r2;
                                                                 |         if (r2 == 0) {
    0x0004df0e cbz r2, 0x4df34                                   |             goto label_350;
                                                                 |         }
    0x0004df10 subs r2, r4, r2                                   |         r2 = r4 - r2;
    0x0004df12 add r1, r6                                        |         r1 += r6;
    0x0004df14 adds.w ip, r2, r5                                 |         
    0x0004df18 adc.w r4, sb, r2, asr 31                          |         __asm ("adc.w r4, sb, r2, asr 31");
    0x0004df1c cmp r0, ip                                        |         
    0x0004df1e sbcs r3, r4                                       |         __asm ("sbcs r3, r4");
    0x0004df20 it lt                                             |         
                                                                 |         if (r0 >= ip) {
    0x0004df22 sublt r2, r0, r5                                  |             r2 = r0 - r5;
                                                                 |         }
    0x0004df24 ldr r0, [r7, 0x2c]                                |         r0 = *((r7 + 0x2c));
    0x0004df26 ldr r3, [r0]                                      |         r3 = *(r0);
    0x0004df28 strd r5, sb, [sp]                                 |         __asm ("strd r5, sb, [sp]");
    0x0004df2c ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
    0x0004df2e blx r3                                            |         r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004df30 cmp r0, 0                                         |         
    0x0004df32 bne 0x4de44                                       |         
                                                                 |     }
                                                                 | label_350:
    0x0004df34 ldr r6, [sp, 0x3c]                                |     r6 = *(arg_3ch);
    0x0004df36 mov r1, r8                                        |     r1 = r8;
    0x0004df38 ldrd r4, r5, [r7]                                 |     __asm ("ldrd r4, r5, [r7]");
    0x0004df3c mov r0, fp                                        |     r0 = fp;
    0x0004df3e mov r2, r6                                        |     r2 = r6;
    0x0004df40 strd r4, r5, [r8, 8]                              |     __asm ("strd r4, r5, [r8, 8]");
    0x0004df44 bl 0x1a3d0                                        |     fcn_0001a3d0 (r0, r1, r2);
    0x0004df48 ldr r2, [sp, 0x34]                                |     r2 = *(arg_34h);
    0x0004df4a ldr r4, [r6]                                      |     r4 = *(r6);
    0x0004df4c ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x0004df50 ldr r6, [r2]                                      |     r6 = *(r2);
    0x0004df52 ldr r1, [sp, 0x28]                                |     r1 = *(arg_28h);
    0x0004df54 ldr.w r2, [r8, 4]                                 |     r2 = *((r8 + 4));
    0x0004df58 adds r3, r4, r3                                   |     r3 = r4 + r3;
    0x0004df5a str.w r3, [r8, 8]                                 |     __asm ("str.w r3, [r8, 8]");
    0x0004df5e adc.w r2, r6, r2                                  |     __asm ("adc.w r2, r6, r2");
    0x0004df62 adds r4, r1, r4                                   |     r4 = r1 + r4;
    0x0004df64 ldr r1, [sp, 0x2c]                                |     r1 = *(arg_2ch);
    0x0004df66 str.w r2, [r8, 0xc]                               |     __asm ("str.w r2, [r8, 0xc]");
    0x0004df6a adc.w r6, r6, r1                                  |     __asm ("adc.w r6, r6, r1");
    0x0004df6e strd r4, r6, [sp, 0x28]                           |     __asm ("strd r4, r6, [sp, 0x28]");
    0x0004df72 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004df74 beq.w 0x51914                                     |         goto label_351;
                                                                 |     }
    0x0004df78 mov sl, fp                                        |     sl = fp;
    0x0004df7a mov fp, r0                                        |     
    0x0004df7c b 0x4de4c                                         |     goto label_10;
    0x0004dfa8 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004dfaa ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004dfac ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004dfae add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004dfb2 add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004dfb6 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004dfb8 lsls r2, r3, 0x1a                                 |     r2 = r3 << 0x1a;
                                                                 |     if (r2 < r3) {
    0x0004dfba bmi.w 0x50c10                                     |         goto label_352;
                                                                 |     }
                                                                 | label_48:
    0x0004dfbe mov r0, r4                                        |     r0 = r4;
    0x0004dfc0 bl 0xfdb8                                         |     fcn_0000fdb8 (r0);
    0x0004dfc4 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004dfc6 movs r6, 0                                        |     r6 = 0;
    0x0004dfc8 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004dfca subs r3, 1                                        |     r3--;
    0x0004dfcc str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004dfce b 0x4db8a                                         |     goto label_11;
    0x0004dfd0 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004dfd2 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004dfd4 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x0004dfd6 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004dfda add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004dfde ldrh r3, [r3, 0x1c]                               |     r3 = *((r3 + 0x1c));
    0x0004dfe0 lsls r3, r3, 0x1f                                 |     r3 <<= 0x1f;
                                                                 |     if (r3 >= r3) {
    0x0004dfe2 bpl.w 0x50e56                                     |         goto label_353;
                                                                 |     }
    0x0004dfe6 ldr r6, [sp, 0x20]                                |     r6 = *(arg_20h);
    0x0004dfe8 ldr r3, [r6, 4]                                   |     r3 = *((r6 + 4));
    0x0004dfea cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004dfec bne.w 0x5386e                                     |         goto label_354;
                                                                 |     }
    0x0004dff0 ldr r5, [sp, 0x24]                                |     r5 = *((sp + 0x24));
    0x0004dff2 ldr.w r0, [r5, 0xb0]                              |     r0 = *((r5 + 0xb0));
    0x0004dff6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004dff8 beq.w 0x53b06                                     |         goto label_355;
                                                                 |     }
    0x0004dffc ldr.w r3, [r5, 0xb8]                              |     r3 = *((r5 + 0xb8));
    0x0004e000 ldr r1, [r5, 0x5c]                                |     r1 = *((r5 + 0x5c));
    0x0004e002 ldr r4, [r0, 4]                                   |     r4 = *((r0 + 4));
    0x0004e004 subs r2, r3, 1                                    |     r2 = r3 - 1;
    0x0004e006 ldr.w r3, [fp, 0x54]                              |     r3 = *(arg_54h);
    0x0004e00a str.w r2, [r5, 0xb8]                              |     __asm ("str.w r2, [r5, 0xb8]");
    0x0004e00e str.w r4, [r5, 0xb0]                              |     __asm ("str.w r4, [r5, 0xb0]");
    0x0004e012 add r3, r1                                        |     r3 += r1;
    0x0004e014 strd r1, r3, [fp, 0x50]                           |     __asm ("strd r1, r3, [fp, 0x50]");
    0x0004e018 bl 0x7cc0                                         |     fcn_00007cc0 (r0);
    0x0004e01c ldr.w r2, [fp, 0x20]                              |     r2 = *(arg_20h);
    0x0004e020 ldr r3, [r6, 8]                                   |     r3 = *((r6 + 8));
    0x0004e022 str r2, [sp, 0x68]                                |     *(arg_68h) = r2;
    0x0004e024 ldr.w r2, [fp, 0x24]                              |     r2 = *((fp + 0x24));
    0x0004e028 cmp r3, 4                                         |     
    0x0004e02a str r2, [sp, 0x6c]                                |     *(arg_6ch) = r2;
                                                                 |     if (r3 == 4) {
    0x0004e02c beq.w 0x51c7a                                     |         goto label_356;
                                                                 |     }
    0x0004e030 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x0004e032 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e034 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x0004e036 str r3, [sp, 0x40]                                |     *(arg_40h) = r3;
                                                                 | label_100:
    0x0004e038 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004e03a ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004e03c str r3, [sp, 0x44]                                |     *(arg_44h) = r3;
    0x0004e03e b.w 0x4d26a                                       |     goto label_2;
    0x0004e042 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e044 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004e046 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004e048 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e04c add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004e050 movs r2, 0x80                                     |     r2 = 0x80;
    0x0004e052 strh r2, [r3, 0x1c]                               |     *((r3 + 0x1c)) = r2;
    0x0004e054 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0004e056 adds r3, 1                                        |     r3++;
    0x0004e058 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e05a b.w 0x4d26a                                       |     goto label_2;
    0x0004e05e ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004e060 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004e062 ldr r3, [r1, 4]                                   |     r3 = *((r1 + 4));
    0x0004e064 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e068 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004e06c ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004e06e str r2, [r3, 0x10]                                |     *((r3 + 0x10)) = r2;
    0x0004e070 asrs r2, r2, 0x1f                                 |     r2 >>= 0x1f;
    0x0004e072 str r2, [r3, 0x14]                                |     *((r3 + 0x14)) = r2;
    0x0004e074 ldr r2, [r1, 8]                                   |     r2 = *((r1 + 8));
    0x0004e076 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e078 movs r2, 4                                        |     r2 = 4;
    0x0004e07a strh r2, [r3, 0x1c]                               |     *((r3 + 0x1c)) = r2;
    0x0004e07c b.w 0x4d26a                                       |     goto label_2;
    0x0004e080 ldr r3, [sp, 0x80]                                |     r3 = *(arg_80h);
    0x0004e082 cmp r3, 0                                         |     
    0x0004e084 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
                                                                 |     if (r3 < 0) {
    0x0004e086 blt.w 0x511c2                                     |         goto label_357;
                                                                 |     }
    0x0004e08a ite eq                                            |     
                                                                 |     if (r3 != 0) {
    0x0004e08c ldreq r3, [r3, 8]                                 |         r3 = *((r3 + 8));
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x0004e08e ldrne r3, [r3, 0xc]                               |         r3 = *((r3 + 0xc));
                                                                 |     }
    0x0004e090 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e092 b.w 0x4d26a                                       |     goto label_2;
    0x0004e096 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e098 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004e09a adds r3, 1                                        |     r3++;
    0x0004e09c str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e09e ldrb r3, [r2, 3]                                  |     r3 = *((r2 + 3));
    0x0004e0a0 ldrd r6, r5, [r2, 0xc]                            |     __asm ("ldrd r6, r5, [r2, 0xc]");
    0x0004e0a4 ldrd r7, r8, [r2, 4]                              |     __asm ("ldrd r7, r8, [r2, 4]");
    0x0004e0a8 tst.w r3, 1                                       |     
    0x0004e0ac ldr r3, [sp, 0x7c]                                |     r3 = *(arg_7ch);
    0x0004e0ae it eq                                             |     
                                                                 |     if ((r3 & 1) != 0) {
    0x0004e0b0 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x0004e0b2 cmp r6, 0                                         |     
                                                                 |     if (r6 <= 0) {
    0x0004e0b4 ble.w 0x53768                                     |         goto label_358;
                                                                 |     }
    0x0004e0b8 add.w sb, r5, 0x10                                |     sb = r5 + 0x10;
    0x0004e0bc str.w fp, [sp, 0x28]                              |     __asm ("str.w fp, [arg_28h]");
    0x0004e0c0 str r6, [sp, 0x20]                                |     *(arg_20h) = r6;
    0x0004e0c2 movs r4, 0                                        |     r4 = 0;
    0x0004e0c4 mov r6, r5                                        |     r6 = r5;
    0x0004e0c6 ldr.w fp, [sp, 0x44]                              |     fp = *(arg_44h);
    0x0004e0ca mov r5, r3                                        |     r5 = r3;
    0x0004e0cc b 0x4e0d8                                         |     
                                                                 |     while (r0 == 0) {
    0x0004e0ce ldr r3, [sp, 0x20]                                |         r3 = *(arg_20h);
    0x0004e0d0 adds r4, 1                                        |         r4++;
    0x0004e0d2 cmp r3, r4                                        |         
                                                                 |         if (r3 == r4) {
    0x0004e0d4 beq.w 0x51d30                                     |             goto label_359;
                                                                 |         }
    0x0004e0d8 mov r0, r4                                        |         r0 = r4;
                                                                 |         if (r5 != 0) {
    0x0004e0da cbz r5, 0x4e0e0                                   |             
    0x0004e0dc ldr.w r0, [r5, r4, lsl 2]                         |             offset_13 = r4 << 2;
                                                                 |             r0 = *((r5 + offset_13));
                                                                 |         }
    0x0004e0e0 ldr r2, [r6, 0x10]                                |         r2 = *((r6 + 0x10));
    0x0004e0e2 add.w r1, r0, r8                                  |         r1 = r0 + r8;
    0x0004e0e6 add r0, r7                                        |         r0 += r7;
    0x0004e0e8 add.w r1, r1, r1, lsl 2                           |         r1 += (r1 << 2);
    0x0004e0ec add.w r0, r0, r0, lsl 2                           |         r0 += (r0 << 2);
    0x0004e0f0 ldrb.w sl, [r2, r4]                               |         sl = *((r2 + r4));
    0x0004e0f4 add.w r1, fp, r1, lsl 3                           |         r1 = fp + (r1 << 3);
    0x0004e0f8 ldr r2, [sb, 4]!                                  |         r2 = *((sb += 4));
    0x0004e0fc add.w r0, fp, r0, lsl 3                           |         r0 = fp + (r0 << 3);
    0x0004e100 bl 0x21bfc                                        |         r0 = fcn_00021bfc (r0, r1, r2);
    0x0004e104 cmp r0, 0                                         |         
    0x0004e106 beq 0x4e0ce                                       |         
                                                                 |     }
    0x0004e108 ldr.w fp, [sp, 0x28]                              |     fp = *(arg_28h);
    0x0004e10c str r0, [sp, 0x80]                                |     *(arg_80h) = r0;
    0x0004e10e cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x0004e112 beq.w 0x52722                                     |         goto label_360;
                                                                 |     }
    0x0004e116 rsbs r3, r0, 0                                    |     r3 = r0 - ;
    0x0004e118 str r3, [sp, 0x80]                                |     *(arg_80h) = r3;
    0x0004e11a movs r3, 0                                        |     r3 = 0;
    0x0004e11c str r3, [sp, 0x7c]                                |     *(arg_7ch) = r3;
    0x0004e11e b.w 0x4d26a                                       |     goto label_2;
    0x0004e122 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e124 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0004e126 str r3, [sp, 0x7c]                                |     *(arg_7ch) = r3;
    0x0004e128 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e12a adds r3, 1                                        |     r3++;
    0x0004e12c str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e12e b.w 0x4d26a                                       |     goto label_2;
    0x0004e132 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e134 ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004e136 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e138 adds r3, 1                                        |     r3++;
    0x0004e13a add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004e13e str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e140 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004e142 add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004e146 ldrh r5, [r4, 0x1c]                               |     r5 = *((r4 + 0x1c));
    0x0004e148 lsls r1, r5, 0x1d                                 |     r1 = r5 << 0x1d;
                                                                 |     if (r1 >= r5) {
    0x0004e14a bpl.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004e14e mov r0, r4                                        |     r0 = r4;
    0x0004e150 bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x0004e154 and r3, r5, 0xbe00                                |     r3 = r5 & 0xbe00;
    0x0004e158 vstr d0, [r4, 8]                                  |     __asm ("vstr d0, [r4, 8]");
    0x0004e15c orr r3, r3, 8                                     |     r3 |= 8;
    0x0004e160 strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x0004e162 b.w 0x4d26a                                       |     goto label_2;
    0x0004e166 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e168 ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004e16a ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004e16c add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004e170 add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004e174 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004e176 lsls r6, r3, 0x1d                                 |     r6 = r3 << 0x1d;
                                                                 |     if (r6 >= r3) {
    0x0004e178 bpl.w 0x51e44                                     |         goto label_361;
                                                                 |     }
                                                                 | label_110:
    0x0004e17c ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004e17e and r3, r3, 0xbe00                                |     r3 &= 0xbe00;
    0x0004e182 orr r3, r3, 4                                     |     r3 |= 4;
    0x0004e186 strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x0004e188 adds r2, 1                                        |     r2++;
    0x0004e18a str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e18c b.w 0x4d26a                                       |     goto label_2;
    0x0004e190 ldr r5, [sp, 0x20]                                |     r5 = *(arg_20h);
    0x0004e192 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e194 ldr r4, [r5, 4]                                   |     r4 = *((r5 + 4));
    0x0004e196 adds r3, 1                                        |     r3++;
    0x0004e198 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e19a ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004e19c add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004e1a0 add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004e1a4 mov r0, r4                                        |     r0 = r4;
    0x0004e1a6 bl 0xc318                                         |     fcn_0000c318 (r0, r1);
    0x0004e1aa ldr r2, [r5, 8]                                   |     r2 = *((r5 + 8));
    0x0004e1ac ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x0004e1ae adds r3, r3, r2                                   |     r3 += r2;
    0x0004e1b0 str r3, [r4, 0x10]                                |     *((r4 + 0x10)) = r3;
    0x0004e1b2 ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x0004e1b4 adc.w r3, r3, r2, asr 31                          |     __asm ("adc.w r3, r3, r2, asr 31");
    0x0004e1b8 str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x0004e1ba b.w 0x4d26a                                       |     goto label_2;
    0x0004e1be ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e1c0 ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004e1c2 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e1c4 adds r3, 1                                        |     r3++;
    0x0004e1c6 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e1c8 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0004e1ca beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004e1ce ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004e1d0 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004e1d4 movw r2, 0x2460                                   |     r2 = 0x2460;
    0x0004e1d8 add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004e1dc ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004e1de tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x0004e1e0 bne.w 0x52e40                                     |         goto label_362;
                                                                 |     }
    0x0004e1e4 ldr r1, [r4, 0x24]                                |     r1 = *((r4 + 0x24));
                                                                 |     if (r1 != 0) {
    0x0004e1e6 cbz r1, 0x4e1f2                                   |         
    0x0004e1e8 ldr r0, [r4]                                      |         r0 = *(r4);
    0x0004e1ea bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x0004e1ee movs r3, 0                                        |         r3 = 0;
    0x0004e1f0 str r3, [r4, 0x24]                                |         *((r4 + 0x24)) = r3;
                                                                 |     }
    0x0004e1f2 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0004e1f6 movs r3, 0                                        |     r3 = 0;
    0x0004e1f8 str r3, [r4, 4]                                   |     *((r4 + 4)) = r3;
    0x0004e1fa movs r3, 4                                        |     r3 = 4;
    0x0004e1fc strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x0004e1fe vstr d16, [r4, 0x10]                              |     __asm ("vstr d16, [r4, 0x10]");
    0x0004e202 b.w 0x4d26a                                       |     goto label_2;
    0x0004e206 ldr r3, [sp, 0x74]                                |     r3 = *(arg_74h);
    0x0004e208 ldr r1, [sp, 0x30]                                |     r1 = *(arg_30h);
    0x0004e20a ldr.w r2, [fp, 0x11c]                             |     r2 = *(arg_11ch);
    0x0004e20e cmp r1, r3                                        |     
    0x0004e210 ite lo                                            |     
                                                                 |     if (r1 >= r3) {
    0x0004e212 movlo r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r1 < r3) {
    0x0004e214 movhs r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0004e216 cmp r2, 0                                         |     
    0x0004e218 it eq                                             |     
                                                                 |     if (r2 != 0) {
    0x0004e21a moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x0004e21c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004e21e bne.w 0x51184                                     |         goto label_363;
                                                                 |     }
                                                                 | label_63:
    0x0004e222 ldr r1, [sp, 0x24]                                |     r1 = *((sp + 0x24));
    0x0004e224 ldrd r2, r3, [r1, 0x90]                           |     __asm ("ldrd r2, r3, [r1, 0x90]");
    0x0004e228 ldr r1, [r1]                                      |     r1 = *(r1);
    0x0004e22a cmp r2, 1                                         |     
    0x0004e22c sbcs r3, r3, 0                                    |     __asm ("sbcs r3, r3, 0");
                                                                 |     if (r2 >= 1) {
    0x0004e230 bge.w 0x51196                                     |         goto label_364;
                                                                 |     }
    0x0004e234 ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0004e236 movs r1, 1                                        |     r1 = 1;
    0x0004e238 bl 0x2ce80                                        |     r0 = fcn_0002ce80 (r0, r1);
    0x0004e23c mov sb, r0                                        |     sb = r0;
    0x0004e23e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004e240 beq.w 0x53c26                                     |         goto label_365;
                                                                 |     }
    0x0004e244 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e246 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x0004e24a ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004e24c ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
    0x0004e24e b.w 0x50538                                       |     goto label_39;
    0x0004e252 ldr r7, [sp, 0x20]                                |     r7 = *(arg_20h);
    0x0004e254 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004e256 ldr.w r4, [fp, 0x10]                              |     r4 = *(arg_10h);
    0x0004e25a ldr r3, [r7, 0xc]                                 |     r3 = *((r7 + 0xc));
    0x0004e25c add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e260 add.w r5, r1, r3, lsl 3                           |     r5 = r1 + (r3 << 3);
    0x0004e264 ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x0004e266 mov r0, r5                                        |     r0 = r5;
    0x0004e268 add.w r4, r4, r3, lsl 4                           |     r4 += (r3 << 4);
    0x0004e26c bl 0xc318                                         |     fcn_0000c318 (r0, r1);
    0x0004e270 ldr r2, [r5, 0x10]                                |     r2 = *((r5 + 0x10));
    0x0004e272 ldr r1, [r7, 8]                                   |     r1 = *((r7 + 8));
    0x0004e274 ldr r0, [r4, 4]                                   |     r0 = *((r4 + 4));
    0x0004e276 bl 0x2c060                                        |     fcn_0002c060 (r0, r1, r2);
    0x0004e27a ldr r3, [r7, 8]                                   |     r3 = *((r7 + 8));
    0x0004e27c mov r6, r0                                        |     r6 = r0;
    0x0004e27e cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0004e280 beq.w 0x51e2e                                     |         goto label_366;
                                                                 |     }
    0x0004e284 cmp r3, 2                                         |     
    0x0004e286 ittt eq                                           |     
                                                                 |     if (r3 != 2) {
    0x0004e288 ldreq r3, [r4, 0xc]                               |         r3 = *((r4 + 0xc));
                                                                 |     }
                                                                 |     if (r3 != 2) {
    0x0004e28a ldreq r2, [r5, 0x10]                              |         r2 = *((r5 + 0x10));
                                                                 |     }
                                                                 |     if (r3 != 2) {
    0x0004e28c strbeq r2, [r3, 0x4c]                             |         *((r3 + 0x4c)) = r2;
                                                                 |     }
                                                                 | label_109:
    0x0004e290 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e292 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004e294 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004e296 adds r2, 1                                        |     r2++;
    0x0004e298 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e29a cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x0004e29c bne.w 0x4d73a                                     |         goto label_12;
                                                                 |     }
    0x0004e2a0 ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
                                                                 |     if (r3 == 0) {
    0x0004e2a4 cbz r3, 0x4e2b8                                   |         goto label_367;
                                                                 |     }
                                                                 |     do {
    0x0004e2a6 ldrb.w r2, [r3, 0x58]                             |         r2 = *((r3 + 0x58));
    0x0004e2aa orr r2, r2, 0x20                                  |         r2 |= 0x20;
    0x0004e2ae strb.w r2, [r3, 0x58]                             |         *((r3 + 0x58)) = r2;
    0x0004e2b2 ldr r3, [r3, 0x34]                                |         r3 = *((r3 + 0x34));
    0x0004e2b4 cmp r3, 0                                         |         
    0x0004e2b6 bne 0x4e2a6                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_367:
    0x0004e2b8 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0004e2ba ldrb.w r3, [r2, 0x58]                             |     r3 = *((r2 + 0x58));
    0x0004e2be bfc r3, 5, 1                                      |     value_14 = BIT_MASK (1, );
                                                                 |     value_14 = ~value_14;
                                                                 |     r3 &= value_14;
    0x0004e2c2 strb.w r3, [r2, 0x58]                             |     *((r2 + 0x58)) = r3;
    0x0004e2c6 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004e2c8 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004e2cc b.w 0x4d740                                       |     goto label_7;
    0x0004e2d0 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e2d2 adds r3, 1                                        |     r3++;
    0x0004e2d4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e2d6 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e2d8 ldr r5, [r3, 0x10]                                |     r5 = *((r3 + 0x10));
    0x0004e2da ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004e2dc ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004e2de ldrb r1, [r5], 1                                  |     r1 = *(r5);
                                                                 |     r5++;
    0x0004e2e2 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004e2e6 add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004e2ea cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0004e2ec beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004e2f0 ldr r6, [sp, 0x70]                                |     r6 = *(arg_70h);
                                                                 |     do {
    0x0004e2f2 mov r0, r4                                        |         r0 = r4;
    0x0004e2f4 mov r2, r6                                        |         r2 = r6;
    0x0004e2f6 bl 0x25cf0                                        |         fcn_00025cf0 (r0, r1, r2);
    0x0004e2fa ldrb r1, [r5], 1                                  |         r1 = *(r5);
                                                                 |         r5++;
    0x0004e2fe adds r4, 0x28                                     |         r4 += 0x28;
    0x0004e300 cmp r1, 0                                         |         
    0x0004e302 bne 0x4e2f2                                       |         
                                                                 |     } while (r1 != 0);
    0x0004e304 b.w 0x4d26a                                       |     goto label_2;
    0x0004e308 ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004e30a ldr r7, [sp, 0x24]                                |     r7 = *((sp + 0x24));
    0x0004e30c ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0004e30e ldr r3, [r7, 0x38]                                |     r3 = *((r7 + 0x38));
    0x0004e310 ldr r5, [r1, 0xc]                                 |     r5 = *((r1 + 0xc));
    0x0004e312 ldr.w r4, [r3, r2, lsl 2]                         |     offset_15 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_15));
    0x0004e316 ldr r3, [r1, 8]                                   |     r3 = *((r1 + 8));
    0x0004e318 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004e31a add.w r5, r5, r5, lsl 2                           |     r5 += (r5 << 2);
    0x0004e31e ldrsh.w r6, [r4, 0x14]                            |     r6 = *((r4 + 0x14));
    0x0004e322 mov r0, r4                                        |     r0 = r4;
    0x0004e324 str r3, [sp, 0x28]                                |     *(arg_28h) = r3;
    0x0004e326 add.w r8, r4, 0x58                                |     r8 = r4 + 0x58;
    0x0004e32a ldr r3, [r4]                                      |     r3 = *(r4);
    0x0004e32c str r6, [sp, 0x48]                                |     *(arg_48h) = r6;
    0x0004e32e add.w r5, r2, r5, lsl 3                           |     r5 = r2 + (r5 << 3);
    0x0004e332 str r3, [sp, 0x2c]                                |     *(arg_2ch) = r3;
    0x0004e334 bl 0x2f33c                                        |     fcn_0002f33c (r0);
    0x0004e338 add.w r3, r8, r6, lsl 2                           |     r3 = r8 + (r6 << 2);
    0x0004e33c mov r6, r0                                        |     r6 = r0;
    0x0004e33e str r3, [sp, 0x3c]                                |     *(arg_3ch) = r3;
    0x0004e340 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004e342 bne.w 0x528f6                                     |         goto label_207;
                                                                 |     }
    0x0004e346 ldr r2, [r7, 0x48]                                |     r2 = *((r7 + 0x48));
    0x0004e348 ldr r3, [r4, 0x44]                                |     r3 = *((r4 + 0x44));
    0x0004e34a cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x0004e34c beq.w 0x51e1c                                     |         goto label_368;
                                                                 |     }
                                                                 | label_107:
    0x0004e350 ldrb r3, [r4, 0x19]                               |     r3 = *((r4 + 0x19));
    0x0004e352 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004e354 bne.w 0x51168                                     |         goto label_369;
                                                                 |     }
    0x0004e358 ldrb r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004e35a lsls r1, r3, 0x1d                                 |     r1 = r3 << 0x1d;
                                                                 |     if (r1 < r3) {
    0x0004e35c bmi.w 0x528bc                                     |         goto label_370;
                                                                 |     }
    0x0004e360 ldr.w sb, [sp, 0x2c]                              |     sb = *(arg_2ch);
    0x0004e364 add r7, sp, 0xb0                                  |     r7 += arg_b0h;
    0x0004e366 mov r1, r7                                        |     r1 = r7;
    0x0004e368 mov r0, sb                                        |     r0 = sb;
    0x0004e36a bl 0xb838                                         |     fcn_0000b838 (r0, r1);
    0x0004e36e ldrh.w r1, [sb, 0x2c]                             |     r1 = *((sb + 0x2c));
    0x0004e372 ldr.w r2, [sb, 0x20]                              |     r2 = *((sb + 0x20));
    0x0004e376 ldr r3, [sp, 0xb0]                                |     r3 = *(arg_b0h);
    0x0004e378 ldrh.w r7, [sb, 0x2e]                             |     r7 = *((sb + 0x2e));
    0x0004e37c add r2, r1                                        |     r2 += r1;
    0x0004e37e str r2, [r4, 0x54]                                |     *((r4 + 0x54)) = r2;
    0x0004e380 str r3, [r4, 0x48]                                |     *((r4 + 0x48)) = r3;
                                                                 | label_152:
    0x0004e382 ldr.w r2, [fp, 0x58]                              |     r2 = *(arg_58h);
    0x0004e386 cmp r7, r3                                        |     
    0x0004e388 mov r1, r7                                        |     r1 = r7;
    0x0004e38a it hs                                             |     
                                                                 |     if (r7 < r3) {
    0x0004e38c movhs r1, r3                                      |         r1 = r3;
                                                                 |     }
    0x0004e38e str r1, [r4, 0x4c]                                |     *((r4 + 0x4c)) = r1;
    0x0004e390 cmp r2, r3                                        |     
                                                                 |     if (r2 <= r3) {
    0x0004e392 blo.w 0x4f592                                     |         goto label_30;
                                                                 |     }
    0x0004e396 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004e398 ldr r0, [r4, 0x54]                                |     r0 = *((r4 + 0x54));
    0x0004e39a ldr r2, [r3, 0x48]                                |     r2 = *((r3 + 0x48));
                                                                 | label_173:
    0x0004e39c str r2, [r4, 0x44]                                |     *((r4 + 0x44)) = r2;
    0x0004e39e add.w sl, sp, 0x94                                |     sl += arg_94h;
    0x0004e3a2 ldrb r3, [r0]                                     |     r3 = *(r0);
    0x0004e3a4 lsls r2, r3, 0x18                                 |     r2 = r3 << 0x18;
                                                                 |     if (r2 < r3) {
    0x0004e3a6 bmi.w 0x52c50                                     |         goto label_371;
                                                                 |     }
    0x0004e3aa movs r0, 1                                        |     r0 = 1;
    0x0004e3ac str.w r3, [sl]                                    |     __asm ("str.w r3, [sl]");
                                                                 | label_172:
    0x0004e3b0 ldr r1, [sp, 0x48]                                |     r1 = *(arg_48h);
    0x0004e3b2 movs r2, 0                                        |     r2 = 0;
    0x0004e3b4 str r0, [r4, 0x50]                                |     *((r4 + 0x50)) = r0;
    0x0004e3b6 strh r2, [r4, 0x16]                               |     *((r4 + 0x16)) = r2;
    0x0004e3b8 str.w r3, [r8, r1, lsl 2]                         |     __asm ("str.w r3, [r8, r1, lsl 2]");
    0x0004e3bc ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x0004e3c0 cmp r3, r7                                        |     
    0x0004e3c2 itt hi                                            |     
                                                                 |     if (r3 <= r7) {
    0x0004e3c4 strhi r2, [r4, 0x54]                              |         *((r4 + 0x54)) = r2;
                                                                 |     }
                                                                 |     if (r3 <= r7) {
    0x0004e3c6 strhi r2, [r4, 0x4c]                              |         *((r4 + 0x4c)) = r2;
                                                                 |     }
    0x0004e3c8 movw r2, 0x8003                                   |     
    0x0004e3cc movt r2, 1                                        |     r2 = 0x18003;
    0x0004e3d0 cmp r3, r2                                        |     
                                                                 |     if (r3 > r2) {
    0x0004e3d2 bhi.w 0x5237a                                     |         goto label_372;
                                                                 |     }
    0x0004e3d6 ldr r2, [r4, 0x48]                                |     r2 = *((r4 + 0x48));
    0x0004e3d8 cmp r3, r2                                        |     
                                                                 |     if (r3 > r2) {
    0x0004e3da bhi.w 0x5237a                                     |         goto label_372;
                                                                 |     }
    0x0004e3de movs r3, 0                                        |     r3 = 0;
                                                                 | label_108:
    0x0004e3e0 ldr r2, [sp, 0x28]                                |     r2 = *(arg_28h);
    0x0004e3e2 cmp r6, r2                                        |     
                                                                 |     if (r6 > r2) {
    0x0004e3e4 bgt.w 0x52202                                     |         goto label_373;
                                                                 |     }
    0x0004e3e8 ldr r1, [sp, 0x48]                                |     r1 = *(arg_48h);
    0x0004e3ea ldr r2, [r4, 0x50]                                |     r2 = *((r4 + 0x50));
    0x0004e3ec ldr.w r1, [r8, r1, lsl 2]                         |     offset_16 = r1 << 2;
                                                                 |     r1 = *((r8 + offset_16));
    0x0004e3f0 cmp r2, r1                                        |     
                                                                 |     if (r2 <= r1) {
    0x0004e3f2 blo.w 0x52d34                                     |         goto label_374;
                                                                 |     }
                                                                 | label_131:
    0x0004e3f6 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e3f8 ldrsb.w r2, [r3, 1]                               |     r2 = *((r3 + 1));
    0x0004e3fc ldrh r3, [r5, 0x1c]                               |     r3 = *((r5 + 0x1c));
    0x0004e3fe adds r2, 8                                        |     r2 += 8;
    0x0004e400 ittt ne                                           |     
                                                                 |     if (r2 == 8) {
    0x0004e402 andne r3, r3, 0xbe00                              |         r3 &= 0xbe00;
                                                                 |     }
                                                                 |     if (r2 == 8) {
    0x0004e406 orrne r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
                                                                 |     if (r2 != 8) {
    0x0004e40a strh r3, [r5, 0x1c]                               |         *((r5 + 0x1c)) = r3;
                                                                 |     }
                                                                 |     if (r2 == 8) {
    0x0004e40c beq.w 0x53f40                                     |         goto label_375;
                                                                 |     }
                                                                 | label_278:
    0x0004e410 and r3, r3, 0x1000                                |     r3 &= 0x1000;
                                                                 | label_62:
    0x0004e414 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004e416 bne.w 0x52930                                     |         goto label_376;
                                                                 |     }
                                                                 | label_156:
    0x0004e41a ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e41c adds r3, 1                                        |     r3++;
    0x0004e41e str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e420 b.w 0x4d26a                                       |     goto label_2;
    0x0004e424 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004e426 ldr r0, [sp, 0x20]                                |     r0 = *(arg_20h);
    0x0004e428 ldr.w r2, [r3, 0xc8]                              |     r2 = *((r3 + 0xc8));
    0x0004e42c ldr r3, [r0, 4]                                   |     r3 = *((r0 + 4));
    0x0004e42e ldrb r1, [r2, r3]                                 |     r1 = *((r2 + r3));
    0x0004e430 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0004e432 beq.w 0x50e48                                     |         goto label_377;
                                                                 |     }
    0x0004e436 ldr r3, [r0, 8]                                   |     r3 = *((r0 + 8));
    0x0004e438 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e43a b.w 0x4d26a                                       |     goto label_2;
    0x0004e43e ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e440 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004e442 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004e444 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004e446 ldr.w r3, [r3, r2, lsl 2]                         |     offset_17 = r2 << 2;
                                                                 |     r3 = *((r3 + offset_17));
    0x0004e44a ldr r4, [r3]                                      |     r4 = *(r3);
    0x0004e44c ldr r6, [r4, 0x44]                                |     r6 = *((r4 + 0x44));
    0x0004e44e mov r5, r6                                        |     r5 = r6;
    0x0004e450 mov r7, r6                                        |     r7 = r6;
    0x0004e452 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0004e454 bne.w 0x50d8c                                     |         goto label_378;
                                                                 |     }
                                                                 | label_52:
    0x0004e458 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x0004e45a strd r5, r7, [r3, 0x10]                           |     __asm ("strd r5, r7, [r3, 0x10]");
    0x0004e45e ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e460 adds r3, 1                                        |     r3++;
    0x0004e462 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e464 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004e466 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004e46a b.w 0x4d740                                       |     goto label_7;
    0x0004e46e ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004e470 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004e472 ldr r4, [r2, 4]                                   |     r4 = *((r2 + 4));
    0x0004e474 ldr r3, [r2, 8]                                   |     r3 = *((r2 + 8));
    0x0004e476 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004e47a add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e47e add.w r4, r1, r4, lsl 3                           |     r4 = r1 + (r4 << 3);
    0x0004e482 add.w r3, r4, r3, lsl 3                           |     r3 = r4 + (r3 << 3);
    0x0004e486 subs r3, 0x28                                     |     r3 -= 0x28;
    0x0004e488 str r3, [sp, 0x28]                                |     *(arg_28h) = r3;
    0x0004e48a ldrd r3, r6, [r2, 0xc]                            |     __asm ("ldrd r3, r6, [r2, 0xc]");
    0x0004e48e add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e492 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0004e496 str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x0004e498 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004e49a ldrb.w r8, [r3, 0x57]                             |     r8 = *((r3 + 0x57));
    0x0004e49e cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0004e4a0 bne.w 0x510b0                                     |         goto label_379;
                                                                 |     }
                                                                 | label_60:
    0x0004e4a4 ldr.w r2, [pc, 0xb80]                             |     r2 = *(0x0004f028);
    0x0004e4a8 movs r3, 0                                        |     r3 = 0;
    0x0004e4aa str.w fp, [sp, 0x34]                              |     __asm ("str.w fp, [arg_34h]");
    0x0004e4ae mov r6, r3                                        |     r6 = r3;
    0x0004e4b0 ldr.w sb, [sp, 0x28]                              |     sb = *(arg_28h);
    0x0004e4b4 mov sl, r3                                        |     sl = r3;
    0x0004e4b6 add r2, pc                                        |     r2 += pc;
    0x0004e4b8 mov r7, r3                                        |     r7 = r3;
    0x0004e4ba mov fp, r3                                        |     
    0x0004e4bc mov r5, r2                                        |     r5 = r2;
    0x0004e4be b 0x4e4f4                                         |     
                                                                 |     while (r2 > 0xb) {
    0x0004e4c0 sub.w r1, r2, 0xc                                 |         r1 = r2 - 0xc;
    0x0004e4c4 lsrs r1, r1, 1                                    |         r1 >>= 1;
                                                                 |         if (r0 != 0) {
    0x0004e4c6 cbz r0, 0x4e4d8                                   |             
                                                                 | label_13:
    0x0004e4c8 orrs.w r0, r7, fp                                 |             r0 = r7 | fp;
                                                                 |             if (r0 != r7) {
    0x0004e4cc bne.w 0x50640                                     |                 goto label_380;
                                                                 |             }
    0x0004e4d0 ldr.w r0, [sb, 0x10]                              |             r0 = *((sb + 0x10));
    0x0004e4d4 add sl, r0                                        |             sl += r0;
    0x0004e4d6 subs r1, r1, r0                                   |             r1 -= r0;
                                                                 |         }
                                                                 | label_36:
    0x0004e4d8 adds r7, r1, r7                                   |         r7 = r1 + r7;
    0x0004e4da adc.w fp, fp, r1, asr 31                          |         __asm ("adc.w fp, fp, r1, asr 31");
    0x0004e4de cmp r2, 0x7f                                      |         
    0x0004e4e0 it ls                                             |         
                                                                 |         if (r2 > 0x7f) {
    0x0004e4e2 movls r1, 1                                       |             r1 = 1;
                                                                 |         }
                                                                 |         if (r2 > 0x7f) {
    0x0004e4e4 bhi.w 0x505f2                                     |             goto label_381;
                                                                 |         }
                                                                 | label_14:
    0x0004e4e8 sub.w sb, sb, 0x28                                |         sb -= 0x28;
    0x0004e4ec add r6, r1                                        |         r6 += r1;
    0x0004e4ee cmp r4, sb                                        |         
                                                                 |         if (r4 > sb) {
    0x0004e4f0 bhi.w 0x5066c                                     |             goto label_382;
                                                                 |         }
    0x0004e4f4 mov r1, r8                                        |         r1 = r8;
    0x0004e4f6 mov r0, sb                                        |         r0 = sb;
    0x0004e4f8 bl 0x7cfc                                         |         r0 = fcn_00007cfc (r0, r1);
    0x0004e4fc mov r2, r0                                        |         r2 = r0;
    0x0004e4fe ldrh.w r0, [sb, 0x1c]                             |         r0 = *((sb + 0x1c));
    0x0004e502 cmp r2, 0xb                                       |         
    0x0004e504 and r0, r0, 0x4000                                |         r0 &= 0x4000;
    0x0004e508 bhi 0x4e4c0                                       |         
                                                                 |     }
    0x0004e50a adds r1, r5, r2                                   |     r1 = r5 + r2;
    0x0004e50c ldrb.w r1, [r1, 0xa6c]                            |     r1 = *((r1 + 0xa6c));
    0x0004e510 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004e512 bne 0x4e4c8                                       |         goto label_13;
                                                                 |     }
    0x0004e514 adds r1, r1, r7                                   |     r1 += r7;
    0x0004e516 mov r7, r1                                        |     r7 = r1;
    0x0004e518 adc fp, fp, 0                                     |     __asm ("adc fp, fp, 0");
    0x0004e51c movs r1, 1                                        |     r1 = 1;
    0x0004e51e b 0x4e4e8                                         |     goto label_14;
    0x0004e520 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e522 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004e524 adds r3, 1                                        |     r3++;
    0x0004e526 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e528 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e52a ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004e52c ldr r1, [r3, 0xc]                                 |     r1 = *((r3 + 0xc));
    0x0004e52e ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004e532 add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x0004e536 mov r2, r7                                        |     r2 = r7;
    0x0004e538 ldr r0, [r3, 4]                                   |     r0 = *((r3 + 4));
    0x0004e53a bl 0x11954                                        |     fcn_00011954 (r0, r1, r2);
    0x0004e53e ldr r3, [sp, 0xd8]                                |     r3 = *(arg_d8h);
    0x0004e540 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004e542 str r3, [r2, 0x10]                                |     *((r2 + 0x10)) = r3;
    0x0004e544 asrs r3, r3, 0x1f                                 |     r3 >>= 0x1f;
    0x0004e546 str r3, [r2, 0x14]                                |     *((r2 + 0x14)) = r3;
    0x0004e548 b.w 0x4d26a                                       |     goto label_2;
    0x0004e54c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e54e ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0004e550 ldr r4, [r3, 8]                                   |     r4 = *((r3 + 8));
    0x0004e552 ldr r3, [r4]                                      |     r3 = *(r4);
    0x0004e554 ldr r5, [r3, 0x34]                                |     r5 = *((r3 + 0x34));
    0x0004e556 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x0004e558 bne.w 0x510dc                                     |         goto label_383;
                                                                 |     }
    0x0004e55c ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e55e adds r3, 1                                        |     r3++;
    0x0004e560 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e562 b.w 0x4d26a                                       |     goto label_2;
    0x0004e566 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e568 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004e56a ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x0004e56c ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0004e56e adds r2, 1                                        |     r2++;
    0x0004e570 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e572 ldrd r2, r3, [r3]                                 |     __asm ("ldrd r2, r3, [r3]");
    0x0004e576 strd r2, r3, [r1, 0x10]                           |     __asm ("strd r2, r3, [r1, 0x10]");
    0x0004e57a b.w 0x4d26a                                       |     goto label_2;
    0x0004e57e ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004e580 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e582 adds r2, 1                                        |     r2++;
    0x0004e584 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004e586 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e588 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004e58a str r3, [r2, 0x10]                                |     *((r2 + 0x10)) = r3;
    0x0004e58c asrs r3, r3, 0x1f                                 |     r3 >>= 0x1f;
    0x0004e58e str r3, [r2, 0x14]                                |     *((r2 + 0x14)) = r3;
    0x0004e590 b.w 0x4d26a                                       |     goto label_2;
    0x0004e594 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e596 ldr r1, [sp, 0x1c]                                |     r1 = *(arg_1ch);
    0x0004e598 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004e59a ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004e59c add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e5a0 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004e5a4 asrs r2, r1, 0x1f                                 |     r2 = r1 >> 0x1f;
    0x0004e5a6 str r2, [r3, 0x14]                                |     *((r3 + 0x14)) = r2;
    0x0004e5a8 ldr r2, [r3, 0x10]                                |     r2 = *((r3 + 0x10));
    0x0004e5aa str r1, [r3, 0x10]                                |     *((r3 + 0x10)) = r1;
    0x0004e5ac adds r2, 1                                        |     r2++;
    0x0004e5ae str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e5b0 movs r2, 4                                        |     r2 = 4;
    0x0004e5b2 strh r2, [r3, 0x1c]                               |     *((r3 + 0x1c)) = r2;
    0x0004e5b4 b.w 0x4d26a                                       |     goto label_2;
    0x0004e5b8 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e5ba movs r1, 0x80                                     |     r1 = 0x80;
    0x0004e5bc ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004e5be ldr r0, [sp, 0x40]                                |     r0 = *(arg_40h);
    0x0004e5c0 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004e5c2 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e5c6 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004e5ca ldr r2, [r3, 0x10]                                |     r2 = *((r3 + 0x10));
    0x0004e5cc add.w r2, r2, r2, lsl 2                           |     r2 += (r2 << 2);
    0x0004e5d0 add.w r2, r0, r2, lsl 2                           |     r2 = r0 + (r2 << 2);
    0x0004e5d4 ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x0004e5d6 strh r1, [r3, 0x1c]                               |     *((r3 + 0x1c)) = r1;
    0x0004e5d8 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e5da b.w 0x4d26a                                       |     goto label_2;
    0x0004e5de ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004e5e0 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004e5e2 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004e5e4 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e5e8 add.w r1, r1, r3, lsl 3                           |     r1 += (r3 << 3);
    0x0004e5ec ldrd r2, r3, [r2, 8]                              |     __asm ("ldrd r2, r3, [r2, 8]");
    0x0004e5f0 str r1, [sp, 0x38]                                |     *(arg_38h) = r1;
    0x0004e5f2 subs r3, 1                                        |     r3--;
    0x0004e5f4 str r3, [r1, 0x10]                                |     *((r1 + 0x10)) = r3;
    0x0004e5f6 asrs r3, r3, 0x1f                                 |     r3 >>= 0x1f;
    0x0004e5f8 str r3, [r1, 0x14]                                |     *((r1 + 0x14)) = r3;
    0x0004e5fa movs r3, 4                                        |     r3 = 4;
    0x0004e5fc strh r3, [r1, 0x1c]                               |     *((r1 + 0x1c)) = r3;
    0x0004e5fe cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0004e600 beq.w 0x50d82                                     |         goto label_384;
                                                                 |     }
    0x0004e604 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e606 b.w 0x4d26a                                       |     goto label_2;
    0x0004e60a ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e60c ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004e60e ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004e610 adds r3, 1                                        |     r3++;
    0x0004e612 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e614 ldrd r3, r2, [r2, 4]                              |     __asm ("ldrd r3, r2, [r2, 4]");
    0x0004e618 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e61c add.w r2, r2, r2, lsl 2                           |     r2 += (r2 << 2);
    0x0004e620 add.w r0, r1, r3, lsl 3                           |     r0 = r1 + (r3 << 3);
    0x0004e624 add.w r2, r1, r2, lsl 3                           |     r2 = r1 + (r2 << 3);
    0x0004e628 ldrh r3, [r0, 0x1c]                               |     r3 = *((r0 + 0x1c));
    0x0004e62a str r2, [sp, 0x38]                                |     *(arg_38h) = r2;
    0x0004e62c ands r4, r3, 1                                    |     r4 = r3 & 1;
                                                                 |     if (r4 != r3) {
    0x0004e630 bne.w 0x50d78                                     |         goto label_385;
                                                                 |     }
    0x0004e634 bl 0xa1d8                                         |     fcn_0000a1d8 (r0);
    0x0004e638 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x0004e63a orrs r0, r1                                       |     r0 |= r1;
    0x0004e63c movw r2, 0x2460                                   |     r2 = 0x2460;
    0x0004e640 ite eq                                            |     
                                                                 |     if (r0 != r1) {
    0x0004e642 moveq r5, 1                                       |         r5 = 1;
                                                                 |     }
                                                                 |     if (r0 == r1) {
    0x0004e644 movne r5, 0                                       |         r5 = 0;
                                                                 |     }
    0x0004e646 ldrh r3, [r3, 0x1c]                               |     r3 = *((r3 + 0x1c));
    0x0004e648 tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x0004e64a bne.w 0x52bd0                                     |         goto label_386;
                                                                 |     }
                                                                 | label_166:
    0x0004e64e ldr r6, [sp, 0x38]                                |     r6 = *(arg_38h);
    0x0004e650 ldr r1, [r6, 0x24]                                |     r1 = *((r6 + 0x24));
                                                                 |     if (r1 != 0) {
    0x0004e652 cbz r1, 0x4e65e                                   |         
    0x0004e654 ldr r0, [r6]                                      |         r0 = *(r6);
    0x0004e656 bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x0004e65a movs r3, 0                                        |         r3 = 0;
    0x0004e65c str r3, [r6, 0x24]                                |         *((r6 + 0x24)) = r3;
                                                                 |     }
    0x0004e65e ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004e660 movs r3, 0                                        |     r3 = 0;
    0x0004e662 str r3, [r2, 4]                                   |     *((r2 + 4)) = r3;
    0x0004e664 movs r3, 4                                        |     r3 = 4;
    0x0004e666 strd r5, r4, [r2, 0x10]                           |     __asm ("strd r5, r4, [r2, 0x10]");
    0x0004e66a strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x0004e66c b.w 0x4d26a                                       |     goto label_2;
    0x0004e670 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004e672 ldrd r6, r3, [r2, 4]                              |     __asm ("ldrd r6, r3, [r2, 4]");
    0x0004e676 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004e678 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e67c add.w r6, r6, r6, lsl 2                           |     r6 += (r6 << 2);
    0x0004e680 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004e684 add.w r6, r2, r6, lsl 3                           |     r6 = r2 + (r6 << 3);
    0x0004e688 str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x0004e68a movw r2, 0x2460                                   |     r2 = 0x2460;
    0x0004e68e ldrh r3, [r3, 0x1c]                               |     r3 = *((r3 + 0x1c));
    0x0004e690 tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x0004e692 bne.w 0x51f90                                     |         goto label_387;
                                                                 |     }
                                                                 | label_119:
    0x0004e696 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004e698 mov r3, r6                                        |     r3 = r6;
    0x0004e69a add.w r7, r6, 0x20                                |     r7 = r6 + 0x20;
                                                                 |     do {
    0x0004e69e ldr r5, [r3]                                      |         r5 = *(r3);
    0x0004e6a0 adds r3, 0x10                                     |         r3 += 0x10;
    0x0004e6a2 ldr r4, [r3, -0xc]                                |         r4 = *((r3 - 0xc));
    0x0004e6a6 adds r2, 0x10                                     |         r2 += 0x10;
    0x0004e6a8 ldr r0, [r3, -0x8]                                |         r0 = *((r3 - 0x8));
    0x0004e6ac ldr r1, [r3, -0x4]                                |         r1 = *((r3 - 0x4));
    0x0004e6b0 cmp r3, r7                                        |         
    0x0004e6b2 str r5, [r2, -0x10]                               |         *((r2 - 0x10)) = r5;
    0x0004e6b6 str r4, [r2, -0xc]                                |         *((r2 - 0xc)) = r4;
    0x0004e6ba str r0, [r2, -0x8]                                |         *((r2 - 0x8)) = r0;
    0x0004e6be str r1, [r2, -0x4]                                |         *((r2 - 0x4)) = r1;
    0x0004e6c2 bne 0x4e69e                                       |         
                                                                 |     } while (r3 != r7);
    0x0004e6c4 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0004e6c6 str r3, [r2]                                      |     *(r2) = r3;
    0x0004e6c8 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004e6ca ldrh r3, [r6, 0x1c]                               |     r3 = *((r6 + 0x1c));
    0x0004e6cc ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x0004e6ce adds r2, 1                                        |     r2++;
    0x0004e6d0 lsls r4, r3, 0x14                                 |     r4 = r3 << 0x14;
    0x0004e6d2 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e6d4 mov.w r2, 0                                       |     r2 = 0;
    0x0004e6d8 str r2, [r1, 0x20]                                |     *((r1 + 0x20)) = r2;
                                                                 |     if (r4 < r3) {
    0x0004e6da bmi.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004e6de ldrh r3, [r1, 0x1c]                               |     r3 = *((r1 + 0x1c));
    0x0004e6e0 bic r3, r3, 0x1c00                                |     r3 = BIT_MASK (r3, 0x1c00);
    0x0004e6e4 orr r3, r3, 0x1000                                |     r3 |= 0x1000;
    0x0004e6e8 strh r3, [r1, 0x1c]                               |     *((r1 + 0x1c)) = r3;
    0x0004e6ea b.w 0x4d26a                                       |     goto label_2;
    0x0004e6ee ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004e6f0 movw r6, 0x2460                                   |     r6 = 0x2460;
    0x0004e6f4 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004e6f6 movs r5, 0                                        |     r5 = 0;
    0x0004e6f8 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004e6fa add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e6fe add.w r8, r1, r3, lsl 3                           |     r8 = r1 + (r3 << 3);
    0x0004e702 ldrd r3, sb, [r2, 8]                              |     __asm ("ldrd r3, sb, [r2, 8]");
    0x0004e706 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e70a add.w r4, r1, r3, lsl 3                           |     r4 = r1 + (r3 << 3);
    0x0004e70e ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004e710 tst r6, r3                                        |     
                                                                 |     if ((r6 & r3) != 0) {
    0x0004e712 bne 0x4e778                                       |         goto label_388;
                                                                 |     }
                                                                 | label_17:
    0x0004e714 mov r3, r8                                        |     r3 = r8;
    0x0004e716 mov r2, r4                                        |     r2 = r4;
    0x0004e718 add.w lr, r8, 0x20                                |     lr = r8 + 0x20;
                                                                 |     do {
    0x0004e71c ldr.w ip, [r3]                                    |         ip = *(r3);
    0x0004e720 adds r3, 0x10                                     |         r3 += 0x10;
    0x0004e722 ldr r7, [r3, -0xc]                                |         r7 = *((r3 - 0xc));
    0x0004e726 adds r2, 0x10                                     |         r2 += 0x10;
    0x0004e728 ldr r0, [r3, -0x8]                                |         r0 = *((r3 - 0x8));
    0x0004e72c ldr r1, [r3, -0x4]                                |         r1 = *((r3 - 0x4));
    0x0004e730 cmp r3, lr                                        |         
    0x0004e732 str ip, [r2, -0x10]                               |         *((r2 - 0x10)) = ip;
    0x0004e736 str r7, [r2, -0xc]                                |         *((r2 - 0xc)) = r7;
    0x0004e73a str r0, [r2, -0x8]                                |         *((r2 - 0x8)) = r0;
    0x0004e73e str r1, [r2, -0x4]                                |         *((r2 - 0x4)) = r1;
    0x0004e742 bne 0x4e71c                                       |         
                                                                 |     } while (r3 != lr);
    0x0004e744 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0004e746 str r3, [r2]                                      |     *(r2) = r3;
    0x0004e748 ldrh.w r3, [r8, 0x1c]                             |     r3 = *((r8 + 0x1c));
    0x0004e74c str r5, [r4, 0x20]                                |     *((r4 + 0x20)) = r5;
    0x0004e74e tst.w r3, 0x800                                   |     
    0x0004e752 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
                                                                 |     if ((r3 & 0x800) == 0) {
    0x0004e754 beq.w 0x4d4d6                                     |         goto label_15;
                                                                 |     }
    0x0004e758 lsls r7, r3, 0x13                                 |     r7 = r3 << 0x13;
                                                                 |     if (r7 < r3) {
    0x0004e75a bmi.w 0x4d4e0                                     |         goto label_16;
                                                                 |     }
                                                                 | label_298:
    0x0004e75e cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x0004e762 beq.w 0x50b00                                     |         goto label_389;
                                                                 |     }
    0x0004e766 ldrh.w r3, [r4, 0x44]                             |     r3 = *((r4 + 0x44));
    0x0004e76a adds r4, 0x28                                     |     r4 += 0x28;
    0x0004e76c add.w r8, r8, 0x28                                |     r8 += 0x28;
    0x0004e770 add.w sb, sb, -1                                  |     sb += -1;
    0x0004e774 tst r6, r3                                        |     
                                                                 |     if ((r6 & r3) == 0) {
    0x0004e776 beq 0x4e714                                       |         goto label_17;
                                                                 |     }
                                                                 | label_388:
    0x0004e778 mov r0, r4                                        |     r0 = r4;
    0x0004e77a bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x0004e77e b 0x4e714                                         |     goto label_17;
    0x0004e780 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004e782 mov.w sl, 0x80                                    |     sl = 0x80;
    0x0004e786 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004e788 ldr r3, [r2, 8]                                   |     r3 = *((r2 + 8));
    0x0004e78a ldr r4, [r2, 4]                                   |     r4 = *((r2 + 4));
    0x0004e78c ldr r2, [r2, 0xc]                                 |     r2 = *((r2 + 0xc));
    0x0004e78e add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e792 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004e794 lsls r4, r0, 0x12                                 |     r4 = r0 << 0x12;
    0x0004e796 mov r8, r2                                        |     r8 = r2;
    0x0004e798 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0004e79c str r2, [sp, 0x20]                                |     *(arg_20h) = r2;
    0x0004e79e add.w r4, r1, r4, lsl 3                           |     r4 = r1 + (r4 << 3);
    0x0004e7a2 mov sb, r3                                        |     sb = r3;
    0x0004e7a4 str r3, [sp, 0x28]                                |     *(arg_28h) = r3;
                                                                 | label_18:
    0x0004e7a6 ldrh.w r3, [sb, 0x1c]                             |     r3 = *((sb + 0x1c));
    0x0004e7aa movw r2, 0x2460                                   |     r2 = 0x2460;
    0x0004e7ae tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x0004e7b0 bne.w 0x505e8                                     |         goto label_390;
                                                                 |     }
                                                                 | label_35:
    0x0004e7b4 ldr.w ip, [sb, 0x24]                              |     ip = *((sb + 0x24));
    0x0004e7b8 mov r3, r4                                        |     r3 = r4;
    0x0004e7ba mov r2, sb                                        |     r2 = sb;
    0x0004e7bc add.w r0, r4, 0x20                                |     r0 = r4 + 0x20;
                                                                 |     do {
    0x0004e7c0 ldr r7, [r3]                                      |         r7 = *(r3);
    0x0004e7c2 adds r3, 0x10                                     |         r3 += 0x10;
    0x0004e7c4 ldr r6, [r3, -0xc]                                |         r6 = *((r3 - 0xc));
    0x0004e7c8 adds r2, 0x10                                     |         r2 += 0x10;
    0x0004e7ca ldr r5, [r3, -0x8]                                |         r5 = *((r3 - 0x8));
    0x0004e7ce ldr r1, [r3, -0x4]                                |         r1 = *((r3 - 0x4));
    0x0004e7d2 cmp r3, r0                                        |         
    0x0004e7d4 str r7, [r2, -0x10]                               |         *((r2 - 0x10)) = r7;
    0x0004e7d8 str r6, [r2, -0xc]                                |         *((r2 - 0xc)) = r6;
    0x0004e7dc str r5, [r2, -0x8]                                |         *((r2 - 0x8)) = r5;
    0x0004e7e0 str r1, [r2, -0x4]                                |         *((r2 - 0x4)) = r1;
    0x0004e7e4 bne 0x4e7c0                                       |         
                                                                 |     } while (r3 != r0);
    0x0004e7e6 ldr r1, [r3]                                      |     r1 = *(r3);
    0x0004e7e8 subs.w r8, r8, 1                                  |     r8--;
    0x0004e7ec ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004e7ee add.w sb, sb, 0x28                                |     sb += 0x28;
    0x0004e7f2 add.w r4, r4, 0x28                                |     r4 += 0x28;
    0x0004e7f6 str r1, [r2]                                      |     *(r2) = r1;
    0x0004e7f8 str r3, [r2, 4]                                   |     *((r2 + 4)) = r3;
    0x0004e7fa mov.w r3, 0                                       |     r3 = 0;
    0x0004e7fe str ip, [r4, -0x4]                                |     *((r4 - 0x4)) = ip;
    0x0004e802 strh sl, [r4, -0xc]                               |     *((r4 - 0xc)) = sl;
    0x0004e806 str r3, [r4, -0x8]                                |     *((r4 - 0x8)) = r3;
                                                                 |     if (r8 != r8) {
    0x0004e80a bne 0x4e7a6                                       |         goto label_18;
                                                                 |     }
    0x0004e80c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e80e ldr r2, [sp, 0x28]                                |     r2 = *(arg_28h);
    0x0004e810 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e814 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004e818 str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x0004e81a ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e81c adds r3, 1                                        |     r3++;
    0x0004e81e str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e820 b.w 0x4d26a                                       |     goto label_2;
    0x0004e824 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e826 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0004e828 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004e82a ldr r2, [r2, 0x3c]                                |     r2 = *((r2 + 0x3c));
    0x0004e82c add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e830 lsls r3, r3, 3                                    |     r3 <<= 3;
    0x0004e832 subs r3, 0x28                                     |     r3 -= 0x28;
    0x0004e834 adds r7, r2, r3                                   |     r7 = r2 + r3;
    0x0004e836 ldrh r1, [r7, 0x1c]                               |     r1 = *((r7 + 0x1c));
    0x0004e838 tst.w r1, 0x12                                    |     
                                                                 |     if ((r1 & 0x12) != 0) {
    0x0004e83c bne.w 0x51fa4                                     |         goto label_391;
                                                                 |     }
                                                                 | label_121:
    0x0004e840 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x0004e842 movw r2, 0x2460                                   |     r2 = 0x2460;
    0x0004e846 ldrh r3, [r3, 0x1c]                               |     r3 = *((r3 + 0x1c));
    0x0004e848 tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x0004e84a bne.w 0x51f9a                                     |         goto label_392;
                                                                 |     }
                                                                 | label_120:
    0x0004e84e ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004e850 mov r3, r7                                        |     r3 = r7;
    0x0004e852 add.w r6, r7, 0x20                                |     r6 = r7 + 0x20;
                                                                 |     do {
    0x0004e856 ldr r5, [r3]                                      |         r5 = *(r3);
    0x0004e858 adds r3, 0x10                                     |         r3 += 0x10;
    0x0004e85a ldr r4, [r3, -0xc]                                |         r4 = *((r3 - 0xc));
    0x0004e85e adds r2, 0x10                                     |         r2 += 0x10;
    0x0004e860 ldr r0, [r3, -0x8]                                |         r0 = *((r3 - 0x8));
    0x0004e864 ldr r1, [r3, -0x4]                                |         r1 = *((r3 - 0x4));
    0x0004e868 cmp r3, r6                                        |         
    0x0004e86a str r5, [r2, -0x10]                               |         *((r2 - 0x10)) = r5;
    0x0004e86e str r4, [r2, -0xc]                                |         *((r2 - 0xc)) = r4;
    0x0004e872 str r0, [r2, -0x8]                                |         *((r2 - 0x8)) = r0;
    0x0004e876 str r1, [r2, -0x4]                                |         *((r2 - 0x4)) = r1;
    0x0004e87a bne 0x4e856                                       |         
                                                                 |     } while (r3 != r6);
    0x0004e87c ldr r3, [r3]                                      |     r3 = *(r3);
    0x0004e87e str r3, [r2]                                      |     *(r2) = r3;
    0x0004e880 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004e882 ldrh r3, [r7, 0x1c]                               |     r3 = *((r7 + 0x1c));
    0x0004e884 ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x0004e886 adds r2, 1                                        |     r2++;
    0x0004e888 lsls r3, r3, 0x14                                 |     r3 <<= 0x14;
    0x0004e88a str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e88c mov.w r2, 0                                       |     r2 = 0;
    0x0004e890 str r2, [r1, 0x20]                                |     *((r1 + 0x20)) = r2;
                                                                 |     if (r3 < r3) {
    0x0004e892 bmi.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004e896 ldrh r3, [r1, 0x1c]                               |     r3 = *((r1 + 0x1c));
    0x0004e898 bic r3, r3, 0x1c00                                |     r3 = BIT_MASK (r3, 0x1c00);
    0x0004e89c orr r3, r3, 0x800                                 |     r3 |= 0x800;
    0x0004e8a0 strh r3, [r1, 0x1c]                               |     *((r1 + 0x1c)) = r3;
    0x0004e8a2 b.w 0x4d26a                                       |     goto label_2;
    0x0004e8a6 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e8a8 ldr r4, [sp, 0x38]                                |     r4 = *(arg_38h);
    0x0004e8aa adds r3, 1                                        |     r3++;
    0x0004e8ac str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e8ae mov r0, r4                                        |     r0 = r4;
    0x0004e8b0 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e8b2 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004e8b4 ldr r1, [r3, 0x10]                                |     r1 = *((r3 + 0x10));
    0x0004e8b6 movs r3, 0                                        |     r3 = 0;
    0x0004e8b8 str r3, [sp]                                      |     *(sp) = r3;
    0x0004e8ba bl 0x17978                                        |     fcn_00017978 (r0, r1, r2, r3, r4);
    0x0004e8be ldr r2, [sp, 0x70]                                |     r2 = *(arg_70h);
    0x0004e8c0 strb r2, [r4, 0x1e]                               |     *((r4 + 0x1e)) = r2;
    0x0004e8c2 b.w 0x4d26a                                       |     goto label_2;
    0x0004e8c6 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e8c8 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004e8ca ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004e8cc adds r2, 1                                        |     r2++;
    0x0004e8ce str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e8d0 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004e8d2 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e8d6 add.w r2, r2, r3, lsl 3                           |     r2 += (r3 << 3);
    0x0004e8da ldrh r3, [r2, 0x1c]                               |     r3 = *((r2 + 0x1c));
    0x0004e8dc str r2, [sp, 0x38]                                |     *(arg_38h) = r2;
    0x0004e8de bic r3, r3, 0x80                                  |     r3 = BIT_MASK (r3, 0x80);
    0x0004e8e2 orr r3, r3, 1                                     |     r3 |= 1;
    0x0004e8e6 strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x0004e8e8 b.w 0x4d26a                                       |     goto label_2;
    0x0004e8ec ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e8ee movw r6, 0x101                                    |     r6 = 0x101;
    0x0004e8f2 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004e8f4 ldr r4, [sp, 0x38]                                |     r4 = *(arg_38h);
    0x0004e8f6 adds r3, 1                                        |     r3++;
    0x0004e8f8 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e8fa ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004e8fc cmp r3, 0                                         |     
    0x0004e8fe ldrd r2, r3, [r2, 8]                              |     __asm ("ldrd r2, r3, [r2, 8]");
    0x0004e902 it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x0004e904 moveq r6, 1                                       |         r6 = 1;
                                                                 |     }
    0x0004e906 strh r6, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r6;
    0x0004e908 sub.w r8, r3, r2                                  |     r8 = r3 - r2;
    0x0004e90c cmp.w r8, 0                                       |     
                                                                 |     if (r8 <= 0) {
    0x0004e910 ble.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004e914 mov r5, r8                                        |     r5 = r8;
    0x0004e916 movw r7, 0x2460                                   |     r7 = 0x2460;
    0x0004e91a b 0x4e924                                         |     
                                                                 |     while ((r7 & r3) == 0) {
                                                                 | label_19:
    0x0004e91c subs r5, 1                                        |         r5--;
    0x0004e91e strh r6, [r4, 0x1c]                               |         *((r4 + 0x1c)) = r6;
                                                                 |         if (r5 == 1) {
    0x0004e920 beq.w 0x507b6                                     |             goto label_393;
                                                                 |         }
    0x0004e924 ldrh.w r3, [r4, 0x44]                             |         r3 = *((r4 + 0x44));
    0x0004e928 adds r4, 0x28                                     |         r4 += 0x28;
    0x0004e92a tst r7, r3                                        |         
    0x0004e92c beq 0x4e91c                                       |         
                                                                 |     }
    0x0004e92e mov r0, r4                                        |     r0 = r4;
    0x0004e930 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x0004e934 b 0x4e91c                                         |     goto label_19;
    0x0004e936 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e938 movs r6, 0                                        |     r6 = 0;
    0x0004e93a ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
                                                                 | label_31:
    0x0004e93c ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004e93e ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x0004e940 ldr r2, [r2, 0x10]                                |     r2 = *((r2 + 0x10));
    0x0004e942 str r3, [r1, 0x18]                                |     *((r1 + 0x18)) = r3;
    0x0004e944 ldr r3, [sp, 0x70]                                |     r3 = *(arg_70h);
    0x0004e946 str r2, [r1, 4]                                   |     *((r1 + 4)) = r2;
    0x0004e948 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004e94a strb r3, [r1, 0x1e]                               |     *((r1 + 0x1e)) = r3;
    0x0004e94c movw r3, 0xa02                                    |     r3 = 0xa02;
    0x0004e950 strh r3, [r1, 0x1c]                               |     *((r1 + 0x1c)) = r3;
    0x0004e952 adds r2, 1                                        |     r2++;
    0x0004e954 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e956 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004e958 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004e95c b.w 0x4d740                                       |     goto label_7;
    0x0004e960 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e962 ldr r1, [sp, 0x24]                                |     r1 = *((sp + 0x24));
    0x0004e964 adds r3, 1                                        |     r3++;
    0x0004e966 ldr r2, [r1, 0x5c]                                |     r2 = *((r1 + 0x5c));
    0x0004e968 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e96a ldr.w r3, [fp, 0x54]                              |     r3 = *(arg_54h);
    0x0004e96e str.w r2, [fp, 0x50]                              |     __asm ("str.w r2, [arg_50h]");
    0x0004e972 add r3, r2                                        |     r3 += r2;
    0x0004e974 str.w r3, [fp, 0x54]                              |     __asm ("str.w r3, [arg_54h]");
    0x0004e978 movs r3, 0                                        |     r3 = 0;
    0x0004e97a str r3, [r1, 0x5c]                                |     *((r1 + 0x5c)) = r3;
    0x0004e97c b.w 0x4d26a                                       |     goto label_2;
    0x0004e980 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e982 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004e984 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004e986 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004e988 ldr.w r4, [r3, r2, lsl 2]                         |     offset_18 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_18));
    0x0004e98c movs r3, 1                                        |     r3 = 1;
    0x0004e98e ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004e990 ldr r5, [r4]                                      |     r5 = *(r4);
    0x0004e992 mov r0, r4                                        |     r0 = r4;
    0x0004e994 strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x0004e996 bl 0x2f33c                                        |     r0 = fcn_0002f33c (r0);
    0x0004e99a mov r6, r0                                        |     r6 = r0;
    0x0004e99c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004e99e bne.w 0x528f6                                     |         goto label_207;
                                                                 |     }
    0x0004e9a2 ldrb r4, [r4, 0x19]                               |     r4 = *((r4 + 0x19));
    0x0004e9a4 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0004e9a6 beq.w 0x52004                                     |         goto label_394;
                                                                 |     }
    0x0004e9aa ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e9ac adds r3, 1                                        |     r3++;
    0x0004e9ae str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e9b0 b.w 0x4d26a                                       |     goto label_2;
    0x0004e9b4 ldr r4, [sp, 0x20]                                |     r4 = *(arg_20h);
    0x0004e9b6 movs r3, 0                                        |     r3 = 0;
    0x0004e9b8 str r3, [sp, 0xd8]                                |     *(arg_d8h) = r3;
    0x0004e9ba add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004e9bc ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004e9c0 ldr r2, [r4, 8]                                   |     r2 = *((r4 + 8));
    0x0004e9c2 ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x0004e9c4 add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x0004e9c8 ldr r0, [r3, 4]                                   |     r0 = *((r3 + 4));
    0x0004e9ca ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x0004e9cc cmp r3, 0                                         |     
    0x0004e9ce ite ne                                            |     
                                                                 |     if (r3 == 0) {
    0x0004e9d0 movne r2, r7                                      |         r2 = r7;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x0004e9d2 moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x0004e9d4 bl 0x301ec                                        |     fcn_000301ec (r0, r1, r2);
    0x0004e9d8 ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x0004e9da mov r6, r0                                        |     r6 = r0;
    0x0004e9dc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004e9de beq.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x0004e9e2 ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0004e9e4 ldr r1, [sp, 0xd8]                                |     r1 = *(arg_d8h);
    0x0004e9e6 ldr r2, [r0, 0x5c]                                |     r2 = *((r0 + 0x5c));
    0x0004e9e8 add r2, r1                                        |     r2 += r1;
    0x0004e9ea str r2, [r0, 0x5c]                                |     *((r0 + 0x5c)) = r2;
                                                                 |     if (r3 <= 0) {
    0x0004e9ec ble.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x0004e9f0 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004e9f2 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e9f6 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004e9fa ldr r2, [r3, 0x10]                                |     r2 = *((r3 + 0x10));
    0x0004e9fc adds r2, r2, r1                                   |     r2 += r1;
    0x0004e9fe str r2, [r3, 0x10]                                |     *((r3 + 0x10)) = r2;
    0x0004ea00 ldr r2, [r3, 0x14]                                |     r2 = *((r3 + 0x14));
    0x0004ea02 adc.w r2, r2, r1, asr 31                          |     __asm ("adc.w r2, r2, r1, asr 31");
    0x0004ea06 str r2, [r3, 0x14]                                |     *((r3 + 0x14)) = r2;
    0x0004ea08 b.w 0x4dbae                                       |     goto label_20;
    0x0004ea0c ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x0004ea10 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004ea12 beq.w 0x527b2                                     |         goto label_395;
                                                                 |     }
    0x0004ea16 ldr r0, [sp, 0x84]                                |     r0 = *(arg_84h);
    0x0004ea18 movs r1, 0                                        |     r1 = 0;
    0x0004ea1a b 0x4ea24                                         |     
                                                                 |     while (r2 != r0) {
                                                                 | label_21:
    0x0004ea1c ldr r3, [r3, 0x34]                                |         r3 = *((r3 + 0x34));
    0x0004ea1e cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0004ea20 beq.w 0x507c6                                     |             goto label_396;
                                                                 |         }
    0x0004ea24 ldr r2, [r3, 0x28]                                |         r2 = *((r3 + 0x28));
    0x0004ea26 cmp r2, r0                                        |         
    0x0004ea28 bne 0x4ea1c                                       |         
                                                                 |     }
    0x0004ea2a ldrb.w r2, [r3, 0x59]                             |     r2 = *((r3 + 0x59));
    0x0004ea2e lsls r5, r2, 0x1e                                 |     r5 = r2 << 0x1e;
                                                                 |     if (r5 >= r2) {
    0x0004ea30 bpl 0x4ea1c                                       |         goto label_21;
                                                                 |     }
    0x0004ea32 ldrb.w r2, [r3, 0x58]                             |     r2 = *((r3 + 0x58));
    0x0004ea36 ubfx r2, r2, 2, 2                                 |     r2 = (r2 >> 2) & ((1 << 2) - 1);
    0x0004ea3a cmp r2, 1                                         |     
                                                                 |     if (r2 > 1) {
    0x0004ea3c bhi 0x4ea1c                                       |         goto label_21;
                                                                 |     }
    0x0004ea3e ldr r2, [r3, 0x4c]                                |     r2 = *((r3 + 0x4c));
    0x0004ea40 cmp r2, 0                                         |     
    0x0004ea42 it ge                                             |     
                                                                 |     if (r2 < 0) {
    0x0004ea44 addge r1, 1                                       |         r1++;
                                                                 |     }
    0x0004ea46 b 0x4ea1c                                         |     goto label_21;
    0x0004ea48 ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004ea4a ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0004ea4c ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0004ea4e ldr r3, [r0, 0x38]                                |     r3 = *((r0 + 0x38));
    0x0004ea50 ldr r6, [r0, 0xc]                                 |     r6 = *((r0 + 0xc));
    0x0004ea52 ldr.w r7, [r3, r2, lsl 2]                         |     offset_19 = r2 << 2;
                                                                 |     r7 = *((r3 + offset_19));
    0x0004ea56 ldr r2, [r1, 0xc]                                 |     r2 = *((r1 + 0xc));
    0x0004ea58 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004ea5a ldr.w sb, [r7, 0x24]                              |     sb = *((r7 + 0x24));
    0x0004ea5e add.w r2, r2, r2, lsl 2                           |     r2 += (r2 << 2);
    0x0004ea62 ldr.w r4, [sb]                                    |     r4 = *(sb);
    0x0004ea66 add.w r2, r3, r2, lsl 3                           |     r2 = r3 + (r2 << 3);
    0x0004ea6a ldr r3, [r2, 0x38]                                |     r3 = *((r2 + 0x38));
    0x0004ea6c ldr r1, [r2, 0x10]                                |     r1 = *((r2 + 0x10));
    0x0004ea6e ldr.w r8, [r4]                                    |     r8 = *(r4);
    0x0004ea72 cmp r3, 0                                         |     
    0x0004ea74 ittt gt                                           |     
                                                                 |     if (r3 <= 0) {
    0x0004ea76 addgt r5, r6, r3, lsl 2                           |         r5 = r6 + (r3 << 2);
                                                                 |     }
                                                                 |     if (r3 <= 0) {
    0x0004ea7a addgt r2, 0x50                                    |         r2 += 0x50;
                                                                 |     }
                                                                 |     if (r3 > 0) {
    0x0004ea7c mov r0, r6                                        |         r0 = r6;
                                                                 |     }
                                                                 |     if (r3 <= 0) {
    0x0004ea7e ble 0x4ea8c                                       |         goto label_397;
                                                                 |     }
                                                                 |     do {
    0x0004ea80 str r2, [r0], 4                                   |         *(r0) = r2;
                                                                 |         r0 += 4;
    0x0004ea84 cmp r5, r0                                        |         
    0x0004ea86 add.w r2, r2, 0x28                                |         r2 += 0x28;
    0x0004ea8a bne 0x4ea80                                       |         
                                                                 |     } while (r5 != r0);
                                                                 | label_397:
    0x0004ea8c ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0004ea8e ldr r5, [sp, 0x20]                                |     r5 = *(arg_20h);
    0x0004ea90 ldrb.w r0, [r2, 0x58]                             |     r0 = *((r2 + 0x58));
    0x0004ea94 ldr r2, [r5, 0x10]                                |     r2 = *((r5 + 0x10));
    0x0004ea96 movs r5, 1                                        |     r5 = 1;
    0x0004ea98 str r6, [sp]                                      |     *(sp) = r6;
    0x0004ea9a bfi r0, r5, 2, 2                                  |     value_20 = BIT_MASK (2, 2);
                                                                 |     value_21 = r5 & value_20;
                                                                 |     value_20 = ~value_20;
                                                                 |     r0 &= value_20;
                                                                 |     r0 |= value_21;
    0x0004ea9e ldr r5, [sp, 0x24]                                |     r5 = *((sp + 0x24));
    0x0004eaa0 strb.w r0, [r5, 0x58]                             |     *((r5 + 0x58)) = r0;
    0x0004eaa4 mov r0, sb                                        |     r0 = sb;
    0x0004eaa6 ldr.w r5, [r8, 0x20]                              |     r5 = *((r8 + 0x20));
    0x0004eaaa blx r5                                            |     uint32_t (*r5)(uint32_t) (r0);
    0x0004eaac ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0004eaae mov r6, r0                                        |     r6 = r0;
    0x0004eab0 ldrb.w r3, [r2, 0x58]                             |     r3 = *((r2 + 0x58));
    0x0004eab4 ldr r5, [r2]                                      |     r5 = *(r2);
    0x0004eab6 ldr r1, [r2, 0x2c]                                |     r1 = *((r2 + 0x2c));
    0x0004eab8 bfc r3, 2, 2                                      |     value_22 = BIT_MASK (2, );
                                                                 |     value_22 = ~value_22;
                                                                 |     r3 &= value_22;
    0x0004eabc strb.w r3, [r2, 0x58]                             |     *((r2 + 0x58)) = r3;
    0x0004eac0 mov r0, r5                                        |     r0 = r5;
    0x0004eac2 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0004eac6 ldr r1, [r4, 8]                                   |     r1 = *((r4 + 8));
    0x0004eac8 mov r0, r5                                        |     r0 = r5;
    0x0004eaca bl 0xd418                                         |     fcn_0000d418 (r0, r1);
    0x0004eace ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004ead0 str r0, [r3, 0x2c]                                |     *((r3 + 0x2c)) = r0;
    0x0004ead2 ldr r0, [r4, 8]                                   |     r0 = *((r4 + 8));
    0x0004ead4 blx 0x6050                                        |     fcn_00006050 ();
    0x0004ead8 movs r3, 0                                        |     r3 = 0;
    0x0004eada str r3, [r4, 8]                                   |     *((r4 + 8)) = r3;
    0x0004eadc cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0004eade bne.w 0x50540                                     |         goto label_398;
                                                                 |     }
    0x0004eae2 ldr.w r3, [r8, 0x28]                              |     r3 = *((r8 + 0x28));
    0x0004eae6 mov r0, sb                                        |     r0 = sb;
    0x0004eae8 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0004eaea cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004eaec beq.w 0x50540                                     |         goto label_398;
                                                                 |     }
    0x0004eaf0 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004eaf2 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004eaf4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004eaf6 b.w 0x50546                                       |     goto label_399;
    0x0004eafa ldrb.w r3, [fp, 0x3e]                             |     r3 = *(arg_3eh);
    0x0004eafe ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0004eb00 add.w sl, r2, 0x2c                                |     sl = r2 + 0x2c;
    0x0004eb02 lsrs r4, r5, 8                                    |     r4 = r5 >> 8;
    0x0004eb04 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004eb06 beq.w 0x52966                                     |         goto label_400;
                                                                 |     }
    0x0004eb0a ldr.w r3, [fp, 0x8c]                              |     r3 = *(arg_8ch);
    0x0004eb0e cmp r3, 1                                         |     
                                                                 |     if (r3 > 1) {
    0x0004eb10 bgt.w 0x514a8                                     |         goto label_401;
                                                                 |     }
    0x0004eb14 ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004eb18 ldr.w r0, [fp, 0x18]                              |     r0 = *(arg_18h);
    0x0004eb1c ldr.w r1, [fp, 0xa4]                              |     r1 = *(arg_a4h);
    0x0004eb20 ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004eb22 movs r3, 0                                        |     r3 = 0;
    0x0004eb24 str.w r3, [fp, 0xa4]                              |     __asm ("str.w r3, [arg_a4h]");
    0x0004eb28 str r1, [sp, 0x34]                                |     *(arg_34h) = r1;
    0x0004eb2a ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0004eb2c ldrb.w r2, [fp, 0x3f]                             |     r2 = *(arg_3fh);
    0x0004eb30 ldr.w r5, [fp, 0x14]                              |     r5 = *(arg_14h);
    0x0004eb34 ldr r1, [r3]                                      |     r1 = *(r3);
    0x0004eb36 bic r3, r0, 0xa0000                               |     r3 = BIT_MASK (r0, 0xa0000);
    0x0004eb3a orr r3, r3, 0x200000                              |     r3 |= 0x200000;
    0x0004eb3e cmp r2, 1                                         |     
    0x0004eb40 orr r3, r3, 0x2800                                |     r3 |= 0x2800;
    0x0004eb44 str r0, [sp, 0x20]                                |     *(arg_20h) = r0;
    0x0004eb46 str.w r3, [fp, 0x18]                              |     __asm ("str.w r3, [arg_18h]");
    0x0004eb4a ldr.w r3, [fp, 0x50]                              |     r3 = *(arg_50h);
    0x0004eb4e ldrb r7, [r1, 0xf]                                |     r7 = *((r1 + 0xf));
    0x0004eb50 str r3, [sp, 0x28]                                |     *(arg_28h) = r3;
    0x0004eb52 ldr.w r3, [fp, 0x54]                              |     r3 = *(arg_54h);
    0x0004eb56 str r3, [sp, 0x2c]                                |     *(arg_2ch) = r3;
                                                                 |     if (r2 == 1) {
    0x0004eb58 beq.w 0x52976                                     |         goto label_402;
                                                                 |     }
    0x0004eb5c ldr.w r2, [pc, 0x4cc]                             |     
    0x0004eb60 add r2, pc                                        |     r2 = 0x9db90;
                                                                 | label_157:
    0x0004eb62 mov r1, sl                                        |     r1 = sl;
    0x0004eb64 mov r0, fp                                        |     r0 = fp;
    0x0004eb66 bl 0x54c38                                        |     fcn_00054c38 (r0, r1, r2);
    0x0004eb6a ldr.w r3, [fp, 0x14]                              |     r3 = *(arg_14h);
    0x0004eb6e mov r6, r0                                        |     r6 = r0;
    0x0004eb70 cmp r5, r3                                        |     
                                                                 |     if (r5 >= r3) {
    0x0004eb72 bge.w 0x524fe                                     |         goto label_403;
                                                                 |     }
    0x0004eb76 ldr.w r2, [fp, 0x10]                              |     r2 = *(arg_10h);
    0x0004eb7a add.w r3, r3, 0x10000000                          |     r3 += 0x10000000;
    0x0004eb7e subs r3, 1                                        |     r3--;
    0x0004eb80 add.w sb, r2, r3, lsl 4                           |     sb = r2 + (r3 << 4);
    0x0004eb84 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004eb86 bne.w 0x4ed30                                     |         goto label_233;
                                                                 |     }
    0x0004eb8a mov r3, sb                                        |     r3 = sb;
                                                                 | label_143:
    0x0004eb8c ldr r5, [r3, 4]                                   |     r5 = *((r3 + 4));
    0x0004eb8e mov r0, r5                                        |     r0 = r5;
    0x0004eb90 bl 0x33408                                        |     fcn_00033408 (r0);
    0x0004eb94 mov r0, r4                                        |     r0 = r4;
    0x0004eb96 bl 0xd140                                         |     fcn_0000d140 (r0);
    0x0004eb9a ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x0004eb9c ldrb r3, [r4, 9]                                  |     r3 = *((r4 + 9));
    0x0004eb9e ldrd r8, r1, [r2, 0x20]                           |     __asm ("ldrd r8, r1, [r2, 0x20]");
    0x0004eba2 str r1, [sp, 0x3c]                                |     *(arg_3ch) = r1;
                                                                 |     if (r3 != 0) {
    0x0004eba4 cbz r3, 0x4ebb2                                   |         
    0x0004eba6 ldr r3, [r4, 0xc]                                 |         r3 = *((r4 + 0xc));
    0x0004eba8 subs r6, r3, 1                                    |         r6 = r3 - 1;
    0x0004ebaa str r6, [r4, 0xc]                                 |         *((r4 + 0xc)) = r6;
    0x0004ebac cmp r6, 0                                         |         
                                                                 |         if (r6 == 0) {
    0x0004ebae beq.w 0x53b90                                     |             goto label_404;
                                                                 |         }
                                                                 |     }
                                                                 | label_252:
    0x0004ebb2 ldr.w r3, [fp, 0x48]                              |     r3 = *(arg_48h);
    0x0004ebb6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004ebb8 bne.w 0x5353c                                     |         goto label_405;
                                                                 |     }
                                                                 | label_214:
    0x0004ebbc ldr.w r2, [pc, 0x470]                             |     
    0x0004ebc0 mov r1, sl                                        |     r1 = sl;
    0x0004ebc2 mov r0, fp                                        |     r0 = fp;
    0x0004ebc4 add r2, pc                                        |     r2 = 0x9dbf8;
    0x0004ebc6 bl 0x54c38                                        |     r0 = fcn_00054c38 (r0, r1, r2);
    0x0004ebca mov r6, r0                                        |     r6 = r0;
    0x0004ebcc cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ebce bne.w 0x4ed30                                     |         goto label_233;
                                                                 |     }
    0x0004ebd2 ldr.w r2, [pc, 0x460]                             |     r2 = *(0x0004f034);
    0x0004ebd6 mov r1, sl                                        |     r1 = sl;
    0x0004ebd8 mov r0, fp                                        |     r0 = fp;
    0x0004ebda add r2, pc                                        |     r2 += pc;
    0x0004ebdc bl 0x54c38                                        |     r0 = fcn_00054c38 (r0, r1, r2);
    0x0004ebe0 mov r6, r0                                        |     r6 = r0;
    0x0004ebe2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ebe4 bne.w 0x4ed30                                     |         goto label_233;
                                                                 |     }
    0x0004ebe8 movs r1, 2                                        |     r1 = 2;
    0x0004ebea mov r0, r4                                        |     r0 = r4;
    0x0004ebec bl 0x30bcc                                        |     r0 = fcn_00030bcc (r0, r1);
    0x0004ebf0 mov r6, r0                                        |     r6 = r0;
    0x0004ebf2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ebf4 bne.w 0x4ed30                                     |         goto label_233;
                                                                 |     }
    0x0004ebf8 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0004ebfa ldr r2, [r3]                                      |     r2 = *(r3);
    0x0004ebfc ldr r1, [r3, 0x20]                                |     r1 = *((r3 + 0x20));
    0x0004ebfe movs r3, 0                                        |     r3 = 0;
    0x0004ec00 ldrb r2, [r2, 5]                                  |     r2 = *((r2 + 5));
    0x0004ec02 cmp r2, 5                                         |     
    0x0004ec04 ldr r2, [sp, 0x3c]                                |     r2 = *(arg_3ch);
    0x0004ec06 it eq                                             |     
                                                                 |     if (r2 != 5) {
    0x0004ec08 streq r0, [fp, 0x48]                              |         *(arg_48h) = r0;
                                                                 |     }
    0x0004ec0c mov r0, r5                                        |     r0 = r5;
    0x0004ec0e sub.w r8, r8, r2                                  |     r8 -= r2;
    0x0004ec12 mov r2, r8                                        |     r2 = r8;
    0x0004ec14 bl 0x12250                                        |     r0 = fcn_00012250 (r0, r1, r2, r3);
    0x0004ec18 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ec1a bne.w 0x5392e                                     |         goto label_406;
                                                                 |     }
    0x0004ec1e cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0004ec20 beq.w 0x5391a                                     |         goto label_407;
                                                                 |     }
                                                                 | label_232:
    0x0004ec24 ldrb.w r3, [fp, 0x40]                             |     r3 = *(arg_40h);
    0x0004ec28 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004ec2a bne.w 0x5392e                                     |         goto label_406;
                                                                 |     }
    0x0004ec2e ldrsb.w r1, [fp, 0x42]                            |     r1 = *(arg_42h);
    0x0004ec32 cmp r1, 0                                         |     
                                                                 |     if (r1 < 0) {
    0x0004ec34 blt.w 0x53fc0                                     |         goto label_408;
                                                                 |     }
                                                                 | label_280:
    0x0004ec38 mov r0, r5                                        |     r0 = r5;
    0x0004ec3a bl 0x118b4                                        |     fcn_000118b4 (r0, r1);
    0x0004ec3e ldr r2, [pc, 0x3f8]                               |     
    0x0004ec40 mov r1, sl                                        |     r1 = sl;
    0x0004ec42 mov r0, fp                                        |     r0 = fp;
    0x0004ec44 add r2, pc                                        |     r2 = 0x9dc82;
    0x0004ec46 bl 0x54cf8                                        |     r0 = fcn_00054cf8 (r0, r1, r2);
    0x0004ec4a mov r6, r0                                        |     r6 = r0;
    0x0004ec4c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ec4e bne 0x4ed30                                       |         goto label_233;
                                                                 |     }
    0x0004ec50 ldr r2, [pc, 0x3e8]                               |     
    0x0004ec52 mov r1, sl                                        |     r1 = sl;
    0x0004ec54 mov r0, fp                                        |     r0 = fp;
    0x0004ec56 add r2, pc                                        |     r2 = 0x9dc96;
    0x0004ec58 bl 0x54cf8                                        |     r0 = fcn_00054cf8 (r0, r1, r2);
    0x0004ec5c mov r6, r0                                        |     r6 = r0;
    0x0004ec5e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ec60 bne 0x4ed30                                       |         goto label_233;
                                                                 |     }
    0x0004ec62 ldr r2, [pc, 0x3dc]                               |     
    0x0004ec64 mov r1, sl                                        |     r1 = sl;
    0x0004ec66 mov r0, fp                                        |     r0 = fp;
    0x0004ec68 add r2, pc                                        |     r2 = 0x9dcae;
    0x0004ec6a bl 0x54cf8                                        |     r0 = fcn_00054cf8 (r0, r1, r2);
    0x0004ec6e mov r6, r0                                        |     r6 = r0;
    0x0004ec70 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ec72 bne 0x4ed30                                       |         goto label_233;
                                                                 |     }
    0x0004ec74 ldr r2, [pc, 0x3cc]                               |     
    0x0004ec76 mov r1, sl                                        |     r1 = sl;
    0x0004ec78 mov r0, fp                                        |     r0 = fp;
    0x0004ec7a add r2, pc                                        |     r2 = 0x9dcc2;
    0x0004ec7c bl 0x54cf8                                        |     r0 = fcn_00054cf8 (r0, r1, r2);
    0x0004ec80 mov r6, r0                                        |     r6 = r0;
    0x0004ec82 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ec84 bne 0x4ed30                                       |         goto label_233;
                                                                 |     }
    0x0004ec86 ldr r2, [pc, 0x3c0]                               |     
    0x0004ec88 mov r1, sl                                        |     r1 = sl;
    0x0004ec8a mov r0, fp                                        |     r0 = fp;
    0x0004ec8c add r2, pc                                        |     r2 = 0x9dcda;
    0x0004ec8e bl 0x54cf8                                        |     r0 = fcn_00054cf8 (r0, r1, r2);
    0x0004ec92 mov r6, r0                                        |     r6 = r0;
    0x0004ec94 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ec96 bne 0x4ed30                                       |         goto label_233;
                                                                 |     }
    0x0004ec98 ldr r2, [pc, 0x3b0]                               |     
    0x0004ec9a mov r1, sl                                        |     r1 = sl;
    0x0004ec9c mov r0, fp                                        |     r0 = fp;
    0x0004ec9e add r2, pc                                        |     r2 = 0x9dcee;
    0x0004eca0 bl 0x54cf8                                        |     r0 = fcn_00054cf8 (r0, r1, r2);
    0x0004eca4 mov r6, r0                                        |     r6 = r0;
    0x0004eca6 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004eca8 bne 0x4ed30                                       |         goto label_233;
                                                                 |     }
    0x0004ecaa ldr r2, [pc, 0x3a4]                               |     
    0x0004ecac mov r1, sl                                        |     r1 = sl;
    0x0004ecae mov r0, fp                                        |     r0 = fp;
    0x0004ecb0 add r2, pc                                        |     r2 = 0x9dd06;
    0x0004ecb2 bl 0x54c38                                        |     r0 = fcn_00054c38 (r0, r1, r2);
    0x0004ecb6 mov r6, r0                                        |     r6 = r0;
    0x0004ecb8 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ecba bne 0x4ed30                                       |         goto label_233;
                                                                 |     }
    0x0004ecbc ldr.w sl, [pc, 0x394]                             |     sl = *(0x0004f054);
    0x0004ecc0 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004ecc2 add sl, pc                                        |     sl += pc;
                                                                 |     do {
    0x0004ecc4 ldrb.w r1, [sl]                                   |         r1 = *(sl);
    0x0004ecc8 mov r2, r7                                        |         r2 = r7;
    0x0004ecca mov r0, r4                                        |         r0 = r4;
    0x0004eccc str r1, [sp, 0x3c]                                |         *(arg_3ch) = r1;
    0x0004ecce bl 0x11954                                        |         fcn_00011954 (r0, r1, r2);
    0x0004ecd2 ldr r3, [r7]                                      |         r3 = *(r7);
    0x0004ecd4 mov r0, r5                                        |         r0 = r5;
    0x0004ecd6 ldrb.w r2, [sl, 1]                                |         r2 = *((sl + 1));
    0x0004ecda ldr r1, [sp, 0x3c]                                |         r1 = *(arg_3ch);
    0x0004ecdc add r2, r3                                        |         r2 += r3;
    0x0004ecde bl 0x2c060                                        |         r0 = fcn_0002c060 (r0, r1, r2);
    0x0004ece2 mov r3, r0                                        |         r3 = r0;
    0x0004ece4 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0004ece6 bne.w 0x53fe6                                     |             goto label_409;
                                                                 |         }
    0x0004ecea adds r6, 2                                        |         r6 += 2;
    0x0004ecec add.w sl, sl, 2                                   |         sl += 2;
    0x0004ecf0 cmp r6, 0xa                                       |         
    0x0004ecf2 bne 0x4ecc4                                       |         
                                                                 |     } while (r6 != 0xa);
    0x0004ecf4 mov r1, r5                                        |     r1 = r5;
    0x0004ecf6 mov r0, r4                                        |     r0 = r4;
    0x0004ecf8 bl 0x3484c                                        |     r0 = fcn_0003484c (r0, r1);
    0x0004ecfc mov r3, r0                                        |     r3 = r0;
    0x0004ecfe cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ed00 bne.w 0x53fe6                                     |         goto label_409;
                                                                 |     }
    0x0004ed04 mov r0, r5                                        |     r0 = r5;
    0x0004ed06 bl 0x33408                                        |     r0 = fcn_00033408 (r0);
    0x0004ed0a mov r3, r0                                        |     r3 = r0;
    0x0004ed0c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ed0e bne.w 0x53fe6                                     |         goto label_409;
                                                                 |     }
    0x0004ed12 mov r0, r5                                        |     r0 = r5;
    0x0004ed14 bl 0x11880                                        |     r0 = fcn_00011880 (r0);
    0x0004ed18 mov r1, r0                                        |     r1 = r0;
    0x0004ed1a mov r0, r4                                        |     r0 = r4;
    0x0004ed1c bl 0x118b4                                        |     fcn_000118b4 (r0, r1);
    0x0004ed20 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x0004ed22 mov r2, r8                                        |     r2 = r8;
    0x0004ed24 mov r0, r4                                        |     r0 = r4;
    0x0004ed26 ldr r1, [r3, 0x20]                                |     r1 = *((r3 + 0x20));
    0x0004ed28 movs r3, 1                                        |     r3 = 1;
    0x0004ed2a bl 0x12250                                        |     r0 = fcn_00012250 (r0, r1, r2, r3);
    0x0004ed2e mov r6, r0                                        |     r6 = r0;
                                                                 | label_233:
    0x0004ed30 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004ed32 mov.w r2, -1                                      |     r2 = -1;
    0x0004ed36 mov r0, r4                                        |     r0 = r4;
    0x0004ed38 mov r1, r2                                        |     r1 = r2;
    0x0004ed3a str.w r3, [fp, 0x18]                              |     __asm ("str.w r3, [arg_18h]");
    0x0004ed3e ldr r3, [sp, 0x28]                                |     r3 = *(arg_28h);
    0x0004ed40 str.w r3, [fp, 0x50]                              |     __asm ("str.w r3, [arg_50h]");
    0x0004ed44 ldr r3, [sp, 0x2c]                                |     r3 = *(arg_2ch);
    0x0004ed46 str.w r3, [fp, 0x54]                              |     __asm ("str.w r3, [arg_54h]");
    0x0004ed4a ldr r3, [sp, 0x34]                                |     r3 = *(arg_34h);
    0x0004ed4c str.w r3, [fp, 0xa4]                              |     __asm ("str.w r3, [arg_a4h]");
    0x0004ed50 movs r3, 1                                        |     r3 = 1;
    0x0004ed52 bl 0x12250                                        |     fcn_00012250 (r0, r1, r2, r3);
    0x0004ed56 movs r3, 1                                        |     r3 = 1;
    0x0004ed58 strb.w r3, [fp, 0x3e]                             |     *(arg_3eh) = r3;
    0x0004ed5c cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x0004ed60 beq 0x4ed74                                       |         
    0x0004ed62 ldr.w r0, [sb, 4]                                 |         r0 = *((sb + 4));
    0x0004ed66 bl 0x2dcf4                                        |         fcn_0002dcf4 (r0);
    0x0004ed6a movs r3, 0                                        |         r3 = 0;
    0x0004ed6c str.w r3, [sb, 4]                                 |         __asm ("str.w r3, [sb, 4]");
    0x0004ed70 str.w r3, [sb, 0xc]                               |         __asm ("str.w r3, [sb, 0xc]");
                                                                 |     }
                                                                 | label_159:
    0x0004ed74 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004ed76 mov r0, fp                                        |     r0 = fp;
    0x0004ed78 adds r3, 1                                        |     r3++;
    0x0004ed7a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004ed7c bl 0x13968                                        |     fcn_00013968 (r0);
    0x0004ed80 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004ed82 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004ed86 b.w 0x4d740                                       |     goto label_7;
    0x0004ed8a ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004ed8c ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004ed90 ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0004ed92 ldr r5, [r1, 0xc]                                 |     r5 = *((r1 + 0xc));
    0x0004ed94 add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x0004ed98 ldr.w r8, [r3, 4]                                 |     r8 = *((r3 + 4));
    0x0004ed9c ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x0004eda0 ldr r4, [r3]                                      |     r4 = *(r3);
    0x0004eda2 ldrb.w sb, [r4, 5]                                |     sb = *((r4 + 5));
    0x0004eda6 ldrb r3, [r4, 0x10]                               |     r3 = *((r4 + 0x10));
    0x0004eda8 cmp.w r5, -1                                      |     
    0x0004edac it eq                                             |     
                                                                 |     if (r5 != -1) {
    0x0004edae moveq r5, sb                                      |         r5 = sb;
                                                                 |     }
    0x0004edb0 cmp r3, 2                                         |     
                                                                 |     if (r3 > 2) {
    0x0004edb2 bhi.w 0x5143a                                     |         goto label_410;
                                                                 |     }
    0x0004edb6 ldr r3, [r4, 0x40]                                |     r3 = *((r4 + 0x40));
    0x0004edb8 ldr r3, [r3]                                      |     r3 = *(r3);
                                                                 |     if (r3 != 0) {
    0x0004edba cbz r3, 0x4edca                                   |         
    0x0004edbc ldrd r2, r3, [r4, 0x48]                           |         __asm ("ldrd r2, r3, [r4, 0x48]");
    0x0004edc0 cmp r2, 1                                         |         
    0x0004edc2 sbcs r3, r3, 0                                    |         __asm ("sbcs r3, r3, 0");
                                                                 |         if (r2 >= 1) {
    0x0004edc6 bge.w 0x5143a                                     |             goto label_410;
                                                                 |         }
                                                                 |     }
                                                                 | label_72:
    0x0004edca ldrb r3, [r4, 0xf]                                |     r3 = *((r4 + 0xf));
    0x0004edcc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004edce beq.w 0x50fdc                                     |         goto label_411;
                                                                 |     }
    0x0004edd2 cmp r5, 5                                         |     
                                                                 |     if (r5 == 5) {
    0x0004edd4 beq.w 0x51fbe                                     |         goto label_412;
                                                                 |     }
                                                                 | label_57:
    0x0004edd8 cmp r5, sb                                        |     
                                                                 |     if (r5 == sb) {
    0x0004edda beq.w 0x51fbe                                     |         goto label_412;
                                                                 |     }
    0x0004edde cmp.w sb, 5                                       |     
    0x0004ede2 itt ne                                            |     
                                                                 |     if (sb == 5) {
    0x0004ede4 movne sb, r5                                      |         sb = r5;
                                                                 |     }
                                                                 |     if (sb == 5) {
    0x0004ede6 movne r6, 0                                       |         r6 = 0;
                                                                 |     }
                                                                 |     if (sb == 5) {
    0x0004ede8 beq.w 0x52768                                     |         goto label_413;
                                                                 |     }
                                                                 | label_58:
    0x0004edec mov r1, sb                                        |     r1 = sb;
    0x0004edee mov r0, r4                                        |     r0 = r4;
    0x0004edf0 bl 0x2b6fc                                        |     fcn_0002b6fc (r0, r1);
    0x0004edf4 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004edf6 cmp r0, 6                                         |     
    0x0004edf8 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004edfa ldr r2, [r3, 8]                                   |     r2 = *((r3 + 8));
    0x0004edfc add.w r2, r2, r2, lsl 2                           |     r2 += (r2 << 2);
    0x0004ee00 add.w r2, r1, r2, lsl 3                           |     r2 = r1 + (r2 << 3);
    0x0004ee04 mov r1, r2                                        |     r1 = r2;
    0x0004ee06 str r2, [sp, 0x38]                                |     *(arg_38h) = r2;
    0x0004ee08 movw r2, 0xa02                                    |     r2 = 0xa02;
    0x0004ee0c strh r2, [r1, 0x1c]                               |     *((r1 + 0x1c)) = r2;
                                                                 |     if (r0 == 6) {
    0x0004ee0e beq.w 0x5312c                                     |         goto label_414;
                                                                 |     }
    0x0004ee12 ldr r2, [pc, 0x244]                               |     
    0x0004ee14 add r2, pc                                        |     r2 = 0x9de72;
    0x0004ee16 add.w r3, r2, r0, lsl 2                           |     r3 = r2 + (r0 << 2);
    0x0004ee1a ldr.w r1, [r3, 0x5c8]                             |     r1 = *((r3 + 0x5c8));
    0x0004ee1e ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x0004ee20 str r1, [r3, 4]                                   |     *((r3 + 4)) = r1;
                                                                 |     if (r1 == 0) {
    0x0004ee22 cbz r1, 0x4ee3c                                   |         goto label_191;
                                                                 |     }
    0x0004ee24 ldrb r3, [r1]                                     |     r3 = *(r1);
    0x0004ee26 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004ee28 beq.w 0x53126                                     |         goto label_415;
                                                                 |     }
    0x0004ee2c mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x0004ee2e ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x0004ee32 cmp r2, 0                                         |         
    0x0004ee34 bne 0x4ee2e                                       |         
                                                                 |     } while (r2 != 0);
    0x0004ee36 subs r3, r3, r1                                   |     r3 -= r1;
    0x0004ee38 bic r1, r3, 0xc0000000                            |     r1 = BIT_MASK (r3, 0xc0000000);
                                                                 | label_191:
    0x0004ee3c ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004ee3e ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004ee40 adds r3, 1                                        |     r3++;
    0x0004ee42 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004ee44 movs r3, 1                                        |     r3 = 1;
    0x0004ee46 strb r3, [r2, 0x1e]                               |     *((r2 + 0x1e)) = r3;
    0x0004ee48 ldr r3, [sp, 0x70]                                |     r3 = *(arg_70h);
    0x0004ee4a str r1, [r2, 0x18]                                |     *((r2 + 0x18)) = r1;
    0x0004ee4c cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0004ee4e beq.w 0x4d73a                                     |         goto label_12;
                                                                 |     }
    0x0004ee52 mov r1, r3                                        |     r1 = r3;
    0x0004ee54 mov r0, r2                                        |     r0 = r2;
    0x0004ee56 bl 0x17460                                        |     fcn_00017460 (r0, r1);
    0x0004ee5a cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004ee5c beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004ee60 b.w 0x4d740                                       |     goto label_7;
    0x0004ee64 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004ee66 add r5, sp, 0x124                                 |     r5 += arg_124h;
    0x0004ee68 mov.w r0, -1                                      |     r0 = -1;
    0x0004ee6c movs r4, 0                                        |     r4 = 0;
    0x0004ee6e str r4, [sp, 0x120]                               |     *(arg_120h) = r4;
    0x0004ee70 mov sl, r5                                        |     sl = r5;
    0x0004ee72 ldrd r1, r2, [r3, 4]                              |     __asm ("ldrd r1, r2, [r3, 4]");
    0x0004ee76 add r3, sp, 0x128                                 |     r3 += arg_128h;
    0x0004ee78 str r3, [sp]                                      |     *(sp) = r3;
    0x0004ee7a mov r3, r5                                        |     r3 = r5;
    0x0004ee7c strd r0, r0, [sp, 0x124]                          |     __asm ("strd r0, r0, aav.0x000000ff");
    0x0004ee80 mov r0, fp                                        |     r0 = fp;
    0x0004ee82 bl 0x2a468                                        |     r0 = fcn_0002a468 (r0, r1, r2, r3, r4);
    0x0004ee86 cmp r0, 5                                         |     
    0x0004ee88 mov r6, r0                                        |     r6 = r0;
    0x0004ee8a itttt eq                                          |     
                                                                 |     if (r0 != 5) {
    0x0004ee8c moveq r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r0 != 5) {
    0x0004ee8e moveq r6, r4                                      |         r6 = r4;
                                                                 |     }
                                                                 |     if (r0 != 5) {
    0x0004ee90 moveq r2, r3                                      |         r2 = r3;
                                                                 |     }
                                                                 |     if (r0 != 5) {
    0x0004ee92 streq r3, [sp, 0x120]                             |         *(arg_120h) = r3;
                                                                 |     }
    0x0004ee94 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004ee96 movw r8, 0x2460                                   |     r8 = 0x2460;
    0x0004ee9a it ne                                             |     
                                                                 |     if (r0 == 5) {
    0x0004ee9c ldrne r2, [sp, 0x120]                             |         r2 = *(arg_120h);
                                                                 |     }
    0x0004ee9e add.w sb, sp, 0x12c                               |     sb += arg_12ch;
    0x0004eea2 str r6, [sp, 0x20]                                |     *(arg_20h) = r6;
    0x0004eea4 movs r7, 0                                        |     r7 = 0;
    0x0004eea6 ldr r4, [r3, 0xc]                                 |     r4 = *((r3 + 0xc));
    0x0004eea8 mov r6, sb                                        |     r6 = sb;
    0x0004eeaa ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004eeac mov r5, r2                                        |     r5 = r2;
    0x0004eeae asr.w sb, r5, 0x1f                                |     sb = r5 >> 0x1f;
    0x0004eeb2 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004eeb6 add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004eeba ldrh r2, [r4, 0x1c]                               |     r2 = *((r4 + 0x1c));
    0x0004eebc tst.w r8, r2                                      |     
                                                                 |     if ((r8 & r2) != 0) {
    0x0004eec0 bne 0x4eef4                                       |         goto label_416;
                                                                 |     }
                                                                 |     do {
                                                                 | label_22:
    0x0004eec2 ldr r1, [r4, 0x24]                                |         r1 = *((r4 + 0x24));
                                                                 |         if (r1 != 0) {
    0x0004eec4 cbz r1, 0x4eece                                   |             
    0x0004eec6 ldr r0, [r4]                                      |             r0 = *(r4);
    0x0004eec8 bl 0xe12c                                         |             fcn_0000e12c (r0, r1);
    0x0004eecc str r7, [r4, 0x24]                                |             *((r4 + 0x24)) = r7;
                                                                 |         }
    0x0004eece cmp r6, sl                                        |         
    0x0004eed0 mov.w r3, 4                                       |         r3 = 4;
    0x0004eed4 strd r5, sb, [r4, 0x10]                           |         __asm ("strd r5, sb, [r4, 0x10]");
    0x0004eed8 str r7, [r4, 4]                                   |         *((r4 + 4)) = r7;
    0x0004eeda strh r3, [r4, 0x1c]                               |         *((r4 + 0x1c)) = r3;
                                                                 |         if (r6 == sl) {
    0x0004eedc beq.w 0x5065a                                     |             goto label_417;
                                                                 |         }
    0x0004eee0 ldrh.w r2, [r4, 0x44]                             |         r2 = *((r4 + 0x44));
    0x0004eee4 adds r4, 0x28                                     |         r4 += 0x28;
    0x0004eee6 ldr r5, [sl], 4                                   |         r5 = *(sl);
                                                                 |         sl += 4;
    0x0004eeea tst.w r8, r2                                      |         
    0x0004eeee asr.w sb, r5, 0x1f                                |         sb = r5 >> 0x1f;
    0x0004eef2 beq 0x4eec2                                       |         
                                                                 |     } while ((r8 & r2) == 0);
                                                                 | label_416:
    0x0004eef4 mov r0, r4                                        |     r0 = r4;
    0x0004eef6 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x0004eefa b 0x4eec2                                         |     goto label_22;
    0x0004eefc ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004eefe ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0004ef00 ldrd r1, r2, [r3, 4]                              |     __asm ("ldrd r1, r2, [r3, 4]");
    0x0004ef04 movs r3, 1                                        |     r3 = 1;
    0x0004ef06 str r3, [sp]                                      |     *(sp) = r3;
    0x0004ef08 mov.w r3, -1                                      |     r3 = -1;
    0x0004ef0c bl 0x2e430                                        |     r0 = fcn_0002e430 (r0, r1, r2, r3, r4, r5);
    0x0004ef10 mov r5, r0                                        |     r5 = r0;
    0x0004ef12 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004ef14 beq.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x0004ef18 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004ef1a movs r1, 0x38                                     |     r1 = 0x38;
    0x0004ef1c ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0004ef1e str r3, [r0, 8]                                   |     *((r0 + 8)) = r3;
    0x0004ef20 mov r0, fp                                        |     r0 = fp;
    0x0004ef22 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004ef24 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x0004ef28 bl 0xdb58                                         |     r0 = fcn_0000db58 (r0, r1);
    0x0004ef2c mov r4, r0                                        |     r4 = r0;
    0x0004ef2e str r0, [r5, 0x40]                                |     *((r5 + 0x40)) = r0;
    0x0004ef30 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004ef32 beq.w 0x50b12                                     |         goto label_418;
                                                                 |     }
    0x0004ef36 ldr r5, [r5, 8]                                   |     r5 = *((r5 + 8));
    0x0004ef38 ldrh r3, [r5, 6]                                  |     r3 = *((r5 + 6));
    0x0004ef3a ldr r0, [r5, 0xc]                                 |     r0 = *((r5 + 0xc));
    0x0004ef3c adds r3, 1                                        |     r3++;
    0x0004ef3e add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004ef42 lsls r1, r3, 3                                    |     r1 = r3 << 3;
    0x0004ef44 adds r1, 0x18                                     |     r1 += 0x18;
    0x0004ef46 bl 0xd3a0                                         |     r0 = fcn_0000d3a0 (r0, r1);
    0x0004ef4a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004ef4c beq.w 0x5370c                                     |         goto label_419;
                                                                 |     }
    0x0004ef50 ldrh r3, [r5, 6]                                  |     r3 = *((r5 + 6));
    0x0004ef52 str r5, [r0]                                      |     *(r0) = r5;
    0x0004ef54 str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x0004ef58 adds r3, 1                                        |     r3++;
    0x0004ef5a strh r3, [r0, 4]                                  |     *((r0 + 4)) = r3;
    0x0004ef5c add.w r3, r0, 0x18                                |     r3 = r0 + 0x18;
    0x0004ef60 str r3, [r0, 8]                                   |     *((r0 + 8)) = r3;
    0x0004ef62 str r0, [r4, 0x34]                                |     *((r4 + 0x34)) = r0;
    0x0004ef64 ldrb.w r3, [fp, 0x3f]                             |     r3 = *(arg_3fh);
    0x0004ef68 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x0004ef6a bne.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004ef6e ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004ef72 ldr r1, [r3, 4]                                   |     r1 = *((r3 + 4));
    0x0004ef74 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x0004ef76 ldr r3, [r1, 4]                                   |     r3 = *((r1 + 4));
    0x0004ef78 ldr r2, [r2, 0x50]                                |     r2 = *((r2 + 0x50));
    0x0004ef7a ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x0004ef7c cmp r2, 0xa                                       |     
    0x0004ef7e it lt                                             |     
                                                                 |     if (r2 >= 0xa) {
    0x0004ef80 movlt r2, 0xa                                     |         r2 = 0xa;
                                                                 |     }
    0x0004ef82 mul r2, r3, r2                                    |     r2 = r3 * r2;
    0x0004ef86 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004ef8a lsls r3, r3, 1                                    |     r3 <<= 1;
    0x0004ef8c str r2, [r4, 0x20]                                |     *((r4 + 0x20)) = r2;
    0x0004ef8e str r3, [r4, 0x1c]                                |     *((r4 + 0x1c)) = r3;
    0x0004ef90 b.w 0x4d26a                                       |     goto label_2;
    0x0004ef94 ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004ef96 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004ef98 ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0004ef9a ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004ef9c ldr.w r3, [r3, r2, lsl 2]                         |     offset_23 = r2 << 2;
                                                                 |     r3 = *((r3 + offset_23));
                                                                 |     if (r3 != 0) {
    0x0004efa0 cbz r3, 0x4efac                                   |         
    0x0004efa2 ldr r2, [r3, 0x20]                                |         r2 = *((r3 + 0x20));
    0x0004efa4 ldr r3, [r1, 8]                                   |         r3 = *((r1 + 8));
    0x0004efa6 cmp r2, r3                                        |         
                                                                 |         if (r2 == r3) {
    0x0004efa8 beq.w 0x5135e                                     |             goto label_420;
                                                                 |         }
                                                                 |     }
    0x0004efac ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004efae ldrb.w r3, [r3, 0x58]                             |     r3 = *((r3 + 0x58));
    0x0004efb2 ands r3, r3, 0x20                                 |     r3 &= 0x20;
                                                                 |     if (r3 != r3) {
    0x0004efb6 bne.w 0x5052a                                     |         goto label_327;
                                                                 |     }
    0x0004efba ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004efbc mov r5, r3                                        |     r5 = r3;
    0x0004efbe ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004efc2 ldr r4, [r2, 0xc]                                 |     r4 = *((r2 + 0xc));
    0x0004efc4 ldr r6, [r2, 8]                                   |     r6 = *((r2 + 8));
    0x0004efc6 add.w r3, r3, r4, lsl 4                           |     r3 += (r4 << 4);
    0x0004efca ldr r7, [r3, 4]                                   |     r7 = *((r3 + 4));
    0x0004efcc b.w 0x4da86                                       |     goto label_23;
    0x0004efd0 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004efd2 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004efd4 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004efd6 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004efda add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004efde ldrh r3, [r3, 0x1c]                               |     r3 = *((r3 + 0x1c));
    0x0004efe0 lsls r6, r3, 0x1f                                 |     r6 = r3 << 0x1f;
    0x0004efe2 itete mi                                          |     
                                                                 |     if (r6 >= r3) {
    0x0004efe4 ldrmi r3, [sp, 0x20]                              |         r3 = *(arg_20h);
                                                                 |     }
                                                                 |     if (r6 < r3) {
    0x0004efe6 ldrpl r3, [sp, 0x1c]                              |         r3 = *(arg_1ch);
                                                                 |     }
                                                                 |     if (r6 >= r3) {
    0x0004efe8 ldrmi r3, [r3, 8]                                 |         r3 = *((r3 + 8));
                                                                 |     }
                                                                 |     if (r6 < r3) {
    0x0004efea addpl r3, 1                                       |         r3++;
                                                                 |     }
    0x0004efec str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004efee b.w 0x4d26a                                       |     goto label_2;
    0x0004eff2 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004eff4 ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004eff6 adds r3, 1                                        |     r3++;
    0x0004eff8 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004effa ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004effc ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0004effe ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004f000 ldr.w r4, [r3, r2, lsl 2]                         |     offset_24 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_24));
    0x0004f004 movs r3, 0                                        |     r3 = 0;
    0x0004f006 strb r3, [r4, 0x19]                               |     *((r4 + 0x19)) = r3;
    0x0004f008 ldr r0, [r1, 8]                                   |     r0 = *((r1 + 8));
    0x0004f00a ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004f00c add.w r0, r0, r0, lsl 2                           |     r0 += (r0 << 2);
    0x0004f010 add.w r0, r3, r0, lsl 3                           |     r0 = r3 + (r0 << 3);
    0x0004f014 bl 0xa1d8                                         |     fcn_0000a1d8 (r0);
    0x0004f018 mov.w r3, 0x100                                   |     r3 = 0x100;
    0x0004f01c strd r0, r1, [r4, 0x30]                           |     __asm ("strd r0, r1, [r4, 0x30]");
    0x0004f020 strh r3, [r4, 0x1a]                               |     *((r4 + 0x1a)) = r3;
    0x0004f022 b.w 0x4d26a                                       |     goto label_2;
    0x0004f05c ldr r7, [sp, 0x20]                                |     r7 = *(arg_20h);
    0x0004f05e ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f060 ldr r2, [r7, 4]                                   |     r2 = *((r7 + 4));
    0x0004f062 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004f064 ldr.w r4, [r3, r2, lsl 2]                         |     offset_25 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_25));
    0x0004f068 mov r0, r4                                        |     r0 = r4;
    0x0004f06a ldrd r8, sb, [r4, 0x38]                           |     __asm ("ldrd r8, sb, [r4, 0x38]");
    0x0004f06e bl 0x2f33c                                        |     r0 = fcn_0002f33c (r0);
    0x0004f072 mov r6, r0                                        |     r6 = r0;
    0x0004f074 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004f076 bne.w 0x528f6                                     |         goto label_207;
                                                                 |     }
    0x0004f07a ldr r0, [r4]                                      |     r0 = *(r4);
    0x0004f07c bl 0x328ac                                        |     fcn_000328ac (r0, r1);
    0x0004f080 movs r3, 0                                        |     r3 = 0;
    0x0004f082 mov r6, r0                                        |     r6 = r0;
    0x0004f084 str r3, [r4, 0x44]                                |     *((r4 + 0x44)) = r3;
    0x0004f086 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004f088 bne.w 0x50e60                                     |         goto label_421;
                                                                 |     }
    0x0004f08c ldr.w r5, [fp, 0xc8]                              |     r5 = *(arg_c8h);
                                                                 |     if (r5 != 0) {
    0x0004f090 cbz r5, 0x4f0b4                                   |         
    0x0004f092 ldr r3, [r7, 0x10]                                |         r3 = *((r7 + 0x10));
                                                                 |         if (r3 == 0) {
    0x0004f094 cbz r3, 0x4f0b4                                   |             goto label_422;
                                                                 |         }
    0x0004f096 ldrb r2, [r4, 0x1c]                               |         r2 = *((r4 + 0x1c));
    0x0004f098 lsls r2, r2, 0x1d                                 |         r2 <<= 0x1d;
                                                                 |         if (r2 >= r2) {
    0x0004f09a bpl 0x4f0b4                                       |             goto label_422;
                                                                 |         }
    0x0004f09c ldrsb.w r2, [r4, 0x18]                            |         r2 = *((r4 + 0x18));
    0x0004f0a0 ldr.w r1, [fp, 0x10]                              |         r1 = *(arg_10h);
    0x0004f0a4 ldr.w r0, [fp, 0xc4]                              |         r0 = *(arg_c4h);
    0x0004f0a8 lsls r2, r2, 4                                    |         r2 <<= 4;
    0x0004f0aa ldr r2, [r1, r2]                                  |         r2 = *((r1 + r2));
    0x0004f0ac movs r1, 9                                        |         r1 = 9;
    0x0004f0ae strd r8, sb, [sp]                                 |         __asm ("strd r8, sb, [sp]");
    0x0004f0b2 blx r5                                            |         uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
                                                                 |     }
                                                                 | label_422:
    0x0004f0b4 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f0b6 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004f0b8 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004f0ba adds r2, 1                                        |     r2++;
    0x0004f0bc str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004f0be lsls r2, r3, 0x1f                                 |     r2 = r3 << 0x1f;
                                                                 |     if (r2 < r3) {
    0x0004f0c0 bmi.w 0x50e70                                     |         goto label_423;
                                                                 |     }
    0x0004f0c4 b.w 0x4d26a                                       |     goto label_2;
    0x0004f0c8 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f0ca mov r0, fp                                        |     r0 = fp;
    0x0004f0cc ldr r1, [r3, 4]                                   |     r1 = *((r3 + 4));
    0x0004f0ce ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f0d0 adds r3, 1                                        |     r3++;
    0x0004f0d2 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f0d4 bl 0x4d0f0                                        |     r0 = fcn_0004d0f0 (r0, r1, r2, r3);
    0x0004f0d8 mov r6, r0                                        |     r6 = r0;
    0x0004f0da cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004f0dc beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004f0e0 b.w 0x4d740                                       |     goto label_7;
    0x0004f0e4 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f0e6 ldr r1, [r3, 4]                                   |     r1 = *((r3 + 4));
    0x0004f0e8 cmp r1, 1                                         |     
                                                                 |     if (r1 == 1) {
    0x0004f0ea beq.w 0x51ec8                                     |         goto label_424;
                                                                 |     }
    0x0004f0ee ldr.w r3, [pc, 0xb40]                             |     r3 = *(0x0004fc30);
    0x0004f0f2 add r3, pc                                        |     r3 += pc;
                                                                 | label_115:
    0x0004f0f4 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004f0f6 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004f0f8 ldr.w r4, [fp, 0x10]                              |     r4 = *(arg_10h);
    0x0004f0fc ldr r0, [r2, 0x10]                                |     r0 = *((r2 + 0x10));
    0x0004f0fe lsls r2, r1, 4                                    |     r2 = r1 << 4;
    0x0004f100 ldr r2, [r4, r2]                                  |     r2 = *((r4 + r2));
    0x0004f102 str r0, [sp]                                      |     *(sp) = r0;
    0x0004f104 ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0004f106 str r1, [r7, 8]                                   |     *((r7 + 8)) = r1;
    0x0004f108 ldr.w r1, [pc, 0xb28]                             |     
    0x0004f10c add.w r4, r0, 0x2c                                |     r4 = r0 + 0x2c;
    0x0004f110 str.w fp, [r7]                                    |     __asm ("str.w fp, [r7]");
    0x0004f114 mov r0, fp                                        |     r0 = fp;
    0x0004f116 str r4, [r7, 4]                                   |     *((r7 + 4)) = r4;
    0x0004f118 add r1, pc                                        |     r1 = 0x9ed50;
    0x0004f11a bl 0x1babc                                        |     r0 = fcn_0001babc (r0);
    0x0004f11e mov r8, r0                                        |     r8 = r0;
    0x0004f120 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004f122 beq.w 0x524ce                                     |         goto label_425;
                                                                 |     }
    0x0004f126 ldr.w r2, [pc, 0xb10]                             |     r2 = *(0x0004fc38);
    0x0004f12a movs r5, 0                                        |     r5 = 0;
    0x0004f12c movs r3, 1                                        |     r3 = 1;
    0x0004f12e mov r1, r0                                        |     r1 = r0;
    0x0004f130 strb.w r3, [fp, 0x89]                             |     *(arg_89h) = r3;
    0x0004f134 mov r0, fp                                        |     r0 = fp;
    0x0004f136 str r5, [sp]                                      |     *(sp) = r5;
    0x0004f138 add r2, pc                                        |     r2 += pc;
    0x0004f13a mov r3, r7                                        |     r3 = r7;
    0x0004f13c str r5, [r7, 0xc]                                 |     *((r7 + 0xc)) = r5;
    0x0004f13e blx 0x5f90                                        |     r0 = fcn_00005f90 ();
    0x0004f142 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004f144 beq.w 0x51240                                     |         goto label_426;
                                                                 |     }
    0x0004f148 mov sb, r0                                        |     sb = r0;
    0x0004f14a mov r1, r8                                        |     r1 = r8;
    0x0004f14c mov r0, fp                                        |     r0 = fp;
    0x0004f14e bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0004f152 strb.w r5, [fp, 0x89]                             |     *(arg_89h) = r5;
                                                                 | label_271:
    0x0004f156 mov r0, fp                                        |     r0 = fp;
    0x0004f158 bl 0x13968                                        |     fcn_00013968 (r0);
    0x0004f15c cmp.w sb, 7                                       |     
                                                                 |     if (sb == 7) {
    0x0004f160 beq.w 0x4d4f2                                     |         goto label_24;
                                                                 |     }
    0x0004f164 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f166 adds r3, 1                                        |     r3++;
    0x0004f168 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f16a b.w 0x4d742                                       |     goto label_25;
    0x0004f16e ldr r6, [sp, 0x20]                                |     r6 = *(arg_20h);
    0x0004f170 add.w r8, sp, 0xb0                                |     r8 += arg_b0h;
    0x0004f174 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f176 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004f178 mov r1, r7                                        |     r1 = r7;
    0x0004f17a ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x0004f17c ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004f17e ldr r0, [r6, 0xc]                                 |     r0 = *((r6 + 0xc));
    0x0004f180 ldr.w r4, [r3, r2, lsl 2]                         |     offset_26 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_26));
    0x0004f184 movs r2, 0                                        |     r2 = 0;
    0x0004f186 ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x0004f188 ldr r5, [r4]                                      |     r5 = *(r4);
    0x0004f18a strb.w r2, [sp, 0xde]                             |     *(arg_deh) = r2;
    0x0004f18e str r3, [sp, 0xd8]                                |     *(arg_d8h) = r3;
    0x0004f190 ldr r3, [r6, 8]                                   |     r3 = *((r6 + 8));
    0x0004f192 strd r2, r8, [sp]                                 |     __asm ("strd r2, r8, [sp]");
    0x0004f196 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004f198 strh.w r0, [sp, 0xdc]                             |     *(arg_dch) = r0;
    0x0004f19c mov r0, r5                                        |     r0 = r5;
    0x0004f19e add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004f1a2 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004f1a6 movs r2, 0                                        |     r2 = 0;
    0x0004f1a8 str r3, [sp, 0xe0]                                |     *(arg_e0h) = r3;
    0x0004f1aa movs r3, 0                                        |     r3 = 0;
    0x0004f1ac bl 0x2e9e8                                        |     r0 = fcn_0002e9e8 (r0, r1, r2, r3, r4, r5, r6);
    0x0004f1b0 mov r6, r0                                        |     r6 = r0;
    0x0004f1b2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004f1b4 bne.w 0x5055c                                     |         goto label_427;
                                                                 |     }
    0x0004f1b8 ldr r3, [sp, 0xb0]                                |     r3 = *(arg_b0h);
    0x0004f1ba cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004f1bc beq.w 0x50554                                     |         goto label_428;
                                                                 |     }
    0x0004f1c0 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f1c2 str r0, [r4, 0x44]                                |     *((r4 + 0x44)) = r0;
    0x0004f1c4 adds r3, 1                                        |     r3++;
    0x0004f1c6 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f1c8 b.w 0x4d26a                                       |     goto label_2;
    0x0004f1cc ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f1ce ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004f1d0 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f1d2 adds r3, 1                                        |     r3++;
    0x0004f1d4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f1d6 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f1d8 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004f1da ldr.w r3, [r3, r2, lsl 2]                         |     offset_27 = r2 << 2;
                                                                 |     r3 = *((r3 + offset_27));
    0x0004f1de ldr r2, [r3, 0x40]                                |     r2 = *((r3 + 0x40));
    0x0004f1e0 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0004f1e2 beq.w 0x526be                                     |         goto label_429;
                                                                 |     }
    0x0004f1e6 mov r1, r2                                        |     r1 = r2;
    0x0004f1e8 mov r0, fp                                        |     r0 = fp;
    0x0004f1ea bl 0xf9cc                                         |     fcn_0000f9cc (r0, r1);
    0x0004f1ee b.w 0x4d26a                                       |     goto label_2;
    0x0004f1f2 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f1f4 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004f1f6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004f1f8 bne.w 0x50e92                                     |         goto label_430;
                                                                 |     }
    0x0004f1fc ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f1fe adds r3, 1                                        |     r3++;
    0x0004f200 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
                                                                 | label_55:
    0x0004f202 ldr.w r3, [fp, 0xa4]                              |     r3 = *(arg_a4h);
    0x0004f206 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004f208 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004f20c ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f20e ldrb.w r3, [r3, 0x59]                             |     r3 = *((r3 + 0x59));
    0x0004f212 lsls r7, r3, 0x1c                                 |     r7 = r3 << 0x1c;
                                                                 |     if (r7 < r3) {
    0x0004f214 bmi.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004f218 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f21a ldr r5, [r3, 0x10]                                |     r5 = *((r3 + 0x10));
    0x0004f21c cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0004f21e beq.w 0x52cd8                                     |         goto label_431;
                                                                 |     }
                                                                 | label_175:
    0x0004f222 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f224 add r2, sp, 0xa8                                  |     r2 += arg_a8h;
    0x0004f226 add.w sl, sp, 0xb0                                |     sl += arg_b0h;
    0x0004f22a str r2, [sp, 0x48]                                |     *(arg_48h) = r2;
    0x0004f22c movs r2, 1                                        |     r2 = 1;
    0x0004f22e ldr.w sb, [r3]                                    |     sb = *(r3);
    0x0004f232 movs r3, 0                                        |     r3 = 0;
    0x0004f234 str r3, [sp, 0xa8]                                |     *(arg_a8h) = r3;
    0x0004f236 ldr.w r1, [sb, 0x58]                              |     r1 = *((sb + 0x58));
    0x0004f23a strh.w r2, [sl, 0x18]                             |     *((sl + 0x18)) = r2;
    0x0004f23e ldr.w r0, [sb, 0x98]                              |     r0 = *((sb + 0x98));
    0x0004f242 str.w r1, [sl, 0x14]                              |     __asm ("str.w r1, [sl, 0x14]");
    0x0004f246 add r1, sp, 0x12c                                 |     r1 += arg_12ch;
    0x0004f248 strd r1, r1, [sl, 4]                              |     __asm ("strd r1, r1, [sl, 4]");
    0x0004f24c movs r1, 0x64                                     |     r1 = 0x64;
    0x0004f24e cmp r0, r2                                        |     
    0x0004f250 str.w r3, [sl, 0xc]                               |     __asm ("str.w r3, [sl, 0xc]");
    0x0004f254 str.w sb, [sl]                                    |     __asm ("str.w sb, [sl]");
    0x0004f258 str.w r1, [sl, 0x10]                              |     __asm ("str.w r1, [sl, 0x10]");
                                                                 |     if (r0 <= r2) {
    0x0004f25c ble.w 0x53396                                     |         goto label_432;
                                                                 |     }
    0x0004f260 ldrb r3, [r5]                                     |     r3 = *(r5);
    0x0004f262 ldr r6, [sp, 0x88]                                |     r6 = *(arg_88h);
    0x0004f264 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004f266 beq.w 0x5294a                                     |         goto label_208;
                                                                 |     }
                                                                 | label_26:
    0x0004f26a adds r2, r5, 1                                    |     r2 = r5 + 1;
    0x0004f26c b 0x4f274                                         |     
                                                                 |     while (r3 != 0xa) {
    0x0004f26e ldrb r3, [r2], 1                                  |         r3 = *(r2);
                                                                 |         r2++;
                                                                 |         if (r3 == 0) {
    0x0004f272 cbz r3, 0x4f27a                                   |             goto label_433;
                                                                 |         }
    0x0004f274 cmp r3, 0xa                                       |         
    0x0004f276 mov r4, r2                                        |         r4 = r2;
    0x0004f278 bne 0x4f26e                                       |         
                                                                 |     }
                                                                 | label_433:
    0x0004f27a movs r2, 3                                        |     r2 = 3;
    0x0004f27c mov r1, r6                                        |     r1 = r6;
    0x0004f27e mov r0, sl                                        |     r0 = sl;
    0x0004f280 bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x0004f284 subs r2, r4, r5                                   |     r2 = r4 - r5;
    0x0004f286 mov r1, r5                                        |     r1 = r5;
    0x0004f288 mov r0, sl                                        |     r0 = sl;
    0x0004f28a bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x0004f28e ldrb r3, [r4]                                     |     r3 = *(r4);
    0x0004f290 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004f292 beq.w 0x5294a                                     |         goto label_208;
                                                                 |     }
    0x0004f296 mov r5, r4                                        |     r5 = r4;
    0x0004f298 b 0x4f26a                                         |     goto label_26;
    0x0004f29a ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f29c ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004f29e ldr r4, [r3, 0xc]                                 |     r4 = *((r3 + 0xc));
    0x0004f2a0 ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004f2a4 add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x0004f2a8 ldr r6, [r3, 4]                                   |     r6 = *((r3 + 4));
    0x0004f2aa cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0004f2ac beq.w 0x5105c                                     |         goto label_434;
                                                                 |     }
    0x0004f2b0 ldr r3, [r6, 4]                                   |     r3 = *((r6 + 4));
    0x0004f2b2 mov r0, r6                                        |     r0 = r6;
    0x0004f2b4 ldr r3, [r3, 0x2c]                                |     r3 = *((r3 + 0x2c));
    0x0004f2b6 cmp r4, r3                                        |     
    0x0004f2b8 it lo                                             |     
                                                                 |     if (r4 >= r3) {
    0x0004f2ba movlo r4, r3                                      |         r4 = r3;
                                                                 |     }
    0x0004f2bc bl 0xd140                                         |     fcn_0000d140 (r0);
    0x0004f2c0 ldr r3, [r6, 4]                                   |     r3 = *((r6 + 4));
    0x0004f2c2 cmp r4, 0                                         |     
    0x0004f2c4 ldr r2, [r3]                                      |     r2 = *(r3);
    0x0004f2c6 it gt                                             |     
                                                                 |     if (r4 <= 0) {
    0x0004f2c8 strgt r4, [r2, 0x9c]                              |         *((r2 + 0x9c)) = r4;
                                                                 |     }
                                                                 |     if (r4 <= 0) {
    0x0004f2cc ble.w 0x51066                                     |         goto label_435;
                                                                 |     }
                                                                 | label_59:
    0x0004f2d0 ldrb r2, [r6, 9]                                  |     r2 = *((r6 + 9));
                                                                 |     if (r2 != 0) {
    0x0004f2d2 cbz r2, 0x4f2e0                                   |         
    0x0004f2d4 ldr r5, [r6, 0xc]                                 |         r5 = *((r6 + 0xc));
    0x0004f2d6 subs r5, 1                                        |         r5--;
    0x0004f2d8 str r5, [r6, 0xc]                                 |         *((r6 + 0xc)) = r5;
    0x0004f2da cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x0004f2dc beq.w 0x52bc4                                     |             goto label_436;
                                                                 |         }
                                                                 |     }
                                                                 | label_165:
    0x0004f2e0 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f2e2 adds r3, 1                                        |     r3++;
    0x0004f2e4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f2e6 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x0004f2e8 str r4, [r3, 0x10]                                |     *((r3 + 0x10)) = r4;
    0x0004f2ea asrs r4, r4, 0x1f                                 |     r4 >>= 0x1f;
    0x0004f2ec str r4, [r3, 0x14]                                |     *((r3 + 0x14)) = r4;
    0x0004f2ee b.w 0x4d26a                                       |     goto label_2;
    0x0004f2f2 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f2f4 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004f2f6 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f2f8 adds r3, 1                                        |     r3++;
    0x0004f2fa str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f2fc ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004f300 add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x0004f304 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004f306 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004f308 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004f30a ldr r3, [r3, 0x2c]                                |     r3 = *((r3 + 0x2c));
    0x0004f30c str r3, [r2, 0x10]                                |     *((r2 + 0x10)) = r3;
    0x0004f30e movs r3, 0                                        |     r3 = 0;
    0x0004f310 str r3, [r2, 0x14]                                |     *((r2 + 0x14)) = r3;
    0x0004f312 b.w 0x4d26a                                       |     goto label_2;
    0x0004f316 movs r3, 0                                        |     r3 = 0;
    0x0004f318 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004f31a str r3, [sp, 0xb0]                                |     *(arg_b0h) = r3;
    0x0004f31c add.w sl, sp, 0xb0                                |     sl += arg_b0h;
    0x0004f320 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f322 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x0004f324 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0004f328 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004f32a vstr d16, [sp, 0xd8]                              |     __asm ("vstr d16, [sp, 0xd8]");
    0x0004f32e ldr.w r8, [r3, r2, lsl 2]                         |     offset_28 = r2 << 2;
                                                                 |     r8 = *((r3 + offset_28));
    0x0004f332 ldr.w r0, [r8]                                    |     r0 = *(r8);
    0x0004f336 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004f338 beq.w 0x524be                                     |         goto label_437;
                                                                 |     }
    0x0004f33c ldrb.w r3, [r8, 0x1c]                             |     r3 = *((r8 + 0x1c));
    0x0004f340 lsls r1, r3, 0x1e                                 |     r1 = r3 << 0x1e;
                                                                 |     if (r1 >= r3) {
    0x0004f342 bpl.w 0x51368                                     |         goto label_438;
                                                                 |     }
    0x0004f346 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f348 ldr r6, [r3, 0xc]                                 |     r6 = *((r3 + 0xc));
    0x0004f34a cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004f34c beq.w 0x513a6                                     |         goto label_439;
                                                                 |     }
                                                                 | label_70:
    0x0004f350 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f352 add.w r5, r6, r6, lsl 2                           |     r5 = r6 + (r6 << 2);
    0x0004f356 lsls r5, r5, 3                                    |     r5 <<= 3;
    0x0004f358 ldr.w r3, [r3, 0xb0]                              |     r3 = *((r3 + 0xb0));
    0x0004f35c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004f35e bne.w 0x510cc                                     |         goto label_440;
                                                                 |     }
    0x0004f360 strh r5, [r6, 0x34]                               |     *((r6 + 0x34)) = r5;
    0x0004f362 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004f364 add r5, r3                                        |     r5 += r3;
                                                                 | label_61:
    0x0004f366 mov r0, r5                                        |     r0 = r5;
    0x0004f368 bl 0xc318                                         |     r0 = fcn_0000c318 (r0, r1);
    0x0004f36c ldrd r1, r0, [r5, 0x10]                           |     __asm ("ldrd r1, r0, [r5, 0x10]");
    0x0004f370 mvn r3, 0x80000000                                |     r3 = ~0x80000000;
    0x0004f374 cmp r0, r3                                        |     
    0x0004f376 it eq                                             |     
                                                                 |     if (r0 == r3) {
    0x0004f378 cmpeq r1, -1                                      |         __asm ("cmpeq r1, -1");
                                                                 |     }
                                                                 |     if (r0 == r3) {
    0x0004f37c beq.w 0x536dc                                     |         goto label_441;
                                                                 |     }
    0x0004f380 ldrb.w r3, [r8, 0x1c]                             |     r3 = *((r8 + 0x1c));
    0x0004f384 lsls r2, r3, 0x1e                                 |     r2 = r3 << 0x1e;
                                                                 |     if (r2 < r3) {
    0x0004f386 bmi.w 0x536dc                                     |         goto label_441;
                                                                 |     }
    0x0004f38a ldrd r2, r3, [sp, 0xd8]                           |     __asm ("ldrd r2, r3, [arg_d8h]");
    0x0004f38e cmp r1, r2                                        |     
    0x0004f390 sbcs.w r4, r0, r3                                 |     __asm ("sbcs.w r4, r0, r3");
                                                                 |     if (r1 >= r2) {
    0x0004f394 blt 0x4f39c                                       |         
    0x0004f396 adds r2, r1, 1                                    |         r2 = r1 + 1;
    0x0004f398 adc r3, r0, 0                                     |         __asm ("adc r3, r0, 0");
                                                                 |     }
    0x0004f39c movs r6, 0                                        |     r6 = 0;
    0x0004f39e strd r2, r3, [r5, 0x10]                           |     __asm ("strd r2, r3, [r5, 0x10]");
                                                                 | label_71:
    0x0004f3a2 ldr r1, [sp, 0x1c]                                |     r1 = *(arg_1ch);
    0x0004f3a4 adds r1, 1                                        |     r1++;
    0x0004f3a6 str r1, [sp, 0x1c]                                |     *(arg_1ch) = r1;
    0x0004f3a8 movs r1, 0                                        |     r1 = 0;
    0x0004f3aa strh.w r1, [r8, 0x1a]                             |     *((r8 + 0x1a)) = r1;
    0x0004f3ae str.w r1, [r8, 0x44]                              |     __asm ("str.w r1, [r8, 0x44]");
    0x0004f3b2 ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x0004f3b4 strd r2, r3, [r1, 0x10]                           |     __asm ("strd r2, r3, [r1, 0x10]");
    0x0004f3b8 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004f3ba beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004f3bc add r7, sp, 0x158                                 |     r7 = sp + 0x158;
    0x0004f3be b.w 0x4d740                                       |     goto label_7;
    0x0004f3c2 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f3c4 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004f3c6 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f3c8 adds r3, 1                                        |     r3++;
    0x0004f3ca str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f3cc ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f3ce ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004f3d0 ldr.w r2, [r3, r2, lsl 2]                         |     offset_29 = r2 << 2;
                                                                 |     r2 = *((r3 + offset_29));
    0x0004f3d4 ldrd r3, r1, [r2, 0x28]                           |     __asm ("ldrd r3, r1, [r2, 0x28]");
    0x0004f3d8 adds r0, r3, 1                                    |     r0 = r3 + 1;
    0x0004f3da str r0, [r2, 0x28]                                |     *((r2 + 0x28)) = r0;
    0x0004f3dc adc r0, r1, 0                                     |     __asm ("adc r0, r1, 0");
    0x0004f3e0 str r0, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r0;
    0x0004f3e2 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004f3e4 strd r3, r1, [r2, 0x10]                           |     __asm ("strd r3, r1, [r2, 0x10]");
    0x0004f3e8 b.w 0x4d26a                                       |     goto label_2;
    0x0004f3ec ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004f3ee mov.w r8, 0                                       |     r8 = 0;
    0x0004f3f2 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004f3f4 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004f3f6 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x0004f3f8 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x0004f3fa add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004f3fe add.w r5, r1, r3, lsl 3                           |     r5 = r1 + (r3 << 3);
    0x0004f402 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f404 mov r1, r8                                        |     r1 = r8;
    0x0004f406 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004f408 ldr.w r4, [r3, r2, lsl 2]                         |     offset_30 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_30));
    0x0004f40c ldr r0, [r4]                                      |     r0 = *(r4);
    0x0004f40e str.w r8, [sp, 0xd8]                              |     __asm ("str.w r8, [arg_d8h]");
    0x0004f412 ldrd r2, r3, [r5, 0x10]                           |     __asm ("ldrd r2, r3, [r5, 0x10]");
    0x0004f416 strd r8, r7, [sp]                                 |     __asm ("strd r8, r7, [sp]");
    0x0004f41a bl 0x2e9e8                                        |     fcn_0002e9e8 (r0, r1, r2, r3, r4, r5, r6);
    0x0004f41e ldr r3, [sp, 0xd8]                                |     r3 = *(arg_d8h);
    0x0004f420 mov r6, r0                                        |     r6 = r0;
    0x0004f422 ldrd r0, r1, [r5, 0x10]                           |     __asm ("ldrd r0, r1, [r5, 0x10]");
    0x0004f426 strb.w r8, [r4, 0x19]                             |     *((r4 + 0x19)) = r8;
    0x0004f42a cmp r3, r8                                        |     
    0x0004f42c strb.w r8, [r4, 0x1b]                             |     *((r4 + 0x1b)) = r8;
    0x0004f430 ite eq                                            |     
                                                                 |     if (r3 != r8) {
    0x0004f432 moveq r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (r3 == r8) {
    0x0004f434 movne r2, r8                                      |         r2 = r8;
                                                                 |     }
    0x0004f436 strb r2, [r4, 0x1a]                               |     *((r4 + 0x1a)) = r2;
    0x0004f438 ite ne                                            |     
                                                                 |     if (r3 == r8) {
    0x0004f43a ldrne r2, [sp, 0x20]                              |         r2 = *(arg_20h);
                                                                 |     }
                                                                 |     if (r3 != r8) {
    0x0004f43c ldreq r2, [sp, 0x1c]                              |         r2 = *(arg_1ch);
                                                                 |     }
    0x0004f43e strd r0, r1, [r4, 0x38]                           |     __asm ("strd r0, r1, [r4, 0x38]");
    0x0004f442 ite ne                                            |     
                                                                 |     if (r3 == r8) {
    0x0004f444 ldrne r2, [r2, 8]                                 |         r2 = *((r2 + 8));
                                                                 |     }
                                                                 |     if (r3 != r8) {
    0x0004f446 addeq r2, 1                                       |         r2++;
                                                                 |     }
    0x0004f448 str.w r8, [r4, 0x44]                              |     __asm ("str.w r8, [r4, 0x44]");
    0x0004f44c str r3, [r4, 0xc]                                 |     *((r4 + 0xc)) = r3;
    0x0004f44e str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004f450 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004f452 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004f456 b.w 0x4d740                                       |     goto label_7;
    0x0004f45a ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f45c ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004f45e ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0004f460 ldr r5, [r3, 8]                                   |     r5 = *((r3 + 8));
    0x0004f462 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004f466 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004f468 add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004f46c ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004f46e lsls r3, r3, 0x1e                                 |     r3 <<= 0x1e;
                                                                 |     if (r3 >= r3) {
    0x0004f470 bpl.w 0x512e2                                     |         goto label_442;
                                                                 |     }
    0x0004f474 ldrb r3, [r4, 0x1e]                               |     r3 = *((r4 + 0x1e));
    0x0004f476 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0004f478 beq.w 0x512e2                                     |         goto label_442;
                                                                 |     }
    0x0004f47c movs r1, 1                                        |     r1 = 1;
    0x0004f47e mov r0, r4                                        |     r0 = r4;
    0x0004f480 bl 0x17460                                        |     r0 = fcn_00017460 (r0, r1);
    0x0004f484 mov r6, r0                                        |     r6 = r0;
    0x0004f486 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004f488 beq.w 0x512e2                                     |         goto label_442;
                                                                 |     }
                                                                 | label_27:
    0x0004f48c ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f48e mov sb, r6                                        |     sb = r6;
    0x0004f490 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x0004f494 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f496 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
    0x0004f498 b.w 0x50538                                       |     goto label_39;
    0x0004f49c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f49e ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004f4a0 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f4a2 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004f4a4 ldr.w sb, [r3, r2, lsl 2]                         |     offset_31 = r2 << 2;
                                                                 |     sb = *((r3 + offset_31));
    0x0004f4a8 ldrb.w r7, [sb, 0x19]                             |     r7 = *((sb + 0x19));
    0x0004f4ac cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0004f4ae beq.w 0x51f22                                     |         goto label_443;
                                                                 |     }
    0x0004f4b2 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f4b4 adds r3, 1                                        |     r3++;
    0x0004f4b6 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f4b8 b.w 0x4d26a                                       |     goto label_2;
    0x0004f4bc ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004f4be ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f4c0 ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0004f4c2 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004f4c4 ldr.w r5, [r3, r2, lsl 2]                         |     offset_32 = r2 << 2;
                                                                 |     r5 = *((r3 + offset_32));
    0x0004f4c8 ldr r3, [r1, 0xc]                                 |     r3 = *((r1 + 0xc));
    0x0004f4ca ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004f4cc ldrb.w sb, [r5, 0x19]                             |     sb = *((r5 + 0x19));
    0x0004f4d0 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004f4d4 add.w r4, r2, r3, lsl 3                           |     r4 = r2 + (r3 << 3);
    0x0004f4d8 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x0004f4dc bne.w 0x50e82                                     |         goto label_444;
                                                                 |     }
    0x0004f4e0 ldr r3, [r5, 0x24]                                |     r3 = *((r5 + 0x24));
    0x0004f4e2 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004f4e4 movs r2, 0x48                                     |     r2 = 0x48;
    0x0004f4e6 mov r1, sb                                        |     r1 = sb;
    0x0004f4e8 mov r0, r7                                        |     r0 = r7;
    0x0004f4ea add.w r8, sp, 0xe0                                |     r8 += arg_e0h;
    0x0004f4ee ldr.w sl, [r3]                                    |     sl = *(r3);
    0x0004f4f2 ldr.w r6, [sl]                                    |     r6 = *(sl);
    0x0004f4f6 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x0004f4fa mov r1, r4                                        |     r1 = r4;
    0x0004f4fc mov r0, r8                                        |     r0 = r8;
    0x0004f4fe bl 0xff00                                         |     fcn_0000ff00 (r0, r1);
    0x0004f502 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f504 mov r1, r7                                        |     r1 = r7;
    0x0004f506 ldr r6, [r6, 0x2c]                                |     r6 = *((r6 + 0x2c));
    0x0004f508 ldr r0, [r5, 0x24]                                |     r0 = *((r5 + 0x24));
    0x0004f50a ldr r2, [r3, 8]                                   |     r2 = *((r3 + 8));
    0x0004f50c ldrh.w r3, [sp, 0xfc]                             |     r3 = *(arg_fch);
    0x0004f510 bic r3, r3, 0x4180                                |     r3 = BIT_MASK (r3, 0x4180);
    0x0004f514 bic r3, r3, 0x7f                                  |     r3 = BIT_MASK (r3, 0x7f);
    0x0004f518 orr r3, r3, 1                                     |     r3 |= 1;
    0x0004f51c strh.w r3, [sp, 0xfc]                             |     *(arg_fch) = r3;
    0x0004f520 blx r6                                            |     uint32_t (*r6)(uint32_t) (r3);
    0x0004f522 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f524 mov r6, r0                                        |     r6 = r0;
    0x0004f526 ldr r5, [r3]                                      |     r5 = *(r3);
    0x0004f528 ldr r1, [r3, 0x2c]                                |     r1 = *((r3 + 0x2c));
    0x0004f52a mov r0, r5                                        |     r0 = r5;
    0x0004f52c bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0004f530 ldr.w r1, [sl, 8]                                 |     r1 = *((sl + 8));
    0x0004f534 mov r0, r5                                        |     r0 = r5;
    0x0004f536 bl 0xd418                                         |     fcn_0000d418 (r0, r1);
    0x0004f53a ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f53c str r0, [r3, 0x2c]                                |     *((r3 + 0x2c)) = r0;
    0x0004f53e ldr.w r0, [sl, 8]                                 |     r0 = *((sl + 8));
    0x0004f542 blx 0x6050                                        |     fcn_00006050 ();
    0x0004f546 ldr r3, [sp, 0x118]                               |     r3 = *(arg_118h);
    0x0004f548 str.w sb, [sl, 8]                                 |     __asm ("str.w sb, [sl, 8]");
    0x0004f54c cmp r3, 0                                         |     
    0x0004f54e it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x0004f550 movne r6, r3                                      |         r6 = r3;
                                                                 |     }
    0x0004f552 ldrh.w r3, [sp, 0xfc]                             |     r3 = *(arg_fch);
    0x0004f556 lsls r1, r3, 0x1e                                 |     r1 = r3 << 0x1e;
                                                                 |     if (r1 < r3) {
    0x0004f558 bpl 0x4f56c                                       |         
    0x0004f55a ldrb.w r3, [sp, 0xfe]                             |         r3 = *(arg_feh);
    0x0004f55e ldr r2, [sp, 0x70]                                |         r2 = *(arg_70h);
    0x0004f560 cmp r3, r2                                        |         
                                                                 |         if (r3 == r2) {
    0x0004f562 beq 0x4f56c                                       |             goto label_445;
                                                                 |         }
    0x0004f564 mov r1, r2                                        |         r1 = r2;
    0x0004f566 mov r0, r8                                        |         r0 = r8;
    0x0004f568 bl 0x17460                                        |         fcn_00017460 (r0, r1);
                                                                 |     }
                                                                 | label_445:
    0x0004f56c mov r1, r8                                        |     r1 = r8;
    0x0004f56e mov r0, r4                                        |     r0 = r4;
    0x0004f570 bl 0xff00                                         |     fcn_0000ff00 (r0, r1);
    0x0004f574 ldrh r2, [r4, 0x1c]                               |     r2 = *((r4 + 0x1c));
    0x0004f576 tst.w r2, 0x12                                    |     
                                                                 |     if ((r2 & 0x12) == 0) {
    0x0004f57a beq.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x0004f57e lsls r2, r2, 0x11                                 |     r2 <<= 0x11;
    0x0004f580 ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x0004f582 itt mi                                            |     
                                                                 |     if (r2 >= r2) {
    0x0004f584 ldrmi r2, [r4, 0x10]                              |         r2 = *((r4 + 0x10));
                                                                 |     }
                                                                 |     if (r2 >= r2) {
    0x0004f586 addmi r3, r3, r2                                  |         r3 += r2;
                                                                 |     }
    0x0004f588 ldr r2, [r4]                                      |     r2 = *(r4);
    0x0004f58a ldr r2, [r2, 0x58]                                |     r2 = *((r2 + 0x58));
    0x0004f58c cmp r2, r3                                        |     
                                                                 |     if (r2 >= r3) {
    0x0004f58e bge.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
                                                                 | label_30:
    0x0004f592 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f594 mov r1, fp                                        |     r1 = fp;
    0x0004f596 ldr.w r2, [pc, 0x6a4]                             |     r2 = *(0x0004fc3c);
    0x0004f59a add.w r0, r3, 0x2c                                |     r0 = r3 + 0x2c;
    0x0004f59e add r2, pc                                        |     r2 += pc;
    0x0004f5a0 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x0004f5a4 movs r0, 0x12                                     |     r0 = 0x12;
    0x0004f5a6 b.w 0x4d44a                                       |     goto label_1;
    0x0004f5aa ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f5ac add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004f5ae mov.w r8, 0                                       |     r8 = 0;
    0x0004f5b2 mov r1, r7                                        |     r1 = r7;
    0x0004f5b4 str.w r8, [r7]                                    |     __asm ("str.w r8, [r7]");
    0x0004f5b8 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0004f5ba ldr.w sb, [r3, 8]                                 |     sb = *((r3 + 8));
    0x0004f5be ldr.w r5, [sb]                                    |     r5 = *(sb);
    0x0004f5c2 mov r0, sb                                        |     r0 = sb;
    0x0004f5c4 ldr r3, [r5, 0x18]                                |     r3 = *((r5 + 0x18));
    0x0004f5c6 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x0004f5c8 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f5ca mov r6, r0                                        |     r6 = r0;
    0x0004f5cc ldr r4, [r3]                                      |     r4 = *(r3);
    0x0004f5ce ldr r1, [r3, 0x2c]                                |     r1 = *((r3 + 0x2c));
    0x0004f5d0 mov r0, r4                                        |     r0 = r4;
    0x0004f5d2 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0004f5d6 ldr.w r1, [sb, 8]                                 |     r1 = *((sb + 8));
    0x0004f5da mov r0, r4                                        |     r0 = r4;
    0x0004f5dc bl 0xd418                                         |     fcn_0000d418 (r0, r1);
    0x0004f5e0 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f5e2 str r0, [r3, 0x2c]                                |     *((r3 + 0x2c)) = r0;
    0x0004f5e4 ldr.w r0, [sb, 8]                                 |     r0 = *((sb + 8));
    0x0004f5e8 blx 0x6050                                        |     fcn_00006050 ();
    0x0004f5ec str.w r8, [sb, 8]                                 |     __asm ("str.w r8, [sb, 8]");
    0x0004f5f0 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0004f5f2 bne.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x0004f5f6 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f5f8 mov r2, r6                                        |     r2 = r6;
    0x0004f5fa ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0004f5fc ldr r1, [r3, 4]                                   |     r1 = *((r3 + 4));
    0x0004f5fe ldr r3, [r7]                                      |     r3 = *(r7);
    0x0004f600 str.w sb, [r3]                                    |     __asm ("str.w sb, [r3]");
    0x0004f604 mov.w r3, -1                                      |     r3 = -1;
    0x0004f608 str r6, [sp]                                      |     *(sp) = r6;
    0x0004f60a bl 0x2e430                                        |     r0 = fcn_0002e430 (r0, r1, r2, r3, r4, r5);
    0x0004f60e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004f610 beq.w 0x53150                                     |         goto label_446;
                                                                 |     }
    0x0004f614 ldr r2, [r7]                                      |     r2 = *(r7);
    0x0004f616 str r2, [r0, 0x24]                                |     *((r0 + 0x24)) = r2;
    0x0004f618 b.w 0x4dbae                                       |     goto label_20;
    0x0004f61c ldr r1, [sp, 0x24]                                |     r1 = *((sp + 0x24));
    0x0004f61e movs r2, 2                                        |     r2 = 2;
    0x0004f620 mov r0, fp                                        |     r0 = fp;
    0x0004f622 ldrb.w r3, [r1, 0x58]                             |     r3 = *((r1 + 0x58));
    0x0004f626 bfi r3, r2, 2, 2                                  |     value_33 = BIT_MASK (2, 2);
                                                                 |     value_34 = r2 & value_33;
                                                                 |     value_33 = ~value_33;
                                                                 |     r3 &= value_33;
                                                                 |     r3 |= value_34;
    0x0004f62a ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004f62c strb.w r3, [r1, 0x58]                             |     *((r1 + 0x58)) = r3;
    0x0004f630 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004f632 ldr r1, [r2, 0x10]                                |     r1 = *((r2 + 0x10));
    0x0004f634 ldr.w r2, [fp, 0x10]                              |     r2 = *(arg_10h);
    0x0004f638 lsls r3, r3, 4                                    |     r3 <<= 4;
    0x0004f63a ldr r2, [r2, r3]                                  |     r2 = *((r2 + r3));
    0x0004f63c bl 0x1401c                                        |     r0 = fcn_0001401c (r0, r1, r2);
    0x0004f640 mov r7, r0                                        |     r7 = r0;
    0x0004f642 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004f644 beq.w 0x505d0                                     |         goto label_185;
                                                                 |     }
    0x0004f648 ldr r4, [r0, 0x3c]                                |     r4 = *((r0 + 0x3c));
    0x0004f64a cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0004f64c beq.w 0x505d0                                     |         goto label_185;
                                                                 |     }
    0x0004f650 movs r5, 0                                        |     r5 = 0;
    0x0004f652 mov r1, r5                                        |     r1 = r5;
    0x0004f654 str r5, [r0, 0x3c]                                |     *((r0 + 0x3c)) = r5;
                                                                 |     do {
    0x0004f656 ldr r3, [r4]                                      |         r3 = *(r4);
    0x0004f658 mov r2, r4                                        |         r2 = r4;
    0x0004f65a ldr r4, [r4, 0x18]                                |         r4 = *((r4 + 0x18));
    0x0004f65c cmp fp, r3                                        |         
    0x0004f65e iteee ne                                          |         
                                                                 |         if (fp == r3) {
    0x0004f660 ldrne r0, [r3, 0x144]                             |             r0 = *((r3 + 0x144));
                                                                 |         }
                                                                 |         if (fp != r3) {
    0x0004f664 moveq r5, r2                                      |             r5 = r2;
                                                                 |         }
                                                                 |         if (fp != r3) {
    0x0004f666 streq r2, [r7, 0x3c]                              |             *((r7 + 0x3c)) = r2;
                                                                 |         }
                                                                 |         if (fp == r3) {
    0x0004f668 str r1, [r2, 0x18]                                |             *((r2 + 0x18)) = r1;
                                                                 |         }
    0x0004f66a itt ne                                            |         
                                                                 |         if (fp == r3) {
    0x0004f66c strne r0, [r2, 0x18]                              |             *((r2 + 0x18)) = r0;
                                                                 |         }
                                                                 |         if (fp == r3) {
    0x0004f66e strne r2, [r3, 0x144]                             |             *((r3 + 0x144)) = r2;
                                                                 |         }
    0x0004f672 cmp r4, 0                                         |         
    0x0004f674 bne 0x4f656                                       |         
                                                                 |     } while (r4 != 0);
    0x0004f676 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x0004f678 ldr r0, [r5, 8]                                   |     r0 = *((r5 + 8));
    0x0004f67a ldr r3, [r3]                                      |     r3 = *(r3);
    0x0004f67c ldr r3, [r3, 0x14]                                |     r3 = *((r3 + 0x14));
    0x0004f67e blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0004f680 mov r6, r0                                        |     r6 = r0;
    0x0004f682 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004f684 beq.w 0x52e4a                                     |         goto label_447;
                                                                 |     }
    0x0004f688 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f68a mov sb, r0                                        |     sb = r0;
    0x0004f68c ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0004f68e adds r3, 1                                        |     r3++;
    0x0004f690 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f692 ldrb.w r3, [r2, 0x58]                             |     r3 = *((r2 + 0x58));
    0x0004f696 bfi r3, r4, 2, 2                                  |     value_35 = BIT_MASK (2, 2);
                                                                 |     value_36 = r4 & value_35;
                                                                 |     value_35 = ~value_35;
                                                                 |     r3 &= value_35;
                                                                 |     r3 |= value_36;
    0x0004f69a strb.w r3, [r2, 0x58]                             |     *((r2 + 0x58)) = r3;
    0x0004f69e b.w 0x4d742                                       |     goto label_25;
    0x0004f6a2 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004f6a4 mov r0, fp                                        |     r0 = fp;
    0x0004f6a6 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004f6a8 ldr r1, [r2, 0x10]                                |     r1 = *((r2 + 0x10));
    0x0004f6aa ldr.w r2, [fp, 0x10]                              |     r2 = *(arg_10h);
    0x0004f6ae lsls r3, r3, 4                                    |     r3 <<= 4;
    0x0004f6b0 ldr r2, [r2, r3]                                  |     r2 = *((r2 + r3));
    0x0004f6b2 bl 0x1401c                                        |     r0 = fcn_0001401c (r0, r1, r2);
    0x0004f6b6 mov r4, r0                                        |     r4 = r0;
    0x0004f6b8 add.w r0, fp, 0x12c                               |     r0 += arg_12ch;
    0x0004f6bc ldr r3, [r4, 0x38]                                |     r3 = *((r4 + 0x38));
    0x0004f6be ldr r5, [r3]                                      |     r5 = *(r3);
    0x0004f6c0 mov r2, r5                                        |     r2 = r5;
                                                                 |     if (r5 == 0) {
    0x0004f6c2 cbz r5, 0x4f6d8                                   |         goto label_448;
                                                                 |     }
    0x0004f6c4 ldrb r2, [r5]                                     |     r2 = *(r5);
                                                                 |     if (r2 == 0) {
    0x0004f6c6 cbz r2, 0x4f6d8                                   |         goto label_448;
                                                                 |     }
    0x0004f6c8 mov r3, r5                                        |     r3 = r5;
                                                                 |     do {
    0x0004f6ca ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x0004f6ce cmp r2, 0                                         |         
    0x0004f6d0 bne 0x4f6ca                                       |         
                                                                 |     } while (r2 != 0);
    0x0004f6d2 subs r3, r3, r5                                   |     r3 -= r5;
    0x0004f6d4 bic r2, r3, 0xc0000000                            |     r2 = BIT_MASK (r3, 0xc0000000);
                                                                 | label_448:
    0x0004f6d8 mov r1, r5                                        |     r1 = r5;
    0x0004f6da bl 0x13f5c                                        |     r0 = fcn_00013f5c (r0, r1, r2);
    0x0004f6de mov r2, r0                                        |     r2 = r0;
    0x0004f6e0 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004f6e2 beq.w 0x52518                                     |         goto label_449;
                                                                 |     }
    0x0004f6e6 ldr r5, [sp, 0x24]                                |     r5 = *((sp + 0x24));
    0x0004f6e8 ldr r3, [r0]                                      |     r3 = *(r0);
    0x0004f6ea mov r0, fp                                        |     r0 = fp;
    0x0004f6ec add.w r1, r5, 0x2c                                |     r1 = r5 + 0x2c;
    0x0004f6f0 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004f6f2 str r1, [sp]                                      |     *(sp) = r1;
    0x0004f6f4 mov r1, r4                                        |     r1 = r4;
    0x0004f6f6 bl 0x1bb0c                                        |     r0 = fcn_0001bb0c (r0, r1, r2, r3, r4, r5, r6);
    0x0004f6fa mov r6, r0                                        |     r6 = r0;
    0x0004f6fc cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004f6fe bne.w 0x5127e                                     |         goto label_450;
                                                                 |     }
    0x0004f702 ldr r3, [r4, 0x3c]                                |     r3 = *((r4 + 0x3c));
                                                                 |     if (r3 != 0) {
    0x0004f704 cbnz r3, 0x4f712                                  |         goto label_451;
                                                                 |     }
    0x0004f706 b.w 0x53b9c                                       |     goto label_452;
                                                                 |     do {
    0x0004f70a ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
    0x0004f70c cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0004f70e beq.w 0x529f0                                     |             goto label_453;
                                                                 |         }
                                                                 | label_451:
    0x0004f712 ldr r2, [r3]                                      |         r2 = *(r3);
    0x0004f714 cmp fp, r2                                        |         
    0x0004f716 bne 0x4f70a                                       |         
                                                                 |     } while (fp != r2);
    0x0004f718 mov r0, fp                                        |     r0 = fp;
    0x0004f71a bl 0x184f0                                        |     r0 = fcn_000184f0 (r0);
    0x0004f71e mov r6, r0                                        |     r6 = r0;
    0x0004f720 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004f722 bne.w 0x4f48c                                     |         goto label_27;
                                                                 |     }
    0x0004f726 ldr r3, [r4, 0x3c]                                |     r3 = *((r4 + 0x3c));
                                                                 |     if (r3 != 0) {
    0x0004f728 cbnz r3, 0x4f736                                  |         goto label_454;
                                                                 |     }
    0x0004f72a b.w 0x540d6                                       |     goto label_455;
                                                                 |     do {
    0x0004f72e ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
    0x0004f730 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0004f732 beq.w 0x540d6                                     |             goto label_455;
                                                                 |         }
                                                                 | label_454:
    0x0004f736 ldr r2, [r3]                                      |         r2 = *(r3);
    0x0004f738 cmp fp, r2                                        |         
    0x0004f73a bne 0x4f72e                                       |         
                                                                 |     } while (fp != r2);
    0x0004f73c ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004f73e ldr.w r1, [fp, 0x128]                             |     r1 = *(arg_128h);
    0x0004f742 ldr.w r0, [fp, 0x140]                             |     r0 = *(arg_140h);
    0x0004f746 adds r2, 1                                        |     r2++;
    0x0004f748 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004f74a adds r4, r1, 1                                    |     r4 = r1 + 1;
    0x0004f74c ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x0004f74e str.w r4, [fp, 0x128]                             |     __asm ("str.w r4, [arg_128h]");
    0x0004f752 str.w r3, [r0, r1, lsl 2]                         |     __asm ("str.w r3, [r0, r1, lsl 2]");
    0x0004f756 adds r2, 1                                        |     r2++;
    0x0004f758 str r2, [r3, 0xc]                                 |     *((r3 + 0xc)) = r2;
    0x0004f75a b.w 0x4d26a                                       |     goto label_2;
    0x0004f75e ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f760 ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004f762 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f764 adds r3, 1                                        |     r3++;
    0x0004f766 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004f76a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f76c ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004f76e add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004f772 ldrh r5, [r4, 0x1c]                               |     r5 = *((r4 + 0x1c));
    0x0004f774 lsls r6, r5, 0x1f                                 |     r6 = r5 << 0x1f;
                                                                 |     if (r6 < r5) {
    0x0004f776 bmi.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004f77a mov r0, r4                                        |     r0 = r4;
    0x0004f77c bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x0004f780 and r3, r5, 0xbe00                                |     r3 = r5 & 0xbe00;
    0x0004f784 vstr d0, [r4, 8]                                  |     __asm ("vstr d0, [r4, 8]");
    0x0004f788 orr r3, r3, 8                                     |     r3 |= 8;
    0x0004f78c strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x0004f78e b.w 0x4d26a                                       |     goto label_2;
    0x0004f792 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f794 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004f796 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004f798 adds r2, 1                                        |     r2++;
    0x0004f79a str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004f79c ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004f79e add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004f7a2 add.w r0, r2, r3, lsl 3                           |     r0 = r2 + (r3 << 3);
    0x0004f7a6 ldrh r3, [r0, 0x1c]                               |     r3 = *((r0 + 0x1c));
    0x0004f7a8 lsls r7, r3, 0x1f                                 |     r7 = r3 << 0x1f;
                                                                 |     if (r7 < r3) {
    0x0004f7aa bmi.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004f7ae bl 0xc318                                         |     fcn_0000c318 (r0, r1);
    0x0004f7b2 b.w 0x4d26a                                       |     goto label_2;
    0x0004f7b6 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f7b8 ldr r0, [r3, 4]                                   |     r0 = *((r3 + 4));
    0x0004f7ba ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f7bc adds r3, 1                                        |     r3++;
    0x0004f7be add.w r0, r0, r0, lsl 2                           |     r0 += (r0 << 2);
    0x0004f7c2 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f7c4 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004f7c6 add.w r0, r3, r0, lsl 3                           |     r0 = r3 + (r0 << 3);
    0x0004f7ca bl 0xbb20                                         |     fcn_0000bb20 (r0);
    0x0004f7ce b.w 0x4d26a                                       |     goto label_2;
    0x0004f7d2 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f7d4 ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004f7d6 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f7d8 adds r3, 1                                        |     r3++;
    0x0004f7da add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004f7de str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f7e0 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004f7e2 add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004f7e6 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004f7e8 lsls r0, r3, 0x1f                                 |     r0 = r3 << 0x1f;
                                                                 |     if (r0 < r3) {
    0x0004f7ea bmi.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004f7ee lsls r1, r3, 0x1b                                 |     r1 = r3 << 0x1b;
    0x0004f7f0 ittt mi                                           |     
                                                                 |     if (r1 < r3) {
    0x0004f7f2 bicmi r3, r3, 0x1ee                               |         __asm ("bicmi r3, r3, aav.0x000000ff");
                                                                 |     }
                                                                 |     if (r1 < r3) {
    0x0004f7f6 bicmi r3, r3, 1                                   |         __asm ("bicmi r3, r3, 1");
                                                                 |     }
                                                                 |     if (r1 >= r3) {
    0x0004f7fa strh r3, [r4, 0x1c]                               |         *((r4 + 0x1c)) = r3;
                                                                 |         goto label_456;
                                                                 |     }
                                                                 |     if (r1 < r3) {
                                                                 | label_456:
    0x0004f7fc bmi.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004f800 lsls r2, r3, 0x1e                                 |     r2 = r3 << 0x1e;
                                                                 |     if (r2 >= r3) {
    0x0004f802 bmi 0x4f80c                                       |         
    0x0004f804 tst.w r3, 0xc                                     |         
                                                                 |         if ((r3 & 0xc) != 0) {
    0x0004f808 bne.w 0x539c6                                     |             goto label_457;
                                                                 |         }
                                                                 |     }
                                                                 | label_239:
    0x0004f80c and r3, r3, 0xbe00                                |     r3 &= 0xbe00;
    0x0004f810 orr r3, r3, 0x10                                  |     r3 |= 0x10;
    0x0004f814 strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x0004f816 b.w 0x4d26a                                       |     goto label_2;
    0x0004f81a ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f81c ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004f81e ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f820 adds r3, 1                                        |     r3++;
    0x0004f822 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004f826 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f828 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004f82a add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004f82e ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004f830 lsls r2, r3, 0x1f                                 |     r2 = r3 << 0x1f;
                                                                 |     if (r2 < r3) {
    0x0004f832 bmi.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004f836 asrs r2, r3, 3                                    |     r2 = r3 >> 3;
    0x0004f838 and r2, r2, 2                                     |     r2 &= 2;
    0x0004f83c orrs r3, r2                                       |     r3 |= r2;
    0x0004f83e lsls r7, r3, 0x1e                                 |     r7 = r3 << 0x1e;
    0x0004f840 strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
                                                                 |     if (r7 >= r3) {
    0x0004f842 bmi 0x4f84c                                       |         
    0x0004f844 tst.w r3, 0xc                                     |         
                                                                 |         if ((r3 & 0xc) != 0) {
    0x0004f848 bne.w 0x539fe                                     |             goto label_458;
                                                                 |         }
                                                                 |     }
                                                                 | label_241:
    0x0004f84c lsls r6, r3, 0x11                                 |     r6 = r3 << 0x11;
    0x0004f84e bic r2, r3, 0xc                                   |     r2 = BIT_MASK (r3, 0xc);
    0x0004f852 strh r2, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r2;
                                                                 |     if (r6 < r3) {
    0x0004f854 bmi.w 0x52e92                                     |         goto label_459;
                                                                 |     }
    0x0004f858 bic r3, r3, 0x4000                                |     r3 = BIT_MASK (r3, 0x4000);
    0x0004f85c bic r3, r3, 0x1c                                  |     r3 = BIT_MASK (r3, 0x1c);
    0x0004f860 strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x0004f862 b.w 0x4d26a                                       |     goto label_2;
    0x0004f866 ldr.w r0, [fp, 0x128]                             |     r0 = *(arg_128h);
    0x0004f86a ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f86c cmp r0, 0                                         |     
    0x0004f86e ldr r4, [r3, 0x10]                                |     r4 = *((r3 + 0x10));
                                                                 |     if (r0 <= 0) {
    0x0004f870 ble.w 0x50570                                     |         goto label_460;
                                                                 |     }
    0x0004f874 ldr.w r3, [fp, 0x140]                             |     r3 = *(arg_140h);
    0x0004f878 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004f87a bne.w 0x50570                                     |         goto label_460;
                                                                 |     }
    0x0004f87e cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x0004f880 bne.w 0x53d82                                     |         goto label_461;
                                                                 |     }
    0x0004f884 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f886 mov.w sb, 6                                       |     sb = 6;
    0x0004f88a add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x0004f88e ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f890 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
    0x0004f892 b.w 0x50538                                       |     goto label_39;
    0x0004f896 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f898 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x0004f89c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f89e ldrb r3, [r3, 0xc]                                |     r3 = *((r3 + 0xc));
                                                                 |     if (r3 == 0) {
    0x0004f8a0 cbnz r3, 0x4f8ac                                  |         
    0x0004f8a2 ldr.w r2, [fp, 0x18]                              |         r2 = *(arg_18h);
    0x0004f8a6 lsls r0, r2, 0x11                                 |         r0 = r2 << 0x11;
                                                                 |         if (r0 < r2) {
    0x0004f8a8 bmi.w 0x512b8                                     |             goto label_462;
                                                                 |         }
                                                                 |     }
    0x0004f8ac ldr r0, [sp, 0x20]                                |     r0 = *(arg_20h);
    0x0004f8ae ldr.w r2, [fp, 0x10]                              |     r2 = *(arg_10h);
    0x0004f8b2 ldr r1, [r0, 4]                                   |     r1 = *((r0 + 4));
    0x0004f8b4 ldr.w sb, [r0, 8]                                 |     sb = *((r0 + 8));
    0x0004f8b8 add.w r2, r2, r1, lsl 4                           |     r2 += (r1 << 4);
    0x0004f8bc ldr r5, [r2, 4]                                   |     r5 = *((r2 + 4));
    0x0004f8be ldrb r2, [r5, 9]                                  |     r2 = *((r5 + 9));
    0x0004f8c0 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0004f8c2 bne.w 0x51452                                     |         goto label_463;
                                                                 |     }
    0x0004f8c6 str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x0004f8ca b.w 0x4d26a                                       |     goto label_2;
    0x0004f8ce ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f8d0 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004f8d2 mov r0, fp                                        |     r0 = fp;
    0x0004f8d4 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004f8d6 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f8d8 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004f8da ldr.w r4, [r3, r2, lsl 2]                         |     offset_37 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_37));
    0x0004f8dc ands r2, r4                                       |     r2 &= r4;
    0x0004f8de movs r3, 0                                        |     r3 = 0;
    0x0004f8e0 mov r2, r7                                        |     r2 = r7;
    0x0004f8e2 str r3, [r7]                                      |     *(r7) = r3;
    0x0004f8e4 mov r1, r4                                        |     r1 = r4;
    0x0004f8e6 bl 0x30a88                                        |     r0 = fcn_00030a88 (r0, r1, r2);
    0x0004f8ea mov r6, r0                                        |     r6 = r0;
    0x0004f8ec b.w 0x4db62                                       |     goto label_28;
    0x0004f8f0 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004f8f2 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004f8f4 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004f8f6 ldr r0, [r2, 0xc]                                 |     r0 = *((r2 + 0xc));
    0x0004f8f8 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004f8fc add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0004f900 ldr r2, [r3, 0x10]                                |     r2 = *((r3 + 0x10));
    0x0004f902 ldr r1, [r3, 0x14]                                |     r1 = *((r3 + 0x14));
    0x0004f904 adds r2, r0, r2                                   |     r2 = r0 + r2;
    0x0004f906 str r2, [r3, 0x10]                                |     *((r3 + 0x10)) = r2;
    0x0004f908 adc.w r1, r1, r0, asr 31                          |     __asm ("adc.w r1, r1, r0, asr 31");
    0x0004f90c orrs r2, r1                                       |     r2 |= r1;
    0x0004f90e str r1, [r3, 0x14]                                |     *((r3 + 0x14)) = r1;
    0x0004f910 itete eq                                          |     
                                                                 |     if (r2 != r1) {
    0x0004f912 ldreq r3, [sp, 0x20]                              |         r3 = *(arg_20h);
                                                                 |     }
                                                                 |     if (r2 == r1) {
    0x0004f914 ldrne r3, [sp, 0x1c]                              |         r3 = *(arg_1ch);
                                                                 |     }
                                                                 |     if (r2 != r1) {
    0x0004f916 ldreq r3, [r3, 8]                                 |         r3 = *((r3 + 8));
                                                                 |     }
                                                                 |     if (r2 == r1) {
    0x0004f918 addne r3, 1                                       |         r3++;
                                                                 |     }
    0x0004f91a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f91c b.w 0x4d26a                                       |     goto label_2;
    0x0004f920 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004f922 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004f924 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004f926 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004f92a add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0004f92e ldr r1, [r2, 0xc]                                 |     r1 = *((r2 + 0xc));
    0x0004f930 ldr r2, [r3, 0x10]                                |     r2 = *((r3 + 0x10));
    0x0004f932 adds r2, r1, r2                                   |     r2 = r1 + r2;
    0x0004f934 str r2, [r3, 0x10]                                |     *((r3 + 0x10)) = r2;
    0x0004f936 ldr r2, [r3, 0x14]                                |     r2 = *((r3 + 0x14));
    0x0004f938 adc.w r2, r2, r1, asr 31                          |     __asm ("adc.w r2, r2, r1, asr 31");
    0x0004f93c cmp r2, 0                                         |     
    0x0004f93e str r2, [r3, 0x14]                                |     *((r3 + 0x14)) = r2;
    0x0004f940 itete lt                                          |     
                                                                 |     if (r2 >= 0) {
    0x0004f942 ldrlt r3, [sp, 0x20]                              |         r3 = *(arg_20h);
                                                                 |     }
                                                                 |     if (r2 < 0) {
    0x0004f944 ldrge r3, [sp, 0x1c]                              |         r3 = *(arg_1ch);
                                                                 |     }
                                                                 |     if (r2 >= 0) {
    0x0004f946 ldrlt r3, [r3, 8]                                 |         r3 = *((r3 + 8));
                                                                 |     }
                                                                 |     if (r2 < 0) {
    0x0004f948 addge r3, 1                                       |         r3++;
                                                                 |     }
    0x0004f94a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f94c b.w 0x4d26a                                       |     goto label_2;
    0x0004f950 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f952 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004f954 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004f956 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004f95a add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004f95e ldrd r2, r3, [r3, 0x10]                           |     __asm ("ldrd r2, r3, [r3, 0x10]");
    0x0004f962 cmp r2, 1                                         |     
    0x0004f964 sbcs r3, r3, 0                                    |     __asm ("sbcs r3, r3, 0");
    0x0004f968 itete ge                                          |     
                                                                 |     if (r2 < 1) {
    0x0004f96a ldrge r3, [sp, 0x20]                              |         r3 = *(arg_20h);
                                                                 |     }
                                                                 |     if (r2 >= 1) {
    0x0004f96c ldrlt r3, [sp, 0x1c]                              |         r3 = *(arg_1ch);
                                                                 |     }
                                                                 |     if (r2 < 1) {
    0x0004f96e ldrge r3, [r3, 8]                                 |         r3 = *((r3 + 8));
                                                                 |     }
                                                                 |     if (r2 >= 1) {
    0x0004f970 addlt r3, 1                                       |         r3++;
                                                                 |     }
    0x0004f972 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f974 b.w 0x4d26a                                       |     goto label_2;
    0x0004f978 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f97a ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004f97c add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004f980 lsls r4, r3, 3                                    |     r4 = r3 << 3;
    0x0004f982 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f984 ldr.w r3, [r3, 0xb0]                              |     r3 = *((r3 + 0xb0));
                                                                 |     if (r3 != 0) {
    0x0004f988 cbnz r3, 0x4f9c4                                  |         goto label_464;
                                                                 |     }
    0x0004f98a ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004f98c add r4, r3                                        |     r4 += r3;
                                                                 | label_29:
    0x0004f98e ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f990 mov r0, r4                                        |     r0 = r4;
    0x0004f992 adds r3, 1                                        |     r3++;
    0x0004f994 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f996 bl 0xc318                                         |     fcn_0000c318 (r0, r1);
    0x0004f99a ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f99c ldr r5, [r3, 8]                                   |     r5 = *((r3 + 8));
    0x0004f99e ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004f9a0 add.w r5, r5, r5, lsl 2                           |     r5 += (r5 << 2);
    0x0004f9a4 add.w r5, r3, r5, lsl 3                           |     r5 = r3 + (r5 << 3);
    0x0004f9a8 mov r0, r5                                        |     r0 = r5;
    0x0004f9aa bl 0xc318                                         |     fcn_0000c318 (r0, r1);
    0x0004f9ae ldrd r1, r2, [r5, 0x10]                           |     __asm ("ldrd r1, r2, [r5, 0x10]");
    0x0004f9b2 ldrd r0, r3, [r4, 0x10]                           |     __asm ("ldrd r0, r3, [r4, 0x10]");
    0x0004f9b6 cmp r0, r1                                        |     
    0x0004f9b8 sbcs r3, r2                                       |     __asm ("sbcs r3, r2");
    0x0004f9ba it lt                                             |     
                                                                 |     if (r0 < r1) {
    0x0004f9bc strdlt r1, r2, [r4, 0x10]                         |         __asm ("strdlt r1, r2, [r4, 0x10]");
                                                                 |     }
    0x0004f9c0 b.w 0x4d26a                                       |     goto label_2;
                                                                 |     do {
                                                                 | label_464:
    0x0004f9c4 mov r2, r3                                        |         r2 = r3;
    0x0004f9c6 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x0004f9c8 cmp r3, 0                                         |         
    0x0004f9ca bne 0x4f9c4                                       |         
                                                                 |     } while (r3 != 0);
    0x0004f9cc ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x0004f9ce add r4, r3                                        |     r4 += r3;
    0x0004f9d0 b 0x4f98e                                         |     goto label_29;
    0x0004f9d2 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004f9d4 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f9d6 ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x0004f9d8 adds r2, 1                                        |     r2++;
    0x0004f9da ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0004f9dc str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004f9de movs r2, 8                                        |     r2 = 8;
    0x0004f9e0 strh r2, [r1, 0x1c]                               |     *((r1 + 0x1c)) = r2;
    0x0004f9e2 ldrd r2, r3, [r3]                                 |     __asm ("ldrd r2, r3, [r3]");
    0x0004f9e6 strd r2, r3, [r1, 8]                              |     __asm ("strd r2, r3, [r1, 8]");
    0x0004f9ea b.w 0x4d26a                                       |     goto label_2;
    0x0004f9ee ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f9f0 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004f9f2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004f9f4 beq.w 0x50d62                                     |         goto label_465;
                                                                 |     }
    0x0004f9f8 ldrd r3, r2, [fp, 0x1f0]                          |     __asm ("ldrd r3, r2, [arg_1f0h]");
    0x0004f9fc orrs r3, r2                                       |     r3 |= r2;
                                                                 |     if (r3 == r2) {
    0x0004f9fe beq.w 0x52898                                     |         goto label_466;
                                                                 |     }
    0x0004fa02 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004fa04 adds r3, 1                                        |     r3++;
    0x0004fa06 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004fa08 b.w 0x4d26a                                       |     goto label_2;
    0x0004fa0c ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004fa0e ldr.w r2, [fp, 0x18]                              |     r2 = *(arg_18h);
    0x0004fa12 adds r3, 1                                        |     r3++;
    0x0004fa14 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004fa16 lsls r6, r2, 7                                    |     r6 = r2 << 7;
    0x0004fa18 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004fa1a ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004fa1c asr.w r1, r3, 0x1f                                |     r1 = r3 >> 0x1f;
                                                                 |     if (r6 < r2) {
    0x0004fa20 bmi.w 0x50d48                                     |         goto label_467;
                                                                 |     }
    0x0004fa24 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004fa26 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x0004fa28 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0004fa2a beq.w 0x5287c                                     |         goto label_468;
                                                                 |     }
    0x0004fa2e ldr.w r2, [fp, 0x1f0]                             |     r2 = *(arg_1f0h);
    0x0004fa32 adds r2, r2, r3                                   |     r2 += r3;
    0x0004fa34 ldr.w r3, [fp, 0x1f4]                             |     r3 = *(arg_1f4h);
    0x0004fa38 str.w r2, [fp, 0x1f0]                             |     __asm ("str.w r2, [arg_1f0h]");
    0x0004fa3c adc.w r3, r1, r3                                  |     __asm ("adc.w r3, r1, r3");
    0x0004fa40 str.w r3, [fp, 0x1f4]                             |     __asm ("str.w r3, [arg_1f4h]");
    0x0004fa44 b.w 0x4d26a                                       |     goto label_2;
    0x0004fa48 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004fa4a movw r4, 0x2460                                   |     r4 = 0x2460;
    0x0004fa4e ldr r5, [r3, 4]                                   |     r5 = *((r3 + 4));
    0x0004fa50 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004fa52 ldr.w r1, [r3, 0xb0]                              |     r1 = *((r3 + 0xb0));
    0x0004fa56 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x0004fa58 ldr r2, [r1, 8]                                   |     r2 = *((r1 + 8));
    0x0004fa5a ldrh r0, [r3, 0x1c]                               |     r0 = *((r3 + 0x1c));
    0x0004fa5c ldr r3, [r1, 0x2c]                                |     r3 = *((r1 + 0x2c));
    0x0004fa5e ldr r7, [r1, 0xc]                                 |     r7 = *((r1 + 0xc));
    0x0004fa60 tst r4, r0                                        |     
    0x0004fa62 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004fa64 lsls r3, r0, 0xe                                  |     r3 = r0 << 0xe;
    0x0004fa66 add.w r2, r2, r3, lsl 2                           |     r2 += (r3 << 2);
    0x0004fa6a ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004fa6c add r3, r5                                        |     r3 += r5;
    0x0004fa6e add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004fa72 add.w r7, r7, r3, lsl 3                           |     r7 += (r3 << 3);
                                                                 |     if (r3 != r0) {
    0x0004fa76 bne.w 0x5218e                                     |         goto label_469;
                                                                 |     }
                                                                 | label_129:
    0x0004fa7a ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004fa7c mov r3, r7                                        |     r3 = r7;
    0x0004fa7e add.w r6, r7, 0x20                                |     r6 = r7 + 0x20;
                                                                 |     do {
    0x0004fa82 ldr r5, [r3]                                      |         r5 = *(r3);
    0x0004fa84 adds r3, 0x10                                     |         r3 += 0x10;
    0x0004fa86 ldr r4, [r3, -0xc]                                |         r4 = *((r3 - 0xc));
    0x0004fa8a adds r2, 0x10                                     |         r2 += 0x10;
    0x0004fa8c ldr r0, [r3, -0x8]                                |         r0 = *((r3 - 0x8));
    0x0004fa90 ldr r1, [r3, -0x4]                                |         r1 = *((r3 - 0x4));
    0x0004fa94 cmp r3, r6                                        |         
    0x0004fa96 str r5, [r2, -0x10]                               |         *((r2 - 0x10)) = r5;
    0x0004fa9a str r4, [r2, -0xc]                                |         *((r2 - 0xc)) = r4;
    0x0004fa9e str r0, [r2, -0x8]                                |         *((r2 - 0x8)) = r0;
    0x0004faa2 str r1, [r2, -0x4]                                |         *((r2 - 0x4)) = r1;
    0x0004faa6 bne 0x4fa82                                       |         
                                                                 |     } while (r3 != r6);
    0x0004faa8 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0004faaa str r3, [r2]                                      |     *(r2) = r3;
    0x0004faac ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004faae ldrh r3, [r7, 0x1c]                               |     r3 = *((r7 + 0x1c));
    0x0004fab0 ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x0004fab2 adds r2, 1                                        |     r2++;
    0x0004fab4 lsls r7, r3, 0x14                                 |     r7 = r3 << 0x14;
    0x0004fab6 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004fab8 mov.w r2, 0                                       |     r2 = 0;
    0x0004fabc str r2, [r1, 0x20]                                |     *((r1 + 0x20)) = r2;
                                                                 |     if (r7 < r3) {
    0x0004fabe bmi.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004fac2 ldrh r3, [r1, 0x1c]                               |     r3 = *((r1 + 0x1c));
    0x0004fac4 bic r3, r3, 0x1c00                                |     r3 = BIT_MASK (r3, 0x1c00);
    0x0004fac8 orr r3, r3, 0x1000                                |     r3 |= 0x1000;
    0x0004facc strh r3, [r1, 0x1c]                               |     *((r1 + 0x1c)) = r3;
    0x0004face b.w 0x4d26a                                       |     goto label_2;
    0x0004fad2 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004fad4 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004fad6 ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004fada add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x0004fade ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004fae0 ldr r5, [r4, 4]                                   |     r5 = *((r4 + 4));
    0x0004fae2 mov r0, r4                                        |     r0 = r4;
    0x0004fae4 bl 0xd140                                         |     fcn_0000d140 (r0);
    0x0004fae8 ldrb r3, [r5, 0x11]                               |     r3 = *((r5 + 0x11));
    0x0004faea cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004faec bne.w 0x50c74                                     |         goto label_470;
                                                                 |     }
                                                                 | label_50:
    0x0004faf0 ldrb r3, [r4, 9]                                  |     r3 = *((r4 + 9));
                                                                 |     if (r3 != 0) {
    0x0004faf2 cbz r3, 0x4fb06                                   |         
    0x0004faf4 ldr r5, [r4, 0xc]                                 |         r5 = *((r4 + 0xc));
    0x0004faf6 subs r5, 1                                        |         r5--;
    0x0004faf8 str r5, [r4, 0xc]                                 |         *((r4 + 0xc)) = r5;
                                                                 |         if (r5 != 0) {
    0x0004fafa cbnz r5, 0x4fb06                                  |             goto label_51;
                                                                 |         }
    0x0004fafc ldr r3, [r4, 4]                                   |         r3 = *((r4 + 4));
    0x0004fafe ldr r0, [r3, 0x38]                                |         r0 = *((r3 + 0x38));
    0x0004fb00 blx 0x63dc                                        |         fcn_000063dc ();
    0x0004fb04 strb r5, [r4, 0xa]                                |         *((r4 + 0xa)) = r5;
                                                                 |     }
                                                                 | label_51:
    0x0004fb06 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004fb08 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004fb0a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004fb0c b.w 0x4d26a                                       |     goto label_2;
    0x0004fb10 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004fb12 ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004fb14 ldr r1, [r3, 0x10]                                |     r1 = *((r3 + 0x10));
    0x0004fb16 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004fb18 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004fb1c add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004fb20 mov r0, r4                                        |     r0 = r4;
    0x0004fb22 bl 0xe198                                         |     r0 = fcn_0000e198 (r0, r1, r2, r3);
    0x0004fb26 mov r6, r0                                        |     r6 = r0;
    0x0004fb28 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004fb2a bne.w 0x52198                                     |         goto label_471;
                                                                 |     }
                                                                 | label_130:
    0x0004fb2e ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004fb30 lsls r2, r3, 0x1e                                 |     r2 = r3 << 0x1e;
                                                                 |     if (r2 < r3) {
    0x0004fb32 bpl 0x4fb44                                       |         
    0x0004fb34 ldrb r2, [r4, 0x1e]                               |         r2 = *((r4 + 0x1e));
    0x0004fb36 ldr r1, [sp, 0x70]                                |         r1 = *(arg_70h);
    0x0004fb38 cmp r2, r1                                        |         
                                                                 |         if (r2 == r1) {
    0x0004fb3a beq 0x4fb44                                       |             goto label_472;
                                                                 |         }
    0x0004fb3c mov r0, r4                                        |         r0 = r4;
    0x0004fb3e bl 0x17460                                        |         fcn_00017460 (r0, r1);
    0x0004fb42 ldrh r3, [r4, 0x1c]                               |         r3 = *((r4 + 0x1c));
                                                                 |     }
                                                                 | label_472:
    0x0004fb44 tst.w r3, 0x12                                    |     
                                                                 |     if ((r3 & 0x12) == 0) {
    0x0004fb48 beq.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x0004fb4c lsls r7, r3, 0x11                                 |     r7 = r3 << 0x11;
    0x0004fb4e ldr r2, [r4, 0x18]                                |     r2 = *((r4 + 0x18));
    0x0004fb50 itt mi                                            |     
                                                                 |     if (r7 >= r3) {
    0x0004fb52 ldrmi r3, [r4, 0x10]                              |         r3 = *((r4 + 0x10));
                                                                 |     }
                                                                 |     if (r7 >= r3) {
    0x0004fb54 addmi r2, r2, r3                                  |         r2 += r3;
                                                                 |     }
    0x0004fb56 ldr r3, [r4]                                      |     r3 = *(r4);
    0x0004fb58 ldr r3, [r3, 0x58]                                |     r3 = *((r3 + 0x58));
    0x0004fb5a cmp r3, r2                                        |     
                                                                 |     if (r3 >= r2) {
    0x0004fb5c bge.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x0004fb60 b 0x4f592                                         |     goto label_30;
    0x0004fb62 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004fb64 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004fb66 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004fb68 adds r2, 1                                        |     r2++;
    0x0004fb6a str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004fb6c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004fb6e beq.w 0x52428                                     |         goto label_473;
                                                                 |     }
    0x0004fb72 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0004fb74 ldrb.w r3, [r2, 0x58]                             |     r3 = *((r2 + 0x58));
    0x0004fb78 orr r3, r3, 0x20                                  |     r3 |= 0x20;
    0x0004fb7c strb.w r3, [r2, 0x58]                             |     *((r2 + 0x58)) = r3;
    0x0004fb80 b.w 0x4d26a                                       |     goto label_2;
    0x0004fb84 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004fb86 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004fb88 ldrd r2, r3, [r3, 4]                              |     __asm ("ldrd r2, r3, [r3, 4]");
    0x0004fb8c add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004fb90 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0004fb94 str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x0004fb96 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004fb98 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004fb9a ldr.w r3, [r3, r2, lsl 2]                         |     offset_38 = r2 << 2;
                                                                 |     r3 = *((r3 + offset_38));
    0x0004fb9e ldr r3, [r3, 0x40]                                |     r3 = *((r3 + 0x40));
    0x0004fba0 ldr r2, [r3, 0x28]                                |     r2 = *((r3 + 0x28));
    0x0004fba2 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0004fba4 beq.w 0x5241e                                     |         goto label_474;
                                                                 |     }
    0x0004fba8 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x0004fbaa ldr r3, [r3, 0x24]                                |     r3 = *((r3 + 0x24));
    0x0004fbac add.w r2, r2, r2, lsl 1                           |     r2 += (r2 << 1);
    0x0004fbb0 add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x0004fbb4 ldr r4, [r3, 0x14]                                |     r4 = *((r3 + 0x14));
    0x0004fbb6 ldr r5, [r3, 0x20]                                |     r5 = *((r3 + 0x20));
    0x0004fbf0 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004fbf2 movs r3, 0x1b                                     |     r3 = 0x1b;
    0x0004fbf4 ldr r1, [r2, 0x10]                                |     r1 = *((r2 + 0x10));
    0x0004fbf6 strb r3, [r2]                                     |     *(r2) = r3;
    0x0004fbf8 mov r3, r1                                        |     r3 = r1;
                                                                 |     if (r1 == 0) {
    0x0004fbfa cbz r1, 0x4fc14                                   |         goto label_475;
                                                                 |     }
    0x0004fbfc ldrb r3, [r1]                                     |     r3 = *(r1);
    0x0004fbfe cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004fc00 beq.w 0x53176                                     |         goto label_476;
                                                                 |     }
    0x0004fc04 mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x0004fc06 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x0004fc0a cmp r2, 0                                         |         
    0x0004fc0c bne 0x4fc06                                       |         
                                                                 |     } while (r2 != 0);
                                                                 | label_198:
    0x0004fc0e subs r3, r3, r1                                   |     r3 -= r1;
    0x0004fc10 bic r3, r3, 0xc0000000                            |     r3 = BIT_MASK (r3, 0xc0000000);
                                                                 | label_475:
    0x0004fc14 ldr r4, [sp, 0x70]                                |     r4 = *(arg_70h);
    0x0004fc16 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004fc18 cmp r4, 1                                         |     
    0x0004fc1a it eq                                             |     
                                                                 |     if (r4 != 1) {
    0x0004fc1c moveq r6, 0                                       |         r6 = 0;
                                                                 |     }
    0x0004fc1e str r3, [r2, 4]                                   |     *((r2 + 4)) = r3;
                                                                 |     if (r4 != 1) {
    0x0004fc20 bne.w 0x50b84                                     |         goto label_477;
                                                                 |     }
                                                                 | label_47:
    0x0004fc24 ldr.w r2, [fp, 0x58]                              |     r2 = *(arg_58h);
    0x0004fc28 cmp r2, r3                                        |     
                                                                 |     if (r2 >= r3) {
    0x0004fc2a bge.w 0x4e93c                                     |         goto label_31;
                                                                 |     }
    0x0004fc2e b 0x4f592                                         |     goto label_30;
    0x0004fc40 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004fc42 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004fc44 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004fc46 adds r3, 1                                        |     r3++;
    0x0004fc48 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004fc4a ldrd r3, r2, [r2, 4]                              |     __asm ("ldrd r3, r2, [r2, 4]");
    0x0004fc4e add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004fc52 add.w r2, r2, r2, lsl 2                           |     r2 += (r2 << 2);
    0x0004fc56 add.w r0, r1, r3, lsl 3                           |     r0 = r1 + (r3 << 3);
    0x0004fc5a add.w r3, r1, r2, lsl 3                           |     r3 = r1 + (r2 << 3);
    0x0004fc5e mov r2, r3                                        |     r2 = r3;
    0x0004fc60 str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x0004fc62 ldrh r3, [r0, 0x1c]                               |     r3 = *((r0 + 0x1c));
    0x0004fc64 lsls r3, r3, 0x1f                                 |     r3 <<= 0x1f;
                                                                 |     if (r3 < r3) {
    0x0004fc66 bmi.w 0x50d3e                                     |         goto label_478;
                                                                 |     }
    0x0004fc6a bl 0xa1d8                                         |     fcn_0000a1d8 (r0);
    0x0004fc6e ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x0004fc70 movw r2, 0x2460                                   |     r2 = 0x2460;
    0x0004fc74 mvns r5, r0                                       |     r5 = ~r0;
    0x0004fc76 mvns r4, r1                                       |     r4 = ~r1;
    0x0004fc78 ldrh r3, [r3, 0x1c]                               |     r3 = *((r3 + 0x1c));
    0x0004fc7a tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x0004fc7c bne.w 0x52bba                                     |         goto label_479;
                                                                 |     }
                                                                 | label_164:
    0x0004fc80 ldr r6, [sp, 0x38]                                |     r6 = *(arg_38h);
    0x0004fc82 ldr r1, [r6, 0x24]                                |     r1 = *((r6 + 0x24));
                                                                 |     if (r1 != 0) {
    0x0004fc84 cbz r1, 0x4fc90                                   |         
    0x0004fc86 ldr r0, [r6]                                      |         r0 = *(r6);
    0x0004fc88 bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x0004fc8c movs r3, 0                                        |         r3 = 0;
    0x0004fc8e str r3, [r6, 0x24]                                |         *((r6 + 0x24)) = r3;
                                                                 |     }
    0x0004fc90 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004fc92 movs r3, 0                                        |     r3 = 0;
    0x0004fc94 str r3, [r2, 4]                                   |     *((r2 + 4)) = r3;
    0x0004fc96 movs r3, 4                                        |     r3 = 4;
    0x0004fc98 strd r5, r4, [r2, 0x10]                           |     __asm ("strd r5, r4, [r2, 0x10]");
    0x0004fc9c strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x0004fc9e b.w 0x4d26a                                       |     goto label_2;
    0x0004fca2 ldr r0, [sp, 0x20]                                |     r0 = *(arg_20h);
    0x0004fca4 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004fca6 ldr r2, [r0, 4]                                   |     r2 = *((r0 + 4));
    0x0004fca8 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004fcaa ldr.w r1, [r3, r2, lsl 2]                         |     offset_39 = r2 << 2;
                                                                 |     r1 = *((r3 + offset_39));
    0x0004fcae mov r2, r0                                        |     r2 = r0;
    0x0004fcb0 ldr r3, [r0, 0xc]                                 |     r3 = *((r0 + 0xc));
    0x0004fcb2 ldr r0, [sp, 0x44]                                |     r0 = *(arg_44h);
    0x0004fcb4 ldr r4, [r2, 0x10]                                |     r4 = *((r2 + 0x10));
    0x0004fcb6 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004fcba add.w r3, r0, r3, lsl 3                           |     r3 = r0 + (r3 << 3);
    0x0004fcbe ldr r0, [r1, 0x40]                                |     r0 = *((r1 + 0x40));
    0x0004fcc0 ldr r2, [r0, 0x28]                                |     r2 = *((r0 + 0x28));
    0x0004fcc2 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0004fcc4 beq.w 0x526b4                                     |         goto label_480;
                                                                 |     }
    0x0004fcc8 ldr r5, [r2, 4]                                   |     r5 = *((r2 + 4));
    0x0004fcca ldr r2, [r0, 0x24]                                |     r2 = *((r0 + 0x24));
    0x0004fccc add.w r5, r5, r5, lsl 1                           |     r5 += (r5 << 1);
    0x0004fcd0 add.w r2, r2, r5, lsl 4                           |     r2 += (r5 << 4);
    0x0004fcd4 ldr.w ip, [r2, 0x14]                              |     ip = *((r2 + 0x14));
    0x0004fcd8 ldr r2, [r2, 0x20]                                |     r2 = *((r2 + 0x20));
                                                                 | label_147:
    0x0004fcda ldr r7, [r0, 0x34]                                |     r7 = *((r0 + 0x34));
    0x0004fcdc ldr r5, [r3, 4]                                   |     r5 = *((r3 + 4));
    0x0004fcde ldr r6, [r3, 0x18]                                |     r6 = *((r3 + 0x18));
                                                                 |     if (r2 != 0) {
    0x0004fce0 cbz r2, 0x4fcec                                   |         
    0x0004fce2 ldr r0, [r1, 8]                                   |         r0 = *((r1 + 8));
    0x0004fce4 mov r3, r7                                        |         r3 = r7;
    0x0004fce6 mov r1, ip                                        |         r1 = ip;
    0x0004fce8 bl 0xbf78                                         |         fcn_0000bf78 (r0, r1, r2, r3, r4, r5);
                                                                 |     }
    0x0004fcec cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0004fcee beq.w 0x50b68                                     |         goto label_481;
                                                                 |     }
    0x0004fcf2 strh r4, [r7, 4]                                  |     *((r7 + 4)) = r4;
                                                                 |     if (r4 <= 0) {
    0x0004fcf4 ble.w 0x50b68                                     |         goto label_481;
                                                                 |     }
    0x0004fcf8 ldr r2, [r7, 8]                                   |     r2 = *((r7 + 8));
    0x0004fcfa movs r1, 0                                        |     r1 = 0;
    0x0004fcfc b 0x4fd08                                         |     
                                                                 |     while (r3 >= r3) {
    0x0004fcfe adds r1, 1                                        |         r1++;
    0x0004fd00 adds r2, 0x28                                     |         r2 += 0x28;
    0x0004fd02 cmp r4, r1                                        |         
                                                                 |         if (r4 == r1) {
    0x0004fd04 beq.w 0x50b68                                     |             goto label_481;
                                                                 |         }
    0x0004fd08 ldrh r3, [r2, 0x1c]                               |         r3 = *((r2 + 0x1c));
    0x0004fd0a lsls r3, r3, 0x1f                                 |         r3 <<= 0x1f;
    0x0004fd0c bpl 0x4fcfe                                       |         
                                                                 |     }
                                                                 | label_46:
    0x0004fd0e ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004fd10 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004fd12 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004fd14 b.w 0x4d26a                                       |     goto label_2;
    0x0004fd18 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004fd1a ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004fd1c ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004fd1e add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004fd22 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004fd26 ldrh r3, [r3, 0x1c]                               |     r3 = *((r3 + 0x1c));
    0x0004fd28 lsls r4, r3, 0x1f                                 |     r4 = r3 << 0x1f;
    0x0004fd2a itete pl                                          |     
                                                                 |     if (r4 < r3) {
    0x0004fd2c ldrpl r3, [sp, 0x20]                              |         r3 = *(arg_20h);
                                                                 |     }
                                                                 |     if (r4 >= r3) {
    0x0004fd2e ldrmi r3, [sp, 0x1c]                              |         r3 = *(arg_1ch);
                                                                 |     }
                                                                 |     if (r4 < r3) {
    0x0004fd30 ldrpl r3, [r3, 8]                                 |         r3 = *((r3 + 8));
                                                                 |     }
                                                                 |     if (r4 >= r3) {
    0x0004fd32 addmi r3, 1                                       |         r3++;
                                                                 |     }
    0x0004fd34 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004fd36 b.w 0x4d26a                                       |     goto label_2;
    0x0004fd3a ldr r5, [sp, 0x24]                                |     r5 = *((sp + 0x24));
    0x0004fd3c ldr r4, [sp, 0x20]                                |     r4 = *(arg_20h);
    0x0004fd3e ldr r3, [r5, 0x38]                                |     r3 = *((r5 + 0x38));
    0x0004fd40 mov r0, r5                                        |     r0 = r5;
    0x0004fd42 ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x0004fd44 ldr.w r1, [r3, r2, lsl 2]                         |     offset_40 = r2 << 2;
                                                                 |     r1 = *((r3 + offset_40));
    0x0004fd48 add.w r3, r3, r2, lsl 2                           |     r3 += (r2 << 2);
                                                                 |     if (r1 != 0) {
    0x0004fd4c cbz r1, 0x4fd5c                                   |         
    0x0004fd4e bl 0x2e3cc                                        |         fcn_0002e3cc (r0, r1);
    0x0004fd52 ldr r2, [r4, 4]                                   |         r2 = *((r4 + 4));
    0x0004fd54 mov r0, r5                                        |         r0 = r5;
    0x0004fd56 ldr r3, [r5, 0x38]                                |         r3 = *((r5 + 0x38));
    0x0004fd58 add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
                                                                 |     }
    0x0004fd5c ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004fd5e adds r2, 1                                        |     r2++;
    0x0004fd60 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004fd62 movs r2, 0                                        |     r2 = 0;
    0x0004fd64 str r2, [r3]                                      |     *(r3) = r2;
    0x0004fd66 b.w 0x4d26a                                       |     goto label_2;
    0x0004fd6a ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004fd6c ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0004fd6e ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x0004fd70 ldr r1, [r3, 4]                                   |     r1 = *((r3 + 4));
    0x0004fd72 movs r3, 0                                        |     r3 = 0;
    0x0004fd74 str r3, [sp]                                      |     *(sp) = r3;
    0x0004fd76 mov.w r3, -1                                      |     r3 = -1;
    0x0004fd7a bl 0x2e430                                        |     r0 = fcn_0002e430 (r0, r1, r2, r3, r4, r5);
    0x0004fd7e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004fd80 beq.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x0004fd84 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004fd86 movs r2, 1                                        |     r2 = 1;
    0x0004fd88 strb r2, [r0, 0x19]                               |     *((r0 + 0x19)) = r2;
    0x0004fd8a ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004fd8c adds r3, 1                                        |     r3++;
    0x0004fd8e str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004fd90 ldrb r3, [r0, 0x1c]                               |     r3 = *((r0 + 0x1c));
    0x0004fd92 ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x0004fd94 orr r3, r3, 4                                     |     r3 |= 4;
    0x0004fd98 strb r3, [r0, 0x1c]                               |     *((r0 + 0x1c)) = r3;
    0x0004fd9a str r2, [r0, 0x10]                                |     *((r0 + 0x10)) = r2;
    0x0004fd9c b.w 0x4d26a                                       |     goto label_2;
    0x0004fda0 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004fda2 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004fda4 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004fda6 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004fdaa add.w r5, r1, r3, lsl 3                           |     r5 = r1 + (r3 << 3);
    0x0004fdae ldrd r4, r3, [r2, 8]                              |     __asm ("ldrd r4, r3, [r2, 8]");
    0x0004fdb2 ldrh r2, [r5, 0x1c]                               |     r2 = *((r5 + 0x1c));
    0x0004fdb4 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004fdb8 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004fdbc add.w r4, r1, r4, lsl 3                           |     r4 = r1 + (r4 << 3);
    0x0004fdc0 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0004fdc4 str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x0004fdc6 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004fdc8 orr.w r1, r2, r3                                  |     r1 = r2 | r3;
    0x0004fdcc lsls r1, r1, 0x1f                                 |     r1 <<= 0x1f;
                                                                 |     if (r1 < r1) {
    0x0004fdce bmi.w 0x51f12                                     |         goto label_482;
                                                                 |     }
    0x0004fdd2 lsls r7, r2, 0x11                                 |     r7 = r2 << 0x11;
                                                                 |     if (r7 < r2) {
    0x0004fdd4 bmi.w 0x5150e                                     |         goto label_483;
                                                                 |     }
                                                                 | label_78:
    0x0004fdd8 lsls r6, r3, 0x11                                 |     r6 = r3 << 0x11;
                                                                 |     if (r6 < r3) {
    0x0004fdda bmi.w 0x514fe                                     |         goto label_484;
                                                                 |     }
                                                                 | label_77:
    0x0004fdde ldrh r3, [r5, 0x1c]                               |     r3 = *((r5 + 0x1c));
    0x0004fde0 and r3, r3, 0x12                                  |     r3 &= 0x12;
    0x0004fde4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004fde6 beq.w 0x514ec                                     |         goto label_485;
                                                                 |     }
                                                                 | label_76:
    0x0004fdea ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004fdec and r3, r3, 0x12                                  |     r3 &= 0x12;
    0x0004fdf0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004fdf2 beq.w 0x51440                                     |         goto label_486;
                                                                 |     }
                                                                 | label_73:
    0x0004fdf6 ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x0004fdf8 ldr r6, [r5, 0x18]                                |     r6 = *((r5 + 0x18));
    0x0004fdfa add r6, r3                                        |     r6 += r3;
    0x0004fdfc ldr.w r3, [fp, 0x58]                              |     r3 = *(arg_58h);
    0x0004fe00 cmp r6, r3                                        |     
                                                                 |     if (r6 > r3) {
    0x0004fe02 bgt.w 0x4f592                                     |         goto label_30;
                                                                 |     }
    0x0004fe06 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x0004fe08 adds r1, r6, 2                                    |     r1 = r6 + 2;
    0x0004fe0a subs r2, r4, r3                                   |     r2 = r4 - r3;
    0x0004fe0c mov r0, r3                                        |     r0 = r3;
    0x0004fe0e clz r2, r2                                        |     r2 &= r2;
    0x0004fe12 lsrs r2, r2, 5                                    |     r2 >>= 5;
    0x0004fe14 bl 0x172d4                                        |     r0 = fcn_000172d4 (r0, r1, r2);
    0x0004fe18 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004fe1a bne.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x0004fe1e ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004fe20 ldrh r3, [r2, 0x1c]                               |     r3 = *((r2 + 0x1c));
    0x0004fe22 cmp r4, r2                                        |     
    0x0004fe24 bic r3, r3, 0x4180                                |     r3 = BIT_MASK (r3, 0x4180);
    0x0004fe28 bic r3, r3, 0x7f                                  |     r3 = BIT_MASK (r3, 0x7f);
    0x0004fe2c orr r3, r3, 2                                     |     r3 |= 2;
    0x0004fe30 strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x0004fe32 mov r3, r2                                        |     r3 = r2;
                                                                 |     if (r4 != r2) {
    0x0004fe34 beq 0x4fe40                                       |         
    0x0004fe36 ldr r2, [r4, 0x18]                                |         r2 = *((r4 + 0x18));
    0x0004fe38 ldr r1, [r4, 4]                                   |         r1 = *((r4 + 4));
    0x0004fe3a ldr r0, [r3, 4]                                   |         r0 = *((r3 + 4));
    0x0004fe3c blx 0x6214                                        |         fcn_00006214 ();
                                                                 |     }
    0x0004fe40 ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x0004fe42 ldr r4, [sp, 0x38]                                |     r4 = *(arg_38h);
    0x0004fe44 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004fe46 ldr r1, [r5, 4]                                   |     r1 = *((r5 + 4));
    0x0004fe48 ldr r0, [r4, 4]                                   |     r0 = *((r4 + 4));
    0x0004fe4a adds r2, 1                                        |     r2++;
    0x0004fe4c str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004fe4e add r0, r3                                        |     r0 += r3;
    0x0004fe50 ldr r2, [r5, 0x18]                                |     r2 = *((r5 + 0x18));
    0x0004fe52 blx 0x6214                                        |     fcn_00006214 ();
    0x0004fe56 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0004fe58 movs r2, 0                                        |     r2 = 0;
    0x0004fe5a strb r2, [r3, r6]                                 |     *((r3 + r6)) = r2;
    0x0004fe5c ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0004fe5e add r3, r6                                        |     r3 += r6;
    0x0004fe60 strb r2, [r3, 1]                                  |     *((r3 + 1)) = r2;
    0x0004fe62 ldr r3, [sp, 0x70]                                |     r3 = *(arg_70h);
    0x0004fe64 str r6, [r4, 0x18]                                |     *((r4 + 0x18)) = r6;
    0x0004fe66 strb r3, [r4, 0x1e]                               |     *((r4 + 0x1e)) = r3;
    0x0004fe68 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004fe6a orr r3, r3, 0x200                                 |     r3 |= 0x200;
    0x0004fe6e strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x0004fe70 b.w 0x4d26a                                       |     goto label_2;
    0x0004fe74 ldr r6, [sp, 0x20]                                |     r6 = *(arg_20h);
    0x0004fe76 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004fe78 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004fe7a movs r5, 0                                        |     r5 = 0;
    0x0004fe7c mov r1, r7                                        |     r1 = r7;
    0x0004fe7e ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x0004fe80 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004fe82 ldr.w r4, [r3, r2, lsl 2]                         |     offset_41 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_41));
    0x0004fe86 ldr r0, [r4]                                      |     r0 = *(r4);
    0x0004fe88 str r5, [sp, 0xd8]                                |     *(arg_d8h) = r5;
    0x0004fe8a bl 0x2e998                                        |     fcn_0002e998 (r0, r1);
    0x0004fe8e ldr r3, [sp, 0xd8]                                |     r3 = *(arg_d8h);
    0x0004fe90 strh r5, [r4, 0x1a]                               |     *((r4 + 0x1a)) = r5;
    0x0004fe92 str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x0004fe94 strb r3, [r4, 0x19]                               |     *((r4 + 0x19)) = r3;
    0x0004fe96 ldr r2, [r6, 8]                                   |     r2 = *((r6 + 8));
    0x0004fe98 mov r6, r0                                        |     r6 = r0;
    0x0004fe9a cmp r3, r5                                        |     
    0x0004fe9c it ne                                             |     
                                                                 |     if (r3 != r5) {
    0x0004fe9e cmpne r2, r5                                      |         __asm ("cmpne r2, r5");
                                                                 |     }
    0x0004fea0 it gt                                             |     
                                                                 |     if (r3 > r5) {
    0x0004fea2 strgt r2, [sp, 0x1c]                              |         *(arg_1ch) = r2;
                                                                 |         goto label_487;
                                                                 |     }
                                                                 |     if (r3 <= r5) {
                                                                 | label_487:
    0x0004fea4 ble.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x0004fea8 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004feaa beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004feae b.w 0x4d740                                       |     goto label_7;
    0x0004feb2 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004feb4 ldrb r3, [r2, 3]                                  |     r3 = *((r2 + 3));
    0x0004feb6 ldrd r1, r6, [r2, 0xc]                            |     __asm ("ldrd r1, r6, [r2, 0xc]");
    0x0004feba cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004febc bne.w 0x524d8                                     |         goto label_488;
                                                                 |     }
                                                                 | label_141:
    0x0004fec0 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004fec2 ldr.w r0, [r3, 0xb8]                              |     r0 = *((r3 + 0xb8));
    0x0004fec6 ldr.w r3, [fp, 0x80]                              |     r3 = *(arg_80h);
    0x0004feca cmp r0, r3                                        |     
                                                                 |     if (r0 >= r3) {
    0x0004fecc bge.w 0x51418                                     |         goto label_489;
                                                                 |     }
    0x0004fed0 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004fed2 add.w r1, r1, r1, lsl 2                           |     r1 += (r1 << 2);
    0x0004fed6 ldr r2, [r6, 0x10]                                |     r2 = *((r6 + 0x10));
    0x0004fed8 add.w r4, r3, r1, lsl 3                           |     r4 = r3 + (r1 << 3);
    0x0004fedc ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004fede lsls r3, r3, 0x19                                 |     r3 <<= 0x19;
                                                                 |     if (r3 >= r3) {
    0x0004fee0 bpl.w 0x53054                                     |         goto label_490;
                                                                 |     }
    0x0004fee4 ldr r5, [r4, 0x10]                                |     r5 = *((r4 + 0x10));
    0x0004fee6 ldrd r7, r3, [r5, 0x3c]                           |     __asm ("ldrd r7, r3, [r5, 0x3c]");
                                                                 | label_190:
    0x0004feea ldr r1, [sp, 0x24]                                |     r1 = *((sp + 0x24));
    0x0004feec adds r4, r7, 1                                    |     r4 = r7 + 1;
    0x0004feee adds r0, 1                                        |     r0++;
    0x0004fef0 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004fef4 uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x0004fef6 str.w r0, [r1, 0xb8]                              |     __asm ("str.w r0, [r1, 0xb8]");
    0x0004fefa add.w r0, r5, 0x20                                |     r0 = r5 + 0x20;
    0x0004fefe add.w r4, r0, r4, lsl 3                           |     r4 = r0 + (r4 << 3);
    0x0004ff02 str r0, [sp, 0x44]                                |     *(arg_44h) = r0;
    0x0004ff04 mov r0, r1                                        |     r0 = r1;
    0x0004ff06 ldr.w r1, [r1, 0xb0]                              |     r1 = *((r1 + 0xb0));
    0x0004ff0a str r1, [r5, 4]                                   |     *((r5 + 4)) = r1;
    0x0004ff0c ldr r1, [sp, 0x68]                                |     r1 = *(arg_68h);
    0x0004ff0e str r1, [r5, 0x20]                                |     *((r5 + 0x20)) = r1;
    0x0004ff10 ldr r1, [sp, 0x6c]                                |     r1 = *(arg_6ch);
    0x0004ff12 str r1, [r5, 0x24]                                |     *((r5 + 0x24)) = r1;
    0x0004ff14 ldr r1, [r6]                                      |     r1 = *(r6);
    0x0004ff16 str r1, [sp, 0x40]                                |     *(arg_40h) = r1;
    0x0004ff18 ldr r1, [r6, 4]                                   |     r1 = *((r6 + 4));
    0x0004ff1a mov r6, r0                                        |     r6 = r0;
    0x0004ff1c ldr r0, [r0, 0x5c]                                |     r0 = *((r0 + 0x5c));
    0x0004ff1e str r0, [r5, 0x44]                                |     *((r5 + 0x44)) = r0;
    0x0004ff20 add.w r0, r4, r3, lsl 2                           |     r0 = r4 + (r3 << 2);
    0x0004ff24 strd r7, r1, [r6, 0x1c]                           |     __asm ("strd r7, r1, [r6, 0x1c]");
    0x0004ff28 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004ff2a str r4, [r6, 0x38]                                |     *((r6 + 0x38)) = r4;
    0x0004ff2c movs r4, 0                                        |     r4 = 0;
    0x0004ff2e str.w r5, [r6, 0xb0]                              |     __asm ("str.w r5, [r6, 0xb0]");
    0x0004ff30 str r0, [r6, r2]                                  |     *((r6 + r2)) = r0;
    0x0004ff32 str r1, [r6, 8]                                   |     *((r6 + 8)) = r1;
    0x0004ff34 ldr r1, [sp, 0x40]                                |     r1 = *(arg_40h);
    0x0004ff36 str r3, [r6, 0x24]                                |     *((r6 + 0x24)) = r3;
    0x0004ff38 strd r2, r0, [r6, 0xc4]                           |     __asm ("strd r2, r0, [r6, 0xc4]");
    0x0004ff3c str r1, [r6, 4]                                   |     *((r6 + 4)) = r1;
    0x0004ff3e mov r1, r4                                        |     r1 = r4;
    0x0004ff40 str r4, [r6, 0x5c]                                |     *((r6 + 0x5c)) = r4;
    0x0004ff42 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x0004ff46 str r4, [sp, 0x1c]                                |     *(arg_1ch) = r4;
    0x0004ff48 b.w 0x4d26a                                       |     goto label_2;
    0x0004ff4c ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004ff4e ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004ff50 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004ff52 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004ff56 add.w r0, r1, r3, lsl 3                           |     r0 = r1 + (r3 << 3);
    0x0004ff5a ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x0004ff5c ldr r2, [r2, 0x10]                                |     r2 = *((r2 + 0x10));
    0x0004ff5e str r0, [sp, 0x2c]                                |     *(arg_2ch) = r0;
    0x0004ff60 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004ff64 str r2, [sp, 0x28]                                |     *(arg_28h) = r2;
    0x0004ff66 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0004ff6a str r3, [sp, 0x34]                                |     *(arg_34h) = r3;
    0x0004ff6c ldrh r3, [r0, 0x1c]                               |     r3 = *((r0 + 0x1c));
    0x0004ff6e lsls r4, r3, 0x1a                                 |     r4 = r3 << 0x1a;
                                                                 |     if (r4 >= r3) {
    0x0004ff70 bpl.w 0x51f00                                     |         goto label_491;
                                                                 |     }
                                                                 | label_118:
    0x0004ff74 ldr r3, [sp, 0x2c]                                |     r3 = *(arg_2ch);
    0x0004ff76 ldr.w sl, [r3, 0x10]                              |     sl = *((r3 + 0x10));
    0x0004ff7a ldr r3, [sp, 0x34]                                |     r3 = *(arg_34h);
    0x0004ff7c ldrd r5, r6, [r3, 0x10]                           |     __asm ("ldrd r5, r6, [r3, 0x10]");
    0x0004ff80 ldr r3, [sp, 0x28]                                |     r3 = *(arg_28h);
    0x0004ff82 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004ff84 bne.w 0x52246                                     |         goto label_492;
                                                                 |     }
    0x0004ff88 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004ff8a add.w r8, r3, 1                                   |     r8 = r3 + 1;
                                                                 | label_136:
    0x0004ff8e ldr r3, [sp, 0x34]                                |     r3 = *(arg_34h);
    0x0004ff90 mov r0, sl                                        |     r0 = sl;
    0x0004ff92 str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x0004ff96 ldrd r2, r3, [r3, 0x10]                           |     __asm ("ldrd r2, r3, [r3, 0x10]");
    0x0004ff9a bl 0xd578                                         |     fcn_0000d578 (r0, r1, r2);
    0x0004ff9e b.w 0x4d26a                                       |     goto label_2;
    0x0004ffa2 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004ffa4 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004ffa6 ldrd r4, r3, [r3, 4]                              |     __asm ("ldrd r4, r3, [r3, 4]");
    0x0004ffaa add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004ffae add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004ffb2 add.w r4, r2, r4, lsl 3                           |     r4 = r2 + (r4 << 3);
    0x0004ffb6 add.w r5, r2, r3, lsl 3                           |     r5 = r2 + (r3 << 3);
    0x0004ffba ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004ffbc lsls r0, r3, 0x1a                                 |     r0 = r3 << 0x1a;
                                                                 |     if (r0 < r3) {
    0x0004ffbe bmi 0x4ffce                                       |         goto label_493;
                                                                 |     }
    0x0004ffc0 mov r0, r4                                        |     r0 = r4;
    0x0004ffc2 bl 0xff6c                                         |     fcn_0000ff6c (r0);
    0x0004ffc6 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004ffc8 lsls r1, r3, 0x1a                                 |     r1 = r3 << 0x1a;
                                                                 |     if (r1 >= r3) {
    0x0004ffca bpl.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
                                                                 | label_493:
    0x0004ffce ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004ffd0 ldr r0, [r4, 0x10]                                |     r0 = *((r4 + 0x10));
    0x0004ffd2 adds r3, 1                                        |     r3++;
    0x0004ffd4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004ffd6 ldrd r2, r3, [r5, 0x10]                           |     __asm ("ldrd r2, r3, [r5, 0x10]");
    0x0004ffda bl 0xd578                                         |     fcn_0000d578 (r0, r1, r2);
    0x0004ffde b.w 0x4d26a                                       |     goto label_2;
    0x0004ffe2 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004ffe4 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004ffe6 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004ffe8 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004ffea ldr.w r4, [r3, r2, lsl 2]                         |     offset_42 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_42));
    0x0004ffee ldrb r3, [r4, 0x19]                               |     r3 = *((r4 + 0x19));
    0x0004fff0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004fff2 bne.w 0x50d04                                     |         goto label_494;
                                                                 |     }
    0x0004fff6 ldrb r5, [r4, 0x1b]                               |     r5 = *((r4 + 0x1b));
    0x0004fff8 cmp r5, 0                                         |     
    0x0004fffa blx 0x52eac                                       |     r0 = void (*0x52eac)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3, r4, r5, r6);
    0x0004fffe movs r5, r0                                       |     r5 = r0;
    0x00050000 ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x00050002 adds r3, 1                                        |     r3++;
    0x00050004 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00050006 ldrd r2, r3, [r4, 0x30]                           |     __asm ("ldrd r2, r3, [r4, 0x30]");
    0x0005000a strd r2, r3, [r1, 0x10]                           |     __asm ("strd r2, r3, [r1, 0x10]");
    0x0005000e b.w 0x4d26a                                       |     goto label_2;
    0x00050012 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050014 ldr r1, [r3, 8]                                   |     r1 = *((r3 + 8));
    0x00050016 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00050018 beq.w 0x504d0                                     |         goto label_495;
                                                                 |     }
    0x0005001c ldr.w r3, [fp, 0x18]                              |     r3 = *(arg_18h);
    0x00050020 lsls r0, r3, 6                                    |     r0 = r3 << 6;
                                                                 |     if (r0 >= r3) {
    0x00050022 bpl.w 0x504d0                                     |         goto label_495;
                                                                 |     }
    0x00050026 movs r4, 8                                        |     r4 = 8;
    0x00050028 mov sb, r4                                        |     sb = r4;
    0x0005002a b.w 0x528f8                                       |     goto label_202;
    0x0005002e ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050030 ldrb.w r1, [fp, 0x3e]                             |     r1 = *(arg_3eh);
    0x00050034 ldrd r5, r3, [r3, 4]                              |     __asm ("ldrd r5, r3, [r3, 4]");
    0x00050038 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0005003a beq.w 0x50d14                                     |         goto label_496;
                                                                 |     }
    0x0005003e cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00050040 beq.w 0x51c1c                                     |         goto label_497;
                                                                 |     }
    0x00050044 cmp r1, r5                                        |     
                                                                 |     if (r1 != r5) {
    0x00050046 bne.w 0x53d92                                     |         goto label_498;
                                                                 |     }
    0x0005004a ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0005004c add.w r0, r2, 0x2c                                |     r0 = r2 + 0x2c;
    0x00050050 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00050052 bne.w 0x528d8                                     |         goto label_499;
                                                                 |     }
    0x00050056 ldr.w r2, [pc, 0xb90]                             |     r2 = *(0x00050be8);
    0x0005005a add r2, pc                                        |     r2 += pc;
    0x0005005c b.w 0x50d26                                       |     goto label_153;
    0x00050060 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050062 ldr.w sl, [r3, 4]                                 |     sl = *((r3 + 4));
    0x00050066 ldr r4, [r3, 0x10]                                |     r4 = *((r3 + 0x10));
    0x00050068 cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x0005006c bne.w 0x5256a                                     |         goto label_500;
                                                                 |     }
    0x00050070 ldr.w r3, [fp, 0x94]                              |     r3 = *(arg_94h);
    0x00050074 cmp r3, 0                                         |     
                                                                 |     if (r3 > 0) {
    0x00050076 bgt.w 0x512c0                                     |         goto label_501;
                                                                 |     }
                                                                 |     if (r4 == 0) {
    0x0005007a cbz r4, 0x50094                                   |         goto label_502;
                                                                 |     }
    0x0005007c ldrb r3, [r4]                                     |     r3 = *(r4);
    0x0005007e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00050080 beq.w 0x537b6                                     |         goto label_503;
                                                                 |     }
    0x00050084 mov r3, r4                                        |     r3 = r4;
                                                                 |     do {
    0x00050086 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x0005008a cmp r2, 0                                         |         
    0x0005008c bne 0x50086                                       |         
                                                                 |     } while (r2 != 0);
                                                                 | label_227:
    0x0005008e subs r3, r3, r4                                   |     r3 -= r4;
    0x00050090 bic sl, r3, 0xc0000000                            |     sl = BIT_MASK (r3, 0xc0000000);
                                                                 | label_502:
    0x00050094 ldr.w r1, [fp, 0x140]                             |     r1 = *(arg_140h);
    0x00050098 ldrd r3, r2, [fp, 0x1e8]                          |     __asm ("ldrd r3, r2, [arg_1e8h]");
                                                                 |     if (r1 != 0) {
    0x0005009c cbz r1, 0x500b0                                   |         
    0x0005009e add r2, r3                                        |         r2 += r3;
    0x000500a0 movs r1, 0                                        |         r1 = 0;
    0x000500a2 mov r0, fp                                        |         r0 = fp;
    0x000500a4 bl 0xa6e8                                         |         r0 = fcn_0000a6e8 (r0, r1, r2);
    0x000500a8 mov r6, r0                                        |         r6 = r0;
    0x000500aa cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x000500ac bne.w 0x528f6                                     |             goto label_207;
                                                                 |         }
                                                                 |     }
    0x000500b0 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000500b2 add.w r1, sl, 0x21                                |     r1 = sl + 0x21;
    0x000500b6 mov r0, fp                                        |     r0 = fp;
    0x000500b8 adds r3, 1                                        |     r3++;
    0x000500ba str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000500bc bl 0xd3a0                                         |     r0 = fcn_0000d3a0 (r0, r1);
    0x000500c0 mov r5, r0                                        |     r5 = r0;
    0x000500c2 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000500c4 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x000500c8 adds r0, 0x20                                     |     r0 += 0x20;
    0x000500ca add.w r2, sl, 1                                   |     r2 = sl + 1;
    0x000500ce mov r1, r4                                        |     r1 = r4;
    0x000500d0 str r0, [r5]                                      |     *(r5) = r0;
    0x000500d2 blx 0x6214                                        |     fcn_00006214 ();
    0x000500d6 ldrb.w r3, [fp, 0x3e]                             |     r3 = *(arg_3eh);
    0x000500da cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000500dc beq.w 0x52cf6                                     |         goto label_504;
                                                                 |     }
    0x000500e0 movs r3, 0                                        |     r3 = 0;
    0x000500e2 strb.w r3, [fp, 0x3e]                             |     *(arg_3eh) = r3;
    0x000500e6 movs r3, 1                                        |     r3 = 1;
    0x000500e8 strb.w r3, [fp, 0x45]                             |     *(arg_45h) = r3;
                                                                 | label_177:
    0x000500ec ldr.w r3, [fp, 0x1e0]                             |     r3 = *(arg_1e0h);
    0x000500f0 str r3, [r5, 0x18]                                |     *((r5 + 0x18)) = r3;
    0x000500f2 ldrd r2, r3, [fp, 0x1f0]                          |     __asm ("ldrd r2, r3, [arg_1f0h]");
    0x000500f6 str.w r5, [fp, 0x1e0]                             |     __asm ("str.w r5, [arg_1e0h]");
    0x000500fa strd r2, r3, [r5, 8]                              |     __asm ("strd r2, r3, [r5, 8]");
    0x000500fe ldrd r2, r3, [fp, 0x1f8]                          |     __asm ("ldrd r2, r3, [arg_1f8h]");
    0x00050102 strd r2, r3, [r5, 0x10]                           |     __asm ("strd r2, r3, [r5, 0x10]");
    0x00050106 b.w 0x4d26a                                       |     goto label_2;
    0x0005010a ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0005010c movs r6, 0                                        |     r6 = 0;
    0x0005010e ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x00050110 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x00050112 ldr r4, [r2, 8]                                   |     r4 = *((r2 + 8));
    0x00050114 ldrb r5, [r2, 3]                                  |     r5 = *((r2 + 3));
    0x00050116 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0005011a add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0005011e add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x00050122 add.w r4, r1, r4, lsl 3                           |     r4 = r1 + (r4 << 3);
    0x00050126 str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x00050128 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0005012a ldr.w sb, [r3, 0xc]                               |     sb = *((r3 + 0xc));
    0x0005012e sub.w r7, sb, 4                                   |     r7 = sb - 4;
                                                                 |     if (r5 != 0) {
    0x00050132 cbnz r5, 0x50142                                  |         goto label_505;
                                                                 |     }
    0x00050134 b.w 0x50994                                       |     goto label_506;
                                                                 |     do {
                                                                 | label_32:
    0x00050138 adds r6, 1                                        |         r6++;
    0x0005013a adds r4, 0x28                                     |         r4 += 0x28;
    0x0005013c cmp r5, r6                                        |         
                                                                 |         if (r5 == r6) {
    0x0005013e beq.w 0x50994                                     |             goto label_506;
                                                                 |         }
                                                                 | label_505:
    0x00050142 ldrh r3, [r4, 0x1c]                               |         r3 = *((r4 + 0x1c));
    0x00050144 str r4, [r7, 4]!                                  |         *((r7 += 4)) = r4;
    0x00050148 lsls r3, r3, 0x13                                 |         r3 <<= 0x13;
    0x0005014a bpl 0x50138                                       |         
                                                                 |     } while (r3 >= r3);
    0x0005014c mov r0, r4                                        |     r0 = r4;
    0x0005014e bl 0x17410                                        |     r0 = fcn_00017410 (r0);
    0x00050152 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00050154 beq 0x50138                                       |         goto label_32;
                                                                 |     }
    0x00050156 b.w 0x4d4ec                                       |     goto label_6;
    0x0005015a ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0005015c ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0005015e ldr r3, [r2, 8]                                   |     r3 = *((r2 + 8));
    0x00050160 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x00050164 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x00050168 ldrb r1, [r2, 3]                                  |     r1 = *((r2 + 3));
    0x0005016a ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0005016c ldr r2, [r2, 0xc]                                 |     r2 = *((r2 + 0xc));
    0x0005016e subs r0, r2, 4                                    |     r0 = r2 - 4;
    0x00050170 add.w r4, r0, r1, lsl 2                           |     r4 = r0 + (r1 << 2);
                                                                 |     if (r1 == 0) {
    0x00050174 cbz r1, 0x50182                                   |         goto label_507;
                                                                 |     }
                                                                 |     do {
    0x00050176 str r3, [r0, 4]!                                  |         *((r0 += 4)) = r3;
    0x0005017a cmp r4, r0                                        |         
    0x0005017c add.w r3, r3, 0x28                                |         r3 += 0x28;
    0x00050180 bne 0x50176                                       |         
                                                                 |     } while (r4 != r0);
                                                                 | label_507:
    0x00050182 ldr r0, [sp, 0x20]                                |     r0 = *(arg_20h);
    0x00050184 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00050186 ldr r4, [sp, 0x44]                                |     r4 = *(arg_44h);
    0x00050188 ldr r3, [r0, 0xc]                                 |     r3 = *((r0 + 0xc));
    0x0005018a ldr r0, [r0, 0x10]                                |     r0 = *((r0 + 0x10));
    0x0005018c add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x00050190 add.w r3, r4, r3, lsl 3                           |     r3 = r4 + (r3 << 3);
    0x00050194 ldr r4, [r3, 0x18]                                |     r4 = *((r3 + 0x18));
    0x00050196 str r3, [sp, 0x108]                               |     *(arg_108h) = r3;
    0x00050198 str r0, [r7]                                      |     *(r7) = r0;
    0x0005019a adds r4, 1                                        |     r4++;
    0x0005019c str r4, [r3, 0x18]                                |     *((r3 + 0x18)) = r4;
    0x0005019e movs r3, 0                                        |     r3 = 0;
    0x000501a0 strb.w r3, [r7, 0x44]                             |     *((r7 + 0x44)) = r3;
    0x000501a4 movs r4, 1                                        |     r4 = 1;
    0x000501a6 str r3, [r7, 0xc]                                 |     *((r7 + 0xc)) = r3;
    0x000501a8 strd r3, r3, [r7, 0x28]                           |     __asm ("strd r3, r3, [r7, 0x28]");
    0x000501ac str r3, [r7, 0x40]                                |     *((r7 + 0x40)) = r3;
    0x000501ae str r3, [r7, 0x34]                                |     *((r7 + 0x34)) = r3;
    0x000501b0 ldrh r3, [r0, 2]                                  |     r3 = *((r0 + 2));
    0x000501b2 strh r4, [r7, 0x24]                               |     *((r7 + 0x24)) = r4;
    0x000501b4 str.w fp, [r7, 8]                                 |     __asm ("str.w fp, [r7, 8]");
    0x000501b8 lsls r4, r3, 0x1a                                 |     r4 = r3 << 0x1a;
                                                                 |     if (r4 < r3) {
    0x000501ba bmi.w 0x50c68                                     |         goto label_508;
                                                                 |     }
                                                                 | label_49:
    0x000501be ldr r3, [r0, 0x10]                                |     r3 = *((r0 + 0x10));
    0x000501c0 mov r0, r7                                        |     r0 = r7;
    0x000501c2 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x000501c4 ldr r6, [r7, 0x40]                                |     r6 = *((r7 + 0x40));
    0x000501c6 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x000501c8 bne.w 0x51e66                                     |         goto label_509;
                                                                 |     }
                                                                 | label_111:
    0x000501cc ldrb.w r3, [r7, 0x44]                             |     r3 = *((r7 + 0x44));
                                                                 |     if (r3 != 0) {
    0x000501d0 cbz r3, 0x5020e                                   |         
    0x000501d2 ldr r3, [sp, 0x20]                                |         r3 = *(arg_20h);
    0x000501d4 ldr r4, [r3, -0x10]                               |         r4 = *((r3 - 0x10));
                                                                 |         if (r4 == 0) {
    0x000501d8 cbz r4, 0x5020e                                   |             goto label_510;
                                                                 |         }
    0x000501da ldr r3, [sp, 0x44]                                |         r3 = *(arg_44h);
    0x000501dc add.w r4, r4, r4, lsl 2                           |         r4 += (r4 << 2);
    0x000501e0 movw r2, 0x2460                                   |         r2 = 0x2460;
    0x000501e4 add.w r4, r3, r4, lsl 3                           |         r4 = r3 + (r4 << 3);
    0x000501e8 ldrh r3, [r4, 0x1c]                               |         r3 = *((r4 + 0x1c));
    0x000501ea tst r2, r3                                        |         
                                                                 |         if ((r2 & r3) != 0) {
    0x000501ec bne.w 0x535ba                                     |             goto label_511;
                                                                 |         }
                                                                 | label_217:
    0x000501f0 ldr r1, [r4, 0x24]                                |         r1 = *((r4 + 0x24));
                                                                 |         if (r1 != 0) {
    0x000501f2 cbz r1, 0x501fe                                   |             
    0x000501f4 ldr r0, [r4]                                      |             r0 = *(r4);
    0x000501f6 bl 0xe12c                                         |             fcn_0000e12c (r0, r1);
    0x000501fa movs r3, 0                                        |             r3 = 0;
    0x000501fc str r3, [r4, 0x24]                                |             *((r4 + 0x24)) = r3;
                                                                 |         }
    0x000501fe movs r3, 0                                        |         r3 = 0;
    0x00050200 movs r2, 1                                        |         r2 = 1;
    0x00050202 str r3, [r4, 4]                                   |         *((r4 + 4)) = r3;
    0x00050204 movs r3, 4                                        |         r3 = 4;
    0x00050206 strh r3, [r4, 0x1c]                               |         *((r4 + 0x1c)) = r3;
    0x00050208 movs r3, 0                                        |         r3 = 0;
    0x0005020a strd r2, r3, [r4, 0x10]                           |         __asm ("strd r2, r3, [r4, 0x10]");
                                                                 |     }
                                                                 | label_510:
    0x0005020e ldrh r3, [r7, 0x24]                               |     r3 = *((r7 + 0x24));
    0x00050210 movw r2, 0x2460                                   |     r2 = 0x2460;
    0x00050214 tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x00050216 bne.w 0x51e84                                     |         goto label_512;
                                                                 |     }
                                                                 | label_112:
    0x0005021a ldr r1, [r7, 0x2c]                                |     r1 = *((r7 + 0x2c));
    0x0005021c cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0005021e beq.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x00050222 ldr r0, [r7, 8]                                   |     r0 = *((r7 + 8));
    0x00050224 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00050228 b.w 0x4dbae                                       |     goto label_20;
    0x0005022c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005022e mov r0, fp                                        |     r0 = fp;
    0x00050230 ldr r6, [r3, 8]                                   |     r6 = *((r3 + 8));
    0x00050232 adds r5, r6, 1                                    |     r5 = r6 + 1;
    0x00050234 lsls r5, r5, 2                                    |     r5 <<= 2;
    0x00050236 mov r1, r5                                        |     r1 = r5;
    0x00050238 bl 0xd3a0                                         |     fcn_0000d3a0 (r0, r1);
    0x0005023c str r0, [sp, 0x28]                                |     *(arg_28h) = r0;
    0x0005023e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00050240 beq.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x00050244 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x00050246 cmp r6, 0                                         |     
    0x00050248 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0005024a ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x0005024c add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x00050250 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x00050254 str r3, [sp, 0x34]                                |     *(arg_34h) = r3;
    0x00050256 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00050258 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0005025c add.w r7, r1, r3, lsl 3                           |     r7 = r1 + (r3 << 3);
    0x00050260 ldr r3, [sp, 0x28]                                |     r3 = *(arg_28h);
    0x00050262 str r7, [sp, 0x2c]                                |     *(arg_2ch) = r7;
                                                                 |     if (r6 <= 0) {
    0x00050264 ble 0x50286                                       |         goto label_513;
                                                                 |     }
    0x00050266 sub.w r8, r3, 4                                   |     r8 = r3 - 4;
    0x0005026a movs r4, 0                                        |     r4 = 0;
                                                                 |     do {
    0x0005026c mov r0, r7                                        |         r0 = r7;
    0x0005026e adds r4, 1                                        |         r4++;
    0x00050270 bl 0xa1d8                                         |         fcn_0000a1d8 (r0);
    0x00050274 cmp r6, r4                                        |         
    0x00050276 add.w r7, r7, 0x28                                |         r7 += 0x28;
    0x0005027a str r0, [r8, 4]!                                  |         *((r8 += 4)) = r0;
    0x0005027e bne 0x5026c                                       |         
                                                                 |     } while (r6 != r4);
    0x00050280 ldr r2, [sp, 0x28]                                |     r2 = *(arg_28h);
    0x00050282 subs r3, r5, 4                                    |     r3 = r5 - 4;
    0x00050284 add r3, r2                                        |     r3 += r2;
                                                                 | label_513:
    0x00050286 movs r4, 0                                        |     r4 = 0;
    0x00050288 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0005028a str r4, [r3]                                      |     *(r3) = r4;
    0x0005028c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005028e ldrb r2, [r3, 3]                                  |     r2 = *((r3 + 3));
    0x00050290 ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x00050294 add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x00050298 ldr r0, [r3, 4]                                   |     r0 = *((r3 + 4));
    0x0005029a ldr r3, [sp, 0x34]                                |     r3 = *(arg_34h);
    0x0005029c ldr r5, [r0, 4]                                   |     r5 = *((r0 + 4));
    0x0005029e ldr.w r8, [r3, 0x10]                              |     r8 = *((r3 + 0x10));
    0x000502a2 str r0, [sp, 0x20]                                |     *(arg_20h) = r0;
    0x000502a4 bl 0xd140                                         |     fcn_0000d140 (r0);
    0x000502a8 ldr r1, [r5]                                      |     r1 = *(r5);
    0x000502aa ldr r3, [r5, 0x2c]                                |     r3 = *((r5 + 0x2c));
    0x000502ac ldr.w r2, [r1, 0xdc]                              |     r2 = *((r1 + 0xdc));
    0x000502b0 ldr r2, [r2, 0xc]                                 |     r2 = *((r2 + 0xc));
    0x000502b2 str r1, [r7, 4]                                   |     *((r7 + 4)) = r1;
    0x000502b4 str.w r8, [r7, 0x10]                              |     __asm ("str.w r8, [r7, 0x10]");
    0x000502b8 str r2, [sp, 0x4c]                                |     *(arg_4ch) = r2;
    0x000502ba str r5, [r7]                                      |     *(r7) = r5;
    0x000502bc str r3, [r7, 0xc]                                 |     *((r7 + 0xc)) = r3;
    0x000502be strd r4, r4, [r7, 0x14]                           |     __asm ("strd r4, r4, [r7, 0x14]");
    0x000502c2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000502c4 beq.w 0x52ca8                                     |         goto label_514;
                                                                 |     }
    0x000502c8 lsrs r3, r3, 3                                    |     r3 >>= 3;
    0x000502ca adds r0, r3, 1                                    |     r0 = r3 + 1;
    0x000502cc bl 0x11e2c                                        |     r0 = fcn_00011e2c (r0);
    0x000502d0 mov r4, r0                                        |     r4 = r0;
    0x000502d2 str r0, [r7, 8]                                   |     *((r7 + 8)) = r0;
    0x000502d4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000502d6 beq.w 0x5378a                                     |         goto label_515;
                                                                 |     }
    0x000502da ldr.w r3, [pc, 0x910]                             |     
    0x000502de ldr r1, [r5, 0x20]                                |     r1 = *((r5 + 0x20));
    0x000502e0 add r3, pc                                        |     r3 = 0xa0ed2;
    0x000502e2 ldr.w r0, [r3, 0x110]                             |     r0 = *(0xa0fe2);
    0x000502e6 bl 0x5dc60                                        |     fcn_0005dc60 (r0, r1, r2);
    0x000502ea ldr r2, [r7, 0xc]                                 |     r2 = *((r7 + 0xc));
    0x000502ec adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x000502ee cmp r3, r2                                        |     
                                                                 |     if (r3 < r2) {
    0x000502f0 bls.w 0x5122a                                     |         goto label_516;
                                                                 |     }
                                                                 | label_66:
    0x000502f4 ldr r3, [sp, 0x8c]                                |     r3 = *(arg_8ch);
    0x000502f6 add r2, sp, 0x12c                                 |     r2 += arg_12ch;
    0x000502f8 movs r4, 0                                        |     r4 = 0;
    0x000502fa ldr.w r1, [pc, 0x8f4]                             |     r1 = *(0x00050bf0);
    0x000502fe mov r0, r7                                        |     r0 = r7;
    0x00050300 str r3, [r7, 0x30]                                |     *((r7 + 0x30)) = r3;
    0x00050302 movs r3, 2                                        |     r3 = 2;
    0x00050304 strh r3, [r7, 0x34]                               |     *((r7 + 0x34)) = r3;
    0x00050306 add r1, pc                                        |     r1 += pc;
    0x00050308 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x0005030a ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0005030c strd r2, r2, [r7, 0x20]                           |     __asm ("strd r2, r2, [r7, 0x20]");
    0x00050310 movs r2, 0x64                                     |     r2 = 0x64;
    0x00050312 str r4, [r7, 0x1c]                                |     *((r7 + 0x1c)) = r4;
    0x00050314 str r4, [r7, 0x28]                                |     *((r7 + 0x28)) = r4;
    0x00050316 str r2, [r7, 0x2c]                                |     *((r7 + 0x2c)) = r2;
    0x00050318 ldr r2, [r3, 0x20]                                |     r2 = *((r3 + 0x20));
    0x0005031a ldr r3, [r3, 0x24]                                |     r3 = *((r3 + 0x24));
    0x0005031c str r1, [sp]                                      |     *(sp) = r1;
    0x0005031e movs r1, 1                                        |     r1 = 1;
    0x00050320 rev r2, r2                                        |     r2 = SWAP32 (r2);
    0x00050322 rev r3, r3                                        |     r3 = SWAP32 (r3);
    0x00050324 bl 0x34de0                                        |     fcn_00034de0 (r0, r1, r2, r3, r4, r5);
    0x00050328 cmp r6, r4                                        |     
                                                                 |     if (r6 <= r4) {
    0x0005032a ble.w 0x507e8                                     |         goto label_517;
                                                                 |     }
    0x0005032e ldr.w sl, [pc, 0x8c4]                             |     sl = *(0x00050bf4);
    0x00050332 mov sb, r4                                        |     sb = r4;
    0x00050334 ldr r3, [sp, 0x28]                                |     r3 = *(arg_28h);
    0x00050336 add sl, pc                                        |     sl += pc;
    0x00050338 sub.w r8, r3, 4                                   |     r8 = r3 - 4;
    0x0005033c b 0x50354                                         |     goto label_518;
                                                                 | label_33:
    0x0005033e movs r3, 0                                        |     r3 = 0;
    0x00050340 mov r2, sl                                        |     r2 = sl;
    0x00050342 mov r0, r7                                        |     r0 = r7;
    0x00050344 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x00050348 bl 0x34f98                                        |     fcn_00034f98 (r0, r1, r2, r3, r4, r5, r6);
                                                                 |     do {
    0x0005034c adds r4, 1                                        |         r4++;
    0x0005034e cmp r4, r6                                        |         
                                                                 |         if (r4 == r6) {
    0x00050350 beq.w 0x507e8                                     |             goto label_517;
                                                                 |         }
                                                                 | label_518:
    0x00050354 ldr r3, [r7, 0x10]                                |         r3 = *((r7 + 0x10));
    0x00050356 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00050358 beq.w 0x507e8                                     |             goto label_517;
                                                                 |         }
    0x0005035c ldr r1, [r8, 4]!                                  |         r1 = *((r8 += 4));
    0x00050360 cmp r1, 0                                         |         
    0x00050362 beq 0x5034c                                       |         
                                                                 |     } while (r1 == 0);
    0x00050364 ldrb r3, [r5, 0x11]                               |     r3 = *((r5 + 0x11));
    0x00050366 cmp r3, 0                                         |     
    0x00050368 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x0005036a cmpne r1, 1                                       |         __asm ("cmpne r1, 1");
                                                                 |         goto label_519;
                                                                 |     }
                                                                 |     if (r3 <= 0) {
                                                                 | label_519:
    0x0005036c ble 0x5033e                                       |         goto label_33;
                                                                 |     }
    0x0005036e movs r3, 0                                        |     r3 = 0;
    0x00050370 movs r2, 1                                        |     r2 = 1;
    0x00050372 mov r0, r7                                        |     r0 = r7;
    0x00050374 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x00050378 bl 0x34d20                                        |     fcn_00034d20 (r0, r1, r2, r3, r4, r5, r6);
    0x0005037c ldr.w r1, [r8]                                    |     r1 = *(r8);
    0x00050380 b 0x5033e                                         |     goto label_33;
    0x00050382 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050384 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x00050386 ldr r1, [r3, 0x10]                                |     r1 = *((r3 + 0x10));
    0x00050388 ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0005038c add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x00050390 mov r2, r1                                        |     r2 = r1;
    0x00050392 ldr r0, [r3, 0xc]                                 |     r0 = *((r3 + 0xc));
    0x00050394 adds r0, 0x18                                     |     r0 += 0x18;
                                                                 |     if (r1 == 0) {
    0x00050396 cbz r1, 0x503b0                                   |         goto label_520;
                                                                 |     }
    0x00050398 ldrb r3, [r1]                                     |     r3 = *(r1);
    0x0005039a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005039c beq.w 0x5314a                                     |         goto label_521;
                                                                 |     }
    0x000503a0 mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x000503a2 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x000503a6 cmp r2, 0                                         |         
    0x000503a8 bne 0x503a2                                       |         
                                                                 |     } while (r2 != 0);
                                                                 | label_195:
    0x000503aa subs r3, r3, r1                                   |     r3 -= r1;
    0x000503ac bic r2, r3, 0xc0000000                            |     r2 = BIT_MASK (r3, 0xc0000000);
                                                                 | label_520:
    0x000503b0 movs r3, 0                                        |     r3 = 0;
    0x000503b2 bl 0x128cc                                        |     r0 = fcn_000128cc (r0, r1, r2, r3, r4, r5);
    0x000503b6 mov r1, r0                                        |     r1 = r0;
    0x000503b8 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000503ba beq.w 0x50774                                     |         goto label_522;
                                                                 |     }
    0x000503be ldr r2, [r0, 0xc]                                 |     r2 = *((r0 + 0xc));
    0x000503c0 ldr r3, [r2, 8]                                   |     r3 = *((r2 + 8));
    0x000503c2 cmp r0, r3                                        |     
                                                                 |     if (r0 == r3) {
    0x000503c4 beq.w 0x514e4                                     |         goto label_523;
                                                                 |     }
                                                                 |     do {
    0x000503c8 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x000503ca beq.w 0x5076e                                     |             goto label_75;
                                                                 |         }
    0x000503ce ldr r2, [r3, 0x14]                                |         r2 = *((r3 + 0x14));
    0x000503d0 cmp r1, r2                                        |         
                                                                 |         if (r1 == r2) {
    0x000503d2 beq.w 0x5076a                                     |             goto label_524;
                                                                 |         }
    0x000503d6 mov r3, r2                                        |         r3 = r2;
    0x000503d8 b 0x503c8                                         |         
                                                                 |     } while (1);
    0x000503da ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x000503dc ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x000503de ldr r1, [r3, 0x10]                                |     r1 = *((r3 + 0x10));
    0x000503e0 ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x000503e4 add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x000503e8 mov r2, r1                                        |     r2 = r1;
    0x000503ea ldr r0, [r3, 0xc]                                 |     r0 = *((r3 + 0xc));
    0x000503ec adds r0, 0x28                                     |     r0 += 0x28;
                                                                 |     if (r1 == 0) {
    0x000503ee cbz r1, 0x50408                                   |         goto label_525;
                                                                 |     }
    0x000503f0 ldrb r3, [r1]                                     |     r3 = *(r1);
    0x000503f2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000503f4 beq.w 0x53144                                     |         goto label_526;
                                                                 |     }
    0x000503f8 mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x000503fa ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x000503fe cmp r2, 0                                         |         
    0x00050400 bne 0x503fa                                       |         
                                                                 |     } while (r2 != 0);
                                                                 | label_194:
    0x00050402 subs r3, r3, r1                                   |     r3 -= r1;
    0x00050404 bic r2, r3, 0xc0000000                            |     r2 = BIT_MASK (r3, 0xc0000000);
                                                                 | label_525:
    0x00050408 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005040a adds r3, 1                                        |     r3++;
    0x0005040c str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0005040e movs r3, 0                                        |     r3 = 0;
    0x00050410 bl 0x128cc                                        |     r0 = fcn_000128cc (r0, r1, r2, r3, r4, r5);
    0x00050414 mov r4, r0                                        |     r4 = r0;
    0x00050416 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00050418 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0005041c ldrd r3, r0, [r0, 0x14]                           |     __asm ("ldrd r3, r0, [r0, 0x14]");
    0x00050420 cmp r3, r0                                        |     
                                                                 |     if (r3 == r0) {
    0x00050422 beq.w 0x515a8                                     |         goto label_527;
                                                                 |     }
                                                                 | label_82:
    0x00050426 mov r1, r4                                        |     r1 = r4;
    0x00050428 mov r0, fp                                        |     r0 = fp;
    0x0005042a bl 0x1379c                                        |     fcn_0001379c (r0, r1);
    0x0005042e ldr.w r3, [fp, 0x18]                              |     r3 = *(arg_18h);
    0x00050432 orr r3, r3, 2                                     |     r3 |= 2;
    0x00050436 str.w r3, [fp, 0x18]                              |     __asm ("str.w r3, [arg_18h]");
    0x0005043a b.w 0x4d26a                                       |     goto label_2;
    0x0005043e ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050440 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x00050442 ldr r1, [r3, 0x10]                                |     r1 = *((r3 + 0x10));
    0x00050444 ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x00050448 add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x0005044c mov r2, r1                                        |     r2 = r1;
    0x0005044e ldr r0, [r3, 0xc]                                 |     r0 = *((r3 + 0xc));
    0x00050450 adds r0, 8                                        |     r0 += 8;
                                                                 |     if (r1 == 0) {
    0x00050452 cbz r1, 0x5046c                                   |         goto label_528;
                                                                 |     }
    0x00050454 ldrb r3, [r1]                                     |     r3 = *(r1);
    0x00050456 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00050458 beq.w 0x5313e                                     |         goto label_529;
                                                                 |     }
    0x0005045c mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x0005045e ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x00050462 cmp r2, 0                                         |         
    0x00050464 bne 0x5045e                                       |         
                                                                 |     } while (r2 != 0);
                                                                 | label_193:
    0x00050466 subs r3, r3, r1                                   |     r3 -= r1;
    0x00050468 bic r2, r3, 0xc0000000                            |     r2 = BIT_MASK (r3, 0xc0000000);
                                                                 | label_528:
    0x0005046c movs r3, 0                                        |     r3 = 0;
    0x0005046e bl 0x128cc                                        |     r0 = fcn_000128cc (r0, r1, r2, r3, r4, r5);
    0x00050472 mov r1, r0                                        |     r1 = r0;
                                                                 |     if (r0 != 0) {
    0x00050474 cbz r0, 0x50486                                   |         
    0x00050476 ldr.w r3, [fp, 0x200]                             |         r3 = *(arg_200h);
    0x0005047a cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0005047c beq.w 0x51da2                                     |             goto label_530;
                                                                 |         }
                                                                 | label_105:
    0x00050480 mov r0, fp                                        |         r0 = fp;
    0x00050482 bl 0x12af8                                        |         fcn_00012af8 (r0, r1);
                                                                 |     }
                                                                 | label_106:
    0x00050486 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00050488 adds r3, 1                                        |     r3++;
    0x0005048a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0005048c ldr.w r3, [fp, 0x18]                              |     r3 = *(arg_18h);
    0x00050490 orr r3, r3, 2                                     |     r3 |= 2;
    0x00050494 str.w r3, [fp, 0x18]                              |     __asm ("str.w r3, [arg_18h]");
    0x00050498 b.w 0x4d26a                                       |     goto label_2;
    0x0005049c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005049e movs r4, 0                                        |     r4 = 0;
    0x000504a0 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x000504a2 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000504a4 adds r3, 1                                        |     r3++;
    0x000504a6 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000504a8 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x000504aa ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x000504ac ldr.w r3, [r3, r2, lsl 2]                         |     offset_43 = r2 << 2;
                                                                 |     r3 = *((r3 + offset_43));
    0x000504b0 movs r2, 1                                        |     r2 = 1;
    0x000504b2 ldr r5, [r3]                                      |     r5 = *(r3);
    0x000504b4 strb r4, [r3, 0x1a]                               |     *((r3 + 0x1a)) = r4;
    0x000504b6 str r4, [r3, 0x44]                                |     *((r3 + 0x44)) = r4;
    0x000504b8 strb r2, [r3, 0x19]                               |     *((r3 + 0x19)) = r2;
    0x000504ba cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x000504bc beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x000504c0 ldr r0, [r5, 0x40]                                |     r0 = *((r5 + 0x40));
    0x000504c2 blx 0x6050                                        |     fcn_00006050 ();
    0x000504c6 str r4, [r5, 0x40]                                |     *((r5 + 0x40)) = r4;
    0x000504c8 strb.w r4, [r5, 0x51]                             |     *((r5 + 0x51)) = r4;
    0x000504cc b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_495:
    0x000504d0 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x000504d2 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x000504d4 ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x000504d8 add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x000504dc ldr r5, [r3, 4]                                   |     r5 = *((r3 + 4));
    0x000504de cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x000504e0 beq.w 0x5106e                                     |         goto label_531;
                                                                 |     }
    0x000504e4 mov r0, r5                                        |     r0 = r5;
    0x000504e6 bl 0x30bcc                                        |     r0 = fcn_00030bcc (r0, r1);
    0x000504ea cmp r0, 5                                         |     
                                                                 |     if (r0 == 5) {
    0x000504ec beq.w 0x53f32                                     |         goto label_532;
                                                                 |     }
    0x000504f0 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000504f2 bne.w 0x53f2a                                     |         goto label_533;
                                                                 |     }
    0x000504f6 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x000504f8 ldr r6, [r3, 8]                                   |     r6 = *((r3 + 8));
                                                                 |     if (r6 != 0) {
    0x000504fa cbz r6, 0x5050a                                   |         
    0x000504fc ldr r3, [sp, 0x24]                                |         r3 = *((sp + 0x24));
    0x000504fe ldrsb.w r3, [r3, 0x58]                            |         r3 = *((r3 + 0x58));
    0x00050502 cmp r3, 0                                         |         
                                                                 |         if (r3 < 0) {
    0x00050504 blt.w 0x51530                                     |             goto label_534;
                                                                 |         }
                                                                 | label_80:
    0x00050508 mov r6, r0                                        |         r6 = r0;
                                                                 |     }
                                                                 | label_81:
    0x0005050a add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0005050c mov r0, r5                                        |     r0 = r5;
    0x0005050e mov r2, r7                                        |     r2 = r7;
    0x00050510 movs r1, 1                                        |     r1 = 1;
    0x00050512 bl 0x11954                                        |     fcn_00011954 (r0, r1, r2);
    0x00050516 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050518 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0005051a ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0005051e add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x00050522 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00050524 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00050526 b.w 0x51076                                       |     goto label_535;
                                                                 | label_327:
    0x0005052a ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005052c mov.w sb, 4                                       |     sb = 4;
    0x00050530 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x00050534 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00050536 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
                                                                 | label_39:
    0x00050538 str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x0005053c b.w 0x4d746                                       |     goto label_34;
                                                                 | label_398:
    0x00050540 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00050542 adds r3, 1                                        |     r3++;
    0x00050544 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
                                                                 | label_399:
    0x00050546 movs r3, 0                                        |     r3 = 0;
    0x00050548 strb r3, [r7, 0x19]                               |     *((r7 + 0x19)) = r3;
    0x0005054a cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0005054c beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x00050550 b.w 0x4d740                                       |     goto label_7;
                                                                 | label_428:
    0x00050554 mov r0, r5                                        |     r0 = r5;
    0x00050556 bl 0x328ac                                        |     r0 = fcn_000328ac (r0, r1);
    0x0005055a mov r6, r0                                        |     r6 = r0;
                                                                 | label_427:
    0x0005055c ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005055e adds r3, 1                                        |     r3++;
    0x00050560 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00050562 movs r3, 0                                        |     r3 = 0;
    0x00050564 str r3, [r4, 0x44]                                |     *((r4 + 0x44)) = r3;
    0x00050566 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00050568 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0005056c b.w 0x4d740                                       |     goto label_7;
                                                                 | label_460:
    0x00050570 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00050572 beq.w 0x52c0a                                     |         goto label_536;
                                                                 |     }
    0x00050576 ldr r5, [r4, 8]                                   |     r5 = *((r4 + 8));
    0x00050578 ldr r7, [r5]                                      |     r7 = *(r5);
    0x0005057a ldr r6, [r7, 0x38]                                |     r6 = *((r7 + 0x38));
                                                                 |     if (r6 == 0) {
    0x0005057c cbz r6, 0x505a0                                   |         goto label_144;
                                                                 |     }
    0x0005057e cmp r0, 0                                         |     
                                                                 |     if (r0 <= 0) {
    0x00050580 ble.w 0x52538                                     |         goto label_537;
                                                                 |     }
    0x00050584 ldr.w r2, [fp, 0x140]                             |     r2 = *(arg_140h);
    0x00050588 movs r3, 0                                        |     r3 = 0;
    0x0005058a subs r2, 4                                        |     r2 -= 4;
    0x0005058c b 0x50596                                         |     
                                                                 |     while (r4 != r1) {
    0x0005058e adds r3, 1                                        |         r3++;
    0x00050590 cmp r0, r3                                        |         
                                                                 |         if (r0 == r3) {
    0x00050592 beq.w 0x52538                                     |             goto label_537;
                                                                 |         }
    0x00050596 ldr r1, [r2, 4]!                                  |         r1 = *((r2 += 4));
    0x0005059a cmp r4, r1                                        |         
    0x0005059c bne 0x5058e                                       |         
                                                                 |     }
    0x0005059e movs r6, 0                                        |     r6 = 0;
                                                                 | label_144:
    0x000505a0 ldr r7, [sp, 0x24]                                |     r7 = *((sp + 0x24));
    0x000505a2 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000505a4 ldr r4, [r7]                                      |     r4 = *(r7);
    0x000505a6 adds r3, 1                                        |     r3++;
    0x000505a8 ldr r1, [r7, 0x2c]                                |     r1 = *((r7 + 0x2c));
    0x000505aa str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000505ac mov r0, r4                                        |     r0 = r4;
    0x000505ae bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x000505b2 ldr r1, [r5, 8]                                   |     r1 = *((r5 + 8));
    0x000505b4 mov r0, r4                                        |     r0 = r4;
    0x000505b6 bl 0xd418                                         |     fcn_0000d418 (r0, r1);
    0x000505ba str r0, [r7, 0x2c]                                |     *((r7 + 0x2c)) = r0;
    0x000505bc ldr r0, [r5, 8]                                   |     r0 = *((r5 + 8));
    0x000505be blx 0x6050                                        |     fcn_00006050 ();
    0x000505c2 movs r3, 0                                        |     r3 = 0;
    0x000505c4 str r3, [r5, 8]                                   |     *((r5 + 8)) = r3;
    0x000505c6 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x000505c8 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x000505cc b.w 0x4d740                                       |     goto label_7;
                                                                 | label_185:
    0x000505d0 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000505d2 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x000505d4 adds r3, 1                                        |     r3++;
    0x000505d6 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000505d8 ldrb.w r3, [r2, 0x58]                             |     r3 = *((r2 + 0x58));
    0x000505dc bfc r3, 2, 2                                      |     value_44 = BIT_MASK (2, );
                                                                 |     value_44 = ~value_44;
                                                                 |     r3 &= value_44;
    0x000505e0 strb.w r3, [r2, 0x58]                             |     *((r2 + 0x58)) = r3;
    0x000505e4 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_390:
    0x000505e8 mov r0, sb                                        |     r0 = sb;
    0x000505ea bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x000505ee b.w 0x4e7b4                                       |     goto label_35;
                                                                 | label_381:
    0x000505f2 mov r0, r2                                        |     r0 = r2;
    0x000505f4 movs r2, 0                                        |     r2 = 0;
    0x000505f6 mov r1, r2                                        |     r1 = r2;
                                                                 |     do {
    0x000505f8 lsrs r0, r0, 7                                    |         r0 >>= 7;
    0x000505fa adds r1, 1                                        |         r1++;
    0x000505fc cmp r1, 8                                         |         
    0x000505fe orr.w r0, r0, r2, lsl 25                          |         r0 |= (r2 << 25);
    0x00050602 lsr.w r2, r2, 7                                   |         r2 >>= 7;
    0x00050606 orr.w ip, r0, r2                                  |         
    0x0005060a ite gt                                            |         
                                                                 |         if (r1 <= 8) {
    0x0005060c movgt r3, 0                                       |             r3 = 0;
                                                                 |         }
                                                                 |         if (r1 > 8) {
    0x0005060e movle r3, 1                                       |             r3 = 1;
                                                                 |         }
    0x00050610 cmp.w ip, 0                                       |         
    0x00050614 it eq                                             |         
                                                                 |         if (ip != 0) {
    0x00050616 moveq r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x00050618 cmp r3, 0                                         |         
    0x0005061a bne 0x505f8                                       |         
                                                                 |     } while (r3 != 0);
    0x0005061c b.w 0x4e4e8                                       |     goto label_14;
                                                                 | label_333:
    0x00050620 ldr.w r1, [fp, 0x124]                             |     r1 = *(arg_124h);
    0x00050624 mov r0, r2                                        |     r0 = r2;
    0x00050626 adds r5, r1, r2                                   |     r5 = r1 + r2;
    0x00050628 bl 0x5debc                                        |     fcn_0005debc (r0, r1, r2);
    0x0005062c ldr.w r0, [fp, 0x120]                             |     r0 = *(arg_120h);
    0x00050630 subs r3, r5, r1                                   |     r3 = r5 - r1;
    0x00050632 str r3, [sp, 0x74]                                |     *(arg_74h) = r3;
    0x00050634 blx r4                                            |     r0 = uint32_t (*r4)(uint32_t, uint32_t) (r0, r3);
    0x00050636 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00050638 beq.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x0005063c b.w 0x51190                                       |     goto label_538;
                                                                 | label_380:
    0x00050640 mov r0, sb                                        |     r0 = sb;
    0x00050642 str r1, [sp, 0x2c]                                |     *(arg_2ch) = r1;
    0x00050644 str r2, [sp, 0x20]                                |     *(arg_20h) = r2;
    0x00050646 bl 0x173c0                                        |     fcn_000173c0 (r0);
    0x0005064a ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0005064c ldr r1, [sp, 0x2c]                                |     r1 = *(arg_2ch);
    0x0005064e b.w 0x4e4d8                                       |     goto label_36;
                                                                 | label_332:
    0x00050652 movs r3, 1                                        |     r3 = 1;
    0x00050654 strb r3, [r4, 0x19]                               |     *((r4 + 0x19)) = r3;
    0x00050656 b.w 0x4db86                                       |     goto label_37;
                                                                 | label_417:
    0x0005065a ldrd r3, r6, [sp, 0x1c]                           |     __asm ("ldrd r3, r6, [arg_1ch]");
    0x0005065e adds r3, 1                                        |     r3++;
    0x00050660 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00050662 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00050664 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x00050668 b.w 0x4d740                                       |     goto label_7;
                                                                 | label_382:
    0x0005066c cmp r6, 0x7e                                      |     
    0x0005066e mov r5, r7                                        |     r5 = r7;
    0x00050670 str.w sl, [sp, 0x2c]                              |     __asm ("str.w sl, [arg_2ch]");
    0x00050674 mov r7, fp                                        |     r7 = fp;
    0x00050676 ldr.w fp, [sp, 0x34]                              |     fp = *(arg_34h);
                                                                 |     if (r6 > 0x7e) {
    0x0005067a bgt.w 0x523a4                                     |         goto label_539;
                                                                 |     }
                                                                 | label_138:
    0x0005067e adds r6, 1                                        |     r6++;
    0x00050680 asr.w sb, r6, 0x1f                                |     sb = r6 >> 0x1f;
                                                                 | label_137:
    0x00050684 ldr.w r2, [fp, 0x58]                              |     r2 = *(arg_58h);
    0x00050688 adds r1, r5, r6                                   |     r1 = r5 + r6;
    0x0005068a adc.w r7, r7, sb                                  |     __asm ("adc.w r7, r7, sb");
    0x0005068e str r1, [sp, 0x34]                                |     *(arg_34h) = r1;
    0x00050690 cmp r2, r1                                        |     
    0x00050692 asr.w r3, r2, 0x1f                                |     r3 = r2 >> 0x1f;
    0x00050696 sbcs r3, r7                                       |     __asm ("sbcs r3, r7");
                                                                 |     if (r2 < r1) {
    0x00050698 blt.w 0x4f592                                     |         goto label_30;
                                                                 |     }
    0x0005069c ldr r0, [sp, 0x38]                                |     r0 = *(arg_38h);
    0x0005069e movs r2, 0                                        |     r2 = 0;
    0x000506a0 bl 0x172d4                                        |     r0 = fcn_000172d4 (r0, r1, r2);
    0x000506a4 mov r3, r0                                        |     r3 = r0;
    0x000506a6 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000506a8 bne.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x000506ac ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x000506ae cmp r6, 0x7f                                      |     
    0x000506b0 ldr.w sb, [r2, 4]                                 |     sb = *((r2 + 4));
                                                                 |     if (r6 > 0x7f) {
    0x000506b4 bgt.w 0x51ee4                                     |         goto label_540;
                                                                 |     }
    0x000506b8 movs r5, 1                                        |     r5 = 1;
    0x000506ba strb.w r6, [sb]                                   |     *(sb) = r6;
                                                                 | label_117:
    0x000506be ldr.w r3, [pc, 0x538]                             |     r3 = *(0x00050bf8);
    0x000506c2 mov.w sl, 0xc000                                  |     sl = 0xc000;
    0x000506c6 str.w fp, [sp, 0x3c]                              |     __asm ("str.w fp, [arg_3ch]");
    0x000506ca movt sl, 0xffff                                   |     sl = (sl & 0xFFFF) | 0xffff0000;
    0x000506ce ldr.w fp, [sp, 0x28]                              |     fp = *(arg_28h);
    0x000506d0 add sp, 0xa0                                      |     
    0x000506d2 add r3, pc                                        |     r3 += pc;
    0x000506d4 str r3, [sp, 0x20]                                |     *(arg_20h) = r3;
    0x000506d6 b 0x506e2                                         |     
                                                                 |     while (r3 > 6) {
    0x000506d8 cmp r2, 0xb                                       |         
                                                                 |         if (r2 > 0xb) {
    0x000506da bhi 0x5074a                                       |             goto label_541;
                                                                 |         }
                                                                 | label_38:
    0x000506dc adds r4, 0x28                                     |         r4 += 0x28;
    0x000506de cmp fp, r4                                        |         
                                                                 |         if (fp <= r4) {
    0x000506e0 blo 0x5078a                                       |             goto label_542;
                                                                 |         }
    0x000506e2 mov r1, r8                                        |         r1 = r8;
    0x000506e4 mov r0, r4                                        |         r0 = r4;
    0x000506e6 bl 0x7cfc                                         |         r0 = fcn_00007cfc (r0, r1);
    0x000506ea mov r2, r0                                        |         r2 = r0;
    0x000506ec add.w r7, sb, r6                                  |         r7 = sb + r6;
    0x000506f0 cmp r2, 0x7f                                      |         
    0x000506f2 add.w r0, sb, r5                                  |         r0 = sb + r5;
                                                                 |         if (r2 > 0x7f) {
    0x000506f6 bhi 0x5073a                                       |             goto label_543;
                                                                 |         }
    0x000506f8 subs r3, r2, 1                                    |         r3 = r2 - 1;
    0x000506fa strb.w r2, [sb, r5]                               |         *((sb + r5)) = r2;
    0x000506fe cmp r3, 6                                         |         
    0x00050700 add.w r5, r5, 1                                   |         r5++;
    0x00050704 bhi 0x506d8                                       |         
                                                                 |     }
    0x00050706 cmp r2, 7                                         |     
                                                                 |     if (r2 == 7) {
    0x00050708 beq.w 0x51be0                                     |         goto label_544;
                                                                 |     }
    0x0005070c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005070e add r2, r3                                        |     r2 += r3;
    0x00050710 ldrd r3, r1, [r4, 0x10]                           |     __asm ("ldrd r3, r1, [r4, 0x10]");
    0x00050714 ldrb.w r0, [r2, 0xa6c]                            |     r0 = *((r2 + 0xa6c));
    0x00050718 strd r3, r1, [sp, 0xd8]                           |     __asm ("strd r3, r1, [sp, 0xd8]");
    0x0005071c subs r2, r0, 1                                    |     r2 = r0 - 1;
                                                                 |     if (r0 == 0) {
    0x0005071e cbz r0, 0x50736                                   |         goto label_545;
                                                                 |     }
                                                                 | label_99:
    0x00050720 adds r2, 1                                        |     r2++;
    0x00050722 add r2, r7                                        |     r2 += r7;
                                                                 |     do {
    0x00050724 strb r3, [r2, -0x1]!                              |         *((r2 -= 0x1)) = r3;
    0x00050728 lsrs r3, r3, 8                                    |         r3 >>= 8;
    0x0005072a cmp r7, r2                                        |         
    0x0005072c orr.w r3, r3, r1, lsl 24                          |         r3 |= (r1 << 24);
    0x00050730 lsr.w r1, r1, 8                                   |         r1 >>= 8;
    0x00050734 bne 0x50724                                       |         
                                                                 |     } while (r7 != r2);
                                                                 | label_545:
    0x00050736 add r6, r0                                        |     r6 += r0;
    0x00050738 b 0x506dc                                         |     goto label_38;
                                                                 | label_543:
    0x0005073a tst.w r2, sl                                      |     
                                                                 |     if ((r2 & sl) == 0) {
    0x0005073e beq 0x50758                                       |         goto label_546;
                                                                 |     }
    0x00050740 movs r3, 0                                        |     r3 = 0;
    0x00050742 bl 0x9cd4                                         |     r0 = fcn_00009cd4 (r0, r1, r2);
    0x00050746 uxtb r3, r0                                       |     r3 = (int8_t) r0;
                                                                 |     do {
    0x00050748 add r5, r3                                        |         r5 += r3;
                                                                 | label_541:
    0x0005074a ldr r2, [r4, 0x18]                                |         r2 = *((r4 + 0x18));
    0x0005074c mov r0, r7                                        |         r0 = r7;
    0x0005074e ldr r1, [r4, 4]                                   |         r1 = *((r4 + 4));
    0x00050750 add r6, r2                                        |         r6 += r2;
    0x00050752 blx 0x6214                                        |         fcn_00006214 ();
    0x00050756 b 0x506dc                                         |         goto label_38;
                                                                 | label_546:
    0x00050758 lsrs r3, r2, 7                                    |         r3 = r2 >> 7;
    0x0005075a and r2, r2, 0x7f                                  |         r2 &= 0x7f;
    0x0005075e strb r2, [r0, 1]                                  |         *((r0 + 1)) = r2;
    0x00050760 orn r3, r3, 0x7f                                  |         r3 |= 0x7f;
                                                                 |         r3 = ~r3;
    0x00050764 strb r3, [r0]                                     |         *(r0) = r3;
    0x00050766 movs r3, 2                                        |         r3 = 2;
    0x00050768 b 0x50748                                         |         
                                                                 |     } while (1);
                                                                 | label_524:
    0x0005076a ldr r2, [r1, 0x14]                                |     r2 = *((r1 + 0x14));
    0x0005076c str r2, [r3, 0x14]                                |     *((r3 + 0x14)) = r2;
                                                                 | label_75:
    0x0005076e mov r0, fp                                        |     r0 = fp;
    0x00050770 bl 0x12f1c                                        |     fcn_00012f1c (r0, r1);
                                                                 | label_522:
    0x00050774 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00050776 adds r3, 1                                        |     r3++;
    0x00050778 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0005077a ldr.w r3, [fp, 0x18]                              |     r3 = *(arg_18h);
    0x0005077e orr r3, r3, 2                                     |     r3 |= 2;
    0x00050782 str.w r3, [fp, 0x18]                              |     __asm ("str.w r3, [arg_18h]");
    0x00050786 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_542:
    0x0005078a ldrd r2, fp, [sp, 0x38]                           |     __asm ("ldrd r2, fp, [arg_38h]");
    0x0005078e ldr r3, [sp, 0x34]                                |     r3 = *(arg_34h);
    0x00050790 str r3, [r2, 0x18]                                |     *((r2 + 0x18)) = r3;
    0x00050792 movs r3, 0x10                                     |     r3 = 0x10;
    0x00050794 strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x00050796 movs r3, 0                                        |     r3 = 0;
    0x00050798 str r3, [r2, 0x20]                                |     *((r2 + 0x20)) = r3;
    0x0005079a ldr r3, [sp, 0x2c]                                |     r3 = *(arg_2ch);
                                                                 |     if (r3 != 0) {
    0x0005079c cbz r3, 0x507a6                                   |         
    0x0005079e str r3, [r2, 0x10]                                |         *((r2 + 0x10)) = r3;
    0x000507a0 movw r3, 0x4010                                   |         r3 = 0x4010;
    0x000507a4 strh r3, [r2, 0x1c]                               |         *((r2 + 0x1c)) = r3;
                                                                 |     }
    0x000507a6 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000507a8 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x000507aa adds r3, 1                                        |     r3++;
    0x000507ac str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000507ae movs r3, 1                                        |     r3 = 1;
    0x000507b0 strb r3, [r2, 0x1e]                               |     *((r2 + 0x1e)) = r3;
    0x000507b2 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_393:
    0x000507b6 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x000507b8 add.w r8, r8, r8, lsl 2                           |     r8 += (r8 << 2);
    0x000507bc add.w r3, r3, r8, lsl 3                           |     r3 += (r8 << 3);
    0x000507c0 str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x000507c2 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_396:
    0x000507c6 movs r3, 1                                        |     r3 = 1;
    0x000507c8 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x000507ca cmp r1, r3                                        |     
    0x000507cc strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
                                                                 |     if (r1 <= r3) {
    0x000507ce ble.w 0x527b8                                     |         goto label_547;
                                                                 |     }
    0x000507d2 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000507d4 mov.w sb, 6                                       |     sb = 6;
    0x000507d8 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x000507da add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x000507de movs r3, 2                                        |     r3 = 2;
    0x000507e0 ldr r0, [r2, 0x2c]                                |     r0 = *((r2 + 0x2c));
    0x000507e2 strb.w r3, [r2, 0x56]                             |     *((r2 + 0x56)) = r3;
    0x000507e6 b 0x50538                                         |     goto label_39;
                                                                 | label_517:
    0x000507e8 ldr r3, [r7, 0xc]                                 |     r3 = *((r7 + 0xc));
    0x000507ea cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000507ec beq 0x508ee                                       |         goto label_548;
                                                                 |     }
    0x000507ee ldr.w r3, [pc, 0x40c]                             |     r3 = *(0x00050bfc);
    0x000507f2 movw sb, 0xcccd                                   |     
    0x000507f6 mov.w sl, 1                                       |     sl = 1;
    0x000507fa str.w fp, [sp, 0x50]                              |     __asm ("str.w fp, [arg_50h]");
    0x000507fe movt sb, 0xcccc                                   |     sb = 0xcccccccd;
    0x00050802 mov.w r6, -1                                      |     r6 = -1;
    0x00050806 add r3, pc                                        |     r3 += pc;
    0x00050808 mov fp, sl                                        |     
    0x0005080a str r3, [sp, 0x3c]                                |     *(arg_3ch) = r3;
    0x0005080c ldr r3, [pc, 0x3f0]                               |     
    0x0005080e add r3, pc                                        |     r3 = 0xa1412;
    0x00050810 str r3, [sp, 0x48]                                |     *(arg_48h) = r3;
    0x00050812 b 0x50858                                         |     
                                                                 |     while (r1 != r2) {
                                                                 | label_41:
    0x00050814 cmp.w fp, 1                                       |         
                                                                 |         if (fp < 1) {
    0x00050818 bls 0x508e6                                       |             goto label_549;
                                                                 |         }
    0x0005081a ldr r2, [r5, 0x24]                                |         r2 = *((r5 + 0x24));
    0x0005081c mov r0, r6                                        |         r0 = r6;
    0x0005081e umull r2, r4, sb, r2                              |         r2:r4 = sb * r2;
    0x00050820 movs r4, 2                                        |         r4 = 2;
    0x00050822 lsrs r4, r4, 2                                    |         r4 >>= 2;
    0x00050824 adds r4, 1                                        |         r4++;
    0x00050826 mov r1, r4                                        |         r1 = r4;
    0x00050828 bl 0x5dc60                                        |         fcn_0005dc60 (r0, r1, r2);
    0x0005082c ldr r2, [pc, 0x3d4]                               |         
    0x0005082e mul r4, r0, r4                                    |         r4 = r0 * r4;
    0x00050832 ldr r1, [r5, 0x20]                                |         r1 = *((r5 + 0x20));
    0x00050834 add r2, pc                                        |         r2 = 0xa143c;
    0x00050836 ldr.w r0, [r2, 0x110]                             |         r0 = *(0xa154c);
    0x00050838 lsls r0, r2, 4                                    |         r0 = r2 << 4;
    0x0005083a bl 0x5dc60                                        |         fcn_0005dc60 (r0, r1, r2);
    0x0005083e adds r2, r4, 2                                    |         r2 = r4 + 2;
    0x00050840 adds r1, r0, 1                                    |         r1 = r0 + 1;
    0x00050842 cmp r2, r1                                        |         
    0x00050844 it eq                                             |         
                                                                 |         if (r2 != r1) {
    0x00050846 addeq r2, r4, 3                                   |             r2 = r4 + 3;
                                                                 |         }
                                                                 | label_42:
    0x00050848 cmp fp, r2                                        |         
                                                                 |         if (fp == r2) {
    0x0005084a beq 0x508d0                                       |             goto label_550;
                                                                 |         }
                                                                 | label_40:
    0x0005084c ldr r2, [r7, 0xc]                                 |         r2 = *((r7 + 0xc));
    0x0005084e add.w fp, fp, 1                                   |         
    0x00050852 adds r6, 1                                        |         r6++;
    0x00050854 cmp fp, r2                                        |         
                                                                 |         if (fp > r2) {
    0x00050856 bhi 0x508ea                                       |             goto label_551;
                                                                 |         }
    0x00050858 ldr r2, [r7, 0x10]                                |         r2 = *((r7 + 0x10));
    0x0005085a cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x0005085c beq 0x508ea                                       |             goto label_551;
                                                                 |         }
    0x0005085e ldr r2, [r7, 8]                                   |         r2 = *((r7 + 8));
    0x00050860 lsr.w r8, fp, 3                                   |         r8 = fp >> 3;
    0x00050864 and r1, fp, 7                                     |         r1 = fp & 7;
    0x00050868 movs r4, 1                                        |         r4 = 1;
    0x0005086a ldrb.w r2, [r2, r8]                               |         r2 = *((r2 + r8));
    0x0005086e lsls r4, r1                                       |         r4 <<= r1;
    0x00050870 ands.w r1, r2, r4                                 |         r1 = r2 & r4;
    0x00050874 bne 0x50814                                       |         
                                                                 |     }
    0x00050876 cmp.w fp, 1                                       |     
                                                                 |     if (fp >= 1) {
    0x0005087a bls 0x508ae                                       |         
    0x0005087c ldr r2, [r5, 0x24]                                |         r2 = *((r5 + 0x24));
    0x0005087e mov r0, r6                                        |         r0 = r6;
    0x00050880 umull r2, r1, sb, r2                              |         r2:r1 = sb * r2;
    0x00050884 lsrs r1, r1, 2                                    |         r1 >>= 2;
    0x00050886 add.w sl, r1, 1                                   |         sl = r1 + 1;
    0x0005088a mov r1, sl                                        |         r1 = sl;
    0x0005088c bl 0x5dc60                                        |         fcn_0005dc60 (r0, r1, r2);
    0x00050890 ldr r3, [sp, 0x48]                                |         r3 = *(arg_48h);
    0x00050892 mul sl, sl, r0                                    |         sl *= r0;
    0x00050896 ldr r1, [r5, 0x20]                                |         r1 = *((r5 + 0x20));
    0x00050898 ldr.w r0, [r3, 0x110]                             |         r0 = *((r3 + 0x110));
    0x0005089c bl 0x5dc60                                        |         fcn_0005dc60 (r0, r1, r2);
    0x000508a0 add.w r1, sl, 2                                   |         r1 = sl + 2;
    0x000508a4 adds r0, 1                                        |         r0++;
    0x000508a6 cmp r1, r0                                        |         
    0x000508a8 it eq                                             |         
                                                                 |         if (r1 == r0) {
    0x000508aa addeq r1, sl, 3                                   |             r1 = sl + 3;
                                                                 |             goto label_552;
                                                                 |         }
                                                                 |     }
                                                                 | label_552:
    0x000508ae cmp fp, r1                                        |     
                                                                 |     if (fp != r1) {
    0x000508b0 bne 0x508b8                                       |         goto label_553;
                                                                 |     }
    0x000508b2 ldrb r2, [r5, 0x11]                               |     r2 = *((r5 + 0x11));
    0x000508b4 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000508b6 bne 0x5084c                                       |         goto label_40;
                                                                 |     }
                                                                 | label_553:
    0x000508b8 ldr r2, [sp, 0x3c]                                |     r2 = *(arg_3ch);
    0x000508ba mov r3, fp                                        |     r3 = fp;
    0x000508bc movs r1, 0                                        |     r1 = 0;
    0x000508be mov r0, r7                                        |     r0 = r7;
    0x000508c0 bl 0x34c14                                        |     fcn_00034c14 (r0, r1, r2);
    0x000508c4 ldr r2, [r7, 8]                                   |     r2 = *((r7 + 8));
    0x000508c6 ldrb.w r2, [r2, r8]                               |     r2 = *((r2 + r8));
    0x000508ca tst r2, r4                                        |     
                                                                 |     if ((r2 & r4) == 0) {
    0x000508cc beq 0x5084c                                       |         goto label_40;
                                                                 |     }
    0x000508ce b 0x50814                                         |     goto label_41;
                                                                 | label_550:
    0x000508d0 ldrb r2, [r5, 0x11]                               |     r2 = *((r5 + 0x11));
    0x000508d2 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000508d4 beq 0x5084c                                       |         goto label_40;
                                                                 |     }
    0x000508d6 ldr r2, [pc, 0x330]                               |     
    0x000508d8 mov r3, fp                                        |     r3 = fp;
    0x000508da movs r1, 0                                        |     r1 = 0;
    0x000508dc mov r0, r7                                        |     r0 = r7;
    0x000508de add r2, pc                                        |     r2 = 0xa14ec;
    0x000508e0 bl 0x34c14                                        |     fcn_00034c14 (r0, r1, r2);
    0x000508e4 b 0x5084c                                         |     goto label_40;
                                                                 | label_549:
    0x000508e6 movs r2, 0                                        |     r2 = 0;
    0x000508e8 b 0x50848                                         |     goto label_42;
                                                                 | label_551:
    0x000508ea ldr.w fp, [sp, 0x50]                              |     fp = *(arg_50h);
                                                                 | label_548:
    0x000508ee ldr r3, [r5]                                      |     r3 = *(r5);
    0x000508f0 ldr r2, [sp, 0x4c]                                |     r2 = *(arg_4ch);
    0x000508f2 ldr.w r3, [r3, 0xdc]                              |     r3 = *((r3 + 0xdc));
    0x000508f6 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x000508f8 cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x000508fa bne.w 0x51214                                     |         goto label_554;
                                                                 |     }
    0x000508fc strh r3, [r1, 0x24]                               |     *((r1 + 0x24)) = r3;
                                                                 | label_65:
    0x000508fe ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x00050900 ldrb r3, [r2, 9]                                  |     r3 = *((r2 + 9));
                                                                 |     if (r3 != 0) {
    0x00050902 cbz r3, 0x50918                                   |         
    0x00050904 ldr r4, [r2, 0xc]                                 |         r4 = *((r2 + 0xc));
    0x00050906 subs r4, 1                                        |         r4--;
    0x00050908 str r4, [r2, 0xc]                                 |         *((r2 + 0xc)) = r4;
                                                                 |         if (r4 != 0) {
    0x0005090a cbnz r4, 0x50918                                  |             goto label_555;
                                                                 |         }
    0x0005090c ldr r3, [r2, 4]                                   |         r3 = *((r2 + 4));
    0x0005090e mov r5, r2                                        |         r5 = r2;
    0x00050910 ldr r0, [r3, 0x38]                                |         r0 = *((r3 + 0x38));
    0x00050912 blx 0x63dc                                        |         fcn_000063dc ();
    0x00050916 strb r4, [r5, 0xa]                                |         *((r5 + 0xa)) = r4;
                                                                 |     }
                                                                 | label_555:
    0x00050918 ldr r0, [r7, 8]                                   |     r0 = *((r7 + 8));
    0x0005091a blx 0x6050                                        |     fcn_00006050 ();
    0x0005091e ldr r3, [r7, 0x18]                                |     r3 = *((r7 + 0x18));
    0x00050920 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00050922 bne.w 0x531d4                                     |         goto label_556;
                                                                 |     }
    0x00050926 ldr r6, [r7, 0x14]                                |     r6 = *((r7 + 0x14));
    0x00050928 asrs r5, r6, 0x1f                                 |     r5 = r6 >> 0x1f;
    0x0005092a cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0005092c beq.w 0x5132a                                     |         goto label_557;
                                                                 |     }
    0x00050930 add r0, sp, 0xf4                                  |     r0 += arg_f4h;
    0x00050932 bl 0x171d4                                        |     fcn_000171d4 (r0);
    0x00050936 ldr r1, [sp, 0x28]                                |     r1 = *(arg_28h);
    0x00050938 mov r4, r0                                        |     r4 = r0;
    0x0005093a mov r0, fp                                        |     r0 = fp;
    0x0005093c bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00050940 ldr r2, [sp, 0x34]                                |     r2 = *(arg_34h);
    0x00050942 ldr r0, [sp, 0x2c]                                |     r0 = *(arg_2ch);
    0x00050944 ldr r3, [r2, 0x10]                                |     r3 = *((r2 + 0x10));
    0x00050946 subs r3, r3, r6                                   |     r3 -= r6;
    0x00050948 str r3, [r2, 0x10]                                |     *((r2 + 0x10)) = r3;
    0x0005094a ldr r3, [r2, 0x14]                                |     r3 = *((r2 + 0x14));
    0x0005094c sbc.w r3, r3, r5                                  |     __asm ("sbc.w r3, r3, r5");
    0x00050950 str r3, [r2, 0x14]                                |     *((r2 + 0x14)) = r3;
    0x00050952 bl 0xfdb8                                         |     fcn_0000fdb8 (r0);
    0x00050956 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00050958 beq.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x0005095c ldr r2, [sp, 0x78]                                |     r2 = *(arg_78h);
    0x0005095e mov r1, r4                                        |     r1 = r4;
    0x00050960 ldr r3, [pc, 0x2a8]                               |     r3 = *(0x50c0c);
    0x00050962 ldr r0, [sp, 0x2c]                                |     r0 = *(arg_2ch);
    0x00050964 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x00050966 mov.w r2, -1                                      |     r2 = -1;
    0x0005096a str r3, [sp]                                      |     *(sp) = r3;
    0x0005096c movs r3, 1                                        |     r3 = 1;
    0x0005096e bl 0x17978                                        |     fcn_00017978 (r0, r1, r2, r3, r4);
                                                                 | label_69:
    0x00050972 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00050974 ldr r0, [sp, 0x2c]                                |     r0 = *(arg_2ch);
    0x00050976 adds r3, 1                                        |     r3++;
    0x00050978 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0005097a ldrh r3, [r0, 0x1c]                               |     r3 = *((r0 + 0x1c));
    0x0005097c lsls r4, r3, 0x1e                                 |     r4 = r3 << 0x1e;
                                                                 |     if (r4 >= r3) {
    0x0005097e bpl.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x00050982 ldrb r3, [r0, 0x1e]                               |     r3 = *((r0 + 0x1e));
    0x00050984 ldr r1, [sp, 0x70]                                |     r1 = *(arg_70h);
    0x00050986 cmp r3, r1                                        |     
                                                                 |     if (r3 == r1) {
    0x00050988 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0005098c bl 0x17460                                        |     fcn_00017460 (r0, r1);
    0x00050990 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_506:
    0x00050994 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050996 add.w r8, sp, 0xe0                                |     r8 += arg_e0h;
    0x00050998 lsrs r0, r4, 3                                    |     r0 = r4 >> 3;
    0x0005099a mov ip, r8                                        |     
    0x0005099c add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0005099e ldr.w sl, [r3, 0x10]                              |     sl = *((r3 + 0x10));
    0x000509a2 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000509a4 str r3, [sp, 0x114]                               |     *(arg_114h) = r3;
    0x000509a6 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x000509a8 str r3, [sp, 0x110]                               |     *(arg_110h) = r3;
    0x000509aa ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x000509ac str.w sl, [r7]                                    |     __asm ("str.w sl, [r7]");
    0x000509b0 mov r4, r3                                        |     r4 = r3;
    0x000509b2 add.w lr, r3, 0x20                                |     lr = r3 + 0x20;
                                                                 |     do {
    0x000509b6 ldr r0, [r4]                                      |         r0 = *(r4);
    0x000509b8 adds r4, 0x10                                     |         r4 += 0x10;
    0x000509ba ldr r1, [r4, -0xc]                                |         r1 = *((r4 - 0xc));
    0x000509be mov r6, ip                                        |         r6 = ip;
    0x000509c0 ldr r2, [r4, -0x8]                                |         r2 = *((r4 - 0x8));
    0x000509c4 ldr r3, [r4, -0x4]                                |         r3 = *((r4 - 0x4));
    0x000509c8 cmp r4, lr                                        |         
    0x000509ca stm r6!, {r0, r1, r2, r3}                         |         *(r6!) = r0;
                                                                 |         *((r6! + 4)) = r1;
                                                                 |         *((r6! + 8)) = r2;
                                                                 |         *((r6! + 12)) = r3;
    0x000509cc mov ip, r6                                        |         
    0x000509ce bne 0x509b6                                       |         
                                                                 |     } while (r4 != lr);
    0x000509d0 movs r3, 1                                        |     r3 = 1;
    0x000509d2 movs r2, 0                                        |     r2 = 0;
    0x000509d4 ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x000509d6 ldr r0, [r4]                                      |     r0 = *(r4);
    0x000509d8 stm.w ip!, {r0, r1}                               |     *(ip!) = r0;
                                                                 |     *((ip! + 4)) = r1;
    0x000509dc ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x000509de strh r3, [r1, 0x1c]                               |     *((r1 + 0x1c)) = r3;
    0x000509e0 ldrh r3, [r7, 0x24]                               |     r3 = *((r7 + 0x24));
    0x000509e2 strd r2, r2, [r1, 0x20]                           |     __asm ("strd r2, r2, [r1, 0x20]");
    0x000509e6 strb.w r2, [r7, 0x45]                             |     *((r7 + 0x45)) = r2;
    0x000509ea bic r3, r3, 0x4180                                |     r3 = BIT_MASK (r3, 0x4180);
    0x000509ee bic r3, r3, 0x7f                                  |     r3 = BIT_MASK (r3, 0x7f);
    0x000509f2 orr r3, r3, 1                                     |     r3 |= 1;
    0x000509f6 strh r3, [r7, 0x24]                               |     *((r7 + 0x24)) = r3;
    0x000509f8 ldrh.w r3, [sl, 2]                                |     r3 = *((sl + 2));
    0x000509fc lsls r2, r3, 0x1a                                 |     r2 = r3 << 0x1a;
                                                                 |     if (r2 < r3) {
    0x000509fe bmi.w 0x51208                                     |         goto label_558;
                                                                 |     }
                                                                 | label_64:
    0x00050a02 ldr r3, [sp, 0x68]                                |     r3 = *(arg_68h);
    0x00050a04 mov r2, sb                                        |     r2 = sb;
    0x00050a06 mov r1, r5                                        |     r1 = r5;
    0x00050a08 mov r0, r7                                        |     r0 = r7;
    0x00050a0a str.w r3, [fp, 0x20]                              |     __asm ("str.w r3, [arg_20h]");
    0x00050a0e ldr r3, [sp, 0x6c]                                |     r3 = *(arg_6ch);
    0x00050a10 str.w r3, [fp, 0x24]                              |     __asm ("str.w r3, [fp, 0x24]");
    0x00050a14 ldr.w r3, [sl, 0xc]                               |     r3 = *((sl + 0xc));
    0x00050a18 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00050a1a ldr.w r2, [fp, 0x20]                              |     r2 = *(arg_20h);
    0x00050a1e ldrb.w r3, [fp, 0x40]                             |     r3 = *(arg_40h);
    0x00050a22 str r2, [sp, 0x68]                                |     *(arg_68h) = r2;
    0x00050a24 ldr.w r2, [fp, 0x24]                              |     r2 = *((fp + 0x24));
    0x00050a28 str r2, [sp, 0x6c]                                |     *(arg_6ch) = r2;
    0x00050a2a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00050a2c bne.w 0x54030                                     |         goto label_559;
                                                                 |     }
    0x00050a30 ldrb.w r6, [r7, 0x45]                             |     r6 = *((r7 + 0x45));
                                                                 |     if (r6 == 0) {
    0x00050a34 cbz r6, 0x50a94                                   |         goto label_560;
                                                                 |     }
    0x00050a36 ldr r6, [r7, 0x40]                                |     r6 = *((r7 + 0x40));
    0x00050a38 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00050a3a bne.w 0x52e22                                     |         goto label_561;
                                                                 |     }
                                                                 | label_184:
    0x00050a3e ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050a40 ldr r5, [r3, 4]                                   |     r5 = *((r3 + 4));
    0x00050a42 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00050a44 ldr.w r4, [r3, 0xcc]                              |     r4 = *((r3 + 0xcc));
    0x00050a48 add.w sb, r3, 0xcc                                |     sb = r3 + 0xcc;
                                                                 |     if (r4 == 0) {
    0x00050a4c cbz r4, 0x50a94                                   |         goto label_560;
                                                                 |     }
    0x00050a4e mov r3, r8                                        |     r3 = r8;
    0x00050a50 ldr.w sl, [sp, 0x1c]                              |     sl = *(arg_1ch);
    0x00050a54 mov r8, r7                                        |     r8 = r7;
    0x00050a56 mov r7, r6                                        |     r7 = r6;
    0x00050a58 mov r6, r5                                        |     r6 = r5;
    0x00050a5a mov r5, sb                                        |     r5 = sb;
    0x00050a5c mov sb, r3                                        |     sb = r3;
    0x00050a5e b 0x50a70                                         |     
                                                                 |     while (sl >= 0) {
    0x00050a60 ldr r2, [r4]                                      |         r2 = *(r4);
    0x00050a62 cmp r2, sl                                        |         
                                                                 |         if (r2 == sl) {
    0x00050a64 beq.w 0x51b9a                                     |             goto label_562;
                                                                 |         }
                                                                 | label_98:
    0x00050a68 add.w r5, r4, 0x10                                |         r5 = r4 + 0x10;
                                                                 | label_43:
    0x00050a6c ldr r4, [r5]                                      |         r4 = *(r5);
                                                                 |         if (r4 == 0) {
    0x00050a6e cbz r4, 0x50a8e                                   |             goto label_563;
                                                                 |         }
    0x00050a70 cmp.w sl, 0                                       |         
    0x00050a74 bge 0x50a60                                       |         
                                                                 |     }
                                                                 | label_97:
    0x00050a76 ldr r2, [r4, 0xc]                                 |     r2 = *((r4 + 0xc));
                                                                 |     if (r2 != 0) {
    0x00050a78 cbz r2, 0x50a7e                                   |         
    0x00050a7a ldr r0, [r4, 8]                                   |         r0 = *((r4 + 8));
    0x00050a7c blx r2                                            |         uint32_t (*r2)(uint32_t) (r0);
                                                                 |     }
    0x00050a7e ldr r2, [r4, 0x10]                                |     r2 = *((r4 + 0x10));
    0x00050a80 mov r1, r4                                        |     r1 = r4;
    0x00050a82 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00050a84 str r2, [r5]                                      |     *(r5) = r2;
    0x00050a86 ldr r0, [r3]                                      |     r0 = *(r3);
    0x00050a88 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00050a8c b 0x50a6c                                         |     goto label_43;
                                                                 | label_563:
    0x00050a8e mov r6, r7                                        |     r6 = r7;
    0x00050a90 mov r7, r8                                        |     r7 = r8;
    0x00050a92 mov r8, sb                                        |     r8 = sb;
                                                                 | label_560:
    0x00050a94 ldrh r3, [r7, 0x24]                               |     r3 = *((r7 + 0x24));
    0x00050a96 lsls r1, r3, 0x1e                                 |     r1 = r3 << 0x1e;
                                                                 |     if (r1 < r3) {
    0x00050a98 bpl 0x50aac                                       |         
    0x00050a9a ldrb.w r3, [r7, 0x26]                             |         r3 = *((r7 + 0x26));
    0x00050a9e ldr r2, [sp, 0x70]                                |         r2 = *(arg_70h);
    0x00050aa0 cmp r3, r2                                        |         
                                                                 |         if (r3 == r2) {
    0x00050aa2 beq 0x50aac                                       |             goto label_564;
                                                                 |         }
    0x00050aa4 mov r1, r2                                        |         r1 = r2;
    0x00050aa6 mov r0, r8                                        |         r0 = r8;
    0x00050aa8 bl 0x17460                                        |         fcn_00017460 (r0, r1);
                                                                 |     }
                                                                 | label_564:
    0x00050aac ldr r5, [sp, 0x38]                                |     r5 = *(arg_38h);
    0x00050aae add r7, sp, 0x100                                 |     r7 += arg_100h;
                                                                 |     do {
    0x00050ab0 mov r4, r8                                        |         r4 = r8;
    0x00050ab2 adds r5, 0x10                                     |         r5 += 0x10;
    0x00050ab4 ldm r4!, {r0, r1, r2, r3}                         |         r0 = *(r4!);
                                                                 |         r1 = *((r4! + 4));
                                                                 |         r2 = *((r4! + 8));
                                                                 |         r3 = *((r4! + 12));
    0x00050ab6 add.w r8, r8, 0x10                                |         r8 += 0x10;
    0x00050aba cmp r4, r7                                        |         
    0x00050abc str r0, [r5, -0x10]                               |         *((r5 - 0x10)) = r0;
    0x00050ac0 str r1, [r5, -0xc]                                |         *((r5 - 0xc)) = r1;
    0x00050ac4 str r2, [r5, -0x8]                                |         *((r5 - 0x8)) = r2;
    0x00050ac8 str r3, [r5, -0x4]                                |         *((r5 - 0x4)) = r3;
    0x00050acc bne 0x50ab0                                       |         
                                                                 |     } while (r4 != r7);
    0x00050ace ldm.w r8!, {r0, r1}                               |     r0 = *(r8!);
                                                                 |     r1 = *((r8! + 4));
    0x00050ad2 str r0, [r5]                                      |     *(r5) = r0;
    0x00050ad4 str r1, [r5, 4]                                   |     *((r5 + 4)) = r1;
    0x00050ad6 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x00050ad8 ldrh r2, [r3, 0x1c]                               |     r2 = *((r3 + 0x1c));
    0x00050ada tst.w r2, 0x12                                    |     
                                                                 |     if ((r2 & 0x12) == 0) {
    0x00050ade beq.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x00050ae2 lsls r2, r2, 0x11                                 |     r2 <<= 0x11;
    0x00050ae4 mov r1, r3                                        |     r1 = r3;
    0x00050ae6 it mi                                             |     
                                                                 |     if (r2 >= r2) {
    0x00050ae8 ldrmi r2, [r1, 0x10]                              |         r2 = *((r1 + 0x10));
                                                                 |     }
    0x00050aea ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x00050aec it mi                                             |     
                                                                 |     if (r2 >= r2) {
    0x00050aee addmi r3, r3, r2                                  |         r3 += r2;
                                                                 |     }
    0x00050af0 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x00050af2 ldr r2, [r2]                                      |     r2 = *(r2);
    0x00050af4 ldr r2, [r2, 0x58]                                |     r2 = *((r2 + 0x58));
    0x00050af6 cmp r2, r3                                        |     
                                                                 |     if (r2 >= r3) {
    0x00050af8 bge.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x00050afc b.w 0x4f592                                       |     goto label_30;
                                                                 | label_389:
    0x00050b00 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00050b02 str r4, [sp, 0x38]                                |     *(arg_38h) = r4;
    0x00050b04 adds r3, 1                                        |     r3++;
    0x00050b06 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00050b08 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_337:
    0x00050b0e add.w r8, r3, 1                                   |     r8 = r3 + 1;
                                                                 | label_418:
    0x00050b12 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00050b14 mov.w sb, 7                                       |     sb = 7;
    0x00050b18 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
    0x00050b1a b 0x50538                                         |     goto label_39;
                                                                 | label_311:
    0x00050b1c add r3, sp, 0xa8                                  |     r3 += arg_a8h;
    0x00050b1e mov r0, r5                                        |     r0 = r5;
    0x00050b20 mov r6, r3                                        |     r6 = r3;
    0x00050b22 mov r1, r3                                        |     r1 = r3;
    0x00050b24 bl 0xb5cc                                         |     fcn_0000b5cc (r0, r1);
    0x00050b28 ldr r6, [r6]                                      |     r6 = *(r6);
    0x00050b2a mvn r2, 0x80000000                                |     r2 = ~0x80000000;
    0x00050b2e ldr r3, [sp, 0xac]                                |     r3 = *(arg_ach);
    0x00050b30 subs r1, r6, 1                                    |     r1 = r6 - 1;
    0x00050b32 adc r3, r3, -1                                    |     __asm ("adc r3, r3, -1");
    0x00050b36 cmp r1, r2                                        |     
    0x00050b38 sbcs r3, r3, 0                                    |     __asm ("sbcs r3, r3, 0");
                                                                 |     if (r1 >= r2) {
    0x00050b3c bhs.w 0x4d702                                     |         goto label_44;
                                                                 |     }
    0x00050b40 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00050b42 movs r2, 0x28                                     |     r2 = 0x28;
    0x00050b44 movs r1, 0                                        |     r1 = 0;
    0x00050b46 mov r0, r7                                        |     r0 = r7;
    0x00050b48 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00050b4c mov r2, r6                                        |     r2 = r6;
    0x00050b4e mov r3, r8                                        |     r3 = r8;
    0x00050b50 mov r0, r5                                        |     r0 = r5;
    0x00050b52 movs r1, 0                                        |     r1 = 0;
    0x00050b54 str r7, [sp]                                      |     *(sp) = r7;
    0x00050b56 bl 0x2f238                                        |     r0 = fcn_0002f238 (r0, r1, r2, r3, r4);
    0x00050b5a mov r6, r0                                        |     r6 = r0;
    0x00050b5c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00050b5e beq.w 0x5128c                                     |         goto label_565;
                                                                 |     }
    0x00050b62 movs r4, 0                                        |     r4 = 0;
    0x00050b64 b.w 0x4d722                                       |     goto label_45;
                                                                 | label_481:
    0x00050b68 mov r2, r7                                        |     r2 = r7;
    0x00050b6a mov r1, r5                                        |     r1 = r5;
    0x00050b6c mov r0, r6                                        |     r0 = r6;
    0x00050b6e movs r3, 0                                        |     r3 = 0;
    0x00050b70 bl 0x30258                                        |     r0 = fcn_00030258 (r0, r1, r2, r3, r4, r5, r6);
    0x00050b74 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00050b76 bne.w 0x4fd0e                                     |         goto label_46;
                                                                 |     }
    0x00050b7a ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00050b7c adds r3, 1                                        |     r3++;
    0x00050b7e str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00050b80 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_477:
    0x00050b84 ldr r5, [sp, 0x38]                                |     r5 = *(arg_38h);
    0x00050b86 movs r3, 0                                        |     r3 = 0;
    0x00050b88 str r3, [sp]                                      |     *(sp) = r3;
    0x00050b8a mov.w r2, -1                                      |     r2 = -1;
    0x00050b8e movs r3, 1                                        |     r3 = 1;
    0x00050b90 mov r0, r5                                        |     r0 = r5;
    0x00050b92 bl 0x17978                                        |     r0 = fcn_00017978 (r0, r1, r2, r3, r4);
    0x00050b96 cmp r0, 0x12                                      |     
    0x00050b98 mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r0 == 0x12) {
    0x00050b9a beq.w 0x4f592                                     |         goto label_30;
                                                                 |     }
    0x00050b9e ldrh r3, [r5, 0x1c]                               |     r3 = *((r5 + 0x1c));
    0x00050ba0 mov r0, r5                                        |     r0 = r5;
    0x00050ba2 lsls r7, r3, 0x1e                                 |     r7 = r3 << 0x1e;
                                                                 |     if (r7 >= r3) {
    0x00050ba4 bpl 0x50bbc                                       |         goto label_566;
                                                                 |     }
    0x00050ba6 ldrb r2, [r5, 0x1e]                               |     r2 = *((r5 + 0x1e));
    0x00050ba8 cmp r2, r4                                        |     
                                                                 |     if (r2 == r4) {
    0x00050baa beq 0x50bbc                                       |         goto label_566;
                                                                 |     }
    0x00050bac mov r1, r4                                        |     r1 = r4;
    0x00050bae bl 0x17460                                        |     r0 = fcn_00017460 (r0, r1);
    0x00050bb2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00050bb4 bne.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x00050bb8 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x00050bba ldrh r3, [r3, 0x1c]                               |     r3 = *((r3 + 0x1c));
                                                                 | label_566:
    0x00050bbc ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x00050bbe orr r3, r3, 0x800                                 |     r3 |= 0x800;
    0x00050bc2 strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x00050bc4 movs r3, 0                                        |     r3 = 0;
    0x00050bc6 str r3, [r2, 0x24]                                |     *((r2 + 0x24)) = r3;
    0x00050bc8 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050bca ldrsb.w r3, [r3, 1]                               |     r3 = *((r3 + 1));
    0x00050bce adds r3, 1                                        |     r3++;
                                                                 |     if (r3 == 1) {
    0x00050bd0 beq.w 0x5317c                                     |         goto label_567;
                                                                 |     }
                                                                 | label_199:
    0x00050bd4 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x00050bd6 movs r3, 0xff                                     |     r3 = 0xff;
    0x00050bd8 ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x00050bda strb r3, [r2, 1]                                  |     *((r2 + 1)) = r3;
    0x00050bdc ldr r3, [r1, 4]                                   |     r3 = *((r1 + 4));
    0x00050bde str r3, [r2, 0x10]                                |     *((r2 + 0x10)) = r3;
    0x00050be0 ldr r3, [r1, 0x18]                                |     r3 = *((r1 + 0x18));
    0x00050be2 str r3, [r2, 4]                                   |     *((r2 + 4)) = r3;
    0x00050be4 b.w 0x4fc24                                       |     goto label_47;
                                                                 | label_352:
    0x00050c10 ldr r6, [r4, 0x10]                                |     r6 = *((r4 + 0x10));
    0x00050c12 ldrh r5, [r6, 0x1a]                               |     r5 = *((r6 + 0x1a));
    0x00050c14 ldr r0, [r6, 8]                                   |     r0 = *((r6 + 8));
    0x00050c16 lsls r3, r5, 0x1e                                 |     r3 = r5 << 0x1e;
                                                                 |     if (r3 >= r5) {
    0x00050c18 bpl.w 0x51520                                     |         goto label_568;
                                                                 |     }
                                                                 | label_79:
    0x00050c1c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00050c1e beq.w 0x4dfbe                                     |         goto label_48;
                                                                 |     }
    0x00050c22 ldr r3, [r0, 8]                                   |     r3 = *((r0 + 8));
    0x00050c24 ldrd r8, sb, [r0]                                 |     __asm ("ldrd r8, sb, [r0]");
    0x00050c28 str r3, [r6, 8]                                   |     *((r6 + 8)) = r3;
    0x00050c2a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00050c2c beq.w 0x53b6a                                     |         goto label_569;
                                                                 |     }
                                                                 | label_251:
    0x00050c30 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050c32 movw r2, 0x2460                                   |     r2 = 0x2460;
    0x00050c36 ldr r4, [r3, 0xc]                                 |     r4 = *((r3 + 0xc));
    0x00050c38 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x00050c3a add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x00050c3e add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x00050c42 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x00050c44 tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x00050c46 bne.w 0x53646                                     |         goto label_570;
                                                                 |     }
                                                                 | label_222:
    0x00050c4a ldr r1, [r4, 0x24]                                |     r1 = *((r4 + 0x24));
                                                                 |     if (r1 != 0) {
    0x00050c4c cbz r1, 0x50c58                                   |         
    0x00050c4e ldr r0, [r4]                                      |         r0 = *(r4);
    0x00050c50 bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x00050c54 movs r3, 0                                        |         r3 = 0;
    0x00050c56 str r3, [r4, 0x24]                                |         *((r4 + 0x24)) = r3;
                                                                 |     }
    0x00050c58 movs r6, 0                                        |     r6 = 0;
    0x00050c5a movs r3, 4                                        |     r3 = 4;
    0x00050c5c strd r8, sb, [r4, 0x10]                           |     __asm ("strd r8, sb, [r4, 0x10]");
    0x00050c60 str r6, [r4, 4]                                   |     *((r4 + 4)) = r6;
    0x00050c62 strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x00050c64 b.w 0x4db8a                                       |     goto label_11;
                                                                 | label_508:
    0x00050c68 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050c6a ldr r3, [r3, -0x4]                                |     r3 = *((r3 - 0x4));
    0x00050c6e str r3, [r7, 0x34]                                |     *((r7 + 0x34)) = r3;
    0x00050c70 b.w 0x501be                                       |     goto label_49;
                                                                 | label_470:
    0x00050c74 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x00050c76 mov r0, r5                                        |     r0 = r5;
    0x00050c78 ldr.w r8, [r5, 0x2c]                              |     r8 = *((r5 + 0x2c));
    0x00050c7c ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x00050c7e mov r1, r8                                        |     r1 = r8;
    0x00050c80 ldr r6, [r3, 0x24]                                |     r6 = *((r3 + 0x24));
    0x00050c82 rev r6, r6                                        |     r6 = SWAP32 (r6);
    0x00050c84 mov r2, r6                                        |     r2 = r6;
    0x00050c86 bl 0xc178                                         |     r0 = fcn_0000c178 (r0, r1, r2);
    0x00050c8a cmp r8, r0                                        |     
    0x00050c8c mov r7, r0                                        |     r7 = r0;
                                                                 |     if (r8 <= r0) {
    0x00050c8e blo.w 0x52c5c                                     |         goto label_571;
                                                                 |     }
    0x00050c92 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00050c94 beq.w 0x4faf0                                     |         goto label_50;
                                                                 |     }
    0x00050c98 movs r2, 0                                        |     r2 = 0;
    0x00050c9a ldr r0, [r5, 8]                                   |     r0 = *((r5 + 8));
    0x00050c9c mov r1, r2                                        |     r1 = r2;
    0x00050c9e bl 0x2da04                                        |     r0 = fcn_0002da04 (r0, r1, r2);
    0x00050ca2 mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r0 != 0) {
    0x00050ca4 cbnz r0, 0x50cea                                  |         goto label_572;
                                                                 |     }
    0x00050ca6 ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
                                                                 |     if (r3 == 0) {
    0x00050ca8 cbz r3, 0x50cbc                                   |         goto label_573;
                                                                 |     }
                                                                 |     do {
    0x00050caa ldrb.w r2, [r3, 0x50]                             |         r2 = *((r3 + 0x50));
    0x00050cae bic r2, r2, 4                                     |         r2 = BIT_MASK (r2, 4);
    0x00050cb2 strb.w r2, [r3, 0x50]                             |         *((r3 + 0x50)) = r2;
    0x00050cb6 ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
    0x00050cb8 cmp r3, 0                                         |         
    0x00050cba bne 0x50caa                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_573:
    0x00050cbc mov r2, r8                                        |     r2 = r8;
    0x00050cbe mov r1, r7                                        |     r1 = r7;
    0x00050cc0 movs r3, 0                                        |     r3 = 0;
    0x00050cc2 mov r0, r5                                        |     r0 = r5;
    0x00050cc4 bl 0x32fcc                                        |     r0 = fcn_00032fcc (r0, r1, r2, r3);
    0x00050cc8 mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r0 == 0) {
    0x00050cca cbnz r0, 0x50cea                                  |         
    0x00050ccc ldr r3, [r5, 0xc]                                 |         r3 = *((r5 + 0xc));
    0x00050cce ldr r0, [r3, 0x44]                                |         r0 = *((r3 + 0x44));
    0x00050cd0 bl 0x2bdf4                                        |         fcn_0002bdf4 (r0, r1, r2);
    0x00050cd4 ldr r3, [r5, 0x2c]                                |         r3 = *((r5 + 0x2c));
    0x00050cd6 mov r6, r0                                        |         r6 = r0;
    0x00050cd8 ldr r2, [r5, 0xc]                                 |         r2 = *((r5 + 0xc));
    0x00050cda ldr r2, [r2, 0x38]                                |         r2 = *((r2 + 0x38));
    0x00050cdc lsrs r1, r3, 0x18                                 |         r1 = r3 >> 0x18;
    0x00050cde strb r3, [r2, 0x1f]                               |         *((r2 + 0x1f)) = r3;
    0x00050ce0 strb r1, [r2, 0x1c]                               |         *((r2 + 0x1c)) = r1;
    0x00050ce2 lsrs r1, r3, 0x10                                 |         r1 = r3 >> 0x10;
    0x00050ce4 lsrs r3, r3, 8                                    |         r3 >>= 8;
    0x00050ce6 strb r1, [r2, 0x1d]                               |         *((r2 + 0x1d)) = r1;
    0x00050ce8 strb r3, [r2, 0x1e]                               |         *((r2 + 0x1e)) = r3;
                                                                 |     }
                                                                 | label_572:
    0x00050cea ldrb r3, [r4, 9]                                  |     r3 = *((r4 + 9));
                                                                 |     if (r3 != 0) {
    0x00050cec cbz r3, 0x50cfa                                   |         
    0x00050cee ldr r5, [r4, 0xc]                                 |         r5 = *((r4 + 0xc));
    0x00050cf0 subs r5, 1                                        |         r5--;
    0x00050cf2 str r5, [r4, 0xc]                                 |         *((r4 + 0xc)) = r5;
    0x00050cf4 cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x00050cf6 beq.w 0x5361e                                     |             goto label_574;
                                                                 |         }
                                                                 |     }
                                                                 | label_218:
    0x00050cfa cmp r6, 0x65                                      |     
                                                                 |     if (r6 != 0x65) {
    0x00050cfc bne.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x00050d00 b.w 0x4fb06                                       |     goto label_51;
                                                                 | label_494:
    0x00050d04 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00050d06 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x00050d08 adds r3, 1                                        |     r3++;
    0x00050d0a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00050d0c movs r3, 1                                        |     r3 = 1;
    0x00050d0e strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x00050d10 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_496:
    0x00050d14 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00050d16 bne.w 0x53d92                                     |         goto label_498;
                                                                 |     }
    0x00050d1a ldr.w r2, [pc, 0xc44]                             |     
    0x00050d1e ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00050d20 add r2, pc                                        |     r2 = 0xa2686;
    0x00050d22 add.w r0, r3, 0x2c                                |     r0 = r3 + 0x2c;
                                                                 | label_153:
    0x00050d26 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00050d28 add.w r8, r3, 1                                   |     r8 = r3 + 1;
                                                                 | label_74:
    0x00050d2c mov r1, fp                                        |     r1 = fp;
    0x00050d2e mov.w sb, 1                                       |     sb = 1;
    0x00050d32 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x00050d36 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00050d38 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
    0x00050d3a b.w 0x50538                                       |     goto label_39;
                                                                 |     if (r5 == 0) {
    0x00050d3c cbnz r5, 0x50dbe                                  |         
                                                                 | label_478:
    0x00050d3e mov r0, r2                                        |         r0 = r2;
    0x00050d40 bl 0xfdb8                                         |         fcn_0000fdb8 (r0);
    0x00050d44 b.w 0x4d26a                                       |         goto label_2;
                                                                 | label_467:
    0x00050d48 ldr.w r2, [fp, 0x1f8]                             |         r2 = *(arg_1f8h);
    0x00050d4c adds r2, r2, r3                                   |         r2 += r3;
    0x00050d4e ldr.w r3, [fp, 0x1fc]                             |         r3 = *(arg_1fch);
    0x00050d52 str.w r2, [fp, 0x1f8]                             |         __asm ("str.w r2, [arg_1f8h]");
    0x00050d56 adc.w r3, r1, r3                                  |         __asm ("adc.w r3, r1, r3");
    0x00050d5a str.w r3, [fp, 0x1fc]                             |         __asm ("str.w r3, [arg_1fch]");
    0x00050d5e b.w 0x4d26a                                       |         goto label_2;
                                                                 | label_465:
    0x00050d62 ldr r2, [sp, 0x24]                                |         r2 = *((sp + 0x24));
    0x00050d64 ldrd r3, r2, [r2, 0x90]                           |         __asm ("ldrd r3, r2, [r2, 0x90]");
    0x00050d68 orrs r3, r2                                       |         r3 |= r2;
                                                                 |         if (r3 == r2) {
    0x00050d6a beq.w 0x52866                                     |             goto label_575;
                                                                 |         }
    0x00050d6e ldr r3, [sp, 0x1c]                                |         r3 = *(arg_1ch);
    0x00050d70 adds r3, 1                                        |         r3++;
    0x00050d72 str r3, [sp, 0x1c]                                |         *(arg_1ch) = r3;
    0x00050d74 b.w 0x4d26a                                       |         goto label_2;
                                                                 | label_385:
    0x00050d78 mov r0, r2                                        |         r0 = r2;
    0x00050d7a bl 0xfdb8                                         |         fcn_0000fdb8 (r0);
    0x00050d7e b.w 0x4d26a                                       |         goto label_2;
                                                                 | label_384:
    0x00050d82 ldr r3, [sp, 0x1c]                                |         r3 = *(arg_1ch);
    0x00050d84 adds r3, 1                                        |         r3++;
    0x00050d86 str r3, [sp, 0x1c]                                |         *(arg_1ch) = r3;
    0x00050d88 b.w 0x4d26a                                       |         goto label_2;
                                                                 | label_378:
    0x00050d8c mov r0, r4                                        |         r0 = r4;
    0x00050d8e bl 0x2e878                                        |         r0 = fcn_0002e878 (r0);
    0x00050d92 mov r6, r0                                        |         r6 = r0;
    0x00050d94 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00050d96 bne.w 0x536d4                                     |             goto label_576;
                                                                 |         }
    0x00050d9a mov r5, r0                                        |         r5 = r0;
    0x00050d9c mov r7, r0                                        |         r7 = r0;
    0x00050d9e mov r8, r0                                        |         r8 = r0;
                                                                 | label_54:
    0x00050da0 ldrsh.w r3, [r4, 0x54]                            |         r3 = *((r4 + 0x54));
    0x00050da4 add.w r1, r3, 0x20                                |         r1 = r3 + 0x20;
    0x00050da8 ldr.w r2, [r4, r1, lsl 2]                         |         offset_45 = r1 << 2;
                                                                 |         r2 = *((r4 + offset_45));
    0x00050dac ldrb.w ip, [r2, 3]                                |         ip = *((r2 + 3));
    0x00050db0 ldrh r0, [r2, 0x10]                               |         r0 = *((r2 + 0x10));
    0x00050db2 cmp.w ip, 0                                       |         
                                                                 |         if (ip == 0) {
    0x00050db6 beq.w 0x51b66                                     |             goto label_577;
                                                                 |         }
    0x00050dba adds r0, r0, r5                                   |         r0 += r5;
    0x00050dbc mov r5, r0                                        |         r5 = r0;
                                                                 |     }
    0x00050dbe adc r7, r7, 0                                     |     __asm ("adc r7, r7, 0");
                                                                 | label_53:
    0x00050dc2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00050dc4 beq.w 0x4e458                                     |         goto label_52;
                                                                 |     }
    0x00050dc8 ldr.w r2, [r4, r1, lsl 2]                         |     offset_46 = r1 << 2;
                                                                 |     r2 = *((r4 + offset_46));
                                                                 |     if (r2 != 0) {
    0x00050dcc cbz r2, 0x50dd8                                   |         
    0x00050dce ldr r0, [r2, 0x44]                                |         r0 = *((r2 + 0x44));
    0x00050dd0 bl 0x2bd94                                        |         fcn_0002bd94 (r0);
    0x00050dd4 ldrsh.w r3, [r4, 0x54]                            |         r3 = *((r4 + 0x54));
                                                                 |     }
    0x00050dd8 ldrb.w r2, [r4, 0x50]                             |     r2 = *((r4 + 0x50));
    0x00050ddc subs r3, 1                                        |     r3--;
    0x00050dde sxth r3, r3                                       |     __asm ("sxth r3, r3");
    0x00050de0 strh.w r8, [r4, 0x32]                             |     *((r4 + 0x32)) = r8;
    0x00050de4 bic r2, r2, 6                                     |     r2 = BIT_MASK (r2, 6);
    0x00050de8 add.w r1, r3, 0x20                                |     r1 = r3 + 0x20;
    0x00050dec strb.w r2, [r4, 0x50]                             |     *((r4 + 0x50)) = r2;
    0x00050df0 add.w lr, r4, r3, lsl 1                           |     lr = r4 + (r3 << 1);
    0x00050df4 ldr.w r2, [r4, r1, lsl 2]                         |     offset_47 = r1 << 2;
                                                                 |     r2 = *((r4 + offset_47));
    0x00050df8 strh.w r3, [r4, 0x54]                             |     *((r4 + 0x54)) = r3;
    0x00050dfc ldrh.w ip, [lr, 0x56]                             |     ip = *((lr + 0x56));
    0x00050e00 ldrh r0, [r2, 0x10]                               |     r0 = *((r2 + 0x10));
    0x00050e02 cmp ip, r0                                        |     
                                                                 |     if (ip >= r0) {
    0x00050e04 bhs 0x50dc2                                       |         goto label_53;
                                                                 |     }
    0x00050e06 add.w r3, ip, 1                                   |     r3 = ip + 1;
    0x00050e0a uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x00050e0c strh.w r3, [lr, 0x56]                             |     *((lr + 0x56)) = r3;
                                                                 | label_94:
    0x00050e10 cmp r3, r0                                        |     
    0x00050e12 ldr r1, [r2, 0x38]                                |     r1 = *((r2 + 0x38));
                                                                 |     if (r3 == r0) {
    0x00050e14 beq.w 0x51b88                                     |         goto label_578;
                                                                 |     }
    0x00050e18 ldr.w ip, [r2, 0x40]                              |     ip = *((r2 + 0x40));
    0x00050e1c mov r0, r4                                        |     r0 = r4;
    0x00050e1e ldrh r2, [r2, 0x12]                               |     r2 = *((r2 + 0x12));
    0x00050e20 ldrb.w lr, [ip, r3, lsl 1]                        |     
    0x00050e24 add.w ip, ip, r3, lsl 1                           |     
    0x00050e28 ldrb.w r3, [ip, 1]                                |     r3 = *((ip + 1));
    0x00050e2c orr.w r3, r3, lr, lsl 8                           |     r3 |= (lr << 8);
    0x00050e30 ands r3, r2                                       |     r3 &= r2;
    0x00050e32 ldr r1, [r1, r3]                                  |     r1 = *((r1 + r3));
    0x00050e34 rev r1, r1                                        |     r1 = SWAP32 (r1);
    0x00050e36 bl 0x2e704                                        |     r0 = fcn_0002e704 (r0, r1, r2, r3);
                                                                 | label_96:
    0x00050e3a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00050e3c beq 0x50da0                                       |         goto label_54;
                                                                 |     }
    0x00050e3e movs r5, 0                                        |     r5 = 0;
    0x00050e40 mov r6, r0                                        |     r6 = r0;
    0x00050e42 mov r7, r5                                        |     r7 = r5;
    0x00050e44 b.w 0x4e458                                       |     goto label_52;
                                                                 | label_377:
    0x00050e48 ldr r1, [sp, 0x1c]                                |     r1 = *(arg_1ch);
    0x00050e4a adds r1, 1                                        |     r1++;
    0x00050e4c str r1, [sp, 0x1c]                                |     *(arg_1ch) = r1;
    0x00050e4e movs r1, 1                                        |     r1 = 1;
    0x00050e50 strb r1, [r2, r3]                                 |     *((r2 + r3)) = r1;
    0x00050e52 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_353:
    0x00050e56 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00050e58 adds r3, 1                                        |     r3++;
    0x00050e5a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00050e5c b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_421:
    0x00050e60 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050e62 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x00050e64 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00050e66 adds r2, 1                                        |     r2++;
    0x00050e68 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x00050e6a lsls r3, r3, 0x1f                                 |     r3 <<= 0x1f;
                                                                 |     if (r3 >= r3) {
    0x00050e6c bpl.w 0x4d740                                     |         goto label_7;
                                                                 |     }
                                                                 | label_423:
    0x00050e70 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00050e72 ldr r3, [r2, 0x5c]                                |     r3 = *((r2 + 0x5c));
    0x00050e74 adds r3, 1                                        |     r3++;
    0x00050e76 str r3, [r2, 0x5c]                                |     *((r2 + 0x5c)) = r3;
    0x00050e78 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00050e7a beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x00050e7e b.w 0x4d740                                       |     goto label_7;
                                                                 | label_444:
    0x00050e82 mov r0, r4                                        |     r0 = r4;
    0x00050e84 bl 0xfdb8                                         |     fcn_0000fdb8 (r0);
    0x00050e88 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00050e8a adds r3, 1                                        |     r3++;
    0x00050e8c str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00050e8e b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_430:
    0x00050e92 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00050e94 b.w 0x4f202                                       |     goto label_55;
                                                                 | label_312:
    0x00050e98 tst.w r3, 0xc                                     |     
                                                                 |     if ((r3 & 0xc) == 0) {
    0x00050e9c beq.w 0x52ba6                                     |         goto label_579;
                                                                 |     }
                                                                 | label_163:
    0x00050ea0 mov r0, r6                                        |     r0 = r6;
    0x00050ea2 bl 0xa1d8                                         |     fcn_0000a1d8 (r0);
    0x00050ea6 movs r3, 0                                        |     r3 = 0;
    0x00050ea8 mov r7, r0                                        |     r7 = r0;
    0x00050eaa strb r3, [r4, 0x1a]                               |     *((r4 + 0x1a)) = r3;
    0x00050eac ldrh r3, [r6, 0x1c]                               |     r3 = *((r6 + 0x1c));
    0x00050eae str r1, [sp, 0x28]                                |     *(arg_28h) = r1;
    0x00050eb0 lsls r2, r3, 0x1d                                 |     r2 = r3 << 0x1d;
                                                                 |     if (r2 < r3) {
    0x00050eb2 bmi.w 0x52138                                     |         goto label_205;
                                                                 |     }
    0x00050eb6 lsls r3, r3, 0x1c                                 |     r3 <<= 0x1c;
                                                                 |     if (r3 < r3) {
    0x00050eb8 bmi.w 0x52116                                     |         goto label_580;
                                                                 |     }
    0x00050ebc ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050ebe ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00050ec0 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00050ec2 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_306:
    0x00050ec6 mov r0, r1                                        |     r0 = r1;
    0x00050ec8 bl 0xfdb8                                         |     fcn_0000fdb8 (r0);
    0x00050ecc b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_319:
    0x00050ed0 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00050ed2 mov sb, r0                                        |     sb = r0;
    0x00050ed4 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
    0x00050ed6 b.w 0x50538                                       |     goto label_39;
                                                                 | label_316:
    0x00050eda ldrh.w r3, [sl, 6]                                |     r3 = *((sl + 6));
    0x00050ede add.w sb, sp, 0x12c                               |     sb += arg_12ch;
    0x00050ee0 ldrb r6, [r2, 6]                                  |     r6 = *((r2 + 6));
    0x00050ee2 movs r2, 4                                        |     r2 = 4;
    0x00050ee4 adds r3, 1                                        |     r3++;
    0x00050ee6 add.w r1, r3, r3, lsl 2                           |     r1 = r3 + (r3 << 2);
    0x00050ee8 lsls r3, r0, 6                                    |     r3 = r0 << 6;
    0x00050eea lsls r1, r1, 3                                    |     r1 <<= 3;
    0x00050eec adds r1, 0x18                                     |     r1 += 0x18;
    0x00050eee cmp r1, 0xc3                                      |     
    0x00050ef0 ittt le                                           |     
                                                                 |     if (r1 > 0xc3) {
    0x00050ef2 addle sb, r2                                      |         sb += r2;
                                                                 |     }
                                                                 |     if (r1 > 0xc3) {
    0x00050ef4 movle r0, sl                                      |         r0 = sl;
                                                                 |     }
                                                                 |     if (r1 > 0xc3) {
    0x00050ef6 movle r5, 0                                       |         r5 = 0;
                                                                 |     }
                                                                 |     if (r1 > 0xc3) {
    0x00050ef8 bgt.w 0x52bda                                     |         goto label_581;
                                                                 |     }
                                                                 | label_167:
    0x00050efc strh.w r3, [sb, 4]                                |     *((sb + 4)) = r3;
    0x00050f00 add.w r3, sb, 0x18                                |     r3 = sb + 0x18;
    0x00050f04 str.w r3, [sb, 8]                                 |     __asm ("str.w r3, [sb, 8]");
    0x00050f08 mov r3, sb                                        |     r3 = sb;
    0x00050f0a ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x00050f0c ldr r1, [r6, 0x18]                                |     r1 = *((r6 + 0x18));
    0x00050f0e str.w sl, [sb]                                    |     __asm ("str.w sl, [sb]");
    0x00050f12 bl 0xbf78                                         |     fcn_0000bf78 (r0, r1, r2, r3, r4, r5);
    0x00050f16 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050f18 ldrb.w r8, [r3]                                   |     r8 = *(r3);
                                                                 | label_103:
    0x00050f1c cmp.w r8, 0x41                                    |     
    0x00050f20 mov.w r3, 0                                       |     r3 = 0;
    0x00050f24 strb.w r3, [sb, 6]                                |     *((sb + 6)) = r3;
                                                                 |     if (r8 == 0x41) {
    0x00050f28 beq.w 0x52af4                                     |         goto label_582;
                                                                 |     }
                                                                 | label_161:
    0x00050f2c movs r3, 0                                        |     r3 = 0;
    0x00050f2e add.w sl, sp, 0xb0                                |     sl += arg_b0h;
    0x00050f32 ldr r0, [r4]                                      |     r0 = *(r4);
    0x00050f34 mov r1, sb                                        |     r1 = sb;
    0x00050f36 str r3, [sp]                                      |     *(sp) = r3;
    0x00050f38 movs r2, 0                                        |     r2 = 0;
    0x00050f3a movs r3, 0                                        |     r3 = 0;
    0x00050f3c str.w sl, [sp, 4]                                 |     __asm ("str.w sl, [arg_4h]");
    0x00050f40 bl 0x2e9e8                                        |     fcn_0002e9e8 (r0, r1, r2, r3, r4, r5, r6);
    0x00050f44 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050f46 mov r6, r0                                        |     r6 = r0;
    0x00050f48 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x00050f4a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00050f4c beq.w 0x51268                                     |         goto label_583;
                                                                 |     }
                                                                 | label_67:
    0x00050f50 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00050f52 bne.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x00050f54 add r6, sp, 0xb0                                  |     r6 = sp + 0xb0;
    0x00050f56 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x00050f5a strb r6, [r4, 0x1b]                               |     *((r4 + 0x1b)) = r6;
    0x00050f5c str r6, [r4, 0x44]                                |     *((r4 + 0x44)) = r6;
    0x00050f5e subs r2, r3, 0                                    |     r2 = r3 - 0;
    0x00050f60 str r3, [r4, 0xc]                                 |     *((r4 + 0xc)) = r3;
    0x00050f62 it ne                                             |     
                                                                 |     if (r2 == r3) {
    0x00050f64 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x00050f66 strb r2, [r4, 0x19]                               |     *((r4 + 0x19)) = r2;
    0x00050f68 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x00050f6a ldrb r2, [r2]                                     |     r2 = *(r2);
    0x00050f6c cmp r2, 0x43                                      |     
                                                                 |     if (r2 == 0x43) {
    0x00050f6e beq.w 0x52b28                                     |         goto label_584;
                                                                 |     }
    0x00050f72 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00050f74 bne.w 0x52b1e                                     |         goto label_585;
                                                                 |     }
    0x00050f78 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00050f7a adds r3, 1                                        |     r3++;
    0x00050f7c str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00050f7e b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_339:
    0x00050f82 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00050f84 mov r0, r5                                        |     r0 = r5;
    0x00050f86 mov r1, r7                                        |     r1 = r7;
    0x00050f88 bl 0xb838                                         |     fcn_0000b838 (r0, r1);
    0x00050f8c ldr.w r1, [fp, 0x58]                              |     r1 = *(arg_58h);
    0x00050f90 ldr r3, [sp, 0xd8]                                |     r3 = *(arg_d8h);
    0x00050f92 ldr r0, [sp, 0xdc]                                |     r0 = *(arg_dch);
    0x00050f94 asrs r2, r1, 0x1f                                 |     r2 = r1 >> 0x1f;
    0x00050f96 cmp r1, r3                                        |     
    0x00050f98 sbcs r2, r0                                       |     __asm ("sbcs r2, r0");
                                                                 |     if (r1 < r3) {
    0x00050f9a blt.w 0x4f592                                     |         goto label_30;
                                                                 |     }
    0x00050f9e mov r4, r3                                        |     r4 = r3;
    0x00050fa0 str r3, [sp, 0xb0]                                |     *(arg_b0h) = r3;
    0x00050fa2 b.w 0x4dd64                                       |     goto label_56;
                                                                 | label_299:
    0x00050fa6 lsls r1, r2, 0x18                                 |     r1 = r2 << 0x18;
                                                                 |     if (r1 < r2) {
    0x00050fa8 bmi.w 0x5297e                                     |         goto label_586;
                                                                 |     }
    0x00050fac lsls r0, r2, 0x1b                                 |     r0 = r2 << 0x1b;
                                                                 |     if (r0 >= r2) {
    0x00050fae bpl.w 0x52998                                     |         goto label_587;
                                                                 |     }
    0x00050fb2 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050fb4 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x00050fb6 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00050fb8 adds r2, 1                                        |     r2++;
    0x00050fba str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x00050fbc ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x00050fbe add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x00050fc2 add.w r2, r2, r3, lsl 3                           |     r2 += (r3 << 3);
    0x00050fc6 ldrh r3, [r2, 0x1c]                               |     r3 = *((r2 + 0x1c));
    0x00050fc8 str r2, [sp, 0x38]                                |     *(arg_38h) = r2;
    0x00050fca bic r3, r3, 0x4180                                |     r3 = BIT_MASK (r3, 0x4180);
    0x00050fce bic r3, r3, 0x7f                                  |     r3 = BIT_MASK (r3, 0x7f);
    0x00050fd2 orr r3, r3, 1                                     |     r3 |= 1;
    0x00050fd6 strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x00050fd8 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_411:
    0x00050fdc cmp r5, 5                                         |     
                                                                 |     if (r5 != 5) {
    0x00050fde bne.w 0x4edd8                                     |         goto label_57;
                                                                 |     }
    0x00050fe2 ldr.w r1, [r4, 0xa8]                              |     r1 = *((r4 + 0xa8));
    0x00050fe6 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00050fe8 beq.w 0x51fbe                                     |         goto label_412;
                                                                 |     }
    0x00050fec ldrb r6, [r1]                                     |     r6 = *(r1);
    0x00050fee cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00050ff0 beq.w 0x4edec                                     |         goto label_58;
                                                                 |     }
    0x00050ff4 mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x00050ff6 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x00050ffa cmp r2, 0                                         |         
    0x00050ffc bne 0x50ff6                                       |         
                                                                 |     } while (r2 != 0);
    0x00050ffe subs r3, r3, r1                                   |     r3 -= r1;
    0x00051000 bics r6, r3, 0xc0000000                           |     __asm ("bics r6, r3, aav.0x000000ff");
                                                                 |     if (r3 == r3) {
    0x00051004 beq.w 0x4edec                                     |         goto label_58;
                                                                 |     }
    0x00051008 ldrb r6, [r4, 4]                                  |     r6 = *((r4 + 4));
    0x0005100a ldr r2, [r4, 0x3c]                                |     r2 = *((r4 + 0x3c));
    0x0005100c ldr r2, [r2]                                      |     r2 = *(r2);
                                                                 |     if (r6 != 0) {
    0x0005100e cbnz r6, 0x51020                                  |         goto label_588;
                                                                 |     }
    0x00051010 ldr r1, [r2]                                      |     r1 = *(r2);
    0x00051012 cmp r1, 1                                         |     
                                                                 |     if (r1 <= 1) {
    0x00051014 ble.w 0x4edec                                     |         goto label_58;
                                                                 |     }
    0x00051018 ldr r6, [r2, 0x34]                                |     r6 = *((r2 + 0x34));
    0x0005101a cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0005101c beq.w 0x4edec                                     |         goto label_58;
                                                                 |     }
                                                                 | label_588:
    0x00051020 cmp.w sb, 5                                       |     
                                                                 |     if (sb == 5) {
    0x00051024 beq.w 0x51fbe                                     |         goto label_412;
                                                                 |     }
    0x00051028 ldrb.w r3, [fp, 0x3e]                             |     r3 = *(arg_3eh);
    0x0005102c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005102e bne.w 0x53900                                     |         goto label_589;
                                                                 |     }
    0x00051032 ldr.w r3, [pc, 0x930]                             |     
    0x00051036 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00051038 add r3, pc                                        |     r3 = 0xa29a2;
    0x0005103a add.w r0, r2, 0x2c                                |     r0 = r2 + 0x2c;
                                                                 | label_149:
    0x0005103e ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x00051040 mov r1, fp                                        |     r1 = fp;
    0x00051042 mov.w sb, 1                                       |     sb = 1;
    0x00051046 add.w r8, r2, 1                                   |     r8 = r2 + 1;
    0x0005104a ldr.w r2, [pc, 0x91c]                             |     r2 = *(0x00051968);
    0x0005104e add r2, pc                                        |     r2 += pc;
    0x00051050 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x00051054 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00051056 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
    0x00051058 b.w 0x50538                                       |     goto label_39;
                                                                 | label_434:
    0x0005105c mov r0, r6                                        |     r0 = r6;
    0x0005105e bl 0xd140                                         |     fcn_0000d140 (r0);
    0x00051062 ldr r3, [r6, 4]                                   |     r3 = *((r6 + 4));
    0x00051064 ldr r2, [r3]                                      |     r2 = *(r3);
                                                                 | label_435:
    0x00051066 ldr.w r4, [r2, 0x9c]                              |     r4 = *((r2 + 0x9c));
    0x0005106a b.w 0x4f2d0                                       |     goto label_59;
                                                                 | label_531:
    0x0005106e mov r3, r5                                        |     r3 = r5;
    0x00051070 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00051072 mov r6, r5                                        |     r6 = r5;
    0x00051074 str r5, [sp, 0xd8]                                |     *(arg_d8h) = r5;
                                                                 | label_535:
    0x00051076 ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x00051078 ldrb r2, [r1, 3]                                  |     r2 = *((r1 + 3));
    0x0005107a cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0005107c beq.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x00051080 ldr r4, [r7]                                      |     r4 = *(r7);
    0x00051082 ldr r2, [r1, 0xc]                                 |     r2 = *((r1 + 0xc));
    0x00051084 cmp r2, r4                                        |     
                                                                 |     if (r2 != r4) {
    0x00051086 bne 0x51090                                       |         goto label_590;
                                                                 |     }
    0x00051088 ldr r2, [r1, 0x10]                                |     r2 = *((r1 + 0x10));
    0x0005108a cmp r2, r3                                        |     
                                                                 |     if (r2 == r3) {
    0x0005108c beq.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
                                                                 | label_590:
    0x00051090 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00051092 mov r0, fp                                        |     r0 = fp;
    0x00051094 ldr r1, [r3, 0x2c]                                |     r1 = *((r3 + 0x2c));
    0x00051096 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0005109a ldr.w r3, [pc, 0x8d0]                             |     
    0x0005109e movs r2, 0x61                                     |     r2 = 0x61;
    0x000510a0 add r3, pc                                        |     r3 = 0xa2a12;
    0x000510a2 adds r3, 1                                        |     r3++;
                                                                 |     do {
    0x000510a4 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x000510a6 beq.w 0x51db4                                     |             goto label_591;
                                                                 |         }
    0x000510aa ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x000510ae b 0x510a4                                         |         
                                                                 |     } while (1);
                                                                 | label_379:
    0x000510b0 ldrb r1, [r6]                                     |     r1 = *(r6);
    0x000510b2 mov r5, r4                                        |     r5 = r4;
    0x000510b4 ldr r7, [sp, 0x70]                                |     r7 = *(arg_70h);
                                                                 |     do {
    0x000510b6 mov r0, r5                                        |         r0 = r5;
    0x000510b8 mov r2, r7                                        |         r2 = r7;
    0x000510ba bl 0x25cf0                                        |         fcn_00025cf0 (r0, r1, r2);
    0x000510be ldrb r1, [r6, 1]!                                 |         r1 = *((r6 += 1));
    0x000510c2 adds r5, 0x28                                     |         r5 += 0x28;
    0x000510c4 cmp r1, 0                                         |         
    0x000510c6 bne 0x510b6                                       |         
                                                                 |     } while (r1 != 0);
    0x000510c8 b.w 0x4e4a4                                       |     goto label_60;
                                                                 |     do {
                                                                 | label_440:
    0x000510cc mov r2, r3                                        |         r2 = r3;
    0x000510ce ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x000510d0 cmp r3, 0                                         |         
    0x000510d2 bne 0x510cc                                       |         
                                                                 |     } while (r3 != 0);
    0x000510d4 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x000510d6 add r5, r3                                        |     r5 += r3;
    0x000510d8 b.w 0x4f366                                       |     goto label_61;
                                                                 | label_383:
    0x000510dc ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x000510de ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x000510e0 ldrb.w r6, [fp, 0x44]                             |     r6 = *(arg_44h);
    0x000510e4 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x000510e6 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x000510ea add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x000510ee ldr r1, [r2, 8]                                   |     r1 = *((r2 + 8));
    0x000510f0 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x000510f2 cmp r1, 0                                         |     
    0x000510f4 ldr r2, [r2, 0xc]                                 |     r2 = *((r2 + 0xc));
    0x000510f6 itt gt                                            |     
                                                                 |     if (r1 <= 0) {
    0x000510f8 movgt r0, r2                                      |         r0 = r2;
                                                                 |     }
                                                                 |     if (r1 <= 0) {
    0x000510fa addgt r7, r2, r1, lsl 2                           |         r7 = r2 + (r1 << 2);
                                                                 |     }
                                                                 |     if (r1 <= 0) {
    0x000510fe ble 0x5110c                                       |         goto label_592;
                                                                 |     }
                                                                 |     do {
    0x00051100 str r3, [r0], 4                                   |         *(r0) = r3;
                                                                 |         r0 += 4;
    0x00051104 cmp r7, r0                                        |         
    0x00051106 add.w r3, r3, 0x28                                |         r3 += 0x28;
    0x0005110a bne 0x51100                                       |         
                                                                 |     } while (r7 != r0);
                                                                 | label_592:
    0x0005110c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005110e add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00051110 mov r0, r4                                        |     r0 = r4;
    0x00051112 ldrb r3, [r3, 3]                                  |     r3 = *((r3 + 3));
    0x00051114 strb.w r3, [fp, 0x44]                             |     *(arg_44h) = r3;
    0x00051118 mov r3, r7                                        |     r3 = r7;
    0x0005111a blx r5                                            |     uint32_t (*r5)(uint32_t, uint32_t) (r0, r3);
    0x0005111c ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0005111e strb.w r6, [fp, 0x44]                             |     *(arg_44h) = r6;
    0x00051122 mov r6, r0                                        |     r6 = r0;
    0x00051124 ldr r5, [r3]                                      |     r5 = *(r3);
    0x00051126 ldr r1, [r3, 0x2c]                                |     r1 = *((r3 + 0x2c));
    0x00051128 mov r0, r5                                        |     r0 = r5;
    0x0005112a bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0005112e ldr r1, [r4, 8]                                   |     r1 = *((r4 + 8));
    0x00051130 mov r0, r5                                        |     r0 = r5;
    0x00051132 bl 0xd418                                         |     fcn_0000d418 (r0, r1);
    0x00051136 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00051138 str r0, [r3, 0x2c]                                |     *((r3 + 0x2c)) = r0;
    0x0005113a ldr r0, [r4, 8]                                   |     r0 = *((r4 + 8));
    0x0005113c blx 0x6050                                        |     fcn_00006050 ();
    0x00051140 movs r3, 0                                        |     r3 = 0;
    0x00051142 str r3, [r4, 8]                                   |     *((r4 + 8)) = r3;
    0x00051144 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00051146 bne.w 0x52786                                     |         goto label_593;
                                                                 |     }
    0x0005114a ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005114c ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
                                                                 |     if (r3 != 0) {
    0x0005114e cbz r3, 0x5115c                                   |         
    0x00051150 ldr r3, [r7]                                      |         r3 = *(r7);
    0x00051152 ldr r2, [sp, 0xdc]                                |         r2 = *(arg_dch);
    0x00051154 str r3, [sp, 0x68]                                |         *(arg_68h) = r3;
    0x00051156 str r2, [sp, 0x6c]                                |         *(arg_6ch) = r2;
    0x00051158 strd r3, r2, [fp, 0x20]                           |         __asm ("strd r3, r2, [fp, 0x20]");
                                                                 |     }
                                                                 | label_150:
    0x0005115c ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0005115e ldr r3, [r2, 0x5c]                                |     r3 = *((r2 + 0x5c));
    0x00051160 adds r3, 1                                        |     r3++;
    0x00051162 str r3, [r2, 0x5c]                                |     *((r2 + 0x5c)) = r3;
    0x00051164 b.w 0x4dbae                                       |     goto label_20;
                                                                 | label_369:
    0x00051168 ldr r3, [sp, 0x2c]                                |     r3 = *(arg_2ch);
    0x0005116a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005116c beq.w 0x52c8e                                     |         goto label_594;
                                                                 |     }
    0x00051170 ldrh r3, [r5, 0x1c]                               |     r3 = *((r5 + 0x1c));
    0x00051172 and r3, r3, 0xbe00                                |     r3 &= 0xbe00;
    0x00051176 orr r3, r3, 1                                     |     r3 |= 1;
    0x0005117a strh r3, [r5, 0x1c]                               |     *((r5 + 0x1c)) = r3;
    0x0005117c and r3, r3, 0x1000                                |     r3 &= 0x1000;
    0x00051180 b.w 0x4e414                                       |     goto label_62;
                                                                 | label_363:
    0x00051184 ldr.w r0, [fp, 0x120]                             |     r0 = *(arg_120h);
    0x00051188 blx r2                                            |     r0 = uint32_t (*r2)(uint32_t) (r0);
    0x0005118a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005118c beq.w 0x4e222                                     |         goto label_63;
                                                                 |     }
                                                                 | label_538:
    0x00051190 movs r0, 9                                        |     r0 = 9;
    0x00051192 b.w 0x4d44a                                       |     goto label_1;
                                                                 | label_364:
    0x00051196 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051198 mov.w sb, 1                                       |     sb = 1;
    0x0005119c ldr r4, [sp, 0x24]                                |     r4 = *((sp + 0x24));
    0x0005119e ldr.w r2, [pc, 0x7d0]                             |     r2 = *(0x00051970);
    0x000511a2 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x000511a6 movw r3, 0x313                                    |     r3 = 0x313;
    0x000511aa str r3, [r4, 0x50]                                |     *((r4 + 0x50)) = r3;
    0x000511ac movs r3, 2                                        |     r3 = 2;
    0x000511ae add.w r0, r4, 0x2c                                |     r0 = r4 + 0x2c;
    0x000511b2 add r2, pc                                        |     r2 += pc;
    0x000511b4 strb.w r3, [r4, 0x56]                             |     *((r4 + 0x56)) = r3;
    0x000511b8 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x000511bc ldr r0, [r4, 0x2c]                                |     r0 = *((r4 + 0x2c));
    0x000511be b.w 0x50538                                       |     goto label_39;
                                                                 | label_357:
    0x000511c2 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x000511c4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000511c6 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_336:
    0x000511ca ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x000511cc ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x000511ce ldrb r0, [r3, 3]                                  |     r0 = *((r3 + 3));
    0x000511d0 ldr r4, [r3, 0xc]                                 |     r4 = *((r3 + 0xc));
    0x000511d2 asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
    0x000511d4 ands r0, r0, 0x10                                 |     r0 &= 0x10;
    0x000511d8 it ne                                             |     
                                                                 |     if (r0 == r0) {
    0x000511da ldrne r0, [r5, 0xc]                               |         r0 = *((r5 + 0xc));
                                                                 |     }
    0x000511dc strd r4, r0, [sp, 0xc]                            |     __asm ("strd r4, r0, [sp, 0xc]");
    0x000511e0 mov r0, r7                                        |     r0 = r7;
    0x000511e2 ldr r4, [sp, 0x1c]                                |     r4 = *(arg_1ch);
    0x000511e4 adds r4, 1                                        |     r4++;
    0x000511e6 str r4, [sp, 0x1c]                                |     *(arg_1ch) = r4;
    0x000511e8 ldr.w r4, [pc, 0x788]                             |     
    0x000511ec add r4, pc                                        |     r4 = 0xa2b64;
    0x000511ee str r4, [sp]                                      |     *(sp) = r4;
    0x000511f0 movs r4, 0                                        |     r4 = 0;
    0x000511f2 strd r4, r4, [sp, 4]                              |     __asm ("strd r4, r4, [sp, 4]");
    0x000511f6 bl 0x32b00                                        |     r0 = fcn_00032b00 (r0, r1, r2, r3, r4, r5, r6);
    0x000511fa mov r6, r0                                        |     r6 = r0;
    0x000511fc str r4, [r5, 0x44]                                |     *((r5 + 0x44)) = r4;
    0x000511fe cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00051200 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x00051204 b.w 0x4d740                                       |     goto label_7;
                                                                 | label_558:
    0x00051208 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005120a ldr r3, [r3, -0x4]                                |     r3 = *((r3 - 0x4));
    0x0005120e str r3, [r7, 0x34]                                |     *((r7 + 0x34)) = r3;
    0x00051210 b.w 0x50a02                                       |     goto label_64;
                                                                 | label_554:
    0x00051214 ldr.w r2, [pc, 0x760]                             |     
    0x00051218 movs r1, 0                                        |     r1 = 0;
    0x0005121a str r3, [sp]                                      |     *(sp) = r3;
    0x0005121c mov r0, r7                                        |     r0 = r7;
    0x0005121e ldr r3, [sp, 0x4c]                                |     r3 = *(arg_4ch);
    0x00051220 add r2, pc                                        |     r2 = 0xa2b9c;
    0x00051222 bl 0x34c14                                        |     fcn_00034c14 (r0, r1, r2);
    0x00051226 b.w 0x508fe                                       |     goto label_65;
                                                                 | label_516:
    0x0005122a lsrs r2, r3, 3                                    |     r2 = r3 >> 3;
    0x0005122c movs r1, 1                                        |     r1 = 1;
    0x0005122e and r3, r3, 7                                     |     r3 &= 7;
    0x00051232 lsl.w r3, r1, r3                                  |     r3 = r1 << r3;
    0x00051236 ldrb r1, [r4, r2]                                 |     r1 = *((r4 + r2));
    0x00051238 orrs r3, r1                                       |     r3 |= r1;
    0x0005123a strb r3, [r4, r2]                                 |     *((r4 + r2)) = r3;
    0x0005123c b.w 0x502f4                                       |     goto label_66;
                                                                 | label_426:
    0x00051240 ldr r6, [r7, 0xc]                                 |     r6 = *((r7 + 0xc));
    0x00051242 mov r1, r8                                        |     r1 = r8;
    0x00051244 mov r0, fp                                        |     r0 = fp;
    0x00051246 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0005124a strb.w r5, [fp, 0x89]                             |     *(arg_89h) = r5;
    0x0005124e cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00051250 bne.w 0x53e1c                                     |         goto label_595;
                                                                 |     }
    0x00051254 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051256 adds r3, 1                                        |     r3++;
    0x00051258 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0005125a b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_331:
    0x0005125e ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051260 adds r3, 1                                        |     r3++;
    0x00051262 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00051264 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_583:
    0x00051268 mov r1, r5                                        |     r1 = r5;
    0x0005126a mov r0, fp                                        |     r0 = fp;
    0x0005126c bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00051270 b 0x50f50                                         |     goto label_67;
                                                                 | label_343:
    0x00051272 ldr r2, [sp, 0x48]                                |     r2 = *(arg_48h);
    0x00051274 movs r3, 1                                        |     r3 = 1;
    0x00051276 mov r6, r0                                        |     r6 = r0;
    0x00051278 strb r3, [r2, 0x19]                               |     *((r2 + 0x19)) = r3;
    0x0005127a b.w 0x4d734                                       |     goto label_68;
                                                                 | label_450:
    0x0005127e ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051280 mov sb, r0                                        |     sb = r0;
    0x00051282 ldr r0, [r5, 0x2c]                                |     r0 = *((r5 + 0x2c));
    0x00051284 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x00051288 b.w 0x50538                                       |     goto label_39;
                                                                 | label_565:
    0x0005128c mov r2, r4                                        |     r2 = r4;
    0x0005128e mov r3, r6                                        |     r3 = r6;
    0x00051290 ldr r1, [r7, 4]                                   |     r1 = *((r7 + 4));
    0x00051292 ldr r0, [r7, 0x18]                                |     r0 = *((r7 + 0x18));
    0x00051294 bl 0x30258                                        |     fcn_00030258 (r0, r1, r2, r3, r4, r5, r6);
    0x00051298 ldrh r3, [r7, 0x1c]                               |     r3 = *((r7 + 0x1c));
    0x0005129a movw r2, 0x2460                                   |     r2 = 0x2460;
    0x0005129e mov r4, r0                                        |     r4 = r0;
    0x000512a0 tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x000512a2 bne.w 0x52d04                                     |         goto label_596;
                                                                 |     }
                                                                 | label_178:
    0x000512a6 ldr r1, [r7, 0x24]                                |     r1 = *((r7 + 0x24));
    0x000512a8 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x000512aa beq.w 0x4d722                                     |         goto label_45;
                                                                 |     }
    0x000512ae ldr r0, [r7]                                      |     r0 = *(r7);
    0x000512b0 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x000512b4 b.w 0x4d722                                       |     goto label_45;
                                                                 | label_462:
    0x000512b8 str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x000512bc b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_501:
    0x000512c0 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000512c2 ldr.w r2, [pc, 0x6b8]                             |     r2 = *(0x0005197c);
    0x000512c6 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x000512ca add r2, pc                                        |     r2 += pc;
                                                                 | label_151:
    0x000512cc ldr r4, [sp, 0x24]                                |     r4 = *((sp + 0x24));
    0x000512ce mov r1, fp                                        |     r1 = fp;
    0x000512d0 mov.w sb, 5                                       |     sb = 5;
    0x000512d4 add.w r0, r4, 0x2c                                |     r0 = r4 + 0x2c;
    0x000512d8 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x000512dc ldr r0, [r4, 0x2c]                                |     r0 = *((r4 + 0x2c));
    0x000512de b.w 0x50538                                       |     goto label_39;
                                                                 | label_442:
    0x000512e2 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000512e4 mov r0, r5                                        |     r0 = r5;
    0x000512e6 ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x000512e8 adds r3, 1                                        |     r3++;
    0x000512ea str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000512ec ldr r3, [r5]                                      |     r3 = *(r5);
    0x000512ee ldr r3, [r3, 0x4c]                                |     r3 = *((r3 + 0x4c));
    0x000512f0 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x000512f2 ldr r7, [sp, 0x24]                                |     r7 = *((sp + 0x24));
    0x000512f4 mov r6, r0                                        |     r6 = r0;
    0x000512f6 ldr r4, [r7]                                      |     r4 = *(r7);
    0x000512f8 ldr r1, [r7, 0x2c]                                |     r1 = *((r7 + 0x2c));
    0x000512fa mov r0, r4                                        |     r0 = r4;
    0x000512fc bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00051300 ldr r1, [r5, 8]                                   |     r1 = *((r5 + 8));
    0x00051302 mov r0, r4                                        |     r0 = r4;
    0x00051304 bl 0xd418                                         |     fcn_0000d418 (r0, r1);
    0x00051308 str r0, [r7, 0x2c]                                |     *((r7 + 0x2c)) = r0;
    0x0005130a ldr r0, [r5, 8]                                   |     r0 = *((r5 + 8));
    0x0005130c blx 0x6050                                        |     fcn_00006050 ();
    0x00051310 movs r2, 0                                        |     r2 = 0;
    0x00051312 str r2, [r5, 8]                                   |     *((r5 + 8)) = r2;
    0x00051314 ldrb.w r3, [r7, 0x58]                             |     r3 = *((r7 + 0x58));
    0x00051318 bfi r3, r2, 5, 1                                  |     value_48 = BIT_MASK (5, 1);
                                                                 |     value_49 = r2 & value_48;
                                                                 |     value_48 = ~value_48;
                                                                 |     r3 &= value_48;
                                                                 |     r3 |= value_49;
    0x0005131c strb.w r3, [r7, 0x58]                             |     *((r7 + 0x58)) = r3;
    0x00051320 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00051322 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x00051326 b.w 0x4d740                                       |     goto label_7;
                                                                 | label_557:
    0x0005132a ldrd r3, r1, [r7, 0x20]                           |     __asm ("ldrd r3, r1, [r7, 0x20]");
    0x0005132e cmp r1, r3                                        |     
                                                                 |     if (r1 != r3) {
    0x00051330 beq 0x51342                                       |         
    0x00051332 ldrb.w r3, [r7, 0x34]                             |         r3 = *((r7 + 0x34));
    0x00051336 cmp r3, 1                                         |         
                                                                 |         if (r3 == 1) {
    0x00051338 beq.w 0x539d4                                     |             goto label_597;
                                                                 |         }
    0x0005133c mov r0, r1                                        |         r0 = r1;
    0x0005133e blx 0x6050                                        |         fcn_00006050 ();
                                                                 |     }
                                                                 | label_240:
    0x00051342 movs r3, 0                                        |     r3 = 0;
    0x00051344 add r0, sp, 0xf4                                  |     r0 += arg_f4h;
    0x00051346 str r3, [r7, 0x24]                                |     *((r7 + 0x24)) = r3;
    0x00051348 bl 0x171d4                                        |     fcn_000171d4 (r0);
                                                                 | label_174:
    0x0005134c mov r0, fp                                        |     r0 = fp;
    0x0005134e ldr r1, [sp, 0x28]                                |     r1 = *(arg_28h);
    0x00051350 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00051354 ldr r0, [sp, 0x2c]                                |     r0 = *(arg_2ch);
    0x00051356 bl 0xfdb8                                         |     fcn_0000fdb8 (r0);
    0x0005135a b.w 0x50972                                       |     goto label_69;
                                                                 | label_420:
    0x0005135e ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051360 adds r3, 1                                        |     r3++;
    0x00051362 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00051364 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_438:
    0x00051368 mov r1, sl                                        |     r1 = sl;
    0x0005136a bl 0x2e998                                        |     r0 = fcn_0002e998 (r0, r1);
    0x0005136e mov r6, r0                                        |     r6 = r0;
    0x00051370 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00051372 bne.w 0x528f6                                     |         goto label_207;
                                                                 |     }
    0x00051376 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x0005137a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005137c beq.w 0x52d0e                                     |         goto label_598;
                                                                 |     }
    0x00051380 movs r2, 1                                        |     r2 = 1;
    0x00051382 movs r3, 0                                        |     r3 = 0;
    0x00051384 strd r2, r3, [sp, 0xd8]                           |     __asm ("strd r2, r3, [sp, 0xd8]");
                                                                 | label_179:
    0x00051388 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005138a ldr r6, [r3, 0xc]                                 |     r6 = *((r3 + 0xc));
    0x0005138c cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0005138e bne.w 0x4f350                                     |         goto label_70;
                                                                 |     }
    0x00051392 ldrb.w r3, [r8, 0x1c]                             |     r3 = *((r8 + 0x1c));
    0x00051396 lsls r3, r3, 0x1e                                 |     r3 <<= 0x1e;
    0x00051398 it pl                                             |     
                                                                 |     if (r3 < r3) {
    0x0005139a ldrdpl r2, r3, [sp, 0xd8]                         |         __asm ("ldrdpl r2, r3, [arg_d8h]");
                                                                 |         goto label_599;
                                                                 |     }
                                                                 |     if (r3 >= r3) {
                                                                 | label_599:
    0x0005139e bpl.w 0x4f3a2                                     |         goto label_71;
                                                                 |     }
    0x000513a2 ldr.w r0, [r8]                                    |     r0 = *(r8);
                                                                 | label_439:
    0x000513a6 ldr r3, [sp, 0x68]                                |     r3 = *(arg_68h);
    0x000513a8 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x000513aa add r4, sp, 0xdc                                  |     r4 += arg_dch;
    0x000513ac movs r5, 0                                        |     r5 = 0;
    0x000513ae mov r6, sl                                        |     r6 = sl;
    0x000513b0 mov sb, r4                                        |     sb = r4;
    0x000513b2 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x000513b4 ldr r3, [sp, 0x6c]                                |     r3 = *(arg_6ch);
    0x000513b6 str r2, [r7]                                      |     *(r7) = r2;
    0x000513b8 bic r3, r3, 0xc0000000                            |     r3 = BIT_MASK (r3, 0xc0000000);
    0x000513bc adc r3, r3, 0                                     |     __asm ("adc r3, r3, 0");
    0x000513c0 str r3, [sp, 0xdc]                                |     *(arg_dch) = r3;
    0x000513c2 b 0x513fe                                         |     
                                                                 |     while (r0 == 0) {
    0x000513c4 ldr r4, [r6]                                      |         r4 = *(r6);
                                                                 |         if (r4 != 0) {
    0x000513c6 cbnz r4, 0x5140c                                  |             goto label_600;
                                                                 |         }
    0x000513c8 adds r5, 1                                        |         r5++;
    0x000513ca cmp r5, 0x64                                      |         
                                                                 |         if (r5 == 0x64) {
    0x000513cc beq.w 0x536dc                                     |             goto label_441;
                                                                 |         }
    0x000513d0 movs r0, 8                                        |         r0 = 8;
    0x000513d2 mov r1, r7                                        |         r1 = r7;
    0x000513d4 blx 0x67ac                                        |         fcn_000067ac ();
    0x000513d8 cmp r5, 4                                         |         
    0x000513da ldr.w r0, [r8]                                    |         r0 = *(r8);
    0x000513de iteet le                                          |         
                                                                 |         if (r5 > 4) {
    0x000513e0 ldrle r3, [r7]                                    |             r3 = *(r7);
                                                                 |         }
                                                                 |         if (r5 <= 4) {
    0x000513e2 ldrgt r4, [sb]                                    |             r4 = *(sb);
                                                                 |         }
                                                                 |         if (r5 > 4) {
    0x000513e6 ldrle r3, [r7]                                    |             r3 = *(r7);
                                                                 |         }
                                                                 |         if (r5 <= 4) {
    0x000513e8 bic r3, r3, 0xff000000                            |             r3 = BIT_MASK (r3, 0xff000000);
                                                                 |         }
    0x000513ec it gt                                             |         
                                                                 |         if (r5 > 4) {
    0x000513ee bicgt r4, r4, 0xc0000000                          |             __asm ("bicgt r4, r4, aav.0x000000ff");
                                                                 |         }
    0x000513f2 adds r2, r3, 1                                    |         r2 = r3 + 1;
    0x000513f4 adc r3, r4, 0                                     |         __asm ("adc r3, r4, 0");
    0x000513f8 str r2, [r7]                                      |         *(r7) = r2;
    0x000513fa str.w r3, [sb]                                    |         __asm ("str.w r3, [sb]");
    0x000513fe movs r1, 0                                        |         r1 = 0;
    0x00051400 str r6, [sp, 4]                                   |         *(arg_4h) = r6;
    0x00051402 str r1, [sp]                                      |         *(sp) = r1;
    0x00051404 bl 0x2e9e8                                        |         r0 = fcn_0002e9e8 (r0, r1, r2, r3, r4, r5, r6);
    0x00051408 cmp r0, 0                                         |         
    0x0005140a beq 0x513c4                                       |         
                                                                 |     }
                                                                 | label_600:
    0x0005140c ldr r2, [r7]                                      |     r2 = *(r7);
    0x0005140e mov r6, r0                                        |     r6 = r0;
    0x00051410 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x00051414 b.w 0x4f3a2                                       |     goto label_71;
                                                                 | label_489:
    0x00051418 ldr r4, [sp, 0x24]                                |     r4 = *((sp + 0x24));
    0x0005141a mov r1, fp                                        |     r1 = fp;
    0x0005141c ldr.w r2, [pc, 0x560]                             |     r2 = *(0x00051980);
    0x00051420 mov.w sb, 1                                       |     sb = 1;
    0x00051424 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051426 add.w r0, r4, 0x2c                                |     r0 = r4 + 0x2c;
    0x0005142a add r2, pc                                        |     r2 += pc;
    0x0005142c add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x00051430 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x00051434 ldr r0, [r4, 0x2c]                                |     r0 = *((r4 + 0x2c));
    0x00051436 b.w 0x50538                                       |     goto label_39;
                                                                 | label_410:
    0x0005143a mov r5, sb                                        |     r5 = sb;
    0x0005143c b.w 0x4edca                                       |     goto label_72;
                                                                 | label_486:
    0x00051440 ldr r1, [sp, 0x70]                                |     r1 = *(arg_70h);
    0x00051442 mov r0, r4                                        |     r0 = r4;
    0x00051444 bl 0x20900                                        |     r0 = fcn_00020900 (r0, r1);
    0x00051448 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005144a beq.w 0x4fdf6                                     |         goto label_73;
                                                                 |     }
    0x0005144e b.w 0x4d4ec                                       |     goto label_6;
                                                                 | label_463:
    0x00051452 adds r3, 1                                        |     r3++;
    0x00051454 mov r0, r5                                        |     r0 = r5;
    0x00051456 uxtb r4, r3                                       |     r4 = (int8_t) r3;
    0x00051458 bl 0xd140                                         |     fcn_0000d140 (r0);
    0x0005145c mov r2, r4                                        |     r2 = r4;
    0x0005145e mov r1, sb                                        |     r1 = sb;
    0x00051460 mov r0, r5                                        |     r0 = r5;
    0x00051462 bl 0x7c40                                         |     r0 = fcn_00007c40 (r0, r1, r2);
    0x00051466 mov r6, r0                                        |     r6 = r0;
    0x00051468 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005146a beq.w 0x532e4                                     |         goto label_601;
                                                                 |     }
    0x0005146e ldrb r3, [r5, 9]                                  |     r3 = *((r5 + 9));
    0x00051470 uxtb r4, r0                                       |     r4 = (int8_t) r0;
    0x00051472 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00051474 beq.w 0x532d2                                     |         goto label_602;
                                                                 |     }
    0x00051478 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x0005147a subs r3, 1                                        |     r3--;
    0x0005147c str r3, [r5, 0xc]                                 |     *((r5 + 0xc)) = r3;
    0x0005147e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00051480 beq.w 0x538f0                                     |         goto label_603;
                                                                 |     }
                                                                 | label_231:
    0x00051484 cmp r4, 6                                         |     
                                                                 |     if (r4 != 6) {
    0x00051486 bne.w 0x53320                                     |         goto label_604;
                                                                 |     }
    0x0005148a mov sb, r6                                        |     sb = r6;
                                                                 | label_203:
    0x0005148c ldr r4, [sp, 0x24]                                |     r4 = *((sp + 0x24));
    0x0005148e mov r1, fp                                        |     r1 = fp;
    0x00051490 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00051492 ldr.w r2, [pc, 0x4f0]                             |     
    0x00051496 mov r0, r4                                        |     r0 = r4;
    0x00051498 adds r0, 0x2c                                     |     r0 += 0x2c;
    0x0005149a ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0005149c add r2, pc                                        |     r2 = 0xa2e26;
    0x0005149e bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x000514a2 ldr r0, [r4, 0x2c]                                |     r0 = *((r4 + 0x2c));
    0x000514a4 b.w 0x50538                                       |     goto label_39;
                                                                 | label_401:
    0x000514a8 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000514aa mov r0, sl                                        |     r0 = sl;
    0x000514ac ldr.w r2, [pc, 0x4d8]                             |     
    0x000514b0 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x000514b4 add r2, pc                                        |     r2 = 0xa2e40;
    0x000514b6 b 0x50d2c                                         |     goto label_74;
                                                                 | label_304:
    0x000514b8 mov r0, r6                                        |     r0 = r6;
    0x000514ba sub.w r8, r8, 0x59                                |     r8 -= 0x59;
    0x000514be bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x000514c2 mov r0, r5                                        |     r0 = r5;
    0x000514c4 vmov.f64 d11, d0                                  |     __asm ("vmov.f64 d11, d0");
    0x000514c8 bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x000514cc vmov.f64 d13, d0                                  |     __asm ("vmov.f64 d13, d0");
    0x000514d0 cmp.w r8, 3                                       |     
                                                                 |     if (r8 > 3) {
    0x000514d4 bhi.w 0x51bf4                                     |         goto label_605;
                                                                 |     }
                                                                 |     /* switch table (5 cases) at 0x514dc */
    0x000514d8 tbh [pc, r8, lsl 1]                               |     __asm ("tbh [pc, r8, lsl 1]");
                                                                 | label_523:
    0x000514e4 ldr r3, [r0, 0x14]                                |     r3 = *((r0 + 0x14));
    0x000514e6 str r3, [r2, 8]                                   |     *((r2 + 8)) = r3;
    0x000514e8 b.w 0x5076e                                       |     goto label_75;
                                                                 | label_485:
    0x000514ec ldr r1, [sp, 0x70]                                |     r1 = *(arg_70h);
    0x000514ee mov r0, r5                                        |     r0 = r5;
    0x000514f0 bl 0x20900                                        |     r0 = fcn_00020900 (r0, r1);
    0x000514f4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000514f6 beq.w 0x4fdea                                     |         goto label_76;
                                                                 |     }
    0x000514fa b.w 0x4d4ec                                       |     goto label_6;
                                                                 | label_484:
    0x000514fe mov r0, r4                                        |     r0 = r4;
    0x00051500 bl 0x173c0                                        |     r0 = fcn_000173c0 (r0);
    0x00051504 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00051506 beq.w 0x4fdde                                     |         goto label_77;
                                                                 |     }
    0x0005150a b.w 0x4d4ec                                       |     goto label_6;
                                                                 | label_483:
    0x0005150e mov r0, r5                                        |     r0 = r5;
    0x00051510 bl 0x173c0                                        |     r0 = fcn_000173c0 (r0);
    0x00051514 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00051516 bne.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x00051518 add r7, sp, 0x3a4                                 |     r7 = sp + 0x3a4;
    0x0005151a ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0005151c b.w 0x4fdd8                                       |     goto label_78;
                                                                 | label_568:
    0x00051520 lsls r7, r5, 0x1f                                 |     r7 = r5 << 0x1f;
                                                                 |     if (r7 >= r5) {
    0x00051522 bpl.w 0x53a68                                     |         goto label_606;
                                                                 |     }
                                                                 | label_246:
    0x00051526 orr r5, r5, 2                                     |     r5 |= 2;
    0x0005152a strh r5, [r6, 0x1a]                               |     *((r6 + 0x1a)) = r5;
    0x0005152c b.w 0x50c1c                                       |     goto label_79;
                                                                 | label_534:
    0x00051530 ldrb.w r3, [fp, 0x3e]                             |     r3 = *(arg_3eh);
                                                                 |     if (r3 == 0) {
    0x00051534 cbz r3, 0x51540                                   |         goto label_607;
                                                                 |     }
    0x00051536 ldr.w r3, [fp, 0x90]                              |     r3 = *(arg_90h);
    0x0005153a cmp r3, 1                                         |     
                                                                 |     if (r3 <= 1) {
    0x0005153c ble.w 0x50508                                     |         goto label_80;
                                                                 |     }
                                                                 | label_607:
    0x00051540 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00051542 ldr r4, [r2, 0x68]                                |     r4 = *((r2 + 0x68));
                                                                 |     if (r4 == 0) {
    0x00051544 cbnz r4, 0x51558                                  |         
    0x00051546 ldr.w r4, [fp, 0x1ec]                             |         r4 = *(arg_1ech);
    0x0005154a ldr.w r3, [fp, 0x1e8]                             |         r3 = *(arg_1e8h);
    0x0005154e adds r4, 1                                        |         r4++;
    0x00051550 str.w r4, [fp, 0x1ec]                             |         __asm ("str.w r4, [arg_1ech]");
    0x00051554 add r4, r3                                        |         r4 += r3;
    0x00051556 str r4, [r2, 0x68]                                |         *((r2 + 0x68)) = r4;
                                                                 |     }
    0x00051558 ldr.w r3, [fp, 0x140]                             |     r3 = *(arg_140h);
                                                                 |     if (r3 != 0) {
    0x0005155c cbz r3, 0x51570                                   |         
    0x0005155e subs r2, r4, 1                                    |         r2 = r4 - 1;
    0x00051560 movs r1, 0                                        |         r1 = 0;
    0x00051562 mov r0, fp                                        |         r0 = fp;
    0x00051564 bl 0xa6e8                                         |         r0 = fcn_0000a6e8 (r0, r1, r2);
    0x00051568 mov r6, r0                                        |         r6 = r0;
                                                                 |         if (r0 != 0) {
    0x0005156a cbnz r0, 0x51592                                  |             goto label_265;
                                                                 |         }
    0x0005156c ldr r3, [sp, 0x24]                                |         r3 = *((sp + 0x24));
    0x0005156e ldr r4, [r3, 0x68]                                |         r4 = *((r3 + 0x68));
                                                                 |     }
    0x00051570 ldr r6, [r5, 4]                                   |     r6 = *((r5 + 4));
    0x00051572 mov r0, r5                                        |     r0 = r5;
    0x00051574 bl 0xd140                                         |     fcn_0000d140 (r0);
    0x00051578 mov r1, r4                                        |     r1 = r4;
    0x0005157a ldr r0, [r6]                                      |     r0 = *(r6);
    0x0005157c bl 0x10c5c                                        |     fcn_00010c5c (r0, r1);
    0x00051580 ldrb r3, [r5, 9]                                  |     r3 = *((r5 + 9));
    0x00051582 mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r3 != 0) {
    0x00051584 cbz r3, 0x51592                                   |         
    0x00051586 ldr r4, [r5, 0xc]                                 |         r4 = *((r5 + 0xc));
    0x00051588 subs r4, 1                                        |         r4--;
    0x0005158a str r4, [r5, 0xc]                                 |         *((r5 + 0xc)) = r4;
    0x0005158c cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x0005158e beq.w 0x53d74                                     |             goto label_608;
                                                                 |         }
                                                                 |     }
                                                                 | label_265:
    0x00051592 ldrd r2, r3, [fp, 0x1f0]                          |     __asm ("ldrd r2, r3, [arg_1f0h]");
    0x00051596 ldr r1, [sp, 0x24]                                |     r1 = *((sp + 0x24));
    0x00051598 strd r2, r3, [r1, 0x98]                           |     __asm ("strd r2, r3, [r1, 0x98]");
    0x0005159c ldrd r2, r3, [fp, 0x1f8]                          |     __asm ("ldrd r2, r3, [arg_1f8h]");
    0x000515a0 strd r2, r3, [r1, 0xa0]                           |     __asm ("strd r2, r3, [r1, 0xa0]");
    0x000515a4 b.w 0x5050a                                       |     goto label_81;
                                                                 | label_527:
    0x000515a8 ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x000515aa mov r2, r1                                        |     r2 = r1;
                                                                 |     if (r1 == 0) {
    0x000515ac cbz r1, 0x515c6                                   |         goto label_609;
                                                                 |     }
    0x000515ae ldrb r3, [r1]                                     |     r3 = *(r1);
    0x000515b0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000515b2 beq.w 0x53c20                                     |         goto label_610;
                                                                 |     }
    0x000515b6 mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x000515b8 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x000515bc cmp r2, 0                                         |         
    0x000515be bne 0x515b8                                       |         
                                                                 |     } while (r2 != 0);
                                                                 | label_258:
    0x000515c0 subs r3, r3, r1                                   |     r3 -= r1;
    0x000515c2 bic r2, r3, 0xc0000000                            |     r2 = BIT_MASK (r3, 0xc0000000);
                                                                 | label_609:
    0x000515c6 adds r0, 8                                        |     r0 += 8;
    0x000515c8 bl 0x13f5c                                        |     fcn_00013f5c (r0, r1, r2);
    0x000515cc ldr r2, [r0, 0x40]                                |     r2 = *((r0 + 0x40));
    0x000515ce mov r3, r0                                        |     r3 = r0;
    0x000515d0 cmp r4, r2                                        |     
                                                                 |     if (r4 == r2) {
    0x000515d2 beq.w 0x53c1a                                     |         goto label_611;
                                                                 |     }
                                                                 |     do {
    0x000515d6 mov r3, r2                                        |         r3 = r2;
    0x000515d8 ldr r2, [r2, 0x20]                                |         r2 = *((r2 + 0x20));
    0x000515da cmp r4, r2                                        |         
    0x000515dc bne 0x515d6                                       |         
                                                                 |     } while (r4 != r2);
    0x000515de adds r3, 0x20                                     |     r3 += 0x20;
                                                                 | label_257:
    0x000515e0 ldr r2, [r2, 0x20]                                |     r2 = *((r2 + 0x20));
    0x000515e2 str r2, [r3]                                      |     *(r3) = r2;
    0x000515e4 b.w 0x50426                                       |     goto label_82;
    0x000515e8 cmp r3, 0                                         |     
    0x000515ea ite gt                                            |     
                                                                 |     if (r3 <= 0) {
    0x000515ec movgt r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x000515ee movle r3, 1                                       |     r3 = 1;
                                                                 |     while (1) {
                                                                 | label_83:
    0x000515f0 lsls r0, r2, 0x1b                                 |         r0 = r2 << 0x1b;
                                                                 |         if (r0 >= r2) {
    0x000515f2 bpl.w 0x51e8e                                     |             goto label_612;
                                                                 |         }
    0x000515f6 ldr r2, [sp, 0x20]                                |         r2 = *(arg_20h);
    0x000515f8 ldr r1, [sp, 0x1c]                                |         r1 = *(arg_1ch);
    0x000515fa ldr r2, [r2, 8]                                   |         r2 = *((r2 + 8));
    0x000515fc adds r1, 1                                        |         r1++;
    0x000515fe str r1, [sp, 0x1c]                                |         *(arg_1ch) = r1;
    0x00051600 ldr r1, [sp, 0x44]                                |         r1 = *(arg_44h);
    0x00051602 add.w r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
    0x00051606 add.w r2, r1, r2, lsl 3                           |         r2 = r1 + (r2 << 3);
    0x0005160a str r3, [r2, 0x10]                                |         *((r2 + 0x10)) = r3;
    0x0005160c asrs r3, r3, 0x1f                                 |         r3 >>= 0x1f;
    0x0005160e str r2, [sp, 0x38]                                |         *(arg_38h) = r2;
    0x00051610 str r3, [r2, 0x14]                                |         *((r2 + 0x14)) = r3;
    0x00051612 ldrh r3, [r2, 0x1c]                               |         r3 = *((r2 + 0x1c));
    0x00051614 bic r3, r3, 0x4180                                |         r3 = BIT_MASK (r3, 0x4180);
    0x00051618 bic r3, r3, 0x7f                                  |         r3 = BIT_MASK (r3, 0x7f);
    0x0005161c orr r3, r3, 4                                     |         r3 |= 4;
    0x00051620 strh r3, [r2, 0x1c]                               |         *((r2 + 0x1c)) = r3;
                                                                 | label_113:
    0x00051622 ldrh r3, [r7, 0x1c]                               |         r3 = *((r7 + 0x1c));
    0x00051624 mov.w r2, 0xfe00                                  |         
    0x00051628 movt r2, 0xffff                                   |         r2 = 0x-200;
    0x0005162c ubfx r5, r5, 0, 9                                 |         r5 = (r5 >> 0) & ((1 << 9) - 1);
    0x00051630 ubfx r6, r6, 0, 9                                 |         r6 = (r6 >> 0) & ((1 << 9) - 1);
    0x00051634 ands r3, r2                                       |         r3 &= r2;
    0x00051636 orrs r3, r5                                       |         r3 |= r5;
    0x00051638 strh r3, [r7, 0x1c]                               |         *((r7 + 0x1c)) = r3;
    0x0005163a ldrh r3, [r4, 0x1c]                               |         r3 = *((r4 + 0x1c));
    0x0005163c ands r3, r2                                       |         r3 &= r2;
    0x0005163e orrs r3, r6                                       |         r3 |= r6;
    0x00051640 strh r3, [r4, 0x1c]                               |         *((r4 + 0x1c)) = r3;
    0x00051642 b.w 0x4d26a                                       |         goto label_2;
    0x00051646 clz r3, r3                                        |         r3 &= r3;
    0x0005164a lsrs r3, r3, 5                                    |         r3 >>= 5;
    0x0005164c b 0x515f0                                         |         
                                                                 |     }
    0x0005164e subs r3, 0                                        |     
    0x00051650 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x00051652 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00051654 b 0x515f0                                         |     goto label_83;
                                                                 | label_303:
    0x00051656 mvns r3, r3                                       |     r3 = ~r3;
    0x00051658 lsrs r3, r3, 0x1f                                 |     r3 >>= 0x1f;
    0x0005165a b 0x515f0                                         |     goto label_83;
    0x0005165c cmp r3, 0                                         |     
    0x0005165e ite le                                            |     
                                                                 |     if (r3 > 0) {
    0x00051660 movle r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 <= 0) {
    0x00051662 movgt r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00051664 b 0x515f0                                         |     goto label_83;
    0x00051666 asrs r4, r1, 0x1f                                 |     r4 = r1 >> 0x1f;
    0x00051668 asr.w r8, r3, 0x1f                                |     r8 = r3 >> 0x1f;
    0x0005166c adds r7, r4, r0                                   |     r7 = r4 + r0;
    0x0005166e eor.w r7, r0, r4                                  |     r7 = r0 ^ r4;
    0x00051672 adc ip, r1, 0                                     |     __asm ("adc ip, r1, 0");
    0x00051676 subs.w lr, r7, r4                                 |     lr = r7 - r4;
    0x0005167a eor.w lr, lr, r4                                  |     lr ^= r4;
    0x0005167e subs.w lr, lr, r4                                 |     lr -= r4;
    0x00051682 sbc.w r4, r4, r4                                  |     __asm ("sbc.w r4, r4, r4");
    0x00051686 str r4, [sp, 0x20]                                |     *(arg_20h) = r4;
    0x00051688 adds.w r4, r8, r2                                 |     r4 = r8 + r2;
    0x0005168c eor.w r4, r2, r8                                  |     r4 = r2 ^ r8;
    0x00051690 adc r7, r3, 0                                     |     __asm ("adc r7, r3, 0");
    0x00051694 subs.w r4, r4, r8                                 |     r4 -= r8;
    0x00051698 eor.w r4, r4, r8                                  |     r4 ^= r8;
    0x0005169c subs.w r4, r4, r8                                 |     r4 -= r8;
    0x000516a0 str r4, [sp, 0x28]                                |     *(arg_28h) = r4;
    0x000516a2 sbc.w r4, r8, r8                                  |     __asm ("sbc.w r4, r8, r8");
    0x000516a6 str r4, [sp, 0x2c]                                |     *(arg_2ch) = r4;
    0x000516a8 asr.w r4, ip, 0x1f                                |     r4 = ip >> 0x1f;
    0x000516ac asr.w r8, r7, 0x1f                                |     r8 = r7 >> 0x1f;
    0x000516b0 str r4, [sp, 0x34]                                |     *(arg_34h) = r4;
    0x000516b2 orrs.w r4, ip, ip, asr 31                         |     r4 = ip | (ip >> 31);
                                                                 |     if (r4 != ip) {
    0x000516b6 bne.w 0x53a2c                                     |         goto label_613;
                                                                 |     }
    0x000516ba orrs.w ip, r7, r8                                 |     
                                                                 |     if (ip == r7) {
    0x000516be beq.w 0x53dac                                     |         goto label_614;
                                                                 |     }
    0x000516c2 mul r3, lr, r8                                    |     r3 = lr * r8;
    0x000516c6 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x000516c8 mla r3, r7, r2, r3                                |     __asm ("mla r3, r7, r2, r3");
    0x000516cc umull r7, ip, lr, r7                              |     r7:ip = lr * r7;
    0x000516d0 add ip, r3                                        |     
                                                                 | label_245:
    0x000516d2 adds.w r2, r7, -0x80000000                        |     r2 = r7 + -0x80000000;
    0x000516d6 mov.w r3, -1                                      |     r3 = -1;
    0x000516da adc ip, ip, 0                                     |     __asm ("adc ip, ip, 0");
    0x000516de movs r0, 0                                        |     r0 = 0;
    0x000516e0 cmp r3, r2                                        |     
    0x000516e2 sbcs.w ip, r0, ip                                 |     __asm ("sbcs.w ip, r0, ip");
                                                                 |     if (r3 <= r2) {
    0x000516e6 blo.w 0x518be                                     |         goto label_244;
                                                                 |     }
    0x000516ea ldr r2, [sp, 0x2c]                                |     r2 = *(arg_2ch);
    0x000516ec ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x000516ee ldr r4, [sp, 0x28]                                |     r4 = *(arg_28h);
    0x000516f0 mul r2, lr, r2                                    |     r2 = lr * r2;
    0x000516f4 mla r2, r4, r1, r2                                |     __asm ("mla r2, r4, r1, r2");
    0x000516f8 umull r4, r1, lr, r4                              |     r4:r1 = lr * r4;
    0x000516fc adds r1, r2, r1                                   |     r1 = r2 + r1;
                                                                 |     if (r1 < r2) {
    0x000516fe bmi.w 0x518a0                                     |         goto label_615;
                                                                 |     }
    0x00051702 cmp r7, r0                                        |     
                                                                 |     if (r7 > r0) {
    0x00051704 ble 0x51716                                       |         
    0x00051706 mvn r2, 0x80000000                                |         r2 = ~0x80000000;
    0x0005170a cmp r3, r4                                        |         
    0x0005170c sub.w r2, r2, r7                                  |         r2 -= r7;
    0x00051710 sbcs r2, r1                                       |         __asm ("sbcs r2, r1");
                                                                 |         if (r3 < r4) {
    0x00051712 blt.w 0x518be                                     |             goto label_244;
                                                                 |         }
                                                                 |     }
                                                                 | label_86:
    0x00051716 adds r0, r0, r4                                   |     r0 += r4;
    0x00051718 adc.w r1, r1, r7                                  |     __asm ("adc.w r1, r1, r7");
                                                                 |     do {
                                                                 | label_84:
    0x0005171c ldr r3, [sp, 0x1c]                                |         r3 = *(arg_1ch);
    0x0005171e ldr r2, [sp, 0x38]                                |         r2 = *(arg_38h);
    0x00051720 adds r3, 1                                        |         r3++;
    0x00051722 str r3, [sp, 0x1c]                                |         *(arg_1ch) = r3;
    0x00051724 ldrh r3, [r2, 0x1c]                               |         r3 = *((r2 + 0x1c));
    0x00051726 strd r0, r1, [r2, 0x10]                           |         __asm ("strd r0, r1, [r2, 0x10]");
    0x0005172a bic r3, r3, 0x4180                                |         r3 = BIT_MASK (r3, 0x4180);
    0x0005172e bic r3, r3, 0x7f                                  |         r3 = BIT_MASK (r3, 0x7f);
    0x00051732 orr r3, r3, 4                                     |         r3 |= 4;
    0x00051736 strh r3, [r2, 0x1c]                               |         *((r2 + 0x1c)) = r3;
    0x00051738 b.w 0x4d26a                                       |         goto label_2;
    0x0005173c cmp.w r3, -0x80000000                             |         
    0x00051740 it eq                                             |         
                                                                 |         if (r3 == -0x80000000) {
    0x00051742 cmpeq r2, 0                                       |             __asm ("cmpeq r2, 0");
                                                                 |         }
                                                                 |         if (r3 != -0x80000000) {
    0x00051744 bne.w 0x5380c                                     |             goto label_616;
                                                                 |         }
    0x00051748 cmp r1, 0                                         |         
    0x0005174a it lt                                             |         
                                                                 |         if (r1 >= 0) {
    0x0005174c addlt r1, r1, -0x80000000                         |             r1 += -0x80000000;
                                                                 |         }
    0x00051750 blt 0x5171c                                       |         
                                                                 |     } while (r1 < 0);
                                                                 | label_230:
    0x00051752 mov r0, r6                                        |     r0 = r6;
    0x00051754 movs r4, 1                                        |     r4 = 1;
    0x00051756 bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x0005175a mov r0, r5                                        |     r0 = r5;
    0x0005175c vmov.f64 d11, d0                                  |     __asm ("vmov.f64 d11, d0");
    0x00051760 bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x00051764 vmov.f64 d13, d0                                  |     __asm ("vmov.f64 d13, d0");
    0x00051768 vsub.f64 d12, d13, d11                            |     __asm ("vsub.f64 d12, d13, d11");
                                                                 | label_85:
    0x0005176c vstr d12, [sp, 0x98]                              |     __asm ("vstr d12, [sp, 0x98]");
    0x00051770 ldrd r0, r1, [sp, 0x98]                           |     __asm ("ldrd r0, r1, [arg_98h]");
    0x00051774 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051776 strd r0, r1, [sp, 0xa0]                           |     __asm ("strd r0, r1, [sp, 0xa0]");
    0x0005177a vldr d17, [sp, 0x98]                              |     __asm ("vldr d17, [sp, 0x98]");
    0x0005177e add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x00051782 vldr d16, [sp, 0xa0]                              |     __asm ("vldr d16, [sp, 0xa0]");
    0x00051786 vcmp.f64 d17, d16                                 |     __asm ("vcmp.f64 d17, d16");
    0x0005178a vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r4 != 1) {
    0x0005178e bne.w 0x51c0e                                     |         goto label_617;
                                                                 |     }
    0x00051792 ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x00051794 orr.w r2, sl, sb                                  |     r2 = sl | sb;
    0x00051798 eor r3, r4, 1                                     |     r3 = r4 ^ 1;
    0x0005179c eor r2, r2, 8                                     |     r2 ^= 8;
    0x000517a0 and r3, r3, 1                                     |     r3 &= 1;
    0x000517a4 ldrh r6, [r1, 0x1c]                               |     r6 = *((r1 + 0x1c));
    0x000517a6 ands.w r3, r3, r2, lsr 3                          |     r3 &= (r2 >> 3);
    0x000517aa vstr d12, [r1, 8]                                 |     __asm ("vstr d12, [r1, 8]");
    0x000517ae it eq                                             |     
                                                                 |     if (r3 != r3) {
    0x000517b0 streq r8, [sp, 0x1c]                              |         *(arg_1ch) = r8;
                                                                 |     }
    0x000517b4 and r6, r6, 0xbe00                                |     r6 &= 0xbe00;
    0x000517b8 orr r6, r6, 8                                     |     r6 |= 8;
    0x000517bc strh r6, [r1, 0x1c]                               |     *((r1 + 0x1c)) = r6;
                                                                 |     if (r3 == r3) {
    0x000517be beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x000517c2 vcmpe.f64 d12, d10                                |     __asm ("vcmpe.f64 d12, d10");
    0x000517c6 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
    0x000517ca itttt ls                                          |     
                                                                 |     if (r3 > r3) {
    0x000517cc movls r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r3 > r3) {
    0x000517ce movls r3, -0x80000000                             |         r3 = -0x80000000;
                                                                 |     }
                                                                 |     if (r3 > r3) {
    0x000517d2 strls r8, [sp, 0x1c]                              |         *(arg_1ch) = r8;
                                                                 |     }
                                                                 |     if (r3 > r3) {
    0x000517d6 strd r2, r3, [r1, 0x10]                           |         __asm ("strd r2, r3, [r1, 0x10]");
                                                                 |         goto label_618;
                                                                 |     }
                                                                 |     if (r3 < r3) {
                                                                 | label_618:
    0x000517da bls.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x000517de vcmpe.f64 d12, d9                                 |     __asm ("vcmpe.f64 d12, d9");
    0x000517e2 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r3 >= r3) {
    0x000517e6 bge.w 0x53d5e                                     |         goto label_619;
                                                                 |     }
    0x000517ea vmov r0, r1, d12                                  |     __asm ("vmov r0, r1, d12");
    0x000517ee bl 0x5e5dc                                        |     fcn_0005e5dc (r0, r1);
    0x000517f2 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x000517f4 mov r4, r0                                        |     r4 = r0;
    0x000517f6 mov r5, r1                                        |     r5 = r1;
    0x000517f8 str r0, [r3, 0x10]                                |     *((r3 + 0x10)) = r0;
    0x000517fa str r1, [r3, 0x14]                                |     *((r3 + 0x14)) = r1;
    0x000517fc bl 0x5e4a4                                        |     r0 = fcn_0005e4a4 (r0, r1, r2);
    0x00051800 vmov d16, r0, r1                                  |     __asm ("vmov d16, r0, r1");
    0x00051804 vcmp.f64 d16, d12                                 |     __asm ("vcmp.f64 d16, d12");
    0x00051808 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
    0x0005180c ite eq                                            |     
                                                                 |     if (r3 != r3) {
    0x0005180e moveq r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 == r3) {
    0x00051810 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00051812 subs r4, 1                                        |     r4--;
    0x00051814 and r3, r3, 1                                     |     r3 &= 1;
    0x00051818 sbc r5, r5, -0x80000000                           |     __asm ("sbc r5, r5, -aav.0x000000ff");
    0x0005181c adds r4, 2                                        |     r4 += 2;
    0x0005181e sbcs r5, r5, -1                                   |     __asm ("sbcs r5, r5, -1");
    0x00051822 it hs                                             |     
                                                                 |     if (r4 < 2) {
    0x00051824 movhs r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00051826 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00051828 bne.w 0x53fa8                                     |         goto label_620;
                                                                 |     }
    0x0005182c str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x00051830 b.w 0x4d26a                                       |     goto label_2;
    0x00051834 cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x00051836 blt 0x518da                                       |         goto label_621;
                                                                 |     }
    0x00051838 cmp r0, 1                                         |     
    0x0005183a sbcs r4, r1, 0                                    |     __asm ("sbcs r4, r1, 0");
                                                                 |     if (r0 >= 1) {
    0x0005183e blt 0x5184e                                       |         
    0x00051840 mvn r4, 0x80000000                                |         r4 = ~0x80000000;
    0x00051844 mvns r7, r0                                       |         r7 = ~r0;
    0x00051846 subs r4, r4, r1                                   |         r4 -= r1;
    0x00051848 cmp r7, r2                                        |         
    0x0005184a sbcs r4, r3                                       |         __asm ("sbcs r4, r3");
                                                                 |         if (r7 < r2) {
    0x0005184c blt 0x518f8                                       |             goto label_622;
                                                                 |         }
                                                                 |     }
                                                                 | label_87:
    0x0005184e adds r0, r0, r2                                   |     r0 += r2;
    0x00051850 adc.w r1, r1, r3                                  |     __asm ("adc.w r1, r1, r3");
    0x00051854 b 0x5171c                                         |     goto label_84;
    0x00051856 orrs.w r4, r2, r3                                 |     r4 = r2 | r3;
                                                                 |     if (r4 == r2) {
    0x0005185a beq.w 0x51c08                                     |         goto label_290;
                                                                 |     }
    0x0005185e add.w r4, r1, -0x80000000                         |     r4 = r1 + -0x80000000;
    0x00051862 and.w r7, r2, r3                                  |     r7 = r2 & r3;
    0x00051866 orrs r4, r0                                       |     r4 |= r0;
    0x00051868 cmp.w r7, -1                                      |     
    0x0005186c it eq                                             |     
                                                                 |     if (r7 == -1) {
    0x0005186e cmpeq r4, 0                                       |         __asm ("cmpeq r4, 0");
                                                                 |     }
                                                                 |     if (r7 != -1) {
    0x00051870 beq 0x51878                                       |         
    0x00051872 bl 0x5e500                                        |         fcn_0005e500 (r0, r1, r2, r3);
    0x00051876 b 0x5171c                                         |         goto label_84;
                                                                 |     }
    0x00051878 mov r0, r6                                        |     r0 = r6;
    0x0005187a movs r4, 1                                        |     r4 = 1;
    0x0005187c bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x00051880 mov r0, r5                                        |     r0 = r5;
    0x00051882 vmov.f64 d11, d0                                  |     __asm ("vmov.f64 d11, d0");
    0x00051886 bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x0005188a vmov.f64 d13, d0                                  |     __asm ("vmov.f64 d13, d0");
    0x0005188e vcmp.f64 d11, 0                                   |     __asm ("vcmp.f64 d11, 0");
    0x00051892 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r4 == 1) {
    0x00051896 beq.w 0x51c08                                     |         goto label_290;
                                                                 |     }
    0x0005189a vdiv.f64 d12, d13, d11                            |     __asm ("vdiv.f64 d12, d13, d11");
    0x0005189e b 0x5176c                                         |     goto label_85;
                                                                 | label_615:
    0x000518a0 cmp r7, 0                                         |     
                                                                 |     if (r7 >= 0) {
    0x000518a2 bge.w 0x51716                                     |         goto label_86;
                                                                 |     }
    0x000518a6 rsbs.w ip, r0, 1                                  |     
    0x000518aa adds.w lr, r4, 1                                  |     lr = r4 + 1;
    0x000518ae adc r2, r1, 0                                     |     __asm ("adc r2, r1, 0");
    0x000518b2 rsb.w r3, r7, -0x80000000                         |     r3 = -0x80000000 - r7;
    0x000518b6 cmp lr, ip                                        |     
    0x000518b8 sbcs r2, r3                                       |     __asm ("sbcs r2, r3");
                                                                 |     if (lr >= ip) {
    0x000518ba bge.w 0x51716                                     |         goto label_86;
                                                                 |     }
                                                                 | label_244:
    0x000518be mov r0, r6                                        |     r0 = r6;
    0x000518c0 movs r4, 1                                        |     r4 = 1;
    0x000518c2 bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x000518c6 mov r0, r5                                        |     r0 = r5;
    0x000518c8 vmov.f64 d11, d0                                  |     __asm ("vmov.f64 d11, d0");
    0x000518cc bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x000518d0 vmov.f64 d13, d0                                  |     __asm ("vmov.f64 d13, d0");
    0x000518d4 vmul.f64 d12, d11, d13                            |     __asm ("vmul.f64 d12, d11, d13");
    0x000518d8 b 0x5176c                                         |     goto label_85;
                                                                 | label_621:
    0x000518da cmp r1, 0                                         |     
                                                                 |     if (r1 >= 0) {
    0x000518dc bge 0x5184e                                       |         goto label_87;
                                                                 |     }
    0x000518de rsbs.w ip, r0, 1                                  |     
    0x000518e2 mov.w r4, -0x80000000                             |     r4 = -0x80000000;
    0x000518e6 sbc.w r7, r4, r1                                  |     __asm ("sbc.w r7, r4, r1");
    0x000518ea adds.w lr, r2, 1                                  |     lr = r2 + 1;
    0x000518ee adc r4, r3, 0                                     |     __asm ("adc r4, r3, 0");
    0x000518f2 cmp lr, ip                                        |     
    0x000518f4 sbcs r4, r7                                       |     __asm ("sbcs r4, r7");
                                                                 |     if (lr >= ip) {
    0x000518f6 bge 0x5184e                                       |         goto label_87;
                                                                 |     }
                                                                 | label_622:
    0x000518f8 mov r0, r6                                        |     r0 = r6;
    0x000518fa movs r4, 1                                        |     r4 = 1;
    0x000518fc bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x00051900 mov r0, r5                                        |     r0 = r5;
    0x00051902 vmov.f64 d11, d0                                  |     __asm ("vmov.f64 d11, d0");
    0x00051906 bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x0005190a vmov.f64 d13, d0                                  |     __asm ("vmov.f64 d13, d0");
    0x0005190e vadd.f64 d12, d11, d13                            |     __asm ("vadd.f64 d12, d11, d13");
    0x00051912 b 0x5176c                                         |     goto label_85;
                                                                 | label_351:
    0x00051914 mov r1, r8                                        |     r1 = r8;
    0x00051916 mov r0, fp                                        |     r0 = fp;
    0x00051918 bl 0x1a48c                                        |     fcn_0001a48c (r0, r1);
    0x0005191c ldrd r5, sb, [r8, 8]                              |     __asm ("ldrd r5, sb, [r8, 8]");
    0x00051920 strd r5, sb, [r7, 8]                              |     __asm ("strd r5, sb, [r7, 8]");
    0x00051924 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00051926 bne.w 0x53d8a                                     |         goto label_623;
                                                                 |     }
    0x0005192a ldrd r2, r3, [r7]                                 |     __asm ("ldrd r2, r3, [r7]");
    0x0005192e cmp r5, r2                                        |     
    0x00051930 sbcs.w r3, sb, r3                                 |     __asm ("sbcs.w r3, sb, r3");
                                                                 |     if (r5 >= r2) {
    0x00051934 bge 0x51942                                       |         goto label_624;
                                                                 |     }
    0x00051936 add.w sl, sl, 0x30                                |     sl += 0x30;
    0x0005193a cmp.w sl, 0x300                                   |     
                                                                 |     if (sl != 0x300) {
    0x0005193e bne.w 0x4deb6                                     |         goto label_88;
                                                                 |     }
                                                                 | label_624:
    0x00051942 ldr r5, [r7, 0x14]                                |     r5 = *((r7 + 0x14));
    0x00051944 strd r4, r6, [sp, 0x5c]                           |     __asm ("strd r4, r6, [sp, 0x5c]");
    0x00051948 mov r6, r0                                        |     r6 = r0;
    0x0005194a subs r5, 1                                        |     r5--;
    0x0005194c cmp r5, 0                                         |     
                                                                 |     if (r5 <= 0) {
    0x0005194e ble 0x51a1e                                       |         goto label_625;
                                                                 |     }
    0x00051950 ldr.w sb, [sp, 0x48]                              |     sb = *(arg_48h);
    0x00051954 lsl.w r8, r5, 3                                   |     r8 = r5 << 3;
    0x00051958 str r6, [sp, 0x2c]                                |     *(arg_2ch) = r6;
    0x0005195a str.w fp, [sp, 0x34]                              |     __asm ("str.w fp, [arg_34h]");
    0x0005195e b 0x519d4                                         |     
                                                                 |     while (r1 != 0) {
    0x0005198c add.w r1, r7, r7, lsl 1                           |         r1 = r7 + (r7 << 1);
    0x00051990 add.w r1, r2, r1, lsl 4                           |         r1 = r2 + (r1 << 4);
    0x00051994 ldr r2, [r1, 0x18]                                |         r2 = *((r1 + 0x18));
                                                                 |         if (r2 != 0) {
    0x00051996 cbz r2, 0x519c6                                   |             
    0x00051998 ldr r2, [r1, 0x20]                                |             r2 = *((r1 + 0x20));
    0x0005199a ldr.w fp, [r3, 0x20]                              |             fp = *((r3 + 0x20));
    0x0005199e ldr.w sl, [r3, 0x14]                              |             sl = *((r3 + 0x14));
    0x000519a2 ldr r3, [r6, 0x34]                                |             r3 = *((r6 + 0x34));
                                                                 |             if (r2 != 0) {
    0x000519a4 cbz r2, 0x519b4                                   |                 
    0x000519a6 ldr r1, [r1, 0x14]                                |                 r1 = *((r1 + 0x14));
    0x000519a8 ldr.w r0, [sb, 8]                                 |                 r0 = *((sb + 8));
    0x000519ac str r3, [sp, 0x28]                                |                 *(arg_28h) = r3;
    0x000519ae bl 0xbf78                                         |                 fcn_0000bf78 (r0, r1, r2, r3, r4, r5);
    0x000519b2 ldr r3, [sp, 0x28]                                |                 r3 = *(arg_28h);
                                                                 |             }
    0x000519b4 mov r2, r3                                        |             r2 = r3;
    0x000519b6 mov r1, fp                                        |             r1 = fp;
    0x000519b8 mov r0, sl                                        |             r0 = sl;
    0x000519ba movs r3, 0                                        |             r3 = 0;
    0x000519bc bl 0x30258                                        |             r0 = fcn_00030258 (r0, r1, r2, r3, r4, r5, r6);
    0x000519c0 cmp r0, 0                                         |             
    0x000519c2 it gt                                             |             
                                                                 |             if (r0 > 0) {
    0x000519c4 movgt r4, r7                                      |                 r4 = r7;
                                                                 |                 goto label_626;
                                                                 |             }
                                                                 |         }
                                                                 | label_626:
    0x000519c6 ldr r3, [r6, 0x28]                                |         r3 = *((r6 + 0x28));
    0x000519c8 sub.w r8, r8, 8                                   |         r8 -= 8;
    0x000519cc str.w r4, [r3, r5, lsl 2]                         |         __asm ("str.w r4, [r3, r5, lsl 2]");
    0x000519d0 subs r5, 1                                        |         r5--;
                                                                 |         if (r5 == 1) {
    0x000519d2 beq 0x51a18                                       |             goto label_627;
                                                                 |         }
                                                                 | label_89:
    0x000519d4 ldr.w r6, [sb, 0x40]                              |         r6 = *((sb + 0x40));
    0x000519d8 ldr r4, [r6, 0x14]                                |         r4 = *((r6 + 0x14));
    0x000519da add.w r4, r4, r4, lsr 31                          |         r4 += (r4 >> 31);
    0x000519dc strb r4, [r2, 0x13]                               |         *((r2 + 0x13)) = r4;
    0x000519de asrs r4, r4, 1                                    |         r4 >>= 1;
    0x000519e0 cmp r4, r5                                        |         
    0x000519e2 iteet gt                                          |         
                                                                 |         if (r4 <= r5) {
    0x000519e4 ldrgt r3, [r6, 0x28]                              |             r3 = *((r6 + 0x28));
                                                                 |         }
                                                                 |         if (r4 > r5) {
    0x000519e6 suble r4, r5, r4                                  |             r4 = r5 - r4;
                                                                 |         }
                                                                 |         if (r4 > r5) {
    0x000519e8 lslle r4, r4, 1                                   |             r4 <<= 1;
                                                                 |         }
                                                                 |         if (r4 <= r5) {
    0x000519ea ldrgt r4, [r3, r8]                                |             r4 = *((r3 + r8));
                                                                 |         }
    0x000519ee itte gt                                           |         
                                                                 |         if (r4 <= r5) {
    0x000519f0 addgt r2, r3, r8                                  |             r2 = r3 + r8;
                                                                 |         }
                                                                 |         if (r4 > r5) {
    0x000519f4 ldrle r7, [r2, 4]                                 |             r7 = *((r2 + 4));
                                                                 |         }
                                                                 |         if (r4 <= r5) {
    0x000519f6 adds r7, r4, 1                                    |             r7 = r4 + 1;
                                                                 |         }
    0x000519f8 ldr r2, [r6, 0x24]                                |         r2 = *((r6 + 0x24));
    0x000519fa add.w r3, r4, r4, lsl 1                           |         r3 = r4 + (r4 << 1);
    0x000519fe add.w r3, r2, r3, lsl 4                           |         r3 = r2 + (r3 << 4);
    0x00051a02 ldr r1, [r3, 0x18]                                |         r1 = *((r3 + 0x18));
    0x00051a04 cmp r1, 0                                         |         
    0x00051a06 bne 0x5198c                                       |         
                                                                 |     }
    0x00051a08 ldr r3, [r6, 0x28]                                |     r3 = *((r6 + 0x28));
    0x00051a0a mov r4, r7                                        |     r4 = r7;
    0x00051a0c sub.w r8, r8, 8                                   |     r8 -= 8;
    0x00051a10 str.w r4, [r3, r5, lsl 2]                         |     __asm ("str.w r4, [r3, r5, lsl 2]");
    0x00051a14 subs r5, 1                                        |     r5--;
                                                                 |     if (r5 != 1) {
    0x00051a16 bne 0x519d4                                       |         goto label_89;
                                                                 |     }
                                                                 | label_627:
    0x00051a18 ldr r6, [sp, 0x2c]                                |     r6 = *(arg_2ch);
    0x00051a1a ldr.w fp, [sp, 0x34]                              |     fp = *(arg_34h);
    0x00051a1c add sp, 0xd0                                      |     
                                                                 | label_625:
    0x00051a1e ldr r3, [sp, 0x4c]                                |     r3 = *(arg_4ch);
    0x00051a20 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x00051a22 cmp r3, 0x10                                      |     
                                                                 |     if (r3 <= 0x10) {
    0x00051a24 ble.w 0x51b80                                     |         goto label_628;
                                                                 |     }
    0x00051a28 ldr r3, [sp, 0x50]                                |     r3 = *(arg_50h);
    0x00051a2a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00051a2c beq 0x51b0a                                       |         goto label_629;
                                                                 |     }
                                                                 | label_93:
    0x00051a2e ldr.w r8, [sp, 0x54]                              |     r8 = *(arg_54h);
    0x00051a32 movs r3, 0                                        |     r3 = 0;
    0x00051a34 ldr r5, [sp, 0x3c]                                |     r5 = *(arg_3ch);
    0x00051a36 mov r0, fp                                        |     r0 = fp;
    0x00051a38 ldrd r6, r7, [sp, 0xa8]                           |     __asm ("ldrd r6, r7, [arg_a8h]");
    0x00051a3c add r4, sp, 0x12c                                 |     r4 += arg_12ch;
    0x00051a3e ldr r1, [sp, 0x50]                                |     r1 = *(arg_50h);
    0x00051a40 mov r2, r8                                        |     r2 = r8;
    0x00051a42 str r3, [r5]                                      |     *(r5) = r3;
    0x00051a44 strd r6, r7, [sp]                                 |     __asm ("strd r6, r7, [sp]");
    0x00051a48 bl 0xd454                                         |     fcn_0000d454 (r0, r1, r2, r3);
    0x00051a4c ldrd r2, r3, [sp, 0x5c]                           |     __asm ("ldrd r2, r3, [arg_5ch]");
    0x00051a50 mov r0, r4                                        |     r0 = r4;
    0x00051a52 bl 0x9cd4                                         |     fcn_00009cd4 (r0, r1, r2);
    0x00051a56 mov r1, r4                                        |     r1 = r4;
    0x00051a58 mov r2, r0                                        |     r2 = r0;
    0x00051a5a mov r0, r8                                        |     r0 = r8;
    0x00051a5c bl 0x89e0                                         |     fcn_000089e0 (r0, r1, r2);
    0x00051a60 ldr r3, [r5]                                      |     r3 = *(r5);
    0x00051a62 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00051a64 bne 0x51ae0                                       |         goto label_630;
                                                                 |     }
    0x00051a66 ldrd sb, r6, [sp, 0x48]                           |     __asm ("ldrd sb, r6, [arg_48h]");
    0x00051a6a mov r7, r8                                        |     r7 = r8;
    0x00051a6c mov r8, r5                                        |     r8 = r5;
                                                                 |     do {
    0x00051a6e ldr r3, [r6, 0x28]                                |         r3 = *((r6 + 0x28));
    0x00051a70 mov r0, r4                                        |         r0 = r4;
    0x00051a72 ldr r5, [r6, 0x24]                                |         r5 = *((r6 + 0x24));
    0x00051a74 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x00051a76 add.w r3, r3, r3, lsl 1                           |         r3 += (r3 << 1);
    0x00051a7a add.w r5, r5, r3, lsl 4                           |         r5 += (r3 << 4);
    0x00051a7e ldr r2, [r5, 0x14]                                |         r2 = *((r5 + 0x14));
    0x00051a80 asrs r3, r2, 0x1f                                 |         r3 = r2 >> 0x1f;
    0x00051a82 bl 0x9cd4                                         |         fcn_00009cd4 (r0, r1, r2);
    0x00051a86 mov r1, r4                                        |         r1 = r4;
    0x00051a88 mov r2, r0                                        |         r2 = r0;
    0x00051a8a mov r0, r7                                        |         r0 = r7;
    0x00051a8c bl 0x89e0                                         |         fcn_000089e0 (r0, r1, r2);
    0x00051a90 ldr r2, [r5, 0x14]                                |         r2 = *((r5 + 0x14));
    0x00051a92 mov r0, r7                                        |         r0 = r7;
    0x00051a94 ldr r1, [r5, 0x20]                                |         r1 = *((r5 + 0x20));
    0x00051a96 bl 0x89e0                                         |         fcn_000089e0 (r0, r1, r2);
    0x00051a9a mov r2, r8                                        |         r2 = r8;
    0x00051a9c mov r1, sb                                        |         r1 = sb;
    0x00051a9e mov r0, fp                                        |         r0 = fp;
    0x00051aa0 bl 0x30a88                                        |         fcn_00030a88 (r0, r1, r2);
    0x00051aa4 ldr.w r3, [r8]                                    |         r3 = *(r8);
    0x00051aa8 orrs r3, r0                                       |         r3 |= r0;
    0x00051aaa beq 0x51a6e                                       |         
                                                                 |     } while (r3 == r0);
    0x00051aac mov r5, r0                                        |     r5 = r0;
    0x00051aae ldr r1, [sp, 0x54]                                |     r1 = *(arg_54h);
    0x00051ab0 add r2, sp, 0xa8                                  |     r2 += arg_a8h;
    0x00051ab2 mov r0, fp                                        |     r0 = fp;
    0x00051ab4 bl 0xe308                                         |     r0 = fcn_0000e308 (r0, r1, r2);
    0x00051ab8 mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r5 != 0) {
    0x00051aba cbz r5, 0x51aec                                   |         
    0x00051abc ldr r2, [sp, 0x58]                                |         r2 = *(arg_58h);
    0x00051abe mov sl, fp                                        |         sl = fp;
    0x00051ac0 ldr r3, [sp, 0x4c]                                |         r3 = *(arg_4ch);
    0x00051ac2 mov fp, r5                                        |         
    0x00051ac4 ldr r7, [sp, 0x50]                                |         r7 = *(arg_50h);
    0x00051ac6 adds r2, 1                                        |         r2++;
    0x00051ac8 ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
    0x00051aca b.w 0x4de58                                       |         goto label_90;
                                                                 | label_349:
    0x00051ace ldrd r2, r3, [r8, 8]                              |         __asm ("ldrd r2, r3, [r8, 8]");
    0x00051ad2 mov sl, fp                                        |         sl = fp;
    0x00051ad4 mov.w fp, 7                                       |         
    0x00051ad8 strd r2, r3, [r7, 8]                              |         __asm ("strd r2, r3, [r7, 8]");
    0x00051adc b.w 0x4de50                                       |         goto label_91;
                                                                 | label_630:
    0x00051ae0 ldr r1, [sp, 0x54]                                |         r1 = *(arg_54h);
    0x00051ae2 add r2, sp, 0xa8                                  |         r2 += arg_a8h;
    0x00051ae4 mov r0, fp                                        |         r0 = fp;
    0x00051ae6 bl 0xe308                                         |         r0 = fcn_0000e308 (r0, r1, r2);
    0x00051aea mov r6, r0                                        |         r6 = r0;
                                                                 |     }
    0x00051aec ldr r3, [sp, 0x58]                                |     r3 = *(arg_58h);
    0x00051aee adds r3, 1                                        |     r3++;
    0x00051af0 str r3, [sp, 0x58]                                |     *(arg_58h) = r3;
    0x00051af2 ldr r3, [sp, 0x4c]                                |     r3 = *(arg_4ch);
    0x00051af4 ldr r2, [r3, 0x18]                                |     r2 = *((r3 + 0x18));
    0x00051af6 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00051af8 beq.w 0x4de8e                                     |         goto label_92;
                                                                 |     }
    0x00051afc mov sl, fp                                        |     sl = fp;
    0x00051afe mov r3, r2                                        |     r3 = r2;
    0x00051b00 ldr r7, [sp, 0x50]                                |     r7 = *(arg_50h);
    0x00051b02 mov fp, r6                                        |     
    0x00051b04 ldr r2, [sp, 0x58]                                |     r2 = *(arg_58h);
    0x00051b06 b.w 0x4de58                                       |     goto label_90;
                                                                 | label_629:
    0x00051b0a ldr.w r4, [fp]                                    |     r4 = *(fp);
    0x00051b0e ldr r5, [r4, 4]                                   |     r5 = *((r4 + 4));
    0x00051b10 mov r0, r5                                        |     r0 = r5;
    0x00051b12 bl 0xd300                                         |     r0 = fcn_0000d300 (r0, r1, r2, r3, r4);
    0x00051b16 mov r7, r0                                        |     r7 = r0;
                                                                 |     if (r0 != 0) {
    0x00051b18 cbz r0, 0x51b54                                   |         
    0x00051b1a ldr r6, [sp, 0x50]                                |         r6 = *(arg_50h);
    0x00051b1c mov r2, r5                                        |         r2 = r5;
    0x00051b1e mov r1, r6                                        |         r1 = r6;
    0x00051b20 blx 0x5fcc                                        |         fcn_00005fcc ();
    0x00051b24 ldr r3, [sp, 0x3c]                                |         r3 = *(arg_3ch);
    0x00051b26 mov r0, r4                                        |         r0 = r4;
    0x00051b28 mov r2, r7                                        |         r2 = r7;
    0x00051b2a mov r1, r6                                        |         r1 = r6;
    0x00051b2c str r3, [sp]                                      |         *(sp) = r3;
    0x00051b2e movw r3, 0x101e                                   |         r3 = 0x101e;
    0x00051b32 ldr r5, [r4, 0x18]                                |         r5 = *((r4 + 0x18));
    0x00051b34 blx r5                                            |         r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                 |         if (r0 == 0) {
    0x00051b36 cbnz r0, 0x51b3c                                  |             
    0x00051b38 str r7, [sp, 0x50]                                |             *(arg_50h) = r7;
    0x00051b3a b 0x51a2e                                         |             goto label_93;
                                                                 |         }
    0x00051b3c mov sl, fp                                        |         sl = fp;
    0x00051b3e mov fp, r0                                        |         
    0x00051b40 mov r0, r7                                        |         r0 = r7;
    0x00051b42 blx 0x6050                                        |         fcn_00006050 ();
    0x00051b46 ldr r2, [sp, 0x58]                                |         r2 = *(arg_58h);
    0x00051b48 ldr r3, [sp, 0x4c]                                |         r3 = *(arg_4ch);
    0x00051b4a ldr r7, [sp, 0x50]                                |         r7 = *(arg_50h);
    0x00051b4c adds r2, 1                                        |         r2++;
    0x00051b4e ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
    0x00051b50 b.w 0x4de58                                       |         goto label_90;
                                                                 |     }
    0x00051b54 ldr r2, [sp, 0x58]                                |     r2 = *(arg_58h);
    0x00051b56 mov sl, fp                                        |     sl = fp;
    0x00051b58 ldr r3, [sp, 0x4c]                                |     r3 = *(arg_4ch);
    0x00051b5a mov.w fp, 7                                       |     
    0x00051b5e adds r2, 1                                        |     r2++;
    0x00051b60 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x00051b62 b.w 0x4de58                                       |     goto label_90;
                                                                 | label_577:
    0x00051b66 ldrb r1, [r2, 2]                                  |     r1 = *((r2 + 2));
    0x00051b68 add.w r3, r4, r3, lsl 1                           |     r3 = r4 + (r3 << 1);
    0x00051b6c ldrh.w r3, [r3, 0x56]                             |     r3 = *((r3 + 0x56));
    0x00051b70 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00051b72 bne.w 0x50e10                                     |         goto label_94;
                                                                 |     }
    0x00051b76 adds r5, r0, r5                                   |     r5 = r0 + r5;
    0x00051b78 adc r7, r7, 0                                     |     __asm ("adc r7, r7, 0");
    0x00051b7c b.w 0x50e10                                       |     goto label_94;
                                                                 | label_628:
    0x00051b80 mov sl, fp                                        |     sl = fp;
    0x00051b82 mov fp, r6                                        |     
    0x00051b84 b.w 0x4de54                                       |     goto label_95;
                                                                 | label_578:
    0x00051b88 ldrb r3, [r2, 5]                                  |     r3 = *((r2 + 5));
    0x00051b8a mov r0, r4                                        |     r0 = r4;
    0x00051b8c add r3, r1                                        |     r3 += r1;
    0x00051b8e ldr r1, [r3, 8]                                   |     r1 = *((r3 + 8));
    0x00051b90 rev r1, r1                                        |     r1 = SWAP32 (r1);
    0x00051b92 bl 0x2e704                                        |     fcn_0002e704 (r0, r1, r2, r3);
    0x00051b96 b.w 0x50e3a                                       |     goto label_96;
                                                                 | label_562:
    0x00051b9a ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x00051b9c cmp r2, 0x1f                                      |     
                                                                 |     if (r2 > 0x1f) {
    0x00051b9e bgt.w 0x50a76                                     |         goto label_97;
                                                                 |     }
    0x00051ba2 lsr.w r2, r6, r2                                  |     r2 = r6 >> r2;
    0x00051ba6 lsls r0, r2, 0x1f                                 |     r0 = r2 << 0x1f;
                                                                 |     if (r0 < r2) {
    0x00051ba8 bmi.w 0x50a68                                     |         goto label_98;
                                                                 |     }
    0x00051bac b.w 0x50a76                                       |     goto label_97;
                                                                 | label_341:
    0x00051bb0 ldr r3, [sp, 0x48]                                |     r3 = *(arg_48h);
    0x00051bb2 ldr r4, [r3]                                      |     r4 = *(r3);
    0x00051bb4 mov r0, r4                                        |     r0 = r4;
    0x00051bb6 bl 0x2e878                                        |     r0 = fcn_0002e878 (r0);
    0x00051bba mov r6, r0                                        |     r6 = r0;
    0x00051bbc cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00051bbe bne.w 0x5240e                                     |         goto label_631;
                                                                 |     }
    0x00051bc2 ldrb.w r3, [r4, 0x51]                             |     r3 = *((r4 + 0x51));
    0x00051bc6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00051bc8 bne.w 0x531b2                                     |         goto label_632;
                                                                 |     }
    0x00051bcc ldr r2, [sp, 0x48]                                |     r2 = *(arg_48h);
    0x00051bce strh r3, [r2, 0x1a]                               |     *((r2 + 0x1a)) = r3;
    0x00051bd0 str r3, [r2, 0x44]                                |     *((r2 + 0x44)) = r3;
    0x00051bd2 movs r3, 1                                        |     r3 = 1;
    0x00051bd4 strb r3, [r2, 0x19]                               |     *((r2 + 0x19)) = r3;
    0x00051bd6 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00051bd8 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00051bda str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00051bdc b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_544:
    0x00051be0 ldr r0, [r4, 8]                                   |     r0 = *((r4 + 8));
    0x00051be2 add.w ip, sp, 0xd8                                |     
    0x00051be6 ldr r1, [r4, 0xc]                                 |     r1 = *((r4 + 0xc));
    0x00051be8 mov r3, ip                                        |     r3 = ip;
    0x00051bea stm r3!, {r0, r1}                                 |     *(r3!) = r0;
                                                                 |     *((r3! + 4)) = r1;
    0x00051bec mov r3, r0                                        |     r3 = r0;
    0x00051bee movs r0, 8                                        |     r0 = 8;
    0x00051bf0 b.w 0x50720                                       |     goto label_99;
                                                                 | label_605:
    0x00051bf4 vmov r0, r1, d11                                  |     __asm ("vmov r0, r1, d11");
    0x00051bf8 bl 0x5e5dc                                        |     r0 = fcn_0005e5dc (r0, r1);
    0x00051bfc orrs.w r3, r1, r0                                 |     r3 = r1 | r0;
    0x00051c00 mov r6, r0                                        |     r6 = r0;
    0x00051c02 mov r5, r1                                        |     r5 = r1;
                                                                 |     if (r3 != r1) {
    0x00051c04 bne.w 0x540f8                                     |         goto label_633;
                                                                 |     }
                                                                 | label_290:
    0x00051c08 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051c0a add.w r8, r3, 1                                   |     r8 = r3 + 1;
                                                                 | label_617:
    0x00051c0e ldr r0, [sp, 0x38]                                |     r0 = *(arg_38h);
    0x00051c10 str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x00051c14 bl 0xfdb8                                         |     fcn_0000fdb8 (r0);
    0x00051c18 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_497:
    0x00051c1c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00051c1e bne.w 0x53d98                                     |         goto label_634;
                                                                 |     }
    0x00051c22 ldr.w r3, [fp, 0x94]                              |     r3 = *(arg_94h);
    0x00051c26 cmp r3, 0                                         |     
                                                                 |     if (r3 > 0) {
    0x00051c28 bgt.w 0x528ae                                     |         goto label_635;
                                                                 |     }
                                                                 | label_266:
    0x00051c2c ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00051c2e ldr r1, [r2]                                      |     r1 = *(r2);
    0x00051c30 ldr.w r0, [r1, 0x1f8]                             |     r0 = *((r1 + 0x1f8));
    0x00051c34 ldr.w r3, [r1, 0x1f0]                             |     r3 = *((r1 + 0x1f0));
    0x00051c38 ldr.w r4, [r1, 0x1fc]                             |     r4 = *((r1 + 0x1fc));
    0x00051c3c adds r3, r3, r0                                   |     r3 += r0;
    0x00051c3e ldr.w r0, [r1, 0x1f4]                             |     r0 = *((r1 + 0x1f4));
    0x00051c42 adc.w r0, r0, r4                                  |     __asm ("adc.w r0, r0, r4");
    0x00051c46 cmp r3, 1                                         |     
    0x00051c48 sbcs r0, r0, 0                                    |     __asm ("sbcs r0, r0, 0");
                                                                 |     if (r3 >= 1) {
    0x00051c4c bge.w 0x53d26                                     |         goto label_636;
                                                                 |     }
    0x00051c50 uxtb r5, r5                                       |     r5 = (int8_t) r5;
    0x00051c52 ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x00051c54 strb.w r5, [fp, 0x3e]                             |     *(arg_3eh) = r5;
    0x00051c58 bl 0x335d0                                        |     r0 = fcn_000335d0 (r0);
    0x00051c5c cmp r0, 5                                         |     
    0x00051c5e mov r4, r0                                        |     r4 = r0;
                                                                 |     if (r0 == 5) {
    0x00051c60 beq.w 0x53a54                                     |         goto label_637;
                                                                 |     }
                                                                 | label_267:
    0x00051c64 mov r0, fp                                        |     r0 = fp;
    0x00051c66 bl 0xfc88                                         |     fcn_0000fc88 (r0);
    0x00051c6a ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00051c6c ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x00051c6e cmp r3, 0                                         |     
    0x00051c70 ite eq                                            |     
                                                                 |     if (r3 != 0) {
    0x00051c72 moveq r4, 0x65                                    |         r4 = 0x65;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x00051c74 movne r4, 1                                       |         r4 = 1;
                                                                 |     }
    0x00051c76 b.w 0x4d46e                                       |     goto label_0;
                                                                 | label_356:
    0x00051c7a ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00051c7c add.w r0, r0, r0, lsl 2                           |     r0 += (r0 << 2);
    0x00051c80 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00051c82 str r3, [sp, 0x40]                                |     *(arg_40h) = r3;
    0x00051c84 add.w r3, r3, r0, lsl 2                           |     r3 += (r0 << 2);
    0x00051c88 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00051c8a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00051c8c b.w 0x4e038                                       |     goto label_100;
                                                                 | label_326:
    0x00051c90 ldr r0, [r4, 4]                                   |     r0 = *((r4 + 4));
    0x00051c92 mov r1, r7                                        |     r1 = r7;
    0x00051c94 bl 0x30bcc                                        |     r0 = fcn_00030bcc (r0, r1);
    0x00051c98 mov r6, r0                                        |     r6 = r0;
    0x00051c9a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00051c9c bne.w 0x4da28                                     |         goto label_101;
                                                                 |     }
    0x00051ca0 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00051ca2 ldr.w r8, [r4, 4]                                 |     r8 = *((r4 + 4));
    0x00051ca6 ldr.w sb, [r3, 0x10]                              |     sb = *((r3 + 0x10));
    0x00051caa cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00051cae beq.w 0x52b38                                     |         goto label_638;
                                                                 |     }
    0x00051cb2 ldrb r5, [r3, 3]                                  |     r5 = *((r3 + 3));
    0x00051cb4 mov r0, r8                                        |     r0 = r8;
    0x00051cb6 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00051cb8 bl 0xd140                                         |     fcn_0000d140 (r0);
    0x00051cbc orr r5, r5, 2                                     |     r5 |= 2;
    0x00051cc0 mov r0, r8                                        |     r0 = r8;
    0x00051cc2 mov r2, r5                                        |     r2 = r5;
    0x00051cc4 mov r1, r7                                        |     r1 = r7;
    0x00051cc6 bl 0x3496c                                        |     fcn_0003496c (r0, r1, r2, r3);
    0x00051cca ldrb.w r3, [r8, 9]                                |     r3 = *((r8 + 9));
    0x00051cce mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r3 == 0) {
    0x00051cd0 cbz r3, 0x51cde                                   |         goto label_639;
                                                                 |     }
    0x00051cd2 ldr.w r5, [r8, 0xc]                               |     r5 = *((r8 + 0xc));
    0x00051cd6 subs r5, 1                                        |     r5--;
    0x00051cd8 str.w r5, [r8, 0xc]                               |     __asm ("str.w r5, [r8, 0xc]");
    0x00051cdc cbz r5, 0x51cf0                                   |     
                                                                 |     while (1) {
                                                                 | label_639:
    0x00051cde cmp r6, 0                                         |         
                                                                 |         if (r6 == 0) {
    0x00051ce0 beq.w 0x52de4                                     |             goto label_640;
                                                                 |         }
                                                                 | label_183:
    0x00051ce4 ldrb r3, [r4, 0x1c]                               |         r3 = *((r4 + 0x1c));
    0x00051ce6 bfc r3, 2, 1                                      |         value_50 = BIT_MASK (1, );
                                                                 |         value_50 = ~value_50;
                                                                 |         r3 &= value_50;
    0x00051cea strb r3, [r4, 0x1c]                               |         *((r4 + 0x1c)) = r3;
    0x00051cec b.w 0x4da28                                       |         goto label_101;
    0x00051cf0 ldr.w r3, [r8, 4]                                 |         r3 = *((r8 + 4));
    0x00051cf4 ldr r0, [r3, 0x38]                                |         r0 = *((r3 + 0x38));
    0x00051cf6 blx 0x63dc                                        |         fcn_000063dc ();
    0x00051cfa strb.w r5, [r8, 0xa]                              |         *((r8 + 0xa)) = r5;
    0x00051cfe b 0x51cde                                         |         
                                                                 |     }
                                                                 | label_348:
    0x00051d00 cmp r2, 0x10                                      |     
    0x00051d02 mov sl, fp                                        |     sl = fp;
                                                                 |     if (r2 <= 0x10) {
    0x00051d04 ble.w 0x5363e                                     |         goto label_641;
                                                                 |     }
    0x00051d08 ldr r4, [sp, 0x4c]                                |     r4 = *(arg_4ch);
    0x00051d0a ldr r3, [sp, 0x58]                                |     r3 = *(arg_58h);
    0x00051d0c ldr r1, [sp, 0x50]                                |     r1 = *(arg_50h);
    0x00051d0e vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00051d12 str r3, [r4, 0x18]                                |     *((r4 + 0x18)) = r3;
    0x00051d14 mov r2, r3                                        |     r2 = r3;
    0x00051d16 ldr r3, [r4, 0x2c]                                |     r3 = *((r4 + 0x2c));
    0x00051d18 str r1, [r4, 0x2c]                                |     *((r4 + 0x2c)) = r1;
    0x00051d1a ldrd r0, r1, [sp, 0xa8]                           |     __asm ("ldrd r0, r1, [arg_a8h]");
    0x00051d1e str r3, [sp, 0x50]                                |     *(arg_50h) = r3;
    0x00051d20 vstr d16, [r4, 8]                                 |     __asm ("vstr d16, [r4, 8]");
    0x00051d24 strd r0, r1, [r4]                                 |     __asm ("strd r0, r1, [r4]");
    0x00051d28 vstr d16, [sp, 0xa8]                              |     __asm ("vstr d16, [sp, 0xa8]");
    0x00051d2c b.w 0x4de84                                       |     goto label_102;
                                                                 | label_359:
    0x00051d30 ldr.w fp, [sp, 0x28]                              |     fp = *(arg_28h);
    0x00051d34 strd r0, r0, [sp, 0x7c]                           |     __asm ("strd r0, r0, [sp, 0x7c]");
    0x00051d38 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_318:
    0x00051d3c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00051d3e mov sb, r7                                        |     sb = r7;
    0x00051d40 movs r5, 0                                        |     r5 = 0;
    0x00051d42 ldrb.w r8, [r3]                                   |     r8 = *(r3);
    0x00051d46 b.w 0x50f1c                                       |     goto label_103;
                                                                 | label_340:
    0x00051d4a ldrb.w r3, [r5, 0x51]                             |     r3 = *((r5 + 0x51));
    0x00051d4e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00051d50 beq.w 0x53528                                     |         goto label_642;
                                                                 |     }
    0x00051d54 cmp r3, 2                                         |     
                                                                 |     if (r3 < 2) {
    0x00051d56 bls 0x51d6e                                       |         goto label_643;
                                                                 |     }
    0x00051d58 cmp r3, 4                                         |     
    0x00051d5a it eq                                             |     
                                                                 |     if (r3 != 4) {
    0x00051d5c ldreq r6, [r5, 0x4c]                              |         r6 = *((r5 + 0x4c));
                                                                 |     }
                                                                 |     if (r3 != 4) {
    0x00051d5e beq 0x51d68                                       |         
    0x00051d60 mov r0, r5                                        |         r0 = r5;
    0x00051d62 bl 0x2eee0                                        |         r0 = fcn_0002eee0 (r0);
    0x00051d66 mov r6, r0                                        |         r6 = r0;
                                                                 |     }
    0x00051d68 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00051d6a bne.w 0x4dda4                                     |         goto label_104;
                                                                 |     }
                                                                 | label_643:
    0x00051d6e movs r1, 0                                        |     r1 = 0;
    0x00051d70 mov r3, r7                                        |     r3 = r7;
    0x00051d72 mov r2, r4                                        |     r2 = r4;
    0x00051d74 mov r0, r5                                        |     r0 = r5;
    0x00051d76 str r1, [sp]                                      |     *(sp) = r1;
    0x00051d78 bl 0x2d6d4                                        |     r0 = fcn_0002d6d4 (r0, r1, r2, r3, r4);
    0x00051d7c mov r6, r0                                        |     r6 = r0;
    0x00051d7e b.w 0x4dda4                                       |     goto label_104;
                                                                 | label_342:
    0x00051d82 ldr r3, [sp, 0x4c]                                |     r3 = *(arg_4ch);
    0x00051d84 ldr r0, [sp, 0x48]                                |     r0 = *(arg_48h);
    0x00051d86 ldr r4, [r3, 0x30]                                |     r4 = *((r3 + 0x30));
    0x00051d88 bl 0x30890                                        |     r0 = fcn_00030890 (r0);
    0x00051d8c mov r6, r0                                        |     r6 = r0;
    0x00051d8e clz r4, r4                                        |     r4 &= r4;
    0x00051d92 lsrs r4, r4, 5                                    |     r4 >>= 5;
                                                                 | label_148:
    0x00051d94 ldr r3, [sp, 0x48]                                |     r3 = *(arg_48h);
    0x00051d96 strb r4, [r3, 0x19]                               |     *((r3 + 0x19)) = r4;
    0x00051d98 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00051d9a beq.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x00051d9e b.w 0x4d734                                       |     goto label_68;
                                                                 | label_530:
    0x00051da2 ldrh r3, [r1, 0x28]                               |     r3 = *((r1 + 0x28));
    0x00051da4 subs r3, 1                                        |     r3--;
    0x00051da6 uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x00051da8 strh r3, [r1, 0x28]                               |     *((r1 + 0x28)) = r3;
    0x00051daa cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00051dac beq.w 0x50480                                     |         goto label_105;
                                                                 |     }
    0x00051db0 b.w 0x50486                                       |     goto label_106;
                                                                 | label_591:
    0x00051db4 ldr.w r6, [pc, 0xbf4]                             |     r6 = *(0x000529ac);
    0x00051db8 mov r0, fp                                        |     r0 = fp;
    0x00051dba add r6, pc                                        |     r6 += pc;
    0x00051dbc subs r7, r3, r6                                   |     r7 = r3 - r6;
    0x00051dbe bic r7, r7, 0xc0000000                            |     r7 = BIT_MASK (r7, 0xc0000000);
    0x00051dc2 adds r7, 1                                        |     r7++;
    0x00051dc4 mov r1, r7                                        |     r1 = r7;
    0x00051dc6 bl 0xd3a0                                         |     r0 = fcn_0000d3a0 (r0, r1);
    0x00051dca mov r5, r0                                        |     r5 = r0;
                                                                 |     if (r0 != 0) {
    0x00051dcc cbz r0, 0x51dd6                                   |         
    0x00051dce mov r2, r7                                        |         r2 = r7;
    0x00051dd0 mov r1, r6                                        |         r1 = r6;
    0x00051dd2 blx 0x6214                                        |         fcn_00006214 ();
                                                                 |     }
    0x00051dd6 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00051dd8 str r5, [r3, 0x2c]                                |     *((r3 + 0x2c)) = r5;
    0x00051dda ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00051ddc ldr r5, [r3, 4]                                   |     r5 = *((r3 + 4));
    0x00051dde ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x00051de2 add.w r3, r3, r5, lsl 4                           |     r3 += (r5 << 4);
    0x00051de6 ldr r0, [r3, 0xc]                                 |     r0 = *((r3 + 0xc));
    0x00051de8 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00051dea cmp r4, r3                                        |     
                                                                 |     if (r4 != r3) {
    0x00051dec beq 0x51e00                                       |         
    0x00051dee bl 0x1386c                                        |         fcn_0001386c (r0);
    0x00051df2 cmp r5, 1                                         |         
                                                                 |         if (r5 == 1) {
    0x00051df4 beq 0x51e00                                       |             goto label_644;
                                                                 |         }
    0x00051df6 ldr.w r3, [fp, 0x10]                              |         r3 = *(arg_10h);
    0x00051dfa ldr r0, [r3, 0x1c]                                |         r0 = *((r3 + 0x1c));
    0x00051dfc bl 0x1386c                                        |         fcn_0001386c (r0);
                                                                 |     }
                                                                 | label_644:
    0x00051e00 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051e02 mov.w sb, 0x11                                    |     sb = 0x11;
    0x00051e06 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00051e08 adds r3, 1                                        |     r3++;
    0x00051e0a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00051e0c ldrb.w r3, [r2, 0x58]                             |     r3 = *((r2 + 0x58));
    0x00051e10 orr r3, r3, 0x20                                  |     r3 |= 0x20;
    0x00051e14 strb.w r3, [r2, 0x58]                             |     *((r2 + 0x58)) = r3;
    0x00051e18 b.w 0x4d742                                       |     goto label_25;
                                                                 | label_368:
    0x00051e1c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00051e1e ldrb r3, [r3, 3]                                  |     r3 = *((r3 + 3));
    0x00051e20 lsls r0, r3, 0x1a                                 |     r0 = r3 << 0x1a;
                                                                 |     if (r0 < r3) {
    0x00051e22 bmi.w 0x4e350                                     |         goto label_107;
                                                                 |     }
    0x00051e26 ldrh r3, [r4, 0x16]                               |     r3 = *((r4 + 0x16));
    0x00051e28 mov r6, r3                                        |     r6 = r3;
    0x00051e2a b.w 0x4e3e0                                       |     goto label_108;
                                                                 | label_366:
    0x00051e2e ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00051e30 ldr r2, [r5, 0x10]                                |     r2 = *((r5 + 0x10));
    0x00051e32 str r2, [r3]                                      |     *(r3) = r2;
    0x00051e34 ldr.w r3, [fp, 0x18]                              |     r3 = *(arg_18h);
    0x00051e38 orr r3, r3, 2                                     |     r3 |= 2;
    0x00051e3c str.w r3, [fp, 0x18]                              |     __asm ("str.w r3, [arg_18h]");
    0x00051e40 b.w 0x4e290                                       |     goto label_109;
                                                                 | label_361:
    0x00051e44 mov r0, r4                                        |     r0 = r4;
    0x00051e46 ldr r2, [sp, 0x70]                                |     r2 = *(arg_70h);
    0x00051e48 movs r1, 0x63                                     |     r1 = 0x63;
    0x00051e4a bl 0x25cf0                                        |     fcn_00025cf0 (r0, r1, r2);
    0x00051e4e ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x00051e50 lsls r0, r3, 0x1d                                 |     r0 = r3 << 0x1d;
                                                                 |     if (r0 < r3) {
    0x00051e52 bmi.w 0x4e17c                                     |         goto label_110;
                                                                 |     }
    0x00051e56 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00051e58 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00051e5a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00051e5c beq.w 0x53fec                                     |         goto label_645;
                                                                 |     }
    0x00051e60 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00051e62 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_509:
    0x00051e66 add r0, sp, 0xe0                                  |     r0 += arg_e0h;
    0x00051e68 blx 0x5f0c                                        |     fcn_00005f0c ();
    0x00051e6c ldr.w r2, [pc, 0xb40]                             |     r2 = *(0x000529b0);
    0x00051e70 mov r3, r0                                        |     r3 = r0;
    0x00051e72 ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x00051e74 mov r1, fp                                        |     r1 = fp;
    0x00051e76 add r2, pc                                        |     r2 += pc;
    0x00051e78 adds r0, 0x2c                                     |     r0 += 0x2c;
    0x00051e7a bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x00051e7e ldr r6, [r7, 0x40]                                |     r6 = *((r7 + 0x40));
    0x00051e80 b.w 0x501cc                                       |     goto label_111;
                                                                 | label_512:
    0x00051e84 add r0, sp, 0xe0                                  |     r0 += arg_e0h;
    0x00051e86 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00051e8a b.w 0x5021a                                       |     goto label_112;
                                                                 | label_612:
    0x00051e8e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00051e90 bne.w 0x52cce                                     |         goto label_646;
                                                                 |     }
    0x00051e94 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051e96 adds r3, 1                                        |     r3++;
    0x00051e98 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00051e9a b.w 0x51622                                       |     goto label_113;
                                                                 | label_330:
    0x00051e9e bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x00051ea2 cmp.w r8, 0x2d                                    |     
    0x00051ea6 vcmp.f64 d0, 0                                    |     __asm ("vcmp.f64 d0, 0");
                                                                 |     if (r8 == 0x2d) {
    0x00051eaa beq.w 0x52ce8                                     |         goto label_647;
                                                                 |     }
    0x00051eae vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
    0x00051eb2 ite ne                                            |     
                                                                 |     if (r8 == 0x2d) {
    0x00051eb4 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r8 != 0x2d) {
    0x00051eb6 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 | label_176:
    0x00051eb8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00051eba bne.w 0x4db3a                                     |         goto label_114;
                                                                 |     }
    0x00051ebe ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051ec0 adds r3, 1                                        |     r3++;
    0x00051ec2 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00051ec4 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_424:
    0x00051ec8 ldr.w r3, [pc, 0xae8]                             |     
    0x00051ecc add r3, pc                                        |     r3 = 0xa4884;
    0x00051ece b.w 0x4f0f4                                       |     goto label_115;
                                                                 | label_335:
    0x00051ed2 mov r0, r4                                        |     r0 = r4;
    0x00051ed4 bl 0x173c0                                        |     r0 = fcn_000173c0 (r0);
    0x00051ed8 mov r6, r0                                        |     r6 = r0;
    0x00051eda cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00051edc beq.w 0x4dc64                                     |         goto label_116;
                                                                 |     }
    0x00051ee0 b.w 0x4f48c                                       |     goto label_27;
                                                                 | label_540:
    0x00051ee4 bic r2, r6, 0x3fc0                                |     r2 = BIT_MASK (r6, 0x3fc0);
    0x00051ee8 bic r2, r2, 0x3f                                  |     r2 = BIT_MASK (r2, 0x3f);
    0x00051eec cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00051eee beq.w 0x52e7a                                     |         goto label_648;
                                                                 |     }
    0x00051ef2 mov r2, r6                                        |     r2 = r6;
    0x00051ef4 mov r0, sb                                        |     r0 = sb;
    0x00051ef6 bl 0x9cd4                                         |     r0 = fcn_00009cd4 (r0, r1, r2);
    0x00051efa uxtb r5, r0                                       |     r5 = (int8_t) r0;
    0x00051efc b.w 0x506be                                       |     goto label_117;
                                                                 | label_491:
    0x00051f00 mov r4, r0                                        |     r4 = r0;
    0x00051f02 bl 0xff6c                                         |     fcn_0000ff6c (r0);
    0x00051f06 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x00051f08 lsls r1, r3, 0x1a                                 |     r1 = r3 << 0x1a;
                                                                 |     if (r1 < r3) {
    0x00051f0a bmi.w 0x4ff74                                     |         goto label_118;
                                                                 |     }
    0x00051f0e b.w 0x4d4ec                                       |     goto label_6;
                                                                 | label_482:
    0x00051f12 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051f14 ldr r0, [sp, 0x38]                                |     r0 = *(arg_38h);
    0x00051f16 adds r3, 1                                        |     r3++;
    0x00051f18 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00051f1a bl 0xfdb8                                         |     fcn_0000fdb8 (r0);
    0x00051f1e b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_443:
    0x00051f22 ldr.w r0, [sb, 0x24]                              |     r0 = *((sb + 0x24));
    0x00051f26 movs r2, 1                                        |     r2 = 1;
    0x00051f28 ldr r4, [sp, 0x24]                                |     r4 = *((sp + 0x24));
    0x00051f2a ldr r5, [r0]                                      |     r5 = *(r0);
    0x00051f2c ldrb.w r3, [r4, 0x58]                             |     r3 = *((r4 + 0x58));
    0x00051f30 ldr.w r8, [r5]                                    |     r8 = *(r5);
    0x00051f34 bfi r3, r2, 2, 2                                  |     value_51 = BIT_MASK (2, 2);
                                                                 |     value_52 = r2 & value_51;
                                                                 |     value_51 = ~value_51;
                                                                 |     r3 &= value_51;
                                                                 |     r3 |= value_52;
    0x00051f38 strb.w r3, [r4, 0x58]                             |     *((r4 + 0x58)) = r3;
    0x00051f3c ldr.w r3, [r8, 0x24]                              |     r3 = *((r8 + 0x24));
    0x00051f40 blx r3                                            |     uint32_t (*r3)(uint32_t) (r3);
    0x00051f42 ldrb.w r3, [r4, 0x58]                             |     r3 = *((r4 + 0x58));
    0x00051f46 mov r6, r0                                        |     r6 = r0;
    0x00051f48 bfi r3, r7, 2, 2                                  |     value_53 = BIT_MASK (2, 2);
                                                                 |     value_54 = r7 & value_53;
                                                                 |     value_53 = ~value_53;
                                                                 |     r3 &= value_53;
                                                                 |     r3 |= value_54;
    0x00051f4c strb.w r3, [r4, 0x58]                             |     *((r4 + 0x58)) = r3;
    0x00051f50 mov r3, r4                                        |     r3 = r4;
    0x00051f52 ldr r4, [r4]                                      |     r4 = *(r4);
    0x00051f54 ldr r1, [r3, 0x2c]                                |     r1 = *((r3 + 0x2c));
    0x00051f56 str r3, [sp, 0x24]                                |     *((sp + 0x24)) = r3;
    0x00051f58 mov r0, r4                                        |     r0 = r4;
    0x00051f5a bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00051f5e ldr r1, [r5, 8]                                   |     r1 = *((r5 + 8));
    0x00051f60 mov r0, r4                                        |     r0 = r4;
    0x00051f62 bl 0xd418                                         |     fcn_0000d418 (r0, r1);
    0x00051f66 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00051f68 str r0, [r3, 0x2c]                                |     *((r3 + 0x2c)) = r0;
    0x00051f6a ldr r0, [r5, 8]                                   |     r0 = *((r5 + 8));
    0x00051f6c blx 0x6050                                        |     fcn_00006050 ();
    0x00051f70 str r7, [r5, 8]                                   |     *((r5 + 8)) = r7;
                                                                 |     if (r6 != 0) {
    0x00051f72 cbnz r6, 0x51f84                                  |         goto label_649;
                                                                 |     }
    0x00051f74 ldr.w r3, [r8, 0x28]                              |     r3 = *((r8 + 0x28));
    0x00051f78 ldr.w r0, [sb, 0x24]                              |     r0 = *((sb + 0x24));
    0x00051f7c blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00051f7e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00051f80 bne.w 0x4db8a                                     |         goto label_11;
                                                                 |     }
                                                                 | label_649:
    0x00051f84 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00051f86 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00051f88 subs r3, 1                                        |     r3--;
    0x00051f8a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00051f8c b.w 0x4db8a                                       |     goto label_11;
                                                                 | label_387:
    0x00051f90 ldr r0, [sp, 0x38]                                |     r0 = *(arg_38h);
    0x00051f92 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00051f96 b.w 0x4e696                                       |     goto label_119;
                                                                 | label_392:
    0x00051f9a ldr r0, [sp, 0x38]                                |     r0 = *(arg_38h);
    0x00051f9c bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00051fa0 b.w 0x4e84e                                       |     goto label_120;
                                                                 | label_391:
    0x00051fa4 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x00051fa6 lsls r1, r1, 0x11                                 |     r1 <<= 0x11;
    0x00051fa8 ldr r0, [r7, 0x18]                                |     r0 = *((r7 + 0x18));
    0x00051faa it mi                                             |     
                                                                 |     if (r1 >= r1) {
    0x00051fac ldrmi r1, [r7, 0x10]                              |         r1 = *((r7 + 0x10));
                                                                 |     }
    0x00051fae ldr r3, [r3, 0x58]                                |     r3 = *((r3 + 0x58));
    0x00051fb0 it mi                                             |     
                                                                 |     if (r1 >= r1) {
    0x00051fb2 addmi r0, r0, r1                                  |         r0 += r1;
                                                                 |     }
    0x00051fb4 cmp r3, r0                                        |     
                                                                 |     if (r3 >= r0) {
    0x00051fb6 bge.w 0x4e840                                     |         goto label_121;
                                                                 |     }
    0x00051fba b.w 0x4f592                                       |     goto label_30;
                                                                 | label_412:
    0x00051fbe movs r6, 0                                        |     r6 = 0;
    0x00051fc0 b.w 0x4edec                                       |     goto label_58;
                                                                 | label_322:
    0x00051fc4 bl 0xa1d8                                         |     fcn_0000a1d8 (r0);
    0x00051fc8 orrs r0, r1                                       |     r0 |= r1;
    0x00051fca ite ne                                            |     
                                                                 |     if (r0 == r1) {
    0x00051fcc movne r4, 1                                       |         r4 = 1;
                                                                 |     }
                                                                 |     if (r0 != r1) {
    0x00051fce moveq r4, 0                                       |         r4 = 0;
                                                                 |     }
    0x00051fd0 add.w r4, r4, r4, lsl 1                           |     r4 += (r4 << 1);
    0x00051fd4 b.w 0x4d972                                       |     goto label_122;
                                                                 | label_324:
    0x00051fd8 ldr.w r2, [pc, 0x9dc]                             |     
    0x00051fdc add r2, pc                                        |     r2 = 0xa4998;
    0x00051fde add r3, r2                                        |     r3 += r2;
    0x00051fe0 ldrb.w r2, [r3, 0xc2c]                            |     r2 = *((r3 + 0xc2c));
    0x00051fe4 b.w 0x4d9a2                                       |     goto label_123;
                                                                 | label_323:
    0x00051fe8 bl 0xa1d8                                         |     fcn_0000a1d8 (r0);
    0x00051fec orrs r0, r1                                       |     r0 |= r1;
    0x00051fee ite ne                                            |     
                                                                 |     if (r0 == r1) {
    0x00051ff0 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r0 != r1) {
    0x00051ff2 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00051ff4 b.w 0x4d98c                                       |     goto label_124;
                                                                 | label_325:
    0x00051ff8 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x00051ffa orr r3, r3, 1                                     |     r3 |= 1;
    0x00051ffe strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x00052000 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_394:
    0x00052004 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00052008 vstr d16, [sp, 0xa8]                              |     __asm ("vstr d16, [sp, 0xa8]");
    0x0005200c ldrb.w r2, [r5, 0x51]                             |     r2 = *((r5 + 0x51));
    0x00052010 cmp r2, 1                                         |     
                                                                 |     if (r2 == 1) {
    0x00052012 bne 0x52022                                       |         
    0x00052014 add r3, sp, 0xa8                                  |         r3 += arg_a8h;
    0x00052016 mov r0, r5                                        |         r0 = r5;
    0x00052018 mov r4, r3                                        |         r4 = r3;
    0x0005201a mov r1, r3                                        |         r1 = r3;
    0x0005201c bl 0xb5cc                                         |         fcn_0000b5cc (r0, r1);
    0x00052020 ldr r4, [r4]                                      |         r4 = *(r4);
                                                                 |     }
    0x00052022 add.w sl, sp, 0xb0                                |     sl += arg_b0h;
    0x00052026 movs r2, 0x28                                     |     r2 = 0x28;
    0x00052028 movs r1, 0                                        |     r1 = 0;
    0x0005202a mov r0, sl                                        |     r0 = sl;
    0x0005202c blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00052030 mov r2, r4                                        |     r2 = r4;
    0x00052032 mov r0, r5                                        |     r0 = r5;
    0x00052034 movs r3, 1                                        |     r3 = 1;
    0x00052036 movs r1, 0                                        |     r1 = 0;
    0x00052038 str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x0005203c bl 0x2f238                                        |     r0 = fcn_0002f238 (r0, r1, r2, r3, r4);
    0x00052040 mov r6, r0                                        |     r6 = r0;
    0x00052042 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00052044 bne.w 0x528f6                                     |         goto label_207;
                                                                 |     }
    0x00052048 ldr.w r5, [sl, 4]                                 |     r5 = *((sl + 4));
    0x0005204c ldrb r3, [r5]                                     |     r3 = *(r5);
    0x0005204e lsls r2, r3, 0x18                                 |     r2 = r3 << 0x18;
                                                                 |     if (r2 < r3) {
    0x00052050 bmi.w 0x5365a                                     |         goto label_650;
                                                                 |     }
    0x00052054 mov r4, r3                                        |     r4 = r3;
    0x00052056 str r3, [sp, 0x90]                                |     *(arg_90h) = r3;
                                                                 | label_224:
    0x00052058 cmp r4, 2                                         |     
                                                                 |     if (r4 < 2) {
    0x0005205a bls.w 0x52a9a                                     |         goto label_651;
                                                                 |     }
    0x0005205e ldr.w r7, [sl, 0x18]                              |     r7 = *((sl + 0x18));
    0x00052062 cmp r7, r4                                        |     
                                                                 |     if (r7 < r4) {
    0x00052064 blt.w 0x52a9a                                     |         goto label_651;
                                                                 |     }
    0x00052068 subs r2, r4, 1                                    |     r2 = r4 - 1;
    0x0005206a ldrb r1, [r5, r2]                                 |     r1 = *((r5 + r2));
    0x0005206c adds r0, r5, r2                                   |     r0 = r5 + r2;
    0x0005206e lsls r3, r1, 0x18                                 |     r3 = r1 << 0x18;
    0x00052070 it pl                                             |     
                                                                 |     if (r3 < r1) {
    0x00052072 strpl r1, [sp, 0x94]                              |         *(arg_94h) = r1;
                                                                 |     }
                                                                 |     if (r3 < r1) {
    0x00052074 bmi.w 0x53a72                                     |         goto label_652;
                                                                 |     }
                                                                 | label_247:
    0x00052078 sub.w r3, r1, 7                                   |     r3 = r1 - 7;
    0x0005207c subs r2, r1, 1                                    |     r2 = r1 - 1;
    0x0005207e clz r3, r3                                        |     r3 &= r3;
    0x00052082 ldrh.w r6, [sl, 0x1c]                             |     r6 = *((sl + 0x1c));
    0x00052086 lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x00052088 cmp r2, 8                                         |     
    0x0005208a it hi                                             |     
                                                                 |     if (r2 <= 8) {
    0x0005208c orrhi r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
    0x00052090 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00052092 bne.w 0x52a9a                                     |         goto label_651;
                                                                 |     }
    0x00052096 ldr.w r3, [pc, 0x924]                             |     r3 = *(0x000529bc);
    0x0005209a add r3, pc                                        |     r3 += pc;
    0x0005209c add r3, r1                                        |     r3 += r1;
    0x0005209e ldrb.w r2, [r3, 0xa6c]                            |     r2 = *((r3 + 0xa6c));
    0x000520a2 adds r3, r4, r2                                   |     r3 = r4 + r2;
    0x000520a4 cmp r7, r3                                        |     
                                                                 |     if (r7 <= r3) {
    0x000520a6 blo.w 0x52a9a                                     |         goto label_651;
                                                                 |     }
    0x000520aa subs r0, r7, r2                                   |     r0 = r7 - r2;
    0x000520ac add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x000520ae add r0, r5                                        |     r0 += r5;
    0x000520b0 mov r2, r7                                        |     r2 = r7;
    0x000520b2 bl 0xbe30                                         |     fcn_0000be30 (r0, r1, r2);
    0x000520b6 movw r3, 0x2460                                   |     r3 = 0x2460;
    0x000520ba ldrd r4, r5, [sp, 0xe8]                           |     __asm ("ldrd r4, r5, [arg_e8h]");
    0x000520be tst r6, r3                                        |     
                                                                 |     if ((r6 & r3) != 0) {
    0x000520c0 bne.w 0x5408c                                     |         goto label_653;
                                                                 |     }
                                                                 | label_287:
    0x000520c4 ldr.w r1, [sl, 0x24]                              |     r1 = *((sl + 0x24));
                                                                 |     if (r1 != 0) {
    0x000520c8 cbz r1, 0x520d2                                   |         
    0x000520ca ldr.w r0, [sl]                                    |         r0 = *(sl);
    0x000520ce bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
                                                                 |     }
    0x000520d2 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000520d4 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x000520d6 adds r3, 1                                        |     r3++;
    0x000520d8 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000520da movs r3, 4                                        |     r3 = 4;
    0x000520dc strd r4, r5, [r2, 0x10]                           |     __asm ("strd r4, r5, [r2, 0x10]");
    0x000520e0 strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x000520e2 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_314:
    0x000520e6 cmp r3, 0                                         |     
    0x000520e8 ldr r0, [r4]                                      |     r0 = *(r4);
                                                                 |     if (r3 <= 0) {
    0x000520ea ble 0x5217a                                       |         goto label_654;
                                                                 |     }
                                                                 | label_127:
    0x000520ec movs r3, 0                                        |     r3 = 0;
    0x000520ee mov r1, sl                                        |     r1 = sl;
    0x000520f0 str.w r3, [sl]                                    |     __asm ("str.w r3, [sl]");
    0x000520f4 bl 0x2f05c                                        |     r0 = fcn_0002f05c (r0, r1);
    0x000520f8 mov r6, r0                                        |     r6 = r0;
    0x000520fa cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000520fc bne.w 0x528f6                                     |         goto label_207;
                                                                 |     }
                                                                 | label_154:
    0x00052100 strb r6, [r4, 0x1a]                               |     *((r4 + 0x1a)) = r6;
    0x00052102 ldr.w r3, [sl]                                    |     r3 = *(sl);
                                                                 | label_128:
    0x00052106 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00052108 beq.w 0x52bb0                                     |         goto label_655;
                                                                 |     }
    0x0005210c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005210e ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00052110 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00052112 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_580:
    0x00052116 vldr d11, [r6, 8]                                 |     __asm ("vldr d11, [r6, 8]");
    0x0005211a bl 0x5e4a4                                        |     r0 = fcn_0005e4a4 (r0, r1, r2);
    0x0005211e vmov d16, r0, r1                                  |     __asm ("vmov d16, r0, r1");
    0x00052122 vcmpe.f64 d11, d16                                |     __asm ("vcmpe.f64 d11, d16");
    0x00052126 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r3 >= 0) {
    0x0005212a bpl.w 0x5332e                                     |         goto label_656;
                                                                 |     }
    0x0005212e tst.w r8, 1                                       |     
    0x00052132 ite eq                                            |     
                                                                 |     if ((r8 & 1) != 0) {
    0x00052134 moveq r5, r8                                      |         r5 = r8;
                                                                 |     }
                                                                 |     if ((r8 & 1) == 0) {
    0x00052136 movne r5, sb                                      |         r5 = sb;
                                                                 |     }
                                                                 | label_205:
    0x00052138 ldr.w r8, [sp, 0x28]                              |     r8 = *(arg_28h);
    0x0005213c movs r1, 0                                        |     r1 = 0;
    0x0005213e add.w sl, sp, 0xb0                                |     sl += arg_b0h;
    0x00052142 ldr r0, [r4]                                      |     r0 = *(r4);
    0x00052144 mov r2, r7                                        |     r2 = r7;
    0x00052146 str r1, [sp]                                      |     *(sp) = r1;
    0x00052148 mov r3, r8                                        |     r3 = r8;
    0x0005214a str.w sl, [sp, 4]                                 |     __asm ("str.w sl, [arg_4h]");
    0x0005214e bl 0x2e9e8                                        |     r0 = fcn_0002e9e8 (r0, r1, r2, r3, r4, r5, r6);
    0x00052152 mov r6, r0                                        |     r6 = r0;
    0x00052154 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00052156 bne.w 0x528f6                                     |         goto label_207;
                                                                 |     }
    0x0005215a ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x0005215e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00052160 bne.w 0x4d7e8                                     |         goto label_125;
                                                                 |     }
    0x00052164 cmp r5, 0x3d                                      |     
    0x00052166 mov.w r2, 1                                       |     r2 = 1;
    0x0005216a str r7, [r4, 0x38]                                |     *((r4 + 0x38)) = r7;
    0x0005216c str.w r8, [r4, 0x3c]                              |     __asm ("str.w r8, [r4, 0x3c]");
    0x00052170 str r3, [r4, 0x44]                                |     *((r4 + 0x44)) = r3;
    0x00052172 strh r2, [r4, 0x1a]                               |     *((r4 + 0x1a)) = r2;
                                                                 |     if (r5 > 0x3d) {
    0x00052174 bgt.w 0x4d7fc                                     |         goto label_126;
                                                                 |     }
    0x00052178 ldr r0, [r4]                                      |     r0 = *(r4);
                                                                 | label_654:
    0x0005217a cmp r5, 0x3c                                      |     
    0x0005217c it eq                                             |     
                                                                 |     if (r5 != 0x3c) {
    0x0005217e cmpeq r3, 0                                       |         __asm ("cmpeq r3, 0");
                                                                 |         goto label_657;
                                                                 |     }
                                                                 |     if (r5 == 0x3c) {
                                                                 | label_657:
    0x00052180 beq 0x520ec                                       |         goto label_127;
                                                                 |     }
    0x00052182 ldrb.w r3, [r0, 0x51]                             |     r3 = *((r0 + 0x51));
    0x00052186 subs r3, 1                                        |     r3--;
    0x00052188 it ne                                             |     
                                                                 |     if (r3 == 1) {
    0x0005218a movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0005218c b 0x52106                                         |     goto label_128;
                                                                 | label_469:
    0x0005218e ldr r0, [sp, 0x38]                                |     r0 = *(arg_38h);
    0x00052190 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00052194 b.w 0x4fa7a                                       |     goto label_129;
                                                                 | label_471:
    0x00052198 mov r0, r4                                        |     r0 = r4;
    0x0005219a blx 0x5f0c                                        |     fcn_00005f0c ();
    0x0005219e ldr.w r2, [pc, 0x820]                             |     
    0x000521a2 mov r3, r0                                        |     r3 = r0;
    0x000521a4 ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x000521a6 mov r1, fp                                        |     r1 = fp;
    0x000521a8 add r2, pc                                        |     r2 = 0xa4b6e;
    0x000521aa adds r0, 0x2c                                     |     r0 += 0x2c;
    0x000521ac bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x000521b0 b.w 0x4fb2e                                       |     goto label_130;
                                                                 | label_180:
    0x000521b4 mov r3, r5                                        |     r3 = r5;
    0x000521b6 ldr r4, [sp, 0x50]                                |     r4 = *(arg_50h);
    0x000521b8 mov r5, r8                                        |     r5 = r8;
    0x000521ba ldr.w r8, [sp, 0x54]                              |     r8 = *(arg_54h);
                                                                 | label_238:
    0x000521be ldr r2, [sp, 0x34]                                |     r2 = *(arg_34h);
    0x000521c0 strh r6, [r4, 0x16]                               |     *((r4 + 0x16)) = r6;
    0x000521c2 sub.w r2, sb, r2                                  |     r2 = sb - r2;
    0x000521c6 str r2, [r4, 0x50]                                |     *((r4 + 0x50)) = r2;
    0x000521c8 ldr r2, [sp, 0x4c]                                |     r2 = *(arg_4ch);
    0x000521ca cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000521cc beq.w 0x53e98                                     |         goto label_658;
                                                                 |     }
                                                                 | label_274:
    0x000521d0 cmp sb, r3                                        |     
                                                                 |     if (sb > r3) {
    0x000521d2 bhi.w 0x5399c                                     |         goto label_659;
                                                                 |     }
    0x000521d6 ldr.w r2, [sl]                                    |     r2 = *(sl);
    0x000521da ldr r1, [r4, 0x48]                                |     r1 = *((r4 + 0x48));
    0x000521dc cmp r1, r2                                        |     
                                                                 |     if (r1 <= r2) {
    0x000521de blo.w 0x5399c                                     |         goto label_659;
                                                                 |     }
    0x000521e2 ite ne                                            |     
                                                                 |     if (r1 == r2) {
    0x000521e4 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (r1 != r2) {
    0x000521e6 moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x000521e8 cmp sb, r3                                        |     
    0x000521ea ite ne                                            |     
                                                                 |     if (sb == r3) {
    0x000521ec movne r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (sb != r3) {
    0x000521ee andeq r2, r2, 1                                   |         r2 &= 1;
                                                                 |     }
    0x000521f2 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000521f4 bne.w 0x5399c                                     |         goto label_659;
                                                                 |     }
    0x000521f8 ldrh r3, [r4, 0x16]                               |     r3 = *((r4 + 0x16));
    0x000521fa ldr r2, [sp, 0x28]                                |     r2 = *(arg_28h);
    0x000521fc cmp r3, r2                                        |     
                                                                 |     if (r3 <= r2) {
    0x000521fe ble.w 0x4e3f6                                     |         goto label_131;
                                                                 |     }
                                                                 | label_373:
    0x00052202 ldr r2, [sp, 0x28]                                |     r2 = *(arg_28h);
    0x00052204 adds r3, r2, 1                                    |     r3 = r2 + 1;
    0x00052206 lsl.w sb, r2, 2                                   |     sb = r2 << 2;
    0x0005220a ldr r2, [sp, 0x3c]                                |     r2 = *(arg_3ch);
    0x0005220c ldr.w r3, [r2, r3, lsl 2]                         |     offset_55 = r3 << 2;
                                                                 |     r3 = *((r2 + offset_55));
    0x00052210 ldr r2, [r4, 0x4c]                                |     r2 = *((r4 + 0x4c));
    0x00052212 cmp r2, r3                                        |     
                                                                 |     if (r2 <= r3) {
    0x00052214 blo.w 0x52a2a                                     |         goto label_660;
                                                                 |     }
    0x00052218 ldrh r3, [r5, 0x1c]                               |     r3 = *((r5 + 0x1c));
    0x0005221a movw r2, 0x2460                                   |     r2 = 0x2460;
    0x0005221e tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x00052220 bne.w 0x53a22                                     |         goto label_661;
                                                                 |     }
                                                                 | label_243:
    0x00052224 ldr r3, [sp, 0x3c]                                |     r3 = *(arg_3ch);
    0x00052226 mov r2, r5                                        |     r2 = r5;
    0x00052228 ldr r0, [r4, 0x54]                                |     r0 = *((r4 + 0x54));
    0x0005222a ldr.w r1, [r8, sb]                                |     r1 = *((r8 + sb));
    0x0005222e ldr.w r3, [r3, sb]                                |     r3 = *((r3 + sb));
    0x00052232 add r0, r3                                        |     r0 += r3;
    0x00052234 bl 0xbe30                                         |     fcn_0000be30 (r0, r1, r2);
    0x00052238 ldrh r3, [r5, 0x1c]                               |     r3 = *((r5 + 0x1c));
    0x0005223a and r3, r3, 0x1000                                |     r3 &= 0x1000;
                                                                 | label_220:
    0x0005223e ldr r2, [sp, 0x70]                                |     r2 = *(arg_70h);
    0x00052240 strb r2, [r5, 0x1e]                               |     *((r5 + 0x1e)) = r2;
    0x00052242 b.w 0x4e414                                       |     goto label_62;
                                                                 | label_492:
    0x00052246 ldr.w r3, [sl, 0x1c]                              |     r3 = *((sl + 0x1c));
    0x0005224a ldr r2, [sp, 0x28]                                |     r2 = *(arg_28h);
    0x0005224c cmp r2, r3                                        |     
                                                                 |     if (r2 == r3) {
    0x0005224e beq 0x5232e                                       |         goto label_662;
                                                                 |     }
    0x00052250 ldr.w r8, [sl, 8]                                 |     r8 = *((sl + 8));
    0x00052254 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00052258 beq 0x52328                                       |         goto label_663;
                                                                 |     }
    0x0005225a ldrh.w r3, [sl, 0x1a]                             |     r3 = *((sl + 0x1a));
    0x0005225e lsls r2, r3, 0x1f                                 |     r2 = r3 << 0x1f;
    0x00052260 str r3, [sp, 0x3c]                                |     *(arg_3ch) = r3;
                                                                 |     if (r2 >= r3) {
    0x00052262 bpl.w 0x53588                                     |         goto label_664;
                                                                 |     }
                                                                 | label_216:
    0x00052266 ldr.w sb, [sl, 0x14]                              |     sb = *((sl + 0x14));
    0x0005226a cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x0005226e beq.w 0x53d56                                     |         goto label_665;
                                                                 |     }
    0x00052272 add r3, sp, 0xb0                                  |     r3 += arg_b0h;
    0x00052274 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00052276 str r5, [sp, 0x48]                                |     *(arg_48h) = r5;
    0x00052278 mov r5, r3                                        |     r5 = r3;
    0x0005227a mov r3, r7                                        |     r3 = r7;
    0x0005227c mov r7, r6                                        |     r7 = r6;
    0x0005227e mov r6, r3                                        |     r6 = r3;
                                                                 | label_133:
    0x00052280 ldr.w r4, [sb, 0xc]                               |     r4 = *((sb + 0xc));
                                                                 |     if (r4 == 0) {
    0x00052284 cbz r4, 0x522ca                                   |         goto label_666;
                                                                 |     }
    0x00052286 ldr r0, [r4, 0xc]                                 |     r0 = *((r4 + 0xc));
    0x00052288 mov r1, r5                                        |     r1 = r5;
                                                                 |     if (r0 == 0) {
    0x0005228a cbz r0, 0x522a6                                   |         goto label_667;
                                                                 |     }
                                                                 |     do {
    0x0005228c mov r2, r6                                        |         r2 = r6;
    0x0005228e bl 0xb924                                         |         fcn_0000b924 (r0, r1, r2, r3, r4);
    0x00052292 ldr r3, [r6]                                      |         r3 = *(r6);
    0x00052294 str r4, [r3, 8]                                   |         *((r3 + 8)) = r4;
    0x00052296 ldr r3, [r4, 8]                                   |         r3 = *((r4 + 8));
                                                                 |         if (r3 == 0) {
    0x00052298 cbz r3, 0x522ae                                   |             goto label_668;
                                                                 |         }
                                                                 | label_132:
    0x0005229a add.w r1, r4, 8                                   |         r1 = r4 + 8;
    0x0005229e mov r4, r3                                        |         r4 = r3;
    0x000522a0 ldr r0, [r4, 0xc]                                 |         r0 = *((r4 + 0xc));
    0x000522a2 cmp r0, 0                                         |         
    0x000522a4 bne 0x5228c                                       |         
                                                                 |     } while (r0 != 0);
                                                                 | label_667:
    0x000522a6 str r4, [r1]                                      |     *(r1) = r4;
    0x000522a8 ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x000522aa cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000522ac bne 0x5229a                                       |         goto label_132;
                                                                 |     }
                                                                 | label_668:
    0x000522ae str.w r3, [sb, 0xc]                               |     __asm ("str.w r3, [sb, 0xc]");
    0x000522b2 mov r1, r8                                        |     r1 = r8;
    0x000522b4 ldr r0, [r5]                                      |     r0 = *(r5);
    0x000522b6 bl 0x77d4                                         |     fcn_000077d4 (r0, r1);
    0x000522ba ldr.w r3, [sb, 8]                                 |     r3 = *((sb + 8));
    0x000522be mov r8, r0                                        |     r8 = r0;
    0x000522c0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000522c2 beq.w 0x53218                                     |         goto label_669;
                                                                 |     }
    0x000522c6 mov sb, r3                                        |     sb = r3;
    0x000522c8 b 0x52280                                         |     goto label_133;
                                                                 | label_666:
    0x000522ca ldr.w r2, [r8, 8]                                 |     r2 = *((r8 + 8));
    0x000522ce mov r6, r7                                        |     r6 = r7;
    0x000522d0 ldr r5, [sp, 0x48]                                |     r5 = *(arg_48h);
    0x000522d2 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x000522d4 str r2, [r7]                                      |     *(r7) = r2;
    0x000522d6 strd r4, r4, [r8, 8]                              |     __asm ("strd r4, r4, [r8, 8]");
    0x000522da cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000522dc beq.w 0x53fcc                                     |         goto label_670;
                                                                 |     }
    0x000522e0 movs r4, 1                                        |     r4 = 1;
    0x000522e2 mov r3, sl                                        |     r3 = sl;
    0x000522e4 mov sl, r6                                        |     sl = r6;
    0x000522e6 mov r6, r5                                        |     r6 = r5;
    0x000522e8 mov r5, r4                                        |     r5 = r4;
    0x000522ea mov r4, r2                                        |     r4 = r2;
    0x000522ec mov r2, r8                                        |     r2 = r8;
    0x000522ee mov r8, r3                                        |     r8 = r3;
    0x000522f0 b 0x522f4                                         |     
                                                                 |     while (r3 != 0) {
    0x000522f2 mov r4, r3                                        |         r4 = r3;
    0x000522f4 ldr r3, [r4, 8]                                   |         r3 = *((r4 + 8));
    0x000522f6 mov r1, r5                                        |         r1 = r5;
    0x000522f8 mov r0, r7                                        |         r0 = r7;
    0x000522fa adds r5, 1                                        |         r5++;
    0x000522fc str r3, [r7]                                      |         *(r7) = r3;
    0x000522fe str r2, [r4, 0xc]                                 |         *((r4 + 0xc)) = r2;
    0x00052300 bl 0x7858                                         |         fcn_00007858 (r0, r1);
    0x00052304 str r0, [r4, 8]                                   |         *((r4 + 8)) = r0;
    0x00052306 mov r2, r4                                        |         r2 = r4;
    0x00052308 ldr r3, [r7]                                      |         r3 = *(r7);
    0x0005230a cmp r3, 0                                         |         
    0x0005230c bne 0x522f2                                       |         
                                                                 |     }
    0x0005230e mov r5, r6                                        |     r5 = r6;
    0x00052310 mov r6, sl                                        |     r6 = sl;
    0x00052312 mov sl, r8                                        |     sl = r8;
                                                                 | label_281:
    0x00052314 str.w r2, [sb, 0xc]                               |     __asm ("str.w r2, [sb, 0xc]");
                                                                 | label_242:
    0x00052318 ldr r3, [sp, 0x3c]                                |     r3 = *(arg_3ch);
    0x0005231a orr r3, r3, 1                                     |     r3 |= 1;
    0x0005231e strh.w r3, [sl, 0x1a]                             |     *((sl + 0x1a)) = r3;
    0x00052322 movs r3, 0                                        |     r3 = 0;
    0x00052324 strd r3, r3, [sl, 8]                              |     __asm ("strd r3, r3, [sl, 8]");
                                                                 | label_663:
    0x00052328 ldr r3, [sp, 0x28]                                |     r3 = *(arg_28h);
    0x0005232a str.w r3, [sl, 0x1c]                              |     __asm ("str.w r3, [sl, 0x1c]");
                                                                 | label_662:
    0x0005232e ldr.w r4, [sl, 0x14]                              |     r4 = *((sl + 0x14));
                                                                 |     if (r4 == 0) {
    0x00052332 cbz r4, 0x5235c                                   |         goto label_671;
                                                                 |     }
                                                                 | label_135:
    0x00052334 ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
                                                                 |     if (r3 == 0) {
                                                                 |         do {
                                                                 | label_134:
    0x00052336 cbz r3, 0x52356                                   |             goto label_672;
                                                                 |         }
    0x00052338 ldrd r1, r2, [r3]                                 |         __asm ("ldrd r1, r2, [r3]");
    0x0005233c cmp r1, r5                                        |         
    0x0005233e sbcs.w r0, r2, r6                                 |         __asm ("sbcs.w r0, r2, r6");
                                                                 |         if (r1 >= r5) {
    0x00052342 bge 0x52348                                       |             goto label_673;
                                                                 |         }
    0x00052344 ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
    0x00052346 b 0x52336                                         |         
                                                                 |     } while (1);
                                                                 | label_673:
    0x00052348 cmp r5, r1                                        |     
    0x0005234a sbcs.w r2, r6, r2                                 |     __asm ("sbcs.w r2, r6, r2");
                                                                 |     if (r5 >= r1) {
    0x0005234e bge.w 0x52b9c                                     |         goto label_674;
                                                                 |     }
    0x00052352 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00052354 b 0x52336                                         |     goto label_134;
                                                                 | label_672:
    0x00052356 ldr r4, [r4, 8]                                   |     r4 = *((r4 + 8));
    0x00052358 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x0005235a bne 0x52334                                       |         goto label_135;
                                                                 |     }
                                                                 | label_671:
    0x0005235c ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005235e add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x00052362 ldr r3, [sp, 0x28]                                |     r3 = *(arg_28h);
    0x00052364 cmp r3, 0                                         |     
    0x00052366 itt ge                                            |     
                                                                 |     if (r3 < 0) {
    0x00052368 ldrge r3, [sp, 0x2c]                              |         r3 = *(arg_2ch);
                                                                 |     }
                                                                 |     if (r3 >= 0) {
    0x0005236a ldrge sl, [r3, 0x10]                              |         sl = *((r3 + 0x10));
                                                                 |         goto label_675;
                                                                 |     }
                                                                 |     if (r3 >= 0) {
                                                                 | label_675:
    0x0005236e bge.w 0x4ff8e                                     |         goto label_136;
                                                                 |     }
    0x00052372 str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x00052376 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_372:
    0x0005237a ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005237c mov.w sb, 0xb                                     |     sb = 0xb;
    0x00052380 adds r3, 1                                        |     r3++;
    0x00052382 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00052384 blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x00052388 ldr.w r1, [pc, 0x638]                             |     r1 = *(0x000529c4);
    0x0005238c movw r2, 0x1e83                                   |     
    0x00052390 add.w r3, r0, 0x14                                |     r3 = r0 + 0x14;
    0x00052394 movt r2, 1                                        |     r2 = 0x11e83;
    0x00052398 movs r0, 0xb                                      |     r0 = 0xb;
    0x0005239a add r1, pc                                        |     r1 += pc;
    0x0005239c blx 0x6820                                        |     fcn_00006820 ();
    0x000523a0 b.w 0x4d742                                       |     goto label_25;
                                                                 | label_539:
    0x000523a4 asrs r1, r6, 0x1f                                 |     r1 = r6 >> 0x1f;
    0x000523a6 mov r2, r6                                        |     r2 = r6;
    0x000523a8 mov.w ip, 0                                       |     
                                                                 |     do {
    0x000523ac lsrs r2, r2, 7                                    |         r2 >>= 7;
    0x000523ae mov r0, ip                                        |         r0 = ip;
    0x000523b0 add.w ip, ip, 1                                   |         
    0x000523b4 orr.w r2, r2, r1, lsl 25                          |         r2 |= (r1 << 25);
    0x000523b8 lsrs r1, r1, 7                                    |         r1 >>= 7;
    0x000523ba cmp.w ip, 8                                       |         
    0x000523be orr.w lr, r2, r1                                  |         lr = r2 | r1;
    0x000523c2 ite gt                                            |         
                                                                 |         if (ip <= 8) {
    0x000523c4 movgt r3, 0                                       |             r3 = 0;
                                                                 |         }
                                                                 |         if (ip > 8) {
    0x000523c6 movle r3, 1                                       |             r3 = 1;
                                                                 |         }
    0x000523c8 cmp.w lr, 0                                       |         
    0x000523cc it eq                                             |         
                                                                 |         if (lr != 0) {
    0x000523ce moveq r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x000523d0 cmp r3, 0                                         |         
    0x000523d2 bne 0x523ac                                       |         
                                                                 |     } while (r3 != 0);
    0x000523d4 add r6, ip                                        |     r6 += ip;
    0x000523d6 mov lr, r0                                        |     lr = r0;
    0x000523d8 asr.w sb, r6, 0x1f                                |     sb = r6 >> 0x1f;
    0x000523dc mov r2, r6                                        |     r2 = r6;
    0x000523de mov r1, sb                                        |     r1 = sb;
                                                                 |     do {
    0x000523e0 lsrs r2, r2, 7                                    |         r2 >>= 7;
    0x000523e2 mov sl, r3                                        |         sl = r3;
    0x000523e4 adds r3, 1                                        |         r3++;
    0x000523e6 orr.w r2, r2, r1, lsl 25                          |         r2 |= (r1 << 25);
    0x000523ea lsrs r1, r1, 7                                    |         r1 >>= 7;
    0x000523ec cmp r3, 8                                         |         
    0x000523ee orr.w ip, r2, r1                                  |         
    0x000523f2 ite gt                                            |         
                                                                 |         if (r3 <= 8) {
    0x000523f4 movgt r0, 0                                       |             r0 = 0;
                                                                 |         }
                                                                 |         if (r3 > 8) {
    0x000523f6 movle r0, 1                                       |             r0 = 1;
                                                                 |         }
    0x000523f8 cmp.w ip, 0                                       |         
    0x000523fc it eq                                             |         
                                                                 |         if (ip != 0) {
    0x000523fe moveq r0, 0                                       |             r0 = 0;
                                                                 |         }
    0x00052400 cmp r0, 0                                         |         
    0x00052402 bne 0x523e0                                       |         
                                                                 |     } while (r0 != 0);
    0x00052404 cmp sl, lr                                        |     
                                                                 |     if (sl <= lr) {
    0x00052406 ble.w 0x50684                                     |         goto label_137;
                                                                 |     }
    0x0005240a b.w 0x5067e                                       |     goto label_138;
                                                                 | label_631:
    0x0005240e ldrd r2, r3, [sp, 0x48]                           |     __asm ("ldrd r2, r3, [arg_48h]");
    0x00052412 str r3, [r2, 0x44]                                |     *((r2 + 0x44)) = r3;
    0x00052414 strh r3, [r2, 0x1a]                               |     *((r2 + 0x1a)) = r3;
    0x00052416 movs r3, 1                                        |     r3 = 1;
    0x00052418 strb r3, [r2, 0x19]                               |     *((r2 + 0x19)) = r3;
    0x0005241a b.w 0x4d734                                       |     goto label_68;
                                                                 | label_474:
    0x0005241e ldr r3, [r3, 0x30]                                |     r3 = *((r3 + 0x30));
    0x00052420 ldrd r5, r4, [r3]                                 |     __asm ("ldrd r5, r4, [r3]");
    0x00052424 b.w 0x4fbb8                                       |     void (*0x4fbb8)() ();
                                                                 | label_473:
    0x00052428 ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x0005242c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005242e beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
                                                                 |     do {
    0x00052432 ldrb.w r2, [r3, 0x58]                             |         r2 = *((r3 + 0x58));
    0x00052436 orr r2, r2, 0x20                                  |         r2 |= 0x20;
    0x0005243a strb.w r2, [r3, 0x58]                             |         *((r3 + 0x58)) = r2;
    0x0005243e ldr r3, [r3, 0x34]                                |         r3 = *((r3 + 0x34));
    0x00052440 cmp r3, 0                                         |         
    0x00052442 bne 0x52432                                       |         
                                                                 |     } while (r3 != 0);
    0x00052444 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_329:
    0x00052448 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005244a ldr.w r8, [r3, 0x10]                              |     r8 = *((r3 + 0x10));
    0x0005244e ldrh.w r2, [r8, 6]                                |     r2 = *((r8 + 6));
    0x00052452 ldrh.w r3, [r8, 8]                                |     r3 = *((r8 + 8));
    0x00052456 add r2, r3                                        |     r2 += r3;
    0x00052458 b.w 0x4daae                                       |     goto label_139;
                                                                 | label_328:
    0x0005245c ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0005245e add.w r6, r6, r6, lsl 2                           |     r6 += (r6 << 2);
    0x00052462 add.w r6, r3, r6, lsl 3                           |     r6 = r3 + (r6 << 3);
    0x00052466 mov r0, r6                                        |     r0 = r6;
    0x00052468 bl 0xc318                                         |     fcn_0000c318 (r0, r1);
    0x0005246c ldr r6, [r6, 0x10]                                |     r6 = *((r6 + 0x10));
    0x0005246e cmp r6, 1                                         |     
                                                                 |     if (r6 > 1) {
    0x00052470 bgt.w 0x4da90                                     |         goto label_140;
                                                                 |     }
    0x00052474 blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x00052478 ldr.w r1, [pc, 0x54c]                             |     r1 = *(0x000529c8);
    0x0005247c movw r2, 0x220c                                   |     
    0x00052480 add.w r3, r0, 0x14                                |     r3 = r0 + 0x14;
    0x00052484 movt r2, 1                                        |     r2 = 0x1220c;
    0x00052488 movs r0, 0xb                                      |     r0 = 0xb;
    0x0005248a add r1, pc                                        |     r1 += pc;
    0x0005248c blx 0x6820                                        |     fcn_00006820 ();
    0x00052490 ldrb.w r3, [fp, 0x40]                             |     r3 = *(arg_40h);
    0x00052494 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00052496 bne.w 0x52ae2                                     |         goto label_226;
                                                                 |     }
    0x0005249a ldr.w r3, [pc, 0x530]                             |     
    0x0005249e mov.w sb, 0xb                                     |     sb = 0xb;
    0x000524a2 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x000524a4 add r3, pc                                        |     r3 = 0xa4e76;
    0x000524a6 add.w r0, r2, 0x2c                                |     r0 = r2 + 0x2c;
                                                                 | label_160:
    0x000524aa ldr.w r2, [pc, 0x524]                             |     
    0x000524ae mov r1, fp                                        |     r1 = fp;
    0x000524b0 add r2, pc                                        |     r2 = 0xa4e86;
    0x000524b2 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x000524b6 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x000524b8 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
    0x000524ba b.w 0x4d746                                       |     goto label_34;
                                                                 | label_437:
    0x000524be ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000524c0 adds r3, 1                                        |     r3++;
    0x000524c2 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000524c4 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x000524c6 vstr d16, [r3, 0x10]                              |     __asm ("vstr d16, [r3, 0x10]");
    0x000524ca b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_425:
    0x000524ce mov r0, fp                                        |     r0 = fp;
    0x000524d0 bl 0x13968                                        |     fcn_00013968 (r0);
    0x000524d4 b.w 0x4d4f2                                       |     goto label_24;
                                                                 | label_488:
    0x000524d8 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x000524da ldr r0, [r6, 0x14]                                |     r0 = *((r6 + 0x14));
    0x000524dc ldr.w r3, [r3, 0xb0]                              |     r3 = *((r3 + 0xb0));
                                                                 |     if (r3 != 0) {
    0x000524e0 cbnz r3, 0x524ee                                  |         goto label_676;
                                                                 |     }
    0x000524e2 b.w 0x4fec0                                       |     goto label_141;
                                                                 | label_142:
    0x000524e6 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x000524e8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000524ea beq.w 0x4fec0                                     |         goto label_141;
                                                                 |     }
                                                                 | label_676:
    0x000524ee ldr r2, [r3, 0x18]                                |     r2 = *((r3 + 0x18));
    0x000524f0 cmp r2, r0                                        |     
                                                                 |     if (r2 != r0) {
    0x000524f2 bne 0x524e6                                       |         goto label_142;
                                                                 |     }
    0x000524f4 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000524f6 adds r3, 1                                        |     r3++;
    0x000524f8 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000524fa b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_403:
    0x000524fe cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00052500 bne.w 0x529fa                                     |         goto label_677;
                                                                 |     }
    0x00052504 ldr.w r2, [fp, 0x10]                              |     r2 = *(arg_10h);
    0x00052508 add.w r3, r3, 0x10000000                          |     r3 += 0x10000000;
    0x0005250c subs r3, 1                                        |     r3--;
    0x0005250e mov sb, r0                                        |     sb = r0;
    0x00052510 add.w r3, r2, r3, lsl 4                           |     r3 = r2 + (r3 << 4);
    0x00052514 b.w 0x4eb8c                                       |     goto label_143;
                                                                 | label_449:
    0x00052518 ldr.w r1, [pc, 0x4b8]                             |     r1 = *(0x000529d4);
    0x0005251c mov r2, r5                                        |     r2 = r5;
    0x0005251e ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00052520 mov r0, fp                                        |     r0 = fp;
    0x00052522 mov.w sb, 1                                       |     sb = 1;
    0x00052526 add r1, pc                                        |     r1 += pc;
    0x00052528 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x0005252c bl 0x1babc                                        |     fcn_0001babc (r0);
    0x00052530 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00052532 str r0, [r3, 0x2c]                                |     *((r3 + 0x2c)) = r0;
    0x00052534 b.w 0x50538                                       |     goto label_39;
                                                                 | label_537:
    0x00052538 mov r0, fp                                        |     r0 = fp;
    0x0005253a bl 0x184f0                                        |     r0 = fcn_000184f0 (r0);
    0x0005253e mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r0 == 0) {
    0x00052540 cbnz r0, 0x52564                                  |         
    0x00052542 ldr r3, [r7, 0x38]                                |         r3 = *((r7 + 0x38));
    0x00052544 ldr r0, [r4, 8]                                   |         r0 = *((r4 + 8));
    0x00052546 blx r3                                            |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00052548 mov r6, r0                                        |         r6 = r0;
                                                                 |         if (r0 != 0) {
    0x0005254a cbnz r0, 0x52564                                  |             goto label_678;
                                                                 |         }
    0x0005254c ldr.w r2, [fp, 0x128]                             |         r2 = *(arg_128h);
    0x00052550 ldr r3, [r4, 0xc]                                 |         r3 = *((r4 + 0xc));
    0x00052552 ldr.w r1, [fp, 0x140]                             |         r1 = *(arg_140h);
    0x00052556 adds r0, r2, 1                                    |         r0 = r2 + 1;
    0x00052558 adds r3, 1                                        |         r3++;
    0x0005255a str.w r0, [fp, 0x128]                             |         __asm ("str.w r0, [arg_128h]");
    0x0005255e str.w r4, [r1, r2, lsl 2]                         |         __asm ("str.w r4, [r1, r2, lsl 2]");
    0x00052562 str r3, [r4, 0xc]                                 |         *((r4 + 0xc)) = r3;
                                                                 |     }
                                                                 | label_678:
    0x00052564 ldr r5, [r4, 8]                                   |     r5 = *((r4 + 8));
    0x00052566 b.w 0x505a0                                       |     goto label_144;
                                                                 | label_500:
    0x0005256a ldr.w r5, [fp, 0x1e0]                             |     r5 = *(arg_1e0h);
    0x0005256e cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00052570 beq.w 0x52dfe                                     |         goto label_679;
                                                                 |     }
    0x00052574 mov.w sb, 0                                       |     sb = 0;
    0x00052578 b 0x52586                                         |     
                                                                 |     while (r0 != 0) {
    0x0005257a ldr r5, [r5, 0x18]                                |         r5 = *((r5 + 0x18));
    0x0005257c add.w sb, sb, 1                                   |         sb++;
    0x00052580 cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x00052582 beq.w 0x52dfe                                     |             goto label_679;
                                                                 |         }
    0x00052586 ldr r0, [r5]                                      |         r0 = *(r5);
    0x00052588 mov r1, r4                                        |         r1 = r4;
    0x0005258a blx 0x6164                                        |         r0 = fcn_00006164 ();
    0x0005258e cmp r0, 0                                         |         
    0x00052590 bne 0x5257a                                       |         
                                                                 |     }
    0x00052592 ldr.w r3, [fp, 0x94]                              |     r3 = *(arg_94h);
    0x00052596 mov r7, r0                                        |     r7 = r0;
    0x00052598 cmp r3, 0                                         |     
    0x0005259a ite le                                            |     
                                                                 |     if (r3 > 0) {
    0x0005259c movle r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 <= 0) {
    0x0005259e movgt r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x000525a0 cmp.w sl, 1                                       |     
    0x000525a4 it ne                                             |     
                                                                 |     if (sl == 1) {
    0x000525a6 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x000525a8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000525aa bne.w 0x53a90                                     |         goto label_680;
                                                                 |     }
    0x000525ae ldr r4, [r5, 0x18]                                |     r4 = *((r5 + 0x18));
                                                                 |     if (r4 == 0) {
    0x000525b0 cbz r4, 0x5260a                                   |         goto label_681;
                                                                 |     }
                                                                 | label_146:
    0x000525b2 mov r4, r7                                        |     r4 = r7;
                                                                 | label_286:
    0x000525b4 ldr.w r3, [fp, 0x1e8]                             |     r3 = *(arg_1e8h);
    0x000525b8 cmp.w sl, 2                                       |     
    0x000525bc ldr.w r2, [fp, 0x14]                              |     r2 = *(arg_14h);
    0x000525c0 sub.w r3, r3, sb                                  |     r3 -= sb;
    0x000525c4 add.w sb, r3, -1                                  |     sb = r3 + -1;
                                                                 |     if (sl == 2) {
    0x000525c8 beq.w 0x53ac0                                     |         goto label_682;
                                                                 |     }
    0x000525cc cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x000525ce ble.w 0x5393c                                     |         goto label_683;
                                                                 |     }
                                                                 | label_248:
    0x000525d2 mov.w r8, 0                                       |     r8 = 0;
    0x000525d6 b 0x525e2                                         |     
                                                                 |     while (r0 == 0) {
                                                                 | label_145:
    0x000525d8 add.w r8, r8, 1                                   |         r8++;
    0x000525dc cmp r2, r8                                        |         
                                                                 |         if (r2 <= r8) {
    0x000525de ble.w 0x53934                                     |             goto label_684;
                                                                 |         }
    0x000525e2 ldr.w r3, [fp, 0x10]                              |         r3 = *(arg_10h);
    0x000525e6 add.w r3, r3, r8, lsl 4                           |         r3 += (r8 << 4);
    0x000525ea ldr r0, [r3, 4]                                   |         r0 = *((r3 + 4));
    0x000525ec cmp r0, 0                                         |         
    0x000525ee beq 0x525d8                                       |         
                                                                 |     }
    0x000525f0 ldrb r3, [r0, 8]                                  |     r3 = *((r0 + 8));
    0x000525f2 cmp r3, 2                                         |     
                                                                 |     if (r3 != 2) {
    0x000525f4 bne 0x525d8                                       |         goto label_145;
                                                                 |     }
    0x000525f6 mov r2, sb                                        |     r2 = sb;
    0x000525f8 mov r1, sl                                        |     r1 = sl;
    0x000525fa bl 0x2ce0c                                        |     r0 = fcn_0002ce0c (r0, r1, r2);
    0x000525fe cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00052600 bne.w 0x532cc                                     |         goto label_685;
                                                                 |     }
    0x00052604 ldr.w r2, [fp, 0x14]                              |     r2 = *(arg_14h);
    0x00052608 b 0x525d8                                         |     goto label_145;
                                                                 | label_681:
    0x0005260a ldrb.w r3, [fp, 0x45]                             |     r3 = *(arg_45h);
    0x0005260e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00052610 beq 0x525b2                                       |         goto label_146;
                                                                 |     }
    0x00052612 cmp.w sl, 1                                       |     
                                                                 |     if (sl != 1) {
    0x00052616 bne.w 0x54086                                     |         goto label_686;
                                                                 |     }
    0x0005261a ldr r6, [sp, 0x24]                                |     r6 = *((sp + 0x24));
    0x0005261c ldr r1, [r6]                                      |     r1 = *(r6);
    0x0005261e ldr.w r2, [r1, 0x1f8]                             |     r2 = *((r1 + 0x1f8));
    0x00052622 ldr.w r3, [r1, 0x1f0]                             |     r3 = *((r1 + 0x1f0));
    0x00052626 ldr.w r0, [r1, 0x1fc]                             |     r0 = *((r1 + 0x1fc));
    0x0005262a adds r3, r3, r2                                   |     r3 += r2;
    0x0005262c ldr.w r2, [r1, 0x1f4]                             |     r2 = *((r1 + 0x1f4));
    0x00052630 adc.w r2, r2, r0                                  |     __asm ("adc.w r2, r2, r0");
    0x00052634 cmp r3, 1                                         |     
    0x00052636 sbcs r2, r2, 0                                    |     __asm ("sbcs r2, r2, 0");
                                                                 |     if (r3 >= 1) {
    0x0005263a bge.w 0x53aa0                                     |         goto label_687;
                                                                 |     }
    0x0005263e ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x00052640 strb.w sl, [fp, 0x3e]                             |     *(arg_3eh) = sl;
    0x00052644 bl 0x335d0                                        |     r0 = fcn_000335d0 (r0);
    0x00052648 cmp r0, 5                                         |     
                                                                 |     if (r0 == 5) {
    0x0005264a beq.w 0x54072                                     |         goto label_688;
                                                                 |     }
    0x0005264e ldr.w r1, [fp, 0x1e0]                             |     r1 = *(arg_1e0h);
    0x00052652 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00052654 strb.w r7, [fp, 0x45]                             |     *(arg_45h) = r7;
    0x00052658 cmp r1, r5                                        |     
    0x0005265a ldr r7, [r3, 0x50]                                |     r7 = *((r3 + 0x50));
    0x0005265c it ne                                             |     
                                                                 |     if (r1 == r5) {
    0x0005265e movne r4, sl                                      |         r4 = sl;
                                                                 |     }
                                                                 |     if (r1 == r5) {
    0x00052660 beq.w 0x54060                                     |         goto label_689;
                                                                 |     }
                                                                 |     do {
                                                                 | label_234:
    0x00052664 ldr r3, [r1, 0x18]                                |         r3 = *((r1 + 0x18));
    0x00052666 mov r0, fp                                        |         r0 = fp;
    0x00052668 str.w r3, [fp, 0x1e0]                             |         __asm ("str.w r3, [arg_1e0h]");
    0x0005266c bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x00052670 ldr.w r1, [fp, 0x1e0]                             |         r1 = *(arg_1e0h);
    0x00052674 ldr.w r3, [fp, 0x1e8]                             |         r3 = *(arg_1e8h);
    0x00052678 cmp r1, r5                                        |         
    0x0005267a add.w r3, r3, -1                                  |         r3 += -1;
    0x0005267e str.w r3, [fp, 0x1e8]                             |         __asm ("str.w r3, [arg_1e8h]");
    0x00052680 adds r1, 0xe8                                     |         r1 += 0xe8;
    0x00052682 bne 0x52664                                       |         
                                                                 |     } while (r1 != 0xe8);
                                                                 | label_235:
    0x00052684 cmp.w sl, 1                                       |     
                                                                 |     if (sl == 1) {
    0x00052688 beq.w 0x53340                                     |         goto label_690;
                                                                 |     }
                                                                 | label_249:
    0x0005268c ldrd r2, r3, [r5, 8]                              |     __asm ("ldrd r2, r3, [r5, 8]");
    0x00052690 strd r2, r3, [fp, 0x1f0]                          |     __asm ("strd r2, r3, aav.0x000000ff");
    0x00052694 ldrd r2, r3, [r5, 0x10]                           |     __asm ("ldrd r2, r3, [r5, 0x10]");
    0x00052698 strd r2, r3, [fp, 0x1f8]                          |     __asm ("strd r2, r3, aav.0x000000ff");
    0x0005269c cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0005269e beq.w 0x5335e                                     |         goto label_691;
                                                                 |     }
                                                                 | label_206:
    0x000526a2 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000526a4 mov r6, r7                                        |     r6 = r7;
    0x000526a6 adds r3, 1                                        |     r3++;
    0x000526a8 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000526aa cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x000526ac beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x000526b0 b.w 0x4d740                                       |     goto label_7;
                                                                 | label_480:
    0x000526b4 ldr r2, [r0, 0x30]                                |     r2 = *((r0 + 0x30));
    0x000526b6 ldrd r2, ip, [r2]                                 |     __asm ("ldrd r2, ip, [r2]");
    0x000526ba b.w 0x4fcda                                       |     goto label_147;
                                                                 | label_429:
    0x000526be ldr r3, [r3]                                      |     r3 = *(r3);
    0x000526c0 ldr r1, [r3, 0x44]                                |     r1 = *((r3 + 0x44));
    0x000526c2 ldr r0, [r3]                                      |     r0 = *(r3);
    0x000526c4 bl 0x301ec                                        |     r0 = fcn_000301ec (r0, r1, r2);
    0x000526c8 mov r6, r0                                        |     r6 = r0;
    0x000526ca cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x000526cc beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x000526d0 b.w 0x4d740                                       |     goto label_7;
    0x000526d4 ldr r0, [r4, 0x24]                                |     r0 = *((r4 + 0x24));
    0x000526d6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000526d8 beq.w 0x53844                                     |         goto label_692;
                                                                 |     }
    0x000526dc ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000526de add r1, sp, 0xd8                                  |     r1 += arg_d8h;
    0x000526e0 ldr r4, [r0]                                      |     r4 = *(r0);
    0x000526e2 adds r3, 1                                        |     r3++;
    0x000526e4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000526e6 ldr r3, [r4]                                      |     r3 = *(r4);
    0x000526e8 ldr r3, [r3, 0x30]                                |     r3 = *((r3 + 0x30));
    0x000526ea blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
    0x000526ec ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x000526ee mov r6, r0                                        |     r6 = r0;
    0x000526f0 ldr r7, [r3]                                      |     r7 = *(r3);
    0x000526f2 ldr r1, [r3, 0x2c]                                |     r1 = *((r3 + 0x2c));
    0x000526f4 mov r0, r7                                        |     r0 = r7;
    0x000526f6 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x000526fa ldr r1, [r4, 8]                                   |     r1 = *((r4 + 8));
    0x000526fc mov r0, r7                                        |     r0 = r7;
    0x000526fe bl 0xd418                                         |     fcn_0000d418 (r0, r1);
    0x00052702 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00052704 str r0, [r3, 0x2c]                                |     *((r3 + 0x2c)) = r0;
    0x00052706 ldr r0, [r4, 8]                                   |     r0 = *((r4 + 8));
    0x00052708 blx 0x6050                                        |     fcn_00006050 ();
    0x0005270c ldrd r2, r3, [sp, 0xd8]                           |     __asm ("ldrd r2, r3, [arg_d8h]");
    0x00052710 ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x00052712 str r5, [r4, 8]                                   |     *((r4 + 8)) = r5;
    0x00052714 strd r2, r3, [r1, 0x10]                           |     __asm ("strd r2, r3, [r1, 0x10]");
    0x00052718 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0005271a beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0005271e b.w 0x4d740                                       |     goto label_7;
                                                                 | label_360:
    0x00052722 str.w sl, [sp, 0x7c]                              |     __asm ("str.w sl, [arg_7ch]");
    0x00052726 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_347:
    0x0005272a ldr r7, [sp, 0x50]                                |     r7 = *(arg_50h);
    0x0005272c mov r6, fp                                        |     r6 = fp;
    0x0005272e mov fp, sl                                        |     
                                                                 |     do {
                                                                 |         if (r7 != 0) {
                                                                 | label_221:
    0x00052730 cbz r7, 0x52746                                   |             
    0x00052732 ldr r3, [r7]                                      |             r3 = *(r7);
                                                                 |             if (r3 != 0) {
    0x00052734 cbz r3, 0x52740                                   |                 
    0x00052736 ldr r3, [r3, 4]                                   |                 r3 = *((r3 + 4));
    0x00052738 mov r0, r7                                        |                 r0 = r7;
    0x0005273a blx r3                                            |                 uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0005273c movs r3, 0                                        |                 r3 = 0;
    0x0005273e str r3, [r7]                                      |                 *(r7) = r3;
                                                                 |             }
    0x00052740 mov r0, r7                                        |             r0 = r7;
    0x00052742 blx 0x6050                                        |             fcn_00006050 ();
                                                                 |         }
    0x00052746 ldr r2, [sp, 0x4c]                                |         r2 = *(arg_4ch);
    0x00052748 ldrd r2, r3, [r2, 0x24]                           |         __asm ("ldrd r2, r3, [r2, 0x24]");
    0x0005274c ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x0005274e add.w r3, r3, r3, lsl 1                           |         r3 += (r3 << 1);
    0x00052752 add.w r3, r2, r3, lsl 4                           |         r3 = r2 + (r3 << 4);
    0x00052756 ldr r4, [r3, 0x18]                                |         r4 = *((r3 + 0x18));
    0x00052758 clz r4, r4                                        |         r4 &= r4;
    0x0005275c lsrs r4, r4, 5                                    |         r4 >>= 5;
    0x0005275e b.w 0x51d94                                       |         goto label_148;
                                                                 | label_346:
    0x00052762 mov r6, fp                                        |         r6 = fp;
    0x00052764 mov fp, sl                                        |         
    0x00052766 b 0x52730                                         |         
                                                                 |     } while (1);
                                                                 | label_413:
    0x00052768 ldrb.w r3, [fp, 0x3e]                             |     r3 = *(arg_3eh);
                                                                 |     if (r3 != 0) {
    0x0005276c cbz r3, 0x52778                                   |         
    0x0005276e ldr.w r3, [fp, 0x90]                              |         r3 = *(arg_90h);
    0x00052772 cmp r3, 1                                         |         
                                                                 |         if (r3 <= 1) {
    0x00052774 ble.w 0x535c4                                     |             goto label_693;
                                                                 |         }
                                                                 |     }
    0x00052778 ldr r3, [pc, 0x25c]                               |     
    0x0005277a ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0005277c add r3, pc                                        |     r3 = 0xa5158;
    0x0005277e add.w r0, r2, 0x2c                                |     r0 = r2 + 0x2c;
    0x00052782 b.w 0x5103e                                       |     goto label_149;
                                                                 | label_593:
    0x00052786 uxtb r3, r6                                       |     r3 = (int8_t) r6;
    0x00052788 cmp r3, 0x13                                      |     
                                                                 |     if (r3 != 0x13) {
    0x0005278a bne.w 0x5115c                                     |         goto label_150;
                                                                 |     }
    0x0005278e ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x00052790 ldr r3, [r2, 0x10]                                |     r3 = *((r2 + 0x10));
    0x00052792 ldrb r3, [r3, 0x10]                               |     r3 = *((r3 + 0x10));
    0x00052794 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00052796 beq.w 0x5115c                                     |         goto label_150;
                                                                 |     }
    0x0005279a ldrb r3, [r2, 3]                                  |     r3 = *((r2 + 3));
    0x0005279c cmp r3, 4                                         |     
                                                                 |     if (r3 == 4) {
    0x0005279e beq.w 0x53a86                                     |         goto label_694;
                                                                 |     }
    0x000527a2 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x000527a4 cmp r3, 5                                         |     
    0x000527a6 it eq                                             |     
                                                                 |     if (r3 != 5) {
    0x000527a8 moveq r3, 2                                       |         r3 = 2;
                                                                 |     }
    0x000527aa strb.w r3, [r2, 0x56]                             |     *((r2 + 0x56)) = r3;
    0x000527ae b.w 0x4dbae                                       |     goto label_20;
                                                                 | label_395:
    0x000527b2 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x000527b4 movs r3, 1                                        |     r3 = 1;
    0x000527b6 strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
                                                                 | label_547:
    0x000527b8 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x000527ba ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x000527be ldr r1, [r2, 0xc]                                 |     r1 = *((r2 + 0xc));
    0x000527c0 ldr r6, [r2, 4]                                   |     r6 = *((r2 + 4));
    0x000527c2 str r1, [sp, 0x3c]                                |     *(arg_3ch) = r1;
    0x000527c4 lsls r2, r1, 4                                    |     r2 = r1 << 4;
    0x000527c6 str r6, [sp, 0x2c]                                |     *(arg_2ch) = r6;
    0x000527c8 add r3, r2                                        |     r3 += r2;
    0x000527ca str r2, [sp, 0x34]                                |     *(arg_34h) = r2;
    0x000527cc ldr.w r8, [r3, 4]                                 |     r8 = *((r3 + 4));
    0x000527d0 mov r0, r8                                        |     r0 = r8;
    0x000527d2 bl 0xd140                                         |     fcn_0000d140 (r0);
    0x000527d6 ldr.w r5, [r8, 4]                                 |     r5 = *((r8 + 4));
    0x000527da ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
    0x000527dc str r5, [sp, 0x28]                                |     *(arg_28h) = r5;
    0x000527de cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000527e0 beq.w 0x52eb0                                     |         goto label_695;
                                                                 |     }
    0x000527e4 mov.w r6, 0x106                                   |     r6 = 0x106;
                                                                 | label_186:
    0x000527e8 ldrb.w r3, [r8, 9]                                |     r3 = *((r8 + 9));
    0x000527ec cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000527ee beq.w 0x5303a                                     |         goto label_696;
                                                                 |     }
    0x000527f2 movs r5, 0                                        |     r5 = 0;
    0x000527f4 mov r7, r5                                        |     r7 = r5;
    0x000527f6 mov r4, r5                                        |     r4 = r5;
                                                                 | label_189:
    0x000527f8 ldr.w r3, [r8, 0xc]                               |     r3 = *((r8 + 0xc));
    0x000527fc subs r3, 1                                        |     r3--;
    0x000527fe str.w r3, [r8, 0xc]                               |     __asm ("str.w r3, [r8, 0xc]");
    0x00052802 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00052804 beq.w 0x53776                                     |         goto label_697;
                                                                 |     }
                                                                 | label_188:
    0x00052808 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0005280a movs r3, 4                                        |     r3 = 4;
    0x0005280c strd r7, r4, [r2, 0x10]                           |     __asm ("strd r7, r4, [r2, 0x10]");
    0x00052810 strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x00052812 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00052814 bne.w 0x4f48c                                     |         goto label_27;
                                                                 |     }
    0x00052818 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005281a adds r3, 1                                        |     r3++;
    0x0005281c str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0005281e cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00052820 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x00052824 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00052826 ldr r1, [sp, 0x34]                                |     r1 = *(arg_34h);
    0x00052828 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0005282a ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0005282e add r3, r1                                        |     r3 += r1;
    0x00052830 ldr r1, [r3, 0xc]                                 |     r1 = *((r3 + 0xc));
    0x00052832 ldr r3, [r1, 0x10]                                |     r3 = *((r1 + 0x10));
                                                                 |     if (r3 == 0) {
    0x00052834 cbz r3, 0x52846                                   |         goto label_698;
                                                                 |     }
                                                                 |     do {
    0x00052836 ldr r0, [r3, 8]                                   |         r0 = *((r3 + 8));
    0x00052838 ldr r3, [r3]                                      |         r3 = *(r3);
    0x0005283a ldr r4, [r0, 0x20]                                |         r4 = *((r0 + 0x20));
    0x0005283c cmp r4, r5                                        |         
    0x0005283e it eq                                             |         
                                                                 |         if (r4 != r5) {
    0x00052840 streq r2, [r0, 0x20]                              |             *((r0 + 0x20)) = r2;
                                                                 |         }
    0x00052842 cmp r3, 0                                         |         
    0x00052844 bne 0x52836                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_698:
    0x00052846 ldr r3, [r1, 0x20]                                |     r3 = *((r1 + 0x20));
                                                                 |     if (r3 == 0) {
    0x00052848 cbz r3, 0x5285a                                   |         goto label_699;
                                                                 |     }
                                                                 |     do {
    0x0005284a ldr r1, [r3, 8]                                   |         r1 = *((r3 + 8));
    0x0005284c ldr r3, [r3]                                      |         r3 = *(r3);
    0x0005284e ldr r0, [r1, 0x2c]                                |         r0 = *((r1 + 0x2c));
    0x00052850 cmp r0, r5                                        |         
    0x00052852 it eq                                             |         
                                                                 |         if (r0 != r5) {
    0x00052854 streq r2, [r1, 0x2c]                              |             *((r1 + 0x2c)) = r2;
                                                                 |         }
    0x00052856 cmp r3, 0                                         |         
    0x00052858 bne 0x5284a                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_699:
    0x0005285a ldr r3, [sp, 0x3c]                                |     r3 = *(arg_3ch);
    0x0005285c adds r3, 1                                        |     r3++;
    0x0005285e uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00052860 str r3, [sp, 0x64]                                |     *(arg_64h) = r3;
    0x00052862 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_575:
    0x00052866 ldrd r3, r2, [fp, 0x1f8]                          |     __asm ("ldrd r3, r2, [arg_1f8h]");
    0x0005286a orrs r3, r2                                       |     r3 |= r2;
    0x0005286c itete eq                                          |     
                                                                 |     if (r3 != r2) {
    0x0005286e ldreq r3, [sp, 0x20]                              |         r3 = *(arg_20h);
                                                                 |     }
                                                                 |     if (r3 == r2) {
    0x00052870 ldrne r3, [sp, 0x1c]                              |         r3 = *(arg_1ch);
                                                                 |     }
                                                                 |     if (r3 != r2) {
    0x00052872 ldreq r3, [r3, 8]                                 |         r3 = *((r3 + 8));
                                                                 |     }
                                                                 |     if (r3 == r2) {
    0x00052874 addne r3, 1                                       |         r3++;
                                                                 |     }
    0x00052876 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00052878 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_468:
    0x0005287c ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0005287e ldr.w r2, [r0, 0x90]                              |     r2 = *((r0 + 0x90));
    0x00052882 adds r2, r2, r3                                   |     r2 += r3;
    0x00052884 ldr.w r3, [r0, 0x94]                              |     r3 = *((r0 + 0x94));
    0x00052888 str.w r2, [r0, 0x90]                              |     __asm ("str.w r2, [r0, 0x90]");
    0x0005288c adc.w r3, r1, r3                                  |     __asm ("adc.w r3, r1, r3");
    0x00052890 str.w r3, [r0, 0x94]                              |     __asm ("str.w r3, [r0, 0x94]");
    0x00052894 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_466:
    0x00052898 ldrd r3, r2, [fp, 0x1f8]                          |     __asm ("ldrd r3, r2, [arg_1f8h]");
    0x0005289c orrs r3, r2                                       |     r3 |= r2;
    0x0005289e itete eq                                          |     
                                                                 |     if (r3 != r2) {
    0x000528a0 ldreq r3, [sp, 0x20]                              |         r3 = *(arg_20h);
                                                                 |     }
                                                                 |     if (r3 == r2) {
    0x000528a2 ldrne r3, [sp, 0x1c]                              |         r3 = *(arg_1ch);
                                                                 |     }
                                                                 |     if (r3 != r2) {
    0x000528a4 ldreq r3, [r3, 8]                                 |         r3 = *((r3 + 8));
                                                                 |     }
                                                                 |     if (r3 == r2) {
    0x000528a6 addne r3, 1                                       |         r3++;
                                                                 |     }
    0x000528a8 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000528aa b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_635:
    0x000528ae ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000528b0 ldr r2, [pc, 0x128]                               |     
    0x000528b2 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x000528b6 add r2, pc                                        |     r2 = 0xa5296;
    0x000528b8 b.w 0x512cc                                       |     goto label_151;
                                                                 | label_370:
    0x000528bc ldr r7, [sp, 0x2c]                                |     r7 = *(arg_2ch);
    0x000528be add.w r1, r4, 0x48                                |     r1 = r4 + 0x48;
    0x000528c2 mov r0, r7                                        |     r0 = r7;
    0x000528c4 bl 0xb570                                         |     fcn_0000b570 (r0, r1);
    0x000528c8 ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x000528ca ldrh r2, [r7, 0x2c]                               |     r2 = *((r7 + 0x2c));
    0x000528cc ldrh r7, [r7, 0x2e]                               |     r7 = *((r7 + 0x2e));
    0x000528ce add r2, r3                                        |     r2 += r3;
    0x000528d0 ldr r3, [r4, 0x48]                                |     r3 = *((r4 + 0x48));
    0x000528d2 str r2, [r4, 0x54]                                |     *((r4 + 0x54)) = r2;
    0x000528d4 b.w 0x4e382                                       |     goto label_152;
                                                                 | label_499:
    0x000528d8 ldr r2, [pc, 0x104]                               |     
    0x000528da add r2, pc                                        |     r2 = 0xa52be;
    0x000528dc b.w 0x50d26                                       |     goto label_153;
                                                                 | label_315:
    0x000528e0 movs r3, 0                                        |     r3 = 0;
    0x000528e2 ldr r0, [r4]                                      |     r0 = *(r4);
    0x000528e4 mov r1, sl                                        |     r1 = sl;
    0x000528e6 str.w r3, [sl]                                    |     __asm ("str.w r3, [sl]");
    0x000528ea bl 0x2ef2c                                        |     r0 = fcn_0002ef2c (r0, r1);
    0x000528ee mov r6, r0                                        |     r6 = r0;
    0x000528f0 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000528f2 beq.w 0x52100                                     |         goto label_154;
                                                                 |     }
                                                                 | label_207:
    0x000528f6 mov sb, r6                                        |     sb = r6;
                                                                 | label_202:
    0x000528f8 ldrb.w r3, [fp, 0x40]                             |     r3 = *(arg_40h);
    0x000528fc cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000528fe bne.w 0x52ae2                                     |         goto label_226;
                                                                 |     }
    0x00052902 movw r3, 0xc0a                                    |     r3 = 0xc0a;
    0x00052906 cmp sb, r3                                        |     
                                                                 |     if (sb != r3) {
    0x00052908 bne.w 0x53ed0                                     |         goto label_700;
                                                                 |     }
    0x0005290c ldr r4, [sp, 0x24]                                |     r4 = *((sp + 0x24));
    0x0005290e mov r0, sb                                        |     r0 = sb;
    0x00052910 ldr r1, [pc, 0xd0]                                |     
    0x00052912 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x00052914 ldr r3, [r4, 0x2c]                                |     r3 = *((r4 + 0x2c));
    0x00052916 str.w sb, [r4, 0x50]                              |     __asm ("str.w sb, [r4, 0x50]");
    0x0005291a add r1, pc                                        |     r1 = 0xa5302;
    0x0005291c str r3, [sp]                                      |     *(sp) = r3;
    0x0005291e ldr.w r3, [r4, 0xa8]                              |     r3 = *((r4 + 0xa8));
    0x00052922 blx 0x6820                                        |     fcn_00006820 ();
    0x00052926 mov r0, r4                                        |     r0 = r4;
    0x00052928 bl 0x335d0                                        |     fcn_000335d0 (r0);
    0x0005292c b.w 0x4d770                                       |     goto label_155;
                                                                 | label_376:
    0x00052930 mov r0, r5                                        |     r0 = r5;
    0x00052932 bl 0x17410                                        |     r0 = fcn_00017410 (r0);
    0x00052936 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00052938 beq.w 0x4e41a                                     |         goto label_156;
                                                                 |     }
    0x0005293c b.w 0x4d4ec                                       |     goto label_6;
                                                                 | label_209:
    0x00052940 mov r2, r8                                        |     r2 = r8;
    0x00052942 mov r1, r6                                        |     r1 = r6;
    0x00052944 mov r0, sl                                        |     r0 = sl;
    0x00052946 bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
                                                                 | label_208:
    0x0005294a mov r0, sl                                        |     r0 = sl;
    0x0005294c bl 0x171d4                                        |     r0 = fcn_000171d4 (r0);
    0x00052950 mov r4, r0                                        |     r4 = r0;
    0x00052952 ldrd r3, r0, [fp, 0xa4]                           |     __asm ("ldrd r3, r0, [arg_a4h]");
    0x00052956 mov r1, r4                                        |     r1 = r4;
    0x00052958 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
    0x0005295a mov r1, r4                                        |     r1 = r4;
    0x0005295c mov r0, fp                                        |     r0 = fp;
    0x0005295e bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00052962 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_400:
    0x00052966 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00052968 mov r0, sl                                        |     r0 = sl;
    0x0005296a ldr r2, [pc, 0x7c]                                |     
    0x0005296c add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x00052970 add r2, pc                                        |     r2 = 0xa535e;
    0x00052972 b.w 0x50d2c                                       |     goto label_74;
                                                                 | label_402:
    0x00052976 ldr r2, [pc, 0x74]                                |     
    0x00052978 add r2, pc                                        |     r2 = 0xa536a;
    0x0005297a b.w 0x4eb62                                       |     goto label_157;
                                                                 | label_586:
    0x0005297e lsls r3, r5, 0x1f                                 |     r3 = r5 << 0x1f;
    0x00052980 it pl                                             |     
                                                                 |     if (r3 >= r5) {
    0x00052982 movpl r3, 1                                       |         r3 = 1;
                                                                 |         goto label_701;
                                                                 |     }
                                                                 |     if (r3 >= r5) {
                                                                 | label_701:
    0x00052984 bpl.w 0x4d572                                     |         goto label_158;
                                                                 |     }
    0x00052988 movw r3, 0x101                                    |     r3 = 0x101;
    0x0005298c ands r3, r6                                       |     r3 &= r6;
    0x0005298e subs r3, 1                                        |     r3--;
    0x00052990 it ne                                             |     
                                                                 |     if (r3 == 1) {
    0x00052992 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00052994 b.w 0x4d572                                       |     goto label_158;
                                                                 | label_587:
    0x00052998 lsls r1, r2, 0x1c                                 |     r1 = r2 << 0x1c;
    0x0005299a itete mi                                          |     
                                                                 |     if (r1 >= r2) {
    0x0005299c ldrmi r3, [sp, 0x20]                              |         r3 = *(arg_20h);
                                                                 |     }
                                                                 |     if (r1 < r2) {
    0x0005299e ldrpl r3, [sp, 0x1c]                              |         r3 = *(arg_1ch);
                                                                 |     }
                                                                 |     if (r1 >= r2) {
    0x000529a0 ldrmi r3, [r3, 8]                                 |         r3 = *((r3 + 8));
                                                                 |     }
                                                                 |     if (r1 < r2) {
    0x000529a2 addpl r3, 1                                       |         r3++;
                                                                 |     }
    0x000529a4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000529a6 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_453:
    0x000529f0 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000529f2 adds r3, 1                                        |     r3++;
    0x000529f4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000529f6 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_677:
    0x000529fa ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x000529fc mov.w r2, -1                                      |     r2 = -1;
    0x00052a00 mov r0, r4                                        |     r0 = r4;
    0x00052a02 mov r1, r2                                        |     r1 = r2;
    0x00052a04 str.w r3, [fp, 0x18]                              |     __asm ("str.w r3, [arg_18h]");
    0x00052a08 ldr r3, [sp, 0x28]                                |     r3 = *(arg_28h);
    0x00052a0a str.w r3, [fp, 0x50]                              |     __asm ("str.w r3, [arg_50h]");
    0x00052a0e ldr r3, [sp, 0x2c]                                |     r3 = *(arg_2ch);
    0x00052a10 str.w r3, [fp, 0x54]                              |     __asm ("str.w r3, [arg_54h]");
    0x00052a14 ldr r3, [sp, 0x34]                                |     r3 = *(arg_34h);
    0x00052a16 str.w r3, [fp, 0xa4]                              |     __asm ("str.w r3, [arg_a4h]");
    0x00052a1a movs r3, 1                                        |     r3 = 1;
    0x00052a1c bl 0x12250                                        |     fcn_00012250 (r0, r1, r2, r3);
    0x00052a20 movs r3, 1                                        |     r3 = 1;
    0x00052a22 strb.w r3, [fp, 0x3e]                             |     *(arg_3eh) = r3;
    0x00052a26 b.w 0x4ed74                                       |     goto label_159;
                                                                 | label_660:
    0x00052a2a ldr.w r8, [r8, sb]                                |     r8 = *((r8 + sb));
    0x00052a2e ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00052a30 str.w r8, [sp, 0xa8]                              |     __asm ("str.w r8, [arg_a8h]");
    0x00052a34 ldrb r3, [r3, 3]                                  |     r3 = *((r3 + 3));
    0x00052a36 tst.w r3, 0xc0                                    |     
                                                                 |     if ((r3 & 0xc0) == 0) {
    0x00052a3a beq.w 0x53160                                     |         goto label_702;
                                                                 |     }
    0x00052a3e cmp.w r8, 0xb                                     |     
                                                                 |     if (r8 < 0xb) {
    0x00052a42 bls.w 0x53136                                     |         goto label_703;
                                                                 |     }
    0x00052a46 tst.w r8, 1                                       |     
                                                                 |     if ((r8 & 1) != 0) {
    0x00052a4a beq 0x52a5e                                       |         
    0x00052a4c lsls r1, r3, 0x18                                 |         r1 = r3 << 0x18;
                                                                 |         if (r1 < r3) {
    0x00052a4e bmi 0x52a5e                                       |             goto label_704;
                                                                 |         }
                                                                 | label_196:
    0x00052a50 sub.w sl, r8, 0xc                                 |         sl = r8 - 0xc;
    0x00052a54 lsr.w r6, sl, 1                                   |         r6 = sl >> 1;
                                                                 | label_197:
    0x00052a58 cmp r6, 0                                         |         
                                                                 |         if (r6 != 0) {
    0x00052a5a bne.w 0x5366a                                     |             goto label_705;
                                                                 |         }
                                                                 |     }
                                                                 | label_704:
    0x00052a5e cmp.w r8, 0xd                                     |     
    0x00052a62 it hi                                             |     
                                                                 |     if (r8 <= 0xd) {
    0x00052a64 movhi r0, 0                                       |         r0 = 0;
                                                                 |     }
                                                                 |     if (r8 < 0xd) {
    0x00052a66 bls.w 0x5313a                                     |         goto label_706;
                                                                 |     }
                                                                 | label_192:
    0x00052a6a add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00052a6c movs r3, 0                                        |     r3 = 0;
    0x00052a6e str r3, [r7, 0x24]                                |     *((r7 + 0x24)) = r3;
                                                                 | label_225:
    0x00052a70 mov r1, r8                                        |     r1 = r8;
    0x00052a72 mov r2, r5                                        |     r2 = r5;
    0x00052a74 bl 0xbe30                                         |     fcn_0000be30 (r0, r1, r2);
    0x00052a78 ldr r3, [r7, 0x24]                                |     r3 = *((r7 + 0x24));
    0x00052a7a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00052a7c beq.w 0x53634                                     |         goto label_707;
                                                                 |     }
    0x00052a80 ldr r2, [r7, 4]                                   |     r2 = *((r7 + 4));
    0x00052a82 str r3, [r5, 0x24]                                |     *((r5 + 0x24)) = r3;
    0x00052a84 ldr r3, [sp, 0x70]                                |     r3 = *(arg_70h);
    0x00052a86 str r2, [r5, 4]                                   |     *((r5 + 4)) = r2;
    0x00052a88 strb r3, [r5, 0x1e]                               |     *((r5 + 0x1e)) = r3;
    0x00052a8a ldrh r3, [r5, 0x1c]                               |     r3 = *((r5 + 0x1c));
    0x00052a8c bic r3, r3, 0x1800                                |     r3 = BIT_MASK (r3, 0x1800);
    0x00052a90 orr r3, r3, 0x200                                 |     r3 |= 0x200;
    0x00052a94 strh r3, [r5, 0x1c]                               |     *((r5 + 0x1c)) = r3;
    0x00052a96 b.w 0x4e41a                                       |     goto label_156;
                                                                 | label_651:
    0x00052a9a ldrh.w r3, [sl, 0x1c]                             |     r3 = *((sl + 0x1c));
    0x00052a9e movw r2, 0x2460                                   |     r2 = 0x2460;
    0x00052aa2 mov r4, sl                                        |     r4 = sl;
    0x00052aa4 tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x00052aa6 bne.w 0x53650                                     |         goto label_708;
                                                                 |     }
                                                                 | label_223:
    0x00052aaa ldr r1, [r4, 0x24]                                |     r1 = *((r4 + 0x24));
                                                                 |     if (r1 != 0) {
    0x00052aac cbz r1, 0x52ab8                                   |         
    0x00052aae ldr r0, [r4]                                      |         r0 = *(r4);
    0x00052ab0 bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x00052ab4 movs r3, 0                                        |         r3 = 0;
    0x00052ab6 str r3, [r4, 0x24]                                |         *((r4 + 0x24)) = r3;
                                                                 |     }
    0x00052ab8 movs r3, 0                                        |     r3 = 0;
    0x00052aba str r3, [r4, 4]                                   |     *((r4 + 4)) = r3;
    0x00052abc blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x00052ac0 ldr.w r1, [pc, 0xc58]                             |     r1 = *(0x0005371c);
    0x00052ac4 mov.w r2, 0xdb0                                   |     r2 = 0xdb0;
    0x00052ac8 add.w r3, r0, 0x14                                |     r3 = r0 + 0x14;
    0x00052acc movt r2, 1                                        |     r2 = (r2 & 0xFFFF) | 0x10000;
    0x00052ad0 movs r0, 0xb                                      |     r0 = 0xb;
    0x00052ad2 add r1, pc                                        |     r1 += pc;
    0x00052ad4 blx 0x6820                                        |     fcn_00006820 ();
    0x00052ad8 ldrb.w r3, [fp, 0x40]                             |     r3 = *(arg_40h);
    0x00052adc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00052ade beq.w 0x53384                                     |         goto label_709;
                                                                 |     }
                                                                 | label_226:
    0x00052ae2 ldr.w r3, [pc, 0xc3c]                             |     
    0x00052ae6 mov.w sb, 7                                       |     sb = 7;
    0x00052aea ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00052aec add r3, pc                                        |     r3 = 0xa6212;
    0x00052aee add.w r0, r2, 0x2c                                |     r0 = r2 + 0x2c;
    0x00052af2 b 0x524aa                                         |     goto label_160;
                                                                 | label_582:
    0x00052af4 ldrh.w r0, [sp, 0xdc]                             |     r0 = *(arg_dch);
    0x00052af8 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00052afa beq.w 0x50f2c                                     |         goto label_161;
                                                                 |     }
    0x00052afe ldr r2, [sp, 0xe0]                                |     r2 = *(arg_e0h);
    0x00052b00 b 0x52b0c                                         |     goto label_710;
                                                                 | label_162:
    0x00052b02 adds r3, 1                                        |     r3++;
    0x00052b04 adds r2, 0x28                                     |     r2 += 0x28;
    0x00052b06 cmp r3, r0                                        |     
                                                                 |     if (r3 == r0) {
    0x00052b08 beq.w 0x50f2c                                     |         goto label_161;
                                                                 |     }
                                                                 | label_710:
    0x00052b0c ldrh r1, [r2, 0x1c]                               |     r1 = *((r2 + 0x1c));
    0x00052b0e lsls r6, r1, 0x1f                                 |     r6 = r1 << 0x1f;
                                                                 |     if (r6 >= r1) {
    0x00052b10 bpl 0x52b02                                       |         goto label_162;
                                                                 |     }
    0x00052b12 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00052b14 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00052b16 subs r3, 1                                        |     r3--;
    0x00052b18 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00052b1a b.w 0x50f2c                                       |     goto label_161;
                                                                 | label_585:
    0x00052b1e ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00052b20 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00052b22 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00052b24 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_584:
    0x00052b28 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00052b2a beq.w 0x53570                                     |         goto label_711;
                                                                 |     }
    0x00052b2e ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00052b30 adds r3, 1                                        |     r3++;
    0x00052b32 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00052b34 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_638:
    0x00052b38 mov r0, r8                                        |     r0 = r8;
    0x00052b3a ldr r5, [r4]                                      |     r5 = *(r4);
    0x00052b3c bl 0xd140                                         |     fcn_0000d140 (r0);
    0x00052b40 ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x00052b44 ldrh r2, [r3, 0x16]                               |     r2 = *((r3 + 0x16));
    0x00052b46 lsls r0, r2, 0x1f                                 |     r0 = r2 << 0x1f;
    0x00052b48 it mi                                             |     
                                                                 |     if (r0 >= r2) {
    0x00052b4a movmi r6, 8                                       |         r6 = 8;
                                                                 |     }
                                                                 |     if (r0 >= r2) {
    0x00052b4c bmi 0x52b7a                                       |         
    0x00052b4e ldr r2, [r3, 0x2c]                                |         r2 = *((r3 + 0x2c));
    0x00052b50 movw r1, 0xffff                                   |         r1 = 0xffff;
    0x00052b54 strb.w r7, [r5, 0x50]                             |         *((r5 + 0x50)) = r7;
    0x00052b58 str r6, [r5, 0x10]                                |         *((r5 + 0x10)) = r6;
    0x00052b5a subs r2, 0                                        |         
    0x00052b5c strd r8, r3, [r5]                                 |         __asm ("strd r8, r3, [r5]");
    0x00052b60 it ne                                             |         
                                                                 |         if (r2 == 0) {
    0x00052b62 movne r2, 1                                       |             r2 = 1;
                                                                 |         }
    0x00052b64 str r2, [r5, 0x44]                                |         *((r5 + 0x44)) = r2;
    0x00052b66 ldr r2, [r3, 8]                                   |         r2 = *((r3 + 8));
    0x00052b68 strh.w r1, [r5, 0x54]                             |         *((r5 + 0x54)) = r1;
    0x00052b6c str r2, [r5, 8]                                   |         *((r5 + 8)) = r2;
                                                                 |         if (r2 != 0) {
    0x00052b6e cbz r2, 0x52b72                                   |             
    0x00052b70 str r5, [r2, 0xc]                                 |             *((r2 + 0xc)) = r5;
                                                                 |         }
    0x00052b72 movs r2, 0                                        |         r2 = 0;
    0x00052b74 str r5, [r3, 8]                                   |         *((r3 + 8)) = r5;
    0x00052b76 strb.w r2, [r5, 0x51]                             |         *((r5 + 0x51)) = r2;
                                                                 |     }
    0x00052b7a ldrb.w r2, [r8, 9]                                |     r2 = *((r8 + 9));
                                                                 |     if (r2 != 0) {
    0x00052b7e cbz r2, 0x52b90                                   |         
    0x00052b80 ldr.w r5, [r8, 0xc]                               |         r5 = *((r8 + 0xc));
    0x00052b84 subs r5, 1                                        |         r5--;
    0x00052b86 str.w r5, [r8, 0xc]                               |         __asm ("str.w r5, [r8, 0xc]");
    0x00052b8a cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x00052b8c beq.w 0x5357a                                     |             goto label_712;
                                                                 |         }
                                                                 |     }
                                                                 | label_215:
    0x00052b90 ldrb r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x00052b92 orr r3, r3, 4                                     |     r3 |= 4;
    0x00052b96 strb r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x00052b98 b.w 0x4da28                                       |     goto label_101;
                                                                 | label_674:
    0x00052b9c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00052b9e ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00052ba0 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00052ba2 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_579:
    0x00052ba6 mov r0, r6                                        |     r0 = r6;
    0x00052ba8 bl 0x7dc8                                         |     fcn_00007dc8 (r0);
    0x00052bac b.w 0x50ea0                                       |     goto label_163;
                                                                 | label_655:
    0x00052bb0 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00052bb2 adds r3, 1                                        |     r3++;
    0x00052bb4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00052bb6 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_479:
    0x00052bba ldr r0, [sp, 0x38]                                |     r0 = *(arg_38h);
    0x00052bbc bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00052bc0 b.w 0x4fc80                                       |     goto label_164;
                                                                 | label_436:
    0x00052bc4 ldr r0, [r3, 0x38]                                |     r0 = *((r3 + 0x38));
    0x00052bc6 blx 0x63dc                                        |     fcn_000063dc ();
    0x00052bca strb r5, [r6, 0xa]                                |     *((r6 + 0xa)) = r5;
    0x00052bcc b.w 0x4f2e0                                       |     goto label_165;
                                                                 | label_386:
    0x00052bd0 ldr r0, [sp, 0x38]                                |     r0 = *(arg_38h);
    0x00052bd2 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00052bd6 b.w 0x4e64e                                       |     goto label_166;
                                                                 | label_581:
    0x00052bda ldr.w r0, [sl, 0xc]                               |     r0 = *((sl + 0xc));
    0x00052bde bl 0xd3a0                                         |     r0 = fcn_0000d3a0 (r0, r1);
    0x00052be2 mov sb, r0                                        |     sb = r0;
    0x00052be4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00052be6 beq.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x00052be8 add r4, sp, 0x204                                 |     r4 = sp + 0x204;
    0x00052bea ldrh.w r3, [sl, 6]                                |     r3 = *((sl + 6));
    0x00052bee mov r5, sb                                        |     r5 = sb;
    0x00052bf0 ldr r0, [r4, 8]                                   |     r0 = *((r4 + 8));
    0x00052bf2 adds r3, 1                                        |     r3++;
    0x00052bf4 b.w 0x50efc                                       |     goto label_167;
                                                                 | label_320:
    0x00052bf8 str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x00052bfc b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_313:
    0x00052c00 mov r0, r6                                        |     r0 = r6;
    0x00052c02 bl 0x173c0                                        |     fcn_000173c0 (r0);
    0x00052c06 b.w 0x4d7c2                                       |     goto label_168;
                                                                 | label_536:
    0x00052c0a ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00052c0c adds r3, 1                                        |     r3++;
    0x00052c0e str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00052c10 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_302:
    0x00052c14 mov r0, r4                                        |     r0 = r4;
    0x00052c16 bl 0x173c0                                        |     fcn_000173c0 (r0);
    0x00052c1a b.w 0x4d55c                                       |     goto label_169;
                                                                 | label_301:
    0x00052c1e mov r0, r7                                        |     r0 = r7;
    0x00052c20 bl 0x173c0                                        |     fcn_000173c0 (r0);
    0x00052c24 b.w 0x4d554                                       |     goto label_170;
                                                                 | label_300:
    0x00052c28 ldr.w sb, [sp, 0x70]                              |     sb = *(arg_70h);
    0x00052c2c mov r1, r8                                        |     r1 = r8;
    0x00052c2e mov r0, r7                                        |     r0 = r7;
    0x00052c30 mov r2, sb                                        |     r2 = sb;
    0x00052c32 bl 0x25cf0                                        |     fcn_00025cf0 (r0, r1, r2);
    0x00052c36 mov r2, sb                                        |     r2 = sb;
    0x00052c38 mov r1, r8                                        |     r1 = r8;
    0x00052c3a mov r0, r4                                        |     r0 = r4;
    0x00052c3c bl 0x25cf0                                        |     fcn_00025cf0 (r0, r1, r2);
    0x00052c40 ldrb.w r3, [fp, 0x40]                             |     r3 = *(arg_40h);
    0x00052c44 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00052c46 bne.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x00052c4a ldrh r3, [r7, 0x1c]                               |     r3 = *((r7 + 0x1c));
    0x00052c4c b.w 0x4d54e                                       |     goto label_171;
                                                                 | label_371:
    0x00052c50 mov r1, sl                                        |     r1 = sl;
    0x00052c52 bl 0x9d84                                         |     fcn_00009d84 (r0, r1);
    0x00052c56 ldr r3, [sp, 0x94]                                |     r3 = *(arg_94h);
    0x00052c58 b.w 0x4e3b0                                       |     goto label_172;
                                                                 | label_571:
    0x00052c5c blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x00052c60 ldr.w r1, [pc, 0xac0]                             |     r1 = *(0x00053724);
    0x00052c64 add.w r3, r0, 0x14                                |     r3 = r0 + 0x14;
    0x00052c68 movw r2, 0xe123                                   |     r2 = 0xe123;
    0x00052c6c movs r0, 0xb                                      |     r0 = 0xb;
    0x00052c6e add r1, pc                                        |     r1 += pc;
    0x00052c70 blx 0x6820                                        |     fcn_00006820 ();
    0x00052c74 ldrb r3, [r4, 9]                                  |     r3 = *((r4 + 9));
    0x00052c76 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00052c78 bne.w 0x5318a                                     |         goto label_713;
                                                                 |     }
    0x00052c7c ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00052c7e mov.w sb, 0xb                                     |     sb = 0xb;
    0x00052c82 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x00052c86 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00052c88 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
    0x00052c8a b.w 0x50538                                       |     goto label_39;
                                                                 | label_594:
    0x00052c8e ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x00052c90 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x00052c92 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x00052c96 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x00052c9a ldr r7, [r3, 0x18]                                |     r7 = *((r3 + 0x18));
    0x00052c9c ldr r0, [r3, 4]                                   |     r0 = *((r3 + 4));
    0x00052c9e strd r7, r7, [r4, 0x48]                           |     __asm ("strd r7, r7, [r4, 0x48]");
    0x00052ca2 str r0, [r4, 0x54]                                |     *((r4 + 0x54)) = r0;
    0x00052ca4 b.w 0x4e39c                                       |     goto label_173;
                                                                 | label_514:
    0x00052ca8 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x00052caa ldrb r3, [r2, 9]                                  |     r3 = *((r2 + 9));
    0x00052cac cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00052cae beq.w 0x5134c                                     |         goto label_174;
                                                                 |     }
    0x00052cb2 ldr r4, [r2, 0xc]                                 |     r4 = *((r2 + 0xc));
    0x00052cb4 subs r4, 1                                        |     r4--;
    0x00052cb6 str r4, [r2, 0xc]                                 |     *((r2 + 0xc)) = r4;
    0x00052cb8 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00052cba bne.w 0x5134c                                     |         goto label_174;
                                                                 |     }
    0x00052cbe ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00052cc0 mov r5, r2                                        |     r5 = r2;
    0x00052cc2 ldr r0, [r3, 0x38]                                |     r0 = *((r3 + 0x38));
    0x00052cc4 blx 0x63dc                                        |     fcn_000063dc ();
    0x00052cc8 strb r4, [r5, 0xa]                                |     *((r5 + 0xa)) = r4;
    0x00052cca b.w 0x5134c                                       |     goto label_174;
                                                                 | label_646:
    0x00052cce ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00052cd0 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00052cd2 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00052cd4 b.w 0x51622                                       |     goto label_113;
                                                                 | label_431:
    0x00052cd8 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00052cda ldr.w r5, [r3, 0xa8]                              |     r5 = *((r3 + 0xa8));
    0x00052cde cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00052ce0 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x00052ce4 b.w 0x4f222                                       |     goto label_175;
                                                                 | label_647:
    0x00052ce8 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
    0x00052cec ite eq                                            |     
                                                                 |     if (r5 != 0) {
    0x00052cee moveq r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r5 == 0) {
    0x00052cf0 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00052cf2 b.w 0x51eb8                                       |     goto label_176;
                                                                 | label_504:
    0x00052cf6 ldr.w r3, [fp, 0x1e8]                             |     r3 = *(arg_1e8h);
    0x00052cfa adds r3, 1                                        |     r3++;
    0x00052cfc str.w r3, [fp, 0x1e8]                             |     __asm ("str.w r3, [arg_1e8h]");
    0x00052d00 b.w 0x500ec                                       |     goto label_177;
                                                                 | label_596:
    0x00052d04 mov r0, r7                                        |     r0 = r7;
    0x00052d06 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00052d0a b.w 0x512a6                                       |     goto label_178;
                                                                 | label_598:
    0x00052d0e ldr.w r0, [r8]                                    |     r0 = *(r8);
    0x00052d12 ldrb.w r2, [r0, 0x51]                             |     r2 = *((r0 + 0x51));
    0x00052d16 cmp r2, 1                                         |     
    0x00052d18 ittt ne                                           |     
                                                                 |     if (r2 == 1) {
    0x00052d1a movne r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (r2 == 1) {
    0x00052d1c addne r7, sp, 0xd8                                |         r7 += arg_d8h;
                                                                 |     }
                                                                 |     if (r2 == 1) {
    0x00052d1e addne r4, sp, 0xdc                                |         r4 += arg_dch;
                                                                 |     }
                                                                 |     if (r2 == 1) {
    0x00052d20 beq.w 0x536a6                                     |         goto label_714;
                                                                 |     }
                                                                 | label_277:
    0x00052d24 str r2, [r7]                                      |     *(r7) = r2;
    0x00052d26 str r3, [r4]                                      |     *(r4) = r3;
    0x00052d28 b.w 0x51388                                       |     goto label_179;
                                                                 | label_321:
    0x00052d2c str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x00052d30 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_374:
    0x00052d34 ldr r1, [r4, 0x54]                                |     r1 = *((r4 + 0x54));
    0x00052d36 str r1, [sp, 0x34]                                |     *(arg_34h) = r1;
    0x00052d38 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00052d3a beq.w 0x5394a                                     |         goto label_715;
                                                                 |     }
    0x00052d3e ldr r1, [sp, 0x34]                                |     r1 = *(arg_34h);
    0x00052d40 str r1, [sp, 0x4c]                                |     *(arg_4ch) = r1;
                                                                 | label_237:
    0x00052d42 ldr r0, [sp, 0x3c]                                |     r0 = *(arg_3ch);
    0x00052d44 add.w sl, sp, 0x94                                |     sl += arg_94h;
    0x00052d48 ldr r1, [sp, 0x34]                                |     r1 = *(arg_34h);
    0x00052d4a strd r4, r8, [sp, 0x50]                           |     __asm ("strd r4, r8, [sp, 0x50]");
    0x00052d4e ldr.w r3, [r0, r3, lsl 2]                         |     offset_56 = r3 << 2;
                                                                 |     r3 = *((r0 + offset_56));
    0x00052d52 add.w sb, r1, r2                                  |     sb = r1 + r2;
    0x00052d56 lsls r2, r6, 2                                    |     r2 = r6 << 2;
    0x00052d58 str.w r3, [sl]                                    |     __asm ("str.w r3, [sl]");
    0x00052d5c adds r7, r0, r2                                   |     r7 = r0 + r2;
    0x00052d5e ldr r3, [sp, 0x48]                                |     r3 = *(arg_48h);
    0x00052d60 ldr.w r3, [r8, r3, lsl 2]                         |     offset_57 = r3 << 2;
                                                                 |     r3 = *((r8 + offset_57));
    0x00052d64 mov r8, r5                                        |     r8 = r5;
    0x00052d66 add r3, r1                                        |     r3 += r1;
    0x00052d68 ldr.w r1, [pc, 0x9bc]                             |     r1 = *(0x00053728);
    0x00052d6c mov r5, r3                                        |     r5 = r3;
    0x00052d6e add r1, pc                                        |     r1 += pc;
    0x00052d70 str r1, [sp, 0x58]                                |     *(arg_58h) = r1;
    0x00052d72 add r1, sp, 0xa8                                  |     r1 += arg_a8h;
    0x00052d74 str r1, [sp, 0x48]                                |     *(arg_48h) = r1;
    0x00052d76 add.w r1, r2, 0x54                                |     r1 = r2 + 0x54;
    0x00052d7a adds r2, r4, r1                                   |     r2 = r4 + r1;
    0x00052d7c ldr r1, [sp, 0x48]                                |     r1 = *(arg_48h);
    0x00052d7e mov r4, r2                                        |     r4 = r2;
    0x00052d80 b 0x52dcc                                         |     goto label_716;
                                                                 | label_181:
    0x00052d82 add.w sb, sb, 1                                   |     sb++;
    0x00052d86 str r0, [r1]                                      |     *(r1) = r0;
                                                                 | label_182:
    0x00052d88 cmp r0, 0xb                                       |     
    0x00052d8a str r0, [r4, 4]!                                  |     *((r4 += 4)) = r0;
    0x00052d8e iteet ls                                          |     
                                                                 |     if (r0 > 0xb) {
    0x00052d90 ldrls r3, [sp, 0x58]                              |         r3 = *(arg_58h);
                                                                 |     }
                                                                 |     if (r0 <= 0xb) {
    0x00052d92 subhi r0, 0xc                                     |         r0 -= 0xc;
                                                                 |     }
                                                                 |     if (r0 <= 0xb) {
    0x00052d94 lsrhi ip, r0, 1                                   |         
                                                                 |     }
                                                                 |     if (r0 <= 0xb) {
    0x00052d98 adds r0, r0, r3                                   |         r0 += r3;
                                                                 |     }
    0x00052d9a it ls                                             |     
                                                                 |     if (r0 > r0) {
    0x00052d9c ldrbls ip, [r0, 0xa6c]                            |         ip = *((r0 + 0xa6c));
                                                                 |     }
    0x00052da0 ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x00052da4 adds.w r0, r0, ip                                 |     r0 += ip;
    0x00052da8 str.w r0, [sl]                                    |     __asm ("str.w r0, [sl]");
                                                                 |     if (r0 >= r0) {
    0x00052dac bhs.w 0x5398a                                     |         goto label_717;
                                                                 |     }
    0x00052db0 str r0, [r7, 4]!                                  |     *((r7 += 4)) = r0;
    0x00052db4 adds r6, 1                                        |     r6++;
    0x00052db6 ldr r0, [sp, 0x28]                                |     r0 = *(arg_28h);
    0x00052db8 cmp r0, r6                                        |     
    0x00052dba ite lt                                            |     
                                                                 |     if (r0 >= r6) {
    0x00052dbc movlt r0, 0                                       |         r0 = 0;
                                                                 |     }
                                                                 |     if (r0 < r6) {
    0x00052dbe movge r0, 1                                       |         r0 = 1;
                                                                 |     }
    0x00052dc0 cmp sb, r5                                        |     
    0x00052dc2 it hs                                             |     
                                                                 |     if (sb < r5) {
    0x00052dc4 movhs r0, 0                                       |         r0 = 0;
                                                                 |     }
    0x00052dc6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00052dc8 beq.w 0x521b4                                     |         goto label_180;
                                                                 |     }
                                                                 | label_716:
    0x00052dcc ldrb.w r0, [sb]                                   |     r0 = *(sb);
    0x00052dd0 lsls r3, r0, 0x18                                 |     r3 = r0 << 0x18;
                                                                 |     if (r3 >= r0) {
    0x00052dd2 bpl 0x52d82                                       |         goto label_181;
                                                                 |     }
    0x00052dd4 mov r0, sb                                        |     r0 = sb;
    0x00052dd6 str r1, [sp, 0x48]                                |     *(arg_48h) = r1;
    0x00052dd8 bl 0x9d84                                         |     fcn_00009d84 (r0, r1);
    0x00052ddc ldr r1, [sp, 0x48]                                |     r1 = *(arg_48h);
    0x00052dde add sb, r0                                        |     sb += r0;
    0x00052de0 ldr r0, [r1]                                      |     r0 = *(r1);
    0x00052de2 b 0x52d88                                         |     goto label_182;
                                                                 | label_640:
    0x00052de4 ldrd r2, r0, [r4]                                 |     __asm ("ldrd r2, r0, [r4]");
    0x00052de8 mov r3, sb                                        |     r3 = sb;
    0x00052dea ldr r1, [r7]                                      |     r1 = *(r7);
    0x00052dec str.w sb, [r4, 8]                                 |     __asm ("str.w sb, [r4, 8]");
    0x00052df0 str r2, [sp]                                      |     *(sp) = r2;
    0x00052df2 movs r2, 1                                        |     r2 = 1;
    0x00052df4 bl 0x119f0                                        |     r0 = fcn_000119f0 (r0, r1, r2, r3, r4);
    0x00052df8 mov r6, r0                                        |     r6 = r0;
    0x00052dfa b.w 0x51ce4                                       |     goto label_183;
                                                                 | label_679:
    0x00052dfe ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x00052e00 mov r3, r4                                        |     r3 = r4;
    0x00052e02 ldr r4, [sp, 0x24]                                |     r4 = *((sp + 0x24));
    0x00052e04 mov r1, fp                                        |     r1 = fp;
    0x00052e06 mov.w sb, 1                                       |     sb = 1;
    0x00052e0a add.w r8, r2, 1                                   |     r8 = r2 + 1;
    0x00052e0e ldr.w r2, [pc, 0x91c]                             |     r2 = *(0x0005372c);
    0x00052e12 add.w r0, r4, 0x2c                                |     r0 = r4 + 0x2c;
    0x00052e16 add r2, pc                                        |     r2 += pc;
    0x00052e18 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x00052e1c ldr r0, [r4, 0x2c]                                |     r0 = *((r4 + 0x2c));
    0x00052e1e b.w 0x50538                                       |     goto label_39;
                                                                 | label_561:
    0x00052e22 mov r0, r8                                        |     r0 = r8;
    0x00052e24 blx 0x5f0c                                        |     fcn_00005f0c ();
    0x00052e28 ldr.w r2, [pc, 0x904]                             |     r2 = *(0x00053730);
    0x00052e2c mov r3, r0                                        |     r3 = r0;
    0x00052e2e ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x00052e30 mov r1, fp                                        |     r1 = fp;
    0x00052e32 add r2, pc                                        |     r2 += pc;
    0x00052e34 adds r0, 0x2c                                     |     r0 += 0x2c;
    0x00052e36 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x00052e3a ldr r6, [r7, 0x40]                                |     r6 = *((r7 + 0x40));
    0x00052e3c b.w 0x50a3e                                       |     goto label_184;
                                                                 | label_362:
    0x00052e40 mov r0, r4                                        |     r0 = r4;
    0x00052e42 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00052e44 pld [pc, -0x7fb]                                  |     __asm ("pld aav.0x00000085");
                                                                 |     if (r5 != 0) {
    0x00052e48 cbnz r5, 0x52e7e                                  |         goto label_718;
                                                                 |     }
                                                                 | label_447:
    0x00052e4a ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x00052e4c str r4, [r5, 8]                                   |     *((r5 + 8)) = r4;
    0x00052e4e ldr r0, [r5]                                      |     r0 = *(r5);
    0x00052e50 subs r3, 1                                        |     r3--;
    0x00052e52 str r4, [r7, 0x3c]                                |     *((r7 + 0x3c)) = r4;
    0x00052e54 str r3, [r5, 0xc]                                 |     *((r5 + 0xc)) = r3;
    0x00052e56 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00052e58 bne.w 0x505d0                                     |         goto label_185;
                                                                 |     }
    0x00052e5c mov r1, r5                                        |     r1 = r5;
    0x00052e5e bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00052e62 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00052e64 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00052e66 adds r3, 1                                        |     r3++;
    0x00052e68 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00052e6a ldrb.w r3, [r2, 0x58]                             |     r3 = *((r2 + 0x58));
    0x00052e6e bfi r3, r4, 2, 2                                  |     value_58 = BIT_MASK (2, 2);
                                                                 |     value_59 = r4 & value_58;
                                                                 |     value_58 = ~value_58;
                                                                 |     r3 &= value_58;
                                                                 |     r3 |= value_59;
    0x00052e72 strb.w r3, [r2, 0x58]                             |     *((r2 + 0x58)) = r3;
    0x00052e76 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_648:
    0x00052e7a lsrs r3, r6, 7                                    |     r3 = r6 >> 7;
    0x00052e7c movs r5, 2                                        |     r5 = 2;
                                                                 | label_718:
    0x00052e7e orn r3, r3, 0x7f                                  |     r3 |= 0x7f;
                                                                 |     r3 = ~r3;
    0x00052e82 strb.w r3, [sb]                                   |     *(sb) = r3;
    0x00052e86 and r3, r6, 0x7f                                  |     r3 = r6 & 0x7f;
    0x00052e8a strb.w r3, [sb, 1]                                |     *((sb + 1)) = r3;
    0x00052e8e b.w 0x506be                                       |     goto label_117;
                                                                 | label_459:
    0x00052e92 mov r0, r4                                        |     r0 = r4;
    0x00052e94 bl 0x173c0                                        |     fcn_000173c0 (r0);
    0x00052e98 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x00052e9a mov r6, r0                                        |     r6 = r0;
    0x00052e9c bic r3, r3, 0x4000                                |     r3 = BIT_MASK (r3, 0x4000);
    0x00052ea0 bic r3, r3, 0x1c                                  |     r3 = BIT_MASK (r3, 0x1c);
    0x00052ea4 strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x00052ea6 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00052ea8 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x00052eac b.w 0x4d740                                       |     goto label_7;
                                                                 | label_695:
    0x00052eb0 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00052eb2 mov r1, r6                                        |     r1 = r6;
    0x00052eb4 ldr r0, [r5]                                      |     r0 = *(r5);
    0x00052eb6 mov r2, r7                                        |     r2 = r7;
    0x00052eb8 mov sl, r6                                        |     sl = r6;
    0x00052eba bl 0x2a698                                        |     r0 = fcn_0002a698 (r0, r1, r2, r3);
    0x00052ebe mov r6, r0                                        |     r6 = r0;
    0x00052ec0 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00052ec2 bne.w 0x527e8                                     |         goto label_186;
                                                                 |     }
    0x00052ec6 ldr r3, [r7]                                      |     r3 = *(r7);
    0x00052ec8 ldrd r2, sb, [r3, 4]                              |     __asm ("ldrd r2, sb, [r3, 4]");
    0x00052ecc str.w r3, [sb, 0x44]                              |     __asm ("str.w r3, [sb, 0x44]");
    0x00052ed0 mov r3, sl                                        |     r3 = sl;
    0x00052ed2 cmp r3, 1                                         |     
    0x00052ed4 strd r5, r2, [sb, 0x34]                           |     __asm ("strd r5, r2, [sb, 0x34]");
    0x00052ed8 str.w sl, [sb, 0x48]                              |     __asm ("str.w sl, [sb, 0x48]");
                                                                 |     if (r3 == 1) {
    0x00052edc beq.w 0x53594                                     |         goto label_719;
                                                                 |     }
    0x00052ee0 mov r2, r0                                        |     r2 = r0;
    0x00052ee2 strb.w r0, [sb, 5]                                |     *((sb + 5)) = r0;
    0x00052ee6 mov r1, sl                                        |     r1 = sl;
    0x00052ee8 mov r0, r8                                        |     r0 = r8;
    0x00052eea bl 0x301ec                                        |     r0 = fcn_000301ec (r0, r1, r2);
    0x00052eee mov r5, r0                                        |     r5 = r0;
    0x00052ef0 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00052ef2 bne.w 0x535ac                                     |         goto label_720;
                                                                 |     }
    0x00052ef6 ldr r3, [sp, 0x2c]                                |     r3 = *(arg_2ch);
    0x00052ef8 cmp r3, 1                                         |     
                                                                 |     if (r3 < 1) {
    0x00052efa bls.w 0x53e22                                     |         goto label_721;
                                                                 |     }
    0x00052efe ldr r2, [sp, 0x28]                                |     r2 = *(arg_28h);
    0x00052f00 ldrb r3, [r2, 0x11]                               |     r3 = *((r2 + 0x11));
    0x00052f02 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00052f04 beq.w 0x53e60                                     |         goto label_722;
                                                                 |     }
    0x00052f08 add.w sl, sp, 0xb0                                |     sl += arg_b0h;
    0x00052f0c movs r1, 4                                        |     r1 = 4;
    0x00052f0e mov r2, sl                                        |     r2 = sl;
    0x00052f10 mov r0, r8                                        |     r0 = r8;
    0x00052f12 bl 0x11954                                        |     fcn_00011954 (r0, r1, r2);
    0x00052f16 ldr r6, [sp, 0xb0]                                |     r6 = *(arg_b0h);
    0x00052f18 ldr r3, [sp, 0x2c]                                |     r3 = *(arg_2ch);
    0x00052f1a cmp r3, r6                                        |     
                                                                 |     if (r3 == r6) {
    0x00052f1c beq.w 0x53df8                                     |         goto label_723;
                                                                 |     }
    0x00052f20 ldr.w r0, [sb, 0x44]                              |     r0 = *((sb + 0x44));
    0x00052f24 bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x00052f28 ldr r0, [sp, 0x28]                                |     r0 = *(arg_28h);
    0x00052f2a mov r3, r5                                        |     r3 = r5;
    0x00052f2c mov r2, r7                                        |     r2 = r7;
    0x00052f2e mov r1, r6                                        |     r1 = r6;
    0x00052f30 ldr r0, [r0]                                      |     r0 = *(r0);
    0x00052f32 bl 0x2a698                                        |     r0 = fcn_0002a698 (r0, r1, r2, r3);
    0x00052f36 mov r5, r0                                        |     r5 = r0;
    0x00052f38 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00052f3a bne.w 0x53e16                                     |         goto label_724;
                                                                 |     }
    0x00052f3e ldr r1, [r7]                                      |     r1 = *(r7);
    0x00052f40 cmp r6, 1                                         |     
    0x00052f42 ldr.w sl, [sp, 0x28]                              |     sl = *(arg_28h);
    0x00052f46 it eq                                             |     
                                                                 |     if (r6 != 1) {
    0x00052f48 moveq r4, 0x64                                    |         r4 = 0x64;
                                                                 |     }
    0x00052f4a mov r3, r0                                        |     r3 = r0;
    0x00052f4c movs r2, 1                                        |     r2 = 1;
    0x00052f4e ldrd ip, sb, [r1, 4]                              |     __asm ("ldrd ip, sb, [r1, 4]");
    0x00052f52 mov r0, sl                                        |     r0 = sl;
    0x00052f54 str.w r1, [sb, 0x44]                              |     __asm ("str.w r1, [sb, 0x44]");
    0x00052f58 mov r1, sb                                        |     r1 = sb;
    0x00052f5a str.w ip, [sb, 0x38]                              |     __asm ("str.w ip, [sb, 0x38]");
    0x00052f5e str.w sl, [sb, 0x34]                              |     __asm ("str.w sl, [sb, 0x34]");
    0x00052f62 str.w r6, [sb, 0x48]                              |     __asm ("str.w r6, [sb, 0x48]");
    0x00052f66 strb.w r4, [sb, 5]                                |     *((sb + 5)) = r4;
    0x00052f6a str r5, [sp, 4]                                   |     *(arg_4h) = r5;
    0x00052f6c ldr r5, [sp, 0x2c]                                |     r5 = *(arg_2ch);
    0x00052f6e str r5, [sp]                                      |     *(sp) = r5;
    0x00052f70 bl 0x2f55c                                        |     r0 = fcn_0002f55c (r0, r1, r2, r3, r4, r5);
    0x00052f74 mov r5, r0                                        |     r5 = r0;
    0x00052f76 ldr.w r0, [sb, 0x44]                              |     r0 = *((sb + 0x44));
    0x00052f7a bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x00052f7e cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00052f80 bne.w 0x53e16                                     |         goto label_724;
                                                                 |     }
    0x00052f84 mov r3, r5                                        |     r3 = r5;
    0x00052f86 ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x00052f8a mov r2, r7                                        |     r2 = r7;
    0x00052f8c mov r1, r6                                        |     r1 = r6;
    0x00052f8e str.w sl, [sp, 0x28]                              |     __asm ("str.w sl, [arg_28h]");
    0x00052f92 bl 0x2a698                                        |     r0 = fcn_0002a698 (r0, r1, r2, r3);
    0x00052f96 mov r5, r0                                        |     r5 = r0;
    0x00052f98 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00052f9a bne.w 0x53e16                                     |         goto label_724;
                                                                 |     }
    0x00052f9e ldr r1, [r7]                                      |     r1 = *(r7);
    0x00052fa0 mov r2, r6                                        |     r2 = r6;
    0x00052fa2 ldr r0, [sp, 0x28]                                |     r0 = *(arg_28h);
    0x00052fa4 ldrd r3, r7, [r1, 4]                              |     __asm ("ldrd r3, r7, [r1, 4]");
    0x00052fa8 str r1, [r7, 0x44]                                |     *((r7 + 0x44)) = r1;
    0x00052faa mov r1, r7                                        |     r1 = r7;
    0x00052fac str r3, [r7, 0x38]                                |     *((r7 + 0x38)) = r3;
    0x00052fae strb r4, [r7, 5]                                  |     *((r7 + 5)) = r4;
    0x00052fb0 str r0, [r7, 0x34]                                |     *((r7 + 0x34)) = r0;
    0x00052fb2 str r6, [r7, 0x48]                                |     *((r7 + 0x48)) = r6;
    0x00052fb4 bl 0x2fc54                                        |     r0 = fcn_0002fc54 (r0, r1, r2, r3);
    0x00052fb8 mov r5, r0                                        |     r5 = r0;
    0x00052fba ldr r0, [r7, 0x44]                                |     r0 = *((r7 + 0x44));
    0x00052fbc bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x00052fc0 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00052fc2 bne.w 0x53e16                                     |         goto label_724;
                                                                 |     }
    0x00052fc6 mov r5, r6                                        |     r5 = r6;
                                                                 | label_270:
    0x00052fc8 ldr.w r3, [pc, 0x768]                             |     
    0x00052fcc subs r4, r6, 1                                    |     r4 = r6 - 1;
    0x00052fce ldr r6, [sp, 0x28]                                |     r6 = *(arg_28h);
    0x00052fd0 movw sb, 0xcccd                                   |     
    0x00052fd4 movt sb, 0xcccc                                   |     sb = 0xcccccccd;
    0x00052fd8 add r3, pc                                        |     r3 = 0xa6710;
    0x00052fda ldr.w r0, [r3, 0x110]                             |     r0 = *(0xa6820);
    0x00052fde mov sl, r6                                        |     sl = r6;
    0x00052fe0 ldr r1, [r6, 0x20]                                |     r1 = *((r6 + 0x20));
    0x00052fe2 bl 0x5dc60                                        |     r0 = fcn_0005dc60 (r0, r1, r2);
    0x00052fe6 adds r7, r0, 1                                    |     r7 = r0 + 1;
    0x00052fe8 b 0x52fec                                         |     
                                                                 |     while (r7 == r4) {
                                                                 | label_187:
    0x00052fea subs r4, 1                                        |         r4--;
    0x00052fec cmp r7, r4                                        |         
    0x00052fee beq 0x52fea                                       |         
                                                                 |     }
    0x00052ff0 cmp r4, 1                                         |     
    0x00052ff2 it ls                                             |     
                                                                 |     if (r4 > 1) {
    0x00052ff4 movls r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r4 >= 1) {
    0x00052ff6 bls 0x53018                                       |         
    0x00052ff8 ldr.w r3, [sl, 0x24]                              |         r3 = *((sl + 0x24));
    0x00052ffc subs r0, r4, 2                                    |         r0 = r4 - 2;
    0x00052ffe umull r3, r6, sb, r3                              |         r3:r6 = sb * r3;
    0x00053002 lsrs r6, r6, 2                                    |         r6 >>= 2;
    0x00053004 adds r6, 1                                        |         r6++;
    0x00053006 mov r1, r6                                        |         r1 = r6;
    0x00053008 bl 0x5dc60                                        |         r0 = fcn_0005dc60 (r0, r1, r2);
    0x0005300c mul r2, r6, r0                                    |         r2 = r6 * r0;
    0x00053010 adds r3, r2, 2                                    |         r3 = r2 + 2;
    0x00053012 cmp r7, r3                                        |         
    0x00053014 it eq                                             |         
                                                                 |         if (r7 == r3) {
    0x00053016 addeq r3, r2, 3                                   |             r3 = r2 + 3;
                                                                 |             goto label_725;
                                                                 |         }
                                                                 |     }
                                                                 | label_725:
    0x00053018 cmp r3, r4                                        |     
                                                                 |     if (r3 == r4) {
    0x0005301a beq 0x52fea                                       |         goto label_187;
                                                                 |     }
    0x0005301c mov r2, r4                                        |     r2 = r4;
    0x0005301e movs r1, 4                                        |     r1 = 4;
    0x00053020 mov r0, r8                                        |     r0 = r8;
    0x00053022 asrs r4, r5, 0x1f                                 |     r4 = r5 >> 0x1f;
    0x00053024 mov r7, r5                                        |     r7 = r5;
    0x00053026 bl 0x2c060                                        |     r0 = fcn_0002c060 (r0, r1, r2);
    0x0005302a mov r6, r0                                        |     r6 = r0;
                                                                 | label_273:
    0x0005302c ldrb.w r3, [r8, 9]                                |     r3 = *((r8 + 9));
    0x00053030 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00053032 beq.w 0x52808                                     |         goto label_188;
                                                                 |     }
    0x00053036 b.w 0x527f8                                       |     goto label_189;
                                                                 | label_696:
    0x0005303a ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005303c mov sb, r6                                        |     sb = r6;
    0x0005303e ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x00053040 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00053044 adds r3, 1                                        |     r3++;
    0x00053046 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053048 movs r3, 4                                        |     r3 = 4;
    0x0005304a vstr d16, [r2, 0x10]                              |     __asm ("vstr d16, [r2, 0x10]");
    0x0005304e strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x00053050 b.w 0x4d742                                       |     goto label_25;
                                                                 | label_490:
    0x00053054 ldrd r7, r3, [r6, 8]                              |     __asm ("ldrd r7, r3, [r6, 8]");
    0x00053058 mov r0, fp                                        |     r0 = fp;
    0x0005305a add r7, r3                                        |     r7 += r3;
    0x0005305c adds r3, 0x12                                     |     r3 += 0x12;
    0x0005305e lsl.w r8, r7, 2                                   |     r8 = r7 << 2;
    0x00053062 add.w r1, r8, r7                                  |     r1 = r8 + r7;
    0x00053066 add.w r1, r3, r1, lsl 1                           |     r1 = r3 + (r1 << 1);
    0x0005306a add.w r1, r2, r1, lsl 2                           |     r1 = r2 + (r1 << 2);
    0x0005306e bl 0xdb58                                         |     r0 = fcn_0000db58 (r0, r1);
    0x00053072 mov r5, r0                                        |     r5 = r0;
    0x00053074 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00053076 beq.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x0005307a ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0005307c movw r2, 0x2460                                   |     r2 = 0x2460;
    0x00053080 tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x00053082 bne.w 0x5362c                                     |         goto label_726;
                                                                 |     }
                                                                 | label_219:
    0x00053086 ldr r1, [r4, 0x24]                                |     r1 = *((r4 + 0x24));
                                                                 |     if (r1 != 0) {
    0x00053088 cbz r1, 0x53094                                   |         
    0x0005308a ldr r0, [r4]                                      |         r0 = *(r4);
    0x0005308c bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x00053090 movs r3, 0                                        |         r3 = 0;
    0x00053092 str r3, [r4, 0x24]                                |         *((r4 + 0x24)) = r3;
                                                                 |     }
    0x00053094 ldr r1, [sp, 0x24]                                |     r1 = *((sp + 0x24));
    0x00053096 add.w r2, r8, r7                                  |     r2 = r8 + r7;
    0x0005309a mov.w sl, 0                                       |     sl = 0;
    0x0005309e ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x000530a0 str r5, [r4, 0x10]                                |     *((r4 + 0x10)) = r5;
    0x000530a2 add.w r2, r5, r2, lsl 3                           |     r2 = r5 + (r2 << 3);
    0x000530a6 ldr r0, [r1, 4]                                   |     r0 = *((r1 + 4));
    0x000530a8 ldr.w sb, [r1, 8]                                 |     sb = *((r1 + 8));
    0x000530ac adds r2, 0x48                                     |     r2 += 0x48;
    0x000530ae ldr.w r8, [r1, 0x1c]                              |     r8 = *((r1 + 0x1c));
    0x000530b2 ldr.w lr, [r1, 0x38]                              |     
    0x000530b6 ldr.w ip, [r1, 0x24]                              |     ip = *((r1 + 0x24));
    0x000530ba ldr r1, [r1, 0x20]                                |     r1 = *((r1 + 0x20));
    0x000530bc str r1, [sp, 0x20]                                |     *(arg_20h) = r1;
    0x000530be ldr r1, [r6, 0x14]                                |     r1 = *((r6 + 0x14));
    0x000530c0 str r1, [sp, 0x28]                                |     *(arg_28h) = r1;
    0x000530c2 ldr r1, [sp, 0x24]                                |     r1 = *((sp + 0x24));
    0x000530c4 ldr.w r1, [r1, 0xc8]                              |     r1 = *((r1 + 0xc8));
    0x000530c8 str r1, [sp, 0x2c]                                |     *(arg_2ch) = r1;
    0x000530ca ldr r1, [sp, 0x24]                                |     r1 = *((sp + 0x24));
    0x000530cc ldr.w r1, [r1, 0xc4]                              |     r1 = *((r1 + 0xc4));
    0x000530d0 str.w sl, [r4, 4]                                 |     __asm ("str.w sl, [r4, 4]");
    0x000530d4 mov.w sl, 0x40                                    |     sl = 0x40;
    0x000530d8 strh.w sl, [r4, 0x1c]                             |     *((r4 + 0x1c)) = sl;
    0x000530dc ldr r4, [sp, 0x1c]                                |     r4 = *(arg_1ch);
    0x000530de str r0, [r5, 8]                                   |     *((r5 + 8)) = r0;
    0x000530e0 ldr r0, [sp, 0x20]                                |     r0 = *(arg_20h);
    0x000530e2 str r4, [r5, 0x2c]                                |     *((r5 + 0x2c)) = r4;
    0x000530e4 ldr r4, [sp, 0x28]                                |     r4 = *(arg_28h);
    0x000530e6 str r0, [r5, 0x30]                                |     *((r5 + 0x30)) = r0;
    0x000530e8 str.w sb, [r5, 0xc]                               |     __asm ("str.w sb, [r5, 0xc]");
    0x000530ec str r4, [r5, 0x18]                                |     *((r5 + 0x18)) = r4;
    0x000530ee ldr r4, [sp, 0x2c]                                |     r4 = *(arg_2ch);
    0x000530f0 str.w r8, [r5, 0x34]                              |     __asm ("str.w r8, [r5, 0x34]");
    0x000530f4 str.w lr, [r5, 0x14]                              |     __asm ("str.w lr, [r5, 0x14]");
    0x000530f8 str.w ip, [r5, 0x28]                              |     __asm ("str.w ip, [r5, 0x28]");
    0x000530fc str r4, [r5, 0x10]                                |     *((r5 + 0x10)) = r4;
    0x000530fe str r1, [r5, 0x38]                                |     *((r5 + 0x38)) = r1;
    0x00053100 add.w r1, r5, 0x48                                |     r1 = r5 + 0x48;
    0x00053104 ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x00053106 cmp r2, r1                                        |     
    0x00053108 strd r7, r3, [r5, 0x3c]                           |     __asm ("strd r7, r3, [r5, 0x3c]");
    0x0005310c str r0, [r5]                                      |     *(r5) = r0;
    0x0005310e ldr.w r0, [r0, 0xb8]                              |     r0 = *((r0 + 0xb8));
                                                                 |     if (r2 == r1) {
    0x00053112 beq 0x53120                                       |         goto label_727;
                                                                 |     }
    0x00053114 movs r4, 0x80                                     |     r4 = 0x80;
                                                                 |     do {
    0x00053116 strh r4, [r1, 0x1c]                               |         *((r1 + 0x1c)) = r4;
    0x00053118 str fp, [r1], 0x28                                |         *(r1) = fp;
                                                                 |         r1 += 0x28;
    0x0005311c cmp r2, r1                                        |         
    0x0005311e bne 0x53116                                       |         
                                                                 |     } while (r2 != r1);
                                                                 | label_727:
    0x00053120 ldr r2, [r6, 0x10]                                |     r2 = *((r6 + 0x10));
    0x00053122 b.w 0x4feea                                       |     goto label_190;
                                                                 | label_415:
    0x00053126 mov r1, r3                                        |     r1 = r3;
    0x00053128 b.w 0x4ee3c                                       |     goto label_191;
                                                                 | label_414:
    0x0005312c ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x0005312e movs r1, 0                                        |     r1 = 0;
    0x00053130 str r1, [r3, 4]                                   |     *((r3 + 4)) = r1;
    0x00053132 b.w 0x4ee3c                                       |     goto label_191;
                                                                 | label_703:
    0x00053136 lsls r0, r3, 0x18                                 |     r0 = r3 << 0x18;
                                                                 |     if (r0 >= r3) {
    0x00053138 bpl 0x53168                                       |         goto label_728;
                                                                 |     }
                                                                 | label_706:
    0x0005313a add r0, sp, 0xb0                                  |     r0 += arg_b0h;
    0x0005313c b 0x52a6a                                         |     goto label_192;
                                                                 | label_529:
    0x0005313e mov r3, r1                                        |     r3 = r1;
    0x00053140 b.w 0x50466                                       |     goto label_193;
                                                                 | label_526:
    0x00053144 mov r3, r1                                        |     r3 = r1;
    0x00053146 b.w 0x50402                                       |     goto label_194;
                                                                 | label_521:
    0x0005314a mov r3, r1                                        |     r3 = r1;
    0x0005314c b.w 0x503aa                                       |     goto label_195;
                                                                 | label_446:
    0x00053150 movs r3, 1                                        |     r3 = 1;
    0x00053152 strb.w r3, [fp, 0x40]                             |     *(arg_40h) = r3;
    0x00053156 ldr r0, [r7]                                      |     r0 = *(r7);
    0x00053158 ldr r3, [r5, 0x1c]                                |     r3 = *((r5 + 0x1c));
    0x0005315a blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0005315c b.w 0x4dbae                                       |     goto label_20;
                                                                 | label_702:
    0x00053160 cmp.w r8, 0xb                                     |     
                                                                 |     if (r8 > 0xb) {
    0x00053164 bhi.w 0x52a50                                     |         goto label_196;
                                                                 |     }
                                                                 | label_728:
    0x00053168 ldr.w r3, [pc, 0x5cc]                             |     
    0x0005316c add r3, pc                                        |     r3 = 0xa68a8;
    0x0005316e add r3, r8                                        |     r3 += r8;
    0x00053170 ldrb.w r6, [r3, 0xa6c]                            |     r6 = *((r3 + 0xa6c));
    0x00053174 b 0x52a58                                         |     goto label_197;
                                                                 | label_476:
    0x00053176 mov r3, r1                                        |     r3 = r1;
    0x00053178 b.w 0x4fc0e                                       |     goto label_198;
                                                                 | label_567:
    0x0005317c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005317e mov r0, fp                                        |     r0 = fp;
    0x00053180 ldr r1, [r3, 0x10]                                |     r1 = *((r3 + 0x10));
    0x00053182 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00053186 b.w 0x50bd4                                       |     goto label_199;
                                                                 | label_713:
    0x0005318a ldr r5, [r4, 0xc]                                 |     r5 = *((r4 + 0xc));
    0x0005318c ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005318e subs r5, 1                                        |     r5--;
    0x00053190 str r5, [r4, 0xc]                                 |     *((r4 + 0xc)) = r5;
    0x00053192 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00053194 beq.w 0x537bc                                     |         goto label_729;
                                                                 |     }
    0x00053198 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x0005319c ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0005319e mov.w sb, 0xb                                     |     sb = 0xb;
    0x000531a2 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
    0x000531a4 b.w 0x50538                                       |     goto label_39;
                                                                 | label_344:
    0x000531a8 movs r5, 2                                        |     r5 = 2;
    0x000531aa movs r1, 0x68                                     |     r1 = 0x68;
    0x000531ac mov r4, r5                                        |     r4 = r5;
    0x000531ae b.w 0x4de18                                       |     goto label_200;
                                                                 | label_632:
    0x000531b2 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000531b4 mov r0, r4                                        |     r0 = r4;
    0x000531b6 adds r3, 1                                        |     r3++;
    0x000531b8 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000531ba bl 0x2e7d8                                        |     fcn_0002e7d8 (r0);
    0x000531be ldrd r3, r2, [sp, 0x48]                           |     __asm ("ldrd r3, r2, [arg_48h]");
    0x000531c2 mov r6, r0                                        |     r6 = r0;
    0x000531c4 str r2, [r3, 0x44]                                |     *((r3 + 0x44)) = r2;
    0x000531c6 strb r2, [r3, 0x19]                               |     *((r3 + 0x19)) = r2;
    0x000531c8 strh r2, [r3, 0x1a]                               |     *((r3 + 0x1a)) = r2;
    0x000531ca cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x000531cc beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x000531d0 b.w 0x4d740                                       |     goto label_7;
                                                                 | label_556:
    0x000531d4 ldrd r3, r1, [r7, 0x20]                           |     __asm ("ldrd r3, r1, [r7, 0x20]");
    0x000531d8 cmp r1, r3                                        |     
                                                                 |     if (r1 != r3) {
    0x000531da beq 0x531ec                                       |         
    0x000531dc ldrb.w r3, [r7, 0x34]                             |         r3 = *((r7 + 0x34));
    0x000531e0 cmp r3, 1                                         |         
                                                                 |         if (r3 == 1) {
    0x000531e2 beq.w 0x53bf2                                     |             goto label_730;
                                                                 |         }
    0x000531e6 mov r0, r1                                        |         r0 = r1;
    0x000531e8 blx 0x6050                                        |         fcn_00006050 ();
                                                                 |     }
                                                                 | label_255:
    0x000531ec mov r0, fp                                        |     r0 = fp;
    0x000531ee ldr r1, [sp, 0x28]                                |     r1 = *(arg_28h);
    0x000531f0 ldr r4, [r7, 0x14]                                |     r4 = *((r7 + 0x14));
    0x000531f2 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x000531f6 ldr r2, [sp, 0x34]                                |     r2 = *(arg_34h);
    0x000531f8 adds r4, 1                                        |     r4++;
    0x000531fa ldr r0, [sp, 0x2c]                                |     r0 = *(arg_2ch);
    0x000531fc ldr r3, [r2, 0x10]                                |     r3 = *((r2 + 0x10));
    0x000531fe subs r3, r3, r4                                   |     r3 -= r4;
    0x00053200 str r3, [r2, 0x10]                                |     *((r2 + 0x10)) = r3;
    0x00053202 ldr r3, [r2, 0x14]                                |     r3 = *((r2 + 0x14));
    0x00053204 sbc.w r3, r3, r4, asr 31                          |     __asm ("sbc.w r3, r3, r4, asr 31");
    0x00053208 str r3, [r2, 0x14]                                |     *((r2 + 0x14)) = r3;
    0x0005320a bl 0xfdb8                                         |     fcn_0000fdb8 (r0);
    0x0005320e cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00053210 beq.w 0x50972                                     |         goto label_69;
                                                                 |     }
    0x00053214 b.w 0x4d4ec                                       |     goto label_6;
                                                                 | label_669:
    0x00053218 ldr r5, [sp, 0x48]                                |     r5 = *(arg_48h);
    0x0005321a mov r6, r7                                        |     r6 = r7;
    0x0005321c add.w sb, sb, 8                                   |     sb += 8;
                                                                 | label_264:
    0x00053220 ldrh.w r3, [sl, 0x18]                             |     r3 = *((sl + 0x18));
    0x00053224 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00053226 beq.w 0x53dbe                                     |         goto label_731;
                                                                 |     }
                                                                 | label_268:
    0x0005322a ldr.w r4, [sl, 0x10]                              |     r4 = *((sl + 0x10));
    0x0005322e subs r3, 1                                        |     r3--;
    0x00053230 strh.w r3, [sl, 0x18]                             |     *((sl + 0x18)) = r3;
    0x00053234 add.w r3, r4, 0x10                                |     r3 = r4 + 0x10;
    0x00053238 str.w r3, [sl, 0x10]                              |     __asm ("str.w r3, [sl, 0x10]");
    0x0005323c str.w r4, [sb]                                    |     __asm ("str.w r4, [sb]");
    0x00053240 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00053242 beq.w 0x53a18                                     |         goto label_732;
                                                                 |     }
    0x00053246 movs r3, 0                                        |     r3 = 0;
    0x00053248 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0005324c str r3, [r4, 8]                                   |     *((r4 + 8)) = r3;
    0x0005324e add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00053250 ldr.w r3, [r8, 8]                                 |     r3 = *((r8 + 8));
    0x00053254 movs r2, 0                                        |     r2 = 0;
    0x00053256 vstr d16, [r4]                                    |     __asm ("vstr d16, [r4]");
    0x0005325a str r3, [r7]                                      |     *(r7) = r3;
    0x0005325c strd r2, r2, [r8, 8]                              |     __asm ("strd r2, r2, [r8, 8]");
    0x00053260 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00053262 beq.w 0x53a14                                     |         goto label_269;
                                                                 |     }
    0x00053266 mov r0, r8                                        |     r0 = r8;
    0x00053268 mov r8, r3                                        |     r8 = r3;
    0x0005326a movs r3, 1                                        |     r3 = 1;
    0x0005326c str r5, [sp, 0x3c]                                |     *(arg_3ch) = r5;
    0x0005326e mov sb, r4                                        |     sb = r4;
    0x00053270 mov r5, r3                                        |     r5 = r3;
    0x00053272 b 0x532ac                                         |     
                                                                 |     while (r5 != 1) {
    0x00053274 subs r1, r5, 1                                    |         r1 = r5 - 1;
    0x00053276 mov r0, r7                                        |         r0 = r7;
    0x00053278 str r1, [sp, 0x48]                                |         *(arg_48h) = r1;
    0x0005327a bl 0x7858                                         |         fcn_00007858 (r0, r1);
    0x0005327e ldr r4, [r7]                                      |         r4 = *(r7);
    0x00053280 mov r2, r0                                        |         r2 = r0;
    0x00053282 cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x00053284 beq.w 0x53a0c                                     |             goto label_733;
                                                                 |         }
    0x00053288 ldr r2, [r4, 8]                                   |         r2 = *((r4 + 8));
    0x0005328a str r0, [r4, 0xc]                                 |         *((r4 + 0xc)) = r0;
    0x0005328c mov r0, r7                                        |         r0 = r7;
    0x0005328e ldr r1, [sp, 0x48]                                |         r1 = *(arg_48h);
    0x00053290 str r2, [r7]                                      |         *(r7) = r2;
    0x00053292 bl 0x7858                                         |         fcn_00007858 (r0, r1);
    0x00053296 str r0, [r4, 8]                                   |         *((r4 + 8)) = r0;
    0x00053298 mov r2, r4                                        |         r2 = r4;
    0x0005329a ldr r1, [r7]                                      |         r1 = *(r7);
                                                                 | label_201:
    0x0005329c adds r5, 1                                        |         r5++;
    0x0005329e mov r0, r8                                        |         r0 = r8;
    0x000532a0 str.w r2, [r8, 8]                                 |         __asm ("str.w r2, [r8, 8]");
    0x000532a4 cmp r1, 0                                         |         
                                                                 |         if (r1 == 0) {
    0x000532a6 beq.w 0x53de4                                     |             goto label_734;
                                                                 |         }
    0x000532aa mov r8, r1                                        |         r8 = r1;
    0x000532ac ldr.w r2, [r8, 8]                                 |         r2 = *((r8 + 8));
    0x000532b0 str r2, [r7]                                      |         *(r7) = r2;
    0x000532b2 str.w r0, [r8, 0xc]                               |         __asm ("str.w r0, [r8, 0xc]");
    0x000532b6 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x000532b8 beq.w 0x53a0c                                     |             goto label_733;
                                                                 |         }
    0x000532bc cmp r5, 1                                         |         
    0x000532be bne 0x53274                                       |         
                                                                 |     }
    0x000532c0 ldr r1, [r2, 8]                                   |     r1 = *((r2 + 8));
    0x000532c2 movs r3, 0                                        |     r3 = 0;
    0x000532c4 str r1, [r7]                                      |     *(r7) = r1;
    0x000532c6 strd r3, r3, [r2, 8]                              |     __asm ("strd r3, r3, [r2, 8]");
    0x000532ca b 0x5329c                                         |     goto label_201;
                                                                 | label_685:
    0x000532cc mov sb, r0                                        |     sb = r0;
    0x000532ce b.w 0x528f8                                       |     goto label_202;
                                                                 | label_602:
    0x000532d2 cmp r4, 6                                         |     
    0x000532d4 mov sb, r0                                        |     sb = r0;
    0x000532d6 it ne                                             |     
                                                                 |     if (r4 != 6) {
    0x000532d8 strne r8, [sp, 0x1c]                              |         *(arg_1ch) = r8;
                                                                 |         goto label_735;
                                                                 |     }
                                                                 |     if (r4 == 6) {
                                                                 | label_735:
    0x000532dc beq.w 0x5148c                                     |         goto label_203;
                                                                 |     }
    0x000532e0 b.w 0x4d742                                       |     goto label_25;
                                                                 | label_601:
    0x000532e4 ldr r7, [r5, 4]                                   |     r7 = *((r5 + 4));
    0x000532e6 ldr r0, [r7, 0x48]                                |     r0 = *((r7 + 0x48));
                                                                 |     if (r0 != 0) {
    0x000532e8 cbnz r0, 0x532f6                                  |         goto label_736;
                                                                 |     }
    0x000532ea b.w 0x53bc0                                       |     goto label_737;
                                                                 |     do {
                                                                 | label_204:
    0x000532ee ldr r0, [r0, 0xc]                                 |         r0 = *((r0 + 0xc));
    0x000532f0 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x000532f2 beq.w 0x53bc0                                     |             goto label_737;
                                                                 |         }
                                                                 | label_736:
    0x000532f6 ldr r3, [r0, 4]                                   |         r3 = *((r0 + 4));
    0x000532f8 cmp sb, r3                                        |         
    0x000532fa bne 0x532ee                                       |         
                                                                 |     } while (sb != r3);
    0x000532fc ldr r3, [r0]                                      |     r3 = *(r0);
    0x000532fe cmp r5, r3                                        |     
                                                                 |     if (r5 != r3) {
    0x00053300 bne 0x532ee                                       |         goto label_204;
                                                                 |     }
                                                                 | label_253:
    0x00053302 ldrb r2, [r0, 8]                                  |     r2 = *((r0 + 8));
    0x00053304 cmp r2, r4                                        |     
    0x00053306 it lo                                             |     
                                                                 |     if (r2 >= r4) {
    0x00053308 strblo r4, [r0, 8]                                |         *((r0 + 8)) = r4;
                                                                 |     }
    0x0005330a ldrb r3, [r5, 9]                                  |     r3 = *((r5 + 9));
    0x0005330c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005330e beq.w 0x53a4c                                     |         goto label_738;
                                                                 |     }
    0x00053312 movs r4, 0                                        |     r4 = 0;
                                                                 | label_288:
    0x00053314 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x00053316 subs r3, 1                                        |     r3--;
    0x00053318 str r3, [r5, 0xc]                                 |     *((r5 + 0xc)) = r3;
    0x0005331a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005331c beq.w 0x538f0                                     |         goto label_603;
                                                                 |     }
                                                                 | label_604:
    0x00053320 str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x00053324 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00053326 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0005332a b.w 0x4d740                                       |     goto label_7;
                                                                 |     if (r6 <= 0) {
                                                                 | label_656:
    0x0005332e ble.w 0x52138                                     |         goto label_205;
                                                                 |     }
    0x00053332 tst.w r8, 1                                       |     
    0x00053336 it eq                                             |     
                                                                 |     if ((r8 & 1) != 0) {
    0x00053338 addeq r5, r8, 1                                   |         r5 = r8 + 1;
                                                                 |     }
    0x0005333c b.w 0x52138                                       |     goto label_205;
                                                                 | label_690:
    0x00053340 ldr r3, [r5, 0x18]                                |     r3 = *((r5 + 0x18));
    0x00053342 mov r1, r5                                        |     r1 = r5;
    0x00053344 mov r0, fp                                        |     r0 = fp;
    0x00053346 str.w r3, [fp, 0x1e0]                             |     __asm ("str.w r3, [arg_1e0h]");
    0x0005334a bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0005334e cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00053350 bne.w 0x526a2                                     |         goto label_206;
                                                                 |     }
    0x00053354 ldr.w r3, [fp, 0x1e8]                             |     r3 = *(arg_1e8h);
    0x00053358 subs r3, 1                                        |     r3--;
    0x0005335a str.w r3, [fp, 0x1e8]                             |     __asm ("str.w r3, [arg_1e8h]");
                                                                 | label_691:
    0x0005335e ldr.w r3, [fp, 0x140]                             |     r3 = *(arg_140h);
    0x00053362 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00053364 beq.w 0x53f9e                                     |         goto label_739;
                                                                 |     }
    0x00053368 mov r2, sb                                        |     r2 = sb;
    0x0005336a mov r1, sl                                        |     r1 = sl;
    0x0005336c mov r0, fp                                        |     r0 = fp;
    0x0005336e bl 0xa6e8                                         |     r0 = fcn_0000a6e8 (r0, r1, r2);
    0x00053372 mov r6, r0                                        |     r6 = r0;
    0x00053374 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00053376 bne.w 0x528f6                                     |         goto label_207;
                                                                 |     }
    0x0005337a ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005337c adds r3, 1                                        |     r3++;
    0x0005337e str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053380 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_709:
    0x00053384 ldr r3, [pc, 0x3b4]                               |     
    0x00053386 mov.w sb, 0xb                                     |     sb = 0xb;
    0x0005338a ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0005338c add r3, pc                                        |     r3 = 0xa6acc;
    0x0005338e add.w r0, r2, 0x2c                                |     r0 = r2 + 0x2c;
    0x00053392 b.w 0x524aa                                       |     goto label_160;
                                                                 | label_432:
    0x00053396 ldrb r1, [r5]                                     |     r1 = *(r5);
    0x00053398 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0005339a beq.w 0x5294a                                     |         goto label_208;
                                                                 |     }
    0x0005339e mov r8, r3                                        |     r8 = r3;
    0x000533a0 ldr r3, [pc, 0x39c]                               |     
    0x000533a2 mov r6, r5                                        |     r6 = r5;
    0x000533a4 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x000533a6 str r2, [sp, 0x28]                                |     *(arg_28h) = r2;
    0x000533a8 add r3, pc                                        |     r3 = 0xa6aec;
    0x000533aa str r3, [sp, 0x34]                                |     *(arg_34h) = r3;
    0x000533ac ldr r3, [pc, 0x394]                               |     
    0x000533ae add r3, pc                                        |     r3 = 0xa6af6;
    0x000533b0 str r3, [sp, 0x3c]                                |     *(arg_3ch) = r3;
    0x000533b2 ldr r3, [pc, 0x394]                               |     
    0x000533b4 add r3, pc                                        |     r3 = 0xa6b02;
    0x000533b6 str r3, [sp, 0x4c]                                |     *(arg_4ch) = r3;
    0x000533b8 b 0x533c6                                         |     goto label_211;
                                                                 | label_210:
    0x000533ba add r5, r0                                        |     r5 += r0;
    0x000533bc add r8, r0                                        |     r8 += r0;
    0x000533be ldrb r3, [r5]                                     |     r3 = *(r5);
    0x000533c0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000533c2 beq.w 0x52940                                     |         goto label_209;
                                                                 |     }
                                                                 | label_211:
    0x000533c6 mov r1, r7                                        |     r1 = r7;
    0x000533c8 mov r0, r5                                        |     r0 = r5;
    0x000533ca bl 0x143b8                                        |     fcn_000143b8 (r0, r1);
    0x000533ce ldr r3, [r7]                                      |     r3 = *(r7);
    0x000533d0 mov r4, r0                                        |     r4 = r0;
    0x000533d2 cmp r3, 0x87                                      |     
                                                                 |     if (r3 != 0x87) {
    0x000533d4 bne 0x533ba                                       |         goto label_210;
                                                                 |     }
    0x000533d6 mov r2, r8                                        |     r2 = r8;
    0x000533d8 mov r1, r6                                        |     r1 = r6;
    0x000533da mov r0, sl                                        |     r0 = sl;
    0x000533dc bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x000533e0 add.w r3, r6, r8                                  |     r3 = r6 + r8;
    0x000533e4 str r3, [sp, 0x20]                                |     *(arg_20h) = r3;
    0x000533e6 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x000533e8 beq.w 0x5294a                                     |         goto label_208;
                                                                 |     }
    0x000533ec ldrb.w r3, [r6, r8]                               |     r3 = *((r6 + r8));
    0x000533f0 cmp r3, 0x3f                                      |     
                                                                 |     if (r3 == 0x3f) {
    0x000533f2 beq 0x534ca                                       |         goto label_740;
                                                                 |     }
    0x000533f4 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x000533f6 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x000533f8 ldrsh.w r1, [r3, 0x46]                            |     r1 = *((r3 + 0x46));
    0x000533fc ldr r0, [r3, 0x40]                                |     r0 = *((r3 + 0x40));
    0x000533fe mov r3, r4                                        |     r3 = r4;
    0x00053400 bl 0xaa50                                         |     fcn_0000aa50 (r0);
    0x00053404 ldr r3, [sp, 0x48]                                |     r3 = *(arg_48h);
    0x00053406 str r0, [r3]                                      |     *(r3) = r0;
                                                                 | label_213:
    0x00053408 add.w r2, r0, r0, lsl 2                           |     r2 = r0 + (r0 << 2);
    0x0005340c adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x0005340e str r3, [sp, 0x28]                                |     *(arg_28h) = r3;
    0x00053410 lsls r3, r2, 3                                    |     r3 = r2 << 3;
    0x00053412 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00053414 subs r3, 0x28                                     |     r3 -= 0x28;
    0x00053416 ldr r2, [r2, 0x3c]                                |     r2 = *((r2 + 0x3c));
    0x00053418 add.w r8, r2, r3                                  |     r8 = r2 + r3;
    0x0005341c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005341e adds r5, r3, r4                                   |     r5 = r3 + r4;
    0x00053420 ldrh.w r3, [r8, 0x1c]                             |     r3 = *((r8 + 0x1c));
    0x00053424 ands r1, r3, 1                                    |     r1 = r3 & 1;
                                                                 |     if (r1 != r3) {
    0x00053428 bne 0x534bc                                       |         goto label_741;
                                                                 |     }
    0x0005342a ands r2, r3, 4                                    |     r2 = r3 & 4;
                                                                 |     if (r2 != r3) {
    0x0005342e bne 0x534d8                                       |         goto label_742;
                                                                 |     }
    0x00053430 ands r6, r3, 8                                    |     r6 = r3 & 8;
                                                                 |     if (r6 != r3) {
    0x00053434 bne 0x53512                                       |         goto label_743;
                                                                 |     }
    0x00053436 ands r1, r3, 2                                    |     r1 = r3 & 2;
                                                                 |     if (r1 == r3) {
    0x0005343a beq 0x534fa                                       |         goto label_744;
                                                                 |     }
    0x0005343c ldr.w r3, [sb, 0x10]                              |     r3 = *((sb + 0x10));
    0x00053440 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00053442 ldrb.w r3, [r3, 0x4d]                             |     r3 = *((r3 + 0x4d));
    0x00053446 cmp r3, 1                                         |     
    0x00053448 str r3, [sp, 0x2c]                                |     *(arg_2ch) = r3;
                                                                 |     if (r3 == 1) {
    0x0005344a beq.w 0x53b18                                     |         goto label_745;
                                                                 |     }
    0x0005344e mov r1, r6                                        |     r1 = r6;
    0x00053450 movs r2, 0x24                                     |     r2 = 0x24;
    0x00053452 add r0, sp, 0xdc                                  |     r0 += arg_dch;
    0x00053454 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00053458 ldr r3, [sp, 0x2c]                                |     r3 = *(arg_2ch);
    0x0005345a mov r0, r7                                        |     r0 = r7;
    0x0005345c ldr.w r2, [r8, 0x18]                              |     r2 = *((r8 + 0x18));
    0x00053460 ldr.w r1, [r8, 4]                                 |     r1 = *((r8 + 4));
    0x00053464 str.w sb, [r7]                                    |     __asm ("str.w sb, [r7]");
    0x00053468 str r6, [sp]                                      |     *(sp) = r6;
    0x0005346a bl 0x17978                                        |     fcn_00017978 (r0, r1, r2, r3, r4);
    0x0005346e ldrh r3, [r7, 0x1c]                               |     r3 = *((r7 + 0x1c));
    0x00053470 lsls r6, r3, 0x1e                                 |     r6 = r3 << 0x1e;
                                                                 |     if (r6 < r3) {
    0x00053472 bpl 0x53482                                       |         
    0x00053474 ldrb r3, [r7, 0x1e]                               |         r3 = *((r7 + 0x1e));
    0x00053476 cmp r3, 1                                         |         
                                                                 |         if (r3 == 1) {
    0x00053478 beq 0x53482                                       |             goto label_746;
                                                                 |         }
    0x0005347a movs r1, 1                                        |         r1 = 1;
    0x0005347c mov r0, r7                                        |         r0 = r7;
    0x0005347e bl 0x17460                                        |         fcn_00017460 (r0, r1);
                                                                 |     }
                                                                 | label_746:
    0x00053482 ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x00053484 movs r1, 0                                        |     r1 = 0;
    0x00053486 ldr r2, [pc, 0x2c4]                               |     
    0x00053488 mov r0, sl                                        |     r0 = sl;
    0x0005348a str r3, [sp]                                      |     *(sp) = r3;
    0x0005348c ldr r3, [r7, 0x18]                                |     r3 = *((r7 + 0x18));
    0x0005348e add r2, pc                                        |     r2 = 0xa6be0;
    0x00053490 bl 0x35538                                        |     fcn_00035538 (r0, r1);
    0x00053494 ldrh r3, [r7, 0x1c]                               |     r3 = *((r7 + 0x1c));
    0x00053496 movw r2, 0x2460                                   |     r2 = 0x2460;
    0x0005349a tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x0005349c bne.w 0x53bd6                                     |         goto label_747;
                                                                 |     }
                                                                 | label_254:
    0x000534a0 ldr r1, [r7, 0x24]                                |     r1 = *((r7 + 0x24));
                                                                 |     if (r1 != 0) {
    0x000534a2 cbz r1, 0x534aa                                   |         
    0x000534a4 ldr r0, [r7]                                      |         r0 = *(r7);
    0x000534a6 bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
                                                                 |     }
                                                                 | label_212:
    0x000534aa ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x000534ac ldrb r3, [r3, r4]                                 |     r3 = *((r3 + r4));
    0x000534ae cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000534b0 beq.w 0x5294a                                     |         goto label_208;
                                                                 |     }
    0x000534b4 mov r6, r5                                        |     r6 = r5;
    0x000534b6 mov.w r8, 0                                       |     r8 = 0;
    0x000534ba b 0x533c6                                         |     goto label_211;
                                                                 | label_741:
    0x000534bc ldr r1, [pc, 0x290]                               |     
    0x000534be movs r2, 4                                        |     r2 = 4;
    0x000534c0 mov r0, sl                                        |     r0 = sl;
    0x000534c2 add r1, pc                                        |     r1 = 0xa6c16;
    0x000534c4 bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x000534c8 b 0x534aa                                         |     goto label_212;
                                                                 | label_740:
    0x000534ca cmp r4, 1                                         |     
                                                                 |     if (r4 <= 1) {
    0x000534cc bgt 0x534ec                                       |         
    0x000534ce ldr r3, [sp, 0x28]                                |         r3 = *(arg_28h);
    0x000534d0 ldr r2, [sp, 0x48]                                |         r2 = *(arg_48h);
    0x000534d2 mov r0, r3                                        |         r0 = r3;
    0x000534d4 str r3, [r2]                                      |         *(r2) = r3;
    0x000534d6 b 0x53408                                         |         goto label_213;
                                                                 | label_742:
    0x000534d8 ldrd r2, r3, [r8, 0x10]                           |         __asm ("ldrd r2, r3, [r8, 0x10]");
    0x000534dc mov r0, sl                                        |         r0 = sl;
    0x000534de strd r2, r3, [sp]                                 |         __asm ("strd r2, r3, [sp]");
    0x000534e2 ldr r2, [pc, 0x270]                               |         
    0x000534e4 add r2, pc                                        |         r2 = 0xa6c3e;
    0x000534e6 bl 0x35538                                        |         fcn_00035538 (r0, r1);
    0x000534ea b 0x534aa                                         |         goto label_212;
                                                                 |     }
    0x000534ec ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x000534ee ldr r1, [sp, 0x48]                                |     r1 = *(arg_48h);
    0x000534f0 adds r0, r3, 1                                    |     r0 = r3 + 1;
    0x000534f2 bl 0x864c                                         |     fcn_0000864c (r0, r1);
    0x000534f6 ldr r0, [r1]                                      |     r0 = *(r1);
    0x000534f8 b 0x53408                                         |     goto label_213;
                                                                 | label_744:
    0x000534fa ands r6, r3, 0x4000                               |     r6 = r3 & 0x4000;
                                                                 |     if (r6 == r3) {
    0x000534fe beq.w 0x53b32                                     |         goto label_748;
                                                                 |     }
    0x00053502 ldr r2, [pc, 0x254]                               |     
    0x00053504 mov r0, sl                                        |     r0 = sl;
    0x00053506 ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x0005350a add r2, pc                                        |     r2 = 0xa6c68;
    0x0005350c bl 0x35538                                        |     fcn_00035538 (r0, r1);
    0x00053510 b 0x534aa                                         |     goto label_212;
                                                                 | label_743:
    0x00053512 mov r1, r2                                        |     r1 = r2;
    0x00053514 ldrd r2, r3, [r8, 8]                              |     __asm ("ldrd r2, r3, [r8, 8]");
    0x00053518 mov r0, sl                                        |     r0 = sl;
    0x0005351a strd r2, r3, [sp]                                 |     __asm ("strd r2, r3, [sp]");
    0x0005351e ldr r2, [pc, 0x23c]                               |     
    0x00053520 add r2, pc                                        |     r2 = 0xa6c82;
    0x00053522 bl 0x35538                                        |     fcn_00035538 (r0, r1);
    0x00053526 b 0x534aa                                         |     goto label_212;
                                                                 | label_642:
    0x00053528 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005352a mov.w sb, 4                                       |     sb = 4;
    0x0005352e ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x00053530 adds r3, 1                                        |     r3++;
    0x00053532 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053534 movs r3, 1                                        |     r3 = 1;
    0x00053536 strb r3, [r2, 0x1e]                               |     *((r2 + 0x1e)) = r3;
    0x00053538 b.w 0x4d742                                       |     goto label_25;
                                                                 | label_405:
    0x0005353c add r6, sp, 0xb0                                  |     r6 += arg_b0h;
    0x0005353e add r2, sp, 0xd8                                  |     r2 += arg_d8h;
    0x00053540 mov r3, r6                                        |     r3 = r6;
    0x00053542 movs r1, 0                                        |     r1 = 0;
    0x00053544 mov r0, fp                                        |     r0 = fp;
    0x00053546 bl 0xce84                                         |     fcn_0000ce84 (r0, r1, r2, r3);
    0x0005354a ldr r3, [sp, 0xb0]                                |     r3 = *(arg_b0h);
    0x0005354c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005354e beq.w 0x4ebbc                                     |         goto label_214;
                                                                 |     }
    0x00053552 movs r3, 0                                        |     r3 = 0;
    0x00053554 str.w r3, [fp, 0x48]                              |     __asm ("str.w r3, [arg_48h]");
    0x00053558 b.w 0x4ebbc                                       |     goto label_214;
                                                                 | label_345:
    0x0005355c ldr r2, [sp, 0x48]                                |     r2 = *(arg_48h);
    0x0005355e movs r3, 1                                        |     r3 = 1;
    0x00053560 mov.w sb, 7                                       |     sb = 7;
    0x00053564 strb r3, [r2, 0x19]                               |     *((r2 + 0x19)) = r3;
    0x00053566 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00053568 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0005356a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0005356c b.w 0x4d742                                       |     goto label_25;
                                                                 | label_711:
    0x00053570 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00053572 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00053574 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053576 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_712:
    0x0005357a ldr r0, [r3, 0x38]                                |     r0 = *((r3 + 0x38));
    0x0005357c blx 0x63dc                                        |     fcn_000063dc ();
    0x00053580 strb.w r5, [r8, 0xa]                              |     *((r8 + 0xa)) = r5;
    0x00053584 b.w 0x52b90                                       |     goto label_215;
                                                                 | label_664:
    0x00053588 mov r0, r8                                        |     r0 = r8;
    0x0005358a bl 0x9bf4                                         |     r0 = fcn_00009bf4 (r0);
    0x0005358e mov r8, r0                                        |     r8 = r0;
    0x00053590 b.w 0x52266                                       |     goto label_216;
                                                                 | label_719:
    0x00053594 movs r3, 0x64                                     |     r3 = 0x64;
    0x00053596 mov r2, r0                                        |     r2 = r0;
    0x00053598 ldr r1, [sp, 0x2c]                                |     r1 = *(arg_2ch);
    0x0005359a mov r0, r8                                        |     r0 = r8;
    0x0005359c strb.w r3, [sb, 5]                                |     *((sb + 5)) = r3;
    0x000535a0 bl 0x301ec                                        |     r0 = fcn_000301ec (r0, r1, r2);
    0x000535a4 mov r5, r0                                        |     r5 = r0;
    0x000535a6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000535a8 beq.w 0x53e22                                     |         goto label_721;
                                                                 |     }
                                                                 | label_720:
    0x000535ac ldr.w r0, [sb, 0x44]                              |     r0 = *((sb + 0x44));
    0x000535b0 mov r6, r5                                        |     r6 = r5;
    0x000535b2 bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x000535b6 b.w 0x527e8                                       |     goto label_186;
                                                                 | label_511:
    0x000535ba mov r0, r4                                        |     r0 = r4;
    0x000535bc bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x000535c0 b.w 0x501f0                                       |     goto label_217;
                                                                 | label_693:
    0x000535c4 ldr.w r3, [r4, 0xe0]                              |     r3 = *((r4 + 0xe0));
    0x000535c8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000535ca beq.w 0x53cec                                     |         goto label_749;
                                                                 |     }
                                                                 | label_262:
    0x000535ce movs r1, 4                                        |     r1 = 4;
    0x000535d0 mov r0, r4                                        |     r0 = r4;
    0x000535d2 bl 0xa194                                         |     r0 = fcn_0000a194 (r0, r1);
    0x000535d6 mov r6, r0                                        |     r6 = r0;
    0x000535d8 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000535da bne.w 0x53cc8                                     |         goto label_750;
                                                                 |     }
    0x000535de ldr.w r3, [r4, 0xd8]                              |     r3 = *((r4 + 0xd8));
    0x000535e2 ldr.w r2, [r4, 0x98]                              |     r2 = *((r4 + 0x98));
    0x000535e6 ldrb r1, [r4, 9]                                  |     r1 = *((r4 + 9));
    0x000535e8 ldr.w r0, [r4, 0xe0]                              |     r0 = *((r4 + 0xe0));
    0x000535ec bl 0x2a57c                                        |     fcn_0002a57c (r0, r1, r2, r3);
    0x000535f0 movs r3, 0                                        |     r3 = 0;
    0x000535f2 mov r6, r0                                        |     r6 = r0;
    0x000535f4 str.w r3, [r4, 0xe0]                              |     __asm ("str.w r3, [r4, 0xe0]");
    0x000535f8 mov r0, r4                                        |     r0 = r4;
    0x000535fa bl 0x7a14                                         |     fcn_00007a14 (r0);
    0x000535fe cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00053600 bne.w 0x4edec                                     |         goto label_58;
                                                                 |     }
                                                                 | label_261:
    0x00053604 mov r1, r5                                        |     r1 = r5;
    0x00053606 mov r0, r4                                        |     r0 = r4;
    0x00053608 bl 0x2b6fc                                        |     fcn_0002b6fc (r0, r1);
    0x0005360c movs r1, 1                                        |     r1 = 1;
                                                                 | label_282:
    0x0005360e mov r0, r8                                        |     r0 = r8;
    0x00053610 bl 0x3124c                                        |     r0 = fcn_0003124c (r0, r1);
    0x00053614 subs r6, r0, 0                                    |     r6 = r0 - 0;
    0x00053616 it eq                                             |     
                                                                 |     if (r6 != r0) {
    0x00053618 moveq sb, r5                                      |         sb = r5;
                                                                 |     }
    0x0005361a b.w 0x4edec                                       |     goto label_58;
                                                                 | label_574:
    0x0005361e ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x00053620 ldr r0, [r3, 0x38]                                |     r0 = *((r3 + 0x38));
    0x00053622 blx 0x63dc                                        |     fcn_000063dc ();
    0x00053626 strb r5, [r4, 0xa]                                |     *((r4 + 0xa)) = r5;
    0x00053628 b.w 0x50cfa                                       |     goto label_218;
                                                                 | label_726:
    0x0005362c mov r0, r4                                        |     r0 = r4;
    0x0005362e bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00053632 b 0x53086                                         |     goto label_219;
                                                                 | label_707:
    0x00053634 ldrh r3, [r5, 0x1c]                               |     r3 = *((r5 + 0x1c));
    0x00053636 and r3, r3, 0x1000                                |     r3 &= 0x1000;
    0x0005363a b.w 0x5223e                                       |     goto label_220;
                                                                 | label_641:
    0x0005363e ldr r7, [sp, 0x50]                                |     r7 = *(arg_50h);
    0x00053640 movs r6, 0                                        |     r6 = 0;
    0x00053642 b.w 0x52730                                       |     goto label_221;
                                                                 | label_570:
    0x00053646 mov r0, r4                                        |     r0 = r4;
    0x00053648 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x0005364c b.w 0x50c4a                                       |     goto label_222;
                                                                 | label_708:
    0x00053650 mov r0, sl                                        |     r0 = sl;
    0x00053652 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00053656 b.w 0x52aaa                                       |     goto label_223;
                                                                 | label_650:
    0x0005365a add r4, sp, 0x90                                  |     r4 += arg_90h;
    0x0005365c mov r0, r5                                        |     r0 = r5;
    0x0005365e mov r1, r4                                        |     r1 = r4;
    0x00053660 bl 0x9d84                                         |     fcn_00009d84 (r0, r1);
    0x00053664 ldr r4, [sp, 0x90]                                |     r4 = *(arg_90h);
    0x00053666 b.w 0x52058                                       |     goto label_224;
                                                                 | label_705:
    0x0005366a add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0005366c movs r2, 0x28                                     |     r2 = 0x28;
    0x0005366e movs r1, 0                                        |     r1 = 0;
    0x00053670 mov r0, r7                                        |     r0 = r7;
    0x00053672 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00053676 mov r1, r5                                        |     r1 = r5;
    0x00053678 mov r0, r7                                        |     r0 = r7;
    0x0005367a bl 0xff00                                         |     fcn_0000ff00 (r0, r1);
    0x0005367e ldr r3, [sp, 0x3c]                                |     r3 = *(arg_3ch);
    0x00053680 mov r2, r6                                        |     r2 = r6;
    0x00053682 ldr r0, [sp, 0x2c]                                |     r0 = *(arg_2ch);
    0x00053684 ldr.w r1, [r3, sb]                                |     r1 = *((r3 + sb));
    0x00053688 ldrb r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0005368a str r7, [sp]                                      |     *(sp) = r7;
    0x0005368c eor r3, r3, 4                                     |     r3 ^= 4;
    0x00053690 ubfx r3, r3, 2, 1                                 |     r3 = (r3 >> 2) & ((1 << 1) - 1);
    0x00053694 bl 0x2f238                                        |     r0 = fcn_0002f238 (r0, r1, r2, r3, r4);
    0x00053698 mov r6, r0                                        |     r6 = r0;
    0x0005369a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005369c bne.w 0x53800                                     |         goto label_236;
                                                                 |     }
    0x000536a0 ldr r0, [r7, 4]                                   |     r0 = *((r7 + 4));
    0x000536a2 b.w 0x52a70                                       |     goto label_225;
                                                                 | label_714:
    0x000536a6 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x000536a8 add r4, sp, 0xdc                                  |     r4 += arg_dch;
    0x000536aa mov r1, r7                                        |     r1 = r7;
    0x000536ac bl 0xb5cc                                         |     fcn_0000b5cc (r0, r1);
    0x000536b0 ldr r2, [r7]                                      |     r2 = *(r7);
    0x000536b2 mvn r1, 0x80000000                                |     r1 = ~0x80000000;
    0x000536b6 ldr r3, [r4]                                      |     r3 = *(r4);
    0x000536b8 cmp r3, r1                                        |     
    0x000536ba it eq                                             |     
                                                                 |     if (r3 == r1) {
    0x000536bc cmpeq r2, -1                                      |         __asm ("cmpeq r2, -1");
                                                                 |     }
                                                                 |     if (r3 != r1) {
    0x000536c0 bne.w 0x53f1c                                     |         goto label_751;
                                                                 |     }
    0x000536c4 ldrb.w r3, [r8, 0x1c]                             |     r3 = *((r8 + 0x1c));
    0x000536c8 orr r3, r3, 2                                     |     r3 |= 2;
    0x000536cc strb.w r3, [r8, 0x1c]                             |     *((r8 + 0x1c)) = r3;
    0x000536d0 b.w 0x51388                                       |     goto label_179;
                                                                 | label_576:
    0x000536d4 movs r5, 0                                        |     r5 = 0;
    0x000536d6 mov r7, r5                                        |     r7 = r5;
    0x000536d8 b.w 0x4e458                                       |     goto label_52;
                                                                 | label_441:
    0x000536dc ldrb.w r3, [fp, 0x40]                             |     r3 = *(arg_40h);
    0x000536e0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000536e2 bne.w 0x52ae2                                     |         goto label_226;
                                                                 |     }
    0x000536e6 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x000536e8 mov.w sb, 0xd                                     |     sb = 0xd;
    0x000536ec add.w r0, r3, 0x2c                                |     r0 = r3 + 0x2c;
                                                                 | label_283:
    0x000536f0 mov r3, sb                                        |     r3 = sb;
                                                                 | label_275:
    0x000536f2 ldr r2, [pc, 0x6c]                                |     
    0x000536f4 add r2, pc                                        |     r2 = 0xa6e5a;
    0x000536f6 add.w r3, r2, r3, lsl 2                           |     r3 = r2 + (r3 << 2);
    0x000536fa ldr.w r3, [r3, 0x158]                             |     r3 = *((r3 + 0x158));
    0x000536fe cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00053700 bne.w 0x524aa                                     |         goto label_160;
                                                                 |     }
    0x00053704 ldr r3, [pc, 0x5c]                                |     
    0x00053706 add r3, pc                                        |     r3 = 0xa6e6e;
    0x00053708 b.w 0x524aa                                       |     goto label_160;
                                                                 | label_419:
    0x0005370c ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0005370e mov.w sb, 7                                       |     sb = 7;
    0x00053712 str r0, [r4, 0x34]                                |     *((r4 + 0x34)) = r0;
    0x00053714 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
    0x00053716 b.w 0x50538                                       |     goto label_39;
                                                                 | label_358:
    0x00053768 movs r3, 0                                        |     r3 = 0;
    0x0005376a str r3, [sp, 0x7c]                                |     *(arg_7ch) = r3;
    0x0005376c b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_272:
    0x00053770 mov r5, r6                                        |     r5 = r6;
    0x00053772 mov r7, r6                                        |     r7 = r6;
    0x00053774 mov r4, r6                                        |     r4 = r6;
                                                                 | label_697:
    0x00053776 ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x0005377a ldr r0, [r3, 0x38]                                |     r0 = *((r3 + 0x38));
    0x0005377c blx 0x63dc                                        |     fcn_000063dc ();
    0x00053780 movs r3, 0                                        |     r3 = 0;
    0x00053782 strb.w r3, [r8, 0xa]                              |     *((r8 + 0xa)) = r3;
    0x00053786 b.w 0x52808                                       |     goto label_188;
                                                                 | label_515:
    0x0005378a ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0005378c ldrb r3, [r2, 9]                                  |     r3 = *((r2 + 9));
    0x0005378e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00053790 bne.w 0x53c86                                     |         goto label_752;
                                                                 |     }
                                                                 | label_260:
    0x00053794 mov r0, fp                                        |     r0 = fp;
    0x00053796 ldr r1, [sp, 0x28]                                |     r1 = *(arg_28h);
    0x00053798 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0005379c ldr r2, [sp, 0x34]                                |     r2 = *(arg_34h);
    0x0005379e ldr r0, [sp, 0x2c]                                |     r0 = *(arg_2ch);
    0x000537a0 ldr r3, [r2, 0x10]                                |     r3 = *((r2 + 0x10));
    0x000537a2 subs r3, 1                                        |     r3--;
    0x000537a4 str r3, [r2, 0x10]                                |     *((r2 + 0x10)) = r3;
    0x000537a6 ldr r3, [r2, 0x14]                                |     r3 = *((r2 + 0x14));
    0x000537a8 adc r3, r3, -1                                    |     __asm ("adc r3, r3, -1");
    0x000537ac str r3, [r2, 0x14]                                |     *((r2 + 0x14)) = r3;
    0x000537ae bl 0xfdb8                                         |     fcn_0000fdb8 (r0);
    0x000537b2 b.w 0x4d4ec                                       |     goto label_6;
                                                                 | label_503:
    0x000537b6 mov r3, r4                                        |     r3 = r4;
    0x000537b8 b.w 0x5008e                                       |     goto label_227;
                                                                 | label_729:
    0x000537bc adds r3, 1                                        |     r3++;
    0x000537be mov.w sb, 0xb                                     |     sb = 0xb;
    0x000537c2 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000537c4 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x000537c6 ldr r0, [r3, 0x38]                                |     r0 = *((r3 + 0x38));
    0x000537c8 blx 0x63dc                                        |     fcn_000063dc ();
    0x000537cc strb r5, [r4, 0xa]                                |     *((r4 + 0xa)) = r5;
    0x000537ce b.w 0x4d742                                       |     goto label_25;
                                                                 | label_307:
    0x000537d2 cmn.w r3, 0x3f                                    |     
    0x000537d6 rsb.w r8, r8, 0xaf                                |     r8 = 0xaf - r8;
    0x000537da sbcs r2, r2, -1                                   |     __asm ("sbcs r2, r2, -1");
    0x000537de uxtb.w r8, r8                                     |     r8 = (int8_t) r8;
                                                                 |     if (r3 >= 0x3f) {
    0x000537e2 blt 0x537ea                                       |         
    0x000537e4 rsbs r3, r3, 0                                    |         r3 -= ;
    0x000537e6 b.w 0x4d670                                       |         goto label_228;
                                                                 |     }
                                                                 | label_308:
    0x000537ea cmp.w r8, 0x57                                    |     
    0x000537ee it ne                                             |     
                                                                 |     if (r8 != 0x57) {
    0x000537f0 cmpne r5, 0                                       |         __asm ("cmpne r5, 0");
                                                                 |     }
    0x000537f2 ite ge                                            |     
                                                                 |     if (r8 < 0x57) {
    0x000537f4 movge r5, 1                                       |         r5 = 1;
                                                                 |     }
                                                                 |     if (r8 >= 0x57) {
    0x000537f6 movlt r5, 0                                       |         r5 = 0;
                                                                 |     }
    0x000537f8 subs r4, r5, 1                                    |     r4 = r5 - 1;
    0x000537fa mov r5, r4                                        |     r5 = r4;
    0x000537fc b.w 0x4d69e                                       |     goto label_229;
                                                                 | label_236:
    0x00053800 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00053802 mov sb, r6                                        |     sb = r6;
    0x00053804 adds r3, 1                                        |     r3++;
    0x00053806 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053808 b.w 0x4d742                                       |     goto label_25;
                                                                 | label_616:
    0x0005380c cmp r2, 1                                         |     
    0x0005380e sbcs r4, r3, 0                                    |     __asm ("sbcs r4, r3, 0");
                                                                 |     if (r2 >= 1) {
    0x00053812 bge.w 0x53ef6                                     |         goto label_753;
                                                                 |     }
    0x00053816 cmp r0, 1                                         |     
    0x00053818 sbcs r4, r1, 0                                    |     __asm ("sbcs r4, r1, 0");
                                                                 |     if (r0 < 1) {
    0x0005381c blt 0x5383a                                       |         goto label_276;
                                                                 |     }
    0x0005381e rsbs.w ip, r2, 0                                  |     
    0x00053822 mvn r4, 0x80000000                                |     r4 = ~0x80000000;
    0x00053826 mvn.w r7, r0                                      |     r7 = ~r0;
    0x0005382a sbc.w lr, r3, r3, lsl 1                           |     __asm ("sbc.w lr, r3, r3, lsl 1");
    0x0005382e subs r4, r4, r1                                   |     r4 -= r1;
    0x00053830 cmp r7, ip                                        |     
    0x00053832 sbcs.w r4, r4, lr                                 |     __asm ("sbcs.w r4, r4, lr");
                                                                 |     if (r7 < ip) {
    0x00053836 blt.w 0x51752                                     |         goto label_230;
                                                                 |     }
                                                                 | label_276:
    0x0005383a subs r0, r0, r2                                   |     r0 -= r2;
    0x0005383c sbc.w r1, r1, r3                                  |     __asm ("sbc.w r1, r1, r3");
    0x00053840 b.w 0x5171c                                       |     goto label_84;
                                                                 | label_692:
    0x00053844 mov r0, r4                                        |     r0 = r4;
    0x00053846 bl 0x2f33c                                        |     r0 = fcn_0002f33c (r0);
    0x0005384a mov r6, r0                                        |     r6 = r0;
    0x0005384c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005384e bne.w 0x528f6                                     |         goto label_207;
                                                                 |     }
    0x00053852 ldrb r3, [r4, 0x1a]                               |     r3 = *((r4 + 0x1a));
    0x00053854 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00053856 beq.w 0x539de                                     |         goto label_754;
                                                                 |     }
    0x0005385a ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005385c ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x0005385e adds r3, 1                                        |     r3++;
    0x00053860 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053862 ldrd r2, r3, [r4, 0x38]                           |     __asm ("ldrd r2, r3, [r4, 0x38]");
    0x00053866 strd r2, r3, [r1, 0x10]                           |     __asm ("strd r2, r3, [r1, 0x10]");
    0x0005386a b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_354:
    0x0005386e ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00053870 ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x00053872 str r3, [r2, 0x50]                                |     *((r2 + 0x50)) = r3;
    0x00053874 add.w r0, r2, 0x2c                                |     r0 = r2 + 0x2c;
    0x00053878 ldr r3, [r1, 8]                                   |     r3 = *((r1 + 8));
    0x0005387a strb.w r3, [r2, 0x56]                             |     *((r2 + 0x56)) = r3;
    0x0005387e ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00053880 str r3, [r2, 0x4c]                                |     *((r2 + 0x4c)) = r3;
    0x00053882 mov r3, r1                                        |     r3 = r1;
    0x00053884 ldrb r1, [r1, 3]                                  |     r1 = *((r1 + 3));
    0x00053886 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x00053888 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0005388a beq.w 0x5409e                                     |         goto label_755;
                                                                 |     }
    0x0005388e ldr.w r2, [pc, 0x8a4]                             |     r2 = *(0x00054134);
    0x00053892 add r2, pc                                        |     r2 += pc;
    0x00053894 add.w r2, r2, r1, lsl 2                           |     r2 += (r1 << 2);
    0x00053898 ldr.w r2, [r2, 0x6b4]                             |     r2 = *((r2 + 0x6b4));
    0x0005389c cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0005389e beq.w 0x5409e                                     |         goto label_755;
                                                                 |     }
    0x000538a2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000538a4 beq.w 0x54052                                     |         goto label_756;
                                                                 |     }
    0x000538a8 str r3, [sp]                                      |     *(sp) = r3;
    0x000538aa mov r3, r2                                        |     r3 = r2;
    0x000538ac ldr.w r2, [pc, 0x888]                             |     r2 = *(0x00054138);
    0x000538b0 mov r1, fp                                        |     r1 = fp;
    0x000538b2 add r2, pc                                        |     r2 += pc;
    0x000538b4 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
                                                                 | label_285:
    0x000538b8 ldr r1, [sp, 0x24]                                |     r1 = *((sp + 0x24));
    0x000538ba ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x000538bc ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x000538be ldr r0, [r3, 4]                                   |     r0 = *((r3 + 4));
    0x000538c0 ldr r3, [r1, 0x2c]                                |     r3 = *((r1 + 0x2c));
    0x000538c2 str r3, [sp]                                      |     *(sp) = r3;
    0x000538c4 ldr.w r3, [r1, 0xa8]                              |     r3 = *((r1 + 0xa8));
    0x000538c8 ldr.w r1, [pc, 0x870]                             |     
    0x000538cc add r1, pc                                        |     r1 = 0xa7a0c;
    0x000538ce blx 0x6820                                        |     fcn_00006820 ();
                                                                 | label_250:
    0x000538d2 ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x000538d4 bl 0x335d0                                        |     r0 = fcn_000335d0 (r0);
    0x000538d8 cmp r0, 5                                         |     
    0x000538da ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x000538dc mov r4, r0                                        |     r4 = r0;
                                                                 |     if (r0 == 5) {
    0x000538de beq.w 0x53a62                                     |         goto label_757;
                                                                 |     }
    0x000538e2 ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x000538e4 cmp r3, 0                                         |     
    0x000538e6 ite ne                                            |     
                                                                 |     if (r3 == 0) {
    0x000538e8 movne r4, 1                                       |         r4 = 1;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x000538ea moveq r4, 0x65                                    |         r4 = 0x65;
                                                                 |     }
    0x000538ec b.w 0x4d46e                                       |     goto label_0;
                                                                 | label_603:
    0x000538f0 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x000538f2 ldr r0, [r3, 0x38]                                |     r0 = *((r3 + 0x38));
    0x000538f4 blx 0x63dc                                        |     fcn_000063dc ();
    0x000538f8 movs r3, 0                                        |     r3 = 0;
    0x000538fa strb r3, [r5, 0xa]                                |     *((r5 + 0xa)) = r3;
    0x000538fc b.w 0x51484                                       |     goto label_231;
                                                                 | label_589:
    0x00053900 ldr.w r3, [fp, 0x90]                              |     r3 = *(arg_90h);
    0x00053904 cmp r3, 1                                         |     
                                                                 |     if (r3 <= 1) {
    0x00053906 ble.w 0x53fd2                                     |         goto label_758;
                                                                 |     }
    0x0005390a ldr.w r3, [pc, 0x834]                             |     
    0x0005390e ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00053910 add r3, pc                                        |     r3 = 0xa7a56;
    0x00053912 add.w r0, r2, 0x2c                                |     r0 = r2 + 0x2c;
    0x00053916 b.w 0x5103e                                       |     goto label_149;
                                                                 | label_407:
    0x0005391a ldr.w r1, [fp, 0x48]                              |     r1 = *(arg_48h);
    0x0005391e mov r3, r7                                        |     r3 = r7;
    0x00053920 mov r2, r8                                        |     r2 = r8;
    0x00053922 mov r0, r5                                        |     r0 = r5;
    0x00053924 bl 0x12250                                        |     r0 = fcn_00012250 (r0, r1, r2, r3);
    0x00053928 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005392a beq.w 0x4ec24                                     |         goto label_232;
                                                                 |     }
                                                                 | label_406:
    0x0005392e movs r6, 7                                        |     r6 = 7;
    0x00053930 b.w 0x4ed30                                       |     goto label_233;
                                                                 | label_684:
    0x00053934 cmp.w sl, 2                                       |     
                                                                 |     if (sl == 2) {
    0x00053938 beq.w 0x53aee                                     |         goto label_759;
                                                                 |     }
                                                                 | label_683:
    0x0005393c ldr.w r1, [fp, 0x1e0]                             |     r1 = *(arg_1e0h);
    0x00053940 cmp r1, r5                                        |     
                                                                 |     if (r1 != r5) {
    0x00053942 bne.w 0x52664                                     |         goto label_234;
                                                                 |     }
    0x00053946 b.w 0x52684                                       |     goto label_235;
                                                                 | label_715:
    0x0005394a add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0005394c movs r2, 0x28                                     |     r2 = 0x28;
    0x0005394e mov r0, r7                                        |     r0 = r7;
    0x00053950 mov r6, r1                                        |     r6 = r1;
    0x00053952 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00053956 ldrb r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x00053958 mov r1, r6                                        |     r1 = r6;
    0x0005395a ldr r2, [sp, 0x48]                                |     r2 = *(arg_48h);
    0x0005395c ldr r0, [sp, 0x2c]                                |     r0 = *(arg_2ch);
    0x0005395e eor r3, r3, 4                                     |     r3 ^= 4;
    0x00053962 ldr.w r2, [r8, r2, lsl 2]                         |     offset_60 = r2 << 2;
                                                                 |     r2 = *((r8 + offset_60));
    0x00053966 ubfx r3, r3, 2, 1                                 |     r3 = (r3 >> 2) & ((1 << 1) - 1);
    0x0005396a str r7, [sp]                                      |     *(sp) = r7;
    0x0005396c bl 0x2f238                                        |     r0 = fcn_0002f238 (r0, r1, r2, r3, r4);
    0x00053970 mov r6, r0                                        |     r6 = r0;
    0x00053972 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00053974 bne.w 0x53800                                     |         goto label_236;
                                                                 |     }
    0x00053978 ldr r3, [sp, 0xdc]                                |     r3 = *(arg_dch);
    0x0005397a ldrd r2, r1, [r4, 0x50]                           |     __asm ("ldrd r2, r1, [r4, 0x50]");
    0x0005397e str r3, [sp, 0x34]                                |     *(arg_34h) = r3;
    0x00053980 ldrh r3, [r4, 0x16]                               |     r3 = *((r4 + 0x16));
    0x00053982 str r1, [sp, 0x4c]                                |     *(arg_4ch) = r1;
    0x00053984 mov r6, r3                                        |     r6 = r3;
    0x00053986 b.w 0x52d42                                       |     goto label_237;
                                                                 | label_717:
    0x0005398a mov r3, r5                                        |     r3 = r5;
    0x0005398c ldr r4, [sp, 0x50]                                |     r4 = *(arg_50h);
    0x0005398e mov r5, r8                                        |     r5 = r8;
    0x00053990 add.w sb, r3, 1                                   |     sb = r3 + 1;
    0x00053994 ldr.w r8, [sp, 0x54]                              |     r8 = *(arg_54h);
    0x00053998 b.w 0x521be                                       |     goto label_238;
                                                                 | label_659:
    0x0005399c ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005399e mov.w sb, 0xb                                     |     sb = 0xb;
    0x000539a2 adds r3, 1                                        |     r3++;
    0x000539a4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000539a6 blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x000539aa ldr.w r1, [pc, 0x798]                             |     
    0x000539ae movw r2, 0x1ec5                                   |     
    0x000539b2 add.w r3, r0, 0x14                                |     r3 = r0 + 0x14;
    0x000539b6 movt r2, 1                                        |     r2 = 0x11ec5;
    0x000539ba movs r0, 0xb                                      |     r0 = 0xb;
    0x000539bc add r1, pc                                        |     r1 = 0xa7b06;
    0x000539be blx 0x6820                                        |     fcn_00006820 ();
    0x000539c2 b.w 0x4d742                                       |     goto label_25;
                                                                 | label_457:
    0x000539c6 ldr r1, [sp, 0x70]                                |     r1 = *(arg_70h);
    0x000539c8 mov r0, r4                                        |     r0 = r4;
    0x000539ca bl 0x20900                                        |     fcn_00020900 (r0, r1);
    0x000539ce ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x000539d0 b.w 0x4f80c                                       |     goto label_239;
                                                                 | label_597:
    0x000539d4 ldr r0, [r7, 0x1c]                                |     r0 = *((r7 + 0x1c));
    0x000539d6 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x000539da b.w 0x51342                                       |     goto label_240;
                                                                 | label_754:
    0x000539de ldr r0, [r4]                                      |     r0 = *(r4);
    0x000539e0 ldrb.w r3, [r0, 0x51]                             |     r3 = *((r0 + 0x51));
    0x000539e4 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x000539e6 beq.w 0x53ba6                                     |         goto label_760;
                                                                 |     }
    0x000539ea ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000539ec vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x000539f0 adds r3, 1                                        |     r3++;
    0x000539f2 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000539f4 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x000539f6 vstr d16, [r3, 0x10]                              |     __asm ("vstr d16, [r3, 0x10]");
    0x000539fa b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_458:
    0x000539fe ldr r1, [sp, 0x70]                                |     r1 = *(arg_70h);
    0x00053a00 mov r0, r4                                        |     r0 = r4;
    0x00053a02 bl 0x20900                                        |     fcn_00020900 (r0, r1);
    0x00053a06 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x00053a08 b.w 0x4f84c                                       |     goto label_241;
                                                                 | label_733:
    0x00053a0c ldr r5, [sp, 0x3c]                                |     r5 = *(arg_3ch);
    0x00053a0e mov r4, sb                                        |     r4 = sb;
    0x00053a10 str.w r2, [r8, 8]                                 |     __asm ("str.w r2, [r8, 8]");
                                                                 | label_269:
    0x00053a14 str.w r8, [r4, 0xc]                               |     __asm ("str.w r8, [r4, 0xc]");
                                                                 | label_732:
    0x00053a18 ldrh.w r3, [sl, 0x1a]                             |     r3 = *((sl + 0x1a));
    0x00053a1c str r3, [sp, 0x3c]                                |     *(arg_3ch) = r3;
    0x00053a1e b.w 0x52318                                       |     goto label_242;
                                                                 | label_661:
    0x00053a22 mov r0, r5                                        |     r0 = r5;
    0x00053a24 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00053a28 b.w 0x52224                                       |     goto label_243;
                                                                 | label_613:
    0x00053a2c orrs.w r7, r7, r8                                 |     r7 |= r8;
                                                                 |     if (r7 != r7) {
    0x00053a30 bne.w 0x518be                                     |         goto label_244;
                                                                 |     }
    0x00053a34 ldr r3, [sp, 0x2c]                                |     r3 = *(arg_2ch);
    0x00053a36 ldr r1, [sp, 0x28]                                |     r1 = *(arg_28h);
    0x00053a38 ldr r2, [sp, 0x34]                                |     r2 = *(arg_34h);
    0x00053a3a mul r3, ip, r3                                    |     r3 = ip * r3;
    0x00053a3e umull r7, ip, ip, r1                              |     r7:ip = ip * r1;
    0x00053a42 mla r3, r1, r2, r3                                |     __asm ("mla r3, r1, r2, r3");
    0x00053a44 adds r3, 2                                        |     r3 += 2;
    0x00053a46 add ip, r3                                        |     
    0x00053a48 b.w 0x516d2                                       |     goto label_245;
                                                                 | label_738:
    0x00053a4c str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x00053a50 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_637:
    0x00053a54 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x00053a56 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00053a58 str r2, [r3, 0x4c]                                |     *((r3 + 0x4c)) = r2;
    0x00053a5a rsb.w r2, r5, 1                                   |     r2 = 1 - r5;
    0x00053a5e strb.w r2, [fp, 0x3e]                             |     *(arg_3eh) = r2;
                                                                 | label_757:
    0x00053a62 str r4, [r3, 0x50]                                |     *((r3 + 0x50)) = r4;
    0x00053a64 b.w 0x4d46e                                       |     goto label_0;
                                                                 | label_606:
    0x00053a68 bl 0x9bf4                                         |     fcn_00009bf4 (r0);
    0x00053a6c str r0, [r6, 8]                                   |     *((r6 + 8)) = r0;
    0x00053a6e b.w 0x51526                                       |     goto label_246;
                                                                 | label_652:
    0x00053a72 add r6, sp, 0x94                                  |     r6 += arg_94h;
    0x00053a74 mov r1, r6                                        |     r1 = r6;
    0x00053a76 bl 0x9d84                                         |     fcn_00009d84 (r0, r1);
    0x00053a7a ldr r1, [sp, 0x94]                                |     r1 = *(arg_94h);
    0x00053a7c b.w 0x52078                                       |     goto label_247;
                                                                 | label_317:
    0x00053a80 mov sb, r7                                        |     sb = r7;
    0x00053a82 b.w 0x50f1c                                       |     goto label_103;
                                                                 | label_694:
    0x00053a86 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00053a88 adds r3, 1                                        |     r3++;
    0x00053a8a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053a8c b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_680:
    0x00053a90 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00053a92 ldr.w r2, [pc, 0x6b4]                             |     r2 = *(0x00054148);
    0x00053a96 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x00053a9a add r2, pc                                        |     r2 += pc;
    0x00053a9c b.w 0x512cc                                       |     goto label_151;
                                                                 | label_687:
    0x00053aa0 ldr.w r2, [pc, 0x6a8]                             |     
    0x00053aa4 movw r3, 0x313                                    |     r3 = 0x313;
    0x00053aa8 str r3, [r6, 0x50]                                |     *((r6 + 0x50)) = r3;
    0x00053aaa movs r3, 2                                        |     r3 = 2;
    0x00053aac add.w r0, r6, 0x2c                                |     r0 = r6 + 0x2c;
    0x00053ab0 strb.w r3, [r6, 0x56]                             |     *((r6 + 0x56)) = r3;
    0x00053ab4 add r2, pc                                        |     r2 = 0xa7c04;
    0x00053ab6 mov r4, sl                                        |     r4 = sl;
    0x00053ab8 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x00053abc b.w 0x4d46e                                       |     goto label_0;
                                                                 | label_682:
    0x00053ac0 cmp r2, 0                                         |     
    0x00053ac2 it gt                                             |     
                                                                 |     if (r2 <= 0) {
    0x00053ac4 movgt r8, 0                                       |         r8 = 0;
                                                                 |     }
                                                                 |     if (r2 <= 0) {
    0x00053ac8 ble 0x53aee                                       |         goto label_759;
                                                                 |     }
                                                                 |     do {
    0x00053aca ldr.w r3, [fp, 0x10]                              |         r3 = *(arg_10h);
    0x00053ace add.w r3, r3, r8, lsl 4                           |         r3 += (r8 << 4);
    0x00053ad2 ldr r0, [r3, 4]                                   |         r0 = *((r3 + 4));
                                                                 |         if (r0 != 0) {
    0x00053ad4 cbz r0, 0x53ae0                                   |             
    0x00053ad6 movs r1, 4                                        |             r1 = 4;
    0x00053ad8 bl 0x2c0c8                                        |             fcn_0002c0c8 (r0, r1);
    0x00053adc ldr.w r2, [fp, 0x14]                              |             r2 = *(arg_14h);
                                                                 |         }
    0x00053ae0 add.w r8, r8, 1                                   |         r8++;
    0x00053ae4 cmp r2, r8                                        |         
    0x00053ae6 bgt 0x53aca                                       |         
                                                                 |     } while (r2 > r8);
    0x00053ae8 cmp r2, 0                                         |     
                                                                 |     if (r2 > 0) {
    0x00053aea bgt.w 0x525d2                                     |         goto label_248;
                                                                 |     }
                                                                 | label_759:
    0x00053aee ldr.w r3, [fp, 0x18]                              |     r3 = *(arg_18h);
    0x00053af2 lsls r6, r3, 0x1e                                 |     r6 = r3 << 0x1e;
                                                                 |     if (r6 < r3) {
    0x00053af4 bmi.w 0x54004                                     |         goto label_761;
                                                                 |     }
                                                                 | label_284:
    0x00053af8 ldr.w r1, [fp, 0x1e0]                             |     r1 = *(arg_1e0h);
    0x00053afc cmp r5, r1                                        |     
                                                                 |     if (r5 != r1) {
    0x00053afe bne.w 0x52664                                     |         goto label_234;
                                                                 |     }
    0x00053b02 b.w 0x5268c                                       |     goto label_249;
                                                                 | label_355:
    0x00053b06 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00053b08 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00053b0a ldr r1, [sp, 0x1c]                                |     r1 = *(arg_1ch);
    0x00053b0c ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00053b0e str r0, [r2, 0x50]                                |     *((r2 + 0x50)) = r0;
    0x00053b10 str r1, [r2, 0x4c]                                |     *((r2 + 0x4c)) = r1;
    0x00053b12 strb.w r3, [r2, 0x56]                             |     *((r2 + 0x56)) = r3;
    0x00053b16 b 0x538d2                                         |     goto label_250;
                                                                 | label_745:
    0x00053b18 ldr.w r2, [r8, 4]                                 |     r2 = *((r8 + 4));
    0x00053b1c mov r1, r6                                        |     r1 = r6;
    0x00053b1e ldr.w r3, [r8, 0x18]                              |     r3 = *((r8 + 0x18));
    0x00053b22 mov r0, sl                                        |     r0 = sl;
    0x00053b24 str r2, [sp]                                      |     *(sp) = r2;
    0x00053b26 ldr.w r2, [pc, 0x628]                             |     r2 = *(0x00054150);
    0x00053b2a add r2, pc                                        |     r2 += pc;
    0x00053b2c bl 0x35538                                        |     fcn_00035538 (r0, r1);
    0x00053b30 b 0x534aa                                         |     goto label_212;
                                                                 | label_748:
    0x00053b32 ldr r1, [sp, 0x34]                                |     r1 = *(arg_34h);
    0x00053b34 movs r2, 2                                        |     r2 = 2;
    0x00053b36 mov r0, sl                                        |     r0 = sl;
    0x00053b38 bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x00053b3c ldr.w r3, [r8, 0x18]                              |     r3 = *((r8 + 0x18));
    0x00053b40 cmp r3, 0                                         |     
    0x00053b42 str r3, [sp, 0x2c]                                |     *(arg_2ch) = r3;
                                                                 |     if (r3 <= 0) {
    0x00053b44 ble 0x53b5e                                       |         goto label_762;
                                                                 |     }
                                                                 |     do {
    0x00053b46 ldr.w r3, [r8, 4]                                 |         r3 = *((r8 + 4));
    0x00053b4a movs r1, 0                                        |         r1 = 0;
    0x00053b4c ldr r2, [sp, 0x3c]                                |         r2 = *(arg_3ch);
    0x00053b4e mov r0, sl                                        |         r0 = sl;
    0x00053b50 ldrb r3, [r3, r6]                                 |         r3 = *((r3 + r6));
    0x00053b52 adds r6, 1                                        |         r6++;
    0x00053b54 bl 0x35538                                        |         fcn_00035538 (r0, r1);
    0x00053b58 ldr r3, [sp, 0x2c]                                |         r3 = *(arg_2ch);
    0x00053b5a cmp r3, r6                                        |         
    0x00053b5c bne 0x53b46                                       |         
                                                                 |     } while (r3 != r6);
                                                                 | label_762:
    0x00053b5e ldr r1, [sp, 0x4c]                                |     r1 = *(arg_4ch);
    0x00053b60 movs r2, 1                                        |     r2 = 1;
    0x00053b62 mov r0, sl                                        |     r0 = sl;
    0x00053b64 bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x00053b68 b 0x534aa                                         |     goto label_212;
                                                                 | label_569:
    0x00053b6a ldr r4, [r6]                                      |     r4 = *(r6);
                                                                 |     if (r4 == 0) {
    0x00053b6c cbz r4, 0x53b7c                                   |         goto label_763;
                                                                 |     }
                                                                 |     do {
    0x00053b6e mov r1, r4                                        |         r1 = r4;
    0x00053b70 ldr r4, [r4]                                      |         r4 = *(r4);
    0x00053b72 ldr r0, [r6, 4]                                   |         r0 = *((r6 + 4));
    0x00053b74 bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x00053b78 cmp r4, 0                                         |         
    0x00053b7a bne 0x53b6e                                       |         
                                                                 |     } while (r4 != 0);
                                                                 | label_763:
    0x00053b7c movs r3, 0                                        |     r3 = 0;
    0x00053b7e str r3, [r6]                                      |     *(r6) = r3;
    0x00053b80 strd r3, r3, [r6, 8]                              |     __asm ("strd r3, r3, [r6, 8]");
    0x00053b84 str r3, [r6, 0x14]                                |     *((r6 + 0x14)) = r3;
    0x00053b86 mov.w r3, 0x10000                                 |     r3 = 0x10000;
    0x00053b8a str r3, [r6, 0x18]                                |     *((r6 + 0x18)) = r3;
    0x00053b8c b.w 0x50c30                                       |     goto label_251;
                                                                 | label_404:
    0x00053b90 ldr r0, [r2, 0x38]                                |     r0 = *((r2 + 0x38));
    0x00053b92 blx 0x63dc                                        |     fcn_000063dc ();
    0x00053b96 strb r6, [r4, 0xa]                                |     *((r4 + 0xa)) = r6;
    0x00053b98 b.w 0x4ebb2                                       |     goto label_252;
                                                                 | label_452:
    0x00053b9c ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00053b9e adds r3, 1                                        |     r3++;
    0x00053ba0 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053ba2 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_760:
    0x00053ba6 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00053ba8 add r1, sp, 0xd8                                  |     r1 += arg_d8h;
    0x00053baa adds r3, 1                                        |     r3++;
    0x00053bac str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053bae bl 0xb5cc                                         |     fcn_0000b5cc (r0, r1);
    0x00053bb2 ldrd r2, r3, [sp, 0xd8]                           |     __asm ("ldrd r2, r3, [arg_d8h]");
    0x00053bb6 ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x00053bb8 strd r2, r3, [r1, 0x10]                           |     __asm ("strd r2, r3, [r1, 0x10]");
    0x00053bbc b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_737:
    0x00053bc0 movs r0, 0x10                                     |     r0 = 0x10;
    0x00053bc2 bl 0x11e2c                                        |     r0 = fcn_00011e2c (r0);
                                                                 |     if (r0 != 0) {
    0x00053bc6 cbz r0, 0x53bde                                   |         
    0x00053bc8 ldr r2, [r7, 0x48]                                |         r2 = *((r7 + 0x48));
    0x00053bca strd r5, sb, [r0]                                 |         __asm ("strd r5, sb, [r0]");
    0x00053bce str r2, [r0, 0xc]                                 |         *((r0 + 0xc)) = r2;
    0x00053bd0 str r0, [r7, 0x48]                                |         *((r7 + 0x48)) = r0;
    0x00053bd2 b.w 0x53302                                       |         goto label_253;
                                                                 | label_747:
    0x00053bd6 mov r0, r7                                        |         r0 = r7;
    0x00053bd8 bl 0xfe84                                         |         fcn_0000fe84 (r0);
    0x00053bdc b 0x534a0                                         |         goto label_254;
                                                                 |     }
    0x00053bde ldrb r3, [r5, 9]                                  |     r3 = *((r5 + 9));
    0x00053be0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00053be2 bne.w 0x54096                                     |         goto label_764;
                                                                 |     }
    0x00053be6 mov.w sb, 7                                       |     sb = 7;
    0x00053bea str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x00053bee b.w 0x4d742                                       |     goto label_25;
                                                                 | label_730:
    0x00053bf2 ldr r0, [r7, 0x1c]                                |     r0 = *((r7 + 0x1c));
    0x00053bf4 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00053bf8 b.w 0x531ec                                       |     goto label_255;
                                                                 | label_309:
    0x00053bfc sub.w r1, r3, 0x20                                |     r1 = r3 - 0x20;
    0x00053c00 lsl.w r2, r5, r3                                  |     r2 = r5 << r3;
    0x00053c04 lsl.w r1, r4, r1                                  |     r1 = r4 << r1;
    0x00053c08 orrs r2, r1                                       |     r2 |= r1;
    0x00053c0a rsb.w r1, r3, 0x20                                |     r1 = 0x20 - r3;
    0x00053c0e lsr.w r1, r4, r1                                  |     r1 = r4 >> r1;
    0x00053c12 lsls r4, r3                                       |     r4 <<= r3;
    0x00053c14 orrs r2, r1                                       |     r2 |= r1;
    0x00053c16 b.w 0x4d69c                                       |     goto label_256;
                                                                 | label_611:
    0x00053c1a adds r3, 0x40                                     |     r3 += 0x40;
    0x00053c1c b.w 0x515e0                                       |     goto label_257;
                                                                 | label_610:
    0x00053c20 mov r3, r1                                        |     r3 = r1;
    0x00053c22 b.w 0x515c0                                       |     goto label_258;
                                                                 | label_365:
    0x00053c26 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00053c28 ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x00053c2a ldr r0, [sp, 0x44]                                |     r0 = *(arg_44h);
    0x00053c2c ldr r3, [r2, 0x48]                                |     r3 = *((r2 + 0x48));
    0x00053c2e ldr r4, [r1, 4]                                   |     r4 = *((r1 + 4));
    0x00053c30 adds r3, 2                                        |     r3 += 2;
    0x00053c32 orr r3, r3, 1                                     |     r3 |= 1;
    0x00053c36 str r3, [r2, 0x48]                                |     *((r2 + 0x48)) = r3;
    0x00053c38 movs r3, 0x28                                     |     r3 = 0x28;
    0x00053c3a mla r4, r3, r4, r0                                |     __asm ("mla r4, r3, r4, r0");
    0x00053c3e ldr r3, [r1, 8]                                   |     r3 = *((r1 + 8));
    0x00053c40 cmp r3, 0                                         |     
    0x00053c42 it gt                                             |     
                                                                 |     if (r3 <= 0) {
    0x00053c44 ldrgt r5, [sp, 0x20]                              |         r5 = *(arg_20h);
                                                                 |     }
    0x00053c46 str r4, [r2, 0x14]                                |     *((r2 + 0x14)) = r4;
                                                                 |     if (r3 <= 0) {
    0x00053c48 ble 0x53c6e                                       |         goto label_765;
                                                                 |     }
                                                                 | label_259:
    0x00053c4a ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x00053c4c lsls r0, r3, 0x13                                 |     r0 = r3 << 0x13;
                                                                 |     if (r0 >= r3) {
    0x00053c4e bpl 0x53c5c                                       |         goto label_766;
                                                                 |     }
    0x00053c50 mov r0, r4                                        |     r0 = r4;
    0x00053c52 bl 0x17410                                        |     r0 = fcn_00017410 (r0);
    0x00053c56 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00053c58 bne.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
                                                                 | label_766:
    0x00053c5c mov r0, r4                                        |     r0 = r4;
    0x00053c5e add.w sb, sb, 1                                   |     sb++;
    0x00053c62 bl 0x184b8                                        |     fcn_000184b8 (r0);
    0x00053c66 ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
    0x00053c68 adds r4, 0x28                                     |     r4 += 0x28;
    0x00053c6a cmp r3, sb                                        |     
                                                                 |     if (r3 > sb) {
    0x00053c6c bgt 0x53c4a                                       |         goto label_259;
                                                                 |     }
                                                                 | label_765:
    0x00053c6e ldrb.w r3, [fp, 0x40]                             |     r3 = *(arg_40h);
    0x00053c72 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00053c74 bne.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x00053c78 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00053c7a movs r4, 0x64                                     |     r4 = 0x64;
    0x00053c7c ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00053c7e adds r3, 1                                        |     r3++;
    0x00053c80 str r3, [r2, 0x4c]                                |     *((r2 + 0x4c)) = r3;
    0x00053c82 b.w 0x4d46e                                       |     goto label_0;
                                                                 | label_752:
    0x00053c86 ldr r4, [r2, 0xc]                                 |     r4 = *((r2 + 0xc));
    0x00053c88 subs r4, 1                                        |     r4--;
    0x00053c8a str r4, [r2, 0xc]                                 |     *((r2 + 0xc)) = r4;
    0x00053c8c cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00053c8e bne.w 0x53794                                     |         goto label_260;
                                                                 |     }
    0x00053c92 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00053c94 mov r5, r2                                        |     r5 = r2;
    0x00053c96 ldr r0, [r3, 0x38]                                |     r0 = *((r3 + 0x38));
    0x00053c98 blx 0x63dc                                        |     fcn_000063dc ();
    0x00053c9c strb r4, [r5, 0xa]                                |     *((r5 + 0xa)) = r4;
    0x00053c9e b 0x53794                                         |     goto label_260;
                                                                 | label_310:
    0x00053ca0 mov.w r1, -1                                      |     r1 = -1;
    0x00053ca4 rsb.w r6, r3, 0x40                                |     r6 = 0x40 - r3;
    0x00053ca8 rsb.w r5, r3, 0x20                                |     r5 = 0x20 - r3;
    0x00053cac lsl.w r0, r1, r6                                  |     r0 = r1 << r6;
    0x00053cb0 lsl.w r5, r1, r5                                  |     r5 = r1 << r5;
    0x00053cb4 subs r3, 0x20                                     |     r3 -= 0x20;
    0x00053cb6 lsr.w r3, r1, r3                                  |     r3 = r1 >> r3;
    0x00053cba mov r1, r0                                        |     r1 = r0;
    0x00053cbc orrs r0, r5                                       |     r0 |= r5;
    0x00053cbe orrs r0, r3                                       |     r0 |= r3;
    0x00053cc0 orrs r4, r1                                       |     r4 |= r1;
    0x00053cc2 orrs r2, r0                                       |     r2 |= r0;
    0x00053cc4 b.w 0x4d69c                                       |     goto label_256;
                                                                 | label_750:
    0x00053cc8 ldr r0, [r4, 0x3c]                                |     r0 = *((r4 + 0x3c));
    0x00053cca ldr r3, [r0]                                      |     r3 = *(r0);
    0x00053ccc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00053cce beq.w 0x4edec                                     |         goto label_58;
                                                                 |     }
    0x00053cd2 ldrb r2, [r4, 0xd]                                |     r2 = *((r4 + 0xd));
                                                                 |     if (r2 == 0) {
    0x00053cd4 cbnz r2, 0x53cdc                                  |         
    0x00053cd6 ldr r3, [r3, 0x20]                                |         r3 = *((r3 + 0x20));
    0x00053cd8 movs r1, 1                                        |         r1 = 1;
    0x00053cda blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
                                                                 |     }
    0x00053cdc ldrb r3, [r4, 0x11]                               |     r3 = *((r4 + 0x11));
    0x00053cde cmp r3, 5                                         |     
                                                                 |     if (r3 == 5) {
    0x00053ce0 beq.w 0x4edec                                     |         goto label_58;
                                                                 |     }
    0x00053ce4 movs r3, 1                                        |     r3 = 1;
    0x00053ce6 strb r3, [r4, 0x11]                               |     *((r4 + 0x11)) = r3;
    0x00053ce8 b.w 0x4edec                                       |     goto label_58;
                                                                 | label_749:
    0x00053cec movs r1, 1                                        |     r1 = 1;
    0x00053cee mov r0, r4                                        |     r0 = r4;
    0x00053cf0 str r3, [sp, 0xd8]                                |     *(arg_d8h) = r3;
    0x00053cf2 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00053cf4 bl 0xa194                                         |     r0 = fcn_0000a194 (r0, r1);
    0x00053cf8 mov r6, r0                                        |     r6 = r0;
    0x00053cfa cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00053cfc bne.w 0x4edec                                     |         goto label_58;
                                                                 |     }
    0x00053d00 mov r2, r0                                        |     r2 = r0;
    0x00053d02 ldr r0, [r4]                                      |     r0 = *(r4);
    0x00053d04 ldr.w r1, [r4, 0xe4]                              |     r1 = *((r4 + 0xe4));
    0x00053d08 mov r3, r7                                        |     r3 = r7;
    0x00053d0a ldr r6, [r0, 0x20]                                |     r6 = *((r0 + 0x20));
    0x00053d0c blx r6                                            |     r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00053d0e mov r6, r0                                        |     r6 = r0;
    0x00053d10 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00053d12 bne.w 0x4edec                                     |         goto label_58;
                                                                 |     }
    0x00053d16 ldr r3, [sp, 0xd8]                                |     r3 = *(arg_d8h);
                                                                 |     if (r3 != 0) {
    0x00053d18 cbnz r3, 0x53d46                                  |         goto label_767;
                                                                 |     }
                                                                 | label_263:
    0x00053d1a ldr.w r3, [r4, 0xe0]                              |     r3 = *((r4 + 0xe0));
    0x00053d1e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00053d20 beq.w 0x53604                                     |         goto label_261;
                                                                 |     }
    0x00053d24 b 0x535ce                                         |     goto label_262;
                                                                 | label_636:
    0x00053d26 movw r3, 0x313                                    |     r3 = 0x313;
    0x00053d2a mov r0, r2                                        |     r0 = r2;
    0x00053d2c str r3, [r2, 0x50]                                |     *((r2 + 0x50)) = r3;
    0x00053d2e movs r3, 2                                        |     r3 = 2;
    0x00053d30 strb.w r3, [r2, 0x56]                             |     *((r2 + 0x56)) = r3;
    0x00053d34 adds r0, 0x2c                                     |     r0 += 0x2c;
    0x00053d36 ldr.w r2, [pc, 0x41c]                             |     
    0x00053d3a movs r4, 1                                        |     r4 = 1;
    0x00053d3c add r2, pc                                        |     r2 = 0xa7e96;
    0x00053d3e bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x00053d42 b.w 0x4d46e                                       |     goto label_0;
                                                                 | label_767:
    0x00053d46 mov r0, r4                                        |     r0 = r4;
    0x00053d48 bl 0xf2d8                                         |     r0 = fcn_0000f2d8 (r0);
    0x00053d4c mov r6, r0                                        |     r6 = r0;
    0x00053d4e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00053d50 beq 0x53d1a                                       |         goto label_263;
                                                                 |     }
    0x00053d52 b.w 0x4edec                                       |     goto label_58;
                                                                 | label_665:
    0x00053d56 add.w sb, sl, 0x14                                |     sb = sl + 0x14;
    0x00053d5a b.w 0x53220                                       |     goto label_264;
                                                                 | label_619:
    0x00053d5e ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x00053d60 mov.w r2, -1                                      |     r2 = -1;
    0x00053d64 mvn r3, 0x80000000                                |     r3 = ~0x80000000;
    0x00053d68 str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x00053d6c strd r2, r3, [r1, 0x10]                           |     __asm ("strd r2, r3, [r1, 0x10]");
    0x00053d70 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_608:
    0x00053d74 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x00053d76 ldr r0, [r3, 0x38]                                |     r0 = *((r3 + 0x38));
    0x00053d78 blx 0x63dc                                        |     fcn_000063dc ();
    0x00053d7c strb r4, [r5, 0xa]                                |     *((r5 + 0xa)) = r4;
    0x00053d7e b.w 0x51592                                       |     goto label_265;
                                                                 | label_461:
    0x00053d82 ldr r5, [r4, 8]                                   |     r5 = *((r4 + 8));
    0x00053d84 movs r6, 6                                        |     r6 = 6;
    0x00053d86 b.w 0x505a0                                       |     goto label_144;
                                                                 | label_623:
    0x00053d8a mov sl, fp                                        |     sl = fp;
    0x00053d8c mov fp, r0                                        |     
    0x00053d8e b.w 0x4de50                                       |     goto label_91;
                                                                 | label_498:
    0x00053d92 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00053d94 beq.w 0x51c2c                                     |         goto label_266;
                                                                 |     }
                                                                 | label_634:
    0x00053d98 mov.w r1, 0x204                                   |     r1 = 0x204;
    0x00053d9c mov r0, fp                                        |     r0 = fp;
    0x00053d9e bl 0x2dc10                                        |     fcn_0002dc10 (r0, r1);
    0x00053da2 movs r3, 1                                        |     r3 = 1;
    0x00053da4 strb.w r3, [fp, 0x3e]                             |     *(arg_3eh) = r3;
    0x00053da8 b.w 0x51c64                                       |     goto label_267;
                                                                 | label_614:
    0x00053dac mul r3, r0, r3                                    |     r3 = r0 * r3;
    0x00053db0 mla r3, r2, r1, r3                                |     __asm ("mla r3, r2, r1, r3");
    0x00053db4 umull r0, r1, r0, r2                              |     r0:r1 = r0 * r2;
    0x00053db8 add r1, r3                                        |     r1 += r3;
    0x00053dba b.w 0x5171c                                       |     goto label_84;
                                                                 | label_731:
    0x00053dbe ldr.w r0, [sl, 4]                                 |     r0 = *((sl + 4));
    0x00053dc2 mov.w r1, 0x3f8                                   |     r1 = 0x3f8;
    0x00053dc6 bl 0xd3a0                                         |     r0 = fcn_0000d3a0 (r0, r1);
    0x00053dca mov r3, r0                                        |     r3 = r0;
                                                                 |     if (r0 != 0) {
    0x00053dcc cbz r0, 0x53dea                                   |         
    0x00053dce ldr.w r2, [sl]                                    |         r2 = *(sl);
    0x00053dd2 adds r3, 8                                        |         r3 += 8;
    0x00053dd4 str r2, [r0]                                      |         *(r0) = r2;
    0x00053dd6 str.w r3, [sl, 0x10]                              |         __asm ("str.w r3, [sl, 0x10]");
    0x00053dda movs r3, 0x3f                                     |         r3 = 0x3f;
    0x00053ddc str.w r0, [sl]                                    |         __asm ("str.w r0, [sl]");
    0x00053de0 b.w 0x5322a                                       |         goto label_268;
                                                                 | label_734:
    0x00053de4 ldr r5, [sp, 0x3c]                                |         r5 = *(arg_3ch);
    0x00053de6 mov r4, sb                                        |         r4 = sb;
    0x00053de8 b 0x53a14                                         |         goto label_269;
                                                                 |     }
    0x00053dea ldrh.w r3, [sl, 0x1a]                             |     r3 = *((sl + 0x1a));
    0x00053dee str.w r0, [sb]                                    |     __asm ("str.w r0, [sb]");
    0x00053df2 str r3, [sp, 0x3c]                                |     *(arg_3ch) = r3;
    0x00053df4 b.w 0x52318                                       |     goto label_242;
                                                                 | label_723:
    0x00053df8 ldr.w r2, [sb, 0x48]                              |     r2 = *((sb + 0x48));
    0x00053dfc mov r1, sb                                        |     r1 = sb;
    0x00053dfe ldr.w r0, [sb, 0x34]                              |     r0 = *((sb + 0x34));
    0x00053e02 bl 0x2fc54                                        |     r0 = fcn_0002fc54 (r0, r1, r2, r3);
    0x00053e06 mov r5, r0                                        |     r5 = r0;
    0x00053e08 ldr.w r0, [sb, 0x44]                              |     r0 = *((sb + 0x44));
    0x00053e0c bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x00053e10 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00053e12 beq.w 0x52fc8                                     |         goto label_270;
                                                                 |     }
                                                                 | label_724:
    0x00053e16 mov r6, r5                                        |     r6 = r5;
    0x00053e18 b.w 0x527e8                                       |     goto label_186;
                                                                 | label_595:
    0x00053e1c mov sb, r6                                        |     sb = r6;
    0x00053e1e b.w 0x4f156                                       |     goto label_271;
                                                                 | label_721:
    0x00053e22 movs r1, 9                                        |     r1 = 9;
    0x00053e24 mov r0, sb                                        |     r0 = sb;
    0x00053e26 bl 0x28d10                                        |     fcn_00028d10 (r0, r1);
    0x00053e2a ldr.w r0, [sb, 0x44]                              |     r0 = *((sb + 0x44));
    0x00053e2e bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x00053e32 ldrb.w r3, [r8, 9]                                |     r3 = *((r8 + 9));
                                                                 |     if (r3 == 0) {
    0x00053e36 cbz r3, 0x53e80                                   |         goto label_768;
                                                                 |     }
    0x00053e38 ldr.w r3, [r8, 0xc]                               |     r3 = *((r8 + 0xc));
    0x00053e3c subs r6, r3, 1                                    |     r6 = r3 - 1;
    0x00053e3e str.w r6, [r8, 0xc]                               |     __asm ("str.w r6, [r8, 0xc]");
    0x00053e42 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00053e44 beq.w 0x53770                                     |         goto label_272;
                                                                 |     }
    0x00053e48 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00053e4a ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x00053e4c vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00053e50 adds r3, 1                                        |     r3++;
    0x00053e52 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053e54 movs r3, 4                                        |     r3 = 4;
    0x00053e56 vstr d16, [r2, 0x10]                              |     __asm ("vstr d16, [r2, 0x10]");
    0x00053e5a strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x00053e5c b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_722:
    0x00053e60 ldr.w r2, [sb, 0x48]                              |     r2 = *((sb + 0x48));
    0x00053e64 mov r1, sb                                        |     r1 = sb;
    0x00053e66 ldr.w r0, [sb, 0x34]                              |     r0 = *((sb + 0x34));
    0x00053e6a mov r7, r5                                        |     r7 = r5;
    0x00053e6c bl 0x2fc54                                        |     r0 = fcn_0002fc54 (r0, r1, r2, r3);
    0x00053e70 mov r6, r0                                        |     r6 = r0;
    0x00053e72 ldr.w r0, [sb, 0x44]                              |     r0 = *((sb + 0x44));
    0x00053e76 mov r4, r5                                        |     r4 = r5;
    0x00053e78 bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x00053e7c b.w 0x5302c                                       |     goto label_273;
                                                                 | label_768:
    0x00053e80 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00053e82 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x00053e84 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00053e88 adds r3, 1                                        |     r3++;
    0x00053e8a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053e8c movs r3, 4                                        |     r3 = 4;
    0x00053e8e vstr d16, [r2, 0x10]                              |     __asm ("vstr d16, [r2, 0x10]");
    0x00053e92 strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x00053e94 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_658:
    0x00053e98 ldrh.w r2, [sp, 0xf4]                             |     r2 = *(arg_f4h);
    0x00053e9c movw r1, 0x2460                                   |     r1 = 0x2460;
    0x00053ea0 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00053ea2 tst r1, r2                                        |     
    0x00053ea4 bne 0x53ec4                                       |     
                                                                 |     while (1) {
    0x00053ea6 ldr r1, [r7, 0x24]                                |         r1 = *((r7 + 0x24));
                                                                 |         if (r1 != 0) {
    0x00053ea8 cbz r1, 0x53eb8                                   |             
    0x00053eaa ldr r0, [r7]                                      |             r0 = *(r7);
    0x00053eac str r3, [sp, 0x34]                                |             *(arg_34h) = r3;
    0x00053eae bl 0xe12c                                         |             fcn_0000e12c (r0, r1);
    0x00053eb2 ldr r3, [sp, 0x34]                                |             r3 = *(arg_34h);
    0x00053eb4 movs r2, 0                                        |             r2 = 0;
    0x00053eb6 str r2, [r7, 0x24]                                |             *((r7 + 0x24)) = r2;
                                                                 |         }
    0x00053eb8 movs r2, 0                                        |         r2 = 0;
    0x00053eba str r2, [r7, 4]                                   |         *((r7 + 4)) = r2;
    0x00053ebc movs r2, 1                                        |         r2 = 1;
    0x00053ebe strh r2, [r7, 0x1c]                               |         *((r7 + 0x1c)) = r2;
    0x00053ec0 b.w 0x521d0                                       |         goto label_274;
    0x00053ec4 mov r0, r7                                        |         r0 = r7;
    0x00053ec6 str r3, [sp, 0x34]                                |         *(arg_34h) = r3;
    0x00053ec8 bl 0xfe84                                         |         fcn_0000fe84 (r0);
    0x00053ecc ldr r3, [sp, 0x34]                                |         r3 = *(arg_34h);
    0x00053ece b 0x53ea6                                         |         
                                                                 |     }
                                                                 | label_700:
    0x00053ed0 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00053ed2 cmp.w sb, 0x204                                   |     
    0x00053ed6 add.w r0, r3, 0x2c                                |     r0 = r3 + 0x2c;
                                                                 |     if (sb == 0x204) {
    0x00053eda bne 0x53ee4                                       |         
    0x00053edc ldr r3, [pc, 0x278]                               |         
    0x00053ede add r3, pc                                        |         r3 = 0xa803a;
    0x00053ee0 b.w 0x524aa                                       |         goto label_160;
                                                                 |     }
    0x00053ee4 uxtb.w r3, sb                                     |     r3 = (int8_t) sb;
    0x00053ee8 cmp r3, 0x1a                                      |     
                                                                 |     if (r3 <= 0x1a) {
    0x00053eea ble.w 0x536f2                                     |         goto label_275;
                                                                 |     }
    0x00053eee ldr r3, [pc, 0x26c]                               |     
    0x00053ef0 add r3, pc                                        |     r3 = 0xa8052;
    0x00053ef2 b.w 0x524aa                                       |     goto label_160;
                                                                 | label_753:
    0x00053ef6 cmp r1, 0                                         |     
                                                                 |     if (r1 >= 0) {
    0x00053ef8 bge.w 0x5383a                                     |         goto label_276;
                                                                 |     }
    0x00053efc rsbs.w ip, r0, 1                                  |     
    0x00053f00 mov.w r4, -0x80000000                             |     r4 = -0x80000000;
    0x00053f04 sbc.w r7, r4, r1                                  |     __asm ("sbc.w r7, r4, r1");
    0x00053f08 rsbs.w lr, r2, 1                                  |     lr = 1 - r2;
    0x00053f0c sbc.w r4, r3, r3, lsl 1                           |     __asm ("sbc.w r4, r3, r3, lsl 1");
    0x00053f10 cmp lr, ip                                        |     
    0x00053f12 sbcs r4, r7                                       |     __asm ("sbcs r4, r7");
                                                                 |     if (lr >= ip) {
    0x00053f14 bge.w 0x5383a                                     |         goto label_276;
                                                                 |     }
    0x00053f18 b.w 0x51752                                       |     goto label_230;
                                                                 | label_751:
    0x00053f1c adds r2, 1                                        |     r2++;
    0x00053f1e adc r3, r3, 0                                     |     __asm ("adc r3, r3, 0");
    0x00053f22 b.w 0x52d24                                       |     goto label_277;
                                                                 | label_297:
    0x00053f26 blx 0x6498                                        |     r0 = fcn_00006498 ();
                                                                 | label_533:
    0x00053f2a mov r4, r0                                        |     r4 = r0;
    0x00053f2c mov sb, r4                                        |     sb = r4;
    0x00053f2e b.w 0x528f8                                       |     goto label_202;
                                                                 | label_532:
    0x00053f32 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00053f34 mov r4, r0                                        |     r4 = r0;
    0x00053f36 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x00053f38 strd r2, r0, [r3, 0x4c]                           |     __asm ("strd r2, r0, [r3, 0x4c]");
    0x00053f3c b.w 0x4d46e                                       |     goto label_0;
                                                                 | label_375:
    0x00053f40 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x00053f42 ldr r4, [r2, 0x10]                                |     r4 = *((r2 + 0x10));
    0x00053f44 movw r2, 0x2460                                   |     r2 = 0x2460;
    0x00053f48 tst r3, r2                                        |     
                                                                 |     if ((r3 & r2) != 0) {
    0x00053f4a bne 0x53fb8                                       |         goto label_769;
                                                                 |     }
                                                                 | label_279:
    0x00053f4c mov r3, r4                                        |     r3 = r4;
    0x00053f4e mov r2, r5                                        |     r2 = r5;
    0x00053f50 add.w r1, r4, 0x20                                |     r1 = r4 + 0x20;
                                                                 |     do {
    0x00053f54 ldr.w ip, [r3]                                    |         ip = *(r3);
    0x00053f58 adds r3, 0x10                                     |         r3 += 0x10;
    0x00053f5a ldr r7, [r3, -0xc]                                |         r7 = *((r3 - 0xc));
    0x00053f5e adds r2, 0x10                                     |         r2 += 0x10;
    0x00053f60 ldr r6, [r3, -0x8]                                |         r6 = *((r3 - 0x8));
    0x00053f64 ldr r0, [r3, -0x4]                                |         r0 = *((r3 - 0x4));
    0x00053f68 cmp r3, r1                                        |         
    0x00053f6a str ip, [r2, -0x10]                               |         *((r2 - 0x10)) = ip;
    0x00053f6e str r7, [r2, -0xc]                                |         *((r2 - 0xc)) = r7;
    0x00053f72 str r6, [r2, -0x8]                                |         *((r2 - 0x8)) = r6;
    0x00053f76 str r0, [r2, -0x4]                                |         *((r2 - 0x4)) = r0;
    0x00053f7a bne 0x53f54                                       |         
                                                                 |     } while (r3 != r1);
    0x00053f7c ldr r3, [r3]                                      |     r3 = *(r3);
    0x00053f7e str r3, [r2]                                      |     *(r2) = r3;
    0x00053f80 movs r2, 0                                        |     r2 = 0;
    0x00053f82 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x00053f84 str r2, [r5, 0x20]                                |     *((r5 + 0x20)) = r2;
    0x00053f86 tst.w r3, 0x800                                   |     
    0x00053f8a ldrh r3, [r5, 0x1c]                               |     r3 = *((r5 + 0x1c));
                                                                 |     if ((r3 & 0x800) != 0) {
    0x00053f8c bne.w 0x4e410                                     |         goto label_278;
                                                                 |     }
    0x00053f90 bic r3, r3, 0x1c00                                |     r3 = BIT_MASK (r3, 0x1c00);
    0x00053f94 orr r3, r3, 0x800                                 |     r3 |= 0x800;
    0x00053f98 strh r3, [r5, 0x1c]                               |     *((r5 + 0x1c)) = r3;
    0x00053f9a b.w 0x4e41a                                       |     goto label_156;
                                                                 | label_739:
    0x00053f9e ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00053fa0 adds r3, 1                                        |     r3++;
    0x00053fa2 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053fa4 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_620:
    0x00053fa8 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x00053faa orr r6, r6, 4                                     |     r6 |= 4;
    0x00053fae str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x00053fb2 strh r6, [r3, 0x1c]                               |     *((r3 + 0x1c)) = r6;
    0x00053fb4 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_769:
    0x00053fb8 mov r0, r5                                        |     r0 = r5;
    0x00053fba bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00053fbe b 0x53f4c                                         |     goto label_279;
                                                                 | label_408:
    0x00053fc0 mov r0, r4                                        |     r0 = r4;
    0x00053fc2 bl 0x11880                                        |     r0 = fcn_00011880 (r0);
    0x00053fc6 mov r1, r0                                        |     r1 = r0;
    0x00053fc8 b.w 0x4ec38                                       |     goto label_280;
                                                                 | label_670:
    0x00053fcc mov r2, r8                                        |     r2 = r8;
    0x00053fce b.w 0x52314                                       |     goto label_281;
                                                                 | label_758:
    0x00053fd2 cmp.w sb, 4                                       |     
                                                                 |     if (sb == 4) {
    0x00053fd6 bne 0x53fe0                                       |         
    0x00053fd8 movs r1, 2                                        |         r1 = 2;
    0x00053fda mov r0, r4                                        |         r0 = r4;
    0x00053fdc bl 0x2b6fc                                        |         fcn_0002b6fc (r0, r1);
                                                                 |     }
    0x00053fe0 movs r1, 2                                        |     r1 = 2;
    0x00053fe2 b.w 0x5360e                                       |     goto label_282;
                                                                 | label_409:
    0x00053fe6 mov r6, r3                                        |     r6 = r3;
    0x00053fe8 b.w 0x4ed30                                       |     goto label_233;
                                                                 | label_645:
    0x00053fec ldrb.w r3, [fp, 0x40]                             |     r3 = *(arg_40h);
    0x00053ff0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00053ff2 bne.w 0x52ae2                                     |         goto label_226;
                                                                 |     }
    0x00053ff6 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00053ff8 mov.w sb, 0x14                                    |     sb = 0x14;
    0x00053ffc add.w r0, r3, 0x2c                                |     r0 = r3 + 0x2c;
    0x00054000 b.w 0x536f0                                       |     goto label_283;
                                                                 | label_761:
    0x00054004 ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
                                                                 |     if (r3 == 0) {
    0x00054008 cbz r3, 0x5401c                                   |         goto label_770;
                                                                 |     }
                                                                 |     do {
    0x0005400a ldrb.w r2, [r3, 0x58]                             |         r2 = *((r3 + 0x58));
    0x0005400e orr r2, r2, 0x20                                  |         r2 |= 0x20;
    0x00054012 strb.w r2, [r3, 0x58]                             |         *((r3 + 0x58)) = r2;
    0x00054016 ldr r3, [r3, 0x34]                                |         r3 = *((r3 + 0x34));
    0x00054018 cmp r3, 0                                         |         
    0x0005401a bne 0x5400a                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_770:
    0x0005401c mov r0, fp                                        |     r0 = fp;
    0x0005401e bl 0x13968                                        |     fcn_00013968 (r0);
    0x00054022 ldr.w r3, [fp, 0x18]                              |     r3 = *(arg_18h);
    0x00054026 orr r3, r3, 2                                     |     r3 |= 2;
    0x0005402a str.w r3, [fp, 0x18]                              |     __asm ("str.w r3, [arg_18h]");
    0x0005402e b 0x53af8                                         |     goto label_284;
                                                                 | label_559:
    0x00054030 ldrh r3, [r7, 0x24]                               |     r3 = *((r7 + 0x24));
    0x00054032 movw r2, 0x2460                                   |     r2 = 0x2460;
    0x00054036 mov sl, r7                                        |     sl = r7;
    0x00054038 tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x0005403a bne 0x540ae                                       |         goto label_771;
                                                                 |     }
                                                                 | label_289:
    0x0005403c ldr.w r1, [sl, 0x2c]                              |     r1 = *((sl + 0x2c));
    0x00054040 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00054042 beq.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x00054046 ldr.w r0, [sl, 8]                                 |     r0 = *((sl + 8));
    0x0005404a bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0005404e b.w 0x4d4ec                                       |     goto label_6;
                                                                 | label_756:
    0x00054052 mov r3, r2                                        |     r3 = r2;
                                                                 |     do {
    0x00054054 ldr r2, [pc, 0x108]                               |         
    0x00054056 mov r1, fp                                        |         r1 = fp;
    0x00054058 add r2, pc                                        |         r2 = 0xa81bc;
    0x0005405a bl 0x1c9d0                                        |         fcn_0001c9d0 (r0, r1);
    0x0005405e b 0x538b8                                         |         goto label_285;
                                                                 | label_689:
    0x00054060 ldr r3, [r5, 0x18]                                |         r3 = *((r5 + 0x18));
    0x00054062 mov r1, r5                                        |         r1 = r5;
    0x00054064 mov r0, fp                                        |         r0 = fp;
    0x00054066 str.w r3, [fp, 0x1e0]                             |         __asm ("str.w r3, [arg_1e0h]");
    0x0005406a bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x0005406e b.w 0x526a2                                       |         goto label_206;
                                                                 | label_688:
    0x00054072 ldr r3, [sp, 0x24]                                |         r3 = *((sp + 0x24));
    0x00054074 mov r8, r4                                        |         r8 = r4;
    0x00054076 ldr r2, [sp, 0x1c]                                |         r2 = *(arg_1ch);
    0x00054078 mov r4, r0                                        |         r4 = r0;
    0x0005407a str r2, [r3, 0x4c]                                |         *((r3 + 0x4c)) = r2;
    0x0005407c strb.w r8, [fp, 0x3e]                             |         *(arg_3eh) = r8;
    0x00054080 str r0, [r3, 0x50]                                |         *((r3 + 0x50)) = r0;
    0x00054082 b.w 0x4d46e                                       |         goto label_0;
                                                                 | label_686:
    0x00054086 movs r4, 1                                        |         r4 = 1;
    0x00054088 b.w 0x525b4                                       |         goto label_286;
                                                                 | label_653:
    0x0005408c mov r0, sl                                        |         r0 = sl;
    0x0005408e bl 0xfe84                                         |         fcn_0000fe84 (r0);
    0x00054092 b.w 0x520c4                                       |         goto label_287;
                                                                 | label_764:
    0x00054096 movs r6, 7                                        |         r6 = 7;
    0x00054098 mov r4, r6                                        |         r4 = r6;
    0x0005409a b.w 0x53314                                       |         goto label_288;
                                                                 | label_755:
    0x0005409e cmp r3, 0                                         |         
    0x000540a0 beq 0x54054                                       |         
                                                                 |     } while (r3 == 0);
    0x000540a2 ldr r2, [pc, 0xc0]                                |     
    0x000540a4 mov r1, fp                                        |     r1 = fp;
    0x000540a6 add r2, pc                                        |     r2 = 0xa8210;
    0x000540a8 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x000540ac b 0x538b8                                         |     goto label_285;
                                                                 | label_771:
    0x000540ae mov r0, r8                                        |     r0 = r8;
    0x000540b0 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x000540b4 b 0x5403c                                         |     goto label_289;
                                                                 | label_305:
    0x000540b6 orrs.w r4, r2, r3                                 |     r4 = r2 | r3;
                                                                 |     if (r4 == r2) {
    0x000540ba beq.w 0x51c08                                     |         goto label_290;
                                                                 |     }
    0x000540be cmp.w r3, -1                                      |     
    0x000540c2 it eq                                             |     
                                                                 |     if (r3 == -1) {
    0x000540c4 cmpeq r2, -1                                      |         __asm ("cmpeq r2, -1");
                                                                 |     }
                                                                 |     if (r3 != -1) {
    0x000540c8 beq 0x54124                                       |         
    0x000540ca bl 0x5e500                                        |         fcn_0005e500 (r0, r1, r2, r3);
    0x000540ce mov r0, r2                                        |         r0 = r2;
    0x000540d0 mov r1, r3                                        |         r1 = r3;
    0x000540d2 b.w 0x5171c                                       |         goto label_84;
                                                                 | label_455:
    0x000540d6 ldr.w r2, [fp, 0x128]                             |         r2 = *(arg_128h);
    0x000540da movs r3, 0                                        |         r3 = 0;
    0x000540dc ldr.w r1, [fp, 0x140]                             |         r1 = *(arg_140h);
    0x000540e0 adds r0, r2, 1                                    |         r0 = r2 + 1;
    0x000540e2 str.w r0, [fp, 0x128]                             |         __asm ("str.w r0, [arg_128h]");
    0x000540e6 str.w r3, [r1, r2, lsl 2]                         |         __asm ("str.w r3, [r1, r2, lsl 2]");
    0x000540ea ldr r3, [r3, 0xc]                                 |         r3 = *((r3 + 0xc));
    0x000540ec udf 0xff                                          |         __asm ("udf 0xff");
                                                                 | label_296:
    0x000540ee ldr r3, [sp, 0x1c]                                |         r3 = *(arg_1ch);
    0x000540f0 adds r3, 1                                        |         r3++;
    0x000540f2 str r3, [sp, 0x1c]                                |         *(arg_1ch) = r3;
    0x000540f4 b.w 0x4d26a                                       |         goto label_2;
                                                                 | label_633:
    0x000540f8 cmp.w r1, -1                                      |         
    0x000540fc it eq                                             |         
                                                                 |         if (r1 == -1) {
    0x000540fe cmpeq r0, -1                                      |             __asm ("cmpeq r0, -1");
                                                                 |         }
                                                                 |         if (r1 == -1) {
    0x00054102 beq 0x5412c                                       |             goto label_772;
                                                                 |         }
    0x00054104 vmov r0, r1, d13                                  |         __asm ("vmov r0, r1, d13");
    0x00054108 bl 0x5e5dc                                        |         fcn_0005e5dc (r0, r1);
    0x0005410c mov r2, r6                                        |         r2 = r6;
    0x0005410e mov r3, r5                                        |         r3 = r5;
    0x00054110 bl 0x5e500                                        |         fcn_0005e500 (r0, r1, r2, r3);
    0x00054114 mov r0, r2                                        |         r0 = r2;
    0x00054116 mov r1, r3                                        |         r1 = r3;
    0x00054118 bl 0x5e4a4                                        |         r0 = fcn_0005e4a4 (r0, r1, r2);
    0x0005411c vmov d12, r0, r1                                  |         __asm ("vmov d12, r0, r1");
    0x00054120 b.w 0x5176c                                       |         goto label_85;
                                                                 |     }
    0x00054124 movs r0, 0                                        |     r0 = 0;
    0x00054126 mov r1, r0                                        |     r1 = r0;
    0x00054128 b.w 0x5171c                                       |     goto label_84;
                                                                 | label_772:
    0x0005412c vmov.f64 d12, d8                                  |     __asm ("vmov.f64 d12, d8");
    0x00054130 b.w 0x5176c                                       |     goto label_85;
    0x0005e762 movs r0, r0                                       |     
    0x0005e764 movs r3, r1                                       |     r3 = r1;
    0x0005e766 movs r0, r0                                       |     
    0x0005e768 movs r6, r7                                       |     r6 = r7;
    0x0005e76a movs r0, r0                                       |     
    0x0005e76c movs r0, r2                                       |     r0 = r2;
    0x0005e76e movs r0, r0                                       |     
    0x0005e770 movs r6, r7                                       |     r6 = r7;
    0x0005e772 movs r0, r0                                       |     
    0x0005e774 movs r5, r4                                       |     r5 = r4;
    0x0005e776 movs r0, r0                                       |     
    0x0005e778 movs r6, r7                                       |     r6 = r7;
    0x0005e77a movs r0, r0                                       |     
    0x0005e77c movs r3, r6                                       |     r3 = r6;
    0x0005e77e movs r0, r0                                       |     
    0x0005e780 movs r6, r7                                       |     r6 = r7;
    0x0005e782 movs r0, r0                                       |     
    0x0005e784 movs r3, r0                                       |     r3 = r0;
    0x0005e786 movs r0, r0                                       |     
    0x0005e788 movs r6, r7                                       |     r6 = r7;
    0x0005e78a movs r0, r0                                       |     
    0x0005e78c movs r6, r0                                       |     r6 = r0;
    0x0005e78e movs r0, r0                                       |     
    0x0005e790 movs r6, r7                                       |     r6 = r7;
    0x0005e792 movs r0, r0                                       |     
    0x0005e794 movs r4, r2                                       |     r4 = r2;
    0x0005e796 movs r0, r0                                       |     
    0x0005e798 movs r6, r7                                       |     r6 = r7;
    0x0005e79a movs r0, r0                                       |     
    0x0005e79c movs r6, r1                                       |     r6 = r1;
    0x0005e79e movs r0, r0                                       |     
    0x0005e7a0 movs r6, r7                                       |     r6 = r7;
    0x0005e7a2 movs r0, r0                                       |     
    0x0005e7a4 movs r5, r1                                       |     r5 = r1;
    0x0005e7a6 movs r0, r0                                       |     
    0x0005e7a8 movs r6, r7                                       |     r6 = r7;
    0x0005e7aa movs r0, r0                                       |     
    0x0005e7ac movs r4, r4                                       |     
    0x0005e7ae movs r0, r0                                       |     
    0x0005e7b0 movs r6, r7                                       |     r6 = r7;
    0x0005e7b2 movs r0, r0                                       |     
    0x0005e7b4 movs r2, r2                                       |     
    0x0005e7b6 movs r0, r0                                       |     
    0x0005e7b8 movs r6, r7                                       |     r6 = r7;
    0x0005e7ba movs r0, r0                                       |     
    0x0005e7bc movs r7, r4                                       |     r7 = r4;
    0x0005e7be movs r0, r0                                       |     
    0x0005e7c0 movs r6, r7                                       |     r6 = r7;
    0x0005e7c2 movs r0, r0                                       |     
    0x0005e7c4 movs r2, r0                                       |     r2 = r0;
    0x0005e7c6 movs r0, r0                                       |     
    0x0005e7c8 movs r6, r7                                       |     r6 = r7;
    0x0005e7ca movs r0, r0                                       |     
    0x0005e7cc movs r0, r3                                       |     r0 = r3;
    0x0005e7ce movs r0, r0                                       |     
    0x0005e7d0 movs r6, r7                                       |     r6 = r7;
    0x0005e7d2 movs r0, r0                                       |     
    0x0005e7d4 movs r1, r1                                       |     
    0x0005e7d6 movs r0, r0                                       |     
    0x0005e7d8 movs r6, r7                                       |     r6 = r7;
    0x0005e7da movs r0, r0                                       |     
    0x0005e7dc movs r2, r1                                       |     r2 = r1;
    0x0005e7de movs r0, r0                                       |     
    0x0005e7e0 movs r6, r7                                       |     r6 = r7;
    0x0005e7e2 movs r0, r0                                       |     
    0x0005e7e4 movs r0, r0                                       |     
    0x0005e7e6 movs r0, r0                                       |     
    0x0005e7e8 movs r0, r0                                       |     
    0x0005e7ea movs r0, r0                                       |     
    0x0005e7ec strb r7, [r5, 1]                                  |     *((r5 + 1)) = r7;
    0x0005e7ee ldr r5, [r4, 0x64]                                |     r5 = *((r4 + 0x64));
    0x0005e7f0 strb r3, [r6, 0xd]                                |     *((r6 + 0xd)) = r3;
    0x0005e7f2 lsls r4, r5, 1                                    |     r4 = r5 << 1;
    0x0005e7f4 adds r2, 0x39                                     |     r2 += 0x39;
    0x0005e7f6 adds r3, 0x32                                     |     r3 += 0x32;
    0x0005e7f8 adds r7, 0x33                                     |     r7 += 0x33;
    0x0005e7fa adds r0, 0x32                                     |     r0 += 0x32;
    0x0005e7fc adds r6, 0x33                                     |     r6 += 0x33;
    0x0005e7fe adds r5, 0x38                                     |     r5 += 0x38;
    0x0005e800 adds r7, 0x34                                     |     r7 += 0x34;
    0x0005e802 adds r5, 0x37                                     |     r5 += 0x37;
    0x0005e804 movs r1, r0                                       |     r1 = r0;
    0x0005e806 movs r0, r0                                       |     
    0x0005e808 ldr r5, [r0, 0x44]                                |     r5 = *((r0 + 0x44));
    0x0005e80a strb r1, [r4, 1]                                  |     *((r4 + 1)) = r1;
    0x0005e80c invalid                                           |     
    0x0005e810 ldr r4, [r6, 0x14]                                |     r4 = *((r6 + 0x14));
    0x0005e812 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x0005e814 movs r5, 0x3a                                     |     r5 = 0x3a;
    0x0005e816 adds r3, 0x2e                                     |     r3 += 0x2e;
    0x0005e818 movs r0, 0x66                                     |     r0 = 0x66;
    0x0005e81a strb r5, [r5, 0xd]                                |     *((r5 + 0xd)) = r5;
    0x0005e81c movs r0, r0                                       |     
    0x0005e81e movs r0, r0                                       |     
    0x0005e820 lsrs r3, r6, 9                                    |     r3 = r6 >> 9;
    0x0005e822 movs r0, r0                                       |     
    0x0005e824 ldr r6, [pc, 0x124]                               |     r6 = *(0x5e94c);
    0x0005e826 cmp r4, sl                                        |     
    0x0005e828 cmp r7, r8                                        |     
    0x0005e82a lsls r2, r2, 1                                    |     r2 <<= 1;
    0x0005e82c str r1, [r4, 0x54]                                |     *((r4 + 0x54)) = r1;
    0x0005e82e cmp r5, 0x73                                      |     
    0x0005e830 adds r5, 0x32                                     |     r5 += 0x32;
    0x0005e832 cmp r5, 0x36                                      |     
    0x0005e834 str r3, [r4, 0x24]                                |     *((r4 + 0x24)) = r3;
    0x0005e836 lsls r3, r4, 1                                    |     r3 = r4 << 1;
    0x0005e838 movs r0, r0                                       |     
    0x0005e83a movs r0, r0                                       |     
    0x0005e83c add r1, sb                                        |     r1 += sb;
    0x0005e83e lsls r7, r3, 1                                    |     r7 = r3 << 1;
    0x0005e840 ldr r7, [pc, 0x148]                               |     r7 = *(0x5e98c);
    0x0005e842 ldr r1, [pc, 0x15c]                               |     r1 = *(0x5e9a2);
    0x0005e844 lsls r4, r0, 1                                    |     r4 = r0 << 1;
    0x0005e846 movs r0, r0                                       |     
    0x0005e848 ldr r1, [pc, 0x13c]                               |     r1 = *(0x5e988);
    0x0005e84a lsls r4, r0, 1                                    |     r4 = r0 << 1;
    0x0005e84c ldr r6, [pc, 0x114]                               |     r6 = *(0x5e964);
    0x0005e84e rsbs r1, r0, 0                                    |     r1 = r0 - ;
    0x0005e850 cmp r4, sb                                        |     
    0x0005e852 muls r7, r3, r7                                   |     r7 = r3 * r7;
    0x0005e854 ldr r4, [pc, 0x13c]                               |     r4 = *(0x5e994);
    0x0005e856 ldr r5, [pc, 0x154]                               |     r5 = *(0x5e9ae);
    0x0005e858 ldrsh r6, [r1, r5]                                |     r6 = *((r1 + r5));
    0x0005e85a cmp r5, sb                                        |     
    0x0005e85c adcs r4, r2                                       |     __asm ("adcs r4, r2");
    0x0005e85e adcs r4, r0                                       |     __asm ("adcs r4, r0");
    0x0005e860 adcs r4, r2                                       |     __asm ("adcs r4, r2");
    0x0005e862 movs r0, r0                                       |     
    0x0005e864 str r3, [r2, r5]                                  |     *((r2 + r5)) = r3;
    0x0005e866 ldr r1, [pc, 0x130]                               |     r1 = *(0x5e99a);
    0x0005e868 cmp r4, sl                                        |     
    0x0005e86a lsls r7, r3, 1                                    |     r7 = r3 << 1;
    0x0005e86c str r1, [r4, 0x24]                                |     *((r4 + 0x24)) = r1;
    0x0005e86e strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x0005e870 movs r0, 0x74                                     |     r0 = 0x74;
    0x0005e872 strb r4, [r4, 0x15]                               |     *((r4 + 0x15)) = r4;
    0x0005e874 movs r0, 0x65                                     |     r0 = 0x65;
    0x0005e876 ldr r4, [r6, 0x74]                                |     r4 = "sqlite_master";
    0x0005e878 strh r0, [r4, r0]                                 |     *((r4 + r0)) = r0;
    0x0005e87a ldr r4, [pc, 0x13c]                               |     r4 = *(0x5e9ba);
    0x0005e87c rsbs r4, r1, 0                                    |     r4 = r1 - ;
    0x0005e87e muls r1, r0, r1                                   |     r1 = r0 * r1;
    0x0005e880 lsls r3, r1, 1                                    |     r3 = r1 << 1;
    0x0005e882 movs r0, r0                                       |     
    0x0005e884 ldr r5, [r6, 0x64]                                |     r5 = *(0x5e9c8);
    0x0005e886 ldr r3, [r5, 0x64]                                |     r3 = *(0x5ea2c);
    0x0005e888 strb r7, [r5, 0x1d]                               |     *((r5 + 0x1d)) = r7;
    0x0005e88a movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0005e88c strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x0005e88e ldr r2, [r6, 0x74]                                |     r2 = "sqlite_master";
    0x0005e890 lsls r2, r6, 1                                    |     r2 = r6 << 1;
    0x0005e892 movs r0, r0                                       |     
    0x0005e894 strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x0005e896 ldr r2, [r6, 0x14]                                |     r2 = "local time unavailable";
    0x0005e898 str r6, [r5, 0x74]                                |     *((r5 + 0x74)) = r6;
    0x0005e89a ldr r0, [r4, 0x70]                                |     r0 = *(0x5ea2a);
    0x0005e89c movs r0, 0x72                                     |     r0 = 0x72;
    0x0005e89e ldr r2, [r4, 0x44]                                |     r2 = *(0x5e9fe);
    0x0005e8a0 str r7, [r5, 0x24]                                |     *((r5 + 0x24)) = r7;
    0x0005e8a2 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x0005e8a4 ldr r7, [r5, 0x74]                                |     r7 = *(0x5ea3c);
    0x0005e8a6 str r0, [r4, 0x20]                                |     *((r4 + 0x20)) = r0;
    0x0005e8a8 str r1, [r5, 0x74]                                |     *((r5 + 0x74)) = r1;
    0x0005e8aa movs r0, r0                                       |     
    0x0005e8ac ldr r5, [r6, 0x64]                                |     r5 = *(0x5e9c8);
    0x0005e8ae strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x0005e8b0 str r4, [r4, 0x54]                                |     *((r4 + 0x54)) = r4;
    0x0005e8b2 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005e8b4 cmp r2, 0x64                                      |     
    0x0005e8b6 movs r0, r0                                       |     
    0x0005e8b8 ldrb r3, [r6, 9]                                  |     r3 = *((r6 + 9));
    0x0005e8ba movs r0, r0                                       |     
    0x0005e8bc lsls r2, r5, 1                                    |     r2 = r5 << 1;
    0x0005e8be ldrb r1, [r7, r4]                                 |     r1 = *((r7 + r4));
    0x0005e8c0 movs r2, r5                                       |     r2 = r5;
    0x0005e8c2 movs r0, r0                                       |     
    0x0005e8c4 strb r3, [r4, 9]                                  |     *((r4 + 9)) = r3;
    0x0005e8c6 str r5, [r4, 0x14]                                |     *((r4 + 0x14)) = r5;
    0x0005e8c8 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x0005e8ca movs r0, r0                                       |     
    0x0005e8cc strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x0005e8ce str r1, [r5, 0x74]                                |     *((r5 + 0x74)) = r1;
    0x0005e8d0 str r7, [r4, 0x54]                                |     *((r4 + 0x54)) = r7;
    0x0005e8d2 lsls r2, r6, 1                                    |     r2 = r6 << 1;
    0x0005e8d4 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x0005e8d6 strb r5, [r5, 1]                                  |     *((r5 + 1)) = r5;
    0x0005e8d8 movs r0, r0                                       |     
    0x0005e8da movs r0, r0                                       |     
    0x0005e8dc str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x0005e8de strb r5, [r5, 1]                                  |     *((r5 + 1)) = r5;
    0x0005e8e0 strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x0005e8e2 strb r1, [r4, 9]                                  |     *((r4 + 9)) = r1;
    0x0005e8e4 lsls r1, r7, 1                                    |     r1 = r7 << 1;
    0x0005e8e6 movs r0, r0                                       |     
    0x0005e8e8 ldr r5, [r4, 0x64]                                |     r5 = *(0x5ea1e);
    0x0005e8ea lsls r4, r4, 1                                    |     r4 <<= 1;
    0x0005e8ec ldrb r5, [r4, 1]                                  |     r5 = *((r4 + 1));
    0x0005e8ee ldr r0, [r6, 0x44]                                |     r0 = *(0x5e9a8);
    0x0005e8f0 ldr r1, [r4, 0x14]                                |     r1 = *(0x5e9ce);
    0x0005e8f2 lsls r6, r5, 1                                    |     r6 = r5 << 1;
    0x0005e8f4 adds r0, 0x32                                     |     r0 += 0x32;
    0x0005e8f6 adds r4, 0x31                                     |     r4 += 0x31;
    0x0005e8f8 adds r0, 0x2d                                     |     r0 += 0x2d;
    0x0005e8fa cmp r5, 0x38                                      |     
    0x0005e8fc adds r5, 0x31                                     |     r5 += 0x31;
    0x0005e8fe adds r1, 0x20                                     |     r1 += 0x20;
    0x0005e900 subs r2, 0x31                                     |     r2 -= 0x31;
    0x0005e902 adds r6, 0x34                                     |     r6 += 0x34;
    0x0005e904 adds r3, 0x3a                                     |     r3 += 0x3a;
    0x0005e906 movs r0, 0x33                                     |     r0 = 0x33;
    0x0005e908 adds r4, 0x39                                     |     r4 += 0x39;
                                                                 |     do {
    0x0005e90a adds r1, 0x39                                     |         r1 += 0x39;
    0x0005e90c str r2, [r4, 0x14]                                |         *((r4 + 0x14)) = r2;
    0x0005e90e str r7, [r6, 0x40]                                |         *((r6 + 0x40)) = r7;
    0x0005e910 adds r3, 0x37                                     |         r3 += 0x37;
    0x0005e912 adds r5, 0x38                                     |         r5 += 0x38;
    0x0005e914 subs r0, 0x32                                     |         r0 -= 0x32;
    0x0005e916 adds r1, 0x66                                     |         r1 += 0x66;
    0x0005e918 subs r0, 0x36                                     |         r0 -= 0x36;
    0x0005e91a adds r5, 0x36                                     |         r5 += 0x36;
    0x0005e91c str r7, [r6, 0x10]                                |         *((r6 + 0x10)) = r7;
    0x0005e91e str r4, [r4, 0x24]                                |         *((r4 + 0x24)) = r4;
    0x0005e920 adds r3, 0x34                                     |         r3 += 0x34;
    0x0005e922 adds r1, 0x61                                     |         r1 += 0x61;
    0x0005e924 subs r0, 0x39                                     |         r0 -= 0x39;
    0x0005e926 adds r3, 0x32                                     |         r3 += 0x32;
    0x0005e928 str r0, [r7, 0x10]                                |         *((r7 + 0x10)) = r0;
    0x0005e92a str r2, [r4, 0x44]                                |         *((r4 + 0x44)) = r2;
    0x0005e92c adds r1, 0x65                                     |         r1 += 0x65;
    0x0005e92e str r1, [r7, 0x50]                                |         *((r7 + 0x50)) = r1;
    0x0005e930 movs r0, r0                                       |         
    0x0005e932 movs r0, r0                                       |         
    0x0005e934 ldr r5, [r5, 0x14]                                |         r5 = *((r5 + 0x14));
    0x0005e936 strb r3, [r6, 0x15]                               |         *((r6 + 0x15)) = r3;
    0x0005e938 str r3, [r6, 0x54]                                |         *((r6 + 0x54)) = r3;
    0x0005e93a str r0, [r4, 0x10]                                |         *((r4 + 0x10)) = r0;
    0x0005e93c movs r0, 0x74                                     |         r0 = 0x74;
    0x0005e93e ldr r4, [r5, 0x14]                                |         r4 = *((r5 + 0x14));
    0x0005e940 str r6, [r5, 0x54]                                |         *((r5 + 0x54)) = r6;
    0x0005e942 movs r5, 0x20                                     |         r5 = 0x20;
    0x0005e944 movs r0, 0x64                                     |         r0 = 0x64;
    0x0005e946 str r7, [r5, 0x64]                                |         *((r5 + 0x64)) = r7;
    0x0005e948 ldrh r0, [r4, r4]                                 |         r0 = *((r4 + r4));
    0x0005e94a cmp r6, 0x25                                      |         
    0x0005e94c adds r0, 0x31                                     |         r0 += 0x31;
    0x0005e94e ldrb r3, [r6, r5]                                 |         r3 = *((r6 + r5));
    0x0005e950 movs r0, r0                                       |         
    0x0005e952 movs r0, r0                                       |         
    0x0005e954 bpl 0x5e90a                                       |         
                                                                 |     } while (r0 >= r0);
    0x0005e956 vst4.8 {d10, d12, d14, d16}, [r5:0x80], r0        |     __asm ("vst4.8 {d10, d12, d14, d16}, [r5:0x80], r0");
    0x0005e95a bvc 0x5ea24                                       |     __asm ("bvc aav.0x000000ff");
    0x0005ea24 str r4, [r5, 0x54]                                |     *((r5 + 0x54)) = r4;
    0x0005ea26 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x0005ea28 ldr r7, [r5, 0x64]                                |     r7 = *((r5 + 0x64));
    0x0005ea2a strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x0005ea2c strb r2, [r6, 0x15]                               |     *((r6 + 0x15)) = r2;
    0x0005ea2e strb r3, [r4, 0x11]                               |     *((r4 + 0x11)) = r3;
    0x0005ea30 strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x0005ea32 str r0, [r4, 0x60]                                |     *((r4 + 0x60)) = r0;
    0x0005ea34 ldr r1, [r4, 0x14]                                |     r1 = *((r4 + 0x14));
    0x0005ea36 str r4, [r5, 0x54]                                |     *((r5 + 0x54)) = r4;
    0x0005ea38 subs r2, 0x64                                     |     r2 -= 0x64;
    0x0005ea3a movs r5, 0x20                                     |     r5 = 0x20;
    0x0005ea3c lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0005ea3e movs r0, r0                                       |     
    0x0005ea40 strb r6, [r6, 0x11]                               |     *((r6 + 0x11)) = r6;
    0x0005ea42 str r1, [r4, 0x24]                                |     *((r4 + 0x24)) = r1;
    0x0005ea44 str r4, [r5, 0x54]                                |     *((r5 + 0x54)) = r4;
    0x0005ea46 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x0005ea48 ldr r7, [r5, 0x64]                                |     r7 = *((r5 + 0x64));
    0x0005ea4a strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x0005ea4c strb r2, [r6, 0x15]                               |     *((r6 + 0x15)) = r2;
    0x0005ea4e strb r3, [r4, 0x11]                               |     *((r4 + 0x11)) = r3;
    0x0005ea50 strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x0005ea52 str r0, [r4, 0x40]                                |     *((r4 + 0x40)) = r0;
    0x0005ea54 str r1, [r5, 0x44]                                |     *((r5 + 0x44)) = r1;
    0x0005ea56 ldr r0, [r4, 0x60]                                |     r0 = *((r4 + 0x60));
    0x0005ea58 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x0005ea5a str r0, [r4, 0x40]                                |     *((r4 + 0x40)) = r0;
    0x0005ea5c str r5, [r4, 0x34]                                |     *((r4 + 0x34)) = r5;
    0x0005ea5e str r4, [r5, 0x14]                                |     *((r5 + 0x14)) = r4;
    0x0005ea60 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005ea62 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x0005ea64 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0005ea66 ldr r5, [r4, 0x54]                                |     r5 = *((r4 + 0x54));
    0x0005ea68 subs r2, 0x61                                     |     r2 -= 0x61;
    0x0005ea6a movs r5, 0x20                                     |     r5 = 0x20;
    0x0005ea6c lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0005ea6e movs r0, r0                                       |     
    0x0005ea70 movs r0, r0                                       |     
    0x0005ea72 movs r0, r0                                       |     
    0x0005ea74 ldr r5, [r4, 0x64]                                |     r5 = *((r4 + 0x64));
    0x0005ea76 movs r0, r0                                       |     
    0x0005ea78 ldr r0, [r4]                                      |     r0 = *(r4);
    0x0005ea7a str r1, [r5, 0x44]                                |     *((r5 + 0x44)) = r1;
    0x0005ea7c str r4, [r4, 0x54]                                |     *((r4 + 0x54)) = r4;
    0x0005ea7e lsls r6, r5, 1                                    |     r6 = r5 << 1;
    0x0005ea80 strh r5, [r2, r5]                                 |     *((r2 + r5)) = r5;
    0x0005ea82 ldr r6, [pc, 0x124]                               |     r6 = *(0x5ebaa);
    0x0005ea84 movs r0, 0x47                                     |     r0 = 0x47;
    0x0005ea86 cmp r4, sl                                        |     
    0x0005ea88 str r5, [r1, r1]                                  |     *((r1 + r1)) = r5;
    0x0005ea8a tst r0, r4                                        |     
    0x0005ea8c strb r5, [r5, r0]                                 |     *((r5 + r0)) = r5;
    0x0005ea8e cmp r2, sl                                        |     
    0x0005ea90 movs r0, 0x45                                     |     r0 = 0x45;
    0x0005ea92 movs r0, r0                                       |     
    0x0005ea94 ldr r6, [pc, 0x154]                               |     r6 = *(0x5ebec);
    0x0005ea96 ldr r7, [pc, 0x124]                               |     r7 = *(0x5ebbe);
    0x0005ea98 movs r0, 0x4e                                     |     r0 = 0x4e;
    0x0005ea9a ldr r4, [pc, 0x104]                               |     r4 = *(0x5eba2);
    0x0005ea9c lsls r4, r1, 1                                    |     r4 = r1 << 1;
    0x0005ea9e movs r0, r0                                       |     
    0x0005eaa0 ldr r6, [pc, 0x124]                               |     r6 = *(0x5ebc8);
    0x0005eaa2 cmp r4, sl                                        |     
    0x0005eaa4 strh r2, [r2, r5]                                 |     *((r2 + r5)) = r2;
    0x0005eaa6 muls r5, r0, r5                                   |     r5 = r0 * r5;
    0x0005eaa8 lsls r4, r2, 1                                    |     r4 = r2 << 1;
    0x0005eaaa movs r0, r0                                       |     
    0x0005eaac ldr r5, [r0, r1]                                  |     r5 = *((r0 + r1));
    0x0005eaae cmp r3, r8                                        |     
    0x0005eab0 strb r0, [r2, r1]                                 |     *((r2 + r1)) = r0;
    0x0005eab2 movs r0, r0                                       |     
    0x0005eab4 ldr r6, [pc, 0x154]                               |     r6 = "access to %s.%s is prohibited";
    0x0005eab6 ldr r7, [pc, 0x124]                               |     r7 = *(0x5ebde);
    0x0005eab8 lsls r6, r1, 1                                    |     r6 = r1 << 1;
    0x0005eaba movs r0, r0                                       |     
    0x0005eabc ldr r7, [pc, 0x10c]                               |     r7 = *(0x5ebcc);
    0x0005eabe str r5, [r1, r1]                                  |     *((r1 + r1)) = r5;
    0x0005eac0 strb r7, [r1, r5]                                 |     *((r1 + r5)) = r7;
    0x0005eac2 add r6, sb                                        |     r6 += sb;
    0x0005eac4 strh r0, [r4, r4]                                 |     *((r4 + r4)) = r0;
    0x0005eac6 rsbs r5, r2, 0                                    |     r5 = r2 - ;
    0x0005eac8 strb r1, [r2, r5]                                 |     *((r2 + r5)) = r1;
    0x0005eaca strh r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x0005eacc cmp r1, sb                                        |     
    0x0005eace movs r0, 0x53                                     |     r0 = 0x53;
    0x0005ead0 str r5, [r4, 0x40]                                |     *((r4 + 0x40)) = r5;
    0x0005ead2 asrs r0, r4                                       |     r0 >>= r4;
    0x0005ead4 add r6, sb                                        |     r6 += sb;
    0x0005ead6 movs r5, 0x20                                     |     r5 = 0x20;
    0x0005ead8 movs r0, 0x64                                     |     r0 = 0x64;
    0x0005eada strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005eadc movs r5, 0x28                                     |     r5 = 0x28;
    0x0005eade cmp r1, 0x73                                      |     
    0x0005eae0 movs r0, r0                                       |     
    0x0005eae2 movs r0, r0                                       |     
    0x0005eae4 strh r5, [r2, r5]                                 |     *((r2 + r5)) = r5;
    0x0005eae6 movs r0, 0x45                                     |     r0 = 0x45;
    0x0005eae8 cmp r4, sl                                        |     
    0x0005eaea str r5, [r1, r1]                                  |     *((r1 + r1)) = r5;
    0x0005eaec tst r0, r4                                        |     
    0x0005eaee strb r5, [r5, r0]                                 |     *((r5 + r0)) = r5;
    0x0005eaf0 cmp r2, sl                                        |     
    0x0005eaf2 movs r0, 0x45                                     |     r0 = 0x45;
    0x0005eaf4 ldr r7, [pc, 0x118]                               |     r7 = *(0x5ec10);
    0x0005eaf6 movs r0, 0x52                                     |     r0 = 0x52;
    0x0005eaf8 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005eafa movs r0, r0                                       |     
    0x0005eafc ldr r3, [r4, 0x74]                                |     r3 = *(0x5ec16);
    0x0005eafe strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x0005eb00 ldr r5, [r5, 0x64]                                |     r5 = *((r5 + 0x64));
    0x0005eb02 str r5, [r4, 0x40]                                |     *((r4 + 0x40)) = r5;
    0x0005eb04 movs r0, r0                                       |     
    0x0005eb06 movs r0, r0                                       |     
    0x0005eb08 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005eb0a strb r6, [r5, 8]                                  |     *((r5 + 8)) = r6;
    0x0005eb0c strb r7, [r5, 0x1d]                               |     *((r5 + 0x1d)) = r7;
    0x0005eb0e str r1, [r5, 0x44]                                |     *((r5 + 0x44)) = r1;
    0x0005eb10 movs r0, r0                                       |     
    0x0005eb12 movs r0, r0                                       |     
    0x0005eb14 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005eb16 ldr r7, [pc, 0x80]                                |     r7 = *(0x5eb9a);
    0x0005eb18 movs r0, 0x52                                     |     r0 = 0x52;
    0x0005eb1a str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x0005eb1c str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x0005eb1e movs r5, 0x3d                                     |     r5 = 0x3d;
    0x0005eb20 lsls r1, r2, 1                                    |     r1 = r2 << 1;
    0x0005eb22 movs r0, r0                                       |     
    0x0005eb24 ldrb r4, [r6, 5]                                  |     r4 = *((r6 + 5));
    0x0005eb26 str r0, [r6, 0x54]                                |     *((r6 + 0x54)) = r0;
    0x0005eb28 movs r7, 0x3d                                     |     r7 = 0x3d;
    0x0005eb2a strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x0005eb2c str r1, [r5, 0x74]                                |     *((r5 + 0x74)) = r1;
    0x0005eb2e str r7, [r4, 0x54]                                |     *((r4 + 0x54)) = r7;
    0x0005eb30 movs r7, 0x72                                     |     r7 = 0x72;
    0x0005eb32 asrs r0, r4                                       |     r0 >>= r4;
    0x0005eb34 add r6, sb                                        |     r6 += sb;
    0x0005eb36 cmp r0, 0x20                                      |     
    0x0005eb38 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005eb3a movs r1, r5                                       |     r1 = r5;
    0x0005eb3c str r4, [r6, 0x24]                                |     *((r6 + 0x24)) = r4;
    0x0005eb3e ldrsh r4, [r5, r5]                                |     r4 = *((r5 + r5));
    0x0005eb40 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x0005eb42 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x0005eb44 movs r5, 0x3d                                     |     r5 = 0x3d;
    0x0005eb46 lsls r1, r2, 1                                    |     r1 = r2 << 1;
    0x0005eb48 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005eb4a movs r5, 0x3a                                     |     r5 = 0x3a;
    0x0005eb4c lsls r4, r4, 1                                    |     r4 <<= 1;
    0x0005eb4e movs r0, r0                                       |     
    0x0005eb50 ldr r6, [r5, 0x74]                                |     r6 = *((r5 + 0x74));
    0x0005eb52 movs r0, 0x74                                     |     r0 = 0x74;
    0x0005eb54 strb r1, [r4, 0x15]                               |     *((r4 + 0x15)) = r1;
    0x0005eb56 ldr r4, [r6, 4]                                   |     r4 = *(0x5ec10);
    0x0005eb58 strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x0005eb5a ldrb r1, [r5, 9]                                  |     r1 = *((r5 + 9));
    0x0005eb5c str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x0005eb5e movs r0, r0                                       |     
    0x0005eb60 strb r1, [r4, 0x15]                               |     *((r4 + 0x15)) = r1;
    0x0005eb62 ldr r4, [r6, 4]                                   |     r4 = *(0x5ec10);
    0x0005eb64 strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x0005eb66 ldrb r1, [r5, 9]                                  |     r1 = *((r5 + 9));
    0x0005eb68 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x0005eb6a ldr r0, [r4, 0x50]                                |     r0 = *(0x5ec60);
    0x0005eb6c ldr r1, [r4, 0x44]                                |     r1 = *(0x5ec54);
    0x0005eb6e strb r6, [r4, 0x15]                               |     *((r4 + 0x15)) = r6;
    0x0005eb70 str r6, [r5, 0x34]                                |     *((r5 + 0x34)) = r6;
    0x0005eb72 ldr r4, [r6, 0x14]                                |     r4 = *(0x5ec20);
    0x0005eb74 ldr r7, [r5, 0x64]                                |     r7 = *((r5 + 0x64));
    0x0005eb76 movs r0, r0                                       |     
    0x0005eb78 ldr r3, [r4, 0x74]                                |     r3 = *(0x5ec94);
    0x0005eb7a strb r2, [r6, 9]                                  |     *((r6 + 9)) = r2;
    0x0005eb7c strb r5, [r6, 1]                                  |     *((r6 + 1)) = r5;
    0x0005eb7e movs r0, 0x74                                     |     r0 = 0x74;
    0x0005eb80 str r4, [r4, 0x14]                                |     *((r4 + 0x14)) = r4;
    0x0005eb82 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x0005eb84 str r2, [r4, 0x14]                                |     *((r4 + 0x14)) = r2;
    0x0005eb86 str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x0005eb88 movs r0, r0                                       |     
    0x0005eb8a movs r0, r0                                       |     
    0x0005eb8c ldr r5, [r6, 0x64]                                |     
    0x0005eb8e ldr r3, [r5, 0x64]                                |     r3 = *(0x5ecd4);
    0x0005eb90 strb r7, [r5, 0x1d]                               |     *((r5 + 0x1d)) = r7;
    0x0005eb92 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0005eb94 str r4, [r4, 0x14]                                |     *((r4 + 0x14)) = r4;
    0x0005eb96 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x0005eb98 str r2, [r4, 0x14]                                |     *((r4 + 0x14)) = r2;
    0x0005eb9a str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x0005eb9c movs r5, 0x20                                     |     r5 = 0x20;
    0x0005eb9e lsls r4, r2, 1                                    |     r4 = r2 << 1;
    0x0005eba0 strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x0005eba2 ldr r4, [r5, 0x14]                                |     r4 = *(0x5ec84);
    0x0005eba4 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x0005eba6 lsls r7, r3, 1                                    |     r7 = r3 << 1;
    0x0005eba8 str r7, [r5, 0x24]                                |     *((r5 + 0x24)) = r7;
    0x0005ebaa str r2, [r5, 0x54]                                |     *((r5 + 0x54)) = r2;
    0x0005ebac strb r3, [r4, 0x11]                               |     *((r4 + 0x11)) = r3;
    0x0005ebae ldr r0, [r4, 0x60]                                |     r0 = *(0x5ece4);
    0x0005ebb0 ldr r1, [r4, 0x54]                                |     r1 = *(0x5ecd8);
    0x0005ebb2 movs r0, 0x65                                     |     r0 = 0x65;
    0x0005ebb4 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005ebb6 str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x0005ebb8 strb r2, [r6, 0x19]                               |     *((r6 + 0x19)) = r2;
    0x0005ebba str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x0005ebbc str r0, [r4, 0x60]                                |     *((r4 + 0x60)) = r0;
    0x0005ebbe strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x0005ebc0 ldr r0, [r4, 0x10]                                |     r0 = *(0x5ec94);
    0x0005ebc2 strb r6, [r5, 0x11]                               |     *((r5 + 0x11)) = r6;
    0x0005ebc4 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x0005ebc6 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x0005ebc8 movs r0, 0x6c                                     |     r0 = 0x6c;
    0x0005ebca strb r5, [r6, 0xd]                                |     *((r6 + 0xd)) = r5;
    0x0005ebcc subs r2, 0x65                                     |     r2 -= 0x65;
    0x0005ebce movs r5, 0x20                                     |     r5 = 0x20;
    0x0005ebd0 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0005ebd2 movs r0, r0                                       |     
    0x0005ebd4 ldr r6, [r5, 0x74]                                |     r6 = *(0x5ece4);
    0x0005ebd6 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x0005ebd8 str r5, [r6, 0x34]                                |     *((r6 + 0x34)) = r5;
    0x0005ebda movs r0, 0x68                                     |     r0 = 0x68;
    0x0005ebdc ldr r1, [r5, 0x64]                                |     r1 = *(0x5ecd4);
    0x0005ebde str r4, [r4, 0x54]                                |     *((r4 + 0x54)) = r4;
    0x0005ebe0 subs r2, 0x78                                     |     r2 -= 0x78;
    0x0005ebe2 movs r5, 0x20                                     |     r5 = 0x20;
    0x0005ebe4 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0005ebe6 movs r0, r0                                       |     
    0x0005ebe8 str r1, [r4, 0x34]                                |     *((r4 + 0x34)) = r1;
    0x0005ebea str r3, [r4, 0x54]                                |     *((r4 + 0x54)) = r3;
    0x0005ebec strb r3, [r6, 0xd]                                |     *((r6 + 0xd)) = r3;
    0x0005ebee strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x0005ebf0 movs r0, 0x6f                                     |     r0 = 0x6f;
    0x0005ebf2 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005ebf4 movs r5, 0x2e                                     |     r5 = 0x2e;
    0x0005ebf6 cmp r6, 0x73                                      |     
    0x0005ebf8 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005ebfa ldr r0, [r4, 0x10]                                |     r0 = *(0x5ec94);
    0x0005ebfc movs r0, 0x73                                     |     r0 = 0x73;
    0x0005ebfe strb r0, [r6, 9]                                  |     *((r6 + 9)) = r0;
    0x0005ec00 ldr r7, [r5, 4]                                   |     r7 = *(0x5ec74);
    0x0005ec02 str r1, [r5, 0x24]                                |     *((r5 + 0x24)) = r1;
    0x0005ec04 strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x0005ec06 str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x0005ec08 movs r0, r0                                       |     
    0x0005ec0a movs r0, r0                                       |     
    0x0005ec0c str r1, [r4, 0x34]                                |     *((r4 + 0x34)) = r1;
    0x0005ec0e str r3, [r4, 0x54]                                |     *((r4 + 0x54)) = r3;
    0x0005ec10 strb r3, [r6, 0xd]                                |     *((r6 + 0xd)) = r3;
    0x0005ec12 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x0005ec14 movs r0, 0x6f                                     |     r0 = 0x6f;
    0x0005ec16 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005ec18 movs r5, 0x2e                                     |     r5 = 0x2e;
    0x0005ec1a movs r0, 0x73                                     |     r0 = 0x73;
    0x0005ec1c strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x0005ec1e strb r0, [r4]                                     |     *(r4) = r0;
    0x0005ec20 ldr r2, [r6, 0x74]                                |     r2 = *(0x5ed58);
    0x0005ec22 ldr r0, [r5, 0x14]                                |     r0 = *(0x5ec84);
    0x0005ec24 ldr r2, [r4, 0x14]                                |     r2 = *(0x5ec98);
    0x0005ec26 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x0005ec28 lsls r4, r4, 1                                    |     r4 <<= 1;
    0x0005ec2a movs r0, r0                                       |     
    0x0005ec2c ldrb r5, [r0, 1]                                  |     r5 = *((r0 + 1));
    0x0005ec2e strb r0, [r6, 9]                                  |     *((r6 + 9)) = r0;
    0x0005ec30 strb r5, [r4, 0xd]                                |     *((r4 + 0xd)) = r5;
    0x0005ec32 ldr r3, [r6, 0x14]                                |     r3 = *(0x5ecf8);
    0x0005ec34 ldr r7, [r5, 0x64]                                |     r7 = *(0x5ecd4);
    0x0005ec36 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x0005ec38 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005ec3a movs r0, 0x65                                     |     r0 = 0x65;
    0x0005ec3c strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x0005ec3e strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x0005ec40 ldr r7, [r5, 0x74]                                |     r7 = *(0x5ece4);
    0x0005ec42 ldr r0, [r4, 0x40]                                |     r0 = *(0x5ecc4);
    0x0005ec44 strb r1, [r4, 9]                                  |     *((r4 + 9)) = r1;
    0x0005ec46 str r7, [r4, 0x54]                                |     *((r4 + 0x54)) = r7;
    0x0005ec48 cmp r0, 0x20                                      |     
    0x0005ec4a str r5, [r5, 0x14]                                |     *((r5 + 0x14)) = r5;
    0x0005ec4c ldr r0, [r7, 0x14]                                |     r0 = *(0x5ecf8);
    0x0005ec4e strb r5, [r5, 0x15]                               |     *((r5 + 0x15)) = r5;
    0x0005ec50 movs r0, 0x6d                                     |     r0 = 0x6d;
    0x0005ec52 str r4, [r4, 0x54]                                |     *((r4 + 0x54)) = r4;
    0x0005ec54 strb r0, [r6, 0x11]                               |     *((r6 + 0x11)) = r0;
    0x0005ec56 movs r0, 0x68                                     |     r0 = 0x68;
    0x0005ec58 str r5, [r4, 0x40]                                |     *((r4 + 0x40)) = r5;
    0x0005ec5a movs r1, r5                                       |     r1 = r5;
    0x0005ec5c ldr r6, [r5, 0x74]                                |     r6 = *(0x5ece4);
    0x0005ec5e strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x0005ec60 str r5, [r6, 0x34]                                |     *((r6 + 0x34)) = r5;
    0x0005ec62 movs r0, 0x68                                     |     r0 = 0x68;
    0x0005ec64 ldr r3, [r4, 0x74]                                |     r3 = *(0x5ecf8);
    0x0005ec66 strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x0005ec68 ldr r5, [r5, 0x64]                                |     
    0x0005ec6a movs r0, r0                                       |     
    0x0005ec6c ldr r1, [r4, 0x54]                                |     r1 = *(0x5ecd8);
    0x0005ec6e ldr r2, [r4, 0x14]                                |     r2 = *(0x5ec98);
    0x0005ec70 strb r7, [r4, 0x15]                               |     *((r4 + 0x15)) = r7;
    0x0005ec72 strb r7, [r5, 0x15]                               |     *((r5 + 0x15)) = r7;
    0x0005ec74 movs r0, 0x73                                     |     r0 = 0x73;
    0x0005ec76 ldr r3, [r4, 0x74]                                |     r3 = *(0x5ecf8);
    0x0005ec78 strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x0005ec7a ldr r5, [r5, 0x64]                                |     
    0x0005ec7c ldr r0, [r4, 0x60]                                |     r0 = *(0x5ece4);
    0x0005ec7e ldr r1, [r4, 0x54]                                |     r1 = *(0x5ecd8);
    0x0005ec80 lsls r5, r4, 1                                    |     r5 = r4 << 1;
    0x0005ec82 movs r0, r0                                       |     
    0x0005ec84 ldr r7, [r5, 0x44]                                |     r7 = *(0x5ed7c);
    0x0005ec86 lsls r4, r4, 1                                    |     r4 <<= 1;
    0x0005ec88 str r6, [r5, 0x54]                                |     *((r5 + 0x54)) = r6;
    0x0005ec8a lsls r7, r6, 1                                    |     r7 = r6 << 1;
    0x0005ec8c ldr r5, [r5, 0x14]                                |     r5 = *(0x5ed4c);
    0x0005ec8e strb r3, [r6, 0x15]                               |     *((r6 + 0x15)) = r3;
    0x0005ec90 str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x0005ec92 ldr r0, [r4, 0x70]                                |     r0 = *(0x5ecf4);
    0x0005ec94 movs r0, 0x66                                     |     r0 = 0x66;
    0x0005ec96 ldr r1, [r4, 0x44]                                |     r1 = "%s: %s";
    0x0005ec98 str r1, [r5, 0x14]                                |     *((r5 + 0x14)) = r1;
    0x0005ec9a str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x0005ec9c movs r0, 0x64                                     |     r0 = 0x64;
    0x0005ec9e str r1, [r4, 0x74]                                |     *((r4 + 0x74)) = r1;
    0x0005eca0 strb r7, [r4, 9]                                  |     *((r4 + 9)) = r7;
    0x0005eca2 str r5, [r4, 0x74]                                |     *((r4 + 0x74)) = r5;
    0x0005eca4 strb r1, [r4, 0x11]                               |     *((r4 + 0x11)) = r1;
    0x0005eca6 movs r0, 0x65                                     |     r0 = 0x65;
    0x0005eca8 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005ecaa movs r0, r0                                       |     
    0x0005ecac strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005ecae movs r0, 0x3a                                     |     r0 = 0x3a;
    0x0005ecb0 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005ecb2 movs r5, 0x2e                                     |     r5 = 0x2e;
    0x0005ecb4 cmp r6, 0x73                                      |     
    0x0005ecb6 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005ecb8 movs r0, r0                                       |     
    0x0005ecba movs r0, r0                                       |     
    0x0005ecbc strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005ecbe movs r0, 0x3a                                     |     r0 = 0x3a;
    0x0005ecc0 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005ecc2 movs r5, 0x2e                                     |     r5 = 0x2e;
    0x0005ecc4 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0005ecc6 movs r0, r0                                       |     
    0x0005ecc8 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005ecca movs r0, 0x3a                                     |     r0 = 0x3a;
    0x0005eccc strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005ecce movs r0, r0                                       |     
    0x0005ecd0 str r4, [r4, 0x54]                                |     *((r4 + 0x54)) = r4;
    0x0005ecd2 str r6, [r4, 0x14]                                |     *((r4 + 0x14)) = r6;
    0x0005ecd4 ldr r5, [r6, 0x44]                                |     r5 = *(0x5ed28);
    0x0005ecd6 movs r0, 0x74                                     |     r0 = 0x74;
    0x0005ecd8 str r6, [r6, 0x14]                                |     *((r6 + 0x14)) = r6;
    0x0005ecda strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x0005ecdc movs r0, 0x65                                     |     r0 = 0x65;
    0x0005ecde str r7, [r5, 0x64]                                |     *((r5 + 0x64)) = r7;
    0x0005ece0 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x0005ece2 ldr r7, [r5, 0x44]                                |     r7 = *(0x5ed6c);
    0x0005ece4 ldr r5, [r6, 0x54]                                |     r5 = *(0x5ed38);
    0x0005ece6 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0005ece8 movs r5, 0x5b                                     |     r5 = 0x5b;
    0x0005ecea ldrb r3, [r6, r5]                                 |     r3 = *((r6 + r5));
    0x0005ecec ldr r0, [r4, 0x10]                                |     r0 = *(0x5ec94);
    0x0005ecee movs r0, 0x73                                     |     r0 = 0x73;
    0x0005ecf0 ldr r6, [r5, 0x74]                                |     r6 = *(0x5edac);
    0x0005ecf2 movs r0, 0x74                                     |     r0 = 0x74;
    0x0005ecf4 ldr r3, [r4, 0x74]                                |     r3 = *(0x5ecf8);
    0x0005ecf6 strb r6, [r5, 0xd]                                |     *((r5 + 0xd)) = r6;
    0x0005ecf8 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x0005ecfa strb r6, [r5, 0x11]                               |     *((r5 + 0x11)) = r6;
    0x0005ecfc movs r0, r0                                       |     
    0x0005ecfe movs r0, r0                                       |     
    0x0005ed00 ldr r6, [r4, 0x74]                                |     r6 = *(0x5ecf8);
    0x0005ed02 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005ed04 str r1, [r5, 0x74]                                |     *((r5 + 0x74)) = r1;
    0x0005ed06 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0005ed08 str r3, [r5, 0x54]                                |     *((r5 + 0x54)) = r3;
    0x0005ed0a movs r0, 0x79                                     |     r0 = 0x79;
    0x0005ed0c ldr r7, [r5, 0x64]                                |     r7 = *(0x5ed9c);
    0x0005ed0e movs r5, 0x20                                     |     r5 = 0x20;
    0x0005ed10 movs r0, 0x73                                     |     r0 = 0x73;
    0x0005ed12 ldr r3, [r6, 4]                                   |     r3 = imp.mkdir;
    0x0005ed14 strb r7, [r5, 0x15]                               |     *((r5 + 0x15)) = r7;
    0x0005ed16 str r4, [r5, 0x44]                                |     *((r5 + 0x44)) = r4;
    0x0005ed18 strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x0005ed1a str r5, [r4, 0x64]                                |     *((r4 + 0x64)) = r5;
    0x0005ed1c strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x0005ed1e ldr r5, [r4, 0x64]                                |     
    0x0005ed20 str r3, [r4, 0x54]                                |     *((r4 + 0x54)) = r3;
    0x0005ed22 ldr r0, [r4, 0x70]                                |     r0 = *(0x5ecf4);
    0x0005ed24 ldr r6, [r5, 0x44]                                |     r6 = *(0x5ed2c);
    0x0005ed26 movs r0, 0x79                                     |     r0 = 0x79;
    0x0005ed28 ldr r7, [r5, 0x64]                                |     r7 = *(0x5ed4c);
    0x0005ed2a movs r0, 0x65                                     |     r0 = 0x65;
    0x0005ed2c ldr r3, [r4, 0x74]                                |     r3 = *(0x5ecf8);
    0x0005ed2e strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x0005ed30 ldr r5, [r5, 0x64]                                |     
    0x0005ed32 ldr r0, [r4, 0x70]                                |     r0 = *(0x5ecf4);
    0x0005ed34 movs r0, 0x66                                     |     r0 = 0x66;
    0x0005ed36 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x0005ed38 ldr r2, [r4, 0x44]                                |     r2 = "%s: %s";
    0x0005ed3a movs r0, 0x65                                     |     r0 = 0x65;
    0x0005ed3c strb r5, [r4, r0]                                 |     *((r4 + r0)) = r5;
    0x0005ed3e movs r0, r0                                       |     
    0x0005ed40 strb r6, [r5, 0x15]                               |     *((r5 + 0x15)) = r6;
    0x0005ed42 str r5, [r5, 0x24]                                |     *((r5 + 0x24)) = r5;
    0x0005ed44 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x0005ed46 ldr r0, [r4, 0x70]                                |     r0 = *(0x5ecf4);
    0x0005ed48 movs r0, 0x66                                     |     r0 = 0x66;
    0x0005ed4a ldr r3, [r4, 0x74]                                |     r3 = *(0x5ecf8);
    0x0005ed4c strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x0005ed4e ldr r5, [r5, 0x64]                                |     r5 = *(0x5edb0);
    0x0005ed50 movs r0, 0x73                                     |     r0 = 0x73;
    0x0005ed52 ldr r1, [r5, 0x64]                                |     r1 = *(0x5ee14);
    0x0005ed54 str r0, [r4, 0x60]                                |     *((r4 + 0x60)) = r0;
    0x0005ed56 strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x0005ed58 ldr r5, [r4, 0x14]                                |     
    0x0005ed5a ldr r7, [r4, 0x64]                                |     r7 = *(0x5ece8);
    0x0005ed5c ldr r0, [r4, 0x30]                                |     r0 = *(0x5ecb4);
    0x0005ed5e ldrb r5, [r4, 5]                                  |     r5 = *((r4 + 5));
    0x0005ed60 str r0, [r4, 0x40]                                |     *((r4 + 0x40)) = r0;
    0x0005ed62 str r7, [r5, 0x54]                                |     *((r5 + 0x54)) = r7;
    0x0005ed64 movs r0, 0x73                                     |     r0 = 0x73;
    0x0005ed66 ldr r6, [r5, 0x74]                                |     r6 = *(0x5ed0c);
    0x0005ed68 movs r0, 0x74                                     |     r0 = 0x74;
    0x0005ed6a str r5, [r5, 0x14]                                |     *((r5 + 0x14)) = r5;
    0x0005ed6c str r4, [r6, 0x34]                                |     *((r6 + 0x34)) = r4;
    0x0005ed6e movs r0, 0x68                                     |     r0 = 0x68;
    0x0005ed70 ldr r4, [r6, 4]                                   |     r4 = *(0x5ed10);
    0x0005ed72 movs r0, 0x65                                     |     r0 = 0x65;
    0x0005ed74 strb r6, [r5, 0x15]                               |     *((r5 + 0x15)) = r6;
    0x0005ed76 str r5, [r5, 0x24]                                |     *((r5 + 0x24)) = r5;
    0x0005ed78 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x0005ed7a ldr r0, [r4, 0x70]                                |     r0 = *(0x5ed80);
    0x0005ed7c movs r0, 0x66                                     |     r0 = 0x66;
    0x0005ed7e ldr r3, [r4, 0x74]                                |     r3 = *(0x5ed84);
    0x0005ed80 strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x0005ed82 ldr r5, [r5, 0x64]                                |     r5 = imp.mkdir;
    0x0005ed84 movs r0, 0x73                                     |     r0 = 0x73;
    0x0005ed86 ldr r1, [r5, 0x64]                                |     r1 = *(0x5ed60);
    0x0005ed88 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x0005ed8a str r0, [r5, 0x54]                                |     *((r5 + 0x54)) = r0;
    0x0005ed8c strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x0005ed8e str r5, [r4, 0x64]                                |     *((r4 + 0x64)) = r5;
    0x0005ed90 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x0005ed92 ldr r5, [r4, 0x64]                                |     r5 = *(0x5ed74);
    0x0005ed94 str r3, [r4, 0x54]                                |     *((r4 + 0x54)) = r3;
    0x0005ed96 movs r0, 0x64                                     |     r0 = 0x64;
    0x0005ed98 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x0005ed9a ldr r2, [r4, 0x44]                                |     r2 = *(0x5ed54);
    0x0005ed9c lsls r5, r4, 1                                    |     r5 = r4 << 1;
    0x0005ed9e movs r0, r0                                       |     
    0x0005eda0 ldr r5, [r6, 0x64]                                |     
    0x0005eda2 ldr r3, [r5, 0x64]                                |     r3 = *(0x5edd4);
    0x0005eda4 strb r7, [r5, 0x1d]                               |     *((r5 + 0x1d)) = r7;
    0x0005eda6 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0005eda8 ldr r3, [r4, 0x74]                                |     r3 = *(0x5ed84);
    0x0005edaa strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x0005edac ldr r5, [r5, 0x64]                                |     r5 = *(0x5edd4);
    0x0005edae movs r2, 0x20                                     |     r2 = 0x20;
    0x0005edb0 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005edb2 movs r0, 0x22                                     |     r0 = 0x22;
    0x0005edb4 ldr r1, [r5, 0x64]                                |     r1 = *(0x5ee38);
    0x0005edb6 str r0, [r4, 0x60]                                |     *((r4 + 0x60)) = r0;
    0x0005edb8 strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x0005edba ldr r5, [r4, 0x14]                                |     r5 = *(0x5ed24);
    0x0005edbc ldr r7, [r4, 0x64]                                |     r7 = *(0x5ed74);
    0x0005edbe ldr r0, [r4, 0x30]                                |     r0 = "number of columns in foreign key does not match the number of columns in the referenced table";
    0x0005edc0 ldrb r5, [r4, 5]                                  |     r5 = *((r4 + 5));
    0x0005edc2 str r0, [r4, 0x40]                                |     *((r4 + 0x40)) = r0;
    0x0005edc4 str r5, [r4, 0x64]                                |     *((r4 + 0x64)) = r5;
    0x0005edc6 ldr r1, [r5, 0x64]                                |     r1 = *(0x5ed88);
    0x0005edc8 strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x0005edca ldr r1, [r5, 0x74]                                |     r1 = *(0x5ed98);
    0x0005edcc lsls r6, r5, 1                                    |     r6 = r5 << 1;
    0x0005edce movs r0, r0                                       |     
    0x0005edd0 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005edd2 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x0005edd4 ldr r1, [r4, 0x64]                                |     r1 = *(0x5ed74);
    0x0005edd6 ldr r6, [r5, 0x74]                                |     r6 = *(0x5ed98);
    0x0005edd8 movs r0, 0x74                                     |     r0 = 0x74;
    0x0005edda strb r5, [r6, 0xd]                                |     *((r6 + 0xd)) = r5;
    0x0005eddc movs r0, 0x65                                     |     r0 = 0x65;
    0x0005edde str r6, [r6, 0x14]                                |     *((r6 + 0x14)) = r6;
    0x0005ede0 ldr r2, [r6, 0x14]                                |     r2 = *(0x5edac);
    0x0005ede2 str r1, [r4, 0x24]                                |     *((r4 + 0x24)) = r1;
    0x0005ede4 str r4, [r5, 0x54]                                |     *((r5 + 0x54)) = r4;
    0x0005ede6 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0005ede8 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005edea movs r5, 0x20                                     |     r5 = 0x20;
    0x0005edec movs r0, 0x54                                     |     r0 = 0x54;
    0x0005edee str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x0005edf0 ldr r6, [r5, 0x64]                                |     r6 = *(0x5ed88);
    0x0005edf2 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x0005edf4 strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x0005edf6 str r5, [r4, 0x64]                                |     *((r4 + 0x64)) = r5;
    0x0005edf8 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x0005edfa ldr r5, [r4, 0x64]                                |     r5 = *(0x5ed74);
    0x0005edfc str r3, [r4, 0x54]                                |     *((r4 + 0x54)) = r3;
    0x0005edfe ldr r0, [r4, 0x70]                                |     r0 = *(0x5ed80);
    0x0005ee00 ldr r2, [r4, 0x24]                                |     r2 = *(0x5ed34);
    0x0005ee02 str r5, [r4, 0x34]                                |     *((r4 + 0x34)) = r5;
    0x0005ee04 strb r4, [r6, 0xd]                                |     *((r6 + 0xd)) = r4;
    0x0005ee06 ldr r0, [r4, 0x10]                                |     r0 = *(0x5ed20);
    0x0005ee08 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0005ee0a str r4, [r4, 0x14]                                |     *((r4 + 0x14)) = r4;
    0x0005ee0c str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x0005ee0e str r2, [r4, 0x14]                                |     *((r4 + 0x14)) = r2;
    0x0005ee10 str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x0005ee12 movs r5, 0x20                                     |     r5 = 0x20;
    0x0005ee14 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0005ee16 movs r0, r0                                       |     
    0x0005ee18 ldr r6, [pc, 0x13c]                               |     r6 = "BINARY";
    0x0005ee1a movs r0, r0                                       |     
    0x0005ee1c strh r5, [r2, r5]                                 |     *((r2 + r5)) = r5;
    0x0005ee1e ldr r6, [pc, 0x124]                               |     r6 = *(0x5ef46);
    0x0005ee20 lsls r7, r0, 1                                    |     r7 = r0 << 1;
    0x0005ee22 movs r0, r0                                       |     
    0x0005ee24 movs r0, 0x61                                     |     r0 = 0x61;
    0x0005ee26 ldr r7, [pc, 0x128]                               |     r7 = *(0x5ef52);
    0x0005ee28 ldr r6, [pc, 0x124]                               |     r6 = *(0x5ef50);
    0x0005ee2a str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x0005ee2c str r4, [r5, 0x14]                                |     *((r5 + 0x14)) = r4;
    0x0005ee2e strb r5, [r6, 0xd]                                |     *((r6 + 0xd)) = r5;
    0x0005ee30 movs r0, 0x65                                     |     r0 = 0x65;
    0x0005ee32 strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x0005ee34 strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x0005ee36 strb r5, [r4, 5]                                  |     *((r4 + 5)) = r5;
    0x0005ee38 ldr r5, [r6, 0x14]                                |     r5 = *(0x5ef64);
    0x0005ee3a str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005ee3c movs r0, 0x64                                     |     r0 = 0x64;
    0x0005ee3e str r2, [r4, 0x54]                                |     *((r4 + 0x54)) = r2;
    0x0005ee40 ldr r6, [r4, 0x74]                                |     r6 = *(0x5ed84);
    0x0005ee42 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005ee44 movs r5, 0x20                                     |     r5 = 0x20;
    0x0005ee46 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0005ee48 ldr r5, [r6, 0x64]                                |     
    0x0005ee4a ldr r3, [r5, 0x64]                                |     r3 = *(0x5ee4c);
    0x0005ee4c strb r7, [r5, 0x1d]                               |     *((r5 + 0x1d)) = r7;
    0x0005ee4e movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0005ee50 strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x0005ee52 strb r0, [r4, 0x14]                               |     *((r4 + 0x14)) = r0;
    0x0005ee54 strb r6, [r5, 0xd]                                |     *((r5 + 0xd)) = r6;
    0x0005ee56 strb r5, [r6, 1]                                  |     *((r6 + 1)) = r5;
    0x0005ee58 ldr r0, [r6, 0x74]                                |     r0 = *(0x5edf8);
    0x0005ee5a strb r2, [r6, 0x11]                               |     *((r6 + 0x11)) = r2;
    0x0005ee5c str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x0005ee5e ldr r0, [r4, 0x20]                                |     r0 = *(0x5ed30);
    0x0005ee60 ldr r7, [r5, 0x14]                                |     r7 = *(0x5edfc);
    0x0005ee62 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0005ee64 ldrb r4, [r6, 5]                                  |     r4 = *((r6 + 5));
    0x0005ee66 str r0, [r6, 0x54]                                |     *((r6 + 0x54)) = r0;
    0x0005ee68 movs r0, 0x3a                                     |     r0 = 0x3a;
    0x0005ee6a strb r5, [r4, r0]                                 |     *((r4 + r0)) = r5;
    0x0005ee6c movs r5, 0x20                                     |     r5 = 0x20;
    0x0005ee6e movs r5, 0x54                                     |     r5 = 0x54;
    0x0005ee70 movs r5, 0x73                                     |     r5 = 0x73;
    0x0005ee72 lsls r4, r2, 1                                    |     r4 = r2 << 1;
    0x0005ee74 ldr r1, [pc, 0x148]                               |     r1 = *(0x5efc0);
    0x0005ee76 ldr r0, [pc, 0x11c]                               |     r0 = *(0x5ef96);
    0x0005ee78 movs r0, 0x54                                     |     r0 = 0x54;
    0x0005ee7a ldr r1, [r4, 0x64]                                |     r1 = *(0x5ed74);
    0x0005ee7c movs r0, 0x64                                     |     r0 = 0x64;
    0x0005ee7e strb r6, [r0, r5]                                 |     *((r0 + r5)) = r6;
    0x0005ee80 ldr r4, [pc, 0x130]                               |     
    0x0005ee82 ldr r7, [pc, 0x80]                                |     r7 = *(0x5ef06);
    0x0005ee84 strb r5, [r2, r1]                                 |     *((r2 + r1)) = r5;
    0x0005ee86 strh r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x0005ee88 ldr r2, [pc, 0x80]                                |     r2 = *(0x5ef0c);
    0x0005ee8a ldr r1, [pc, 0x13c]                               |     r1 = *(0x5efca);
    0x0005ee8c strb r6, [r1, 0xd]                                |     *((r1 + 0xd)) = r6;
    0x0005ee8e str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x0005ee90 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005ee92 ldr r0, [r4, 0x60]                                |     r0 = *(0x5f014);
    0x0005ee94 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x0005ee96 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x0005ee98 strb r5, [r6, 9]                                  |     *((r6 + 9)) = r5;
    0x0005ee9a str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005ee9c strb r6, [r5, 0x11]                               |     *((r5 + 0x11)) = r6;
    0x0005ee9e ldrb r4, [r5, 5]                                  |     r4 = *((r5 + 5));
    0x0005eea0 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x0005eea2 strb r5, [r6, 1]                                  |     *((r6 + 1)) = r5;
    0x0005eea4 ldr r0, [r6, 0x74]                                |     r0 = *(0x5edf8);
    0x0005eea6 strb r2, [r6, 0x11]                               |     *((r6 + 0x11)) = r2;
    0x0005eea8 str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x0005eeaa movs r0, r0                                       |     
    0x0005eeac str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x0005eeae ldr r2, [r4, 0x44]                                |     r2 = *(0x5eff8);
    0x0005eeb0 movs r0, 0x65                                     |     r0 = 0x65;
    0x0005eeb2 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005eeb4 ldr r0, [r4, 0x50]                                |     r0 = *(0x5f004);
    0x0005eeb6 ldrb r1, [r4, 5]                                  |     r1 = *((r4 + 5));
    0x0005eeb8 ldr r0, [r4, 0x60]                                |     r0 = *(0x5f014);
    0x0005eeba strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x0005eebc str r0, [r4, 0x20]                                |     *((r4 + 0x20)) = r0;
    0x0005eebe movs r0, 0x65                                     |     r0 = 0x65;
    0x0005eec0 ldr r5, [r5, 0x74]                                |     r5 = *(0x5ee5c);
    0x0005eec2 ldr r4, [r4, 0x14]                                |     r4 = *(0x5efc8);
    0x0005eec4 ldr r6, [r4, 0x14]                                |     r6 = *(0x5efdc);
    0x0005eec6 str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x0005eec8 movs r0, r0                                       |     
    0x0005eeca movs r0, r0                                       |     
    0x0005eecc str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x0005eece ldr r6, [r5, 0x64]                                |     r6 = *(0x5eec0);
    0x0005eed0 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x0005eed2 ldr r0, [r4, 0x50]                                |     r0 = *(0x5f018);
    0x0005eed4 str r7, [r5, 0x44]                                |     *((r5 + 0x44)) = r7;
    0x0005eed6 str r1, [r5, 0x64]                                |     *((r5 + 0x64)) = r1;
    0x0005eed8 movs r0, 0x79                                     |     r0 = 0x79;
    0x0005eeda strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005eedc str r0, [r4, 0x20]                                |     *((r4 + 0x20)) = r0;
    0x0005eede str r5, [r4, 0x34]                                |     *((r4 + 0x34)) = r5;
    0x0005eee0 strb r1, [r4, 0x15]                               |     *((r4 + 0x15)) = r1;
    0x0005eee2 str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x0005eee4 ldr r0, [r4, 0x10]                                |     r0 = *(0x5efd8);
    0x0005eee6 movs r0, 0x74                                     |     r0 = 0x74;
    0x0005eee8 strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x0005eeea str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x0005eeec strb r0, [r4, 0x18]                               |     *((r4 + 0x18)) = r0;
    0x0005eeee str r1, [r5, 0x54]                                |     *((r5 + 0x54)) = r1;
    0x0005eef0 lsls r7, r6, 1                                    |     r7 = r6 << 1;
    0x0005eef2 movs r0, r0                                       |     
    0x0005eef4 str r6, [r6, 0x14]                                |     *((r6 + 0x14)) = r6;
    0x0005eef6 ldr r2, [r6, 0x14]                                |     r2 = *(0x5eed4);
    0x0005eef8 str r1, [r4, 0x24]                                |     *((r4 + 0x24)) = r1;
    0x0005eefa str r4, [r5, 0x54]                                |     *((r5 + 0x54)) = r4;
    0x0005eefc ldr r0, [r4, 0x60]                                |     r0 = "too many terms in %s BY clause";
    0x0005eefe ldr r5, [r6, 0x54]                                |     
    0x0005ef00 str r2, [r4, 0x54]                                |     *((r4 + 0x54)) = r2;
    0x0005ef02 movs r0, 0x72                                     |     r0 = 0x72;
    0x0005ef04 strb r5, [r5, 0x15]                               |     *((r5 + 0x15)) = r5;
    0x0005ef06 strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x0005ef08 str r0, [r4, 0x20]                                |     *((r4 + 0x20)) = r0;
    0x0005ef0a movs r0, 0x65                                     |     r0 = 0x65;
    0x0005ef0c str r2, [r4, 0x54]                                |     *((r4 + 0x54)) = r2;
    0x0005ef0e strb r4, [r6, 0x1d]                               |     *((r6 + 0x1d)) = r4;
    0x0005ef10 str r5, [r4, 0x54]                                |     *((r4 + 0x54)) = r5;
    0x0005ef12 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0005ef14 adds r1, 0x3f                                     |     r1 += 0x3f;
    0x0005ef16 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x0005ef18 str r6, [r5, 0x44]                                |     *((r5 + 0x44)) = r6;
    0x0005ef1a subs r7, 0x20                                     |     r7 -= 0x20;
    0x0005ef1c str r5, [r4, 0x40]                                |     *((r4 + 0x40)) = r5;
    0x0005ef1e movs r0, r0                                       |     
    0x0005ef20 ldr r4, [r6, 0x74]                                |     r4 = *(0x5ef34);
    0x0005ef22 movs r0, 0x6f                                     |     r0 = 0x6f;
    0x0005ef24 str r5, [r5, 0x14]                                |     *((r5 + 0x14)) = r5;
    0x0005ef26 ldrb r6, [r5, 5]                                  |     r6 = *((r5 + 5));
    0x0005ef28 strh r0, [r4, r4]                                 |     *((r4 + r4)) = r0;
    0x0005ef2a ldr r4, [pc, 0x144]                               |     r4 = *(0x5f072);
    0x0005ef2c strb r0, [r4, 0x18]                               |     *((r4 + 0x18)) = r0;
    0x0005ef2e strb r1, [r4, 9]                                  |     *((r4 + 9)) = r1;
    0x0005ef30 str r1, [r5, 0x14]                                |     *((r5 + 0x14)) = r1;
    0x0005ef32 ldr r2, [r4, 0x44]                                |     r2 = *(0x5f0b6);
    0x0005ef34 strb r5, [r4, 0xd]                                |     *((r4 + 0xd)) = r5;
    0x0005ef36 movs r0, r0                                       |     
    0x0005ef38 strb r4, [r4, 0x15]                               |     *((r4 + 0x15)) = r4;
    0x0005ef3a ldr r0, [r6, 0x44]                                |     r0 = *(0x5ef04);
    0x0005ef3c str r1, [r5, 0x34]                                |     *((r5 + 0x34)) = r1;
    0x0005ef3e strb r1, [r4, 0x11]                               |     *((r4 + 0x11)) = r1;
    0x0005ef40 movs r0, 0x65                                     |     r0 = 0x65;
    0x0005ef42 ldr r1, [pc, 0x15c]                               |     r1 = *(0x5f0a2);
    0x0005ef44 ldr r0, [pc, 0x150]                               |     r0 = *(0x5f098);
    0x0005ef46 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x0005ef48 str r1, [r4, 0x24]                                |     *((r4 + 0x24)) = r1;
    0x0005ef4a str r4, [r5, 0x54]                                |     *((r5 + 0x54)) = r4;
    0x0005ef4c ldr r0, [r4, 0x60]                                |     r0 = *(0x5f0d2);
    0x0005ef4e ldr r1, [r4, 0x54]                                |     r1 = *(0x5f0c6);
    0x0005ef50 subs r2, 0x65                                     |     r2 -= 0x65;
    0x0005ef52 movs r5, 0x20                                     |     r5 = 0x20;
    0x0005ef54 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0005ef56 movs r0, r0                                       |     
    0x0005ef58 ldr r1, [pc, 0x108]                               |     r1 = *(0x5f064);
    0x0005ef5a adcs r6, r1                                       |     __asm ("adcs r6, r1");
    0x0005ef5c movs r1, r0                                       |     r1 = r0;
    0x0005ef5e movs r0, r0                                       |     
    0x0005ef60 ldr r6, [r4, 0x74]                                |     r6 = *(0x5f0e6);
    0x0005ef62 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005ef64 str r1, [r5, 0x74]                                |     *((r5 + 0x74)) = r1;
    0x0005ef66 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0005ef68 str r3, [r5, 0x54]                                |     *((r5 + 0x54)) = r3;
    0x0005ef6a movs r1, 0x79                                     |     r1 = 0x79;
    0x0005ef6c ldr r5, [r5, 0x14]                                |     r5 = *(0x5ef28);
    0x0005ef6e ldr r3, [r6, 0x54]                                |     r3 = *(0x5f13a);
    0x0005ef70 strb r1, [r4, 0x11]                               |     *((r4 + 0x11)) = r1;
    0x0005ef72 ldr r3, [r4, 4]                                   |     r3 = *(0x5f076);
    0x0005ef74 cmp r5, 0x20                                      |     
    0x0005ef76 movs r2, 0x20                                     |     r2 = 0x20;
    0x0005ef78 strb r5, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r5;
    0x0005ef7a movs r0, 0x22                                     |     r0 = 0x22;
    0x0005ef7c str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005ef7e str r6, [r4, 0x54]                                |     *((r4 + 0x54)) = r6;
    0x0005ef80 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005ef82 str r6, [r5, 0x34]                                |     *((r5 + 0x34)) = r6;
    0x0005ef84 ldr r1, [r5, 0x64]                                |     r1 = imp.mkdir;
    0x0005ef86 movs r0, 0x67                                     |     r0 = 0x67;
    0x0005ef88 movs r5, 0x22                                     |     r5 = 0x22;
    0x0005ef8a movs r2, 0x77                                     |     r2 = 0x77;
    0x0005ef8c movs r0, r0                                       |     
    0x0005ef8e movs r0, r0                                       |     
    0x0005ef90 ldr r7, [r5, 0x14]                                |     r7 = *(0x5ef3c);
    0x0005ef92 lsls r4, r4, 1                                    |     r4 <<= 1;
    0x0005ef94 ldr r7, [pc, 0x118]                               |     r7 = *(0x5f0b0);
    0x0005ef96 cmp r2, sl                                        |     
    0x0005ef98 bx sb                                             |     return uint32_t (*sb)() ();
    0x000602e0 ldr r6, [r4, 0x74]                                |     r6 = *((r4 + 0x74));
    0x000602e2 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x000602e4 movs r0, r0                                       |     
    0x000602e6 movs r0, r0                                       |     
    0x000602e8 ldr r1, [r4, 0x44]                                |     r1 = *((r4 + 0x44));
    0x000602ea movs r0, 0x6c                                     |     r0 = 0x6c;
    0x000602ec adcs r6, r2                                       |     __asm ("adcs r6, r2");
    0x000602ee strb r4, [r1, r5]                                 |     *((r1 + r5)) = r4;
    0x000602f0 strh r5, [r0, r5]                                 |     *((r0 + r5)) = r5;
    0x000602f2 ldr r0, [r4, 0x50]                                |     r0 = *((r4 + 0x50));
    0x000602f4 strb r5, [r6, 0xd]                                |     *((r6 + 0xd)) = r5;
    0x000602f6 movs r0, 0x74                                     |     r0 = 0x74;
    0x000602f8 str r0, [r5, 0x14]                                |     *((r5 + 0x14)) = r0;
    0x000602fa str r6, [r6, 0x54]                                |     *((r6 + 0x54)) = r6;
    0x000602fc strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x000602fe str r0, [r5, 0x54]                                |     *((r5 + 0x54)) = r0;
    0x00060300 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00060302 ldr r1, [r4, 0x54]                                |     r1 = *((r4 + 0x54));
    0x00060304 movs r0, 0x65                                     |     r0 = 0x65;
    0x00060306 strb r6, [r5, 0x15]                               |     *((r5 + 0x15)) = r6;
    0x00060308 str r5, [r5, 0x24]                                |     *((r5 + 0x24)) = r5;
    0x0006030a strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x0006030c ldr r0, [r4, 0x70]                                |     r0 = *((r4 + 0x70));
    0x0006030e movs r0, 0x66                                     |     r0 = 0x66;
    0x00060310 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00060312 ldr r2, [r6, 0x54]                                |     r2 = *((r6 + 0x54));
    0x00060314 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x00060316 movs r0, r0                                       |     
    0x00060318 cmp r3, sl                                        |     
    0x0006031a cmp r4, sb                                        |     
    0x0006031c strb r3, [r0, r1]                                 |     *((r0 + r1)) = r3;
    0x0006031e movs r0, 0x73                                     |     r0 = 0x73;
    0x00060320 ldr r4, [r6, 0x74]                                |     r4 = *((r6 + 0x74));
    0x00060322 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00060324 str r0, [r5, 0x54]                                |     *((r5 + 0x54)) = r0;
    0x00060326 ldr r0, [r4, 0x40]                                |     r0 = *((r4 + 0x40));
    0x00060328 str r5, [r4, 0x64]                                |     *((r4 + 0x64)) = r5;
    0x0006032a movs r0, 0x74                                     |     r0 = 0x74;
    0x0006032c ldr r1, [r4, 0x64]                                |     r1 = *((r4 + 0x64));
    0x0006032e movs r0, 0x64                                     |     r0 = 0x64;
    0x00060330 ldr r2, [r6, 0x14]                                |     r2 = *((r6 + 0x14));
    0x00060332 ldr r7, [r4, 4]                                   |     r7 = *((r4 + 4));
    0x00060334 movs r0, 0x74                                     |     r0 = 0x74;
    0x00060336 str r7, [r5, 0x64]                                |     *((r5 + 0x64)) = r7;
    0x00060338 movs r5, 0x20                                     |     r5 = 0x20;
    0x0006033a movs r0, 0x73                                     |     r0 = 0x73;
    0x0006033c ldr r4, [r4, 0x74]                                |     r4 = *((r4 + 0x74));
    0x0006033e ldr r0, [r4, 0x60]                                |     r0 = *((r4 + 0x60));
    0x00060340 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x00060342 ldr r0, [r4]                                      |     r0 = *(r4);
    0x00060344 strb r1, [r4, 0x19]                               |     *((r4 + 0x19)) = r1;
    0x00060346 movs r0, 0x65                                     |     r0 = 0x65;
    0x00060348 ldr r4, [r6, 4]                                   |     r4 = *((r6 + 4));
    0x0006034a movs r0, 0x65                                     |     r0 = 0x65;
    0x0006034c str r3, [r6, 0x14]                                |     *((r6 + 0x14)) = r3;
    0x0006034e str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00060350 ldr r0, [r4, 0x60]                                |     r0 = *((r4 + 0x60));
    0x00060352 ldr r5, [r6, 0x54]                                |     r5 = *((r6 + 0x54));
    0x00060354 str r2, [r4, 0x54]                                |     *((r4 + 0x54)) = r2;
    0x00060356 movs r0, 0x72                                     |     r0 = 0x72;
    0x00060358 str r7, [r5, 0x64]                                |     *((r5 + 0x64)) = r7;
    0x0006035a strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x0006035c strb r5, [r4, 0xd]                                |     *((r4 + 0xd)) = r5;
    0x0006035e ldr r5, [r6, 0x44]                                |     r5 = *((r6 + 0x44));
    0x00060360 movs r0, 0x74                                     |     r0 = 0x74;
    0x00060362 ldr r3, [r4, 0x74]                                |     r3 = *((r4 + 0x74));
    0x00060364 strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x00060366 ldr r5, [r5, 0x64]                                |     r5 = *((r5 + 0x64));
    0x00060368 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0006036a movs r0, r0                                       |     
    0x0006036c strb r2, [r2, r1]                                 |     *((r2 + r1)) = r2;
    0x0006036e ldr r1, [pc, 0x148]                               |     r1 = *(0x604ba);
    0x00060370 lsls r5, r1, 1                                    |     r5 = r1 << 1;
    0x00060372 movs r0, r0                                       |     
    0x00060374 adcs r5, r1                                       |     __asm ("adcs r5, r1");
    0x00060376 muls r4, r2, r4                                   |     r4 = r2 * r4;
    0x00060378 lsls r0, r1, 1                                    |     r0 = r1 << 1;
    0x0006037a movs r0, r0                                       |     
    0x0006037c strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x0006037e str r4, [r5, 0x34]                                |     *((r5 + 0x34)) = r4;
    0x00060380 strb r1, [r5, 1]                                  |     *((r5 + 1)) = r1;
    0x00060382 str r0, [r5, 0x54]                                |     *((r5 + 0x54)) = r0;
    0x00060384 ldrsh r2, [r6, r5]                                |     r2 = *((r6 + r5));
    0x00060386 ldrb r5, [r4, 1]                                  |     r5 = *((r4 + 1));
    0x00060388 ldr r0, [r6, 0x74]                                |     r0 = *((r6 + 0x74));
    0x0006038a strb r2, [r6, 0x11]                               |     *((r6 + 0x11)) = r2;
    0x0006038c movs r0, r0                                       |     
    0x0006038e movs r0, r0                                       |     
    0x00060390 strb r1, [r4, 0x15]                               |     *((r4 + 0x15)) = r1;
    0x00060392 ldr r4, [r6, 0x74]                                |     r4 = *((r6 + 0x74));
    0x00060394 str r5, [r5, 0x14]                                |     *((r5 + 0x14)) = r5;
    0x00060396 ldr r4, [r6, 0x14]                                |     r4 = *((r6 + 0x14));
    0x00060398 movs r0, 0x63                                     |     r0 = 0x63;
    0x0006039a ldrb r5, [r4, 1]                                  |     r5 = *((r4 + 1));
    0x0006039c str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x0006039e strb r6, [r5, 0xd]                                |     *((r5 + 0xd)) = r6;
    0x000603a0 ldr r1, [r5, 0x74]                                |     r1 = *((r5 + 0x74));
    0x000603a2 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x000603a4 ldr r4, [r5, 0x74]                                |     r4 = *((r5 + 0x74));
    0x000603a6 str r1, [r4, 0x44]                                |     *((r4 + 0x44)) = r1;
    0x000603a8 ldr r1, [r5, 0x64]                                |     r1 = *((r5 + 0x64));
    0x000603aa movs r0, 0x67                                     |     r0 = 0x67;
    0x000603ac str r6, [r4, 0x14]                                |     *((r4 + 0x14)) = r6;
    0x000603ae ldr r1, [r5, 0x44]                                |     r1 = *((r5 + 0x44));
    0x000603b0 str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x000603b2 movs r0, 0x3a                                     |     r0 = 0x3a;
    0x000603b4 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x000603b6 movs r0, r0                                       |     
    0x000603b8 strh r0, [r2, r1]                                 |     *((r2 + r1)) = r0;
    0x000603ba bx r8                                             |     return uint32_t (*r8)() ();
    0x00060c00 str r7, [r4, 0x74]                                |     *((r4 + 0x74)) = r7;
    0x00060c02 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x00060c04 ldr r0, [r4, 0x70]                                |     r0 = *((r4 + 0x70));
    0x00060c06 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x00060c08 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00060c0a ldr r2, [r4, 0x44]                                |     r2 = *((r4 + 0x44));
    0x00060c0c subs r2, 0x65                                     |     r2 -= 0x65;
    0x00060c0e movs r5, 0x20                                     |     r5 = 0x20;
    0x00060c10 lsls r3, r2, 1                                    |     r3 = r2 << 1;
    0x00060c12 movs r0, r0                                       |     
    0x00060c14 strb r1, [r6, 0x15]                               |     *((r6 + 0x15)) = r1;
    0x00060c16 ldr r1, [r4, 0x44]                                |     r1 = *((r4 + 0x44));
    0x00060c18 str r1, [r5, 0x64]                                |     *((r5 + 0x64)) = r1;
    0x00060c1a str r1, [r5, 0x54]                                |     *((r5 + 0x54)) = r1;
    0x00060c1c movs r0, 0x64                                     |     r0 = 0x64;
    0x00060c1e str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00060c20 ldr r2, [r4, 0x44]                                |     r2 = *((r4 + 0x44));
    0x00060c22 movs r0, 0x65                                     |     r0 = 0x65;
    0x00060c24 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x00060c26 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00060c28 movs r0, 0x73                                     |     r0 = 0x73;
    0x00060c2a strb r1, [r4, 9]                                  |     *((r4 + 9)) = r1;
    0x00060c2c movs r0, 0x65                                     |     r0 = 0x65;
    0x00060c2e ldr r6, [r5, 0x74]                                |     r6 = *((r5 + 0x74));
    0x00060c30 movs r0, 0x74                                     |     r0 = 0x74;
    0x00060c32 ldr r1, [r4, 0x44]                                |     r1 = *((r4 + 0x44));
    0x00060c34 ldr r4, [r5, 0x74]                                |     r4 = *((r5 + 0x74));
    0x00060c36 str r7, [r6, 0x54]                                |     *((r6 + 0x54)) = r7;
    0x00060c38 movs r0, 0x64                                     |     r0 = 0x64;
    0x00060c3a ldr r7, [r5, 0x64]                                |     r7 = *((r5 + 0x64));
    0x00060c3c ldr r1, [pc, 0x80]                                |     r1 = *(0x60cc0);
    0x00060c3e strh r6, [r1, r5]                                 |     *((r1 + r5)) = r6;
    0x00060c40 strh r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x00060c42 cmp r4, 0x54                                      |     
    0x00060c44 strb r0, [r4, r4]                                 |     *((r4 + r4)) = r0;
    0x00060c46 add r0, sl                                        |     r0 += sl;
    0x00060c48 strb r1, [r0, r1]                                 |     *((r0 + r1)) = r1;
    0x00060c4a cmp r4, 0x45                                      |     
    0x00060c4c str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00060c4e str r6, [r5, 0x44]                                |     *((r5 + 0x44)) = r6;
    0x00060c50 add r0, r4                                        |     r0 += r4;
    0x00060c52 ldr r4, [pc, 0x114]                               |     r4 = *(0x60d6a);
    0x00060c54 strb r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x00060c56 movs r0, 0x45                                     |     r0 = 0x45;
    0x00060c58 strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x00060c5a strb r1, [r4, 0x11]                               |     *((r4 + 0x11)) = r1;
    0x00060c5c ldr r5, [r4, 0x54]                                |     r5 = *(0x60dbe);
    0x00060c5e ldr r5, [r4, 0x64]                                |     r5 = *(0x60dce);
    0x00060c60 strb r4, [r6, 0xd]                                |     *((r6 + 0xd)) = r4;
    0x00060c62 strb r0, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r0;
    0x00060c64 strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x00060c66 ldr r0, [r5, 0x14]                                |     r0 = *(0x60de2);
    0x00060c68 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x00060c6a strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x00060c6c str r1, [r5, 0x74]                                |     *((r5 + 0x74)) = r1;
    0x00060c6e str r7, [r4, 0x54]                                |     *((r4 + 0x54)) = r7;
    0x00060c70 strb r2, [r6, 0xd]                                |     *((r6 + 0xd)) = r2;
    0x00060c72 movs r0, r0                                       |     
    0x00060c74 ldr r4, [r6, 4]                                   |     r4 = *((r6 + 4));
    0x00060c76 movs r0, 0x65                                     |     r0 = 0x65;
    0x00060c78 ldr r6, [pc, 0x124]                               |     r6 = "table %s may not be altered";
    0x00060c7a cmp r4, r8                                        |     
    0x00060c7c cmp r0, fp                                        |     
    0x00060c7e movs r0, 0x44                                     |     r0 = 0x44;
    0x00060c80 ldr r2, [r0, r5]                                  |     r2 = *(0x60de2);
    0x00060c82 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x00060c84 str r4, [r5, 0x14]                                |     *((r5 + 0x14)) = r4;
    0x00060c86 strb r5, [r6, 0xd]                                |     *((r6 + 0xd)) = r5;
    0x00060c88 movs r0, 0x65                                     |     r0 = 0x65;
    0x00060c8a strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x00060c8c ldr r0, [r4, 0x60]                                |     r0 = *(0x60dca);
    0x00060c8e strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x00060c90 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00060c92 ldr r4, [r5, 0x44]                                |     r4 = *(0x60e12);
    0x00060c94 strb r7, [r5, 0x1d]                               |     *((r5 + 0x1d)) = r7;
    0x00060c96 str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x00060c98 ldr r0, [r4, 0x70]                                |     r0 = *(0x60e82);
    0x00060c9a movs r0, 0x6e                                     |     r0 = 0x6e;
    0x00060c9c str r5, [r2, r1]                                  |     *((r2 + r1)) = r5;
    0x00060c9e adcs r4, r0                                       |     __asm ("adcs r4, r0");
    0x00060ca0 cmp r4, sl                                        |     
    0x00060ca2 ldr r0, [r4, 0x70]                                |     r0 = *(0x60e82);
    0x00060ca4 movs r0, 0x72                                     |     r0 = 0x72;
    0x00060ca6 cmp r4, r8                                        |     
    0x00060ca8 cmp r4, sb                                        |     
    0x00060caa cmp r4, sl                                        |     
    0x00060cac strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00060cae str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00060cb0 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00060cb2 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00060cb4 strb r6, [r5, 0x11]                               |     *((r5 + 0x11)) = r6;
    0x00060cb6 movs r0, 0x73                                     |     r0 = 0x73;
    0x00060cb8 ldr r7, [r6, 0x14]                                |     r7 = *(0x60db4);
    0x00060cba ldr r4, [r6, 4]                                   |     r4 = *(0x60da4);
    0x00060cbc ldr r1, [r5, 0x64]                                |     r1 = *(0x60e32);
    0x00060cbe strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00060cc0 ldr r2, [r6, 0x14]                                |     r2 = *(0x60db4);
    0x00060cc2 str r7, [r4, 0x74]                                |     *((r4 + 0x74)) = r7;
    0x00060cc4 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x00060cc6 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x00060cc8 ldr r4, [r6, 4]                                   |     r4 = *(0x60da4);
    0x00060cca movs r0, 0x65                                     |     r0 = 0x65;
    0x00060ccc ldr r7, [pc, 0x138]                               |     r7 = *(0x60e08);
    0x00060cce movs r0, 0x54                                     |     r0 = 0x54;
    0x00060cd0 ldr r6, [pc, 0x124]                               |     r6 = *(0x60df8);
    0x00060cd2 cmp r4, r8                                        |     
    0x00060cd4 cmp r0, fp                                        |     
    0x00060cd6 movs r0, 0x44                                     |     r0 = 0x44;
    0x00060cd8 ldr r3, [r4, 0x44]                                |     r3 = *(0x60de8);
    0x00060cda strb r1, [r4, 0x15]                               |     *((r4 + 0x15)) = r1;
    0x00060cdc str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x00060cde ldr r0, [r4, 0x10]                                |     r0 = *(0x60db4);
    0x00060ce0 movs r0, 0x73                                     |     r0 = 0x73;
    0x00060ce2 ldr r6, [r5, 0x74]                                |     r6 = *(0x60e42);
    0x00060ce4 movs r0, 0x74                                     |     r0 = 0x74;
    0x00060ce6 ldr r1, [r4, 0x44]                                |     r1 = *(0x60de8);
    0x00060ce8 ldr r4, [r5, 0x74]                                |     r4 = *(0x60e42);
    0x00060cea str r7, [r6, 0x54]                                |     *((r6 + 0x54)) = r7;
    0x00060cec movs r0, 0x64                                     |     r0 = 0x64;
    0x00060cee ldr r7, [r5, 0x64]                                |     r7 = *(0x60e32);
    0x00060cf0 strb r0, [r4, r4]                                 |     *((r4 + r4)) = r0;
    0x00060cf2 add r0, sl                                        |     r0 += sl;
    0x00060cf4 strb r1, [r0, r1]                                 |     *((r0 + r1)) = r1;
    0x00060cf6 movs r0, 0x45                                     |     r0 = 0x45;
    0x00060cf8 strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x00060cfa add r0, r4                                        |     r0 += r4;
    0x00060cfc ldr r4, [pc, 0x114]                               |     r4 = *(0x60e14);
    0x00060cfe strb r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x00060d00 movs r0, 0x45                                     |     r0 = 0x45;
    0x00060d02 strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x00060d04 strb r1, [r4, 0x11]                               |     *((r4 + 0x11)) = r1;
    0x00060d06 ldr r5, [r4, 0x54]                                |     r5 = *(0x60e68);
    0x00060d08 ldr r5, [r4, 0x64]                                |     r5 = *(0x60e78);
    0x00060d0a strb r4, [r6, 0xd]                                |     *((r6 + 0xd)) = r4;
    0x00060d0c strb r0, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r0;
    0x00060d0e strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x00060d10 ldr r0, [r5, 0x14]                                |     r0 = *(0x60e8c);
    0x00060d12 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x00060d14 strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x00060d16 str r1, [r5, 0x74]                                |     *((r5 + 0x74)) = r1;
    0x00060d18 str r7, [r4, 0x54]                                |     *((r4 + 0x54)) = r7;
    0x00060d1a strb r2, [r6, 0xd]                                |     *((r6 + 0xd)) = r2;
    0x00060d1c movs r0, r0                                       |     
    0x00060d1e movs r0, r0                                       |     
    0x00060d20 ldr r6, [r5, 0x74]                                |     r6 = *(0x60eec);
    0x00060d22 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00060d24 str r5, [r6, 0x34]                                |     *((r6 + 0x34)) = r5;
    0x00060d26 movs r0, 0x68                                     |     r0 = 0x68;
    0x00060d28 strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x00060d2a str r1, [r5, 0x74]                                |     *((r5 + 0x74)) = r1;
    0x00060d2c str r7, [r4, 0x54]                                |     *((r4 + 0x54)) = r7;
    0x00060d2e subs r2, 0x72                                     |     r2 -= 0x72;
    0x00060d30 movs r5, 0x20                                     |     r5 = 0x20;
    0x00060d32 lsls r3, r2, 1                                    |     r3 = r2 << 1;
    0x00060d34 ldr r5, [r6, 0x64]                                |     r5 = *(0x60f50);
    0x00060d36 str r1, [r4, 0x24]                                |     *((r4 + 0x24)) = r1;
    0x00060d38 str r4, [r5, 0x54]                                |     *((r5 + 0x54)) = r4;
    0x00060d3a strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00060d3c movs r0, 0x6f                                     |     r0 = 0x6f;
    0x00060d3e str r1, [r5, 0x44]                                |     *((r5 + 0x44)) = r1;
    0x00060d40 ldr r5, [r4, 0x64]                                |     r5 = *(0x60e78);
    0x00060d42 ldr r4, [r6, 0x14]                                |     r4 = *(0x60f00);
    0x00060d44 ldrb r6, [r4, 5]                                  |     r6 = *((r4 + 5));
    0x00060d46 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00060d48 str r0, [r5, 0x54]                                |     *((r5 + 0x54)) = r0;
    0x00060d4a ldr r0, [r4, 0x70]                                |     r0 = *(0x60f70);
    0x00060d4c ldr r2, [r4, 0x24]                                |     r2 = *(0x60f24);
    0x00060d4e str r5, [r4, 0x34]                                |     *((r4 + 0x34)) = r5;
    0x00060d50 movs r0, 0x74                                     |     r0 = 0x74;
    0x00060d52 ldr r4, [r6, 0x74]                                |     r4 = *(0x60f60);
    0x00060d54 str r0, [r4, 0x20]                                |     *((r4 + 0x20)) = r0;
    0x00060d56 movs r0, 0x65                                     |     r0 = 0x65;
    0x00060d58 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x00060d5a ldr r1, [r5, 0x64]                                |     r1 = *(0x60edc);
    0x00060d5c str r4, [r4, 0x54]                                |     *((r4 + 0x54)) = r4;
    0x00060d5e str r0, [r7, 0x54]                                |     *((r7 + 0x54)) = r0;
    0x00060d60 lsls r4, r4, 1                                    |     r4 <<= 1;
    0x00060d62 movs r0, r0                                       |     
    0x00060d64 ldr r4, [r6, 4]                                   |     r4 = *(0x60ef0);
    0x00060d66 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x00060d68 movs r0, 0x65                                     |     r0 = 0x65;
    0x00060d6a strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x00060d6c str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00060d6e strb r4, [r5, 9]                                  |     *((r5 + 9)) = r4;
    0x00060d70 str r5, [r4, 0x14]                                |     *((r4 + 0x14)) = r5;
    0x00060d72 ldrb r4, [r4, 5]                                  |     r4 = *((r4 + 5));
    0x00060d74 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00060d76 ldr r6, [r5, 0x74]                                |     
    0x00060d78 ldr r4, [r6, 4]                                   |     r4 = *(0x60ef0);
    0x00060d7a strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x00060d7c strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00060d7e str r1, [r4, 0x24]                                |     *((r4 + 0x24)) = r1;
    0x00060d80 str r4, [r5, 0x54]                                |     *((r5 + 0x54)) = r4;
    0x00060d82 ldr r0, [r4, 0x70]                                |     r0 = *(0x60f60);
    0x00060d84 movs r0, 0x72                                     |     r0 = 0x72;
    0x00060d86 ldr r1, [r5, 0x64]                                |     r1 = *(0x60edc);
    0x00060d88 str r4, [r4, 0x54]                                |     *((r4 + 0x54)) = r4;
    0x00060d8a movs r0, 0x78                                     |     r0 = 0x78;
    0x00060d8c ldr r7, [r6, 0x14]                                |     r7 = *(0x60f00);
    0x00060d8e ldr r4, [r6, 4]                                   |     r4 = *(0x60ef0);
    0x00060d90 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00060d92 ldr r0, [r5, 0x14]                                |     r0 = *(0x60e8c);
    0x00060d94 movs r0, 0x73                                     |     r0 = 0x73;
    0x00060d96 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x00060d98 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00060d9a movs r0, 0x3a                                     |     r0 = 0x3a;
    0x00060d9c strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x00060d9e movs r0, r0                                       |     
    0x00060da0 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00060da2 ldr r2, [r4, 0x44]                                |     r2 = *(0x60f34);
    0x00060da4 movs r0, 0x65                                     |     r0 = 0x65;
    0x00060da6 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x00060da8 ldr r0, [r4, 0x50]                                |     r0 = *(0x60f40);
    0x00060daa ldrb r1, [r4, 5]                                  |     r1 = *((r4 + 5));
    0x00060dac ldr r0, [r4, 0x60]                                |     r0 = *(0x60f50);
    0x00060dae strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x00060db0 str r0, [r4, 0x20]                                |     *((r4 + 0x20)) = r0;
    0x00060db2 movs r0, 0x65                                     |     r0 = 0x65;
    0x00060db4 ldr r1, [r4, 0x44]                                |     r1 = *(0x60f34);
    0x00060db6 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00060db8 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x00060dba lsls r4, r4, 1                                    |     r4 <<= 1;
    0x00060dbc ldr r6, [r6, 0x14]                                |     r6 = *(0x60f00);
    0x00060dbe strb r5, [r4, 0x1d]                               |     *((r4 + 0x1d)) = r5;
    0x00060dc0 movs r5, 0x20                                     |     r5 = 0x20;
    0x00060dc2 movs r0, 0x73                                     |     r0 = 0x73;
    0x00060dc4 str r5, [r5, 0x14]                                |     *((r5 + 0x14)) = r5;
    0x00060dc6 movs r0, 0x79                                     |     r0 = 0x79;
    0x00060dc8 ldr r6, [r5, 0x74]                                |     r6 = *(0x60eec);
    0x00060dca movs r0, 0x74                                     |     r0 = 0x74;
    0x00060dcc str r2, [r4, 0x54]                                |     *((r4 + 0x54)) = r2;
    0x00060dce str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00060dd0 strb r4, [r5, 0x11]                               |     *((r5 + 0x11)) = r4;
    0x00060dd2 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x00060dd4 str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x00060dd6 movs r0, r0                                       |     
    0x00060dd8 str r5, [r2, r1]                                  |     *((r2 + r1)) = r5;
    0x00060dda adcs r4, r0                                       |     __asm ("adcs r4, r0");
    0x00060ddc cmp r4, sl                                        |     
    0x00060dde movs r2, 0x20                                     |     r2 = 0x20;
    0x00060de0 strb r5, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r5;
    0x00060de2 cmp r6, 0x22                                      |     
    0x00060de4 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x00060de6 strh r0, [r4, r4]                                 |     *((r4 + r4)) = r0;
    0x00060de8 strb r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x00060dea strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00060dec ldr r1, [r6, 0x44]                                |     r1 = *(0x60f30);
    0x00060dee subs r5, 0x20                                     |     r5 -= 0x20;
    0x00060df0 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00060df2 ldr r1, [r6, 0x44]                                |     r1 = *(0x60f30);
    0x00060df4 strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x00060df6 ldrsh r5, [r4, r5]                                |     r5 = *((r4 + r5));
    0x00060df8 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x00060dfa str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x00060dfc str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00060dfe strb r7, [r3, 1]                                  |     *((r3 + 1)) = r7;
    0x00060e00 strb r1, [r4, 9]                                  |     *((r4 + 9)) = r1;
    0x00060e02 ldr r5, [r4, 0x64]                                |     r5 = *(0x60f54);
    0x00060e04 cmp r0, 0x74                                      |     
    0x00060e06 strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x00060e08 cmp r4, 0x6c                                      |     
    0x00060e0a movs r5, 0x20                                     |     r5 = 0x20;
    0x00060e0c cmp r4, 0x51                                      |     
    0x00060e0e movs r5, 0x20                                     |     r5 = 0x20;
    0x00060e10 cmp r1, 0x51                                      |     
    0x00060e12 ldrsb r0, [r4, r4]                                |     r0 = *((r4 + r4));
    0x00060e14 cmp r0, sb                                        |     
    0x00060e16 cmp r2, sl                                        |     
    0x00060e18 movs r5, 0x20                                     |     r5 = 0x20;
    0x00060e1a subs r3, 0x73                                     |     r3 -= 0x73;
    0x00060e1c movs r0, r0                                       |     
    0x00060e1e movs r0, r0                                       |     
    0x00060e20 str r5, [r2, r1]                                  |     *((r2 + r1)) = r5;
    0x00060e22 adcs r4, r0                                       |     __asm ("adcs r4, r0");
    0x00060e24 cmp r4, sl                                        |     
    0x00060e26 movs r5, 0x20                                     |     r5 = 0x20;
    0x00060e28 cmp r6, 0x51                                      |     
    0x00060e2a strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x00060e2c strh r0, [r4, r4]                                 |     *((r4 + r4)) = r0;
    0x00060e2e strb r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x00060e30 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00060e32 ldr r1, [r6, 0x44]                                |     r1 = *(0x60f30);
    0x00060e34 subs r5, 0x20                                     |     r5 -= 0x20;
    0x00060e36 orrs r0, r4                                       |     r0 |= r4;
    0x00060e38 strh r1, [r0, r5]                                 |     *((r0 + r5)) = r1;
    0x00060e3a movs r0, 0x45                                     |     r0 = 0x45;
    0x00060e3c ldr r0, [pc, 0x15c]                               |     r0 = *(0x60f9c);
    0x00060e3e ldr r6, [pc, 0x114]                               |     r6 = *(0x60f56);
    0x00060e40 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00060e42 strb r1, [r7, 1]                                  |     *((r7 + 1)) = r1;
    0x00060e44 movs r0, 0x65                                     |     r0 = 0x65;
    0x00060e46 movs r0, 0x3d                                     |     r0 = 0x3d;
    0x00060e48 strb r7, [r4, 0x10]                               |     *((r4 + 0x10)) = r7;
    0x00060e4a ldr r2, [r6, 0x14]                                |     r2 = *(0x60f6a);
    0x00060e4c str r7, [r4, 0x74]                                |     *((r4 + 0x74)) = r7;
    0x00060e4e strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x00060e50 movs r0, 0x27                                     |     r0 = 0x27;
    0x00060e52 ldr r0, [pc, 0x150]                               |     r0 = *(0x60fa6);
    0x00060e54 ldr r6, [pc, 0x114]                               |     r6 = *(0x60f6c);
    0x00060e56 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00060e58 ldr r1, [r6, 0x44]                                |     r1 = "UPDATE \"%w\".sqlite_sequence set name = %Q WHERE name = %Q";
    0x00060e5a strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x00060e5c ldrsh r5, [r4, r5]                                |     r5 = *((r4 + r5));
    0x00060e5e str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x00060e60 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x00060e62 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00060e64 strb r7, [r3, 0x11]                               |     *((r3 + 0x11)) = r7;
    0x00060e66 ldr r2, [r6, 0x14]                                |     r2 = *(0x60f80);
    0x00060e68 str r7, [r4, 0x74]                                |     *((r4 + 0x74)) = r7;
    0x00060e6a strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x00060e6c strb r0, [r5, 0xc]                                |     *((r5 + 0xc)) = r0;
    0x00060e6e ldr r1, [r6, 0x44]                                |     r1 = "UPDATE \"%w\".sqlite_sequence set name = %Q WHERE name = %Q";
    0x00060e70 movs r0, 0x2c                                     |     r0 = 0x2c;
    0x00060e72 str r5, [r4, r4]                                  |     *((r4 + r4)) = r5;
    0x00060e74 cmp r1, r5                                        |     
    0x00060e76 strh r4, [r1, r5]                                 |     *((r1 + r5)) = r4;
    0x00060e78 movs r0, 0x45                                     |     r0 = 0x45;
    0x00060e7a strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x00060e7c ldr r4, [r5, 0x14]                                |     r4 = *(0x60f68);
    0x00060e7e str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00060e80 strb r7, [r3, 9]                                  |     *((r3 + 9)) = r7;
    0x00060e82 ldr r5, [r4, 0x64]                                |     r5 = *(0x60fcc);
    0x00060e84 ldr r1, [r4, 0x54]                                |     r1 = *(0x60fbc);
    0x00060e86 ldrsh r5, [r4, r5]                                |     r5 = *((r4 + r5));
    0x00060e88 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00060e8a ldr r2, [r4, 0x44]                                |     r2 = *(0x60fac);
    0x00060e8c cmp r0, 0x65                                      |     
    0x00060e8e strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x00060e90 cmp r4, 0x6c                                      |     
    0x00060e92 movs r5, 0x20                                     |     r5 = 0x20;
    0x00060e94 cmp r1, 0x51                                      |     
    0x00060e96 cmp r0, r4                                        |     
    0x00060e98 add r6, sb                                        |     r6 += sb;
    0x00060e9a movs r0, 0x2c                                     |     r0 = 0x2c;
    0x00060e9c str r4, [r6, 0x24]                                |     *((r6 + 0x24)) = r4;
    0x00060e9e ldrsh r4, [r5, r5]                                |     r4 = *((r5 + r5));
    0x00060ea0 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x00060ea2 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00060ea4 subs r5, 0x20                                     |     r5 -= 0x20;
    0x00060ea6 movs r5, 0x20                                     |     r5 = 0x20;
    0x00060ea8 cmp r4, 0x51                                      |     
    0x00060eaa ldr r0, [r4, 0x60]                                |     r0 = *(0x60fc8);
    0x00060eac ldr r1, [r4, 0x54]                                |     r1 = *(0x60fbc);
    0x00060eae movs r0, 0x65                                     |     r0 = 0x65;
    0x00060eb0 movs r0, 0x3d                                     |     r0 = 0x3d;
    0x00060eb2 adcs r3, r0                                       |     __asm ("adcs r3, r0");
    0x00060eb4 cmp r3, sl                                        |     
    0x00060eb6 ldrsb r0, [r4, r4]                                |     r0 = *((r4 + r4));
    0x00060eb8 cmp r0, sb                                        |     
    0x00060eba movs r0, 0x4e                                     |     r0 = 0x4e;
    0x00060ebc ldrb r4, [r6, 5]                                  |     r4 = *((r6 + 5));
    0x00060ebe str r0, [r6, 0x54]                                |     *((r6 + 0x54)) = r0;
    0x00060ec0 movs r7, 0x3d                                     |     r7 = 0x3d;
    0x00060ec2 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00060ec4 ldr r2, [r4, 0x44]                                |     r2 = *(0x60fac);
    0x00060ec6 movs r7, 0x65                                     |     r7 = 0x65;
    0x00060ec8 strb r0, [r4, r0]                                 |     *((r4 + r0)) = r0;
    0x00060eca cmp r0, sb                                        |     
    0x00060ecc movs r0, 0x4e                                     |     r0 = 0x4e;
    0x00060ece str r5, [r4, r4]                                  |     *((r4 + r4)) = r5;
    0x00060ed0 ldrsb r0, [r4, r4]                                |     r0 = *((r4 + r4));
    0x00060ed2 cmp r0, sb                                        |     
    0x00060ed4 movs r0, 0x4e                                     |     r0 = 0x4e;
    0x00060ed6 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x00060ed8 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00060eda ldr r4, [pc, 0x80]                                |     r4 = *(0x60f5e);
    0x00060edc ldr r3, [pc, 0x124]                               |     r3 = *(0x61004);
    0x00060ede movs r0, 0x45                                     |     r0 = 0x45;
    0x00060ee0 strb r7, [r4, 0xc]                                |     *((r4 + 0xc)) = r7;
    0x00060ee2 ldr r1, [r6, 0x44]                                |     r1 = "UPDATE \"%w\".sqlite_sequence set name = %Q WHERE name = %Q";
    0x00060ee4 strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x00060ee6 ldrsh r5, [r4, r5]                                |     r5 = *((r4 + r5));
    0x00060ee8 strb r1, [r4, 0x15]                               |     *((r4 + 0x15)) = r1;
    0x00060eea ldr r4, [r6, 0x74]                                |     r4 = *(0x60fe0);
    0x00060eec ldr r1, [r5, 0x64]                                |     r1 = *(0x61030);
    0x00060eee str r4, [r4, 0x54]                                |     *((r4 + 0x54)) = r4;
    0x00060ef0 movs r5, 0x78                                     |     r5 = 0x78;
    0x00060ef2 movs r7, 0x25                                     |     r7 = 0x25;
    0x00060ef4 asrs r0, r4                                       |     r0 >>= r4;
    0x00060ef6 add r6, sb                                        |     r6 += sb;
    0x00060ef8 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00060efa strb r1, [r7, 1]                                  |     *((r7 + 1)) = r1;
    0x00060efc subs r5, 0x65                                     |     r5 -= 0x65;
    0x00060efe ldr r7, [r4, 0x10]                                |     r7 = *(0x60ff0);
    0x00060f00 str r6, [r5, 0x44]                                |     *((r5 + 0x44)) = r6;
    0x00060f02 ldrb r5, [r4, 1]                                  |     r5 = *((r4 + 1));
    0x00060f04 movs r0, 0x27                                     |     r0 = 0x27;
    0x00060f06 ldr r0, [pc, 0x150]                               |     r0 = *(0x6105a);
    0x00060f08 ldr r6, [pc, 0x114]                               |     r6 = *(0x61020);
    0x00060f0a movs r7, 0x20                                     |     r7 = 0x20;
    0x00060f0c strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x00060f0e ldr r4, [r5, 0x14]                                |     r4 = *(0x60fe0);
    0x00060f10 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00060f12 str r7, [r3, 0x14]                                |     *((r3 + 0x14)) = r7;
    0x00060f14 strb r5, [r6, 0x11]                               |     *((r6 + 0x11)) = r5;
    0x00060f16 ldr r7, [r5, 0x14]                                |     r7 = *(0x60fe0);
    0x00060f18 str r6, [r5, 0x44]                                |     *((r5 + 0x44)) = r6;
    0x00060f1a ldrb r5, [r4, 1]                                  |     r5 = *((r4 + 1));
    0x00060f1c movs r7, 0x5f                                     |     r7 = 0x5f;
    0x00060f1e ldrb r0, [r4, 0x10]                               |     r0 = *((r4 + 0x10));
    0x00060f20 movs r0, 0x7c                                     |     r0 = 0x7c;
    0x00060f22 str r5, [r4, r4]                                  |     *((r4 + r4)) = r5;
    0x00060f24 ldrb r0, [r4, 0x10]                               |     r0 = *((r4 + 0x10));
    0x00060f26 movs r0, 0x7c                                     |     r0 = 0x7c;
    0x00060f28 strb r3, [r6, 0x15]                               |     *((r6 + 0x15)) = r3;
    0x00060f2a strb r2, [r4, 0xd]                                |     *((r4 + 0xd)) = r2;
    0x00060f2c strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x00060f2e ldr r0, [r5, 0x60]                                |     r0 = *(0x6102c);
    0x00060f30 ldr r1, [r4, 0x54]                                |     r1 = *(0x61034);
    0x00060f32 cmp r4, 0x65                                      |     
    0x00060f34 str r5, [r4, 0x40]                                |     *((r4 + 0x40)) = r5;
    0x00060f36 adds r1, 0x2b                                     |     r1 += 0x2b;
    0x00060f38 cmp r1, 0x38                                      |     
    0x00060f3a cmp r0, r4                                        |     
    0x00060f3c strh r4, [r1, r5]                                 |     *((r1 + r5)) = r4;
    0x00060f3e movs r0, 0x45                                     |     r0 = 0x45;
    0x00060f40 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x00060f42 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00060f44 cmp r0, r4                                        |     
    0x00060f46 add r6, sb                                        |     r6 += sb;
    0x00060f48 ldrsb r0, [r4, r4]                                |     r0 = *((r4 + r4));
    0x00060f4a cmp r0, sb                                        |     
    0x00060f4c cmp r2, sl                                        |     
    0x00060f4e strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00060f50 ldr r2, [r4, 0x44]                                |     r2 = *(0x61024);
    0x00060f52 ldr r7, [r3, 0x64]                                |     r7 = "Cannot add a UNIQUE column";
    0x00060f54 ldr r1, [r4, 0x54]                                |     r1 = *(0x61034);
    0x00060f56 subs r5, 0x65                                     |     r5 -= 0x65;
    0x00060f58 str r5, [r4, r4]                                  |     *((r4 + r4)) = r5;
    0x00060f5a orrs r0, r4                                       |     r0 |= r4;
    0x00060f5c ldr r4, [pc, 0x13c]                               |     r4 = *(0x6109c);
    0x00060f5e adcs r4, r1                                       |     __asm ("adcs r4, r1");
    0x00060f60 cmp r4, sl                                        |     
    0x00060f62 ldr r0, [r4, 0x60]                                |     r0 = *(0x610fc);
    0x00060f64 str r7, [r5, 0x34]                                |     *((r5 + 0x34)) = r7;
    0x00060f66 strb r1, [r4, 0xd]                                |     *((r4 + 0xd)) = r1;
    0x00060f68 movs r0, 0x65                                     |     r0 = 0x65;
    0x00060f6a ldr r6, [pc, 0x104]                               |     r6 = *(0x61072);
    0x00060f6c movs r0, 0x44                                     |     r0 = 0x44;
    0x00060f6e strb r0, [r5, 0x10]                               |     *((r5 + 0x10)) = r0;
    0x00060f70 strb r1, [r7, 1]                                  |     *((r7 + 1)) = r1;
    0x00060f72 subs r5, 0x65                                     |     r5 -= 0x65;
    0x00060f74 strb r7, [r4, 0x10]                               |     *((r4 + 0x10)) = r7;
    0x00060f76 str r1, [r4, 0x24]                                |     *((r4 + 0x24)) = r1;
    0x00060f78 str r4, [r5, 0x54]                                |     *((r5 + 0x54)) = r4;
    0x00060f7a movs r0, 0x27                                     |     r0 = 0x27;
    0x00060f7c strh r7, [r1, r1]                                 |     *((r1 + r1)) = r7;
    0x00060f7e strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00060f80 strb r1, [r7, 1]                                  |     *((r7 + 1)) = r1;
    0x00060f82 subs r5, 0x65                                     |     r5 -= 0x65;
    0x00060f84 ldr r7, [r4, 0x10]                                |     r7 = *(0x610ac);
    0x00060f86 str r6, [r5, 0x44]                                |     *((r5 + 0x44)) = r6;
    0x00060f88 ldrb r5, [r4, 1]                                  |     r5 = *((r4 + 1));
    0x00060f8a movs r0, 0x27                                     |     r0 = 0x27;
    0x00060f8c strh r7, [r1, r1]                                 |     *((r1 + r1)) = r7;
    0x00060f8e strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00060f90 strb r1, [r7, 1]                                  |     *((r7 + 1)) = r1;
    0x00060f92 subs r5, 0x65                                     |     r5 -= 0x65;
    0x00060f94 strb r7, [r4, 0x10]                               |     *((r4 + 0x10)) = r7;
    0x00060f96 ldr r2, [r6, 0x14]                                |     
    0x00060f98 str r7, [r4, 0x74]                                |     *((r4 + 0x74)) = r7;
    0x00060f9a strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x00060f9c cmp r1, 0x27                                      |     
    0x00060f9e movs r3, r7                                       |     r3 = r7;
    0x00060fa0 strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x00060fa2 ldr r4, [r5, 0x14]                                |     r4 = *(0x60fe0);
    0x00060fa4 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00060fa6 strb r7, [r3, 0xd]                                |     *((r3 + 0xd)) = r7;
    0x00060fa8 strb r5, [r4, 5]                                  |     *((r4 + 5)) = r5;
    0x00060faa str r5, [r6, 0x54]                                |     *((r6 + 0x54)) = r5;
    0x00060fac str r6, [r5, 0x34]                                |     *((r5 + 0x34)) = r6;
    0x00060fae lsls r5, r4, 1                                    |     r5 = r4 << 1;
    0x00060fb0 str r5, [r2, r1]                                  |     *((r2 + r1)) = r5;
    0x00060fb2 adcs r4, r0                                       |     __asm ("adcs r4, r0");
    0x00060fb4 cmp r4, sl                                        |     
    0x00060fb6 movs r2, 0x20                                     |     r2 = 0x20;
    0x00060fb8 strb r5, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r5;
    0x00060fba cmp r6, 0x22                                      |     
    0x00060fbc strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x00060fbe ldr r4, [r5, 0x14]                                |     r4 = *(0x60fe0);
    0x00060fc0 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00060fc2 strb r7, [r3, 0xd]                                |     *((r3 + 0xd)) = r7;
    0x00060fc4 strb r5, [r4, 5]                                  |     *((r4 + 5)) = r5;
    0x00060fc6 str r5, [r6, 0x54]                                |     *((r6 + 0x54)) = r5;
    0x00060fc8 str r6, [r5, 0x34]                                |     *((r5 + 0x34)) = r6;
    0x00060fca movs r0, 0x65                                     |     r0 = 0x65;
    0x00060fcc str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x00060fce movs r0, 0x74                                     |     r0 = 0x74;
    0x00060fd0 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x00060fd2 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00060fd4 subs r5, 0x20                                     |     r5 -= 0x20;
    0x00060fd6 movs r5, 0x20                                     |     r5 = 0x20;
    0x00060fd8 movs r0, 0x51                                     |     r0 = 0x51;
    0x00060fda ldr r0, [pc, 0x15c]                               |     r0 = *(0x6113a);
    0x00060fdc strh r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x00060fde movs r0, 0x45                                     |     r0 = 0x45;
    0x00060fe0 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x00060fe2 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00060fe4 subs r5, 0x20                                     |     r5 -= 0x20;
    0x00060fe6 movs r5, 0x20                                     |     r5 = 0x20;
    0x00060fe8 lsls r1, r2, 1                                    |     r1 = r2 << 1;
    0x00060fea movs r0, r0                                       |     
    0x00060fec str r5, [r2, r1]                                  |     *((r2 + r1)) = r5;
    0x00060fee adcs r4, r0                                       |     __asm ("adcs r4, r0");
    0x00060ff0 cmp r4, sl                                        |     
    0x00060ff2 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00060ff4 ldr r1, [r6, 0x44]                                |     r1 = *(0x610b6);
    0x00060ff6 strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x00060ff8 ldrsh r5, [r4, r5]                                |     r5 = *((r4 + r5));
    0x00060ffa str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00060ffc strb r5, [r5, 1]                                  |     *((r5 + 1)) = r5;
    0x00060ffe ldr r7, [r3, 0x54]                                |     r7 = *(0x61058);
    0x00061000 strb r1, [r4, 0xd]                                |     *((r4 + 0xd)) = r1;
    0x00061002 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00061004 movs r0, 0x72                                     |     r0 = 0x72;
    0x00061006 cmp r3, sl                                        |     
    0x00061008 movs r0, 0x54                                     |     r0 = 0x54;
    0x0006100a strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x0006100c movs r0, 0x6c                                     |     r0 = 0x6c;
    0x0006100e movs r0, 0x3d                                     |     r0 = 0x3d;
    0x00061010 strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x00061012 ldr r4, [r5, 0x14]                                |     r4 = *(0x60fe0);
    0x00061014 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00061016 strb r7, [r3, 9]                                  |     *((r3 + 9)) = r7;
    0x00061018 ldr r5, [r4, 0x64]                                |     r5 = *(0x61044);
    0x0006101a ldr r1, [r4, 0x54]                                |     r1 = *(0x61034);
    0x0006101c ldrsh r5, [r4, r5]                                |     r5 = *((r4 + r5));
    0x0006101e strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x00061020 str r1, [r5, 0x74]                                |     *((r5 + 0x74)) = r1;
    0x00061022 str r7, [r4, 0x54]                                |     *((r4 + 0x54)) = r7;
    0x00061024 cmp r0, 0x72                                      |     
    0x00061026 strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x00061028 cmp r4, 0x6c                                      |     
    0x0006102a movs r5, 0x20                                     |     r5 = 0x20;
    0x0006102c cmp r1, 0x51                                      |     
    0x0006102e movs r0, 0x2c                                     |     r0 = 0x2c;
    0x00061030 str r4, [r6, 0x24]                                |     *((r6 + 0x24)) = r4;
    0x00061032 ldrsh r4, [r5, r5]                                |     r4 = *((r5 + r5));
    0x00061034 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x00061036 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00061038 subs r5, 0x20                                     |     r5 -= 0x20;
    0x0006103a movs r5, 0x20                                     |     r5 = 0x20;
    0x0006103c movs r0, 0x51                                     |     r0 = 0x51;
    0x0006103e ldr r0, [pc, 0x15c]                               |     r0 = *(0x6119e);
    0x00061040 strh r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x00061042 movs r0, 0x45                                     |     r0 = 0x45;
    0x00061044 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x00061046 movs r3, r7                                       |     r3 = r7;
    0x00061048 str r3, [r0, 0x14]                                |     *((r0 + 0x14)) = r3;
    0x0006104a ldr r6, [r5, 0x64]                                |     r6 = *(0x610a8);
    0x0006104c strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x0006104e str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00061050 str r4, [r4, 0x44]                                |     *((r4 + 0x44)) = r4;
    0x00061052 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00061054 str r0, [r4, r0]                                  |     *((r4 + r0)) = r0;
    0x00061056 ldr r1, [pc, 0x148]                               |     r1 = *(0x611a2);
    0x00061058 adcs r5, r1                                       |     __asm ("adcs r5, r1");
    0x0006105a ldr r2, [r2, r5]                                  |     r2 = *(0x61086);
    0x0006105c ldr r3, [pc, 0x80]                                |     r3 = *(0x610e0);
    0x0006105e ldr r5, [r0, r5]                                  |     r5 = *(0x6119e);
    0x00061060 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x00061062 ldr r7, [r5, 0x44]                                |     r7 = *(0x611e2);
    0x00061064 ldr r5, [r6, 0x54]                                |     
    0x00061066 lsls r6, r5, 1                                    |     r6 = r5 << 1;
    0x00061068 str r3, [r0, 0x14]                                |     *((r0 + 0x14)) = r3;
    0x0006106a ldr r6, [r5, 0x64]                                |     r6 = *(0x61160);
    0x0006106c strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x0006106e str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00061070 str r4, [r4, 0x44]                                |     *((r4 + 0x44)) = r4;
    0x00061072 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00061074 strb r0, [r4, r4]                                 |     *((r4 + r4)) = r0;
    0x00061076 ldr r1, [pc, 0x138]                               |     r1 = *(0x611b2);
    0x00061078 strb r1, [r2, r5]                                 |     *((r2 + r5)) = r1;
    0x0006107a movs r0, 0x45                                     |     r0 = 0x45;
    0x0006107c ldr r3, [r4, 0x74]                                |     r3 = *(0x61054);
    0x0006107e strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x00061080 ldr r5, [r5, 0x64]                                |     r5 = *(0x61160);
    0x00061082 movs r0, r0                                       |     
    0x00061084 str r3, [r0, 0x14]                                |     *((r0 + 0x14)) = r3;
    0x00061086 ldr r6, [r5, 0x64]                                |     r6 = *(0x611c4);
    0x00061088 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x0006108a str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x0006108c str r4, [r4, 0x44]                                |     *((r4 + 0x44)) = r4;
    0x0006108e str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00061090 strh r0, [r4, r0]                                 |     *((r4 + r0)) = r0;
    0x00061092 mov r5, r8                                        |     r5 = r8;
    0x00061094 strh r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x00061096 ldr r6, [pc, 0x114]                               |     r6 = *(0x611ae);
    0x00061098 cmp r3, r8                                        |     
    0x0006109a movs r0, 0x53                                     |     r0 = 0x53;
    0x0006109c ldr r3, [r4, 0x74]                                |     r3 = *(0x61054);
    0x0006109e strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x000610a0 ldr r5, [r5, 0x64]                                |     r5 = *((r5 + 0x64));
    0x000610a2 strb r0, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r0;
    0x000610a4 strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x000610a6 movs r0, 0x68                                     |     r0 = 0x68;
    0x000610a8 ldr r6, [r5, 0x74]                                |     r6 = *((r5 + 0x74));
    0x000610aa cmp r5, 0x6e                                      |     
    0x000610ac strb r6, [r1, r5]                                 |     *((r1 + r5)) = r6;
    0x000610ae ldr r4, [pc, 0x130]                               |     r4 = *(0x611e2);
    0x000610b0 str r0, [r4, 0x40]                                |     *((r4 + 0x40)) = r0;
    0x000610b2 str r5, [r4, 0x64]                                |     *((r4 + 0x64)) = r5;
    0x000610b4 strb r1, [r4, 0x15]                               |     *((r4 + 0x15)) = r1;
    0x000610b6 strb r4, [r5, 0x11]                               |     *((r5 + 0x11)) = r4;
    0x000610b8 strb r0, [r4, 0x18]                               |     *((r4 + 0x18)) = r0;
    0x000610ba ldr r1, [r4, 0x44]                                |     r1 = *(0x61226);
    0x000610bc str r5, [r6, 0x54]                                |     *((r6 + 0x54)) = r5;
    0x000610be movs r0, r0                                       |     
    0x000610c0 str r3, [r0, 0x14]                                |     *((r0 + 0x14)) = r3;
    0x000610c2 ldr r6, [r5, 0x64]                                |     r6 = *((r5 + 0x64));
    0x000610c4 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x000610c6 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x000610c8 str r4, [r4, 0x44]                                |     *((r4 + 0x44)) = r4;
    0x000610ca str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x000610cc ldr r6, [pc, 0x80]                                |     r6 = *(0x61150);
    0x000610ce strb r7, [r1, r1]                                 |     *((r1 + r1)) = r7;
    0x000610d0 ldr r6, [pc, 0x80]                                |     r6 = *(0x61154);
    0x000610d2 ldr r4, [pc, 0x154]                               |     r4 = *(0x6122a);
    0x000610d4 movs r0, 0x4c                                     |     r0 = 0x4c;
    0x000610d6 ldr r3, [r4, 0x74]                                |     r3 = *(0x6129e);
    0x000610d8 strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x000610da ldr r5, [r5, 0x64]                                |     r5 = *((r5 + 0x64));
    0x000610dc strb r0, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r0;
    0x000610de strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x000610e0 movs r0, 0x68                                     |     r0 = 0x68;
    0x000610e2 str r4, [r4, 0x54]                                |     *((r4 + 0x54)) = r4;
    0x000610e4 str r6, [r4, 0x14]                                |     *((r4 + 0x14)) = r6;
    0x000610e6 ldr r5, [r6, 0x44]                                |     r5 = "virtual tables may not be altered";
    0x000610e8 movs r0, 0x74                                     |     r0 = 0x74;
    0x000610ea str r6, [r6, 0x14]                                |     *((r6 + 0x14)) = r6;
    0x000610ec strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x000610ee movs r0, 0x65                                     |     r0 = 0x65;
    0x000610f0 strb r6, [r1, r5]                                 |     *((r1 + r5)) = r6;
    0x000610f2 ldr r4, [pc, 0x130]                               |     r4 = *(0x61226);
    0x000610f4 movs r0, r0                                       |     
    0x000610f6 movs r0, r0                                       |     
    0x000610f8 str r3, [r0, 0x14]                                |     *((r0 + 0x14)) = r3;
    0x000610fa ldr r6, [r5, 0x64]                                |     
    0x000610fc strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x000610fe str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00061100 str r4, [r4, 0x44]                                |     *((r4 + 0x44)) = r4;
    0x00061102 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00061104 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x00061106 ldr r7, [r5, 0x44]                                |     r7 = "sqlite_altertab_%s";
    0x00061108 ldr r5, [r6, 0x54]                                |     r5 = *(0x61250);
    0x0006110a movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0006110c ldr r7, [r6, 0x14]                                |     r7 = *(0x61210);
    0x0006110e ldr r4, [r6, 4]                                   |     r4 = *(0x61200);
    0x00061110 ldr r0, [r4, 0x60]                                |     r0 = *(0x61260);
    0x00061112 ldr r7, [r5, 0x64]                                |     r7 = "UPDATE %Q.%s SET type='table', name=%Q, tbl_name=%Q, rootpage=0, sql=%Q WHERE rowid=#%d";
    0x00061114 str r5, [r5, 0x30]                                |     *((r5 + 0x30)) = r5;
    0x00061116 ldr r7, [r5, 0x64]                                |     r7 = "UPDATE %Q.%s SET type='table', name=%Q, tbl_name=%Q, rootpage=0, sql=%Q WHERE rowid=#%d";
    0x00061118 strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x0006111a ldr r1, [r4, 0x64]                                |     r1 = *(0x61264);
    0x0006111c movs r0, 0x74                                     |     r0 = 0x74;
    0x0006111e str r4, [r4, 0x54]                                |     *((r4 + 0x54)) = r4;
    0x00061120 str r6, [r4, 0x14]                                |     *((r4 + 0x14)) = r6;
    0x00061122 ldr r5, [r6, 0x44]                                |     r5 = *(0x61240);
    0x00061124 lsls r4, r6, 1                                    |     r4 = r6 << 1;
    0x00061126 movs r0, r0                                       |     
    0x00061128 str r5, [r2, r1]                                  |     *((r2 + r1)) = r5;
    0x0006112a adcs r4, r0                                       |     __asm ("adcs r4, r0");
    0x0006112c cmp r4, sl                                        |     
    0x0006112e movs r2, 0x20                                     |     r2 = 0x20;
    0x00061130 strb r5, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r5;
    0x00061132 cmp r6, 0x22                                      |     
    0x00061134 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x00061136 strh r0, [r4, r4]                                 |     *((r4 + r4)) = r0;
    0x00061138 strb r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x0006113a strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x0006113c ldr r1, [r6, 0x44]                                |     r1 = *(0x61240);
    0x0006113e subs r5, 0x20                                     |     r5 -= 0x20;
    0x00061140 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00061142 str r5, [r6, 0x24]                                |     *((r6 + 0x24)) = r5;
    0x00061144 strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x00061146 cmp r0, 0x72                                      |     
    0x00061148 strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x0006114a cmp r4, 0x6c                                      |     
    0x0006114c cmp r4, 0x31                                      |     
    0x0006114e str r5, [r4, 0x40]                                |     *((r4 + 0x40)) = r5;
    0x00061150 movs r0, 0x29                                     |     r0 = 0x29;
    0x00061152 ldrb r4, [r7, 0x11]                               |     r4 = *((r7 + 0x11));
    0x00061154 movs r7, 0x20                                     |     r7 = 0x20;
    0x00061156 movs r0, 0x2c                                     |     r0 = 0x2c;
    0x00061158 movs r0, 0x27                                     |     r0 = 0x27;
    0x0006115a ldrb r4, [r7, 0x11]                               |     r4 = *((r7 + 0x11));
    0x0006115c movs r5, 0x20                                     |     r5 = 0x20;
    0x0006115e movs r0, 0x51                                     |     r0 = 0x51;
    0x00061160 ldrb r4, [r7, 0x11]                               |     r4 = *((r7 + 0x11));
    0x00061162 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00061164 str r5, [r6, 0x24]                                |     *((r6 + 0x24)) = r5;
    0x00061166 strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x00061168 cmp r0, 0x72                                      |     
    0x0006116a strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x0006116c cmp r4, 0x6c                                      |     
    0x0006116e str r5, [r4, 0x40]                                |     *((r4 + 0x40)) = r5;
    0x00061170 movs r0, 0x29                                     |     r0 = 0x29;
    0x00061172 ldr r0, [pc, 0x15c]                               |     r0 = *(0x612d2);
    0x00061174 strh r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x00061176 movs r0, 0x45                                     |     r0 = 0x45;
    0x00061178 ldrb r4, [r6, 5]                                  |     r4 = *((r6 + 5));
    0x0006117a str r0, [r6, 0x54]                                |     *((r6 + 0x54)) = r0;
    0x0006117c subs r5, 0x20                                     |     r5 -= 0x20;
    0x0006117e movs r7, 0x20                                     |     r7 = 0x20;
    0x00061180 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00061182 ldr r2, [r4, 0x44]                                |     r2 = *(0x61244);
    0x00061184 movs r7, 0x65                                     |     r7 = 0x65;
    0x00061186 asrs r0, r4                                       |     r0 >>= r4;
    0x00061188 add r6, sb                                        |     r6 += sb;
    0x0006118a ldr r0, [r4, 0x60]                                |     r0 = *(0x61260);
    0x0006118c ldr r1, [r4, 0x54]                                |     r1 = *(0x61254);
    0x0006118e movs r0, 0x65                                     |     r0 = 0x65;
    0x00061190 movs r0, 0x3d                                     |     r0 = 0x3d;
    0x00061192 str r5, [r4, r4]                                  |     *((r4 + r4)) = r5;
    0x00061194 movs r0, r0                                       |     
    0x00061196 movs r0, r0                                       |     
    0x00061198 ldr r6, [r6, 0x14]                                |     r6 = *(0x61210);
    0x0006119a strb r2, [r6, 0x11]                               |     *((r6 + 0x11)) = r2;
    0x0006119c str r5, [r6, 0x14]                                |     *((r6 + 0x14)) = r5;
    0x0006119e movs r0, 0x6c                                     |     r0 = 0x6c;
    0x000611a0 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x000611a2 ldr r2, [r4, 0x44]                                |     r2 = *(0x61244);
    0x000611a4 strb r5, [r4, 0xd]                                |     *((r4 + 0xd)) = r5;
    0x000611a6 ldr r0, [r4, 0x50]                                |     r0 = *(0x61250);
    0x000611a8 ldrb r1, [r4, 5]                                  |     r1 = *((r4 + 5));
    0x000611aa ldr r0, [r4, 0x60]                                |     r0 = *(0x61260);
    0x000611ac strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x000611ae str r0, [r4, 0x20]                                |     *((r4 + 0x20)) = r0;
    0x000611b0 movs r0, 0x65                                     |     r0 = 0x65;
    0x000611b2 ldr r1, [r4, 0x44]                                |     r1 = *(0x61244);
    0x000611b4 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x000611b6 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x000611b8 lsls r4, r4, 1                                    |     r4 <<= 1;
    0x000611ba movs r0, r0                                       |     
    0x000611bc str r3, [r0, 0x14]                                |     *((r0 + 0x14)) = r3;
    0x000611be ldr r6, [r5, 0x64]                                |     r6 = *(0x612a4);
    0x000611c0 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x000611c2 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x000611c4 str r4, [r4, 0x44]                                |     *((r4 + 0x44)) = r4;
    0x000611c6 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x000611c8 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x000611ca ldr r7, [r5, 0x44]                                |     r7 = *(0x61284);
    0x000611cc ldr r5, [r6, 0x54]                                |     r5 = *(0x612f8);
    0x000611ce movs r0, 0x6e                                     |     r0 = 0x6e;
    0x000611d0 ldr r4, [r6, 0x74]                                |     r4 = *(0x61318);
    0x000611d2 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x000611d4 strb r0, [r4, 0x18]                               |     *((r4 + 0x18)) = r0;
    0x000611d6 str r1, [r5, 0x54]                                |     *((r5 + 0x54)) = r1;
    0x000611d8 lsls r7, r6, 1                                    |     r7 = r6 << 1;
    0x000611da movs r0, r0                                       |     
    0x000611dc strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x000611de ldr r4, [r5, 0x14]                                |     r4 = "name='%q' AND type='table';
    0x000611e0 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x000611e2 str r7, [r3, 0x14]                                |     *((r3 + 0x14)) = r7;
    0x000611e4 strb r4, [r5, 0x11]                               |     *((r5 + 0x11)) = r4;
    0x000611e6 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x000611e8 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x000611ea ldrsh r2, [r4, r5]                                |     r2 = *((r4 + r5));
    0x000611ec strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x000611ee movs r0, r0                                       |     
    0x000611f0 ldr r1, [r5, 0x64]                                |     r1 = "statement too long";
    0x000611f2 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x000611f4 strb r2, [r6, 9]                                  |     *((r6 + 9)) = r2;
    0x000611f6 strb r5, [r6, 1]                                  |     *((r6 + 1)) = r5;
    0x000611f8 lsls r4, r6, 1                                    |     r4 = r6 << 1;
    0x000611fa movs r0, r0                                       |     
    0x000611fc ldr r5, [r6, 0x64]                                |     r5 = *(0x61308);
    0x000611fe str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x00061200 ldr r3, [r4, 0x74]                                |     r3 = imp.mkdir;
    0x00061202 ldr r7, [r4, 0x64]                                |     r7 = "invalid rootpage";
    0x00061204 ldrb r1, [r5, 9]                                  |     r1 = *((r5 + 9));
    0x00061206 str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x00061208 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x0006120a ldr r7, [r5, 0x34]                                |     r7 = "database schema is locked: %s";
    0x0006120c ldr r5, [r4, 0x64]                                |     r5 = "invalid rootpage";
    0x0006120e movs r0, 0x3a                                     |     r0 = 0x3a;
    0x00061210 movs r5, 0x22                                     |     r5 = 0x22;
    0x00061212 movs r2, 0x54                                     |     r2 = 0x54;
    0x00061214 movs r0, r0                                       |     
    0x00061216 movs r0, r0                                       |     
    0x00061218 strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x0006121a ldr r4, [r5, 0x14]                                |     r4 = "SELECT tbl,idx,stat FROM %Q.sqlite_stat1";
    0x0006121c str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x0006121e strb r7, [r3, 0xd]                                |     *((r3 + 0xd)) = r7;
    0x00061220 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00061222 movs r5, 0x74                                     |     r5 = 0x74;
    0x00061224 lsls r4, r4, 1                                    |     r4 <<= 1;
    0x00061226 movs r0, r0                                       |     
    0x00061228 cmp r4, r8                                        |     
    0x0006122a cmp r4, sb                                        |     
    0x0006122c cmp r4, sl                                        |     
    0x0006122e mov r0, r4                                        |     r0 = r4;
    0x00061230 ldr r7, [pc, 0x148]                               |     r7 = *(0x6137c);
    0x00061232 movs r0, 0x4d                                     |     r0 = 0x4d;
    0x00061234 str r5, [r4, r4]                                  |     *((r4 + r4)) = r5;
    0x00061236 movs r5, 0x2e                                     |     r5 = 0x2e;
    0x00061238 movs r0, 0x73                                     |     r0 = 0x73;
    0x0006123a ldr r0, [pc, 0x15c]                               |     r0 = *(0x6139a);
    0x0006123c strh r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x0006123e movs r0, 0x45                                     |     r0 = 0x45;
    0x00061240 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x00061242 movs r5, 0x3d                                     |     r5 = 0x3d;
    0x00061244 lsls r1, r2, 1                                    |     r1 = r2 << 1;
    0x00061246 movs r0, r0                                       |     
    0x00061248 str r5, [r2, r1]                                  |     *((r2 + r1)) = r5;
    0x0006124a adcs r4, r0                                       |     __asm ("adcs r4, r0");
    0x0006124c cmp r4, sl                                        |     
    0x0006124e movs r5, 0x20                                     |     r5 = 0x20;
    0x00061250 cmp r6, 0x51                                      |     
    0x00061252 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x00061254 strh r0, [r4, r4]                                 |     *((r4 + r4)) = r0;
    0x00061256 strb r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x00061258 strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x0006125a ldr r7, [r5, 0x74]                                |     r7 = *(0x613e4);
    0x0006125c strb r4, [r6, 1]                                  |     *((r6 + 1)) = r4;
    0x0006125e str r1, [r4, 0x74]                                |     *((r4 + 0x74)) = r1;
    0x00061260 subs r5, 0x65                                     |     r5 -= 0x65;
    0x00061262 str r5, [r4, 0x40]                                |     *((r4 + 0x40)) = r5;
    0x00061264 ldrsb r0, [r4, r4]                                |     r0 = *((r4 + r4));
    0x00061266 cmp r0, sb                                        |     
    0x00061268 cmp r2, sl                                        |     
    0x0006126a movs r3, 0x20                                     |     r3 = 0x20;
    0x0006126c str r5, [r4, 0x40]                                |     *((r4 + 0x40)) = r5;
    0x0006126e asrs r0, r4                                       |     r0 >>= r4;
    0x00061270 add r6, sb                                        |     r6 += sb;
    0x00061272 strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x00061274 ldr r7, [r5, 0x74]                                |     r7 = *(0x613e4);
    0x00061276 strb r4, [r6, 1]                                  |     *((r6 + 1)) = r4;
    0x00061278 str r1, [r4, 0x74]                                |     *((r4 + 0x74)) = r1;
    0x0006127a subs r5, 0x65                                     |     r5 -= 0x65;
    0x0006127c movs r5, 0x23                                     |     r5 = 0x23;
    0x0006127e lsls r4, r4, 1                                    |     r4 <<= 1;
    0x00061280 strh r3, [r0, r1]                                 |     *((r0 + r1)) = r3;
    0x00061282 adcs r5, r0                                       |     __asm ("adcs r5, r0");
    0x00061284 cmp r4, sl                                        |     
    0x00061286 strb r0, [r4, r0]                                 |     *((r4 + r0)) = r0;
    0x00061288 rsbs r1, r0, 0                                    |     r1 = r0 - ;
    0x0006128a cmp r4, sb                                        |     
    0x0006128c movs r5, 0x20                                     |     r5 = 0x20;
    0x0006128e cmp r6, 0x51                                      |     
    0x00061290 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x00061292 movs r5, 0x28                                     |     r5 = 0x28;
    0x00061294 cmp r1, 0x73                                      |     
    0x00061296 movs r0, r0                                       |     
    0x00061298 str r4, [r6, 0x24]                                |     *((r6 + 0x24)) = r4;
    0x0006129a lsls r4, r5, 1                                    |     r4 = r5 << 1;
    0x0006129c strh r3, [r0, r1]                                 |     *((r0 + r1)) = r3;
    0x0006129e adcs r5, r0                                       |     __asm ("adcs r5, r0");
    0x000612a0 cmp r4, sl                                        |     
    0x000612a2 ldrsb r0, [r4, r0]                                |     r0 = *((r4 + r0));
    0x000612a4 strh r1, [r1, r1]                                 |     *((r1 + r1)) = r1;
    0x000612a6 strb r4, [r2, r5]                                 |     *((r2 + r5)) = r4;
    0x000612a8 ldr r4, [pc, 0x104]                               |     r4 = "cannot commit - no transaction is active";
    0x000612aa strb r0, [r4, r0]                                 |     *((r4 + r0)) = r0;
    0x000612ac rsbs r1, r0, 0                                    |     r1 = r0 - ;
    0x000612ae cmp r4, sb                                        |     
    0x000612b0 movs r5, 0x20                                     |     r5 = 0x20;
    0x000612b2 lsls r4, r2, 1                                    |     r4 = r2 << 1;
    0x000612b4 str r5, [r2, r1]                                  |     *((r2 + r1)) = r5;
    0x000612b6 adcs r4, r0                                       |     __asm ("adcs r4, r0");
    0x000612b8 cmp r4, sl                                        |     
    0x000612ba movs r5, 0x20                                     |     r5 = 0x20;
    0x000612bc cmp r6, 0x51                                      |     
    0x000612be strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x000612c0 strh r0, [r4, r4]                                 |     *((r4 + r4)) = r0;
    0x000612c2 strb r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x000612c4 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x000612c6 strb r1, [r7, 1]                                  |     *((r7 + 1)) = r1;
    0x000612c8 subs r5, 0x65                                     |     r5 -= 0x65;
    0x000612ca strb r7, [r4, 0x10]                               |     *((r4 + 0x10)) = r7;
    0x000612cc str r1, [r4, 0x24]                                |     *((r4 + 0x24)) = r1;
    0x000612ce str r4, [r5, 0x54]                                |     *((r5 + 0x54)) = r4;
    0x000612d0 cmp r4, 0x27                                      |     
    0x000612d2 ldr r0, [r4, 0x60]                                |     r0 = *(0x61410);
    0x000612d4 ldr r1, [r4, 0x54]                                |     r1 = *(0x61404);
    0x000612d6 subs r5, 0x65                                     |     r5 -= 0x65;
    0x000612d8 str r5, [r4, r4]                                  |     *((r4 + r4)) = r5;
    0x000612da movs r0, 0x2c                                     |     r0 = 0x2c;
    0x000612dc str r4, [r6, 0x24]                                |     *((r6 + 0x24)) = r4;
    0x000612de ldrsh r4, [r5, r5]                                |     r4 = *((r5 + r5));
    0x000612e0 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x000612e2 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x000612e4 movs r5, 0x3d                                     |     r5 = 0x3d;
    0x000612e6 cmp r4, 0x51                                      |     
    0x000612e8 strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x000612ea ldr r7, [r5, 0x74]                                |     r7 = *(0x613e4);
    0x000612ec strb r4, [r6, 1]                                  |     *((r6 + 1)) = r4;
    0x000612ee str r1, [r4, 0x74]                                |     *((r4 + 0x74)) = r1;
    0x000612f0 subs r5, 0x65                                     |     r5 -= 0x65;
    0x000612f2 cmp r4, 0x30                                      |     
    0x000612f4 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x000612f6 ldr r1, [r6, 0x44]                                |     r1 = *(0x612e8);
    0x000612f8 movs r5, 0x3d                                     |     r5 = 0x3d;
    0x000612fa movs r0, 0x51                                     |     r0 = 0x51;
    0x000612fc ldr r0, [pc, 0x15c]                               |     r0 = *(0x6145c);
    0x000612fe strh r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x00061300 movs r0, 0x45                                     |     r0 = 0x45;
    0x00061302 ldr r2, [r6, 0x74]                                |     r2 = *(0x61318);
    0x00061304 ldr r7, [r6, 0x14]                                |     r7 = *(0x612b8);
    0x00061306 subs r5, 0x64                                     |     r5 -= 0x64;
    0x00061308 movs r5, 0x23                                     |     r5 = 0x23;
    0x0006130a lsls r4, r4, 1                                    |     r4 <<= 1;
    0x0006130c str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x0006130e str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00061310 movs r7, 0x3d                                     |     r7 = 0x3d;
    0x00061312 strb r5, [r4, 4]                                  |     *((r4 + 4)) = r5;
    0x00061314 movs r0, 0x27                                     |     r0 = 0x27;
    0x00061316 ldr r6, [pc, 0x104]                               |     r6 = *(0x6141e);
    0x00061318 movs r0, 0x44                                     |     r0 = 0x44;
    0x0006131a ldrb r4, [r6, 5]                                  |     r4 = *((r6 + 5));
    0x0006131c str r0, [r6, 0x54]                                |     *((r6 + 0x54)) = r0;
    0x0006131e movs r7, 0x3d                                     |     r7 = 0x3d;
    0x00061320 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00061322 ldr r2, [r4, 0x44]                                |     r2 = *(0x613f4);
    0x00061324 movs r7, 0x65                                     |     r7 = 0x65;
    0x00061326 movs r0, r0                                       |     
    0x00061328 str r1, [r4, 0x44]                                |     *((r4 + 0x44)) = r1;
    0x0006132a strb r4, [r4, 9]                                  |     *((r4 + 9)) = r4;
    0x0006132c movs r0, r0                                       |     
    0x0006132e movs r0, r0                                       |     
    0x00061330 str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x00061332 str r4, [r5, 0x54]                                |     *((r5 + 0x54)) = r4;
    0x00061334 strb r3, [r4, 0x11]                               |     *((r4 + 0x11)) = r3;
    0x00061336 str r1, [r5, 0x44]                                |     *((r5 + 0x44)) = r1;
    0x00061338 movs r0, r0                                       |     
    0x0006133a movs r0, r0                                       |     
    0x0006133c str r4, [r4, 0x14]                                |     *((r4 + 0x14)) = r4;
    0x0006133e str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00061340 str r2, [r4, 0x14]                                |     *((r4 + 0x14)) = r2;
    0x00061342 str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x00061344 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00061346 ldr r3, [r4, 4]                                   |     r3 = *(0x613b4);
    0x00061348 ldr r5, [r4, 0x54]                                |     r5 = *(0x61404);
    0x0006134a movs r0, 0x61                                     |     r0 = 0x61;
    0x0006134c strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x0006134e ldr r0, [r4, 0x40]                                |     r0 = *(0x613f0);
    0x00061350 str r7, [r5, 0x34]                                |     *((r5 + 0x34)) = r7;
    0x00061352 str r3, [r5, 0x54]                                |     *((r5 + 0x54)) = r3;
    0x00061354 subs r2, 0x64                                     |     r2 -= 0x64;
    0x00061356 movs r5, 0x20                                     |     r5 = 0x20;
    0x00061358 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0006135a movs r0, r0                                       |     
    0x0006135c strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x0006135e strb r1, [r4, 0x11]                               |     *((r4 + 0x11)) = r1;
    0x00061360 ldr r5, [r4, 0x54]                                |     r5 = *(0x61404);
    0x00061362 ldr r5, [r4, 0x64]                                |     r5 = *(0x61414);
    0x00061364 movs r0, 0x74                                     |     r0 = 0x74;
    0x00061366 ldr r4, [r6, 0x74]                                |     r4 = *(0x61492);
    0x00061368 movs r0, 0x6f                                     |     r0 = 0x6f;
    0x0006136a ldr r4, [r5, 0x74]                                |     r4 = *(0x61488);
    0x0006136c str r6, [r5, 0x74]                                |     *((r5 + 0x74)) = r6;
    0x0006136e movs r0, r0                                       |     
    0x00061370 ldr r1, [r5, 0x64]                                |     r1 = *(0x61478);
    0x00061372 str r6, [r6, 0x14]                                |     *((r6 + 0x14)) = r6;
    0x00061374 ldr r4, [r5, 0x14]                                |     r4 = *(0x61428);
    0x00061376 movs r0, 0x64                                     |     r0 = 0x64;
    0x00061378 ldr r2, [r6, 0x74]                                |     r2 = *(0x61492);
    0x0006137a strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x0006137c str r0, [r6, 0x14]                                |     *((r6 + 0x14)) = r0;
    0x0006137e str r7, [r4, 0x54]                                |     *((r4 + 0x54)) = r7;
    0x00061380 movs r0, r0                                       |     
    0x00061382 movs r0, r0                                       |     
    0x00061384 cmp r3, sl                                        |     
    0x00061386 cmp r4, sb                                        |     
    0x00061388 strb r3, [r0, r1]                                 |     *((r0 + r1)) = r3;
    0x0006138a strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x0006138c ldr r2, [r4, 0x44]                                |     r2 = *(0x6146c);
    0x0006138e ldr r4, [r5, 0x10]                                |     r4 = *(0x61424);
    0x00061390 ldrb r4, [r4, 1]                                  |     r4 = *((r4 + 1));
    0x00061392 strb r4, [r5, 0xc]                                |     *((r5 + 0xc)) = r4;
    0x00061394 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00061396 movs r0, 0x74                                     |     r0 = 0x74;
    0x00061398 strh r6, [r0, r1]                                 |     *((r0 + r1)) = r6;
    0x0006139a ldr r5, [pc, 0x13c]                               |     
    0x0006139c movs r5, 0x20                                     |     r5 = 0x20;
    0x0006139e cmp r6, 0x51                                      |     
    0x000613a0 strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x000613a2 ldr r4, [r5, 0x14]                                |     r4 = *(0x614ee);
    0x000613a4 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x000613a6 strb r7, [r3, 0xd]                                |     *((r3 + 0xd)) = r7;
    0x000613a8 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x000613aa adds r1, 0x74                                     |     r1 += 0x74;
    0x000613ac movs r0, r0                                       |     
    0x000613ae movs r0, r0                                       |     
    0x000613b0 str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x000613b2 ldr r6, [r5, 0x64]                                |     r6 = *(0x6153e);
    0x000613b4 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x000613b6 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x000613b8 ldr r7, [r5, 0x54]                                |     r7 = *(0x6152e);
    0x000613ba ldr r5, [r5, 0x14]                                |     r5 = *(0x614ee);
    0x000613bc movs r0, 0x74                                     |     r0 = 0x74;
    0x000613be movs r0, 0x2d                                     |     r0 = 0x2d;
    0x000613c0 ldr r6, [r5, 0x74]                                |     r6 = *(0x61562);
    0x000613c2 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x000613c4 str r2, [r6, 0x14]                                |     *((r6 + 0x14)) = r2;
    0x000613c6 strb r6, [r5, 0xd]                                |     *((r5 + 0xd)) = r6;
    0x000613c8 str r1, [r4, 0x34]                                |     *((r4 + 0x34)) = r1;
    0x000613ca ldr r4, [r6, 0x14]                                |     r4 = *(0x61576);
    0x000613cc ldr r7, [r5, 0x64]                                |     r7 = *(0x61552);
    0x000613ce ldr r0, [r4, 0x10]                                |     r0 = *(0x61586);
    0x000613d0 movs r0, 0x73                                     |     r0 = 0x73;
    0x000613d2 str r1, [r4, 0x34]                                |     *((r4 + 0x34)) = r1;
    0x000613d4 ldr r4, [r6, 0x14]                                |     r4 = *(0x61576);
    0x000613d6 str r6, [r6, 0x54]                                |     *((r6 + 0x54)) = r6;
    0x000613d8 movs r0, r0                                       |     
    0x000613da movs r0, r0                                       |     
    0x000613dc str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x000613de ldr r6, [r5, 0x64]                                |     r6 = *(0x61552);
    0x000613e0 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x000613e2 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x000613e4 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x000613e6 strb r2, [r6, 0x11]                               |     *((r6 + 0x11)) = r2;
    0x000613e8 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x000613ea strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x000613ec str r2, [r6, 0x14]                                |     *((r6 + 0x14)) = r2;
    0x000613ee strb r6, [r5, 0xd]                                |     *((r5 + 0xd)) = r6;
    0x000613f0 str r1, [r4, 0x34]                                |     *((r4 + 0x34)) = r1;
    0x000613f2 ldr r4, [r6, 0x14]                                |     r4 = *(0x61566);
    0x000613f4 ldr r7, [r5, 0x64]                                |     r7 = *(0x61552);
    0x000613f6 strb r0, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r0;
    0x000613f8 strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x000613fa ldr r0, [r5, 0x14]                                |     r0 = *(0x61502);
    0x000613fc movs r0, 0x6e                                     |     r0 = 0x6e;
    0x000613fe movs r0, 0x61                                     |     r0 = 0x61;
    0x00061400 strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x00061402 ldr r1, [r4, 0x64]                                |     r1 = *(0x615ca);
    0x00061404 str r3, [r6, 0x14]                                |     *((r6 + 0x14)) = r3;
    0x00061406 strb r3, [r4, 0x11]                               |     *((r4 + 0x11)) = r3;
    0x00061408 ldr r1, [r5, 0x74]                                |     r1 = *(0x61562);
    0x0006140a lsls r6, r5, 1                                    |     r6 = r5 << 1;
    0x0006140c str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x0006140e ldr r6, [r5, 0x64]                                |     r6 = *(0x61552);
    0x00061410 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x00061412 strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x00061414 ldr r7, [r5, 0x44]                                |     r7 = *(0x61532);
    0x00061416 str r4, [r5, 0x24]                                |     *((r5 + 0x24)) = r4;
    0x00061418 str r1, [r4, 0x34]                                |     *((r4 + 0x34)) = r1;
    0x0006141a movs r0, 0x6b                                     |     r0 = 0x6b;
    0x0006141c movs r0, 0x2d                                     |     r0 = 0x2d;
    0x0006141e ldr r6, [r5, 0x74]                                |     r6 = *(0x61562);
    0x00061420 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00061422 str r2, [r6, 0x14]                                |     *((r6 + 0x14)) = r2;
    0x00061424 strb r6, [r5, 0xd]                                |     *((r5 + 0xd)) = r6;
    0x00061426 str r1, [r4, 0x34]                                |     *((r4 + 0x34)) = r1;
    0x00061428 ldr r4, [r6, 0x14]                                |     r4 = *(0x61576);
    0x0006142a ldr r7, [r5, 0x64]                                |     r7 = *(0x61552);
    0x0006142c ldr r0, [r4, 0x10]                                |     r0 = *(0x61586);
    0x0006142e movs r0, 0x73                                     |     r0 = 0x73;
    0x00061430 str r1, [r4, 0x34]                                |     *((r4 + 0x34)) = r1;
    0x00061432 ldr r4, [r6, 0x14]                                |     r4 = *(0x61576);
    0x00061434 str r6, [r6, 0x54]                                |     *((r6 + 0x54)) = r6;
    0x00061436 movs r0, r0                                       |     
    0x00061438 strb r7, [r5, 0x15]                               |     *((r5 + 0x15)) = r7;
    0x0006143a movs r0, 0x74                                     |     r0 = 0x74;
    0x0006143c str r7, [r5, 0x64]                                |     *((r5 + 0x64)) = r7;
    0x0006143e movs r0, r0                                       |     
    0x00061440 ldr r1, [r5, 0x64]                                |     r1 = *(0x61552);
    0x00061442 ldr r4, [r6, 0x74]                                |     r4 = *(0x615d6);
    0x00061444 movs r0, r0                                       |     
    0x00061446 movs r0, r0                                       |     
    0x00061448 strb r1, [r0, r1]                                 |     *((r0 + r1)) = r1;
    0x0006144a adcs r4, r2                                       |     __asm ("adcs r4, r2");
    0x0006144c ldr r0, [pc, 0x10c]                               |     r0 = "cannot commit transaction - SQL statements in progress";
    0x0006144e movs r7, 0x20                                     |     r7 = 0x20;
    0x00061450 ldr r2, [r7, 0x50]                                |     r2 = *(0x615a2);
    0x00061452 ldr r5, [r4, 0x54]                                |     r5 = *(0x6162a);
    0x00061454 strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x00061456 subs r2, 0x79                                     |     r2 -= 0x79;
    0x00061458 movs r0, 0x27                                     |     r0 = 0x27;
    0x0006145a strh r1, [r0, r5]                                 |     *((r0 + r5)) = r1;
    0x0006145c strb r0, [r4, 0x18]                               |     *((r4 + 0x18)) = r0;
    0x0006145e str r1, [r4, 0x34]                                |     *((r4 + 0x34)) = r1;
    0x00061460 strb r5, [r6, 0x15]                               |     *((r6 + 0x15)) = r5;
    0x00061462 ldrsh r5, [r5, r5]                                |     r5 = *((r5 + r5));
    0x00061464 str r4, [r4, 0x24]                                |     *((r4 + 0x24)) = r4;
    0x00061466 movs r3, r7                                       |     r3 = r7;
    0x00061468 strb r1, [r0, r1]                                 |     *((r0 + r1)) = r1;
    0x0006146a adcs r4, r2                                       |     __asm ("adcs r4, r2");
    0x0006146c ldr r0, [pc, 0x10c]                               |     r0 = *(0x6157c);
    0x0006146e movs r7, 0x20                                     |     r7 = 0x20;
    0x00061470 movs r0, 0x27                                     |     r0 = 0x27;
    0x00061472 strh r1, [r0, r5]                                 |     *((r0 + r5)) = r1;
    0x00061474 strb r0, [r4, 0x18]                               |     *((r4 + 0x18)) = r0;
    0x00061476 str r1, [r4, 0x34]                                |     *((r4 + 0x34)) = r1;
    0x00061478 strb r5, [r6, 0x15]                               |     *((r6 + 0x15)) = r5;
    0x0006147a ldrsh r5, [r5, r5]                                |     r5 = *((r5 + r5));
    0x0006147c str r4, [r4, 0x24]                                |     *((r4 + 0x24)) = r4;
    0x0006147e movs r3, r7                                       |     r3 = r7;
    0x00061480 str r4, [r4, 0x14]                                |     *((r4 + 0x14)) = r4;
    0x00061482 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00061484 str r2, [r4, 0x14]                                |     *((r4 + 0x14)) = r2;
    0x00061486 str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x00061488 str r0, [r4, 0x40]                                |     *((r4 + 0x40)) = r0;
    0x0006148a strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x0006148c movs r0, 0x6b                                     |     r0 = 0x6b;
    0x0006148e ldr r1, [r5, 0x54]                                |     r1 = *(0x6167e);
    0x00061490 str r1, [r4, 0x74]                                |     *((r4 + 0x74)) = r1;
    0x00061492 movs r0, 0x65                                     |     r0 = 0x65;
    0x00061494 strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x00061496 ldr r0, [r4, 0x50]                                |     r0 = *(0x61626);
    0x00061498 ldr r1, [r4, 0x44]                                |     r1 = *(0x6161a);
    0x0006149a ldr r6, [r4, 0x74]                                |     r6 = *(0x6164a);
    0x0006149c ldr r2, [r6, 0x54]                                |     r2 = *(0x6169e);
    0x0006149e str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x000614a0 movs r0, r0                                       |     
    0x000614a2 movs r0, r0                                       |     
    0x000614a4 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x000614a6 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x000614a8 ldr r7, [r5, 0x64]                                |     r7 = *(0x6168e);
    0x000614aa strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x000614ac str r2, [r6, 0x14]                                |     *((r6 + 0x14)) = r2;
    0x000614ae ldr r1, [r5, 0x64]                                |     r1 = *(0x6168e);
    0x000614b0 movs r0, 0x74                                     |     r0 = 0x74;
    0x000614b2 str r6, [r4, 0x14]                                |     *((r4 + 0x14)) = r6;
    0x000614b4 ldr r1, [r5, 0x44]                                |     r1 = *(0x6166e);
    0x000614b6 str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x000614b8 movs r0, 0x3a                                     |     r0 = 0x3a;
    0x000614ba strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x000614bc movs r0, r0                                       |     
    0x000614be movs r0, r0                                       |     
    0x000614c0 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x000614c2 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x000614c4 ldr r7, [r5, 0x64]                                |     r7 = *(0x6168e);
    0x000614c6 strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x000614c8 str r2, [r6, 0x14]                                |     *((r6 + 0x14)) = r2;
    0x000614ca ldr r1, [r5, 0x64]                                |     r1 = *(0x6168e);
    0x000614cc movs r0, 0x74                                     |     r0 = 0x74;
    0x000614ce str r6, [r4, 0x14]                                |     *((r4 + 0x14)) = r6;
    0x000614d0 ldr r1, [r5, 0x44]                                |     r1 = *(0x6166e);
    0x000614d2 str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x000614d4 movs r0, r0                                       |     
    0x000614d6 movs r0, r0                                       |     
    0x000614d8 str r1, [r4, 0x24]                                |     *((r4 + 0x24)) = r1;
    0x000614da strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x000614dc movs r0, 0x74                                     |     r0 = 0x74;
    0x000614de strb r1, [r4, 0x11]                               |     *((r4 + 0x11)) = r1;
    0x000614e0 movs r5, 0x20                                     |     r5 = 0x20;
    0x000614e2 movs r0, 0x64                                     |     r0 = 0x64;
    0x000614e4 ldr r1, [r5, 0x64]                                |     r1 = *(0x6168e);
    0x000614e6 ldrh r0, [r4, r4]                                 |     r0 = *((r4 + r4));
    0x000614e8 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x000614ea subs r2, 0x5d                                     |     r2 -= 0x5d;
    0x000614ec movs r5, 0x20                                     |     r5 = 0x20;
    0x000614ee lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x000614f0 str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x000614f2 ldr r6, [r5, 0x64]                                |     r6 = *(0x6168e);
    0x000614f4 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x000614f6 ldr r0, [r4, 0x70]                                |     r0 = *(0x61646);
    0x000614f8 str r0, [r6, 0x54]                                |     *((r6 + 0x54)) = r0;
    0x000614fa movs r0, 0x6e                                     |     r0 = 0x6e;
    0x000614fc str r3, [r6, 0x14]                                |     *((r6 + 0x14)) = r3;
    0x000614fe str r6, [r6, 0x54]                                |     *((r6 + 0x54)) = r6;
    0x00061500 ldr r0, [r6, 0x74]                                |     r0 = *(0x61702);
    0x00061502 ldr r1, [r5, 0x64]                                |     r1 = *(0x6168e);
    0x00061504 movs r0, 0x74                                     |     r0 = 0x74;
    0x00061506 movs r0, 0x2d                                     |     r0 = 0x2d;
    0x00061508 str r3, [r2, r5]                                  |     *((r2 + r5)) = r3;
    0x0006150a movs r0, 0x4c                                     |     r0 = 0x4c;
    0x0006150c strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x0006150e strb r1, [r4, 0x11]                               |     *((r4 + 0x11)) = r1;
    0x00061510 ldr r5, [r4, 0x54]                                |     r5 = *(0x6162a);
    0x00061512 ldr r5, [r4, 0x64]                                |     r5 = *(0x6163a);
    0x00061514 strb r4, [r6, 0xd]                                |     *((r6 + 0xd)) = r4;
    0x00061516 ldr r0, [r4, 0x10]                                |     r0 = *(0x615e6);
    0x00061518 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0006151a strb r0, [r6, 9]                                  |     *((r6 + 9)) = r0;
    0x0006151c str r7, [r5, 0x74]                                |     *((r5 + 0x74)) = r7;
    0x0006151e str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x00061520 strb r3, [r6, 0xd]                                |     *((r6 + 0xd)) = r3;
    0x00061522 movs r0, r0                                       |     
    0x00061524 str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x00061526 ldr r6, [r5, 0x64]                                |     r6 = *(0x6169e);
    0x00061528 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x0006152a strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x0006152c ldr r5, [r4, 0x44]                                |     
    0x0006152e str r5, [r4, 0x14]                                |     *((r4 + 0x14)) = r5;
    0x00061530 str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x00061532 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00061534 strb r1, [r4, 0x19]                               |     *((r4 + 0x19)) = r1;
    0x00061536 strb r5, [r4, 1]                                  |     *((r4 + 1)) = r5;
    0x00061538 ldr r7, [r5, 0x14]                                |     r7 = *(0x6162e);
    0x0006153a strb r6, [r5, 0x11]                               |     *((r5 + 0x11)) = r6;
    0x0006153c cmp r5, 0x20                                      |     
    0x0006153e strh r0, [r4, r4]                                 |     *((r4 + r4)) = r0;
    0x00061540 ldr r4, [pc, 0x144]                               |     r4 = *(0x61688);
    0x00061542 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00061544 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00061546 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00061548 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x0006154a strb r6, [r5, 0x11]                               |     *((r5 + 0x11)) = r6;
    0x0006154c movs r0, 0x73                                     |     r0 = 0x73;
    0x0006154e ldr r1, [r5, 0x64]                                |     r1 = *(0x6167e);
    0x00061550 strb r0, [r4]                                     |     *(r4) = r0;
    0x00061552 ldr r2, [r6, 0x74]                                |     r2 = *(0x61712);
    0x00061554 strb r7, [r4, 9]                                  |     *((r4 + 9)) = r7;
    0x00061556 strb r5, [r4, 0xd]                                |     *((r4 + 0xd)) = r5;
    0x00061558 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0006155a movs r0, r0                                       |     
    0x0006155c str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x0006155e ldr r6, [r5, 0x64]                                |     r6 = *(0x6167e);
    0x00061560 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x00061562 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x00061564 ldr r7, [r5, 0x54]                                |     r7 = *(0x6166e);
    0x00061566 ldr r5, [r5, 0x14]                                |     r5 = *(0x6162e);
    0x00061568 movs r0, 0x74                                     |     r0 = 0x74;
    0x0006156a strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x0006156c ldr r1, [r4, 0x64]                                |     r1 = *(0x616ec);
    0x0006156e str r3, [r6, 0x14]                                |     *((r6 + 0x14)) = r3;
    0x00061570 strb r3, [r4, 0x11]                               |     *((r4 + 0x11)) = r3;
    0x00061572 ldr r1, [r5, 0x74]                                |     r1 = *(0x616a2);
    0x00061574 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x00061576 movs r0, 0x2d                                     |     r0 = 0x2d;
    0x00061578 str r3, [r2, r5]                                  |     *((r2 + r5)) = r3;
    0x0006157a movs r0, 0x4c                                     |     r0 = 0x4c;
    0x0006157c strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x0006157e strb r1, [r4, 0x11]                               |     *((r4 + 0x11)) = r1;
    0x00061580 ldr r5, [r4, 0x54]                                |     r5 = *(0x616dc);
    0x00061582 ldr r5, [r4, 0x64]                                |     r5 = *(0x616ec);
    0x00061584 strb r4, [r6, 0xd]                                |     *((r6 + 0xd)) = r4;
    0x00061586 ldr r0, [r4, 0x10]                                |     r0 = *(0x61698);
    0x00061588 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0006158a strb r0, [r6, 9]                                  |     *((r6 + 9)) = r0;
    0x0006158c str r7, [r5, 0x74]                                |     *((r5 + 0x74)) = r7;
    0x0006158e str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x00061590 strb r3, [r6, 0xd]                                |     *((r6 + 0xd)) = r3;
    0x00061592 movs r0, r0                                       |     
    0x00061594 str r4, [r4, 0x14]                                |     *((r4 + 0x14)) = r4;
    0x00061596 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00061598 str r2, [r4, 0x14]                                |     *((r4 + 0x14)) = r2;
    0x0006159a str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x0006159c strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x0006159e ldr r3, [r4, 4]                                   |     r3 = *(0x6168c);
    0x000615a0 ldr r5, [r4, 0x54]                                |     r5 = *(0x616dc);
    0x000615a2 movs r0, 0x61                                     |     r0 = 0x61;
    0x000615a4 str r0, [r5, 0x14]                                |     *((r5 + 0x14)) = r0;
    0x000615a6 movs r0, 0x73                                     |     r0 = 0x73;
    0x000615a8 ldr r3, [r4, 4]                                   |     r3 = *(0x6168c);
    0x000615aa ldr r1, [r4, 0x64]                                |     r1 = *(0x616ec);
    0x000615ac str r7, [r4, 0x54]                                |     *((r4 + 0x54)) = r7;
    0x000615ae lsls r4, r4, 1                                    |     r4 <<= 1;
    0x000615b0 cmp r3, sl                                        |     
    0x000615b2 cmp r4, sb                                        |     
    0x000615b4 strb r3, [r0, r1]                                 |     *((r0 + r1)) = r3;
    0x000615b6 ldr r0, [r4, 0x60]                                |     r0 = *(0x616e8);
    0x000615b8 ldr r1, [r4, 0x54]                                |     r1 = *(0x616dc);
    0x000615ba cmp r4, 0x65                                      |     
    0x000615bc strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x000615be ldr r7, [r5, 0x74]                                |     r7 = *(0x61750);
    0x000615c0 strb r4, [r6, 1]                                  |     *((r6 + 1)) = r4;
    0x000615c2 str r1, [r4, 0x74]                                |     *((r4 + 0x74)) = r1;
    0x000615c4 cmp r4, 0x65                                      |     
    0x000615c6 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x000615c8 ldr r1, [r6, 0x44]                                |     r1 = *(0x616c2);
    0x000615ca mov r0, r4                                        |     r0 = r4;
    0x000615cc ldr r7, [pc, 0x148]                               |     r7 = "cannot VACUUM - SQL statements in progress";
    0x000615ce movs r0, 0x4d                                     |     r0 = 0x4d;
    0x000615d0 movs r5, 0x27                                     |     r5 = 0x27;
    0x000615d2 movs r7, 0x71                                     |     r7 = 0x71;
    0x000615d4 movs r5, 0x2e                                     |     r5 = 0x2e;
    0x000615d6 movs r0, 0x73                                     |     r0 = 0x73;
    0x000615d8 ldr r0, [pc, 0x15c]                               |     r0 = *(0x61738);
    0x000615da strh r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x000615dc movs r0, 0x45                                     |     r0 = 0x45;
    0x000615de strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x000615e0 ldr r7, [pc, 0x80]                                |     r7 = *(0x61664);
    0x000615e2 add r2, sl                                        |     r2 += sl;
    0x000615e4 strh r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x000615e6 tst r0, r4                                        |     
    0x000615e8 movs r0, 0x59                                     |     r0 = 0x59;
    0x000615ea ldr r2, [r6, 0x74]                                |     r2 = *(0x616f2);
    0x000615ec ldr r7, [r6, 0x14]                                |     r7 = *(0x61692);
    0x000615ee lsls r4, r4, 1                                    |     r4 <<= 1;
    0x000615f0 str r5, [r1, 0x14]                                |     *((r1 + 0x14)) = r5;
    0x000615f2 ldr r1, [r5, 0x64]                                |     r1 = *(0x61740);
    0x000615f4 str r0, [r4, 0x60]                                |     *((r4 + 0x60)) = r0;
    0x000615f6 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x000615f8 ldr r5, [r4, 0x44]                                |     r5 = *(0x616cc);
    0x000615fa strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x000615fc subs r2, 0x74                                     |     r2 -= 0x74;
    0x000615fe movs r0, r4                                       |     r0 = r4;
    0x00061600 ldr r4, [r1, 0x14]                                |     r4 = *(0x61754);
    0x00061602 strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x00061604 ldr r0, [r4, 0x70]                                |     r0 = *(0x617c4);
    0x00061606 movs r0, 0x66                                     |     r0 = 0x66;
    0x00061608 strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x0006160a str r5, [r4, 0x54]                                |     *((r4 + 0x54)) = r5;
    0x0006160c strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x0006160e ldr r7, [r5, 0x74]                                |     r7 = *(0x61740);
    0x00061610 strb r4, [r6, 0xd]                                |     *((r6 + 0xd)) = r4;
    0x00061612 movs r0, 0x3a                                     |     r0 = 0x3a;
    0x00061614 movs r0, r0                                       |     
    0x00061616 movs r0, r0                                       |     
    0x00061618 movs r0, r0                                       |     
    0x0006161a movs r0, r0                                       |     
    0x0006161c movs r5, 0x20                                     |     r5 = 0x20;
    0x0006161e movs r0, 0x64                                     |     r0 = 0x64;
    0x00061620 strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x00061622 ldr r0, [r4, 0x60]                                |     r0 = *(0x617b4);
    0x00061624 strb r5, [r4, 0x19]                               |     *((r4 + 0x19)) = r5;
    0x00061626 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x00061628 strb r0, [r4, 0x14]                               |     *((r4 + 0x14)) = r0;
    0x0006162a str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x0006162c lsls r4, r4, 1                                    |     r4 <<= 1;
    0x0006162e movs r0, r0                                       |     
    0x00061630 ldr r0, [r2, 0x74]                                |     r0 = *(0x61766);
    0x00061632 ldr r1, [r5, 0x64]                                |     r1 = *(0x61730);
    0x00061634 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00061636 movs r0, 0x72                                     |     r0 = 0x72;
    0x00061638 str r5, [r5, 0x14]                                |     *((r5 + 0x14)) = r5;
    0x0006163a movs r0, 0x70                                     |     r0 = 0x70;
    0x0006163c str r0, [r6, 0x14]                                |     *((r6 + 0x14)) = r0;
    0x0006163e str r7, [r4, 0x54]                                |     *((r4 + 0x54)) = r7;
    0x00061640 movs r5, 0x20                                     |     r5 = 0x20;
    0x00061642 movs r0, 0x64                                     |     r0 = 0x64;
    0x00061644 strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x00061646 strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x00061648 str r5, [r4, 0x64]                                |     *((r4 + 0x64)) = r5;
    0x0006164a strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x0006164c ldr r5, [r4, 0x64]                                |     r5 = *(0x617b8);
    0x0006164e str r3, [r4, 0x54]                                |     *((r4 + 0x54)) = r3;
    0x00061650 lsls r4, r4, 1                                    |     r4 <<= 1;
    0x00061652 movs r0, r0                                       |     
    0x00061654 strb r7, [r1, 0x15]                               |     *((r1 + 0x15)) = r7;
    0x00061656 strb r4, [r6, 0xd]                                |     *((r6 + 0xd)) = r4;
    0x00061658 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x0006165a str r6, [r5, 0x44]                                |     *((r5 + 0x44)) = r6;
    0x0006165c ldr r1, [r5, 0x64]                                |     r1 = *(0x6181c);
    0x0006165e movs r0, 0x67                                     |     r0 = 0x67;
    0x00061660 str r0, [r6, 0x14]                                |     *((r6 + 0x14)) = r0;
    0x00061662 str r7, [r4, 0x54]                                |     *((r4 + 0x54)) = r7;
    0x00061664 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x00061666 strb r7, [r5, 0x15]                               |     *((r5 + 0x15)) = r7;
    0x00061668 strb r6, [r5, 0x11]                               |     *((r5 + 0x11)) = r6;
    0x0006166a str r0, [r4, 0x70]                                |     *((r4 + 0x70)) = r0;
    0x0006166c str r7, [r5, 0x54]                                |     *((r5 + 0x54)) = r7;
    0x0006166e movs r0, 0x73                                     |     r0 = 0x73;
    0x00061670 strb r6, [r4, 9]                                  |     *((r4 + 9)) = r6;
    0x00061672 ldr r7, [r5, 0x54]                                |     r7 = *(0x6180c);
    0x00061674 movs r5, 0x20                                     |     r5 = 0x20;
    0x00061676 movs r0, 0x64                                     |     r0 = 0x64;
    0x00061678 ldr r4, [r6, 0x74]                                |     r4 = *(0x616f2);
    0x0006167a movs r5, 0x20                                     |     r5 = 0x20;
    0x0006167c movs r0, 0x64                                     |     r0 = 0x64;
    0x0006167e strb r4, [r4, 0x15]                               |     *((r4 + 0x15)) = r4;
    0x00061680 ldr r2, [r6, 0x14]                                |     r2 = *(0x61692);
    0x00061682 str r6, [r5, 0x74]                                |     *((r5 + 0x74)) = r6;
    0x00061684 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00061686 ldr r0, [r5, 0x14]                                |     r0 = *(0x617cc);
    0x00061688 movs r0, 0x73                                     |     r0 = 0x73;
    0x0006168a ldr r1, [r4, 0x64]                                |     r1 = *(0x61756);
    0x0006168c ldr r1, [r4, 0x44]                                |     r1 = *(0x61736);
    0x0006168e strb r1, [r7, 0xd]                                |     *((r7 + 0xd)) = r1;
    0x00061690 strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x00061692 movs r0, r0                                       |     
    0x00061694 ldr r4, [r6, 0x74]                                |     r4 = *(0x616f2);
    0x00061696 movs r0, 0x6f                                     |     r0 = 0x6f;
    0x00061698 str r5, [r5, 0x14]                                |     *((r5 + 0x14)) = r5;
    0x0006169a ldrb r6, [r5, 5]                                  |     r6 = *((r5 + 5));
    0x0006169c ldr r0, [r4, 0x40]                                |     r0 = *(0x61732);
    0x0006169e strb r5, [r4, 0x19]                               |     *((r4 + 0x19)) = r5;
    0x000616a0 ldr r5, [r4, 0x44]                                |     r5 = *(0x61736);
    0x000616a2 movs r0, 0x73                                     |     r0 = 0x73;
    0x000616a4 str r7, [r5, 0x64]                                |     *((r5 + 0x64)) = r7;
    0x000616a6 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x000616a8 ldr r2, [r6, 0x14]                                |     r2 = *(0x61692);
    0x000616aa str r7, [r4, 0x74]                                |     *((r4 + 0x74)) = r7;
    0x000616ac strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x000616ae strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x000616b0 str r5, [r4, 0x34]                                |     *((r4 + 0x34)) = r5;
    0x000616b2 strb r5, [r6, 9]                                  |     *((r6 + 9)) = r5;
    0x000616b4 ldr r3, [r6, 0x14]                                |     r3 = *(0x61692);
    0x000616b6 ldr r7, [r5, 0x64]                                |     r7 = *(0x6179a);
    0x000616b8 movs r0, r0                                       |     
    0x000616ba movs r0, r0                                       |     
    0x000616bc str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x000616be ldr r6, [r5, 0x64]                                |     r6 = *(0x6179a);
    0x000616c0 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x000616c2 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x000616c4 str r0, [r5, 0x14]                                |     *((r5 + 0x14)) = r0;
    0x000616c6 str r6, [r5, 0x74]                                |     *((r5 + 0x74)) = r6;
    0x000616c8 movs r0, 0x65                                     |     r0 = 0x65;
    0x000616ca strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x000616cc strb r0, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r0;
    0x000616ce ldr r1, [r4, 0x44]                                |     r1 = *(0x61736);
    0x000616d0 ldr r0, [r4, 0x50]                                |     r0 = *(0x61742);
    0x000616d2 str r7, [r5, 0x44]                                |     *((r5 + 0x44)) = r7;
    0x000616d4 movs r0, 0x65                                     |     r0 = 0x65;
    0x000616d6 strb r6, [r4, 9]                                  |     *((r4 + 9)) = r6;
    0x000616d8 ldr r7, [r5, 0x54]                                |     r7 = *(0x6178a);
    0x000616da strb r0, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r0;
    0x000616dc strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x000616de ldr r0, [r5, 0x14]                                |     r0 = *(0x6174a);
    0x000616e0 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x000616e2 movs r0, 0x61                                     |     r0 = 0x61;
    0x000616e4 strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x000616e6 ldr r1, [r4, 0x64]                                |     r1 = *(0x61756);
    0x000616e8 str r3, [r6, 0x14]                                |     *((r6 + 0x14)) = r3;
    0x000616ea strb r3, [r4, 0x11]                               |     *((r4 + 0x11)) = r3;
    0x000616ec ldr r1, [r5, 0x74]                                |     r1 = *(0x617aa);
    0x000616ee lsls r6, r5, 1                                    |     r6 = r5 << 1;
    0x000616f0 str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x000616f2 ldr r6, [r5, 0x64]                                |     r6 = *(0x6179a);
    0x000616f4 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x000616f6 ldrsb r0, [r4, r0]                                |     r0 = *((r4 + r0));
    0x000616f8 muls r1, r0, r1                                   |     r1 = r0 * r1;
    0x000616fa strb r5, [r2, r5]                                 |     *((r2 + r5)) = r5;
    0x000616fc movs r0, 0x4d                                     |     r0 = 0x4d;
    0x000616fe strb r6, [r4, 9]                                  |     *((r4 + 9)) = r6;
    0x00061700 ldr r7, [r5, 0x54]                                |     r7 = *(0x6178a);
    0x00061702 strb r0, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r0;
    0x00061704 strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x00061706 ldr r0, [r5, 0x14]                                |     r0 = *(0x6174a);
    0x00061708 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0006170a movs r0, 0x61                                     |     r0 = 0x61;
    0x0006170c strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x0006170e ldr r1, [r4, 0x64]                                |     r1 = *(0x61756);
    0x00061710 str r3, [r6, 0x14]                                |     *((r6 + 0x14)) = r3;
    0x00061712 strb r3, [r4, 0x11]                               |     *((r4 + 0x11)) = r3;
    0x00061714 ldr r1, [r5, 0x74]                                |     r1 = *(0x617aa);
    0x00061716 lsls r6, r5, 1                                    |     r6 = r5 << 1;
    0x00061718 str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x0006171a ldr r6, [r5, 0x64]                                |     r6 = *(0x6179a);
    0x0006171c strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x0006171e ldrsb r0, [r4, r0]                                |     r0 = *((r4 + r0));
    0x00061720 invalid                                           |     
    0x00061724 movs r0, 0x4d                                     |     r0 = 0x4d;
    0x00061726 movs r0, 0x2d                                     |     r0 = 0x2d;
    0x00061728 str r3, [r2, r5]                                  |     *((r2 + r5)) = r3;
    0x0006172a movs r0, 0x4c                                     |     r0 = 0x4c;
    0x0006172c strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x0006172e strb r1, [r4, 0x11]                               |     *((r4 + 0x11)) = r1;
    0x00061730 ldr r5, [r4, 0x54]                                |     r5 = *(0x61746);
    0x00061732 ldr r5, [r4, 0x64]                                |     r5 = *(0x61756);
    0x00061734 strb r4, [r6, 0xd]                                |     *((r6 + 0xd)) = r4;
    0x00061736 ldr r0, [r4, 0x10]                                |     r0 = *(0x61702);
    0x00061738 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0006173a strb r0, [r6, 9]                                  |     *((r6 + 9)) = r0;
    0x0006173c str r7, [r5, 0x74]                                |     *((r5 + 0x74)) = r7;
    0x0006173e str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x00061740 strb r3, [r6, 0xd]                                |     *((r6 + 0xd)) = r3;
    0x00061742 movs r0, r0                                       |     
    0x00061744 strh r0, [r2, r1]                                 |     *((r2 + r1)) = r0;
    0x00061746 bx r8                                             |     return uint32_t (*r8)() ();
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5a350 */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) fcn.0005a350 ()                                          | void fcn_0005a350 (int16_t arg_18h, int16_t arg_20h, int16_t arg_98h, int16_t arg_9ch, int16_t arg_a0h, int16_t arg_a4h, int16_t arg_a8h, int16_t arg_ach, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                     |     int16_t var_0h;
                                                                     |     int16_t var_4h;
                                                                     |     int16_t var_8h;
                                                                     |     int32_t var_ch;
                                                                     |     int32_t var_ch_2;
                                                                     |     int16_t var_14h;
                                                                     |     int16_t var_18h;
                                                                     |     int16_t var_1ch;
                                                                     |     int16_t var_20h;
                                                                     |     int16_t var_24h;
                                                                     |     int16_t var_28h;
                                                                     |     int16_t var_2ch;
                                                                     |     int16_t var_30h;
                                                                     |     int16_t var_34h;
                                                                     |     int16_t var_38h;
                                                                     |     int16_t var_3ch;
                                                                     |     int16_t var_40h;
                                                                     |     int16_t var_44h;
                                                                     |     int16_t var_48h;
                                                                     |     int16_t var_4ch;
                                                                     |     int16_t var_50h;
                                                                     |     int16_t var_54h;
                                                                     |     int16_t var_58h;
                                                                     |     int16_t var_5ch;
                                                                     |     int16_t var_60h;
                                                                     |     int32_t var_60h_2;
                                                                     |     int16_t var_68h;
                                                                     |     int16_t var_6ch;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0005a350 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0005a354 sub sp, 0x74                                          |     
    0x0005a356 str r3, [sp, 0x54]                                    |     var_54h = r3;
    0x0005a358 mov sb, r0                                            |     sb = r0;
    0x0005a35a mov sl, r1                                            |     sl = r1;
    0x0005a35c ldrb.w r3, [sp, 0xa4]                                 |     r3 = *(arg_a4h);
    0x0005a360 ldr.w fp, [r0, 8]                                     |     fp = *((r0 + 8));
    0x0005a364 str r2, [sp, 0x1c]                                    |     var_1ch = r2;
    0x0005a366 str r3, [sp, 0x40]                                    |     var_40h = r3;
    0x0005a368 ldrb.w r3, [sp, 0xa8]                                 |     r3 = *(arg_a8h);
    0x0005a36c str r3, [sp, 0x28]                                    |     var_28h = r3;
    0x0005a36e ldr r3, [r0]                                          |     r3 = *(r0);
    0x0005a370 str r3, [sp, 0x44]                                    |     var_44h = r3;
    0x0005a372 ldr r3, [sp, 0xa0]                                    |     r3 = *(arg_a0h);
    0x0005a374 subs r3, 0                                            |     
    0x0005a376 it ne                                                 |     
                                                                     |     if (r3 == 0) {
    0x0005a378 movne r3, 1                                           |         r3 = 1;
                                                                     |     }
    0x0005a37a str r3, [sp, 0x30]                                    |     var_30h = r3;
    0x0005a37c cmp.w fp, 0                                           |     
                                                                     |     if (fp == 0) {
    0x0005a380 beq.w 0x5ac7e                                         |         goto label_35;
                                                                     |     }
                                                                     | label_28:
    0x0005a384 ldrb.w r3, [sl, 0x2c]                                 |     r3 = *((sl + 0x2c));
    0x0005a388 ldrsh.w r7, [sl, 0x26]                                |     r7 = *((sl + 0x26));
    0x0005a38c ands r3, r3, 0x20                                     |     r3 &= 0x20;
                                                                     |     if (r3 == r3) {
    0x0005a390 beq 0x5a47c                                           |         goto label_36;
                                                                     |     }
    0x0005a392 ldr.w r3, [sl, 8]                                     |     r3 = *((sl + 8));
    0x0005a396 str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0005a398 ldr r2, [sp, 0x24]                                    |     r2 = var_24h;
                                                                     |     if (r3 != 0) {
    0x0005a39a cbnz r3, 0x5a3a8                                      |         goto label_37;
                                                                     |     }
    0x0005a39c b.w 0x5ad1a                                           |     goto label_38;
                                                                     |     do {
    0x0005a3a0 ldr r2, [r2, 0x14]                                    |         r2 = *((r2 + 0x14));
    0x0005a3a2 cmp r2, 0                                             |         
                                                                     |         if (r2 == 0) {
    0x0005a3a4 beq.w 0x5ad1a                                         |             goto label_38;
                                                                     |         }
                                                                     | label_37:
    0x0005a3a8 ldrb.w r3, [r2, 0x37]                                 |         r3 = *((r2 + 0x37));
    0x0005a3ac and r3, r3, 3                                         |         r3 &= 3;
    0x0005a3b0 cmp r3, 2                                             |         
    0x0005a3b2 bne 0x5a3a0                                           |         
                                                                     |     } while (r3 != 2);
    0x0005a3b4 ldrh r3, [r2, 0x32]                                   |     r3 = *((r2 + 0x32));
    0x0005a3b6 cmp r7, 0                                             |     
    0x0005a3b8 str r2, [sp, 0x24]                                    |     var_24h = r2;
    0x0005a3ba str r3, [sp, 0x3c]                                    |     var_3ch = r3;
    0x0005a3bc mov.w r3, 0                                           |     r3 = 0;
    0x0005a3c0 str r3, [sp, 0x20]                                    |     var_20h = r3;
                                                                     |     if (r7 > 0) {
    0x0005a3c2 bgt 0x5a48a                                           |         goto label_39;
                                                                     |     }
                                                                     | label_1:
    0x0005a3c4 ldr.w r8, [sl, 0x18]                                  |     r8 = *((sl + 0x18));
    0x0005a3c8 cmp.w r8, 0                                           |     
                                                                     |     if (r8 == 0) {
    0x0005a3cc beq.w 0x5a592                                         |         goto label_40;
                                                                     |     }
    0x0005a3d0 ldr r3, [sp, 0x44]                                    |     r3 = var_44h;
    0x0005a3d2 ldr r5, [r3, 0x18]                                    |     r5 = *((r3 + 0x18));
    0x0005a3d4 ands r5, r5, 0x2000                                   |     r5 &= 0x2000;
                                                                     |     if (r5 != r5) {
    0x0005a3d8 bne.w 0x5a592                                         |         goto label_40;
                                                                     |     }
    0x0005a3dc ldr r1, [sp, 0x28]                                    |     r1 = var_28h;
    0x0005a3de ldr.w r3, [r8]                                        |     r3 = *(r8);
    0x0005a3e2 ldr r2, [sp, 0x9c]                                    |     r2 = *(arg_9ch);
    0x0005a3e4 cmp r1, 0xa                                           |     
    0x0005a3e6 ite ne                                                |     
                                                                     |     if (r1 == 0xa) {
    0x0005a3e8 movne r7, r1                                          |         r7 = r1;
                                                                     |     }
                                                                     |     if (r1 != 0xa) {
    0x0005a3ea moveq r7, 2                                           |         r7 = 2;
                                                                     |     }
    0x0005a3ec cmp r3, 0                                             |     
    0x0005a3ee add.w r2, r2, 1                                       |     r2++;
    0x0005a3f2 str.w r2, [sb, 0x5c]                                  |     __asm ("str.w r2, [sb, 0x5c]");
                                                                     |     if (r3 <= 0) {
    0x0005a3f6 ble.w 0x5a592                                         |         goto label_40;
                                                                     |     }
    0x0005a3fa ldr.w r0, [fp, 0x18]                                  |     r0 = *(arg_18h);
    0x0005a3fe b 0x5a444                                             |     
                                                                     |     while (r3 != 0) {
                                                                     | label_0:
    0x0005a400 cmp r7, 5                                             |         
    0x0005a402 mov.w r2, 0                                           |         r2 = 0;
    0x0005a406 it eq                                                 |         
                                                                     |         if (r7 != 5) {
    0x0005a408 moveq r7, 2                                           |             r7 = 2;
                                                                     |         }
    0x0005a40a movs r6, 3                                            |         r6 = 3;
    0x0005a40c strd r2, r6, [sp]                                     |         __asm ("strd r2, r6, [sp]");
    0x0005a410 movw r1, 0x113                                        |         r1 = 0x113;
    0x0005a414 mov r2, r7                                            |         r2 = r7;
    0x0005a416 mov r0, sb                                            |         r0 = sb;
    0x0005a418 bl 0x19494                                            |         fcn_00019494 (r0, r1, r2, r3, r4, r5);
                                                                     | label_16:
    0x0005a41c mvns r4, r4                                           |         r4 = ~r4;
    0x0005a41e ldr.w r0, [fp, 0x18]                                  |         r0 = *(arg_18h);
                                                                     |         if (r4 >= r4) {
    0x0005a422 bmi 0x5a430                                           |             
    0x0005a424 ldr r3, [r0, 0x70]                                    |             r3 = *((r0 + 0x70));
                                                                     |             if (r3 == 0) {
    0x0005a426 cbz r3, 0x5a430                                       |                 goto label_41;
                                                                     |             }
    0x0005a428 ldr.w r2, [fp, 0x20]                                  |             r2 = *(arg_20h);
    0x0005a42c str.w r2, [r3, r4, lsl 2]                             |             __asm ("str.w r2, [r3, r4, lsl 2]");
                                                                     |         }
                                                                     | label_41:
    0x0005a430 ldr.w r3, [fp, 0x20]                                  |         r3 = *(arg_20h);
    0x0005a434 adds r5, 1                                            |         r5++;
    0x0005a436 subs r3, 1                                            |         r3--;
    0x0005a438 str r3, [r0, 0x58]                                    |         *((r0 + 0x58)) = r3;
    0x0005a43a ldr.w r3, [r8]                                        |         r3 = *(r8);
    0x0005a43e cmp r3, r5                                            |         
                                                                     |         if (r3 <= r5) {
    0x0005a440 ble.w 0x5a592                                         |             goto label_40;
                                                                     |         }
    0x0005a444 bl 0x19ed0                                            |         fcn_00019ed0 (r0);
    0x0005a448 ldr.w r3, [r8, 4]                                     |         r3 = *((r8 + 4));
    0x0005a44c add.w r6, r5, r5, lsl 2                               |         r6 = r5 + (r5 << 2);
    0x0005a450 mov r2, r0                                            |         r2 = r0;
    0x0005a452 mov r4, r0                                            |         r4 = r0;
    0x0005a454 mov r0, sb                                            |         r0 = sb;
    0x0005a456 ldr.w r1, [r3, r6, lsl 2]                             |         offset_0 = r6 << 2;
                                                                     |         r1 = *((r3 + offset_0));
    0x0005a45a movs r3, 8                                            |         r3 = 8;
    0x0005a45c bl 0x3d21c                                            |         fcn_0003d21c (r0, r1, r2, r3, r4, r5);
    0x0005a460 cmp r7, 4                                             |         
    0x0005a462 lsl.w r6, r6, 2                                       |         r6 <<= 2;
                                                                     |         if (r7 == 4) {
    0x0005a466 beq.w 0x5a9ca                                         |             goto label_42;
                                                                     |         }
    0x0005a46a ldr.w r3, [r8, 4]                                     |         r3 = *((r8 + 4));
    0x0005a46e add r3, r6                                            |         r3 += r6;
    0x0005a470 ldr r3, [r3, 4]                                       |         r3 = *((r3 + 4));
    0x0005a472 cmp r3, 0                                             |         
    0x0005a474 bne 0x5a400                                           |         
                                                                     |     }
    0x0005a476 ldr.w r3, [sl]                                        |     r3 = *(sl);
    0x0005a47a b 0x5a400                                             |     goto label_0;
                                                                     | label_36:
    0x0005a47c cmp r7, 0                                             |     
    0x0005a47e str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0005a480 mov.w r3, 1                                           |     r3 = 1;
    0x0005a484 str r3, [sp, 0x20]                                    |     var_20h = r3;
    0x0005a486 str r3, [sp, 0x3c]                                    |     var_3ch = r3;
                                                                     |     if (r7 <= 0) {
    0x0005a488 ble 0x5a3c4                                           |         goto label_1;
                                                                     |     }
                                                                     | label_39:
    0x0005a48a ldr.w r3, [pc, 0x894]                                 |     r3 = *(0x0005ad20);
    0x0005a48e movs r4, 1                                            |     r4 = 1;
    0x0005a490 mov r8, r7                                            |     r8 = r7;
    0x0005a492 add r3, pc                                            |     r3 += pc;
    0x0005a494 str r3, [sp, 0x18]                                    |     var_18h = r3;
                                                                     | label_2:
    0x0005a496 ldrsh.w r2, [sl, 0x24]                                |     r2 = *((sl + 0x24));
    0x0005a49a subs r3, r4, 1                                        |     r3 = r4 - 1;
    0x0005a49c cmp r2, r3                                            |     
                                                                     |     if (r2 == r3) {
    0x0005a49e beq 0x5a52c                                           |         goto label_3;
                                                                     |     }
    0x0005a4a0 add.w r5, r4, r4, lsl 1                               |     r5 = r4 + (r4 << 1);
    0x0005a4a4 ldr.w r3, [sl, 4]                                     |     r3 = *((sl + 4));
    0x0005a4a8 lsls r5, r5, 3                                        |     r5 <<= 3;
    0x0005a4aa subs r5, 0x18                                         |     r5 -= 0x18;
    0x0005a4ac adds r2, r3, r5                                       |     r2 = r3 + r5;
    0x0005a4ae ldrb r6, [r2, 0x14]                                   |     r6 = *((r2 + 0x14));
    0x0005a4b0 cmp r6, 0                                             |     
                                                                     |     if (r6 == 0) {
    0x0005a4b2 beq 0x5a52c                                           |         goto label_3;
                                                                     |     }
    0x0005a4b4 ldr r1, [sp, 0x28]                                    |     r1 = var_28h;
    0x0005a4b6 cmp r1, 0xa                                           |     
    0x0005a4b8 it ne                                                 |     
                                                                     |     if (r1 == 0xa) {
    0x0005a4ba movne r6, r1                                          |         r6 = r1;
                                                                     |     }
    0x0005a4bc beq 0x5a4d6                                           |     
                                                                     |     while (r6 != 0xa) {
    0x0005a4be ldr r1, [sp, 0x9c]                                    |         r1 = *(arg_9ch);
    0x0005a4c0 cmp r6, 5                                             |         
    0x0005a4c2 add.w r7, r1, r4                                      |         r7 = r1 + r4;
                                                                     |         if (r6 == 5) {
    0x0005a4c6 beq 0x5a54c                                           |             goto label_43;
                                                                     |         }
    0x0005a4c8 subs r2, r6, 1                                        |         r2 = r6 - 1;
    0x0005a4ca cmp r2, 3                                             |         
                                                                     |         if (r2 > 3) {
    0x0005a4cc bhi 0x5a552                                           |             goto label_44;
                                                                     |         }
                                                                     |         /* switch table (4 cases) at 0x5a4d2 */
    0x0005a4ce tbb [pc, r2]                                          |         __asm ("tbb aav.0x000000ff");
    0x0005a4d6 cmp r6, 0xa                                           |         
    0x0005a4d8 bne 0x5a4be                                           |         
                                                                     |     }
    0x0005a4da ldr r2, [sp, 0x9c]                                    |     r2 = *(arg_9ch);
    0x0005a4dc adds r7, r2, r4                                       |     r7 = r2 + r4;
                                                                     | label_4:
    0x0005a4de ldr.w r2, [sb, 0x198]                                 |     r2 = *((sb + 0x198));
    0x0005a4e2 movs r6, 2                                            |     r6 = 2;
    0x0005a4e4 movs r1, 1                                            |     r1 = 1;
    0x0005a4e6 cmp r2, 0                                             |     
    0x0005a4e8 it eq                                                 |     
                                                                     |     if (r2 != 0) {
    0x0005a4ea moveq r2, sb                                          |         r2 = sb;
                                                                     |     }
    0x0005a4ec strb r1, [r2, 0x15]                                   |     *((r2 + 0x15)) = r1;
    0x0005a4ee ldr r3, [r3, r5]                                      |     r3 = *((r3 + r5));
    0x0005a4f0 ldr.w r2, [sl]                                        |     r2 = *(sl);
    0x0005a4f4 ldr r1, [sp, 0x18]                                    |     r1 = var_18h;
    0x0005a4f6 ldr r0, [sp, 0x44]                                    |     r0 = var_44h;
    0x0005a4f8 bl 0x1babc                                            |     fcn_0001babc (r0);
    0x0005a4fc mov.w r2, -1                                          |     r2 = -1;
    0x0005a500 mov r3, r6                                            |     r3 = r6;
    0x0005a502 strd r7, r0, [sp]                                     |     __asm ("strd r7, r0, [sp]");
    0x0005a506 movs r1, 0x17                                         |     r1 = 0x17;
    0x0005a508 str r2, [sp, 8]                                       |     var_8h = r2;
    0x0005a50a mov r0, fp                                            |     r0 = fp;
    0x0005a50c movw r2, 0x513                                        |     r2 = 0x513;
    0x0005a510 bl 0x1977c                                            |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x0005a514 ldr.w r3, [fp, 4]                                     |     r3 = *(arg_9ch);
                                                                     |     if (r3 != 0) {
    0x0005a518 cbz r3, 0x5a52c                                       |         
    0x0005a51a ldr.w r2, [fp, 0x20]                                  |         r2 = *(arg_20h);
    0x0005a51e add.w r2, r2, r2, lsl 2                               |         r2 += (r2 << 2);
    0x0005a522 add.w r3, r3, r2, lsl 2                               |         r3 += (r2 << 2);
    0x0005a526 movs r2, 1                                            |         r2 = 1;
    0x0005a528 strb r2, [r3, -0x11]                                  |         *((r3 - 0x11)) = r2;
                                                                     |     }
                                                                     | label_3:
    0x0005a52c cmp r8, r4                                            |     
    0x0005a52e add.w r3, r4, 1                                       |     r3 = r4 + 1;
                                                                     |     if (r8 == r4) {
    0x0005a532 beq.w 0x5a3c4                                         |         goto label_1;
                                                                     |     }
    0x0005a536 mov r4, r3                                            |     r4 = r3;
    0x0005a538 b 0x5a496                                             |     goto label_2;
    0x0005a53a movs r3, 0                                            |     r3 = 0;
    0x0005a53c mov r2, r7                                            |     r2 = r7;
    0x0005a53e str r3, [sp]                                          |     *(sp) = r3;
    0x0005a540 movs r1, 0x4c                                         |     r1 = 0x4c;
    0x0005a542 ldr r3, [sp, 0xac]                                    |     r3 = *(arg_ach);
    0x0005a544 mov r0, fp                                            |     r0 = fp;
    0x0005a546 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005a54a b 0x5a52c                                             |     goto label_3;
                                                                     | label_43:
    0x0005a54c ldr r2, [r2, 4]                                       |     r2 = *((r2 + 4));
    0x0005a54e cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0005a550 beq 0x5a4de                                           |         goto label_4;
                                                                     |     }
                                                                     | label_44:
    0x0005a552 movs r3, 0                                            |     r3 = 0;
    0x0005a554 mov r2, r7                                            |     r2 = r7;
    0x0005a556 movs r1, 0x4d                                         |     r1 = 0x4d;
    0x0005a558 str r3, [sp]                                          |     *(sp) = r3;
    0x0005a55a mov r0, fp                                            |     r0 = fp;
    0x0005a55c bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005a560 ldr.w r3, [sl, 4]                                     |     r3 = *((sl + 4));
    0x0005a564 mov r2, r7                                            |     r2 = r7;
    0x0005a566 mov r6, r0                                            |     r6 = r0;
    0x0005a568 mov r0, sb                                            |     r0 = sb;
    0x0005a56a add r3, r5                                            |     r3 += r5;
    0x0005a56c ldr r1, [r3, 4]                                       |     r1 = *((r3 + 4));
    0x0005a56e bl 0x3c4a8                                            |     fcn_0003c4a8 (r0, r1, r2);
    0x0005a572 ldr.w r3, [fp, 0x20]                                  |     r3 = *(arg_20h);
    0x0005a576 cmp r6, r3                                            |     
    0x0005a578 itttt lo                                              |     
                                                                     |     if (r6 >= r3) {
    0x0005a57a ldrlo r2, [fp, 4]                                     |         r2 = *(arg_9ch);
                                                                     |     }
                                                                     |     if (r6 >= r3) {
    0x0005a57e addlo r6, r6, r6, lsl 2                               |         r6 += (r6 << 2);
                                                                     |     }
                                                                     |     if (r6 < r3) {
    0x0005a582 add.w r2, r2, r6, lsl 2                               |         r2 += (r6 << 2);
                                                                     |     }
                                                                     |     if (r6 < r3) {
    0x0005a586 str r3, [r2, 8]                                       |         *((r2 + 8)) = r3;
                                                                     |     }
    0x0005a588 subs r3, 1                                            |     r3--;
    0x0005a58a ldr.w r2, [fp, 0x18]                                  |     r2 = *(arg_18h);
    0x0005a58e str r3, [r2, 0x58]                                    |     *((r2 + 0x58)) = r3;
    0x0005a590 b 0x5a52c                                             |     goto label_3;
                                                                     | label_40:
    0x0005a592 ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0005a594 ldr r2, [sp, 0x40]                                    |     r2 = var_40h;
    0x0005a596 cmp r2, 0                                             |     
    0x0005a598 ite eq                                                |     
                                                                     |     if (r2 != 0) {
    0x0005a59a moveq r3, 0                                           |         r3 = 0;
                                                                     |     }
                                                                     |     if (r2 == 0) {
    0x0005a59c andne r3, r3, 1                                       |         r3 &= 1;
                                                                     |     }
    0x0005a5a0 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005a5a2 bne.w 0x5aa36                                         |         goto label_45;
                                                                     |     }
    0x0005a5a6 ldr.w r5, [sl, 8]                                     |     r5 = *((sl + 8));
    0x0005a5aa cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x0005a5ac beq.w 0x5acaa                                         |         goto label_46;
                                                                     |     }
    0x0005a5b0 str r3, [sp, 0x5c]                                    |     var_5ch = r3;
    0x0005a5b2 strd r3, r3, [sp, 0x4c]                               |     __asm ("strd r3, r3, [var_4ch]");
                                                                     | label_19:
    0x0005a5b6 ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0005a5b8 mov.w r4, -1                                          |     r4 = -1;
    0x0005a5bc movs r2, 0                                            |     r2 = 0;
    0x0005a5be str.w sl, [sp, 0x2c]                                  |     __asm ("str.w sl, [var_2ch]");
    0x0005a5c2 subs r3, 4                                            |     r3 -= 4;
    0x0005a5c4 str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x0005a5c6 ldrsh.w r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0005a5ca str r3, [sp, 0x58]                                    |     var_58h = r3;
    0x0005a5cc ldr r3, [sp, 0x98]                                    |     r3 = *(arg_98h);
    0x0005a5ce str r3, [sp, 0x1c]                                    |     var_1ch = r3;
    0x0005a5d0 b 0x5a5e0                                             |     
                                                                     |     while (r3 == 0) {
                                                                     | label_7:
    0x0005a5d2 ldr r3, [sp, 0x1c]                                    |         r3 = var_1ch;
    0x0005a5d4 ldr r5, [r5, 0x14]                                    |         r5 = *((r5 + 0x14));
    0x0005a5d6 adds r3, 1                                            |         r3++;
    0x0005a5d8 str r3, [sp, 0x1c]                                    |         var_1ch = r3;
    0x0005a5da cmp r5, 0                                             |         
                                                                     |         if (r5 == 0) {
    0x0005a5dc beq.w 0x5a83a                                         |             goto label_47;
                                                                     |         }
    0x0005a5e0 ldr r1, [sp, 0x18]                                    |         r1 = var_18h;
    0x0005a5e2 ldr r3, [r1, 4]!                                      |         r3 = *((r1 += 4));
    0x0005a5e6 str r1, [sp, 0x18]                                    |         var_18h = r1;
    0x0005a5e8 cmp r3, 0                                             |         
    0x0005a5ea beq 0x5a5d2                                           |         
                                                                     |     }
    0x0005a5ec cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0005a5ee beq.w 0x5a82c                                         |         goto label_48;
                                                                     |     }
                                                                     | label_9:
    0x0005a5f2 ldr.w r0, [fp, 0x18]                                  |     r0 = *(arg_18h);
    0x0005a5f6 bl 0x19ed0                                            |     fcn_00019ed0 (r0);
    0x0005a5fa ldr r3, [r5, 0x24]                                    |     r3 = *((r5 + 0x24));
    0x0005a5fc mov r7, r0                                            |     r7 = r0;
    0x0005a5fe str r0, [sp, 0x20]                                    |     var_20h = r0;
                                                                     |     if (r3 != 0) {
    0x0005a600 cbz r3, 0x5a62c                                       |         
    0x0005a602 ldr r3, [sp, 0x18]                                    |         r3 = var_18h;
    0x0005a604 movs r6, 0                                            |         r6 = 0;
    0x0005a606 mov r2, r6                                            |         r2 = r6;
    0x0005a608 movs r1, 0x1c                                         |         r1 = 0x1c;
    0x0005a60a str r6, [sp]                                          |         *(sp) = r6;
    0x0005a60c mov r0, fp                                            |         r0 = fp;
    0x0005a60e ldr r3, [r3]                                          |         r3 = *(r3);
    0x0005a610 bl 0x18bf8                                            |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005a614 ldr r3, [sp, 0x9c]                                    |         r3 = *(arg_9ch);
    0x0005a616 mov r2, r7                                            |         r2 = r7;
    0x0005a618 ldr r1, [r5, 0x24]                                    |         r1 = *((r5 + 0x24));
    0x0005a61a mov r0, sb                                            |         r0 = sb;
    0x0005a61c adds r3, 1                                            |         r3++;
    0x0005a61e str.w r3, [sb, 0x5c]                                  |         __asm ("str.w r3, [sb, 0x5c]");
    0x0005a622 movs r3, 8                                            |         r3 = 8;
    0x0005a624 bl 0x3cee8                                            |         fcn_0003cee8 (r0, r1, r2, r3, r4, r5);
    0x0005a628 str.w r6, [sb, 0x5c]                                  |         __asm ("str.w r6, [sb, 0x5c]");
                                                                     |     }
    0x0005a62c ldrd r2, r6, [sb, 0x38]                               |     __asm ("ldrd r2, r6, [sb, 0x38]");
    0x0005a630 ldrh r3, [r5, 0x34]                                   |     r3 = *((r5 + 0x34));
    0x0005a632 cmp r3, r2                                            |     
    0x0005a634 iteee gt                                              |     
                                                                     |     if (r3 <= r2) {
    0x0005a636 ldrgt r2, [sb, 0x48]                                  |         r2 = *((sb + 0x48));
                                                                     |     }
                                                                     |     if (r3 > r2) {
    0x0005a63a suble r2, r2, r3                                      |         r2 -= r3;
                                                                     |     }
                                                                     |     if (r3 > r2) {
    0x0005a63c strle r2, [sb, 0x38]                                  |         *((sb + 0x38)) = r2;
                                                                     |     }
                                                                     |     if (r3 <= r2) {
    0x0005a640 adds r2, r3, r6                                       |         r2 = r3 + r6;
                                                                     |     }
    0x0005a642 iteee le                                              |     
                                                                     |     if (r2 > r3) {
    0x0005a644 strle r2, [sb, 0x3c]                                  |         *((sb + 0x3c)) = r2;
                                                                     |     }
                                                                     |     if (r2 <= r3) {
    0x0005a648 addgt r6, r2, 1                                       |         r6 = r2 + 1;
                                                                     |     }
                                                                     |     if (r2 <= r3) {
    0x0005a64a addgt r2, r2, r3                                      |         r2 += r3;
                                                                     |     }
                                                                     |     if (r2 > r3) {
    0x0005a64c str.w r2, [sb, 0x48]                                  |         __asm ("str.w r2, [sb, 0x48]");
                                                                     |     }
                                                                     |     if (r3 == 0) {
    0x0005a650 cbz r3, 0x5a6b2                                       |         goto label_49;
                                                                     |     }
    0x0005a652 movs r7, 0                                            |     r7 = 0;
    0x0005a654 str.w sb, [sp, 0x38]                                  |     __asm ("str.w sb, [var_38h]");
    0x0005a658 ldr.w sl, [sp, 0x9c]                                  |     sl = *(arg_9ch);
    0x0005a65c mov r8, r7                                            |     r8 = r7;
    0x0005a65e ldr.w sb, [sp, 0x2c]                                  |     sb = var_2ch;
    0x0005a662 mov r1, r3                                            |     r1 = r3;
    0x0005a664 str r6, [sp, 0x34]                                    |     var_34h = r6;
    0x0005a666 b 0x5a68e                                             |     
                                                                     |     while (r2 >= 0) {
    0x0005a668 ldrsh.w r0, [sb, 0x24]                                |         r0 = *((sb + 0x24));
    0x0005a66c cmp r0, r2                                            |         
    0x0005a66e itt ne                                                |         
                                                                     |         if (r0 == r2) {
    0x0005a670 addne r2, sl                                          |             r2 += sl;
                                                                     |         }
                                                                     |         if (r0 == r2) {
    0x0005a672 addne r2, 1                                           |             r2++;
                                                                     |         }
                                                                     |         if (r0 == r2) {
    0x0005a674 beq 0x5a698                                           |             goto label_50;
                                                                     |         }
                                                                     | label_6:
    0x0005a676 movs r1, 0x22                                         |         r1 = 0x22;
    0x0005a678 mov r3, r6                                            |         r3 = r6;
    0x0005a67a mov r0, fp                                            |         r0 = fp;
    0x0005a67c str.w r8, [sp]                                        |         __asm ("str.w r8, [sp]");
    0x0005a680 bl 0x18bf8                                            |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005a684 ldrh r1, [r5, 0x34]                                   |         r1 = *((r5 + 0x34));
                                                                     | label_5:
    0x0005a686 adds r7, 1                                            |         r7++;
    0x0005a688 adds r6, 1                                            |         r6++;
    0x0005a68a cmp r1, r7                                            |         
                                                                     |         if (r1 <= r7) {
    0x0005a68c ble 0x5a6ac                                           |             goto label_51;
                                                                     |         }
    0x0005a68e ldr r2, [r5, 4]                                       |         r2 = *((r5 + 4));
    0x0005a690 ldrsh.w r2, [r2, r7, lsl 1]                           |         offset_1 = r7 << 1;
                                                                     |         r2 = *((r2 + offset_1));
    0x0005a694 cmp r2, 0                                             |         
    0x0005a696 bge 0x5a668                                           |         
                                                                     |     }
                                                                     | label_50:
    0x0005a698 cmp r4, r6                                            |     
                                                                     |     if (r4 == r6) {
    0x0005a69a beq 0x5a686                                           |         goto label_5;
                                                                     |     }
    0x0005a69c ldr r2, [r5, 0x24]                                    |     r2 = *((r5 + 0x24));
    0x0005a69e cmp r2, 0                                             |     
    0x0005a6a0 mov r2, sl                                            |     r2 = sl;
    0x0005a6a2 ite eq                                                |     
                                                                     |     if (r2 != 0) {
    0x0005a6a4 moveq r4, r6                                          |         r4 = r6;
                                                                     |     }
                                                                     |     if (r2 == 0) {
    0x0005a6a6 movne r4, -1                                          |         r4 = -1;
                                                                     |     }
    0x0005a6aa b 0x5a676                                             |     goto label_6;
                                                                     | label_51:
    0x0005a6ac ldrd r6, sb, [sp, 0x34]                               |     __asm ("ldrd r6, sb, [var_34h]");
    0x0005a6b0 mov r3, r1                                            |     r3 = r1;
                                                                     | label_49:
    0x0005a6b2 ldr r2, [sp, 0x18]                                    |     r2 = var_18h;
    0x0005a6b4 movs r1, 0x30                                         |     r1 = 0x30;
    0x0005a6b6 mov r0, fp                                            |     r0 = fp;
    0x0005a6b8 ldr r2, [r2]                                          |     r2 = *(r2);
    0x0005a6ba str r2, [sp]                                          |     *(sp) = r2;
    0x0005a6bc mov r2, r6                                            |     r2 = r6;
    0x0005a6be bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005a6c2 ldrh r2, [r5, 0x34]                                   |     r2 = *((r5 + 0x34));
    0x0005a6c4 mov r1, r6                                            |     r1 = r6;
    0x0005a6c6 mov r0, sb                                            |     r0 = sb;
    0x0005a6c8 bl 0xaea0                                             |     fcn_0000aea0 (r0, r1, r2);
    0x0005a6cc ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0005a6ce ldr r7, [sp, 0x40]                                    |     r7 = var_40h;
    0x0005a6d0 subs r2, r3, r5                                       |     r2 = r3 - r5;
    0x0005a6d2 ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0005a6d4 clz r2, r2                                            |     r2 &= r2;
    0x0005a6d8 lsrs r2, r2, 5                                        |     r2 >>= 5;
    0x0005a6da cmp r7, 0                                             |     
    0x0005a6dc ite ne                                                |     
                                                                     |     if (r7 == 0) {
    0x0005a6de movne r3, 0                                           |         r3 = 0;
                                                                     |     }
                                                                     |     if (r7 != 0) {
    0x0005a6e0 andeq r3, r3, 1                                       |         r3 &= 1;
                                                                     |     }
    0x0005a6e4 ldr r7, [sp, 0x20]                                    |     r7 = var_20h;
    0x0005a6e6 tst r2, r3                                            |     
    0x0005a6e8 str r2, [sp, 0x48]                                    |     var_48h = r2;
    0x0005a6ea mvn.w r7, r7                                          |     r7 = ~r7;
    0x0005a6ee str r7, [sp, 0x34]                                    |     var_34h = r7;
                                                                     |     if ((r2 & r3) != 0) {
    0x0005a6f0 bne.w 0x5aa20                                         |         goto label_52;
                                                                     |     }
    0x0005a6f4 ldrb.w r7, [r5, 0x36]                                 |     r7 = *((r5 + 0x36));
    0x0005a6f8 cmp r7, 0                                             |     
                                                                     |     if (r7 == 0) {
    0x0005a6fa beq.w 0x5a880                                         |         goto label_53;
                                                                     |     }
    0x0005a6fe ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0005a700 cmp r3, 0xa                                           |     
                                                                     |     if (r3 == 0xa) {
    0x0005a702 beq.w 0x5a860                                         |         goto label_54;
                                                                     |     }
    0x0005a706 ldr r2, [sp, 0x30]                                    |     r2 = var_30h;
    0x0005a708 mov r7, r3                                            |     r7 = r3;
    0x0005a70a cmp r3, 5                                             |     
    0x0005a70c it eq                                                 |     
                                                                     |     if (r3 != 5) {
    0x0005a70e orreq r2, r2, 1                                       |         r2 |= 1;
                                                                     |     }
    0x0005a712 str r2, [sp, 0x38]                                    |     var_38h = r2;
                                                                     | label_11:
    0x0005a714 ldrh.w r8, [r5, 0x32]                                 |     r8 = *((r5 + 0x32));
    0x0005a718 movs r1, 0x41                                         |     r1 = 0x41;
    0x0005a71a ldrd r2, r3, [sp, 0x1c]                               |     __asm ("ldrd r2, r3, [var_1ch]");
    0x0005a71e mov r0, fp                                            |     r0 = fp;
    0x0005a720 str r6, [sp]                                          |     *(sp) = r6;
    0x0005a722 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005a726 mvn r3, 0xd                                           |     r3 = ~0xd;
    0x0005a72a mov r1, r0                                            |     r1 = r0;
    0x0005a72c mov r2, r8                                            |     r2 = r8;
    0x0005a72e mov r0, fp                                            |     r0 = fp;
    0x0005a730 bl 0x1021c                                            |     fcn_0001021c (r0, r1, r2, r3);
    0x0005a734 ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0005a736 cmp r3, r5                                            |     
    0x0005a738 it eq                                                 |     
                                                                     |     if (r3 != r5) {
    0x0005a73a moveq sl, r6                                          |         sl = r6;
                                                                     |     }
                                                                     |     if (r3 != r5) {
    0x0005a73c beq 0x5a758                                           |         
    0x0005a73e ldrd r3, sl, [sb, 0x38]                               |         __asm ("ldrd r3, sl, [sb, 0x38]");
    0x0005a742 ldr r2, [sp, 0x3c]                                    |         r2 = var_3ch;
    0x0005a744 cmp r2, r3                                            |         
                                                                     |         if (r2 > r3) {
    0x0005a746 bgt.w 0x5a84e                                         |             goto label_55;
                                                                     |         }
    0x0005a74a subs r3, r3, r2                                       |         r3 -= r2;
    0x0005a74c str.w r3, [sb, 0x38]                                  |         __asm ("str.w r3, [sb, 0x38]");
    0x0005a750 add.w r3, r2, sl                                      |         r3 = r2 + sl;
    0x0005a754 str.w r3, [sb, 0x3c]                                  |         __asm ("str.w r3, [sb, 0x3c]");
                                                                     |     }
                                                                     | label_10:
    0x0005a758 ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
                                                                     |     if (r3 != 0) {
    0x0005a75a cbz r3, 0x5a77a                                       |         
    0x0005a75c ldr r3, [sp, 0x2c]                                    |         r3 = var_2ch;
    0x0005a75e ldrb.w r3, [r3, 0x2c]                                 |         r3 = *((r3 + 0x2c));
    0x0005a762 ands r3, r3, 0x20                                     |         r3 &= 0x20;
                                                                     |         if (r3 == r3) {
    0x0005a766 beq.w 0x5a9dc                                         |             goto label_56;
                                                                     |         }
    0x0005a76a ldr r3, [sp, 0x24]                                    |         r3 = var_24h;
    0x0005a76c cmp r3, r5                                            |         
                                                                     |         if (r3 != r5) {
    0x0005a76e bne.w 0x5a8b6                                         |             goto label_57;
                                                                     |         }
                                                                     | label_12:
    0x0005a772 ldr r3, [sp, 0xa0]                                    |         r3 = *(arg_a0h);
    0x0005a774 cmp r3, 0                                             |         
                                                                     |         if (r3 != 0) {
    0x0005a776 bne.w 0x5a916                                         |             goto label_58;
                                                                     |         }
                                                                     |     }
                                                                     | label_14:
    0x0005a77a cmp r7, 3                                             |     
                                                                     |     if (r7 > 3) {
    0x0005a77c bgt 0x5a814                                           |         goto label_59;
                                                                     |     }
    0x0005a77e cmp r7, 0                                             |     
                                                                     |     if (r7 != 0) {
    0x0005a780 bne 0x5a874                                           |         goto label_60;
                                                                     |     }
                                                                     |     do {
    0x0005a782 ldr.w r3, [sb, 0x198]                                 |         r3 = *((sb + 0x198));
    0x0005a786 movs r2, 1                                            |         r2 = 1;
    0x0005a788 cmp r3, 0                                             |         
    0x0005a78a it eq                                                 |         
                                                                     |         if (r3 != 0) {
    0x0005a78c moveq r3, sb                                          |             r3 = sb;
                                                                     |         }
    0x0005a78e strb r2, [r3, 0x14]                                   |         *((r3 + 0x14)) = r2;
    0x0005a790 ldr r3, [sp, 0x44]                                    |         r3 = var_44h;
    0x0005a792 ldr r3, [r3, 0x18]                                    |         r3 = *((r3 + 0x18));
    0x0005a794 ands r2, r3, 0x40000                                  |         r2 = r3 & 0x40000;
                                                                     |         if (r2 != r3) {
    0x0005a798 bne.w 0x5abd8                                         |             goto label_61;
                                                                     |         }
                                                                     | label_22:
    0x0005a79c ldr r3, [sp, 0x48]                                    |         r3 = var_48h;
    0x0005a79e movs r1, 5                                            |         r1 = 5;
    0x0005a7a0 mov r0, sb                                            |         r0 = sb;
    0x0005a7a2 str r3, [sp, 0x14]                                    |         var_14h = r3;
    0x0005a7a4 ldr r3, [sp, 0x58]                                    |         r3 = var_58h;
    0x0005a7a6 strd sl, r3, [sp, 4]                                  |         __asm ("strd sl, r3, [var_8h]");
    0x0005a7aa ldr r3, [sp, 0x98]                                    |         r3 = *(arg_98h);
    0x0005a7ac str r3, [sp]                                          |         *(sp) = r3;
    0x0005a7ae movs r3, 0                                            |         r3 = 0;
    0x0005a7b0 strd r3, r1, [sp, 0xc]                                |         __asm ("strd r3, r1, [var_ch]");
    0x0005a7b4 movs r3, 1                                            |         r3 = 1;
    0x0005a7b6 str r3, [sp, 0x4c]                                    |         var_4ch = r3;
    0x0005a7b8 ldr r1, [sp, 0x2c]                                    |         r1 = var_2ch;
    0x0005a7ba ldr r3, [sp, 0x54]                                    |         r3 = var_54h;
    0x0005a7bc bl 0x59374                                            |         fcn_00059374 (r0, r1, r2, r3, r4, r5, r6);
                                                                     | label_8:
    0x0005a7c0 ldr r0, [sp, 0x34]                                    |         r0 = var_34h;
    0x0005a7c2 ldr.w r2, [fp, 0x18]                                  |         r2 = *(arg_18h);
    0x0005a7c6 cmp r0, 0                                             |         
                                                                     |         if (r0 >= 0) {
    0x0005a7c8 blt 0x5a7d6                                           |             
    0x0005a7ca ldr r3, [r2, 0x70]                                    |             r3 = *((r2 + 0x70));
                                                                     |             if (r3 == 0) {
    0x0005a7cc cbz r3, 0x5a7d6                                       |                 goto label_62;
                                                                     |             }
    0x0005a7ce ldr.w r1, [fp, 0x20]                                  |             r1 = *(arg_20h);
    0x0005a7d2 str.w r1, [r3, r0, lsl 2]                             |             __asm ("str.w r1, [r3, r0, lsl 2]");
                                                                     |         }
                                                                     | label_62:
    0x0005a7d6 ldr.w r3, [fp, 0x20]                                  |         r3 = *(arg_20h);
    0x0005a7da mov r1, r6                                            |         r1 = r6;
    0x0005a7dc ldrh r7, [r5, 0x34]                                   |         r7 = *((r5 + 0x34));
    0x0005a7de mov r0, sb                                            |         r0 = sb;
    0x0005a7e0 subs r3, 1                                            |         r3--;
    0x0005a7e2 str r3, [r2, 0x58]                                    |         *((r2 + 0x58)) = r3;
    0x0005a7e4 mov r2, r7                                            |         r2 = r7;
    0x0005a7e6 bl 0xaea0                                             |         fcn_0000aea0 (r0, r1, r2);
    0x0005a7ea ldr.w r3, [sb, 0x38]                                  |         r3 = *((sb + 0x38));
    0x0005a7ee cmp r7, r3                                            |         
    0x0005a7f0 it gt                                                 |         
                                                                     |         if (r7 > r3) {
    0x0005a7f2 strdgt r7, r6, [sb, 0x38]                             |             __asm ("strdgt r7, r6, [sb, 0x38]");
                                                                     |         }
    0x0005a7f6 cmp sl, r6                                            |         
                                                                     |         if (sl == r6) {
    0x0005a7f8 beq 0x5a828                                           |             goto label_63;
                                                                     |         }
    0x0005a7fa ldr r6, [sp, 0x3c]                                    |         r6 = var_3ch;
    0x0005a7fc mov r1, sl                                            |         r1 = sl;
    0x0005a7fe mov r2, r6                                            |         r2 = r6;
    0x0005a800 bl 0xaea0                                             |         fcn_0000aea0 (r0, r1, r2);
    0x0005a804 ldr.w r3, [sb, 0x38]                                  |         r3 = *((sb + 0x38));
    0x0005a808 cmp r6, r3                                            |         
                                                                     |         if (r6 <= r3) {
    0x0005a80a ble 0x5a828                                           |             goto label_63;
                                                                     |         }
    0x0005a80c movs r2, 1                                            |         r2 = 1;
    0x0005a80e strd r6, sl, [sb, 0x38]                               |         __asm ("strd r6, sl, [sb, 0x38]");
    0x0005a812 b 0x5a5d2                                             |         goto label_7;
                                                                     | label_59:
    0x0005a814 cmp r7, 4                                             |         
    0x0005a816 bne 0x5a782                                           |         
                                                                     |     } while (r7 != 4);
    0x0005a818 movs r2, 0                                            |     r2 = 0;
    0x0005a81a ldr r3, [sp, 0xac]                                    |     r3 = *(arg_ach);
    0x0005a81c movs r1, 0x10                                         |     r1 = 0x10;
    0x0005a81e mov r0, fp                                            |     r0 = fp;
    0x0005a820 str r2, [sp]                                          |     *(sp) = r2;
    0x0005a822 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005a826 b 0x5a7c0                                             |     goto label_8;
                                                                     | label_63:
    0x0005a828 movs r2, 1                                            |     r2 = 1;
    0x0005a82a b 0x5a5d2                                             |     goto label_7;
                                                                     | label_48:
    0x0005a82c ldr r3, [sp, 0x9c]                                    |     r3 = *(arg_9ch);
    0x0005a82e mov r0, fp                                            |     r0 = fp;
    0x0005a830 ldr r1, [sp, 0x2c]                                    |     r1 = var_2ch;
    0x0005a832 adds r2, r3, 1                                        |     r2 = r3 + 1;
    0x0005a834 bl 0x197e4                                            |     fcn_000197e4 (r0, r1, r2);
    0x0005a838 b 0x5a5f2                                             |     goto label_9;
                                                                     | label_47:
    0x0005a83a ldr r3, [sp, 0x50]                                    |     r3 = var_50h;
    0x0005a83c cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005a83e bne.w 0x5ab94                                         |         goto label_64;
                                                                     |     }
                                                                     | label_20:
    0x0005a842 ldr r3, [sp, 0xb0]                                    |     r3 = *(arg_18h);
    0x0005a844 ldr r2, [sp, 0x4c]                                    |     r2 = var_4ch;
    0x0005a846 str r2, [r3]                                          |     *(r3) = r2;
    0x0005a848 add sp, 0x74                                          |     
    0x0005a84a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |     
                                                                     | label_55:
    0x0005a84e ldr.w r3, [sb, 0x48]                                  |     r3 = *((sb + 0x48));
    0x0005a852 ldr r2, [sp, 0x3c]                                    |     r2 = var_3ch;
    0x0005a854 add.w sl, r3, 1                                       |     sl = r3 + 1;
    0x0005a858 add r2, r3                                            |     r2 += r3;
    0x0005a85a str.w r2, [sb, 0x48]                                  |     __asm ("str.w r2, [sb, 0x48]");
    0x0005a85e b 0x5a758                                             |     goto label_10;
                                                                     | label_54:
    0x0005a860 cmp r7, 0xa                                           |     
    0x0005a862 ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
                                                                     |     if (r7 == 0xa) {
    0x0005a864 beq.w 0x5abd2                                         |         goto label_65;
                                                                     |     }
    0x0005a868 cmp r7, 5                                             |     
    0x0005a86a it eq                                                 |     
                                                                     |     if (r7 != 5) {
    0x0005a86c orreq r3, r3, 1                                       |         r3 |= 1;
                                                                     |     }
    0x0005a870 str r3, [sp, 0x38]                                    |     var_38h = r3;
    0x0005a872 b 0x5a714                                             |     goto label_11;
                                                                     | label_60:
    0x0005a874 mov r1, r7                                            |     r1 = r7;
    0x0005a876 mov r2, r5                                            |     r2 = r5;
    0x0005a878 mov r0, sb                                            |     r0 = sb;
    0x0005a87a bl 0x1a7b4                                            |     fcn_0001a7b4 (r0, r1, r2);
    0x0005a87e b 0x5a7c0                                             |     goto label_8;
                                                                     | label_53:
    0x0005a880 ldrh r7, [r5, 0x34]                                   |     r7 = *((r5 + 0x34));
    0x0005a882 mov r2, r7                                            |     r2 = r7;
    0x0005a884 bl 0xaea0                                             |     fcn_0000aea0 (r0, r1, r2);
    0x0005a888 ldr.w r3, [sb, 0x38]                                  |     r3 = *((sb + 0x38));
    0x0005a88c ldr r0, [sp, 0x34]                                    |     r0 = var_34h;
    0x0005a88e ldr.w r2, [fp, 0x18]                                  |     r2 = *(arg_18h);
    0x0005a892 cmp r7, r3                                            |     
    0x0005a894 it gt                                                 |     
                                                                     |     if (r7 > r3) {
    0x0005a896 strdgt r7, r6, [sb, 0x38]                             |         __asm ("strdgt r7, r6, [sb, 0x38]");
                                                                     |     }
    0x0005a89a cmp r0, 0                                             |     
                                                                     |     if (r0 >= 0) {
    0x0005a89c blt 0x5a8aa                                           |         
    0x0005a89e ldr r3, [r2, 0x70]                                    |         r3 = *((r2 + 0x70));
                                                                     |         if (r3 == 0) {
    0x0005a8a0 cbz r3, 0x5a8aa                                       |             goto label_17;
                                                                     |         }
                                                                     | label_18:
    0x0005a8a2 ldr.w r1, [fp, 0x20]                                  |         r1 = *(arg_20h);
    0x0005a8a6 str.w r1, [r3, r0, lsl 2]                             |         __asm ("str.w r1, [r3, r0, lsl 2]");
                                                                     |     }
                                                                     | label_17:
    0x0005a8aa ldr.w r3, [fp, 0x20]                                  |     r3 = *(arg_20h);
    0x0005a8ae subs r3, 1                                            |     r3--;
    0x0005a8b0 str r3, [r2, 0x58]                                    |     *((r2 + 0x58)) = r3;
    0x0005a8b2 movs r2, 1                                            |     r2 = 1;
    0x0005a8b4 b 0x5a5d2                                             |     goto label_7;
                                                                     | label_57:
    0x0005a8b6 ldr r2, [sp, 0x24]                                    |     r2 = var_24h;
    0x0005a8b8 ldrh r3, [r2, 0x32]                                   |     r3 = *((r2 + 0x32));
    0x0005a8ba cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005a8bc beq.w 0x5a772                                         |         goto label_12;
                                                                     |     }
    0x0005a8c0 str r7, [sp, 0x38]                                    |     var_38h = r7;
    0x0005a8c2 mov.w r8, 0                                           |     r8 = 0;
    0x0005a8c6 ldr r7, [sp, 0x1c]                                    |     r7 = var_1ch;
    0x0005a8c8 str r4, [sp, 0x60]                                    |     var_60h = r4;
    0x0005a8ca mov r4, r2                                            |     r4 = r2;
                                                                     | label_13:
    0x0005a8cc ldrh r0, [r5, 0x34]                                   |     r0 = *((r5 + 0x34));
    0x0005a8ce ldr r3, [r4, 4]                                       |     r3 = *((r4 + 4));
    0x0005a8d0 ldrsh.w ip, [r3, r8, lsl 1]                           |     offset_2 = r8 << 1;
                                                                     |     ip = *((r3 + offset_2));
    0x0005a8d4 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0005a8d6 beq 0x5a9c4                                           |         goto label_66;
                                                                     |     }
    0x0005a8d8 ldr r2, [r5, 4]                                       |     r2 = *((r5 + 4));
    0x0005a8da movs r3, 0                                            |     r3 = 0;
    0x0005a8dc subs r2, 2                                            |     r2 -= 2;
    0x0005a8de b 0x5a8e6                                             |     
                                                                     |     while (r1 != ip) {
    0x0005a8e0 adds r3, 1                                            |         r3++;
    0x0005a8e2 cmp r3, r0                                            |         
                                                                     |         if (r3 == r0) {
    0x0005a8e4 beq 0x5a9c4                                           |             goto label_66;
                                                                     |         }
    0x0005a8e6 ldrsh r1, [r2, 2]!                                    |         r1 = *((r2 += 2));
    0x0005a8ea cmp r1, ip                                            |         
    0x0005a8ec bne 0x5a8e0                                           |         
                                                                     |     }
    0x0005a8ee sxth r3, r3                                           |     __asm ("sxth r3, r3");
                                                                     | label_15:
    0x0005a8f0 add.w r2, sl, r8                                      |     r2 = sl + r8;
    0x0005a8f4 str r2, [sp]                                          |     *(sp) = r2;
    0x0005a8f6 movs r1, 0x2e                                         |     r1 = 0x2e;
    0x0005a8f8 mov r2, r7                                            |     r2 = r7;
    0x0005a8fa mov r0, fp                                            |     r0 = fp;
    0x0005a8fc bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005a900 ldrh r3, [r4, 0x32]                                   |     r3 = *((r4 + 0x32));
    0x0005a902 add.w r8, r8, 1                                       |     r8++;
    0x0005a906 cmp r3, r8                                            |     
                                                                     |     if (r3 > r8) {
    0x0005a908 bgt 0x5a8cc                                           |         goto label_13;
                                                                     |     }
    0x0005a90a ldr r3, [sp, 0xa0]                                    |     r3 = *(arg_a0h);
    0x0005a90c ldr r7, [sp, 0x38]                                    |     r7 = var_38h;
    0x0005a90e ldr r4, [sp, 0x60]                                    |     r4 = var_60h;
    0x0005a910 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005a912 beq.w 0x5a77a                                         |         goto label_14;
                                                                     |     }
                                                                     | label_58:
    0x0005a916 ldrb.w r3, [r5, 0x37]                                 |     r3 = *((r5 + 0x37));
    0x0005a91a ldr r1, [sp, 0x24]                                    |     r1 = var_24h;
    0x0005a91c and r3, r3, 3                                         |     r3 &= 3;
    0x0005a920 cmp r3, 2                                             |     
    0x0005a922 ite eq                                                |     
                                                                     |     if (r3 != 2) {
    0x0005a924 moveq r3, r6                                          |         r3 = r6;
                                                                     |     }
                                                                     |     if (r3 == 2) {
    0x0005a926 movne r3, sl                                          |         r3 = sl;
                                                                     |     }
    0x0005a928 ldrh r2, [r1, 0x32]                                   |     r2 = *((r1 + 0x32));
    0x0005a92a str r3, [sp, 0x38]                                    |     var_38h = r3;
    0x0005a92c ldr.w r3, [fp, 0x20]                                  |     r3 = *(arg_20h);
    0x0005a930 add r3, r2                                            |     r3 += r2;
    0x0005a932 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0005a934 beq.w 0x5a77a                                         |         goto label_14;
                                                                     |     }
    0x0005a938 ldr r2, [sp, 0xa0]                                    |     r2 = *(arg_a0h);
    0x0005a93a movs r0, 0x4e                                         |     r0 = 0x4e;
    0x0005a93c strd r5, r7, [sp, 0x60]                               |     __asm ("strd r5, r7, [var_60h]");
    0x0005a940 mov.w r8, 0                                           |     r8 = 0;
    0x0005a944 str r4, [sp, 0x68]                                    |     var_68h = r4;
    0x0005a946 mov r5, r0                                            |     r5 = r0;
    0x0005a948 adds r2, 1                                            |     r2++;
    0x0005a94a str.w sl, [sp, 0x6c]                                  |     __asm ("str.w sl, [var_6ch]");
    0x0005a94e mov r7, r2                                            |     r7 = r2;
    0x0005a950 ldr.w sl, [sp, 0x20]                                  |     sl = var_20h;
    0x0005a954 mov r4, r1                                            |     r4 = r1;
    0x0005a956 str r6, [sp, 0x20]                                    |     var_20h = r6;
    0x0005a958 mov r6, r3                                            |     r6 = r3;
                                                                     |     do {
    0x0005a95a ldr r2, [r4, 0x20]                                    |         r2 = *((r4 + 0x20));
    0x0005a95c mov r0, sb                                            |         r0 = sb;
    0x0005a95e ldr.w r1, [r2, r8, lsl 2]                             |         offset_3 = r8 << 2;
                                                                     |         r1 = *((r2 + offset_3));
    0x0005a962 bl 0x21fac                                            |         fcn_00021fac (r0, r1);
    0x0005a966 ldr r2, [r4, 4]                                       |         r2 = *((r4 + 4));
    0x0005a968 mvn r3, 3                                             |         r3 = ~3;
    0x0005a96c ldrh r1, [r4, 0x32]                                   |         r1 = *((r4 + 0x32));
    0x0005a96e ldrsh.w r2, [r2, r8, lsl 1]                           |         offset_4 = r8 << 1;
                                                                     |         r2 = *((r2 + offset_4));
    0x0005a972 str r3, [sp, 8]                                       |         var_8h = r3;
    0x0005a974 subs r1, 1                                            |         r1--;
    0x0005a976 ldr r3, [sp, 0x38]                                    |         r3 = var_38h;
    0x0005a978 cmp r1, r8                                            |         
    0x0005a97a itt eq                                                |         
                                                                     |         if (r1 != r8) {
    0x0005a97c moveq r6, sl                                          |             r6 = sl;
                                                                     |         }
                                                                     |         if (r1 != r8) {
    0x0005a97e moveq r5, 0x4f                                        |             r5 = 0x4f;
                                                                     |         }
    0x0005a980 add r2, r7                                            |         r2 += r7;
    0x0005a982 str r0, [sp, 4]                                       |         var_4h = r0;
    0x0005a984 add.w r1, r3, r8                                      |         r1 = r3 + r8;
    0x0005a988 mov r0, fp                                            |         r0 = fp;
    0x0005a98a str r1, [sp]                                          |         *(sp) = r1;
    0x0005a98c mov r3, r6                                            |         r3 = r6;
    0x0005a98e mov r1, r5                                            |         r1 = r5;
    0x0005a990 bl 0x1977c                                            |         fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x0005a994 ldr.w r2, [fp, 4]                                     |         r2 = *(arg_9ch);
                                                                     |         if (r2 != 0) {
    0x0005a998 cbz r2, 0x5a9ae                                       |             
    0x0005a99a ldr.w r1, [fp, 0x20]                                  |             r1 = *(arg_20h);
    0x0005a99e mvn r3, 0x77                                          |             r3 = ~0x77;
    0x0005a9a2 add.w r1, r1, r1, lsl 2                               |             r1 += (r1 << 2);
    0x0005a9a6 add.w r2, r2, r1, lsl 2                               |             r2 += (r1 << 2);
    0x0005a9aa strb r3, [r2, -0x11]                                  |             *((r2 - 0x11)) = r3;
                                                                     |         }
    0x0005a9ae ldrh r2, [r4, 0x32]                                   |         r2 = *((r4 + 0x32));
    0x0005a9b0 add.w r8, r8, 1                                       |         r8++;
    0x0005a9b4 cmp r2, r8                                            |         
    0x0005a9b6 bgt 0x5a95a                                           |         
                                                                     |     } while (r2 > r8);
    0x0005a9b8 ldrd r5, r7, [sp, 0x60]                               |     __asm ("ldrd r5, r7, [var_60h]");
    0x0005a9bc ldrd r4, sl, [sp, 0x68]                               |     __asm ("ldrd r4, sl, [var_68h]");
    0x0005a9c0 ldr r6, [sp, 0x20]                                    |     r6 = var_20h;
    0x0005a9c2 b 0x5a77a                                             |     goto label_14;
                                                                     | label_66:
    0x0005a9c4 mov.w r3, -1                                          |     r3 = -1;
    0x0005a9c8 b 0x5a8f0                                             |     goto label_15;
                                                                     | label_42:
    0x0005a9ca movs r3, 0                                            |     r3 = 0;
    0x0005a9cc movs r2, 0                                            |     r2 = 0;
    0x0005a9ce str r3, [sp]                                          |     *(sp) = r3;
    0x0005a9d0 movs r1, 0x10                                         |     r1 = 0x10;
    0x0005a9d2 ldr r3, [sp, 0xac]                                    |     r3 = *(arg_ach);
    0x0005a9d4 mov r0, fp                                            |     r0 = fp;
    0x0005a9d6 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005a9da b 0x5a41c                                             |     goto label_16;
                                                                     | label_56:
    0x0005a9dc str r3, [sp]                                          |     *(sp) = r3;
    0x0005a9de movs r1, 0x6e                                         |     r1 = 0x6e;
    0x0005a9e0 mov r3, sl                                            |     r3 = sl;
    0x0005a9e2 ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0005a9e4 mov r0, fp                                            |     r0 = fp;
    0x0005a9e6 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005a9ea ldr r3, [sp, 0xa0]                                    |     r3 = *(arg_a0h);
    0x0005a9ec cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005a9ee beq.w 0x5a77a                                         |         goto label_14;
                                                                     |     }
    0x0005a9f2 ldr r2, [sp, 0xa0]                                    |     r2 = *(arg_a0h);
    0x0005a9f4 movs r1, 0x4f                                         |     r1 = 0x4f;
    0x0005a9f6 ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0005a9f8 mov r0, fp                                            |     r0 = fp;
    0x0005a9fa str r2, [sp]                                          |     *(sp) = r2;
    0x0005a9fc mov r2, sl                                            |     r2 = sl;
    0x0005a9fe bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005aa02 ldr.w r3, [fp, 4]                                     |     r3 = *(arg_9ch);
    0x0005aa06 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005aa08 beq.w 0x5a77a                                         |         goto label_14;
                                                                     |     }
    0x0005aa0c ldr.w r2, [fp, 0x20]                                  |     r2 = *(arg_20h);
    0x0005aa10 add.w r2, r2, r2, lsl 2                               |     r2 += (r2 << 2);
    0x0005aa14 add.w r3, r3, r2, lsl 2                               |     r3 += (r2 << 2);
    0x0005aa18 movs r2, 0x88                                         |     r2 = 0x88;
    0x0005aa1a strb r2, [r3, -0x11]                                  |     *((r3 - 0x11)) = r2;
    0x0005aa1e b 0x5a77a                                             |     goto label_14;
                                                                     | label_52:
    0x0005aa20 cmp r7, 0                                             |     
    0x0005aa22 ldr.w r2, [fp, 0x18]                                  |     r2 = *(arg_18h);
    0x0005aa26 mov r0, r7                                            |     r0 = r7;
                                                                     |     if (r7 < 0) {
    0x0005aa28 blt.w 0x5a8aa                                         |         goto label_17;
                                                                     |     }
    0x0005aa2c ldr r3, [r2, 0x70]                                    |     r3 = *((r2 + 0x70));
    0x0005aa2e cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005aa30 bne.w 0x5a8a2                                         |         goto label_18;
                                                                     |     }
    0x0005aa34 b 0x5a8aa                                             |     goto label_17;
                                                                     | label_45:
    0x0005aa36 ldr.w r0, [fp, 0x18]                                  |     r0 = *(arg_18h);
    0x0005aa3a bl 0x19ed0                                            |     fcn_00019ed0 (r0);
    0x0005aa3e ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0005aa40 mov r6, r0                                            |     r6 = r0;
    0x0005aa42 ldrb.w r4, [sl, 0x2d]                                 |     r4 = *((sl + 0x2d));
    0x0005aa46 cmp r3, 0xa                                           |     
    0x0005aa48 it ne                                                 |     
                                                                     |     if (r3 == 0xa) {
    0x0005aa4a movne r4, r3                                          |         r4 = r3;
                                                                     |     }
                                                                     |     if (r3 == 0xa) {
    0x0005aa4c beq.w 0x5ac88                                         |         goto label_67;
                                                                     |     }
                                                                     | label_29:
    0x0005aa50 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0005aa52 sub.w r5, r4, 5                                       |     r5 = r4 - 5;
    0x0005aa56 clz r5, r5                                            |     r5 &= r5;
    0x0005aa5a lsrs r5, r5, 5                                        |     r5 >>= 5;
    0x0005aa5c cmp r3, 5                                             |     
    0x0005aa5e ldr r3, [sp, 0xa0]                                    |     r3 = *(arg_a0h);
    0x0005aa60 it eq                                                 |     
                                                                     |     if (r3 != 5) {
    0x0005aa62 moveq r5, 0                                           |         r5 = 0;
                                                                     |     }
    0x0005aa64 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005aa66 bne.w 0x5ac04                                         |         goto label_68;
                                                                     |     }
                                                                     | label_23:
    0x0005aa6a cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x0005aa6c beq 0x5ab08                                           |         goto label_25;
                                                                     |     }
                                                                     | label_24:
    0x0005aa6e ldr.w r3, [sl, 8]                                     |     r3 = *((sl + 8));
                                                                     |     if (r3 != 0) {
    0x0005aa72 cbnz r3, 0x5aa7e                                      |         goto label_69;
                                                                     |     }
    0x0005aa74 b 0x5aca6                                             |     goto label_70;
                                                                     |     do {
    0x0005aa76 ldr r3, [r3, 0x14]                                    |         r3 = *((r3 + 0x14));
    0x0005aa78 cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0005aa7a beq.w 0x5aca6                                         |             goto label_70;
                                                                     |         }
                                                                     | label_69:
    0x0005aa7e ldrb.w r2, [r3, 0x36]                                 |         r2 = *((r3 + 0x36));
    0x0005aa82 subs r2, 3                                            |         r2 -= 3;
    0x0005aa84 cmp r2, 1                                             |         
    0x0005aa86 bhi 0x5aa76                                           |         
                                                                     |     } while (r2 > 1);
    0x0005aa88 movs r3, 0                                            |     r3 = 0;
    0x0005aa8a movs r1, 0x10                                         |     r1 = 0x10;
    0x0005aa8c mov r2, r3                                            |     r2 = r3;
    0x0005aa8e mov r0, fp                                            |     r0 = fp;
    0x0005aa90 str r3, [sp]                                          |     *(sp) = r3;
    0x0005aa92 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005aa96 str r0, [sp, 0x50]                                    |     var_50h = r0;
                                                                     | label_30:
    0x0005aa98 ldr r3, [sp, 0x9c]                                    |     r3 = *(arg_9ch);
    0x0005aa9a movs r1, 0x44                                         |     r1 = 0x44;
    0x0005aa9c ldr r2, [sp, 0x54]                                    |     r2 = var_54h;
    0x0005aa9e mov r0, fp                                            |     r0 = fp;
    0x0005aaa0 str r3, [sp]                                          |     *(sp) = r3;
    0x0005aaa2 mov r3, r6                                            |     r3 = r6;
    0x0005aaa4 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
                                                                     | label_34:
    0x0005aaa8 ldr r3, [sp, 0x44]                                    |     r3 = var_44h;
    0x0005aaaa ldr r3, [r3, 0x18]                                    |     r3 = *((r3 + 0x18));
    0x0005aaac lsls r5, r3, 0xd                                      |     r5 = r3 << 0xd;
                                                                     |     if (r5 >= r3) {
    0x0005aaae bpl.w 0x5ac46                                         |         goto label_71;
                                                                     |     }
    0x0005aab2 movs r3, 0                                            |     r3 = 0;
    0x0005aab4 movs r2, 0x6d                                         |     r2 = 0x6d;
    0x0005aab6 mov r1, sl                                            |     r1 = sl;
    0x0005aab8 mov r0, sb                                            |     r0 = sb;
    0x0005aaba str r3, [sp]                                          |     *(sp) = r3;
    0x0005aabc bl 0x126c4                                            |     r0 = fcn_000126c4 (r0, r1, r2, r3, r4);
    0x0005aac0 mov r2, r0                                            |     r2 = r0;
    0x0005aac2 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0005aac4 beq.w 0x5ac46                                         |         goto label_71;
                                                                     |     }
                                                                     | label_27:
    0x0005aac8 ldr.w r3, [sb, 0x198]                                 |     r3 = *((sb + 0x198));
    0x0005aacc movs r1, 1                                            |     r1 = 1;
    0x0005aace movs r0, 5                                            |     r0 = 5;
    0x0005aad0 cmp r3, 0                                             |     
    0x0005aad2 it eq                                                 |     
                                                                     |     if (r3 != 0) {
    0x0005aad4 moveq r3, sb                                          |         r3 = sb;
                                                                     |     }
    0x0005aad6 strb r1, [r3, 0x14]                                   |     *((r3 + 0x14)) = r1;
    0x0005aad8 ldr r3, [sp, 0x9c]                                    |     r3 = *(arg_9ch);
    0x0005aada str r1, [sp, 0x14]                                    |     var_14h = r1;
    0x0005aadc str r1, [sp, 8]                                       |     var_8h = r1;
    0x0005aade mov r1, sl                                            |     r1 = sl;
    0x0005aae0 str r3, [sp, 4]                                       |     var_4h = r3;
    0x0005aae2 ldr r3, [sp, 0x98]                                    |     r3 = *(arg_98h);
    0x0005aae4 str r3, [sp]                                          |     *(sp) = r3;
    0x0005aae6 movs r3, 0                                            |     r3 = 0;
    0x0005aae8 strd r3, r0, [sp, 0xc]                                |     __asm ("strd r3, r0, [var_ch]");
    0x0005aaec mov r0, sb                                            |     r0 = sb;
    0x0005aaee ldr r3, [sp, 0x54]                                    |     r3 = var_54h;
    0x0005aaf0 bl 0x59374                                            |     fcn_00059374 (r0, r1, r2, r3, r4, r5, r6);
                                                                     | label_31:
    0x0005aaf4 mvns r0, r6                                           |     r0 = ~r6;
    0x0005aaf6 mov.w r1, 1                                           |     r1 = 1;
    0x0005aafa ldr.w r2, [fp, 0x18]                                  |     r2 = *(arg_18h);
    0x0005aafe ldr.w r3, [fp, 0x20]                                  |     r3 = *(arg_20h);
    0x0005ab02 str r1, [sp, 0x4c]                                    |     var_4ch = r1;
                                                                     |     if (r0 < r6) {
    0x0005ab04 bpl 0x5ab44                                           |         
    0x0005ab06 b 0x5ab50                                             |         goto label_72;
                                                                     | label_25:
    0x0005ab08 ldr r3, [sp, 0x9c]                                    |         r3 = *(arg_9ch);
    0x0005ab0a movs r1, 0x44                                         |         r1 = 0x44;
    0x0005ab0c ldr r2, [sp, 0x54]                                    |         r2 = var_54h;
    0x0005ab0e mov r0, fp                                            |         r0 = fp;
    0x0005ab10 str r3, [sp]                                          |         *(sp) = r3;
    0x0005ab12 mov r3, r6                                            |         r3 = r6;
    0x0005ab14 bl 0x18bf8                                            |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005ab18 cmp r4, 4                                             |         
                                                                     |         if (r4 == 4) {
    0x0005ab1a beq.w 0x5ac36                                         |             goto label_73;
                                                                     |         }
                                                                     |         if (r4 > 4) {
    0x0005ab1e bgt 0x5abc8                                           |             goto label_74;
                                                                     |         }
                                                                     | label_33:
    0x0005ab20 subs r3, r4, 1                                        |         r3 = r4 - 1;
    0x0005ab22 cmp r3, 3                                             |         
    0x0005ab24 it hs                                                 |         
                                                                     |         if (r3 < 3) {
    0x0005ab26 movhs r4, 2                                           |             r4 = 2;
                                                                     |         }
                                                                     | label_21:
    0x0005ab28 mov r1, r4                                            |         r1 = r4;
    0x0005ab2a mov r2, sl                                            |         r2 = sl;
    0x0005ab2c mov r0, sb                                            |         r0 = sb;
    0x0005ab2e bl 0x1c1ec                                            |         fcn_0001c1ec (r0, r1, r2);
                                                                     | label_26:
    0x0005ab32 mvns r0, r6                                           |         r0 = ~r6;
    0x0005ab34 ldr.w r2, [fp, 0x18]                                  |         r2 = *(arg_18h);
    0x0005ab38 ldr.w r3, [fp, 0x20]                                  |         r3 = *(arg_20h);
                                                                     |         if (r0 < r6) {
    0x0005ab3c bmi 0x5abea                                           |             goto label_75;
                                                                     |         }
    0x0005ab3e movs r1, 0                                            |         r1 = 0;
    0x0005ab40 strd r1, r1, [sp, 0x4c]                               |         __asm ("strd r1, r1, [var_4ch]");
                                                                     |     }
    0x0005ab44 ldr r1, [r2, 0x70]                                    |     r1 = *((r2 + 0x70));
                                                                     |     if (r1 != 0) {
    0x0005ab46 cbz r1, 0x5ab50                                       |         
    0x0005ab48 str.w r3, [r1, r0, lsl 2]                             |         __asm ("str.w r3, [r1, r0, lsl 2]");
    0x0005ab4c ldr.w r3, [fp, 0x20]                                  |         r3 = *(arg_20h);
                                                                     |     }
                                                                     | label_72:
    0x0005ab50 subs r3, 1                                            |     r3--;
    0x0005ab52 str r3, [r2, 0x58]                                    |     *((r2 + 0x58)) = r3;
    0x0005ab54 ldr r3, [sp, 0x50]                                    |     r3 = var_50h;
    0x0005ab56 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005ab58 beq 0x5abf2                                           |         goto label_76;
                                                                     |     }
    0x0005ab5a movs r3, 0                                            |     r3 = 0;
    0x0005ab5c movs r1, 0x10                                         |     r1 = 0x10;
    0x0005ab5e mov r2, r3                                            |     r2 = r3;
    0x0005ab60 str r3, [sp]                                          |     *(sp) = r3;
    0x0005ab62 mov r0, fp                                            |     r0 = fp;
    0x0005ab64 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005ab68 ldr.w r3, [fp, 0x20]                                  |     r3 = *(arg_20h);
    0x0005ab6c ldr r1, [sp, 0x50]                                    |     r1 = var_50h;
    0x0005ab6e ldr.w r5, [sl, 8]                                     |     r5 = *((sl + 8));
    0x0005ab72 str r0, [sp, 0x5c]                                    |     var_5ch = r0;
    0x0005ab74 cmp r1, r3                                            |     
    0x0005ab76 itttt lo                                              |     
                                                                     |     if (r1 >= r3) {
    0x0005ab78 ldrlo r2, [fp, 4]                                     |         r2 = *(arg_9ch);
                                                                     |     }
                                                                     |     if (r1 >= r3) {
    0x0005ab7c addlo r1, r1, r1, lsl 2                               |         r1 += (r1 << 2);
                                                                     |     }
                                                                     |     if (r1 < r3) {
    0x0005ab80 add.w r2, r2, r1, lsl 2                               |         r2 += (r1 << 2);
                                                                     |     }
                                                                     |     if (r1 < r3) {
    0x0005ab84 str r3, [r2, 8]                                       |         *((r2 + 8)) = r3;
                                                                     |     }
    0x0005ab86 subs r3, 1                                            |     r3--;
    0x0005ab88 ldr.w r2, [fp, 0x18]                                  |     r2 = *(arg_18h);
    0x0005ab8c str r3, [r2, 0x58]                                    |     *((r2 + 0x58)) = r3;
    0x0005ab8e cmp r5, 0                                             |     
                                                                     |     if (r5 != 0) {
    0x0005ab90 bne.w 0x5a5b6                                         |         goto label_19;
                                                                     |     }
                                                                     | label_64:
    0x0005ab94 ldr r3, [sp, 0x50]                                    |     r3 = var_50h;
    0x0005ab96 movs r2, 0                                            |     r2 = 0;
    0x0005ab98 movs r1, 0x10                                         |     r1 = 0x10;
    0x0005ab9a str r2, [sp]                                          |     *(sp) = r2;
    0x0005ab9c mov r0, fp                                            |     r0 = fp;
    0x0005ab9e adds r3, 1                                            |     r3++;
    0x0005aba0 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005aba4 ldr.w r2, [fp, 0x20]                                  |     r2 = *(arg_20h);
    0x0005aba8 ldr r3, [sp, 0x5c]                                    |     r3 = var_5ch;
    0x0005abaa cmp r3, r2                                            |     
    0x0005abac ittt lo                                               |     
                                                                     |     if (r3 >= r2) {
    0x0005abae ldrlo r1, [fp, 4]                                     |         r1 = *(arg_9ch);
                                                                     |     }
                                                                     |     if (r3 >= r2) {
    0x0005abb2 addlo r3, r3, r3, lsl 2                               |         r3 += (r3 << 2);
                                                                     |     }
                                                                     |     if (r3 < r2) {
    0x0005abb6 add.w r1, r1, r3, lsl 2                               |         r1 += (r3 << 2);
                                                                     |     }
    0x0005abba ldr.w r3, [fp, 0x18]                                  |     r3 = *(arg_18h);
    0x0005abbe it lo                                                 |     
                                                                     |     if (r3 >= r2) {
    0x0005abc0 strlo r2, [r1, 8]                                     |         *((r1 + 8)) = r2;
                                                                     |     }
    0x0005abc2 subs r2, 1                                            |     r2--;
    0x0005abc4 str r2, [r3, 0x58]                                    |     *((r3 + 0x58)) = r2;
    0x0005abc6 b 0x5a842                                             |     goto label_20;
                                                                     | label_74:
    0x0005abc8 cmp r4, 5                                             |     
                                                                     |     if (r4 == 5) {
    0x0005abca beq.w 0x5ad16                                         |         goto label_77;
                                                                     |     }
    0x0005abce movs r4, 2                                            |     r4 = 2;
    0x0005abd0 b 0x5ab28                                             |     goto label_21;
                                                                     | label_65:
    0x0005abd2 movs r7, 2                                            |     r7 = 2;
    0x0005abd4 str r3, [sp, 0x38]                                    |     var_38h = r3;
    0x0005abd6 b 0x5a714                                             |     goto label_11;
                                                                     | label_61:
    0x0005abd8 movs r3, 0                                            |     r3 = 0;
    0x0005abda movs r2, 0x6d                                         |     r2 = 0x6d;
    0x0005abdc ldr r1, [sp, 0x2c]                                    |     r1 = var_2ch;
    0x0005abde mov r0, sb                                            |     r0 = sb;
    0x0005abe0 str r3, [sp]                                          |     *(sp) = r3;
    0x0005abe2 bl 0x126c4                                            |     r0 = fcn_000126c4 (r0, r1, r2, r3, r4);
    0x0005abe6 mov r2, r0                                            |     r2 = r0;
    0x0005abe8 b 0x5a79c                                             |     goto label_22;
                                                                     | label_75:
    0x0005abea subs r3, 1                                            |     r3--;
    0x0005abec str r3, [r2, 0x58]                                    |     *((r2 + 0x58)) = r3;
    0x0005abee movs r3, 0                                            |     r3 = 0;
    0x0005abf0 str r3, [sp, 0x4c]                                    |     var_4ch = r3;
                                                                     | label_76:
    0x0005abf2 ldr.w r5, [sl, 8]                                     |     r5 = *((sl + 8));
    0x0005abf6 cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x0005abf8 beq.w 0x5a842                                         |         goto label_20;
                                                                     |     }
    0x0005abfc movs r3, 0                                            |     r3 = 0;
    0x0005abfe str r3, [sp, 0x5c]                                    |     var_5ch = r3;
    0x0005ac00 str r3, [sp, 0x50]                                    |     var_50h = r3;
    0x0005ac02 b 0x5a5b6                                             |     goto label_19;
                                                                     | label_68:
    0x0005ac04 str r3, [sp]                                          |     *(sp) = r3;
    0x0005ac06 movs r1, 0x4f                                         |     r1 = 0x4f;
    0x0005ac08 mov r3, r6                                            |     r3 = r6;
    0x0005ac0a ldr r2, [sp, 0x9c]                                    |     r2 = *(arg_9ch);
    0x0005ac0c mov r0, fp                                            |     r0 = fp;
    0x0005ac0e bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005ac12 ldr.w r3, [fp, 4]                                     |     r3 = *(arg_9ch);
    0x0005ac16 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005ac18 beq.w 0x5aa6a                                         |         goto label_23;
                                                                     |     }
                                                                     | label_32:
    0x0005ac1c ldr.w r2, [fp, 0x20]                                  |     r2 = *(arg_20h);
    0x0005ac20 add.w r2, r2, r2, lsl 2                               |     r2 += (r2 << 2);
    0x0005ac24 add.w r3, r3, r2, lsl 2                               |     r3 += (r2 << 2);
    0x0005ac28 movs r2, 0x88                                         |     r2 = 0x88;
    0x0005ac2a strb r2, [r3, -0x11]                                  |     *((r3 - 0x11)) = r2;
    0x0005ac2e cmp r5, 0                                             |     
                                                                     |     if (r5 != 0) {
    0x0005ac30 bne.w 0x5aa6e                                         |         goto label_24;
                                                                     |     }
    0x0005ac34 b 0x5ab08                                             |     goto label_25;
                                                                     | label_73:
    0x0005ac36 ldr r3, [sp, 0xac]                                    |     r3 = *(arg_ach);
    0x0005ac38 mov r2, r5                                            |     r2 = r5;
    0x0005ac3a movs r1, 0x10                                         |     r1 = 0x10;
    0x0005ac3c mov r0, fp                                            |     r0 = fp;
    0x0005ac3e str r5, [sp]                                          |     *(sp) = r5;
    0x0005ac40 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005ac44 b 0x5ab32                                             |     goto label_26;
                                                                     | label_71:
    0x0005ac46 ldr.w r3, [sb]                                        |     r3 = *(sb);
    0x0005ac4a ldr r3, [r3, 0x18]                                    |     r3 = *((r3 + 0x18));
    0x0005ac4c lsls r4, r3, 0xc                                      |     r4 = r3 << 0xc;
                                                                     |     if (r4 >= r3) {
    0x0005ac4e bpl 0x5acb8                                           |         goto label_78;
                                                                     |     }
    0x0005ac50 ldr.w r1, [sl]                                        |     r1 = *(sl);
    0x0005ac54 ldr.w r0, [sl, 0x44]                                  |     r0 = *((sl + 0x44));
    0x0005ac58 mov r2, r1                                            |     r2 = r1;
                                                                     |     if (r1 == 0) {
    0x0005ac5a cbz r1, 0x5ac70                                       |         goto label_79;
                                                                     |     }
    0x0005ac5c ldrb r2, [r1]                                         |     r2 = *(r1);
                                                                     |     if (r2 == 0) {
    0x0005ac5e cbz r2, 0x5ac70                                       |         goto label_79;
                                                                     |     }
    0x0005ac60 mov r3, r1                                            |     r3 = r1;
                                                                     |     do {
    0x0005ac62 ldrb r2, [r3, 1]!                                     |         r2 = *((r3 += 1));
    0x0005ac66 cmp r2, 0                                             |         
    0x0005ac68 bne 0x5ac62                                           |         
                                                                     |     } while (r2 != 0);
    0x0005ac6a subs r3, r3, r1                                       |     r3 -= r1;
    0x0005ac6c bic r2, r3, 0xc0000000                                |     r2 = BIT_MASK (r3, 0xc0000000);
                                                                     | label_79:
    0x0005ac70 adds r0, 0x38                                         |     r0 += 0x38;
    0x0005ac72 bl 0x13f5c                                            |     r0 = fcn_00013f5c (r0, r1, r2);
    0x0005ac76 mov r2, r0                                            |     r2 = r0;
                                                                     |     if (r0 == 0) {
    0x0005ac78 cbz r0, 0x5acae                                       |         goto label_80;
                                                                     |     }
    0x0005ac7a movs r2, 0                                            |     r2 = 0;
    0x0005ac7c b 0x5aac8                                             |     goto label_27;
                                                                     | label_35:
    0x0005ac7e bl 0x192c8                                            |     r0 = fcn_000192c8 (r0);
    0x0005ac82 mov fp, r0                                            |     
    0x0005ac84 b.w 0x5a384                                           |     goto label_28;
                                                                     | label_67:
    0x0005ac88 cmp r4, 0xa                                           |     
                                                                     |     if (r4 != 0xa) {
    0x0005ac8a bne.w 0x5aa50                                         |         goto label_29;
                                                                     |     }
    0x0005ac8e ldr r3, [sp, 0xa0]                                    |     r3 = *(arg_a0h);
                                                                     |     if (r3 != 0) {
    0x0005ac90 cbnz r3, 0x5ace6                                      |         goto label_81;
                                                                     |     }
    0x0005ac92 ldr r3, [sp, 0x9c]                                    |     r3 = *(arg_9ch);
    0x0005ac94 movs r1, 0x44                                         |     r1 = 0x44;
    0x0005ac96 ldr r2, [sp, 0x54]                                    |     r2 = var_54h;
    0x0005ac98 mov r0, fp                                            |     r0 = fp;
    0x0005ac9a movs r4, 2                                            |     r4 = 2;
    0x0005ac9c str r3, [sp]                                          |     *(sp) = r3;
    0x0005ac9e mov r3, r6                                            |     r3 = r6;
    0x0005aca0 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005aca4 b 0x5ab28                                             |     goto label_21;
                                                                     | label_70:
    0x0005aca6 str r3, [sp, 0x50]                                    |     var_50h = r3;
    0x0005aca8 b 0x5aa98                                             |     goto label_30;
                                                                     | label_46:
    0x0005acaa str r5, [sp, 0x4c]                                    |     var_4ch = r5;
    0x0005acac b 0x5a842                                             |     goto label_20;
                                                                     | label_80:
    0x0005acae ldr.w r3, [sl, 0x10]                                  |     r3 = *((sl + 0x10));
    0x0005acb2 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005acb4 bne.w 0x5aac8                                         |         goto label_27;
                                                                     |     }
                                                                     | label_78:
    0x0005acb8 ldr.w r1, [sl, 8]                                     |     r1 = *((sl + 8));
    0x0005acbc cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0005acbe beq.w 0x5aaf4                                         |         goto label_31;
                                                                     |     }
    0x0005acc2 ldr.w r3, [sb, 0x198]                                 |     r3 = *((sb + 0x198));
    0x0005acc6 movs r2, 1                                            |     r2 = 1;
    0x0005acc8 mov r0, sb                                            |     r0 = sb;
    0x0005acca cmp r3, 0                                             |     
    0x0005accc it eq                                                 |     
                                                                     |     if (r3 != 0) {
    0x0005acce moveq r3, sb                                          |         r3 = sb;
                                                                     |     }
    0x0005acd0 strb r2, [r3, 0x14]                                   |     *((r3 + 0x14)) = r2;
    0x0005acd2 ldr r3, [sp, 0x98]                                    |     r3 = *(arg_98h);
    0x0005acd4 str r3, [sp]                                          |     *(sp) = r3;
    0x0005acd6 movs r3, 0                                            |     r3 = 0;
    0x0005acd8 str r3, [sp, 4]                                       |     var_4h = r3;
    0x0005acda ldr r3, [sp, 0x54]                                    |     r3 = var_54h;
    0x0005acdc ldrb.w r2, [sl, 0x2c]                                 |     r2 = *((sl + 0x2c));
    0x0005ace0 bl 0x3da14                                            |     fcn_0003da14 (r0, r1, r2, r3);
    0x0005ace4 b 0x5aaf4                                             |     goto label_31;
                                                                     | label_81:
    0x0005ace6 ldr r3, [sp, 0xa0]                                    |     r3 = *(arg_a0h);
    0x0005ace8 movs r1, 0x4f                                         |     r1 = 0x4f;
    0x0005acea ldr r2, [sp, 0x9c]                                    |     r2 = *(arg_9ch);
    0x0005acec movs r4, 2                                            |     r4 = 2;
    0x0005acee movs r5, 0                                            |     r5 = 0;
    0x0005acf0 str r3, [sp]                                          |     *(sp) = r3;
    0x0005acf2 mov r3, r0                                            |     r3 = r0;
    0x0005acf4 mov r0, fp                                            |     r0 = fp;
    0x0005acf6 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005acfa ldr.w r3, [fp, 4]                                     |     r3 = *(arg_9ch);
    0x0005acfe cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005ad00 bne 0x5ac1c                                           |         goto label_32;
                                                                     |     }
    0x0005ad02 ldr r3, [sp, 0x9c]                                    |     r3 = *(arg_9ch);
    0x0005ad04 movs r1, 0x44                                         |     r1 = 0x44;
    0x0005ad06 ldr r2, [sp, 0x54]                                    |     r2 = var_54h;
    0x0005ad08 mov r0, fp                                            |     r0 = fp;
    0x0005ad0a movs r4, 2                                            |     r4 = 2;
    0x0005ad0c str r3, [sp]                                          |     *(sp) = r3;
    0x0005ad0e mov r3, r6                                            |     r3 = r6;
    0x0005ad10 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005ad14 b 0x5ab20                                             |     goto label_33;
                                                                     | label_77:
    0x0005ad16 str r5, [sp, 0x50]                                    |     var_50h = r5;
    0x0005ad18 b 0x5aaa8                                             |     goto label_34;
                                                                     | label_38:
    0x0005ad1a movs r3, 0                                            |     r3 = 0;
    0x0005ad1c ldrh r3, [r3, 0x32]                                   |     r3 = *((r3 + 0x32));
    0x0005ad1e udf 0xff                                              |     __asm ("udf 0xff");
                                                                     | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2705c */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) sym.sqlcipher_codec_key_derive ()        | void sqlcipher_codec_key_derive (int16_t arg1) {
                                                     |     r0 = arg1;
    0x0002705c push {r4, r5, r6, lr}                 |     
    0x0002705e mov r4, r0                            |     r4 = r0;
    0x00027060 ldr r6, [r0, 0x18]                    |     r6 = *((r0 + 0x18));
    0x00027062 ldr r3, [r6, 4]                       |     r3 = *((r6 + 4));
                                                     |     if (r3 != 0) {
    0x00027064 cbnz r3, 0x27098                      |         goto label_3;
                                                     |     }
    0x00027066 ldr r5, [r4, 0x1c]                    |     r5 = *((r4 + 0x1c));
    0x00027068 ldr r3, [r5, 4]                       |     r3 = *((r5 + 4));
                                                     |     if (r3 != 0) {
    0x0002706a cbnz r3, 0x270b2                      |         goto label_4;
                                                     |     }
                                                     |     do {
                                                     | label_0:
    0x0002706c ldr r3, [r6]                          |         r3 = *(r6);
    0x0002706e cmp r3, 1                             |         
    0x00027070 it eq                                 |         
                                                     |         if (r3 != 1) {
    0x00027072 moveq r0, 0                           |             r0 = 0;
                                                     |         }
                                                     |         if (r3 == 1) {
    0x00027074 bne 0x27078                           |             
    0x00027076 pop {r4, r5, r6, pc}                  |             
                                                     |         }
    0x00027078 ldr r1, [r6, 0x1c]                    |         r1 = *((r6 + 0x1c));
    0x0002707a ldr r0, [r6, 0x38]                    |         r0 = *((r6 + 0x38));
    0x0002707c blx 0x6674                            |         fcn_00006674 ();
    0x00027080 ldr r5, [r4, 0x1c]                    |         r5 = *((r4 + 0x1c));
    0x00027082 movs r4, 0                            |         r4 = 0;
    0x00027084 str r4, [r6, 0x38]                    |         *((r6 + 0x38)) = r4;
    0x00027086 str r4, [r6, 0x1c]                    |         *((r6 + 0x1c)) = r4;
    0x00027088 ldr r0, [r5, 0x38]                    |         r0 = *((r5 + 0x38));
    0x0002708a ldr r1, [r5, 0x1c]                    |         r1 = *((r5 + 0x1c));
    0x0002708c blx 0x6674                            |         fcn_00006674 ();
    0x00027090 mov r0, r4                            |         r0 = r4;
    0x00027092 str r4, [r5, 0x38]                    |         *((r5 + 0x38)) = r4;
    0x00027094 str r4, [r5, 0x1c]                    |         *((r5 + 0x1c)) = r4;
    0x00027096 pop {r4, r5, r6, pc}                  |         
                                                     | label_3:
    0x00027098 ldr r3, [r6, 0x38]                    |         r3 = *((r6 + 0x38));
                                                     |         if (r3 == 0) {
    0x0002709a cbz r3, 0x270dc                       |             goto label_5;
                                                     |         }
    0x0002709c ldr r3, [r6, 0x1c]                    |         r3 = *((r6 + 0x1c));
                                                     |         if (r3 == 0) {
    0x0002709e cbz r3, 0x270dc                       |             goto label_5;
                                                     |         }
    0x000270a0 mov r1, r6                            |         r1 = r6;
    0x000270a2 bl 0x26e78                            |         r0 = fcn_00026e78 (r0, r1);
                                                     |         if (r0 != 0) {
    0x000270a6 cbnz r0, 0x270dc                      |             goto label_5;
                                                     |         }
    0x000270a8 ldr r5, [r4, 0x1c]                    |         r5 = *((r4 + 0x1c));
    0x000270aa ldr r6, [r4, 0x18]                    |         r6 = *((r4 + 0x18));
    0x000270ac ldr r3, [r5, 4]                       |         r3 = *((r5 + 4));
    0x000270ae cmp r3, 0                             |         
    0x000270b0 beq 0x2706c                           |         
                                                     |     } while (r3 == 0);
                                                     | label_4:
    0x000270b2 ldr r2, [r5, 0x14]                    |     r2 = *((r5 + 0x14));
    0x000270b4 ldr r3, [r6, 0x14]                    |     r3 = *((r6 + 0x14));
    0x000270b6 cmp r2, r3                            |     
                                                     |     if (r2 == r3) {
    0x000270b8 beq 0x270e0                           |         goto label_6;
                                                     |     }
                                                     | label_1:
    0x000270ba ldr r3, [r5, 0x38]                    |     r3 = *((r5 + 0x38));
                                                     |     if (r3 == 0) {
    0x000270bc cbz r3, 0x270dc                       |         goto label_5;
                                                     |     }
    0x000270be ldr r3, [r5, 0x1c]                    |     r3 = *((r5 + 0x1c));
                                                     |     if (r3 == 0) {
    0x000270c0 cbz r3, 0x270dc                       |         goto label_5;
                                                     |     }
    0x000270c2 mov r1, r5                            |     r1 = r5;
    0x000270c4 mov r0, r4                            |     r0 = r4;
    0x000270c6 bl 0x26e78                            |     r0 = fcn_00026e78 (r0, r1);
                                                     |     if (r0 != 0) {
    0x000270ca cbnz r0, 0x270dc                      |         goto label_5;
                                                     |     }
                                                     |     do {
    0x000270cc ldr r6, [r4, 0x18]                    |         r6 = *((r4 + 0x18));
    0x000270ce b 0x2706c                             |         goto label_0;
                                                     | label_2:
    0x000270d0 ldrd r1, r0, [r4, 0x18]               |         __asm ("ldrd r1, r0, [r4, 0x18]");
    0x000270d4 bl 0xf4a4                             |         r0 = fcn_0000f4a4 (r0, r1, r2, r3, r4, r5, r6);
    0x000270d8 cmp r0, 0                             |         
    0x000270da beq 0x270cc                           |         
                                                     |     } while (r0 == 0);
                                                     | label_5:
    0x000270dc movs r0, 1                            |     r0 = 1;
    0x000270de pop {r4, r5, r6, pc}                  |     
                                                     | label_6:
    0x000270e0 ldr r2, [r5, 8]                       |     r2 = *((r5 + 8));
    0x000270e2 ldr r3, [r6, 8]                       |     r3 = *((r6 + 8));
    0x000270e4 cmp r2, r3                            |     
                                                     |     if (r2 != r3) {
    0x000270e6 bne 0x270ba                           |         goto label_1;
                                                     |     }
    0x000270e8 ldr r2, [r5, 0xc]                     |     r2 = *((r5 + 0xc));
    0x000270ea ldr r3, [r6, 0xc]                     |     r3 = *((r6 + 0xc));
    0x000270ec cmp r2, r3                            |     
                                                     |     if (r2 != r3) {
    0x000270ee bne 0x270ba                           |         goto label_1;
                                                     |     }
    0x000270f0 ldr r2, [r5, 0x10]                    |     r2 = *((r5 + 0x10));
    0x000270f2 ldr r3, [r6, 0x10]                    |     r3 = *((r6 + 0x10));
    0x000270f4 cmp r2, r3                            |     
                                                     |     if (r2 != r3) {
    0x000270f6 bne 0x270ba                           |         goto label_1;
                                                     |     }
    0x000270f8 ldr r2, [r5, 0x1c]                    |     r2 = *((r5 + 0x1c));
    0x000270fa ldr r3, [r6, 0x1c]                    |     r3 = *((r6 + 0x1c));
    0x000270fc cmp r2, r3                            |     
                                                     |     if (r2 != r3) {
    0x000270fe bne 0x270ba                           |         goto label_1;
                                                     |     }
    0x00027100 ldr r2, [r5, 0x2c]                    |     r2 = *((r5 + 0x2c));
    0x00027102 ldr r3, [r6, 0x2c]                    |     r3 = *((r6 + 0x2c));
    0x00027104 cmp r2, r3                            |     
                                                     |     if (r2 != r3) {
    0x00027106 bne 0x270ba                           |         goto label_1;
                                                     |     }
    0x00027108 ldr r2, [r5, 0x24]                    |     r2 = *((r5 + 0x24));
    0x0002710a ldr r3, [r6, 0x24]                    |     r3 = *((r6 + 0x24));
    0x0002710c cmp r2, r3                            |     
                                                     |     if (r2 != r3) {
    0x0002710e bne 0x270ba                           |         goto label_1;
                                                     |     }
    0x00027110 ldr r3, [r5, 0x40]                    |     r3 = *((r5 + 0x40));
    0x00027112 ldr r1, [r6, 0x44]                    |     r1 = *((r6 + 0x44));
    0x00027114 ldr r0, [r5, 0x44]                    |     r0 = *((r5 + 0x44));
    0x00027116 ldr r3, [r3, 0x3c]                    |     r3 = *((r3 + 0x3c));
    0x00027118 blx r3                                |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
                                                     |     if (r0 == 0) {
    0x0002711a cbz r0, 0x2712e                       |         goto label_7;
                                                     |     }
    0x0002711c ldr r0, [r5, 0x38]                    |     r0 = *((r5 + 0x38));
    0x0002711e ldr r1, [r6, 0x38]                    |     r1 = *((r6 + 0x38));
    0x00027120 cmp r0, r1                            |     
                                                     |     if (r0 == r1) {
    0x00027122 beq 0x270d0                           |         goto label_2;
                                                     |     }
    0x00027124 ldr r2, [r5, 0x1c]                    |     r2 = *((r5 + 0x1c));
    0x00027126 blx 0x6220                            |     r0 = fcn_00006220 ();
    0x0002712a cmp r0, 0                             |     
                                                     |     if (r0 == 0) {
    0x0002712c beq 0x270d0                           |         goto label_2;
                                                     |     }
                                                     | label_7:
    0x0002712e ldr r5, [r4, 0x1c]                    |     r5 = *((r4 + 0x1c));
    0x00027130 b 0x270ba                             |     goto label_1;
                                                     | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x20a04 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) sym.sqlite3_value_bytes16 ()         | void sqlite3_value_bytes16 (int16_t arg1) {
                                                 |     r0 = arg1;
    0x00020a04 ldrh r3, [r0, 0x1c]               |     r3 = *((r0 + 0x1c));
    0x00020a06 push {r4, lr}                     |     
    0x00020a08 mov r4, r0                        |     r4 = r0;
    0x00020a0a lsls r2, r3, 0x1b                 |     r2 = r3 << 0x1b;
                                                 |     if (r2 >= r3) {
    0x00020a0c bpl 0x20a1a                       |         goto label_1;
                                                 |     }
                                                 | label_0:
    0x00020a0e lsls r3, r3, 0x11                 |     r3 <<= 0x11;
    0x00020a10 ldr r0, [r4, 0x18]                |     r0 = *((r4 + 0x18));
    0x00020a12 itt mi                            |     
                                                 |     if (r3 >= r3) {
    0x00020a14 ldrmi r3, [r4, 0x10]              |         r3 = *((r4 + 0x10));
                                                 |     }
    0x00020a16 addmi r0, r0, r3                  |     r0 += r3;
                                                 |     while (r0 == 0) {
    0x00020a18 pop {r4, pc}                      |         
                                                 | label_1:
    0x00020a1a movs r1, 2                        |         r1 = 2;
    0x00020a1c bl 0x2098c                        |         r0 = fcn_0002098c (r0);
    0x00020a20 cmp r0, 0                         |         
    0x00020a22 beq 0x20a18                       |         
                                                 |     }
    0x00020a24 ldrh r3, [r4, 0x1c]               |     r3 = *((r4 + 0x1c));
    0x00020a26 b 0x20a0e                         |     goto label_0;
                                                 | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x252b4 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) sym.sqlite3_value_bytes ()           | void sqlite3_value_bytes (int16_t arg1) {
                                                 |     r0 = arg1;
    0x000252b4 ldrh r3, [r0, 0x1c]               |     r3 = *((r0 + 0x1c));
    0x000252b6 push {r4, lr}                     |     
    0x000252b8 mov r4, r0                        |     r4 = r0;
    0x000252ba lsls r2, r3, 0x1b                 |     r2 = r3 << 0x1b;
                                                 |     if (r2 >= r3) {
    0x000252bc bpl 0x252ca                       |         goto label_1;
                                                 |     }
                                                 | label_0:
    0x000252be lsls r3, r3, 0x11                 |     r3 <<= 0x11;
    0x000252c0 ldr r0, [r4, 0x18]                |     r0 = *((r4 + 0x18));
    0x000252c2 itt mi                            |     
                                                 |     if (r3 >= r3) {
    0x000252c4 ldrmi r3, [r4, 0x10]              |         r3 = *((r4 + 0x10));
                                                 |     }
    0x000252c6 addmi r0, r0, r3                  |     r0 += r3;
                                                 |     while (r0 == 0) {
    0x000252c8 pop {r4, pc}                      |         
                                                 | label_1:
    0x000252ca movs r1, 1                        |         r1 = 1;
    0x000252cc bl 0x2098c                        |         r0 = fcn_0002098c (r0);
    0x000252d0 cmp r0, 0                         |         
    0x000252d2 beq 0x252c8                       |         
                                                 |     }
    0x000252d4 ldrh r3, [r4, 0x1c]               |     r3 = *((r4 + 0x1c));
    0x000252d6 b 0x252be                         |     goto label_0;
                                                 | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x20a04 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) sym.sqlite3_value_bytes16 ()         | void sqlite3_value_bytes16 (int16_t arg1) {
                                                 |     r0 = arg1;
    0x00020a04 ldrh r3, [r0, 0x1c]               |     r3 = *((r0 + 0x1c));
    0x00020a06 push {r4, lr}                     |     
    0x00020a08 mov r4, r0                        |     r4 = r0;
    0x00020a0a lsls r2, r3, 0x1b                 |     r2 = r3 << 0x1b;
                                                 |     if (r2 >= r3) {
    0x00020a0c bpl 0x20a1a                       |         goto label_1;
                                                 |     }
                                                 | label_0:
    0x00020a0e lsls r3, r3, 0x11                 |     r3 <<= 0x11;
    0x00020a10 ldr r0, [r4, 0x18]                |     r0 = *((r4 + 0x18));
    0x00020a12 itt mi                            |     
                                                 |     if (r3 >= r3) {
    0x00020a14 ldrmi r3, [r4, 0x10]              |         r3 = *((r4 + 0x10));
                                                 |     }
    0x00020a16 addmi r0, r0, r3                  |     r0 += r3;
                                                 |     while (r0 == 0) {
    0x00020a18 pop {r4, pc}                      |         
                                                 | label_1:
    0x00020a1a movs r1, 2                        |         r1 = 2;
    0x00020a1c bl 0x2098c                        |         r0 = fcn_0002098c (r0);
    0x00020a20 cmp r0, 0                         |         
    0x00020a22 beq 0x20a18                       |         
                                                 |     }
    0x00020a24 ldrh r3, [r4, 0x1c]               |     r3 = *((r4 + 0x1c));
    0x00020a26 b 0x20a0e                         |     goto label_0;
                                                 | }

[*] Function strcpy used 1 times libsqlcipher.so.0.8.6