[*] Binary protection state of e4crypt

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


[*] Function printf tear down of e4crypt

    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/e4crypt @ 0x11d0 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000011d0 ()                                      | void fcn_000011d0 (int16_t arg_0h) {
                                                                 |     int16_t var_1h;
                                                                 |     int16_t var_4h_2;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_bh;
                                                                 |     int16_t var_13h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_0h;
                                                                 |     int32_t var_4h;
                                                                 |     int32_t var_4h_3;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int32_t var_4h_4;
                                                                 |     int32_t var_4h_5;
    0x000011d0 ldrsbgt pc, [r4], -0x8f                           |     __asm ("ldrsbgt pc, [r4], -0x8f");
    0x000011d4 push {r0, r1, r2, r3}                             |     
    0x000011d6 movw r0, 0x137                                    |     r0 = 0x137;
    0x000011da push {r4, lr}                                     |     
    0x000011dc sub sp, 0x10                                      |     
    0x000011de add r3, sp, 0x18                                  |     r3 += var_18h;
    0x000011e0 add ip, pc                                        |     
    0x000011e2 ldr r4, [pc, 0x48]                                |     
    0x000011e4 ldr r1, [r3], 4                                   |     r1 = *(r3);
                                                                 |     r3 += 4;
    0x000011e8 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x000011ea ldr.w r4, [ip, r4]                                |     r4 = *((ip + r4));
    0x000011ee ldr r4, [r4]                                      |     r4 = *(0x122e);
    0x000011f0 str r4, [sp, 0xc]                                 |     var_ch = r4;
    0x000011f2 mov.w r4, 0                                       |     r4 = 0;
    0x000011f6 ldr r4, [r3, 0xc]                                 |     r4 = *((r3 + 0xc));
    0x000011f8 strd r4, r3, [sp, 4]                              |     __asm ("strd r4, r3, [var_4h]");
    0x000011fc ldrd r3, r4, [r3, 4]                              |     __asm ("ldrd r3, r4, [var_4h_4]");
    0x00001200 str r4, [sp]                                      |     *(sp) = r4;
    0x00001202 blx 0xe28                                         |     fcn_00000e28 ();
    0x00001206 ldr r2, [pc, 0x28]                                |     
    0x00001208 ldr r3, [pc, 0x20]                                |     r3 = *(0x122c);
    0x0000120a add r2, pc                                        |     r2 = 0x2440;
    0x0000120c ldr r3, [r2, r3]                                  |     r3 = *(0x2440);
    0x0000120e ldr r2, [r3]                                      |     r2 = *(0x2440);
    0x00001210 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00001212 eors r2, r3                                       |     r2 ^= r3;
    0x00001214 mov.w r3, 0                                       |     r3 = 0;
    0x00001216 lsls r0, r0, 0xc                                  |     r0 <<= 0xc;
                                                                 |     if (r0 == r0) {
    0x00001218 bne 0x1224                                        |         
    0x0000121a add sp, 0x10                                      |         
    0x0000121c pop.w {r4, lr}                                    |         
    0x00001220 add sp, 0x10                                      |         
    0x00001222 bx lr                                             |         return;
                                                                 |     }
    0x00001224 blx 0xd80                                         |     fcn_00000d80 ();
    0x00001228 cmp r5, 0x20                                      |     
    0x0000122a movs r0, r0                                       |     
    0x0000122c lsls r0, r4, 3                                    |     r0 = r4 << 3;
    0x0000122e movs r0, r0                                       |     
    0x00001230 cmp r4, 0xf6                                      |     
    0x00001232 movs r0, r0                                       |     
    0x00001234 push {r3, r4, r5, lr}                             |     
    0x00001236 cmp r0, 1                                         |     
    0x00001238 ldr r3, [pc, 0x6c]                                |     
    0x0000123a add r3, pc                                        |     r3 = 0x24e6;
                                                                 |     if (r0 > 1) {
    0x0000123c ble 0x1260                                        |         
    0x0000123e ldr r0, [pc, 0x6c]                                |         r0 = *(0x12ae);
    0x00001240 mov r4, r2                                        |         r4 = r2;
    0x00001242 movs r1, 1                                        |         r1 = 1;
    0x00001244 movs r2, 0x12                                     |         r2 = 0x12;
    0x00001246 ldr r5, [r3, r0]                                  |         r5 = *((r3 + r0));
    0x00001248 ldr r0, [pc, 0x64]                                |         
    0x0000124a ldr r3, [r5]                                      |         r3 = *(r5);
    0x0000124c add r0, pc                                        |         r0 = 0x2500;
    0x0000124e blx 0xd5c                                         |         fcn_00000d5c ();
    0x00001252 ldr r1, [r5]                                      |         r1 = *(r5);
    0x00001254 ldr r0, [r4, 0xc]                                 |         r0 = *((r4 + 0xc));
    0x00001256 blx 0xe7c                                         |         fcn_00000e7c ();
    0x0000125a movs r0, 1                                        |         r0 = 1;
    0x0000125c blx 0xe58                                         |         fcn_00000e58 ();
                                                                 |     }
    0x00001260 movs r1, 0                                        |     r1 = 0;
    0x00001262 movs r0, 1                                        |     r0 = 1;
    0x00001264 bl 0x11d0                                         |     r0 = fcn_000011d0 (r0);
    0x00001268 subs r4, r0, 0                                    |     r4 = r0 - 0;
                                                                 |     if (r4 >= r0) {
    0x0000126a blt 0x1298                                        |         
    0x0000126c movs r1, 0                                        |         r1 = 0;
    0x0000126e movs r0, 0x12                                     |         r0 = 0x12;
    0x00001270 bl 0x11d0                                         |         r0 = fcn_000011d0 (r0);
    0x00001274 cmp r0, 0                                         |         
                                                                 |         if (r0 >= 0) {
    0x00001276 blt 0x128a                                        |             
    0x00001278 ldr r1, [pc, 0x38]                                |             
    0x0000127a mov r2, r4                                        |             r2 = r4;
    0x0000127c movs r0, 1                                        |             r0 = 1;
    0x0000127e add r1, pc                                        |             r1 = 0x2536;
    0x00001280 blx 0xc8c                                         |             printf_chk ()
    0x00001284 movs r0, 0                                        |             r0 = 0;
    0x00001286 blx 0xe58                                         |             fcn_00000e58 ();
                                                                 |         }
    0x0000128a ldr r0, [pc, 0x2c]                                |         
    0x0000128c add r0, pc                                        |         r0 = 0x254a;
    0x0000128e blx 0xccc                                         |         fcn_00000ccc ();
    0x00001292 movs r0, 1                                        |         r0 = 1;
    0x00001294 blx 0xe58                                         |         fcn_00000e58 ();
                                                                 |     }
    0x00001298 ldr r0, [pc, 0x20]                                |     
    0x0000129a add r0, pc                                        |     r0 = 0x255a;
    0x0000129c blx 0xccc                                         |     fcn_00000ccc ();
    0x000012a0 movs r0, 1                                        |     r0 = 1;
    0x000012a2 blx 0xe58                                         |     fcn_00000e58 ();
    0x000012a6 nop                                               |     
    0x000012a8 cmp r4, 0xc6                                      |     
    0x000012aa movs r0, r0                                       |     
    0x000012ac lsls r4, r5, 3                                    |     r4 = r5 << 3;
    0x000012ae movs r0, r0                                       |     
    0x000012b0 asrs r0, r7, 1                                    |     r0 = r7 >> 1;
    0x000012b2 movs r0, r0                                       |     
    0x000012b4 asrs r2, r2, 2                                    |     r2 >>= 2;
    0x000012b6 movs r0, r0                                       |     
    0x000012b8 asrs r0, r5, 1                                    |     r0 = r5 >> 1;
    0x000012ba movs r0, r0                                       |     
    0x000012bc asrs r6, r7, 0x20                                 |     r6 = r7 >> 0x20;
    0x000012be movs r0, r0                                       |     
    0x000012c0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000012c4 mov r8, r0                                        |     r8 = r0;
    0x000012c6 ldr r0, [pc, 0x100]                               |     
    0x000012c8 cmp.w r8, 1                                       |     
    0x000012cc sub sp, 0x1c                                      |     
    0x000012ce ldr r3, [pc, 0xfc]                                |     r3 = *(0x13ce);
    0x000012d0 add r0, pc                                        |     r0 = 0x269e;
    0x000012d2 ldr.w sl, [pc, 0xfc]                              |     
    0x000012d6 ldr r3, [r0, r3]                                  |     
    0x000012d8 add sl, pc                                        |     sl = 0x26ae;
    0x000012da ldr r3, [r3]                                      |     r3 = *(0x269e);
    0x000012dc str r3, [sp, 0x14]                                |     var_14h = r3;
    0x000012de mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r8 <= 1) {
    0x000012e2 ble 0x1394                                        |         goto label_1;
                                                                 |     }
    0x000012e4 ldr r3, [pc, 0xec]                                |     
    0x000012e6 movw sb, 0x6615                                   |     
    0x000012ea ldr r6, [pc, 0xec]                                |     
    0x000012ec adds r4, r1, 4                                    |     r4 = r1 + 4;
    0x000012ee movs r7, 1                                        |     r7 = 1;
    0x000012f0 movt sb, 0x400c                                   |     sb = 0x400c6615;
    0x000012f4 add r3, pc                                        |     r3 = 0x26cc;
    0x000012f6 add r6, pc                                        |     r6 = 0x26d4;
    0x000012f8 str r3, [sp, 4]                                   |     var_4h_2 = r3;
    0x000012fa b 0x131e                                          |     
                                                                 |     while (fp != 0) {
    0x000012fc blx 0xe64                                         |         r0 = fcn_00000e64 ();
    0x00001300 ldr r0, [r0]                                      |         r0 = *(r0);
    0x00001302 adds r7, 1                                        |         r7++;
    0x00001304 ldr r5, [r4, -0x4]                                |         r5 = *((r4 - 0x4));
    0x00001308 blx 0xc44                                         |         strerror (r0);
    0x0000130c ldr r1, [pc, 0xcc]                                |         
    0x0000130e mov r3, r0                                        |         r3 = r0;
    0x00001310 mov r2, r5                                        |         r2 = r5;
    0x00001312 movs r0, 1                                        |         r0 = 1;
    0x00001314 add r1, pc                                        |         r1 = 0x26f4;
    0x00001316 blx 0xc8c                                         |         printf_chk ()
    0x0000131a cmp r8, r7                                        |         
                                                                 |         if (r8 == r7) {
    0x0000131c beq 0x1380                                        |             goto label_2;
                                                                 |         }
                                                                 | label_0:
    0x0000131e ldr r0, [r4]                                      |         r0 = *(r4);
    0x00001320 movs r1, 0                                        |         r1 = 0;
    0x00001322 blx 0xc38                                         |         r0 = open (r0, r1, r2);
    0x00001326 adds r3, r0, 1                                    |         r3 = r0 + 1;
    0x00001328 mov fp, r4                                        |         
    0x0000132a mov r5, r0                                        |         r5 = r0;
    0x0000132c add.w r4, r4, 4                                   |         r4 += 4;
                                                                 |         if (r3 == r0) {
    0x00001330 beq 0x1386                                        |             goto label_3;
                                                                 |         }
    0x00001332 add r2, sp, 8                                     |         r2 += var_8h;
    0x00001334 mov r1, sb                                        |         r1 = sb;
    0x00001336 blx 0xcfc                                         |         r0 = fcn_00000cfc ();
    0x0000133a mov fp, r0                                        |         
    0x0000133c mov r0, r5                                        |         r0 = r5;
    0x0000133e blx 0xd50                                         |         fcn_00000d50 ();
    0x00001342 cmp.w fp, 0                                       |         
    0x00001346 bne 0x12fc                                        |         
                                                                 |     }
    0x00001348 add.w fp, sp, 0xb                                 |     
    0x0000134c add.w r5, sp, 0x13                                |     r5 += var_13h;
    0x00001350 ldr r2, [r4, -0x4]                                |     r2 = *((r4 - 0x4));
    0x00001354 movs r0, 1                                        |     r0 = 1;
    0x00001356 ldr r1, [sp, 4]                                   |     r1 = var_4h_2;
    0x00001358 blx 0xc8c                                         |     printf_chk ()
                                                                 |     do {
    0x0000135c ldrb r2, [fp, 1]!                                 |         r2 = var_1h;
    0x00001360 mov r1, r6                                        |         r1 = r6;
    0x00001362 movs r0, 1                                        |         r0 = 1;
    0x00001364 blx 0xc8c                                         |         printf_chk ()
    0x00001368 cmp r5, fp                                        |         
    0x0000136a bne 0x135c                                        |         
                                                                 |     } while (r5 != fp);
    0x0000136c ldr r3, [pc, 0x70]                                |     r3 = *(0x13e0);
    0x0000136e movs r0, 0xa                                      |     r0 = 0xa;
    0x00001370 adds r7, 1                                        |     r7++;
    0x00001372 ldr.w r3, [sl, r3]                                |     r3 = *((sl + r3));
    0x00001376 ldr r1, [r3]                                      |     r1 = *(0x13e0);
    0x00001378 blx 0xdb0                                         |     fcn_00000db0 ();
    0x0000137c cmp r8, r7                                        |     
                                                                 |     if (r8 != r7) {
    0x0000137e bne 0x131e                                        |         goto label_0;
                                                                 |     }
                                                                 | label_2:
    0x00001380 movs r0, 0                                        |     r0 = 0;
    0x00001382 blx 0xe58                                         |     fcn_00000e58 ();
                                                                 | label_3:
    0x00001386 ldr.w r0, [fp]                                    |     r0 = *(fp);
    0x0000138a blx 0xccc                                         |     fcn_00000ccc ();
    0x0000138e movs r0, 1                                        |     r0 = 1;
    0x00001390 blx 0xe58                                         |     fcn_00000e58 ();
                                                                 | label_1:
    0x00001394 ldr r3, [pc, 0x4c]                                |     r3 = *(0x13e4);
    0x00001396 mov r4, r2                                        |     r4 = r2;
    0x00001398 ldr r0, [pc, 0x4c]                                |     
    0x0000139a movs r2, 0x1f                                     |     r2 = 0x1f;
    0x0000139c movs r1, 1                                        |     r1 = 1;
    0x0000139e ldr.w r5, [sl, r3]                                |     r5 = *((sl + r3));
    0x000013a2 add r0, pc                                        |     r0 = 0x278e;
    0x000013a4 ldr r3, [r5]                                      |     r3 = *(r5);
    0x000013a6 blx 0xd5c                                         |     fcn_00000d5c ();
    0x000013aa ldr r0, [pc, 0x40]                                |     
    0x000013ac movs r2, 9                                        |     r2 = 9;
    0x000013ae ldr r3, [r5]                                      |     r3 = *(r5);
    0x000013b0 movs r1, 1                                        |     r1 = 1;
    0x000013b2 add r0, pc                                        |     r0 = 0x27a4;
    0x000013b4 blx 0xd5c                                         |     fcn_00000d5c ();
    0x000013b8 ldr r1, [r5]                                      |     r1 = *(r5);
    0x000013ba ldr r0, [r4, 0xc]                                 |     r0 = *((r4 + 0xc));
    0x000013bc blx 0xe7c                                         |     fcn_00000e7c ();
    0x000013c0 movs r0, 1                                        |     r0 = 1;
    0x000013c2 blx 0xe58                                         |     fcn_00000e58 ();
    0x000013c6 nop                                               |     
    0x000013c8 cmp r4, 0x30                                      |     
    0x000013ca movs r0, r0                                       |     
    0x000013cc lsls r0, r4, 3                                    |     r0 = r4 << 3;
    0x000013ce movs r0, r0                                       |     
    0x000013d0 cmp r4, 0x28                                      |     
    0x000013d2 movs r0, r0                                       |     
    0x000013d4 asrs r4, r4, 2                                    |     r4 >>= 2;
    0x000013d6 movs r0, r0                                       |     
    0x000013d8 asrs r2, r5, 2                                    |     r2 = r5 >> 2;
    0x000013da movs r0, r0                                       |     
    0x000013dc asrs r0, r4, 1                                    |     r0 = r4 >> 1;
    0x000013de movs r0, r0                                       |     
    0x000013e0 lsls r0, r5, 3                                    |     r0 = r5 << 3;
    0x000013e2 movs r0, r0                                       |     
    0x000013e4 lsls r4, r5, 3                                    |     r4 = r5 << 3;
    0x000013e6 movs r0, r0                                       |     
    0x000013e8 lsrs r6, r4, 0x1e                                 |     r6 = r4 >> 0x1e;
    0x000013ea movs r0, r0                                       |     
    0x000013ec lsrs r6, r6, 0x1e                                 |     r6 >>= 0x1e;
    0x000013ee movs r0, r0                                       |     
    0x000013f0 push {r3, r4, r5, r6, r7, lr}                     |     
    0x000013f2 cmp r0, 1                                         |     
    0x000013f4 ldr r6, [pc, 0xa0]                                |     
    0x000013f6 add r6, pc                                        |     r6 = 0x2892;
                                                                 |     if (r0 <= 1) {
    0x000013f8 ble 0x1428                                        |         goto label_4;
                                                                 |     }
    0x000013fa ldr r4, [pc, 0xa0]                                |     
    0x000013fc ldr r0, [pc, 0xa0]                                |     
    0x000013fe ldr r7, [r1, 4]                                   |     r7 = *((r1 + 4));
    0x00001400 add r4, pc                                        |     r4 = 0x28a2;
    0x00001402 add r0, pc                                        |     r0 = 0x28a6;
                                                                 |     do {
    0x00001404 ldr r3, [r4, 0x10]                                |         r3 = *((r4 + 0x10));
    0x00001406 lsls r2, r3, 0x1f                                 |         r2 = r3 << 0x1f;
                                                                 |         if (r2 >= r3) {
    0x00001408 bmi 0x1414                                        |             
    0x0000140a mov r1, r7                                        |             r1 = r7;
    0x0000140c blx 0xe4c                                         |             r0 = fcn_00000e4c ();
    0x00001410 mov r5, r0                                        |             r5 = r0;
                                                                 |             if (r0 == 0) {
    0x00001412 cbz r0, 0x146e                                    |                 goto label_5;
                                                                 |             }
                                                                 |         }
    0x00001414 ldr r0, [r4, 0x14]!                               |         r0 = *((r4 += 0x14));
    0x00001418 cmp r0, 0                                         |         
    0x0000141a bne 0x1404                                        |         
                                                                 |     } while (r0 != 0);
    0x0000141c ldr r1, [pc, 0x84]                                |     
    0x0000141e mov r2, r7                                        |     r2 = r7;
    0x00001420 movs r0, 1                                        |     r0 = 1;
    0x00001422 add r1, pc                                        |     r1 = 0x28ca;
    0x00001424 blx 0xc8c                                         |     printf_chk ()
                                                                 | label_4:
    0x00001428 ldr r3, [pc, 0x7c]                                |     
    0x0000142a movs r2, 0x14                                     |     r2 = 0x14;
    0x0000142c ldr r0, [pc, 0x7c]                                |     
    0x0000142e movs r1, 1                                        |     r1 = 1;
    0x00001430 ldr r4, [pc, 0x7c]                                |     
    0x00001432 ldr r3, [r6, r3]                                  |     r3 = *((r6 + r3));
    0x00001434 ldr r5, [pc, 0x7c]                                |     
    0x00001436 add r0, pc                                        |     r0 = 0x28e6;
    0x00001438 ldr r7, [pc, 0x7c]                                |     
    0x0000143a add r4, pc                                        |     r4 = 0x28ee;
    0x0000143c ldr r3, [r3]                                      |     r3 = *(0x14a8);
    0x0000143e add r5, pc                                        |     r5 = 0x28f6;
    0x00001440 add r7, pc                                        |     r7 = 0x28fc;
    0x00001442 blx 0xd5c                                         |     fcn_00000d5c ();
                                                                 |     do {
    0x00001446 ldr r3, [r4, 0x10]                                |         r3 = *((r4 + 0x10));
    0x00001448 lsls r3, r3, 0x1f                                 |         r3 <<= 0x1f;
                                                                 |         if (r3 >= r3) {
    0x0000144a bmi 0x1458                                        |             
    0x0000144c ldr r3, [r4, 8]                                   |             r3 = *((r4 + 8));
    0x0000144e mov r2, r5                                        |             r2 = r5;
    0x00001450 mov r1, r7                                        |             r1 = r7;
    0x00001452 movs r0, 1                                        |             r0 = 1;
    0x00001454 blx 0xc8c                                         |             printf_chk ()
                                                                 |         }
    0x00001458 ldr r5, [r4, 0x14]!                               |         r5 = *((r4 += 0x14));
    0x0000145c cmp r5, 0                                         |         
    0x0000145e bne 0x1446                                        |         
                                                                 |     } while (r5 != 0);
    0x00001460 ldr r0, [pc, 0x58]                                |     
    0x00001462 add r0, pc                                        |     r0 = 0x2922;
    0x00001464 blx 0xdc8                                         |     fcn_00000dc8 ();
    0x00001468 mov r0, r5                                        |     r0 = r5;
    0x0000146a blx 0xe58                                         |     fcn_00000e58 ();
                                                                 | label_5:
    0x0000146e ldr r3, [pc, 0x38]                                |     r3 = *(0x14aa);
    0x00001470 movs r0, 0xa                                      |     r0 = 0xa;
    0x00001472 ldr r6, [r6, r3]                                  |     r6 = *((r6 + r3));
    0x00001474 ldr r1, [r6]                                      |     r1 = *(r6);
    0x00001476 blx 0xde0                                         |     fcn_00000de0 ();
    0x0000147a ldr r0, [pc, 0x44]                                |     
    0x0000147c movs r2, 9                                        |     r2 = 9;
    0x0000147e ldr r3, [r6]                                      |     r3 = *(r6);
    0x00001480 movs r1, 1                                        |     r1 = 1;
    0x00001482 add r0, pc                                        |     r0 = 0x2948;
    0x00001484 blx 0xd5c                                         |     fcn_00000d5c ();
    0x00001488 ldr r1, [r6]                                      |     r1 = *(r6);
    0x0000148a ldr r0, [r4, 0xc]                                 |     r0 = *((r4 + 0xc));
    0x0000148c blx 0xe7c                                         |     fcn_00000e7c ();
    0x00001490 mov r0, r5                                        |     r0 = r5;
    0x00001492 blx 0xe58                                         |     fcn_00000e58 ();
    0x00001496 nop                                               |     
    0x00001498 cmp r3, 0xa                                       |     
    0x0000149a movs r0, r0                                       |     
    0x0000149c cmp r1, 0x70                                      |     
    0x0000149e movs r0, r0                                       |     
    0x000014a0 lsrs r6, r4, 0x1e                                 |     r6 = r4 >> 0x1e;
    0x000014a2 movs r0, r0                                       |     
    0x000014a4 lsrs r6, r1, 0x1e                                 |     r6 = r1 >> 0x1e;
    0x000014a6 movs r0, r0                                       |     
    0x000014a8 lsls r0, r5, 3                                    |     r0 = r5 << 3;
    0x000014aa movs r0, r0                                       |     
    0x000014ac lsrs r2, r2, 0x1e                                 |     r2 >>= 0x1e;
    0x000014ae movs r0, r0                                       |     
    0x000014b0 cmp r1, 0x36                                      |     
    0x000014b2 movs r0, r0                                       |     
    0x000014b4 lsrs r2, r5, 0x1d                                 |     r2 = r5 >> 0x1d;
    0x000014b6 movs r0, r0                                       |     
    0x000014b8 lsrs r0, r4, 0x1e                                 |     r0 = r4 >> 0x1e;
    0x000014ba movs r0, r0                                       |     
    0x000014bc lsrs r2, r1, 0x1e                                 |     r2 = r1 >> 0x1e;
    0x000014be movs r0, r0                                       |     
    0x000014c0 lsrs r6, r4, 0x1b                                 |     r6 = r4 >> 0x1b;
    0x000014c2 movs r0, r0                                       |     
                                                                 | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/e4crypt @ 0x14c4 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.000014c4 ()                                  | void fcn_000014c4 (int16_t arg1, int16_t arg2) {
                                                             |     int16_t var_4h;
                                                             |     char * dest;
                                                             |     int16_t var_154h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x000014c4 blmi 0xfe553f1c                               |     __asm ("blmi aav.0x00002a32");
    0x000014c8 push.w {r4, r5, r6, r7, r8, sb, sl, lr}       |     
    0x000014cc lsls r5, r1, 0x1e                             |     r5 = r1 << 0x1e;
    0x000014ce add r2, pc                                    |     r2 += pc;
    0x000014d0 ldr r6, [pc, 0x24c]                           |     
    0x000014d2 sub sp, 0x158                                 |     
    0x000014d4 mov r4, r1                                    |     r4 = r1;
    0x000014d6 ldr r3, [r2, r3]                              |     r3 = *((r2 + r3));
    0x000014d8 mov r8, r0                                    |     r8 = r0;
    0x000014da add r6, pc                                    |     r6 = 0x2bfe;
    0x000014dc ldr r3, [r3]                                  |     r3 = *(r3);
    0x000014de str r3, [sp, 0x154]                           |     var_154h = r3;
    0x000014e0 mov.w r3, 0                                   |     r3 = 0;
                                                             |     if (r5 < r1) {
    0x000014e4 bmi 0x1596                                    |         goto label_7;
                                                             |     }
    0x000014e6 ldrb r3, [r0]                                 |     r3 = *(r0);
    0x000014e8 cmp r3, 0x73                                  |     
                                                             |     if (r3 != 0x73) {
    0x000014ea bne 0x157c                                    |         goto label_8;
                                                             |     }
    0x000014ec ldrb r2, [r0, 1]                              |     r2 = *((r0 + 1));
    0x000014ee cmp r2, 0x3a                                  |     
                                                             |     if (r2 != 0x3a) {
    0x000014f0 bne 0x157c                                    |         goto label_8;
                                                             |     }
    0x000014f2 adds r4, r0, 2                                |     r4 = r0 + 2;
    0x000014f4 mov r0, r4                                    |     r0 = r4;
    0x000014f6 blx 0xd08                                     |     r0 = fcn_00000d08 ();
    0x000014fa cmp r0, 0xff                                  |     
    0x000014fc mov sb, r0                                    |     sb = r0;
                                                             |     if (r0 > 0xff) {
    0x000014fe bhi.w 0x1628                                  |         goto label_5;
                                                             |     }
    0x00001502 mov.w r2, 0x100                               |     r2 = 0x100;
    0x00001506 mov r1, r4                                    |     r1 = r4;
    0x00001508 add r0, sp, 0x54                              |     r0 += dest;
    0x0000150a blx 0xc74                                     |     strncpy (r0, r1, r2);
                                                             | label_1:
    0x0000150e mov r0, sb                                    |     r0 = sb;
    0x00001510 blx 0xd68                                     |     r0 = fcn_00000d68 ();
    0x00001514 mov r8, r0                                    |     r8 = r0;
    0x00001516 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00001518 beq.w 0x170e                                  |         goto label_9;
                                                             |     }
    0x0000151c mov r2, sb                                    |     r2 = sb;
    0x0000151e add r1, sp, 0x54                              |     r1 += dest;
    0x00001520 blx 0xd38                                     |     fcn_00000d38 ();
    0x00001524 ldr r3, [pc, 0x1fc]                           |     
    0x00001526 add r3, pc                                    |     r3 = 0x2c4e;
    0x00001528 ldrd sl, r7, [r3, 4]                          |     __asm ("ldrd sl, r7, [r3, 4]");
                                                             |     if (r7 == 0) {
    0x0000152c cbz r7, 0x1558                                |         goto label_10;
                                                             |     }
    0x0000152e mov r4, sl                                    |     r4 = sl;
    0x00001530 movs r5, 0                                    |     r5 = 0;
    0x00001532 b 0x153c                                      |     
                                                             |     while (r3 != sb) {
    0x00001534 adds r5, 1                                    |         r5++;
    0x00001536 adds r4, 0x64                                 |         r4 += 0x64;
    0x00001538 cmp r7, r5                                    |         
                                                             |         if (r7 == r5) {
    0x0000153a beq 0x1558                                    |             goto label_10;
                                                             |         }
                                                             | label_0:
    0x0000153c ldr r3, [r4, 0x60]                            |         r3 = *((r4 + 0x60));
    0x0000153e cmp r3, sb                                    |         
    0x00001540 bne 0x1534                                    |         
                                                             |     }
    0x00001542 ldr r0, [r4]                                  |     r0 = *(r4);
    0x00001544 mov r2, sb                                    |     r2 = sb;
    0x00001546 mov r1, r8                                    |     r1 = r8;
    0x00001548 blx 0xc5c                                     |     r0 = memcmp (r0, r1, r2);
    0x0000154c cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x0000154e beq 0x15fe                                    |         goto label_11;
                                                             |     }
    0x00001550 adds r5, 1                                    |     r5++;
    0x00001552 adds r4, 0x64                                 |     r4 += 0x64;
    0x00001554 cmp r7, r5                                    |     
                                                             |     if (r7 != r5) {
    0x00001556 bne 0x153c                                    |         goto label_0;
                                                             |     }
                                                             | label_10:
    0x00001558 ldr r4, [pc, 0x1cc]                           |     
    0x0000155a add r4, pc                                    |     r4 = 0x2c86;
    0x0000155c ldr r3, [r4, 0xc]                             |     r3 = *(0x2c92);
    0x0000155e cmp r7, r3                                    |     
                                                             |     if (r7 >= r3) {
    0x00001560 bhs 0x1640                                    |         goto label_12;
                                                             |     }
                                                             | label_2:
    0x00001562 movs r3, 0x64                                 |     r3 = 0x64;
    0x00001564 ldr r2, [pc, 0x1c4]                           |     
    0x00001566 mul r3, r7, r3                                |     r3 = r7 * r3;
    0x0000156a adds r7, 1                                    |     r7++;
    0x0000156c add r2, pc                                    |     r2 = 0x2c9c;
    0x0000156e str.w r8, [sl, r3]                            |     __asm ("str.w r8, [sl, r3]");
    0x00001572 add sl, r3                                    |     sl += r3;
    0x00001574 str.w sb, [sl, 0x60]                          |     __asm ("str.w sb, [sl, 0x60]");
    0x00001578 str r7, [r2, 8]                               |     *((r2 + 8)) = r7;
    0x0000157a b 0x15fe                                      |     goto label_11;
                                                             | label_8:
    0x0000157c ldrb.w r2, [r8]                               |     r2 = *(r8);
    0x00001580 cmp r2, 0x2f                                  |     
                                                             |     if (r2 != 0x2f) {
    0x00001582 beq 0x1596                                    |         
    0x00001584 cmp r2, 0x66                                  |         
                                                             |         if (r2 != 0x66) {
    0x00001586 bne 0x1618                                    |             goto label_13;
                                                             |         }
    0x00001588 ldrb.w r2, [r8, 1]                            |         r2 = *((r8 + 1));
    0x0000158c cmp r2, 0x3a                                  |         
    0x0000158e it eq                                         |         
                                                             |         if (r2 != 0x3a) {
    0x00001590 addeq r8, r8, 2                               |             r8 += 2;
                                                             |         }
                                                             |         if (r2 != 0x3a) {
    0x00001594 bne 0x1618                                    |             goto label_13;
                                                             |         }
                                                             |     }
                                                             | label_7:
    0x00001596 mov.w r1, 0x4000                              |     r1 = 0x4000;
    0x0000159a mov r0, r8                                    |     r0 = r8;
    0x0000159c blx 0xc38                                     |     r0 = open (r0, r1, r2);
    0x000015a0 mov r5, r0                                    |     r5 = r0;
    0x000015a2 adds r0, r5, 1                                |     r0 = r5 + 1;
                                                             |     if (r0 != r5) {
    0x000015a4 bne 0x15ca                                    |         goto label_14;
                                                             |     }
    0x000015a6 blx 0xe64                                     |     r0 = fcn_00000e64 ();
    0x000015aa ldr r3, [r0]                                  |     r3 = *(r0);
    0x000015ac cmp r3, 0x14                                  |     
    0x000015ae beq 0x15bc                                    |     
                                                             |     while (r1 == r0) {
    0x000015b0 mov r0, r8                                    |         r0 = r8;
    0x000015b2 blx 0xccc                                     |         fcn_00000ccc ();
    0x000015b6 movs r0, 1                                    |         r0 = 1;
    0x000015b8 blx 0xe58                                     |         fcn_00000e58 ();
    0x000015bc movs r1, 0                                    |         r1 = 0;
    0x000015be mov r0, r8                                    |         r0 = r8;
    0x000015c0 blx 0xc38                                     |         r0 = open (r0, r1, r2);
    0x000015c4 adds r1, r0, 1                                |         r1 = r0 + 1;
    0x000015c6 mov r5, r0                                    |         r5 = r0;
    0x000015c8 beq 0x15b0                                    |         
                                                             |     }
                                                             | label_14:
    0x000015ca add.w sb, sp, 0x54                            |     sb += dest;
    0x000015ce movw r1, 0x6614                               |     
    0x000015d2 movt r1, 0x4010                               |     r1 = 0x40106614;
    0x000015d6 mov r2, sb                                    |     r2 = sb;
    0x000015d8 mov r0, r5                                    |     r0 = r5;
    0x000015da blx 0xcfc                                     |     r0 = fcn_00000cfc ();
    0x000015de mov r7, r0                                    |     r7 = r0;
    0x000015e0 mov r0, r5                                    |     r0 = r5;
    0x000015e2 blx 0xd50                                     |     fcn_00000d50 ();
    0x000015e6 cmp r7, 0                                     |     
                                                             |     if (r7 < 0) {
    0x000015e8 blt 0x15fa                                    |         goto label_15;
                                                             |     }
    0x000015ea ldr r3, [pc, 0x144]                           |     
    0x000015ec add r3, pc                                    |     
    0x000015ee ldr r3, [r3]                                  |     r3 = *(0x2d22);
    0x000015f0 lsls r3, r3, 0x1f                             |     r3 <<= 0x1f;
                                                             |     if (r3 < r3) {
    0x000015f2 bmi 0x165c                                    |         goto label_16;
                                                             |     }
                                                             |     do {
                                                             | label_3:
    0x000015f4 mov.w sb, 0x10                                |         sb = 0x10;
    0x000015f8 b 0x150e                                      |         goto label_1;
                                                             | label_15:
    0x000015fa lsls r2, r4, 0x1f                             |         r2 = r4 << 0x1f;
                                                             |         if (r2 >= r4) {
    0x000015fc bpl 0x16fc                                    |             goto label_17;
                                                             |         }
                                                             | label_11:
    0x000015fe ldr r2, [pc, 0x134]                           |         
    0x00001600 ldr r3, [pc, 0x118]                           |         r3 = *(0x171c);
    0x00001602 add r2, pc                                    |         r2 = 0x2d3c;
    0x00001604 ldr r3, [r2, r3]                              |         r3 = *(0x2d3c);
    0x00001606 ldr r2, [r3]                                  |         r2 = *(0x2d3c);
    0x00001608 ldr r3, [sp, 0x154]                           |         r3 = var_154h;
    0x0000160a eors r2, r3                                   |         r2 ^= r3;
    0x0000160c mov.w r3, 0                                   |         r3 = 0;
                                                             |         if (r2 != r3) {
    0x00001610 bne 0x170a                                    |             goto label_18;
                                                             |         }
    0x00001612 add sp, 0x158                                 |         
    0x00001614 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |         
    0x00001616 strh r0, [r6, 0x3e]                           |         *((r6 + 0x3e)) = r0;
                                                             | label_13:
    0x00001618 cmp r3, 0x30                                  |         
                                                             |         if (r3 == 0x30) {
    0x0000161a beq 0x1676                                    |             goto label_19;
                                                             |         }
                                                             | label_4:
    0x0000161c add r1, sp, 0x54                              |         r1 += dest;
    0x0000161e mov r0, r8                                    |         r0 = r8;
    0x00001620 blx 0xca4                                     |         r0 = uuid_parse ();
    0x00001624 cmp r0, 0                                     |         
    0x00001626 beq 0x15f4                                    |         
                                                             |     } while (r0 == 0);
                                                             | label_5:
    0x00001628 ldr r0, [pc, 0x10c]                           |     
    0x0000162a mov r3, r8                                    |     r3 = r8;
    0x0000162c ldr r2, [pc, 0x10c]                           |     
    0x0000162e movs r1, 1                                    |     r1 = 1;
    0x00001630 ldr r0, [r6, r0]                              |     r0 = *((r6 + r0));
    0x00001632 add r2, pc                                    |     r2 = 0x2d72;
    0x00001634 ldr r0, [r0]                                  |     r0 = *(0x1738);
    0x00001636 blx 0xd98                                     |     fcn_00000d98 ();
    0x0000163a movs r0, 1                                    |     r0 = 1;
    0x0000163c blx 0xe58                                     |     fcn_00000e58 ();
                                                             | label_12:
    0x00001640 adds r7, 0xa                                  |     r7 += 0xa;
    0x00001642 movs r1, 0x64                                 |     r1 = 0x64;
    0x00001644 mov r0, sl                                    |     r0 = sl;
    0x00001646 mul r1, r7, r1                                |     r1 = r7 * r1;
    0x0000164a str r7, [r4, 0xc]                             |     *((r4 + 0xc)) = r7;
    0x0000164c blx 0xe04                                     |     r0 = fcn_00000e04 ();
    0x00001650 mov sl, r0                                    |     sl = r0;
    0x00001652 str r0, [r4, 4]                               |     *((r4 + 4)) = r0;
    0x00001654 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00001656 beq 0x16e4                                    |         goto label_20;
                                                             |     }
    0x00001658 ldr r7, [r4, 8]                               |     r7 = *((r4 + 8));
    0x0000165a b 0x1562                                      |     goto label_2;
                                                             | label_16:
    0x0000165c add r4, sp, 4                                 |     r4 += var_4h;
    0x0000165e mov r0, sb                                    |     r0 = sb;
    0x00001660 mov r1, r4                                    |     r1 = r4;
    0x00001662 blx 0xdf8                                     |     fcn_00000df8 ();
    0x00001666 ldr r1, [pc, 0xd8]                            |     
    0x00001668 mov r3, r4                                    |     r3 = r4;
    0x0000166a mov r2, r8                                    |     r2 = r8;
    0x0000166c movs r0, 1                                    |     r0 = 1;
    0x0000166e add r1, pc                                    |     r1 = 0x2db4;
    0x00001670 blx 0xc8c                                     |     printf_chk ()
    0x00001674 b 0x15f4                                      |     goto label_3;
                                                             | label_19:
    0x00001676 ldrb.w r7, [r8, 1]                            |     r7 = *((r8 + 1));
    0x0000167a subs r7, 0x78                                 |     r7 -= 0x78;
                                                             |     if (r7 != 0x78) {
    0x0000167c bne 0x161c                                    |         goto label_4;
                                                             |     }
    0x0000167e add.w r4, r8, 2                               |     r4 = r8 + 2;
    0x00001682 mov r0, r4                                    |     r0 = r4;
    0x00001684 blx 0xd08                                     |     r0 = fcn_00000d08 ();
    0x00001688 ands sb, r0, 1                                |     sb = r0 & 1;
                                                             |     if (sb != r0) {
    0x0000168c bne 0x1628                                    |         goto label_5;
                                                             |     }
    0x0000168e ldrb.w r1, [r8, 2]                            |     r1 = *((r8 + 2));
    0x00001692 cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x00001694 beq.w 0x150e                                  |         goto label_1;
                                                             |     }
    0x00001698 ldr r5, [pc, 0xa8]                            |     
    0x0000169a add.w sb, sp, 0x54                            |     sb += dest;
    0x0000169e add r5, pc                                    |     r5 = 0x2de6;
    0x000016a0 b 0x16ac                                      |     goto label_21;
                                                             | label_6:
    0x000016a2 cmp.w r7, 0x100                               |     
    0x000016a6 add.w r4, r4, 2                               |     r4 += 2;
                                                             |     if (r7 == 0x100) {
    0x000016aa beq 0x1628                                    |         goto label_5;
                                                             |     }
                                                             | label_21:
    0x000016ac movs r2, 0x10                                 |     r2 = 0x10;
    0x000016ae mov r0, r5                                    |     r0 = r5;
    0x000016b0 blx 0xe40                                     |     fcn_00000e40 ();
    0x000016b4 ldrb r1, [r4, 1]                              |     r1 = *((r4 + 1));
    0x000016b6 mov sl, r0                                    |     sl = r0;
    0x000016b8 movs r2, 0x10                                 |     r2 = 0x10;
    0x000016ba mov r0, r5                                    |     r0 = r5;
    0x000016bc blx 0xe40                                     |     r0 = fcn_00000e40 ();
    0x000016c0 cmp r0, 0                                     |     
    0x000016c2 it ne                                         |     
                                                             |     if (r0 == 0) {
    0x000016c4 cmpne sl, 0                                   |         __asm ("cmpne sl, 0");
                                                             |         goto label_22;
                                                             |     }
                                                             |     if (r0 == 0) {
                                                             | label_22:
    0x000016c8 beq 0x1628                                    |         goto label_5;
                                                             |     }
    0x000016ca ldrb r1, [r4, 2]                              |     r1 = *((r4 + 2));
    0x000016cc sub.w sl, sl, r5                              |     sl -= r5;
    0x000016d0 subs r3, r0, r5                               |     r3 = r0 - r5;
    0x000016d2 adds r7, 1                                    |     r7++;
    0x000016d4 add.w r3, r3, sl, lsl 4                       |     r3 += (sl << 4);
    0x000016d8 strb r3, [sb], 1                              |     *(sb) = r3;
                                                             |     sb++;
    0x000016dc cmp r1, 0                                     |     
                                                             |     if (r1 != 0) {
    0x000016de bne 0x16a2                                    |         goto label_6;
                                                             |     }
    0x000016e0 mov sb, r7                                    |     sb = r7;
    0x000016e2 b 0x150e                                      |     goto label_1;
                                                             | label_20:
    0x000016e4 ldr r0, [pc, 0x60]                            |     
    0x000016e6 movs r2, 0x1c                                 |     r2 = 0x1c;
    0x000016e8 ldr r3, [pc, 0x4c]                            |     r3 = *(0x1738);
    0x000016ea add r0, pc                                    |     r0 = 0x2e36;
                                                             |     do {
    0x000016ec ldr r3, [r6, r3]                              |         r3 = *((r6 + r3));
    0x000016ee movs r1, 1                                    |         r1 = 1;
    0x000016f0 ldr r3, [r3]                                  |         r3 = *(r3);
    0x000016f2 blx 0xd5c                                     |         fcn_00000d5c ();
    0x000016f6 movs r0, 1                                    |         r0 = 1;
    0x000016f8 blx 0xe58                                     |         fcn_00000e58 ();
                                                             | label_17:
    0x000016fc ldr r0, [pc, 0x4c]                            |         
    0x000016fe add r0, pc                                    |         r0 = 0x2e4e;
    0x00001700 blx 0xccc                                     |         fcn_00000ccc ();
    0x00001704 movs r0, 1                                    |         r0 = 1;
    0x00001706 blx 0xe58                                     |         fcn_00000e58 ();
                                                             | label_18:
    0x0000170a blx 0xd80                                     |         fcn_00000d80 ();
                                                             | label_9:
    0x0000170e ldr r0, [pc, 0x40]                            |         
    0x00001710 movs r2, 0x17                                 |         r2 = 0x17;
    0x00001712 ldr r3, [pc, 0x24]                            |         r3 = *(0x173a);
    0x00001714 add r0, pc                                    |         r0 = 0x2e6a;
    0x00001716 b 0x16ec                                      |         
                                                             |     } while (1);
                                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/e4crypt @ 0x17a4 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000017a4 ()                                      | void fcn_000017a4 (int16_t arg_0h, int16_t arg_48h, int16_t arg_4ch, int16_t arg_88h, int16_t arg_8ch, int16_t arg_90h, int16_t arg_cch, int16_t arg_4d0h, int16_t arg_5cch, int16_t arg_9cch, int16_t arg1, int16_t arg2) {
                                                                 |     int16_t var_44h;
                                                                 |     int32_t var_9cch;
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x000017a4 ldr r2, [pc, 0x158]                               |     
    0x000017a6 ldr r3, [pc, 0x15c]                               |     r3 = *(0x1906);
    0x000017a8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000017ac subw sp, sp, 0x9d4                                |     __asm ("subw sp, sp, 0x9d4");
    0x000017b0 ldr.w sb, [pc, 0x154]                             |     
    0x000017b4 add r2, pc                                        |     r2 = 0x30b8;
    0x000017b6 movs r5, 0                                        |     r5 = 0;
    0x000017b8 add r7, sp, 0x8c                                  |     r7 += arg_8ch;
    0x000017ba ldr r3, [r2, r3]                                  |     
    0x000017bc add r6, sp, 8                                     |     r6 += var_8h;
    0x000017be add sb, pc                                        |     
    0x000017c0 add r4, sp, 0x48                                  |     r4 += arg_48h;
    0x000017c2 add.w sb, sb, 0x10                                |     sb = 0x30da;
    0x000017c6 addw fp, sp, 0x4cc                                |     __asm ("addw fp, sp, 0x4cc");
    0x000017ca ldr r3, [r3]                                      |     r3 = *(0x30b8);
    0x000017cc str.w r3, [sp, 0x9cc]                             |     __asm ("str.w r3, [arg_9cch]");
    0x000017d0 mov.w r3, 0                                       |     r3 = 0;
    0x000017d4 strd r0, r1, [sp]                                 |     __asm ("strd r0, r1, [sp]");
    0x000017d8 mov r0, sb                                        |     r0 = sb;
    0x000017da blx 0xd08                                         |     fcn_00000d08 ();
    0x000017de movw r2, 0x43c                                    |     r2 = 0x43c;
    0x000017e2 mov sl, r0                                        |     sl = r0;
    0x000017e4 mov r1, r5                                        |     r1 = r5;
    0x000017e6 add r0, sp, 0x90                                  |     r0 += arg_90h;
    0x000017e8 str r5, [r7]                                      |     *(r7) = r5;
    0x000017ea blx 0xcb4                                         |     fcn_00000cb4 ();
    0x000017ee movs r2, 0x3c                                     |     r2 = 0x3c;
    0x000017f0 mov r1, r5                                        |     r1 = r5;
    0x000017f2 add r0, sp, 0xc                                   |     r0 += var_ch;
    0x000017f4 str r5, [r6]                                      |     *(r6) = r5;
    0x000017f6 blx 0xcb4                                         |     fcn_00000cb4 ();
    0x000017fa movs r2, 0x3c                                     |     r2 = 0x3c;
    0x000017fc mov r1, r5                                        |     r1 = r5;
    0x000017fe add r0, sp, 0x4c                                  |     r0 += arg_4ch;
    0x00001800 str r5, [r4]                                      |     *(r4) = r5;
    0x00001802 blx 0xcb4                                         |     fcn_00000cb4 ();
    0x00001806 movw r2, 0x4fc                                    |     r2 = 0x4fc;
    0x0000180a mov r1, r5                                        |     r1 = r5;
    0x0000180c add.w r0, sp, 0x4d0                               |     r0 += arg_4d0h;
    0x00001810 str.w r5, [fp]                                    |     __asm ("str.w r5, [fp]");
    0x00001814 blx 0xcb4                                         |     r0 = fcn_00000cb4 ();
    0x00001816 orr.w fp, lr, r0, lsl 4                           |     
    0x0000181a add.w r1, sl, 0x100                               |     r1 = sl + 0x100;
    0x0000181e str r1, [sp]                                      |     *(sp) = r1;
    0x00001820 ldr r2, [r3, 0x60]                                |     r2 = *((r3 + 0x60));
    0x00001822 cmp.w r2, 0x100                                   |     
                                                                 |     if (r2 > 0x100) {
    0x00001826 bhi 0x18e6                                        |         goto label_1;
                                                                 |     }
    0x00001828 ldr r1, [r3]                                      |     r1 = *(r3);
    0x0000182a mov r0, fp                                        |     r0 = fp;
    0x0000182c blx 0xd38                                         |     fcn_00000d38 ();
    0x00001830 mov r1, sb                                        |     r1 = sb;
    0x00001832 mov r2, sl                                        |     r2 = sl;
    0x00001834 addw r0, sp, 0x5cc                                |     __asm ("addw r0, arg_5cch");
    0x00001838 add.w r8, sl, 0x40                                |     r8 = sl + 0x40;
    0x0000183c blx 0xd38                                         |     fcn_00000d38 ();
    0x00001840 mov r1, sb                                        |     r1 = sb;
    0x00001842 mov r2, sl                                        |     r2 = sl;
    0x00001844 add r0, sp, 0xcc                                  |     r0 += arg_cch;
    0x00001846 movw sb, 0xffff                                   |     sb = 0xffff;
    0x0000184a blx 0xd38                                         |     fcn_00000d38 ();
    0x0000184e ldr r1, [sp]                                      |     r1 = *(sp);
    0x00001850 mov r2, r6                                        |     r2 = r6;
    0x00001852 mov r0, fp                                        |     r0 = fp;
    0x00001854 blx 0xd2c                                         |     fcn_00000d2c ();
                                                                 | label_0:
    0x00001858 mov r2, r4                                        |     r2 = r4;
    0x0000185a mov r3, r6                                        |     r3 = r6;
                                                                 |     do {
    0x0000185c vld1.64 {d18, d19}, [r2:0x40]                     |         __asm ("vld1.64 {d18, d19}, [r2:0x40]");
    0x00001860 vld1.64 {d16, d17}, [r3:0x40]!                    |         __asm ("vld1.64 {d16, d17}, [r3:0x40]!");
    0x00001864 veor q8, q8, q9                                   |         __asm ("veor q8, q8, q9");
    0x00001868 cmp r3, r4                                        |         
    0x0000186a vst1.64 {d16, d17}, [r2:0x40]!                    |         __asm ("vst1.64 {d16, d17}, [r2:0x40]!");
    0x0000186e bne 0x185c                                        |         
                                                                 |     } while (r3 != r4);
    0x00001870 adds r5, 1                                        |     r5++;
    0x00001872 cmp r5, sb                                        |     
                                                                 |     if (r5 != sb) {
    0x00001874 beq 0x18a6                                        |         
    0x00001876 mov lr, r6                                        |         lr = r6;
    0x00001878 mov ip, r7                                        |         
    0x0000187a ldm.w lr!, {r0, r1, r2, r3}                       |         r0 = *(lr!);
                                                                 |         r1 = *((lr! + 4));
                                                                 |         r2 = *((lr! + 8));
                                                                 |         r3 = *((lr! + 12));
    0x0000187e stm.w ip!, {r0, r1, r2, r3}                       |         *(ip!) = r0;
                                                                 |         *((ip! + 4)) = r1;
                                                                 |         *((ip! + 8)) = r2;
                                                                 |         *((ip! + 12)) = r3;
    0x00001882 ldm.w lr!, {r0, r1, r2, r3}                       |         r0 = *(lr!);
                                                                 |         r1 = *((lr! + 4));
                                                                 |         r2 = *((lr! + 8));
                                                                 |         r3 = *((lr! + 12));
    0x00001886 stm.w ip!, {r0, r1, r2, r3}                       |         *(ip!) = r0;
                                                                 |         *((ip! + 4)) = r1;
                                                                 |         *((ip! + 8)) = r2;
                                                                 |         *((ip! + 12)) = r3;
    0x0000188a ldm.w lr!, {r0, r1, r2, r3}                       |         r0 = *(lr!);
                                                                 |         r1 = *((lr! + 4));
                                                                 |         r2 = *((lr! + 8));
                                                                 |         r3 = *((lr! + 12));
    0x0000188e stm.w ip!, {r0, r1, r2, r3}                       |         *(ip!) = r0;
                                                                 |         *((ip! + 4)) = r1;
                                                                 |         *((ip! + 8)) = r2;
                                                                 |         *((ip! + 12)) = r3;
    0x00001892 ldm.w lr, {r0, r1, r2, r3}                        |         r0 = *(lr);
                                                                 |         r1 = *((lr + 4));
                                                                 |         r2 = *((lr + 8));
                                                                 |         r3 = *((lr + 12));
    0x00001896 stm.w ip, {r0, r1, r2, r3}                        |         *(ip) = r0;
                                                                 |         *((ip + 4)) = r1;
                                                                 |         *((ip + 8)) = r2;
                                                                 |         *((ip + 12)) = r3;
    0x0000189a mov r2, r6                                        |         r2 = r6;
    0x0000189c mov r1, r8                                        |         r1 = r8;
    0x0000189e mov r0, r7                                        |         r0 = r7;
    0x000018a0 blx 0xd2c                                         |         fcn_00000d2c ();
    0x000018a4 b 0x1858                                          |         goto label_0;
                                                                 |     }
    0x000018a6 ldr r6, [sp, 4]                                   |     r6 = var_4h;
    0x000018a8 mov r4, r3                                        |     r4 = r3;
    0x000018aa add r7, sp, 0x88                                  |     r7 += arg_88h;
                                                                 |     do {
    0x000018ac mov r5, r4                                        |         r5 = r4;
    0x000018ae adds r6, 0x10                                     |         r6 += 0x10;
    0x000018b0 ldm r5!, {r0, r1, r2, r3}                         |         r0 = *(r5!);
                                                                 |         r1 = *((r5! + 4));
                                                                 |         r2 = *((r5! + 8));
                                                                 |         r3 = *((r5! + 12));
    0x000018b2 cmp r5, r7                                        |         
    0x000018b4 mov r4, r5                                        |         r4 = r5;
    0x000018b6 str r0, [r6, -0x10]                               |         *((r6 - 0x10)) = r0;
    0x000018ba str r1, [r6, -0xc]                                |         *((r6 - 0xc)) = r1;
    0x000018be str r2, [r6, -0x8]                                |         *((r6 - 0x8)) = r2;
    0x000018c2 str r3, [r6, -0x4]                                |         *((r6 - 0x4)) = r3;
    0x000018c6 bne 0x18ac                                        |         
                                                                 |     } while (r5 != r7);
    0x000018c8 ldr r2, [pc, 0x40]                                |     
    0x000018ca ldr r3, [pc, 0x38]                                |     r3 = *(0x1906);
    0x000018cc add r2, pc                                        |     r2 = 0x31dc;
    0x000018ce ldr r3, [r2, r3]                                  |     r3 = *(0x31dc);
    0x000018d0 ldr r2, [r3]                                      |     r2 = *(0x31dc);
    0x000018d2 ldr.w r3, [sp, 0x9cc]                             |     r3 = *(arg_9cch);
    0x000018d6 eors r2, r3                                       |     r2 ^= r3;
    0x000018d8 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 == r3) {
    0x000018dc bne 0x18fa                                        |         
    0x000018de addw sp, sp, 0x9d4                                |         __asm ("addw sp, var_0h");
    0x000018e2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_1:
    0x000018e6 ldr r1, [pc, 0x28]                                |         
    0x000018e8 mov.w r3, 0x100                                   |         r3 = 0x100;
    0x000018ec movs r0, 1                                        |         r0 = 1;
    0x000018ee add r1, pc                                        |         r1 = 0x3204;
    0x000018f0 blx 0xc8c                                         |         printf_chk ()
    0x000018f4 movs r0, 1                                        |         r0 = 1;
    0x000018f6 blx 0xe58                                         |         fcn_00000e58 ();
                                                                 |     }
    0x000018fa blx 0xd80                                         |     fcn_00000d80 ();
    0x000018fe nop                                               |     
    0x00001900 movs r7, 0x4c                                     |     r7 = 0x4c;
    0x00001902 movs r0, r0                                       |     
    0x00001904 lsls r0, r4, 3                                    |     r0 = r4 << 3;
    0x00001906 movs r0, r0                                       |     
    0x00001908 cmp r0, 0x4e                                      |     
    0x0000190a movs r0, r0                                       |     
    0x0000190c movs r6, 0x34                                     |     r6 = 0x34;
    0x0000190e movs r0, r0                                       |     
    0x00001910 lsrs r2, r2, 0xf                                  |     r2 >>= 0xf;
    0x00001912 movs r0, r0                                       |     
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/e4crypt @ 0x1914 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00001914 ()                                      | void fcn_00001914 (int16_t arg_70h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h_2;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h_2;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_10h_2;
                                                                 |     int16_t var_14h_2;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int32_t var_28h_3;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_74h_2;
                                                                 |     int16_t var_78h;
                                                                 |     int16_t var_80h;
                                                                 |     int16_t var_0h_4;
                                                                 |     int16_t var_b8h;
                                                                 |     int16_t var_bch;
                                                                 |     int16_t var_fch;
                                                                 |     int16_t var_13ch;
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int8_t var_53h;
                                                                 |     int16_t var_74h;
                                                                 |     int16_t var_78h_2;
                                                                 |     int16_t var_0h_3;
                                                                 |     int16_t var_ch_3;
                                                                 |     int16_t var_10h_3;
                                                                 |     int16_t var_14h_3;
                                                                 |     int16_t var_18h_2;
                                                                 |     int16_t var_1ch_2;
                                                                 |     int16_t var_20h_2;
                                                                 |     int16_t var_24h_2;
                                                                 |     int16_t var_28h_2;
                                                                 |     int16_t var_2ah;
                                                                 |     int16_t var_2bh;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_34h_2;
                                                                 |     int16_t var_44h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00001914 svcmi 0xf0e92d                                    |     __asm ("svcmi 0xf0e92d");
    0x00001918 mov r8, r1                                        |     r8 = r1;
    0x0000191a ldr r4, [pc, 0x1c0]                               |     
    0x0000191c mov ip, r2                                        |     
    0x0000191e sub.w r2, r8, 4                                   |     r2 = r8 - 4;
    0x00001922 sub sp, 0x4c                                      |     
    0x00001924 ldr r1, [pc, 0x1b8]                               |     r1 = *(0x1ae0);
    0x00001926 bics r2, r2, 4                                    |     __asm ("bics r2, r2, 4");
    0x0000192a add r4, pc                                        |     r4 = 0x340c;
    0x0000192c ldr r5, [pc, 0x1b4]                               |     
    0x0000192e ldr r7, [sp, 0x70]                                |     r7 = *(arg_70h);
    0x00001930 mov sb, r0                                        |     sb = r0;
    0x00001932 ldr r1, [r4, r1]                                  |     
    0x00001934 add r5, pc                                        |     r5 = 0x341c;
    0x00001936 ldr r1, [r1]                                      |     r1 = *(0x340c);
    0x00001938 str r1, [sp, 0x44]                                |     var_44h = r1;
    0x0000193a mov.w r1, 0                                       |     r1 = 0;
                                                                 |     if (? != ?) {
    0x0000193e beq 0x194c                                        |         
    0x00001940 sub.w r2, r8, 0x10                                |         r2 = r8 - 0x10;
    0x00001944 bics r2, r2, 0x10                                 |         __asm ("bics r2, r2, 0x10");
                                                                 |         if (? != ?) {
    0x00001948 bne.w 0x1aa4                                      |             goto label_23;
                                                                 |         }
                                                                 |     }
    0x0000194c cmp r7, ip                                        |     
                                                                 |     if (r7 >= ip) {
    0x0000194e bge 0x1a00                                        |         goto label_24;
                                                                 |     }
    0x00001950 add.w r6, r3, r7, lsl 2                           |     r6 = r3 + (r7 << 2);
    0x00001954 ldr r3, [pc, 0x190]                               |     
    0x00001956 asr.w r8, r8, 3                                   |     r8 >>= 3;
    0x0000195a movw r1, 0x6614                                   |     
    0x0000195e movw lr, 0x6613                                   |     
    0x00001962 str.w ip, [sp, 0xc]                               |     __asm ("str.w ip, [var_ch_3]");
    0x00001966 add r3, pc                                        |     r3 = 0x3452;
    0x00001968 movt r1, 0x4010                                   |     r1 = 0x40106614;
    0x0000196c movt lr, 0x800c                                   |     lr = 0x800c6613;
    0x00001970 str r3, [sp, 0x18]                                |     var_18h_2 = r3;
    0x00001972 str r5, [sp, 0x24]                                |     var_24h_2 = r5;
    0x00001974 str r1, [sp, 0x1c]                                |     var_1ch_2 = r1;
    0x00001976 str.w lr, [sp, 0x10]                              |     __asm ("str.w lr, [var_10h_3]");
                                                                 | label_0:
    0x0000197a ldr r0, [r6]                                      |     r0 = *(r6);
    0x0000197c mov.w r1, 0x4000                                  |     r1 = 0x4000;
    0x00001980 blx 0xc38                                         |     r0 = open (r0, r1, r2);
    0x00001984 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x00001986 mov r4, r6                                        |     r4 = r6;
    0x00001988 mov r5, r0                                        |     r5 = r0;
    0x0000198a add.w r6, r6, 4                                   |     r6 += 4;
                                                                 |     if (r3 == r0) {
    0x0000198e beq.w 0x1ace                                      |         goto label_25;
                                                                 |     }
    0x00001992 mov sl, sb                                        |     sl = sb;
    0x00001994 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00001998 beq 0x1a3a                                        |         goto label_26;
                                                                 |     }
                                                                 | label_3:
    0x0000199a mov.w r2, 0x100                                   |     r2 = 0x100;
    0x0000199e movs r3, 4                                        |     r3 = 4;
    0x000019a0 strh.w r2, [sp, 0x28]                             |     var_28h_2 = r2;
    0x000019a4 strb.w r3, [sp, 0x2a]                             |     var_2ah = r3;
    0x000019a8 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x000019ac beq 0x1aa0                                        |         goto label_27;
                                                                 |     }
    0x000019ae mov r3, r8                                        |     r3 = r8;
    0x000019b0 movs r2, 0                                        |     r2 = 0;
                                                                 |     do {
    0x000019b2 asrs r3, r3, 1                                    |         r3 >>= 1;
    0x000019b4 add.w r2, r2, 1                                   |         r2++;
    0x000019b8 bne 0x19b2                                        |         
                                                                 |     } while (r2 != 0);
    0x000019ba uxtb r2, r2                                       |     r2 = (int8_t) r2;
                                                                 | label_4:
    0x000019bc ldr.w r0, [sl, 0x15]                              |     r0 = *((sl + 0x15));
    0x000019c0 add r3, sp, 0x2c                                  |     r3 += var_2ch;
    0x000019c2 ldr.w r1, [sl, 0x19]                              |     r1 = *((sl + 0x19));
    0x000019c6 add.w r4, sl, 4                                   |     r4 = sl + 4;
    0x000019ca strb.w r2, [sp, 0x2b]                             |     var_2bh = r2;
    0x000019ce add r2, sp, 0x28                                  |     r2 += var_28h_2;
    0x000019d0 stm r3!, {r0, r1}                                 |     *(r3!) = r0;
                                                                 |     *((r3! + 4)) = r1;
    0x000019d2 mov r0, r5                                        |     r0 = r5;
    0x000019d4 ldr r1, [sp, 0x10]                                |     r1 = var_10h_3;
    0x000019d6 blx 0xcfc                                         |     r0 = fcn_00000cfc ();
    0x000019da mov sl, r0                                        |     sl = r0;
    0x000019dc mov r0, r5                                        |     r0 = r5;
    0x000019de blx 0xd50                                         |     fcn_00000d50 ();
    0x000019e2 cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x000019e6 bne 0x1a1a                                        |         goto label_28;
                                                                 |     }
    0x000019e8 ldr r1, [pc, 0x100]                               |     
    0x000019ea mov r2, r4                                        |     r2 = r4;
    0x000019ec ldr r3, [r6, -0x4]                                |     r3 = *((r6 - 0x4));
    0x000019f0 movs r0, 1                                        |     r0 = 1;
    0x000019f2 add r1, pc                                        |     r1 = 0x34e2;
    0x000019f4 blx 0xc8c                                         |     printf_chk ()
                                                                 | label_1:
    0x000019f8 ldr r3, [sp, 0xc]                                 |     r3 = var_ch_3;
    0x000019fa adds r7, 1                                        |     r7++;
    0x000019fc cmp r3, r7                                        |     
                                                                 |     if (r3 != r7) {
    0x000019fe bne 0x197a                                        |         goto label_0;
                                                                 |     }
                                                                 | label_24:
    0x00001a00 ldr r2, [pc, 0xec]                                |     
    0x00001a02 ldr r3, [pc, 0xdc]                                |     r3 = *(0x1ae2);
    0x00001a04 add r2, pc                                        |     r2 = 0x34f8;
    0x00001a06 ldr r3, [r2, r3]                                  |     r3 = *(0x34f8);
    0x00001a08 ldr r2, [r3]                                      |     r2 = *(0x34f8);
    0x00001a0a ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00001a0c eors r2, r3                                       |     r2 ^= r3;
    0x00001a0e mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00001a12 bne 0x1aca                                        |         goto label_29;
                                                                 |     }
    0x00001a14 add sp, 0x4c                                      |     
    0x00001a16 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_28:
    0x00001a1a blx 0xe64                                         |     r0 = fcn_00000e64 ();
    0x00001a1e ldr r0, [r0]                                      |     r0 = *(r0);
    0x00001a20 blx 0xc44                                         |     strerror (r0);
    0x00001a24 ldr r5, [r6, -0x4]                                |     r5 = *((r6 - 0x4));
    0x00001a28 mov r2, r0                                        |     r2 = r0;
    0x00001a2a ldr r1, [pc, 0xc8]                                |     
    0x00001a2c mov r3, r4                                        |     r3 = r4;
    0x00001a2e movs r0, 1                                        |     r0 = 1;
    0x00001a30 str r5, [sp]                                      |     *(sp) = r5;
    0x00001a32 add r1, pc                                        |     r1 = 0x352c;
    0x00001a34 blx 0xc8c                                         |     printf_chk ()
    0x00001a38 b 0x19f8                                          |     goto label_1;
                                                                 | label_26:
    0x00001a3a add r3, sp, 0x34                                  |     r3 += var_34h_2;
    0x00001a3c ldr r1, [sp, 0x1c]                                |     r1 = var_1ch_2;
    0x00001a3e mov r2, r3                                        |     r2 = r3;
    0x00001a40 str r3, [sp, 0x14]                                |     var_14h_3 = r3;
    0x00001a42 blx 0xcfc                                         |     r0 = fcn_00000cfc ();
    0x00001a46 cmp r0, 0                                         |     
                                                                 |     if (r0 < 0) {
    0x00001a48 blt 0x1abc                                        |         goto label_30;
                                                                 |     }
    0x00001a4a ldr r3, [sp, 0x18]                                |     r3 = var_18h_2;
    0x00001a4c ldrd sl, fp, [r3, 4]                              |     __asm ("ldrd sl, fp, [r3, 4]");
    0x00001a50 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x00001a54 beq 0x1a86                                        |         goto label_31;
                                                                 |     }
    0x00001a56 str r5, [sp, 0x20]                                |     var_20h_2 = r5;
    0x00001a58 mov r4, sb                                        |     r4 = sb;
    0x00001a5a mov r5, fp                                        |     r5 = fp;
    0x00001a5c ldr.w fp, [sp, 0x14]                              |     fp = var_14h_3;
    0x00001a60 b 0x1a6c                                          |     
                                                                 |     while (r2 != 0x10) {
                                                                 | label_2:
    0x00001a62 adds r4, 1                                        |         r4++;
    0x00001a64 add.w sl, sl, 0x64                                |         sl += 0x64;
    0x00001a68 cmp r4, r5                                        |         
                                                                 |         if (r4 == r5) {
    0x00001a6a beq 0x1a86                                        |             goto label_31;
                                                                 |         }
    0x00001a6c ldr.w r2, [sl, 0x60]                              |         r2 = *((sl + 0x60));
    0x00001a70 cmp r2, 0x10                                      |         
    0x00001a72 bne 0x1a62                                        |         
                                                                 |     }
    0x00001a74 ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x00001a78 mov r1, fp                                        |     r1 = fp;
    0x00001a7a blx 0xc5c                                         |     r0 = memcmp (r0, r1, r2);
    0x00001a7e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00001a80 bne 0x1a62                                        |         goto label_2;
                                                                 |     }
    0x00001a82 ldr r5, [sp, 0x20]                                |     r5 = var_20h_2;
    0x00001a84 b 0x199a                                          |     goto label_3;
                                                                 | label_31:
    0x00001a86 ldr r5, [sp, 0x24]                                |     r5 = var_24h_2;
    0x00001a88 movs r2, 0x16                                     |     r2 = 0x16;
    0x00001a8a ldr r3, [pc, 0x6c]                                |     
    0x00001a8c movs r1, 1                                        |     r1 = 1;
    0x00001a8e ldr r0, [pc, 0x6c]                                |     
    0x00001a90 ldr r3, [r5, r3]                                  |     r3 = *((r5 + r3));
    0x00001a92 add r0, pc                                        |     r0 = 0x3594;
    0x00001a94 ldr r3, [r3]                                      |     r3 = *(0x1afa);
    0x00001a96 blx 0xd5c                                         |     fcn_00000d5c ();
    0x00001a9a movs r0, 1                                        |     r0 = 1;
    0x00001a9c blx 0xe58                                         |     fcn_00000e58 ();
                                                                 | label_27:
    0x00001aa0 mov r2, r8                                        |     r2 = r8;
    0x00001aa2 b 0x19bc                                          |     goto label_4;
                                                                 | label_23:
    0x00001aa4 ldr r0, [pc, 0x50]                                |     
    0x00001aa6 mov r3, r8                                        |     r3 = r8;
    0x00001aa8 ldr r2, [pc, 0x54]                                |     
    0x00001aaa movs r1, 1                                        |     r1 = 1;
    0x00001aac ldr r0, [r5, r0]                                  |     r0 = *((r5 + r0));
    0x00001aae add r2, pc                                        |     r2 = 0x35b2;
    0x00001ab0 ldr r0, [r0]                                      |     r0 = *(0x1af8);
    0x00001ab2 blx 0xd98                                         |     fcn_00000d98 ();
    0x00001ab6 movs r0, 1                                        |     r0 = 1;
    0x00001ab8 blx 0xe58                                         |     fcn_00000e58 ();
                                                                 | label_30:
    0x00001abc ldr r0, [pc, 0x44]                                |     
    0x00001abe add r0, pc                                        |     r0 = 0x35c6;
    0x00001ac0 blx 0xccc                                         |     fcn_00000ccc ();
    0x00001ac4 movs r0, 1                                        |     r0 = 1;
    0x00001ac6 blx 0xe58                                         |     fcn_00000e58 ();
                                                                 | label_29:
    0x00001aca blx 0xd80                                         |     fcn_00000d80 ();
                                                                 | label_25:
    0x00001ace ldr r0, [r4]                                      |     r0 = *(r4);
    0x00001ad0 blx 0xccc                                         |     fcn_00000ccc ();
    0x00001ad4 movs r0, 1                                        |     r0 = 1;
    0x00001ad6 blx 0xe58                                         |     fcn_00000e58 ();
    0x00001ada nop                                               |     
    0x00001adc movs r5, 0xd6                                     |     r5 = 0xd6;
    0x00001ade movs r0, r0                                       |     
    0x00001ae0 lsls r0, r4, 3                                    |     r0 = r4 << 3;
    0x00001ae2 movs r0, r0                                       |     
    0x00001ae4 movs r5, 0xcc                                     |     r5 = 0xcc;
    0x00001ae6 movs r0, r0                                       |     
    0x00001ae8 movs r6, 0xa6                                     |     r6 = 0xa6;
    0x00001aea movs r0, r0                                       |     
    0x00001aec lsrs r2, r2, 0xe                                  |     r2 >>= 0xe;
    0x00001aee movs r0, r0                                       |     
    0x00001af0 movs r4, 0xfc                                     |     r4 = 0xfc;
    0x00001af2 movs r0, r0                                       |     
    0x00001af4 lsrs r2, r3, 0xb                                  |     r2 = r3 >> 0xb;
    0x00001af6 movs r0, r0                                       |     
    0x00001af8 lsls r4, r5, 3                                    |     r4 = r5 << 3;
    0x00001afa movs r0, r0                                       |     
    0x00001afc lsrs r2, r4, 9                                    |     r2 = r4 >> 9;
    0x00001afe movs r0, r0                                       |     
    0x00001b00 lsrs r2, r6, 8                                    |     r2 = r6 >> 8;
    0x00001b02 movs r0, r0                                       |     
    0x00001b04 lsrs r2, r0, 6                                    |     r2 = r0 >> 6;
    0x00001b06 movs r0, r0                                       |     
    0x00001b08 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00001b0c mov sb, r2                                        |     sb = r2;
    0x00001b0e ldr r2, [pc, 0x130]                               |     
    0x00001b10 sub sp, 0x7c                                      |     
    0x00001b12 mov r4, r0                                        |     r4 = r0;
    0x00001b14 mov r5, r1                                        |     r5 = r1;
    0x00001b16 ldr r3, [pc, 0x12c]                               |     r3 = *(0x1c46);
    0x00001b18 mov.w r8, 4                                       |     r8 = 4;
    0x00001b1c add r2, pc                                        |     r2 = 0x3762;
    0x00001b1e ldr r6, [pc, 0x128]                               |     
    0x00001b20 ldr r7, [pc, 0x128]                               |     
    0x00001b22 ldr r3, [r2, r3]                                  |     
    0x00001b24 add r6, pc                                        |     r6 = 0x3772;
    0x00001b26 add r7, pc                                        |     r7 = 0x3776;
    0x00001b28 ldr r3, [r3]                                      |     r3 = *(0x3762);
    0x00001b2a str r3, [sp, 0x74]                                |     var_74h = r3;
    0x00001b2c mov.w r3, 0                                       |     r3 = 0;
    0x00001b30 b 0x1b36                                          |     
                                                                 |     while (r3 != r0) {
    0x00001b32 cmp r0, 0x70                                      |         
                                                                 |         if (r0 == 0x70) {
    0x00001b34 beq 0x1b78                                        |             goto label_32;
                                                                 |         }
                                                                 | label_5:
    0x00001b36 mov r2, r7                                        |         r2 = r7;
    0x00001b38 mov r1, r5                                        |         r1 = r5;
    0x00001b3a mov r0, r4                                        |         r0 = r4;
    0x00001b3c blx 0xd14                                         |         r0 = fcn_00000d14 ();
    0x00001b40 adds r3, r0, 1                                    |         r3 = r0 + 1;
    0x00001b42 bne 0x1b32                                        |         
                                                                 |     }
    0x00001b44 ldr r3, [pc, 0x108]                               |     r3 = *(0x1c50);
    0x00001b46 ldr r3, [r6, r3]                                  |     r3 = *((r6 + r3));
    0x00001b48 ldr r2, [r3]                                      |     r2 = *(0x1c50);
    0x00001b4a str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00001b4c adds r3, r2, 1                                    |     r3 = r2 + 1;
    0x00001b4e cmp r3, r4                                        |     
                                                                 |     if (r3 >= r4) {
    0x00001b50 bge 0x1bde                                        |         goto label_33;
                                                                 |     }
    0x00001b52 ldr.w r7, [r5, r2, lsl 2]                         |     offset_0 = r2 << 2;
                                                                 |     r7 = *((r5 + offset_0));
    0x00001b56 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00001b58 mov r0, r7                                        |     r0 = r7;
    0x00001b5a blx 0xd08                                         |     r0 = fcn_00000d08 ();
    0x00001b5e cmp r0, 0x10                                      |     
    0x00001b60 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00001b62 beq 0x1b8a                                        |     
                                                                 |     while (r0 == 0) {
                                                                 | label_7:
    0x00001b64 ldr r1, [pc, 0xec]                                |         
    0x00001b66 movs r3, 0x10                                     |         r3 = 0x10;
    0x00001b68 mov r2, r7                                        |         r2 = r7;
    0x00001b6a movs r0, 1                                        |         r0 = 1;
    0x00001b6c add r1, pc                                        |         r1 = 0x37c4;
    0x00001b6e blx 0xc8c                                         |         printf_chk ()
    0x00001b72 movs r0, 1                                        |         r0 = 1;
    0x00001b74 blx 0xe58                                         |         fcn_00000e58 ();
                                                                 | label_32:
    0x00001b78 ldr r3, [pc, 0xdc]                                |         r3 = *(0x1c58);
    0x00001b7a movs r2, 0xa                                      |         r2 = 0xa;
    0x00001b7c movs r1, 0                                        |         r1 = 0;
    0x00001b7e ldr r3, [r6, r3]                                  |         r3 = *((r6 + r3));
    0x00001b80 ldr r0, [r3]                                      |         r0 = *(0x1c58);
    0x00001b82 blx 0xd44                                         |         r0 = fcn_00000d44 ();
    0x00001b86 mov r8, r0                                        |         r8 = r0;
    0x00001b88 b 0x1b36                                          |         goto label_5;
    0x00001b8a ldr.w sl, [pc, 0xd0]                              |         
    0x00001b8e mov.w sb, 0                                       |         sb = 0;
    0x00001b92 str r4, [sp, 8]                                   |         var_8h = r4;
    0x00001b94 add.w fp, r7, 1                                   |         
    0x00001b98 mov r4, sb                                        |         r4 = sb;
    0x00001b9a mov sb, r3                                        |         sb = r3;
    0x00001b9c add sl, pc                                        |         sl = 0x37fe;
    0x00001b9e b 0x1bcc                                          |         goto label_34;
                                                                 | label_6:
    0x00001ba0 ldrb.w r1, [fp, r4]                               |         r1 = *((fp + r4));
    0x00001ba4 movs r2, 0x10                                     |         r2 = 0x10;
    0x00001ba6 mov r0, sl                                        |         r0 = sl;
    0x00001ba8 blx 0xe40                                         |         r0 = fcn_00000e40 ();
    0x00001bac cmp r0, 0                                         |         
    0x00001bae beq 0x1b64                                        |         
                                                                 |     }
    0x00001bb0 add r3, sp, 0x78                                  |     r3 += var_78h_2;
    0x00001bb2 sub.w r6, r6, sl                                  |     r6 -= sl;
    0x00001bb6 add.w r2, r3, r4, lsr 1                           |     r2 = r3 + (r4 >> 1);
    0x00001bba sub.w r0, r0, sl                                  |     r0 -= sl;
    0x00001bbe adds r4, 2                                        |     r4 += 2;
    0x00001bc0 add.w r0, r0, r6, lsl 4                           |     r0 += (r6 << 4);
    0x00001bc4 cmp r4, 0x10                                      |     
    0x00001bc6 strb r0, [r2, -0x53]                              |     var_53h = r0;
                                                                 |     if (r4 == 0x10) {
    0x00001bca beq 0x1c0e                                        |         goto label_35;
                                                                 |     }
                                                                 | label_34:
    0x00001bcc ldrb r1, [r7, r4]                                 |     r1 = *((r7 + r4));
    0x00001bce movs r2, 0x10                                     |     r2 = 0x10;
    0x00001bd0 mov r0, sl                                        |     r0 = sl;
    0x00001bd2 blx 0xe40                                         |     r0 = fcn_00000e40 ();
    0x00001bd6 mov r6, r0                                        |     r6 = r0;
    0x00001bd8 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00001bda bne 0x1ba0                                        |         goto label_6;
                                                                 |     }
    0x00001bdc b 0x1b64                                          |     goto label_7;
                                                                 | label_33:
    0x00001bde ldr r3, [pc, 0x80]                                |     r3 = *(0x1c62);
    0x00001be0 movs r2, 0x1f                                     |     r2 = 0x1f;
    0x00001be2 ldr r0, [pc, 0x80]                                |     
    0x00001be4 movs r1, 1                                        |     r1 = 1;
    0x00001be6 ldr r4, [r6, r3]                                  |     r4 = *((r6 + r3));
    0x00001be8 add r0, pc                                        |     r0 = 0x3852;
    0x00001bea ldr r3, [r4]                                      |     r3 = *(r4);
    0x00001bec blx 0xd5c                                         |     fcn_00000d5c ();
    0x00001bf0 ldr r0, [pc, 0x74]                                |     
    0x00001bf2 movs r2, 9                                        |     r2 = 9;
    0x00001bf4 ldr r3, [r4]                                      |     r3 = *(r4);
    0x00001bf6 movs r1, 1                                        |     r1 = 1;
    0x00001bf8 add r0, pc                                        |     r0 = 0x3864;
    0x00001bfa blx 0xd5c                                         |     fcn_00000d5c ();
    0x00001bfe ldr r1, [r4]                                      |     r1 = *(r4);
    0x00001c00 ldr.w r0, [sb, 0xc]                               |     r0 = *((sb + 0xc));
    0x00001c04 blx 0xe7c                                         |     fcn_00000e7c ();
    0x00001c08 movs r0, 1                                        |     r0 = 1;
    0x00001c0a blx 0xe58                                         |     fcn_00000e58 ();
                                                                 | label_35:
    0x00001c0e ldr r4, [sp, 8]                                   |     r4 = var_8h;
    0x00001c10 mov r2, sb                                        |     r2 = sb;
    0x00001c12 mov r1, r5                                        |     r1 = r5;
    0x00001c14 mov r0, r4                                        |     r0 = r4;
    0x00001c16 bl 0x10f4                                         |     fcn_000010f4 (r0, r1, r2);
    0x00001c1a ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00001c1c movs r2, 0x11                                     |     r2 = 0x11;
    0x00001c1e add r0, sp, 0x14                                  |     r0 += var_14h;
    0x00001c20 ldr r6, [r3]                                      |     r6 = *(r3);
    0x00001c22 ldr.w r1, [r5, r6, lsl 2]                         |     offset_1 = r6 << 2;
                                                                 |     r1 = *((r5 + offset_1));
    0x00001c26 adds r6, 1                                        |     r6++;
    0x00001c28 blx 0xe10                                         |     fcn_00000e10 ();
    0x00001c2c add r0, sp, 0x10                                  |     r0 += var_10h;
    0x00001c2e mov r3, r5                                        |     r3 = r5;
    0x00001c30 mov r2, r4                                        |     r2 = r4;
    0x00001c32 mov r1, r8                                        |     r1 = r8;
    0x00001c34 str r6, [sp]                                      |     *(sp) = r6;
    0x00001c36 bl 0x1914                                         |     fcn_00001914 (r0, r1, r2, r3, r4);
    0x00001c3a movs r0, 0                                        |     r0 = 0;
    0x00001c3c blx 0xe58                                         |     fcn_00000e58 ();
    0x00001c40 movs r3, 0xe4                                     |     r3 = 0xe4;
    0x00001c42 movs r0, r0                                       |     
    0x00001c44 lsls r0, r4, 3                                    |     r0 = r4 << 3;
    0x00001c46 movs r0, r0                                       |     
    0x00001c48 movs r3, 0xdc                                     |     r3 = 0xdc;
    0x00001c4a movs r0, r0                                       |     
    0x00001c4c lsrs r2, r1, 0xa                                  |     r2 = r1 >> 0xa;
    0x00001c4e movs r0, r0                                       |     
    0x00001c50 lsls r0, r3, 3                                    |     r0 = r3 << 3;
    0x00001c52 movs r0, r0                                       |     
    0x00001c54 lsrs r0, r1, 9                                    |     r0 = r1 >> 9;
    0x00001c56 movs r0, r0                                       |     
    0x00001c58 lsls r0, r6, 3                                    |     r0 = r6 << 3;
    0x00001c5a movs r0, r0                                       |     
    0x00001c5c lsrs r0, r3, 3                                    |     r0 = r3 >> 3;
    0x00001c5e movs r0, r0                                       |     
    0x00001c60 lsls r4, r5, 3                                    |     r4 = r5 << 3;
    0x00001c62 movs r0, r0                                       |     
    0x00001c64 lsls r0, r4, 0x1d                                 |     r0 = r4 << 0x1d;
    0x00001c66 movs r0, r0                                       |     
    0x00001c68 lsls r0, r6, 0x1d                                 |     r0 = r6 << 0x1d;
    0x00001c6a movs r0, r0                                       |     
    0x00001c6c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00001c70 movs r3, 4                                        |     r3 = 4;
    0x00001c72 sub sp, 0x144                                     |     
    0x00001c74 mov sl, r2                                        |     sl = r2;
    0x00001c76 mov.w r8, 0                                       |     r8 = 0;
    0x00001c7a mov r5, r0                                        |     r5 = r0;
    0x00001c7c ldr.w r2, [pc, 0x4ec]                             |     
    0x00001c80 mov r4, r8                                        |     r4 = r8;
    0x00001c82 str r3, [sp, 0xc]                                 |     var_ch_2 = r3;
    0x00001c84 mov r7, r8                                        |     r7 = r8;
    0x00001c86 ldr.w r3, [pc, 0x4e8]                             |     r3 = *(0x2172);
    0x00001c8a add r2, pc                                        |     r2 = 0x3dfa;
    0x00001c8c str r1, [sp, 8]                                   |     var_8h_2 = r1;
    0x00001c8e ldr.w sb, [pc, 0x4e4]                             |     
    0x00001c92 ldr r3, [r2, r3]                                  |     
    0x00001c94 ldr.w r6, [pc, 0x4e0]                             |     
    0x00001c98 add sb, pc                                        |     sb = 0x3e12;
    0x00001c9a ldr r3, [r3]                                      |     r3 = *(0x3dfa);
    0x00001c9c str r3, [sp, 0x13c]                               |     var_13ch = r3;
    0x00001c9e mov.w r3, 0                                       |     r3 = 0;
    0x00001ca2 add r6, pc                                        |     r6 = 0x3e1e;
                                                                 |     do {
                                                                 | label_8:
    0x00001ca4 ldr r1, [sp, 8]                                   |         r1 = var_8h_2;
    0x00001ca6 mov r2, sb                                        |         r2 = sb;
    0x00001ca8 mov r0, r5                                        |         r0 = r5;
    0x00001caa blx 0xd14                                         |         r0 = fcn_00000d14 ();
    0x00001cae adds r1, r0, 1                                    |         r1 = r0 + 1;
                                                                 |         if (r1 == r0) {
    0x00001cb0 beq 0x1d7a                                        |             goto label_36;
                                                                 |         }
    0x00001cb2 sub.w r3, r0, 0x53                                |         r3 = r0 - 0x53;
    0x00001cb6 cmp r3, 0x23                                      |         
                                                                 |         if (r3 <= 0x23) {
    0x00001cb8 bhi 0x1ce2                                        |             
                                                                 |             /* switch table (36 cases) at 0x1cbe */
    0x00001cba tbb [pc, r3]                                      |             __asm ("tbb [0x00001cc0]");
                                                                 |         }
    0x00001ce2 cmp r0, 0x3f                                      |         
                                                                 |         if (r0 != 0x3f) {
    0x00001ce4 bne 0x1d62                                        |             goto label_37;
                                                                 |         }
    0x00001ce6 ldr.w r3, [pc, 0x494]                             |         r3 = *(0x217e);
    0x00001cea ldr r4, [r6, r3]                                  |         r4 = *((r6 + r3));
                                                                 | label_9:
    0x00001cec ldr.w r0, [pc, 0x490]                             |         
    0x00001cf0 movs r2, 9                                        |         r2 = 9;
    0x00001cf2 ldr r3, [r4]                                      |         r3 = *(r4);
    0x00001cf4 movs r1, 1                                        |         r1 = 1;
    0x00001cf6 add r0, pc                                        |         r0 = 0x3e7a;
    0x00001cf8 blx 0xd5c                                         |         fcn_00000d5c ();
    0x00001cfc ldr r1, [r4]                                      |         r1 = *(r4);
    0x00001cfe ldr.w r0, [sl, 0xc]                               |         r0 = *((sl + 0xc));
    0x00001d02 blx 0xe7c                                         |         fcn_00000e7c ();
    0x00001d06 movs r0, 1                                        |         r0 = 1;
    0x00001d08 blx 0xe58                                         |         fcn_00000e58 ();
    0x00001d0c ldr.w r2, [pc, 0x474]                             |         
    0x00001d10 add r2, pc                                        |         r2 = 0x3e98;
    0x00001d12 ldr r3, [r2]                                      |         r3 = *(0x3e98);
    0x00001d14 orr r3, r3, 1                                     |         r3 |= 1;
    0x00001d16 lsls r1, r0, 0xc                                  |         r1 = r0 << 0xc;
    0x00001d18 str r3, [r2]                                      |         *(r2) = r3;
    0x00001d1a b 0x1ca4                                          |         
                                                                 |     } while (1);
    0x00001d1c ldr.w r2, [pc, 0x468]                             |     
    0x00001d20 add r2, pc                                        |     r2 = 0x3eac;
    0x00001d22 ldr r3, [r2]                                      |     r3 = *(0x3eac);
    0x00001d24 orr r3, r3, 2                                     |     r3 |= 2;
    0x00001d28 str r3, [r2]                                      |     *(r2) = r3;
    0x00001d2a b 0x1ca4                                          |     goto label_8;
    0x00001d2c ldr.w r3, [pc, 0x45c]                             |     r3 = *(0x218c);
    0x00001d30 movs r2, 0xa                                      |     r2 = 0xa;
    0x00001d32 movs r1, 0                                        |     r1 = 0;
    0x00001d34 ldr r3, [r6, r3]                                  |     r3 = *((r6 + r3));
    0x00001d36 ldr r0, [r3]                                      |     r0 = *(0x218c);
    0x00001d38 blx 0xd44                                         |     fcn_00000d44 ();
    0x00001d3c str r0, [sp, 0xc]                                 |     var_ch_2 = r0;
    0x00001d3e b 0x1ca4                                          |     goto label_8;
    0x00001d40 ldr.w r3, [pc, 0x448]                             |     r3 = *(0x218c);
    0x00001d44 ldr r3, [r6, r3]                                  |     r3 = *((r6 + r3));
    0x00001d46 ldr r7, [r3]                                      |     r7 = *(0x218c);
    0x00001d48 b 0x1ca4                                          |     goto label_8;
    0x00001d4a cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00001d4c bne.w 0x2108                                      |         goto label_38;
                                                                 |     }
    0x00001d50 ldr.w r3, [pc, 0x438]                             |     r3 = *(0x218c);
    0x00001d54 mov r1, r4                                        |     r1 = r4;
    0x00001d56 movs r4, 1                                        |     r4 = 1;
    0x00001d58 ldr r3, [r6, r3]                                  |     r3 = *((r6 + r3));
    0x00001d5a ldr r0, [r3]                                      |     r0 = *(0x218c);
    0x00001d5c bl 0x14c4                                         |     fcn_000014c4 (r0, r1);
    0x00001d60 b 0x1ca4                                          |     goto label_8;
                                                                 | label_37:
    0x00001d62 ldr.w r1, [pc, 0x418]                             |     r1 = *(0x217e);
    0x00001d66 mov r3, r0                                        |     r3 = r0;
    0x00001d68 ldr.w r2, [pc, 0x424]                             |     
    0x00001d6c ldr r4, [r6, r1]                                  |     r4 = *((r6 + r1));
    0x00001d6e movs r1, 1                                        |     r1 = 1;
    0x00001d70 add r2, pc                                        |     r2 = 0x3f04;
    0x00001d72 ldr r0, [r4]                                      |     r0 = *(r4);
    0x00001d74 blx 0xd98                                         |     fcn_00000d98 ();
    0x00001d78 b 0x1cec                                          |     goto label_9;
                                                                 | label_36:
    0x00001d7a ldr.w r3, [pc, 0x418]                             |     
    0x00001d7e mov r8, r7                                        |     r8 = r7;
    0x00001d80 add r3, pc                                        |     
    0x00001d82 ldr r3, [r3, 8]                                   |     r3 = *(0x3f22);
    0x00001d84 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00001d86 beq.w 0x1efe                                      |         goto label_39;
                                                                 |     }
                                                                 | label_11:
    0x00001d8a ldr.w r3, [pc, 0x40c]                             |     r3 = *(0x219a);
    0x00001d8e mov r0, r5                                        |     r0 = r5;
    0x00001d90 ldr r1, [sp, 8]                                   |     r1 = var_8h_2;
    0x00001d92 ldr r3, [r6, r3]                                  |     r3 = *((r6 + r3));
    0x00001d94 ldr r2, [r3]                                      |     r2 = *(0x219a);
    0x00001d96 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00001d98 bl 0x10f4                                         |     fcn_000010f4 (r0, r1, r2);
                                                                 |     if (r4 != 0) {
    0x00001d9c cbnz r4, 0x1dba                                   |         goto label_40;
                                                                 |     }
    0x00001d9e ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00001da0 ldr r7, [sp, 8]                                   |     r7 = var_8h_2;
    0x00001da2 ldr.w sb, [r3]                                    |     sb = *(r3);
    0x00001da6 b 0x1db6                                          |     
                                                                 |     while (sb < r5) {
    0x00001da8 ldr.w r0, [r7, sb, lsl 2]                         |         offset_2 = sb << 2;
                                                                 |         r0 = *((r7 + offset_2));
    0x00001dac movs r1, 2                                        |         r1 = 2;
    0x00001dae add.w sb, sb, 1                                   |         sb++;
    0x00001db2 bl 0x14c4                                         |         fcn_000014c4 (r0, r1);
    0x00001db6 cmp sb, r5                                        |         
    0x00001db8 blt 0x1da8                                        |         
                                                                 |     }
                                                                 | label_40:
    0x00001dba ldr r1, [pc, 0x3e0]                               |     
    0x00001dbc movs r0, 1                                        |     r0 = 1;
    0x00001dbe add r1, pc                                        |     r1 = 0x3f60;
    0x00001dc0 blx 0xc8c                                         |     printf_chk ()
    0x00001dc4 add r3, sp, 0x74                                  |     r3 += var_74h_2;
    0x00001dc6 movs r0, 0                                        |     r0 = 0;
    0x00001dc8 mov r1, r3                                        |     r1 = r3;
    0x00001dca str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00001dcc blx 0xcf0                                         |     r0 = fcn_00000cf0 ();
    0x00001dd0 mov sl, r0                                        |     sl = r0;
    0x00001dd2 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00001dd4 beq.w 0x1f6e                                      |         goto label_41;
                                                                 |     }
    0x00001dd8 add.w sb, sp, 0x38                                |     sb += var_38h;
                                                                 | label_12:
    0x00001ddc ldr r3, [pc, 0x3c0]                               |     r3 = *(0x21a0);
    0x00001dde mov.w r1, 0x400                                   |     r1 = 0x400;
    0x00001de2 ldr.w sl, [pc, 0x3c0]                             |     
    0x00001de6 ldr r3, [r6, r3]                                  |     r3 = *((r6 + r3));
    0x00001de8 add sl, pc                                        |     sl = 0x3f92;
    0x00001dea add.w r7, sl, 0x10                                |     r7 = sl + 0x10;
    0x00001dee ldr r2, [r3]                                      |     r2 = *(0x21a0);
    0x00001df0 mov r0, r7                                        |     r0 = r7;
    0x00001df2 blx 0xc80                                         |     fgets (r0, r1, r2);
    0x00001df6 movs r1, 0                                        |     r1 = 0;
    0x00001df8 mov r6, r0                                        |     r6 = r0;
    0x00001dfa mov r2, sb                                        |     r2 = sb;
    0x00001dfc mov r0, r1                                        |     r0 = r1;
    0x00001dfe blx 0xdd4                                         |     fcn_00000dd4 ();
    0x00001e02 movs r0, 0xa                                      |     r0 = 0xa;
    0x00001e04 blx 0xc98                                         |     putchar (r0);
    0x00001e08 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00001e0a beq.w 0x2116                                      |         goto label_42;
                                                                 |     }
    0x00001e0e mov r0, r7                                        |     r0 = r7;
    0x00001e10 movs r1, 0xa                                      |     r1 = 0xa;
    0x00001e12 blx 0xcc0                                         |     r0 = fcn_00000cc0 ();
    0x00001e16 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00001e18 beq.w 0x2110                                      |         goto label_43;
                                                                 |     }
                                                                 | label_20:
    0x00001e1c ldr r3, [pc, 0x388]                               |     
    0x00001e1e movs r2, 0                                        |     r2 = 0;
    0x00001e20 strb r2, [r0]                                     |     *(r0) = r2;
    0x00001e22 add r3, pc                                        |     r3 = 0x3fce;
    0x00001e24 ldrd r6, r1, [r3, 4]                              |     __asm ("ldrd r6, r1, [r3, 4]");
    0x00001e28 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00001e2a beq.w 0x2014                                      |         goto label_44;
                                                                 |     }
    0x00001e2e ldr r3, [pc, 0x37c]                               |     
    0x00001e30 add.w fp, r6, 4                                   |     
    0x00001e34 ldr.w sb, [pc, 0x378]                             |     
    0x00001e38 adds r6, 0x1c                                     |     r6 += 0x1c;
    0x00001e3a strd r4, r5, [sp, 0x28]                           |     __asm ("strd r4, r5, [var_28h]");
    0x00001e3e mov r7, r8                                        |     r7 = r8;
    0x00001e40 add r3, pc                                        |     r3 = 0x3ff2;
    0x00001e42 str r2, [sp, 0x10]                                |     var_10h_2 = r2;
    0x00001e44 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00001e46 add r3, sp, 0xbc                                  |     r3 += var_bch;
    0x00001e48 str r3, [sp, 0x14]                                |     var_14h_2 = r3;
    0x00001e4a add r3, sp, 0xfc                                  |     r3 += var_fch;
    0x00001e4c add sb, pc                                        |     sb = .data;
    0x00001e4e mov r5, r3                                        |     r5 = r3;
                                                                 | label_14:
    0x00001e50 adds r4, r6, 1                                    |     r4 = r6 + 1;
    0x00001e52 sub.w r0, r6, 0x1c                                |     r0 = r6 - 0x1c;
    0x00001e56 mov r1, r4                                        |     r1 = r4;
    0x00001e58 sub.w sl, r6, 8                                   |     sl = r6 - 8;
    0x00001e5c bl 0x17a4                                         |     fcn_000017a4 (r0, r1, r2, r3, r4, r5, r6);
    0x00001e60 ldr.w r8, [sp, 0x14]                              |     r8 = var_14h_2;
    0x00001e64 movs r1, 0x40                                     |     r1 = 0x40;
    0x00001e66 mov r0, r4                                        |     r0 = r4;
    0x00001e68 mov r2, r8                                        |     r2 = r8;
    0x00001e6a blx 0xd2c                                         |     fcn_00000d2c ();
    0x00001e6e mov r0, r8                                        |     r0 = r8;
    0x00001e70 movs r1, 0x40                                     |     r1 = 0x40;
    0x00001e72 mov r2, r5                                        |     r2 = r5;
    0x00001e74 mov r8, fp                                        |     r8 = fp;
    0x00001e76 blx 0xd2c                                         |     fcn_00000d2c ();
    0x00001e7a mov r3, r5                                        |     r3 = r5;
    0x00001e7c ldm r3!, {r0, r1}                                 |     r0 = *(r3!);
                                                                 |     r1 = *((r3! + 4));
    0x00001e7e str r0, [r6, -0x7]                                |     *((r6 - 0x7)) = r0;
    0x00001e82 str r1, [r6, -0x3]                                |     *((r6 - 0x3)) = r1;
                                                                 |     do {
    0x00001e86 ldrb r3, [sl, 1]!                                 |         r3 = *((sl += 1));
    0x00001e8a mov r0, r8                                        |         r0 = r8;
    0x00001e8c mov.w r2, -1                                      |         r2 = -1;
    0x00001e90 movs r1, 1                                        |         r1 = 1;
    0x00001e92 add.w r8, r8, 2                                   |         r8 += 2;
    0x00001e96 str r3, [sp]                                      |         *(sp) = r3;
    0x00001e98 mov r3, sb                                        |         r3 = sb;
    0x00001e9a blx 0xdec                                         |         fcn_00000dec ();
    0x00001e9e cmp sl, r6                                        |         
    0x00001ea0 bne 0x1e86                                        |         
                                                                 |     } while (sl != r6);
    0x00001ea2 mov.w sl, 0                                       |     sl = 0;
    0x00001ea6 mvn r8, 2                                         |     r8 = ~2;
    0x00001eaa strb sl, [r6, -0x8]                               |     *((r6 - 0x8)) = sl;
    0x00001eae cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00001eb0 beq.w 0x1fc0                                      |         goto label_16;
                                                                 |     }
    0x00001eb4 ldr.w r8, [pc, 0x2fc]                             |     
    0x00001eb8 add r8, pc                                        |     r8 = 0x4070;
                                                                 |     do {
    0x00001eba mov r1, r8                                        |         r1 = r8;
    0x00001ebc mov r0, r7                                        |         r0 = r7;
    0x00001ebe blx 0xe4c                                         |         r0 = fcn_00000e4c ();
    0x00001ec2 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00001ec4 beq 0x1fae                                        |             goto label_45;
                                                                 |         }
    0x00001ec6 add.w sl, sl, 1                                   |         sl++;
    0x00001eca add.w r8, r8, 0xc                                 |         r8 += 0xc;
    0x00001ece cmp.w sl, 6                                       |         
    0x00001ed2 bne 0x1eba                                        |         
                                                                 |     } while (sl != 6);
    0x00001ed4 add.w r8, sp, 0x34                                |     r8 += var_34h;
    0x00001ed8 movs r2, 0xa                                      |     r2 = 0xa;
    0x00001eda mov r1, r8                                        |     r1 = r8;
    0x00001edc mov r0, r7                                        |     r0 = r7;
    0x00001ede blx 0xd20                                         |     fcn_00000d20 ();
    0x00001ee2 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00001ee4 mov r8, r0                                        |     r8 = r0;
    0x00001ee6 ldrb r3, [r3]                                     |     r3 = *(r3);
    0x00001ee8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00001eea beq.w 0x20b2                                      |         goto label_46;
                                                                 |     }
                                                                 | label_13:
    0x00001eee ldr r1, [pc, 0x2c8]                               |     
    0x00001ef0 mov r8, r7                                        |     r8 = r7;
    0x00001ef2 add r1, pc                                        |     r1 = 0x40b0;
                                                                 | label_22:
    0x00001ef4 mov r2, r8                                        |     r2 = r8;
    0x00001ef6 movs r0, 1                                        |     r0 = 1;
    0x00001ef8 blx 0xc8c                                         |     printf_chk ()
    0x00001efc b 0x1f68                                          |     goto label_21;
                                                                 | label_39:
    0x00001efe ldr r1, [pc, 0x2bc]                               |     
    0x00001f00 ldr r0, [pc, 0x2bc]                               |     
    0x00001f02 ldr.w sl, [pc, 0x2c0]                             |     
    0x00001f06 add r1, pc                                        |     r1 = 0x40c8;
    0x00001f08 add r0, pc                                        |     r0 = 0x40cc;
    0x00001f0a blx 0xdbc                                         |     fcn_00000dbc ();
    0x00001f0e add sl, pc                                        |     sl = 0x40d8;
    0x00001f10 mov sb, r0                                        |     sb = r0;
                                                                 | label_10:
    0x00001f12 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00001f16 beq 0x1f44                                        |         goto label_47;
                                                                 |     }
                                                                 |     do {
    0x00001f18 mov r0, sb                                        |         r0 = sb;
    0x00001f1a blx 0xda4                                         |         r0 = fcn_00000da4 ();
    0x00001f1e mov r7, r0                                        |         r7 = r0;
                                                                 |         if (r0 == 0) {
    0x00001f20 cbz r0, 0x1f44                                    |             goto label_47;
                                                                 |         }
    0x00001f22 ldr r0, [r7, 8]                                   |         r0 = *((r7 + 8));
    0x00001f24 mov r1, sl                                        |         r1 = sl;
    0x00001f26 blx 0xe4c                                         |         r0 = fcn_00000e4c ();
    0x00001f2a cmp r0, 0                                         |         
    0x00001f2c bne 0x1f18                                        |         
                                                                 |     } while (r0 != 0);
    0x00001f2e ldr r0, [r7, 4]                                   |     r0 = *((r7 + 4));
    0x00001f30 movs r1, 4                                        |     r1 = 4;
    0x00001f32 blx 0xce4                                         |     r0 = fcn_00000ce4 ();
    0x00001f36 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00001f38 bne 0x1f12                                        |         goto label_10;
                                                                 |     }
    0x00001f3a ldr r0, [r7, 4]                                   |     r0 = *((r7 + 4));
    0x00001f3c movs r1, 1                                        |     r1 = 1;
    0x00001f3e bl 0x14c4                                         |     fcn_000014c4 (r0, r1);
    0x00001f42 b 0x1f12                                          |     goto label_10;
                                                                 | label_47:
    0x00001f44 mov r0, sb                                        |     r0 = sb;
    0x00001f46 blx 0xd74                                         |     fcn_00000d74 ();
    0x00001f4a ldr r3, [pc, 0x27c]                               |     
    0x00001f4c add r3, pc                                        |     
    0x00001f4e ldr r3, [r3, 8]                                   |     r3 = imp.__aeabi_unwind_cpp_pr0;
    0x00001f50 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00001f52 bne.w 0x1d8a                                      |         goto label_11;
                                                                 |     }
    0x00001f56 ldr r0, [pc, 0x274]                               |     
    0x00001f58 ldr r3, [pc, 0x220]                               |     r3 = *(0x217c);
    0x00001f5a add r0, pc                                        |     r0 = 0x412c;
                                                                 | label_19:
    0x00001f5c ldr r3, [r6, r3]                                  |     r3 = *((r6 + r3));
    0x00001f5e movs r2, 0x19                                     |     r2 = 0x19;
    0x00001f60 movs r1, 1                                        |     r1 = 1;
    0x00001f62 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00001f64 blx 0xd5c                                         |     fcn_00000d5c ();
                                                                 | label_21:
    0x00001f68 movs r0, 1                                        |     r0 = 1;
    0x00001f6a blx 0xe58                                         |     fcn_00000e58 ();
                                                                 | label_41:
    0x00001f6e ldr.w fp, [sp, 0x1c]                              |     fp = var_1ch;
    0x00001f72 add.w sb, sp, 0x38                                |     sb += var_38h;
    0x00001f76 ldr r3, [sp, 0x80]                                |     r3 = var_80h;
    0x00001f78 mov ip, sb                                        |     
    0x00001f7a mov lr, fp                                        |     lr = fp;
    0x00001f7c bic r7, r3, 8                                     |     r7 = BIT_MASK (r3, 8);
    0x00001f80 ldm.w lr!, {r0, r1, r2, r3}                       |     r0 = *(lr!);
                                                                 |     r1 = *((lr! + 4));
                                                                 |     r2 = *((lr! + 8));
                                                                 |     r3 = *((lr! + 12));
    0x00001f84 stm.w ip!, {r0, r1, r2, r3}                       |     *(ip!) = r0;
                                                                 |     *((ip! + 4)) = r1;
                                                                 |     *((ip! + 8)) = r2;
                                                                 |     *((ip! + 12)) = r3;
    0x00001f88 ldm.w lr!, {r0, r1, r2, r3}                       |     r0 = *(lr!);
                                                                 |     r1 = *((lr! + 4));
                                                                 |     r2 = *((lr! + 8));
                                                                 |     r3 = *((lr! + 12));
    0x00001f8c stm.w ip!, {r0, r1, r2, r3}                       |     *(ip!) = r0;
                                                                 |     *((ip! + 4)) = r1;
                                                                 |     *((ip! + 8)) = r2;
                                                                 |     *((ip! + 12)) = r3;
    0x00001f90 ldm.w lr!, {r0, r1, r2, r3}                       |     r0 = *(lr!);
                                                                 |     r1 = *((lr! + 4));
                                                                 |     r2 = *((lr! + 8));
                                                                 |     r3 = *((lr! + 12));
    0x00001f94 stm.w ip!, {r0, r1, r2, r3}                       |     *(ip!) = r0;
                                                                 |     *((ip! + 4)) = r1;
                                                                 |     *((ip! + 8)) = r2;
                                                                 |     *((ip! + 12)) = r3;
    0x00001f98 ldm.w lr, {r0, r1, r2}                            |     r0 = *(lr);
                                                                 |     r1 = *((lr + 4));
                                                                 |     r2 = *((lr + 8));
    0x00001f9c stm.w ip, {r0, r1, r2}                            |     *(ip) = r0;
                                                                 |     *((ip + 4)) = r1;
                                                                 |     *((ip + 8)) = r2;
    0x00001fa0 mov r2, fp                                        |     r2 = fp;
    0x00001fa2 mov r1, sl                                        |     r1 = sl;
    0x00001fa4 mov r0, sl                                        |     r0 = sl;
    0x00001fa6 str r7, [sp, 0x80]                                |     var_80h = r7;
    0x00001fa8 blx 0xdd4                                         |     fcn_00000dd4 ();
    0x00001fac b 0x1ddc                                          |     goto label_12;
                                                                 | label_45:
    0x00001fae ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00001fb0 movs r3, 0xc                                      |     r3 = 0xc;
    0x00001fb2 mla r3, r3, sl, r2                                |     __asm ("mla r3, r3, sl, r2");
    0x00001fb6 ldr.w r8, [r3, 8]                                 |     r8 = *((r3 + 8));
    0x00001fba cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00001fbe beq 0x1eee                                        |         goto label_13;
                                                                 |     }
                                                                 | label_16:
    0x00001fc0 ldr r3, [pc, 0x20c]                               |     
    0x00001fc2 movs r2, 0x16                                     |     r2 = 0x16;
    0x00001fc4 movs r1, 1                                        |     r1 = 1;
    0x00001fc6 mov r0, r5                                        |     r0 = r5;
    0x00001fc8 str.w fp, [sp, 4]                                 |     __asm ("str.w fp, [var_4h]");
    0x00001fcc add r3, pc                                        |     r3 = 0x41a0;
    0x00001fce str r3, [sp]                                      |     *(sp) = r3;
    0x00001fd0 ldr r3, [pc, 0x200]                               |     
    0x00001fd2 add r3, pc                                        |     r3 = 0x41aa;
    0x00001fd4 blx 0xdec                                         |     fcn_00000dec ();
    0x00001fd8 ldr r2, [pc, 0x1fc]                               |     
    0x00001fda movs r3, 0                                        |     r3 = 0;
    0x00001fdc str r3, [sp]                                      |     *(sp) = r3;
    0x00001fde mov r1, r8                                        |     r1 = r8;
    0x00001fe0 mov r3, r5                                        |     r3 = r5;
    0x00001fe2 movs r0, 0xa                                      |     r0 = 0xa;
    0x00001fe4 add r2, pc                                        |     r2 = 0x41c0;
    0x00001fe6 bl 0x11d0                                         |     fcn_000011d0 (r0);
    0x00001fea adds r0, 1                                        |     r0++;
                                                                 |     if (r0 == 1) {
    0x00001fec beq 0x203c                                        |         goto label_48;
                                                                 |     }
    0x00001fee ldr r3, [pc, 0x1ec]                               |     
    0x00001ff0 add r3, pc                                        |     
    0x00001ff2 ldr r3, [r3]                                      |     r3 = imp.__aeabi_unwind_cpp_pr0;
    0x00001ff4 lsls r2, r3, 0x1e                                 |     r2 = r3 << 0x1e;
                                                                 |     if (r2 >= r3) {
    0x00001ff6 bpl 0x20f6                                        |         goto label_49;
                                                                 |     }
                                                                 | label_15:
    0x00001ff8 ldr r3, [pc, 0x1e4]                               |     
    0x00001ffa add.w fp, fp, 0x64                                |     
    0x00001ffe ldr r2, [sp, 0x10]                                |     r2 = var_10h_2;
    0x00002000 adds r6, 0x64                                     |     r6 += 0x64;
    0x00002002 add r3, pc                                        |     
    0x00002004 ldr r3, [r3, 8]                                   |     r3 = imp.__aeabi_unwind_cpp_pr0;
    0x00002006 adds r2, 1                                        |     r2++;
    0x00002008 str r2, [sp, 0x10]                                |     var_10h_2 = r2;
    0x0000200a cmp r3, r2                                        |     
                                                                 |     if (r3 > r2) {
    0x0000200c bhi.w 0x1e50                                      |         goto label_14;
                                                                 |     }
    0x00002010 ldrd r4, r5, [sp, 0x28]                           |     __asm ("ldrd r4, r5, [var_28h]");
                                                                 | label_44:
    0x00002014 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00002016 ldr r6, [r3]                                      |     r6 = *(r3);
    0x00002018 cmp r6, r5                                        |     
                                                                 |     if (r6 != r5) {
    0x0000201a beq 0x2032                                        |         
    0x0000201c cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x0000201e beq 0x2104                                        |             goto label_50;
                                                                 |         }
    0x00002020 ldr r3, [pc, 0x1c0]                               |         
    0x00002022 add r3, pc                                        |         r3 = 0x420a;
    0x00002024 ldr r0, [r3, 4]                                   |         r0 = imp.__aeabi_unwind_cpp_pr0;
                                                                 | label_18:
    0x00002026 ldr r3, [sp, 8]                                   |         r3 = var_8h_2;
    0x00002028 mov r2, r5                                        |         r2 = r5;
    0x0000202a ldr r1, [sp, 0xc]                                 |         r1 = var_ch_2;
    0x0000202c str r6, [sp]                                      |         *(sp) = r6;
    0x0000202e bl 0x1914                                         |         r0 = fcn_00001914 (r0, r1, r2, r3, r4);
                                                                 |     }
    0x00002032 bl 0x1754                                         |     fcn_00001754 ();
    0x00002036 movs r0, 0                                        |     r0 = 0;
    0x00002038 blx 0xe58                                         |     fcn_00000e58 ();
    0x0000203a invalid                                           |     
                                                                 | label_48:
    0x0000203c blx 0xe64                                         |     r0 = fcn_00000e64 ();
    0x00002040 mov sl, r0                                        |     sl = r0;
    0x00002042 ldr r0, [r0]                                      |     r0 = *(r0);
    0x00002044 cmp r0, 0x7e                                      |     
                                                                 |     if (r0 != 0x7e) {
    0x00002046 bne 0x2140                                        |         goto label_51;
                                                                 |     }
    0x00002048 add.w ip, sp, 0x78                                |     
    0x0000204c add.w lr, r6, 0x41                                |     lr = r6 + 0x41;
    0x00002050 movs r3, 1                                        |     r3 = 1;
    0x00002052 str r7, [sp, 0x18]                                |     var_18h = r7;
    0x00002054 str r3, [sp, 0x74]                                |     var_74h_2 = r3;
                                                                 |     do {
    0x00002056 ldr r0, [r4]                                      |         r0 = *(r4);
    0x00002058 adds r4, 0x10                                     |         r4 += 0x10;
    0x0000205a ldr r1, [r4, -0xc]                                |         r1 = *((r4 - 0xc));
    0x0000205e mov r7, ip                                        |         r7 = ip;
    0x00002060 ldr r2, [r4, -0x8]                                |         r2 = *((r4 - 0x8));
    0x00002064 ldr r3, [r4, -0x4]                                |         r3 = *((r4 - 0x4));
    0x00002068 cmp r4, lr                                        |         
    0x0000206a stm r7!, {r0, r1, r2, r3}                         |         *(r7!) = r0;
                                                                 |         *((r7! + 4)) = r1;
                                                                 |         *((r7! + 8)) = r2;
                                                                 |         *((r7! + 12)) = r3;
    0x0000206c mov ip, r7                                        |         
    0x0000206e bne 0x2056                                        |         
                                                                 |     } while (r4 != lr);
    0x00002070 cmn.w r8, 3                                       |     
    0x00002074 mov.w r3, 0x40                                    |     r3 = 0x40;
    0x00002078 ldr r7, [sp, 0x18]                                |     r7 = var_18h;
    0x0000207a str r3, [sp, 0xb8]                                |     var_b8h = r3;
                                                                 |     if (r8 == 3) {
    0x0000207c beq 0x20cc                                        |         goto label_52;
                                                                 |     }
                                                                 | label_17:
    0x0000207e ldr r1, [pc, 0x168]                               |     
    0x00002080 movs r3, 0x48                                     |     r3 = 0x48;
    0x00002082 str r3, [sp]                                      |     *(sp) = r3;
    0x00002084 mov r2, r5                                        |     r2 = r5;
    0x00002086 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00002088 movw r0, 0x135                                    |     r0 = 0x135;
    0x0000208c add r1, pc                                        |     r1 = 0x427a;
    0x0000208e str.w r8, [sp, 4]                                 |     __asm ("str.w r8, [var_4h]");
    0x00002092 blx 0xe28                                         |     fcn_00000e28 ();
    0x00002096 adds r0, 1                                        |     r0++;
                                                                 |     if (r0 == 1) {
    0x00002098 beq 0x2124                                        |         goto label_53;
                                                                 |     }
    0x0000209a ldr r3, [pc, 0x150]                               |     
    0x0000209c add r3, pc                                        |     
    0x0000209e ldr r3, [r3]                                      |     r3 = imp.__aeabi_unwind_cpp_pr0;
    0x000020a0 lsls r3, r3, 0x1e                                 |     r3 <<= 0x1e;
                                                                 |     if (r3 < r3) {
    0x000020a2 bmi 0x1ff8                                        |         goto label_15;
                                                                 |     }
    0x000020a4 ldr r1, [pc, 0x148]                               |     
    0x000020a6 mov r2, fp                                        |     r2 = fp;
    0x000020a8 movs r0, 1                                        |     r0 = 1;
    0x000020aa add r1, pc                                        |     r1 = 0x429e;
    0x000020ac blx 0xc8c                                         |     printf_chk ()
    0x000020b0 b 0x1ff8                                          |     goto label_15;
                                                                 | label_46:
    0x000020b2 mov r0, sl                                        |     r0 = sl;
    0x000020b4 mov r2, r3                                        |     r2 = r3;
    0x000020b6 mov r1, r8                                        |     r1 = r8;
    0x000020b8 bl 0x11d0                                         |     r0 = fcn_000011d0 (r0);
    0x000020bc cmp r0, 0                                         |     
                                                                 |     if (r0 < 0) {
    0x000020be blt.w 0x1eee                                      |         goto label_13;
                                                                 |     }
    0x000020c0 add r7, sp, 0x58                                  |     r7 = sp + 0x58;
    0x000020c2 cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x000020c6 bne.w 0x1fc0                                      |         goto label_16;
                                                                 |     }
    0x000020ca b 0x1eee                                          |     goto label_13;
                                                                 | label_52:
    0x000020cc movs r2, 0                                        |     r2 = 0;
    0x000020ce mov r1, r8                                        |     r1 = r8;
    0x000020d0 mov r0, r2                                        |     r0 = r2;
    0x000020d2 bl 0x11d0                                         |     r0 = fcn_000011d0 (r0);
    0x000020d6 subs.w r8, r0, 0                                  |     r8 = r0 - 0;
                                                                 |     if (r8 >= r0) {
    0x000020da bge 0x207e                                        |         goto label_17;
                                                                 |     }
    0x000020dc ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x000020e0 blx 0xc44                                         |     strerror (r0);
    0x000020e4 ldr r1, [pc, 0x10c]                               |     
    0x000020e6 mov r2, r0                                        |     r2 = r0;
    0x000020e8 movs r0, 1                                        |     r0 = 1;
    0x000020ea add r1, pc                                        |     r1 = 0x42e2;
    0x000020ec blx 0xc8c                                         |     printf_chk ()
    0x000020f0 movs r0, 1                                        |     r0 = 1;
    0x000020f2 blx 0xe58                                         |     fcn_00000e58 ();
                                                                 | label_49:
    0x000020f6 ldr r1, [pc, 0x100]                               |     
    0x000020f8 mov r2, fp                                        |     r2 = fp;
    0x000020fa movs r0, 1                                        |     r0 = 1;
    0x000020fc add r1, pc                                        |     r1 = 0x42fa;
    0x000020fe blx 0xc8c                                         |     printf_chk ()
    0x00002102 b 0x1ff8                                          |     goto label_15;
                                                                 | label_50:
    0x00002104 mov r0, r4                                        |     r0 = r4;
    0x00002106 b 0x2026                                          |     goto label_18;
                                                                 | label_38:
    0x00002108 ldr r0, [pc, 0xf0]                                |     
    0x0000210a ldr r3, [pc, 0x70]                                |     r3 = *(0x217e);
    0x0000210c add r0, pc                                        |     r0 = 0x430c;
    0x0000210e b 0x1f5c                                          |     goto label_19;
                                                                 | label_43:
    0x00002110 addw r0, sl, 0x40f                                |     __asm ("addw r0, sl, 0x40f");
    0x00002114 b 0x1e1c                                          |     goto label_20;
                                                                 | label_42:
    0x00002116 ldr r0, [pc, 0xe8]                                |     
    0x00002118 add r0, pc                                        |     r0 = 0x431e;
    0x0000211a blx 0xdc8                                         |     fcn_00000dc8 ();
    0x0000211e movs r0, 1                                        |     r0 = 1;
    0x00002120 blx 0xe58                                         |     fcn_00000e58 ();
                                                                 | label_53:
    0x00002124 ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x00002128 cmp r0, 0x7a                                      |     
                                                                 |     if (r0 == 0x7a) {
    0x0000212a beq 0x2162                                        |         goto label_54;
                                                                 |     }
    0x0000212c blx 0xc44                                         |     strerror (r0);
    0x00002130 ldr r1, [pc, 0xd0]                                |     
    0x00002132 mov r3, r0                                        |     r3 = r0;
    0x00002134 mov r2, fp                                        |     r2 = fp;
    0x00002136 movs r0, 1                                        |     r0 = 1;
    0x00002138 add r1, pc                                        |     r1 = 0x4340;
    0x0000213a blx 0xc8c                                         |     printf_chk ()
    0x0000213e b 0x1f68                                          |     goto label_21;
                                                                 | label_51:
    0x00002140 blx 0xc44                                         |     strerror (r0);
    0x00002144 ldr r1, [pc, 0xc0]                                |     
    0x00002146 mov r2, r0                                        |     r2 = r0;
    0x00002148 movs r0, 1                                        |     r0 = 1;
    0x0000214a mov r8, r7                                        |     r8 = r7;
    0x0000214c add r1, pc                                        |     r1 = 0x4358;
    0x0000214e blx 0xc8c                                         |     printf_chk ()
    0x00002152 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x00002156 cmp r3, 0x16                                      |     
                                                                 |     if (r3 != 0x16) {
    0x00002158 bne.w 0x1f68                                      |         goto label_21;
                                                                 |     }
    0x0000215c ldr r1, [pc, 0xac]                                |     
    0x0000215e add r1, pc                                        |     r1 = 0x436e;
    0x00002160 b 0x1ef4                                          |     goto label_22;
                                                                 | label_54:
    0x00002162 ldr r0, [pc, 0xac]                                |     
    0x00002164 add r0, pc                                        |     r0 = 0x437a;
    0x00002166 blx 0xdc8                                         |     fcn_00000dc8 ();
    0x0000216a b 0x1f68                                          |     goto label_21;
                                                                 | }

[*] Function printf used 19 times e4crypt