[*] Binary protection state of libpaho-mqtt3a.so.1.3.9

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


[*] Function strcpy tear down of libpaho-mqtt3a.so.1.3.9

    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3a.so.1.3.9 @ 0xe968 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0000e968 ()                                      | void fcn_0000e968 (int16_t arg_48h, int16_t arg_10ch, int16_t arg_148h, int16_t arg_1e8h, int16_t arg_260h, int16_t arg_268h, int16_t arg_2b0h, int16_t arg_360h, int16_t arg_3a0h, int16_t arg1, int16_t arg3) {
                                                                 |     int16_t var_0h;
                                                                 |     int32_t var_4h;
                                                                 |     int32_t var_4h_2;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int32_t var_10h_2;
                                                                 |     int16_t var_18h;
                                                                 |     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;
                                                                 |     int32_t var_0h_2;
                                                                 |     int16_t var_54h;
                                                                 |     r0 = arg1;
                                                                 |     r2 = arg3;
    0x0000e968 svcmi 0xf0e92d                                    |     __asm ("svcmi 0xf0e92d");
    0x0000e96c mov r7, r2                                        |     r7 = r2;
    0x0000e96e ldr r2, [pc, 0x1f8]                               |     
    0x0000e970 sub sp, 0x5c                                      |     
    0x0000e972 mov r4, r0                                        |     r4 = r0;
    0x0000e974 add.w ip, sp, 0x40                                |     
    0x0000e978 ldr r3, [pc, 0x1f0]                               |     r3 = *(0xeb6c);
    0x0000e97a mov.w sb, 0                                       |     sb = 0;
    0x0000e97e add r2, pc                                        |     r2 = 0x1d4ec;
    0x0000e980 ldr.w fp, [pc, 0x1ec]                             |     
    0x0000e984 mov r6, sb                                        |     r6 = sb;
    0x0000e986 mov r5, sb                                        |     r5 = sb;
    0x0000e988 ldr r3, [r2, r3]                                  |     
    0x0000e98a mov r8, sb                                        |     r8 = sb;
    0x0000e98c add fp, pc                                        |     fp = 0x1d500;
    0x0000e98e ldr.w sl, [pc, 0x1e4]                             |     
    0x0000e992 add.w lr, fp, 0x48                                |     lr += arg_48h;
    0x0000e996 ldr r3, [r3]                                      |     r3 = *(0x1d4ec);
    0x0000e998 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x0000e99a mov.w r3, 0                                       |     r3 = 0;
    0x0000e99e ldr r3, [pc, 0x1d8]                               |     
    0x0000e9a0 strd sb, sb, [sp, 0x2c]                           |     __asm ("strd sb, sb, [var_2ch]");
    0x0000e9a4 add sl, pc                                        |     sl = 0x1d51e;
    0x0000e9a6 add r3, pc                                        |     r3 = 0x1d524;
    0x0000e9a8 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0000e9aa ldr r3, [pc, 0x1d0]                               |     
    0x0000e9ac add r3, pc                                        |     r3 = 0x1d52e;
    0x0000e9ae str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0000e9b0 ldm.w lr!, {r0, r1, r2, r3}                       |     r0 = *(lr!);
                                                                 |     r1 = *((lr! + 4));
                                                                 |     r2 = *((lr! + 8));
                                                                 |     r3 = *((lr! + 12));
    0x0000e9b4 stm.w ip!, {r0, r1, r2, r3}                       |     *(ip!) = r0;
                                                                 |     *((ip! + 4)) = r1;
                                                                 |     *((ip! + 8)) = r2;
                                                                 |     *((ip! + 12)) = r3;
    0x0000e9b8 add.w r0, fp, 0x10c                               |     r0 += arg_10ch;
    0x0000e9bc ldr.w r3, [lr]                                    |     r3 = *(lr);
    0x0000e9c0 movs r2, 3                                        |     r2 = 3;
    0x0000e9c2 movw r1, 0x5b3                                    |     r1 = 0x5b3;
    0x0000e9c6 str.w r3, [ip]                                    |     __asm ("str.w r3, [ip]");
    0x0000e9ca bl 0xec20                                         |     fcn_0000ec20 (r0, r1, r2);
    0x0000e9ce mov r2, sb                                        |     r2 = sb;
    0x0000e9d0 movs r3, 0x50                                     |     r3 = 0x50;
    0x0000e9d2 mov r0, r7                                        |     r0 = r7;
    0x0000e9d4 mov sb, r4                                        |     sb = r4;
    0x0000e9d6 add r1, sp, 0x28                                  |     r1 += var_28h;
    0x0000e9d8 bl 0xa5f8                                         |     fcn_0000a5f8 (r0, r1, r2, r3);
    0x0000e9da mcr2 p8, 0, pc, c14, c9, 6                        |     __asm ("mcr2 p8, 0, pc, c14, c9, 6");
    0x0000e9de adds r0, 0x20                                     |     r0 += 0x20;
    0x0000e9e0 mov r2, r7                                        |     r2 = r7;
    0x0000e9e2 mov r4, r2                                        |     r4 = r2;
    0x0000e9e4 ldr.w fp, [sp, 0x20]                              |     fp = var_20h;
    0x0000e9e6 add sp, 0x80                                      |     
    0x0000e9e8 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x0000e9ea mov r7, r0                                        |     r7 = r0;
    0x0000e9ec cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000e9ee beq.w 0xeb42                                      |         goto label_5;
                                                                 |     }
                                                                 | label_2:
    0x0000e9f2 mov r1, r5                                        |     r1 = r5;
    0x0000e9f4 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0000e9f6 str r2, [sp, 0xc]                                 |     var_ch = r2;
    0x0000e9f8 mov.w r3, -1                                      |     r3 = -1;
    0x0000e9fa adds r3, 0xff                                     |     r3 += 0xff;
    0x0000e9fc movs r2, 1                                        |     r2 = 1;
    0x0000e9fe mov r0, r6                                        |     r0 = r6;
    0x0000ea00 strd r7, r4, [sp, 0x10]                           |     __asm ("strd r7, r4, [var_10h]");
    0x0000ea04 strd r7, r4, [sp, 4]                              |     __asm ("strd r7, r4, [var_4h]");
    0x0000ea08 str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x0000ea0c blx 0x277c                                        |     r0 = fcn_0000277c ();
    0x0000ea10 mov r5, r0                                        |     r5 = r0;
                                                                 | label_3:
    0x0000ea12 eor r3, r8, 1                                     |     r3 = r8 ^ 1;
    0x0000ea16 cmp r5, 0                                         |     
    0x0000ea18 ite le                                            |     
                                                                 |     if (r5 > 0) {
    0x0000ea1a movle r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r5 <= 0) {
    0x0000ea1c andgt r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x0000ea20 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0000ea22 bne 0xeb10                                        |         goto label_6;
                                                                 |     }
                                                                 | label_0:
    0x0000ea24 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0000ea28 beq.w 0xeb32                                      |         goto label_7;
                                                                 |     }
    0x0000ea2c ldr r2, [pc, 0x150]                               |     
    0x0000ea2e mov r3, r6                                        |     r3 = r6;
    0x0000ea30 mov.w r1, -1                                      |     r1 = -1;
    0x0000ea34 movs r0, 4                                        |     r0 = 4;
    0x0000ea36 mov r4, sb                                        |     r4 = sb;
    0x0000ea38 movw sb, 0xd090                                   |     
    0x0000ea3c add r2, pc                                        |     r2 = 0x1d5c0;
    0x0000ea3e movt sb, 3                                        |     sb = 0x3d090;
    0x0000ea42 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x0000ea44 invalid                                           |     
    0x0000ea48 add.w r8, sp, 0x2c                                |     r8 += var_2ch;
    0x0000ea4c ldm r3, {r0, r1, r2, r3}                          |     r0 = *(r3);
                                                                 |     r1 = *((r3 + 4));
                                                                 |     r2 = *((r3 + 8));
                                                                 |     r3 = *((r3 + 12));
    0x0000ea4e add r7, sp, 0x30                                  |     r7 += var_30h;
    0x0000ea50 add.w sl, sp, 0x34                                |     sl += var_34h;
    0x0000ea54 stm.w sp, {r0, r1, r2, r3}                        |     *(sp) = r0;
                                                                 |     *((sp + 4)) = r1;
                                                                 |     *((sp + 8)) = r2;
                                                                 |     *((sp + 12)) = r3;
    0x0000ea58 mov r2, r5                                        |     r2 = r5;
    0x0000ea5a ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0000ea5c mov r1, r6                                        |     r1 = r6;
    0x0000ea5e ldr r0, [r4]                                      |     r0 = *(r4);
    0x0000ea60 bl 0x7308                                         |     fcn_00007308 (r0, r1, r2, r3);
    0x0000ea64 ldr r0, [pc, 0x11c]                               |     
    0x0000ea66 mov r2, r6                                        |     r2 = r6;
    0x0000ea68 movw r1, 0x5e9                                    |     r1 = 0x5e9;
    0x0000ea6c add r0, pc                                        |     r0 = 0x1d5f4;
    0x0000ea6e bl 0xf264                                         |     fcn_0000f264 (r0, r1, r2);
    0x0000ea72 add r0, sp, 0x38                                  |     r0 += var_38h;
    0x0000ea74 blx 0x2324                                        |     fcn_00002324 ();
    0x0000ea78 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0000ea7a adds r3, 0xa                                      |     r3 += 0xa;
    0x0000ea7c str r3, [sp, 0x38]                                |     var_38h = r3;
    0x0000ea7e b 0xea94                                          |     
                                                                 |     while (r3 == 0) {
    0x0000ea80 mov r0, sl                                        |         r0 = sl;
    0x0000ea82 blx 0x2324                                        |         fcn_00002324 ();
    0x0000ea86 ldrd r2, r3, [sp, 0x34]                           |         __asm ("ldrd r2, r3, [var_34h]");
    0x0000ea8a cmp r2, r3                                        |         
                                                                 |         if (r2 > r3) {
    0x0000ea8c bgt 0xeac2                                        |             goto label_8;
                                                                 |         }
    0x0000ea8e mov r0, sb                                        |         r0 = sb;
    0x0000ea90 blx 0x240c                                        |         strcpy (r0, r1)
    0x0000ea94 mov r3, r8                                        |         r3 = r8;
    0x0000ea96 ldr r0, [r4]                                      |         r0 = *(r4);
    0x0000ea98 mov r2, r7                                        |         r2 = r7;
    0x0000ea9a movs r1, 0xc                                      |         r1 = 0xc;
    0x0000ea9c bl 0x7138                                         |         fcn_00007138 (r0, r1, r2, r3);
    0x0000eaa0 ldr r3, [sp, 0x30]                                |         r3 = var_30h;
    0x0000eaa2 mov r5, r0                                        |         r5 = r0;
    0x0000eaa4 cmp r3, 0                                         |         
    0x0000eaa6 beq 0xea80                                        |         
                                                                 |     }
    0x0000eaa8 ldr r1, [pc, 0xdc]                                |     
    0x0000eaaa movs r2, 0xc                                      |     r2 = 0xc;
    0x0000eaac add r1, pc                                        |     r1 = 0x1d638;
    0x0000eaae blx 0x271c                                        |     r0 = fcn_0000271c ();
                                                                 |     if (r0 != 0) {
    0x0000eab2 cbz r0, 0xeac8                                    |         
    0x0000eab4 ldr r1, [pc, 0xd4]                                |         
    0x0000eab6 movs r2, 0xc                                      |         r2 = 0xc;
    0x0000eab8 mov r0, r5                                        |         r0 = r5;
    0x0000eaba add r1, pc                                        |         r1 = 0x1d64a;
    0x0000eabc blx 0x271c                                        |         r0 = fcn_0000271c ();
                                                                 |         if (r0 == 0) {
    0x0000eac0 cbz r0, 0xeac8                                    |             goto label_9;
                                                                 |         }
                                                                 | label_8:
    0x0000eac2 mov.w r3, -1                                      |         r3 = -1;
    0x0000eac6 str r3, [sp, 0x2c]                                |         var_2ch = r3;
                                                                 |     }
                                                                 | label_9:
    0x0000eac8 add r5, sp, 0x3c                                  |     r5 += var_3ch;
    0x0000eaca movs r3, 1                                        |     r3 = 1;
                                                                 | label_4:
    0x0000eacc str r3, [sp, 0x30]                                |     var_30h = r3;
                                                                 |     do {
    0x0000eace movs r1, 1                                        |         r1 = 1;
    0x0000ead0 ldr r0, [r4]                                      |         r0 = *(r4);
    0x0000ead2 mov r3, r5                                        |         r3 = r5;
    0x0000ead4 mov r2, r7                                        |         r2 = r7;
    0x0000ead6 bl 0x7138                                         |         fcn_00007138 (r0, r1, r2, r3);
    0x0000eada ldr r1, [sp, 0x30]                                |         r1 = var_30h;
    0x0000eadc cmp r1, 0                                         |         
    0x0000eade bne 0xeace                                        |         
                                                                 |     } while (r1 != 0);
                                                                 | label_1:
    0x0000eae0 ldr r0, [pc, 0xac]                                |     
    0x0000eae2 movs r3, 3                                        |     r3 = 3;
    0x0000eae4 mov r2, r8                                        |     r2 = r8;
    0x0000eae6 movw r1, 0x60e                                    |     r1 = 0x60e;
    0x0000eaea add r0, pc                                        |     
    0x0000eaec add.w r0, r0, 0x10c                               |     r0 = 0x1d78a;
    0x0000eaf0 bl 0xecc0                                         |     fcn_0000ecc0 (r0, r1, r2, r3);
    0x0000eaf4 ldr r2, [pc, 0x9c]                                |     
    0x0000eaf6 ldr r3, [pc, 0x74]                                |     r3 = *(0xeb6e);
    0x0000eaf8 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0000eafa add r2, pc                                        |     r2 = 0x1d692;
    0x0000eafc ldr r3, [r2, r3]                                  |     r3 = *(0x1d692);
    0x0000eafe ldr r2, [r3]                                      |     r2 = *(0x1d692);
    0x0000eb00 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0000eb02 eors r2, r3                                       |     r2 ^= r3;
    0x0000eb04 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0000eb08 bne 0xeb62                                        |         goto label_10;
                                                                 |     }
    0x0000eb0a add sp, 0x5c                                      |     
    0x0000eb0c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_6:
    0x0000eb10 adds r5, 1                                        |     r5++;
    0x0000eb12 movw r1, 0x5de                                    |     r1 = 0x5de;
    0x0000eb16 mov r2, r5                                        |     r2 = r5;
    0x0000eb18 mov r0, sl                                        |     r0 = sl;
    0x0000eb1a bl 0xf12c                                         |     r0 = fcn_0000f12c (r0, r1, r2);
    0x0000eb1e mov r6, r0                                        |     r6 = r0;
    0x0000eb20 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0000eb22 bne.w 0xea24                                      |         goto label_0;
                                                                 |     }
    0x0000eb26 mvn r3, 0x62                                      |     r3 = ~0x62;
    0x0000eb2a add.w r8, sp, 0x2c                                |     r8 += var_2ch;
    0x0000eb2e str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x0000eb30 b 0xeae0                                          |     goto label_1;
                                                                 | label_7:
    0x0000eb32 ldr.w r3, [sb, 0x20]                              |     r3 = *((sb + 0x20));
    0x0000eb36 mov.w r8, 1                                       |     r8 = 1;
    0x0000eb3a ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x0000eb3c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0000eb3e bne.w 0xe9f2                                      |         goto label_2;
                                                                 |     }
    0x0000eb40 add r7, sp, 0x160                                 |     r7 = sp + 0x160;
                                                                 | label_5:
    0x0000eb42 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0000eb44 mov r1, r5                                        |     r1 = r5;
    0x0000eb46 str r2, [sp, 0xc]                                 |     var_ch = r2;
    0x0000eb48 mov r0, r6                                        |     r0 = r6;
    0x0000eb4a movs r2, 1                                        |     r2 = 1;
    0x0000eb4c strd r7, r4, [sp, 0x10]                           |     __asm ("strd r7, r4, [var_10h]");
    0x0000eb50 str r3, [sp]                                      |     *(sp) = r3;
    0x0000eb52 mov.w r3, -1                                      |     r3 = -1;
    0x0000eb56 strd r7, r4, [sp, 4]                              |     __asm ("strd r7, r4, [var_4h]");
    0x0000eb5a blx 0x277c                                        |     r0 = fcn_0000277c ();
    0x0000eb5e mov r5, r0                                        |     r5 = r0;
    0x0000eb60 b 0xea12                                          |     goto label_3;
                                                                 | label_10:
    0x0000eb62 blx 0x2370                                        |     pthread_condattr_init ();
    0x0000eb66 nop                                               |     
                                                                 |     if (r2 < 1) {
    0x0000eb68 bmi 0xeb98                                        |         void (*0xeb98)() ();
                                                                 |     }
    0x0000eb6a movs r1, r0                                       |     r1 = r0;
    0x0000eb6c lsls r0, r7, 7                                    |     r0 = r7 << 7;
    0x0000eb6e movs r0, r0                                       |     
    0x0000eb70 add r3, sp, 0x360                                 |     r3 += arg_360h;
    0x0000eb72 movs r0, r0                                       |     
    0x0000eb74 add r0, sp, 0x2b0                                 |     r0 += arg_2b0h;
    0x0000eb76 movs r0, r0                                       |     
    0x0000eb78 add r3, sp, 0x148                                 |     r3 += arg_148h;
    0x0000eb7a movs r0, r0                                       |     
    0x0000eb7c add r3, sp, 0x10                                  |     r3 += var_10h;
    0x0000eb7e movs r0, r0                                       |     
    0x0000eb80 add r2, sp, 0x3a0                                 |     r2 += arg_3a0h;
    0x0000eb82 movs r0, r0                                       |     
    0x0000eb84 adr r7, 0x390                                     |     r7 = 0x390;
    0x0000eb86 movs r0, r0                                       |     
    0x0000eb88 add r2, sp, 0x260                                 |     r2 += arg_260h;
    0x0000eb8a movs r0, r0                                       |     
    0x0000eb8c add r2, sp, 0x268                                 |     r2 += arg_268h;
    0x0000eb8e movs r0, r0                                       |     
    0x0000eb90 add r2, sp, 0x1e8                                 |     r2 += arg_1e8h;
    0x0000eb92 movs r0, r0                                       |     
                                                                 |     if (r0 >= r0) {
    0x0000eb94 bhs 0xeacc                                        |         goto label_4;
                                                                 |     }
    0x0000eb96 movs r1, r0                                       |     r1 = r0;
                                                                 | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3a.so.1.3.9 @ 0x1223c */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.0001223c ()                  | void fcn_0001223c (int16_t arg_108h, int16_t arg_358h, int16_t arg1) {
                                             |     int16_t var_0h;
                                             |     int32_t var_4h;
                                             |     int32_t var_4h_2;
                                             |     int16_t var_14h;
                                             |     int16_t var_18h;
                                             |     int16_t var_24h;
                                             |     r0 = arg1;
    0x0001223c ldr r3, [pc, 0xc8]            |     
    0x0001223e movs r2, 3                    |     r2 = 3;
    0x00012240 ldr.w ip, [pc, 0xc8]          |     
    0x00012244 movs r1, 0xe4                 |     r1 = 0xe4;
    0x00012246 push {r4, r5, lr}             |     
    0x00012248 mov r4, r0                    |     r4 = r0;
    0x0001224a add r3, pc                    |     r3 = 0x24556;
    0x0001224c sub sp, 0x2c                  |     
    0x0001224e add.w r0, r3, 0x64            |     r0 = r3 + 0x64;
    0x00012252 add ip, pc                    |     ip = 0x24562;
    0x00012254 ldr r3, [pc, 0xb8]            |     r3 = *(0x12310);
    0x00012256 movs r5, 0                    |     r5 = 0;
    0x00012258 ldr.w r3, [ip, r3]            |     
    0x0001225c ldr r3, [r3]                  |     r3 = *(0x24562);
    0x0001225e str r3, [sp, 0x24]            |     var_24h = r3;
    0x00012260 mov.w r3, 0                   |     r3 = 0;
    0x00012264 str r5, [sp, 0x14]            |     var_14h = r5;
    0x00012266 bl 0xec20                     |     fcn_0000ec20 (r0, r1, r2);
    0x0001226a ldr r3, [r4, 0x50]            |     r3 = *((r4 + 0x50));
    0x0001226c ldr r0, [r4, 0x54]            |     r0 = *((r4 + 0x54));
    0x0001226e ldr r3, [r3, 0xc]             |     r3 = *((r3 + 0xc));
    0x00012270 ldr.w r3, [r3, 0x8c]          |     r3 = *((r3 + 0x8c));
    0x00012274 cmp r3, 4                     |     
                                             |     if (r3 <= 4) {
    0x00012276 ble 0x122e2                   |         goto label_2;
                                             |     }
    0x00012278 ldr r2, [pc, 0x98]            |     
    0x0001227a ldr r1, [pc, 0x9c]            |     
    0x0001227c add r2, pc                    |     r2 = 0x24594;
    0x0001227e add r1, pc                    |     r1 = 0x2459c;
                                             | label_0:
    0x00012280 movs r3, 0xb                  |     r3 = 0xb;
    0x00012282 add r5, sp, 0x18              |     r5 += var_18h;
    0x00012284 strd r2, r0, [sp, 4]          |     __asm ("strd r2, r0, [var_4h]");
    0x00012288 movs r2, 1                    |     r2 = 1;
    0x0001228a str r1, [sp]                  |     *(sp) = r1;
    0x0001228c mov r0, r5                    |     r0 = r5;
    0x0001228e mov r1, r3                    |     r1 = r3;
    0x00012290 blx 0x277c                    |     r0 = fcn_0000277c ();
    0x00012294 cmp r0, 0xa                   |     
                                             |     if (r0 > 0xa) {
    0x00012296 bgt 0x122ec                   |         goto label_3;
                                             |     }
    0x00012298 ldr r3, [r4, 0x50]            |     r3 = *((r4 + 0x50));
    0x0001229a mov r1, r5                    |     r1 = r5;
    0x0001229c ldr r3, [r3, 0xc]             |     r3 = *((r3 + 0xc));
    0x0001229e ldrd r0, r2, [r3, 0x70]       |     __asm ("ldrd r0, r2, [r3, 0x70]");
    0x000122a2 ldr r3, [r2, 0x14]            |     r3 = *((r2 + 0x14));
    0x000122a4 blx r3                        |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x000122a6 str r0, [sp, 0x14]            |     var_14h = r0;
    0x000122a8 cbnz r0, 0x122d2              |     
                                             |     while (1) {
                                             | label_1:
    0x000122aa ldr r0, [pc, 0x70]            |         
    0x000122ac movs r3, 3                    |         r3 = 3;
    0x000122ae add r2, sp, 0x14              |         r2 += var_14h;
    0x000122b0 movs r1, 0xf0                 |         r1 = 0xf0;
    0x000122b2 add r0, pc                    |         r0 = 0x245d4;
    0x000122b4 adds r0, 0x64                 |         r0 += 0x64;
    0x000122b6 bl 0xecc0                     |         fcn_0000ecc0 (r0, r1, r2, r3);
    0x000122ba ldr r2, [pc, 0x64]            |         
    0x000122bc ldr r3, [pc, 0x50]            |         r3 = *(0x12310);
    0x000122be add r2, pc                    |         r2 = 0x245e4;
    0x000122c0 ldr r3, [r2, r3]              |         r3 = *(0x245e4);
    0x000122c2 ldr r2, [r3]                  |         r2 = *(0x245e4);
    0x000122c4 ldr r3, [sp, 0x24]            |         r3 = var_24h;
    0x000122c6 eors r2, r3                   |         r2 ^= r3;
    0x000122c8 mov.w r3, 0                   |         r3 = 0;
    0x000122ca lsls r0, r0, 0xc              |         r0 <<= 0xc;
                                             |         if (r0 != r0) {
    0x000122cc bne 0x12302                   |             goto label_4;
                                             |         }
    0x000122ce add sp, 0x2c                  |         
    0x000122d0 pop {r4, r5, pc}              |         
    0x000122d2 ldr r2, [pc, 0x50]            |         
    0x000122d4 mov r3, r0                    |         r3 = r0;
    0x000122d6 movs r1, 0                    |         r1 = 0;
    0x000122d8 movs r0, 5                    |         r0 = 5;
    0x000122da add r2, pc                    |         r2 = 0x24604;
    0x000122dc bl 0x8960                     |         fcn_00008960 (r0, r1);
    0x000122e0 b 0x122aa                     |         
                                             |     }
                                             | label_2:
    0x000122e2 ldr r2, [pc, 0x44]            |     
    0x000122e4 ldr r1, [pc, 0x44]            |     
    0x000122e6 add r2, pc                    |     r2 = 0x24614;
    0x000122e8 add r1, pc                    |     r1 = 0x24618;
    0x000122ea b 0x12280                     |     goto label_0;
                                             | label_3:
    0x000122ec ldr r2, [pc, 0x40]            |     
    0x000122ee mvn r4, 1                     |     r4 = ~1;
    0x000122f2 mov r3, r0                    |     r3 = r0;
    0x000122f4 movs r1, 0                    |     r1 = 0;
    0x000122f6 movs r0, 5                    |     r0 = 5;
    0x000122f8 str r4, [sp, 0x14]            |     var_14h = r4;
    0x000122fa add r2, pc                    |     r2 = 0x2462e;
    0x000122fc bl 0x8960                     |     fcn_00008960 (r0, r1);
    0x00012300 b 0x122aa                     |     goto label_1;
                                             | label_4:
    0x00012302 blx 0x2370                    |     pthread_condattr_init ();
    0x00012306 nop                           |     
    0x00012308 ldrh r2, [r0, 2]              |     r2 = *((r0 + 2));
    0x0001230a movs r0, r0                   |     
    0x0001230c ldr r3, [sp, 0x108]           |     r3 = *(arg_108h);
    0x0001230e movs r1, r0                   |     r1 = r0;
    0x00012310 lsls r0, r7, 7                |     r0 = r7 << 7;
    0x00012312 movs r0, r0                   |     
    0x00012314 ldrb r0, [r1, 0x1a]           |     r0 = *((r1 + 0x1a));
    0x00012316 movs r0, r0                   |     
    0x00012318 ldrsh r6, [r1, r4]            |     r6 = *((r1 + r4));
    0x0001231a movs r0, r0                   |     
    0x0001231c strh r2, [r3, 0x3e]           |     *((r3 + 0x3e)) = r2;
    0x0001231e movs r0, r0                   |     
    0x00012320 ldr r2, [sp, 0x358]           |     r2 = *(arg_358h);
    0x00012322 movs r1, r0                   |     r1 = r0;
    0x00012324 ldrb r2, [r6, 0x18]           |     r2 = *((r6 + 0x18));
    0x00012326 movs r0, r0                   |     
    0x00012328 ldrb r2, [r4, 0x18]           |     r2 = *((r4 + 0x18));
    0x0001232a movs r0, r0                   |     
    0x0001232c ldrsh r4, [r4, r2]            |     r4 = *((r4 + r2));
    0x0001232e movs r0, r0                   |     
    0x00012330 ldrsh r2, [r4, r0]            |     r2 = *((r4 + r0));
    0x00012332 movs r0, r0                   |     
    0x00012334 push {r4, r5, r6, lr}         |     
    0x00012336 movs r2, 3                    |     r2 = 3;
    0x00012338 ldr r4, [pc, 0x28]            |     
    0x0001233a movs r1, 0x68                 |     r1 = 0x68;
    0x0001233c mov r5, r0                    |     r5 = r0;
    0x0001233e add r4, pc                    |     r4 = 0x246a6;
    0x00012340 adds r4, 0x80                 |     r4 += 0x80;
    0x00012342 mov r0, r4                    |     r0 = r4;
    0x00012344 bl 0xec20                     |     fcn_0000ec20 (r0, r1, r2);
    0x00012348 mov.w r0, 0x3e8               |     r0 = 0x3e8;
    0x0001234c mul r0, r5, r0                |     r0 = r5 * r0;
    0x00012350 blx 0x240c                    |     strcpy (r0, r1)
    0x00012354 mov r0, r4                    |     r0 = r4;
    0x00012356 movs r3, 3                    |     r3 = 3;
    0x00012358 pop.w {r4, r5, r6, lr}        |     
    0x0001235c movs r2, 0                    |     r2 = 0;
    0x0001235e movs r1, 0x6e                 |     r1 = 0x6e;
    0x00012360 b.w 0xecc0                    |     return void (*0xecc0)() ();
                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3a.so.1.3.9 @ 0x124bc */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000124bc ()                                      | void fcn_000124bc (void * ptr, int16_t arg_78h, int16_t arg_270h, int16_t arg_320h) {
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_28h;
    0x000124bc ldr r0, [pc, 0x1f8]                               |     
    0x000124be movs r2, 3                                        |     r2 = 3;
    0x000124c0 ldr r3, [pc, 0x1f8]                               |     r3 = *(0x126bc);
    0x000124c2 movs r1, 0xc7                                     |     r1 = 0xc7;
    0x000124c4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000124c8 sub sp, 0x14                                      |     
    0x000124ca ldr r5, [pc, 0x1f4]                               |     
    0x000124cc add r0, pc                                        |     r0 = 0x24b88;
    0x000124ce movs r4, 0                                        |     r4 = 0;
    0x000124d0 ldr r3, [r0, r3]                                  |     
    0x000124d2 add r5, pc                                        |     r5 = 0x24b98;
    0x000124d4 ldr r6, [pc, 0x1ec]                               |     
    0x000124d6 add.w r0, r5, 0x90                                |     r0 = r5 + 0x90;
    0x000124da ldr r3, [r3]                                      |     r3 = *(0x24b88);
    0x000124dc str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x000124de mov.w r3, 0                                       |     r3 = 0;
    0x000124e2 bl 0xec20                                         |     fcn_0000ec20 (r0, r1, r2);
    0x000124e6 movs r2, 3                                        |     r2 = 3;
    0x000124e8 movw r1, 0x8f2                                    |     r1 = 0x8f2;
    0x000124ec add.w r0, r5, 0xa4                                |     r0 = r5 + 0xa4;
    0x000124f0 str r4, [sp, 4]                                   |     var_4h = r4;
    0x000124f2 bl 0xec20                                         |     fcn_0000ec20 (r0, r1, r2);
    0x000124f6 ldr r2, [pc, 0x1d0]                               |     r2 = *(0x126ca);
    0x000124f8 add r6, pc                                        |     r6 = 0x24bc0;
    0x000124fa ldr r3, [pc, 0x1d0]                               |     r3 = *(0x126ce);
    0x000124fc ldr.w r8, [r6, r2]                                |     r8 = *(0x24bc0);
    0x00012500 ldr r7, [r6, r3]                                  |     r7 = *(0x24bc0);
    0x00012502 ldr.w r3, [r8]                                    |     r3 = *(0x24bc0);
    0x00012506 ldr r2, [r7]                                      |     r2 = *(0x24bc0);
    0x00012508 orrs r3, r2                                       |     r3 |= r2;
                                                                 |     if (r3 == r2) {
    0x0001250a beq 0x12556                                       |         goto label_3;
                                                                 |     }
    0x0001250c ldr r3, [pc, 0x1c0]                               |     r3 = *(0x126d0);
    0x0001250e add r5, sp, 8                                     |     r5 += var_8h;
    0x00012510 str r4, [sp, 8]                                   |     var_8h = r4;
    0x00012512 ldr.w sb, [r6, r3]                                |     sb = *((r6 + r3));
    0x00012516 ldr.w r0, [sb]                                    |     r0 = *(sb);
                                                                 |     if (r0 != 0) {
    0x0001251a cbnz r0, 0x12524                                  |         goto label_6;
                                                                 |     }
    0x0001251c b 0x1259e                                         |     goto label_7;
                                                                 |     do {
                                                                 | label_1:
    0x0001251e adds r4, 1                                        |         r4++;
                                                                 | label_0:
    0x00012520 ldr.w r0, [sb]                                    |         r0 = *(sb);
                                                                 | label_6:
    0x00012524 mov r1, r5                                        |         r1 = r5;
    0x00012526 bl 0xc77c                                         |         r0 = fcn_0000c77c (r0, r1);
                                                                 |         if (r0 == 0) {
    0x0001252a cbz r0, 0x12544                                   |             goto label_8;
                                                                 |         }
    0x0001252c ldr r3, [sp, 8]                                   |         r3 = var_8h;
    0x0001252e ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
    0x00012530 ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x00012532 ldrh r3, [r2, 0x10]                               |         r3 = *((r2 + 0x10));
    0x00012534 sbfx r3, r3, 6, 4                                 |         __asm ("sbfx r3, r3, 6, 4");
    0x00012536 asrs r3, r0, 0xe                                  |         r3 = r0 >> 0xe;
    0x00012538 cmp r3, 0                                         |         
    0x0001253a bgt 0x1251e                                       |         
                                                                 |     } while (r3 > 0);
    0x0001253c ldrb r3, [r2, 0x10]                               |     r3 = *((r2 + 0x10));
    0x0001253e lsls r3, r3, 0x1d                                 |     r3 <<= 0x1d;
                                                                 |     if (r3 >= r3) {
    0x00012540 bpl 0x12520                                       |         goto label_0;
                                                                 |     }
    0x00012542 b 0x1251e                                         |     goto label_1;
                                                                 | label_8:
    0x00012544 ldr r2, [pc, 0x18c]                               |     
    0x00012546 mov r3, r4                                        |     r3 = r4;
    0x00012548 mov.w r1, -1                                      |     r1 = -1;
    0x0001254c movs r0, 3                                        |     r0 = 3;
    0x0001254e add r2, pc                                        |     r2 = 0x24c26;
    0x00012550 bl 0x8960                                         |     fcn_00008960 (r0, r1);
                                                                 |     if (r4 != 0) {
    0x00012554 cbz r4, 0x125ae                                   |         
                                                                 | label_3:
    0x00012556 ldr r0, [pc, 0x180]                               |         
    0x00012558 movs r3, 3                                        |         r3 = 3;
    0x0001255a add r2, sp, 4                                     |         r2 += var_4h;
    0x0001255c movw r1, 0x915                                    |         r1 = 0x915;
    0x00012560 add r0, pc                                        |         r0 = 0x24c3e;
    0x00012562 adds r0, 0xa4                                     |         r0 += 0xa4;
    0x00012564 bl 0xecc0                                         |         fcn_0000ecc0 (r0, r1, r2, r3);
    0x00012568 ldr r3, [pc, 0x170]                               |         r3 = *(0x126dc);
    0x0001256a ldr r7, [r6, r3]                                  |         r7 = *((r6 + r3));
    0x0001256c ldr r3, [r7]                                      |         r3 = *(r7);
    0x0001256e cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00012570 bne 0x1265c                                       |             goto label_9;
                                                                 |         }
                                                                 | label_5:
    0x00012572 ldr r2, [pc, 0x16c]                               |         
    0x00012574 ldr r3, [pc, 0x144]                               |         r3 = *(0x126bc);
    0x00012576 add r2, pc                                        |         r2 = 0x24c5c;
    0x00012578 ldr r3, [r2, r3]                                  |         r3 = *(0x24c5c);
    0x0001257a ldr r2, [r3]                                      |         r2 = *(0x24c5c);
    0x0001257c ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x0001257e eors r2, r3                                       |         r2 ^= r3;
    0x00012580 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00012584 bne.w 0x126b2                                     |             goto label_10;
                                                                 |         }
    0x00012588 ldr r0, [pc, 0x158]                               |         
    0x0001258a movs r3, 3                                        |         r3 = 3;
    0x0001258c movs r2, 0                                        |         r2 = 0;
    0x0001258e movs r1, 0xd9                                     |         r1 = 0xd9;
    0x00012590 add r0, pc                                        |         r0 = 0x24c78;
    0x00012592 adds r0, 0x90                                     |         r0 += 0x90;
    0x00012594 add sp, 0x14                                      |         
    0x00012596 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |         
    0x0001259a b.w 0xecc0                                        |         void (*0xecc0)() ();
                                                                 | label_7:
    0x0001259e ldr r2, [pc, 0x148]                               |         
    0x000125a0 mov r3, r0                                        |         r3 = r0;
    0x000125a2 mov.w r1, -1                                      |         r1 = -1;
    0x000125a6 movs r0, 3                                        |         r0 = 3;
    0x000125a8 add r2, pc                                        |         r2 = 0x24c96;
    0x000125aa bl 0x8960                                         |         fcn_00008960 (r0, r1);
                                                                 |     }
    0x000125ae ldr r3, [pc, 0x13c]                               |     r3 = *(0x126ee);
    0x000125b0 movs r4, 0x64                                     |     r4 = 0x64;
    0x000125b2 ldr r5, [pc, 0x13c]                               |     
    0x000125b4 movs r2, 1                                        |     r2 = 1;
    0x000125b6 ldr.w sb, [pc, 0x13c]                             |     
    0x000125ba ldr.w sl, [r6, r3]                                |     sl = *((r6 + r3));
    0x000125be add r5, pc                                        |     r5 = 0x24cb4;
    0x000125c0 adds r5, 0x80                                     |     r5 += 0x80;
    0x000125c2 add sb, pc                                        |     sb = 0x24cbc;
    0x000125c4 str.w r2, [sl]                                    |     __asm ("str.w r2, [sl]");
                                                                 |     do {
    0x000125c8 ldr.w r3, [r8]                                    |         r3 = *(r8);
    0x000125cc ldr r2, [r7]                                      |         r2 = *(r7);
    0x000125ce orrs r3, r2                                       |         r3 |= r2;
                                                                 |         if (r3 == r2) {
    0x000125d0 beq 0x1263e                                       |             goto label_11;
                                                                 |         }
                                                                 | label_2:
    0x000125d2 subs r4, 1                                        |         r4--;
                                                                 |         if (r4 == 1) {
    0x000125d4 beq 0x1263e                                       |             goto label_11;
                                                                 |         }
    0x000125d6 ldr r3, [pc, 0x120]                               |         r3 = *(0x126fa);
    0x000125d8 ldr.w fp, [r6, r3]                                |         fp = *((r6 + r3));
    0x000125dc ldr.w r0, [fp]                                    |         r0 = *(fp);
    0x000125e0 blx 0x2614                                        |         r0 = fcn_00002614 ();
                                                                 |         if (r0 != 0) {
    0x000125e4 cbnz r0, 0x1264a                                  |             goto label_12;
                                                                 |         }
                                                                 | label_4:
    0x000125e6 ldr r2, [pc, 0x114]                               |         
    0x000125e8 mov.w r1, -1                                      |         r1 = -1;
    0x000125ec movs r0, 3                                        |         r0 = 3;
    0x000125ee add r2, pc                                        |         r2 = 0x24cf0;
    0x000125f0 bl 0x8960                                         |         fcn_00008960 (r0, r1);
    0x000125f4 movs r2, 3                                        |         r2 = 3;
    0x000125f6 movs r1, 0x68                                     |         r1 = 0x68;
    0x000125f8 mov r0, r5                                        |         r0 = r5;
    0x000125fa bl 0xec20                                         |         fcn_0000ec20 (r0, r1, r2);
    0x000125fc invalid                                           |         
    0x00012600 str r0, [r4, 8]                                   |         
    0x00012602 movt r0, 1                                        |         r0 = 0xNaN;
    0x00012606 blx 0x240c                                        |         strcpy (r0, r1)
    0x0001260a mov r0, r5                                        |         r0 = r5;
    0x0001260c movs r3, 3                                        |         r3 = 3;
    0x0001260e movs r2, 0                                        |         r2 = 0;
    0x00012610 movs r1, 0x6e                                     |         r1 = 0x6e;
    0x00012612 bl 0xecc0                                         |         fcn_0000ecc0 (r0, r1, r2, r3);
    0x00012616 ldr.w r0, [fp]                                    |         r0 = *(fp);
    0x0001261a blx 0x23dc                                        |         r0 = fwrite (r0, r1, r2, r3);
    0x0001261e cmp r0, 0                                         |         
    0x00012620 beq 0x125c8                                       |         
                                                                 |     } while (r0 == 0);
    0x00012622 blx 0x2490                                        |     localtime (r0);
    0x00012626 ldr r2, [pc, 0xd8]                                |     
    0x00012628 mov r3, r0                                        |     r3 = r0;
    0x0001262a movs r1, 0                                        |     r1 = 0;
    0x0001262c movs r0, 5                                        |     r0 = 5;
    0x0001262e add r2, pc                                        |     r2 = 0x24d34;
    0x00012630 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x00012634 ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x00012638 ldr r2, [r7]                                      |     r2 = *(r7);
    0x0001263a orrs r3, r2                                       |     r3 |= r2;
                                                                 |     if (r3 != r2) {
    0x0001263c bne 0x125d2                                       |         goto label_2;
                                                                 |     }
                                                                 | label_11:
    0x0001263e movs r2, 1                                        |     r2 = 1;
    0x00012640 movs r3, 0                                        |     r3 = 0;
    0x00012642 str r2, [sp, 4]                                   |     var_4h = r2;
    0x00012644 str.w r3, [sl]                                    |     __asm ("str.w r3, [sl]");
    0x00012648 b 0x12556                                         |     goto label_3;
                                                                 | label_12:
    0x0001264a blx 0x2490                                        |     localtime (r0);
    0x0001264e mov r2, sb                                        |     r2 = sb;
    0x00012650 mov r3, r0                                        |     r3 = r0;
    0x00012652 movs r1, 0                                        |     r1 = 0;
    0x00012654 movs r0, 5                                        |     r0 = 5;
    0x00012656 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x0001265a b 0x125e6                                         |     goto label_4;
                                                                 | label_9:
    0x0001265c ldr r3, [pc, 0xa4]                                |     
    0x0001265e movs r2, 0                                        |     r2 = 0;
    0x00012660 str r2, [sp, 8]                                   |     var_8h = r2;
    0x00012662 add r5, sp, 8                                     |     r5 += var_8h;
    0x00012664 ldr r3, [r6, r3]                                  |     r3 = *((r6 + r3));
    0x00012666 ldr r3, [r3]                                      |     r3 = *(0x12704);
    0x00012668 ldr r0, [r3, 4]                                   |     r0 = *(0x12708);
    0x0001266a bl 0xc720                                         |     fcn_0000c720 (r0);
    0x0001266e ldr r3, [pc, 0x60]                                |     r3 = *(0x126d2);
    0x00012670 ldr.w sb, [r6, r3]                                |     sb = *((r6 + r3));
    0x00012674 ldr.w r0, [sb]                                    |     r0 = *(sb);
    0x00012678 bl 0xc720                                         |     fcn_0000c720 (r0);
    0x0001267c ldr r3, [pc, 0x88]                                |     r3 = *(0x12708);
    0x0001267e ldr r6, [r6, r3]                                  |     r6 = *((r6 + r3));
    0x00012680 b 0x1268a                                         |     
                                                                 |     while (r0 != 0) {
    0x00012682 ldr r3, [sp, 8]                                   |         r3 = var_8h;
    0x00012684 ldr r0, [r3, 8]                                   |         r0 = *((r3 + 8));
    0x00012686 bl 0x11bf4                                        |         fcn_00011bf4 (r0);
    0x0001268a ldr r0, [r6]                                      |         r0 = *(r6);
    0x0001268c mov r1, r5                                        |         r1 = r5;
    0x0001268e bl 0xc77c                                         |         r0 = fcn_0000c77c (r0, r1);
    0x00012692 mov r4, r0                                        |         r4 = r0;
    0x00012694 cmp r0, 0                                         |         
    0x00012696 bne 0x12682                                       |         
                                                                 |     }
    0x00012698 ldr r0, [r6]                                      |     r0 = *(r6);
    0x0001269a bl 0xc720                                         |     fcn_0000c720 (r0);
    0x0001269e str.w r4, [sb]                                    |     __asm ("str.w r4, [sb]");
    0x000126a2 bl 0xe5d8                                         |     fcn_0000e5d8 ();
    0x000126a6 bl 0xf47c                                         |     fcn_0000f47c ();
    0x000126aa bl 0x88d8                                         |     fcn_000088d8 ();
    0x000126ae str r4, [r7]                                      |     *(r7) = r4;
    0x000126b0 b 0x12572                                         |     goto label_5;
                                                                 | label_10:
    0x000126b2 blx 0x2370                                        |     pthread_condattr_init ();
    0x000126b6 nop                                               |     
    0x000126b8 ldr r0, [sp, 0x320]                               |     r0 = *(arg_320h);
    0x000126ba movs r1, r0                                       |     r1 = r0;
    0x000126bc lsls r0, r7, 7                                    |     r0 = r7 << 7;
    0x000126be movs r0, r0                                       |     
    0x000126c0 strh r2, [r7, 0x2c]                               |     *((r7 + 0x2c)) = r2;
    0x000126c2 movs r0, r0                                       |     
    0x000126c4 ldr r0, [sp, 0x270]                               |     r0 = *(arg_270h);
    0x000126c6 movs r1, r0                                       |     r1 = r0;
    0x000126c8 lsls r4, r3, 9                                    |     r4 = r3 << 9;
    0x000126ca movs r0, r0                                       |     
    0x000126cc lsls r4, r0, 9                                    |     r4 = r0 << 9;
    0x000126ce movs r0, r0                                       |     
    0x000126d0 lsls r4, r7, 7                                    |     r4 = r7 << 7;
    0x000126d2 movs r0, r0                                       |     
    0x000126d4 ldrb r6, [r3, 0x10]                               |     r6 = *((r3 + 0x10));
    0x000126d6 movs r0, r0                                       |     
    0x000126d8 strh r4, [r5, 0x28]                               |     var_28h = r4;
    0x000126da movs r0, r0                                       |     
    0x000126dc lsls r4, r4, 8                                    |     r4 <<= 8;
    0x000126de movs r0, r0                                       |     
    0x000126e0 ldr r0, [sp, 0x78]                                |     r0 = *(arg_78h);
    0x000126e2 movs r1, r0                                       |     r1 = r0;
    0x000126e4 strh r4, [r7, 0x26]                               |     *((r7 + 0x26)) = r4;
    0x000126e6 movs r0, r0                                       |     
    0x000126e8 ldrb r4, [r0, 0xf]                                |     r4 = *((r0 + 0xf));
    0x000126ea movs r0, r0                                       |     
    0x000126ec lsls r4, r7, 8                                    |     r4 = r7 << 8;
    0x000126ee movs r0, r0                                       |     
    0x000126f0 strh r6, [r1, 0x26]                               |     *((r1 + 0x26)) = r6;
    0x000126f2 movs r0, r0                                       |     
    0x000126f4 ldrb r6, [r1, 0xe]                                |     r6 = *((r1 + 0xe));
    0x000126f6 movs r0, r0                                       |     
    0x000126f8 lsls r4, r6, 7                                    |     r4 = r6 << 7;
    0x000126fa movs r0, r0                                       |     
    0x000126fc ldrb r2, [r2, 0xe]                                |     r2 = *((r2 + 0xe));
    0x000126fe movs r0, r0                                       |     
    0x00012700 ldrb r2, [r1, 0xc]                                |     r2 = *((r1 + 0xc));
    0x00012702 movs r0, r0                                       |     
    0x00012704 lsls r4, r3, 8                                    |     r4 = r3 << 8;
    0x00012706 movs r0, r0                                       |     
    0x00012708 lsls r4, r6, 8                                    |     r4 = r6 << 8;
    0x0001270a movs r0, 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/libpaho-mqtt3a.so.1.3.9 @ 0x136e8 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.000136e8 ()                                      | void fcn_000136e8 (void * ptr, int16_t arg_e0h, int16_t arg_e4h, int16_t arg1) {
                                                                 |     int16_t var_0h_2;
                                                                 |     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_50h;
                                                                 |     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_90h;
                                                                 |     int16_t var_94h;
                                                                 |     int16_t var_98h;
                                                                 |     int16_t var_9ch;
                                                                 |     int16_t var_a0h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_a8h;
                                                                 |     int16_t var_b0h;
                                                                 |     int16_t var_b4h;
                                                                 |     int16_t var_b8h;
                                                                 |     int16_t var_bch;
                                                                 |     int16_t var_c0h;
                                                                 |     int16_t var_c4h;
                                                                 |     r0 = arg1;
    0x000136e8 svcmi 0xf0e92d                                    |     __asm ("svcmi 0xf0e92d");
    0x000136ec mov r5, r0                                        |     r5 = r0;
    0x000136ee ldr r0, [pc, 0x1e8]                               |     
    0x000136f0 sub sp, 0x34                                      |     
    0x000136f2 movs r6, 0                                        |     r6 = 0;
    0x000136f4 movs r2, 3                                        |     r2 = 3;
    0x000136f6 ldr r3, [pc, 0x1e4]                               |     r3 = *(0x138de);
    0x000136f8 movw r1, 0x95d                                    |     r1 = 0x95d;
    0x000136fc ldr r4, [pc, 0x1e0]                               |     
    0x000136fe add r0, pc                                        |     r0 = 0x26fdc;
    0x00013700 ldr.w sl, [pc, 0x1e0]                             |     
    0x00013704 ldr r3, [r0, r3]                                  |     
    0x00013706 add r4, pc                                        |     r4 = 0x26fea;
    0x00013708 add.w r0, r4, 0x1a4                               |     r0 = r4 + 0x1a4;
    0x0001370c add sl, pc                                        |     sl = 0x26ff4;
    0x0001370e ldr r3, [r3]                                      |     r3 = *(0x26fdc);
    0x00013710 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00013712 mov.w r3, 0                                       |     r3 = 0;
    0x00013716 str r6, [sp, 0x1c]                                |     var_1ch = r6;
    0x00013718 bl 0xec20                                         |     fcn_0000ec20 (r0, r1, r2);
    0x0001371c movs r2, 3                                        |     r2 = 3;
    0x0001371e add.w r0, r4, 0x1bc                               |     r0 = r4 + 0x1bc;
    0x00013722 movw r1, 0x2da                                    |     r1 = 0x2da;
    0x00013726 str r6, [sp, 0x20]                                |     var_20h = r6;
    0x00013728 bl 0xec20                                         |     fcn_0000ec20 (r0, r1, r2);
    0x0001372c ldr r3, [r5, 0x74]                                |     r3 = *((r5 + 0x74));
    0x0001372e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00013730 beq 0x137e2                                       |         goto label_53;
                                                                 |     }
    0x00013732 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x00013734 add r2, sp, 0x28                                  |     r2 += var_28h;
    0x00013736 ldr r0, [r5, 0x70]                                |     r0 = *((r5 + 0x70));
    0x00013738 add r1, sp, 0x24                                  |     r1 += var_24h;
    0x0001373a blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0001373c mov r7, r0                                        |     r7 = r0;
    0x0001373e str r0, [sp, 0x20]                                |     var_20h = r0;
    0x00013740 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00013742 bne 0x137e2                                       |         goto label_53;
                                                                 |     }
    0x00013744 ldr r3, [pc, 0x1a0]                               |     
    0x00013746 mov r6, r0                                        |     r6 = r0;
    0x00013748 ldr r1, [pc, 0x1a0]                               |     
    0x0001374a ldr.w fp, [pc, 0x1a4]                             |     
    0x0001374e add r3, pc                                        |     r3 = 0x2703a;
    0x00013750 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00013752 add r1, pc                                        |     r1 = 0x27042;
    0x00013754 strd r1, sl, [sp, 0xc]                            |     __asm ("strd r1, sl, [sp, 0xc]");
    0x00013758 add fp, pc                                        |     fp = 0x2704e;
    0x0001375a mov sl, r3                                        |     sl = r3;
    0x0001375c b 0x13794                                         |     
                                                                 |     while (r8 == 0x73) {
    0x0001375e ldrb r3, [r4, 1]                                  |         r3 = *((r4 + 1));
    0x00013760 cmp r3, 0x2d                                      |         
                                                                 |         if (r3 != 0x2d) {
    0x00013762 bne 0x137ac                                       |             goto label_54;
                                                                 |         }
                                                                 | label_0:
    0x00013764 ldrd r0, r3, [r5, 0x70]                           |         __asm ("ldrd r0, r3, [r5, 0x70]");
    0x00013768 mov r1, r4                                        |         r1 = r4;
    0x0001376a ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x0001376c blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x0001376e str r0, [sp, 0x20]                                |         var_20h = r0;
    0x00013770 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00013772 bne 0x1386c                                       |             goto label_55;
                                                                 |         }
    0x00013774 ldr r2, [sp, 0x24]                                |         r2 = var_24h;
    0x00013776 adds r7, 1                                        |         r7++;
    0x00013778 ldr.w r4, [r2, sb]                                |         r4 = *((r2 + sb));
                                                                 |         if (r4 != 0) {
    0x0001377c cbz r4, 0x13792                                   |             
                                                                 | label_1:
    0x0001377e mov r2, r4                                        |             r2 = r4;
    0x00013780 mov.w r1, 0x2ec                                   |             r1 = 0x2ec;
    0x00013784 mov r0, fp                                        |             r0 = fp;
    0x00013786 bl 0xf264                                         |             fcn_0000f264 (r0, r1, r2);
    0x0001378a ldr r3, [sp, 0x20]                                |             r3 = var_20h;
    0x0001378c ldr r2, [sp, 0x24]                                |             r2 = var_24h;
    0x0001378e cmp r3, 0                                         |             
                                                                 |             if (r3 != 0) {
    0x00013790 bne 0x1388a                                       |                 goto label_56;
                                                                 |             }
                                                                 |         }
                                                                 | label_2:
    0x00013792 adds r6, 1                                        |         r6++;
    0x00013794 ldr r3, [sp, 0x28]                                |         r3 = var_28h;
    0x00013796 cmp r3, r6                                        |         
                                                                 |         if (r3 <= r6) {
    0x00013798 ble 0x1388a                                       |             goto label_56;
                                                                 |         }
    0x0001379a ldr.w r4, [r2, r6, lsl 2]                         |         offset_0 = r6 << 2;
                                                                 |         r4 = *((r2 + offset_0));
    0x0001379e lsl.w sb, r6, 2                                   |         sb = r6 << 2;
    0x000137a2 ldrb.w r8, [r4]                                   |         r8 = *(r4);
    0x000137a6 cmp.w r8, 0x73                                    |         
    0x000137aa beq 0x1375e                                       |         
                                                                 |     }
                                                                 | label_54:
    0x000137ac ldrb r3, [r4]                                     |     r3 = *(r4);
    0x000137ae cmp r3, 0x73                                      |     
                                                                 |     if (r3 == 0x73) {
    0x000137b0 beq 0x138a0                                       |         goto label_57;
                                                                 |     }
                                                                 | label_4:
    0x000137b2 ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x000137b4 movs r2, 4                                        |     r2 = 4;
    0x000137b6 mov r0, r4                                        |     r0 = r4;
    0x000137b8 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x000137ba blx 0x271c                                        |     r0 = fcn_0000271c ();
    0x000137be cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000137c0 beq 0x13764                                       |         goto label_0;
                                                                 |     }
    0x000137c2 cmp.w r8, 0x72                                    |     
    0x000137c6 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
                                                                 |     if (r8 != 0x72) {
    0x000137c8 bne 0x137d0                                       |         goto label_58;
                                                                 |     }
    0x000137ca ldrb r2, [r4, 1]                                  |     r2 = *((r4 + 1));
    0x000137cc cmp r2, 0x2d                                      |     
                                                                 |     if (r2 == 0x2d) {
    0x000137ce beq 0x13764                                       |         goto label_0;
                                                                 |     }
                                                                 | label_58:
    0x000137d0 cmp r3, 0x72                                      |     
                                                                 |     if (r3 != 0x72) {
    0x000137d2 bne 0x1377e                                       |         goto label_1;
                                                                 |     }
    0x000137d4 ldrb r3, [r4, 1]                                  |     r3 = *((r4 + 1));
    0x000137d6 cmp r3, 0x35                                      |     
                                                                 |     if (r3 != 0x35) {
    0x000137d8 bne 0x1377e                                       |         goto label_1;
                                                                 |     }
    0x000137da ldrb r3, [r4, 2]                                  |     r3 = *((r4 + 2));
    0x000137dc cmp r3, 0x2d                                      |     
                                                                 |     if (r3 == 0x2d) {
    0x000137de beq 0x13764                                       |         goto label_0;
                                                                 |     }
    0x000137e0 b 0x1377e                                         |     goto label_1;
                                                                 | label_53:
    0x000137e2 movs r7, 0                                        |     r7 = 0;
                                                                 | label_3:
    0x000137e4 ldr r1, [r5]                                      |     r1 = *(r5);
    0x000137e6 mov r3, r7                                        |     r3 = r7;
    0x000137e8 ldr r2, [pc, 0x108]                               |     
    0x000137ea movs r0, 3                                        |     r0 = 3;
    0x000137ec str r1, [sp]                                      |     *(sp) = r1;
    0x000137ee mov.w r1, -1                                      |     r1 = -1;
    0x000137f2 add r2, pc                                        |     r2 = 0x270ea;
    0x000137f4 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x000137f8 ldr r0, [pc, 0xfc]                                |     
    0x000137fa add r2, sp, 0x20                                  |     r2 += var_20h;
    0x000137fc movw r1, 0x2f3                                    |     r1 = 0x2f3;
    0x00013800 movs r3, 3                                        |     r3 = 3;
    0x00013802 add r0, pc                                        |     
    0x00013804 add.w r0, r0, 0x1bc                               |     r0 = 0x272ba;
    0x00013808 bl 0xecc0                                         |     fcn_0000ecc0 (r0, r1, r2, r3);
    0x0001380c ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0001380e ldr r0, [r5, 0x60]                                |     r0 = *((r5 + 0x60));
    0x00013810 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00013812 bl 0x3f1c                                         |     fcn_00003f1c (r0);
    0x00013816 ldr r0, [r5, 0x64]                                |     r0 = *((r5 + 0x64));
    0x00013818 bl 0x3f1c                                         |     fcn_00003f1c (r0);
    0x0001381c ldr r3, [pc, 0xdc]                                |     r3 = *(0x138fc);
    0x0001381e movs r1, 0                                        |     r1 = 0;
    0x00013820 str r1, [r5, 0x4c]                                |     *((r5 + 0x4c)) = r1;
    0x00013822 mov r1, r5                                        |     r1 = r5;
    0x00013824 ldr r2, [pc, 0xd8]                                |     
    0x00013826 ldr.w r3, [sl, r3]                                |     r3 = *((sl + r3));
    0x0001382a add r2, pc                                        |     r2 = 0x2712e;
    0x0001382c ldr r0, [r3]                                      |     r0 = *(0x138fc);
    0x0001382e bl 0xc444                                         |     r0 = fcn_0000c444 (r0, r1, r2);
    0x00013832 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00013834 beq 0x138c4                                       |         goto label_59;
                                                                 |     }
    0x00013836 ldr r0, [r0, 8]                                   |     r0 = *((r0 + 8));
    0x00013838 bl 0x13578                                        |     fcn_00013578 (r0);
                                                                 | label_6:
    0x0001383c ldr r0, [pc, 0xc4]                                |     
    0x0001383e movs r3, 3                                        |     r3 = 3;
    0x00013840 add r2, sp, 0x1c                                  |     r2 += var_1ch;
    0x00013842 movw r1, 0x96b                                    |     r1 = 0x96b;
    0x00013846 add r0, pc                                        |     
    0x00013848 add.w r0, r0, 0x1a4                               |     r0 = 0x272f2;
    0x0001384c bl 0xecc0                                         |     fcn_0000ecc0 (r0, r1, r2, r3);
    0x00013850 ldr r2, [pc, 0xb4]                                |     
    0x00013852 ldr r3, [pc, 0x88]                                |     r3 = *(0x138de);
    0x00013854 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x00013856 add r2, pc                                        |     r2 = 0x27162;
    0x00013858 ldr r3, [r2, r3]                                  |     r3 = *(0x27162);
    0x0001385a ldr r2, [r3]                                      |     r2 = *(0x27162);
    0x0001385c ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0001385e eors r2, r3                                       |     r2 ^= r3;
    0x00013860 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00013864 bne 0x138d4                                       |         goto label_60;
                                                                 |     }
    0x00013866 add sp, 0x34                                      |     
    0x00013868 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_55:
    0x0001386c mov r3, r0                                        |     r3 = r0;
    0x0001386e mov r2, sl                                        |     r2 = sl;
    0x00013870 movs r1, 0                                        |     r1 = 0;
    0x00013872 movs r0, 5                                        |     r0 = 5;
    0x00013874 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x00013878 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x0001387a ldr.w r4, [r2, sb]                                |     r4 = *((r2 + sb));
    0x0001387e cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00013880 bne.w 0x1377e                                     |         goto label_1;
                                                                 |     }
    0x00013884 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00013886 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00013888 beq 0x13792                                       |         goto label_2;
                                                                 |     }
                                                                 | label_56:
    0x0001388a ldr.w sl, [sp, 0x10]                              |     sl = var_10h;
    0x0001388e cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00013890 beq 0x137e4                                       |         goto label_3;
                                                                 |     }
    0x00013892 ldr r0, [pc, 0x78]                                |     
    0x00013894 mov.w r1, 0x2f0                                   |     r1 = 0x2f0;
    0x00013898 add r0, pc                                        |     r0 = 0x271aa;
    0x0001389a bl 0xf264                                         |     fcn_0000f264 (r0, r1, r2);
    0x0001389e b 0x137e4                                         |     goto label_3;
                                                                 | label_57:
    0x000138a0 ldrb r2, [r4, 1]                                  |     r2 = *((r4 + 1));
    0x000138a2 cmp r2, 0x35                                      |     
                                                                 |     if (r2 == 0x35) {
    0x000138a4 beq 0x138ba                                       |         goto label_61;
                                                                 |     }
                                                                 | label_5:
    0x000138a6 cmp r3, 0x73                                      |     
                                                                 |     if (r3 != 0x73) {
    0x000138a8 bne 0x137b2                                       |         goto label_4;
                                                                 |     }
    0x000138aa ldrb r2, [r4, 1]                                  |     r2 = *((r4 + 1));
    0x000138ac cmp r2, 0x63                                      |     
                                                                 |     if (r2 != 0x63) {
    0x000138ae bne 0x137b2                                       |         goto label_4;
                                                                 |     }
    0x000138b0 ldrb r2, [r4, 2]                                  |     r2 = *((r4 + 2));
    0x000138b2 cmp r2, 0x2d                                      |     
                                                                 |     if (r2 == 0x2d) {
    0x000138b4 beq.w 0x13764                                     |         goto label_0;
                                                                 |     }
    0x000138b8 b 0x137b2                                         |     goto label_4;
                                                                 | label_61:
    0x000138ba ldrb r2, [r4, 2]                                  |     r2 = *((r4 + 2));
    0x000138bc cmp r2, 0x2d                                      |     
                                                                 |     if (r2 == 0x2d) {
    0x000138be beq.w 0x13764                                     |         goto label_0;
                                                                 |     }
    0x000138c0 add r7, sp, 0x144                                 |     r7 = sp + 0x144;
    0x000138c2 b 0x138a6                                         |     goto label_5;
                                                                 | label_59:
    0x000138c4 ldr r2, [pc, 0x48]                                |     
    0x000138c6 mov.w r1, -1                                      |     r1 = -1;
    0x000138ca movs r0, 5                                        |     r0 = 5;
    0x000138cc add r2, pc                                        |     r2 = 0x271e0;
    0x000138ce bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x000138d2 b 0x1383c                                         |     goto label_6;
                                                                 | label_60:
    0x000138d4 blx 0x2370                                        |     pthread_condattr_init ();
    0x000138d8 strh r6, [r2, 0x34]                               |     *((r2 + 0x34)) = r6;
    0x000138da movs r1, r0                                       |     r1 = r0;
    0x000138dc lsls r0, r7, 7                                    |     r0 = r7 << 7;
    0x000138de movs r0, r0                                       |     
    0x000138e0 strb r6, [r0, 0xe]                                |     *((r0 + 0xe)) = r6;
    0x000138e2 movs r0, r0                                       |     
    0x000138e4 strh r0, [r1, 0x34]                               |     *((r1 + 0x34)) = r0;
    0x000138e6 movs r1, r0                                       |     r1 = r0;
    0x000138e8 ldr r6, [r0, 0x3c]                                |     r6 = *((r0 + 0x3c));
    0x000138ea movs r0, r0                                       |     
    0x000138ec ldr r1, [pc, 0x2d8]                               |     r1 = *(0x13bc8);
    0x000138ee movs r0, r0                                       |     
    0x000138f0 ldr r4, [r5, 0x14]                                |     r4 = *((r5 + 0x14));
    0x000138f2 movs r0, r0                                       |     
    0x000138f4 ldr r6, [r2, 0x34]                                |     r6 = *((r2 + 0x34));
    0x000138f6 movs r0, r0                                       |     
    0x000138f8 strb r2, [r1, 0xa]                                |     *((r1 + 0xa)) = r2;
    0x000138fa movs r0, r0                                       |     
    0x000138fc lsls r4, r7, 7                                    |     r4 = r7 << 7;
    0x000138fe movs r0, r0                                       |     
    0x00013900 b 0x13f3a                                         |     
                                                                 |     while (1) {
    0x00013f32 mov.w r3, -1                                      |         r3 = -1;
    0x00013f36 ldr.w r0, [fp]                                    |         r0 = *(fp);
    0x00013f3a strd r3, r3, [sp, 0x64]                           |         __asm ("strd r3, r3, [sp, 0x64]");
    0x00013f3e blx 0x2614                                        |         r0 = fcn_00002614 ();
    0x00013f42 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00013f44 bne.w 0x14364                                     |             goto label_62;
                                                                 |         }
                                                                 | label_12:
    0x00013f48 movs r2, 3                                        |         r2 = 3;
    0x00013f4a ldr r0, [sp, 0x10]                                |         r0 = var_10h;
    0x00013f4c movw r1, 0xb3c                                    |         r1 = 0xb3c;
    0x00013f50 strd sb, sb, [sp, 0x78]                           |         __asm ("strd sb, sb, [sp, 0x78]");
    0x00013f54 bl 0xec20                                         |         fcn_0000ec20 (r0, r1, r2);
    0x00013f58 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00013f5a mov r1, r8                                        |         r1 = r8;
    0x00013f5c movs r0, 0                                        |         r0 = 0;
    0x00013f5e str.w sb, [sp, 0x6c]                              |         __asm ("str.w sb, [var_6ch]");
    0x00013f62 umull r2, r3, r3, r5                              |         r2:r3 = r3 * r5;
    0x00013f66 mov.w r2, 0x3e8                                   |         r2 = 0x3e8;
    0x00013f6a lsrs r3, r3, 6                                    |         r3 >>= 6;
    0x00013f6c str r3, [sp, 0x78]                                |         var_78h = r3;
    0x00013f6e mls r3, r2, r3, r5                                |         __asm ("mls r3, r2, r3, r5");
    0x00013f72 mul r3, r2, r3                                    |         r3 = r2 * r3;
    0x00013f76 str r3, [sp, 0x7c]                                |         var_7ch = r3;
    0x00013f78 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x00013f7a ldr r2, [r3]                                      |         r2 = *(r3);
    0x00013f7c ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x00013f7e bl 0x7ebc                                         |         fcn_00007ebc (r0, r1, r2, r3);
    0x00013f82 ldr r3, [sp, 0x6c]                                |         r3 = var_6ch;
    0x00013f84 str r0, [sp, 0x68]                                |         var_68h = r0;
    0x00013f86 str r3, [sp, 0x64]                                |         var_64h = r3;
    0x00013f88 ldr.w r3, [sl]                                    |         r3 = *(sl);
    0x00013f8c orrs r0, r3                                       |         r0 |= r3;
                                                                 |         if (r0 == r3) {
    0x00013f8e beq.w 0x1437a                                     |             goto label_63;
                                                                 |         }
                                                                 | label_13:
    0x00013f92 ldr.w r0, [fp]                                    |         r0 = *(fp);
    0x00013f96 blx 0x23dc                                        |         r0 = fwrite (r0, r1, r2, r3);
    0x00013f9a cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00013f9c bne.w 0x1434e                                     |             goto label_64;
                                                                 |         }
                                                                 | label_11:
    0x00013fa0 ldr r3, [sp, 0x68]                                |         r3 = var_68h;
    0x00013fa2 cmp r3, 0                                         |         
                                                                 |         if (r3 > 0) {
    0x00013fa4 ble.w 0x140be                                     |             
    0x00013fa8 ldr r3, [sp, 0x6c]                                |             r3 = var_6ch;
    0x00013faa str r3, [sp, 0x24]                                |             var_24h = r3;
    0x00013fac cmp r3, 0                                         |             
                                                                 |             if (r3 != 0) {
    0x00013fae bne.w 0x140be                                     |                 goto label_15;
                                                                 |             }
    0x00013fb2 ldr r2, [sp, 0xc]                                 |             r2 = var_ch;
    0x00013fb4 add r1, sp, 0x68                                  |             r1 += var_68h;
    0x00013fb6 ldr.w r3, [pc, 0xac8]                             |             r3 = *(0x14a82);
    0x00013fba ldr r5, [r2, r3]                                  |             r5 = *((r2 + r3));
    0x00013fbc ldr.w r2, [pc, 0xac4]                             |             r2 = *(0x00014a84);
    0x00013fc0 ldr r0, [r5]                                      |             r0 = *(r5);
    0x00013fc2 add r2, pc                                        |             r2 += pc;
    0x00013fc4 bl 0xc444                                         |             r0 = fcn_0000c444 (r0, r1, r2);
    0x00013fc8 cmp r0, 0                                         |             
                                                                 |             if (r0 == 0) {
    0x00013fca beq 0x140be                                       |                 goto label_15;
                                                                 |             }
    0x00013fcc ldr r3, [r5]                                      |             r3 = *(r5);
    0x00013fce ldr r3, [r3, 8]                                   |             r3 = *((r3 + 8));
    0x00013fd0 ldr r6, [r3, 8]                                   |             r6 = *((r3 + 8));
    0x00013fd2 cmp r6, 0                                         |             
                                                                 |             if (r6 == 0) {
    0x00013fd4 beq 0x140be                                       |                 goto label_15;
                                                                 |             }
    0x00013fd6 ldr r3, [r6, 0xc]                                 |             r3 = *((r6 + 0xc));
    0x00013fd8 mov.w r1, -1                                      |             r1 = -1;
    0x00013fdc ldr.w r2, [pc, 0xaa8]                             |             
    0x00013fe0 movs r0, 3                                        |             r0 = 3;
    0x00013fe2 ldrh r3, [r3, 0x10]                               |             r3 = *((r3 + 0x10));
    0x00013fe4 add r2, pc                                        |             r2 = 0x28a70;
    0x00013fe6 sbfx r3, r3, 6, 4                                 |             __asm ("sbfx r3, r3, 6, 4");
    0x00013fea bl 0x8960                                         |             fcn_00008960 (r0, r1);
    0x00013fee ldr r1, [r6, 0xc]                                 |             r1 = *((r6 + 0xc));
    0x00013ff0 ldrh r3, [r1, 0x10]                               |             r3 = *((r1 + 0x10));
    0x00013ff2 and r2, r3, 0x340                                 |             r2 = r3 & 0x340;
    0x00013ff6 and r3, r3, 0x3c0                                 |             r3 &= 0x3c0;
    0x00013ffa cmp r3, 0x80                                      |             
    0x00013ffc it ne                                             |             
                                                                 |             if (r3 != 0x80) {
    0x00013ffe cmpne r2, 0x40                                    |                 __asm ("cmpne r2, 0x40");
                                                                 |             }
                                                                 |             if (r3 != 0x80) {
    0x00014000 bne.w 0x143e4                                     |                 goto label_65;
                                                                 |             }
    0x00014004 ldr.w r0, [pc, 0xa84]                             |             
    0x00014008 mov.w r3, -1                                      |             r3 = -1;
    0x0001400c movs r2, 3                                        |             r2 = 3;
    0x0001400e movw r1, 0xa73                                    |             r1 = 0xa73;
    0x00014012 str r3, [sp, 0x70]                                |             var_70h = r3;
    0x00014014 add r0, pc                                        |             
    0x00014016 ldr r5, [r6]                                      |             r5 = *(r6);
    0x00014018 add.w r0, r0, 0x260                               |             r0 = 0x28d04;
    0x0001401c bl 0xec20                                         |             fcn_0000ec20 (r0, r1, r2);
    0x00014020 ldr r2, [r6, 0x78]                                |             r2 = *((r6 + 0x78));
    0x00014022 mov.w r3, -1                                      |             r3 = -1;
    0x00014026 cmp r2, 0                                         |             
                                                                 |             if (r2 == 0) {
    0x00014028 beq.w 0x145dc                                     |                 goto label_66;
                                                                 |             }
    0x0001402c ldr r3, [r6, 0xc]                                 |             r3 = *((r6 + 0xc));
    0x0001402e mov r7, r3                                        |             r7 = r3;
                                                                 | label_21:
    0x00014030 ldr.w r3, [r6, 0x108]                             |             r3 = *((r6 + 0x108));
    0x00014034 cmp r3, 0                                         |             
                                                                 |             if (r3 > 0) {
    0x00014036 ble 0x14058                                       |                 
    0x00014038 ldr r2, [r6, 0x74]                                |                 r2 = *((r6 + 0x74));
    0x0001403a ldr.w r3, [r6, 0x10c]                             |                 r3 = *((r6 + 0x10c));
    0x0001403e ldr.w r0, [pc, 0xa50]                             |                 
    0x00014042 ldr.w r5, [r3, r2, lsl 2]                         |                 offset_1 = r2 << 2;
                                                                 |                 r5 = *((r3 + offset_1));
    0x00014046 movs r2, 6                                        |                 r2 = 6;
    0x00014048 add r0, pc                                        |                 r0 = 0x28ade;
    0x0001404a mov r1, r5                                        |                 r1 = r5;
    0x0001404c blx 0x271c                                        |                 r0 = fcn_0000271c ();
    0x00014050 cmp r0, 0                                         |                 
                                                                 |                 if (r0 != 0) {
    0x00014052 bne.w 0x14538                                     |                     goto label_67;
                                                                 |                 }
    0x00014056 adds r5, 6                                        |                 r5 += 6;
                                                                 |             }
                                                                 | label_18:
    0x00014058 ldrh r3, [r7, 0x10]                               |             r3 = *((r7 + 0x10));
    0x0001405a and r3, r3, 0x3c0                                 |             r3 &= 0x3c0;
    0x0001405e cmp r3, 0x40                                      |             
                                                                 |             if (r3 == 0x40) {
    0x00014060 beq.w 0x1455a                                     |                 goto label_68;
                                                                 |             }
                                                                 | label_19:
    0x00014064 cmp r3, 0xc0                                      |             
                                                                 |             if (r3 == 0xc0) {
    0x00014066 beq.w 0x147a8                                     |                 goto label_69;
                                                                 |             }
    0x0001406a ldr r1, [sp, 0x70]                                |             r1 = var_70h;
    0x0001406c adds.w r3, r1, 0x16                               |             r3 = r1 + 0x16;
    0x00014070 it ne                                             |             
                                                                 |             if (r3 == r1) {
    0x00014072 movne r3, 1                                       |                 r3 = 1;
                                                                 |             }
                                                                 | label_26:
    0x00014074 cmp r1, 0                                         |             
    0x00014076 ite eq                                            |             
                                                                 |             if (r1 != 0) {
    0x00014078 moveq r3, 0                                       |                 r3 = 0;
                                                                 |             }
                                                                 |             if (r1 == 0) {
    0x0001407a andne r3, r3, 1                                   |                 r3 &= 1;
                                                                 |             }
                                                                 |             if (r3 != 0) {
    0x0001407e cbz r3, 0x1408e                                   |                 
    0x00014080 ldr r3, [r6, 0xc]                                 |                 r3 = *((r6 + 0xc));
    0x00014082 ldrh r3, [r3, 0x10]                               |                 r3 = *((r3 + 0x10));
    0x00014084 and r3, r3, 0x380                                 |                 r3 &= 0x380;
    0x00014086 strb r0, [r4, 0xd]                                |                 *((r4 + 0xd)) = r0;
    0x00014088 cmp r3, 0x80                                      |                 
                                                                 |                 if (r3 != 0x80) {
    0x0001408a bne.w 0x143b4                                     |                     goto label_70;
                                                                 |                 }
                                                                 |             }
    0x0001408e adds r1, 3                                        |             r1 += 3;
                                                                 |             if (r1 == 3) {
    0x00014090 beq.w 0x143b4                                     |                 goto label_70;
                                                                 |             }
                                                                 | label_14:
    0x00014094 ldr.w r0, [pc, 0x9fc]                             |             
    0x00014098 movs r3, 3                                        |             r3 = 3;
    0x0001409a add r2, sp, 0x70                                  |             r2 += var_70h;
    0x0001409c movw r1, 0xb32                                    |             r1 = 0xb32;
    0x000140a0 add r0, pc                                        |             
    0x000140a2 add.w r0, r0, 0x260                               |             r0 = 0x28d98;
    0x000140a6 bl 0xecc0                                         |             fcn_0000ecc0 (r0, r1, r2, r3);
    0x000140aa ldr r3, [r6, 0xc]                                 |             r3 = *((r6 + 0xc));
    0x000140ac ldr r2, [sp, 0x70]                                |             r2 = var_70h;
    0x000140ae ldrh r3, [r3, 0x10]                               |             r3 = *((r3 + 0x10));
    0x000140b0 str r2, [sp, 0x64]                                |             var_64h = r2;
    0x000140b2 and r3, r3, 0x3c0                                 |             r3 &= 0x3c0;
    0x000140b6 cmp.w r3, 0x100                                   |             
                                                                 |             if (r3 == 0x100) {
    0x000140ba beq.w 0x1450c                                     |                 goto label_71;
                                                                 |             }
                                                                 |         }
                                                                 | label_15:
    0x000140be movs r5, 0                                        |         r5 = 0;
                                                                 | label_16:
    0x000140c0 ldr.w r6, [pc, 0x9d4]                             |         r6 = *(0x00014a98);
    0x000140c4 movs r2, 3                                        |         r2 = 3;
    0x000140c6 movw r1, 0xa5d                                    |         r1 = 0xa5d;
    0x000140ca ldr r0, [sp, 0x18]                                |         r0 = var_18h;
    0x000140cc bl 0xec20                                         |         fcn_0000ec20 (r0, r1, r2);
    0x000140d0 add r6, pc                                        |         r6 += pc;
    0x000140d2 mov r0, r4                                        |         r0 = r4;
    0x000140d4 adds r6, 0x20                                     |         r6 += 0x20;
    0x000140d6 bl 0x28e8                                         |         fcn_000028e8 (r0, r1, r2);
    0x000140da ldm.w r6, {r2, r3}                                |         r2 = *(r6);
                                                                 |         r3 = *((r6 + 4));
    0x000140de ldm.w r4, {r0, r1}                                |         r0 = *(r4);
                                                                 |         r1 = *((r4 + 4));
    0x000140e2 bl 0x294c                                         |         fcn_0000294c (r0);
    0x000140e6 ldr.w r3, [pc, 0x9b4]                             |         
    0x000140ea add r3, pc                                        |         
    0x000140ec ldr r3, [r3]                                      |         r3 = *(0x28b8c);
    0x000140ee cmp r0, r3                                        |         
    0x000140f0 asr.w r2, r3, 0x1f                                |         r2 = r3 >> 0x1f;
    0x000140f4 sbcs r1, r2                                       |         __asm ("sbcs r1, r2");
                                                                 |         if (r0 < r3) {
    0x000140f6 blt.w 0x142a6                                     |             goto label_72;
                                                                 |         }
    0x000140fa add r7, sp, 0x48                                  |         r7 += var_48h;
    0x000140fc mov r0, r7                                        |         r0 = r7;
    0x000140fe bl 0x28e8                                         |         r0 = fcn_000028e8 (r0, r1, r2);
    0x00014102 ldm.w r7, {r0, r1}                                |         r0 = *(r7);
                                                                 |         r1 = *((r7 + 4));
    0x00014106 stm.w r6, {r0, r1}                                |         *(r6) = r0;
                                                                 |         *((r6 + 4)) = r1;
    0x0001410a ldm.w r4, {r0, r1}                                |         r0 = *(r4);
                                                                 |         r1 = *((r4 + 4));
    0x0001410e bl 0x3a64                                         |         r0 = fcn_00003a64 ();
    0x00014112 ldm.w r4, {r0, r1}                                |         r0 = *(r4);
                                                                 |         r1 = *((r4 + 4));
    0x00014116 movs r3, 0                                        |         r3 = 0;
    0x00014118 movs r2, 1                                        |         r2 = 1;
    0x0001411a bl 0x3c60                                         |         fcn_00003c60 (r0, r1, r2);
                                                                 | label_8:
    0x0001411e ldr.w r0, [pc, 0x980]                             |         
    0x00014122 movs r3, 3                                        |         r3 = 3;
    0x00014124 movs r2, 0                                        |         r2 = 0;
    0x00014126 movw r1, 0xa67                                    |         r1 = 0xa67;
    0x0001412a add r0, pc                                        |         
    0x0001412c add.w r0, r0, 0x278                               |         r0 = 0x28e48;
    0x00014130 bl 0xecc0                                         |         fcn_0000ecc0 (r0, r1, r2, r3);
    0x00014132 stc2l p8, c15, [r6, 0x36c]                        |         __asm ("stc2l p8, c15, [r6, 0x36c]");
    0x00014136 movs r0, r0                                       |         
    0x00014138 blx 0x2614                                        |         r0 = fcn_00002614 ();
    0x0001413c cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0001413e bne.w 0x14338                                     |             goto label_73;
                                                                 |         }
                                                                 | label_10:
    0x00014142 ldr.w r0, [pc, 0x960]                             |         
    0x00014146 movs r3, 3                                        |         r3 = 3;
    0x00014148 ldr r2, [sp, 8]                                   |         r2 = var_8h;
    0x0001414a movw r1, 0xbd5                                    |         r1 = 0xbd5;
    0x0001414e add r0, pc                                        |         
    0x00014150 add.w r0, r0, 0x250                               |         r0 = 0x28e48;
    0x00014154 bl 0xecc0                                         |         fcn_0000ecc0 (r0, r1, r2, r3);
    0x00014158 ldr.w r0, [fp]                                    |         r0 = *(fp);
    0x0001415c blx 0x23dc                                        |         r0 = fwrite (r0, r1, r2, r3);
    0x00014160 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00014162 bne.w 0x142b4                                     |             goto label_74;
                                                                 |         }
    0x00014166 ldr.w r3, [sl]                                    |         r3 = *(sl);
    0x0001416a cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0001416c bne.w 0x142d2                                     |             goto label_75;
                                                                 |         }
                                                                 | label_9:
    0x00014170 ldr r3, [sp, 0x68]                                |         r3 = var_68h;
    0x00014172 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00014174 beq 0x14250                                       |             
    0x00014176 ldr r2, [sp, 0xc]                                 |             r2 = var_ch;
    0x00014178 add r1, sp, 0x68                                  |             r1 += var_68h;
    0x0001417a ldr.w r3, [pc, 0x904]                             |             r3 = *(0x14a82);
    0x0001417e ldr r6, [r2, r3]                                  |             r6 = *((r2 + r3));
    0x00014180 ldr.w r2, [pc, 0x924]                             |             r2 = *(0x00014aa8);
    0x00014184 ldr r0, [r6]                                      |             r0 = *(r6);
    0x00014186 add r2, pc                                        |             r2 += pc;
    0x00014188 bl 0xc444                                         |             r0 = fcn_0000c444 (r0, r1, r2);
    0x0001418c cmp r0, 0                                         |             
                                                                 |             if (r0 == 0) {
    0x0001418e beq.w 0x145fc                                     |                 goto label_76;
                                                                 |             }
    0x00014192 ldr r3, [r6]                                      |             r3 = *(r6);
    0x00014194 ldr r3, [r3, 8]                                   |             r3 = *((r3 + 8));
    0x00014196 ldr r6, [r3, 8]                                   |             r6 = *((r3 + 8));
    0x00014198 cmp r6, 0                                         |             
                                                                 |             if (r6 == 0) {
    0x0001419a beq.w 0x14754                                     |                 goto label_77;
                                                                 |             }
    0x0001419e ldr r1, [sp, 0x64]                                |             r1 = var_64h;
    0x000141a0 adds r0, r1, 1                                    |             r0 = r1 + 1;
                                                                 |             if (r0 == r1) {
    0x000141a2 beq.w 0x143c6                                     |                 goto label_78;
                                                                 |             }
    0x000141a6 ldr r1, [r6, 0xc]                                 |             r1 = *((r6 + 0xc));
    0x000141a8 ldr r3, [r1, 0x68]                                |             r3 = *((r1 + 0x68));
    0x000141aa str r1, [sp, 0x2c]                                |             var_2ch = r1;
    0x000141ac ldr r2, [r3, 0xc]                                 |             r2 = *((r3 + 0xc));
    0x000141ae cmp r2, 0                                         |             
    0x000141b0 str r2, [sp, 0x28]                                |             var_28h = r2;
                                                                 |             if (r2 > 0) {
    0x000141b2 ble 0x14220                                       |                 
    0x000141b4 ldr r0, [r6, 0x14]                                |                 r0 = *((r6 + 0x14));
    0x000141b6 cmp r0, 0                                         |                 
                                                                 |                 if (r0 == 0) {
    0x000141b8 beq 0x14220                                       |                     goto label_23;
                                                                 |                 }
    0x000141ba ldr r3, [r3]                                      |                 r3 = *(r3);
    0x000141bc ldr r3, [r3, 8]                                   |                 r3 = *((r3 + 8));
    0x000141be ldr r1, [r3, 4]                                   |                 r1 = *((r3 + 4));
    0x000141c0 str r3, [sp, 0x30]                                |                 var_30h = r3;
    0x000141c2 ldr r3, [r3, 8]                                   |                 r3 = *((r3 + 8));
    0x000141c4 mov r0, r1                                        |                 r0 = r1;
    0x000141c6 mov r7, r1                                        |                 r7 = r1;
    0x000141c8 str r3, [sp, 0x24]                                |                 var_24h = r3;
    0x000141ca blx 0x24e4                                        |                 srand (r0);
    0x000141ce ldr r2, [sp, 0x24]                                |                 r2 = var_24h;
    0x000141d0 ldr r1, [sp, 0x2c]                                |                 r1 = var_2ch;
    0x000141d2 mov r3, r2                                        |                 r3 = r2;
    0x000141d4 cmp r0, r2                                        |                 
    0x000141d6 it eq                                             |                 
                                                                 |                 if (r0 != r2) {
    0x000141d8 moveq r3, 0                                       |                     r3 = 0;
                                                                 |                 }
    0x000141da movs r0, 3                                        |                 r0 = 3;
    0x000141dc str r3, [sp, 0x24]                                |                 var_24h = r3;
    0x000141de ldr r3, [r1]                                      |                 r3 = *(r1);
    0x000141e0 ldr r1, [sp, 0x30]                                |                 r1 = var_30h;
    0x000141e2 ldr r2, [r1]                                      |                 r2 = *(r1);
    0x000141e4 mov.w r1, -1                                      |                 r1 = -1;
    0x000141e8 str r2, [sp, 0x2c]                                |                 var_2ch = r2;
    0x000141ea ldr r2, [sp, 0x28]                                |                 r2 = var_28h;
    0x000141ec str r2, [sp]                                      |                 *(sp) = r2;
    0x000141ee ldr.w r2, [pc, 0x8bc]                             |                 
    0x000141f2 add r2, pc                                        |                 r2 = 0x28ca4;
    0x000141f4 bl 0x8960                                         |                 fcn_00008960 (r0, r1);
    0x000141f8 mov r1, r7                                        |                 r1 = r7;
    0x000141fa ldr r3, [sp, 0x2c]                                |                 r3 = var_2ch;
    0x000141fc ldr r2, [sp, 0x24]                                |                 r2 = var_24h;
    0x000141fe ldr r0, [r6, 0x20]                                |                 r0 = *((r6 + 0x20));
    0x00014200 ldr r7, [r6, 0x14]                                |                 r7 = *((r6 + 0x14));
    0x00014202 blx r7                                            |                 r0 = uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00014204 cmp r0, 0                                         |                 
                                                                 |                 if (r0 == 0) {
    0x00014206 beq.w 0x14716                                     |                     goto label_79;
                                                                 |                 }
    0x0001420a ldr r0, [r6, 0xc]                                 |                 r0 = *((r6 + 0xc));
    0x0001420c ldr r3, [r0, 0x74]                                |                 r3 = *((r0 + 0x74));
                                                                 |                 if (r3 != 0) {
    0x0001420e cbz r3, 0x14218                                   |                     
    0x00014210 ldr r1, [sp, 0x30]                                |                     r1 = var_30h;
    0x00014212 bl 0x99a4                                         |                     fcn_000099a4 (r0, r1);
    0x00014216 ldr r0, [r6, 0xc]                                 |                     r0 = *((r6 + 0xc));
                                                                 |                 }
    0x00014218 ldr r0, [r0, 0x68]                                |                 r0 = *((r0 + 0x68));
    0x0001421a ldr r1, [sp, 0x30]                                |                 r1 = var_30h;
    0x0001421c bl 0xc584                                         |                 fcn_0000c584 (r0, r1);
                                                                 |             }
                                                                 |             if (r5 != 0) {
                                                                 | label_23:
    0x00014220 cbz r5, 0x14248                                   |                 
    0x00014222 ldrb r3, [r5]                                     |                 r3 = *(r5);
    0x00014224 and r3, r3, 0xf0                                  |                 r3 &= 0xf0;
    0x00014228 cmp r3, 0x20                                      |                 
                                                                 |                 if (r3 == 0x20) {
    0x0001422a beq.w 0x14614                                     |                     goto label_80;
                                                                 |                 }
    0x0001422e cmp r3, 0x90                                      |                 
    0x00014230 it eq                                             |                 
                                                                 |                 if (r3 != 0x90) {
    0x00014232 streq sb, [sp, 0x78]                              |                     var_78h = sb;
                                                                 |                 }
                                                                 |                 if (r3 == 0x90) {
    0x00014236 beq 0x14264                                       |                     goto label_81;
                                                                 |                 }
    0x00014238 cmp r3, 0xb0                                      |                 
    0x0001423a it eq                                             |                 
                                                                 |                 if (r3 != 0xb0) {
    0x0001423c streq sb, [sp, 0x78]                              |                     var_78h = sb;
                                                                 |                 }
                                                                 |                 if (r3 == 0xb0) {
    0x00014240 beq 0x1428c                                       |                     goto label_82;
                                                                 |                 }
    0x00014242 cmp r3, 0xe0                                      |                 
                                                                 |                 if (r3 == 0xe0) {
    0x00014244 beq.w 0x1472a                                     |                     goto label_83;
                                                                 |                 }
                                                                 |             }
                                                                 | label_7:
    0x00014248 ldr.w r3, [sl]                                    |             r3 = *(sl);
                                                                 | label_22:
    0x0001424c cmp r3, 0                                         |             
                                                                 |             if (r3 != 0) {
    0x0001424e bne 0x142d2                                       |                 goto label_75;
                                                                 |             }
                                                                 |         }
    0x00014250 mov.w r5, 0x3e8                                   |         r5 = 0x3e8;
    0x00014254 b 0x13f32                                         |         
                                                                 |     }
                                                                 |     do {
    0x00014256 ldr r3, [sp, 0x78]                                |         r3 = var_78h;
    0x00014258 ldr r7, [r3, 8]                                   |         r7 = *((r3 + 8));
    0x0001425a ldr r3, [r5, 4]                                   |         r3 = *((r5 + 4));
    0x0001425c ldr r2, [r7, 0x14]                                |         r2 = *((r7 + 0x14));
    0x0001425e cmp r2, r3                                        |         
                                                                 |         if (r2 == r3) {
    0x00014260 beq.w 0x148c6                                     |             goto label_84;
                                                                 |         }
                                                                 | label_81:
    0x00014264 ldr.w r0, [r6, 0xe4]                              |         r0 = *((r6 + 0xe4));
    0x00014268 mov r1, r8                                        |         r1 = r8;
    0x0001426a bl 0xc77c                                         |         r0 = fcn_0000c77c (r0, r1);
    0x0001426e cmp r0, 0                                         |         
    0x00014270 bne 0x14256                                       |         
                                                                 |     } while (r0 != 0);
    0x00014272 ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x00014274 mov r0, r5                                        |     r0 = r5;
    0x00014276 ldr r1, [r3, 0x1c]                                |     r1 = *((r3 + 0x1c));
    0x00014278 bl 0xab2c                                         |     fcn_0000ab2c (r0, r1);
    0x0001427c b 0x14248                                         |     goto label_7;
                                                                 |     do {
    0x0001427e ldr r3, [sp, 0x78]                                |         r3 = var_78h;
    0x00014280 ldr r7, [r3, 8]                                   |         r7 = *((r3 + 8));
    0x00014282 ldr r3, [r5, 4]                                   |         r3 = *((r5 + 4));
    0x00014284 ldr r2, [r7, 0x14]                                |         r2 = *((r7 + 0x14));
    0x00014286 cmp r2, r3                                        |         
                                                                 |         if (r2 == r3) {
    0x00014288 beq.w 0x149ea                                     |             goto label_85;
                                                                 |         }
                                                                 | label_82:
    0x0001428c ldr.w r0, [r6, 0xe4]                              |         r0 = *((r6 + 0xe4));
    0x00014290 mov r1, r8                                        |         r1 = r8;
    0x00014292 bl 0xc77c                                         |         r0 = fcn_0000c77c (r0, r1);
    0x00014296 cmp r0, 0                                         |         
    0x00014298 bne 0x1427e                                       |         
                                                                 |     } while (r0 != 0);
                                                                 | label_33:
    0x0001429a ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x0001429c mov r0, r5                                        |     r0 = r5;
    0x0001429e ldr r1, [r3, 0x1c]                                |     r1 = *((r3 + 0x1c));
    0x000142a0 bl 0xac5c                                         |     fcn_0000ac5c (r0, r1);
    0x000142a4 b 0x14248                                         |     goto label_7;
                                                                 | label_72:
    0x000142a6 movs r3, 0                                        |     r3 = 0;
    0x000142a8 ldm.w r4, {r0, r1}                                |     r0 = *(r4);
                                                                 |     r1 = *((r4 + 4));
    0x000142ac mov r2, r3                                        |     r2 = r3;
    0x000142ae bl 0x3c60                                         |     fcn_00003c60 (r0, r1, r2);
    0x000142b2 b 0x1411e                                         |     goto label_8;
                                                                 | label_74:
    0x000142b4 blx 0x2490                                        |     localtime (r0);
    0x000142b8 ldr.w r2, [pc, 0x7f4]                             |     
    0x000142bc mov r3, r0                                        |     r3 = r0;
    0x000142be movs r1, 0                                        |     r1 = 0;
    0x000142c0 movs r0, 5                                        |     r0 = 5;
    0x000142c2 add r2, pc                                        |     r2 = 0x28d76;
    0x000142c4 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x000142c8 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x000142cc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000142ce beq.w 0x14170                                     |         goto label_9;
                                                                 |     }
                                                                 | label_75:
    0x000142d2 mov sb, fp                                        |     sb = fp;
    0x000142d4 ldr.w fp, [sp, 0xc]                               |     fp = var_ch;
    0x000142d8 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x000142da movs r4, 0                                        |     r4 = 0;
    0x000142dc ldr.w r0, [sb]                                    |     r0 = *(sb);
    0x000142e0 str r4, [r3]                                      |     *(r3) = r4;
    0x000142e2 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x000142e4 str r4, [r3]                                      |     *(r3) = r4;
    0x000142e6 blx 0x2614                                        |     r0 = fcn_00002614 ();
    0x000142ea cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000142ec bne.w 0x14794                                     |         goto label_86;
                                                                 |     }
                                                                 | label_25:
    0x000142f0 ldr.w r3, [pc, 0x7c0]                             |     
    0x000142f4 ldr.w r3, [fp, r3]                                |     r3 = *((fp + r3));
    0x000142f8 ldr r3, [r3]                                      |     r3 = *(0x14ab4);
    0x000142fa cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000142fc bne.w 0x14786                                     |         goto label_87;
                                                                 |     }
                                                                 | label_24:
    0x00014300 ldr.w r0, [pc, 0x7b4]                             |     
    0x00014304 movs r3, 3                                        |     r3 = 3;
    0x00014306 movs r2, 0                                        |     r2 = 0;
    0x00014308 movw r1, 0x8e4                                    |     r1 = 0x8e4;
    0x0001430c add r0, pc                                        |     
    0x0001430e add.w r0, r0, 0x238                               |     r0 = 0x29000;
    0x00014312 bl 0xecc0                                         |     fcn_0000ecc0 (r0, r1, r2, r3);
    0x00014316 ldr.w r2, [pc, 0x7a4]                             |     
    0x0001431a ldr.w r3, [pc, 0x740]                             |     r3 = *(0x14a5e);
    0x0001431e add r2, pc                                        |     r2 = 0x28de0;
    0x00014320 ldr r3, [r2, r3]                                  |     r3 = *(0x28de0);
    0x00014322 ldr r2, [r3]                                      |     r2 = *(0x28de0);
    0x00014324 ldr r3, [sp, 0xe4]                                |     r3 = *(arg_e4h);
    0x00014326 eors r2, r3                                       |     r2 ^= r3;
    0x00014328 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0001432c bne.w 0x15048                                     |         goto label_88;
                                                                 |     }
    0x00014330 movs r0, 0                                        |     r0 = 0;
    0x00014332 add sp, 0xec                                      |     
    0x00014334 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_73:
    0x00014338 blx 0x2490                                        |     localtime (r0);
    0x0001433c ldr.w r2, [pc, 0x780]                             |     
    0x00014340 mov r3, r0                                        |     r3 = r0;
    0x00014342 movs r1, 0                                        |     r1 = 0;
    0x00014344 movs r0, 5                                        |     r0 = 5;
    0x00014346 add r2, pc                                        |     r2 = 0x28e0a;
    0x00014348 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x0001434c b 0x14142                                         |     goto label_10;
                                                                 | label_64:
    0x0001434e blx 0x2490                                        |     localtime (r0);
    0x00014352 ldr.w r2, [pc, 0x770]                             |     
    0x00014356 mov r3, r0                                        |     r3 = r0;
    0x00014358 movs r1, 0                                        |     r1 = 0;
    0x0001435a movs r0, 5                                        |     r0 = 5;
    0x0001435c add r2, pc                                        |     r2 = 0x28e26;
    0x0001435e bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x00014362 b 0x13fa0                                         |     goto label_11;
                                                                 | label_62:
    0x00014364 blx 0x2490                                        |     localtime (r0);
    0x00014368 ldr.w r2, [pc, 0x75c]                             |     
    0x0001436c mov r3, r0                                        |     r3 = r0;
    0x0001436e movs r1, 0                                        |     r1 = 0;
    0x00014370 movs r0, 5                                        |     r0 = 5;
    0x00014372 add r2, pc                                        |     r2 = 0x28e3e;
    0x00014374 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x00014378 b 0x13f48                                         |     goto label_12;
                                                                 | label_63:
    0x0001437a ldr r3, [sp, 0x78]                                |     r3 = var_78h;
    0x0001437c cmp r3, 0                                         |     
                                                                 |     if (r3 > 0) {
    0x0001437e bgt 0x14388                                       |         goto label_89;
                                                                 |     }
    0x00014380 ldr r3, [sp, 0x7c]                                |     r3 = var_7ch;
    0x00014382 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00014384 ble.w 0x13f92                                     |         goto label_13;
                                                                 |     }
                                                                 | label_89:
    0x00014388 ldr.w r5, [pc, 0x740]                             |     
    0x0001438c movs r2, 3                                        |     r2 = 3;
    0x0001438e movs r1, 0x68                                     |     r1 = 0x68;
    0x00014390 add r5, pc                                        |     r5 = 0x28e60;
    0x00014392 adds r5, 0x80                                     |     r5 += 0x80;
    0x00014394 mov r0, r5                                        |     r0 = r5;
    0x00014396 bl 0xec20                                         |     fcn_0000ec20 (r0, r1, r2);
    0x0001439a movw r0, 0x86a0                                   |     
    0x0001439e movt r0, 1                                        |     r0 = 0x186a0;
    0x000143a2 blx 0x240c                                        |     strcpy (r0, r1)
    0x000143a6 mov r0, r5                                        |     r0 = r5;
    0x000143a8 movs r3, 3                                        |     r3 = 3;
    0x000143aa movs r2, 0                                        |     r2 = 0;
    0x000143ac movs r1, 0x6e                                     |     r1 = 0x6e;
    0x000143ae bl 0xecc0                                         |     fcn_0000ecc0 (r0, r1, r2, r3);
    0x000143b2 b 0x13f92                                         |     goto label_13;
                                                                 | label_70:
    0x000143b4 ldr.w r2, [pc, 0x718]                             |     
    0x000143b8 mov.w r1, -1                                      |     r1 = -1;
    0x000143bc mov r0, r6                                        |     r0 = r6;
    0x000143be add r2, pc                                        |     r2 = 0x28e92;
    0x000143c0 bl 0x13c74                                        |     fcn_00013c74 (r0, r1, r2, r3);
    0x000143c4 b 0x14094                                         |     goto label_14;
                                                                 | label_78:
    0x000143c6 ldr.w r2, [pc, 0x70c]                             |     
    0x000143ca movs r0, 3                                        |     r0 = 3;
    0x000143cc ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x000143ce add r2, pc                                        |     r2 = 0x28ea8;
    0x000143d0 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x000143d4 ldr.w r2, [pc, 0x700]                             |     
    0x000143d8 mov r0, r6                                        |     r0 = r6;
    0x000143da ldr r1, [sp, 0x64]                                |     r1 = var_64h;
    0x000143dc add r2, pc                                        |     r2 = 0x28eb8;
    0x000143de bl 0x13c74                                        |     fcn_00013c74 (r0, r1, r2, r3);
    0x000143e2 b 0x14248                                         |     goto label_7;
                                                                 | label_65:
    0x000143e4 ldr.w r0, [r1, 0x8c]                              |     r0 = *((r1 + 0x8c));
    0x000143e8 adds r1, 0x1c                                     |     r1 += 0x1c;
    0x000143ea ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x000143ec bl 0x4bc4                                         |     fcn_00004bc4 (r0, r1, r2);
    0x000143f0 ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x000143f2 mov r5, r0                                        |     r5 = r0;
    0x000143f4 ldrh r3, [r3, 0x10]                               |     r3 = *((r3 + 0x10));
    0x000143f6 and r3, r3, 0x3c0                                 |     r3 &= 0x3c0;
    0x000143fa cmp.w r3, 0x100                                   |     
                                                                 |     if (r3 == 0x100) {
    0x000143fe beq.w 0x145d2                                     |         goto label_90;
                                                                 |     }
                                                                 | label_17:
    0x00014402 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00014404 beq.w 0x140be                                     |         goto label_15;
                                                                 |     }
    0x00014408 ldrb r3, [r5]                                     |     r3 = *(r5);
    0x0001440a and ip, r3, 0xf0                                  |     
    0x0001440e cmp.w ip, 0x30                                    |     
                                                                 |     if (ip == 0x30) {
    0x00014412 beq.w 0x147f2                                     |         goto label_91;
                                                                 |     }
    0x00014416 cmp.w ip, 0x60                                    |     
                                                                 |     if (ip == 0x60) {
    0x0001441a beq 0x144fe                                       |         goto label_92;
                                                                 |     }
                                                                 |     if (ip < 0x60) {
    0x0001441c bls 0x1443a                                       |         goto label_93;
                                                                 |     }
    0x0001441e cmp.w ip, 0x70                                    |     
                                                                 |     if (ip == 0x70) {
    0x00014422 beq.w 0x1504c                                     |         goto label_94;
                                                                 |     }
    0x00014426 cmp.w ip, 0xd0                                    |     
                                                                 |     if (ip != 0xd0) {
    0x0001442a bne.w 0x140c0                                     |         goto label_16;
                                                                 |     }
    0x0001442e ldr r1, [sp, 0x68]                                |     r1 = var_68h;
    0x00014430 mov r0, r5                                        |     r0 = r5;
    0x00014432 bl 0xa9f4                                         |     fcn_0000a9f4 (r0);
    0x00014436 str r0, [sp, 0x64]                                |     var_64h = r0;
    0x00014438 b 0x140be                                         |     goto label_15;
                                                                 | label_93:
    0x0001443a and r2, r3, 0xe0                                  |     r2 = r3 & 0xe0;
    0x0001443e cmp r2, 0x40                                      |     
                                                                 |     if (r2 != 0x40) {
    0x00014440 bne.w 0x140c0                                     |         goto label_16;
                                                                 |     }
    0x00014444 lsrs r3, r3, 4                                    |     r3 >>= 4;
    0x00014446 mov r7, r5                                        |     r7 = r5;
    0x00014448 strd sb, sb, [r4]                                 |     __asm ("strd sb, sb, [r4]");
    0x0001444c str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x0001444e ldr.w r3, [pc, 0x68c]                             |     r3 = *(0x00014adc);
    0x00014452 strd sb, sb, [r4, 8]                              |     __asm ("strd sb, sb, [r4, 8]");
    0x00014456 add r3, pc                                        |     r3 += pc;
    0x00014458 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x0001445a mov lr, r3                                        |     lr = r3;
    0x0001445c ldm r7!, {r0, r1, r2, r3}                         |     r0 = *(r7!);
                                                                 |     r1 = *((r7! + 4));
                                                                 |     r2 = *((r7! + 8));
                                                                 |     r3 = *((r7! + 12));
    0x0001445e stm.w lr!, {r0, r1, r2, r3}                       |     *(lr!) = r0;
                                                                 |     *((lr! + 4)) = r1;
                                                                 |     *((lr! + 8)) = r2;
                                                                 |     *((lr! + 12)) = r3;
    0x00014462 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00014464 str r1, [sp, 0x30]                                |     var_30h = r1;
    0x00014466 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x00014468 str r2, [sp, 0x28]                                |     var_28h = r2;
    0x0001446a ldm.w r7, {r0, r1, r2, r3}                        |     r0 = *(r7);
                                                                 |     r1 = *((r7 + 4));
                                                                 |     r2 = *((r7 + 8));
                                                                 |     r3 = *((r7 + 12));
    0x0001446e stm.w lr, {r0, r1, r2, r3}                        |     *(lr) = r0;
                                                                 |     *((lr + 4)) = r1;
                                                                 |     *((lr + 8)) = r2;
                                                                 |     *((lr + 12)) = r3;
    0x00014472 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00014474 cmp r2, 4                                         |     
                                                                 |     if (r2 > 4) {
    0x00014476 bgt.w 0x14800                                     |         goto label_51;
                                                                 |     }
    0x0001447a movs r3, 0                                        |     r3 = 0;
    0x0001447c str r3, [sp, 0x40]                                |     var_40h = r3;
    0x0001447e str r3, [sp, 0x28]                                |     var_28h = r3;
                                                                 | label_27:
    0x00014480 cmp.w ip, 0x50                                    |     
                                                                 |     if (ip == 0x50) {
    0x00014484 beq.w 0x14a4c                                     |         goto label_95;
                                                                 |     }
    0x00014488 cmp.w ip, 0x40                                    |     
                                                                 |     if (ip == 0x40) {
    0x0001448c beq.w 0x14c14                                     |         goto label_96;
                                                                 |     }
                                                                 | label_28:
    0x00014490 ldrd r3, r2, [sp, 0x28]                           |     __asm ("ldrd r3, r2, [var_28h]");
    0x00014494 cmp r2, 5                                         |     
    0x00014496 it ne                                             |     
                                                                 |     if (r2 == 5) {
    0x00014498 orrne r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
    0x0001449c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001449e beq.w 0x140be                                     |         goto label_15;
                                                                 |     }
    0x000144a2 ldr r3, [r6, 0x18]                                |     r3 = *((r6 + 0x18));
    0x000144a4 str.w sb, [sp, 0x74]                              |     __asm ("str.w sb, [var_74h]");
                                                                 |     if (r3 != 0) {
    0x000144a8 cbz r3, 0x144ca                                   |         
    0x000144aa ldr r3, [r6, 0xc]                                 |         r3 = *((r6 + 0xc));
    0x000144ac mov.w r1, -1                                      |         r1 = -1;
    0x000144b0 ldr r7, [sp, 0x30]                                |         r7 = var_30h;
    0x000144b2 movs r0, 3                                        |         r0 = 3;
    0x000144b4 ldr.w r2, [pc, 0x628]                             |         
    0x000144b8 ldr r3, [r3]                                      |         r3 = *(r3);
    0x000144ba str r7, [sp]                                      |         *(sp) = r7;
    0x000144bc add r2, pc                                        |         r2 = 0x28fa0;
    0x000144be bl 0x8960                                         |         fcn_00008960 (r0, r1);
    0x000144c2 ldr r3, [r6, 0x18]                                |         r3 = *((r6 + 0x18));
    0x000144c4 mov r1, r7                                        |         r1 = r7;
    0x000144c6 ldr r0, [r6, 0x24]                                |         r0 = *((r6 + 0x24));
    0x000144c8 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
                                                                 |     }
    0x000144ca add r1, sp, 0x74                                  |     r1 += var_74h;
    0x000144cc str r5, [sp, 0x2c]                                |     var_2ch = r5;
    0x000144ce ldr r7, [sp, 0x30]                                |     r7 = var_30h;
    0x000144d0 mov r5, r1                                        |     r5 = r1;
    0x000144d2 b 0x144e0                                         |     
                                                                 |     while (r0 != 0) {
    0x000144d4 ldr r3, [sp, 0x74]                                |         r3 = var_74h;
    0x000144d6 ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
    0x000144d8 ldr r2, [r3, 0x14]                                |         r2 = *((r3 + 0x14));
    0x000144da cmp r7, r2                                        |         
                                                                 |         if (r7 == r2) {
    0x000144dc beq.w 0x14978                                     |             goto label_97;
                                                                 |         }
    0x000144e0 ldr.w r0, [r6, 0xe4]                              |         r0 = *((r6 + 0xe4));
    0x000144e4 mov r1, r5                                        |         r1 = r5;
    0x000144e6 bl 0xc77c                                         |         r0 = fcn_0000c77c (r0, r1);
    0x000144ea cmp r0, 0                                         |         
    0x000144ec bne 0x144d4                                       |         
                                                                 |     }
    0x000144ee ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x000144f0 cmp r3, 4                                         |     
                                                                 |     if (r3 <= 4) {
    0x000144f2 ble.w 0x140be                                     |         goto label_15;
                                                                 |     }
                                                                 | label_32:
    0x000144f6 mov r0, r4                                        |     r0 = r4;
    0x000144f8 blx 0x26c8                                        |     fcn_000026c8 ();
    0x000144fc b 0x140be                                         |     goto label_15;
                                                                 | label_92:
    0x000144fe mov r0, r5                                        |     r0 = r5;
    0x00014500 ldr r1, [sp, 0x68]                                |     r1 = var_68h;
    0x00014502 bl 0x3610                                         |     fcn_00003610 (r0, r1);
    0x00014506 movs r5, 0                                        |     r5 = 0;
    0x00014508 str r0, [sp, 0x64]                                |     var_64h = r0;
    0x0001450a b 0x140c0                                         |     goto label_16;
                                                                 | label_71:
    0x0001450c adds r2, 1                                        |     r2++;
    0x0001450e it eq                                             |     
                                                                 |     if (r2 == 1) {
    0x00014510 moveq r5, 0                                       |         r5 = 0;
                                                                 |         goto label_98;
                                                                 |     }
                                                                 |     if (r2 != 1) {
                                                                 | label_98:
    0x00014512 bne.w 0x140be                                     |         goto label_15;
                                                                 |     }
                                                                 | label_20:
    0x00014516 ldr.w r2, [pc, 0x5cc]                             |     
    0x0001451a mov.w r1, -1                                      |     r1 = -1;
    0x0001451e movs r0, 3                                        |     r0 = 3;
    0x00014520 add r2, pc                                        |     r2 = 0x2900a;
    0x00014522 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x00014526 ldr.w r2, [pc, 0x5c0]                             |     
    0x0001452a mov.w r1, -1                                      |     r1 = -1;
    0x0001452e mov r0, r6                                        |     r0 = r6;
    0x00014530 add r2, pc                                        |     r2 = 0x2901e;
    0x00014532 bl 0x13c74                                        |     fcn_00013c74 (r0, r1, r2, r3);
    0x00014536 b 0x14402                                         |     goto label_17;
                                                                 | label_67:
    0x00014538 ldr.w r0, [pc, 0x5b0]                             |     
    0x0001453c movs r2, 5                                        |     r2 = 5;
    0x0001453e mov r1, r5                                        |     r1 = r5;
    0x00014540 add r0, pc                                        |     r0 = 0x29030;
    0x00014542 blx 0x271c                                        |     r0 = fcn_0000271c ();
    0x00014546 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00014548 bne.w 0x14058                                     |         goto label_18;
                                                                 |     }
    0x0001454c ldrh r3, [r7, 0x10]                               |     r3 = *((r7 + 0x10));
    0x0001454e adds r5, 5                                        |     r5 += 5;
    0x00014550 and r3, r3, 0x3c0                                 |     r3 &= 0x3c0;
    0x00014554 cmp r3, 0x40                                      |     
                                                                 |     if (r3 != 0x40) {
    0x00014556 bne.w 0x14064                                     |         goto label_19;
                                                                 |     }
                                                                 | label_68:
    0x0001455a movs r2, 4                                        |     r2 = 4;
    0x0001455c movs r1, 1                                        |     r1 = 1;
    0x0001455e str r2, [sp, 0x80]                                |     var_80h = r2;
    0x00014560 add r3, sp, 0x74                                  |     r3 += var_74h;
    0x00014562 ldr r0, [r7, 0x1c]                                |     r0 = *((r7 + 0x1c));
    0x00014564 str r4, [sp]                                      |     *(sp) = r4;
    0x00014566 blx 0x2400                                        |     r0 = sem_post ();
    0x0001456a mov r1, r0                                        |     r1 = r0;
    0x0001456c str r0, [sp, 0x70]                                |     var_70h = r0;
    0x0001456e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00014570 bne.w 0x147e8                                     |         goto label_99;
                                                                 |     }
    0x00014574 ldr r1, [sp, 0x74]                                |     r1 = var_74h;
    0x00014576 str r1, [sp, 0x70]                                |     var_70h = r1;
    0x00014578 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0001457a bne.w 0x147e8                                     |         goto label_99;
                                                                 |     }
    0x0001457e ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x00014580 str r1, [sp, 0x28]                                |     var_28h = r1;
    0x00014582 ldr r0, [r3, 0x1c]                                |     r0 = *((r3 + 0x1c));
    0x00014584 bl 0x7514                                         |     fcn_00007514 (r0);
    0x00014588 ldr r3, [r6, 8]                                   |     r3 = *((r6 + 8));
    0x0001458a movs r2, 4                                        |     r2 = 4;
    0x0001458c ldr r0, [r6, 0xc]                                 |     r0 = *((r6 + 0xc));
    0x0001458e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00014590 beq.w 0x147d2                                     |         goto label_100;
                                                                 |     }
    0x00014594 ldr r3, [r0, 0x38]                                |     r3 = *((r0 + 0x38));
                                                                 |     if (r3 != 0) {
    0x00014596 cbz r3, 0x145ba                                   |         
    0x00014598 ldrh r3, [r0, 0x10]                               |         r3 = *((r0 + 0x10));
    0x0001459a movs r2, 5                                        |         r2 = 5;
    0x0001459c ldr r1, [sp, 0x28]                                |         r1 = var_28h;
    0x0001459e adds r0, 0x1c                                     |         r0 += 0x1c;
    0x000145a0 bfi r3, r2, 6, 4                                  |         value_2 = BIT_MASK (6, 4);
                                                                 |         value_3 = r2 & value_2;
                                                                 |         value_2 = ~value_2;
                                                                 |         r3 &= value_2;
                                                                 |         r3 |= value_3;
    0x000145a4 mov r2, r5                                        |         r2 = r5;
    0x000145a6 strh r3, [r0, -0xc]                               |         *((r0 - 0xc)) = r3;
    0x000145aa bl 0xe968                                         |         r0 = fcn_0000e968 (r0, r1, r2, r3, r4, r5, r6);
    0x000145ae adds r7, r0, 1                                    |         r7 = r0 + 1;
    0x000145b0 mov r1, r0                                        |         r1 = r0;
    0x000145b2 str r0, [sp, 0x70]                                |         var_70h = r0;
                                                                 |         if (r7 == r0) {
    0x000145b4 beq.w 0x147e8                                     |             goto label_99;
                                                                 |         }
    0x000145b8 ldr r0, [r6, 0xc]                                 |         r0 = *((r6 + 0xc));
                                                                 |     }
    0x000145ba ldrh r3, [r0, 0x10]                               |     r3 = *((r0 + 0x10));
    0x000145bc movs r2, 3                                        |     r2 = 3;
    0x000145be mov r1, r5                                        |     r1 = r5;
    0x000145c0 adds r0, 0x1c                                     |     r0 += 0x1c;
    0x000145c2 bfi r3, r2, 6, 4                                  |     value_4 = BIT_MASK (6, 4);
                                                                 |     value_5 = r2 & value_4;
                                                                 |     value_4 = ~value_4;
                                                                 |     r3 &= value_4;
                                                                 |     r3 |= value_5;
    0x000145c6 strh r3, [r0, -0xc]                               |     *((r0 - 0xc)) = r3;
    0x000145ca bl 0xda10                                         |     r0 = fcn_0000da10 (r0, r1);
    0x000145ce mov r1, r0                                        |     r1 = r0;
    0x000145d0 b 0x147e6                                         |     goto label_101;
                                                                 | label_90:
    0x000145d2 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x000145d4 adds r3, 1                                        |     r3++;
                                                                 |     if (r3 != 1) {
    0x000145d6 bne.w 0x14402                                     |         goto label_17;
                                                                 |     }
    0x000145da b 0x14516                                         |     goto label_20;
                                                                 | label_66:
    0x000145dc ldr.w r2, [pc, 0x510]                             |     
    0x000145e0 mov r1, r3                                        |     r1 = r3;
    0x000145e2 movs r0, 5                                        |     r0 = 5;
    0x000145e4 add r2, pc                                        |     r2 = 0x290d8;
    0x000145e6 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x000145ea ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x000145ec mov r7, r3                                        |     r7 = r3;
    0x000145ee ldr.w r3, [r3, 0x8c]                              |     r3 = *((r3 + 0x8c));
    0x000145f2 cmp r3, 0                                         |     
    0x000145f4 it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x000145f6 moveq r3, 4                                       |         r3 = 4;
                                                                 |     }
    0x000145f8 str r3, [r6, 0x78]                                |     *((r6 + 0x78)) = r3;
    0x000145fa b 0x14030                                         |     goto label_21;
                                                                 | label_76:
    0x000145fc ldr.w r2, [pc, 0x4f4]                             |     
    0x00014600 mov.w r1, -1                                      |     r1 = -1;
    0x00014604 ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x00014606 movs r0, 3                                        |     r0 = 3;
    0x00014608 add r2, pc                                        |     r2 = 0x29100;
    0x0001460a bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x0001460e ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x00014612 b 0x1424c                                         |     goto label_22;
                                                                 | label_80:
    0x00014614 ldr.w r0, [pc, 0x4e0]                             |     
    0x00014618 movs r2, 3                                        |     r2 = 3;
    0x0001461a ldrb r3, [r5, 4]                                  |     r3 = *((r5 + 4));
    0x0001461c mov.w r7, -1                                      |     r7 = -1;
    0x00014620 movw r1, 0x77c                                    |     r1 = 0x77c;
    0x00014624 str r7, [sp, 0x74]                                |     var_74h = r7;
    0x00014626 add r0, pc                                        |     
    0x00014628 and r3, r3, 1                                     |     r3 &= 1;
    0x0001462c add.w r0, r0, 0x288                               |     r0 = 0x293aa;
    0x00014630 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00014632 bl 0xec20                                         |     fcn_0000ec20 (r0, r1, r2);
    0x00014636 ldr r2, [r6, 0xc]                                 |     r2 = *((r6 + 0xc));
    0x00014638 ldrh r3, [r2, 0x10]                               |     r3 = *((r2 + 0x10));
    0x0001463a and r3, r3, 0x3c0                                 |     r3 &= 0x3c0;
    0x0001463e cmp.w r3, 0x100                                   |     
                                                                 |     if (r3 == 0x100) {
    0x00014642 beq.w 0x14b76                                     |         goto label_102;
                                                                 |     }
                                                                 | label_34:
    0x00014646 ldr.w r0, [pc, 0x4b4]                             |     
    0x0001464a movw r1, 0x7a3                                    |     r1 = 0x7a3;
    0x0001464e movs r3, 3                                        |     r3 = 3;
    0x00014650 add r2, sp, 0x74                                  |     r2 += var_74h;
    0x00014652 add r0, pc                                        |     
    0x00014654 add.w r0, r0, 0x288                               |     r0 = 0x293dc;
    0x00014658 bl 0xecc0                                         |     fcn_0000ecc0 (r0, r1, r2, r3);
    0x0001465c ldr r1, [sp, 0x74]                                |     r1 = var_74h;
    0x0001465e str r1, [sp, 0x64]                                |     var_64h = r1;
    0x00014660 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00014662 bne.w 0x148ba                                     |         goto label_103;
                                                                 |     }
    0x00014666 ldr.w r3, [r6, 0x108]                             |     r3 = *((r6 + 0x108));
    0x0001466a cmp r3, 0                                         |     
                                                                 |     if (r3 > 0) {
    0x0001466c ble 0x1468c                                       |         
    0x0001466e ldr r2, [r6, 0x74]                                |         r2 = *((r6 + 0x74));
    0x00014670 cmp r3, r2                                        |         
                                                                 |         if (r3 <= r2) {
    0x00014672 ble 0x1468c                                       |             goto label_104;
                                                                 |         }
    0x00014674 ldr.w r3, [r6, 0x10c]                             |         r3 = *((r6 + 0x10c));
    0x00014678 mov.w r1, -1                                      |         r1 = -1;
    0x0001467c movs r0, 3                                        |         r0 = 3;
    0x0001467e ldr.w r3, [r3, r2, lsl 2]                         |         offset_6 = r2 << 2;
                                                                 |         r3 = *((r3 + offset_6));
    0x00014682 ldr.w r2, [pc, 0x47c]                             |         
    0x00014686 add r2, pc                                        |         r2 = 0x2918c;
    0x00014688 bl 0x8960                                         |         fcn_00008960 (r0, r1);
                                                                 |     }
                                                                 | label_104:
    0x0001468c ldr r1, [r6, 0x44]                                |     r1 = *((r6 + 0x44));
    0x0001468e cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00014690 beq.w 0x1484a                                     |         goto label_105;
                                                                 |     }
    0x00014694 add r7, sp, 0x90                                  |     r7 += var_90h;
    0x00014696 movs r2, 0x38                                     |     r2 = 0x38;
    0x00014698 movs r1, 0                                        |     r1 = 0;
    0x0001469a mov r0, r7                                        |     r0 = r7;
    0x0001469c blx 0x257c                                        |     fcn_0000257c ();
    0x000146a0 ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x000146a2 mov.w r1, -1                                      |     r1 = -1;
    0x000146a6 ldr.w r2, [pc, 0x45c]                             |     
    0x000146aa movs r0, 3                                        |     r0 = 3;
    0x000146ac ldr r3, [r3]                                      |     r3 = *(r3);
    0x000146ae add r2, pc                                        |     r2 = 0x291b8;
    0x000146b0 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x000146b4 ldr.w r3, [r6, 0x108]                             |     r3 = *((r6 + 0x108));
    0x000146b8 cmp r3, 0                                         |     
                                                                 |     if (r3 > 0) {
    0x000146ba ble 0x146c4                                       |         
    0x000146bc ldr r2, [r6, 0x74]                                |         r2 = *((r6 + 0x74));
    0x000146be cmp r3, r2                                        |         
                                                                 |         if (r3 > r2) {
    0x000146c0 bgt.w 0x14c68                                     |             goto label_106;
                                                                 |         }
                                                                 |     }
    0x000146c4 ldr r3, [r6]                                      |     r3 = *(r6);
                                                                 | label_38:
    0x000146c6 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x000146c8 mov r1, r7                                        |     r1 = r7;
    0x000146ca str r3, [sp, 0x94]                                |     var_94h = r3;
    0x000146cc ldr r3, [r6, 0x78]                                |     r3 = *((r6 + 0x78));
    0x000146ce ldr r0, [r6, 0x58]                                |     r0 = *((r6 + 0x58));
    0x000146d0 strd r3, r2, [sp, 0x98]                           |     __asm ("strd r3, r2, [sp, 0x98]");
    0x000146d4 ldr r3, [r6, 0x44]                                |     r3 = *((r6 + 0x44));
    0x000146d6 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x000146d8 ldr r3, [r6, 0x28]                                |     r3 = *((r6 + 0x28));
    0x000146da strd sb, sb, [r6, 0x44]                           |     __asm ("strd sb, sb, [r6, 0x44]");
                                                                 |     if (r3 != 0) {
    0x000146de cbz r3, 0x14702                                   |         
                                                                 | label_30:
    0x000146e0 ldr.w r7, [pc, 0x424]                             |         
    0x000146e4 ldr r3, [r6, 0xc]                                 |         r3 = *((r6 + 0xc));
    0x000146e6 add r7, pc                                        |         r7 = 0x291f2;
                                                                 | label_36:
    0x000146e8 ldr.w r2, [pc, 0x420]                             |         
    0x000146ec mov.w r1, -1                                      |         r1 = -1;
    0x000146f0 ldr r3, [r3]                                      |         r3 = *(r3);
    0x000146f2 movs r0, 3                                        |         r0 = 3;
    0x000146f4 add r2, pc                                        |         r2 = 0x29204;
    0x000146f6 bl 0x8960                                         |         r0 = fcn_00008960 (r0, r1);
    0x000146fa ldrd r3, r0, [r6, 0x28]                           |         __asm ("ldrd r3, r0, [r6, 0x28]");
    0x000146fe mov r1, r7                                        |         r1 = r7;
    0x00014700 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
                                                                 |     }
                                                                 | label_29:
    0x00014702 ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
                                                                 | label_37:
    0x00014704 ldr.w r3, [r3, 0x8c]                              |     r3 = *((r3 + 0x8c));
    0x00014708 cmp r3, 4                                         |     
                                                                 |     if (r3 > 4) {
    0x0001470a bgt.w 0x14b50                                     |         goto label_107;
                                                                 |     }
                                                                 | label_31:
    0x0001470e mov r0, r5                                        |     r0 = r5;
    0x00014710 bl 0x5d00                                         |     fcn_00005d00 (r0);
    0x00014714 b 0x14248                                         |     goto label_7;
                                                                 | label_79:
    0x00014716 ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x00014718 mov.w r1, -1                                      |     r1 = -1;
    0x0001471c ldr r2, [pc, 0x3f0]                               |     
    0x0001471e movs r0, 3                                        |     r0 = 3;
    0x00014720 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00014722 add r2, pc                                        |     r2 = 0x29236;
    0x00014724 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x00014728 b 0x14220                                         |     goto label_23;
                                                                 | label_83:
    0x0001472a ldr r3, [r6, 0x30]                                |     r3 = *((r6 + 0x30));
                                                                 |     if (r3 != 0) {
    0x0001472c cbz r3, 0x1474c                                   |         
    0x0001472e ldr r3, [r6, 0xc]                                 |         r3 = *((r6 + 0xc));
    0x00014730 mov.w r1, -1                                      |         r1 = -1;
    0x00014734 ldr r2, [pc, 0x3dc]                               |         
    0x00014736 movs r0, 3                                        |         r0 = 3;
    0x00014738 ldr r3, [r3]                                      |         r3 = *(r3);
    0x0001473a add r2, pc                                        |         r2 = 0x29252;
    0x0001473c bl 0x8960                                         |         r0 = fcn_00008960 (r0, r1);
    0x00014740 ldrd r3, r0, [r6, 0x30]                           |         __asm ("ldrd r3, r0, [r6, 0x30]");
    0x00014744 add.w r1, r5, 0x10                                |         r1 = r5 + 0x10;
    0x00014748 ldrb r2, [r5, 8]                                  |         r2 = *((r5 + 8));
    0x0001474a blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
                                                                 |     }
    0x0001474c mov r0, r5                                        |     r0 = r5;
    0x0001474e bl 0x507c                                         |     fcn_0000507c (r0);
    0x00014752 b 0x14248                                         |     goto label_7;
                                                                 | label_77:
    0x00014754 ldr r2, [pc, 0x3c0]                               |     
    0x00014756 mov.w r1, -1                                      |     r1 = -1;
    0x0001475a ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x0001475c movs r0, 5                                        |     r0 = 5;
    0x0001475e add r2, pc                                        |     r2 = 0x2927a;
    0x00014760 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x00014764 ldr r0, [sp, 0x68]                                |     r0 = var_68h;
    0x00014766 bl 0x78c0                                         |     fcn_000078c0 (r0);
    0x0001476a ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x0001476e b 0x1424c                                         |     goto label_22;
                                                                 | label_87:
    0x00014786 ldr r3, [pc, 0x398]                               |     r3 = *(0x14b22);
    0x00014788 ldr.w r3, [fp, r3]                                |     r3 = *((fp + r3));
    0x0001478c ldr r0, [r3]                                      |     r0 = *(0x14b22);
    0x0001478e bl 0xa4c0                                         |     fcn_0000a4c0 (r0);
    0x00014792 b 0x14300                                         |     goto label_24;
                                                                 | label_86:
    0x00014794 blx 0x2490                                        |     localtime (r0);
    0x00014798 ldr r2, [pc, 0x388]                               |     
    0x0001479a mov r3, r0                                        |     r3 = r0;
    0x0001479c mov r1, r4                                        |     r1 = r4;
    0x0001479e movs r0, 5                                        |     r0 = 5;
    0x000147a0 add r2, pc                                        |     r2 = 0x292c8;
    0x000147a2 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x000147a6 b 0x142f0                                         |     goto label_25;
                                                                 | label_69:
    0x000147a8 mov r0, r7                                        |     r0 = r7;
    0x000147aa adds r0, 0x1c                                     |     r0 += 0x1c;
    0x000147ac bl 0xe6a0                                         |     r0 = fcn_0000e6a0 (r0, r1, r2, r3, r4, r5, r6);
    0x000147b0 adds.w r3, r0, 0x16                               |     r3 = r0 + 0x16;
    0x000147b4 mov r1, r0                                        |     r1 = r0;
    0x000147b6 it ne                                             |     
                                                                 |     if (r3 == r0) {
    0x000147b8 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x000147ba str r0, [sp, 0x70]                                |     var_70h = r0;
    0x000147bc cmp.w r0, -1                                      |     
    0x000147c0 ite eq                                            |     
                                                                 |     if (r0 != -1) {
    0x000147c2 moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r0 == -1) {
    0x000147c4 andne r2, r3, 1                                   |         r2 = r3 & 1;
                                                                 |     }
    0x000147c8 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000147ca beq.w 0x14074                                     |         goto label_26;
                                                                 |     }
    0x000147ce ldr r0, [r6, 0xc]                                 |     r0 = *((r6 + 0xc));
    0x000147d0 movs r2, 4                                        |     r2 = 4;
                                                                 | label_100:
    0x000147d2 ldrh r3, [r0, 0x10]                               |     r3 = *((r0 + 0x10));
    0x000147d4 bfi r3, r2, 6, 4                                  |     value_7 = BIT_MASK (6, 4);
                                                                 |     value_8 = r2 & value_7;
                                                                 |     value_7 = ~value_7;
                                                                 |     r3 &= value_7;
                                                                 |     r3 |= value_8;
    0x000147d8 strh r3, [r0, 0x10]                               |     *((r0 + 0x10)) = r3;
    0x000147da ldr r1, [r6, 0x78]                                |     r1 = *((r6 + 0x78));
    0x000147dc ldrd r2, r3, [r6, 0x12c]                          |     __asm ("ldrd r2, r3, [r6, 0x12c]");
    0x000147e0 bl 0x593c                                         |     r0 = fcn_0000593c (r0, r1, r2, r3);
    0x000147e4 mov r1, r0                                        |     r1 = r0;
                                                                 | label_101:
    0x000147e6 str r1, [sp, 0x70]                                |     var_70h = r1;
                                                                 | label_99:
    0x000147e8 adds.w r3, r1, 0x16                               |     r3 = r1 + 0x16;
    0x000147ec it ne                                             |     
                                                                 |     if (r3 == r1) {
    0x000147ee movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x000147f0 b 0x14074                                         |     goto label_26;
                                                                 | label_91:
    0x000147f2 mov r0, r5                                        |     r0 = r5;
    0x000147f4 ldr r1, [sp, 0x68]                                |     r1 = var_68h;
    0x000147f6 bl 0x2fe8                                         |     fcn_00002fe8 (r0, r1);
    0x000147fa movs r5, 0                                        |     r5 = 0;
    0x000147fc str r0, [sp, 0x64]                                |     var_64h = r0;
    0x000147fe b 0x140c0                                         |     goto label_16;
                                                                 | label_51:
    0x00014800 ldr r3, [pc, 0x324]                               |     
    0x00014802 add r0, sp, 0x50                                  |     r0 += var_50h;
    0x00014804 str r0, [sp, 0x44]                                |     var_44h = r0;
    0x00014806 add r3, pc                                        |     
    0x00014808 ldrb r7, [r3, 8]                                  |     r7 = *((r3 + 8));
    0x0001480a add.w r1, r3, 0x10                                |     r1 = r3 + 0x10;
    0x0001480e strd r7, r3, [sp, 0x24]                           |     __asm ("strd r7, r3, [sp, 0x24]");
    0x00014812 blx 0x2570                                        |     fcn_00002570 ();
    0x00014816 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00014818 cmp r7, 0x7f                                      |     
    0x0001481a ldr r0, [sp, 0x44]                                |     r0 = var_44h;
    0x0001481c ldrb.w ip, [r5]                                   |     ip = *(r5);
    0x00014820 ldr r3, [r3, 0xc]                                 |     r3 = *(0x2933e);
    0x00014822 and ip, ip, 0xf0                                  |     
    0x00014826 str r3, [sp, 0x40]                                |     var_40h = r3;
    0x00014828 ite le                                            |     
                                                                 |     if (r7 > 0x7f) {
    0x0001482a movle r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r7 <= 0x7f) {
    0x0001482c movgt r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0001482e cmp.w ip, 0x70                                    |     
    0x00014832 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00014834 ldm r0, {r0, r1, r2, r3}                          |     r0 = *(r0);
                                                                 |     r1 = *((r0 + 4));
                                                                 |     r2 = *((r0 + 8));
                                                                 |     r3 = *((r0 + 12));
    0x00014836 stm.w r4, {r0, r1, r2, r3}                        |     *(r4) = r0;
                                                                 |     *((r4 + 4)) = r1;
                                                                 |     *((r4 + 8)) = r2;
                                                                 |     *((r4 + 12)) = r3;
                                                                 |     if (ip != 0x70) {
    0x0001483a bne.w 0x14480                                     |         goto label_27;
                                                                 |     }
                                                                 | label_52:
    0x0001483e ldr r1, [sp, 0x68]                                |     r1 = var_68h;
    0x00014840 mov r0, r5                                        |     r0 = r5;
    0x00014842 bl 0x3884                                         |     fcn_00003884 (r0, r1);
    0x00014846 str r0, [sp, 0x64]                                |     var_64h = r0;
    0x00014848 b 0x14490                                         |     goto label_28;
                                                                 | label_105:
    0x0001484a ldr r2, [r6, 0x4c]                                |     r2 = *((r6 + 0x4c));
    0x0001484c ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x0001484e cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00014850 beq.w 0x14c58                                     |         goto label_108;
                                                                 |     }
    0x00014854 movs r2, 0x50                                     |     r2 = 0x50;
    0x00014856 add r0, sp, 0x94                                  |     r0 += var_94h;
    0x00014858 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x0001485a blx 0x257c                                        |     fcn_0000257c ();
    0x0001485e ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00014860 mov.w r1, -1                                      |     r1 = -1;
    0x00014864 ldr r2, [pc, 0x2c4]                               |     
    0x00014866 movs r0, 3                                        |     r0 = 3;
    0x00014868 str r3, [sp, 0x90]                                |     var_90h = r3;
    0x0001486a ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x0001486c add r2, pc                                        |     r2 = 0x2939c;
    0x0001486e ldr r3, [r3]                                      |     r3 = *(r3);
    0x00014870 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x00014874 ldr.w r3, [r6, 0x108]                             |     r3 = *((r6 + 0x108));
    0x00014878 add.w ip, sp, 0xa0                                |     
    0x0001487c ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x0001487e ldr r7, [r6, 0x4c]                                |     r7 = *((r6 + 0x4c));
    0x00014880 cmp r3, 0                                         |     
    0x00014882 ittet gt                                          |     
                                                                 |     if (r3 <= 0) {
    0x00014884 ldrgt r2, [r6, 0x74]                              |         r2 = *((r6 + 0x74));
                                                                 |     }
                                                                 |     if (r3 <= 0) {
    0x00014886 ldrgt r3, [r6, 0x10c]                             |         r3 = *((r6 + 0x10c));
                                                                 |     }
                                                                 |     if (r3 <= 0) {
    0x0001488a ldrgt r3, [r6]                                    |         r3 = *(r6);
                                                                 |     }
                                                                 |     if (r3 > 0) {
    0x0001488c ldr.w r3, [r3, r2, lsl 2]                         |         offset_9 = r2 << 2;
                                                                 |         r3 = *((r3 + offset_9));
                                                                 |     }
    0x00014890 ldr r2, [r6, 0x78]                                |     r2 = *((r6 + 0x78));
    0x00014892 str r3, [sp, 0xb0]                                |     var_b0h = r3;
    0x00014894 add.w r3, r5, 0x10                                |     r3 = r5 + 0x10;
    0x00014898 strd r2, r1, [sp, 0xb4]                           |     __asm ("strd r2, r1, [sp, 0xb4]");
    0x0001489c ldm r3, {r0, r1, r2, r3}                          |     r0 = *(r3);
                                                                 |     r1 = *((r3 + 4));
                                                                 |     r2 = *((r3 + 8));
                                                                 |     r3 = *((r3 + 12));
    0x0001489e stm.w ip, {r0, r1, r2, r3}                        |     *(ip) = r0;
                                                                 |     *((ip + 4)) = r1;
                                                                 |     *((ip + 8)) = r2;
                                                                 |     *((ip + 12)) = r3;
    0x000148a2 add r1, sp, 0x90                                  |     r1 += var_90h;
    0x000148a4 ldrb r3, [r5, 8]                                  |     r3 = *((r5 + 8));
    0x000148a6 ldr r0, [r6, 0x58]                                |     r0 = *((r6 + 0x58));
    0x000148a8 str r3, [sp, 0x9c]                                |     var_9ch = r3;
    0x000148aa blx r7                                            |     uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x000148ac ldr r3, [r6, 0x28]                                |     r3 = *((r6 + 0x28));
    0x000148ae strd sb, sb, [r6, 0x4c]                           |     __asm ("strd sb, sb, [r6, 0x4c]");
    0x000148b2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000148b4 beq.w 0x14702                                     |         goto label_29;
                                                                 |     }
    0x000148b8 b 0x146e0                                         |     goto label_30;
                                                                 | label_103:
    0x000148ba ldr r2, [pc, 0x274]                               |     
    0x000148bc mov r0, r6                                        |     r0 = r6;
    0x000148be add r2, pc                                        |     r2 = 0x293f4;
    0x000148c0 bl 0x13c74                                        |     fcn_00013c74 (r0, r1, r2, r3);
    0x000148c4 b 0x1470e                                         |     goto label_31;
                                                                 | label_84:
    0x000148c6 ldr.w r0, [r6, 0xe4]                              |     r0 = *((r6 + 0xe4));
    0x000148ca mov r1, r7                                        |     r1 = r7;
    0x000148cc str r7, [sp, 0x24]                                |     var_24h = r7;
    0x000148ce bl 0xc4fc                                         |     r0 = fcn_0000c4fc (r0, r1);
    0x000148d2 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000148d4 beq.w 0x14dd8                                     |         goto label_109;
                                                                 |     }
                                                                 | label_43:
    0x000148d8 ldr.w lr, [r6, 0xc]                               |     
    0x000148dc ldr r3, [r5, 0x1c]                                |     r3 = *((r5 + 0x1c));
    0x000148de ldr.w r1, [lr, 0x8c]                              |     r1 = *((lr + 0x8c));
    0x000148e2 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x000148e4 cmp r1, 4                                         |     
                                                                 |     if (r1 <= 4) {
    0x000148e6 ble.w 0x14c20                                     |         goto label_110;
                                                                 |     }
    0x000148ea cmp r2, 1                                         |     
                                                                 |     if (r2 == 1) {
    0x000148ec beq.w 0x14cde                                     |         goto label_111;
                                                                 |     }
    0x000148f0 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x000148f2 ldr r1, [r1, 0xc]                                 |     r1 = *((r1 + 0xc));
    0x000148f4 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x000148f6 beq 0x14956                                       |         
    0x000148f8 ldr r3, [r3]                                      |         r3 = *(r3);
    0x000148fa cmp r2, 1                                         |         
    0x000148fc ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
    0x000148fe ldr r3, [r3]                                      |         r3 = *(r3);
    0x00014900 str r2, [sp, 0xb0]                                |         var_b0h = r2;
    0x00014902 str r3, [sp, 0x9c]                                |         var_9ch = r3;
                                                                 |         if (r2 <= 1) {
    0x00014904 ble.w 0x14eac                                     |             goto label_112;
                                                                 |         }
    0x00014908 ldr r0, [pc, 0x228]                               |         
    0x0001490a lsls r2, r2, 2                                    |         r2 <<= 2;
    0x0001490c movw r1, 0x862                                    |         r1 = 0x862;
    0x00014910 str.w sb, [sp, 0x80]                              |         __asm ("str.w sb, [var_80h]");
    0x00014914 add r0, pc                                        |         r0 = 0x2944c;
    0x00014916 bl 0xf12c                                         |         fcn_0000f12c (r0, r1, r2);
    0x0001491a str r0, [sp, 0x28]                                |         var_28h = r0;
    0x0001491c str r0, [sp, 0xb4]                                |         var_b4h = r0;
    0x0001491e cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00014920 bne.w 0x14f8a                                     |             goto label_113;
                                                                 |         }
    0x00014924 ldr r7, [sp, 0x24]                                |         r7 = var_24h;
    0x00014926 add.w r3, r5, 0xc                                 |         r3 = r5 + 0xc;
    0x0001492a ldr.w lr, [r6, 0xc]                               |         
    0x0001492e add.w ip, sp, 0xa0                                |         
    0x00014932 ldr r2, [r7, 0x14]                                |         r2 = *((r7 + 0x14));
    0x00014934 str r2, [sp, 0x98]                                |         var_98h = r2;
    0x00014936 ldm r3, {r0, r1, r2, r3}                          |         r0 = *(r3);
                                                                 |         r1 = *((r3 + 4));
                                                                 |         r2 = *((r3 + 8));
                                                                 |         r3 = *((r3 + 12));
    0x00014938 stm.w ip, {r0, r1, r2, r3}                        |         *(ip) = r0;
                                                                 |         *((ip + 4)) = r1;
                                                                 |         *((ip + 8)) = r2;
                                                                 |         *((ip + 12)) = r3;
    0x0001493c ldr r2, [pc, 0x1f8]                               |         
    0x0001493e ldr.w r3, [lr]                                    |         r3 = *(lr);
    0x00014942 add r2, pc                                        |         r2 = 0x2947e;
                                                                 | label_48:
    0x00014944 mov.w r1, -1                                      |         r1 = -1;
    0x00014948 movs r0, 3                                        |         r0 = 3;
    0x0001494a bl 0x8960                                         |         fcn_00008960 (r0, r1);
    0x0001494e ldr r3, [r7, 0xc]                                 |         r3 = *((r7 + 0xc));
    0x00014950 add r1, sp, 0x90                                  |         r1 += var_90h;
    0x00014952 ldr r0, [r7, 0x18]                                |         r0 = *((r7 + 0x18));
    0x00014954 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
                                                                 |     }
                                                                 | label_35:
    0x00014956 ldr r7, [sp, 0x24]                                |     r7 = var_24h;
    0x00014958 mov r0, r7                                        |     r0 = r7;
    0x0001495a bl 0x11bf4                                        |     fcn_00011bf4 (r0);
    0x0001495e ldr r0, [pc, 0x1dc]                               |     
    0x00014960 mov r2, r7                                        |     r2 = r7;
    0x00014962 movw r1, 0x422                                    |     r1 = 0x422;
    0x00014966 add r0, pc                                        |     r0 = 0x294a8;
    0x00014968 bl 0xf264                                         |     fcn_0000f264 (r0, r1, r2);
    0x0001496c ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x0001496e mov r0, r5                                        |     r0 = r5;
    0x00014970 ldr r1, [r3, 0x1c]                                |     r1 = *((r3 + 0x1c));
    0x00014972 bl 0xab2c                                         |     fcn_0000ab2c (r0, r1);
    0x00014976 b 0x14248                                         |     goto label_7;
                                                                 | label_97:
    0x00014978 ldr.w r0, [r6, 0xe4]                              |     r0 = *((r6 + 0xe4));
    0x0001497c mov r1, r3                                        |     r1 = r3;
    0x0001497e ldr r5, [sp, 0x2c]                                |     r5 = var_2ch;
    0x00014980 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00014982 bl 0xc4fc                                         |     r0 = fcn_0000c4fc (r0, r1);
    0x00014986 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00014988 beq.w 0x14de8                                     |         goto label_114;
                                                                 |     }
                                                                 | label_44:
    0x0001498c ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0001498e ldr r1, [r2, 4]                                   |     r1 = *((r2 + 4));
    0x00014990 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00014992 beq.w 0x14d5c                                     |         goto label_115;
                                                                 |     }
    0x00014996 ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x00014998 mov r5, r2                                        |     r5 = r2;
    0x0001499a ldr r2, [r2, 0x14]                                |     r2 = *((r2 + 0x14));
    0x0001499c mov.w r1, -1                                      |     r1 = -1;
    0x000149a0 movs r0, 3                                        |     r0 = 3;
    0x000149a2 ldr r3, [r3]                                      |     r3 = *(r3);
    0x000149a4 str r2, [sp, 0x90]                                |     var_90h = r2;
    0x000149a6 ldr r2, [r5, 0x34]                                |     r2 = *((r5 + 0x34));
    0x000149a8 str r2, [sp, 0xc4]                                |     var_c4h = r2;
    0x000149aa ldr r2, [r5, 0x3c]                                |     r2 = *((r5 + 0x3c));
    0x000149ac str r2, [sp, 0xa0]                                |     var_a0h = r2;
    0x000149ae ldr r2, [r5, 0x38]                                |     r2 = *((r5 + 0x38));
    0x000149b0 str r2, [sp, 0x9c]                                |     var_9ch = r2;
    0x000149b2 ldr r2, [r5, 0x40]                                |     r2 = *((r5 + 0x40));
    0x000149b4 str r2, [sp, 0xa4]                                |     var_4ch = r2;
    0x000149b6 ldr r2, [r5, 0x44]                                |     r2 = *((r5 + 0x44));
    0x000149b8 str r2, [sp, 0xa8]                                |     var_a8h = r2;
    0x000149ba ldr r2, [pc, 0x184]                               |     
    0x000149bc add r2, pc                                        |     r2 = 0x29502;
    0x000149be bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x000149c2 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x000149c4 add r1, sp, 0x90                                  |     r1 += var_90h;
    0x000149c6 ldr r0, [r5, 0x18]                                |     r0 = *((r5 + 0x18));
    0x000149c8 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
                                                                 | label_42:
    0x000149ca ldr r5, [sp, 0x2c]                                |     r5 = var_2ch;
    0x000149cc mov r0, r5                                        |     r0 = r5;
    0x000149ce bl 0x11bf4                                        |     fcn_00011bf4 (r0);
    0x000149d2 ldr r0, [pc, 0x170]                               |     
    0x000149d4 mov r2, r5                                        |     r2 = r5;
    0x000149d6 movw r1, 0x422                                    |     r1 = 0x422;
    0x000149da add r0, pc                                        |     r0 = 0x29524;
    0x000149dc bl 0xf264                                         |     fcn_0000f264 (r0, r1, r2);
    0x000149e0 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x000149e2 cmp r3, 4                                         |     
                                                                 |     if (r3 <= 4) {
    0x000149e4 ble.w 0x140be                                     |         goto label_15;
                                                                 |     }
    0x000149e8 b 0x144f6                                         |     goto label_32;
                                                                 | label_85:
    0x000149ea ldr.w r0, [r6, 0xe4]                              |     r0 = *((r6 + 0xe4));
    0x000149ee mov r1, r7                                        |     r1 = r7;
    0x000149f0 bl 0xc4fc                                         |     r0 = fcn_0000c4fc (r0, r1);
    0x000149f4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000149f6 beq.w 0x14df8                                     |         goto label_116;
                                                                 |     }
                                                                 | label_45:
    0x000149fa ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x000149fc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000149fe beq.w 0x14d52                                     |         goto label_117;
                                                                 |     }
                                                                 | label_41:
    0x00014a02 ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x00014a04 mov.w r1, -1                                      |     r1 = -1;
    0x00014a08 ldr r2, [pc, 0x13c]                               |     
    0x00014a0a movs r0, 3                                        |     r0 = 3;
    0x00014a0c ldr r3, [r3]                                      |     r3 = *(r3);
    0x00014a0e add r2, pc                                        |     r2 = 0x2955a;
    0x00014a10 str r2, [sp, 0x24]                                |     var_24h = r2;
    0x00014a12 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x00014a16 ldr r1, [r7, 4]                                   |     r1 = *((r7 + 4));
    0x00014a18 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00014a1a beq.w 0x14c72                                     |         goto label_118;
                                                                 |     }
    0x00014a1e add r3, sp, 0x90                                  |     r3 += var_90h;
    0x00014a20 movs r1, 0                                        |     r1 = 0;
    0x00014a22 mov r0, r3                                        |     r0 = r3;
    0x00014a24 movs r2, 0x38                                     |     r2 = 0x38;
    0x00014a26 blx 0x257c                                        |     fcn_0000257c ();
    0x00014a2a ldr r3, [r7, 0x14]                                |     r3 = *((r7 + 0x14));
    0x00014a2c mov r1, r0                                        |     r1 = r0;
    0x00014a2e ldr r0, [r7, 0x18]                                |     r0 = *((r7 + 0x18));
    0x00014a30 str r3, [sp, 0x90]                                |     var_90h = r3;
    0x00014a32 ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x00014a34 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
                                                                 | label_39:
    0x00014a36 mov r0, r7                                        |     r0 = r7;
    0x00014a38 bl 0x11bf4                                        |     fcn_00011bf4 (r0);
    0x00014a3c ldr r0, [pc, 0x10c]                               |     
    0x00014a3e mov r2, r7                                        |     r2 = r7;
    0x00014a40 movw r1, 0x422                                    |     r1 = 0x422;
    0x00014a44 add r0, pc                                        |     r0 = 0x29594;
    0x00014a46 bl 0xf264                                         |     fcn_0000f264 (r0, r1, r2);
    0x00014a4a b 0x1429a                                         |     goto label_33;
                                                                 | label_95:
    0x00014a4c ldr r1, [sp, 0x68]                                |     r1 = var_68h;
    0x00014a4e mov r0, r5                                        |     r0 = r5;
    0x00014a50 bl 0x3404                                         |     fcn_00003404 (r0, r1);
    0x00014a54 str r0, [sp, 0x64]                                |     var_64h = r0;
    0x00014a56 b 0x14490                                         |     goto label_28;
                                                                 | label_107:
    0x00014b50 add.w r7, r5, 0x10                                |     r7 = r5 + 0x10;
    0x00014b54 movs r1, 0x21                                     |     r1 = 0x21;
    0x00014b56 mov r0, r7                                        |     r0 = r7;
    0x00014b58 blx 0x2770                                        |     r0 = fcn_00002770 ();
    0x00014b5c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00014b5e beq.w 0x1470e                                     |         goto label_31;
                                                                 |     }
    0x00014b62 mov r0, r7                                        |     r0 = r7;
    0x00014b64 movs r1, 0x21                                     |     r1 = 0x21;
    0x00014b66 blx 0x254c                                        |     fcn_0000254c ();
    0x00014b6a ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x00014b6c ldr r2, [r3, 0x58]                                |     r2 = *((r3 + 0x58));
    0x00014b6e cmp r2, r0                                        |     
    0x00014b70 it gt                                             |     
                                                                 |     if (r2 <= r0) {
    0x00014b72 strgt r0, [r3, 0x58]                              |         *((r3 + 0x58)) = r0;
                                                                 |     }
    0x00014b74 b 0x1470e                                         |     goto label_31;
                                                                 | label_102:
    0x00014b76 ldrb r1, [r5, 8]                                  |     r1 = *((r5 + 8));
    0x00014b78 movs r0, 4                                        |     r0 = 4;
    0x00014b7a ldr r3, [r2, 0x1c]                                |     r3 = *((r2 + 0x1c));
    0x00014b7c str r1, [sp, 4]                                   |     var_4h = r1;
    0x00014b7e movs r1, 1                                        |     r1 = 1;
    0x00014b80 ldr r2, [r2]                                      |     r2 = *(r2);
    0x00014b82 str r2, [sp]                                      |     *(sp) = r2;
    0x00014b84 movs r2, 0                                        |     r2 = 0;
    0x00014b86 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x00014b8a ldrb r3, [r5, 8]                                  |     r3 = *((r5 + 8));
    0x00014b8c str r3, [sp, 0x74]                                |     var_74h = r3;
    0x00014b8e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00014b90 bne 0x14c00                                       |         goto label_119;
                                                                 |     }
    0x00014b92 ldr r0, [r6, 0xc]                                 |     r0 = *((r6 + 0xc));
    0x00014b94 str.w r3, [r6, 0x124]                             |     __asm ("str.w r3, [r6, 0x124]");
    0x00014b98 ldrh r3, [r0, 0x10]                               |     r3 = *((r0 + 0x10));
    0x00014b9a bic r3, r3, 0x3cc                                 |     r3 = BIT_MASK (r3, 0x3cc);
    0x00014b9e orr r3, r3, 0xc                                   |     r3 |= 0xc;
    0x00014ba2 lsls r1, r3, 0x1e                                 |     r1 = r3 << 0x1e;
    0x00014ba4 strh r3, [r0, 0x10]                               |     *((r0 + 0x10)) = r3;
                                                                 |     if (r1 != r3) {
    0x00014ba6 bne.w 0x14e96                                     |         goto label_120;
                                                                 |     }
    0x00014baa ldr.w r3, [r0, 0x8c]                              |     r3 = *((r0 + 0x8c));
    0x00014bae cmp r3, 3                                         |     
                                                                 |     if (r3 > 3) {
    0x00014bb0 ble 0x14bba                                       |         
    0x00014bb2 ldrb r3, [r5, 4]                                  |         r3 = *((r5 + 4));
    0x00014bb4 lsls r2, r3, 0x1f                                 |         r2 = r3 << 0x1f;
                                                                 |         if (r2 >= r3) {
    0x00014bb6 bpl.w 0x14e88                                     |             goto label_121;
                                                                 |         }
                                                                 |     }
                                                                 | label_47:
    0x00014bba ldr r0, [r0, 0x64]                                |     r0 = *((r0 + 0x64));
    0x00014bbc ldr r3, [r0, 0xc]                                 |     r3 = *((r0 + 0xc));
    0x00014bbe cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00014bc0 ble 0x14c00                                       |         goto label_119;
                                                                 |     }
    0x00014bc2 str.w sb, [sp, 0x78]                              |     __asm ("str.w sb, [var_78h]");
    0x00014bc6 strd sb, sb, [sp, 0x80]                           |     __asm ("strd sb, sb, [sp, 0x80]");
    0x00014bca b 0x14bdc                                         |     
                                                                 |     while (r0 != 0) {
    0x00014bcc ldr r3, [sp, 0x78]                                |         r3 = var_78h;
    0x00014bce ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
    0x00014bd0 str.w sb, [r3, 0x24]                              |         __asm ("str.w sb, [r3, 0x24]");
    0x00014bd4 str.w sb, [r3, 0x28]                              |         __asm ("str.w sb, [r3, 0x28]");
    0x00014bd8 ldr r3, [r6, 0xc]                                 |         r3 = *((r6 + 0xc));
    0x00014bda ldr r0, [r3, 0x64]                                |         r0 = *((r3 + 0x64));
    0x00014bdc mov r1, r8                                        |         r1 = r8;
    0x00014bde bl 0xc77c                                         |         r0 = fcn_0000c77c (r0, r1);
    0x00014be2 cmp r0, 0                                         |         
    0x00014be4 bne 0x14bcc                                       |         
                                                                 |     }
    0x00014be6 movs r3, 1                                        |     r3 = 1;
    0x00014be8 ldm.w r4, {r0, r1}                                |     r0 = *(r4);
                                                                 |     r1 = *((r4 + 4));
    0x00014bec mov r2, r3                                        |     r2 = r3;
    0x00014bee bl 0x3c60                                         |     fcn_00003c60 (r0, r1, r2);
    0x00014bf2 ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x00014bf4 ldrb r3, [r3, 0x10]                               |     r3 = *((r3 + 0x10));
    0x00014bf6 lsls r3, r3, 0x1d                                 |     r3 <<= 0x1d;
    0x00014bf8 itt pl                                            |     
                                                                 |     if (r3 < r3) {
    0x00014bfa mvnpl r3, 2                                       |         r3 = ~2;
                                                                 |     }
                                                                 |     if (r3 >= r3) {
    0x00014bfe str r3, [sp, 0x74]                                |         var_74h = r3;
                                                                 |     }
                                                                 | label_119:
    0x00014c00 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00014c02 ldr.w r3, [pc, 0x484]                             |     r3 = *(0x1508a);
    0x00014c06 str.w sb, [r6, 0xec]                              |     __asm ("str.w sb, [r6, 0xec]");
    0x00014c0a ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x00014c0c ldr r0, [r3]                                      |     r0 = *(0x1508a);
    0x00014c0e bl 0xa4c0                                         |     fcn_0000a4c0 (r0);
    0x00014c12 b 0x14646                                         |     goto label_34;
                                                                 | label_96:
    0x00014c14 ldr r1, [sp, 0x68]                                |     r1 = var_68h;
    0x00014c16 mov r0, r5                                        |     r0 = r5;
    0x00014c18 bl 0x3280                                         |     fcn_00003280 (r0, r1);
    0x00014c1c str r0, [sp, 0x64]                                |     var_64h = r0;
    0x00014c1e b 0x14490                                         |     goto label_28;
                                                                 | label_110:
    0x00014c20 cmp r2, 1                                         |     
                                                                 |     if (r2 == 1) {
    0x00014c22 beq 0x14cc4                                       |         goto label_122;
                                                                 |     }
    0x00014c24 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00014c26 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00014c28 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00014c2a beq.w 0x14956                                     |         goto label_35;
                                                                 |     }
    0x00014c2e cmp r2, 1                                         |     
                                                                 |     if (r2 > 1) {
    0x00014c30 bgt.w 0x14f30                                     |         goto label_123;
                                                                 |     }
                                                                 | label_40:
    0x00014c34 ldr r7, [sp, 0x24]                                |     r7 = var_24h;
    0x00014c36 ldr.w r3, [lr]                                    |     r3 = *(lr);
    0x00014c3a ldr r2, [r7, 0x14]                                |     r2 = *((r7 + 0x14));
    0x00014c3c str r2, [sp, 0x90]                                |     var_90h = r2;
    0x00014c3e ldr.w r2, [pc, 0x44c]                             |     
    0x00014c42 add r2, pc                                        |     r2 = 0x29cd4;
                                                                 | label_50:
    0x00014c44 mov.w r1, -1                                      |     r1 = -1;
    0x00014c48 movs r0, 3                                        |     r0 = 3;
    0x00014c4a bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x00014c4e ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x00014c50 add r1, sp, 0x90                                  |     r1 += var_90h;
    0x00014c52 ldr r0, [r7, 0x18]                                |     r0 = *((r7 + 0x18));
    0x00014c54 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00014c56 b 0x14956                                         |     goto label_35;
                                                                 | label_108:
    0x00014c58 ldr r2, [r6, 0x28]                                |     r2 = *((r6 + 0x28));
    0x00014c5a ldr.w r7, [pc, 0x434]                             |     
    0x00014c5e add r7, pc                                        |     r7 = 0x29cf4;
    0x00014c60 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00014c62 bne.w 0x146e8                                     |         goto label_36;
                                                                 |     }
    0x00014c66 b 0x14704                                         |     goto label_37;
                                                                 | label_106:
    0x00014c68 ldr.w r3, [r6, 0x10c]                             |     r3 = *((r6 + 0x10c));
    0x00014c6c ldr.w r3, [r3, r2, lsl 2]                         |     offset_10 = r2 << 2;
                                                                 |     r3 = *((r3 + offset_10));
    0x00014c70 b 0x146c6                                         |     goto label_38;
                                                                 | label_118:
    0x00014c72 movs r2, 0x50                                     |     r2 = 0x50;
    0x00014c74 add r0, sp, 0x94                                  |     r0 += var_94h;
    0x00014c76 str r1, [sp, 0x28]                                |     var_28h = r1;
    0x00014c78 blx 0x257c                                        |     fcn_0000257c ();
    0x00014c7c ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00014c7e str r3, [sp, 0x90]                                |     var_90h = r3;
    0x00014c80 ldr r3, [r5, 0x1c]                                |     r3 = *((r5 + 0x1c));
    0x00014c82 ldr r0, [r3]                                      |     r0 = *(r3);
    0x00014c84 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x00014c86 ldr r3, [r0, 8]                                   |     r3 = *((r0 + 8));
    0x00014c88 cmp r2, 1                                         |     
    0x00014c8a ldr r3, [r3]                                      |     r3 = *(r3);
    0x00014c8c str r2, [sp, 0xb0]                                |     var_b0h = r2;
    0x00014c8e str r3, [sp, 0x9c]                                |     var_9ch = r3;
                                                                 |     if (r2 > 1) {
    0x00014c90 bgt.w 0x14e08                                     |         goto label_124;
                                                                 |     }
                                                                 | label_46:
    0x00014c94 ldr r2, [r7, 0x14]                                |     r2 = *((r7 + 0x14));
    0x00014c96 add.w r3, r5, 0xc                                 |     r3 = r5 + 0xc;
    0x00014c9a ldr.w lr, [r6, 0xc]                               |     
    0x00014c9e add.w ip, sp, 0xa0                                |     
    0x00014ca2 str r2, [sp, 0x98]                                |     var_98h = r2;
    0x00014ca4 ldm r3, {r0, r1, r2, r3}                          |     r0 = *(r3);
                                                                 |     r1 = *((r3 + 4));
                                                                 |     r2 = *((r3 + 8));
                                                                 |     r3 = *((r3 + 12));
    0x00014ca6 stm.w ip, {r0, r1, r2, r3}                        |     *(ip) = r0;
                                                                 |     *((ip + 4)) = r1;
                                                                 |     *((ip + 8)) = r2;
                                                                 |     *((ip + 12)) = r3;
    0x00014caa mov.w r1, -1                                      |     r1 = -1;
    0x00014cae ldr.w r3, [lr]                                    |     r3 = *(lr);
    0x00014cb2 movs r0, 3                                        |     r0 = 3;
    0x00014cb4 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00014cb6 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x00014cba ldr r3, [r7, 0xc]                                 |     r3 = *((r7 + 0xc));
    0x00014cbc add r1, sp, 0x90                                  |     r1 += var_90h;
    0x00014cbe ldr r0, [r7, 0x18]                                |     r0 = *((r7 + 0x18));
    0x00014cc0 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00014cc2 b 0x14a36                                         |     goto label_39;
                                                                 | label_122:
    0x00014cc4 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00014cc6 ldr r2, [r3, 8]                                   |     r2 = *((r3 + 8));
    0x00014cc8 ldr r3, [r2]                                      |     r3 = *(r2);
    0x00014cca cmp r3, 0x80                                      |     
                                                                 |     if (r3 == 0x80) {
    0x00014ccc beq.w 0x14f5a                                     |         goto label_125;
                                                                 |     }
    0x00014cd0 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00014cd2 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x00014cd4 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00014cd6 beq.w 0x14956                                     |         goto label_35;
                                                                 |     }
    0x00014cda str r3, [sp, 0x94]                                |     var_94h = r3;
    0x00014cdc b 0x14c34                                         |     goto label_40;
                                                                 | label_111:
    0x00014cde ldr r3, [r3]                                      |     r3 = *(r3);
    0x00014ce0 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x00014ce2 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00014ce4 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00014ce6 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00014ce8 cmp r3, 0x7f                                      |     
                                                                 |     if (r3 <= 0x7f) {
    0x00014cea ble.w 0x14ea0                                     |         goto label_126;
                                                                 |     }
    0x00014cee ldr r3, [r1, 0x10]                                |     r3 = *((r1 + 0x10));
    0x00014cf0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00014cf2 beq.w 0x14956                                     |         goto label_35;
                                                                 |     }
    0x00014cf6 ldr.w ip, [pc, 0x39c]                             |     
    0x00014cfa add r2, sp, 0x90                                  |     r2 += var_90h;
    0x00014cfc ldr r1, [r1, 0x14]                                |     r1 = *((r1 + 0x14));
    0x00014cfe mov r7, r2                                        |     r7 = r2;
    0x00014d00 add ip, pc                                        |     
    0x00014d02 add.w ip, ip, 0x178                               |     ip = 0x29f12;
    0x00014d06 str r1, [sp, 0x2c]                                |     var_2ch = r1;
    0x00014d08 ldm.w ip!, {r0, r1, r2, r3}                       |     r0 = *(ip!);
                                                                 |     r1 = *((ip! + 4));
                                                                 |     r2 = *((ip! + 8));
                                                                 |     r3 = *((ip! + 12));
    0x00014d0c stm r7!, {r0, r1, r2, r3}                         |     *(r7!) = r0;
                                                                 |     *((r7! + 4)) = r1;
                                                                 |     *((r7! + 8)) = r2;
                                                                 |     *((r7! + 12)) = r3;
    0x00014d0e ldm.w ip!, {r0, r1, r2, r3}                       |     r0 = *(ip!);
                                                                 |     r1 = *((ip! + 4));
                                                                 |     r2 = *((ip! + 8));
                                                                 |     r3 = *((ip! + 12));
    0x00014d12 stm r7!, {r0, r1, r2, r3}                         |     *(r7!) = r0;
                                                                 |     *((r7! + 4)) = r1;
                                                                 |     *((r7! + 8)) = r2;
                                                                 |     *((r7! + 12)) = r3;
    0x00014d14 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00014d16 ldm.w ip, {r0, r1, r2}                            |     r0 = *(ip);
                                                                 |     r1 = *((ip + 4));
                                                                 |     r2 = *((ip + 8));
    0x00014d1a add.w ip, sp, 0xa0                                |     
    0x00014d1e stm.w r7, {r0, r1, r2}                            |     *(r7) = r0;
                                                                 |     *((r7 + 4)) = r1;
                                                                 |     *((r7 + 8)) = r2;
    0x00014d22 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00014d24 str r1, [sp, 0x98]                                |     var_98h = r1;
    0x00014d26 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00014d28 str r3, [sp, 0x9c]                                |     var_9ch = r3;
    0x00014d2a add.w r3, r5, 0xc                                 |     r3 = r5 + 0xc;
    0x00014d2e ldm r3, {r0, r1, r2, r3}                          |     r0 = *(r3);
                                                                 |     r1 = *((r3 + 4));
                                                                 |     r2 = *((r3 + 8));
                                                                 |     r3 = *((r3 + 12));
    0x00014d30 stm.w ip, {r0, r1, r2, r3}                        |     *(ip) = r0;
                                                                 |     *((ip + 4)) = r1;
                                                                 |     *((ip + 8)) = r2;
                                                                 |     *((ip + 12)) = r3;
    0x00014d34 mov.w r1, -1                                      |     r1 = -1;
    0x00014d38 ldr r2, [pc, 0x35c]                               |     
    0x00014d3a movs r0, 3                                        |     r0 = 3;
    0x00014d3c ldr.w r3, [lr]                                    |     r3 = *(lr);
    0x00014d40 add r2, pc                                        |     r2 = 0x29ddc;
    0x00014d42 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x00014d46 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x00014d48 ldr r3, [r1, 0x10]                                |     r3 = *((r1 + 0x10));
    0x00014d4a ldr r0, [r1, 0x18]                                |     r0 = *((r1 + 0x18));
    0x00014d4c add r1, sp, 0x90                                  |     r1 += var_90h;
    0x00014d4e blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00014d50 b 0x14956                                         |     goto label_35;
                                                                 | label_117:
    0x00014d52 ldr r3, [r7, 0xc]                                 |     r3 = *((r7 + 0xc));
    0x00014d54 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00014d56 bne.w 0x14a02                                     |         goto label_41;
                                                                 |     }
    0x00014d5a b 0x14a36                                         |     goto label_39;
                                                                 | label_115:
    0x00014d5c ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00014d5e ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00014d60 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00014d62 beq.w 0x14eca                                     |         goto label_127;
                                                                 |     }
    0x00014d66 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00014d68 cmp r3, 0x7f                                      |     
                                                                 |     if (r3 <= 0x7f) {
    0x00014d6a ble.w 0x14ee2                                     |         goto label_128;
                                                                 |     }
    0x00014d6e ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00014d70 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x00014d72 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00014d74 beq.w 0x149ca                                     |         goto label_42;
                                                                 |     }
                                                                 | label_49:
    0x00014d78 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00014d7a add.w lr, sp, 0x90                                |     lr += var_90h;
    0x00014d7e ldr.w ip, [pc, 0x31c]                             |     
    0x00014d82 ldr r3, [r2, 0x14]                                |     r3 = *((r2 + 0x14));
    0x00014d84 add ip, pc                                        |     
    0x00014d86 add.w ip, ip, 0x178                               |     ip = 0x29f9e;
    0x00014d8a mov r7, r3                                        |     r7 = r3;
    0x00014d8c ldm.w ip!, {r0, r1, r2, r3}                       |     r0 = *(ip!);
                                                                 |     r1 = *((ip! + 4));
                                                                 |     r2 = *((ip! + 8));
                                                                 |     r3 = *((ip! + 12));
    0x00014d90 stm.w lr!, {r0, r1, r2, r3}                       |     *(lr!) = r0;
                                                                 |     *((lr! + 4)) = r1;
                                                                 |     *((lr! + 8)) = r2;
                                                                 |     *((lr! + 12)) = r3;
    0x00014d94 ldm.w ip!, {r0, r1, r2, r3}                       |     r0 = *(ip!);
                                                                 |     r1 = *((ip! + 4));
                                                                 |     r2 = *((ip! + 8));
                                                                 |     r3 = *((ip! + 12));
    0x00014d98 stm.w lr!, {r0, r1, r2, r3}                       |     *(lr!) = r0;
                                                                 |     *((lr! + 4)) = r1;
                                                                 |     *((lr! + 8)) = r2;
                                                                 |     *((lr! + 12)) = r3;
    0x00014d9c ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00014d9e ldm.w ip, {r0, r1, r2}                            |     r0 = *(ip);
                                                                 |     r1 = *((ip + 4));
                                                                 |     r2 = *((ip + 8));
    0x00014da2 stm.w lr, {r0, r1, r2}                            |     *(lr) = r0;
                                                                 |     *((lr + 4)) = r1;
                                                                 |     *((lr + 8)) = r2;
    0x00014da6 str r3, [sp, 0x9c]                                |     var_9ch = r3;
    0x00014da8 ldm.w r4, {r0, r1, r2, r3}                        |     r0 = *(r4);
                                                                 |     r1 = *((r4 + 4));
                                                                 |     r2 = *((r4 + 8));
                                                                 |     r3 = *((r4 + 12));
    0x00014dac str r7, [sp, 0x98]                                |     var_98h = r7;
    0x00014dae add r7, sp, 0xa0                                  |     r7 += var_a0h;
    0x00014db0 stm.w r7, {r0, r1, r2, r3}                        |     *(r7) = r0;
                                                                 |     *((r7 + 4)) = r1;
                                                                 |     *((r7 + 8)) = r2;
                                                                 |     *((r7 + 12)) = r3;
    0x00014db4 mov.w r1, -1                                      |     r1 = -1;
    0x00014db8 ldrb r3, [r5]                                     |     r3 = *(r5);
    0x00014dba movs r0, 3                                        |     r0 = 3;
    0x00014dbc ldr r2, [r6, 0xc]                                 |     r2 = *((r6 + 0xc));
    0x00014dbe lsrs r3, r3, 4                                    |     r3 >>= 4;
    0x00014dc0 str r3, [sp, 0xb8]                                |     var_b8h = r3;
    0x00014dc2 ldr r3, [r2]                                      |     r3 = *(r2);
    0x00014dc4 ldr r2, [pc, 0x2d8]                               |     
    0x00014dc6 add r2, pc                                        |     r2 = 0x29e6a;
    0x00014dc8 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x00014dcc ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00014dce add r1, sp, 0x90                                  |     r1 += var_90h;
    0x00014dd0 ldr r3, [r2, 0x10]                                |     r3 = *(0x29e7a);
    0x00014dd2 ldr r0, [r2, 0x18]                                |     r0 = *(0x29e82);
    0x00014dd4 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00014dd6 b 0x149ca                                         |     goto label_42;
                                                                 | label_109:
    0x00014dd8 ldr r2, [pc, 0x2c8]                               |     
    0x00014dda mov.w r1, -1                                      |     r1 = -1;
    0x00014dde movs r0, 5                                        |     r0 = 5;
    0x00014de0 add r2, pc                                        |     r2 = 0x29e88;
    0x00014de2 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x00014de6 b 0x148d8                                         |     goto label_43;
                                                                 | label_114:
    0x00014de8 ldr r2, [pc, 0x2bc]                               |     
    0x00014dea mov.w r1, -1                                      |     r1 = -1;
    0x00014dee movs r0, 5                                        |     r0 = 5;
    0x00014df0 add r2, pc                                        |     r2 = 0x29e9c;
    0x00014df2 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x00014df6 b 0x1498c                                         |     goto label_44;
                                                                 | label_116:
    0x00014df8 ldr r2, [pc, 0x2b0]                               |     
    0x00014dfa mov.w r1, -1                                      |     r1 = -1;
    0x00014dfe movs r0, 5                                        |     r0 = 5;
    0x00014e00 add r2, pc                                        |     r2 = 0x29eb0;
    0x00014e02 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x00014e06 b 0x149fa                                         |     goto label_45;
                                                                 | label_124:
    0x00014e08 ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x00014e0a lsls r2, r2, 2                                    |     r2 <<= 2;
    0x00014e0c ldr r0, [pc, 0x2a0]                               |     
    0x00014e0e str r1, [sp, 0x80]                                |     var_80h = r1;
    0x00014e10 movw r1, 0x8b9                                    |     r1 = 0x8b9;
    0x00014e14 add r0, pc                                        |     r0 = 0x29ec8;
    0x00014e16 bl 0xf12c                                         |     fcn_0000f12c (r0, r1, r2);
    0x00014e1a str r0, [sp, 0x28]                                |     var_28h = r0;
    0x00014e1c str r0, [sp, 0xb4]                                |     var_b4h = r0;
    0x00014e1e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00014e20 beq.w 0x14c94                                     |         goto label_46;
                                                                 |     }
    0x00014e24 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00014e26 str r6, [sp, 0x24]                                |     var_24h = r6;
    0x00014e28 mov r6, r4                                        |     r6 = r4;
    0x00014e2a mov r4, r3                                        |     r4 = r3;
    0x00014e2c b 0x14e38                                         |     
                                                                 |     while (r0 != 0) {
    0x00014e2e ldr r3, [sp, 0x80]                                |         r3 = var_80h;
    0x00014e30 ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
    0x00014e32 ldr r3, [r3]                                      |         r3 = *(r3);
    0x00014e34 str r3, [r4], 4                                   |         *(r4) = r3;
                                                                 |         r4 += 4;
    0x00014e38 ldr r0, [r5, 0x1c]                                |         r0 = *((r5 + 0x1c));
    0x00014e3a mov r1, r6                                        |         r1 = r6;
    0x00014e3c bl 0xc77c                                         |         r0 = fcn_0000c77c (r0, r1);
    0x00014e40 cmp r0, 0                                         |         
    0x00014e42 bne 0x14e2e                                       |         
                                                                 |     }
    0x00014e44 ldr r2, [r7, 0x14]                                |     r2 = *((r7 + 0x14));
    0x00014e46 mov r4, r6                                        |     r4 = r6;
    0x00014e48 ldr r6, [sp, 0x24]                                |     r6 = var_24h;
    0x00014e4a add.w r3, r5, 0xc                                 |     r3 = r5 + 0xc;
    0x00014e4e add.w ip, sp, 0xa0                                |     
    0x00014e52 ldr.w lr, [r6, 0xc]                               |     
    0x00014e56 str r2, [sp, 0x98]                                |     var_98h = r2;
    0x00014e58 ldm r3, {r0, r1, r2, r3}                          |     r0 = *(r3);
                                                                 |     r1 = *((r3 + 4));
                                                                 |     r2 = *((r3 + 8));
                                                                 |     r3 = *((r3 + 12));
    0x00014e5a stm.w ip, {r0, r1, r2, r3}                        |     *(ip) = r0;
                                                                 |     *((ip + 4)) = r1;
                                                                 |     *((ip + 8)) = r2;
                                                                 |     *((ip + 12)) = r3;
    0x00014e5e mov.w r1, -1                                      |     r1 = -1;
    0x00014e62 ldr r2, [pc, 0x250]                               |     
    0x00014e64 movs r0, 3                                        |     r0 = 3;
    0x00014e66 ldr.w r3, [lr]                                    |     r3 = *(lr);
    0x00014e6a add r2, pc                                        |     r2 = 0x29f24;
    0x00014e6c bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x00014e70 ldr r0, [r7, 0x18]                                |     r0 = *((r7 + 0x18));
    0x00014e72 add r1, sp, 0x90                                  |     r1 += var_90h;
    0x00014e74 ldr r3, [r7, 0xc]                                 |     r3 = *((r7 + 0xc));
    0x00014e76 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00014e78 ldr r0, [pc, 0x23c]                               |     
    0x00014e7a movw r1, 0x8c3                                    |     r1 = 0x8c3;
    0x00014e7e ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00014e80 add r0, pc                                        |     r0 = 0x29f3c;
    0x00014e82 bl 0xf264                                         |     fcn_0000f264 (r0, r1, r2);
    0x00014e86 b 0x14a36                                         |     goto label_39;
                                                                 | label_121:
    0x00014e88 ldr r2, [pc, 0x230]                               |     
    0x00014e8a movs r0, 4                                        |     r0 = 4;
    0x00014e8c mov r1, r7                                        |     r1 = r7;
    0x00014e8e add r2, pc                                        |     r2 = 0x29f4e;
    0x00014e90 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x00014e94 ldr r0, [r6, 0xc]                                 |     r0 = *((r6 + 0xc));
                                                                 | label_120:
    0x00014e96 bl 0x136e8                                        |     fcn_000136e8 (r0, r1, r2, r3);
    0x00014e9a str r0, [sp, 0x74]                                |     var_74h = r0;
    0x00014e9c ldr r0, [r6, 0xc]                                 |     r0 = *((r6 + 0xc));
    0x00014e9e b 0x14bba                                         |     goto label_47;
                                                                 | label_126:
    0x00014ea0 ldr r1, [r1, 0xc]                                 |     r1 = *((r1 + 0xc));
    0x00014ea2 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00014ea4 beq.w 0x14956                                     |         goto label_35;
                                                                 |     }
    0x00014ea8 str r3, [sp, 0x9c]                                |     var_9ch = r3;
    0x00014eaa str r2, [sp, 0xb0]                                |     var_b0h = r2;
                                                                 | label_112:
    0x00014eac ldr r7, [sp, 0x24]                                |     r7 = var_24h;
    0x00014eae add.w r3, r5, 0xc                                 |     r3 = r5 + 0xc;
    0x00014eb2 add.w ip, sp, 0xa0                                |     
    0x00014eb6 ldr r2, [r7, 0x14]                                |     r2 = *((r7 + 0x14));
    0x00014eb8 str r2, [sp, 0x98]                                |     var_98h = r2;
    0x00014eba ldm r3, {r0, r1, r2, r3}                          |     r0 = *(r3);
                                                                 |     r1 = *((r3 + 4));
                                                                 |     r2 = *((r3 + 8));
                                                                 |     r3 = *((r3 + 12));
    0x00014ebc stm.w ip, {r0, r1, r2, r3}                        |     *(ip) = r0;
                                                                 |     *((ip + 4)) = r1;
                                                                 |     *((ip + 8)) = r2;
                                                                 |     *((ip + 12)) = r3;
    0x00014ec0 ldr r2, [pc, 0x1fc]                               |     
    0x00014ec2 ldr.w r3, [lr]                                    |     r3 = *(lr);
    0x00014ec6 add r2, pc                                        |     r2 = 0x29f8a;
    0x00014ec8 b 0x14944                                         |     goto label_48;
                                                                 | label_127:
    0x00014eca ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00014ecc ldr r2, [r3, 0x10]                                |     r2 = *((r3 + 0x10));
    0x00014ece ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00014ed0 cmp r2, 0                                         |     
    0x00014ed2 ite eq                                            |     
                                                                 |     if (r2 != 0) {
    0x00014ed4 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r2 == 0) {
    0x00014ed6 andne r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x00014eda cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00014edc beq.w 0x149ca                                     |         goto label_42;
                                                                 |     }
    0x00014ee0 b 0x14d78                                         |     goto label_49;
                                                                 | label_128:
    0x00014ee2 movs r2, 0x4c                                     |     r2 = 0x4c;
    0x00014ee4 add r0, sp, 0x94                                  |     r0 += var_94h;
    0x00014ee6 blx 0x257c                                        |     fcn_0000257c ();
    0x00014eea ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00014eec add r5, sp, 0xa0                                  |     r5 += var_a0h;
    0x00014eee ldr r7, [sp, 0x2c]                                |     r7 = var_2ch;
    0x00014ef0 str r3, [sp, 0x90]                                |     var_90h = r3;
    0x00014ef2 ldr r2, [r7, 0x14]                                |     r2 = *((r7 + 0x14));
    0x00014ef4 add.w r3, r7, 0x24                                |     r3 = r7 + 0x24;
    0x00014ef8 ldr r6, [r6, 0xc]                                 |     r6 = *((r6 + 0xc));
    0x00014efa str r2, [sp, 0x98]                                |     var_98h = r2;
    0x00014efc ldr r2, [r7, 0x34]                                |     r2 = *((r7 + 0x34));
    0x00014efe str r2, [sp, 0xe0]                                |     *(arg_e0h) = r2;
    0x00014f00 ldr r2, [r7, 0x3c]                                |     r2 = *((r7 + 0x3c));
    0x00014f02 str r2, [sp, 0xbc]                                |     var_bch = r2;
    0x00014f04 ldr r2, [r7, 0x38]                                |     r2 = *((r7 + 0x38));
    0x00014f06 str r2, [sp, 0xb8]                                |     var_b8h = r2;
    0x00014f08 ldr r2, [r7, 0x40]                                |     r2 = *((r7 + 0x40));
    0x00014f0a str r2, [sp, 0xc0]                                |     var_c0h = r2;
    0x00014f0c ldr r2, [r7, 0x44]                                |     r2 = *((r7 + 0x44));
    0x00014f0e str r2, [sp, 0xc4]                                |     var_c4h = r2;
    0x00014f10 ldm r3, {r0, r1, r2, r3}                          |     r0 = *(r3);
                                                                 |     r1 = *((r3 + 4));
                                                                 |     r2 = *((r3 + 8));
                                                                 |     r3 = *((r3 + 12));
    0x00014f12 stm.w r5, {r0, r1, r2, r3}                        |     *(r5) = r0;
                                                                 |     *((r5 + 4)) = r1;
                                                                 |     *((r5 + 8)) = r2;
                                                                 |     *((r5 + 12)) = r3;
    0x00014f16 mov.w r1, -1                                      |     r1 = -1;
    0x00014f1a ldr r2, [pc, 0x1a8]                               |     
    0x00014f1c movs r0, 3                                        |     r0 = 3;
    0x00014f1e ldr r3, [r6]                                      |     r3 = *(r6);
    0x00014f20 add r2, pc                                        |     r2 = 0x29fea;
    0x00014f22 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x00014f26 ldr r3, [r7, 0xc]                                 |     r3 = *((r7 + 0xc));
    0x00014f28 add r1, sp, 0x90                                  |     r1 += var_90h;
    0x00014f2a ldr r0, [r7, 0x18]                                |     r0 = *((r7 + 0x18));
    0x00014f2c blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00014f2e b 0x149ca                                         |     goto label_42;
                                                                 | label_123:
    0x00014f30 ldr r0, [pc, 0x194]                               |     
    0x00014f32 lsls r2, r2, 2                                    |     r2 <<= 2;
    0x00014f34 movw r1, 0x886                                    |     r1 = 0x886;
    0x00014f38 str.w sb, [sp, 0x80]                              |     __asm ("str.w sb, [var_80h]");
    0x00014f3c add r0, pc                                        |     r0 = 0x2a008;
    0x00014f3e bl 0xf12c                                         |     fcn_0000f12c (r0, r1, r2);
    0x00014f42 str r0, [sp, 0x28]                                |     var_28h = r0;
    0x00014f44 str r0, [sp, 0x94]                                |     var_94h = r0;
    0x00014f46 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00014f48 bne 0x14ff2                                       |         goto label_129;
                                                                 |     }
    0x00014f4a ldr r7, [sp, 0x24]                                |     r7 = var_24h;
    0x00014f4c ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x00014f4e ldr r2, [r7, 0x14]                                |     r2 = *((r7 + 0x14));
    0x00014f50 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00014f52 str r2, [sp, 0x90]                                |     var_90h = r2;
    0x00014f54 ldr r2, [pc, 0x174]                               |     
    0x00014f56 add r2, pc                                        |     r2 = 0x2a026;
    0x00014f58 b 0x14c44                                         |     goto label_50;
                                                                 | label_125:
    0x00014f5a ldr r7, [sp, 0x24]                                |     r7 = var_24h;
    0x00014f5c ldr r3, [r7, 8]                                   |     r3 = *((r7 + 8));
    0x00014f5e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00014f60 beq.w 0x14956                                     |         goto label_35;
                                                                 |     }
    0x00014f64 ldr r1, [r7, 0x14]                                |     r1 = *((r7 + 0x14));
    0x00014f66 movs r0, 3                                        |     r0 = 3;
    0x00014f68 ldr.w r3, [lr]                                    |     r3 = *(lr);
    0x00014f6c str r1, [sp, 0x80]                                |     var_80h = r1;
    0x00014f6e mov.w r1, -1                                      |     r1 = -1;
    0x00014f72 ldr r2, [r2]                                      |     r2 = *(r2);
    0x00014f74 strd r2, sb, [sp, 0x84]                           |     __asm ("strd r2, sb, [sp, 0x84]");
    0x00014f78 ldr r2, [pc, 0x154]                               |     
    0x00014f7a add r2, pc                                        |     r2 = 0x2a04e;
    0x00014f7c bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x00014f80 ldr r3, [r7, 8]                                   |     r3 = *((r7 + 8));
    0x00014f82 mov r1, r4                                        |     r1 = r4;
    0x00014f84 ldr r0, [r7, 0x18]                                |     r0 = *((r7 + 0x18));
    0x00014f86 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00014f88 b 0x14956                                         |     goto label_35;
                                                                 | label_113:
    0x00014f8a ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00014f8c str r6, [sp, 0x2c]                                |     var_2ch = r6;
    0x00014f8e mov r6, r4                                        |     r6 = r4;
    0x00014f90 ldr r7, [sp, 0x24]                                |     r7 = var_24h;
    0x00014f92 mov r4, r3                                        |     r4 = r3;
    0x00014f94 b 0x14fa0                                         |     
                                                                 |     while (r0 != 0) {
    0x00014f96 ldr r3, [sp, 0x80]                                |         r3 = var_80h;
    0x00014f98 ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
    0x00014f9a ldr r3, [r3]                                      |         r3 = *(r3);
    0x00014f9c str r3, [r4], 4                                   |         *(r4) = r3;
                                                                 |         r4 += 4;
    0x00014fa0 ldr r0, [r5, 0x1c]                                |         r0 = *((r5 + 0x1c));
    0x00014fa2 mov r1, r6                                        |         r1 = r6;
    0x00014fa4 bl 0xc77c                                         |         r0 = fcn_0000c77c (r0, r1);
    0x00014fa8 cmp r0, 0                                         |         
    0x00014faa bne 0x14f96                                       |         
                                                                 |     }
    0x00014fac ldr r2, [r7, 0x14]                                |     r2 = *((r7 + 0x14));
    0x00014fae mov r4, r6                                        |     r4 = r6;
    0x00014fb0 ldr r6, [sp, 0x2c]                                |     r6 = var_2ch;
    0x00014fb2 add.w r3, r5, 0xc                                 |     r3 = r5 + 0xc;
    0x00014fb6 add.w ip, sp, 0xa0                                |     
    0x00014fba str r7, [sp, 0x24]                                |     var_24h = r7;
    0x00014fbc ldr.w lr, [r6, 0xc]                               |     
    0x00014fc0 str r2, [sp, 0x98]                                |     var_98h = r2;
    0x00014fc2 ldm r3, {r0, r1, r2, r3}                          |     r0 = *(r3);
                                                                 |     r1 = *((r3 + 4));
                                                                 |     r2 = *((r3 + 8));
                                                                 |     r3 = *((r3 + 12));
    0x00014fc4 stm.w ip, {r0, r1, r2, r3}                        |     *(ip) = r0;
                                                                 |     *((ip + 4)) = r1;
                                                                 |     *((ip + 8)) = r2;
                                                                 |     *((ip + 12)) = r3;
    0x00014fc8 mov.w r1, -1                                      |     r1 = -1;
    0x00014fcc ldr r2, [pc, 0x104]                               |     
    0x00014fce movs r0, 3                                        |     r0 = 3;
    0x00014fd0 ldr.w r3, [lr]                                    |     r3 = *(lr);
    0x00014fd4 add r2, pc                                        |     r2 = 0x2a0ac;
    0x00014fd6 bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x00014fda ldr r0, [r7, 0x18]                                |     r0 = *((r7 + 0x18));
    0x00014fdc add r1, sp, 0x90                                  |     r1 += var_90h;
    0x00014fde ldr r3, [r7, 0xc]                                 |     r3 = *((r7 + 0xc));
    0x00014fe0 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00014fe2 ldr r0, [pc, 0xf4]                                |     
    0x00014fe4 movw r1, 0x86c                                    |     r1 = 0x86c;
    0x00014fe8 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00014fea add r0, pc                                        |     r0 = 0x2a0c8;
    0x00014fec bl 0xf264                                         |     fcn_0000f264 (r0, r1, r2);
    0x00014ff0 b 0x14956                                         |     goto label_35;
                                                                 | label_129:
    0x00014ff2 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00014ff4 str r6, [sp, 0x2c]                                |     var_2ch = r6;
    0x00014ff6 mov r6, r4                                        |     r6 = r4;
    0x00014ff8 ldr r7, [sp, 0x24]                                |     r7 = var_24h;
    0x00014ffa mov r4, r2                                        |     r4 = r2;
    0x00014ffc b 0x15008                                         |     
                                                                 |     while (r0 != 0) {
    0x00014ffe ldr r3, [sp, 0x80]                                |         r3 = var_80h;
    0x00015000 ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
    0x00015002 ldr r3, [r3]                                      |         r3 = *(r3);
    0x00015004 str r3, [r4], 4                                   |         *(r4) = r3;
                                                                 |         r4 += 4;
    0x00015008 ldr r0, [r5, 0x1c]                                |         r0 = *((r5 + 0x1c));
    0x0001500a mov r1, r6                                        |         r1 = r6;
    0x0001500c bl 0xc77c                                         |         r0 = fcn_0000c77c (r0, r1);
    0x00015010 cmp r0, 0                                         |         
    0x00015012 bne 0x14ffe                                       |         
                                                                 |     }
    0x00015014 mov r4, r6                                        |     r4 = r6;
    0x00015016 ldr r6, [sp, 0x2c]                                |     r6 = var_2ch;
    0x00015018 ldr r2, [r7, 0x14]                                |     r2 = *((r7 + 0x14));
    0x0001501a mov.w r1, -1                                      |     r1 = -1;
    0x0001501e movs r0, 3                                        |     r0 = 3;
    0x00015020 str r7, [sp, 0x24]                                |     var_24h = r7;
    0x00015022 ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x00015024 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00015026 str r2, [sp, 0x90]                                |     var_90h = r2;
    0x00015028 ldr r2, [pc, 0xb0]                                |     
    0x0001502a add r2, pc                                        |     r2 = 0x2a10a;
    0x0001502c bl 0x8960                                         |     fcn_00008960 (r0, r1);
    0x00015030 ldr r0, [r7, 0x18]                                |     r0 = *((r7 + 0x18));
    0x00015032 add r1, sp, 0x90                                  |     r1 += var_90h;
    0x00015034 ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x00015036 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00015038 ldr r0, [pc, 0xa4]                                |     
    0x0001503a movw r1, 0x88f                                    |     r1 = 0x88f;
    0x0001503e ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00015040 add r0, pc                                        |     r0 = 0x2a124;
    0x00015042 bl 0xf264                                         |     fcn_0000f264 (r0, r1, r2);
    0x00015046 b 0x14956                                         |     goto label_35;
                                                                 | label_88:
    0x00015048 blx 0x2370                                        |     pthread_condattr_init ();
                                                                 | label_94:
    0x0001504c lsrs r3, r3, 4                                    |     r3 >>= 4;
    0x0001504e mov ip, r5                                        |     
    0x00015050 strd sb, sb, [r4]                                 |     __asm ("strd sb, sb, [r4]");
    0x00015054 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00015056 ldr r3, [pc, 0x8c]                                |     
    0x00015058 strd sb, sb, [r4, 8]                              |     __asm ("strd sb, sb, [r4, 8]");
    0x0001505c add r3, pc                                        |     r3 = 0x2a146;
    0x0001505e mov r7, r3                                        |     r7 = r3;
    0x00015060 mov lr, r3                                        |     lr = r3;
    0x00015062 ldm.w ip!, {r0, r1, r2, r3}                       |     r0 = *(ip!);
                                                                 |     r1 = *((ip! + 4));
                                                                 |     r2 = *((ip! + 8));
                                                                 |     r3 = *((ip! + 12));
    0x00015066 stm.w lr!, {r0, r1, r2, r3}                       |     *(lr!) = r0;
                                                                 |     *((lr! + 4)) = r1;
                                                                 |     *((lr! + 8)) = r2;
                                                                 |     *((lr! + 12)) = r3;
    0x0001506a ldr r7, [r7, 0xc]                                 |     r7 = *((r7 + 0xc));
    0x0001506c str r1, [sp, 0x30]                                |     var_30h = r1;
    0x0001506e ldm.w ip, {r0, r1, r2, r3}                        |     r0 = *(ip);
                                                                 |     r1 = *((ip + 4));
                                                                 |     r2 = *((ip + 8));
                                                                 |     r3 = *((ip + 12));
    0x00015072 cmp r7, 4                                         |     
    0x00015074 stm.w lr, {r0, r1, r2, r3}                        |     *(lr) = r0;
                                                                 |     *((lr + 4)) = r1;
                                                                 |     *((lr + 8)) = r2;
                                                                 |     *((lr + 12)) = r3;
                                                                 |     if (r7 > 4) {
    0x00015078 bgt.w 0x14800                                     |         goto label_51;
                                                                 |     }
    0x0001507c movs r3, 0                                        |     r3 = 0;
    0x0001507e str r3, [sp, 0x40]                                |     var_40h = r3;
    0x00015080 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00015082 b.w 0x1483e                                       |     goto label_52;
                                                                 | }

[*] Function strcpy used 5 times libpaho-mqtt3a.so.1.3.9