[*] Binary protection state of ubiformat

  
  	Partial RELRO  No Canary found   NX disabled  No PIE       No RPATH     No RUNPATH   No Symbols


[*] Function printf tear down of ubiformat

    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/ubiformat @ 0x125e8 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.000125e8 ()                      | void fcn_000125e8 (int32_t arg1) {
                                                 |     int32_t var_0h;
                                                 |     char * s2;
                                                 |     int32_t var_48h;
                                                 |     r0 = arg1;
    0x000125e8 push {r4, r5, r6, r7, r8, lr}     |     
    0x000125ec ldr r7, [pc, 0xb4]                |     r7 = *(0x126a4);
    0x000125f0 ldr r8, [pc, 0xb4]                |     r8 = "ubiformat";
    0x000125f4 ldr r6, [pc, 0xb4]                |     r6 = "_s:__s___c__c__";
    0x000125f8 sub sp, sp, 0x48                  |     
    0x000125fc mov r5, r0                        |     r5 = r0;
                                                 | label_0:
    0x00012600 mov r3, 0x4e                      |     r3 = 0x4e;
    0x00012604 mov r2, r5                        |     r2 = r5;
    0x00012608 mov r1, r7                        |     r1 = r7;
    0x0001260c str r3, [sp]                      |     *(sp) = r3;
    0x00012610 mov r0, r8                        |     r0 = r8;
    0x00012614 mov r3, 0x79                      |     r3 = 0x79;
    0x00012618 bl 0x10bbc                        |     printf (r0, r1, r2, r3, r4, r5, "_s:__s___c__c__")
    0x0001261c ldr r0, [r6]                      |     r0 = *(r6);
    0x00012620 bl 0x10c40                        |     fflush (r0);
    0x00012624 ldr r3, [pc, 0x88]                |     r3 = stdout;
    0x00012628 mov r1, 0x40                      |     r1 = 0x40;
    0x0001262c ldr r2, [r3]                      |     r2 = stdout;
    0x00012630 add r0, sp, 8                     |     r0 += s2;
    0x00012634 bl 0x10bf8                        |     fgets (r0, r1, r2);
    0x00012638 subs r4, r0, 0                    |     r4 -= s2;
                                                 |     if (r4 != s2) {
    0x0001263c bne 0x12654                       |         goto label_3;
                                                 |     }
    0x00012640 ldr r1, [pc, 0x70]                |     r1 = stdin;
    0x00012644 ldr r0, [pc, 0x70]                |     r0 = "no";
    0x00012648 bl 0x10bbc                        |     printf ("no", r1)
                                                 |     do {
                                                 | label_1:
    0x0001264c mov r0, 0                         |         r0 = 0;
    0x00012650 b 0x126a0                         |         goto label_4;
                                                 | label_3:
    0x00012654 add r1, sp, 8                     |         r1 += s2;
    0x00012658 ldr r0, [pc, 0x60]                |         r0 = "failed to read prompt; assuming '%s'\n";
    0x0001265c bl 0x10d48                        |         r0 = strcmp ("failed to read prompt; assuming '%s'\n", r1);
    0x00012660 cmp r0, 0                         |         
                                                 |         if (r0 == 0) {
    0x00012664 beq 0x126a0                       |             goto label_4;
                                                 |         }
    0x00012668 ldrb r3, [sp, 8]                  |         r3 = s2;
    0x0001266c cmp r3, 0x59                      |         
                                                 |         if (r3 == 0x59) {
    0x00012670 beq 0x1269c                       |             goto label_5;
                                                 |         }
                                                 |         if (r3 > 0x59) {
    0x00012674 bhi 0x1268c                       |             goto label_6;
                                                 |         }
    0x00012678 cmp r3, 0x4e                      |         
    0x0001267c beq 0x1264c                       |         
                                                 |     } while (r3 == 0x4e);
                                                 | label_2:
    0x00012680 ldr r0, [pc, 0x3c]                |     r0 = *(0x126c0);
    0x00012684 bl 0x10c1c                        |     puts (r0);
    0x00012688 b 0x12600                         |     goto label_0;
                                                 | label_6:
    0x0001268c cmp r3, 0x6e                      |     
                                                 |     if (r3 == 0x6e) {
    0x00012690 beq 0x1264c                       |         goto label_1;
                                                 |     }
    0x00012694 cmp r3, 0x79                      |     
                                                 |     if (r3 != 0x79) {
    0x00012698 bne 0x12680                       |         goto label_2;
                                                 |     }
                                                 | label_5:
    0x0001269c mov r0, 1                         |     r0 = 1;
                                                 | label_4:
    0x000126a0 add sp, sp, 0x48                  |     
    0x000126a4 pop {r4, r5, r6, r7, r8, pc}      |     
                                                 | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/ubiformat @ 0x126e4 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.000126e4 ()                          | void fcn_000126e4 (char * * arg1, int32_t arg2) {
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
    0x000126e4 push {r4, r5, r6, r7, r8, lr}         |     
    0x000126e8 ldr r4, [pc, 0x12c]                   |     r4 = *(0x12818);
    0x000126ec mov r7, r0                            |     r7 = r0;
    0x000126f0 ldrb r3, [r4]                         |     r3 = *(r4);
    0x000126f4 mov r6, r1                            |     r6 = r1;
    0x000126f8 tst r3, 1                             |     
    0x000126fc mov r5, r2                            |     r5 = r2;
    0x00012700 beq 0x1276c                           |     
                                                     |     while (r0 != 0) {
    0x00012704 ldrb r3, [r4]                         |         r3 = *(r4);
    0x00012708 tst r3, 2                             |         
                                                     |         if ((r3 & 2) == 0) {
    0x0001270c bne 0x12720                           |             
    0x00012710 mov r2, r5                            |             r2 = r5;
    0x00012714 ldr r1, [pc, 0x104]                   |             r1 = *(0x1281c);
    0x00012718 ldr r0, [pc, 0x104]                   |             r0 = "ubiformat";
    0x0001271c bl 0x10bbc                            |             printf ("ubiformat", r1, r2)
                                                     |         }
    0x00012720 ldrb r3, [r4]                         |         r3 = *(r4);
    0x00012724 tst r3, 2                             |         
                                                     |         if ((r3 & 2) == 0) {
    0x00012728 bne 0x12734                           |             
    0x0001272c mov r0, 0xa                           |             r0 = 0xa;
    0x00012730 bl 0x10b98                            |             putchar (r0);
                                                     |         }
    0x00012734 ldrb r3, [r7, 0xfc]                   |         r3 = *((r7 + 0xfc));
    0x00012738 tst r3, 2                             |         
                                                     |         if ((r3 & 2) != 0) {
    0x0001273c bne 0x12784                           |             goto label_0;
                                                     |         }
    0x00012740 ldrb r3, [r4]                         |         r3 = *(r4);
    0x00012744 tst r3, 2                             |         
                                                     |         if ((r3 & 2) == 0) {
    0x00012748 bne 0x12754                           |             
    0x0001274c mov r0, 0xa                           |             r0 = 0xa;
    0x00012750 bl 0x10b98                            |             putchar (r0);
                                                     |         }
    0x00012754 ldr r3, [pc, 0xcc]                    |         r3 = "_s:_marking_block__d_bad";
    0x00012758 ldr r2, [pc, 0xc0]                    |         r2 = *(0x1281c);
    0x0001275c ldr r1, [pc, 0xc8]                    |         r1 = stderr;
    0x00012760 ldr r0, [r3]                          |         r0 = "_s:_marking_block__d_bad";
    0x00012764 bl 0x10c7c                            |         fprintf ("_s:_marking_block__d_bad", r1, r2, "_s:_marking_block__d_bad")
    0x00012768 b 0x1277c                             |         goto label_1;
    0x0001276c ldr r0, [pc, 0xbc]                    |         r0 = "%s: error!: bad blocks not supported by this flash\n";
    0x00012770 bl 0x125e8                            |         r0 = fcn_000125e8 ("%s: error!: bad blocks not supported by this flash\n");
    0x00012774 cmp r0, 0                             |         
    0x00012778 bne 0x12704                           |         
                                                     |     }
                                                     |     do {
                                                     | label_1:
    0x0001277c mvn r0, 0                             |         r0 = ~0;
    0x00012780 pop {r4, r5, r6, r7, r8, pc}          |         
                                                     | label_0:
    0x00012784 mov r2, r5                            |         r2 = r5;
    0x00012788 ldr r1, [r4, 0x30]                    |         r1 = *((r4 + 0x30));
    0x0001278c mov r0, r7                            |         r0 = r7;
    0x00012790 bl 0x17964                            |         r0 = fcn_00017964 (r0, r1);
    0x00012794 cmp r0, 0                             |         
    0x00012798 popne {r4, r5, r6, r7, r8, pc}        |         
    0x0001279c ldr r3, [r6, 0x20]                    |         r3 = *((r6 + 0x20));
    0x000127a0 mvn r2, 3                             |         r2 = ~3;
    0x000127a4 add r3, r3, 1                         |         r3++;
    0x000127a8 str r3, [r6, 0x20]                    |         *((r6 + 0x20)) = r3;
    0x000127ac ldr r3, [r6]                          |         r3 = *(r6);
    0x000127b0 str r2, [r3, r5, lsl 2]               |         offset_0 = r5 << 2;
                                                     |         *((r3 + offset_0)) = r2;
    0x000127b4 ldr r3, [r4, 0x38]                    |         r3 = *((r4 + 0x38));
    0x000127b8 cmn r3, 1                             |         
                                                     |         if (r3 != 1) {
    0x000127bc streq r5, [r4, 0x38]                  |             *((r4 + 0x38)) = r5;
                                                     |         }
    0x000127c0 ldr r3, [r4, 0x38]                    |         r3 = *((r4 + 0x38));
    0x000127c4 str r5, [r4, 0x38]                    |         *((r4 + 0x38)) = r5;
    0x000127c8 add r3, r3, 1                         |         r3++;
    0x000127cc cmp r5, r3                            |         
                                                     |         if (r5 != r3) {
    0x000127d0 ldreq r3, [r4, 0x3c]                  |             r3 = *((r4 + 0x3c));
                                                     |         }
                                                     |         if (r5 == r3) {
    0x000127d4 movne r3, 1                           |             r3 = 1;
                                                     |         }
                                                     |         if (r5 != r3) {
    0x000127d8 addeq r3, r3, 1                       |             r3++;
                                                     |         }
    0x000127dc str r3, [r4, 0x3c]                    |         *((r4 + 0x3c)) = r3;
    0x000127e0 ldr r3, [r4, 0x3c]                    |         r3 = *((r4 + 0x3c));
    0x000127e4 cmp r3, 3                             |         
                                                     |         if (r3 > 3) {
    0x000127e8 pople {r4, r5, r6, r7, r8, pc}        |             
                                                     |         }
    0x000127ec ldrb r3, [r4]                         |         r3 = *(r4);
    0x000127f0 tst r3, 2                             |         
                                                     |         if ((r3 & 2) == 0) {
    0x000127f4 bne 0x12800                           |             
    0x000127f8 mov r0, 0xa                           |             r0 = 0xa;
    0x000127fc bl 0x10b98                            |             putchar (r0);
                                                     |         }
    0x00012800 ldr r0, [pc, 0x20]                    |         
    0x00012804 mov r3, 4                             |         r3 = 4;
    0x00012808 ldr r2, [pc, 0x10]                    |         r2 = *(0x1281c);
    0x0001280c ldr r1, [pc, 0x20]                    |         r1 = "mark_it_as_bad_";
    0x00012810 ldr r0, [r0]                          |         r0 = "_s:_marking_block__d_bad";
    0x00012814 bl 0x10c7c                            |         fprintf ("_s:_marking_block__d_bad", "mark_it_as_bad_", r2, r3)
    0x00012818 b 0x1277c                             |         
                                                     |     } while (1);
                                                     | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/ubiformat @ 0x12838 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.00012838 ()                                  | void fcn_00012838 (int32_t arg_30h, FILE * stream, int32_t arg_6ch, int32_t arg1, char * * arg2) {
                                                             |     int32_t var_0h;
                                                             |     int32_t var_4h;
                                                             |     int32_t var_8h;
                                                             |     int32_t var_ch;
                                                             |     int32_t var_10h;
                                                             |     int32_t var_14h;
                                                             |     int32_t var_1ch;
                                                             |     int32_t var_20h;
                                                             |     int32_t var_24h;
                                                             |     void * ptr;
                                                             |     int32_t var_2ch;
                                                             |     int32_t var_30h;
                                                             |     int32_t var_34h;
                                                             |     int32_t var_38h;
                                                             |     int32_t var_3ch;
                                                             |     int32_t var_44h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x00012838 push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x0001283c ldr r4, [r1, 0xec]                            |     r4 = *((r1 + 0xec));
    0x00012840 sub sp, sp, 0x44                              |     
    0x00012844 str r0, [sp, 0x2c]                            |     var_2ch = r0;
    0x00012848 mov r6, r1                                    |     r6 = r1;
    0x0001284c add r0, r4, 0x3f                              |     r0 = r4 + 0x3f;
    0x00012850 mov r1, r4                                    |     r1 = r4;
    0x00012854 str r2, [sp, 0x30]                            |     var_30h = r2;
    0x00012858 str r3, [sp, 0x24]                            |     var_24h = r3;
    0x0001285c bl 0x199d4                                    |     r0 = fcn_000199d4 (r0, r1);
    0x00012860 mul r3, r0, r4                                |     r3 = r0 * r4;
    0x00012864 mov r0, r3                                    |     r0 = r3;
    0x00012868 str r3, [sp, 0x20]                            |     var_20h = r3;
    0x0001286c bl 0x10c28                                    |     r0 = malloc (r0);
    0x00012870 subs r3, r0, 0                                |     r3 = r0 - 0;
    0x00012874 str r3, [sp, 0x28]                            |     ptr = r3;
                                                             |     if (r3 == r0) {
    0x00012878 bne 0x128cc                                   |         
    0x0001287c bl 0x10d78                                    |         errno_location ();
    0x00012880 ldr r5, [pc, 0x450]                           |         
    0x00012884 ldr r3, [sp, 0x20]                            |         r3 = var_20h;
    0x00012888 ldr r2, [pc, 0x44c]                           |         r2 = stderr;
    0x0001288c ldr r1, [pc, 0x44c]                           |         r1 = "ubiformat";
    0x00012890 ldr r4, [r0]                                  |         r4 = *(r0);
    0x00012894 ldr r0, [r5]                                  |         r0 = *(0x12cd4);
    0x00012898 bl 0x10c7c                                    |         fprintf (r0, "ubiformat", r2, r3, r4, r5)
    0x0001289c mov r0, r4                                    |         r0 = r4;
    0x000128a0 ldr r5, [r5]                                  |         r5 = *(0x12cd4);
    0x000128a4 bl 0x10bc8                                    |         strerror (r0);
    0x000128a8 str r4, [sp]                                  |         *(sp) = r4;
    0x000128ac ldr r3, [pc, 0x430]                           |         r3 = "_s:_error_:_cannot_allocate__d_bytes_of_memory";
    0x000128b0 mov r2, 0xb                                   |         r2 = 0xb;
    0x000128b4 ldr r1, [pc, 0x42c]                           |         r1 = *(0x12ce4);
    0x000128b8 str r0, [sp, 4]                               |         var_4h = r0;
    0x000128bc mov r0, r5                                    |         r0 = r5;
    0x000128c0 bl 0x10c7c                                    |         fprintf (r0, r1, r2, "_s:_error_:_cannot_allocate__d_bytes_of_memory", r4)
                                                             | label_1:
    0x000128c4 mvn r5, 0                                     |         r5 = ~0;
    0x000128c8 b 0x12ccc                                     |         goto label_5;
                                                             |     }
    0x000128cc ldr r2, [sp, 0x20]                            |     r2 = var_20h;
    0x000128d0 mov r1, 0xff                                  |     r1 = 0xff;
    0x000128d4 bl 0x10d18                                    |     memset (r0, r1, r2);
    0x000128d8 ldr r5, [pc, 0x40c]                           |     r5 = "_serror__d___s_";
    0x000128dc ldr r4, [sp, 0x68]                            |     r4 = *(stream);
    0x000128e0 mvn r7, 0                                     |     r7 = ~0;
    0x000128e4 mov r8, r7                                    |     r8 = r7;
    0x000128e8 str r7, [sp, 0x3c]                            |     var_3ch = r7;
    0x000128ec str r7, [sp, 0x34]                            |     var_34h = r7;
    0x000128f0 str r7, [sp, 0x38]                            |     var_38h = r7;
    0x000128f4 str r7, [sp, 0x1c]                            |     var_1ch = r7;
                                                             |     do {
    0x000128f8 ldr r2, [r6, 0xe0]                            |         r2 = *((r6 + 0xe0));
    0x000128fc ldrb r3, [r5]                                 |         r3 = *(r5);
    0x00012900 cmp r2, r4                                    |         
    0x00012904 and r3, r3, 6                                 |         r3 &= 6;
                                                             |         if (r2 <= r4) {
    0x00012908 bgt 0x12950                                   |             
    0x0001290c cmp r3, 0                                     |             
                                                             |             if (r3 == 0) {
    0x00012910 bne 0x1291c                                   |                 
    0x00012914 mov r0, 0xa                                   |                 r0 = 0xa;
    0x00012918 bl 0x10b98                                    |                 putchar (r0);
                                                             |             }
    0x0001291c ldr r3, [sp, 0x6c]                            |             r3 = *(arg_6ch);
    0x00012920 cmp r3, 0                                     |             
                                                             |             if (r3 != 0) {
    0x00012924 bne 0x12c0c                                   |                 goto label_3;
                                                             |             }
    0x00012928 ldr r3, [sp, 0x1c]                            |             r3 = var_1ch;
    0x0001292c cmn r8, 1                                     |             
    0x00012930 cmnne r3, 1                                   |             __asm ("cmnne r3, 1");
                                                             |             if (r8 != 1) {
    0x00012934 bne 0x12c38                                   |                 goto label_6;
                                                             |             }
    0x00012938 ldr r2, [pc, 0x39c]                           |             r2 = stderr;
    0x0001293c ldr r1, [pc, 0x3ac]                           |             r1 = *(0x12cec);
                                                             | label_4:
    0x00012940 ldr r3, [pc, 0x390]                           |             r3 = *(0x12cd4);
    0x00012944 ldr r0, [r3]                                  |             r0 = *(0x12cd4);
    0x00012948 bl 0x10c7c                                    |             fprintf (r0, r1, r2, r3)
    0x0001294c b 0x12c0c                                     |             goto label_3;
                                                             |         }
    0x00012950 cmp r3, 0                                     |         
                                                             |         if (r3 == 0) {
    0x00012954 bne 0x129a0                                   |             
    0x00012958 ldr r3, [sp, 0x68]                            |             r3 = *(stream);
    0x0001295c mov r0, 0x64                                  |             r0 = 0x64;
    0x00012960 rsb r1, r3, 1                                 |             r1 = 1 - r3;
    0x00012964 add r1, r1, r4                                |             r1 += r4;
    0x00012968 smull sl, fp, r1, r0                          |             sl:fp = r1 * r0;
    0x0001296c sub r2, r2, r3                                |             r2 -= r3;
    0x00012970 asr r3, r2, 0x1f                              |             r3 = r2 >> 0x1f;
    0x00012974 mov r0, sl                                    |             r0 = sl;
    0x00012978 mov r1, fp                                    |             r1 = fp;
    0x0001297c bl 0x19ad0                                    |             fcn_00019ad0 (r0);
    0x00012980 mov r3, r1                                    |             r3 = r1;
    0x00012984 mov r2, r0                                    |             r2 = r0;
    0x00012988 mov r1, r4                                    |             r1 = r4;
    0x0001298c ldr r0, [pc, 0x360]                           |             r0 = "_s:_error_:_no_eraseblocks_for_volume_table";
    0x00012990 bl 0x10bbc                                    |             printf ("_s:_error_:_no_eraseblocks_for_volume_table", r1, r2, r3)
    0x00012994 ldr r3, [pc, 0x35c]                           |             r3 = "ubiformat:_formatting_eraseblock__d_____2lld____complete__";
    0x00012998 ldr r0, [r3]                                  |             r0 = "ubiformat:_formatting_eraseblock__d_____2lld____complete__";
    0x0001299c bl 0x10c40                                    |             fflush ("ubiformat:_formatting_eraseblock__d_____2lld____complete__");
                                                             |         }
    0x000129a0 ldr r3, [sp, 0x24]                            |         r3 = var_24h;
    0x000129a4 ldr r3, [r3]                                  |         r3 = *(r3);
    0x000129a8 ldr sl, [r3, r4, lsl 2]                       |         offset_0 = r4 << 2;
                                                             |         sl = *((r3 + offset_0));
    0x000129ac cmn sl, 4                                     |         
                                                             |         if (sl != 4) {
    0x000129b0 beq 0x12b14                                   |             
    0x000129b4 ldrb sb, [r5]                                 |             sb = *(r5);
    0x000129b8 ands sb, sb, 8                                |             sb &= 8;
                                                             |             if (sb == sb) {
    0x000129bc ldrne sl, [r5, 0x20]                          |                 sl = *((r5 + 0x20));
                                                             |             }
                                                             |             if (sb == sb) {
    0x000129c0 ldrne sb, [r5, 0x24]                          |                 sb = *((r5 + 0x24));
                                                             |             }
                                                             |             if (sb == sb) {
    0x000129c4 bne 0x129dc                                   |                 
    0x000129c8 cmp sl, 0                                     |                 
                                                             |                 if (sl >= 0) {
    0x000129cc ldrlt r3, [sp, 0x24]                          |                     r3 = var_24h;
                                                             |                 }
                                                             |                 if (sl < 0) {
    0x000129d0 addge sl, sl, 1                               |                     sl++;
                                                             |                 }
                                                             |                 if (sl >= 0) {
    0x000129d4 ldrlt sl, [r3, 8]                             |                     sl = *((r3 + 8));
                                                             |                 }
                                                             |                 if (sl < 0) {
    0x000129d8 ldrlt sb, [r3, 0xc]                           |                     sb = *((r3 + 0xc));
                                                             |                     goto label_7;
                                                             |                 }
                                                             |             }
                                                             | label_7:
    0x000129dc mov r3, sb                                    |             r3 = sb;
    0x000129e0 mov r2, sl                                    |             r2 = sl;
    0x000129e4 ldr r1, [sp, 0x28]                            |             r1 = ptr;
    0x000129e8 ldr r0, [sp, 0x30]                            |             r0 = var_30h;
    0x000129ec bl 0x1538c                                    |             fcn_0001538c (r0, r1);
    0x000129f0 ldrb r3, [r5]                                 |             r3 = *(r5);
    0x000129f4 tst r3, 4                                     |             
                                                             |             if ((r3 & 4) != 0) {
    0x000129f8 beq 0x12a18                                   |                 
    0x000129fc mov r2, r4                                    |                 r2 = r4;
    0x00012a00 ldr r1, [pc, 0x2d4]                           |                 r1 = stderr;
    0x00012a04 ldr r0, [pc, 0x2f0]                           |                 r0 = stdout;
    0x00012a08 bl 0x10bbc                                    |                 printf (r0, r1, r2)
    0x00012a0c ldr r3, [pc, 0x2e4]                           |                 r3 = "ubiformat:_formatting_eraseblock__d_____2lld____complete__";
    0x00012a10 ldr r0, [r3]                                  |                 r0 = "ubiformat:_formatting_eraseblock__d_____2lld____complete__";
    0x00012a14 bl 0x10c40                                    |                 fflush ("ubiformat:_formatting_eraseblock__d_____2lld____complete__");
                                                             |             }
    0x00012a18 ldr fp, [pc, 0x2cc]                           |             fp = *(0x00012cec);
    0x00012a1c mov r3, r4                                    |             r3 = r4;
    0x00012a20 ldr r2, [fp, 0x30]                            |             r2 = *(arg_30h);
    0x00012a24 mov r1, r6                                    |             r1 = r6;
    0x00012a28 ldr r0, [sp, 0x2c]                            |             r0 = var_2ch;
    0x00012a2c bl 0x177c0                                    |             fcn_000177c0 ();
    0x00012a30 ldrb r3, [fp]                                 |             r3 = *(fp);
    0x00012a34 cmp r0, 0                                     |             
                                                             |             if (r0 != 0) {
    0x00012a38 beq 0x12ac0                                   |                 
    0x00012a3c tst r3, 2                                     |                 
                                                             |                 if ((r3 & 2) == 0) {
    0x00012a40 bne 0x12a4c                                   |                     
    0x00012a44 mov r0, 0xa                                   |                     r0 = 0xa;
    0x00012a48 bl 0x10b98                                    |                     r0 = putchar (r0);
                                                             |                 }
    0x00012a4c bl 0x10d78                                    |                 errno_location ();
    0x00012a50 ldr fp, [pc, 0x280]                           |                 fp = obj.stderr;
    0x00012a54 mov r3, r4                                    |                 r3 = r4;
    0x00012a58 ldr r2, [pc, 0x27c]                           |                 r2 = stderr;
    0x00012a5c ldr r1, [pc, 0x29c]                           |                 r1 = "_s:_eraseblock__d:_erase";
    0x00012a60 ldr sl, [r0]                                  |                 sl = *(r0);
    0x00012a64 mov sb, r0                                    |                 sb = r0;
    0x00012a68 ldr r0, [fp]                                  |                 r0 = *(fp);
    0x00012a6c bl 0x10c7c                                    |                 fprintf (r0, "_s:_eraseblock__d:_erase", r2, r3)
    0x00012a70 mov r0, sl                                    |                 r0 = sl;
    0x00012a74 ldr fp, [fp]                                  |                 fp = *(fp);
    0x00012a78 bl 0x10bc8                                    |                 strerror (r0);
    0x00012a7c ldr r3, [pc, 0x260]                           |                 r3 = "_s:_error_:_cannot_allocate__d_bytes_of_memory";
    0x00012a80 str sl, [sp]                                  |                 *(sp) = sl;
    0x00012a84 mov r2, 0xb                                   |                 r2 = 0xb;
    0x00012a88 ldr r1, [pc, 0x258]                           |                 r1 = *(0x12ce4);
    0x00012a8c str r0, [sp, 4]                               |                 var_4h = r0;
    0x00012a90 mov r0, fp                                    |                 r0 = fp;
    0x00012a94 bl 0x10c7c                                    |                 fprintf (r0, r1, r2, "_s:_error_:_cannot_allocate__d_bytes_of_memory")
    0x00012a98 ldr r3, [sb]                                  |                 r3 = *(sb);
    0x00012a9c cmp r3, 5                                     |                 
                                                             |                 if (r3 != 5) {
    0x00012aa0 bne 0x12c0c                                   |                     goto label_3;
                                                             |                 }
                                                             | label_2:
    0x00012aa4 mov r2, r4                                    |                 r2 = r4;
    0x00012aa8 ldr r1, [sp, 0x24]                            |                 r1 = var_24h;
    0x00012aac mov r0, r6                                    |                 r0 = r6;
    0x00012ab0 bl 0x126e4                                    |                 r0 = fcn_000126e4 (r0, r1);
    0x00012ab4 cmp r0, 0                                     |                 
                                                             |                 if (r0 == 0) {
    0x00012ab8 beq 0x12b14                                   |                     goto label_0;
                                                             |                 }
    0x00012abc b 0x12c0c                                     |                 goto label_3;
                                                             |             }
    0x00012ac0 ldr r2, [sp, 0x1c]                            |             r2 = var_1ch;
    0x00012ac4 ldr r1, [sp, 0x6c]                            |             r1 = *(arg_6ch);
    0x00012ac8 cmn r8, 1                                     |             
    0x00012acc cmnne r2, 1                                   |             __asm ("cmnne r2, 1");
                                                             |             if (r8 != 1) {
    0x00012ad0 moveq r2, 1                                   |                 r2 = 1;
                                                             |             }
                                                             |             if (r8 == 1) {
    0x00012ad4 movne r2, 0                                   |                 r2 = 0;
                                                             |             }
    0x00012ad8 eor r1, r1, 1                                 |             r1 ^= 1;
    0x00012adc tst r1, r2                                    |             
    0x00012ae0 and r3, r3, 4                                 |             r3 &= 4;
                                                             |             if ((r1 & r2) == 0) {
    0x00012ae4 beq 0x12b1c                                   |                 goto label_8;
                                                             |             }
    0x00012ae8 cmn r8, 1                                     |             
                                                             |             if (r8 != 1) {
    0x00012aec streq sl, [sp, 0x34]                          |                 var_34h = sl;
                                                             |             }
                                                             |             if (r8 != 1) {
    0x00012af0 streq sb, [sp, 0x38]                          |                 var_38h = sb;
                                                             |             }
                                                             |             if (r8 != 1) {
    0x00012af4 moveq r8, r4                                  |                 r8 = r4;
                                                             |             }
                                                             |             if (r8 == 1) {
    0x00012af8 movne r7, sl                                  |                 r7 = sl;
                                                             |             }
                                                             |             if (r8 == 1) {
    0x00012afc strne sb, [sp, 0x3c]                          |                 var_3ch = sb;
                                                             |             }
                                                             |             if (r8 == 1) {
    0x00012b00 strne r4, [sp, 0x1c]                          |                 var_1ch = r4;
                                                             |             }
    0x00012b04 cmp r3, 0                                     |             
                                                             |             if (r3 == 0) {
    0x00012b08 beq 0x12b14                                   |                 goto label_0;
                                                             |             }
    0x00012b0c ldr r0, [pc, 0x1f0]                           |             r0 = "%s: error!: failed to erase eraseblock %d\n";
    0x00012b10 bl 0x10c1c                                    |             puts ("%s: error!: failed to erase eraseblock %d\n");
                                                             |         }
                                                             | label_0:
    0x00012b14 add r4, r4, 1                                 |         r4++;
    0x00012b18 b 0x128f8                                     |         
                                                             |     } while (1);
                                                             | label_8:
    0x00012b1c cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x00012b20 beq 0x12b40                                   |         
    0x00012b24 mov r3, sb                                    |         r3 = sb;
    0x00012b28 mov r2, sl                                    |         r2 = sl;
    0x00012b2c ldr r0, [pc, 0x1d4]                           |         r0 = "__do_not_write_EC__leave_for_vtbl";
    0x00012b30 bl 0x10bbc                                    |         printf ("__do_not_write_EC__leave_for_vtbl", r1, r2, r3)
    0x00012b34 ldr r3, [pc, 0x1bc]                           |         r3 = "ubiformat:_formatting_eraseblock__d_____2lld____complete__";
    0x00012b38 ldr r0, [r3]                                  |         r0 = "ubiformat:_formatting_eraseblock__d_____2lld____complete__";
    0x00012b3c bl 0x10c40                                    |         fflush ("ubiformat:_formatting_eraseblock__d_____2lld____complete__");
                                                             |     }
    0x00012b40 ldr r2, [sp, 0x20]                            |     r2 = var_20h;
    0x00012b44 mov r3, 0                                     |     r3 = 0;
    0x00012b48 str r2, [sp, 8]                               |     var_8h = r2;
    0x00012b4c ldr r2, [sp, 0x28]                            |     r2 = ptr;
    0x00012b50 str r3, [sp, 0x14]                            |     var_14h = r3;
    0x00012b54 str r3, [sp, 0x10]                            |     var_10h = r3;
    0x00012b58 str r3, [sp, 0xc]                             |     var_ch = r3;
    0x00012b5c str r3, [sp]                                  |     *(sp) = r3;
    0x00012b60 str r2, [sp, 4]                               |     var_4h = r2;
    0x00012b64 mov r3, r4                                    |     r3 = r4;
    0x00012b68 ldr r2, [r5, 0x30]                            |     r2 = *((r5 + 0x30));
    0x00012b6c mov r1, r6                                    |     r1 = r6;
    0x00012b70 ldr r0, [sp, 0x2c]                            |     r0 = var_2ch;
    0x00012b74 bl 0x17c0c                                    |     r0 = fcn_00017c0c (r0, r1, r2, r3, r4, r5, r6);
    0x00012b78 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00012b7c beq 0x12b14                                   |         goto label_0;
                                                             |     }
    0x00012b80 ldrb r3, [r5]                                 |     r3 = *(r5);
    0x00012b84 tst r3, 6                                     |     
                                                             |     if ((r3 & 6) == 0) {
    0x00012b88 bne 0x12b94                                   |         
    0x00012b8c mov r0, 0xa                                   |         r0 = 0xa;
    0x00012b90 bl 0x10b98                                    |         r0 = putchar (r0);
                                                             |     }
    0x00012b94 bl 0x10d78                                    |     errno_location ();
    0x00012b98 ldr fp, [pc, 0x138]                           |     fp = obj.stderr;
    0x00012b9c ldr r3, [sp, 0x20]                            |     r3 = var_20h;
    0x00012ba0 ldr r2, [pc, 0x134]                           |     r2 = stderr;
    0x00012ba4 ldr r1, [pc, 0x160]                           |     r1 = "__write_EC__lld";
    0x00012ba8 ldr sl, [r0]                                  |     sl = *(r0);
    0x00012bac str r4, [sp]                                  |     *(sp) = r4;
    0x00012bb0 mov sb, r0                                    |     sb = r0;
    0x00012bb4 ldr r0, [fp]                                  |     r0 = *(fp);
    0x00012bb8 bl 0x10c7c                                    |     fprintf (r0, "__write_EC__lld", r2, r3, r4)
    0x00012bbc mov r0, sl                                    |     r0 = sl;
    0x00012bc0 ldr fp, [fp]                                  |     fp = *(fp);
    0x00012bc4 bl 0x10bc8                                    |     strerror (r0);
    0x00012bc8 ldr r3, [pc, 0x114]                           |     r3 = "_s:_error_:_cannot_allocate__d_bytes_of_memory";
    0x00012bcc str sl, [sp]                                  |     *(sp) = sl;
    0x00012bd0 mov r2, 0xb                                   |     r2 = 0xb;
    0x00012bd4 ldr r1, [pc, 0x10c]                           |     r1 = *(0x12ce4);
    0x00012bd8 str r0, [sp, 4]                               |     var_4h = r0;
    0x00012bdc mov r0, fp                                    |     r0 = fp;
    0x00012be0 bl 0x10c7c                                    |     fprintf (r0, r1, r2, "_s:_error_:_cannot_allocate__d_bytes_of_memory")
    0x00012be4 ldr r3, [sb]                                  |     r3 = *(sb);
    0x00012be8 cmp r3, 5                                     |     
                                                             |     if (r3 != 5) {
    0x00012bec beq 0x12c18                                   |         
    0x00012bf0 ldr r2, [r5, 8]                               |         r2 = *((r5 + 8));
    0x00012bf4 ldr r3, [r6, 0xe8]                            |         r3 = *((r6 + 0xe8));
    0x00012bf8 cmp r2, r3                                    |         
                                                             |         if (r2 != r3) {
    0x00012bfc beq 0x12c0c                                   |             
    0x00012c00 ldr r1, [pc, 0xd4]                            |             r1 = stderr;
    0x00012c04 ldr r0, [pc, 0x104]                           |             r0 = "%s: error!: cannot write EC header (%d bytes buffer) to eraseblock %d\n";
    0x00012c08 bl 0x10bbc                                    |             printf ("%s: error!: cannot write EC header (%d bytes buffer) to eraseblock %d\n", r1)
                                                             |         }
                                                             | label_3:
    0x00012c0c ldr r0, [sp, 0x28]                            |         r0 = ptr;
    0x00012c10 bl 0x10de4                                    |         free (r0);
    0x00012c14 b 0x128c4                                     |         goto label_1;
                                                             |     }
    0x00012c18 mov r3, r4                                    |     r3 = r4;
    0x00012c1c ldr r2, [r5, 0x30]                            |     r2 = *((r5 + 0x30));
    0x00012c20 mov r1, r6                                    |     r1 = r6;
    0x00012c24 ldr r0, [sp, 0x2c]                            |     r0 = var_2ch;
    0x00012c28 bl 0x17fdc                                    |     r0 = fcn_00017fdc (r0, r1);
    0x00012c2c cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00012c30 beq 0x12b14                                   |         goto label_0;
                                                             |     }
    0x00012c34 b 0x12aa4                                     |     goto label_2;
                                                             | label_6:
    0x00012c38 ldr r3, [pc, 0xac]                            |     r3 = "_serror__d___s_";
    0x00012c3c ldrb r3, [r3]                                 |     r3 = *(r3);
    0x00012c40 tst r3, 4                                     |     
                                                             |     if ((r3 & 4) != 0) {
    0x00012c44 beq 0x12c5c                                   |         
    0x00012c48 ldr r3, [sp, 0x1c]                            |         r3 = var_1ch;
    0x00012c4c mov r2, r8                                    |         r2 = r8;
    0x00012c50 ldr r1, [pc, 0x84]                            |         r1 = stderr;
    0x00012c54 ldr r0, [pc, 0xb8]                            |         r0 = "_s:_may_be_sub_page_size_is_incorrect_";
    0x00012c58 bl 0x10bbc                                    |         printf ("_s:_may_be_sub_page_size_is_incorrect_", r1, r2, r3)
                                                             |     }
    0x00012c5c ldr r0, [sp, 0x30]                            |     r0 = var_30h;
    0x00012c60 bl 0x1509c                                    |     r0 = fcn_0001509c (r0);
    0x00012c64 subs r4, r0, 0                                |     r4 = r0 - 0;
                                                             |     if (r4 == r0) {
    0x00012c68 beq 0x12c0c                                   |         goto label_3;
                                                             |     }
    0x00012c6c ldr r3, [pc, 0x78]                            |     
    0x00012c70 ldr r2, [sp, 0x1c]                            |     r2 = var_1ch;
    0x00012c74 ldr r3, [r3, 0x30]                            |     r3 = "%s: error!: cannot write layout volume\n";
    0x00012c78 mov r1, r8                                    |     r1 = r8;
    0x00012c7c str r3, [sp, 0x14]                            |     var_14h = r3;
    0x00012c80 ldr r3, [sp, 0x3c]                            |     r3 = var_3ch;
    0x00012c84 str r4, [sp, 0x10]                            |     var_10h = r4;
    0x00012c88 str r3, [sp, 0xc]                             |     var_ch = r3;
    0x00012c8c ldr r3, [sp, 0x34]                            |     r3 = var_34h;
    0x00012c90 str r7, [sp, 8]                               |     var_8h = r7;
    0x00012c94 str r3, [sp]                                  |     *(sp) = r3;
    0x00012c98 ldr r3, [sp, 0x38]                            |     r3 = var_38h;
    0x00012c9c ldr r0, [sp, 0x30]                            |     r0 = var_30h;
    0x00012ca0 str r3, [sp, 4]                               |     var_4h = r3;
    0x00012ca4 bl 0x15ae8                                    |     r0 = fcn_00015ae8 (r0, r1, r2, r3, r4, r5);
    0x00012ca8 mov r5, r0                                    |     r5 = r0;
    0x00012cac mov r0, r4                                    |     r0 = r4;
    0x00012cb0 bl 0x10de4                                    |     free (r0);
    0x00012cb4 cmp r5, 0                                     |     
                                                             |     if (r5 == 0) {
    0x00012cb8 ldrne r2, [pc, 0x1c]                          |         r2 = "ubiformat";
                                                             |     }
                                                             |     if (r5 != 0) {
    0x00012cbc ldrne r1, [pc, 0x54]                          |         r1 = "%s: error!: cannot write layout volume\n";
                                                             |         goto label_9;
                                                             |     }
                                                             |     if (r5 != 0) {
                                                             | label_9:
    0x00012cc0 bne 0x12940                                   |         goto label_4;
                                                             |     }
    0x00012cc4 ldr r0, [sp, 0x28]                            |     r0 = ptr;
    0x00012cc8 bl 0x10de4                                    |     free (r0);
                                                             | label_5:
    0x00012ccc mov r0, r5                                    |     r0 = r5;
    0x00012cd0 add sp, sp, 0x44                              |     
    0x00012cd4 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}      |     
                                                             | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/ubiformat @ 0x17fdc */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.00017fdc ()                                  | void fcn_00017fdc (int32_t arg1, char * * arg2) {
                                                             |     int32_t var_0h;
                                                             |     int32_t var_4h;
                                                             |     int32_t var_10h;
                                                             |     int32_t var_14h;
                                                             |     int32_t var_18h;
                                                             |     int32_t var_1ch;
                                                             |     int32_t var_24h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x00017fdc push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x00017fe0 sub sp, sp, 0x24                              |     
    0x00017fe4 str r0, [sp, 0x18]                            |     var_18h = r0;
    0x00017fe8 mov r6, r1                                    |     r6 = r1;
    0x00017fec mov sb, r2                                    |     sb = r2;
    0x00017ff0 ldr r1, [pc, 0x1c0]                           |     r1 = *(0x181b4);
    0x00017ff4 mov r2, r3                                    |     r2 = r3;
    0x00017ff8 ldr r0, [pc, 0x1bc]                           |     r0 = "libmtd";
    0x00017ffc mov r8, r3                                    |     r8 = r3;
    0x00018000 bl 0x10bbc                                    |     printf (r0, r1, r2, r3, r4, r5, r6)
    0x00018004 ldr r4, [r6, 0xe4]                            |     r4 = *((r6 + 0xe4));
    0x00018008 mov r0, r4                                    |     r0 = r4;
    0x0001800c bl 0x10c28                                    |     malloc (r0);
    0x00018010 adds r4, r4, 0                                |     r4 += 0;
                                                             |     if (r4 == r4) {
    0x00018014 movne r4, 1                                   |         r4 = 1;
                                                             |     }
    0x00018018 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x0001801c movne r4, 0                                   |         r4 = 0;
                                                             |     }
    0x00018020 cmp r4, 0                                     |     
                                                             |     if (r4 != 0) {
    0x00018024 moveq r5, r0                                  |         r5 = r0;
                                                             |     }
                                                             |     if (r4 != 0) {
    0x00018028 moveq sl, r4                                  |         sl = r4;
                                                             |     }
                                                             |     if (r4 == 0) {
    0x0001802c beq 0x18034                                   |         goto label_4;
                                                             |     }
    0x00018030 bl 0x10df0                                    |     fcn_00010df0 ();
                                                             |     do {
                                                             | label_4:
    0x00018034 mov r3, r8                                    |         r3 = r8;
    0x00018038 mov r2, sb                                    |         r2 = sb;
    0x0001803c mov r1, r6                                    |         r1 = r6;
    0x00018040 ldr r0, [sp, 0x18]                            |         r0 = var_18h;
    0x00018044 bl 0x177c0                                    |         r0 = fcn_000177c0 ();
    0x00018048 subs r7, r0, 0                                |         r7 = r0 - 0;
                                                             |         if (r7 != r0) {
    0x0001804c bne 0x18140                                   |             goto label_1;
                                                             |         }
    0x00018050 ldr r3, [r6, 0xe4]                            |         r3 = *((r6 + 0xe4));
    0x00018054 str r5, [sp]                                  |         *(sp) = r5;
    0x00018058 str r3, [sp, 4]                               |         var_4h = r3;
    0x0001805c mov r2, r8                                    |         r2 = r8;
    0x00018060 mov r3, r7                                    |         r3 = r7;
    0x00018064 mov r1, sb                                    |         r1 = sb;
    0x00018068 mov r0, r6                                    |         r0 = r6;
    0x0001806c bl 0x179f0                                    |         r0 = fcn_000179f0 (r0, r1, r2, r3);
    0x00018070 subs r7, r0, 0                                |         r7 = r0 - 0;
                                                             |         if (r7 != r0) {
    0x00018074 bne 0x18140                                   |             goto label_1;
                                                             |         }
    0x00018078 ldr r7, [r6, 0xe4]                            |         r7 = *((r6 + 0xe4));
    0x0001807c mov r3, r5                                    |         r3 = r5;
                                                             | label_0:
    0x00018080 sub r2, r3, r5                                |         r2 = r3 - r5;
    0x00018084 cmp r7, r2                                    |         
                                                             |         if (r7 > r2) {
    0x00018088 bgt 0x18154                                   |             goto label_5;
                                                             |         }
    0x0001808c ldr r3, [pc, 0x12c]                           |         r3 = "_s:_run_torture_test_for_PEB__d";
    0x00018090 mov r2, r7                                    |         r2 = r7;
    0x00018094 ldrb fp, [r4, r3]                             |         fp = *((r4 + r3));
    0x00018098 mov r0, r5                                    |         r0 = r5;
    0x0001809c mov r1, fp                                    |         r1 = fp;
    0x000180a0 bl 0x10d18                                    |         memset (r0, r1, r2);
    0x000180a4 stmib sp, {r5, r7, sl}                        |         __asm ("stmib sp, {r5, r7, sl}");
    0x000180a8 ldr r0, [sp, 0x18]                            |         r0 = var_18h;
    0x000180ac str sl, [sp, 0x14]                            |         var_14h = sl;
    0x000180b0 str sl, [sp, 0x10]                            |         var_10h = sl;
    0x000180b4 str sl, [sp]                                  |         *(sp) = sl;
    0x000180b8 mov r3, r8                                    |         r3 = r8;
    0x000180bc mov r2, sb                                    |         r2 = sb;
    0x000180c0 mov r1, r6                                    |         r1 = r6;
    0x000180c4 bl 0x17c0c                                    |         r0 = fcn_00017c0c (r0, r1, r2, r3, r4, r5, r6);
    0x000180c8 subs r7, r0, 0                                |         r7 = r0 - 0;
                                                             |         if (r7 != r0) {
    0x000180cc bne 0x18140                                   |             goto label_1;
                                                             |         }
    0x000180d0 ldr r3, [r6, 0xe4]                            |         r3 = *((r6 + 0xe4));
    0x000180d4 mvn r1, fp                                    |         r1 = ~fp;
    0x000180d8 mov r2, r3                                    |         r2 = r3;
    0x000180dc mov r0, r5                                    |         r0 = r5;
    0x000180e0 str r3, [sp, 0x1c]                            |         var_1ch = r3;
    0x000180e4 bl 0x10d18                                    |         memset (r0, r1, r2);
    0x000180e8 ldr r3, [sp, 0x1c]                            |         r3 = var_1ch;
    0x000180ec str r5, [sp]                                  |         *(sp) = r5;
    0x000180f0 str r3, [sp, 4]                               |         var_4h = r3;
    0x000180f4 mov r2, r8                                    |         r2 = r8;
    0x000180f8 mov r3, r7                                    |         r3 = r7;
    0x000180fc mov r1, sb                                    |         r1 = sb;
    0x00018100 mov r0, r6                                    |         r0 = r6;
    0x00018104 bl 0x179f0                                    |         r0 = fcn_000179f0 (r0, r1, r2, r3);
    0x00018108 subs r7, r0, 0                                |         r7 = r0 - 0;
                                                             |         if (r7 != r0) {
    0x0001810c bne 0x18140                                   |             goto label_1;
                                                             |         }
    0x00018110 ldr r1, [r6, 0xe4]                            |         r1 = *((r6 + 0xe4));
    0x00018114 mov r3, r5                                    |         r3 = r5;
                                                             | label_2:
    0x00018118 sub r2, r3, r5                                |         r2 = r3 - r5;
    0x0001811c cmp r1, r2                                    |         
                                                             |         if (r1 > r2) {
    0x00018120 bgt 0x1818c                                   |             goto label_6;
                                                             |         }
    0x00018124 add r4, r4, 1                                 |         r4++;
    0x00018128 cmp r4, 3                                     |         
    0x0001812c bne 0x18034                                   |         
                                                             |     } while (r4 != 3);
    0x00018130 mov r2, r8                                    |     r2 = r8;
    0x00018134 ldr r1, [pc, 0x7c]                            |     r1 = *(0x181b4);
    0x00018138 ldr r0, [pc, 0x84]                            |     r0 = *(0x181c0);
    0x0001813c bl 0x10bbc                                    |     printf (r0, r1, r2)
                                                             | label_1:
    0x00018140 mov r0, r5                                    |     r0 = r5;
    0x00018144 bl 0x10de4                                    |     free (r0);
    0x00018148 mov r0, r7                                    |     r0 = r7;
    0x0001814c add sp, sp, 0x24                              |     
    0x00018150 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}      |     
                                                             | label_5:
    0x00018154 ldrb r2, [r3], 1                              |     r2 = *(r3);
                                                             |     r3++;
    0x00018158 cmp r2, 0xff                                  |     
                                                             |     if (r2 == 0xff) {
    0x0001815c beq 0x18080                                   |         goto label_0;
                                                             |     }
    0x00018160 ldr r0, [pc, 0x60]                            |     
    0x00018164 mov r3, r8                                    |     r3 = r8;
    0x00018168 ldr r2, [pc, 0x48]                            |     r2 = *(0x181b4);
    0x0001816c ldr r1, [pc, 0x58]                            |     r1 = stderr;
    0x00018170 ldr r0, [r0]                                  |     r0 = "%s: PEB %d passed torture test, do not mark it a bad\n";
    0x00018174 bl 0x10c7c                                    |     r0 = fprintf ("%s: PEB %d passed torture test, do not mark it a bad\n", r1, r2, r3)
                                                             | label_3:
    0x00018178 bl 0x10d78                                    |     errno_location ();
    0x0001817c mov r3, 5                                     |     r3 = 5;
    0x00018180 mvn r7, 0                                     |     r7 = ~0;
    0x00018184 str r3, [r0]                                  |     *(r0) = r3;
    0x00018188 b 0x18140                                     |     goto label_1;
                                                             | label_6:
    0x0001818c ldrb r2, [r3], 1                              |     r2 = *(r3);
                                                             |     r3++;
    0x00018190 cmp fp, r2                                    |     
                                                             |     if (fp == r2) {
    0x00018194 beq 0x18118                                   |         goto label_2;
                                                             |     }
    0x00018198 ldr r0, [pc, 0x28]                            |     
    0x0001819c str r8, [sp]                                  |     *(sp) = r8;
    0x000181a0 mov r3, fp                                    |     r3 = fp;
    0x000181a4 ldr r2, [pc, 0xc]                             |     r2 = *(0x181b4);
    0x000181a8 ldr r1, [pc, 0x20]                            |     r1 = "%s: error!: erased PEB %d, but a non-0xFF byte found\n";
    0x000181ac ldr r0, [r0]                                  |     r0 = "%s: PEB %d passed torture test, do not mark it a bad\n";
    0x000181b0 bl 0x10c7c                                    |     fprintf ("%s: PEB %d passed torture test, do not mark it a bad\n", "%s: error!: erased PEB %d, but a non-0xFF byte found\n", r2, r3)
    0x000181b4 b 0x18178                                     |     goto label_3;
                                                             | }
    ; assembly                                                           | /* r2dec pseudo code output */
                                                                         | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/ubiformat @ 0x1846c */
                                                                         | #include <stdint.h>
                                                                         |  
                                                                         | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                         |  
    ; (fcn) fcn.0001846c ()                                              | void fcn_0001846c (int32_t arg1, int32_t arg2) {
                                                                         |     int32_t var_0h;
                                                                         |     int32_t var_0h_2;
                                                                         |     int32_t var_ch;
                                                                         |     r0 = arg1;
                                                                         |     r1 = arg2;
    0x0001846c ldr r3, [pc, 0x144]                                       |     r3 = *(0x185b4);
    0x00018470 cmp r2, 0                                                 |     
    0x00018474 push {r0, r1, r2, r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x00018478 ldr r6, [pc, 0x13c]                                       |     r6 = "__";
    0x0001847c mov r4, r0                                                |     r4 = r0;
                                                                         |     if (r2 != 0) {
    0x00018480 moveq r6, r3                                              |         r6 = r3;
                                                                         |     }
    0x00018484 mov r8, r2                                                |     r8 = r2;
    0x00018488 mov r3, r1                                                |     r3 = r1;
    0x0001848c mov r2, r0                                                |     r2 = r0;
    0x00018490 ldr r0, [pc, 0x128]                                       |     r0 = *(0x185bc);
    0x00018494 mov r5, r1                                                |     r5 = r1;
    0x00018498 bl 0x10bbc                                                |     printf (r0, r1, r2, r3, r4, r5, "__")
    0x0001849c cmp r4, 0x40000001                                        |     
    0x000184a0 sbcs r3, r5, 0                                            |     __asm ("sbcs r3, r5, 0");
                                                                         |     if (r4 < 0x40000001) {
    0x000184a4 blt 0x184f8                                               |         goto label_1;
                                                                         |     }
    0x000184a8 add r3, pc, 0xf8                                          |     r3 = pc + 0xf8;
    0x000184ac ldrd r2, r3, [r3]                                         |     __asm ("ldrd r2, r3, [r3]");
    0x000184b0 bic r0, r4, 0xc0000000                                    |     r0 = BIT_MASK (r4, 0xc0000000);
    0x000184b4 mov r1, 0                                                 |     r1 = 0;
    0x000184b8 bl 0x19ad0                                                |     fcn_00019ad0 (r0);
    0x000184bc lsr r7, r4, 0x1e                                          |     r7 = r4 >> 0x1e;
    0x000184c0 orr r7, r7, r5, lsl 2                                     |     r7 |= (r5 << 2);
    0x000184c4 asr sb, r5, 0x1e                                          |     sb = r5 >> 0x1e;
    0x000184c8 mov r2, r7                                                |     r2 = r7;
    0x000184cc mov r3, sb                                                |     r3 = sb;
    0x000184d0 strd r0, r1, [sp]                                         |     __asm ("strd r0, r1, [sp]");
    0x000184d4 ldr r0, [pc, 0xe8]                                        |     r0 = "%lld bytes";
    0x000184d8 mov r1, r6                                                |     r1 = r6;
                                                                         |     do {
                                                                         | label_0:
    0x000184dc bl 0x10bbc                                                |         printf (r0, r1, r2, r3)
    0x000184e0 cmp r8, 0                                                 |         
                                                                         |         if (r8 == 0) {
    0x000184e4 beq 0x185a0                                               |             goto label_2;
                                                                         |         }
    0x000184e8 mov r0, 0x29                                              |         r0 = 0x29;
    0x000184ec add sp, sp, 0xc                                           |         
    0x000184f0 pop {r4, r5, r6, r7, r8, sb, sl, fp, lr}                  |         
    0x000184f4 b 0x10b98                                                 |         void (*0x10b98)() ();
                                                                         | label_1:
    0x000184f8 mov r2, 0x100000                                          |         r2 = 0x100000;
    0x000184fc mov r3, 0                                                 |         r3 = 0;
    0x00018500 cmp r2, r4                                                |         
    0x00018504 sbcs r3, r3, r5                                           |         __asm ("sbcs r3, r3, r5");
                                                                         |         if (r2 >= r4) {
    0x00018508 bge 0x1854c                                               |             goto label_3;
                                                                         |         }
    0x0001850c ldr sl, [pc, 0xb4]                                        |         sl = *(0x000185c8);
    0x00018510 mov fp, 0                                                 |         
    0x00018514 add r3, pc, 0x94                                          |         r3 = pc + 0x94;
    0x00018518 ldrd r2, r3, [r3]                                         |         __asm ("ldrd r2, r3, [r3]");
    0x0001851c and r0, sl, r4                                            |         r0 = sl & r4;
    0x00018520 and r1, fp, r5                                            |         r1 = fp & r5;
    0x00018524 bl 0x19ad0                                                |         fcn_00019ad0 (r0);
    0x00018528 lsr r7, r4, 0x14                                          |         r7 = r4 >> 0x14;
    0x0001852c orr r7, r7, r5, lsl 12                                    |         r7 |= (r5 << 12);
    0x00018530 asr sb, r5, 0x14                                          |         sb = r5 >> 0x14;
    0x00018534 mov r2, r7                                                |         r2 = r7;
    0x00018538 mov r3, sb                                                |         r3 = sb;
    0x0001853c strd r0, r1, [sp]                                         |         __asm ("strd r0, r1, [sp]");
    0x00018540 ldr r0, [pc, 0x84]                                        |         r0 = *(0x185c8);
    0x00018544 mov r1, r6                                                |         r1 = r6;
    0x00018548 b 0x184dc                                                 |         
                                                                         |     } while (1);
                                                                         | label_3:
    0x0001854c mov r2, 0x400                                             |     r2 = 0x400;
    0x00018550 mov r3, 0                                                 |     r3 = 0;
    0x00018554 cmp r2, r4                                                |     
    0x00018558 sbcs r3, r3, r5                                           |     __asm ("sbcs r3, r3, r5");
                                                                         |     if (r2 < r4) {
    0x0001855c bge 0x185a0                                               |         
    0x00018560 ldr sl, [pc, 0x68]                                        |         sl = *(0x000185d0);
    0x00018564 mov fp, 0                                                 |         
    0x00018568 mov r2, 0x66                                              |         r2 = 0x66;
    0x0001856c mov r3, 0                                                 |         r3 = 0;
    0x00018570 and r0, sl, r4                                            |         r0 = sl & r4;
    0x00018574 and r1, fp, r5                                            |         r1 = fp & r5;
    0x00018578 bl 0x19ad0                                                |         fcn_00019ad0 (r0);
    0x0001857c lsr r7, r4, 0xa                                           |         r7 = r4 >> 0xa;
    0x00018580 orr r7, r7, r5, lsl 22                                    |         r7 |= (r5 << 22);
    0x00018584 asr sb, r5, 0xa                                           |         sb = r5 >> 0xa;
    0x00018588 mov r2, r7                                                |         r2 = r7;
    0x0001858c mov r3, sb                                                |         r3 = sb;
    0x00018590 strd r0, r1, [sp]                                         |         __asm ("strd r0, r1, [sp]");
    0x00018594 ldr r0, [pc, 0x38]                                        |         r0 = *(0x185d0);
    0x00018598 mov r1, r6                                                |         r1 = r6;
    0x0001859c b 0x184dc                                                 |         goto label_0;
                                                                         |     }
                                                                         | label_2:
    0x000185a0 add sp, sp, 0xc                                           |     
    0x000185a4 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}                  |     
                                                                         | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/ubiformat @ 0x18c58 */
                                                     | #include <stdint.h>
                                                     |  
                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                     |  
    ; (fcn) fcn.00018c58 ()                          | void fcn_00018c58 (char * arg1, int32_t arg2) {
                                                     |     int32_t var_0h;
                                                     |     int32_t var_4h;
                                                     |     int32_t var_8h;
                                                     |     int32_t var_8h_2;
                                                     |     int32_t var_10h;
                                                     |     int32_t var_10h_2;
                                                     |     int32_t var_18h;
                                                     |     int32_t var_1ch;
                                                     |     int32_t var_20h;
                                                     |     int32_t var_24h;
                                                     |     int32_t var_28h;
                                                     |     int32_t var_2ch;
                                                     |     int32_t var_38h;
                                                     |     int32_t var_48h;
                                                     |     int32_t var_58h;
                                                     |     int32_t var_58h_2;
                                                     |     int32_t var_a0h;
                                                     |     char * src;
                                                     |     int32_t var_144h;
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
    0x00018c58 push {r4, r5, r6, r7, r8, sb, lr}     |     
    0x00018c5c sub sp, sp, 0x144                     |     
    0x00018c60 mov r2, 0                             |     r2 = 0;
    0x00018c64 mov r3, 0                             |     r3 = 0;
    0x00018c68 mov r4, r1                            |     r4 = r1;
    0x00018c6c add r1, sp, 0x38                      |     r1 += var_38h;
    0x00018c70 mov r6, r0                            |     r6 = r0;
    0x00018c74 strd r2, r3, [sp, 0x10]               |     __asm ("strd r2, r3, [var_10h]");
    0x00018c78 bl 0x10bd4                            |     r0 = stat64 ();
    0x00018c7c cmp r0, 0                             |     
                                                     |     if (r0 != 0) {
    0x00018c80 beq 0x18ce8                           |         
    0x00018c84 bl 0x10d78                            |         errno_location ();
    0x00018c88 ldr r8, [pc, 0x450]                   |         
    0x00018c8c mov r3, r6                            |         r3 = r6;
    0x00018c90 ldr r2, [pc, 0x44c]                   |         r2 = stderr;
    0x00018c94 ldr r1, [pc, 0x44c]                   |         r1 = "libmtd";
    0x00018c98 ldr r7, [r0]                          |         r7 = *(r0);
    0x00018c9c mov r5, r0                            |         r5 = r0;
    0x00018ca0 ldr r0, [r8]                          |         r0 = *(0x190dc);
    0x00018ca4 bl 0x10c7c                            |         fprintf (r0, "libmtd", r2, r3, r4, r5)
    0x00018ca8 mov r0, r7                            |         r0 = r7;
    0x00018cac ldr r8, [r8]                          |         r8 = *(0x190dc);
    0x00018cb0 bl 0x10bc8                            |         strerror (r0);
    0x00018cb4 ldr r3, [pc, 0x430]                   |         r3 = "%s: error!: cannot open \"%s\"\n";
    0x00018cb8 str r7, [sp]                          |         *(sp) = r7;
    0x00018cbc mov r2, 8                             |         r2 = 8;
    0x00018cc0 ldr r1, [pc, 0x428]                   |         r1 = *(0x190ec);
    0x00018cc4 str r0, [sp, 4]                       |         var_4h = r0;
    0x00018cc8 mov r0, r8                            |         r0 = r8;
    0x00018ccc bl 0x10c7c                            |         fprintf (r0, r1, r2, "%s: error!: cannot open \"%s\"\n")
    0x00018cd0 ldr r3, [r5]                          |         r3 = *(r5);
    0x00018cd4 cmp r3, 2                             |         
                                                     |         if (r3 != 2) {
    0x00018cd8 bne 0x18ce8                           |             goto label_5;
                                                     |         }
    0x00018cdc ldr r1, [pc, 0x400]                   |         r1 = stderr;
    0x00018ce0 ldr r0, [pc, 0x40c]                   |         r0 = "_serror__d___s_";
    0x00018ce4 bl 0x10bbc                            |         printf ("_serror__d___s_", r1)
                                                     |     }
                                                     | label_5:
    0x00018ce8 ldr r3, [sp, 0x48]                    |     r3 = var_48h;
    0x00018cec and r3, r3, 0xf000                    |     r3 &= 0xf000;
    0x00018cf0 cmp r3, 0x2000                        |     
                                                     |     if (r3 == 0x2000) {
    0x00018cf4 beq 0x18d24                           |         goto label_6;
                                                     |     }
    0x00018cf8 bl 0x10d78                            |     errno_location ();
    0x00018cfc mov r3, 0x16                          |     r3 = 0x16;
    0x00018d00 ldr r2, [pc, 0x3dc]                   |     r2 = stderr;
    0x00018d04 ldr r1, [pc, 0x3ec]                   |     r1 = "%s: MTD subsystem is old and does not support sysfs, so MTD character device nodes have to exist\n";
    0x00018d08 str r3, [r0]                          |     *(r0) = r3;
    0x00018d0c ldr r0, [pc, 0x3cc]                   |     
    0x00018d10 mov r3, r6                            |     r3 = r6;
    0x00018d14 ldr r0, [r0]                          |     r0 = *(0x190dc);
    0x00018d18 bl 0x10c7c                            |     fprintf (r0, "%s: MTD subsystem is old and does not support sysfs, so MTD character device nodes have to exist\n", r2, r3)
                                                     |     do {
                                                     | label_0:
    0x00018d1c mvn r5, 0                             |         r5 = ~0;
    0x00018d20 b 0x18e08                             |         goto label_4;
                                                     | label_6:
    0x00018d24 mov r2, 0x100                         |         r2 = 0x100;
    0x00018d28 mov r1, 0                             |         r1 = 0;
    0x00018d2c mov r0, r4                            |         r0 = r4;
    0x00018d30 bl 0x10d18                            |         memset (r0, r1, r2);
    0x00018d34 ldrd r8, sb, [sp, 0x58]               |         __asm ("ldrd r8, sb, [var_58h]");
    0x00018d38 mov r1, sb                            |         r1 = sb;
    0x00018d3c mov r0, r8                            |         r0 = r8;
    0x00018d40 bl 0x10c04                            |         gnu_dev_major ();
    0x00018d44 mov r1, sb                            |         r1 = sb;
    0x00018d48 mov r5, r0                            |         r5 = r0;
    0x00018d4c str r0, [r4, 4]                       |         *((r4 + 4)) = r0;
    0x00018d50 mov r0, r8                            |         r0 = r8;
    0x00018d54 bl 0x10c4c                            |         gnu_dev_minor ();
    0x00018d58 cmp r5, 0x5a                          |         
    0x00018d5c str r0, [r4, 8]                       |         *((r4 + 8)) = r0;
                                                     |         if (r5 == 0x5a) {
    0x00018d60 beq 0x18d9c                           |             goto label_7;
                                                     |         }
    0x00018d64 bl 0x10d78                            |         errno_location ();
    0x00018d68 mov r3, 0x16                          |         r3 = 0x16;
    0x00018d6c ldr r2, [pc, 0x370]                   |         r2 = stderr;
    0x00018d70 ldr r1, [pc, 0x384]                   |         r1 = "%s: error!: \"%s\" is not a character device\n";
    0x00018d74 str r3, [r0]                          |         *(r0) = r3;
    0x00018d78 mov r3, 0x5a                          |         r3 = 0x5a;
    0x00018d7c str r3, [sp, 4]                       |         var_4h = r3;
    0x00018d80 ldr r0, [pc, 0x358]                   |         
    0x00018d84 ldr r3, [r4, 4]                       |         r3 = *((r4 + 4));
    0x00018d88 str r3, [sp]                          |         *(sp) = r3;
    0x00018d8c mov r3, r6                            |         r3 = r6;
    0x00018d90 ldr r0, [r0]                          |         r0 = *(0x190dc);
    0x00018d94 bl 0x10c7c                            |         fprintf (r0, "%s: error!: \"%s\" is not a character device\n", r2, r3)
    0x00018d98 b 0x18d1c                             |         
                                                     |     } while (1);
                                                     | label_7:
    0x00018d9c add r0, r0, r0, lsr 31                |     r0 += (r0 >> 31);
    0x00018da0 asr r0, r0, 1                         |     r0 >>= 1;
    0x00018da4 str r0, [r4]                          |     *(r4) = r0;
    0x00018da8 mov r1, 0                             |     r1 = 0;
    0x00018dac mov r0, r6                            |     r0 = r6;
    0x00018db0 bl 0x10d30                            |     r0 = open64 ();
    0x00018db4 cmn r0, 1                             |     
    0x00018db8 mov r5, r0                            |     r5 = r0;
                                                     |     if (r0 == 1) {
    0x00018dbc bne 0x18e14                           |         
    0x00018dc0 bl 0x10d78                            |         errno_location ();
    0x00018dc4 ldr r7, [pc, 0x314]                   |         r7 = *(0x190dc);
    0x00018dc8 mov r3, r6                            |         r3 = r6;
    0x00018dcc ldr r2, [pc, 0x310]                   |         r2 = stderr;
    0x00018dd0 ldr r1, [pc, 0x310]                   |         r1 = "libmtd";
    0x00018dd4 ldr r4, [r0]                          |         r4 = *(r0);
    0x00018dd8 ldr r0, [r7]                          |         r0 = *(0x190dc);
    0x00018ddc bl 0x10c7c                            |         fprintf (r0, "libmtd", r2, r3, r4)
    0x00018de0 mov r0, r4                            |         r0 = r4;
    0x00018de4 ldr r6, [r7]                          |         r6 = *(0x190dc);
    0x00018de8 bl 0x10bc8                            |         strerror (r0);
    0x00018dec str r4, [sp]                          |         *(sp) = r4;
    0x00018df0 ldr r3, [pc, 0x2f4]                   |         r3 = "%s: error!: cannot open \"%s\"\n";
    0x00018df4 mov r2, 8                             |         r2 = 8;
    0x00018df8 ldr r1, [pc, 0x2f0]                   |         r1 = *(0x190ec);
    0x00018dfc str r0, [sp, 4]                       |         var_4h = r0;
    0x00018e00 mov r0, r6                            |         r0 = r6;
    0x00018e04 bl 0x10c7c                            |         fprintf (r0, r1, r2, "%s: error!: cannot open \"%s\"\n", r4)
                                                     | label_4:
    0x00018e08 mov r0, r5                            |         r0 = r5;
    0x00018e0c add sp, sp, 0x144                     |         
    0x00018e10 pop {r4, r5, r6, r7, r8, sb, pc}      |         
                                                     |     }
    0x00018e14 add r2, sp, 0x18                      |     r2 += var_18h;
    0x00018e18 ldr r1, [pc, 0x2e0]                   |     r1 = "%s: error!: \"%s\" has major number %d, MTD devices have major %d\n";
    0x00018e1c bl 0x10bb0                            |     r0 = ioctl (r0, "%s: error!: \"%s\" has major number %d, MTD devices have major %d\n");
    0x00018e20 subs r8, r0, 0                        |     r8 = r0 - 0;
                                                     |     if (r8 == r0) {
    0x00018e24 beq 0x18e78                           |         goto label_8;
                                                     |     }
    0x00018e28 bl 0x10d78                            |     errno_location ();
    0x00018e2c ldr r6, [pc, 0x2ac]                   |     
    0x00018e30 ldr r2, [pc, 0x2ac]                   |     r2 = stderr;
    0x00018e34 ldr r1, [pc, 0x2c8]                   |     r1 = *(0x19100);
    0x00018e38 ldr r4, [r0]                          |     r4 = *(r0);
    0x00018e3c ldr r0, [r6]                          |     r0 = *(0x190dc);
    0x00018e40 bl 0x10c7c                            |     fprintf (r0, r1, r2, r3, r4, r5, r6)
    0x00018e44 mov r0, r4                            |     r0 = r4;
    0x00018e48 ldr r6, [r6]                          |     r6 = *(0x190dc);
    0x00018e4c bl 0x10bc8                            |     strerror (r0);
    0x00018e50 ldr r3, [pc, 0x294]                   |     r3 = "%s: error!: cannot open \"%s\"\n";
    0x00018e54 ldr r1, [pc, 0x294]                   |     r1 = *(0x190ec);
    0x00018e58 mov r2, 8                             |     r2 = 8;
    0x00018e5c str r4, [sp]                          |     *(sp) = r4;
    0x00018e60 str r0, [sp, 4]                       |     var_4h = r0;
    0x00018e64 mov r0, r6                            |     r0 = r6;
                                                     |     do {
                                                     | label_1:
    0x00018e68 bl 0x10c7c                            |         fprintf (r0, r1, r2, "%s: error!: cannot open \"%s\"\n", r4)
                                                     | label_2:
    0x00018e6c mov r0, r5                            |         r0 = r5;
    0x00018e70 bl 0x10dcc                            |         close (r0);
    0x00018e74 b 0x18d1c                             |         goto label_0;
                                                     | label_8:
    0x00018e78 add r2, sp, 0x10                      |         r2 += var_10h;
    0x00018e7c ldr r1, [pc, 0x284]                   |         r1 = "_s:_error_:_MEMGETINFO_ioctl_request_failed";
    0x00018e80 mov r0, r5                            |         r0 = r5;
    0x00018e84 bl 0x10bb0                            |         r0 = ioctl (r0, "_s:_error_:_MEMGETINFO_ioctl_request_failed");
    0x00018e88 cmn r0, 1                             |         
                                                     |         if (r0 == 1) {
    0x00018e8c ldrbne r3, [r4, 0xfc]                 |             r3 = *((r4 + 0xfc));
                                                     |         }
                                                     |         if (r0 == 1) {
    0x00018e90 orrne r3, r3, 2                       |             r3 |= 2;
                                                     |         }
                                                     |         if (r0 != 1) {
    0x00018e94 bne 0x18ef0                           |             goto label_9;
                                                     |         }
    0x00018e98 bl 0x10d78                            |         r0 = errno_location ();
    0x00018e9c ldr r7, [r0]                          |         r7 = *(r0);
    0x00018ea0 cmp r7, 0x5f                          |         
                                                     |         if (r7 != 0x5f) {
    0x00018ea4 streq r8, [r0]                        |             *(r0) = r8;
                                                     |         }
                                                     |         if (r7 != 0x5f) {
    0x00018ea8 ldrbeq r3, [r4, 0xfc]                 |             r3 = *((r4 + 0xfc));
                                                     |         }
    0x00018eac biceq r3, r3, 2                       |         __asm ("biceq r3, r3, 2");
                                                     |         if (r7 == 0x5f) {
    0x00018eb0 beq 0x18ef0                           |             goto label_9;
                                                     |         }
    0x00018eb4 ldr r4, [pc, 0x224]                   |         
    0x00018eb8 ldr r2, [pc, 0x224]                   |         r2 = stderr;
    0x00018ebc ldr r1, [pc, 0x248]                   |         r1 = *(0x19108);
    0x00018ec0 ldr r0, [r4]                          |         r0 = *(0x190dc);
    0x00018ec4 bl 0x10c7c                            |         fprintf (r0, r1, r2, r3, r4)
    0x00018ec8 mov r0, r7                            |         r0 = r7;
    0x00018ecc ldr r4, [r4]                          |         r4 = *(0x190dc);
    0x00018ed0 bl 0x10bc8                            |         strerror (r0);
    0x00018ed4 str r7, [sp]                          |         *(sp) = r7;
    0x00018ed8 ldr r3, [pc, 0x20c]                   |         r3 = "%s: error!: cannot open \"%s\"\n";
    0x00018edc mov r2, 8                             |         r2 = 8;
    0x00018ee0 ldr r1, [pc, 0x208]                   |         r1 = *(0x190ec);
    0x00018ee4 str r0, [sp, 4]                       |         var_4h = r0;
    0x00018ee8 mov r0, r4                            |         r0 = r4;
    0x00018eec b 0x18e68                             |         
                                                     |     } while (1);
                                                     | label_9:
    0x00018ef0 strb r3, [r4, 0xfc]                   |     *((r4 + 0xfc)) = r3;
    0x00018ef4 ldr r3, [sp, 0x28]                    |     r3 = var_28h;
    0x00018ef8 ldrb r7, [sp, 0x18]                   |     r7 = var_18h;
    0x00018efc ldr r0, [sp, 0x20]                    |     r0 = var_20h;
    0x00018f00 ldr r2, [sp, 0x24]                    |     r2 = var_24h;
    0x00018f04 ldr ip, [sp, 0x2c]                    |     ip = var_2ch;
    0x00018f08 mov r1, 0                             |     r1 = 0;
    0x00018f0c cmp r3, 0                             |     
    0x00018f10 str r7, [r4, 0xc]                     |     *((r4 + 0xc)) = r7;
    0x00018f14 strd r0, r1, [r4, 0xd8]               |     __asm ("strd r0, r1, [r4, 0xd8]");
    0x00018f18 str r2, [r4, 0xe4]                    |     *((r4 + 0xe4)) = r2;
    0x00018f1c str r3, [r4, 0xe8]                    |     *((r4 + 0xe8)) = r3;
    0x00018f20 str ip, [r4, 0xf0]                    |     *((r4 + 0xf0)) = ip;
                                                     |     if (r3 > 0) {
    0x00018f24 bgt 0x18f48                           |         goto label_10;
                                                     |     }
    0x00018f28 str r3, [sp, 4]                       |     var_4h = r3;
    0x00018f2c str r6, [sp]                          |     *(sp) = r6;
    0x00018f30 ldr r2, [pc, 0x1ac]                   |     r2 = stderr;
    0x00018f34 ldr r3, [r4]                          |     r3 = *(r4);
    0x00018f38 ldr r1, [pc, 0x1d0]                   |     r1 = "%s: error!: MEMGETBADBLOCK ioctl failed\n";
                                                     |     do {
    0x00018f3c ldr r0, [pc, 0x19c]                   |         
    0x00018f40 ldr r0, [r0]                          |         r0 = *(0x190dc);
    0x00018f44 b 0x18e68                             |         goto label_1;
                                                     | label_10:
    0x00018f48 cmp r2, r3                            |         
    0x00018f4c cmpge r2, 0                           |         __asm ("cmpge r2, 0");
                                                     |         if (r2 > r3) {
    0x00018f50 bgt 0x18f6c                           |             goto label_11;
                                                     |         }
    0x00018f54 str r2, [sp, 4]                       |         var_4h = r2;
    0x00018f58 str r6, [sp]                          |         *(sp) = r6;
    0x00018f5c ldr r2, [pc, 0x180]                   |         r2 = stderr;
    0x00018f60 ldr r3, [r4]                          |         r3 = *(r4);
    0x00018f64 ldr r1, [pc, 0x1a8]                   |         r1 = "_s:_error_:_mtd_d___s__has_insane_min._I_O_unit_size__d";
    0x00018f68 b 0x18f3c                             |         
                                                     |     } while (1);
                                                     | label_11:
    0x00018f6c orrs r3, r0, r1                       |     r3 = r0 | r1;
                                                     |     if (r3 != r0) {
    0x00018f70 beq 0x18f84                           |         
    0x00018f74 asr r3, r2, 0x1f                      |         r3 = r2 >> 0x1f;
    0x00018f78 cmp r0, r2                            |         
    0x00018f7c sbcs ip, r1, r3                       |         __asm ("sbcs ip, r1, r3");
                                                     |         if (r0 >= r2) {
    0x00018f80 bge 0x18fa8                           |             goto label_12;
                                                     |         }
                                                     |     }
    0x00018f84 strd r0, r1, [sp, 8]                  |     __asm ("strd r0, r1, [var_8h]");
    0x00018f88 ldr r0, [pc, 0x150]                   |     
    0x00018f8c str r6, [sp]                          |     *(sp) = r6;
    0x00018f90 ldr r2, [pc, 0x14c]                   |     r2 = stderr;
    0x00018f94 ldr r3, [r4]                          |     r3 = *(r4);
    0x00018f98 ldr r1, [pc, 0x178]                   |     r1 = "%s: error!: mtd%d (%s) has insane eraseblock size %d\n";
    0x00018f9c ldr r0, [r0]                          |     r0 = *(0x190dc);
    0x00018fa0 bl 0x10c7c                            |     fprintf (r0, "%s: error!: mtd%d (%s) has insane eraseblock size %d\n", r2, r3, r4, r5, r6)
    0x00018fa4 b 0x18e6c                             |     goto label_2;
                                                     | label_12:
    0x00018fa8 bl 0x19ad0                            |     fcn_00019ad0 (r0);
    0x00018fac str r0, [r4, 0xe0]                    |     *((r4 + 0xe0)) = r0;
    0x00018fb0 cmp r7, 8                             |     
                                                     |     if (r7 > 8) {
                                                     |         /* switch table (9 cases) at 0x18fbc */
    0x00018fb4 ldrls pc, [pc, r7, lsl 2]             |         offset_0 = r7 << 2;
                                                     |         pc = *((pc + offset_0));
                                                     |     }
    0x00018fb8 b 0x18e6c                             |     goto label_2;
    0x00018fe0 ldr r0, [pc, 0xf8]                    |     
    0x00018fe4 str r6, [sp]                          |     *(sp) = r6;
    0x00018fe8 ldr r2, [pc, 0xf4]                    |     r2 = stderr;
    0x00018fec ldr r3, [r4]                          |     r3 = *(r4);
    0x00018ff0 ldr r1, [pc, 0x124]                   |     r1 = "%s: error!: mtd%d (%s) has insane size %lld\n";
    0x00018ff4 ldr r0, [r0]                          |     r0 = *(0x190dc);
    0x00018ff8 bl 0x10c7c                            |     fprintf (r0, "%s: error!: mtd%d (%s) has insane size %lld\n", r2, r3, r4, r5, r6)
    0x00018ffc b 0x18e6c                             |     goto label_2;
    0x00019000 ldr r1, [pc, 0x118]                   |     r1 = "_s:_error_:_mtd_d___s__is_removable_and_is_not_present";
                                                     | label_3:
    0x00019004 add r0, r4, 0x10                      |     r0 = r4 + 0x10;
    0x00019008 bl 0x10ba4                            |     strcpy (r0, "_s:_error_:_mtd_d___s__is_removable_and_is_not_present");
    0x0001900c ldr r3, [sp, 0x1c]                    |     r3 = var_1ch;
    0x00019010 mov r0, r5                            |     r0 = r5;
    0x00019014 tst r3, 0x400                         |     
                                                     |     if ((r3 & 0x400) == 0) {
    0x00019018 ldrbne r3, [r4, 0xfc]                 |         r3 = *((r4 + 0xfc));
                                                     |     }
                                                     |     if ((r3 & 0x400) == 0) {
    0x0001901c orrne r3, r3, 1                       |         r3 |= 1;
                                                     |     }
                                                     |     if ((r3 & 0x400) == 0) {
    0x00019020 strbne r3, [r4, 0xfc]                 |         *((r4 + 0xfc)) = r3;
                                                     |     }
    0x00019024 ldr r3, [r4, 0xe8]                    |     r3 = *((r4 + 0xe8));
    0x00019028 str r3, [r4, 0xec]                    |     *((r4 + 0xec)) = r3;
    0x0001902c bl 0x10dcc                            |     close (r0);
    0x00019030 mov r0, r6                            |     r0 = r6;
    0x00019034 bl 0x18a8c                            |     r0 = fcn_00018a8c (r0);
    0x00019038 bic r0, r0, r0, asr 31                |     r0 = BIT_MASK (r0, r0);
    0x0001903c str r0, [r4, 0xf4]                    |     *((r4 + 0xf4)) = r0;
    0x00019040 add r0, sp, 0xa0                      |     r0 += var_a0h;
    0x00019044 bl 0x187b0                            |     fcn_000187b0 (r0);
    0x00019048 subs r5, r0, 0                        |     r5 -= var_a0h;
                                                     |     if (r5 != var_a0h) {
    0x0001904c bne 0x18d1c                           |         goto label_0;
                                                     |     }
                                                     |     do {
    0x00019050 add r0, sp, 0xa0                      |         r0 += var_a0h;
    0x00019054 bl 0x1864c                            |         r0 = fcn_0001864c (r0);
    0x00019058 cmp r0, 0                             |         
                                                     |         if (r0 == 0) {
    0x0001905c bne 0x190c0                           |             
    0x00019060 ldr r3, [pc, 0xbc]                    |             r3 = "ram";
    0x00019064 ldr r0, [pc, 0x74]                    |             
    0x00019068 str r3, [sp]                          |             *(sp) = r3;
    0x0001906c ldr r2, [pc, 0x70]                    |             r2 = stderr;
    0x00019070 ldr r3, [r4]                          |             r3 = *(r4);
    0x00019074 ldr r1, [pc, 0xac]                    |             r1 = "_proc_mtd";
    0x00019078 ldr r0, [r0]                          |             r0 = *(0x190dc);
    0x0001907c bl 0x10c7c                            |             r0 = fprintf (r0, "_proc_mtd", r2, "ram")
    0x00019080 bl 0x10d78                            |             errno_location ();
    0x00019084 mov r3, 2                             |             r3 = 2;
    0x00019088 str r3, [r0]                          |             *(r0) = r3;
    0x0001908c b 0x18d1c                             |             goto label_0;
    0x00019090 ldr r1, [pc, 0x94]                    |             r1 = "_s:_error_:_mtd_d_not_found_in___s_";
    0x00019094 b 0x19004                             |             goto label_3;
    0x00019098 ldr r1, [pc, 0x90]                    |             r1 = *(0x1912c);
    0x0001909c b 0x19004                             |             goto label_3;
    0x000190a0 ldr r1, [pc, 0x8c]                    |             r1 = *(0x19130);
    0x000190a4 b 0x19004                             |             goto label_3;
    0x000190a8 ldr r1, [pc, 0x88]                    |             r1 = "nand";
    0x000190ac b 0x19004                             |             goto label_3;
    0x000190b0 ldr r1, [pc, 0x84]                    |             r1 = "mlc_nand";
    0x000190b4 b 0x19004                             |             goto label_3;
    0x000190b8 ldr r1, [pc, 0x80]                    |             r1 = "dataflash";
    0x000190bc b 0x19004                             |             goto label_3;
                                                     |         }
    0x000190c0 ldr r3, [r4]                          |         r3 = *(r4);
    0x000190c4 ldr r2, [sp, 0xa0]                    |         r2 = var_a0h;
    0x000190c8 cmp r2, r3                            |         
    0x000190cc bne 0x19050                           |         
                                                     |     } while (r2 != r3);
    0x000190d0 add r1, sp, 0xb0                      |     r1 += src;
    0x000190d4 add r0, r4, 0x51                      |     r0 = r4 + 0x51;
    0x000190d8 bl 0x10ba4                            |     strcpy (r0, r1);
    0x000190dc b 0x18e08                             |     goto label_4;
                                                     | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/ubiformat @ 0x19178 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.00019178 ()                                  | void fcn_00019178 (char * * arg1, int32_t arg2) {
                                                             |     int32_t var_0h;
                                                             |     int32_t var_4h;
                                                             |     int32_t var_8h;
                                                             |     int32_t var_ch;
                                                             |     int32_t var_10h;
                                                             |     int32_t var_1ch;
                                                             |     int32_t var_20h;
                                                             |     int32_t var_20h_2;
                                                             |     int32_t var_28h;
                                                             |     int32_t var_30h;
                                                             |     int32_t var_34h;
                                                             |     int32_t var_38h;
                                                             |     int32_t var_3ch;
                                                             |     int32_t var_64h;
                                                             |     int32_t var_6ch;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x00019178 push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x0001917c mov r8, r0                                    |     r8 = r0;
    0x00019180 sub sp, sp, 0x6c                              |     
    0x00019184 mov sb, r1                                    |     sb = r1;
    0x00019188 mov r0, 1                                     |     r0 = 1;
    0x0001918c mov r1, 0x30                                  |     r1 = 0x30;
    0x00019190 str r2, [sp, 0x1c]                            |     var_1ch = r2;
    0x00019194 mov r6, r3                                    |     r6 = r3;
    0x00019198 bl 0x10c64                                    |     r0 = calloc (r0, r1);
    0x0001919c subs r4, r0, 0                                |     r4 = r0 - 0;
                                                             |     if (r4 != r0) {
    0x000191a0 bne 0x191f8                                   |         goto label_12;
                                                             |     }
    0x000191a4 bl 0x10d78                                    |     errno_location ();
    0x000191a8 ldr r5, [pc, 0x6e8]                           |     
    0x000191ac mov r3, 0x30                                  |     r3 = 0x30;
    0x000191b0 ldr r2, [pc, 0x6e4]                           |     r2 = stderr;
    0x000191b4 ldr r1, [pc, 0x6e4]                           |     r1 = "libscan";
    0x000191b8 ldr r4, [r0]                                  |     r4 = *(r0);
    0x000191bc ldr r0, [r5]                                  |     r0 = *(0x19894);
    0x000191c0 bl 0x10c7c                                    |     fprintf (r0, "libscan", r2, r3, r4, r5)
    0x000191c4 mov r0, r4                                    |     r0 = r4;
    0x000191c8 ldr r5, [r5]                                  |     r5 = *(0x19894);
    0x000191cc bl 0x10bc8                                    |     strerror (r0);
    0x000191d0 str r4, [sp]                                  |     *(sp) = r4;
    0x000191d4 ldr r3, [pc, 0x6c8]                           |     r3 = "%s: error!: cannot allocate %zd bytes of memory\n";
    0x000191d8 mov r2, 9                                     |     r2 = 9;
    0x000191dc ldr r1, [pc, 0x6c4]                           |     r1 = *(0x198a4);
    0x000191e0 str r0, [sp, 4]                               |     var_4h = r0;
    0x000191e4 mov r0, r5                                    |     r0 = r5;
    0x000191e8 bl 0x10c7c                                    |     fprintf (r0, r1, r2, "%s: error!: cannot allocate %zd bytes of memory\n", r4)
                                                             |     do {
    0x000191ec mvn r0, 0                                     |         r0 = ~0;
                                                             | label_0:
    0x000191f0 add sp, sp, 0x6c                              |         
    0x000191f4 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}      |         
                                                             | label_12:
    0x000191f8 ldr r5, [r8, 0xe0]                            |         r5 = *((r8 + 0xe0));
    0x000191fc mov r1, 4                                     |         r1 = 4;
    0x00019200 mov r0, r5                                    |         r0 = r5;
    0x00019204 bl 0x10c64                                    |         r0 = calloc (r0, r1);
    0x00019208 cmp r0, 0                                     |         
    0x0001920c str r0, [r4]                                  |         *(r4) = r0;
                                                             |         if (r0 != 0) {
    0x00019210 bne 0x19274                                   |             goto label_13;
                                                             |         }
    0x00019214 bl 0x10d78                                    |         errno_location ();
    0x00019218 ldr r6, [pc, 0x678]                           |         
    0x0001921c mov r3, 0x30                                  |         r3 = 0x30;
    0x00019220 ldr r2, [pc, 0x674]                           |         r2 = stderr;
    0x00019224 ldr r1, [pc, 0x674]                           |         r1 = "libscan";
    0x00019228 ldr r5, [r0]                                  |         r5 = *(r0);
    0x0001922c ldr r0, [r6]                                  |         r0 = *(0x19894);
    0x00019230 bl 0x10c7c                                    |         fprintf (r0, "libscan", r2, r3, r4, r5, r6)
    0x00019234 mov r0, r5                                    |         r0 = r5;
    0x00019238 ldr r6, [r6]                                  |         r6 = *(0x19894);
    0x0001923c bl 0x10bc8                                    |         strerror (r0);
    0x00019240 str r5, [sp]                                  |         *(sp) = r5;
    0x00019244 ldr r3, [pc, 0x658]                           |         r3 = "%s: error!: cannot allocate %zd bytes of memory\n";
    0x00019248 mov r2, 9                                     |         r2 = 9;
    0x0001924c ldr r1, [pc, 0x654]                           |         r1 = *(0x198a4);
    0x00019250 str r0, [sp, 4]                               |         var_4h = r0;
    0x00019254 mov r0, r6                                    |         r0 = r6;
    0x00019258 bl 0x10c7c                                    |         fprintf (r0, r1, r2, "%s: error!: cannot allocate %zd bytes of memory\n", r4, r5)
                                                             | label_4:
    0x0001925c mov r0, r4                                    |         r0 = r4;
    0x00019260 bl 0x10de4                                    |         free (r0);
    0x00019264 ldr r2, [sp, 0x1c]                            |         r2 = var_1ch;
    0x00019268 mov r3, 0                                     |         r3 = 0;
    0x0001926c str r3, [r2]                                  |         *(r2) = r3;
    0x00019270 b 0x191ec                                     |         
                                                             |     } while (1);
                                                             | label_13:
    0x00019274 mvn r3, 0                                     |     r3 = ~0;
    0x00019278 cmp r6, 2                                     |     
    0x0001927c str r3, [r4, 0x2c]                            |     *((r4 + 0x2c)) = r3;
    0x00019280 str r3, [r4, 0x28]                            |     *((r4 + 0x28)) = r3;
                                                             |     if (r6 == 2) {
    0x00019284 bne 0x19298                                   |         
    0x00019288 mov r2, r5                                    |         r2 = r5;
    0x0001928c ldr r1, [pc, 0x608]                           |         r1 = stderr;
    0x00019290 ldr r0, [pc, 0x614]                           |         r0 = "_serror__d___s_";
    0x00019294 bl 0x10bbc                                    |         printf ("_serror__d___s_", r1, r2)
                                                             |     }
    0x00019298 mov r5, 0                                     |     r5 = 0;
                                                             |     do {
    0x0001929c ldr r7, [r8, 0xe0]                            |         r7 = *((r8 + 0xe0));
    0x000192a0 cmp r7, r5                                    |         
                                                             |         if (r7 <= r5) {
    0x000192a4 bgt 0x19320                                   |             
    0x000192a8 ldr r5, [r4, 0x10]                            |             r5 = *((r4 + 0x10));
    0x000192ac cmp r5, 0                                     |             
                                                             |             if (r5 != 0) {
    0x000192b0 bne 0x19860                                   |                 goto label_14;
                                                             |             }
                                                             | label_9:
    0x000192b4 ldr r3, [r4, 0x20]                            |             r3 = *((r4 + 0x20));
    0x000192b8 cmp r6, 2                                     |             
    0x000192bc sub r7, r7, r3                                |             r7 -= r3;
    0x000192c0 str r7, [r4, 0x24]                            |             *((r4 + 0x24)) = r7;
                                                             |             if (r6 == 2) {
    0x000192c4 bne 0x19300                                   |                 
    0x000192c8 ldrd r0, r1, [r4, 8]                          |                 __asm ("ldrd r0, r1, [r4, 8]");
    0x000192cc str r3, [sp, 0x10]                            |                 var_10h = r3;
    0x000192d0 ldr r3, [r4, 0x1c]                            |                 r3 = *((r4 + 0x1c));
    0x000192d4 mov r2, r0                                    |                 r2 = r0;
    0x000192d8 str r3, [sp, 0xc]                             |                 var_ch = r3;
    0x000192dc ldr r3, [r4, 0x14]                            |                 r3 = *((r4 + 0x14));
    0x000192e0 ldr r0, [pc, 0x5c8]                           |                 r0 = "_s:_start_scanning_eraseblocks_0__d";
    0x000192e4 str r3, [sp, 8]                               |                 var_8h = r3;
    0x000192e8 ldr r3, [r4, 0x18]                            |                 r3 = *((r4 + 0x18));
    0x000192ec str r5, [sp]                                  |                 *(sp) = r5;
    0x000192f0 str r3, [sp, 4]                               |                 var_4h = r3;
    0x000192f4 mov r3, r1                                    |                 r3 = r1;
    0x000192f8 ldr r1, [pc, 0x59c]                           |                 r1 = stderr;
    0x000192fc bl 0x10bbc                                    |                 printf (r0, r1, r2, r3, r4, r5)
                                                             |             }
    0x00019300 ldr r3, [sp, 0x1c]                            |             r3 = var_1ch;
    0x00019304 cmp r6, 1                                     |             
    0x00019308 str r4, [r3]                                  |             *(r3) = r4;
                                                             |             if (r6 == 1) {
    0x0001930c bne 0x19318                                   |                 
    0x00019310 mov r0, 0xa                                   |                 r0 = 0xa;
    0x00019314 bl 0x10b98                                    |                 putchar (r0);
                                                             |             }
    0x00019318 mov r0, 0                                     |             r0 = 0;
    0x0001931c b 0x191f0                                     |             goto label_0;
                                                             |         }
    0x00019320 cmp r6, 2                                     |         
                                                             |         if (r6 != 2) {
    0x00019324 bne 0x19394                                   |             goto label_15;
                                                             |         }
    0x00019328 mov r2, r5                                    |         r2 = r5;
    0x0001932c ldr r1, [pc, 0x568]                           |         r1 = stderr;
    0x00019330 ldr r0, [pc, 0x57c]                           |         r0 = "_s:_finished__mean_EC__lld___d_OK___d_corrupted___d_empty___d_alien__bad__d";
    0x00019334 bl 0x10bbc                                    |         printf ("_s:_finished__mean_EC__lld___d_OK___d_corrupted___d_empty___d_alien__bad__d", r1, r2)
                                                             | label_2:
    0x00019338 ldr r3, [pc, 0x578]                           |         r3 = "%s: scanning eraseblock %d";
    0x0001933c ldr r0, [r3]                                  |         r0 = "%s: scanning eraseblock %d";
    0x00019340 bl 0x10c40                                    |         fflush ("%s: scanning eraseblock %d");
                                                             | label_1:
    0x00019344 mov r2, r5                                    |         r2 = r5;
    0x00019348 mov r1, sb                                    |         r1 = sb;
    0x0001934c mov r0, r8                                    |         r0 = r8;
    0x00019350 bl 0x178f4                                    |         r0 = fcn_000178f4 (r0, r1);
    0x00019354 cmn r0, 1                                     |         
    0x00019358 mov r7, r0                                    |         r7 = r0;
                                                             |         if (r0 == 1) {
    0x0001935c beq 0x1960c                                   |             goto label_16;
                                                             |         }
    0x00019360 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x00019364 beq 0x193d4                                   |             goto label_17;
                                                             |         }
    0x00019368 ldr r3, [r4, 0x20]                            |         r3 = *((r4 + 0x20));
    0x0001936c mvn r2, 3                                     |         r2 = ~3;
    0x00019370 add r3, r3, 1                                 |         r3++;
    0x00019374 str r3, [r4, 0x20]                            |         *((r4 + 0x20)) = r3;
    0x00019378 ldr r3, [r4]                                  |         r3 = *(r4);
    0x0001937c cmp r6, 2                                     |         
    0x00019380 str r2, [r3, r5, lsl 2]                       |         offset_0 = r5 << 2;
                                                             |         *((r3 + offset_0)) = r2;
                                                             |         if (r6 != 2) {
    0x00019384 ldreq r0, [pc, 0x530]                         |             r0 = ": bad";
                                                             |         }
                                                             |         if (r6 == 2) {
    0x00019388 beq 0x1946c                                   |             goto label_11;
                                                             |         }
                                                             | label_3:
    0x0001938c add r5, r5, 1                                 |         r5++;
    0x00019390 b 0x1929c                                     |         
                                                             |     } while (1);
                                                             | label_15:
    0x00019394 cmp r6, 1                                     |     
                                                             |     if (r6 != 1) {
    0x00019398 bne 0x19344                                   |         goto label_1;
                                                             |     }
    0x0001939c add r0, r5, 1                                 |     r0 = r5 + 1;
    0x000193a0 mov r1, 0x64                                  |     r1 = 0x64;
    0x000193a4 umull sl, fp, r0, r1                          |     sl:fp = r0 * r1;
    0x000193a8 mov r2, r7                                    |     r2 = r7;
    0x000193ac asr r3, r7, 0x1f                              |     r3 = r7 >> 0x1f;
    0x000193b0 mov r0, sl                                    |     r0 = sl;
    0x000193b4 mov r1, fp                                    |     r1 = fp;
    0x000193b8 bl 0x19ad0                                    |     r0 = fcn_00019ad0 (r0);
    0x000193bc mov r2, r0                                    |     r2 = r0;
    0x000193c0 mov r3, r1                                    |     r3 = r1;
    0x000193c4 ldr r0, [pc, 0x4f4]                           |     r0 = ": bad";
    0x000193c8 mov r1, r5                                    |     r1 = r5;
    0x000193cc bl 0x10bbc                                    |     printf (": bad", r1, r2, r3)
    0x000193d0 b 0x19338                                     |     goto label_2;
                                                             | label_17:
    0x000193d4 mov r3, 0x40                                  |     r3 = 0x40;
    0x000193d8 add sl, sp, 0x28                              |     sl += var_28h;
    0x000193dc str r3, [sp, 4]                               |     var_4h = r3;
    0x000193e0 str sl, [sp]                                  |     *(sp) = sl;
    0x000193e4 mov r3, r0                                    |     r3 = r0;
    0x000193e8 mov r2, r5                                    |     r2 = r5;
    0x000193ec mov r1, sb                                    |     r1 = sb;
    0x000193f0 mov r0, r8                                    |     r0 = r8;
    0x000193f4 bl 0x179f0                                    |     r0 = fcn_000179f0 (r0, r1, r2, r3);
    0x000193f8 cmp r0, 0                                     |     
                                                             |     if (r0 < 0) {
    0x000193fc blt 0x1960c                                   |         goto label_16;
                                                             |     }
    0x00019400 ldr r3, [sp, 0x28]                            |     r3 = var_28h;
    0x00019404 lsr r2, r3, 0x18                              |     r2 = r3 >> 0x18;
    0x00019408 lsl r1, r3, 8                                 |     r1 = r3 << 8;
    0x0001940c orr r2, r2, r3, lsl 24                        |     r2 |= (r3 << 24);
    0x00019410 and r1, r1, 0xff0000                          |     r1 &= 0xff0000;
    0x00019414 lsr r3, r3, 8                                 |     r3 >>= 8;
    0x00019418 orr r2, r2, r1                                |     r2 |= r1;
    0x0001941c and r3, r3, 0xff00                            |     r3 &= 0xff00;
    0x00019420 orr r3, r2, r3                                |     r3 = r2 | r3;
    0x00019424 ldr r2, [pc, 0x498]                           |     r2 = "libscan:_scanning_eraseblock__d_____2lld____complete__";
    0x00019428 cmp r3, r2                                    |     
                                                             |     if (r3 == r2) {
    0x0001942c beq 0x19474                                   |         goto label_18;
                                                             |     }
                                                             |     do {
    0x00019430 ldrb r3, [sl, r7]                             |         r3 = *((sl + r7));
    0x00019434 cmp r3, 0xff                                  |         
                                                             |         if (r3 != 0xff) {
    0x00019438 bne 0x19870                                   |             goto label_19;
                                                             |         }
    0x0001943c add r7, r7, 1                                 |         r7++;
    0x00019440 cmp r7, 0x40                                  |         
    0x00019444 bne 0x19430                                   |         
                                                             |     } while (r7 != 0x40);
    0x00019448 ldr r3, [r4, 0x14]                            |     r3 = *((r4 + 0x14));
    0x0001944c mvn r2, 0                                     |     r2 = ~0;
    0x00019450 add r3, r3, 1                                 |     r3++;
    0x00019454 str r3, [r4, 0x14]                            |     *((r4 + 0x14)) = r3;
    0x00019458 ldr r3, [r4]                                  |     r3 = *(r4);
    0x0001945c cmp r6, 2                                     |     
    0x00019460 str r2, [r3, r5, lsl 2]                       |     offset_1 = r5 << 2;
                                                             |     *((r3 + offset_1)) = r2;
                                                             |     if (r6 != 2) {
    0x00019464 bne 0x1938c                                   |         goto label_3;
                                                             |     }
    0x00019468 ldr r0, [pc, 0x458]                           |     r0 = *(0x198c4);
                                                             | label_11:
    0x0001946c bl 0x10c1c                                    |     puts (r0);
    0x00019470 b 0x1938c                                     |     goto label_3;
                                                             | label_18:
    0x00019474 mov r2, 0x3c                                  |     r2 = 0x3c;
    0x00019478 mov r1, sl                                    |     r1 = sl;
    0x0001947c mvn r0, 0                                     |     r0 = ~0;
    0x00019480 bl 0x18624                                    |     fcn_00018624 (r0);
    0x00019484 ldr r3, [sp, 0x64]                            |     r3 = var_64h;
    0x00019488 lsr r2, r3, 0x18                              |     r2 = r3 >> 0x18;
    0x0001948c orr r2, r2, r3, lsl 24                        |     r2 |= (r3 << 24);
    0x00019490 mov r1, r0                                    |     r1 = r0;
    0x00019494 lsl r0, r3, 8                                 |     r0 = r3 << 8;
    0x00019498 and r0, r0, 0xff0000                          |     r0 &= 0xff0000;
    0x0001949c lsr r3, r3, 8                                 |     r3 >>= 8;
    0x000194a0 orr r2, r2, r0                                |     r2 |= r0;
    0x000194a4 and r3, r3, 0xff00                            |     r3 &= 0xff00;
    0x000194a8 orr r3, r2, r3                                |     r3 = r2 | r3;
    0x000194ac cmp r1, r3                                    |     
                                                             |     if (r1 == r3) {
    0x000194b0 beq 0x19504                                   |         goto label_20;
                                                             |     }
    0x000194b4 ldr r3, [r4, 0x18]                            |     r3 = *((r4 + 0x18));
    0x000194b8 mvn r2, 1                                     |     r2 = ~1;
    0x000194bc add r3, r3, 1                                 |     r3++;
    0x000194c0 str r3, [r4, 0x18]                            |     *((r4 + 0x18)) = r3;
    0x000194c4 ldr r3, [r4]                                  |     r3 = *(r4);
    0x000194c8 cmp r6, 2                                     |     
    0x000194cc str r2, [r3, r5, lsl 2]                       |     offset_2 = r5 << 2;
                                                             |     *((r3 + offset_2)) = r2;
                                                             |     if (r6 != 2) {
    0x000194d0 bne 0x1938c                                   |         goto label_3;
                                                             |     }
    0x000194d4 ldr r3, [sp, 0x64]                            |     r3 = var_64h;
    0x000194d8 lsr r2, r3, 0x18                              |     r2 = r3 >> 0x18;
    0x000194dc lsl r0, r3, 8                                 |     r0 = r3 << 8;
    0x000194e0 orr r2, r2, r3, lsl 24                        |     r2 |= (r3 << 24);
    0x000194e4 and r0, r0, 0xff0000                          |     r0 &= 0xff0000;
    0x000194e8 lsr r3, r3, 8                                 |     r3 >>= 8;
    0x000194ec orr r2, r2, r0                                |     r2 |= r0;
    0x000194f0 and r3, r3, 0xff00                            |     r3 &= 0xff00;
    0x000194f4 orr r2, r2, r3                                |     r2 |= r3;
    0x000194f8 ldr r0, [pc, 0x3cc]                           |     r0 = ":_empty";
    0x000194fc bl 0x10bbc                                    |     printf (r0, r1, r2, r3)
    0x00019500 b 0x1938c                                     |     goto label_3;
                                                             | label_20:
    0x00019504 ldr ip, [sp, 0x30]                            |     ip = var_30h;
    0x00019508 ldr lr, [sp, 0x34]                            |     lr = var_34h;
    0x0001950c lsl fp, ip, 0x18                              |     
    0x00019510 orr r1, fp, r7                                |     r1 = fp | r7;
    0x00019514 lsl fp, ip, 8                                 |     
    0x00019518 lsr r2, lr, 0x18                              |     r2 = lr >> 0x18;
    0x0001951c and r3, fp, 0xff0000                          |     r3 = fp & 0xff0000;
    0x00019520 orr fp, r1, r3                                |     
    0x00019524 orr r0, r7, r2                                |     r0 = r7 | r2;
    0x00019528 lsl r1, lr, 0x18                              |     r1 = lr << 0x18;
    0x0001952c mov r2, 0                                     |     r2 = 0;
    0x00019530 orr sl, r0, r2                                |     sl = r0 | r2;
    0x00019534 orr r1, r1, ip, lsr 8                         |     r1 |= (ip >> 8);
    0x00019538 mov r2, 0                                     |     r2 = 0;
    0x0001953c orr r0, sl, r2                                |     r0 = sl | r2;
    0x00019540 and r3, r1, 0xff00                            |     r3 = r1 & 0xff00;
    0x00019544 mov r2, 0                                     |     r2 = 0;
    0x00019548 orr r1, fp, r3                                |     r1 = fp | r3;
    0x0001954c orr sl, r0, r2                                |     sl = r0 | r2;
    0x00019550 lsl fp, lr, 8                                 |     
    0x00019554 orr fp, fp, ip, lsr 24                        |     
    0x00019558 mov r0, sl                                    |     r0 = sl;
    0x0001955c lsr sl, ip, 8                                 |     sl = ip >> 8;
    0x00019560 and r3, fp, 0xff                              |     r3 = fp & 0xff;
    0x00019564 orr sl, sl, lr, lsl 24                        |     sl |= (lr << 24);
    0x00019568 orr fp, r1, r3                                |     
    0x0001956c and r2, sl, 0xff000000                        |     r2 = sl & 0xff000000;
    0x00019570 orr r0, r0, r2                                |     r0 |= r2;
    0x00019574 mov r1, fp                                    |     r1 = fp;
    0x00019578 mov r3, 0                                     |     r3 = 0;
    0x0001957c lsr r2, ip, 0x18                              |     r2 = ip >> 0x18;
    0x00019580 orr r1, r1, r3                                |     r1 |= r3;
    0x00019584 orr r2, r2, lr, lsl 8                         |     r2 |= (lr << 8);
    0x00019588 strd r0, r1, [sp, 0x20]                       |     __asm ("strd r0, r1, [var_20h]");
    0x0001958c and r0, r2, 0xff0000                          |     r0 = r2 & 0xff0000;
    0x00019590 mov r1, 0                                     |     r1 = 0;
    0x00019594 mov r2, r0                                    |     r2 = r0;
    0x00019598 mov r3, r1                                    |     r3 = r1;
    0x0001959c ldrd r0, r1, [sp, 0x20]                       |     __asm ("ldrd r0, r1, [var_20h]");
    0x000195a0 lsr fp, lr, 8                                 |     
    0x000195a4 orr r1, r1, r3                                |     r1 |= r3;
    0x000195a8 mov r3, r1                                    |     r3 = r1;
    0x000195ac orr r0, r0, r2                                |     r0 |= r2;
    0x000195b0 mov r1, 0                                     |     r1 = 0;
    0x000195b4 mov r2, r0                                    |     r2 = r0;
    0x000195b8 and r0, fp, 0xff00                            |     r0 = fp & 0xff00;
    0x000195bc orr fp, r3, r1                                |     
    0x000195c0 mov r3, 0                                     |     r3 = 0;
    0x000195c4 orr sl, r2, r0                                |     sl = r2 | r0;
    0x000195c8 cmp fp, r3                                    |     
    0x000195cc mvn r2, 0x80000000                            |     r2 = ~0x80000000;
    0x000195d0 cmpeq sl, r2                                  |     __asm ("cmpeq sl, r2");
                                                             |     if (fp >= r3) {
    0x000195d4 bls 0x19618                                   |         
    0x000195d8 cmp r6, 1                                     |         
                                                             |         if (r6 == 1) {
    0x000195dc bne 0x195e8                                   |             
    0x000195e0 mov r0, 0xa                                   |             r0 = 0xa;
    0x000195e4 bl 0x10b98                                    |             putchar (r0);
                                                             |         }
    0x000195e8 ldr r0, [pc, 0x2a8]                           |         
    0x000195ec mvn r3, 0x80000000                            |         r3 = ~0x80000000;
    0x000195f0 str r3, [sp, 8]                               |         var_8h = r3;
    0x000195f4 strd sl, fp, [sp]                             |         __asm ("strd sl, fp, [sp]");
    0x000195f8 ldr r2, [pc, 0x29c]                           |         r2 = stderr;
    0x000195fc mov r3, r5                                    |         r3 = r5;
    0x00019600 ldr r1, [pc, 0x2c8]                           |         r1 = ":_bad_CRC__08x__should_be__08x";
    0x00019604 ldr r0, [r0]                                  |         r0 = *(0x19894);
    0x00019608 bl 0x10c7c                                    |         fprintf (r0, ":_bad_CRC__08x__should_be__08x", r2, r3)
                                                             | label_16:
    0x0001960c ldr r0, [r4]                                  |         r0 = *(r4);
    0x00019610 bl 0x10de4                                    |         free (r0);
    0x00019614 b 0x1925c                                     |         goto label_4;
                                                             |     }
    0x00019618 ldr r2, [sp, 0x38]                            |     r2 = var_38h;
    0x0001961c ldr r1, [r4, 0x28]                            |     r1 = *((r4 + 0x28));
    0x00019620 lsr r3, r2, 0x18                              |     r3 = r2 >> 0x18;
    0x00019624 orr r0, r3, r2, lsl 24                        |     r0 = r3 | (r2 << 24);
    0x00019628 lsr r3, r2, 8                                 |     r3 = r2 >> 8;
    0x0001962c and r3, r3, 0xff00                            |     r3 &= 0xff00;
    0x00019630 lsl r2, r2, 8                                 |     r2 <<= 8;
    0x00019634 orr r3, r0, r3                                |     r3 = r0 | r3;
    0x00019638 and r2, r2, 0xff0000                          |     r2 &= 0xff0000;
    0x0001963c cmn r1, 1                                     |     
    0x00019640 orr r2, r3, r2                                |     r2 = r3 | r2;
                                                             |     if (r1 != 1) {
    0x00019644 bne 0x196fc                                   |         goto label_21;
                                                             |     }
    0x00019648 str r2, [r4, 0x28]                            |     *((r4 + 0x28)) = r2;
    0x0001964c ldr r3, [sp, 0x3c]                            |     r3 = var_3ch;
    0x00019650 ldr r1, [r8, 0xe8]                            |     r1 = *((r8 + 0xe8));
    0x00019654 lsr r0, r3, 0x18                              |     r0 = r3 >> 0x18;
    0x00019658 lsl r2, r3, 8                                 |     r2 = r3 << 8;
    0x0001965c orr r0, r0, r3, lsl 24                        |     r0 |= (r3 << 24);
    0x00019660 and r2, r2, 0xff0000                          |     r2 &= 0xff0000;
    0x00019664 lsr r3, r3, 8                                 |     r3 >>= 8;
    0x00019668 orr r0, r0, r2                                |     r0 |= r2;
    0x0001966c and r3, r3, 0xff00                            |     r3 &= 0xff00;
    0x00019670 orr r0, r0, r3                                |     r0 |= r3;
    0x00019674 str r0, [r4, 0x2c]                            |     *((r4 + 0x2c)) = r0;
    0x00019678 bl 0x19ab0                                    |     fcn_00019ab0 (r0, r1);
    0x0001967c cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x00019680 beq 0x197fc                                   |         goto label_22;
                                                             |     }
    0x00019684 cmp r6, 1                                     |     
                                                             |     if (r6 != 1) {
    0x00019688 bne 0x196e8                                   |         goto label_23;
                                                             |     }
    0x0001968c mov r0, 0xa                                   |     r0 = 0xa;
    0x00019690 bl 0x10b98                                    |     putchar (r0);
                                                             |     do {
                                                             | label_5:
    0x00019694 ldr r3, [r8, 0xe8]                            |         r3 = *((r8 + 0xe8));
    0x00019698 str r5, [sp]                                  |         *(sp) = r5;
    0x0001969c str r3, [sp, 4]                               |         var_4h = r3;
    0x000196a0 ldr r7, [pc, 0x1f0]                           |         r7 = *(0x19894);
    0x000196a4 ldr r3, [r4, 0x2c]                            |         r3 = *((r4 + 0x2c));
    0x000196a8 ldr r2, [pc, 0x1ec]                           |         r2 = stderr;
    0x000196ac ldr r1, [pc, 0x220]                           |         r1 = "_s:_error_:_erase_counter_in_EB__d_is__llu__while_this_program_expects_them_to_be_less_than__u";
                                                             | label_6:
    0x000196b0 ldr r0, [r7]                                  |         r0 = *(r7);
    0x000196b4 bl 0x10c7c                                    |         fprintf (r0, "_s:_error_:_erase_counter_in_EB__d_is__llu__while_this_program_expects_them_to_be_less_than__u", r2, r3, r4, r5)
    0x000196b8 mov r3, r5                                    |         r3 = r5;
    0x000196bc ldr r2, [pc, 0x1d8]                           |         r2 = stderr;
    0x000196c0 ldr r1, [pc, 0x210]                           |         r1 = "%s: warning!: bad data offset %d at eraseblock %d (nof multiple of min. I/O unit size %d)\n";
    0x000196c4 ldr r0, [r7]                                  |         r0 = *(r7);
    0x000196c8 bl 0x10c7c                                    |         fprintf (r0, "%s: warning!: bad data offset %d at eraseblock %d (nof multiple of min. I/O unit size %d)\n", r2, r3)
    0x000196cc ldr r3, [r4, 0x18]                            |         r3 = *((r4 + 0x18));
    0x000196d0 mvn r2, 1                                     |         r2 = ~1;
    0x000196d4 add r3, r3, 1                                 |         r3++;
    0x000196d8 str r3, [r4, 0x18]                            |         *((r4 + 0x18)) = r3;
    0x000196dc ldr r3, [r4]                                  |         r3 = *(r4);
    0x000196e0 str r2, [r3, r5, lsl 2]                       |         offset_3 = r5 << 2;
                                                             |         *((r3 + offset_3)) = r2;
    0x000196e4 b 0x1938c                                     |         goto label_3;
                                                             | label_23:
    0x000196e8 cmp r6, 2                                     |         
    0x000196ec bne 0x19694                                   |         
                                                             |     } while (r6 != 2);
    0x000196f0 ldr r0, [pc, 0x1e4]                           |     r0 = "_s:_warning_:_treat_eraseblock__d_as_corrupted";
    0x000196f4 bl 0x10c1c                                    |     puts ("_s:_warning_:_treat_eraseblock__d_as_corrupted");
    0x000196f8 b 0x19694                                     |     goto label_5;
                                                             | label_21:
    0x000196fc cmp r1, r2                                    |     
                                                             |     if (r1 == r2) {
    0x00019700 beq 0x19768                                   |         goto label_24;
                                                             |     }
    0x00019704 cmp r6, 1                                     |     
                                                             |     if (r6 != 1) {
    0x00019708 bne 0x19754                                   |         goto label_25;
                                                             |     }
    0x0001970c mov r0, 0xa                                   |     r0 = 0xa;
    0x00019710 bl 0x10b98                                    |     putchar (r0);
                                                             |     do {
                                                             | label_7:
    0x00019714 ldr r3, [sp, 0x38]                            |         r3 = var_38h;
    0x00019718 str r5, [sp, 4]                               |         var_4h = r5;
    0x0001971c lsr r2, r3, 0x18                              |         r2 = r3 >> 0x18;
    0x00019720 lsl r1, r3, 8                                 |         r1 = r3 << 8;
    0x00019724 orr r2, r2, r3, lsl 24                        |         r2 |= (r3 << 24);
    0x00019728 and r1, r1, 0xff0000                          |         r1 &= 0xff0000;
    0x0001972c lsr r3, r3, 8                                 |         r3 >>= 8;
    0x00019730 orr r2, r2, r1                                |         r2 |= r1;
    0x00019734 and r3, r3, 0xff00                            |         r3 &= 0xff00;
    0x00019738 orr r3, r2, r3                                |         r3 = r2 | r3;
    0x0001973c str r3, [sp]                                  |         *(sp) = r3;
    0x00019740 ldr r7, [pc, 0x150]                           |         r7 = *(0x19894);
    0x00019744 ldr r3, [r4, 0x28]                            |         r3 = *((r4 + 0x28));
    0x00019748 ldr r2, [pc, 0x14c]                           |         r2 = stderr;
    0x0001974c ldr r1, [pc, 0x18c]                           |         r1 = ":_corrupted_because_of_the_below";
    0x00019750 b 0x196b0                                     |         goto label_6;
                                                             | label_25:
    0x00019754 cmp r6, 2                                     |         
    0x00019758 bne 0x19714                                   |         
                                                             |     } while (r6 != 2);
    0x0001975c ldr r0, [pc, 0x178]                           |     r0 = "_s:_warning_:_treat_eraseblock__d_as_corrupted";
    0x00019760 bl 0x10c1c                                    |     puts ("_s:_warning_:_treat_eraseblock__d_as_corrupted");
    0x00019764 b 0x19714                                     |     goto label_7;
                                                             | label_24:
    0x00019768 ldr r3, [sp, 0x3c]                            |     r3 = var_3ch;
    0x0001976c lsr r2, r3, 0x18                              |     r2 = r3 >> 0x18;
    0x00019770 lsl r1, r3, 8                                 |     r1 = r3 << 8;
    0x00019774 orr r2, r2, r3, lsl 24                        |     r2 |= (r3 << 24);
    0x00019778 and r1, r1, 0xff0000                          |     r1 &= 0xff0000;
    0x0001977c lsr r3, r3, 8                                 |     r3 >>= 8;
    0x00019780 orr r2, r2, r1                                |     r2 |= r1;
    0x00019784 and r3, r3, 0xff00                            |     r3 &= 0xff00;
    0x00019788 orr r3, r2, r3                                |     r3 = r2 | r3;
    0x0001978c ldr r2, [r4, 0x2c]                            |     r2 = *((r4 + 0x2c));
    0x00019790 cmp r3, r2                                    |     
                                                             |     if (r3 == r2) {
    0x00019794 beq 0x197fc                                   |         goto label_22;
                                                             |     }
    0x00019798 cmp r6, 1                                     |     
                                                             |     if (r6 != 1) {
    0x0001979c bne 0x197e8                                   |         goto label_26;
                                                             |     }
    0x000197a0 mov r0, 0xa                                   |     r0 = 0xa;
    0x000197a4 bl 0x10b98                                    |     putchar (r0);
                                                             |     do {
                                                             | label_8:
    0x000197a8 ldr r3, [sp, 0x3c]                            |         r3 = var_3ch;
    0x000197ac str r5, [sp, 4]                               |         var_4h = r5;
    0x000197b0 lsr r2, r3, 0x18                              |         r2 = r3 >> 0x18;
    0x000197b4 lsl r1, r3, 8                                 |         r1 = r3 << 8;
    0x000197b8 orr r2, r2, r3, lsl 24                        |         r2 |= (r3 << 24);
    0x000197bc and r1, r1, 0xff0000                          |         r1 &= 0xff0000;
    0x000197c0 lsr r3, r3, 8                                 |         r3 >>= 8;
    0x000197c4 orr r2, r2, r1                                |         r2 |= r1;
    0x000197c8 and r3, r3, 0xff00                            |         r3 &= 0xff00;
    0x000197cc orr r3, r2, r3                                |         r3 = r2 | r3;
    0x000197d0 str r3, [sp]                                  |         *(sp) = r3;
    0x000197d4 ldr r7, [pc, 0xbc]                            |         r7 = *(0x19894);
    0x000197d8 ldr r3, [r4, 0x2c]                            |         r3 = *((r4 + 0x2c));
    0x000197dc ldr r2, [pc, 0xb8]                            |         r2 = stderr;
    0x000197e0 ldr r1, [pc, 0xfc]                            |         r1 = "_s:_warning_:_inconsistent_VID_header_offset:_was__d__but_is__d_in_eraseblock__d";
    0x000197e4 b 0x196b0                                     |         goto label_6;
                                                             | label_26:
    0x000197e8 cmp r6, 2                                     |         
    0x000197ec bne 0x197a8                                   |         
                                                             |     } while (r6 != 2);
    0x000197f0 ldr r0, [pc, 0xe4]                            |     r0 = "_s:_warning_:_treat_eraseblock__d_as_corrupted";
    0x000197f4 bl 0x10c1c                                    |     puts ("_s:_warning_:_treat_eraseblock__d_as_corrupted");
    0x000197f8 b 0x197a8                                     |     goto label_8;
                                                             | label_22:
    0x000197fc ldr r3, [r4, 0x10]                            |     r3 = *((r4 + 0x10));
    0x00019800 cmp r6, 2                                     |     
    0x00019804 add r3, r3, 1                                 |     r3++;
    0x00019808 str r3, [r4, 0x10]                            |     *((r4 + 0x10)) = r3;
    0x0001980c ldr r3, [r4]                                  |     r3 = *(r4);
    0x00019810 str sl, [r3, r5, lsl 2]                       |     offset_4 = r5 << 2;
                                                             |     *((r3 + offset_4)) = sl;
                                                             |     if (r6 != 2) {
    0x00019814 bne 0x1938c                                   |         goto label_3;
                                                             |     }
    0x00019818 mov r1, sl                                    |     r1 = sl;
    0x0001981c ldr r0, [pc, 0xc4]                            |     r0 = "_s:_warning_:_inconsistent_data_offset:_was__d__but_is__d_in_eraseblock__d";
    0x00019820 bl 0x10bbc                                    |     printf ("_s:_warning_:_inconsistent_data_offset:_was__d__but_is__d_in_eraseblock__d", r1)
    0x00019824 b 0x1938c                                     |     goto label_3;
                                                             |     do {
    0x00019828 ldr r2, [r4]                                  |         r2 = *(r4);
    0x0001982c ldr r2, [r2, r3, lsl 2]                       |         offset_5 = r3 << 2;
                                                             |         r2 = *((r2 + offset_5));
    0x00019830 cmp r2, 0                                     |         
                                                             |         if (r2 >= 0) {
    0x00019834 blt 0x19840                                   |             
    0x00019838 adds r0, r0, r2                               |             r0 += r2;
    0x0001983c adc r1, r1, 0                                 |             __asm ("adc r1, r1, 0");
                                                             |         }
    0x00019840 add r3, r3, 1                                 |         r3++;
                                                             | label_10:
    0x00019844 cmp r7, r3                                    |         
    0x00019848 bgt 0x19828                                   |         
                                                             |     } while (r7 > r3);
    0x0001984c mov r2, r5                                    |     r2 = r5;
    0x00019850 asr r3, r5, 0x1f                              |     r3 = r5 >> 0x1f;
    0x00019854 bl 0x19ba4                                    |     fcn_00019ba4 (r0, r1);
    0x00019858 strd r0, r1, [r4, 8]                          |     __asm ("strd r0, r1, [r4, 8]");
    0x0001985c b 0x192b4                                     |     goto label_9;
                                                             | label_14:
    0x00019860 mov r0, 0                                     |     r0 = 0;
    0x00019864 mov r1, 0                                     |     r1 = 0;
    0x00019868 mov r3, 0                                     |     r3 = 0;
    0x0001986c b 0x19844                                     |     goto label_10;
                                                             | label_19:
    0x00019870 ldr r3, [r4, 0x1c]                            |     r3 = *((r4 + 0x1c));
    0x00019874 mvn r2, 2                                     |     r2 = ~2;
    0x00019878 add r3, r3, 1                                 |     r3++;
    0x0001987c str r3, [r4, 0x1c]                            |     *((r4 + 0x1c)) = r3;
    0x00019880 ldr r3, [r4]                                  |     r3 = *(r4);
    0x00019884 cmp r6, 2                                     |     
    0x00019888 str r2, [r3, r5, lsl 2]                       |     offset_6 = r5 << 2;
                                                             |     *((r3 + offset_6)) = r2;
                                                             |     if (r6 != 2) {
    0x0001988c bne 0x1938c                                   |         goto label_3;
                                                             |     }
    0x00019890 ldr r0, [pc, 0x54]                            |     r0 = ":_OK__erase_counter__u";
    0x00019894 b 0x1946c                                     |     goto label_11;
                                                             | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/ubiformat @ 0x10e54 */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                             |  
    ; (fcn) main ()                                          | int32_t main (int32_t argc, char ** argv) {
                                                             |     int32_t var_1e0h;
                                                             |     int32_t var_1dch;
                                                             |     int32_t var_1d8h;
                                                             |     int32_t var_1d4h;
                                                             |     int32_t fildes;
                                                             |     int32_t var_1cch;
                                                             |     int32_t var_1c8h;
                                                             |     int32_t var_1c4h;
                                                             |     int32_t var_1c0h;
                                                             |     int32_t var_1b4h;
                                                             |     int32_t var_1b0h;
                                                             |     int32_t var_1a4h;
                                                             |     int32_t var_1a0h;
                                                             |     int32_t var_190h;
                                                             |     int32_t var_18ch;
                                                             |     int32_t var_184h;
                                                             |     char * * endptr;
                                                             |     int32_t var_114h;
                                                             |     int32_t var_4ch;
                                                             |     int32_t var_44h;
                                                             |     int32_t var_40h;
                                                             |     int32_t var_3ch;
                                                             |     int32_t var_38h;
                                                             |     int32_t var_28h;
                                                             |     int32_t var_0h;
                                                             |     int32_t var_4h;
                                                             |     int32_t var_8h;
                                                             |     int32_t var_ch;
                                                             |     int32_t var_10h;
                                                             |     int32_t var_14h;
                                                             |     int8_t var_0h_3;
                                                             |     void * buf;
                                                             |     int8_t var_1h;
                                                             |     int8_t var_2h;
                                                             |     int8_t var_3h;
                                                             |     int32_t var_0h_2;
                                                             |     int8_t var_8h_2;
                                                             |     int8_t var_9h;
                                                             |     int8_t var_ah;
                                                             |     int8_t var_bh;
                                                             |     int8_t var_dh;
                                                             |     int8_t var_eh;
                                                             |     int8_t var_fh;
                                                             |     int8_t var_19h;
                                                             |     int8_t var_1ah;
                                                             |     int8_t var_1bh;
                                                             |     int8_t var_3dh;
                                                             |     int8_t var_3eh;
                                                             |     int8_t var_3fh;
                                                             |     int32_t var_sp_28h;
                                                             |     int32_t var_sp_4ch;
                                                             |     int32_t var_20h_2;
                                                             |     int32_t var_20h;
                                                             |     r0 = argc;
                                                             |     r1 = argv;
    0x00010e54 push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x00010e58 ldr r4, [pc, 0xef0]                           |     r4 = *(0x11d4c);
    0x00010e5c add fp, sp, 0x20                              |     
    0x00010e60 sub sp, sp, 0x1e4                             |     
    0x00010e64 mov sb, r1                                    |     sb = r1;
    0x00010e68 mov r8, r0                                    |     r8 = r0;
    0x00010e6c bl 0x185d8                                    |     fcn_000185d8 ();
    0x00010e70 bl 0x10ca0                                    |     rand ();
    0x00010e74 ldr sl, [pc, 0xed8]                           |     sl = "sub_page_size";
    0x00010e78 ldr r5, [pc, 0xed8]                           |     r5 = "sub_page_size";
    0x00010e7c str r0, [r4, 0x14]                            |     *((r4 + 0x14)) = r0;
                                                             | label_1:
    0x00010e80 mov r7, 0                                     |     r7 = 0;
    0x00010e84 str r7, [fp, -0x18c]                          |     var_18ch = r7;
    0x00010e88 mov r3, sl                                    |     r3 = sl;
    0x00010e8c str r7, [sp]                                  |     *(sp) = r7;
    0x00010e90 ldr r2, [pc, 0xec4]                           |     r2 = optarg;
    0x00010e94 mov r1, sb                                    |     r1 = sb;
    0x00010e98 mov r0, r8                                    |     r0 = r8;
    0x00010e9c bl 0x10be0                                    |     r0 = getopt_long ();
    0x00010ea0 cmn r0, 1                                     |     
    0x00010ea4 mov r6, r0                                    |     r6 = r0;
                                                             |     if (r0 == 1) {
    0x00010ea8 beq 0x111ec                                   |         goto label_26;
                                                             |     }
    0x00010eac cmp r0, 0x65                                  |     
                                                             |     if (r0 == 0x65) {
    0x00010eb0 beq 0x1102c                                   |         goto label_27;
                                                             |     }
                                                             |     if (r0 > 0x65) {
    0x00010eb4 bgt 0x10f28                                   |         goto label_28;
                                                             |     }
    0x00010eb8 cmp r0, 0x4f                                  |     
                                                             |     if (r0 == 0x4f) {
    0x00010ebc beq 0x10fec                                   |         goto label_29;
                                                             |     }
                                                             |     if (r0 > 0x4f) {
    0x00010ec0 bgt 0x10ee8                                   |         goto label_30;
                                                             |     }
    0x00010ec4 cmp r0, 0x3a                                  |     
                                                             |     if (r0 == 0x3a) {
    0x00010ec8 beq 0x111e0                                   |         goto label_31;
                                                             |     }
    0x00010ecc cmp r0, 0x3f                                  |     
                                                             |     if (r0 == 0x3f) {
    0x00010ed0 beq 0x111bc                                   |         goto label_32;
                                                             |     }
                                                             |     do {
                                                             | label_0:
    0x00010ed4 ldr r3, [pc, 0xe84]                           |         r3 = "nh_Vyqve:x:s:O:f:S:";
    0x00010ed8 ldr r0, [pc, 0xe84]                           |         r0 = stderr;
    0x00010edc ldr r1, [r3]                                  |         r1 = "nh_Vyqve:x:s:O:f:S:";
    0x00010ee0 bl 0x10da8                                    |         fputs (r0, "nh_Vyqve:x:s:O:f:S:");
    0x00010ee4 b 0x10fa8                                     |         goto label_2;
                                                             | label_30:
    0x00010ee8 cmp r0, 0x53                                  |         
                                                             |         if (r0 == 0x53) {
    0x00010eec beq 0x11100                                   |             goto label_33;
                                                             |         }
    0x00010ef0 cmp r0, 0x56                                  |         
                                                             |         if (r0 == 0x56) {
    0x00010ef4 beq 0x11180                                   |             goto label_34;
                                                             |         }
    0x00010ef8 cmp r0, 0x51                                  |         
    0x00010efc bne 0x10ed4                                   |         
                                                             |     } while (r0 != 0x51);
    0x00010f00 sub r1, fp, 0x18c                             |     r1 -= var_18ch;
    0x00010f04 ldr r0, [r5]                                  |     r0 = *(r5);
    0x00010f08 bl 0x12570                                    |     fcn_00012570 (r0, r1);
    0x00010f0c ldr r3, [fp, -0x18c]                          |     r3 = var_18ch;
    0x00010f10 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00010f14 beq 0x11178                                   |         goto label_35;
                                                             |     }
    0x00010f18 ldr r3, [r5]                                  |     r3 = *(r5);
    0x00010f1c ldr r2, [pc, 0xf78]                           |     r2 = stderr;
    0x00010f20 ldr r1, [pc, 0xe40]                           |     r1 = "Use -h for help\n";
    0x00010f24 b 0x10f9c                                     |     goto label_3;
                                                             | label_28:
    0x00010f28 cmp r0, 0x73                                  |     
                                                             |     if (r0 == 0x73) {
    0x00010f2c beq 0x10f7c                                   |         goto label_36;
                                                             |     }
                                                             |     if (r0 > 0x73) {
    0x00010f30 bgt 0x10f58                                   |         goto label_37;
                                                             |     }
    0x00010f34 cmp r0, 0x68                                  |     
                                                             |     if (r0 == 0x68) {
    0x00010f38 beq 0x11198                                   |         goto label_38;
                                                             |     }
    0x00010f3c cmp r0, 0x71                                  |     
                                                             |     if (r0 == 0x71) {
    0x00010f40 beq 0x11134                                   |         goto label_39;
                                                             |     }
    0x00010f44 cmp r0, 0x66                                  |     
                                                             |     if (r0 != 0x66) {
    0x00010f48 bne 0x10ed4                                   |         goto label_0;
                                                             |     }
    0x00010f4c ldr r3, [r5]                                  |     r3 = *(r5);
    0x00010f50 str r3, [r4, 0x28]                            |     *((r4 + 0x28)) = r3;
    0x00010f54 b 0x10e80                                     |     goto label_1;
                                                             | label_37:
    0x00010f58 cmp r0, 0x78                                  |     
                                                             |     if (r0 == 0x78) {
    0x00010f5c beq 0x11140                                   |         goto label_40;
                                                             |     }
    0x00010f60 cmp r0, 0x79                                  |     
                                                             |     if (r0 == 0x79) {
    0x00010f64 beq 0x11128                                   |         goto label_41;
                                                             |     }
    0x00010f68 cmp r0, 0x76                                  |     
                                                             |     if (r0 != 0x76) {
    0x00010f6c bne 0x10ed4                                   |         goto label_0;
                                                             |     }
    0x00010f70 ldrb r3, [r4]                                 |     r3 = *(r4);
    0x00010f74 orr r3, r3, 4                                 |     r3 |= 4;
    0x00010f78 b 0x110f8                                     |     goto label_4;
                                                             | label_36:
    0x00010f7c ldr r0, [r5]                                  |     r0 = *(r5);
    0x00010f80 bl 0x18360                                    |     r0 = fcn_00018360 (r0);
    0x00010f84 cmp r0, 0                                     |     
    0x00010f88 str r0, [r4, 8]                               |     *((r4 + 8)) = r0;
                                                             |     if (r0 <= 0) {
    0x00010f8c bgt 0x10fb8                                   |         
    0x00010f90 ldr r3, [r5]                                  |         r3 = *(r5);
    0x00010f94 ldr r2, [pc, 0xf00]                           |         r2 = stderr;
    0x00010f98 ldr r1, [pc, 0xdcc]                           |         r1 = "_s:_error_:_bad_UBI_image_sequence_number:___s_";
                                                             | label_3:
    0x00010f9c ldr r0, [pc, 0xdbc]                           |         
    0x00010fa0 ldr r0, [r0]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00010fa4 bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "_s:_error_:_bad_UBI_image_sequence_number:___s_", r2, r3)
                                                             | label_2:
    0x00010fa8 mvn r6, 0                                     |         r6 = ~0;
                                                             | label_6:
    0x00010fac mov r0, r6                                    |         r0 = r6;
    0x00010fb0 sub sp, fp, 0x20                              |         
    0x00010fb4 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}      |         
                                                             |     }
    0x00010fb8 asr r7, r0, 0x1f                              |     r7 = r0 >> 0x1f;
    0x00010fbc subs r2, r0, 1                                |     r2 = r0 - 1;
    0x00010fc0 sbc r3, r7, 0                                 |     __asm ("sbc r3, r7, 0");
    0x00010fc4 and r0, r0, r2                                |     r0 &= r2;
    0x00010fc8 and r1, r7, r3                                |     r1 = r7 & r3;
    0x00010fcc orrs r3, r0, r1                               |     r3 = r0 | r1;
                                                             |     if (r3 == r0) {
    0x00010fd0 beq 0x10e80                                   |         goto label_1;
                                                             |     }
    0x00010fd4 ldr r2, [pc, 0xec0]                           |     r2 = stderr;
    0x00010fd8 ldr r1, [pc, 0xd90]                           |     r1 = "_s:_error_:_bad_sub_page_size:___s_";
                                                             | label_5:
    0x00010fdc ldr r3, [pc, 0xd7c]                           |     r3 = "nh_Vyqve:x:s:O:f:S:";
    0x00010fe0 ldr r0, [r3]                                  |     r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00010fe4 bl 0x10c7c                                    |     fprintf ("nh_Vyqve:x:s:O:f:S:", "_s:_error_:_bad_sub_page_size:___s_", r2, "nh_Vyqve:x:s:O:f:S:")
    0x00010fe8 b 0x10fa8                                     |     goto label_2;
                                                             | label_29:
    0x00010fec sub r1, fp, 0x18c                             |     r1 -= var_18ch;
    0x00010ff0 ldr r0, [r5]                                  |     r0 = *(r5);
    0x00010ff4 bl 0x12570                                    |     fcn_00012570 (r0, r1);
    0x00010ff8 ldr r3, [fp, -0x18c]                          |     r3 = var_18ch;
    0x00010ffc cmp r0, 0                                     |     
    0x00011000 str r0, [r4, 0xc]                             |     *((r4 + 0xc)) = r0;
                                                             |     if (r0 <= 0) {
    0x00011004 movgt r0, 0                                   |         r0 = 0;
                                                             |     }
                                                             |     if (r0 > 0) {
    0x00011008 movle r0, 1                                   |         r0 = 1;
                                                             |     }
    0x0001100c cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00011010 movne r0, 1                                   |         r0 = 1;
                                                             |     }
    0x00011014 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00011018 beq 0x10e80                                   |         goto label_1;
                                                             |     }
    0x0001101c ldr r3, [r5]                                  |     r3 = *(r5);
    0x00011020 ldr r2, [pc, 0xe74]                           |     r2 = stderr;
    0x00011024 ldr r1, [pc, 0xd48]                           |     r1 = "%s: error!: sub-page size should be power of 2\n";
    0x00011028 b 0x10f9c                                     |     goto label_3;
                                                             | label_27:
    0x0001102c ldr r3, [r5]                                  |     r3 = *(r5);
    0x00011030 mov r2, r7                                    |     r2 = r7;
    0x00011034 mov r0, r3                                    |     r0 = r3;
    0x00011038 sub r1, fp, 0x124                             |     r1 -= endptr;
    0x0001103c str r3, [fp, -0x1c8]                          |     var_1c8h = r3;
    0x00011040 bl 0x10d00                                    |     strtoull (r0, r1, r2);
    0x00011044 ldr r3, [fp, -0x1c8]                          |     r3 = var_1c8h;
    0x00011048 ldrb r2, [r3]                                 |     r2 = *(r3);
    0x0001104c cmp r2, 0                                     |     
    0x00011050 mov r6, r0                                    |     r6 = r0;
    0x00011054 mov r7, r1                                    |     r7 = r1;
                                                             |     if (r2 != 0) {
    0x00011058 beq 0x1106c                                   |         
    0x0001105c ldr r2, [fp, -0x124]                          |         r2 = endptr;
    0x00011060 ldrb r2, [r2]                                 |         r2 = *(r2);
    0x00011064 cmp r2, 0                                     |         
                                                             |         if (r2 == 0) {
    0x00011068 beq 0x11090                                   |             goto label_42;
                                                             |         }
                                                             |     }
    0x0001106c ldr r0, [pc, 0xcec]                           |     
    0x00011070 str r3, [sp]                                  |     *(sp) = r3;
    0x00011074 ldr r2, [pc, 0xe20]                           |     r2 = stderr;
    0x00011078 ldr r3, [pc, 0xcf8]                           |     r3 = "%s: error!: bad VID header offset: \"%s\"\n";
    0x0001107c ldr r1, [pc, 0xcf8]                           |     r1 = "strtoull";
    0x00011080 ldr r0, [r0]                                  |     r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011084 bl 0x10c7c                                    |     fprintf ("nh_Vyqve:x:s:O:f:S:", "strtoull", r2, r3)
    0x00011088 mov r3, 1                                     |     r3 = 1;
    0x0001108c str r3, [fp, -0x18c]                          |     var_18ch = r3;
                                                             | label_42:
    0x00011090 ldr r3, [fp, -0x18c]                          |     r3 = var_18ch;
    0x00011094 strd r6, r7, [r4, 0x20]                       |     __asm ("strd r6, r7, [r4, 0x20]");
    0x00011098 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x0001109c lsreq r3, r7, 0x1f                            |         r3 = r7 >> 0x1f;
                                                             |     }
                                                             |     if (r3 == 0) {
    0x000110a0 movne r3, 1                                   |         r3 = 1;
                                                             |     }
    0x000110a4 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x000110a8 ldrne r3, [r5]                                |         r3 = *(r5);
                                                             |     }
                                                             |     if (r3 == 0) {
    0x000110ac ldrne r2, [pc, 0xde8]                         |         r2 = "ubiformat";
                                                             |     }
                                                             |     if (r3 != 0) {
    0x000110b0 ldrne r1, [pc, 0xcc8]                         |         r1 = "%s: error!: bad erase counter value: \"%s\"\n";
                                                             |         goto label_43;
                                                             |     }
                                                             |     if (r3 != 0) {
                                                             | label_43:
    0x000110b4 bne 0x10f9c                                   |         goto label_3;
                                                             |     }
    0x000110b8 mvn r2, 0x80000001                            |     r2 = ~0x80000001;
    0x000110bc mov r3, 0                                     |     r3 = 0;
    0x000110c0 cmp r2, r6                                    |     
    0x000110c4 sbcs r3, r3, r7                               |     __asm ("sbcs r3, r3, r7");
                                                             |     if (r2 < r6) {
    0x000110c8 bge 0x110f0                                   |         
    0x000110cc mvn r3, 0x80000000                            |         r3 = ~0x80000000;
    0x000110d0 str r3, [sp, 8]                               |         var_8h = r3;
    0x000110d4 ldr r3, [pc, 0xc84]                           |         r3 = "nh_Vyqve:x:s:O:f:S:";
    0x000110d8 strd r6, r7, [sp]                             |         __asm ("strd r6, r7, [sp]");
    0x000110dc ldr r2, [pc, 0xdb8]                           |         r2 = stderr;
    0x000110e0 ldr r1, [pc, 0xc9c]                           |         r1 = "%s: error!: bad erase counter value: \"%s\"\n";
    0x000110e4 ldr r0, [r3]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x000110e8 bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "%s: error!: bad erase counter value: \"%s\"\n", r2, r3, r4, r5, r6)
    0x000110ec b 0x10fa8                                     |         goto label_2;
                                                             |     }
    0x000110f0 ldrb r3, [r4]                                 |     r3 = *(r4);
    0x000110f4 orr r3, r3, 8                                 |     r3 |= 8;
                                                             | label_4:
    0x000110f8 strb r3, [r4]                                 |     *(r4) = r3;
    0x000110fc b 0x10e80                                     |     goto label_1;
                                                             | label_33:
    0x00011100 ldr r0, [r5]                                  |     r0 = *(r5);
    0x00011104 bl 0x18360                                    |     r0 = fcn_00018360 (r0);
    0x00011108 cmp r0, 1                                     |     
    0x0001110c sbcs r3, r1, 0                                |     __asm ("sbcs r3, r1, 0");
    0x00011110 strd r0, r1, [r4, 0x18]                       |     __asm ("strd r0, r1, [r4, 0x18]");
                                                             |     if (r0 >= 1) {
    0x00011114 bge 0x10e80                                   |         goto label_1;
                                                             |     }
    0x00011118 ldr r3, [r5]                                  |     r3 = *(r5);
    0x0001111c ldr r2, [pc, 0xd78]                           |     r2 = stderr;
    0x00011120 ldr r1, [pc, 0xc60]                           |     r1 = "_s:_error_:_too_high_erase__llu__counter__max_is__u";
    0x00011124 b 0x10f9c                                     |     goto label_3;
                                                             | label_41:
    0x00011128 ldrb r3, [r4]                                 |     r3 = *(r4);
    0x0001112c orr r3, r3, 1                                 |     r3 |= 1;
    0x00011130 b 0x110f8                                     |     goto label_4;
                                                             | label_39:
    0x00011134 ldrb r3, [r4]                                 |     r3 = *(r4);
    0x00011138 orr r3, r3, 2                                 |     r3 |= 2;
    0x0001113c b 0x110f8                                     |     goto label_4;
                                                             | label_40:
    0x00011140 sub r1, fp, 0x18c                             |     r1 -= var_18ch;
    0x00011144 ldr r0, [r5]                                  |     r0 = *(r5);
    0x00011148 bl 0x12570                                    |     fcn_00012570 (r0, r1);
    0x0001114c ldr r3, [fp, -0x18c]                          |     r3 = var_18ch;
    0x00011150 cmp r3, 0                                     |     
    0x00011154 str r0, [r4, 0x10]                            |     *((r4 + 0x10)) = r0;
                                                             |     if (r3 != 0) {
    0x00011158 lsreq r0, r0, 0x1f                            |         r0 >>= 0x1f;
                                                             |     }
                                                             |     if (r3 == 0) {
    0x0001115c movne r0, 1                                   |         r0 = 1;
                                                             |     }
    0x00011160 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00011164 beq 0x10e80                                   |         goto label_1;
                                                             |     }
    0x00011168 ldr r3, [r5]                                  |     r3 = *(r5);
    0x0001116c ldr r2, [pc, 0xd28]                           |     r2 = stderr;
    0x00011170 ldr r1, [pc, 0xc14]                           |     r1 = "%s: error!: bad image-size: \"%s\"\n";
    0x00011174 b 0x10f9c                                     |     goto label_3;
                                                             | label_35:
    0x00011178 str r0, [r4, 0x14]                            |     *((r4 + 0x14)) = r0;
    0x0001117c b 0x10e80                                     |     goto label_1;
                                                             | label_34:
    0x00011180 ldr r2, [pc, 0xc08]                           |     r2 = "%s: error!: bad UBI version: \"%s\"\n";
    0x00011184 ldr r1, [pc, 0xd10]                           |     r1 = stderr;
    0x00011188 ldr r0, [pc, 0xc04]                           |     r0 = "2.1.0";
    0x0001118c bl 0x10bbc                                    |     printf ("2.1.0", r1, "%s: error!: bad UBI version: \"%s\"\n")
                                                             |     do {
    0x00011190 mov r0, r7                                    |         r0 = r7;
    0x00011194 bl 0x10d84                                    |         exit (r0);
                                                             | label_38:
    0x00011198 ldr r1, [pc, 0xbf8]                           |         r1 = "%s (mtd-utils) %s\n";
    0x0001119c ldr r0, [pc, 0xbf8]                           |         r0 = "ubiformat_version_2.1.0___a_tool_to_format_MTD_devices_and_flash_UBI_images";
    0x000111a0 bl 0x10bbc                                    |         printf ("ubiformat_version_2.1.0___a_tool_to_format_MTD_devices_and_flash_UBI_images", "%s (mtd-utils) %s\n")
    0x000111a4 ldr r1, [pc, 0xbf4]                           |         r1 = "_s";
    0x000111a8 ldr r0, [pc, 0xbec]                           |         r0 = "ubiformat_version_2.1.0___a_tool_to_format_MTD_devices_and_flash_UBI_images";
    0x000111ac bl 0x10bbc                                    |         printf ("ubiformat_version_2.1.0___a_tool_to_format_MTD_devices_and_flash_UBI_images", "_s")
    0x000111b0 ldr r0, [pc, 0xbec]                           |         r0 = "Usage:_ubiformat__MTD_device_node_file_name____s__bytes_____O__offs_____n___Q__num_____f__file_____S__bytes_____e__value_____x__num_____y____q____v____h____sub_page_size_bytes______vid_hdr_offset_offs______no_volume_table____flash_image_fil";
    0x000111b4 bl 0x10c1c                                    |         puts ("Usage:_ubiformat__MTD_device_node_file_name____s__bytes_____O__offs_____n___Q__num_____f__file_____S__bytes_____e__value_____x__num_____y____q____v____h____sub_page_size_bytes______vid_hdr_offset_offs______no_volume_table____flash_image_fil");
    0x000111b8 b 0x11190                                     |         
                                                             |     } while (1);
                                                             | label_32:
    0x000111bc ldr r1, [pc, 0xbd4]                           |     r1 = "%s (mtd-utils) %s\n";
    0x000111c0 ldr r0, [pc, 0xbd4]                           |     r0 = "ubiformat_version_2.1.0___a_tool_to_format_MTD_devices_and_flash_UBI_images";
    0x000111c4 bl 0x10bbc                                    |     printf ("ubiformat_version_2.1.0___a_tool_to_format_MTD_devices_and_flash_UBI_images", "%s (mtd-utils) %s\n")
    0x000111c8 ldr r1, [pc, 0xbd0]                           |     r1 = "_s";
    0x000111cc ldr r0, [pc, 0xbc8]                           |     r0 = "ubiformat_version_2.1.0___a_tool_to_format_MTD_devices_and_flash_UBI_images";
    0x000111d0 bl 0x10bbc                                    |     printf ("ubiformat_version_2.1.0___a_tool_to_format_MTD_devices_and_flash_UBI_images", "_s")
    0x000111d4 ldr r0, [pc, 0xbc8]                           |     r0 = "Usage:_ubiformat__MTD_device_node_file_name____s__bytes_____O__offs_____n___Q__num_____f__file_____S__bytes_____e__value_____x__num_____y____q____v____h____sub_page_size_bytes______vid_hdr_offset_offs______no_volume_table____flash_image_fil";
    0x000111d8 bl 0x10c1c                                    |     puts ("Usage:_ubiformat__MTD_device_node_file_name____s__bytes_____O__offs_____n___Q__num_____f__file_____S__bytes_____e__value_____x__num_____y____q____v____h____sub_page_size_bytes______vid_hdr_offset_offs______no_volume_table____flash_image_fil");
    0x000111dc b 0x10fa8                                     |     goto label_2;
                                                             | label_31:
    0x000111e0 ldr r2, [pc, 0xcb4]                           |     r2 = stderr;
    0x000111e4 ldr r1, [pc, 0xbbc]                           |     r1 = "_s____sub_page_size_bytes___minimum_input_output_unit_used_for_UBI_____________________________headers__e.g._sub_page_size_in_case_of_NAND_____________________________flash__equivalent_to_the_minimum_input_output_____________________________unit_size_";
    0x000111e8 b 0x10fdc                                     |     goto label_5;
                                                             | label_26:
    0x000111ec ldrb r3, [r4]                                 |     r3 = *(r4);
    0x000111f0 and r3, r3, 6                                 |     r3 &= 6;
    0x000111f4 cmp r3, 6                                     |     
                                                             |     if (r3 != 6) {
    0x000111f8 bne 0x11214                                   |         goto label_44;
                                                             |     }
    0x000111fc ldr r2, [pc, 0xc98]                           |     r2 = stderr;
    0x00011200 ldr r1, [pc, 0xba4]                           |     r1 = "%s: error!: parameter is missing\n";
                                                             |     do {
                                                             | label_7:
    0x00011204 ldr r3, [pc, 0xb54]                           |         r3 = "nh_Vyqve:x:s:O:f:S:";
    0x00011208 ldr r0, [r3]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x0001120c bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "%s: error!: parameter is missing\n", r2, "nh_Vyqve:x:s:O:f:S:")
    0x00011210 b 0x10fac                                     |         goto label_6;
                                                             | label_44:
    0x00011214 ldr r3, [pc, 0xb94]                           |         
    0x00011218 ldr r3, [r3]                                  |         r3 = "_s:_error_:_using___q__and___v__at_the_same_time_does_not_make_sense";
    0x0001121c cmp r8, r3                                    |         
                                                             |         if (r8 != r3) {
    0x00011220 ldreq r2, [pc, 0xc74]                         |             r2 = "ubiformat";
                                                             |         }
                                                             |         if (r8 != r3) {
    0x00011224 ldreq r1, [pc, 0xb88]                         |             r1 = "_s:_error_:_MTD_device_name_was_not_specified__use__h_for_help_";
                                                             |         }
    0x00011228 beq 0x11204                                   |         
                                                             |     } while (r8 == r3);
    0x0001122c sub r8, r8, 1                                 |     r8--;
    0x00011230 cmp r3, r8                                    |     
                                                             |     if (r3 == r8) {
    0x00011234 ldrne r2, [pc, 0xc60]                         |         r2 = "ubiformat";
                                                             |     }
                                                             |     if (r3 != r8) {
    0x00011238 ldrne r1, [pc, 0xb78]                         |         r1 = "%s: error!: more then one MTD device specified (use -h for help)\n";
                                                             |         goto label_45;
                                                             |     }
                                                             |     if (r3 != r8) {
                                                             | label_45:
    0x0001123c bne 0x11204                                   |         goto label_7;
                                                             |     }
    0x00011240 ldr r3, [sb, r3, lsl 2]                       |     offset_0 = r3 << 2;
                                                             |     r3 = *((sb + offset_0));
    0x00011244 str r3, [r4, 0x2c]                            |     *((r4 + 0x2c)) = r3;
    0x00011248 bl 0x16bb4                                    |     r0 = fcn_00016bb4 ();
    0x0001124c subs r3, r0, 0                                |     r3 = r0 - 0;
    0x00011250 str r3, [fp, -0x1c8]                          |     var_1c8h = r3;
                                                             |     if (r3 != r0) {
    0x00011254 ldreq r2, [pc, 0xc40]                         |         r2 = "ubiformat";
                                                             |     }
                                                             |     if (r3 == r0) {
    0x00011258 ldreq r1, [pc, 0xb5c]                         |         r1 = "%s: error!: MTD subsystem is not present\n";
                                                             |         goto label_46;
                                                             |     }
                                                             |     if (r3 == r0) {
                                                             | label_46:
    0x0001125c beq 0x11204                                   |         goto label_7;
                                                             |     }
    0x00011260 sub r1, fp, 0x1c0                             |     r1 -= var_1c0h;
    0x00011264 bl 0x16e90                                    |     r0 = fcn_00016e90 (r0, r1);
    0x00011268 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x0001126c beq 0x112c0                                   |         goto label_47;
                                                             |     }
    0x00011270 bl 0x10d78                                    |     errno_location ();
    0x00011274 ldr r5, [pc, 0xae4]                           |     
    0x00011278 ldr r2, [pc, 0xc1c]                           |     r2 = stderr;
    0x0001127c ldr r1, [pc, 0xb3c]                           |     r1 = "%s: error!: MTD subsystem is not present\n";
    0x00011280 ldr r4, [r0]                                  |     r4 = *(r0);
    0x00011284 ldr r0, [r5]                                  |     r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011288 bl 0x10c7c                                    |     fprintf ("nh_Vyqve:x:s:O:f:S:", "%s: error!: MTD subsystem is not present\n", r2, r3, r4, "nh_Vyqve:x:s:O:f:S:")
    0x0001128c mov r0, r4                                    |     r0 = r4;
    0x00011290 ldr r5, [r5]                                  |     r5 = "nh_Vyqve:x:s:O:f:S:";
    0x00011294 bl 0x10bc8                                    |     strerror (r0);
    0x00011298 ldr r3, [pc, 0xc04]                           |     r3 = "%s: error!: cannot write eraseblock %d\n";
    0x0001129c ldr r1, [pc, 0xc04]                           |     r1 = *(0x11ea4);
    0x000112a0 mov r2, 0xb                                   |     r2 = 0xb;
    0x000112a4 str r4, [sp]                                  |     *(sp) = r4;
    0x000112a8 str r0, [sp, 4]                               |     var_4h = r0;
    0x000112ac mov r0, r5                                    |     r0 = r5;
                                                             |     do {
    0x000112b0 bl 0x10c7c                                    |         fprintf (r0, r1, r2, "%s: error!: cannot write eraseblock %d\n", r4)
                                                             | label_8:
    0x000112b4 ldr r0, [fp, -0x1c8]                          |         r0 = var_1c8h;
    0x000112b8 bl 0x16b38                                    |         fcn_00016b38 (r0);
    0x000112bc b 0x10fac                                     |         goto label_6;
                                                             | label_47:
    0x000112c0 sub r2, fp, 0x124                             |         r2 -= endptr;
    0x000112c4 ldr r1, [r4, 0x2c]                            |         r1 = *((r4 + 0x2c));
    0x000112c8 ldr r0, [fp, -0x1c8]                          |         r0 = var_1c8h;
    0x000112cc bl 0x17464                                    |         r0 = fcn_00017464 (r0, r1);
    0x000112d0 subs r5, r0, 0                                |         r5 = r0 - 0;
                                                             |         if (r5 == r0) {
    0x000112d4 beq 0x11320                                   |             goto label_48;
                                                             |         }
    0x000112d8 bl 0x10d78                                    |         errno_location ();
    0x000112dc ldr r7, [pc, 0xa7c]                           |         r7 = "nh_Vyqve:x:s:O:f:S:";
    0x000112e0 ldr r3, [r4, 0x2c]                            |         r3 = *((r4 + 0x2c));
    0x000112e4 ldr r2, [pc, 0xbb0]                           |         r2 = stderr;
    0x000112e8 ldr r1, [pc, 0xad4]                           |         r1 = "%s: error!: cannot get MTD information\n";
    0x000112ec ldr r5, [r0]                                  |         r5 = *(r0);
                                                             | label_11:
    0x000112f0 ldr r0, [r7]                                  |         r0 = *(r7);
    0x000112f4 bl 0x10c7c                                    |         fprintf (r0, "%s: error!: cannot get MTD information\n", r2, r3, r4, r5)
    0x000112f8 mov r0, r5                                    |         r0 = r5;
    0x000112fc ldr r4, [r7]                                  |         r4 = *(r7);
    0x00011300 bl 0x10bc8                                    |         strerror (r0);
    0x00011304 str r5, [sp]                                  |         *(sp) = r5;
    0x00011308 ldr r3, [pc, 0xb94]                           |         r3 = "%s: error!: cannot write eraseblock %d\n";
    0x0001130c mov r2, 0xb                                   |         r2 = 0xb;
    0x00011310 ldr r1, [pc, 0xb90]                           |         r1 = *(0x11ea4);
    0x00011314 str r0, [sp, 4]                               |         var_4h = r0;
    0x00011318 mov r0, r4                                    |         r0 = r4;
    0x0001131c b 0x112b0                                     |         
                                                             |     } while (1);
                                                             | label_48:
    0x00011320 ldr ip, [fp, -0x3c]                           |     ip = var_3ch;
    0x00011324 mov r0, ip                                    |     r0 = ip;
    0x00011328 asr r1, ip, 0x1f                              |     r1 = ip >> 0x1f;
    0x0001132c orrs r3, r0, r1                               |     r3 = r0 | r1;
                                                             |     if (r3 != r0) {
    0x00011330 beq 0x1134c                                   |         
    0x00011334 subs r8, ip, 1                                |         r8 = ip - 1;
    0x00011338 sbc sb, r1, 0                                 |         __asm ("sbc sb, r1, 0");
    0x0001133c and r2, r8, ip                                |         r2 = r8 & ip;
    0x00011340 and r3, sb, r1                                |         r3 = sb & r1;
    0x00011344 orrs r3, r2, r3                               |         r3 = r2 | r3;
                                                             |         if (r3 == r2) {
    0x00011348 beq 0x11368                                   |             goto label_49;
                                                             |         }
                                                             |     }
    0x0001134c ldr r0, [pc, 0xa0c]                           |     
    0x00011350 mov r3, ip                                    |     r3 = ip;
    0x00011354 ldr r2, [pc, 0xb40]                           |     r2 = stderr;
    0x00011358 ldr r1, [pc, 0xa68]                           |     r1 = "%s: error!: cannot get information about \"%s\"\n";
    0x0001135c ldr r0, [r0]                                  |     r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011360 bl 0x10c7c                                    |     fprintf ("nh_Vyqve:x:s:O:f:S:", "%s: error!: cannot get information about \"%s\"\n", r2, r3)
    0x00011364 b 0x112b4                                     |     goto label_8;
                                                             | label_49:
    0x00011368 ldrb r2, [fp, -0x1b4]                         |     r2 = var_1b4h;
    0x0001136c ldr r3, [r4, 8]                               |     r3 = *((r4 + 8));
    0x00011370 tst r2, 1                                     |     
                                                             |     if ((r2 & 1) != 0) {
    0x00011374 bne 0x113d8                                   |         goto label_50;
                                                             |     }
    0x00011378 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x0001137c bne 0x113ec                                   |         goto label_51;
                                                             |     }
    0x00011380 ldr r3, [pc, 0x9d8]                           |     r3 = "nh_Vyqve:x:s:O:f:S:";
    0x00011384 ldr r2, [pc, 0xb10]                           |     r2 = stderr;
    0x00011388 ldr r1, [pc, 0xa3c]                           |     r1 = "_s:_error_:_min._I_O_size_is__d__but_should_be_power_of_2";
    0x0001138c ldr r0, [r3]                                  |     r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011390 bl 0x10c7c                                    |     fprintf ("nh_Vyqve:x:s:O:f:S:", "_s:_error_:_min._I_O_size_is__d__but_should_be_power_of_2", r2, "nh_Vyqve:x:s:O:f:S:")
    0x00011394 ldr r2, [fp, -0x38]                           |     r2 = var_38h;
    0x00011398 ldr r1, [pc, 0xafc]                           |     r1 = stderr;
    0x0001139c ldr r0, [pc, 0xa2c]                           |     r0 = "%s: warning!: your MTD system is old and it is impossible to detect sub-page size. Use -s to get rid of this warning\n";
    0x000113a0 bl 0x10bbc                                    |     printf ("%s: warning!: your MTD system is old and it is impossible to detect sub-page size. Use -s to get rid of this warning\n", r1, r2)
                                                             |     do {
                                                             | label_9:
    0x000113a4 ldr r3, [r4, 4]                               |         r3 = *((r4 + 4));
    0x000113a8 cmp r3, 0                                     |         
                                                             |         if (r3 == 0) {
    0x000113ac beq 0x11410                                   |             goto label_52;
                                                             |         }
    0x000113b0 ldr r1, [r4, 8]                               |         r1 = *((r4 + 8));
    0x000113b4 ldr r0, [fp, -0x3c]                           |         r0 = var_3ch;
    0x000113b8 cmp r1, r0                                    |         
                                                             |         if (r1 <= r0) {
    0x000113bc ble 0x113fc                                   |             goto label_53;
                                                             |         }
    0x000113c0 ldr r2, [pc, 0xad4]                           |         r2 = stderr;
    0x000113c4 ldr r1, [pc, 0xa08]                           |         r1 = "%s: assume sub-page to be %d\n";
                                                             | label_10:
    0x000113c8 ldr r3, [pc, 0x990]                           |         r3 = "nh_Vyqve:x:s:O:f:S:";
    0x000113cc ldr r0, [r3]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x000113d0 bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "%s: assume sub-page to be %d\n", r2, "nh_Vyqve:x:s:O:f:S:")
    0x000113d4 b 0x112b4                                     |         goto label_8;
                                                             | label_50:
    0x000113d8 cmp r3, 0                                     |         
    0x000113dc beq 0x113a4                                   |         
                                                             |     } while (r3 == 0);
    0x000113e0 ldr r2, [fp, -0x38]                           |     r2 = var_38h;
    0x000113e4 cmp r2, r3                                    |     
                                                             |     if (r2 == r3) {
    0x000113e8 beq 0x113a4                                   |         goto label_9;
                                                             |     }
                                                             | label_51:
    0x000113ec str r3, [fp, -0x38]                           |     var_38h = r3;
    0x000113f0 mov r3, 1                                     |     r3 = 1;
    0x000113f4 str r3, [r4, 4]                               |     *((r4 + 4)) = r3;
    0x000113f8 b 0x113a4                                     |     goto label_9;
                                                             | label_53:
    0x000113fc bl 0x19ab0                                    |     fcn_00019ab0 (r0, r1);
    0x00011400 cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x00011404 ldrne r2, [pc, 0xa90]                         |         r2 = "ubiformat";
                                                             |     }
                                                             |     if (r1 != 0) {
    0x00011408 ldrne r1, [pc, 0x9c8]                         |         r1 = "%s: error!: min. I/O unit size should be multiple of sub-page size\n";
                                                             |         goto label_54;
                                                             |     }
                                                             |     if (r1 != 0) {
                                                             | label_54:
    0x0001140c bne 0x113c8                                   |         goto label_10;
                                                             |     }
                                                             | label_52:
    0x00011410 mov r1, 2                                     |     r1 = 2;
    0x00011414 ldr r0, [r4, 0x2c]                            |     r0 = *((r4 + 0x2c));
    0x00011418 bl 0x10d30                                    |     r0 = open64 ();
    0x0001141c cmn r0, 1                                     |     
    0x00011420 str r0, [r4, 0x30]                            |     *((r4 + 0x30)) = r0;
                                                             |     if (r0 == 1) {
    0x00011424 bne 0x11444                                   |         
    0x00011428 bl 0x10d78                                    |         errno_location ();
    0x0001142c ldr r7, [pc, 0x92c]                           |         r7 = "nh_Vyqve:x:s:O:f:S:";
    0x00011430 ldr r3, [r4, 0x2c]                            |         r3 = *((r4 + 0x2c));
    0x00011434 ldr r2, [pc, 0xa60]                           |         r2 = stderr;
    0x00011438 ldr r1, [pc, 0x99c]                           |         r1 = "%s: error!: min. I/O unit size should be multiple of sub-page size\n";
    0x0001143c ldr r5, [r0]                                  |         r5 = *(r0);
    0x00011440 b 0x112f0                                     |         goto label_11;
                                                             |     }
    0x00011444 ldr r3, [r4, 0xc]                             |     r3 = *((r4 + 0xc));
    0x00011448 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x0001144c beq 0x11494                                   |         goto label_55;
                                                             |     }
    0x00011450 tst r3, 7                                     |     
                                                             |     if ((r3 & 7) == 0) {
    0x00011454 beq 0x1147c                                   |         goto label_56;
                                                             |     }
    0x00011458 ldr r2, [pc, 0xa3c]                           |     r2 = stderr;
    0x0001145c ldr r1, [pc, 0x97c]                           |     r1 = "%s: error!: cannot open \"%s\"\n";
                                                             |     do {
    0x00011460 ldr r3, [pc, 0x8f8]                           |         r3 = "nh_Vyqve:x:s:O:f:S:";
    0x00011464 ldr r0, [r3]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011468 bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "%s: error!: cannot open \"%s\"\n", r2, "nh_Vyqve:x:s:O:f:S:")
                                                             | label_12:
    0x0001146c ldr r3, [pc, 0x8dc]                           |         r3 = *(0x11d4c);
    0x00011470 ldr r0, [r3, 0x30]                            |         r0 = "%s: error!: %s: unable to parse the number '%s'\n";
    0x00011474 bl 0x10dcc                                    |         close ("%s: error!: %s: unable to parse the number '%s'\n");
    0x00011478 b 0x112b4                                     |         goto label_8;
                                                             | label_56:
    0x0001147c ldr r2, [fp, -0x40]                           |         r2 = var_40h;
    0x00011480 add r3, r3, 0x3f                              |         r3 += 0x3f;
    0x00011484 cmp r3, r2                                    |         
                                                             |         if (r3 < r2) {
    0x00011488 ldrge r2, [pc, 0xa0c]                         |             r2 = "ubiformat";
                                                             |         }
                                                             |         if (r3 < r2) {
    0x0001148c ldrge r1, [pc, 0x950]                         |             r1 = "%s: error!: bad VID header offset\n";
                                                             |         }
    0x00011490 bge 0x11460                                   |         
                                                             |     } while (r3 >= r2);
                                                             | label_55:
    0x00011494 ldrb r3, [fp, -0x28]                          |     r3 = var_28h;
    0x00011498 tst r3, 1                                     |     
                                                             |     if ((r3 & 1) != 0) {
    0x0001149c bne 0x114c4                                   |         goto label_57;
                                                             |     }
    0x000114a0 ldr r3, [r4, 0x2c]                            |     r3 = *((r4 + 0x2c));
    0x000114a4 ldr r2, [pc, 0x9f0]                           |     r2 = stderr;
    0x000114a8 str r3, [sp]                                  |     *(sp) = r3;
    0x000114ac ldr r3, [fp, -0x124]                          |     r3 = endptr;
    0x000114b0 ldr r1, [pc, 0x930]                           |     r1 = "%s: error!: bad VID header offset\n";
                                                             |     do {
    0x000114b4 ldr r0, [pc, 0x8a4]                           |         
    0x000114b8 ldr r0, [r0]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x000114bc bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "%s: error!: bad VID header offset\n", r2, r3)
    0x000114c0 b 0x1146c                                     |         goto label_12;
                                                             | label_57:
    0x000114c4 bl 0x13614                                    |         r0 = fcn_00013614 ();
    0x000114c8 subs r8, r0, 0                                |         r8 = r0 - 0;
                                                             |         if (r8 != r0) {
    0x000114cc beq 0x1151c                                   |             
    0x000114d0 sub r2, fp, 0x18c                             |             r2 -= var_18ch;
    0x000114d4 ldr r1, [fp, -0x124]                          |             r1 = endptr;
    0x000114d8 bl 0x13cd0                                    |             r0 = fcn_00013cd0 (r0, r1);
    0x000114dc mov r7, r0                                    |             r7 = r0;
    0x000114e0 mov r0, r8                                    |             r0 = r8;
    0x000114e4 bl 0x13540                                    |             fcn_00013540 (r0);
    0x000114e8 cmp r7, 0                                     |             
                                                             |             if (r7 != 0) {
    0x000114ec bne 0x1151c                                   |                 goto label_58;
                                                             |             }
    0x000114f0 ldr r3, [fp, -0x18c]                          |             r3 = var_18ch;
    0x000114f4 ldr r0, [pc, 0x864]                           |             
    0x000114f8 str r3, [sp, 4]                               |             var_4h = r3;
    0x000114fc ldr r3, [r4, 0x2c]                            |             r3 = *((r4 + 0x2c));
    0x00011500 ldr r2, [pc, 0x994]                           |             r2 = stderr;
    0x00011504 str r3, [sp]                                  |             *(sp) = r3;
    0x00011508 ldr r3, [fp, -0x124]                          |             r3 = endptr;
    0x0001150c ldr r1, [pc, 0x8d8]                           |             r1 = "_s:_error_:_mtd_d___s__is_a_read_only_device";
    0x00011510 ldr r0, [r0]                                  |             r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011514 bl 0x10c7c                                    |             fprintf ("nh_Vyqve:x:s:O:f:S:", "_s:_error_:_mtd_d___s__is_a_read_only_device", r2, r3)
    0x00011518 b 0x1146c                                     |             goto label_12;
                                                             |         }
                                                             | label_58:
    0x0001151c ldrb r3, [r4]                                 |         r3 = *(r4);
    0x00011520 tst r3, 2                                     |         
                                                             |         if ((r3 & 2) == 0) {
    0x00011524 bne 0x11570                                   |             
    0x00011528 sub r3, fp, 0x114                             |             r3 -= var_114h;
    0x0001152c ldr r2, [fp, -0x124]                          |             r2 = endptr;
    0x00011530 ldr r1, [pc, 0x964]                           |             r1 = stderr;
    0x00011534 ldr r0, [pc, 0x8b4]                           |             r0 = "_s:_error_:_please__first_detach_mtd_d___s__from_ubi_d";
    0x00011538 bl 0x10bbc                                    |             printf ("_s:_error_:_please__first_detach_mtd_d___s__from_ubi_d", r1, r2, r3)
    0x0001153c mov r2, 1                                     |             r2 = 1;
    0x00011540 ldrd r0, r1, [fp, -0x4c]                      |             __asm ("ldrd r0, r1, [var_4ch]");
    0x00011544 bl 0x1846c                                    |             fcn_0001846c (r0, r1);
    0x00011548 ldr r1, [fp, -0x44]                           |             r1 = var_44h;
    0x0001154c ldr r0, [pc, 0x8a0]                           |             r0 = "_s:_mtd_d___s___size_";
    0x00011550 bl 0x10bbc                                    |             printf ("_s:_mtd_d___s___size_", r1)
    0x00011554 ldr r0, [fp, -0x40]                           |             r0 = var_40h;
    0x00011558 mov r2, 1                                     |             r2 = 1;
    0x0001155c asr r1, r0, 0x1f                              |             r1 = r0 >> 0x1f;
    0x00011560 bl 0x1846c                                    |             fcn_0001846c (r0, r1);
    0x00011564 ldr r1, [fp, -0x3c]                           |             r1 = var_3ch;
    0x00011568 ldr r0, [pc, 0x888]                           |             r0 = "___d_eraseblocks_of_";
    0x0001156c bl 0x10bbc                                    |             printf ("___d_eraseblocks_of_", r1)
                                                             |         }
    0x00011570 ldrb r3, [r4]                                 |         r3 = *(r4);
    0x00011574 tst r3, 2                                     |         
                                                             |         if ((r3 & 2) == 0) {
    0x00011578 bne 0x11588                                   |             
    0x0001157c tst r3, 4                                     |             
                                                             |             if ((r3 & 4) != 0) {
    0x00011580 moveq r5, 1                                   |                 r5 = 1;
                                                             |             }
                                                             |             if ((r3 & 4) != 0) {
    0x00011584 movne r5, 2                                   |                 r5 = 2;
                                                             |                 goto label_59;
                                                             |             }
                                                             |         }
                                                             | label_59:
    0x00011588 mov r3, r5                                    |         r3 = r5;
    0x0001158c sub r2, fp, 0x1c4                             |         r2 -= var_1c4h;
    0x00011590 ldr r1, [r4, 0x30]                            |         r1 = *((r4 + 0x30));
    0x00011594 sub r0, fp, 0x124                             |         r0 -= endptr;
    0x00011598 bl 0x19178                                    |         r0 = fcn_00019178 (r0, r1);
    0x0001159c cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x000115a0 beq 0x115bc                                   |             goto label_60;
                                                             |         }
    0x000115a4 ldr r3, [r4, 0x2c]                            |         r3 = *((r4 + 0x2c));
    0x000115a8 ldr r2, [pc, 0x8ec]                           |         r2 = stderr;
    0x000115ac str r3, [sp]                                  |         *(sp) = r3;
    0x000115b0 ldr r3, [fp, -0x124]                          |         r3 = endptr;
    0x000115b4 ldr r1, [pc, 0x840]                           |         r1 = ", min. I/O size %d bytes\n";
    0x000115b8 b 0x114b4                                     |         
                                                             |     } while (1);
                                                             | label_60:
    0x000115bc ldr r1, [fp, -0x1c4]                          |     r1 = var_1c4h;
    0x000115c0 ldr r3, [r1, 0x24]                            |     r3 = *((r1 + 0x24));
    0x000115c4 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x000115c8 bne 0x115f0                                   |         goto label_61;
                                                             |     }
    0x000115cc ldr r0, [pc, 0x78c]                           |     
    0x000115d0 ldr r3, [r1, 0x20]                            |     r3 = *((r1 + 0x20));
    0x000115d4 ldr r2, [pc, 0x8c0]                           |     r2 = stderr;
    0x000115d8 ldr r1, [pc, 0x820]                           |     r1 = "%s: error!: failed to scan mtd%d (%s)\n";
    0x000115dc ldr r0, [r0]                                  |     r0 = "nh_Vyqve:x:s:O:f:S:";
    0x000115e0 bl 0x10c7c                                    |     fprintf ("nh_Vyqve:x:s:O:f:S:", "%s: error!: failed to scan mtd%d (%s)\n", r2, r3)
                                                             |     do {
                                                             | label_13:
    0x000115e4 ldr r0, [fp, -0x1c4]                          |         r0 = var_1c4h;
    0x000115e8 bl 0x198f0                                    |         fcn_000198f0 (r0);
    0x000115ec b 0x1146c                                     |         goto label_12;
                                                             | label_61:
    0x000115f0 cmp r3, 1                                     |         
                                                             |         if (r3 > 1) {
    0x000115f4 bgt 0x11618                                   |             goto label_62;
                                                             |         }
    0x000115f8 ldr r2, [fp, -0x124]                          |         r2 = endptr;
    0x000115fc ldr r0, [pc, 0x75c]                           |         
    0x00011600 str r2, [sp]                                  |         *(sp) = r2;
    0x00011604 ldr r1, [pc, 0x7f8]                           |         r1 = "_s:_error_:_all__d_eraseblocks_are_bad";
    0x00011608 ldr r2, [pc, 0x88c]                           |         r2 = stderr;
    0x0001160c ldr r0, [r0]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011610 bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "_s:_error_:_all__d_eraseblocks_are_bad", r2)
    0x00011614 b 0x115e4                                     |         
                                                             |     } while (1);
                                                             | label_62:
    0x00011618 ldrb r3, [r4]                                 |     r3 = *(r4);
    0x0001161c tst r3, 2                                     |     
                                                             |     if ((r3 & 2) == 0) {
    0x00011620 bne 0x116bc                                   |         
    0x00011624 ldr r2, [r1, 0x10]                            |         r2 = *((r1 + 0x10));
    0x00011628 cmp r2, 0                                     |         
                                                             |         if (r2 != 0) {
    0x0001162c beq 0x11644                                   |             
    0x00011630 ldrd r0, r1, [r1, 8]                          |             __asm ("ldrd r0, r1, [r1, 8]");
    0x00011634 strd r0, r1, [sp]                             |             __asm ("strd r0, r1, [sp]");
    0x00011638 ldr r1, [pc, 0x85c]                           |             r1 = stderr;
    0x0001163c ldr r0, [pc, 0x7c4]                           |             r0 = "_s:_error_:_too_few_non_bad_eraseblocks___d__on_mtd_d";
    0x00011640 bl 0x10bbc                                    |             printf (r0, r1)
                                                             |         }
    0x00011644 ldr r3, [fp, -0x1c4]                          |         r3 = var_1c4h;
    0x00011648 ldr r2, [r3, 0x14]                            |         r2 = *((r3 + 0x14));
    0x0001164c cmp r2, 0                                     |         
                                                             |         if (r2 != 0) {
    0x00011650 beq 0x11660                                   |             
    0x00011654 ldr r1, [pc, 0x840]                           |             r1 = stderr;
    0x00011658 ldr r0, [pc, 0x7ac]                           |             r0 = "%s: %d eraseblocks have valid erase counter, mean value is %lld\n";
    0x0001165c bl 0x10bbc                                    |             printf ("%s: %d eraseblocks have valid erase counter, mean value is %lld\n", r1)
                                                             |         }
    0x00011660 ldr r3, [fp, -0x1c4]                          |         r3 = var_1c4h;
    0x00011664 ldr r2, [r3, 0x18]                            |         r2 = *((r3 + 0x18));
    0x00011668 cmp r2, 0                                     |         
                                                             |         if (r2 != 0) {
    0x0001166c beq 0x1167c                                   |             
    0x00011670 ldr r1, [pc, 0x824]                           |             r1 = stderr;
    0x00011674 ldr r0, [pc, 0x794]                           |             r0 = "_s:__d_eraseblocks_are_supposedly_empty";
    0x00011678 bl 0x10bbc                                    |             printf ("_s:__d_eraseblocks_are_supposedly_empty", r1)
                                                             |         }
    0x0001167c ldr r7, [fp, -0x1c4]                          |         r7 = var_1c4h;
    0x00011680 ldr r2, [r7, 0x20]                            |         r2 = *((r7 + 0x20));
    0x00011684 cmp r2, 0                                     |         
                                                             |         if (r2 == 0) {
    0x00011688 beq 0x116bc                                   |             goto label_63;
                                                             |         }
    0x0001168c ldr r1, [pc, 0x808]                           |         r1 = stderr;
    0x00011690 ldr r0, [pc, 0x77c]                           |         r0 = "%s: %d corrupted erase counters\n";
    0x00011694 bl 0x10bbc                                    |         printf ("%s: %d corrupted erase counters\n", r1)
    0x00011698 ldr r8, [pc, 0x778]                           |         r8 = "_s:__d_bad_eraseblocks_found__numbers:_";
    0x0001169c ldr sb, [pc, 0x778]                           |         sb = "_d";
    0x000116a0 mov r5, 0                                     |         r5 = 0;
    0x000116a4 mov sl, 1                                     |         sl = 1;
                                                             | label_14:
    0x000116a8 ldr r3, [fp, -0x44]                           |         r3 = var_44h;
    0x000116ac cmp r5, r3                                    |         
                                                             |         if (r5 < r3) {
    0x000116b0 blt 0x1172c                                   |             goto label_64;
                                                             |         }
    0x000116b4 mov r0, 0xa                                   |         r0 = 0xa;
    0x000116b8 bl 0x10b98                                    |         putchar (r0);
                                                             |     }
                                                             | label_63:
    0x000116bc ldr r1, [fp, -0x1c4]                          |     r1 = var_1c4h;
    0x000116c0 ldr r3, [r1, 0x1c]                            |     r3 = *((r1 + 0x1c));
    0x000116c4 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x000116c8 beq 0x11768                                   |         goto label_65;
                                                             |     }
    0x000116cc ldrb r2, [r4]                                 |     r2 = *(r4);
    0x000116d0 and r2, r2, 3                                 |     r2 &= 3;
    0x000116d4 cmp r2, 3                                     |     
                                                             |     if (r2 != 3) {
    0x000116d8 beq 0x116f8                                   |         
    0x000116dc ldr r2, [r1, 0x24]                            |         r2 = *((r1 + 0x24));
    0x000116e0 ldr r0, [pc, 0x678]                           |         
    0x000116e4 str r2, [sp]                                  |         *(sp) = r2;
    0x000116e8 ldr r1, [pc, 0x730]                           |         r1 = "_d";
    0x000116ec ldr r2, [pc, 0x7a8]                           |         r2 = stderr;
    0x000116f0 ldr r0, [r0]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x000116f4 bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "_d", r2)
                                                             |     }
    0x000116f8 ldrb r3, [r4]                                 |     r3 = *(r4);
    0x000116fc tst r3, 1                                     |     
                                                             |     if ((r3 & 1) != 0) {
    0x00011700 bne 0x11768                                   |         goto label_65;
                                                             |     }
    0x00011704 bl 0x126c8                                    |     r0 = fcn_000126c8 ();
    0x00011708 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x0001170c beq 0x11768                                   |         goto label_65;
                                                             |     }
                                                             | label_15:
    0x00011710 ldrb r3, [r4]                                 |     r3 = *(r4);
    0x00011714 and r3, r3, 3                                 |     r3 &= 3;
    0x00011718 cmp r3, 1                                     |     
                                                             |     if (r3 != 1) {
    0x0001171c bne 0x115e4                                   |         goto label_13;
                                                             |     }
    0x00011720 ldr r0, [pc, 0x6fc]                           |     r0 = "%s: warning!: %d of %d eraseblocks contain non-UBI data\n";
    0x00011724 bl 0x10c1c                                    |     puts ("%s: warning!: %d of %d eraseblocks contain non-UBI data\n");
    0x00011728 b 0x115e4                                     |     goto label_13;
                                                             | label_64:
    0x0001172c ldr r3, [r7]                                  |     r3 = *(r7);
    0x00011730 ldr r3, [r3, r5, lsl 2]                       |     offset_1 = r5 << 2;
                                                             |     r3 = *((r3 + offset_1));
    0x00011734 cmn r3, 4                                     |     
                                                             |     if (r3 != 4) {
    0x00011738 bne 0x11754                                   |         goto label_66;
                                                             |     }
    0x0001173c cmp sl, 0                                     |     
    0x00011740 mov r1, r5                                    |     r1 = r5;
                                                             |     if (sl == 0) {
    0x00011744 beq 0x1175c                                   |         goto label_67;
                                                             |     }
    0x00011748 mov r0, sb                                    |     r0 = sb;
    0x0001174c bl 0x10bbc                                    |     printf (r0)
    0x00011750 mov sl, 0                                     |     sl = 0;
                                                             |     do {
                                                             | label_66:
    0x00011754 add r5, r5, 1                                 |         r5++;
    0x00011758 b 0x116a8                                     |         goto label_14;
                                                             | label_67:
    0x0001175c mov r0, r8                                    |         r0 = r8;
    0x00011760 bl 0x10bbc                                    |         printf (r0)
    0x00011764 b 0x11754                                     |         
                                                             |     } while (1);
                                                             | label_65:
    0x00011768 ldrb r5, [r4]                                 |     r5 = *(r4);
    0x0001176c tst r5, 8                                     |     
                                                             |     if ((r5 & 8) != 0) {
    0x00011770 bne 0x11814                                   |         goto label_68;
                                                             |     }
    0x00011774 ldr r3, [fp, -0x1c4]                          |     r3 = var_1c4h;
    0x00011778 ldr r7, [r3, 0x24]                            |     r7 = *((r3 + 0x24));
    0x0001177c ldr r2, [r3, 0x14]                            |     r2 = *((r3 + 0x14));
    0x00011780 cmp r2, r7                                    |     
                                                             |     if (r2 >= r7) {
    0x00011784 bge 0x11814                                   |         goto label_68;
                                                             |     }
    0x00011788 ldr r8, [r3, 0x10]                            |     r8 = *((r3 + 0x10));
    0x0001178c mov r3, 0x64                                  |     r3 = 0x64;
    0x00011790 mov r1, r7                                    |     r1 = r7;
    0x00011794 mul r0, r8, r3                                |     r0 = r8 * r3;
    0x00011798 bl 0x199d4                                    |     r0 = fcn_000199d4 (r0, r1);
    0x0001179c cmp r0, 0x31                                  |     
                                                             |     if (r0 > 0x31) {
    0x000117a0 bgt 0x11944                                   |         goto label_69;
                                                             |     }
    0x000117a4 and r5, r5, 3                                 |     r5 &= 3;
    0x000117a8 cmp r5, 3                                     |     
                                                             |     if (r5 != 3) {
    0x000117ac beq 0x117e4                                   |         
    0x000117b0 ldr r0, [pc, 0x5a8]                           |         
    0x000117b4 str r7, [sp]                                  |         *(sp) = r7;
    0x000117b8 mov r3, r8                                    |         r3 = r8;
    0x000117bc ldr r2, [pc, 0x6d8]                           |         r2 = stderr;
    0x000117c0 ldr r1, [pc, 0x660]                           |         r1 = "yes";
    0x000117c4 ldr r0, [r0]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x000117c8 bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "yes", r2, r3)
    0x000117cc ldr r1, [pc, 0x6c8]                           |         r1 = stderr;
    0x000117d0 ldr r0, [pc, 0x654]                           |         r0 = "_s:_warning_:_only__d_of__d_eraseblocks_have_valid_erase_counter";
    0x000117d4 bl 0x10bbc                                    |         printf ("_s:_warning_:_only__d_of__d_eraseblocks_have_valid_erase_counter", r1)
    0x000117d8 ldr r1, [pc, 0x6bc]                           |         r1 = stderr;
    0x000117dc ldr r0, [pc, 0x64c]                           |         r0 = "_s:_erase_counter_0_will_be_used_for_all_eraseblocks";
    0x000117e0 bl 0x10bbc                                    |         printf ("_s:_erase_counter_0_will_be_used_for_all_eraseblocks", r1)
                                                             |     }
    0x000117e4 ldrb r3, [r4]                                 |     r3 = *(r4);
    0x000117e8 tst r3, 1                                     |     
                                                             |     if ((r3 & 1) != 0) {
    0x000117ec bne 0x117fc                                   |         goto label_70;
                                                             |     }
    0x000117f0 bl 0x126c8                                    |     r0 = fcn_000126c8 ();
    0x000117f4 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x000117f8 bne 0x11710                                   |         goto label_15;
                                                             |     }
                                                             | label_70:
    0x000117fc mov r2, 0                                     |     r2 = 0;
    0x00011800 mov r3, 0                                     |     r3 = 0;
                                                             | label_16:
    0x00011804 strd r2, r3, [r4, 0x20]                       |     __asm ("strd r2, r3, [r4, 0x20]");
    0x00011808 ldrb r3, [r4]                                 |     r3 = *(r4);
    0x0001180c orr r3, r3, 8                                 |     r3 |= 8;
    0x00011810 strb r3, [r4]                                 |     *(r4) = r3;
                                                             |     do {
                                                             | label_68:
    0x00011814 ldrb r3, [r4]                                 |         r3 = *(r4);
    0x00011818 and r3, r3, 0xa                               |         r3 &= 0xa;
    0x0001181c cmp r3, 8                                     |         
                                                             |         if (r3 == 8) {
    0x00011820 bne 0x11834                                   |             
    0x00011824 ldrd r2, r3, [r4, 0x20]                       |             __asm ("ldrd r2, r3, [r4, 0x20]");
    0x00011828 ldr r1, [pc, 0x66c]                           |             r1 = stderr;
    0x0001182c ldr r0, [pc, 0x600]                           |             r0 = "_s:_note__arbitrary_erase_counter_value_may_be_specified_using__e_option";
    0x00011830 bl 0x10bbc                                    |             printf ("_s:_note__arbitrary_erase_counter_value_may_be_specified_using__e_option", r1, r2)
                                                             |         }
    0x00011834 ldr r3, [r4, 0x14]                            |         r3 = *((r4 + 0x14));
    0x00011838 sub r1, fp, 0x40                              |         r1 -= var_40h;
    0x0001183c str r3, [sp, 8]                               |         var_8h = r3;
    0x00011840 ldr r3, [r4, 0x10]                            |         r3 = *((r4 + 0x10));
    0x00011844 sub r0, fp, 0x1b0                             |         r0 -= var_1b0h;
    0x00011848 str r3, [sp, 4]                               |         var_4h = r3;
    0x0001184c ldr r3, [r4, 0xc]                             |         r3 = *((r4 + 0xc));
    0x00011850 str r3, [sp]                                  |         *(sp) = r3;
    0x00011854 ldm r1, {r1, r2, r3}                          |         r1 = *(r1);
                                                             |         r2 = *((r1 + 4));
                                                             |         r3 = *((r1 + 8));
    0x00011858 bl 0x15000                                    |         fcn_00015000 (r0, r1, r2, r3, r4);
    0x0001185c ldr r1, [fp, -0x1c4]                          |         r1 = var_1c4h;
    0x00011860 ldr r3, [r1, 0x28]                            |         r3 = *((r1 + 0x28));
    0x00011864 cmn r3, 1                                     |         
                                                             |         if (r3 != 1) {
    0x00011868 beq 0x118f8                                   |             
    0x0001186c ldr r0, [fp, -0x1a4]                          |             r0 = var_1a4h;
    0x00011870 cmp r3, r0                                    |             
                                                             |             if (r3 == r0) {
    0x00011874 beq 0x118f8                                   |                 goto label_71;
                                                             |             }
    0x00011878 ldrb r2, [r4]                                 |             r2 = *(r4);
    0x0001187c and r2, r2, 3                                 |             r2 &= 3;
    0x00011880 cmp r2, 3                                     |             
                                                             |             if (r2 != 3) {
    0x00011884 beq 0x118c0                                   |                 
    0x00011888 ldr r2, [fp, -0x1a0]                          |                 r2 = var_1a0h;
    0x0001188c stmib sp, {r0, r2}                            |                 __asm ("stmib sp, {r0, r2}");
    0x00011890 ldr r0, [pc, 0x4c8]                           |                 
    0x00011894 ldr r2, [r1, 0x2c]                            |                 r2 = *((r1 + 0x2c));
    0x00011898 ldr r1, [pc, 0x598]                           |                 r1 = "%s: use erase counter %lld for all eraseblocks\n";
    0x0001189c str r2, [sp]                                  |                 *(sp) = r2;
    0x000118a0 ldr r2, [pc, 0x5f4]                           |                 r2 = stderr;
    0x000118a4 ldr r0, [r0]                                  |                 r0 = "nh_Vyqve:x:s:O:f:S:";
    0x000118a8 bl 0x10c7c                                    |                 fprintf ("nh_Vyqve:x:s:O:f:S:", "%s: use erase counter %lld for all eraseblocks\n", r2)
    0x000118ac ldr r3, [fp, -0x1a0]                          |                 r3 = var_1a0h;
    0x000118b0 ldr r2, [fp, -0x1a4]                          |                 r2 = var_1a4h;
    0x000118b4 ldr r1, [pc, 0x5e0]                           |                 r1 = stderr;
    0x000118b8 ldr r0, [pc, 0x57c]                           |                 r0 = "%s: warning!: VID header and data offsets on flash are %d and %d, which is different to requested offsets %d and %d\n";
    0x000118bc bl 0x10bbc                                    |                 printf ("%s: warning!: VID header and data offsets on flash are %d and %d, which is different to requested offsets %d and %d\n", r1, r2, r3)
                                                             |             }
    0x000118c0 ldrb r3, [r4]                                 |             r3 = *(r4);
    0x000118c4 tst r3, 1                                     |             
                                                             |             if ((r3 & 1) == 0) {
    0x000118c8 beq 0x119ac                                   |                 goto label_72;
                                                             |             }
                                                             | label_17:
    0x000118cc ldrb r3, [r4]                                 |             r3 = *(r4);
    0x000118d0 and r3, r3, 3                                 |             r3 &= 3;
    0x000118d4 cmp r3, 1                                     |             
                                                             |             if (r3 == 1) {
    0x000118d8 bne 0x118e4                                   |                 
    0x000118dc ldr r0, [pc, 0x540]                           |                 r0 = "%s: warning!: %d of %d eraseblocks contain non-UBI data\n";
    0x000118e0 bl 0x10c1c                                    |                 puts ("%s: warning!: %d of %d eraseblocks contain non-UBI data\n");
                                                             |             }
                                                             | label_18:
    0x000118e4 ldr r3, [fp, -0x1a0]                          |             r3 = var_1a0h;
    0x000118e8 ldr r2, [fp, -0x1a4]                          |             r2 = var_1a4h;
    0x000118ec ldr r1, [pc, 0x5a8]                           |             r1 = stderr;
    0x000118f0 ldr r0, [pc, 0x548]                           |             r0 = "_s:_use_new_offsets__d_and__d__";
    0x000118f4 bl 0x10bbc                                    |             printf ("_s:_use_new_offsets__d_and__d__", r1, r2, r3)
                                                             |         }
                                                             | label_71:
    0x000118f8 ldr r5, [r4, 0x28]                            |         r5 = *((r4 + 0x28));
    0x000118fc ldr r3, [fp, -0x1c4]                          |         r3 = var_1c4h;
    0x00011900 cmp r5, 0                                     |         
    0x00011904 str r3, [fp, -0x1cc]                          |         var_1cch = r3;
                                                             |         if (r5 == 0) {
    0x00011908 beq 0x12448                                   |             goto label_73;
                                                             |         }
    0x0001190c ldr r1, [pc, 0x530]                           |         r1 = "_s:_use_offsets__d_and__d";
    0x00011910 mov r0, r5                                    |         r0 = r5;
    0x00011914 bl 0x10d48                                    |         r0 = strcmp (r0, "_s:_use_offsets__d_and__d");
    0x00011918 cmp r0, 0                                     |         
                                                             |         if (r0 != 0) {
    0x0001191c bne 0x11a44                                   |             goto label_74;
                                                             |         }
    0x00011920 ldrd r8, sb, [r4, 0x18]                       |         __asm ("ldrd r8, sb, [r4, 0x18]");
    0x00011924 orrs r3, r8, sb                               |         r3 = r8 | sb;
                                                             |         if (r3 != r8) {
    0x00011928 bne 0x119ec                                   |             goto label_75;
                                                             |         }
    0x0001192c ldr r3, [pc, 0x42c]                           |         r3 = "nh_Vyqve:x:s:O:f:S:";
    0x00011930 ldr r2, [pc, 0x564]                           |         r2 = stderr;
    0x00011934 ldr r1, [pc, 0x50c]                           |         r1 = *(0x11e44);
    0x00011938 ldr r0, [r3]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x0001193c bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", r1, r2, "nh_Vyqve:x:s:O:f:S:")
    0x00011940 b 0x115e4                                     |         goto label_13;
                                                             | label_69:
    0x00011944 cmp r0, 0x5e                                  |         
    0x00011948 bgt 0x11814                                   |         
                                                             |     } while (r0 > 0x5e);
    0x0001194c and r5, r5, 3                                 |     r5 &= 3;
    0x00011950 cmp r5, 3                                     |     
                                                             |     if (r5 != 3) {
    0x00011954 beq 0x11988                                   |         
    0x00011958 ldr r0, [pc, 0x400]                           |         
    0x0001195c str r7, [sp]                                  |         *(sp) = r7;
    0x00011960 mov r3, r8                                    |         r3 = r8;
    0x00011964 ldr r2, [pc, 0x530]                           |         r2 = stderr;
    0x00011968 ldr r1, [pc, 0x4b8]                           |         r1 = "yes";
    0x0001196c ldr r0, [r0]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011970 bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "yes", r2, r3)
    0x00011974 ldr r3, [fp, -0x1c4]                          |         r3 = var_1c4h;
    0x00011978 ldr r1, [pc, 0x51c]                           |         r1 = stderr;
    0x0001197c ldrd r2, r3, [r3, 8]                          |         __asm ("ldrd r2, r3, [r3, 8]");
    0x00011980 ldr r0, [pc, 0x4c4]                           |         r0 = "%s: error!: must use '-S' with non-zero value when reading from stdin\n";
    0x00011984 bl 0x10bbc                                    |         printf ("%s: error!: must use '-S' with non-zero value when reading from stdin\n", r1, r2, r3)
                                                             |     }
    0x00011988 ldrb r3, [r4]                                 |     r3 = *(r4);
    0x0001198c tst r3, 1                                     |     
                                                             |     if ((r3 & 1) != 0) {
    0x00011990 bne 0x119a0                                   |         goto label_76;
                                                             |     }
    0x00011994 bl 0x126c8                                    |     r0 = fcn_000126c8 ();
    0x00011998 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x0001199c bne 0x11710                                   |         goto label_15;
                                                             |     }
                                                             | label_76:
    0x000119a0 ldr r3, [fp, -0x1c4]                          |     r3 = var_1c4h;
    0x000119a4 ldrd r2, r3, [r3, 8]                          |     __asm ("ldrd r2, r3, [r3, 8]");
    0x000119a8 b 0x11804                                     |     goto label_16;
                                                             | label_72:
    0x000119ac ldr r0, [pc, 0x49c]                           |     r0 = "_s:_mean_erase_counter__lld_will_be_used_for_the_rest_of_eraseblock";
    0x000119b0 bl 0x125e8                                    |     r0 = fcn_000125e8 ("_s:_mean_erase_counter__lld_will_be_used_for_the_rest_of_eraseblock");
    0x000119b4 subs r3, r0, 0                                |     r3 = r0 - 0;
                                                             |     if (r3 != r0) {
    0x000119b8 bne 0x118cc                                   |         goto label_17;
                                                             |     }
    0x000119bc ldr r2, [r4, 0x14]                            |     r2 = *((r4 + 0x14));
    0x000119c0 sub r0, fp, 0x1b0                             |     r0 -= var_1b0h;
    0x000119c4 str r2, [sp, 8]                               |     var_8h = r2;
    0x000119c8 ldr r2, [r4, 0x10]                            |     r2 = *((r4 + 0x10));
    0x000119cc str r2, [sp, 4]                               |     var_4h = r2;
    0x000119d0 ldr r2, [fp, -0x1c4]                          |     r2 = var_1c4h;
    0x000119d4 ldr r2, [r2, 0x28]                            |     r2 = *((r2 + 0x28));
    0x000119d8 str r2, [sp]                                  |     *(sp) = r2;
    0x000119dc ldr r2, [fp, -0x3c]                           |     r2 = var_3ch;
    0x000119e0 ldr r1, [fp, -0x40]                           |     r1 = var_40h;
    0x000119e4 bl 0x15000                                    |     fcn_00015000 (r0, r1, r2, r3, r4);
    0x000119e8 b 0x118e4                                     |     goto label_18;
                                                             | label_75:
    0x000119ec bl 0x10d54                                    |     r0 = dup ();
    0x000119f0 subs r3, r0, 0                                |     r3 = r0 - 0;
    0x000119f4 str r3, [fp, -0x1d0]                          |     fildes = r3;
                                                             |     if (r3 >= r0) {
    0x000119f8 bge 0x11af0                                   |         goto label_77;
                                                             |     }
    0x000119fc bl 0x10d78                                    |     errno_location ();
    0x00011a00 ldr r5, [pc, 0x358]                           |     
    0x00011a04 ldr r2, [pc, 0x490]                           |     r2 = stderr;
    0x00011a08 ldr r1, [pc, 0x444]                           |     r1 = "continue_";
    0x00011a0c ldr r4, [r0]                                  |     r4 = *(r0);
    0x00011a10 ldr r0, [r5]                                  |     r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011a14 bl 0x10c7c                                    |     fprintf ("nh_Vyqve:x:s:O:f:S:", "continue_", r2, r3, r4, "nh_Vyqve:x:s:O:f:S:")
    0x00011a18 ldr r5, [r5]                                  |     r5 = "nh_Vyqve:x:s:O:f:S:";
                                                             |     do {
    0x00011a1c mov r0, r4                                    |         r0 = r4;
    0x00011a20 bl 0x10bc8                                    |         strerror (r0);
    0x00011a24 ldr r3, [pc, 0x478]                           |         r3 = "%s: error!: cannot write eraseblock %d\n";
    0x00011a28 ldr r1, [pc, 0x478]                           |         r1 = *(0x11ea4);
    0x00011a2c mov r2, 0xb                                   |         r2 = 0xb;
    0x00011a30 str r4, [sp]                                  |         *(sp) = r4;
    0x00011a34 str r0, [sp, 4]                               |         var_4h = r0;
    0x00011a38 mov r0, r5                                    |         r0 = r5;
                                                             | label_19:
    0x00011a3c bl 0x10c7c                                    |         fprintf (r0, r1, r2, "%s: error!: cannot write eraseblock %d\n", r4)
    0x00011a40 b 0x115e4                                     |         goto label_13;
                                                             | label_74:
    0x00011a44 sub r1, fp, 0x18c                             |         r1 -= var_18ch;
    0x00011a48 mov r0, r5                                    |         r0 = r5;
    0x00011a4c bl 0x10bd4                                    |         r0 = stat64 ();
    0x00011a50 subs r1, r0, 0                                |         r1 = r0 - 0;
                                                             |         if (r1 == r0) {
    0x00011a54 beq 0x11a80                                   |             goto label_78;
                                                             |         }
    0x00011a58 bl 0x10d78                                    |         errno_location ();
    0x00011a5c ldr r7, [pc, 0x2fc]                           |         r7 = "nh_Vyqve:x:s:O:f:S:";
    0x00011a60 mov r3, r5                                    |         r3 = r5;
    0x00011a64 ldr r2, [pc, 0x430]                           |         r2 = stderr;
    0x00011a68 ldr r1, [pc, 0x36c]                           |         r1 = "%s: error!: min. I/O unit size should be multiple of sub-page size\n";
    0x00011a6c ldr r4, [r0]                                  |         r4 = *(r0);
    0x00011a70 ldr r0, [r7]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011a74 bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "%s: error!: min. I/O unit size should be multiple of sub-page size\n", r2, r3, r4)
    0x00011a78 ldr r5, [r7]                                  |         r5 = "nh_Vyqve:x:s:O:f:S:";
    0x00011a7c b 0x11a1c                                     |         
                                                             |     } while (1);
                                                             | label_78:
    0x00011a80 sub r3, fp, 0x184                             |     r3 -= var_184h;
    0x00011a84 mov r0, r5                                    |     r0 = r5;
    0x00011a88 ldrd r8, sb, [r3, 0x28]                       |     __asm ("ldrd r8, sb, [var_sp_28h]");
    0x00011a8c bl 0x10d30                                    |     r0 = open64 ();
    0x00011a90 cmn r0, 1                                     |     
    0x00011a94 str r0, [fp, -0x1d0]                          |     fildes = r0;
                                                             |     if (r0 == 1) {
    0x00011a98 bne 0x11ae4                                   |         
    0x00011a9c bl 0x10d78                                    |         errno_location ();
    0x00011aa0 ldr r7, [pc, 0x2b8]                           |         r7 = "nh_Vyqve:x:s:O:f:S:";
    0x00011aa4 ldr r3, [r4, 0x28]                            |         r3 = *((r4 + 0x28));
    0x00011aa8 ldr r2, [pc, 0x3ec]                           |         r2 = stderr;
    0x00011aac ldr r1, [pc, 0x328]                           |         r1 = "%s: error!: min. I/O unit size should be multiple of sub-page size\n";
    0x00011ab0 ldr r5, [r0]                                  |         r5 = *(r0);
    0x00011ab4 ldr r0, [r7]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011ab8 bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "%s: error!: min. I/O unit size should be multiple of sub-page size\n", r2, r3, r4, r5)
    0x00011abc ldr r4, [r7]                                  |         r4 = "nh_Vyqve:x:s:O:f:S:";
                                                             | label_20:
    0x00011ac0 mov r0, r5                                    |         r0 = r5;
    0x00011ac4 bl 0x10bc8                                    |         strerror (r0);
    0x00011ac8 str r5, [sp]                                  |         *(sp) = r5;
    0x00011acc ldr r3, [pc, 0x3d0]                           |         r3 = "%s: error!: cannot write eraseblock %d\n";
    0x00011ad0 mov r2, 0xb                                   |         r2 = 0xb;
    0x00011ad4 ldr r1, [pc, 0x3cc]                           |         r1 = *(0x11ea4);
    0x00011ad8 str r0, [sp, 4]                               |         var_4h = r0;
    0x00011adc mov r0, r4                                    |         r0 = r4;
    0x00011ae0 b 0x11a3c                                     |         goto label_19;
                                                             |     }
    0x00011ae4 ldr r3, [fp, -0x1d0]                          |     r3 = fildes;
    0x00011ae8 cmp r3, 0                                     |     
                                                             |     if (r3 < 0) {
    0x00011aec blt 0x115e4                                   |         goto label_13;
                                                             |     }
                                                             | label_77:
    0x00011af0 ldr r7, [fp, -0x40]                           |     r7 = var_40h;
    0x00011af4 mov r0, r8                                    |     r0 = r8;
    0x00011af8 mov r2, r7                                    |     r2 = r7;
    0x00011afc asr r3, r7, 0x1f                              |     r3 = r7 >> 0x1f;
    0x00011b00 mov r1, sb                                    |     r1 = sb;
    0x00011b04 bl 0x19ad0                                    |     fcn_00019ad0 (r0);
    0x00011b08 ldr r1, [fp, -0x1cc]                          |     r1 = var_1cch;
    0x00011b0c ldr r1, [r1, 0x24]                            |     r1 = *((r1 + 0x24));
    0x00011b10 cmp r0, r1                                    |     
    0x00011b14 str r0, [fp, -0x1dc]                          |     var_1dch = r0;
                                                             |     if (r0 <= r1) {
    0x00011b18 ble 0x11b74                                   |         goto label_79;
                                                             |     }
    0x00011b1c bl 0x10d78                                    |     errno_location ();
    0x00011b20 ldr r7, [pc, 0x238]                           |     r7 = "nh_Vyqve:x:s:O:f:S:";
    0x00011b24 ldr r2, [pc, 0x370]                           |     r2 = stderr;
    0x00011b28 ldr r1, [pc, 0x328]                           |     r1 = "_s:_error_:_failed_to_dup_stdin";
    0x00011b2c ldr r5, [r0]                                  |     r5 = *(r0);
    0x00011b30 strd r8, sb, [sp]                             |     __asm ("strd r8, sb, [sp]");
    0x00011b34 ldr r3, [r4, 0x28]                            |     r3 = *((r4 + 0x28));
    0x00011b38 ldr r0, [r7]                                  |     r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011b3c bl 0x10c7c                                    |     fprintf ("nh_Vyqve:x:s:O:f:S:", "_s:_error_:_failed_to_dup_stdin", r2, r3, r4, r5)
    0x00011b40 mov r0, r5                                    |     r0 = r5;
    0x00011b44 ldr r4, [r7]                                  |     r4 = "nh_Vyqve:x:s:O:f:S:";
    0x00011b48 bl 0x10bc8                                    |     strerror (r0);
    0x00011b4c str r5, [sp]                                  |     *(sp) = r5;
    0x00011b50 ldr r3, [pc, 0x34c]                           |     r3 = "%s: error!: cannot write eraseblock %d\n";
    0x00011b54 mov r2, 0xb                                   |     r2 = 0xb;
    0x00011b58 ldr r1, [pc, 0x348]                           |     r1 = *(0x11ea4);
    0x00011b5c str r0, [sp, 4]                               |     var_4h = r0;
    0x00011b60 mov r0, r4                                    |     r0 = r4;
    0x00011b64 bl 0x10c7c                                    |     fprintf (r0, r1, r2, "%s: error!: cannot write eraseblock %d\n", r4, r5)
                                                             |     do {
    0x00011b68 ldr r0, [fp, -0x1d0]                          |         r0 = fildes;
    0x00011b6c bl 0x10dcc                                    |         close (r0);
    0x00011b70 b 0x115e4                                     |         goto label_13;
                                                             | label_79:
    0x00011b74 orrs r3, r2, r3                               |         r3 = r2 | r3;
                                                             |         if (r3 != r2) {
    0x00011b78 beq 0x11bac                                   |             
    0x00011b7c bl 0x10d78                                    |             errno_location ();
    0x00011b80 ldr sl, [pc, 0x1d8]                           |             sl = obj.stderr;
    0x00011b84 ldr r2, [pc, 0x310]                           |             r2 = stderr;
    0x00011b88 ldr r1, [pc, 0x2cc]                           |             r1 = "%s: error!: file \"%s\" is too large (%lld bytes)\n";
    0x00011b8c ldr r5, [r0]                                  |             r5 = *(r0);
    0x00011b90 str r7, [sp, 8]                               |             var_8h = r7;
    0x00011b94 strd r8, sb, [sp]                             |             __asm ("strd r8, sb, [sp]");
    0x00011b98 ldr r3, [r4, 0x28]                            |             r3 = *((r4 + 0x28));
    0x00011b9c ldr r0, [sl]                                  |             r0 = *(sl);
    0x00011ba0 bl 0x10c7c                                    |             fprintf (r0, "%s: error!: file \"%s\" is too large (%lld bytes)\n", r2, r3, r4, r5)
    0x00011ba4 ldr r4, [sl]                                  |             r4 = *(sl);
    0x00011ba8 b 0x11ac0                                     |             goto label_20;
                                                             |         }
    0x00011bac ldrb r3, [r4]                                 |         r3 = *(r4);
    0x00011bb0 tst r3, 4                                     |         
                                                             |         if ((r3 & 4) != 0) {
    0x00011bb4 beq 0x11bc8                                   |             
    0x00011bb8 ldr r2, [fp, -0x1dc]                          |             r2 = var_1dch;
    0x00011bbc ldr r1, [pc, 0x2d8]                           |             r1 = stderr;
    0x00011bc0 ldr r0, [pc, 0x298]                           |             r0 = "_s:_error_:_file___s___size__lld_bytes__is_not_multiple_of_eraseblock_size___d_bytes_";
    0x00011bc4 bl 0x10bbc                                    |             printf ("_s:_error_:_file___s___size__lld_bytes__is_not_multiple_of_eraseblock_size___d_bytes_", r1, r2)
                                                             |         }
    0x00011bc8 ldr r3, [fp, -0x1dc]                          |         r3 = var_1dch;
    0x00011bcc mov r7, 0                                     |         r7 = 0;
    0x00011bd0 mov r5, r7                                    |         r5 = r7;
    0x00011bd4 str r3, [fp, -0x1e0]                          |         var_1e0h = r3;
    0x00011bd8 str r7, [fp, -0x1d4]                          |         var_1d4h = r7;
                                                             | label_24:
    0x00011bdc ldr r3, [pc, 0x16c]                           |         r3 = *(0x11d4c);
    0x00011be0 ldrb r2, [r3]                                 |         r2 = *(r3);
    0x00011be4 ldr r3, [fp, -0x44]                           |         r3 = var_44h;
    0x00011be8 and r2, r2, 6                                 |         r2 &= 6;
    0x00011bec cmp r5, r3                                    |         
                                                             |         if (r5 >= r3) {
    0x00011bf0 bge 0x123d8                                   |             goto label_80;
                                                             |         }
    0x00011bf4 ldr r3, [fp, -0x40]                           |         r3 = var_40h;
    0x00011bf8 str sp, [fp, -0x1d8]                          |         var_1d8h = sp;
    0x00011bfc add r3, r3, 7                                 |         r3 += 7;
    0x00011c00 bic r3, r3, 7                                 |         r3 = BIT_MASK (r3, 7);
    0x00011c04 sub sp, sp, r3                                |         
    0x00011c08 cmp r2, 0                                     |         
    0x00011c0c add r4, sp, 0x18                              |         r4 += buf;
                                                             |         if (r2 == 0) {
    0x00011c10 bne 0x11c54                                   |             
    0x00011c14 add r0, r5, 1                                 |             r0 = r5 + 1;
    0x00011c18 mov r1, 0x64                                  |             r1 = 0x64;
    0x00011c1c smull r8, sb, r0, r1                          |             r8:sb = r0 * r1;
    0x00011c20 ldr r2, [fp, -0x1e0]                          |             r2 = var_1e0h;
    0x00011c24 mov r0, r8                                    |             r0 = r8;
    0x00011c28 asr r3, r2, 0x1f                              |             r3 = r2 >> 0x1f;
    0x00011c2c mov r1, sb                                    |             r1 = sb;
    0x00011c30 bl 0x19ad0                                    |             fcn_00019ad0 (r0);
    0x00011c34 mov r3, r1                                    |             r3 = r1;
    0x00011c38 mov r2, r0                                    |             r2 = r0;
    0x00011c3c mov r1, r5                                    |             r1 = r5;
    0x00011c40 ldr r0, [pc, 0x21c]                           |             r0 = "%s: will write %d eraseblocks\n";
    0x00011c44 bl 0x10bbc                                    |             printf ("%s: will write %d eraseblocks\n", r1, r2, r3)
    0x00011c48 ldr r3, [pc, 0x244]                           |             r3 = "__write_data";
    0x00011c4c ldr r0, [r3]                                  |             r0 = "__write_data";
    0x00011c50 bl 0x10c40                                    |             fflush ("__write_data");
                                                             |         }
    0x00011c54 ldr r3, [fp, -0x1cc]                          |         r3 = var_1cch;
    0x00011c58 lsl sl, r5, 2                                 |         sl = r5 << 2;
    0x00011c5c ldr r3, [r3]                                  |         r3 = *(r3);
    0x00011c60 ldr r3, [r3, r5, lsl 2]                       |         offset_2 = r5 << 2;
                                                             |         r3 = *((r3 + offset_2));
    0x00011c64 cmn r3, 4                                     |         
                                                             |         if (r3 != 4) {
    0x00011c68 ldreq r3, [fp, -0x1e0]                        |             r3 = var_1e0h;
                                                             |         }
                                                             |         if (r3 != 4) {
    0x00011c6c addeq r3, r3, 1                               |             r3++;
                                                             |         }
                                                             |         if (r3 != 4) {
    0x00011c70 streq r3, [fp, -0x1e0]                        |             var_1e0h = r3;
                                                             |         }
                                                             |         if (r3 == 4) {
    0x00011c74 beq 0x123c8                                   |             goto label_81;
                                                             |         }
    0x00011c78 ldr r3, [pc, 0xd0]                            |         r3 = *(0x11d4c);
    0x00011c7c ldrb r3, [r3]                                 |         r3 = *(r3);
    0x00011c80 tst r3, 4                                     |         
                                                             |         if ((r3 & 4) != 0) {
    0x00011c84 beq 0x11ca4                                   |             
    0x00011c88 mov r2, r5                                    |             r2 = r5;
    0x00011c8c ldr r1, [pc, 0x208]                           |             r1 = stderr;
    0x00011c90 ldr r0, [pc, 0x1d0]                           |             r0 = "ubiformat:_flashing_eraseblock__d_____2lld____complete__";
    0x00011c94 bl 0x10bbc                                    |             printf ("ubiformat:_flashing_eraseblock__d_____2lld____complete__", r1, r2)
    0x00011c98 ldr r3, [pc, 0x1f4]                           |             r3 = "__write_data";
    0x00011c9c ldr r0, [r3]                                  |             r0 = "__write_data";
    0x00011ca0 bl 0x10c40                                    |             fflush ("__write_data");
                                                             |         }
    0x00011ca4 ldr r8, [pc, 0xa4]                            |         r8 = *(0x11d4c);
    0x00011ca8 mov r3, r5                                    |         r3 = r5;
    0x00011cac ldr r2, [r8, 0x30]                            |         r2 = "%s: error!: %s: unable to parse the number '%s'\n";
    0x00011cb0 sub r1, fp, 0x124                             |         r1 -= endptr;
    0x00011cb4 ldr r0, [fp, -0x1c8]                          |         r0 = var_1c8h;
    0x00011cb8 bl 0x177c0                                    |         r0 = fcn_000177c0 ();
    0x00011cbc cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x00011cc0 beq 0x11eb0                                   |             goto label_82;
                                                             |         }
    0x00011cc4 ldrb r3, [r8]                                 |         r3 = *(r8);
    0x00011cc8 tst r3, 2                                     |         
                                                             |         if ((r3 & 2) == 0) {
    0x00011ccc bne 0x11cd8                                   |             
    0x00011cd0 mov r0, 0xa                                   |             r0 = 0xa;
    0x00011cd4 bl 0x10b98                                    |             r0 = putchar (r0);
                                                             |         }
    0x00011cd8 bl 0x10d78                                    |         errno_location ();
    0x00011cdc ldr sb, [pc, 0x7c]                            |         sb = obj.stderr;
    0x00011ce0 mov r3, r5                                    |         r3 = r5;
    0x00011ce4 ldr r2, [pc, 0x1b0]                           |         r2 = stderr;
    0x00011ce8 ldr r1, [pc, 0x17c]                           |         r1 = "_s:_eraseblock__d:_erase";
    0x00011cec ldr r8, [r0]                                  |         r8 = *(r0);
    0x00011cf0 mov r4, r0                                    |         r4 = r0;
    0x00011cf4 ldr r0, [sb]                                  |         r0 = *(sb);
    0x00011cf8 bl 0x10c7c                                    |         fprintf (r0, "_s:_eraseblock__d:_erase", r2, r3, r4)
    0x00011cfc mov r0, r8                                    |         r0 = r8;
    0x00011d00 ldr sb, [sb]                                  |         sb = *(sb);
    0x00011d04 bl 0x10bc8                                    |         strerror (r0);
    0x00011d08 ldr r3, [pc, 0x194]                           |         r3 = "%s: error!: cannot write eraseblock %d\n";
    0x00011d0c str r8, [sp]                                  |         *(sp) = r8;
    0x00011d10 mov r2, 0xb                                   |         r2 = 0xb;
    0x00011d14 ldr r1, [pc, 0x18c]                           |         r1 = *(0x11ea4);
    0x00011d18 str r0, [sp, 4]                               |         var_4h = r0;
    0x00011d1c mov r0, sb                                    |         r0 = sb;
    0x00011d20 bl 0x10c7c                                    |         fprintf (r0, r1, r2, "%s: error!: cannot write eraseblock %d\n")
    0x00011d24 ldr r3, [r4]                                  |         r3 = *(r4);
    0x00011d28 cmp r3, 5                                     |         
                                                             |         if (r3 == 5) {
    0x00011d2c bne 0x11d48                                   |             
    0x00011d30 mov r2, r5                                    |             r2 = r5;
    0x00011d34 ldr r1, [fp, -0x1cc]                          |             r1 = var_1cch;
    0x00011d38 sub r0, fp, 0x124                             |             r0 -= endptr;
    0x00011d3c bl 0x126e4                                    |             r0 = fcn_000126e4 (r0, r1);
    0x00011d40 cmp r0, 0                                     |             
                                                             |             if (r0 == 0) {
    0x00011d44 beq 0x123c8                                   |                 goto label_81;
                                                             |             }
                                                             |         }
                                                             | label_21:
    0x00011d48 ldr sp, [fp, -0x1d8]                          |         sp = var_1d8h;
    0x00011d4c b 0x11b68                                     |         
                                                             |     } while (1);
                                                             | label_82:
    0x00011eb0 cmp r7, 0                                     |     
                                                             |     if (r7 != 0) {
    0x00011eb4 ldreq r7, [fp, -0x40]                         |         r7 = var_40h;
                                                             |     }
                                                             |     if (r7 != 0) {
    0x00011eb8 moveq sb, r4                                  |         sb = r4;
                                                             |     }
    0x00011ebc beq 0x12010                                   |     
                                                             |     while (r7 == 0) {
    0x00011ec0 ldr r1, [pc, -0x1c]                           |         r1 = *(0x00011eac);
    0x00011ec4 ldrb r3, [r1]                                 |         r3 = *(r1);
    0x00011ec8 ands r2, r3, 8                                |         r2 = r3 & 8;
                                                             |         if (r2 == r3) {
    0x00011ecc ldrne r7, [r1, 0x20]                          |             r7 = *((r1 + 0x20));
                                                             |         }
                                                             |         if (r2 == r3) {
    0x00011ed0 ldrne sl, [r1, 0x24]                          |             sl = *((r1 + 0x24));
                                                             |         }
                                                             |         if (r2 == r3) {
    0x00011ed4 bne 0x11efc                                   |             
    0x00011ed8 ldr r1, [fp, -0x1cc]                          |             r1 = var_1cch;
    0x00011edc ldr r1, [r1]                                  |             r1 = *(r1);
    0x00011ee0 ldr r7, [r1, sl]                              |             r7 = *((r1 + sl));
    0x00011ee4 cmp r7, 0                                     |             
                                                             |             if (r7 >= 0) {
    0x00011ee8 ldrlt r2, [fp, -0x1cc]                        |                 r2 = var_1cch;
                                                             |             }
                                                             |             if (r7 < 0) {
    0x00011eec addge r7, r7, 1                               |                 r7++;
                                                             |             }
                                                             |             if (r7 >= 0) {
    0x00011ef0 ldrlt r7, [r2, 8]                             |                 r7 = *((r2 + 8));
                                                             |             }
                                                             |             if (r7 >= 0) {
    0x00011ef4 ldrlt sl, [r2, 0xc]                           |                 sl = *((r2 + 0xc));
                                                             |             }
                                                             |             if (r7 >= 0) {
    0x00011ef8 movge sl, r2                                  |                 sl = r2;
                                                             |                 goto label_83;
                                                             |             }
                                                             |         }
                                                             | label_83:
    0x00011efc tst r3, 4                                     |         
                                                             |         if ((r3 & 4) != 0) {
    0x00011f00 beq 0x11f20                                   |             
    0x00011f04 mov r3, sl                                    |             r3 = sl;
    0x00011f08 mov r2, r7                                    |             r2 = r7;
    0x00011f0c ldr r0, [pc, -0xa4]                           |             r0 = ", change EC to %lld";
    0x00011f10 bl 0x10bbc                                    |             printf (", change EC to %lld", r1, r2, r3)
    0x00011f14 ldr r3, [pc, -0x88]                           |             r3 = obj.stdout;
    0x00011f18 ldr r0, [r3]                                  |             r0 = *(r3);
    0x00011f1c bl 0x10c40                                    |             fflush (r0);
                                                             |         }
    0x00011f20 ldrb r3, [r4, 1]                              |         r3 = var_1h;
    0x00011f24 ldrb r2, [r4]                                 |         r2 = *(r4);
    0x00011f28 ldr r8, [fp, -0x190]                          |         r8 = var_190h;
    0x00011f2c orr r2, r2, r3, lsl 8                         |         r2 |= (r3 << 8);
    0x00011f30 ldrb r3, [r4, 2]                              |         r3 = var_2h;
    0x00011f34 orr r2, r2, r3, lsl 16                        |         r2 |= (r3 << 16);
    0x00011f38 ldrb r3, [r4, 3]                              |         r3 = var_3h;
    0x00011f3c orr r2, r2, r3, lsl 24                        |         r2 |= (r3 << 24);
    0x00011f40 lsr r3, r2, 0x18                              |         r3 = r2 >> 0x18;
    0x00011f44 lsl r1, r2, 8                                 |         r1 = r2 << 8;
    0x00011f48 orr r3, r3, r2, lsl 24                        |         r3 |= (r2 << 24);
    0x00011f4c and r1, r1, 0xff0000                          |         r1 &= 0xff0000;
    0x00011f50 lsr r2, r2, 8                                 |         r2 >>= 8;
    0x00011f54 and r2, r2, 0xff00                            |         r2 &= 0xff00;
    0x00011f58 orr r3, r3, r1                                |         r3 |= r1;
    0x00011f5c orr r3, r3, r2                                |         r3 |= r2;
    0x00011f60 ldr r2, [pc, -0xf4]                           |         r2 = *(0x00011e74);
    0x00011f64 cmp r3, r2                                    |         
                                                             |         if (r3 == r2) {
    0x00011f68 beq 0x120a0                                   |             goto label_84;
                                                             |         }
    0x00011f6c str r2, [sp]                                  |         *(sp) = r2;
    0x00011f70 ldr r1, [pc, -0x100]                          |         r1 = "%s: error!: bad UBI magic %#08x, should be %#08x\n";
    0x00011f74 ldr r2, [pc, -0xe0]                           |         r2 = "ubiformat";
                                                             | label_23:
    0x00011f78 ldr r0, [pc, -0xe8]                           |         r0 = obj.stderr;
    0x00011f7c ldr r0, [r0]                                  |         r0 = *(r0);
    0x00011f80 bl 0x10c7c                                    |         fprintf (r0, "%s: error!: bad UBI magic %#08x, should be %#08x\n", r2)
    0x00011f84 ldr r3, [pc, -0xe0]                           |         r3 = *(0x00011eac);
    0x00011f88 ldr r0, [pc, -0xf8]                           |         r0 = obj.stderr;
    0x00011f8c ldr r3, [r3, 0x28]                            |         r3 = *((r3 + 0x28));
    0x00011f90 ldr r2, [pc, -0xfc]                           |         r2 = "ubiformat";
    0x00011f94 str r3, [sp]                                  |         *(sp) = r3;
    0x00011f98 ldr r3, [fp, -0x1d4]                          |         r3 = var_1d4h;
    0x00011f9c ldr r1, [pc, -0x128]                          |         r1 = "_s:_error_:_bad_EC_header_at_eraseblock__d_of___s_";
    0x00011fa0 ldr r0, [r0]                                  |         r0 = *(r0);
    0x00011fa4 bl 0x10c7c                                    |         fprintf (r0, "_s:_error_:_bad_EC_header_at_eraseblock__d_of___s_", "ubiformat", r3)
    0x00011fa8 b 0x11d48                                     |         goto label_21;
                                                             |         if (r3 <= r2) {
                                                             | label_22:
    0x00011fac addgt sb, sb, r0                              |             sb += r0;
                                                             |         }
                                                             |         if (r3 <= r2) {
    0x00011fb0 subgt r7, r7, r0                              |             r7 -= r0;
                                                             |         }
                                                             |         if (r3 <= r2) {
    0x00011fb4 bgt 0x12010                                   |             
    0x00011fb8 bl 0x10d78                                    |             r0 = errno_location ();
    0x00011fbc ldr r8, [r0]                                  |             r8 = *(r0);
    0x00011fc0 cmp r8, 0xb                                   |             
    0x00011fc4 cmpne r8, 4                                   |             __asm ("cmpne r8, 4");
                                                             |             if (r8 == 0xb) {
    0x00011fc8 beq 0x12010                                   |                 goto label_85;
                                                             |             }
    0x00011fcc ldr r4, [pc, -0x13c]                          |             r4 = obj.stderr;
    0x00011fd0 mov r3, r7                                    |             r3 = r7;
    0x00011fd4 ldr r2, [pc, -0x140]                          |             r2 = "ubiformat";
    0x00011fd8 ldr r1, [pc, -0x160]                          |             r1 = "_s:_error_:_reading_failed___zu_bytes_remaining";
    0x00011fdc ldr r0, [r4]                                  |             r0 = *(r4);
    0x00011fe0 bl 0x10c7c                                    |             fprintf (r0, "_s:_error_:_reading_failed___zu_bytes_remaining", "ubiformat", r3, r4)
    0x00011fe4 mov r0, r8                                    |             r0 = r8;
    0x00011fe8 ldr r4, [r4]                                  |             r4 = *(r4);
    0x00011fec bl 0x10bc8                                    |             strerror (r0);
    0x00011ff0 str r8, [sp]                                  |             *(sp) = r8;
    0x00011ff4 ldr r3, [pc, -0x158]                          |             r3 = *(0x00011ea4);
    0x00011ff8 mov r2, 0xb                                   |             r2 = 0xb;
    0x00011ffc ldr r1, [pc, -0x15c]                          |             r1 = "_serror__d___s_";
    0x00012000 str r0, [sp, 4]                               |             var_4h = r0;
    0x00012004 mov r0, r4                                    |             r0 = r4;
    0x00012008 bl 0x10c7c                                    |             fprintf (r0, "_serror__d___s_", r2, r3)
    0x0001200c b 0x12048                                     |             goto label_86;
                                                             |         }
                                                             | label_85:
    0x00012010 cmp r7, 0                                     |         
    0x00012014 beq 0x11ec0                                   |         
                                                             |     }
    0x00012018 mov r2, r7                                    |     r2 = r7;
    0x0001201c mov r1, sb                                    |     r1 = sb;
    0x00012020 ldr r0, [fp, -0x1d0]                          |     r0 = fildes;
    0x00012024 bl 0x10cac                                    |     r0 = read (r0, r1, r2);
    0x00012028 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x0001202c bne 0x11fac                                   |         goto label_22;
                                                             |     }
    0x00012030 ldr r0, [pc, -0x1a0]                          |     r0 = obj.stderr;
    0x00012034 mov r3, r7                                    |     r3 = r7;
    0x00012038 ldr r2, [pc, -0x1a4]                          |     r2 = "ubiformat";
    0x0001203c ldr r1, [pc, -0x1c0]                          |     r1 = "_s:_error_:_eof_reached___zu_bytes_remaining";
    0x00012040 ldr r0, [r0]                                  |     r0 = *(r0);
    0x00012044 bl 0x10c7c                                    |     r0 = fprintf (r0, "_s:_error_:_eof_reached___zu_bytes_remaining", "ubiformat", r3)
                                                             | label_86:
    0x00012048 bl 0x10d78                                    |     errno_location ();
    0x0001204c ldr r3, [pc, -0x1a8]                          |     r3 = *(0x00011eac);
    0x00012050 ldr r5, [pc, -0x1c0]                          |     r5 = obj.stderr;
    0x00012054 ldr r3, [r3, 0x28]                            |     r3 = *((r3 + 0x28));
    0x00012058 ldr r2, [pc, -0x1c4]                          |     r2 = "ubiformat";
    0x0001205c ldr r1, [pc, -0x1dc]                          |     r1 = "%s: error!: failed to read eraseblock %d from \"%s\"\n";
    0x00012060 ldr r4, [r0]                                  |     r4 = *(r0);
    0x00012064 str r3, [sp]                                  |     *(sp) = r3;
    0x00012068 ldr r3, [fp, -0x1d4]                          |     r3 = var_1d4h;
    0x0001206c ldr r0, [r5]                                  |     r0 = *(r5);
    0x00012070 bl 0x10c7c                                    |     fprintf (r0, "%s: error!: failed to read eraseblock %d from \"%s\"\n", "ubiformat", r3, r4, r5)
    0x00012074 mov r0, r4                                    |     r0 = r4;
    0x00012078 ldr r5, [r5]                                  |     r5 = *(r5);
    0x0001207c bl 0x10bc8                                    |     strerror (r0);
    0x00012080 str r4, [sp]                                  |     *(sp) = r4;
    0x00012084 ldr r3, [pc, -0x1e8]                          |     r3 = *(0x00011ea4);
    0x00012088 mov r2, 0xb                                   |     r2 = 0xb;
    0x0001208c ldr r1, [pc, -0x1ec]                          |     r1 = "_serror__d___s_";
    0x00012090 str r0, [sp, 4]                               |     var_4h = r0;
    0x00012094 mov r0, r5                                    |     r0 = r5;
    0x00012098 bl 0x10c7c                                    |     fprintf (r0, "_serror__d___s_", r2, r3, r4)
    0x0001209c b 0x11d48                                     |     goto label_21;
                                                             | label_84:
    0x000120a0 mov r2, 0x3c                                  |     r2 = 0x3c;
    0x000120a4 mov r1, r4                                    |     r1 = r4;
    0x000120a8 mvn r0, 0                                     |     r0 = ~0;
    0x000120ac bl 0x18624                                    |     fcn_00018624 (r0);
    0x000120b0 ldrb r2, [r4, 0x3d]                           |     r2 = var_3dh;
    0x000120b4 ldrb r1, [r4, 0x3c]                           |     r1 = var_1b0h;
    0x000120b8 orr r1, r1, r2, lsl 8                         |     r1 |= (r2 << 8);
    0x000120bc ldrb r2, [r4, 0x3e]                           |     r2 = var_3eh;
    0x000120c0 orr r1, r1, r2, lsl 16                        |     r1 |= (r2 << 16);
    0x000120c4 ldrb r2, [r4, 0x3f]                           |     r2 = var_3fh;
    0x000120c8 orr r1, r1, r2, lsl 24                        |     r1 |= (r2 << 24);
    0x000120cc lsr r2, r1, 0x18                              |     r2 = r1 >> 0x18;
    0x000120d0 orr r2, r2, r1, lsl 24                        |     r2 |= (r1 << 24);
    0x000120d4 mov r3, r0                                    |     r3 = r0;
    0x000120d8 lsl r0, r1, 8                                 |     r0 = r1 << 8;
    0x000120dc and r0, r0, 0xff0000                          |     r0 &= 0xff0000;
    0x000120e0 lsr r1, r1, 8                                 |     r1 >>= 8;
    0x000120e4 orr r2, r2, r0                                |     r2 |= r0;
    0x000120e8 and r1, r1, 0xff00                            |     r1 &= 0xff00;
    0x000120ec orr r2, r2, r1                                |     r2 |= r1;
    0x000120f0 cmp r3, r2                                    |     
                                                             |     if (r3 == r2) {
    0x000120f4 strne r2, [sp]                                |         *(sp) = r2;
                                                             |     }
                                                             |     if (r3 == r2) {
    0x000120f8 ldrne r1, [pc, -0x274]                        |         r1 = "%s: error!: bad CRC %#08x, should be %#08x\n\n";
                                                             |     }
                                                             |     if (r3 != r2) {
    0x000120fc ldrne r2, [pc, -0x268]                        |         r2 = "ubiformat";
                                                             |         goto label_87;
                                                             |     }
                                                             |     if (r3 != r2) {
                                                             | label_87:
    0x00012100 bne 0x11f78                                   |         goto label_23;
                                                             |     }
    0x00012104 lsr r3, r8, 0x18                              |     r3 = r8 >> 0x18;
    0x00012108 lsl r2, r8, 8                                 |     r2 = r8 << 8;
    0x0001210c orr r3, r3, r8, lsl 24                        |     r3 |= (r8 << 24);
    0x00012110 and r2, r2, 0xff0000                          |     r2 &= 0xff0000;
    0x00012114 lsr r8, r8, 8                                 |     r8 >>= 8;
    0x00012118 orr r3, r3, r2                                |     r3 |= r2;
    0x0001211c and r8, r8, 0xff00                            |     r8 &= 0xff00;
    0x00012120 orr r3, r3, r8                                |     r3 |= r8;
    0x00012124 lsr r2, r3, 8                                 |     r2 = r3 >> 8;
    0x00012128 mov ip, 0                                     |     
    0x0001212c strb r3, [r4, 0x18]                           |     var_1d4h = r3;
    0x00012130 strb r2, [r4, 0x19]                           |     var_19h = r2;
    0x00012134 lsl r1, r7, 0x18                              |     r1 = r7 << 0x18;
    0x00012138 lsr r2, r3, 0x10                              |     r2 = r3 >> 0x10;
    0x0001213c lsr r3, r3, 0x18                              |     r3 >>= 0x18;
    0x00012140 strb r3, [r4, 0x1b]                           |     var_1bh = r3;
    0x00012144 orr r3, ip, r1                                |     r3 = ip | r1;
    0x00012148 lsl r1, r7, 8                                 |     r1 = r7 << 8;
    0x0001214c and sb, r1, 0xff0000                          |     sb = r1 & 0xff0000;
    0x00012150 orr r1, r3, sb                                |     r1 = r3 | sb;
    0x00012154 lsr r8, sl, 0x18                              |     r8 = sl >> 0x18;
    0x00012158 lsl r3, sl, 0x18                              |     r3 = sl << 0x18;
    0x0001215c strb r2, [r4, 0x1a]                           |     var_1ah = r2;
    0x00012160 orr r3, r3, r7, lsr 8                         |     r3 |= (r7 >> 8);
    0x00012164 orr r2, r8, ip                                |     r2 = r8 | ip;
    0x00012168 mov r8, 0                                     |     r8 = 0;
    0x0001216c orr r0, r2, r8                                |     r0 = r2 | r8;
    0x00012170 and sb, r3, 0xff00                            |     sb = r3 & 0xff00;
    0x00012174 mov r8, 0                                     |     r8 = 0;
    0x00012178 orr r3, r1, sb                                |     r3 = r1 | sb;
    0x0001217c orr r2, r0, r8                                |     r2 = r0 | r8;
    0x00012180 lsl sb, sl, 8                                 |     sb = sl << 8;
    0x00012184 mov r0, 0                                     |     r0 = 0;
    0x00012188 orr r8, r2, r0                                |     r8 = r2 | r0;
    0x0001218c orr sb, sb, r7, lsr 24                        |     sb |= (r7 >> 24);
    0x00012190 and r1, sb, 0xff                              |     r1 = sb & 0xff;
    0x00012194 mov r2, r8                                    |     r2 = r8;
    0x00012198 lsr r8, r7, 8                                 |     r8 = r7 >> 8;
    0x0001219c orr sb, r3, r1                                |     sb = r3 | r1;
    0x000121a0 orr r8, r8, sl, lsl 24                        |     r8 |= (sl << 24);
    0x000121a4 and r0, r8, 0xff000000                        |     r0 = r8 & 0xff000000;
    0x000121a8 mov r3, sb                                    |     r3 = sb;
    0x000121ac mov r1, 0                                     |     r1 = 0;
    0x000121b0 orr r2, r2, r0                                |     r2 |= r0;
    0x000121b4 orr r3, r3, r1                                |     r3 |= r1;
    0x000121b8 lsr r0, r7, 0x18                              |     r0 = r7 >> 0x18;
    0x000121bc sub r1, fp, 0x1ec                             |     r1 -= buf;
    0x000121c0 strd r2, r3, [r1]                             |     __asm ("strd r2, r3, [r1]");
    0x000121c4 orr r0, r0, sl, lsl 8                         |     r0 |= (sl << 8);
    0x000121c8 mov r3, 0                                     |     r3 = 0;
    0x000121cc mov r1, r3                                    |     r1 = r3;
    0x000121d0 and r2, r0, 0xff0000                          |     r2 = r0 & 0xff0000;
    0x000121d4 sub r3, fp, 0x1ec                             |     r3 -= buf;
    0x000121d8 mov r0, r2                                    |     r0 = r2;
    0x000121dc ldrd r2, r3, [r3]                             |     __asm ("ldrd r2, r3, [r3]");
    0x000121e0 lsr sb, sl, 8                                 |     sb = sl >> 8;
    0x000121e4 orr r2, r2, r0                                |     r2 |= r0;
    0x000121e8 mov r0, r2                                    |     r0 = r2;
    0x000121ec orr r3, r3, r1                                |     r3 |= r1;
    0x000121f0 and r2, sb, 0xff00                            |     r2 = sb & 0xff00;
    0x000121f4 orr r8, r0, r2                                |     r8 = r0 | r2;
    0x000121f8 mov r1, r3                                    |     r1 = r3;
    0x000121fc mov r3, 0                                     |     r3 = 0;
    0x00012200 orr sb, r1, r3                                |     sb = r1 | r3;
    0x00012204 lsr r3, r8, 8                                 |     r3 = r8 >> 8;
    0x00012208 strb r3, [r4, 9]                              |     var_9h = r3;
    0x0001220c lsr r3, r8, 0x10                              |     r3 = r8 >> 0x10;
    0x00012210 strb r3, [r4, 0xa]                            |     var_ah = r3;
    0x00012214 lsr r3, r8, 0x18                              |     r3 = r8 >> 0x18;
    0x00012218 strb r3, [r4, 0xb]                            |     var_bh = r3;
    0x0001221c lsr r3, sb, 8                                 |     r3 = sb >> 8;
    0x00012220 strb r3, [r4, 0xd]                            |     var_dh = r3;
    0x00012224 lsr r3, sb, 0x10                              |     r3 = sb >> 0x10;
    0x00012228 strb r3, [r4, 0xe]                            |     var_eh = r3;
    0x0001222c lsr r3, sb, 0x18                              |     r3 = sb >> 0x18;
    0x00012230 strb r3, [r4, 0xf]                            |     var_fh = r3;
    0x00012234 mov r2, 0x3c                                  |     r2 = 0x3c;
    0x00012238 strb r8, [r4, 8]                              |     var_8h_2 = r8;
    0x0001223c strb sb, [r4, 0xc]                            |     var_1e0h = sb;
    0x00012240 mov r1, r4                                    |     r1 = r4;
    0x00012244 mvn r0, 0                                     |     r0 = ~0;
    0x00012248 bl 0x18624                                    |     r0 = fcn_00018624 (r0);
    0x0001224c lsr r3, r0, 0x18                              |     r3 = r0 >> 0x18;
    0x00012250 lsl r2, r0, 8                                 |     r2 = r0 << 8;
    0x00012254 orr r3, r3, r0, lsl 24                        |     r3 |= (r0 << 24);
    0x00012258 and r2, r2, 0xff0000                          |     r2 &= 0xff0000;
    0x0001225c lsr r0, r0, 8                                 |     r0 >>= 8;
    0x00012260 orr r3, r3, r2                                |     r3 |= r2;
    0x00012264 and r0, r0, 0xff00                            |     r0 &= 0xff00;
    0x00012268 orr r0, r3, r0                                |     r0 = r3 | r0;
    0x0001226c lsr r3, r0, 8                                 |     r3 = r0 >> 8;
    0x00012270 strb r3, [r4, 0x3d]                           |     var_3dh = r3;
    0x00012274 lsr r3, r0, 0x10                              |     r3 = r0 >> 0x10;
    0x00012278 strb r3, [r4, 0x3e]                           |     var_3eh = r3;
    0x0001227c ldr r3, [pc, -0x3d8]                          |     r3 = *(0x00011eac);
    0x00012280 strb r0, [r4, 0x3c]                           |     var_1b0h = r0;
    0x00012284 ldrb r3, [r3]                                 |     r3 = *(r3);
    0x00012288 lsr r0, r0, 0x18                              |     r0 >>= 0x18;
    0x0001228c tst r3, 4                                     |     
    0x00012290 strb r0, [r4, 0x3f]                           |     var_3fh = r0;
                                                             |     if ((r3 & 4) != 0) {
    0x00012294 beq 0x122ac                                   |         
    0x00012298 ldr r0, [pc, -0x410]                          |         r0 = "__write_data";
    0x0001229c bl 0x10c1c                                    |         puts ("__write_data");
    0x000122a0 ldr r3, [pc, -0x414]                          |         r3 = obj.stdout;
    0x000122a4 ldr r0, [r3]                                  |         r0 = *(r3);
    0x000122a8 bl 0x10c40                                    |         fflush (r0);
                                                             |     }
    0x000122ac ldr r0, [fp, -0x40]                           |     r0 = var_40h;
                                                             |     do {
    0x000122b0 sub r0, r0, 1                                 |         r0--;
    0x000122b4 cmp r0, 0                                     |         
                                                             |         if (r0 < 0) {
    0x000122b8 blt 0x122c8                                   |             goto label_88;
                                                             |         }
    0x000122bc ldrb r3, [r4, r0]                             |         r3 = *((r4 + r0));
    0x000122c0 cmp r3, 0xff                                  |         
    0x000122c4 beq 0x122b0                                   |         
                                                             |     } while (r3 == 0xff);
                                                             | label_88:
    0x000122c8 ldr r7, [fp, -0x3c]                           |     r7 = var_3ch;
    0x000122cc mov r1, r7                                    |     r1 = r7;
    0x000122d0 add r0, r0, r7                                |     r0 += r7;
    0x000122d4 bl 0x199d4                                    |     fcn_000199d4 (r0, r1);
    0x000122d8 mov r3, 0                                     |     r3 = 0;
    0x000122dc str r3, [sp, 0x14]                            |     var_14h = r3;
    0x000122e0 str r3, [sp, 0x10]                            |     var_10h = r3;
    0x000122e4 str r3, [sp, 0xc]                             |     var_ch = r3;
    0x000122e8 stm sp, {r3, r4}                              |     *(sp) = r3;
                                                             |     *((sp + 4)) = r4;
    0x000122ec sub r1, fp, 0x124                             |     r1 -= endptr;
    0x000122f0 mov r3, r5                                    |     r3 = r5;
    0x000122f4 mul r2, r7, r0                                |     r2 = r7 * r0;
    0x000122f8 str r2, [sp, 8]                               |     var_8h = r2;
    0x000122fc ldr r2, [pc, -0x458]                          |     r2 = *(0x00011eac);
    0x00012300 ldr r0, [fp, -0x1c8]                          |     r0 = var_1c8h;
    0x00012304 ldr r2, [r2, 0x30]                            |     r2 = *((r2 + 0x30));
    0x00012308 bl 0x17c0c                                    |     r0 = fcn_00017c0c (r0, r1, r2, r3, r4, r5, r6);
    0x0001230c subs r7, r0, 0                                |     r7 = r0 - 0;
                                                             |     if (r7 == r0) {
    0x00012310 beq 0x123ac                                   |         goto label_89;
                                                             |     }
    0x00012314 bl 0x10d78                                    |     errno_location ();
    0x00012318 ldr r8, [pc, -0x488]                          |     r8 = obj.stderr;
    0x0001231c mov r3, r5                                    |     r3 = r5;
    0x00012320 ldr r2, [pc, -0x48c]                          |     r2 = "ubiformat";
    0x00012324 ldr r1, [pc, -0x48c]                          |     r1 = "%s: error!: cannot write eraseblock %d\n";
    0x00012328 ldr r7, [r0]                                  |     r7 = *(r0);
    0x0001232c mov r4, r0                                    |     r4 = r0;
    0x00012330 ldr r0, [r8]                                  |     r0 = *(r8);
    0x00012334 bl 0x10c7c                                    |     fprintf (r0, "%s: error!: cannot write eraseblock %d\n", "ubiformat", r3, r4)
    0x00012338 mov r0, r7                                    |     r0 = r7;
    0x0001233c ldr r8, [r8]                                  |     r8 = *(r8);
    0x00012340 bl 0x10bc8                                    |     strerror (r0);
    0x00012344 ldr r3, [pc, -0x4a8]                          |     r3 = *(0x00011ea4);
    0x00012348 str r7, [sp]                                  |     *(sp) = r7;
    0x0001234c mov r2, 0xb                                   |     r2 = 0xb;
    0x00012350 ldr r1, [pc, -0x4b0]                          |     r1 = "_serror__d___s_";
    0x00012354 str r0, [sp, 4]                               |     var_4h = r0;
    0x00012358 mov r0, r8                                    |     r0 = r8;
    0x0001235c bl 0x10c7c                                    |     fprintf (r0, "_serror__d___s_", r2, r3)
    0x00012360 ldr r3, [r4]                                  |     r3 = *(r4);
    0x00012364 cmp r3, 5                                     |     
                                                             |     if (r3 != 5) {
    0x00012368 bne 0x11d48                                   |         goto label_21;
                                                             |     }
    0x0001236c ldr r2, [pc, -0x4c8]                          |     r2 = *(0x00011eac);
    0x00012370 mov r3, r5                                    |     r3 = r5;
    0x00012374 ldr r2, [r2, 0x30]                            |     r2 = *((r2 + 0x30));
    0x00012378 sub r1, fp, 0x124                             |     r1 -= endptr;
    0x0001237c ldr r0, [fp, -0x1c8]                          |     r0 = var_1c8h;
    0x00012380 bl 0x17fdc                                    |     r0 = fcn_00017fdc (r0, r1);
    0x00012384 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00012388 beq 0x123a4                                   |         goto label_90;
                                                             |     }
    0x0001238c mov r2, r5                                    |     r2 = r5;
    0x00012390 ldr r1, [fp, -0x1cc]                          |     r1 = var_1cch;
    0x00012394 sub r0, fp, 0x124                             |     r0 -= endptr;
    0x00012398 bl 0x126e4                                    |     r0 = fcn_000126e4 (r0, r1);
    0x0001239c cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x000123a0 bne 0x11d48                                   |         goto label_21;
                                                             |     }
                                                             | label_90:
    0x000123a4 mov r7, 1                                     |     r7 = 1;
    0x000123a8 b 0x123c8                                     |     goto label_81;
                                                             | label_89:
    0x000123ac ldr r3, [fp, -0x1d4]                          |     r3 = var_1d4h;
    0x000123b0 add r3, r3, 1                                 |     r3++;
    0x000123b4 str r3, [fp, -0x1d4]                          |     var_1d4h = r3;
    0x000123b8 ldr r2, [fp, -0x1d4]                          |     r2 = var_1d4h;
    0x000123bc ldr r3, [fp, -0x1dc]                          |     r3 = var_1dch;
    0x000123c0 cmp r3, r2                                    |     
                                                             |     if (r3 > r2) {
    0x000123c4 ble 0x123d4                                   |         
                                                             | label_81:
    0x000123c8 ldr sp, [fp, -0x1d8]                          |         sp = var_1d8h;
    0x000123cc add r5, r5, 1                                 |         r5++;
    0x000123d0 b 0x11bdc                                     |         goto label_24;
                                                             |     }
    0x000123d4 ldr sp, [fp, -0x1d8]                          |     sp = var_1d8h;
                                                             | label_80:
    0x000123d8 ldr r3, [pc, -0x534]                          |     r3 = *(0x00011eac);
    0x000123dc ldrb r3, [r3]                                 |     r3 = *(r3);
    0x000123e0 tst r3, 6                                     |     
                                                             |     if ((r3 & 6) == 0) {
    0x000123e4 bne 0x123f0                                   |         
    0x000123e8 mov r0, 0xa                                   |         r0 = 0xa;
    0x000123ec bl 0x10b98                                    |         putchar (r0);
                                                             |     }
    0x000123f0 ldr r0, [fp, -0x1d0]                          |     r0 = fildes;
    0x000123f4 bl 0x10dcc                                    |     close (r0);
    0x000123f8 mov r3, 1                                     |     r3 = 1;
    0x000123fc add r5, r5, r3                                |     r5 += r3;
    0x00012400 str r3, [sp, 4]                               |     var_4h = r3;
    0x00012404 str r5, [sp]                                  |     *(sp) = r5;
    0x00012408 ldr r3, [fp, -0x1c4]                          |     r3 = var_1c4h;
                                                             | label_25:
    0x0001240c sub r2, fp, 0x1b0                             |     r2 -= var_1b0h;
    0x00012410 sub r1, fp, 0x124                             |     r1 -= endptr;
    0x00012414 ldr r0, [fp, -0x1c8]                          |     r0 = var_1c8h;
    0x00012418 bl 0x12838                                    |     r0 = fcn_00012838 (r0, r1, r2, r3, r4);
    0x0001241c cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00012420 bne 0x115e4                                   |         goto label_13;
                                                             |     }
    0x00012424 ldr r0, [fp, -0x1c4]                          |     r0 = var_1c4h;
    0x00012428 bl 0x198f0                                    |     fcn_000198f0 (r0);
    0x0001242c ldr r3, [pc, -0x588]                          |     r3 = *(0x00011eac);
    0x00012430 mov r6, 0                                     |     r6 = 0;
    0x00012434 ldr r0, [r3, 0x30]                            |     r0 = *((r3 + 0x30));
    0x00012438 bl 0x10dcc                                    |     close (r0);
    0x0001243c ldr r0, [fp, -0x1c8]                          |     r0 = var_1c8h;
    0x00012440 bl 0x16b38                                    |     fcn_00016b38 (r0);
    0x00012444 b 0x10fac                                     |     goto label_6;
                                                             | label_73:
    0x00012448 str r5, [sp, 4]                               |     var_4h = r5;
    0x0001244c str r5, [sp]                                  |     *(sp) = r5;
    0x00012450 ldr r3, [fp, -0x1cc]                          |     r3 = var_1cch;
    0x00012454 b 0x1240c                                     |     goto label_25;
                                                             | }

[*] Function printf used 114 times ubiformat